diff --git a/src/main/frontend/components/hierarchy.cljs b/src/main/frontend/components/hierarchy.cljs index 1b3902501..0c4e081eb 100644 --- a/src/main/frontend/components/hierarchy.cljs +++ b/src/main/frontend/components/hierarchy.cljs @@ -13,27 +13,28 @@ (defn get-relation [page] (when-let [page (or (text/get-nested-page-name page) page)] - (when (text/namespace-page? page) - (let [repo (state/get-current-repo) - namespace-pages (db/get-namespace-pages repo page) - parent-routes (db-model/get-page-namespace-routes repo page) - pages (->> (concat namespace-pages parent-routes) - (distinct) - (sort-by :block/name) - (map (fn [page] - (or (:block/original-name page) (:block/name page)))) - (map #(string/split % "/"))) - page-namespace (db-model/get-page-namespace repo page) - page-namespace (util/get-page-original-name page-namespace)] - (cond - (seq pages) - pages + (when (or (text/namespace-page? page) + (:block/_namespace (db/entity [:block/name (util/page-name-sanity-lc page)]))) + (let [repo (state/get-current-repo) + namespace-pages (db/get-namespace-pages repo page) + parent-routes (db-model/get-page-namespace-routes repo page) + pages (->> (concat namespace-pages parent-routes) + (distinct) + (sort-by :block/name) + (map (fn [page] + (or (:block/original-name page) (:block/name page)))) + (map #(string/split % "/"))) + page-namespace (db-model/get-page-namespace repo page) + page-namespace (util/get-page-original-name page-namespace)] + (cond + (seq pages) + pages - page-namespace - [(string/split page-namespace "/")] + page-namespace + [(string/split page-namespace "/")] - :else - nil))))) + :else + nil))))) (rum/defc structures [page] diff --git a/src/main/frontend/components/page.cljs b/src/main/frontend/components/page.cljs index c9e7579c5..ade522eea 100644 --- a/src/main/frontend/components/page.cljs +++ b/src/main/frontend/components/page.cljs @@ -350,9 +350,7 @@ (when-not block? [:div - (when (and - (not journal?) - (text/namespace-page? route-page-name)) + (when (not journal?) (hierarchy/structures route-page-name)) ;; TODO: or we can lazy load them diff --git a/src/main/frontend/components/sidebar.cljs b/src/main/frontend/components/sidebar.cljs index ab245bb0b..912f97cfc 100644 --- a/src/main/frontend/components/sidebar.cljs +++ b/src/main/frontend/components/sidebar.cljs @@ -67,8 +67,9 @@ (defn- delta-y [e] - (let [rect (.. (.. e -target) getBoundingClientRect)] - (- (.. e -pageY) (.. rect -top)))) + (when-let [target (.. e -target)] + (let [rect (.. target getBoundingClientRect)] + (- (.. e -pageY) (.. rect -top))))) (defn- move-up? [e] diff --git a/src/main/frontend/format/block.cljs b/src/main/frontend/format/block.cljs index 5ea4a64e6..e6dfb9947 100644 --- a/src/main/frontend/format/block.cljs +++ b/src/main/frontend/format/block.cljs @@ -257,11 +257,11 @@ (when original-page-name (let [page-name (-> (string/lower-case original-page-name) (util/page-name-sanity)) - day (date/journal-title->int page-name)] - (if day - (let [original-page-name (date/int->journal-title day)] - [original-page-name (string/lower-case original-page-name) day]) - [original-page-name page-name day])))) + day (date/journal-title->int page-name)] + (if day + (let [original-page-name (date/int->journal-title day)] + [original-page-name (string/lower-case original-page-name) day]) + [original-page-name page-name day])))) (defn page-name->map [original-page-name with-id?] diff --git a/src/main/frontend/handler/extract.cljs b/src/main/frontend/handler/extract.cljs index ab18164c2..c749be420 100644 --- a/src/main/frontend/handler/extract.cljs +++ b/src/main/frontend/handler/extract.cljs @@ -121,6 +121,12 @@ (map (fn [tag] {:block/name (util/page-name-sanity-lc tag) :block/original-name tag}) tags))))) + namespace-pages (let [page (:block/original-name page-entity)] + (when (text/namespace-page? page) + (->> (util/split-namespace-pages page) + (map (fn [page] + (-> (block/page-name->map page true) + (assoc :block/format format))))))) pages (->> (concat [page-entity] @ref-pages @@ -128,9 +134,11 @@ (fn [page] {:block/original-name page :block/name (util/page-name-sanity-lc page)}) - @ref-tags)) + @ref-tags) + namespace-pages) ;; remove block references - (remove vector?)) + (remove vector?) + (remove nil?)) pages (util/distinct-by :block/name pages) block-ids (->> (mapv (fn [block] diff --git a/src/main/frontend/handler/page.cljs b/src/main/frontend/handler/page.cljs index 03f6ca74a..12241adc0 100644 --- a/src/main/frontend/handler/page.cljs +++ b/src/main/frontend/handler/page.cljs @@ -149,7 +149,7 @@ (defn- compute-new-file-path [old-path new-name] (let [result (string/split old-path "/") - file-name (util/page-name-sanity new-name) + file-name (util/page-name-sanity new-name true) ext (last (string/split (last result) ".")) new-file (str file-name "." ext) parts (concat (butlast result) [new-file])] @@ -355,12 +355,12 @@ (doseq [page-id page-ids] (outliner-file/sync-to-file page-id)))) -(defn- rename-page-aux +(defn- rename-page-aux "Only accepts unsanitized page names" [old-name new-name redirect?] (let [old-page-name (util/page-name-sanity-lc old-name) - new-file-name (util/page-name-sanity new-name) - new-page-name (string/lower-case new-file-name) + new-file-name (util/page-name-sanity new-name true) + new-page-name (util/page-name-sanity-lc new-name) repo (state/get-current-repo) page (db/pull [:block/name old-page-name])] (when (and repo page) @@ -721,9 +721,12 @@ (config/get-file-extension format)) file-path (str "/" path) repo-dir (config/get-repo-dir repo)] - (p/let [file-exists? (fs/file-exists? repo-dir file-path)] + (p/let [file-exists? (fs/file-exists? repo-dir file-path) + file-content (when file-exists? + (fs/read-file repo-dir file-path))] (when (and (db/page-empty? repo today-page) - (not file-exists?)) + (or (not file-exists?) + (and file-exists? (string/blank? file-content)))) (create! title {:redirect? false :split-namespace? false :create-first-block? (not template) diff --git a/src/main/frontend/modules/file/core.cljs b/src/main/frontend/modules/file/core.cljs index 8dea0dba3..32814231e 100644 --- a/src/main/frontend/modules/file/core.cljs +++ b/src/main/frontend/modules/file/core.cljs @@ -131,7 +131,7 @@ (if journal-page? (date/journal-title->default title) (-> (or (:block/original-name page) (:block/name page)) - (util/page-name-sanity))) "." + (util/page-name-sanity true))) "." (if (= format "markdown") "md" format)) file-path (str "/" path) dir (config/get-repo-dir repo)] diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index 0e7d1c362..6e3d984ee 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -1107,7 +1107,7 @@ (when (uuid-string? block-id) (first (array-seq (js/document.getElementsByClassName block-id)))))))) -(def windows-reserved-chars #"[\\/:\\*\\?\"<>|]+") +(def windows-reserved-chars #"[:\\*\\?\"<>|]+") (defn include-windows-reserved-chars? [s] @@ -1138,15 +1138,19 @@ (defn page-name-sanity "Sanitize the page-name for file name" - [page-name] - (some-> page-name - (remove-boundary-slashes) - (string/replace #"/" ".") - ;; Windows reserved path characters - (string/replace windows-reserved-chars "_") - ;; for android filesystem compatiblity - (string/replace #"[\\#|%]+" "_") - (normalize))) + ([page-name] + (page-name-sanity page-name false)) + ([page-name replace-slash?] + (let [page (some-> page-name + (remove-boundary-slashes) + ;; Windows reserved path characters + (string/replace windows-reserved-chars "_") + ;; for android filesystem compatiblity + (string/replace #"[\\#|%]+" "_") + (normalize))] + (if replace-slash? + (string/replace page #"/" ".") + page)))) (defn page-name-sanity-lc "Sanitize the query string for a page"