From af7a08e544935419fc805f539c438f3c95163db4 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Fri, 9 Oct 2020 00:09:29 +0800 Subject: [PATCH] Add child button --- web/src/main/frontend/components/hiccup.cljs | 17 +++++++++++++-- web/src/main/frontend/components/svg.cljs | 20 ++++++++++++++++++ web/src/main/frontend/handler/editor.cljs | 22 +++++++++++++++++++- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/web/src/main/frontend/components/hiccup.cljs b/web/src/main/frontend/components/hiccup.cljs index b926d7e42..b201ac5cf 100644 --- a/web/src/main/frontend/components/hiccup.cljs +++ b/web/src/main/frontend/components/hiccup.cljs @@ -1644,11 +1644,23 @@ blocks)] sections)))) +(rum/defc add-button < rum/reactive + [config ref? custom-query? blocks] + (let [editing (state/sub [:editor/editing?])] + (when-not (or ref? custom-query? + (:block/dummy? (last blocks)) + (second (first editing))) + (when-let [last-block (last blocks)] + [:a.add-button-link {:on-click (fn [] + (editor-handler/insert-new-block-without-save-previous! config last-block))} + svg/plus-circle])))) + (rum/defc blocks-container < rum/static [blocks config] (let [blocks (map #(dissoc % :block/children) blocks) sidebar? (:sidebar? config) - ref? (:ref? config)] + ref? (:ref? config) + custom-query? (:custom-query? config)] (when (seq blocks) [:div.blocks-container.flex-1 {:style {:margin-left (cond @@ -1656,7 +1668,8 @@ 0 :else -18)}} - (build-blocks blocks config)]))) + (build-blocks blocks config) + (add-button config ref? custom-query? blocks)]))) ;; headers to hiccup (rum/defc ->hiccup < rum/reactive diff --git a/web/src/main/frontend/components/svg.cljs b/web/src/main/frontend/components/svg.cljs index fca383c84..29e4b4e87 100644 --- a/web/src/main/frontend/components/svg.cljs +++ b/web/src/main/frontend/components/svg.cljs @@ -101,6 +101,26 @@ (def close (hero-icon "M6 18L18 6M6 6L18 18")) (def plus (hero-icon "M12 4v16m8-8H4")) + +(def plus-circle + [:svg.addButton + {:viewbox "0 0 20 20"} + [:circle.circle {:fill "#dce0e2", :r "9", :cy "10.5", :cx "10.5"}] + [:line + {:stroke-width "1", + :stroke "#868c90", + :y2 "10.5", + :x2 "15", + :y1 "10.5", + :x1 "6"}] + [:line + {:stroke-width "1", + :stroke "#868c90", + :y2 "15", + :x2 "10.5", + :y1 "6", + :x1 "10.5"}]]) + (def graph-sm [:div {:style {:transform "rotate(90deg)"}} (hero-icon "M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z" {:height "16" :width "16"})]) (def folder (hero-icon "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z")) (def folder-sm (hero-icon "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" {:height "16" :width "16"})) diff --git a/web/src/main/frontend/handler/editor.cljs b/web/src/main/frontend/handler/editor.cljs index cffa16a26..252618faf 100644 --- a/web/src/main/frontend/handler/editor.cljs +++ b/web/src/main/frontend/handler/editor.cljs @@ -691,7 +691,7 @@ :value value :pos pos})) -(defn- insert-new-block! +(defn insert-new-block! [state] (when-not config/publishing? (let [{:keys [block value format id config]} (get-state state) @@ -721,6 +721,26 @@ :blocks-container-id (:id config) :current-page (state/get-current-page)})))) +(defn insert-new-block-without-save-previous! + [config last-block] + (let [format (:block/format last-block) + id (:id config) + new-level (if (util/uuid-string? id) + (inc (:block/level (db/entity [:block/uuid (medley/uuid id)]))) + 2)] + (insert-new-block-aux! + last-block + (:block/content last-block) + {:create-new-block? true + :ok-handler + (fn [[_first-block last-block _new-block-content]] + (js/setTimeout #(edit-last-block-for-new-page! last-block :max) 50)) + :with-level? true + :new-level new-level + :blocks-container-id (:id config) + :current-page (state/get-current-page)}))) + + ;; TODO: utf8 encode performance (defn check [{:block/keys [uuid marker content meta file dummy?] :as block}]