Browse Source

enhance: yet another page-name sanity improve

Junyi Du 4 years ago
parent
commit
e5dcb014e1

+ 6 - 3
src/main/frontend/components/block.cljs

@@ -375,6 +375,7 @@
 (declare page-reference)
 
 (rum/defc page-inner
+  "all page-names are sanitized except page-name-in-block"
   [config page-name-in-block page-name redirect-page-name page-entity contents-page? children html-export? label]
   (let [tag? (:tag? config)]
     [:a
@@ -428,7 +429,8 @@
 
 (rum/defc page-preview-trigger
   [{:keys [children sidebar? tippy-position tippy-distance fixed-position? open? manual?] :as config} page-name]
-  (let [redirect-page-name (or (model/get-redirect-page-name page-name (:block/alias? config))
+  (let [page-name (util/page-name-sanity-lc page-name)
+        redirect-page-name (or (model/get-redirect-page-name page-name (:block/alias? config))
                                page-name)
         page-original-name (model/get-page-original-name redirect-page-name)
         html-template (fn []
@@ -466,6 +468,7 @@
       children)))
 
 (rum/defc page-cp
+  "Accepts {:block/name sanitized / unsanitized page-name}"
   [{:keys [html-export? redirect-page-name label children contents-page? preview?] :as config} page]
   (when-let [page-name-in-block (:block/name page)]
     (let [page-name-in-block (util/remove-boundary-slashes page-name-in-block)
@@ -589,7 +592,7 @@
 
 (rum/defc page-embed < rum/reactive db-mixins/query
   [config page-name]
-  (let [page-name (string/trim (string/lower-case page-name))
+  (let [page-name (string/trim (util/page-name-sanity-lc page-name))
         current-page (state/get-current-page)]
     [:div.color-level.embed.embed-page.bg-base-2
      {:class (when (:sidebar? config) "in-sidebar")
@@ -985,7 +988,7 @@
                     config (assoc config :redirect-page-name redirect-page-name)
                     label-text (get-label-text label)
                     page (if (string/blank? label-text)
-                           {:block/name (util/page-name-sanity-lc (db/get-file-page (string/replace href "file:" "")))}
+                           {:block/name (db/get-file-page (string/replace href "file:" "") false)}
                            (get-page label))]
                 (if (and page
                          (when-let [ext (util/get-file-ext href)]

+ 6 - 6
src/main/frontend/components/file.cljs

@@ -73,28 +73,28 @@
   [state]
   (let [path (get-path state)
         format (format/get-format path)
-        page (db/get-file-page path)
+        original-name (db/get-file-page path)
         random-id (str (dc/squuid))]
     (rum/with-context [[tongue] i18n/*tongue-context*]
       [:div.file {:id (str "file-edit-wrapper-" random-id)}
        [:h1.title
         [:bdi (js/decodeURI path)]]
-       (when page
+       (when original-name
          [:div.text-sm.mb-4.ml-1 "Page: "
           [:a.bg-base-2.p-1.ml-1 {:style {:border-radius 4}
-                                  :href (rfe/href :page {:name page})
+                                  :href (rfe/href :page {:name original-name})
                                   :on-click (fn [e]
                                               (when (gobj/get e "shiftKey")
-                                                (when-let [page (db/entity [:block/name (util/page-name-sanity-lc page)])]
+                                                (when-let [page (db/entity [:block/name (util/page-name-sanity-lc original-name)])]
                                                   (state/sidebar-add-block!
                                                    (state/get-current-repo)
                                                    (:db/id page)
                                                    :page
                                                    {:page page}))
                                                 (util/stop e)))}
-           page]])
+           original-name]])
 
-       (when (and page (not (string/starts-with? page "logseq/")))
+       (when (and original-name (not (string/starts-with? original-name "logseq/")))
          [:p.text-sm.ml-1.mb-4
           (svg/warning {:style {:width "1em"
                                 :display "inline-block"}})

+ 1 - 1
src/main/frontend/components/page.cljs

@@ -780,7 +780,7 @@
 
                  ;; search key
                  pages (if-not (string/blank? @*search-key)
-                         (search/fuzzy-search pages @*search-key
+                         (search/fuzzy-search pages (util/page-name-sanity-lc @*search-key)
                                               :limit 20
                                               :extract-fn :block/name)
                          pages)

+ 4 - 4
src/main/frontend/components/search.cljs

@@ -159,7 +159,7 @@
                             (case type
                               :page
                               (let [data (or alias data)
-                                    page (when data (db/entity [:block/name (string/lower-case data)]))]
+                                    page (when data (db/entity [:block/name (util/page-name-sanity-lc data)]))]
                                 (when page
                                   (state/sidebar-add-block!
                                    (state/get-current-repo)
@@ -268,7 +268,7 @@
                               opts (if (= :page search-mode)
                                      (let [current-page (or (state/get-current-page)
                                                             (date/today))]
-                                       {:page-db-id (:db/id (db/entity [:block/name (string/lower-case current-page)]))})
+                                       {:page-db-id (:db/id (db/entity [:block/name (util/page-name-sanity-lc current-page)]))})
                                      {})]
                           (if (= :page search-mode)
                             (search-handler/search (state/get-current-repo) q opts)
@@ -280,7 +280,7 @@
                             :page
                             (let [page data]
                               (when (string? page)
-                                (when-let [page (db/pull [:block/name (string/lower-case page)])]
+                                (when-let [page (db/pull [:block/name (util/page-name-sanity-lc page)])]
                                  (state/sidebar-add-block!
                                   (state/get-current-repo)
                                   (:db/id page)
@@ -345,7 +345,7 @@
                                        opts (if (= :page search-mode)
                                               (when-let [current-page (or (state/get-current-page)
                                                                           (date/today))]
-                                                {:page-db-id (:db/id (db/entity [:block/name (string/lower-case current-page)]))})
+                                                {:page-db-id (:db/id (db/entity [:block/name (util/page-name-sanity-lc current-page)]))})
                                               {})]
                                    (state/set-q! value)
                                    (reset! search-timeout

+ 26 - 22
src/main/frontend/db/model.cljs

@@ -84,7 +84,7 @@
            [?page :block/original-name ?original-name]
            [?page :block/name ?name]]
          (conn/get-conn repo)
-         (string/lower-case tag-name))))
+         (util/page-name-sanity-lc tag-name))))
 
 (defn get-all-tagged-pages
   [repo]
@@ -131,14 +131,15 @@
                     [?page :block/name ?page-name]
                     [?page :block/alias ?alias]]
                   conn
-                  page-name)
+                  (util/page-name-sanity-lc page-name))
              db-utils/seq-flatten
              distinct)))
 
 (defn get-alias-source-page
   [repo alias]
   (when-let [conn (and repo (conn/get-conn repo))]
-    (let [pages (->>
+    (let [alias (util/page-name-sanity-lc alias)
+          pages (->>
                  (d/q '[:find (pull ?p [*])
                         :in $ ?alias
                         :where
@@ -150,7 +151,7 @@
       (when (seq pages)
         (some (fn [page]
                 (let [aliases (->> (get-in page [:block/properties :alias])
-                                   (map string/lower-case)
+                                   (map util/page-name-sanity-lc)
                                    set)]
                   (when (contains? aliases alias)
                     page)))
@@ -299,7 +300,7 @@
 (defn get-page-format
   [page-name]
   (or
-   (let [page (db-utils/entity [:block/name page-name])]
+   (let [page (db-utils/entity [:block/name (util/page-name-sanity-lc page-name)])]
      (or
       (:block/format page)
       (when-let [file (:block/file page)]
@@ -310,7 +311,7 @@
 
 (defn page-alias-set
   [repo-url page]
-  (when-let [page-id (:db/id (db-utils/entity repo-url [:block/name page]))]
+  (when-let [page-id (:db/id (db-utils/entity repo-url [:block/name (util/page-name-sanity-lc page)]))]
     (->>
      (d/q '[:find ?e
             :in $ ?page-name %
@@ -318,7 +319,7 @@
             [?page :block/name ?page-name]
             (alias ?page ?e)]
           (conn/get-conn repo-url)
-          page
+          (util/page-name-sanity-lc page)
           '[[(alias ?e2 ?e1)
              [?e2 :block/alias ?e1]]
             [(alias ?e2 ?e1)
@@ -391,7 +392,7 @@
 
 (defn get-page-properties
   [page]
-  (when-let [page (db-utils/entity [:block/name page])]
+  (when-let [page (db-utils/entity [:block/name (util/page-name-sanity-lc page)])]
     (:block/properties page)))
 
 ;; FIXME: alert
@@ -475,7 +476,7 @@
                    :or {use-cache? true
                         pull-keys '[*]}}]
    (when page
-     (let [page (string/lower-case (string/trim page))
+     (let [page (util/page-name-sanity-lc (string/trim page))
            page-entity (or (db-utils/entity repo-url [:block/name page])
                            (db-utils/entity repo-url [:block/original-name page]))
            page-id (:db/id page-entity)
@@ -501,7 +502,7 @@
   ([repo-url page {:keys [pull-keys]
                    :or {pull-keys '[*]}}]
    (when page
-     (let [page (string/lower-case page)
+     (let [page (util/page-name-sanity-lc page)
            page-id (or (:db/id (db-utils/entity repo-url [:block/name page]))
                        (:db/id (db-utils/entity repo-url [:block/original-name page])))
            db (conn/get-conn repo-url)]
@@ -520,7 +521,7 @@
   [repo page-id]
   (let [page-id (if (integer? page-id)
                   page-id
-                  [:block/name page-id])]
+                  [:block/name (util/page-name-sanity-lc page-id)])]
     (empty? (:block/_parent (db-utils/entity repo page-id)))))
 
 (defn page-empty-or-dummy?
@@ -590,7 +591,7 @@
   [repo partition]
   (when-let [conn (conn/get-conn repo)]
     (when-not (string/blank? partition)
-      (let [partition (string/lower-case (string/trim partition))
+      (let [partition (util/page-name-sanity-lc (string/trim partition))
             ids (->> (d/datoms conn :aevt :block/name)
                      (filter (fn [datom]
                                (let [page (:v datom)]
@@ -818,8 +819,9 @@
 (defn get-page-referenced-pages
   [repo page]
   (when (conn/get-conn repo)
-    (let [pages (page-alias-set repo page)
-          page-id (:db/id (db-utils/entity [:block/name page]))
+    (let [page-name (util/page-name-sanity-lc page)
+          pages (page-alias-set repo page)
+          page-id (:db/id (db-utils/entity [:block/name page-name]))
           ref-pages (->> (react/q repo [:page/ref-pages page-id] {:use-cache? false}
                                   '[:find ?ref-page-name
                                     :in $ ?pages
@@ -848,7 +850,7 @@
         [?other-p :block/original-name ?ref-page]]
       conn
       rules
-      page)
+      (util/page-name-sanity-lc page))
      (distinct))))
 
 ;; Ignore files with empty blocks for now
@@ -879,7 +881,7 @@
 (defn get-pages-that-mentioned-page
   [repo page]
   (when (conn/get-conn repo)
-    (let [page-id (:db/id (db-utils/entity [:block/name page]))
+    (let [page-id (:db/id (db-utils/entity [:block/name (util/page-name-sanity-lc page)]))
           pages (page-alias-set repo page)
           mentioned-pages (->> (react/q repo [:page/mentioned-pages page-id] {:use-cache? false}
                                         '[:find ?mentioned-page-name
@@ -953,7 +955,7 @@
   ([repo page]
    (when repo
      (when (conn/get-conn repo)
-       (let [page-id (:db/id (db-utils/entity [:block/name page]))
+       (let [page-id (:db/id (db-utils/entity [:block/name (util/page-name-sanity-lc page)]))
              pages (page-alias-set repo page)
              aliases (set/difference pages #{page-id})
              query-result (if (seq aliases)
@@ -1000,7 +1002,7 @@
   ([repo page]
    (when repo
      (when-let [conn (conn/get-conn repo)]
-       (let [page-id (:db/id (db-utils/entity [:block/name page]))
+       (let [page-id (:db/id (db-utils/entity [:block/name (util/page-name-sanity-lc page)]))
              pages (page-alias-set repo page)
              aliases (set/difference pages #{page-id})
              query-result (if (seq aliases)
@@ -1068,7 +1070,8 @@
   [page]
   (when-let [repo (state/get-current-repo)]
     (when-let [conn (conn/get-conn repo)]
-      (let [page-id     (:db/id (db-utils/entity [:block/name page]))
+      (let [page (util/page-name-sanity-lc page)
+            page-id     (:db/id (db-utils/entity [:block/name page]))
             alias-names (get-page-alias-names repo page)
             patterns    (->> (conj alias-names page)
                              (map pattern))
@@ -1158,6 +1161,7 @@
                         (mapv (fn [id] [:block/uuid id]) block-uuids))))
 
 (defn journal-page?
+  "sanitized page-name only"
   [page-name]
   (:block/journal? (db-utils/entity [:block/name page-name])))
 
@@ -1361,7 +1365,7 @@
   [repo-url page]
   (when page
     (let [db (conn/get-conn repo-url)
-          page (db-utils/pull [:block/name (string/lower-case page)])]
+          page (db-utils/pull [:block/name (util/page-name-sanity-lc page)])]
       (when page
         (let [datoms (d/datoms db :avet :block/page (:db/id page))
               block-eids (mapv :e datoms)]
@@ -1390,7 +1394,7 @@
   (let [pages (->> (mapv get-file-page files)
                    (remove nil?))]
     (when (seq pages)
-      (mapv (fn [page] [:db.fn/retractEntity [:block/name page]]) (map string/lower-case pages)))))
+      (mapv (fn [page] [:db.fn/retractEntity [:block/name page]]) (map util/page-name-sanity-lc pages)))))
 
 (defn remove-all-aliases!
   [repo]
@@ -1504,7 +1508,7 @@
         orphaned-pages (->>
                         (map
                           (fn [page]
-                            (let [name (string/lower-case page)]
+                            (let [name (util/page-name-sanity-lc page)]
                               (when-let [page (db-utils/entity [:block/name name])]
                                 (and
                                  (empty-ref-f page)

+ 2 - 2
src/main/frontend/db/query_dsl.cljs

@@ -336,8 +336,8 @@
 
        (and (= 'namespace fe)
             (= 2 (count e)))
-       (let [page-name (string/lower-case (str (first (rest e))))
-             page (text/page-ref-un-brackets! page-name)]
+       (let [page-name (text/page-ref-un-brackets! (str (first (rest e))))
+             page (util/page-name-sanity-lc page-name)]
          (when-not (string/blank? page)
            [['?p :block/namespace '?parent]
             ['?parent :block/name page]]))

+ 1 - 1
src/main/frontend/handler/draw.cljs

@@ -30,7 +30,7 @@
           (fs/write-file! repo repo-dir path data nil)
           (db/transact! repo
                         [{:file/path path
-                          :block/name file
+                          :block/name (util/page-name-sanity-lc file)
                           :block/file {:file/path path}
                           :block/journal? false}]))
          (p/catch (fn [error]

+ 2 - 2
src/main/frontend/handler/editor.cljs

@@ -742,7 +742,7 @@
 (defn insert-first-page-block-if-not-exists!
   [page-name]
   (when (string? page-name)
-    (when-let [page (db/entity [:block/name (string/lower-case page-name)])]
+    (when-let [page (db/entity [:block/name (util/page-name-sanity-lc page-name)])]
       (when (db/page-empty? (state/get-current-repo) (:db/id page))
         (api-insert-new-block! "" {:page page-name})))))
 
@@ -783,7 +783,7 @@
 (defn add-default-title-property-if-needed!
   [page-name]
   (when (string? page-name)
-    (when-let [page (db/entity [:block/name (string/lower-case page-name)])]
+    (when-let [page (db/entity [:block/name (util/page-name-sanity-lc page-name)])]
       (when (db/page-empty? (state/get-current-repo) (:db/id page))
         (let [title (or (:block/original-name page)
                         (:block/name page))

+ 1 - 1
src/main/frontend/handler/extract.cljs

@@ -105,7 +105,7 @@
                                            aliases (when (seq aliases)
                                                      (map
                                                        (fn [alias]
-                                                         {:block/name (string/lower-case alias)})
+                                                         {:block/name (util/page-name-sanity-lc alias)})
                                                        aliases))]
                                        (if (seq aliases)
                                          {:block/name page-name

+ 1 - 1
src/main/frontend/handler/graph.cljs

@@ -126,7 +126,7 @@
   [page theme]
   (let [dark? (= "dark" theme)]
     (when-let [repo (state/get-current-repo)]
-      (let [page (string/lower-case page)
+      (let [page (util/page-name-sanity-lc page)
             page-entity (db/entity [:block/name page])
             original-page-name (:block/original-name page-entity)
             tags (:tags (:block/properties page-entity))

+ 6 - 5
src/main/frontend/handler/page.cljs

@@ -55,7 +55,7 @@
   ([] (get-page-file-path (state/get-current-page)))
   ([page-name]
    (when page-name
-     (let [page-name (string/lower-case page-name)]
+     (let [page-name (util/page-name-sanity-lc page-name)]
        (when-let [page (db/entity [:block/name page-name])]
         (:file/path (:block/file page)))))))
 
@@ -290,7 +290,7 @@
                            :or {delete-file? true}}]
   (when page-name
     (when-let [repo (state/get-current-repo)]
-      (let [page-name (string/lower-case page-name)
+      (let [page-name (util/page-name-sanity-lc page-name)
             blocks (db/get-page-blocks-no-cache page-name)
             tx-data (mapv
                      (fn [block]
@@ -447,7 +447,7 @@
              (println "Renamed " old-page-title " to " new-page-title))))))))
 
 (defn- rename-namespace-pages!
-  "Only accepts unsanitized names"
+  "Accepts unsanitized names"
   [repo old-name new-name]
   (let [pages (db/get-namespace-pages repo old-name)
         page (db/pull [:block/name (util/page-name-sanity-lc old-name)])
@@ -512,6 +512,7 @@
                               :path-params {:name to-page-name}})))
 
 (defn rename!
+  "Accepts unsanitized page names"
   [old-name new-name]
   (let [repo          (state/get-current-repo)
         old-name      (string/trim old-name)
@@ -712,7 +713,7 @@
                 (config/local-db? repo)
                 (and (= "local" repo) (not (mobile/is-native-platform?))))
         (let [title (date/today)
-              today-page (string/lower-case title)
+              today-page (util/page-name-sanity-lc title)
               template (state/get-default-journal-template)
               format (state/get-preferred-format repo)
               file-name (date/journal-title->default title)
@@ -744,7 +745,7 @@
 
 (defn open-today-in-sidebar
   []
-  (when-let [page (db/entity [:block/name (string/lower-case (date/today))])]
+  (when-let [page (db/entity [:block/name (util/page-name-sanity-lc (date/today))])]
     (state/sidebar-add-block!
      (state/get-current-repo)
      (:db/id page)

+ 2 - 2
src/main/frontend/handler/repo.cljs

@@ -116,8 +116,8 @@
           path (str (config/get-journals-directory) "/" file-name "."
                     (config/get-file-extension format))
           file-path (str "/" path)
-          page-exists? (db/entity repo-url [:block/name (string/lower-case title)])
-          empty-blocks? (db/page-empty? repo-url (string/lower-case title))]
+          page-exists? (db/entity repo-url [:block/name (util/page-name-sanity-lc title)])
+          empty-blocks? (db/page-empty? repo-url (util/page-name-sanity-lc title))]
       (when (or empty-blocks? (not page-exists?))
         (p/let [_ (nfs/check-directory-permission! repo-url)
                 _ (fs/mkdir-if-not-exists (str repo-dir "/" (config/get-journals-directory)))

+ 1 - 1
src/main/frontend/handler/route.cljs

@@ -85,7 +85,7 @@
               (str (subs content 0 48) "...")
               content))
           "Page no longer exists!!")
-        (let [page (db/pull [:block/name (string/lower-case name)])]
+        (let [page (db/pull [:block/name (util/page-name-sanity-lc name)])]
           (or (util/get-page-original-name page)
               "Logseq"))))
     :tag

+ 2 - 1
src/main/frontend/handler/search.cljs

@@ -4,6 +4,7 @@
             [frontend.handler.notification :as notification-handler]
             [frontend.search :as search]
             [frontend.state :as state]
+            [frontend.util :as util]
             [goog.dom :as gdom]
             [goog.object :as gobj]
             [promesa.core :as p]))
@@ -25,7 +26,7 @@
             :as opts}]
    (when-not (string/blank? q)
      (let [page-db-id (if (string? page-db-id)
-                        (:db/id (db/entity repo [:block/name (string/lower-case page-db-id)]))
+                        (:db/id (db/entity repo [:block/name (util/page-name-sanity-lc page-db-id)]))
                         page-db-id)
            opts (if page-db-id (assoc opts :page (str page-db-id)) opts)]
        (p/let [blocks (search/block-search repo q opts)]

+ 1 - 1
src/main/frontend/search.cljs

@@ -76,7 +76,7 @@
 (defn fuzzy-search
   [data query & {:keys [limit extract-fn]
                  :or {limit 20}}]
-  (let [query (string/lower-case query)]
+  (let [query (util/query-normalize query)]
     (->> (take limit
                (sort-by :score (comp - compare)
                         (filter #(< 0 (:score %))

+ 1 - 1
src/main/frontend/util/page_property.cljs

@@ -50,7 +50,7 @@
 (defn add-property!
   "Sanitized page-name, unsanitized key / value"
   [page-name key value]
-  (when-let [page (db/pull [:block/name (string/lower-case page-name)])]
+  (when-let [page (db/pull [:block/name (util/page-name-sanity-lc page-name)])]
     (let [repo (state/get-current-repo)
           key (keyword key)
           pre-block (db/get-pre-block repo (:db/id page))