Merge remote-tracking branch 'upstream/master' into whiteboards

This commit is contained in:
Peng Xiao
2022-08-01 10:22:15 +08:00
5 changed files with 112 additions and 5 deletions

View File

@@ -18,6 +18,7 @@
[logseq.db.rules :refer [rules]]
[logseq.db.schema :as db-schema]
[logseq.graph-parser.config :as gp-config]
[logseq.graph-parser.text :as text]
[logseq.graph-parser.util :as gp-util]))
;; lazy loading
@@ -1095,6 +1096,51 @@
(util/safe-page-name-sanity-lc page))
(distinct))))
(def ns-char "/")
(def ns-re #"/")
(defn- get-parents-namespace-list
"Return list of parents namespace"
[page-namespace & nested-found]
(if (text/namespace-page? page-namespace)
(let [pre-nested-vec (drop-last (string/split page-namespace ns-re))
my-nested-found (if (nil? nested-found)
[]
nested-found)]
(if (= (count pre-nested-vec) 1)
(conj my-nested-found (nth pre-nested-vec 0))
(let [pre-nested-str (string/join ns-char pre-nested-vec)]
(recur pre-nested-str (conj my-nested-found pre-nested-str)))))
[]))
(defn- get-unnecessary-namespaces-name
"Return unnecessary namespace from a list of page's name"
[pages-list]
(->> pages-list
(remove nil?)
(mapcat get-parents-namespace-list)
distinct))
(defn- remove-nested-namespaces-link
"Remove relations between pages and their nested namespace"
[pages-relations]
(let [pages-relations-to-return (distinct (mapcat
identity
(for [item (for [a-link-from (mapv (fn [a-rel] (first a-rel)) pages-relations)]
[a-link-from (mapv
(fn [a-rel] (second a-rel))
(filterv
(fn [link-target] (= a-link-from (first link-target)))
pages-relations))])
:let [list-to (get item 1)
page (get item 0)
namespaces-to-remove (get-unnecessary-namespaces-name list-to)
list-to-without-nested-ns (filterv (fn [elem] (not (some #{elem} namespaces-to-remove))) list-to)
node-links (for [item-ok list-to-without-nested-ns]
[page item-ok])]]
(seq node-links))))]
pages-relations-to-return))
;; Ignore files with empty blocks for now
(defn get-pages-relation
[repo with-journal?]
@@ -1116,7 +1162,8 @@
(->>
(d/q q db)
(map (fn [[page ref-page-name]]
[page ref-page-name]))))))
[page ref-page-name]))
(remove-nested-namespaces-link)))))
;; get pages who mentioned this page
;; TODO: use :block/_refs

View File

@@ -161,11 +161,12 @@
[text]
(when-not (string/blank? text)
(let [sp "@#~#@"]
(let [sp "|#|"]
(-> text
(string/replace #"[\r\n]+" sp)
(string/replace (str "-" sp) "")
(string/replace sp " ")))))
(string/replace #"\|#\|([a-zA-Z_])" " $1")
(string/replace sp "")))))
;; TODO: which viewer instance?
(defn next-page
@@ -179,3 +180,10 @@
(try
(js-invoke js/window.lsPdfViewer "previousPage")
(catch js/Error _e nil)))
(comment
(fix-selection-text-breakline "this is a\ntest paragraph")
(fix-selection-text-breakline "he is 1\n8 years old")
(fix-selection-text-breakline "这是一个\n\n段落")
(fix-selection-text-breakline "これ\n\nは、段落")
(fix-selection-text-breakline "this is a te-\nst paragraph"))

View File

@@ -111,4 +111,32 @@
(map first (model/get-pages-that-mentioned-page test-helper/test-db "generic page" false)))
"Must be empty"))
(deftest remove-links-for-each-level-of-the-namespaces
(load-test-files [{:file/path "pages/generic page.md"
:file/content "tags:: [[one/two/tree]], one/two
- link to ns [[one]]
- link to page one [[page ONE]]"}])
(is (= '("one/two/tree" "page one")
(map second (model/get-pages-relation test-helper/test-db true)))
"(get-pages-relation) Must be only ns one/two/tree")
(is (= '("one/two/tree" "page one")
(map second (#'model/remove-nested-namespaces-link [["generic page" "one/two/tree"]
["generic page" "one/two"]
["generic page" "one"]
["generic page" "page one"]])))
"(model/remove-nested-namespaces-link) Must be only ns one/two/tree")
(is (= '("one/two/tree" "one/two" "one")
(#'model/get-parents-namespace-list "one/two/tree/four"))
"Must be one/two/tree one/two one")
(is (= '("one/two" "one")
(#'model/get-unnecessary-namespaces-name '("one/two/tree" "one" "one/two" "non nested tag" "non nested link")))
"Must be one/two one"))
#_(cljs.test/test-ns 'frontend.db.model-test)