mirror of https://github.com/logseq/logseq
fix: can't edit properties in :block-below
parent
1b528b2fc6
commit
fbdb22358a
|
@ -546,7 +546,7 @@
|
||||||
page-name-in-block is the overridable name of the page (legacy)
|
page-name-in-block is the overridable name of the page (legacy)
|
||||||
|
|
||||||
All page-names are sanitized except page-name-in-block"
|
All page-names are sanitized except page-name-in-block"
|
||||||
[state config page-entity contents-page? children html-export? label whiteboard-page?]
|
[state {:keys [contents-page? whiteboard-page? html-export? meta-click?] :as config} page-entity children label]
|
||||||
(let [*hover? (::hover? state)
|
(let [*hover? (::hover? state)
|
||||||
*mouse-down? (::mouse-down? state)
|
*mouse-down? (::mouse-down? state)
|
||||||
tag? (:tag? config)
|
tag? (:tag? config)
|
||||||
|
@ -570,10 +570,19 @@
|
||||||
:on-drag-start (fn [e] (editor-handler/block->data-transfer! page-name e true))
|
:on-drag-start (fn [e] (editor-handler/block->data-transfer! page-name e true))
|
||||||
:on-mouse-over #(reset! *hover? true)
|
:on-mouse-over #(reset! *hover? true)
|
||||||
:on-mouse-leave #(reset! *hover? false)
|
:on-mouse-leave #(reset! *hover? false)
|
||||||
:on-click (fn [e] (util/stop e))
|
:on-click (fn [e] (when-not meta-click? (util/stop e)))
|
||||||
:on-pointer-down (fn [e]
|
:on-pointer-down (fn [e]
|
||||||
(if breadcrumb?
|
(cond
|
||||||
|
(and meta-click? (util/meta-key? e))
|
||||||
|
(reset! *mouse-down? true)
|
||||||
|
|
||||||
|
(and meta-click? (not (util/shift-key? e)))
|
||||||
|
nil
|
||||||
|
|
||||||
|
breadcrumb?
|
||||||
(.preventDefault e)
|
(.preventDefault e)
|
||||||
|
|
||||||
|
:else
|
||||||
(do
|
(do
|
||||||
(util/stop e)
|
(util/stop e)
|
||||||
(reset! *mouse-down? true))))
|
(reset! *mouse-down? true))))
|
||||||
|
@ -582,7 +591,7 @@
|
||||||
(state/clear-edit!)
|
(state/clear-edit!)
|
||||||
(open-page-ref config page-entity e page-name contents-page?)
|
(open-page-ref config page-entity e page-name contents-page?)
|
||||||
(reset! *mouse-down? false)))
|
(reset! *mouse-down? false)))
|
||||||
:on-key-up (fn [e] (when (and e (= (.-key e) "Enter"))
|
:on-key-up (fn [e] (when (and e (= (.-key e) "Enter") (not meta-click?))
|
||||||
(state/clear-edit!)
|
(state/clear-edit!)
|
||||||
(open-page-ref config page-entity e page-name contents-page?)))}
|
(open-page-ref config page-entity e page-name contents-page?)))}
|
||||||
(when-not hide-icon?
|
(when-not hide-icon?
|
||||||
|
@ -707,13 +716,13 @@
|
||||||
"Component for a page. `page` argument contains :block/name which can be (un)sanitized page name.
|
"Component for a page. `page` argument contains :block/name which can be (un)sanitized page name.
|
||||||
Keys for `config`:
|
Keys for `config`:
|
||||||
- `:preview?`: Is this component under preview mode? (If true, `page-preview-trigger` won't be registered to this `page-cp`)"
|
- `:preview?`: Is this component under preview mode? (If true, `page-preview-trigger` won't be registered to this `page-cp`)"
|
||||||
[state {:keys [html-export? label children contents-page? preview? disable-preview?] :as config} page]
|
[state {:keys [label children preview? disable-preview?] :as config} page]
|
||||||
(let [page-entity (::page-entity state)]
|
(let [page-entity (::page-entity state)]
|
||||||
(when-let [page-entity (when page-entity (db/sub-block (:db/id page-entity)))]
|
(when-let [page-entity (when page-entity (db/sub-block (:db/id page-entity)))]
|
||||||
(let [page-name (or (:block/name page-entity)
|
(let [page-name (or (:block/name page-entity)
|
||||||
(:block/name page))
|
(:block/name page))
|
||||||
whiteboard-page? (model/whiteboard-page? page-name)
|
whiteboard-page? (model/whiteboard-page? page-name)
|
||||||
inner (page-inner config page-entity contents-page? children html-export? label whiteboard-page?)
|
inner (page-inner (assoc config :whiteboard-page? whiteboard-page?) page-entity children label)
|
||||||
modal? (:modal/show? @state/state)]
|
modal? (:modal/show? @state/state)]
|
||||||
(if (and (not (util/mobile?))
|
(if (and (not (util/mobile?))
|
||||||
(not= page-name (:id config))
|
(not= page-name (:id config))
|
||||||
|
@ -2281,7 +2290,7 @@
|
||||||
(when (seq properties)
|
(when (seq properties)
|
||||||
(case position
|
(case position
|
||||||
:block-below
|
:block-below
|
||||||
[:div.positioned-properties.flex.flex-row.gap-2.item-center.ml-2.pl-8.flex-nowrap.text-sm
|
[:div.positioned-properties.flex.flex-row.gap-2.item-center.ml-2.pl-8.flex-wrap.text-sm.overflow-x-hidden.max-h-6
|
||||||
(for [pid properties]
|
(for [pid properties]
|
||||||
(let [property (db/entity pid)
|
(let [property (db/entity pid)
|
||||||
v (get block pid)]
|
v (get block pid)]
|
||||||
|
|
|
@ -516,7 +516,7 @@
|
||||||
|
|
||||||
(rum/defcs property-key <
|
(rum/defcs property-key <
|
||||||
(rum/local false ::hover?)
|
(rum/local false ::hover?)
|
||||||
[state block property {:keys [class-schema? block? collapsed? page-cp inline-text other-position?]}]
|
[state block property {:keys [class-schema? collapsed? page-cp inline-text other-position?]}]
|
||||||
(let [*hover? (::hover? state)
|
(let [*hover? (::hover? state)
|
||||||
icon (:logseq.property/icon property)
|
icon (:logseq.property/icon property)
|
||||||
property-name (:block/original-name property)]
|
property-name (:block/original-name property)]
|
||||||
|
@ -541,18 +541,6 @@
|
||||||
"Delete property"]))]
|
"Delete property"]))]
|
||||||
{:as-dropdown? true
|
{:as-dropdown? true
|
||||||
:content-props {:class "w-48"}}))}
|
:content-props {:class "w-48"}}))}
|
||||||
(when block?
|
|
||||||
[:a.block-control
|
|
||||||
{:on-click (fn [event]
|
|
||||||
(util/stop event)
|
|
||||||
(db-property-handler/collapse-expand-block-property! (:db/id block) (:db/id property) (not collapsed?)))}
|
|
||||||
[:span {:class (cond
|
|
||||||
(or collapsed? @*hover?)
|
|
||||||
"control-show cursor-pointer"
|
|
||||||
:else
|
|
||||||
"control-hide")}
|
|
||||||
(ui/rotating-arrow collapsed?)]])
|
|
||||||
|
|
||||||
;; icon picker
|
;; icon picker
|
||||||
(when-not other-position?
|
(when-not other-position?
|
||||||
(let [content-fn (fn [{:keys [id]}]
|
(let [content-fn (fn [{:keys [id]}]
|
||||||
|
|
|
@ -285,7 +285,7 @@ a.control-link {
|
||||||
@apply font-bold outline-none;
|
@apply font-bold outline-none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.positioned-properties .property-k:focus {
|
.positioned-properties .property-k:focus, .positioned-properties .ls-popup-closed:focus {
|
||||||
@apply font-normal;
|
@apply font-normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,8 @@
|
||||||
[logseq.db.frontend.property :as db-property]
|
[logseq.db.frontend.property :as db-property]
|
||||||
[datascript.impl.entity :as de]
|
[datascript.impl.entity :as de]
|
||||||
[frontend.handler.property.util :as pu]
|
[frontend.handler.property.util :as pu]
|
||||||
[logseq.db.frontend.property.type :as db-property-type]))
|
[logseq.db.frontend.property.type :as db-property-type]
|
||||||
|
[dommy.core :as d]))
|
||||||
|
|
||||||
(rum/defc property-empty-btn-value
|
(rum/defc property-empty-btn-value
|
||||||
[& {:as opts}]
|
[& {:as opts}]
|
||||||
|
@ -153,7 +154,7 @@
|
||||||
(assoc :default-month initial-month)))))
|
(assoc :default-month initial-month)))))
|
||||||
|
|
||||||
(rum/defc date-picker
|
(rum/defc date-picker
|
||||||
[value {:keys [on-change editing? multiple-values?]}]
|
[value {:keys [on-change editing? multiple-values? other-position?]}]
|
||||||
(let [*trigger-ref (rum/use-ref nil)
|
(let [*trigger-ref (rum/use-ref nil)
|
||||||
page value
|
page value
|
||||||
title (when page (:block/original-name page))
|
title (when page (:block/original-name page))
|
||||||
|
@ -161,10 +162,11 @@
|
||||||
(js/Date. (date/journal-title->long title)))
|
(js/Date. (date/journal-title->long title)))
|
||||||
content-fn (fn [{:keys [id]}] (calendar-inner id on-change value'))
|
content-fn (fn [{:keys [id]}] (calendar-inner id on-change value'))
|
||||||
open-popup! (fn [e]
|
open-popup! (fn [e]
|
||||||
(util/stop e)
|
(when-not (or (util/meta-key? e) (util/shift-key? e))
|
||||||
(when-not config/publishing?
|
(util/stop e)
|
||||||
(shui/popup-show! (.-target e) content-fn
|
(when-not config/publishing?
|
||||||
{:align "start" :auto-focus? true})))]
|
(shui/popup-show! (.-target e) content-fn
|
||||||
|
{:align "start" :auto-focus? true}))))]
|
||||||
(rum/use-effect!
|
(rum/use-effect!
|
||||||
(fn []
|
(fn []
|
||||||
(when editing?
|
(when editing?
|
||||||
|
@ -184,12 +186,12 @@
|
||||||
:class "jtrigger min-h-[24px]" ; FIXME: min-h-6 not works
|
:class "jtrigger min-h-[24px]" ; FIXME: min-h-6 not works
|
||||||
:ref *trigger-ref
|
:ref *trigger-ref
|
||||||
:on-click open-popup!}
|
:on-click open-popup!}
|
||||||
|
|
||||||
(if page
|
(if page
|
||||||
(when-let [page-cp (state/get-component :block/page-cp)]
|
(when-let [page-cp (state/get-component :block/page-cp)]
|
||||||
(rum/with-key
|
(rum/with-key
|
||||||
(page-cp {:disable-preview? true
|
(page-cp {:disable-preview? true
|
||||||
:hide-close-button? true} page)
|
:hide-close-button? true
|
||||||
|
:meta-click? other-position?} page)
|
||||||
(:db/id page)))
|
(:db/id page)))
|
||||||
(when-not multiple-values?
|
(when-not multiple-values?
|
||||||
(property-empty-btn-value)))))))
|
(property-empty-btn-value)))))))
|
||||||
|
@ -558,7 +560,7 @@
|
||||||
(property-empty-btn-value))))))
|
(property-empty-btn-value))))))
|
||||||
|
|
||||||
(rum/defc closed-value-item < rum/reactive
|
(rum/defc closed-value-item < rum/reactive
|
||||||
[value {:keys [page-cp inline-text icon?]}]
|
[value {:keys [inline-text icon?]}]
|
||||||
(when value
|
(when value
|
||||||
(let [eid (if (de/entity? value) (:db/id value) [:block/uuid value])]
|
(let [eid (if (de/entity? value) (:db/id value) [:block/uuid value])]
|
||||||
(when-let [block (db/sub-block (:db/id (db/entity eid)))]
|
(when-let [block (db/sub-block (:db/id (db/entity eid)))]
|
||||||
|
@ -566,12 +568,6 @@
|
||||||
value' (db-property/closed-value-name block)
|
value' (db-property/closed-value-name block)
|
||||||
icon (pu/get-block-property-value block :logseq.property/icon)]
|
icon (pu/get-block-property-value block :logseq.property/icon)]
|
||||||
(cond
|
(cond
|
||||||
(:block/name block)
|
|
||||||
(rum/with-key
|
|
||||||
(page-cp {:disable-preview? true
|
|
||||||
:hide-close-button? true} block)
|
|
||||||
(:db/id block))
|
|
||||||
|
|
||||||
icon
|
icon
|
||||||
(if icon?
|
(if icon?
|
||||||
(icon-component/icon icon)
|
(icon-component/icon icon)
|
||||||
|
@ -590,9 +586,17 @@
|
||||||
(inline-text {} :markdown (str value'))))))))
|
(inline-text {} :markdown (str value'))))))))
|
||||||
|
|
||||||
(rum/defc select-item
|
(rum/defc select-item
|
||||||
[property type value {:keys [page-cp inline-text _icon?] :as opts}]
|
[property type value {:keys [page-cp inline-text other-position? _icon?] :as opts}]
|
||||||
(let [closed-values? (seq (:property/closed-values property))
|
(let [closed-values? (seq (:property/closed-values property))
|
||||||
tag? (or (:tag? opts) (= (:db/ident property) :block/tags))]
|
tag? (or (:tag? opts) (= (:db/ident property) :block/tags))
|
||||||
|
inline-text-cp (fn [content]
|
||||||
|
[:div.flex.flex-row.items-center
|
||||||
|
(inline-text {} :markdown (macro-util/expand-value-if-macro content (state/get-macros)))
|
||||||
|
(when (and (= type :url) other-position?)
|
||||||
|
(shui/button {:variant :ghost
|
||||||
|
:size :sm
|
||||||
|
:class "px-0 py-0 h-4"}
|
||||||
|
(ui/icon "edit" {:size 14})))])]
|
||||||
[:div.select-item
|
[:div.select-item
|
||||||
(cond
|
(cond
|
||||||
(= value :logseq.property/empty-placeholder)
|
(= value :logseq.property/empty-placeholder)
|
||||||
|
@ -603,7 +607,8 @@
|
||||||
(rum/with-key
|
(rum/with-key
|
||||||
(page-cp {:disable-preview? true
|
(page-cp {:disable-preview? true
|
||||||
:tag? tag?
|
:tag? tag?
|
||||||
:hide-close-button? true} value)
|
:hide-close-button? true
|
||||||
|
:meta-click? other-position?} value)
|
||||||
(:db/id value)))
|
(:db/id value)))
|
||||||
|
|
||||||
(= type :object)
|
(= type :object)
|
||||||
|
@ -614,10 +619,10 @@
|
||||||
|
|
||||||
(de/entity? value)
|
(de/entity? value)
|
||||||
(when-let [content (:block/content value)]
|
(when-let [content (:block/content value)]
|
||||||
(inline-text {} :markdown (macro-util/expand-value-if-macro content (state/get-macros))))
|
(inline-text-cp content))
|
||||||
|
|
||||||
:else
|
:else
|
||||||
(inline-text {} :markdown (macro-util/expand-value-if-macro (str value) (state/get-macros))))]))
|
(inline-text-cp (str value)))]))
|
||||||
|
|
||||||
(rum/defc single-value-select
|
(rum/defc single-value-select
|
||||||
[block property value value-f select-opts opts]
|
[block property value value-f select-opts opts]
|
||||||
|
@ -640,19 +645,29 @@
|
||||||
(:object :page :date)
|
(:object :page :date)
|
||||||
(property-value-select-page block property select-opts' opts))])
|
(property-value-select-page block property select-opts' opts))])
|
||||||
trigger-id (str "trigger-" (:container-id opts) "-" (:db/id block) "-" (:db/id property))
|
trigger-id (str "trigger-" (:container-id opts) "-" (:db/id block) "-" (:db/id property))
|
||||||
show! (fn [target]
|
show! (fn [e]
|
||||||
(when-not (or (util/link? target) (.closest target "a") config/publishing?)
|
(let [target (.-target e)
|
||||||
(shui/popup-show! target popup-content
|
node (.closest target "a")]
|
||||||
{:align "start"
|
(js/console.dir node)
|
||||||
:as-dropdown? true
|
(when-not (or config/publishing?
|
||||||
:auto-focus? true
|
(util/shift-key? e)
|
||||||
:trigger-id trigger-id})))]
|
(util/meta-key? e)
|
||||||
|
(util/link? target)
|
||||||
|
(when-let [node (.closest target "a")]
|
||||||
|
(not (or (d/has-class? node "page-ref")
|
||||||
|
(d/has-class? node "tag")))))
|
||||||
|
|
||||||
|
(shui/popup-show! target popup-content
|
||||||
|
{:align "start"
|
||||||
|
:as-dropdown? true
|
||||||
|
:auto-focus? true
|
||||||
|
:trigger-id trigger-id}))))]
|
||||||
(shui/trigger-as
|
(shui/trigger-as
|
||||||
(if (:other-position? opts) :div :div.jtrigger.flex.flex-1.w-full)
|
(if (:other-position? opts) :div :div.jtrigger.flex.flex-1.w-full)
|
||||||
{:ref *el
|
{:ref *el
|
||||||
:id trigger-id
|
:id trigger-id
|
||||||
:tabIndex 0
|
:tabIndex 0
|
||||||
:on-click #(show! (.-target %))}
|
:on-click show!}
|
||||||
(if (string/blank? value)
|
(if (string/blank? value)
|
||||||
(property-empty-text-value)
|
(property-empty-text-value)
|
||||||
(value-f))))))
|
(value-f))))))
|
||||||
|
@ -738,7 +753,7 @@
|
||||||
(assoc opts :editing? editing?))
|
(assoc opts :editing? editing?))
|
||||||
(case type
|
(case type
|
||||||
:date
|
:date
|
||||||
(property-value-date-picker block property value {:editing? editing?})
|
(property-value-date-picker block property value (merge opts {:editing? editing?}))
|
||||||
|
|
||||||
:checkbox
|
:checkbox
|
||||||
(let [add-property! (fn []
|
(let [add-property! (fn []
|
||||||
|
|
|
@ -1242,6 +1242,11 @@
|
||||||
(gobj/get e "metaKey")
|
(gobj/get e "metaKey")
|
||||||
(gobj/get e "ctrlKey"))))
|
(gobj/get e "ctrlKey"))))
|
||||||
|
|
||||||
|
#?(:cljs
|
||||||
|
(defn shift-key? [e]
|
||||||
|
(gobj/get e "shiftKey")))
|
||||||
|
|
||||||
|
|
||||||
#?(:cljs
|
#?(:cljs
|
||||||
(defn right-click?
|
(defn right-click?
|
||||||
[e]
|
[e]
|
||||||
|
|
Loading…
Reference in New Issue