소스 검색

enhance(ux): disable sticky table header for the list journals

charlie 7 달 전
부모
커밋
290616c14e
1개의 변경된 파일58개의 추가작업 그리고 56개의 파일을 삭제
  1. 58 56
      deps/shui/src/logseq/shui/table/core.cljc

+ 58 - 56
deps/shui/src/logseq/shui/table/core.cljc

@@ -193,64 +193,66 @@
    (fn []
      (let [^js target (rum/deref target-ref)
            ^js container (or (.closest target ".sidebar-item-list") (get-main-scroll-container))
-           ^js target-cls (.-classList target)
            ^js table (.closest target ".ls-table-rows")
-           ^js table-footer (some-> table (.querySelector ".ls-table-footer"))
-           ^js page-el (.closest target ".page-inner")
-           *ticking? (volatile! false)
-           *el-top (volatile! (-> target (.getBoundingClientRect) (.-top)))
-           head-top (-> (get-head-container) (js/getComputedStyle) (.-height) (js/parseInt))
-           update-target-top! (fn []
-                                (when (not (.contains target-cls "ls-fixed"))
-                                  (vreset! *el-top (+ (-> target (.getBoundingClientRect) (.-top))
-                                                      (.-scrollTop container)))))
-           update-footer! (fn []
-                            (let [tw (.-scrollWidth table)]
-                              (when (and table-footer (number? tw) (> tw 0))
-                                (set! (. (.-style table-footer) -width) (str tw "px")))))
-           update-target! (fn []
-                            (if (.contains target-cls "ls-fixed")
-                              (let [^js rect (-> table (.getBoundingClientRect))
-                                    width (.-clientWidth table)
-                                    left (.-left rect)]
-                                (set! (. (.-style target) -width) (str width "px"))
-                                (set! (. (.-style target) -left) (str left "px")))
-                              (do
-                                (set! (. (.-style target) -width) "auto")
-                                (set! (. (.-style target) -left) "0px")))
-                             ;; update scroll
-                            (set! (. target -scrollLeft) (.-scrollLeft table)))
-            ;; target observer
-           target-observe! (fn []
-                             (let [scroll-top (js/parseInt (.-scrollTop container))
-                                   table-in-top (+ scroll-top head-top)
-                                   table-bottom (.-bottom (.getBoundingClientRect table))
-                                   fixed? (and (> table-bottom (+ head-top 90))
-                                               (> table-in-top @*el-top))]
-                               (if fixed?
-                                 (.add target-cls "ls-fixed")
-                                 (.remove target-cls "ls-fixed"))
-                               (update-target!)))
-           target-observe-handle! (fn [^js _e]
-                                    (when (not @*ticking?)
-                                      (js/window.requestAnimationFrame
-                                       #(do (target-observe!) (vreset! *ticking? false)))
-                                      (vreset! *ticking? true)))
-           resize-observer (js/ResizeObserver. update-target!)
-           page-resize-observer (js/ResizeObserver. (fn [] (update-target-top!)))]
-        ;; events
-       (.observe resize-observer container)
-       (.observe resize-observer table)
-       (some->> page-el (.observe page-resize-observer))
-       (.addEventListener container "scroll" target-observe-handle!)
-       (.addEventListener table "scroll" update-target!)
-       (.addEventListener table "resize" update-target!)
-       (update-footer!)
+           refs-table? (.closest table ".references")]
+       (when (not refs-table?)
+         (let [^js target-cls (.-classList target)
+               ^js table-footer (some-> table (.querySelector ".ls-table-footer"))
+               ^js page-el (.closest target ".page-inner")
+               *ticking? (volatile! false)
+               *el-top (volatile! (-> target (.getBoundingClientRect) (.-top)))
+               head-height (-> (get-head-container) (js/getComputedStyle) (.-height) (js/parseInt))
+               update-target-top! (fn []
+                                    (when (not (.contains target-cls "ls-fixed"))
+                                      (vreset! *el-top (+ (-> target (.getBoundingClientRect) (.-top))
+                                                         (.-scrollTop container)))))
+               update-footer! (fn []
+                                (let [tw (.-scrollWidth table)]
+                                  (when (and table-footer (number? tw) (> tw 0))
+                                    (set! (. (.-style table-footer) -width) (str tw "px")))))
+               update-target! (fn []
+                                (if (.contains target-cls "ls-fixed")
+                                  (let [^js rect (-> table (.getBoundingClientRect))
+                                        width (.-clientWidth table)
+                                        left (.-left rect)]
+                                    (set! (. (.-style target) -width) (str width "px"))
+                                    (set! (. (.-style target) -left) (str left "px")))
+                                  (do
+                                    (set! (. (.-style target) -width) "auto")
+                                    (set! (. (.-style target) -left) "0px")))
+                                ;; update scroll
+                                (set! (. target -scrollLeft) (.-scrollLeft table)))
+               ;; target observer
+               target-observe! (fn []
+                                 (let [scroll-top (js/parseInt (.-scrollTop container))
+                                       table-in-top (+ scroll-top head-height)
+                                       table-bottom (.-bottom (.getBoundingClientRect table))
+                                       fixed? (and (> table-bottom (+ head-height 90))
+                                                (> table-in-top @*el-top))]
+                                   (if fixed?
+                                     (.add target-cls "ls-fixed")
+                                     (.remove target-cls "ls-fixed"))
+                                   (update-target!)))
+               target-observe-handle! (fn [^js _e]
+                                        (when (not @*ticking?)
+                                          (js/window.requestAnimationFrame
+                                            #(do (target-observe!) (vreset! *ticking? false)))
+                                          (vreset! *ticking? true)))
+               resize-observer (js/ResizeObserver. update-target!)
+               page-resize-observer (js/ResizeObserver. (fn [] (update-target-top!)))]
+           ;; events
+           (.observe resize-observer container)
+           (.observe resize-observer table)
+           (some->> page-el (.observe page-resize-observer))
+           (.addEventListener container "scroll" target-observe-handle!)
+           (.addEventListener table "scroll" update-target!)
+           (.addEventListener table "resize" update-target!)
+           (update-footer!)
 
-        ;; teardown
-       #(do (.removeEventListener container "scroll" target-observe!)
-            (.disconnect resize-observer)
-            (.disconnect page-resize-observer))))
+           ;; teardown
+           #(do (.removeEventListener container "scroll" target-observe!)
+              (.disconnect resize-observer)
+              (.disconnect page-resize-observer))))))
    []))
 
 (rum/defc table-header < rum/static