|
@@ -9,19 +9,25 @@
|
|
|
[frontend.components.settings :as settings]
|
|
|
[frontend.components.theme :as theme]
|
|
|
[frontend.components.widgets :as widgets]
|
|
|
+ [frontend.components.modals :refer [show-new-page-modal!]]
|
|
|
[frontend.config :as config]
|
|
|
[frontend.context.i18n :as i18n]
|
|
|
[frontend.db :as db]
|
|
|
+ [frontend.db.model :as db-model]
|
|
|
+ [frontend.components.svg :as svg]
|
|
|
[frontend.db-mixins :as db-mixins]
|
|
|
[frontend.handler.editor :as editor-handler]
|
|
|
[frontend.handler.route :as route-handler]
|
|
|
+ [frontend.handler.page :as page-handler]
|
|
|
[frontend.mixins :as mixins]
|
|
|
[frontend.modules.shortcut.data-helper :as shortcut-dh]
|
|
|
[frontend.state :as state]
|
|
|
[frontend.ui :as ui]
|
|
|
[frontend.util :as util]
|
|
|
+ [reitit.frontend.easy :as rfe]
|
|
|
[goog.dom :as gdom]
|
|
|
- [rum.core :as rum]))
|
|
|
+ [rum.core :as rum]
|
|
|
+ [frontend.extensions.srs :as srs]))
|
|
|
|
|
|
(defn nav-item
|
|
|
[title href svg-d active? close-modal-fn]
|
|
@@ -37,34 +43,155 @@
|
|
|
:stroke-linecap "round"}]]
|
|
|
title])
|
|
|
|
|
|
+(rum/defc nav-content-item
|
|
|
+ [name {:keys [edit-fn class] :as opts} child]
|
|
|
+
|
|
|
+ [:div.nav-content-item.is-expand
|
|
|
+ {:class class}
|
|
|
+ [:div.hd.items-center.mb-2
|
|
|
+ {:on-click (fn [^js/MouseEvent e]
|
|
|
+ (let [^js target (.-target e)
|
|
|
+ ^js parent (.closest target ".nav-content-item")]
|
|
|
+ (.toggle (.-classList parent) "is-expand")))}
|
|
|
+
|
|
|
+ [:a.font-medium.fade-link name]
|
|
|
+ [:span
|
|
|
+ [:a.more svg/arrow-down-v2]]]
|
|
|
+ [:div.bd child]])
|
|
|
+
|
|
|
+;; TODO: enhance
|
|
|
+(defn- pick-one-ast-page-ref
|
|
|
+ [block]
|
|
|
+ (when-let [title-ast (and block (:block/title block))]
|
|
|
+ (when-let [link-ref (and (= (ffirst title-ast) "Link")
|
|
|
+ (:url (second (first title-ast))))]
|
|
|
+ (when (= "Page_ref" (first link-ref))
|
|
|
+ (second link-ref)))))
|
|
|
+
|
|
|
+(defn- delta-y
|
|
|
+ [e]
|
|
|
+ (let [rect (.. (.. e -target) getBoundingClientRect)]
|
|
|
+ (- (.. e -pageY) (.. rect -top))))
|
|
|
+
|
|
|
+(defn- move-up?
|
|
|
+ [e]
|
|
|
+ (let [delta (delta-y e)]
|
|
|
+ (< delta 14)))
|
|
|
+
|
|
|
+(rum/defcs favorite-item <
|
|
|
+ (rum/local nil ::up?)
|
|
|
+ (rum/local nil ::dragging-over)
|
|
|
+ [state t name]
|
|
|
+ (let [up? (get state ::up?)
|
|
|
+ dragging-over (get state ::dragging-over)
|
|
|
+ target (state/sub :favorites/dragging)]
|
|
|
+ [:li.favorite-item
|
|
|
+ {:key name
|
|
|
+ :class (if (and target @dragging-over (not= target @dragging-over))
|
|
|
+ "dragging-target"
|
|
|
+ "")
|
|
|
+ :draggable true
|
|
|
+ :on-drag-start (fn [event]
|
|
|
+ (state/set-state! :favorites/dragging name))
|
|
|
+ :on-drag-over (fn [e]
|
|
|
+ (util/stop e)
|
|
|
+ (reset! dragging-over name)
|
|
|
+ (when-not (= name (get @state/state :favorites/dragging))
|
|
|
+ (reset! up? (move-up? e))))
|
|
|
+ :on-drag-leave (fn [e]
|
|
|
+ (reset! dragging-over nil))
|
|
|
+ :on-drop (fn [e]
|
|
|
+ (page-handler/reorder-favorites! {:to name
|
|
|
+ :up? (move-up? e)})
|
|
|
+ (reset! up? nil)
|
|
|
+ (reset! dragging-over nil))}
|
|
|
+ [:a {:href (rfe/href :page {:name name})}
|
|
|
+ name]]))
|
|
|
+
|
|
|
+(rum/defc favorites < rum/reactive
|
|
|
+ [t]
|
|
|
+ (nav-content-item
|
|
|
+ [:a.flex.items-center.text-sm.font-medium.rounded-md
|
|
|
+ (ui/icon "star mr-1" {:style {:font-size 18}})
|
|
|
+ [:span.flex-1.uppercase {:style {:padding-top 2}}
|
|
|
+ (t :left-side-bar/nav-favorites)]]
|
|
|
+
|
|
|
+ {:class "favorites"
|
|
|
+ :edit-fn
|
|
|
+ (fn [e]
|
|
|
+ (rfe/push-state :page {:name "Favorites"})
|
|
|
+ (util/stop e))}
|
|
|
+
|
|
|
+ (let [favorites (:favorites (state/sub-graph-config))]
|
|
|
+ (when (seq favorites)
|
|
|
+ [:ul.favorites
|
|
|
+ (for [name favorites]
|
|
|
+ (when-not (string/blank? name)
|
|
|
+ (favorite-item t name)))]))))
|
|
|
+
|
|
|
+(rum/defc recent-pages
|
|
|
+ < rum/reactive db-mixins/query
|
|
|
+ [t]
|
|
|
+
|
|
|
+ (nav-content-item
|
|
|
+ [:a.flex.items-center.text-sm.font-medium.rounded-md
|
|
|
+ (ui/icon "history mr-1" {:style {:font-size 18}})
|
|
|
+ [:span.flex-1.uppercase {:style {:padding-top 2}}
|
|
|
+ (t :left-side-bar/nav-recent-pages)]]
|
|
|
+
|
|
|
+ {:class "recent"}
|
|
|
+
|
|
|
+ (let [pages (state/sub :editor/recent-pages)]
|
|
|
+
|
|
|
+ [:ul
|
|
|
+ (for [name pages]
|
|
|
+ [:li {:key name}
|
|
|
+ [:a {:href (rfe/href :page {:name name})} name]])])))
|
|
|
+
|
|
|
+(rum/defc flashcards < rum/reactive
|
|
|
+ []
|
|
|
+ (let [num (srs/get-srs-cards-total)]
|
|
|
+ [:a.item.group.flex.items-center.px-2.py-2.text-sm.font-medium.rounded-md {:on-click #(state/pub-event! [:modal/show-cards])}
|
|
|
+ (ui/icon "infinity mr-3" {:style {:font-size 20}})
|
|
|
+ [:span.flex-1 "Flashcards"]
|
|
|
+ (when (and num (not (zero? num)))
|
|
|
+ [:span.ml-3.inline-block.py-0.5.px-3.text-xs.font-medium.rounded-full num])]))
|
|
|
+
|
|
|
(rum/defc sidebar-nav < rum/reactive
|
|
|
[route-match close-modal-fn]
|
|
|
- (let [white? (= "white" (state/sub :ui/theme))
|
|
|
- active? (fn [route] (= route (get-in route-match [:data :name])))
|
|
|
- page-active? (fn [page]
|
|
|
- (= page (get-in route-match [:parameters :path :name])))
|
|
|
- right-sidebar? (state/sub :ui/sidebar-open?)
|
|
|
- left-sidebar? (state/sub :ui/left-sidebar-open?)]
|
|
|
- (when left-sidebar?
|
|
|
- [:nav.flex-1.left-sidebar-inner
|
|
|
- (nav-item "Journals" "#/"
|
|
|
- "M3 12l9-9 9 9M5 10v10a1 1 0 001 1h3a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1h3a1 1 0 001-1V10M9 21h6"
|
|
|
- (active? :home)
|
|
|
- close-modal-fn)
|
|
|
- (nav-item "All Pages" "#/all-pages"
|
|
|
- "M6 2h9a1 1 0 0 1 .7.3l4 4a1 1 0 0 1 .3.7v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2zm9 2.41V7h2.59L15 4.41zM18 9h-3a2 2 0 0 1-2-2V4H6v16h12V9zm-2 7a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm0-4a1 1 0 0 1-1 1H9a1 1 0 0 1 0-2h6a1 1 0 0 1 1 1zm-5-4a1 1 0 0 1-1 1H9a1 1 0 1 1 0-2h1a1 1 0 0 1 1 1z"
|
|
|
- (active? :all-pages)
|
|
|
- close-modal-fn)
|
|
|
- (when-not config/publishing?
|
|
|
- (nav-item "All Files" "#/all-files"
|
|
|
- "M3 7V17C3 18.1046 3.89543 19 5 19H19C20.1046 19 21 18.1046 21 17V9C21 7.89543 20.1046 7 19 7H13L11 5H5C3.89543 5 3 5.89543 3 7Z"
|
|
|
- (active? :all-files)
|
|
|
- close-modal-fn))
|
|
|
- (when-not right-sidebar?
|
|
|
- [:div.pl-4.pr-4 {:style {:height 1
|
|
|
- :background-color (if white? "#f0f8ff" "#073642")
|
|
|
- :margin 12}}])
|
|
|
- (right-sidebar/contents)])))
|
|
|
+ (rum/with-context [[t] i18n/*tongue-context*]
|
|
|
+ (let [active? (fn [route] (= route (get-in route-match [:data :name])))
|
|
|
+ page-active? (fn [page]
|
|
|
+ (= page (get-in route-match [:parameters :path :name])))
|
|
|
+ left-sidebar? (state/sub :ui/left-sidebar-open?)
|
|
|
+ white? (= "white" (state/sub :ui/theme))]
|
|
|
+ (when left-sidebar?
|
|
|
+ [:div.left-sidebar-inner.flex-1.flex.flex-col.min-h-0
|
|
|
+ [:div.flex.flex-col.pt-5.pb-4.overflow-y-auto
|
|
|
+ (when-not (util/mobile?)
|
|
|
+ [:div.flex.items-center.flex-shrink-0.px-4.mb-5
|
|
|
+ [:a {:href (rfe/href :home)}
|
|
|
+ (svg/logo (not white?))]
|
|
|
+ [:div.repos.ml-2
|
|
|
+ (repo/repos-dropdown nil nil)]])
|
|
|
+ [:nav.flex-1.px-2.space-y-1 {:aria-label "Sidebar"}
|
|
|
+ [:a.item.group.flex.items-center.px-2.py-2.text-sm.font-medium.rounded-md {:href (rfe/href :all-journals)}
|
|
|
+ (ui/icon "calendar mr-3" {:style {:font-size 20}})
|
|
|
+ [:span.flex-1 "Journals"]]
|
|
|
+
|
|
|
+ (flashcards)
|
|
|
+
|
|
|
+ [:a.item.group.flex.items-center.px-2.py-2.text-sm.font-medium.rounded-md {:href (rfe/href :graph)}
|
|
|
+ (ui/icon "hierarchy mr-3" {:style {:font-size 20}})
|
|
|
+ [:span.flex-1 "Graph view"]]
|
|
|
+
|
|
|
+ [:a.item.group.flex.items-center.px-2.py-2.text-sm.font-medium.rounded-md {:href (rfe/href :all-pages)}
|
|
|
+ (ui/icon "files mr-3" {:style {:font-size 20}})
|
|
|
+ [:span.flex-1 "All pages"]]]
|
|
|
+
|
|
|
+ (favorites t)
|
|
|
+
|
|
|
+ (recent-pages t)]]))))
|
|
|
|
|
|
(rum/defc sidebar-mobile-sidebar < rum/reactive
|
|
|
[{:keys [open? close-fn route-match]}]
|
|
@@ -99,41 +226,47 @@
|
|
|
{:did-mount (fn [state]
|
|
|
(when-let [element (gdom/getElement "main-content")]
|
|
|
(dnd/subscribe!
|
|
|
- element
|
|
|
- :upload-files
|
|
|
- {:drop (fn [e files]
|
|
|
- (when-let [id (state/get-edit-input-id)]
|
|
|
- (let [format (:block/format (state/get-edit-block))]
|
|
|
- (editor-handler/upload-asset id files format editor-handler/*asset-uploading? true))))}))
|
|
|
+ element
|
|
|
+ :upload-files
|
|
|
+ {:drop (fn [e files]
|
|
|
+ (when-let [id (state/get-edit-input-id)]
|
|
|
+ (let [format (:block/format (state/get-edit-block))]
|
|
|
+ (editor-handler/upload-asset id files format editor-handler/*asset-uploading? true))))}))
|
|
|
state)}
|
|
|
[{:keys [route-match global-graph-pages? logged? home? route-name indexeddb-support? white? db-restoring? main-content]}]
|
|
|
- (rum/with-context [[t] i18n/*tongue-context*]
|
|
|
- [:div#main-content.cp__sidebar-main-layout.flex-1.flex
|
|
|
- [:div#sidebar-nav-wrapper.flex-col.pt-4.hidden.sm:block
|
|
|
- {:style {:flex (if (state/get-left-sidebar-open?)
|
|
|
- "0 1 20%"
|
|
|
- "0 0 0px")}}
|
|
|
- (when (state/sub :ui/left-sidebar-open?)
|
|
|
- (sidebar-nav route-match nil))]
|
|
|
- [:div#main-content-container.w-full.flex.justify-center
|
|
|
- {:style {:margin-top (if global-graph-pages? 0 "2rem")}}
|
|
|
- [:div.cp__sidebar-main-content
|
|
|
- {:data-is-global-graph-pages global-graph-pages?
|
|
|
- :data-is-full-width (or global-graph-pages?
|
|
|
- (contains? #{:all-files :all-pages :my-publishing} route-name))}
|
|
|
- (cond
|
|
|
- (not indexeddb-support?)
|
|
|
- nil
|
|
|
-
|
|
|
- db-restoring?
|
|
|
- [:div.mt-20
|
|
|
- [:div.ls-center
|
|
|
- (ui/loading (t :loading))]]
|
|
|
-
|
|
|
- :else
|
|
|
- [:div.pb-24 {:class (if global-graph-pages? "" (util/hiccup->class "max-w-7xl.mx-auto"))
|
|
|
- :style {:margin-bottom (if global-graph-pages? 0 120)}}
|
|
|
- main-content])]]]))
|
|
|
+
|
|
|
+ (let [left-sidebar-open? (state/sub :ui/left-sidebar-open?)
|
|
|
+ mobile? (util/mobile?)]
|
|
|
+ (rum/with-context [[t] i18n/*tongue-context*]
|
|
|
+ [:div#main-content.cp__sidebar-main-layout.flex-1.flex
|
|
|
+ {:class (util/classnames [{:is-left-sidebar-open left-sidebar-open?}])}
|
|
|
+
|
|
|
+ ;; desktop left sidebar layout
|
|
|
+ (when-not mobile?
|
|
|
+ [:div#sidebar-nav-wrapper.cp__sidebar-left-layout
|
|
|
+ {:class (util/classnames [{:is-open left-sidebar-open?}])}
|
|
|
+
|
|
|
+ ;; sidebar contents
|
|
|
+ (sidebar-nav route-match nil)])
|
|
|
+
|
|
|
+ [:div#main-content-container.w-full.flex.justify-center
|
|
|
+ [:div.cp__sidebar-main-content
|
|
|
+ {:data-is-global-graph-pages global-graph-pages?
|
|
|
+ :data-is-full-width (or global-graph-pages?
|
|
|
+ (contains? #{:all-files :all-pages :my-publishing} route-name))}
|
|
|
+ (cond
|
|
|
+ (not indexeddb-support?)
|
|
|
+ nil
|
|
|
+
|
|
|
+ db-restoring?
|
|
|
+ [:div.mt-20
|
|
|
+ [:div.ls-center
|
|
|
+ (ui/loading (t :loading))]]
|
|
|
+
|
|
|
+ :else
|
|
|
+ [:div.pb-24 {:class (if global-graph-pages? "" (util/hiccup->class "max-w-7xl.mx-auto"))
|
|
|
+ :style {:margin-bottom (if global-graph-pages? 0 120)}}
|
|
|
+ main-content])]]])))
|
|
|
|
|
|
(rum/defc footer
|
|
|
[]
|
|
@@ -155,22 +288,22 @@
|
|
|
;; TODO: simplify logic
|
|
|
|
|
|
(rum/defc main-content < rum/reactive db-mixins/query
|
|
|
- {:init (fn [state]
|
|
|
- (when-not @sidebar-inited?
|
|
|
- (let [current-repo (state/sub :git/current-repo)
|
|
|
- default-home (get-default-home-if-valid)
|
|
|
- sidebar (:sidebar default-home)
|
|
|
- sidebar (if (string? sidebar) [sidebar] sidebar)]
|
|
|
- (when-let [pages (->> (seq sidebar)
|
|
|
- (remove string/blank?))]
|
|
|
- (doseq [page pages]
|
|
|
- (let [page (string/lower-case page)
|
|
|
- [db-id block-type] (if (= page "contents")
|
|
|
- ["contents" :contents]
|
|
|
- [page :page])]
|
|
|
- (state/sidebar-add-block! current-repo db-id block-type nil)))
|
|
|
- (reset! sidebar-inited? true))))
|
|
|
- state)}
|
|
|
+ {:init (fn [state]
|
|
|
+ (when-not @sidebar-inited?
|
|
|
+ (let [current-repo (state/sub :git/current-repo)
|
|
|
+ default-home (get-default-home-if-valid)
|
|
|
+ sidebar (:sidebar default-home)
|
|
|
+ sidebar (if (string? sidebar) [sidebar] sidebar)]
|
|
|
+ (when-let [pages (->> (seq sidebar)
|
|
|
+ (remove string/blank?))]
|
|
|
+ (doseq [page pages]
|
|
|
+ (let [page (string/lower-case page)
|
|
|
+ [db-id block-type] (if (= page "contents")
|
|
|
+ ["contents" :contents]
|
|
|
+ [page :page])]
|
|
|
+ (state/sidebar-add-block! current-repo db-id block-type nil)))
|
|
|
+ (reset! sidebar-inited? true))))
|
|
|
+ state)}
|
|
|
[]
|
|
|
(let [today (state/sub :today)
|
|
|
cloning? (state/sub :repo/cloning?)
|
|
@@ -184,60 +317,60 @@
|
|
|
preferred-format (state/sub [:me :preferred_format])
|
|
|
logged? (:name me)]
|
|
|
(rum/with-context [[t] i18n/*tongue-context*]
|
|
|
- [:div
|
|
|
- (cond
|
|
|
- (and default-home
|
|
|
- (= :home (state/get-current-route))
|
|
|
- (not (state/route-has-p?))
|
|
|
- (:page default-home))
|
|
|
- (route-handler/redirect! {:to :page
|
|
|
- :path-params {:name (:page default-home)}})
|
|
|
+ [:div
|
|
|
+ (cond
|
|
|
+ (and default-home
|
|
|
+ (= :home (state/get-current-route))
|
|
|
+ (not (state/route-has-p?))
|
|
|
+ (:page default-home))
|
|
|
+ (route-handler/redirect! {:to :page
|
|
|
+ :path-params {:name (:page default-home)}})
|
|
|
|
|
|
- (and config/publishing?
|
|
|
- (not default-home)
|
|
|
- (empty? latest-journals))
|
|
|
- (route-handler/redirect! {:to :all-pages})
|
|
|
+ (and config/publishing?
|
|
|
+ (not default-home)
|
|
|
+ (empty? latest-journals))
|
|
|
+ (route-handler/redirect! {:to :all-pages})
|
|
|
|
|
|
- importing-to-db?
|
|
|
- (ui/loading (t :parsing-files))
|
|
|
+ importing-to-db?
|
|
|
+ (ui/loading (t :parsing-files))
|
|
|
|
|
|
- loading-files?
|
|
|
- (ui/loading (t :loading-files))
|
|
|
+ loading-files?
|
|
|
+ (ui/loading (t :loading-files))
|
|
|
|
|
|
- (and (not logged?) (seq latest-journals))
|
|
|
- (journal/journals latest-journals)
|
|
|
+ (and (not logged?) (seq latest-journals))
|
|
|
+ (journal/journals latest-journals)
|
|
|
|
|
|
- (and logged? (not preferred-format))
|
|
|
- (widgets/choose-preferred-format)
|
|
|
+ (and logged? (not preferred-format))
|
|
|
+ (widgets/choose-preferred-format)
|
|
|
|
|
|
;; TODO: delay this
|
|
|
- (and logged? (nil? (:email me)))
|
|
|
- (settings/set-email)
|
|
|
+ (and logged? (nil? (:email me)))
|
|
|
+ (settings/set-email)
|
|
|
|
|
|
- cloning?
|
|
|
- (ui/loading (t :cloning))
|
|
|
+ cloning?
|
|
|
+ (ui/loading (t :cloning))
|
|
|
|
|
|
- (seq latest-journals)
|
|
|
- (journal/journals latest-journals)
|
|
|
+ (seq latest-journals)
|
|
|
+ (journal/journals latest-journals)
|
|
|
|
|
|
- (and logged? (empty? (:repos me)))
|
|
|
- (widgets/add-graph)
|
|
|
+ (and logged? (empty? (:repos me)))
|
|
|
+ (widgets/add-graph)
|
|
|
|
|
|
;; FIXME: why will this happen?
|
|
|
- :else
|
|
|
- [:div])])))
|
|
|
+ :else
|
|
|
+ [:div])])))
|
|
|
|
|
|
(rum/defc custom-context-menu < rum/reactive
|
|
|
[]
|
|
|
(when (state/sub :custom-context-menu/show?)
|
|
|
(when-let [links (state/sub :custom-context-menu/links)]
|
|
|
(ui/css-transition
|
|
|
- {:class-names "fade"
|
|
|
- :timeout {:enter 500
|
|
|
- :exit 300}}
|
|
|
- links
|
|
|
+ {:class-names "fade"
|
|
|
+ :timeout {:enter 500
|
|
|
+ :exit 300}}
|
|
|
+ links
|
|
|
;; (custom-context-menu-content)
|
|
|
- ))))
|
|
|
+))))
|
|
|
|
|
|
(rum/defc new-block-mode < rum/reactive
|
|
|
[]
|
|
@@ -261,11 +394,11 @@
|
|
|
(when-not (state/sub :ui/sidebar-open?)
|
|
|
;; TODO: remove with-context usage
|
|
|
(rum/with-context [[t] i18n/*tongue-context*]
|
|
|
- [:div.cp__sidebar-help-btn
|
|
|
- {:title (t :help-shortcut-title)
|
|
|
- :on-click (fn []
|
|
|
- (state/sidebar-add-block! (state/get-current-repo) "help" :help nil))}
|
|
|
- "?"])))
|
|
|
+ [:div.cp__sidebar-help-btn
|
|
|
+ {:title (t :help-shortcut-title)
|
|
|
+ :on-click (fn []
|
|
|
+ (state/sidebar-add-block! (state/get-current-repo) "help" :help nil))}
|
|
|
+ "?"])))
|
|
|
|
|
|
(rum/defc settings-modal < rum/reactive
|
|
|
[]
|
|
@@ -273,7 +406,7 @@
|
|
|
(if settings-open?
|
|
|
(do
|
|
|
(state/set-modal!
|
|
|
- (fn [] [:div.settings-modal (settings/settings)]))
|
|
|
+ (fn [] [:div.settings-modal (settings/settings)]))
|
|
|
(util/lock-global-scroll settings-open?))
|
|
|
(state/set-modal! nil))
|
|
|
nil))
|
|
@@ -307,6 +440,7 @@
|
|
|
system-theme? (state/sub :ui/system-theme?)
|
|
|
white? (= "white" (state/sub :ui/theme))
|
|
|
sidebar-open? (state/sub :ui/sidebar-open?)
|
|
|
+ left-sidebar-open? (state/sub :ui/left-sidebar-open?)
|
|
|
route-name (get-in route-match [:data :name])
|
|
|
global-graph-pages? (= :graph route-name)
|
|
|
logged? (:name me)
|
|
@@ -329,47 +463,50 @@
|
|
|
(editor-handler/unhighlight-blocks!)
|
|
|
(util/fix-open-external-with-shift! e))}
|
|
|
|
|
|
- [:div.theme-inner
|
|
|
- (sidebar-mobile-sidebar
|
|
|
- {:open? open?
|
|
|
- :close-fn close-fn
|
|
|
- :route-match route-match})
|
|
|
- [:div.#app-container.h-screen.flex
|
|
|
- [:div.flex-1.h-full.flex.flex-col#left-container.relative
|
|
|
- {:class (if (state/sub :ui/sidebar-open?) "overflow-hidden" "w-full")}
|
|
|
- (header/header {:open-fn open-fn
|
|
|
- :white? white?
|
|
|
- :current-repo current-repo
|
|
|
- :logged? logged?
|
|
|
- :page? page?
|
|
|
- :route-match route-match
|
|
|
- :me me
|
|
|
- :default-home default-home
|
|
|
- :new-block-mode new-block-mode})
|
|
|
-
|
|
|
- [:div#main-container.scrollbar-spacing
|
|
|
- (main {:route-match route-match
|
|
|
- :global-graph-pages? global-graph-pages?
|
|
|
- :logged? logged?
|
|
|
- :home? home?
|
|
|
- :route-name route-name
|
|
|
- :indexeddb-support? indexeddb-support?
|
|
|
- :white? white?
|
|
|
- :db-restoring? db-restoring?
|
|
|
- :main-content main-content})]
|
|
|
-
|
|
|
- (footer)]
|
|
|
- (right-sidebar/sidebar)
|
|
|
-
|
|
|
- [:div#app-single-container]]
|
|
|
-
|
|
|
- (ui/notification)
|
|
|
- (ui/modal)
|
|
|
- (settings-modal)
|
|
|
- (command-palette/command-palette-modal)
|
|
|
- (custom-context-menu)
|
|
|
- [:a#download.hidden]
|
|
|
- (when
|
|
|
- (and (not config/mobile?)
|
|
|
- (not config/publishing?))
|
|
|
- (help-button))]))))
|
|
|
+ [:div.theme-inner
|
|
|
+ {:class (util/classnames [{:ls-left-sidebar-open left-sidebar-open?}])}
|
|
|
+
|
|
|
+ (sidebar-mobile-sidebar
|
|
|
+ {:open? open?
|
|
|
+ :close-fn close-fn
|
|
|
+ :route-match route-match})
|
|
|
+
|
|
|
+ [:div.#app-container.h-screen.flex
|
|
|
+ [:div.flex-1.h-full.flex.flex-col#left-container.relative
|
|
|
+ {:class (if (state/sub :ui/sidebar-open?) "overflow-hidden" "w-full")}
|
|
|
+ (header/header {:open-fn open-fn
|
|
|
+ :white? white?
|
|
|
+ :current-repo current-repo
|
|
|
+ :logged? logged?
|
|
|
+ :page? page?
|
|
|
+ :route-match route-match
|
|
|
+ :me me
|
|
|
+ :default-home default-home
|
|
|
+ :new-block-mode new-block-mode})
|
|
|
+
|
|
|
+ [:div#main-container.scrollbar-spacing
|
|
|
+ (main {:route-match route-match
|
|
|
+ :global-graph-pages? global-graph-pages?
|
|
|
+ :logged? logged?
|
|
|
+ :home? home?
|
|
|
+ :route-name route-name
|
|
|
+ :indexeddb-support? indexeddb-support?
|
|
|
+ :white? white?
|
|
|
+ :db-restoring? db-restoring?
|
|
|
+ :main-content main-content})]
|
|
|
+
|
|
|
+ (footer)]
|
|
|
+ (right-sidebar/sidebar)
|
|
|
+
|
|
|
+ [:div#app-single-container]]
|
|
|
+
|
|
|
+ (ui/notification)
|
|
|
+ (ui/modal)
|
|
|
+ (settings-modal)
|
|
|
+ (command-palette/command-palette-modal)
|
|
|
+ (custom-context-menu)
|
|
|
+ [:a#download.hidden]
|
|
|
+ (when
|
|
|
+ (and (not config/mobile?)
|
|
|
+ (not config/publishing?))
|
|
|
+ (help-button))]))))
|