mirror of
https://github.com/logseq/logseq.git
synced 2026-05-27 14:14:24 +00:00
update frontend.util.property-edit
This commit is contained in:
@@ -41,19 +41,19 @@
|
||||
"")
|
||||
content))
|
||||
|
||||
(defn simplified-property?
|
||||
(defn- simplified-property?
|
||||
[line]
|
||||
(boolean
|
||||
(and (string? line)
|
||||
(re-find (re-pattern (str "^\\s?[^ ]+" gp-property/colons)) line))))
|
||||
|
||||
(defn front-matter-property?
|
||||
(defn- front-matter-property?
|
||||
[line]
|
||||
(boolean
|
||||
(and (string? line)
|
||||
(util/safe-re-find #"^\s*[^ ]+:" line))))
|
||||
|
||||
(defn get-property-key
|
||||
(defn- get-property-key
|
||||
[line format]
|
||||
(and (string? line)
|
||||
(when-let [key (last
|
||||
@@ -62,7 +62,7 @@
|
||||
(util/safe-re-find #"^\s*([^ ]+):: " line)))]
|
||||
(keyword key))))
|
||||
|
||||
(defn org-property?
|
||||
(defn- org-property?
|
||||
[line]
|
||||
(boolean
|
||||
(and (string? line)
|
||||
@@ -70,7 +70,7 @@
|
||||
(when-let [key (get-property-key line :org)]
|
||||
(not (contains? #{:PROPERTIES :END} key))))))
|
||||
|
||||
(defn get-org-property-keys
|
||||
(defn- get-org-property-keys
|
||||
[content]
|
||||
(let [content-lines (string/split-lines content)
|
||||
[_ properties&body] (split-with #(-> (string/triml %)
|
||||
@@ -91,7 +91,7 @@
|
||||
string/upper-case)
|
||||
properties))))
|
||||
|
||||
(defn get-markdown-property-keys
|
||||
(defn- get-markdown-property-keys
|
||||
[content]
|
||||
(let [content-lines (string/split-lines content)
|
||||
properties (filter #(re-matches (re-pattern (str "^.+" gp-property/colons "\\s*.+")) %)
|
||||
@@ -103,7 +103,7 @@
|
||||
string/upper-case)
|
||||
properties))))
|
||||
|
||||
(defn get-property-keys
|
||||
(defn- get-property-keys
|
||||
[format content]
|
||||
(cond
|
||||
(gp-property/contains-properties? content)
|
||||
@@ -163,7 +163,7 @@
|
||||
:else
|
||||
content))
|
||||
|
||||
(defn build-properties-str
|
||||
(defn- build-properties-str
|
||||
[format properties]
|
||||
(when (seq properties)
|
||||
(let [org? (= format :org)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
(ns frontend.util.property-edit
|
||||
"Macros.")
|
||||
|
||||
(defmacro defn-for-file-based-graph
|
||||
(defmacro defn-when-file-based
|
||||
[fname args]
|
||||
(let [fn-name (symbol (str fname "-for-file-based"))
|
||||
(let [fn-name (symbol (str fname "-when-file-based"))
|
||||
other-args (gensym "args")
|
||||
fn-args (vector 'repo '& other-args)
|
||||
call-fn-name (symbol (str "frontend.util.property/" fname))]
|
||||
|
||||
@@ -1,15 +1,27 @@
|
||||
(ns frontend.util.property-edit
|
||||
"Property related fns, both file-based and db-based version need to be considered."
|
||||
{:clj-kondo/config {:linters {:unresolved-symbol {:level :off}}}}
|
||||
(:require-macros [frontend.util.property-edit :refer [defn-for-file-based-graph]]))
|
||||
(:require-macros [frontend.util.property-edit :refer [defn-when-file-based]])
|
||||
(:require [frontend.util.property :as property]))
|
||||
|
||||
|
||||
;; Why need these XXX-for-file-based fns?
|
||||
;; Why need these XXX-when-file-based fns?
|
||||
;; there're a lot of usages of property-related fns(e.g. property/insert-property) in the whole codebase.
|
||||
;; I want to minimize extensive modifications as much as possible when we add db-based graph support.
|
||||
|
||||
(defn-for-file-based-graph insert-property [format content key value & args])
|
||||
(defn-for-file-based-graph insert-properties [format content kvs])
|
||||
(defn-for-file-based-graph remove-property [format key content & args])
|
||||
(defn-for-file-based-graph remove-id-property [format content])
|
||||
(defn-for-file-based-graph remove-built-in-properties [format content])
|
||||
(defn-when-file-based insert-property [format content key value & args])
|
||||
(defn-when-file-based insert-properties [format content kvs])
|
||||
(defn-when-file-based remove-property [format key content & args])
|
||||
(defn-when-file-based remove-properties [format content])
|
||||
(defn-when-file-based remove-id-property [format content])
|
||||
(defn-when-file-based remove-built-in-properties [format content])
|
||||
(defn-when-file-based remove-empty-properties [content])
|
||||
(defn-when-file-based with-built-in-properties [properties content format])
|
||||
|
||||
|
||||
(def hidden-properties property/hidden-properties)
|
||||
(def built-in-properties property/built-in-properties)
|
||||
(def properties-hidden? property/properties-hidden?)
|
||||
(def property-key-exist?-when-file-based property/property-key-exist?)
|
||||
(def goto-properties-end-when-file-based property/goto-properties-end)
|
||||
(def front-matter?-when-file-based property/front-matter?)
|
||||
|
||||
@@ -73,17 +73,17 @@
|
||||
(deftest test-get-property-keys
|
||||
(testing "org mode"
|
||||
(are [x y] (= x y)
|
||||
(property/get-property-keys :org "hello\n:PROPERTIES:\n:x1: y1\n:x2: y2\n:END:\n")
|
||||
(#'property/get-property-keys :org "hello\n:PROPERTIES:\n:x1: y1\n:x2: y2\n:END:\n")
|
||||
["X1" "X2"]
|
||||
|
||||
(property/get-property-keys :org "hello\n:PROPERTIES:\n:END:\n")
|
||||
(#'property/get-property-keys :org "hello\n:PROPERTIES:\n:END:\n")
|
||||
nil))
|
||||
(testing "markdown mode"
|
||||
(are [x y] (= x y)
|
||||
(property/get-property-keys :markdown "hello\nx1:: y1\nx2:: y2\n")
|
||||
(#'property/get-property-keys :markdown "hello\nx1:: y1\nx2:: y2\n")
|
||||
["X1" "X2"]
|
||||
|
||||
(property/get-property-keys :markdown "hello\n")
|
||||
(#'property/get-property-keys :markdown "hello\n")
|
||||
nil)))
|
||||
|
||||
(deftest test-insert-property
|
||||
@@ -167,14 +167,14 @@ SCHEDULED: <2021-10-25 Mon>\n:PROPERTIES:\n:a: b\n:END:\nworld\n" "c" "d")
|
||||
"abcd\nempty::\nanother-empty::\nid:: 123"))
|
||||
|
||||
(deftest test-build-properties-str
|
||||
(are [x y] (= (property/build-properties-str :mardown x) y)
|
||||
(are [x y] (= (#'property/build-properties-str :mardown x) y)
|
||||
{:title "a"}
|
||||
"title:: a\n"
|
||||
{:title "a/b/c"}
|
||||
"title:: a/b/c\n"
|
||||
{:title "a/b/c" :tags "d,e"}
|
||||
"title:: a/b/c\ntags:: d,e\n")
|
||||
(are [x y] (= (property/build-properties-str :org x) y)
|
||||
(are [x y] (= (#'property/build-properties-str :org x) y)
|
||||
{:title "a"}
|
||||
":PROPERTIES:\n:title: a\n:END:"
|
||||
{:title "a/b/c"}
|
||||
|
||||
Reference in New Issue
Block a user