From 6d256c6d37cb739002a1a4768d30951fe5a7c796 Mon Sep 17 00:00:00 2001 From: Josha von Gizycki Date: Mon, 26 Aug 2019 15:51:28 +0200 Subject: [PATCH] rework views in instance domain --- src/wanijo/instance/db.clj | 24 +- src/wanijo/instance/domain.clj | 10 +- src/wanijo/instance/routes.clj | 88 +++---- src/wanijo/instance/view.clj | 263 -------------------- src/wanijo/instance/view/edit.clj | 75 ++++++ src/wanijo/instance/view/instances.clj | 36 +++ src/wanijo/instance/view/link_selection.clj | 21 ++ src/wanijo/instance/view/show.clj | 126 ++++++++++ src/wanijo/instance/view/starred.clj | 27 ++ src/wanijo/instance/view/view.clj | 6 + 10 files changed, 362 insertions(+), 314 deletions(-) delete mode 100644 src/wanijo/instance/view.clj create mode 100644 src/wanijo/instance/view/edit.clj create mode 100644 src/wanijo/instance/view/instances.clj create mode 100644 src/wanijo/instance/view/link_selection.clj create mode 100644 src/wanijo/instance/view/show.clj create mode 100644 src/wanijo/instance/view/starred.clj create mode 100644 src/wanijo/instance/view/view.clj diff --git a/src/wanijo/instance/db.clj b/src/wanijo/instance/db.clj index 327ad45..6dba364 100644 --- a/src/wanijo/instance/db.clj +++ b/src/wanijo/instance/db.clj @@ -9,16 +9,28 @@ WHERE s.uuid = {uuid} OPTIONAL MATCH (i)-[:tagged_with]->(t:tag) - RETURN i, t") + OPTIONAL MATCH + (i)<-[:of]-(p:property), + (p)-[:of]->(a:attribute) + RETURN i, t, p, a") +(defn flatten-grouped-rows [instance grouped-rows] + {:post [(spec/assert ::domain-instance/instance-with-tags-and-props %)]} + (assoc instance + :tags (->> grouped-rows + (map :t) + (filter some?) + distinct) + :properties (->> grouped-rows + (filter #(some? (:p %))) + (map #(assoc (:p %) + :attribute (:a %))) + distinct))) (defn find-by-schema! [schema-uuid] - {:post [(spec/assert ::domain-instance/instances-with-tags %)]} + {:post [(spec/assert ::domain-instance/instances-with-tags-and-props %)]} (->> (neo4j/exec-query! findy-by-schema {:uuid schema-uuid}) (group-by :i) - (map #(assoc (key %) - :tags (->> (val %) - (map :t) - (filter some?)))) + (map #(flatten-grouped-rows (key %) (val %))) (sort-by :name))) (neo4j/defquery create-instance diff --git a/src/wanijo/instance/domain.clj b/src/wanijo/instance/domain.clj index d0a0fbe..b3cf7e9 100644 --- a/src/wanijo/instance/domain.clj +++ b/src/wanijo/instance/domain.clj @@ -24,9 +24,15 @@ (spec/def ::contains-schema (spec/keys :req-un [::db-schema/schema])) -(spec/def ::instances-with-tags +(spec/def ::instances-with-tags-and-props (spec/coll-of (spec/merge ::instance - (spec/keys :req-un [::tags])))) + (spec/keys :req-un [::tags + ::properties])))) + +(spec/def ::instance-with-tags-and-props + (spec/merge ::instance + (spec/keys :req-un [::tags + ::properties]))) (spec/def ::instance-with-schema (spec/merge ::instance ::contains-schema)) diff --git a/src/wanijo/instance/routes.clj b/src/wanijo/instance/routes.clj index feabe2b..ce47b09 100644 --- a/src/wanijo/instance/routes.clj +++ b/src/wanijo/instance/routes.clj @@ -3,22 +3,24 @@ GET POST DELETE]] [ring.util.response :as resp] [formulare.core :as form] - [wanijo.instance - [view :as view] - [db :as domain] - [forms :as forms-inst]] - [wanijo.schema - [db :as domain-schema] - [middleware :as middleware-schema]] + [wanijo.instance.view.edit :refer [edit]] + [wanijo.instance.view.instances :refer [instances]] + [wanijo.instance.view.show :refer [show]] + [wanijo.instance.view.link-selection :refer [link-selection]] + [wanijo.instance.view.starred :refer [starred]] + [wanijo.instance.db :as domain] + [wanijo.instance.forms :as forms-inst] + [wanijo.schema.db :as domain-schema] + [wanijo.schema.middleware :as middleware-schema] [wanijo.link.db :as domain-link] [wanijo.infrastructure.routing :refer [register! path]] [wanijo.attribute.db :as db-attr])) (defn list! [schema-uuid req] - (view/list! (domain-schema/find-by-uuid! schema-uuid) - (domain/find-by-schema! schema-uuid) - (forms-inst/with-attributes (db-attr/required! schema-uuid)) - req)) + (instances (domain-schema/find-by-uuid! schema-uuid) + (domain/find-by-schema! schema-uuid) + (forms-inst/with-attributes (db-attr/required! schema-uuid)) + req)) (defn new! [req] (let [schema-uuid (get-in req [:params :schema-uuid]) @@ -46,9 +48,9 @@ :starred (domain/is-starred! uuid user-uuid))] - (view/show! instance - (domain-schema/accessible-schemas! user-uuid) - req))) + (show instance + (domain-schema/accessible-schemas! user-uuid) + req))) (defn form! [attrs] (forms-inst/with-attributes attrs)) @@ -57,11 +59,11 @@ (let [instance (instance! uuid) attrs (db-attr/find-by-instance! uuid) user-uuid (get-in req [:session :uuid])] - (view/edit! instance - (form! attrs) - (forms-inst/instance->form-data instance) - (domain-schema/accessible-schemas! user-uuid) - req))) + (edit instance + (form! attrs) + (forms-inst/instance->form-data instance) + (domain-schema/accessible-schemas! user-uuid) + req))) (defn edit! [uuid req] (let [attrs (db-attr/find-by-instance! uuid) @@ -74,7 +76,7 @@ (resp/redirect (path :instance-show instance))) (show! uuid req)))) -(defn delete! [uuid req] +(defn delete! [uuid] (let [schema (domain-schema/find-by-instance! uuid)] (domain/delete! uuid) (resp/redirect (path :instance-list @@ -82,13 +84,13 @@ (defn link-form! [schema-uuid] (forms-inst/link-form - (domain/find-by-schema! schema-uuid))) + (domain/find-by-schema! schema-uuid))) (defn link-selection! [uuid schema-uuid req] - (view/link-selection (instance! uuid) - (domain-schema/find-by-uuid! schema-uuid) - (link-form! schema-uuid) - req)) + (link-selection (instance! uuid) + (domain-schema/find-by-uuid! schema-uuid) + (link-form! schema-uuid) + req)) (defn create-link! [uuid schema-uuid req] (let [form (link-form! schema-uuid)] @@ -101,7 +103,7 @@ (resp/redirect (path :instance-edit-form {:uuid uuid}))) (link-selection! uuid schema-uuid req)))) -(defn delete-link! [uuid link-uuid req] +(defn delete-link! [uuid link-uuid] (domain-link/delete! link-uuid) (resp/redirect (path :instance-edit-form {:uuid uuid}))) @@ -116,19 +118,19 @@ (resp/redirect (path :instance-show {:uuid uuid}))) (defn list-starred! [req] - (view/list-starred - (domain/starred-by-user! (-> req :session :uuid)) - req)) + (starred + (domain/starred-by-user! (-> req :session :uuid)) + req)) (defroutes routes (wrap-routes - (GET (register! :instance-list "/instance/list/:schema-uuid") - [schema-uuid :as req] - (list! schema-uuid req)) - (middleware-schema/wrap-allowed-to-read - #(get-in % [:params :schema-uuid]))) + (GET (register! :instance-list "/instance/list/:schema-uuid") + [schema-uuid :as req] + (list! schema-uuid req)) + (middleware-schema/wrap-allowed-to-read + #(get-in % [:params :schema-uuid]))) (POST (register! :instance-new "/instance/new") [] - new!) + new!) (GET (register! :instance-show "/instance/:uuid") [uuid :as req] (show! uuid req)) @@ -137,10 +139,10 @@ (edit-form! uuid req)) (POST (register! :instance-edit "/instance/:uuid") [uuid :as req] - (edit! uuid req)) + (edit! uuid req)) (DELETE (register! :instance-delete "/instance/:uuid") - [uuid :as req] - (delete! uuid req)) + [uuid] + (delete! uuid)) (GET (register! :instance-link-selection "/instance/:uuid/link/:schema-uuid") [uuid schema-uuid :as req] @@ -148,19 +150,19 @@ (POST (register! :instance-link-create "/instance/:uuid/link/:schema-uuid") [uuid schema-uuid :as req] - (create-link! uuid schema-uuid req)) + (create-link! uuid schema-uuid req)) (DELETE (register! :instance-link-delete "/instance/:uuid/link/:link-uuid") - [uuid link-uuid :as req] - (delete-link! uuid link-uuid req)) + [uuid link-uuid] + (delete-link! uuid link-uuid)) (POST (register! :instance-mark-starred "/instance/:uuid/starred") [uuid :as req] - (mark-starred! uuid req)) + (mark-starred! uuid req)) (DELETE (register! :instance-remove-starred "/instance/:uuid/starred") [uuid :as req] - (remove-starred! uuid req)) + (remove-starred! uuid req)) (GET (register! :instance-list-starred "/instance/starred/list") [:as req] (list-starred! req))) diff --git a/src/wanijo/instance/view.clj b/src/wanijo/instance/view.clj deleted file mode 100644 index 7a59d8d..0000000 --- a/src/wanijo/instance/view.clj +++ /dev/null @@ -1,263 +0,0 @@ -(ns wanijo.instance.view - (:require [hiccup - [form :as hform] - [core :refer [h]]] - [ring.util.anti-forgery :refer [anti-forgery-field]] - [markdown.core :as md] - [formulare.core :as form] - [wanijo.tag.view :as view-tag] - [wanijo.visualisation.viz :as viz] - [wanijo.infrastructure - [view :as view] - [routing :refer [path]] - [time :refer [prettify-dt]]])) - -(defn tags-for-search [{tags :tags}] - [:span.tags-for-search - (reduce #(str %1 ":" (:name %2)) "" tags)]) - -(defn list! [schema instances new-form req] - (view/layout! - :request req - :content - [[:h1 "All Instances of schema " - [:span.schema-title__name (h (:name schema))]] - [:h1 "New Instance"] - (hform/form-to [:post (path :instance-new)] - (form/render-widgets new-form {} req) - (hform/hidden-field "schema-uuid" - (:uuid schema)) - (hform/submit-button "Create!")) - [:table - [:thead - [:tr - [:th "Name"] - [:th "Updated"] - [:th "Created"]]] - [:tbody - (for [instance instances] - [:tr - [:td - [:a {:href (path :instance-show instance)} - (h (:name instance))] - (tags-for-search instance)] - [:td (prettify-dt (:updated_at instance))] - [:td (prettify-dt (:created_at instance))]])]]])) - -(defn list-starred [instances req] - (view/layout! - :request req - :content - [[:h1 "Starred instances"] - [:table - [:thead - [:tr - [:th "Name"] - [:th "Starred"] - [:th "Updated"] - [:th "Created"]]] - [:tbody - (for [instance instances] - [:tr - [:td - [:a {:href (path :instance-show instance)} - (h (:name instance))]] - [:td (prettify-dt (:starred_at instance))] - [:td (prettify-dt (:updated_at instance))] - [:td (prettify-dt (:created_at instance))]])]]])) - -(defn show! [instance schemas req] - (view/layout! - :request req - :content - [[:h1 - (if (:starred instance) - (hform/form-to {:class "inline"} - [:delete (path :instance-mark-starred instance)] - (anti-forgery-field) - (hform/submit-button "★")) - (hform/form-to {:class "inline"} - [:post (path :instance-mark-starred instance)] - (anti-forgery-field) - (hform/submit-button "☆"))) - " " - (h (-> instance :schema :name)) - " " - [:small (h (:name instance))]] - [:p [:small - [:a {:href (path :instance-list - {:schema-uuid (-> instance :schema :uuid)})} - "Back to List"] - " | " - [:a {:href (path :instance-edit-form instance)} - "Edit Instance"] - " | " - [:a {:href (path :vis-explore {:instance-uuid (:uuid instance)})} - "Explore from here"]]] - (when (seq (:tags instance)) - [:section.tags - (view-tag/tag-list (:tags instance))]) - (when (seq (:properties instance)) - [:section.properties - [:h2 "Properties"] - (for [prop (:properties instance) - :let [attr (:attribute prop) - type (:type attr) - render-fn (case type - "date" #(str (prettify-dt %)) - "markdown" md/md-to-html-string - #(str "

" % "

"))]] - (list [:h3 (h (:name attr))] - [:div {:class (str "instance-content " - "attr-type-" type)} - (render-fn (:value prop))]))]) - (when (or (seq (:links-out instance)) - (seq (:links-in instance))) - [:section.visualisation - [:h2 "Visualisation"] - [:p (viz/single-instance instance)]]) - (when (seq (:links-out instance)) - [:section.links-out - [:h2 "Outgoing Links"] - [:table - [:thead - [:tr - [:th "Name"] - [:th "Instance"] - [:th "Schema"] - [:th "Created"]]] - [:tbody - (for [{:keys [link target schema] :as row} (:links-out instance) - :let [name (:name link) - empty (empty? name) - name (if empty [:i "empty"] (h name))]] - [:tr - [:td - name - (tags-for-search row)] - [:td [:a {:href (path :instance-show target)} - (h (:name target))]] - [:td [:a {:href (path :instance-list - {:schema-uuid (:uuid schema)})} - (h (:name schema))]] - [:td (prettify-dt (:created_at link))]])]]]) - (when (seq (:links-in instance)) - [:section.links-in - [:h2 "Incoming Links"] - [:table - [:thead - [:tr - [:th "Name"] - [:th "Instance"] - [:th "Schema"] - [:th "Created"]]] - [:tbody - (for [{:keys [link source schema] :as row} (:links-in instance) - :let [name (:name link) - empty (empty? name) - name (if empty [:i "empty"] (h name))]] - [:tr - [:td - name - (tags-for-search row)] - [:td [:a {:href (path :instance-show source)} - (h (:name source))]] - [:td [:a {:href (path :instance-list - {:schema-uuid (:uuid schema)})} - (h (:name schema))]] - [:td (prettify-dt (:created_at link))]])]]]) - [:section.quick-edits - [:h2 "Quick edits"] - [:section.link-instance - [:h3 "Link Instance with Instance of Schema..."] - [:ul - (for [schema schemas] - [:li - [:a {:href (path :instance-link-selection - {:uuid (:uuid instance) - :schema-uuid (:uuid schema)})} - (h (:name schema))]])]] - [:section.tag-instance - [:h3 "Add or create Tags"] - (view-tag/new-tag-form instance)]]])) - -(defn edit! [instance form form-data schemas req] - (view/layout! - :request req - :content - [[:h1 - (h (-> instance :schema :name)) - " " - [:small (h (:name instance))]] - [:p [:small - [:a {:href (path :instance-list - {:schema-uuid (-> instance :schema :uuid)})} - "Back to List"] - " | " - [:a {:href (path :instance-show instance)} - "Back to Instance"]]] - [:section.edit-instance - [:h2 "Edit Instance"] - (hform/form-to [:post (path :instance-edit instance)] - (form/render-widgets form form-data req) - (hform/submit-button "Edit!")) - (hform/form-to [:delete (path :instance-delete instance)] - (anti-forgery-field) - (view/delete-btn))] - (when (seq (:links-out instance)) - [:section.links-out - [:h2 "Outgoing Links"] - [:table - [:thead - [:tr - [:th "Name"] - [:th "Instance"] - [:th "Schema"] - [:th "Created"] - [:th]]] - [:tbody - (for [{:keys [link target schema]} (:links-out instance) - :let [name (:name link) - empty (empty? name) - name (if empty [:i "empty"] (h name))]] - [:tr - [:td name] - [:td [:a {:href (path :instance-show target)} - (h (:name target))]] - [:td [:a {:href (path :instance-list - {:schema-uuid (:uuid schema)})} - (h (:name schema))]] - [:td (prettify-dt (:created_at link))] - [:td (hform/form-to [:delete (path :instance-link-delete - {:uuid (:uuid instance) - :link-uuid (:uuid link)})] - (anti-forgery-field) - (view/delete-btn))]])]]]) - (when (seq (:tags instance)) - [:section.tags - [:h2 "Tags"] - (view-tag/tag-table instance)]) - [:section.link-instance - [:h2 "Link Instance with Instance of Schema..."] - [:ul - (for [schema schemas] - [:li - [:a {:href (path :instance-link-selection - {:uuid (:uuid instance) - :schema-uuid (:uuid schema)})} - (h (:name schema))]])]]])) - -(defn link-selection [instance schema form req] - (view/layout! - :request req - :content - [[:h1 - [:small "Link " (-> instance :schema :name) " "] - (h (:name instance)) - [:small " with "] - (h (:name schema))] - (hform/form-to [:post (path :instance-link-create - {:uuid (:uuid instance) - :schema-uuid (:uuid schema)})] - (form/render-widgets form nil req) - (hform/submit-button "Link!"))])) diff --git a/src/wanijo/instance/view/edit.clj b/src/wanijo/instance/view/edit.clj new file mode 100644 index 0000000..4405d27 --- /dev/null +++ b/src/wanijo/instance/view/edit.clj @@ -0,0 +1,75 @@ +(ns wanijo.instance.view.edit + (:require [hiccup.form :as hform] + [hiccup.core :refer [h]] + [ring.util.anti-forgery :refer [anti-forgery-field]] + [wanijo.infrastructure.view :as view] + [wanijo.infrastructure.routing :refer [path]] + [wanijo.infrastructure.time :refer [prettify-dt]] + [wanijo.tag.view :as view-tag] + [formulare.core :as form])) + +(defn edit [instance form form-data schemas req] + (view/layout! + :request req + :content + [[:h1 + (h (-> instance :schema :name)) + " " + [:small (h (:name instance))]] + [:p [:small + [:a {:href (path :instance-list + {:schema-uuid (-> instance :schema :uuid)})} + "Back to List"] + " | " + [:a {:href (path :instance-show instance)} + "Back to Instance"]]] + [:section.edit-instance + [:h2 "Edit Instance"] + (hform/form-to [:post (path :instance-edit instance)] + (form/render-widgets form form-data req) + (hform/submit-button "Edit!")) + (hform/form-to [:delete (path :instance-delete instance)] + (anti-forgery-field) + (view/delete-btn))] + (when (seq (:links-out instance)) + [:section.links-out + [:h2 "Outgoing Links"] + [:table + [:thead + [:tr + [:th "Name"] + [:th "Instance"] + [:th "Schema"] + [:th "Created"] + [:th]]] + [:tbody + (for [{:keys [link target schema]} (:links-out instance) + :let [name (:name link) + empty (empty? name) + name (if empty [:i "empty"] (h name))]] + [:tr + [:td name] + [:td [:a {:href (path :instance-show target)} + (h (:name target))]] + [:td [:a {:href (path :instance-list + {:schema-uuid (:uuid schema)})} + (h (:name schema))]] + [:td (prettify-dt (:created_at link))] + [:td (hform/form-to [:delete (path :instance-link-delete + {:uuid (:uuid instance) + :link-uuid (:uuid link)})] + (anti-forgery-field) + (view/delete-btn))]])]]]) + (when (seq (:tags instance)) + [:section.tags + [:h2 "Tags"] + (view-tag/tag-table instance)]) + [:section.link-instance + [:h2 "Link Instance with Instance of Schema..."] + [:ul + (for [schema schemas] + [:li + [:a {:href (path :instance-link-selection + {:uuid (:uuid instance) + :schema-uuid (:uuid schema)})} + (h (:name schema))]])]]])) diff --git a/src/wanijo/instance/view/instances.clj b/src/wanijo/instance/view/instances.clj new file mode 100644 index 0000000..70e7063 --- /dev/null +++ b/src/wanijo/instance/view/instances.clj @@ -0,0 +1,36 @@ +(ns wanijo.instance.view.instances + (:require [hiccup.form :as hform] + [hiccup.core :refer [h]] + [formulare.core :as form] + [wanijo.instance.view.view :as view-instance] + [wanijo.infrastructure.view :as view] + [wanijo.infrastructure.routing :refer [path]] + [wanijo.infrastructure.time :refer [prettify-dt]])) + +(defn instances [schema instances new-form req] + (view/layout! + :request req + :content + [[:h1 "All Instances of schema " + [:span.schema-title__name (h (:name schema))]] + [:h1 "New Instance"] + (hform/form-to [:post (path :instance-new)] + (form/render-widgets new-form {} req) + (hform/hidden-field "schema-uuid" + (:uuid schema)) + (hform/submit-button "Create!")) + [:table + [:thead + [:tr + [:th "Name"] + [:th "Updated"] + [:th "Created"]]] + [:tbody + (for [instance instances] + [:tr + [:td + [:a {:href (path :instance-show instance)} + (h (:name instance))] + (view-instance/tags-for-search instance)] + [:td (prettify-dt (:updated_at instance))] + [:td (prettify-dt (:created_at instance))]])]]])) diff --git a/src/wanijo/instance/view/link_selection.clj b/src/wanijo/instance/view/link_selection.clj new file mode 100644 index 0000000..ccdf25f --- /dev/null +++ b/src/wanijo/instance/view/link_selection.clj @@ -0,0 +1,21 @@ +(ns wanijo.instance.view.link-selection + (:require [hiccup.form :as hform] + [hiccup.core :refer [h]] + [wanijo.infrastructure.view :as view] + [wanijo.infrastructure.routing :refer [path]] + [formulare.core :as form])) + +(defn link-selection [instance schema form req] + (view/layout! + :request req + :content + [[:h1 + [:small "Link " (-> instance :schema :name) " "] + (h (:name instance)) + [:small " with "] + (h (:name schema))] + (hform/form-to [:post (path :instance-link-create + {:uuid (:uuid instance) + :schema-uuid (:uuid schema)})] + (form/render-widgets form nil req) + (hform/submit-button "Link!"))])) diff --git a/src/wanijo/instance/view/show.clj b/src/wanijo/instance/view/show.clj new file mode 100644 index 0000000..2f4a29a --- /dev/null +++ b/src/wanijo/instance/view/show.clj @@ -0,0 +1,126 @@ +(ns wanijo.instance.view.show + (:require [hiccup.form :as hform] + [hiccup.core :refer [h]] + [ring.util.anti-forgery :refer [anti-forgery-field]] + [wanijo.infrastructure.view :as view] + [wanijo.infrastructure.routing :refer [path]] + [wanijo.infrastructure.time :refer [prettify-dt]] + [wanijo.instance.view.view :as view-instance] + [wanijo.tag.view :as view-tag] + [markdown.core :as md] + [wanijo.visualisation.viz :as viz])) + +(defn show [instance schemas req] + (view/layout! + :request req + :content + [[:h1 + (if (:starred instance) + (hform/form-to {:class "inline"} + [:delete (path :instance-mark-starred instance)] + (anti-forgery-field) + (hform/submit-button "★")) + (hform/form-to {:class "inline"} + [:post (path :instance-mark-starred instance)] + (anti-forgery-field) + (hform/submit-button "☆"))) + " " + (h (-> instance :schema :name)) + " " + [:small (h (:name instance))]] + [:p [:small + [:a {:href (path :instance-list + {:schema-uuid (-> instance :schema :uuid)})} + "Back to List"] + " | " + [:a {:href (path :instance-edit-form instance)} + "Edit Instance"] + " | " + [:a {:href (path :vis-explore {:instance-uuid (:uuid instance)})} + "Explore from here"]]] + (when (seq (:tags instance)) + [:section.tags + (view-tag/tag-list (:tags instance))]) + (when (seq (:properties instance)) + [:section.properties + [:h2 "Properties"] + (for [prop (:properties instance) + :let [attr (:attribute prop) + type (:type attr) + render-fn (case type + "date" #(str (prettify-dt %)) + "markdown" md/md-to-html-string + #(str "

" % "

"))]] + (list [:h3 (h (:name attr))] + [:div {:class (str "instance-content " + "attr-type-" type)} + (render-fn (:value prop))]))]) + (when (or (seq (:links-out instance)) + (seq (:links-in instance))) + [:section.visualisation + [:h2 "Visualisation"] + [:p (viz/single-instance instance)]]) + (when (seq (:links-out instance)) + [:section.links-out + [:h2 "Outgoing Links"] + [:table + [:thead + [:tr + [:th "Name"] + [:th "Instance"] + [:th "Schema"] + [:th "Created"]]] + [:tbody + (for [{:keys [link target schema] :as row} (:links-out instance) + :let [name (:name link) + empty (empty? name) + name (if empty [:i "empty"] (h name))]] + [:tr + [:td + name + (view-instance/tags-for-search row)] + [:td [:a {:href (path :instance-show target)} + (h (:name target))]] + [:td [:a {:href (path :instance-list + {:schema-uuid (:uuid schema)})} + (h (:name schema))]] + [:td (prettify-dt (:created_at link))]])]]]) + (when (seq (:links-in instance)) + [:section.links-in + [:h2 "Incoming Links"] + [:table + [:thead + [:tr + [:th "Name"] + [:th "Instance"] + [:th "Schema"] + [:th "Created"]]] + [:tbody + (for [{:keys [link source schema] :as row} (:links-in instance) + :let [name (:name link) + empty (empty? name) + name (if empty [:i "empty"] (h name))]] + [:tr + [:td + name + (view-instance/tags-for-search row)] + [:td [:a {:href (path :instance-show source)} + (h (:name source))]] + [:td [:a {:href (path :instance-list + {:schema-uuid (:uuid schema)})} + (h (:name schema))]] + [:td (prettify-dt (:created_at link))]])]]]) + [:section.quick-edits + [:h2 "Quick edits"] + [:section.link-instance + [:h3 "Link Instance with Instance of Schema..."] + [:ul + (for [schema schemas] + [:li + [:a {:href (path :instance-link-selection + {:uuid (:uuid instance) + :schema-uuid (:uuid schema)})} + (h (:name schema))]])]] + [:section.tag-instance + [:h3 "Add or create Tags"] + (view-tag/new-tag-form instance)]]])) diff --git a/src/wanijo/instance/view/starred.clj b/src/wanijo/instance/view/starred.clj new file mode 100644 index 0000000..cedc18c --- /dev/null +++ b/src/wanijo/instance/view/starred.clj @@ -0,0 +1,27 @@ +(ns wanijo.instance.view.starred + (:require [hiccup.core :refer [h]] + [wanijo.infrastructure.view :as view] + [wanijo.infrastructure.routing :refer [path]] + [wanijo.infrastructure.time :refer [prettify-dt]])) + +(defn starred [instances req] + (view/layout! + :request req + :content + [[:h1 "Starred instances"] + [:table + [:thead + [:tr + [:th "Name"] + [:th "Starred"] + [:th "Updated"] + [:th "Created"]]] + [:tbody + (for [instance instances] + [:tr + [:td + [:a {:href (path :instance-show instance)} + (h (:name instance))]] + [:td (prettify-dt (:starred_at instance))] + [:td (prettify-dt (:updated_at instance))] + [:td (prettify-dt (:created_at instance))]])]]])) diff --git a/src/wanijo/instance/view/view.clj b/src/wanijo/instance/view/view.clj new file mode 100644 index 0000000..7be7615 --- /dev/null +++ b/src/wanijo/instance/view/view.clj @@ -0,0 +1,6 @@ +(ns wanijo.instance.view.view + (:require [hiccup.core :refer [h]])) + +(defn tags-for-search [{tags :tags}] + [:span.tags-for-search + (reduce #(str %1 ":" (h (:name %2))) "" tags)])