diff --git a/src/main/frontend/components/content.cljs b/src/main/frontend/components/content.cljs index 8f5b48479a..17e3543bd8 100644 --- a/src/main/frontend/components/content.cljs +++ b/src/main/frontend/components/content.cljs @@ -135,15 +135,6 @@ (reset! edit? true))} "Make template")))) -(defn calc-delta-rect-offset - [^js/HTMLElement target ^js/HTMLElement container] - (let [target-rect (bean/->clj (.toJSON (.getBoundingClientRect target))) - viewport-rect {:width (.-clientWidth container) - :height (.-clientHeight container)}] - - {:y (- (:height viewport-rect) (:bottom target-rect)) - :x (- (:width viewport-rect) (:right target-rect))})) - (rum/defc block-context-menu-content [target block-id] @@ -152,7 +143,7 @@ (rum/use-effect! (fn [] (let [^js el (rum/deref *el-ref) - {:keys [x y]} (calc-delta-rect-offset el js/document.documentElement)] + {:keys [x y]} (util/calc-delta-rect-offset el js/document.documentElement)] (set! (.. el -style -transform) (str "translate3d(" (if (neg? x) x 0) "px," (if (neg? y) (- y 10) 0) "px" ",0)"))) #()) diff --git a/src/main/frontend/extensions/pdf/highlights.cljs b/src/main/frontend/extensions/pdf/highlights.cljs index bf27688501..4fe00086c5 100644 --- a/src/main/frontend/extensions/pdf/highlights.cljs +++ b/src/main/frontend/extensions/pdf/highlights.cljs @@ -91,30 +91,40 @@ {:keys [highlight vw-pos point]} {:keys [clear-ctx-tip! add-hl! upd-hl! del-hl!]}] - (let [mounted (rum/use-ref false)] - (rum/use-effect! - (fn [] - (let [cb #(clear-ctx-tip!)] - (js/setTimeout #(js/document.addEventListener "click" cb)) - #(js/document.removeEventListener "click" cb))) - [])) + (rum/use-effect! + (fn [] + (let [cb #(clear-ctx-tip!)] + (js/setTimeout #(js/document.addEventListener "click" cb)) + #(js/document.removeEventListener "click" cb))) + []) ;; TODO: precise position ;;(when-let [ ;;page-bounding (and highlight (pdf-utils/get-page-bounding viewer (:page highlight))) ;;]) - (let [head-height 0 ;; 48 temp + (let [*el (rum/use-ref nil) + head-height 0 ;; 48 temp top (- (+ (:y point) (.. viewer -container -scrollTop)) head-height) left (:x point) id (:id highlight) content (:content highlight)] + (rum/use-effect! + (fn [] + (let [^js el (rum/deref *el) + {:keys [x y]} (front-utils/calc-delta-rect-offset el (.closest el ".extensions__pdf-viewer"))] + (set! (.. el -style -transform) + (str "translate3d(" (if (neg? x) (- x 5) 0) "px," (if (neg? y) (- y 5) 0) "px" ",0)"))) + #()) + []) + (rum/with-context [[t] i18n/*tongue-context*] [:ul.extensions__pdf-hls-ctx-menu - {:style {:top top :left left} + {:ref *el + :style {:top top :left left} :on-click (fn [^js/MouseEvent e] (when-let [action (.. e -target -dataset -action)] (case action diff --git a/src/main/frontend/extensions/pdf/pdf.css b/src/main/frontend/extensions/pdf/pdf.css index cb6f862198..7dd3edfea3 100644 --- a/src/main/frontend/extensions/pdf/pdf.css +++ b/src/main/frontend/extensions/pdf/pdf.css @@ -195,7 +195,8 @@ &-viewer { position: absolute; - overflow: auto; + overflow-y: auto; + overflow-x: hidden; width: 100%; height: 100%; diff --git a/src/main/frontend/util.cljc b/src/main/frontend/util.cljc index ac01ef81d3..3cb526f718 100644 --- a/src/main/frontend/util.cljc +++ b/src/main/frontend/util.cljc @@ -1320,6 +1320,15 @@ (< (get-dom-top x) (get-dom-top y))) elements))) +#?(:cljs + (defn calc-delta-rect-offset + [^js/HTMLElement target ^js/HTMLElement container] + (let [target-rect (bean/->clj (.toJSON (.getBoundingClientRect target))) + viewport-rect {:width (.-clientWidth container) + :height (.-clientHeight container)}] + + {:y (- (:height viewport-rect) (:bottom target-rect)) + :x (- (:width viewport-rect) (:right target-rect))}))) (def regex-char-esc-smap (let [esc-chars "{}[]()&^%$#!?*.+|\\"]