From 2b36c70761067cabb0c69fb68a077f498e1e29ec Mon Sep 17 00:00:00 2001 From: Stuart Halloway and Stuart Sierra Date: Fri, 17 Sep 2010 13:54:36 -0400 Subject: [PATCH] combine ns/var/path into breadcrumb --- src/mycroft/data.clj | 19 ++++++++++++------- src/mycroft/main.clj | 5 ++--- src/mycroft/namespace.clj | 6 +++--- src/mycroft/reflect.clj | 9 +++++---- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/mycroft/data.clj b/src/mycroft/data.clj index 9a0d458..cab207a 100644 --- a/src/mycroft/data.clj +++ b/src/mycroft/data.clj @@ -2,7 +2,8 @@ (:use [hiccup.page-helpers :only (encode-params)] clojure.pprint) (:require [mycroft.docs :as docs] - [mycroft.reflect :as reflect])) + [mycroft.reflect :as reflect] + [mycroft.namespace :as namespace])) (defn indexed "Returns a lazy sequence of [index, item] pairs, where items come @@ -101,7 +102,7 @@ [options] (let [selector (:selector options) first-crumb (if (= ::deref (first (:selector options))) 2 1)] - [:div + [:span (->> (map (fn [n] (subvec selector 0 n)) (range first-crumb (count selector))) (map (fn [partial-selector] [:span @@ -117,15 +118,19 @@ :meta : true to look at metadata instead of data :start : start at the nth item :count : how many items to show" - [obj options] + [var options] (let [options (normalize-options options) selector (:selector options) - selection (select obj selector)] + selection (select var selector)] [:div + (namespace/namespace-link (.ns var)) + "/" + (namespace/var-link (.ns var) (.sym var)) (render-breadcrumb options) - [:a {:href (url (add-selector options ::meta))} "metadata"] - " | " - [:a {:href (url (add-selector options ::reflect))} "reflect"] + [:div + [:a {:href (url (add-selector options ::meta))} "metadata"] + " | " + [:a {:href (url (add-selector options ::reflect))} "reflect"]] (render-type selection options)])) (defn render-string diff --git a/src/mycroft/main.clj b/src/mycroft/main.clj index 65dee4f..6489cb9 100644 --- a/src/mycroft/main.clj +++ b/src/mycroft/main.clj @@ -28,8 +28,7 @@ "/javascripts/shCore.js" "/javascripts/shBrushClojure.js")] [:body {:id "browser"} - [:div {:id "header"} - [:h2 title]] + [:div {:id "header"}] [:div {:id "content"} body] [:div {:id "footer"} @@ -66,7 +65,7 @@ (namespace/safe-load-ns ns) (html (minib-layout - (if var (str "Var: " qname) (str "Namespace: " ns)) + qname (if var (data/render (find-var (symbol qname)) (keywordize-keys query-params)) (namespace/var-browser ns))))))) diff --git a/src/mycroft/namespace.clj b/src/mycroft/namespace.clj index a858b1a..ccbaee0 100644 --- a/src/mycroft/namespace.clj +++ b/src/mycroft/namespace.clj @@ -13,7 +13,7 @@ (when-let [ns (find-ns (symbol ns))] (sort (keys (ns-publics ns))))) -(defn- namespace-link +(defn namespace-link [ns-name] [:a {:href (str "/vars/" ns-name)} ns-name]) @@ -27,7 +27,7 @@ (fn [ns] [:li (namespace-link ns)]) ns-names)]])) -(defn- var-link +(defn var-link [ns-name var-name] [:a {:href (str "/vars/" ns-name "/" (java.net.URLEncoder/encode (str var-name)))} var-name]) @@ -40,7 +40,7 @@ (defn var-browser [ns] [:div - {:class "browse-list variables"} + (namespace-link ns) [:ul (map (fn [var] [:li (var-link ns var)]) diff --git a/src/mycroft/reflect.clj b/src/mycroft/reflect.clj index e68bde1..e0b3c5a 100644 --- a/src/mycroft/reflect.clj +++ b/src/mycroft/reflect.clj @@ -48,8 +48,9 @@ (defn reflect [cls] - (if (class? cls) - {:fields (fields-set cls) - :methods (methods-set cls)} - (reflect (class cls)))) + (when cls + (if (class? cls) + {:fields (fields-set cls) + :methods (methods-set cls)} + (reflect (class cls)))))