From 2fbb6d1b7dced675629b1656494f234f5f835fd8 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 20 May 2025 19:30:11 +0800 Subject: [PATCH 01/10] enhance(ux): update icon brightness when hovering on it --- src/main/frontend/components/icon.cljs | 7 ++++--- src/main/frontend/ui.css | 11 +++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/components/icon.cljs b/src/main/frontend/components/icon.cljs index 5f8305f8fb..d47ac39a0d 100644 --- a/src/main/frontend/components/icon.cljs +++ b/src/main/frontend/components/icon.cljs @@ -29,9 +29,10 @@ opts (dissoc opts :color?) item (cond (and (= :emoji (:type icon')) (:id icon')) - [:em-emoji (merge {:id (:id icon') - :style {:line-height 1}} - opts)] + [:span.ui__icon + [:em-emoji (merge {:id (:id icon') + :style {:line-height 1}} + opts)]] (and (= :tabler-icon (:type icon')) (:id icon')) (ui/icon (:id icon') opts))] diff --git a/src/main/frontend/ui.css b/src/main/frontend/ui.css index c2a102ef54..e3b5d9e3bd 100644 --- a/src/main/frontend/ui.css +++ b/src/main/frontend/ui.css @@ -275,6 +275,17 @@ html.is-mobile { display: inline-block; } +.ui__icon svg { + filter: brightness(0.8); + transition: filter .15s; + will-change: filter; +} + +.ui__icon:hover svg { + filter: brightness(1); + transition-duration: .15s; +} + .type-icon { @apply text-base text-center flex items-center justify-center rounded border mr-2 relative; From 30f71b57226921d68fddad56ed8361448043e7ab Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Tue, 20 May 2025 09:06:19 -0400 Subject: [PATCH 02/10] fix: new graphs invalid after recent property/empty-placeholder change --- deps/db/src/logseq/db/frontend/malli_schema.cljs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/malli_schema.cljs b/deps/db/src/logseq/db/frontend/malli_schema.cljs index 413a42f59b..d174c2d2ac 100644 --- a/deps/db/src/logseq/db/frontend/malli_schema.cljs +++ b/deps/db/src/logseq/db/frontend/malli_schema.cljs @@ -460,6 +460,7 @@ (def property-value-placeholder [:map [:db/ident [:= :logseq.property/empty-placeholder]] + [:block/uuid :uuid] [:block/tx-id {:optional true} :int]]) (defn entity-dispatch-key [db ent] @@ -486,10 +487,10 @@ :closed-value-block (and (:logseq.property/created-from-property d) (:logseq.property/value d)) :property-value-block - (:block/uuid d) - :block (= (:db/ident d) :logseq.property/empty-placeholder) :property-value-placeholder + (:block/uuid d) + :block (:db/ident d) :db-ident-key-value)] dispatch-key)) From 7bb5fef8cc0519abcd60afd6f0096befc78b1da6 Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Tue, 20 May 2025 09:13:24 -0400 Subject: [PATCH 03/10] fix: frontend lint --- src/main/frontend/handler/editor.cljs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/frontend/handler/editor.cljs b/src/main/frontend/handler/editor.cljs index 1bcd487f12..b0e82c34dd 100644 --- a/src/main/frontend/handler/editor.cljs +++ b/src/main/frontend/handler/editor.cljs @@ -2,7 +2,6 @@ (:require [clojure.set :as set] [clojure.string :as string] [clojure.walk :as w] - [dommy.core :as d] [dommy.core :as dom] [electron.ipc :as ipc] [frontend.commands :as commands] @@ -1255,7 +1254,7 @@ (when-let [timeout @*action-bar-timeout] (js/clearTimeout timeout)) (state/pub-event! [:editor/hide-action-bar]) - (when (seq (remove (fn [b] (d/has-class? b "ls-table-cell")) + (when (seq (remove (fn [b] (dom/has-class? b "ls-table-cell")) (state/get-selection-blocks))) (let [timeout (js/setTimeout #(state/pub-event! [:editor/show-action-bar]) delay)] (reset! *action-bar-timeout timeout))))) From fd8a939fc156ea418ca20c9fecd727f59d701be3 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Tue, 20 May 2025 23:01:58 +0800 Subject: [PATCH 04/10] fix: recur-replace-uuid-in-block-title when there're ids in title --- deps/db/src/logseq/db/frontend/content.cljs | 38 +++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/content.cljs b/deps/db/src/logseq/db/frontend/content.cljs index 4bdd0e7111..c213bf09c0 100644 --- a/deps/db/src/logseq/db/frontend/content.cljs +++ b/deps/db/src/logseq/db/frontend/content.cljs @@ -172,21 +172,23 @@ ([ent] (recur-replace-uuid-in-block-title ent 10)) ([ent max-depth] - (let [ref-set (loop [result-refs (:block/refs ent) - current-refs (:block/refs ent) - depth 0] - (if (or (>= depth max-depth) (empty? current-refs)) - result-refs - (let [next-refs (set (mapcat :block/refs current-refs)) - result-refs' (apply conj result-refs next-refs)] - (if (= (count result-refs') (count result-refs)) - result-refs - (recur (apply conj result-refs next-refs) next-refs (inc depth)))))) - opts {:replace-block-id? true}] - (loop [result (id-ref->title-ref (:block/title ent) ref-set opts) - last-result nil - depth 0] - (if (or (>= depth max-depth) - (= last-result result)) - result - (recur (id-ref->title-ref result ref-set opts) result (inc depth))))))) + (if (some->> (:block/title ent) (#(re-find id-ref-pattern %))) + (let [ref-set (loop [result-refs (:block/refs ent) + current-refs (:block/refs ent) + depth 0] + (if (or (>= depth max-depth) (empty? current-refs)) + result-refs + (let [next-refs (set (mapcat :block/refs current-refs)) + result-refs' (apply conj result-refs next-refs)] + (if (= (count result-refs') (count result-refs)) + result-refs + (recur (apply conj result-refs next-refs) next-refs (inc depth)))))) + opts {:replace-block-id? true}] + (loop [result (id-ref->title-ref (:block/title ent) ref-set opts) + last-result nil + depth 0] + (if (or (>= depth max-depth) + (= last-result result)) + result + (recur (id-ref->title-ref result ref-set opts) result (inc depth))))) + (:block/title ent)))) From 120e6af065a3612117e40a5c5b6c238330d9f670 Mon Sep 17 00:00:00 2001 From: rcmerci Date: Wed, 21 May 2025 00:44:19 +0800 Subject: [PATCH 05/10] chore: simplify some->> arg --- deps/db/src/logseq/db/frontend/content.cljs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/db/src/logseq/db/frontend/content.cljs b/deps/db/src/logseq/db/frontend/content.cljs index c213bf09c0..92d663b9db 100644 --- a/deps/db/src/logseq/db/frontend/content.cljs +++ b/deps/db/src/logseq/db/frontend/content.cljs @@ -172,7 +172,7 @@ ([ent] (recur-replace-uuid-in-block-title ent 10)) ([ent max-depth] - (if (some->> (:block/title ent) (#(re-find id-ref-pattern %))) + (if (some->> (:block/title ent) (re-find id-ref-pattern)) (let [ref-set (loop [result-refs (:block/refs ent) current-refs (:block/refs ent) depth 0] From d2b2eb3b4869b82c749df3388a47feb1ddbd521f Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 21 May 2025 01:04:29 +0800 Subject: [PATCH 06/10] fix: wrong backlinks number in all pages --- deps/db/src/logseq/db.cljs | 24 +--------------- .../db/src/logseq/db/common/initial_data.cljs | 28 ++++++++++++++++++- deps/db/src/logseq/db/common/view.cljs | 5 ++-- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/deps/db/src/logseq/db.cljs b/deps/db/src/logseq/db.cljs index 08f49dc0a9..4759643846 100644 --- a/deps/db/src/logseq/db.cljs +++ b/deps/db/src/logseq/db.cljs @@ -467,29 +467,7 @@ (when (seq ref-ids) (d/pull-many db '[*] ref-ids)))) -(defn hidden-ref? - "Whether ref-block (for block with the `id`) should be hidden." - [db ref-block id] - (let [db-based? (entity-plus/db-based-graph? db)] - (if db-based? - (let [entity (d/entity db id)] - (or - (= (:db/id ref-block) id) - (= id (:db/id (:block/page ref-block))) - (hidden? (:block/page ref-block)) - (hidden? ref-block) - (contains? (set (map :db/id (:block/tags ref-block))) (:db/id entity)) - (some? (get ref-block (:db/ident entity))))) - (or - (= (:db/id ref-block) id) - (= id (:db/id (:block/page ref-block))))))) - -(defn get-block-refs-count - [db id] - (some->> (d/entity db id) - :block/_refs - (remove (fn [ref-block] (hidden-ref? db ref-block id))) - count)) +(def get-block-refs-count common-initial-data/get-block-refs-count) (defn hidden-or-internal-tag? [e] diff --git a/deps/db/src/logseq/db/common/initial_data.cljs b/deps/db/src/logseq/db/common/initial_data.cljs index 9b2d555538..4867839ee6 100644 --- a/deps/db/src/logseq/db/common/initial_data.cljs +++ b/deps/db/src/logseq/db/common/initial_data.cljs @@ -154,6 +154,32 @@ (with-raw-title entity) (assoc :db/id (:db/id entity)))) +(defn hidden-ref? + "Whether ref-block (for block with the `id`) should be hidden." + [db ref-block id] + (let [db-based? (entity-plus/db-based-graph? db)] + (if db-based? + (let [entity (d/entity db id)] + (or + (= (:db/id ref-block) id) + (= id (:db/id (:block/page ref-block))) + (entity-util/hidden? (:block/page ref-block)) + (entity-util/hidden? ref-block) + (contains? (set (map :db/id (:block/tags ref-block))) (:db/id entity)) + (some? (get ref-block (:db/ident entity))))) + (or + (= (:db/id ref-block) id) + (= id (:db/id (:block/page ref-block))))))) + +(defn get-block-refs-count + [db id] + (or + (some->> (d/entity db id) + :block/_refs + (remove (fn [ref-block] (hidden-ref? db ref-block id))) + count) + 0)) + (defn ^:large-vars/cleanup-todo get-block-and-children [db id {:keys [children? children-only? nested-children? properties children-props]}] (let [block (d/entity db (if (uuid? id) @@ -211,7 +237,7 @@ :else v))) block-refs-count? - (assoc :block.temp/refs-count (count (:block/_refs block))))] + (assoc :block.temp/refs-count (get-block-refs-count db (:db/id block))))] (cond-> {:block block'} children? diff --git a/deps/db/src/logseq/db/common/view.cljs b/deps/db/src/logseq/db/common/view.cljs index 38f5af10fb..5153ce294b 100644 --- a/deps/db/src/logseq/db/common/view.cljs +++ b/deps/db/src/logseq/db/common/view.cljs @@ -9,6 +9,7 @@ [logseq.common.util :as common-util] [logseq.db :as ldb] [logseq.db.common.entity-plus :as entity-plus] + [logseq.db.common.initial-data :as common-initial-data] [logseq.db.frontend.class :as db-class] [logseq.db.frontend.entity-util :as entity-util] [logseq.db.frontend.property :as db-property] @@ -325,7 +326,7 @@ refs (mapcat (fn [id] (:block/_refs (d/entity db id))) ids) page-filters (get-filters db entity) full-ref-blocks (->> refs - (remove (fn [block] (ldb/hidden-ref? db block id))) + (remove (fn [block] (common-initial-data/hidden-ref? db block id))) (common-util/distinct-by :db/id)) ref-blocks (cond->> full-ref-blocks (seq page-filters) @@ -386,7 +387,7 @@ (entity-util/built-in? e))) (cond-> e refs-count? - (assoc :block.temp/refs-count (count (:block/_refs e))))))) + (assoc :block.temp/refs-count (ldb/get-block-refs-count db (:db/id e))))))) (d/datoms db :avet property-ident)))) (defn- get-entities From 2563fdb92c31d2e3c572326484cc9a8695b16b14 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 21 May 2025 01:54:18 +0800 Subject: [PATCH 07/10] enhance: style tweaks --- src/main/frontend/components/block.cljs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index b9a442b631..d262e3df90 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -2694,7 +2694,7 @@ *hover-container? (::hover-container? state)] [:div.block-tag.items-center.relative {:key (str "tag-" (:db/id tag)) - :class (if @*hover? "bg-gray-03 rounded pr-1" "px-1") + :class (if @*hover? "bg-gray-03 rounded pr-1" "pl-2 pr-1") :on-mouse-over #(reset! *hover-container? true) :on-mouse-out #(reset! *hover-container? false)} [:div.flex.items-center @@ -2725,7 +2725,9 @@ (if (and @*hover? (not (ldb/private-tags (:db/ident tag)))) [:a.inline-flex.text-muted-foreground {:title "Remove this tag" - :style {:margin-top 1} + :style {:margin-top 1 + :padding-left 2 + :margin-right 2} :on-pointer-down (fn [e] (util/stop e) From c18af313b88e7d4f960c88df4664963b60078a19 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 21 May 2025 03:01:31 +0800 Subject: [PATCH 08/10] enhance: put selected choices on top and ensure stable order --- deps/common/src/logseq/common/util.cljs | 16 ++++++++++++++ deps/db/src/logseq/db/common/view.cljs | 20 ++--------------- .../frontend/components/property/value.cljs | 22 ++++++++++++++----- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/deps/common/src/logseq/common/util.cljs b/deps/common/src/logseq/common/util.cljs index a09f6000e5..73d111cf09 100644 --- a/deps/common/src/logseq/common/util.cljs +++ b/deps/common/src/logseq/common/util.cljs @@ -393,3 +393,19 @@ return: [{:id 3} {:id 2 :depend-on 3} {:id 1 :depend-on 2}]" (str nn "/" (name x)) (name x)) x)) + +(defn by-sorting + [sorting] + (let [get-value+cmp + (map + (fn [{:keys [get-value asc?]}] + [get-value + (if asc? compare #(compare %2 %1))]) + sorting)] + (fn [a b] + (reduce + (fn [order [get-value cmp]] + (if (zero? order) + (cmp (get-value a) (get-value b)) + (reduced order))) + 0 get-value+cmp)))) diff --git a/deps/db/src/logseq/db/common/view.cljs b/deps/db/src/logseq/db/common/view.cljs index 5153ce294b..9a03ab8a6a 100644 --- a/deps/db/src/logseq/db/common/view.cljs +++ b/deps/db/src/logseq/db/common/view.cljs @@ -61,22 +61,6 @@ (when (valid-type-for-sort? v) v)))))) -(defn- by-sorting - [sorting] - (let [get-value+cmp - (map - (fn [{:keys [get-value asc?]}] - [get-value - (if asc? compare #(compare %2 %1))]) - sorting)] - (fn [a b] - (reduce - (fn [order [get-value cmp]] - (if (zero? order) - (cmp (get-value a) (get-value b)) - (reduced order))) - 0 get-value+cmp)))) - (defn- by-one-sorting [{:keys [asc? get-value]}] (let [cmp (if asc? compare #(compare %2 %1))] @@ -103,7 +87,7 @@ reverse) (not (ldb/db-based-graph? db)) ; file graph properties don't support index - (sort (by-sorting + (sort (common-util/by-sorting [{:get-value get-value-fn :asc? asc?}]) entities) @@ -138,7 +122,7 @@ {:asc? asc? :get-value (memoize (get-value-for-sort property))})) minor-sorting) - sort-cmp (by-sorting sorting)] + sort-cmp (common-util/by-sorting sorting)] (mapcat (fn [entities] (sort sort-cmp entities)) partitioned-entities-by-major-sorting))) (defn sort-entities diff --git a/src/main/frontend/components/property/value.cljs b/src/main/frontend/components/property/value.cljs index 0f68381f86..a1a0e76bce 100644 --- a/src/main/frontend/components/property/value.cljs +++ b/src/main/frontend/components/property/value.cljs @@ -31,6 +31,7 @@ [goog.dom :as gdom] [goog.functions :refer [debounce]] [lambdaisland.glogi :as log] + [logseq.common.util :as common-util] [logseq.common.util.macro :as macro-util] [logseq.db :as ldb] [logseq.db.frontend.content :as db-content] @@ -614,20 +615,29 @@ :else id))) +(defn- sort-select-items + [property selected-choices items] + (if (:property/closed-values property) + items ; sorted by order + (sort + (common-util/by-sorting + [{:get-value db-property/property-value-content + :asc? true} + {:get-value (fn [item] (selected-choices (:db/id item))) + :asc? false}]) + items))) + (defn- select-aux [block property {:keys [items selected-choices multiple-choices?] :as opts}] (let [selected-choices (->> selected-choices (remove nil?) - (remove #(= :logseq.property/empty-placeholder %))) + (remove #(= :logseq.property/empty-placeholder %)) + set) clear-value (str "No " (:block/title property)) clear-value-label [:div.flex.flex-row.items-center.gap-1.text-sm (ui/icon "x" {:size 14}) [:div clear-value]] - items (if (:property/closed-values property) - items ; sorted by order - (sort-by (fn [item] - (db-property/property-value-content item)) - items)) + items (sort-select-items property selected-choices items) items' (->> (if (and (seq selected-choices) (not multiple-choices?) From c826d13786fcf6e5c30eafe583f2c758bf72dad3 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 21 May 2025 03:24:06 +0800 Subject: [PATCH 09/10] fix: stable sort order --- src/main/frontend/components/property/value.cljs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/frontend/components/property/value.cljs b/src/main/frontend/components/property/value.cljs index a1a0e76bce..c148c9f0ae 100644 --- a/src/main/frontend/components/property/value.cljs +++ b/src/main/frontend/components/property/value.cljs @@ -31,7 +31,6 @@ [goog.dom :as gdom] [goog.functions :refer [debounce]] [lambdaisland.glogi :as log] - [logseq.common.util :as common-util] [logseq.common.util.macro :as macro-util] [logseq.db :as ldb] [logseq.db.frontend.content :as db-content] @@ -619,15 +618,12 @@ [property selected-choices items] (if (:property/closed-values property) items ; sorted by order - (sort - (common-util/by-sorting - [{:get-value db-property/property-value-content - :asc? true} - {:get-value (fn [item] (selected-choices (:db/id item))) - :asc? false}]) + (sort-by + (juxt (fn [item] (not (selected-choices (:db/id item)))) + db-property/property-value-content) items))) -(defn- select-aux +(rum/defc select-aux [block property {:keys [items selected-choices multiple-choices?] :as opts}] (let [selected-choices (->> selected-choices (remove nil?) @@ -637,7 +633,7 @@ clear-value-label [:div.flex.flex-row.items-center.gap-1.text-sm (ui/icon "x" {:size 14}) [:div clear-value]] - items (sort-select-items property selected-choices items) + [items _] (hooks/use-state (sort-select-items property selected-choices items)) items' (->> (if (and (seq selected-choices) (not multiple-choices?) From 6745ef103ebc376bebd9af6240cc651ecfa56c48 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Wed, 21 May 2025 03:31:33 +0800 Subject: [PATCH 10/10] fix: tag style --- src/main/frontend/components/block.cljs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/components/block.cljs b/src/main/frontend/components/block.cljs index d262e3df90..ca321478cb 100644 --- a/src/main/frontend/components/block.cljs +++ b/src/main/frontend/components/block.cljs @@ -2691,10 +2691,14 @@ (rum/local false ::hover-container?) [state block tag config popup-opts] (let [*hover? (::hover? state) - *hover-container? (::hover-container? state)] + *hover-container? (::hover-container? state) + private-tag? (ldb/private-tags (:db/ident tag))] [:div.block-tag.items-center.relative {:key (str "tag-" (:db/id tag)) - :class (if @*hover? "bg-gray-03 rounded pr-1" "pl-2 pr-1") + :class (if @*hover? + (str "bg-gray-03 rounded " + (if private-tag? "px-1" "pr-1")) + "pl-2 pr-1") :on-mouse-over #(reset! *hover-container? true) :on-mouse-out #(reset! *hover-container? false)} [:div.flex.items-center @@ -2722,7 +2726,7 @@ :on-click #(db-property-handler/delete-property-value! (:db/id block) :block/tags (:db/id tag))} "Remove tag"))]) popup-opts))} - (if (and @*hover? (not (ldb/private-tags (:db/ident tag)))) + (if (and @*hover? (not private-tag?)) [:a.inline-flex.text-muted-foreground {:title "Remove this tag" :style {:margin-top 1