From 5b0d5fb8b5c8a851b685c5de9cdfbc985a1c6fb8 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Fri, 13 May 2022 16:17:43 -0400 Subject: [PATCH] Decouple graph-parser util from app util usage For tiny util heavily used fns like safe-re-find and uuid-string?, decouple graph-parser from so much of the app --- src/main/frontend/commands.cljs | 6 ++-- src/main/frontend/components/block.cljs | 16 +++++----- src/main/frontend/components/content.cljs | 2 +- src/main/frontend/components/page.cljs | 6 ++-- src/main/frontend/components/page_menu.cljs | 3 +- src/main/frontend/components/reference.cljs | 5 ++-- src/main/frontend/components/search.cljs | 3 +- src/main/frontend/config.cljs | 2 +- src/main/frontend/db/model.cljs | 4 +-- src/main/frontend/db/query_dsl.cljs | 5 ++-- src/main/frontend/db/query_react.cljs | 5 ++-- src/main/frontend/db/react.cljs | 3 +- src/main/frontend/extensions/html_parser.cljs | 3 +- src/main/frontend/handler/editor.cljs | 24 +++++++-------- src/main/frontend/handler/graph.cljs | 5 ++-- src/main/frontend/handler/page.cljs | 4 +-- src/main/frontend/handler/route.cljs | 3 +- src/main/frontend/handler/ui.cljs | 3 +- src/main/frontend/modules/outliner/tree.cljs | 4 +-- src/main/frontend/security.cljs | 4 +-- src/main/frontend/state.cljs | 3 +- src/main/frontend/util.cljc | 29 +++++++++++++++---- src/main/frontend/util/drawer.cljs | 5 ++-- src/main/frontend/util/marker.cljs | 7 ++--- src/main/frontend/util/priority.cljs | 5 ++-- src/main/frontend/util/property.cljs | 10 +++---- src/main/logseq/graph_parser/util.cljs | 2 ++ 27 files changed, 88 insertions(+), 83 deletions(-) diff --git a/src/main/frontend/commands.cljs b/src/main/frontend/commands.cljs index c5bfd4c39..0bb20d020 100644 --- a/src/main/frontend/commands.cljs +++ b/src/main/frontend/commands.cljs @@ -517,7 +517,7 @@ (defn compute-pos-delta-when-change-marker [edit-content marker pos] - (let [old-marker (some->> (first (gp-util/safe-re-find marker/bare-marker-pattern edit-content)) + (let [old-marker (some->> (first (util/safe-re-find marker/bare-marker-pattern edit-content)) (string/trim)) pos-delta (- (count marker) (count old-marker)) @@ -542,7 +542,7 @@ (if-let [matches (seq (util/re-pos new-line-re-pattern prefix))] (let [[start-pos content] (last matches)] (+ start-pos (count content))) - (count (gp-util/safe-re-find re-pattern prefix)))) + (count (util/safe-re-find re-pattern prefix)))) new-value (str (subs edit-content 0 pos) (string/replace-first (subs edit-content pos) (marker/marker-pattern format) @@ -583,7 +583,7 @@ (let [edit-content (gobj/get current-input "value") heading-pattern #"^#+\s+" new-value (cond - (gp-util/safe-re-find heading-pattern edit-content) + (util/safe-re-find heading-pattern edit-content) (string/replace-first edit-content heading-pattern (str heading " ")) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index 496fa6b94..a267649ff 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -683,7 +683,7 @@ [config id label] (when (and (not (string/blank? id)) - (gp-util/uuid-string? id)) + (util/uuid-string? id)) (let [block-id (uuid id) block (db/pull-block block-id) block-type (keyword (get-in block [:block/properties :ls-type])) @@ -961,7 +961,7 @@ (= "Complex" protocol) (= (string/lower-case (:protocol path)) "id") (string? (:link path)) - (gp-util/uuid-string? (:link path))) ; org mode id + (util/uuid-string? (:link path))) ; org mode id (let [id (uuid (:link path)) block (db/entity [:block/uuid id])] (if (:block/pre-block? block) @@ -1077,7 +1077,7 @@ string/trim)] (when-let [id (and s (let [s (string/trim s)] - (and (gp-util/uuid-string? s) + (and (util/uuid-string? s) (uuid s))))] (block-embed (assoc config :link-depth (inc link-depth)) id))) @@ -1088,7 +1088,7 @@ [_config arguments] (when-let [url (first arguments)] (let [Vimeo-regex #"^((?:https?:)?//)?((?:www).)?((?:player.vimeo.com|vimeo.com)?)((?:/video/)?)([\w-]+)(\S+)?$"] - (when-let [vimeo-id (nth (gp-util/safe-re-find Vimeo-regex url) 5)] + (when-let [vimeo-id (nth (util/safe-re-find Vimeo-regex url) 5)] (when-not (string/blank? vimeo-id) (let [width (min (- (util/get-width) 96) 560) @@ -1109,7 +1109,7 @@ (when-let [id (cond (<= (count url) 15) url :else - (last (gp-util/safe-re-find id-regex url)))] + (last (util/safe-re-find id-regex url)))] (when-not (string/blank? id) (let [width (min (- (util/get-width) 96) 560) @@ -1239,7 +1239,7 @@ (when-let [youtube-id (cond (== 11 (count url)) url :else - (nth (gp-util/safe-re-find YouTube-regex url) 5))] + (nth (util/safe-re-find YouTube-regex url) 5))] (when-not (string/blank? youtube-id) (youtube/youtube-video youtube-id))))) @@ -1270,7 +1270,7 @@ (when-let [id (cond (<= (count url) 15) url :else - (last (gp-util/safe-re-find id-regex url)))] + (last (util/safe-re-find id-regex url)))] (ui/tweet-embed id)))) (= name "embed") @@ -2858,7 +2858,7 @@ ["Paragraph" l] ;; TODO: speedup - (if (gp-util/safe-re-find #"\"Export_Snippet\" \"embed\"" (str l)) + (if (util/safe-re-find #"\"Export_Snippet\" \"embed\"" (str l)) (->elem :div (map-inline config l)) (->elem :div.is-paragraph (map-inline config l))) diff --git a/src/main/frontend/components/content.cljs b/src/main/frontend/components/content.cljs index a9ca9f273..d83b8d66c 100644 --- a/src/main/frontend/components/content.cljs +++ b/src/main/frontend/components/content.cljs @@ -363,7 +363,7 @@ e (custom-context-menu-content)) - (and block-id (gp-util/uuid-string? block-id)) + (and block-id (util/uuid-string? block-id)) (let [block (.closest target ".ls-block")] (when block (util/select-highlight! [block])) diff --git a/src/main/frontend/components/page.cljs b/src/main/frontend/components/page.cljs index 2e2171ea1..b9efba573 100644 --- a/src/main/frontend/components/page.cljs +++ b/src/main/frontend/components/page.cljs @@ -122,7 +122,7 @@ (when page-e (let [page-name (or (:block/name page-e) (str (:block/uuid page-e))) - block? (gp-util/uuid-string? page-name) + block? (util/uuid-string? page-name) block-id (and block? (uuid page-name)) page-blocks (get-blocks repo page-name block-id)] (if (empty? page-blocks) @@ -317,7 +317,7 @@ (let [current-repo (state/sub :git/current-repo) repo (or repo current-repo) page-name (util/page-name-sanity-lc path-page-name) - block? (gp-util/uuid-string? page-name) + block? (util/uuid-string? page-name) block-id (and block? (uuid page-name)) format (let [page (if block-id (:block/name (:block/page (db/entity [:block/uuid block-id]))) @@ -640,7 +640,7 @@ (date/today)) theme (:ui/theme @state/state) dark? (= theme "dark") - graph (if (gp-util/uuid-string? page) + graph (if (util/uuid-string? page) (graph-handler/build-block-graph (uuid page) theme) (graph-handler/build-page-graph page theme))] (when (seq (:nodes graph)) diff --git a/src/main/frontend/components/page_menu.cljs b/src/main/frontend/components/page_menu.cljs index 981fafff5..4da04fc7c 100644 --- a/src/main/frontend/components/page_menu.cljs +++ b/src/main/frontend/components/page_menu.cljs @@ -14,7 +14,6 @@ [frontend.handler.shell :as shell] [frontend.handler.plugin :as plugin-handler] [frontend.mobile.util :as mobile-util] - [logseq.graph-parser.util :as gp-util] [electron.ipc :as ipc] [frontend.config :as config] [frontend.handler.user :as user-handler] @@ -64,7 +63,7 @@ repo (state/sub :git/current-repo) page (db/entity repo [:block/name page-name]) page-original-name (:block/original-name page) - block? (and page (gp-util/uuid-string? page-name)) + block? (and page (util/uuid-string? page-name)) contents? (= page-name "contents") properties (:block/properties page) public? (true? (:public properties)) diff --git a/src/main/frontend/components/reference.cljs b/src/main/frontend/components/reference.cljs index 9e25e611d..5f4263883 100644 --- a/src/main/frontend/components/reference.cljs +++ b/src/main/frontend/components/reference.cljs @@ -12,7 +12,6 @@ [frontend.state :as state] [frontend.ui :as ui] [frontend.util :as util] - [logseq.graph-parser.util :as gp-util] [medley.core :as medley] [rum.core :as rum])) @@ -83,7 +82,7 @@ default-collapsed? (>= (count refed-blocks-ids) threshold) filters-atom (get state ::filters) filter-state (rum/react filters-atom) - block? (gp-util/uuid-string? page-name) + block? (util/uuid-string? page-name) block-id (and block? (uuid page-name)) page-name (string/lower-case page-name) journal? (date/valid-journal-title? (string/capitalize page-name)) @@ -170,7 +169,7 @@ (ui/catch-error (ui/component-error "Linked References: Unexpected error") (ui/lazy-visible - (if (or sidebar? (gp-util/uuid-string? page-name)) + (if (or sidebar? (util/uuid-string? page-name)) nil "loading references...") (fn [] diff --git a/src/main/frontend/components/search.cljs b/src/main/frontend/components/search.cljs index 978b6bdd1..94bbd9268 100644 --- a/src/main/frontend/components/search.cljs +++ b/src/main/frontend/components/search.cljs @@ -20,7 +20,6 @@ [clojure.string :as string] [frontend.context.i18n :refer [t]] [frontend.date :as date] - [logseq.graph-parser.util :as gp-util] [reitit.frontend.easy :as rfe] [frontend.modules.shortcut.core :as shortcut])) @@ -33,7 +32,7 @@ lc-content (util/search-normalize content) lc-q (util/search-normalize q)] (if (and (string/includes? lc-content lc-q) - (not (gp-util/safe-re-find #" " q))) + (not (util/safe-re-find #" " q))) (let [i (string/index-of lc-content lc-q) [before after] [(subs content 0 i) (subs content (+ i (count q)))]] [:div diff --git a/src/main/frontend/config.cljs b/src/main/frontend/config.cljs index 7d3f09865..97d0bd952 100644 --- a/src/main/frontend/config.cljs +++ b/src/main/frontend/config.cljs @@ -99,7 +99,7 @@ (def mobile? (when-not util/node-test? - (gp-util/safe-re-find #"Mobi" js/navigator.userAgent))) + (util/safe-re-find #"Mobi" js/navigator.userAgent))) ;; TODO: protocol design for future formats support diff --git a/src/main/frontend/db/model.cljs b/src/main/frontend/db/model.cljs index c441628fe..693fd961e 100644 --- a/src/main/frontend/db/model.cljs +++ b/src/main/frontend/db/model.cljs @@ -912,7 +912,7 @@ (defn get-page [page-name] - (if (gp-util/uuid-string? page-name) + (if (util/uuid-string? page-name) (db-utils/entity [:block/uuid (uuid page-name)]) (db-utils/entity [:block/name (util/page-name-sanity-lc page-name)]))) @@ -1221,7 +1221,7 @@ (defn get-referenced-blocks-ids [page-name-or-block-uuid] - (if (gp-util/uuid-string? (str page-name-or-block-uuid)) + (if (util/uuid-string? (str page-name-or-block-uuid)) (let [id (uuid page-name-or-block-uuid)] (get-block-referenced-blocks-ids id)) (get-page-referenced-blocks-ids page-name-or-block-uuid))) diff --git a/src/main/frontend/db/query_dsl.cljs b/src/main/frontend/db/query_dsl.cljs index af90dbaa5..2710d912a 100644 --- a/src/main/frontend/db/query_dsl.cljs +++ b/src/main/frontend/db/query_dsl.cljs @@ -14,8 +14,7 @@ [frontend.db.rules :as rules] [frontend.template :as template] [logseq.graph-parser.text :as text] - [frontend.util :as util] - [logseq.graph-parser.util :as gp-util])) + [frontend.util :as util])) ;; Query fields: @@ -449,7 +448,7 @@ Some bindings in this fn: (remove string/blank?) (map (fn [x] (if (or (contains? #{"+" "-"} (first x)) - (and (gp-util/safe-re-find #"\d" (first x)) + (and (util/safe-re-find #"\d" (first x)) (some #(string/ends-with? x %) ["y" "m" "d" "h" "min"]))) (keyword (name x)) x))) diff --git a/src/main/frontend/db/query_react.cljs b/src/main/frontend/db/query_react.cljs index a2bc02c68..c913bd673 100644 --- a/src/main/frontend/db/query_react.cljs +++ b/src/main/frontend/db/query_react.cljs @@ -12,7 +12,6 @@ [frontend.state :as state] [logseq.graph-parser.text :as text] [frontend.util :as util] - [logseq.graph-parser.util :as gp-util] [lambdaisland.glogi :as log])) (defn resolve-input @@ -32,12 +31,12 @@ ;; This sometimes runs when there isn't a current page e.g. :home route (some-> (state/get-current-page) string/lower-case) (and (keyword? input) - (gp-util/safe-re-find #"^\d+d(-before)?$" (name input))) + (util/safe-re-find #"^\d+d(-before)?$" (name input))) (let [input (name input) days (util/parse-int (subs input 0 (dec (count input))))] (date->int (t/minus (t/today) (t/days days)))) (and (keyword? input) - (gp-util/safe-re-find #"^\d+d(-after)?$" (name input))) + (util/safe-re-find #"^\d+d(-after)?$" (name input))) (let [input (name input) days (util/parse-int (subs input 0 (dec (count input))))] (date->int (t/plus (t/today) (t/days days)))) diff --git a/src/main/frontend/db/react.cljs b/src/main/frontend/db/react.cljs index 4508bee68..25572352a 100644 --- a/src/main/frontend/db/react.cljs +++ b/src/main/frontend/db/react.cljs @@ -10,7 +10,6 @@ [frontend.db.utils :as db-utils] [frontend.state :as state] [frontend.util :as util :refer [react]] - [logseq.graph-parser.util :as gp-util] [cljs.spec.alpha :as s] [clojure.core.async :as async])) @@ -230,7 +229,7 @@ affected-keys (concat (mapcat (fn [block-id] - (let [block-id (if (and (string? block-id) (gp-util/uuid-string? block-id)) + (let [block-id (if (and (string? block-id) (util/uuid-string? block-id)) [:block/uuid block-id] block-id)] (when-let [block (db-utils/entity block-id)] diff --git a/src/main/frontend/extensions/html_parser.cljs b/src/main/frontend/extensions/html_parser.cljs index 3ca5c5ff5..0e7fb1e4a 100644 --- a/src/main/frontend/extensions/html_parser.cljs +++ b/src/main/frontend/extensions/html_parser.cljs @@ -4,7 +4,6 @@ [clojure.walk :as walk] [frontend.config :as config] [frontend.util :as util] - [logseq.graph-parser.util :as gp-util] [hickory.core :as hickory])) (defonce *inside-pre? (atom false)) @@ -75,7 +74,7 @@ :h6 (block-transform 6 children) :a (let [href (:href attrs) label (map-join children) - has-img-tag? (gp-util/safe-re-find #"\[:img" (str x))] + has-img-tag? (util/safe-re-find #"\[:img" (str x))] (if has-img-tag? (export-hiccup x) (case format diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index ac24c325c..9a89df013 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -257,7 +257,7 @@ (defn- another-block-with-same-id-exists? [current-id block-id] (and (string? block-id) - (gp-util/uuid-string? block-id) + (util/uuid-string? block-id) (not= current-id (cljs.core/uuid block-id)) (db/entity [:block/uuid (cljs.core/uuid block-id)]))) @@ -338,7 +338,7 @@ (if (and (state/enable-timetracking?) (not= (:block/content block) value)) (let [format (:block/format block) - new-marker (last (gp-util/safe-re-find (marker/marker-pattern format) (or value ""))) + new-marker (last (util/safe-re-find (marker/marker-pattern format) (or value ""))) new-value (with-marker-time value block format new-marker (:block/marker block))] @@ -483,10 +483,10 @@ (let [current-page (state/get-current-page) block-id (or (and (:id config) - (gp-util/uuid-string? (:id config)) + (util/uuid-string? (:id config)) (:id config)) (and current-page - (gp-util/uuid-string? current-page) + (util/uuid-string? current-page) current-page))] (= uuid (and block-id (medley/uuid block-id))))) @@ -1147,7 +1147,7 @@ [] (when-let [page (get-nearest-page)] (let [page-name (string/lower-case page) - block? (gp-util/uuid-string? page-name)] + block? (util/uuid-string? page-name)] (when-let [page (db/get-page page-name)] (if block? (state/sidebar-add-block! @@ -1177,7 +1177,7 @@ (let [page (state/get-current-page) block-id (and (string? page) - (gp-util/uuid-string? page) + (util/uuid-string? page) (medley/uuid page))] (when block-id (let [block-parent (db/get-block-parent block-id)] @@ -2040,7 +2040,7 @@ (defn- last-top-level-child? [{:keys [id]} current-node] (when id - (when-let [entity (if (gp-util/uuid-string? (str id)) + (when-let [entity (if (util/uuid-string? (str id)) (db/entity [:block/uuid (uuid id)]) (db/entity [:block/name (util/page-name-sanity-lc id)]))] (= (:block/uuid entity) (tree/-get-parent-id current-node))))) @@ -2867,7 +2867,7 @@ (string/join "\n" (mapv (fn [p] (->> (string/trim p) ((fn [p] - (if (gp-util/safe-re-find (if (= format :org) + (if (util/safe-re-find (if (= format :org) #"\s*\*+\s+" #"\s*-\s+") p) p @@ -2932,9 +2932,9 @@ ;; from external (let [format (or (db/get-page-format (state/get-current-page)) :markdown)] (match [format - (nil? (gp-util/safe-re-find #"(?m)^\s*(?:[-+*]|#+)\s+" text)) - (nil? (gp-util/safe-re-find #"(?m)^\s*\*+\s+" text)) - (nil? (gp-util/safe-re-find #"(?:\r?\n){2,}" text))] + (nil? (util/safe-re-find #"(?m)^\s*(?:[-+*]|#+)\s+" text)) + (nil? (util/safe-re-find #"(?m)^\s*\*+\s+" text)) + (nil? (util/safe-re-find #"(?:\r?\n){2,}" text))] [:markdown false _ _] (paste-text-parseable format text) @@ -3219,7 +3219,7 @@ :or {collapse? false expanded? false incremental? true root-block nil}}] (when-let [page (or (state/get-current-page) (date/today))] - (let [block? (gp-util/uuid-string? page) + (let [block? (util/uuid-string? page) block-id (or root-block (and block? (uuid page))) blocks (if block-id (db/get-block-and-children (state/get-current-repo) block-id) diff --git a/src/main/frontend/handler/graph.cljs b/src/main/frontend/handler/graph.cljs index b923fd6c9..510b35036 100644 --- a/src/main/frontend/handler/graph.cljs +++ b/src/main/frontend/handler/graph.cljs @@ -4,8 +4,7 @@ [frontend.db :as db] [frontend.db.default :as default-db] [frontend.state :as state] - [frontend.util :as util] - [logseq.graph-parser.util :as gp-util])) + [frontend.util :as util])) (defn- build-links [links] @@ -46,7 +45,7 @@ ;; slow (defn- uuid-or-asset? [id] - (or (gp-util/uuid-string? id) + (or (util/uuid-string? id) (string/starts-with? id "../assets/") (= id "..") (string/starts-with? id "assets/") diff --git a/src/main/frontend/handler/page.cljs b/src/main/frontend/handler/page.cljs index 86b98cb77..ef16780cb 100644 --- a/src/main/frontend/handler/page.cljs +++ b/src/main/frontend/handler/page.cljs @@ -637,7 +637,7 @@ (->> (db/get-all-pages repo) (remove (fn [p] (let [name (:block/name p)] - (or (gp-util/uuid-string? name) + (or (util/uuid-string? name) (gp-config/draw? name) (db/built-in-pages-names (string/upper-case name)))))) (common-handler/fix-pages-timestamps))) @@ -691,7 +691,7 @@ chosen (if (string/starts-with? chosen "New page: ") ;; FIXME: What if a page named "New page: XXX"? (subs chosen 10) chosen) - chosen (if (and (gp-util/safe-re-find #"\s+" chosen) (not wrapped?)) + chosen (if (and (util/safe-re-find #"\s+" chosen) (not wrapped?)) (util/format "[[%s]]" chosen) chosen) q (if @editor-handler/*selected-text "" q) diff --git a/src/main/frontend/handler/route.cljs b/src/main/frontend/handler/route.cljs index 53bfc9147..241cf4b9d 100644 --- a/src/main/frontend/handler/route.cljs +++ b/src/main/frontend/handler/route.cljs @@ -9,7 +9,6 @@ [frontend.state :as state] [logseq.graph-parser.text :as text] [frontend.util :as util] - [logseq.graph-parser.util :as gp-util] [medley.core :as medley] [reitit.frontend.easy :as rfe])) @@ -79,7 +78,7 @@ "Create a new page" :page (let [name (:name path-params) - block? (gp-util/uuid-string? name)] + block? (util/uuid-string? name)] (if block? (if-let [block (db/entity [:block/uuid (medley/uuid name)])] (let [content (text/remove-level-spaces (:block/content block) diff --git a/src/main/frontend/handler/ui.cljs b/src/main/frontend/handler/ui.cljs index 53c63f0ef..f3595301f 100644 --- a/src/main/frontend/handler/ui.cljs +++ b/src/main/frontend/handler/ui.cljs @@ -14,7 +14,6 @@ [clojure.string :as string] [rum.core :as rum] [frontend.mobile.util :as mobile] - [logseq.graph-parser.util :as gp-util] [electron.ipc :as ipc])) (defn- get-css-var-value @@ -112,7 +111,7 @@ (let [id (and (> (count fragment) 36) (subs fragment (- (count fragment) 36)))] - (if (and id (gp-util/uuid-string? id)) + (if (and id (util/uuid-string? id)) (let [elements (array-seq (js/document.getElementsByClassName id))] (when (first elements) (util/scroll-to-element (gobj/get (first elements) "id"))) diff --git a/src/main/frontend/modules/outliner/tree.cljs b/src/main/frontend/modules/outliner/tree.cljs index 74bde33cc..65cd4073c 100644 --- a/src/main/frontend/modules/outliner/tree.cljs +++ b/src/main/frontend/modules/outliner/tree.cljs @@ -1,6 +1,6 @@ (ns frontend.modules.outliner.tree (:require [frontend.db :as db] - [logseq.graph-parser.util :as gp-util] + [frontend.util :as util] [clojure.string :as string] [frontend.state :as state])) @@ -45,7 +45,7 @@ (defn- get-root-and-page [repo root-id] (if (string? root-id) - (if (gp-util/uuid-string? root-id) + (if (util/uuid-string? root-id) [false (db/entity repo [:block/uuid (uuid root-id)])] [true (db/entity repo [:block/name (string/lower-case root-id)])]) [false root-id])) diff --git a/src/main/frontend/security.cljs b/src/main/frontend/security.cljs index d62af3637..6936b5fb7 100644 --- a/src/main/frontend/security.cljs +++ b/src/main/frontend/security.cljs @@ -1,6 +1,6 @@ (ns frontend.security (:require [clojure.walk :as walk] - [logseq.graph-parser.util :as gp-util])) + [frontend.util :as util])) ;; To prevent from cross-site scripting vulnerability, we should add security checks for both hiccup and raw html. ;; Hiccup: [:a {:href "javascript:alert('hei')"} "click me"] @@ -12,7 +12,7 @@ (= :a (first f)) (:href (second f)) (:href (second f)) - (gp-util/safe-re-find #"(?i)javascript" (:href (second f))))) + (util/safe-re-find #"(?i)javascript" (:href (second f))))) (defn remove-javascript-links-in-href [hiccup] diff --git a/src/main/frontend/state.cljs b/src/main/frontend/state.cljs index 8f335fb2e..ee4e33f8c 100644 --- a/src/main/frontend/state.cljs +++ b/src/main/frontend/state.cljs @@ -13,7 +13,6 @@ [goog.object :as gobj] [promesa.core :as p] [rum.core :as rum] - [logseq.graph-parser.util :as gp-util] [frontend.mobile.util :as mobile-util])) (defonce ^:large-vars/data-var state @@ -452,7 +451,7 @@ (or (when-let [workflow (:preferred-workflow (get-config))] (let [workflow (name workflow)] - (if (gp-util/safe-re-find #"now|NOW" workflow) + (if (util/safe-re-find #"now|NOW" workflow) :now :todo))) (get-in @state [:me :preferred_workflow] :now)))) diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index 5ec8248d0..2ff429826 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -39,6 +39,23 @@ #?(:cljs (defn app-scroll-container-node [] (gdom/getElement "main-content-container"))) +#?(:cljs + (defn safe-re-find + [pattern s] + (when-not (string? s) + ;; TODO: sentry + (js/console.trace)) + (when (string? s) + (re-find pattern s)))) + +#?(:cljs + (do + (def uuid-pattern "[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}") + (defonce exactly-uuid-pattern (re-pattern (str "(?i)^" uuid-pattern "$"))) + (defn uuid-string? + [s] + (safe-re-find exactly-uuid-pattern s)))) + #?(:cljs (defn ios? [] @@ -55,7 +72,7 @@ (defn mobile? [] (when-not node-test? - (gp-util/safe-re-find #"Mobi" js/navigator.userAgent)))) + (safe-re-find #"Mobi" js/navigator.userAgent)))) #?(:cljs (defn electron? @@ -349,7 +366,7 @@ #?(:cljs (defn scroll-to-element [elem-id] - (when-not (gp-util/safe-re-find #"^/\d+$" elem-id) + (when-not (safe-re-find #"^/\d+$" elem-id) (when elem-id (when-let [elem (gdom/getElement elem-id)] (.scroll (app-scroll-container-node) @@ -829,8 +846,8 @@ [] (let [user-agent js/navigator.userAgent vendor js/navigator.vendor] - (and (gp-util/safe-re-find #"Chrome" user-agent) - (gp-util/safe-re-find #"Google Inc" vendor))))) + (and (safe-re-find #"Chrome" user-agent) + (safe-re-find #"Google Inc" vendor))))) #?(:cljs (defn indexeddb-check? @@ -871,7 +888,7 @@ [block-id] (when block-id (let [block-id (str block-id)] - (when (gp-util/uuid-string? block-id) + (when (uuid-string? block-id) (first (array-seq (js/document.getElementsByClassName block-id)))))))) #?(:cljs @@ -890,7 +907,7 @@ (do (defn include-windows-reserved-chars? [s] - (gp-util/safe-re-find windows-reserved-chars s)) + (safe-re-find windows-reserved-chars s)) (defn create-title-property? [s] diff --git a/src/main/frontend/util/drawer.cljs b/src/main/frontend/util/drawer.cljs index a07ec2a22..27129de61 100644 --- a/src/main/frontend/util/drawer.cljs +++ b/src/main/frontend/util/drawer.cljs @@ -1,7 +1,6 @@ (ns frontend.util.drawer (:require [clojure.string :as string] [frontend.util :as util] - [logseq.graph-parser.util :as gp-util] [logseq.graph-parser.mldoc :as gp-mldoc] [logseq.graph-parser.property :as gp-property] [frontend.format.mldoc :as mldoc])) @@ -88,8 +87,8 @@ (defn contains-logbook? [content] - (and (gp-util/safe-re-find (re-pattern (str "(?i)" logbook-start)) content) - (gp-util/safe-re-find (re-pattern (str "(?i)" drawer-end)) content))) + (and (util/safe-re-find (re-pattern (str "(?i)" logbook-start)) content) + (util/safe-re-find (re-pattern (str "(?i)" drawer-end)) content))) ;; TODO: DRY (defn remove-logbook diff --git a/src/main/frontend/util/marker.cljs b/src/main/frontend/util/marker.cljs index 35f73c1af..73b0c8120 100644 --- a/src/main/frontend/util/marker.cljs +++ b/src/main/frontend/util/marker.cljs @@ -1,7 +1,6 @@ (ns frontend.util.marker (:require [clojure.string :as string] - [frontend.util :as util] - [logseq.graph-parser.util :as gp-util])) + [frontend.util :as util])) (defn marker-pattern [format] (re-pattern @@ -21,7 +20,7 @@ (if-let [matches (seq (util/re-pos new-line-re-pattern content))] (let [[start-pos content] (last matches)] (+ start-pos (count content))) - (count (gp-util/safe-re-find re-pattern content))) + (count (util/safe-re-find re-pattern content))) new-content (str (subs content 0 pos) (string/replace-first (subs content pos) @@ -60,6 +59,6 @@ (let [content (string/triml content) new-marker (or new-marker (cycle-marker-state (or marker - (last (gp-util/safe-re-find (marker-pattern format) content))) ; Returns the last matching group (last vec) + (last (util/safe-re-find (marker-pattern format) content))) ; Returns the last matching group (last vec) preferred-workflow))] [(add-or-update-marker content format new-marker) new-marker])) diff --git a/src/main/frontend/util/priority.cljs b/src/main/frontend/util/priority.cljs index edf1a83af..106c468a7 100644 --- a/src/main/frontend/util/priority.cljs +++ b/src/main/frontend/util/priority.cljs @@ -1,13 +1,12 @@ (ns frontend.util.priority (:require [clojure.string :as string] [frontend.util :as util] - [logseq.graph-parser.util :as gp-util] [frontend.util.marker :as marker])) (defn cycle-priority-state [content] (let [priority-reg #"\[#([ABC]{1})\]\s{1}" - priority (last (gp-util/safe-re-find priority-reg content)) + priority (last (util/safe-re-find priority-reg content)) next-priority (case priority "A" "B" @@ -29,7 +28,7 @@ (if-let [matches (seq (util/re-pos new-line-re-pattern content))] (let [[start-pos content] (last matches)] (+ start-pos (count content))) - (count (gp-util/safe-re-find re-pattern content))) + (count (util/safe-re-find re-pattern content))) skip-marker-pos (if-let [matches (seq (util/re-pos marker/bare-marker-pattern (subs content skip-hash-pos)))] (let [[start-pos content] (last matches)] diff --git a/src/main/frontend/util/property.cljs b/src/main/frontend/util/property.cljs index c9c6138ab..57c5f82e8 100644 --- a/src/main/frontend/util/property.cljs +++ b/src/main/frontend/util/property.cljs @@ -45,28 +45,28 @@ [line] (boolean (and (string? line) - (gp-util/safe-re-find #"^\s?[^ ]+:: " line)))) + (util/safe-re-find #"^\s?[^ ]+:: " line)))) (defn front-matter-property? [line] (boolean (and (string? line) - (gp-util/safe-re-find #"^\s*[^ ]+: " line)))) + (util/safe-re-find #"^\s*[^ ]+: " line)))) (defn get-property-key [line format] (and (string? line) (when-let [key (last (if (= format :org) - (gp-util/safe-re-find #"^\s*:([^: ]+): " line) - (gp-util/safe-re-find #"^\s*([^ ]+):: " line)))] + (util/safe-re-find #"^\s*:([^: ]+): " line) + (util/safe-re-find #"^\s*([^ ]+):: " line)))] (keyword key)))) (defn org-property? [line] (boolean (and (string? line) - (gp-util/safe-re-find #"^\s*:[^: ]+: " line) + (util/safe-re-find #"^\s*:[^: ]+: " line) (when-let [key (get-property-key line :org)] (not (contains? #{:PROPERTIES :END} key)))))) diff --git a/src/main/logseq/graph_parser/util.cljs b/src/main/logseq/graph_parser/util.cljs index e6097aa26..f708d5dc1 100644 --- a/src/main/logseq/graph_parser/util.cljs +++ b/src/main/logseq/graph_parser/util.cljs @@ -8,6 +8,7 @@ (defonce exactly-uuid-pattern (re-pattern (str "(?i)^" uuid-pattern "$"))) (defn safe-re-find + "Copy of frontend.util/safe-re-find. Too basic to couple to main app" [pattern s] (when-not (string? s) ;; TODO: sentry @@ -16,6 +17,7 @@ (re-find pattern s))) (defn uuid-string? + "Copy of frontend.util/uuid-string?. Too basic to couple to main app" [s] (safe-re-find exactly-uuid-pattern s))