mirror of
https://github.com/logseq/logseq.git
synced 2026-05-03 10:26:35 +00:00
@@ -44,7 +44,7 @@
|
||||
[:div
|
||||
(when-not (string/blank? before)
|
||||
[:span before])
|
||||
[:mark {:class "p-0 rounded-none"} (subs content i (+ i (count q)))]
|
||||
[:mark.p-0.rounded-none (subs content i (+ i (count q)))]
|
||||
(when-not (string/blank? after)
|
||||
[:span after])])
|
||||
(let [elements (loop [words q-words
|
||||
@@ -60,7 +60,7 @@
|
||||
(vec
|
||||
(concat result
|
||||
[[:span (subs content 0 i)]
|
||||
[:mark (subs content i (+ i (count word)))]])))
|
||||
[:mark.p-0.rounded-none (subs content i (+ i (count word)))]])))
|
||||
(recur nil
|
||||
content
|
||||
result)))
|
||||
@@ -85,59 +85,6 @@
|
||||
{:indent? false})])
|
||||
[:div {:class "font-medium" :key "content"} (highlight-exact-query content q)]]])
|
||||
|
||||
(rum/defc highlight-fuzzy
|
||||
[content indexes]
|
||||
(let [n (count content)
|
||||
max-hightlighted-len 512
|
||||
max-surrounding-len 512
|
||||
|
||||
first-index (first indexes)
|
||||
last-index (nth indexes (dec (count indexes)))
|
||||
last-index (min (+ first-index max-hightlighted-len -1) last-index)
|
||||
last-index* (+ last-index max-surrounding-len)
|
||||
indexes (take-while #(<= % last-index*) indexes)
|
||||
content-begin (max 0 (- first-index max-surrounding-len))
|
||||
content-end (min n (+ last-index 1 max-surrounding-len)) ; exclusive
|
||||
|
||||
; finds inconsecutive sections
|
||||
sections (partition-between #(> (- %2 %) 1) indexes)
|
||||
hl-ranges (for [sec sections
|
||||
:let [begin (first sec)
|
||||
end (-> sec last inc)]]
|
||||
[begin end]) ; `end` is exclusive
|
||||
hl-ranges* (concat [[content-begin content-begin]]
|
||||
hl-ranges
|
||||
[[content-end content-end]])
|
||||
normal-ranges (for [[[_ begin] [end _]] (partition 2 1 hl-ranges*)] [begin end])
|
||||
normal-hl-pairs (partition-all 2 (medley/interleave-all normal-ranges hl-ranges))]
|
||||
[:p
|
||||
(mapcat
|
||||
(fn [[normal highlighted]]
|
||||
[(when-some [[begin end] normal]
|
||||
[:span (subs content begin end)])
|
||||
(when-some [[begin end] highlighted]
|
||||
[:mark (subs content begin end)])])
|
||||
normal-hl-pairs)]))
|
||||
|
||||
(rum/defc highlight
|
||||
[content q]
|
||||
(let [q-pattern (->> q
|
||||
(search/escape-str)
|
||||
(str "(?i)")
|
||||
(re-pattern))
|
||||
n (count content)
|
||||
[before after] (string/split content q-pattern 2)
|
||||
[before after] (if (>= n 64)
|
||||
[(when before (apply str (take-last 48 before)))
|
||||
(when after (apply str (take 48 after)))]
|
||||
[before after])]
|
||||
[:p
|
||||
(when-not (string/blank? before)
|
||||
[:span before])
|
||||
[:mark q]
|
||||
(when-not (string/blank? after)
|
||||
[:span after])]))
|
||||
|
||||
(defonce search-timeout (atom nil))
|
||||
|
||||
(rum/defc search-auto-complete
|
||||
|
||||
Reference in New Issue
Block a user