mirror of
https://github.com/logseq/logseq.git
synced 2026-05-29 15:09:41 +00:00
Merge remote-tracking branch 'upstream/master' into whiteboards
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"))
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user