Browse Source

fix: Child namespace pages do not show up in hierarchy view if parent
page does not exist

Addresses #3641

Tienson Qin 4 years ago
parent
commit
704bcda9ad

+ 20 - 19
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]

+ 1 - 3
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

+ 3 - 2
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]

+ 5 - 5
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?]

+ 10 - 2
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]

+ 9 - 6
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)

+ 1 - 1
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)]

+ 14 - 10
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"