From f7c8d9011dbbb31174a6b8da842eec17211bc4c6 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 19 Apr 2021 11:56:40 +0800 Subject: [PATCH 1/7] chore: bump version --- src/main/frontend/version.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/version.cljs b/src/main/frontend/version.cljs index 0adff2d61..794e553d5 100644 --- a/src/main/frontend/version.cljs +++ b/src/main/frontend/version.cljs @@ -1,3 +1,3 @@ (ns frontend.version) -(defonce version "0.0.19-1") +(defonce version "0.0.20") From 6d4c97a1b717a2a1f813c7b3405f293704f96f96 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Mon, 19 Apr 2021 23:00:43 +0800 Subject: [PATCH 2/7] fix: resizer should not scroll with the container --- src/main/frontend/components/right_sidebar.cljs | 2 +- src/main/frontend/components/sidebar.css | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/frontend/components/right_sidebar.cljs b/src/main/frontend/components/right_sidebar.cljs index 96da23aba..d3fcef7bc 100644 --- a/src/main/frontend/components/right_sidebar.cljs +++ b/src/main/frontend/components/right_sidebar.cljs @@ -267,7 +267,7 @@ [:div.cp__right-sidebar-inner.flex.flex-col.h-full#right-sidebar-container (sidebar-resizer) - [:div + [:div.cp__right-sidebar-scollable [:div.cp__right-sidebar-topbar.flex.flex-row.justify-between.items-center.px-4.h-12 [:div.cp__right-sidebar-settings.hide-scrollbar {:key "right-sidebar-settings"} [:div.ml-4.text-sm diff --git a/src/main/frontend/components/sidebar.css b/src/main/frontend/components/sidebar.css index fc6b6333c..9cb931218 100644 --- a/src/main/frontend/components/sidebar.css +++ b/src/main/frontend/components/sidebar.css @@ -113,15 +113,14 @@ width: var(--ls-right-sidebar-width); } - &::-webkit-scrollbar { - display: none; + &-scollable { + min-height: 100%; + overflow-y: scroll; } &-inner { padding-top: 0; position: relative; - min-height: 100%; - overflow-y: scroll; .resizer { position: absolute; From 226864609a0da58e08e8e3be5c26f9ec55a2d374 Mon Sep 17 00:00:00 2001 From: Junyu Zhan Date: Wed, 28 Apr 2021 17:34:04 +0800 Subject: [PATCH 3/7] fix: wrap margin-top attribute inside style --- src/main/frontend/components/sidebar.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/components/sidebar.cljs b/src/main/frontend/components/sidebar.cljs index 19eacb89d..76026fde0 100644 --- a/src/main/frontend/components/sidebar.cljs +++ b/src/main/frontend/components/sidebar.cljs @@ -117,7 +117,7 @@ (when (state/sub :ui/left-sidebar-open?) (sidebar-nav route-match nil))] [:div#main-content-container.w-full.flex.justify-center - {:margin-top (if global-graph-pages? 0 "2rem")} + {:style {:margin-top (if global-graph-pages? 0 "2rem")}} [:div.cp__sidebar-main-content {:data-is-global-graph-pages global-graph-pages? :data-is-full-width (or global-graph-pages? From 6b6a1a3438c388a7c2e5ff2015add4de1a052a95 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 28 Apr 2021 13:04:48 +0800 Subject: [PATCH 4/7] feat: search AND, OR support --- src/electron/electron/search.cljs | 130 +++++++++++++++--------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/src/electron/electron/search.cljs b/src/electron/electron/search.cljs index b11c02088..98896ebd0 100644 --- a/src/electron/electron/search.cljs +++ b/src/electron/electron/search.cljs @@ -32,29 +32,28 @@ (when db (.prepare db sql))) -;; (defn add-triggers! -;; [db] -;; (let [triggers ["CREATE TRIGGER blocks_ai AFTER INSERT ON blocks -;; BEGIN -;; INSERT INTO blocks_fts (id, text) -;; VALUES (new.id, new.text); -;; END; -;; " -;; "CREATE TRIGGER blocks_ad AFTER DELETE ON blocks -;; BEGIN -;; INSERT INTO blocks_fts (blocks_fts, id, text) -;; VALUES ('delete', old.id, old.text); -;; END;" -;; "CREATE TRIGGER blocks_au AFTER UPDATE ON blocks -;; BEGIN -;; INSERT INTO blocks_fts (blocks_fts, id, text) -;; VALUES ('delete', old.id, old.text); -;; INSERT INTO blocks_fts (id, text) -;; VALUES (new.id, new.text); -;; END;"]] -;; (doseq [trigger triggers] -;; (let [stmt (prepare db trigger)] -;; (.run ^object stmt))))) +(defn add-triggers! + [db] + (let [triggers ["CREATE TRIGGER IF NOT EXISTS blocks_ad AFTER DELETE ON blocks + BEGIN + DELETE from blocks_fts where rowid = old.id; + END;" + "CREATE TRIGGER IF NOT EXISTS blocks_ai AFTER INSERT ON blocks + BEGIN + INSERT INTO blocks_fts (rowid, uuid, content) + VALUES (new.id, new.uuid, new.content); + END; +" + "CREATE TRIGGER IF NOT EXISTS blocks_au AFTER UPDATE ON blocks + BEGIN + DELETE from blocks_fts where rowid = old.id; + INSERT INTO blocks_fts (rowid, uuid, content) + VALUES (new.id, new.uuid, new.content); + END;" + ]] + (doseq [trigger triggers] + (let [stmt (prepare db trigger)] + (.run ^object stmt))))) (defn create-blocks-table! [db] @@ -66,7 +65,7 @@ (defn create-blocks-fts-table! [db] - (let [stmt (prepare db "CREATE VIRTUAL TABLE blocks_fts USING fts5(id, uuid, content)")] + (let [stmt (prepare db "CREATE VIRTUAL TABLE IF NOT EXISTS blocks_fts USING fts5(uuid, content)")] (.run ^object stmt))) (defn get-search-dir @@ -88,7 +87,10 @@ [db-name] (let [[db-name db-full-path] (get-db-full-path db-name) db (sqlite3 db-full-path nil) - _ (create-blocks-table! db)] + _ (create-blocks-table! db) + _ (create-blocks-fts-table! db) + _ (add-triggers! db) + ] (swap! databases assoc db-name db))) (defn open-dbs! @@ -133,29 +135,40 @@ [repo q limit] (when-let [database (get-db repo)] (when-not (string/blank? q) - (let [limit (or limit 20) - stmt (prepare database - "select id, uuid, content from blocks where content like ? limit ?")] - (js->clj (.all ^object stmt (str "%" q "%") limit) :keywordize-keys true))))) + (let [match? (or + (string/includes? q " and ") + (string/includes? q " && ") + (string/includes? q " or ") + (string/includes? q " | ") + ;; (string/includes? q " not ") + ) + q (if match? + (-> q + (string/replace " and " " AND ") + (string/replace " && " " AND ") + (string/replace " or " " OR ") + (string/replace " | " " OR ") + (string/replace " not " " NOT ")) + q) + limit (or limit 20) + [sql input] (if match? + ["select rowid, uuid, content from blocks_fts where content match ? order by rank limit ?" + q] + (let [q (string/replace q #"\s+" "%")] + ["select rowid, uuid, content from blocks_fts where content like ? limit ?" + (str "%" q "%")])) + stmt (prepare database sql)] + (js->clj (.all ^object stmt input limit) :keywordize-keys true))))) (defn truncate-blocks-table! [repo] (when-let [database (get-db repo)] (let [stmt (prepare database - "delete from blocks;")] - (.run ^object stmt)))) - -(defn drop-blocks-table! - [repo] - (when-let [database (get-db repo)] - (let [stmt (prepare database - "drop table blocks;") - _ (.run ^object stmt) - ;; stmt (prepare @database - ;; "drop table blocks_fts;") - ] - ;; (.run ^object stmt) - ))) + "delete from blocks;") + _ (.run ^object stmt) + stmt (prepare database + "delete from blocks_fts;")] + (.run ^object stmt)))) (defn delete-db! [repo] @@ -165,29 +178,16 @@ (println "Delete search indice: " db-full-path) (fs/unlinkSync db-full-path)))) +(defn query + [repo sql] + (when-let [database (get-db repo)] + (let [stmt (prepare database sql)] + (.all ^object stmt)))) (comment - (open-db!) + (def repo (first (keys @databases))) + (query repo + "select * from blocks_fts") - (add-blocks! (clj->js [{:id "a" - :uuid "" - :content "hello world"} - {:id "b" - :uuid "" - :content "foo bar"}])) - - (time - (let [blocks (for [i (range 10000)] - {:id (str i) - :uuid "" - :content (rand-nth ["hello" "world" "nice"])})] - (add-blocks! (clj->js blocks)))) - - (get-all-blocks) - - (search-blocks "hello") - - (def block {:id 16, :uuid "5f713e91-8a3c-4b04-a33a-c39482428e2d", :content "Hello, I'm a block!"}) - - (add-blocks! (clj->js [block])) + (delete-db! repo) ) From 9e911a51b1690de0001a881497579c806d6435a9 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 28 Apr 2021 13:12:45 +0800 Subject: [PATCH 5/7] enhance: use & instead of && for and search --- src/electron/electron/search.cljs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/electron/electron/search.cljs b/src/electron/electron/search.cljs index 98896ebd0..bead51647 100644 --- a/src/electron/electron/search.cljs +++ b/src/electron/electron/search.cljs @@ -137,7 +137,7 @@ (when-not (string/blank? q) (let [match? (or (string/includes? q " and ") - (string/includes? q " && ") + (string/includes? q " & ") (string/includes? q " or ") (string/includes? q " | ") ;; (string/includes? q " not ") @@ -145,7 +145,7 @@ q (if match? (-> q (string/replace " and " " AND ") - (string/replace " && " " AND ") + (string/replace " & " " AND ") (string/replace " or " " OR ") (string/replace " | " " OR ") (string/replace " not " " NOT ")) From 9c9158edbdc105647e5d57e6222ae4f4e5c1f472 Mon Sep 17 00:00:00 2001 From: Peng Xiao Date: Thu, 29 Apr 2021 17:00:49 +0800 Subject: [PATCH 6/7] fix: use translate3d to force GPU render for image --- src/main/frontend/components/block.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/frontend/components/block.css b/src/main/frontend/components/block.css index 064bcedea..2fa7639cc 100644 --- a/src/main/frontend/components/block.css +++ b/src/main/frontend/components/block.css @@ -74,6 +74,8 @@ .resize { display: inline-flex; + /* Fix chrome missing resize handle issue. Ref: https://github.com/logseq/logseq/pull/1692/files */ + transform: translate3d(0, 0, 0); } .draw [aria-labelledby="shapes-title"] { From 53ba28ae899523b953c190676e8fe2770354ecfb Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Thu, 29 Apr 2021 22:21:46 +0800 Subject: [PATCH 7/7] fix: click search result doesn't scroll to the corresponding block --- src/main/frontend/util.cljc | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index c937a605a..1a694a06d 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -32,7 +32,8 @@ (-write writer (str "\"" (.toString sym) "\""))))) #?(:cljs (defonce ^js node-path nodePath)) -#?(:cljs (defn app-scroll-container-node [] js/document.documentElement)) +#?(:cljs (defn app-scroll-container-node [] + (gdom/getElement "left-container"))) #?(:cljs (defn ios? @@ -350,28 +351,6 @@ (let [fragment (get-fragment)] (str "#" fragment "?anchor=" anchor)))) -;; (defn scroll-into-view -;; [element] -;; (let [scroll-top (gobj/get element "offsetTop") -;; scroll-top (if (zero? scroll-top) -;; (-> (gobj/get element "parentElement") -;; (gobj/get "offsetTop")) -;; scroll-top)] -;; (prn {:scroll-top scroll-top}) -;; (when-let [main (gdom/getElement "main-content")] -;; (prn {:main main}) -;; (.scroll main #js {:top scroll-top -;; ;; :behavior "smooth" -;; })))) - -;; (defn scroll-to-element -;; [fragment] -;; (when fragment -;; (prn {:fragment fragment}) -;; (when-not (string/blank? fragment) -;; (when-let [element (gdom/getElement fragment)] -;; (scroll-into-view element))))) - (def speed 500) (def moving-frequency 15)