From 316b3d453981e58be37cd3e16664b56c0ccf6caa Mon Sep 17 00:00:00 2001 From: "alonso.torres" <alonso.torres@kaleidos.net> Date: Mon, 23 Jan 2023 14:07:51 +0100 Subject: [PATCH] :bug: Try to remove cases when the thumbnail could be empty --- .../shapes/frame/thumbnail_render.cljs | 43 ++++++++++++------- frontend/src/app/util/dom.cljs | 14 +++++- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/frame/thumbnail_render.cljs b/frontend/src/app/main/ui/workspace/shapes/frame/thumbnail_render.cljs index 040b94485..4ea93a741 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame/thumbnail_render.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame/thumbnail_render.cljs @@ -114,26 +114,37 @@ generate-thumbnail (mf/use-callback - (fn [] - (let [node @node-ref - frame-html (dom/node->xml node) + (fn generate-thumbnail [] + (try + (let [node @node-ref] + (if (dom/has-children? node) + ;; The frame-content need to have children in order to generate the thumbnail + (let [frame-html (dom/node->xml node) + style-node (dom/query (dm/str "#frame-container-" (:id shape) " style")) + style-str (or (-> style-node dom/node->xml) "") - {:keys [x y width height]} @shape-bb-ref + {:keys [x y width height]} @shape-bb-ref + viewbox (dm/str x " " y " " width " " height) - style-node (dom/query (dm/str "#frame-container-" (:id shape) " style")) - style-str (or (-> style-node dom/node->xml) "") + svg-node + (-> (dom/make-node "http://www.w3.org/2000/svg" "svg") + (dom/set-property! "version" "1.1") + (dom/set-property! "viewBox" viewbox) + (dom/set-property! "width" width) + (dom/set-property! "height" height) + (dom/set-property! "fill" "none") + (obj/set! "innerHTML" (dm/str style-str frame-html))) - svg-node - (-> (dom/make-node "http://www.w3.org/2000/svg" "svg") - (dom/set-property! "version" "1.1") - (dom/set-property! "viewBox" (dm/str x " " y " " width " " height)) - (dom/set-property! "width" width) - (dom/set-property! "height" height) - (dom/set-property! "fill" "none") - (obj/set! "innerHTML" (dm/str style-str frame-html))) - img-src (-> svg-node dom/node->xml dom/svg->data-uri)] + img-src + (-> svg-node dom/node->xml dom/svg->data-uri)] - (reset! image-url img-src)))) + (reset! image-url img-src)) + + ;; Node not yet ready, we schedule a new generation + (ts/schedule generate-thumbnail))) + + (catch :default e + (.error js/console e))))) on-change-frame (mf/use-callback diff --git a/frontend/src/app/util/dom.cljs b/frontend/src/app/util/dom.cljs index 60c62f863..cd2a6ac09 100644 --- a/frontend/src/app/util/dom.cljs +++ b/frontend/src/app/util/dom.cljs @@ -264,12 +264,14 @@ (defn append-child! [^js el child] (when (some? el) - (.appendChild ^js el child))) + (.appendChild ^js el child)) + el) (defn remove-child! [^js el child] (when (some? el) - (.removeChild ^js el child))) + (.removeChild ^js el child)) + el) (defn get-first-child [^js el] @@ -639,3 +641,11 @@ {:ascent (.-fontBoundingBoxAscent measure) :descent (.-fontBoundingBoxDescent measure)})) + +(defn clone-node + [^js node] + (.cloneNode node)) + +(defn has-children? + [^js node] + (> (-> node .-children .-length) 0))