From 118b4367e777836544c951ca97d46d9f7e6ed91f Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 21 Mar 2022 21:34:46 +0100 Subject: [PATCH] :bug: Parametrized render to embed objects. Fix problem with fonts when exporting to SVG --- exporter/src/app/handlers/resources.cljs | 1 + exporter/src/app/renderer/svg.cljs | 1 + frontend/src/app/main/fonts.cljs | 5 +++-- frontend/src/app/main/ui.cljs | 2 ++ frontend/src/app/main/ui/render.cljs | 9 +++++---- frontend/src/app/render.cljs | 8 +++++--- 6 files changed, 17 insertions(+), 9 deletions(-) diff --git a/exporter/src/app/handlers/resources.cljs b/exporter/src/app/handlers/resources.cljs index e934fdceb..6fa3ddb1a 100644 --- a/exporter/src/app/handlers/resources.cljs +++ b/exporter/src/app/handlers/resources.cljs @@ -26,6 +26,7 @@ (defn- get-mtype [type] + (case (d/name type) "zip" "application/zip" "pdf" "application/pdf" diff --git a/exporter/src/app/renderer/svg.cljs b/exporter/src/app/renderer/svg.cljs index 20d883d24..4a965ad4d 100644 --- a/exporter/src/app/renderer/svg.cljs +++ b/exporter/src/app/renderer/svg.cljs @@ -327,6 +327,7 @@ :page-id page-id :object-id object-id :render-texts true + :embed true :route "render-object"} uri (-> (or uri (cf/get :public-uri)) diff --git a/frontend/src/app/main/fonts.cljs b/frontend/src/app/main/fonts.cljs index 94187a561..38f5ab6b0 100644 --- a/frontend/src/app/main/fonts.cljs +++ b/frontend/src/app/main/fonts.cljs @@ -226,7 +226,7 @@ font-style: %(style)s; font-weight: %(weight)s; font-display: block; - src: url(/fonts/%(family)s-%(suffix)s.woff) format('woff'); + src: url(%(baseurl)sfonts/%(family)s-%(suffix)s.woff) format('woff'); } ") @@ -262,7 +262,8 @@ :else (let [{:keys [weight style suffix] :as variant} (d/seek #(= (:id %) font-variant-id) variants) - font-data {:family family + font-data {:baseurl (str cf/public-uri) + :family family :style style :suffix (or suffix font-variant-id) :weight weight}] diff --git a/frontend/src/app/main/ui.cljs b/frontend/src/app/main/ui.cljs index 2fa0102c0..11a76dbbf 100644 --- a/frontend/src/app/main/ui.cljs +++ b/frontend/src/app/main/ui.cljs @@ -115,10 +115,12 @@ (let [file-id (uuid (get-in route [:path-params :file-id])) page-id (uuid (get-in route [:path-params :page-id])) object-id (uuid (get-in route [:path-params :object-id])) + embed? (= (get-in route [:query-params :embed]) "true") render-texts (get-in route [:query-params :render-texts])] [:& render/render-object {:file-id file-id :page-id page-id :object-id object-id + :embed? embed? :render-texts? (and (some? render-texts) (= render-texts "true"))}])) :render-sprite diff --git a/frontend/src/app/main/ui/render.cljs b/frontend/src/app/main/ui/render.cljs index 3b34dee80..2b5edf267 100644 --- a/frontend/src/app/main/ui/render.cljs +++ b/frontend/src/app/main/ui/render.cljs @@ -52,8 +52,8 @@ (mf/defc object-svg {::mf/wrap [mf/memo]} - [{:keys [objects object-id zoom render-texts?] - :or {zoom 1} + [{:keys [objects object-id zoom render-texts? embed?] + :or {zoom 1 embed? false} :as props}] (let [object (get objects object-id) frame-id (if (= :frame (:type object)) @@ -106,7 +106,7 @@ {:size (str (mth/ceil width) "px " (mth/ceil height) "px")})) - [:& (mf/provider embed/context) {:value false} + [:& (mf/provider embed/context) {:value embed?} [:svg {:id "screenshot" :view-box vbox :width width @@ -152,7 +152,7 @@ objects)) (mf/defc render-object - [{:keys [file-id page-id object-id render-texts?] :as props}] + [{:keys [file-id page-id object-id render-texts? embed?] :as props}] (let [objects (mf/use-state nil)] (mf/with-effect [file-id page-id object-id] @@ -171,6 +171,7 @@ (when @objects [:& object-svg {:objects @objects :object-id object-id + :embed? embed? :render-texts? render-texts? :zoom 1}]))) diff --git a/frontend/src/app/render.cljs b/frontend/src/app/render.cljs index b8681028f..d119796f8 100644 --- a/frontend/src/app/render.cljs +++ b/frontend/src/app/render.cljs @@ -60,17 +60,19 @@ (s/def ::file-id ::us/uuid) (s/def ::object-id ::us/uuid) (s/def ::render-text ::us/boolean) +(s/def ::embed ::us/boolean) (s/def ::render-object-params (s/keys :req-un [::file-id ::page-id ::object-id] - :opt-un [::render-text])) + :opt-un [::render-text ::embed])) (defn- render-object [params] - (let [{:keys [page-id file-id object-id render-texts]} (us/conform ::render-object-params params)] + (let [{:keys [page-id file-id object-id render-texts embed]} (us/conform ::render-object-params params)] (mf/html [:& render/render-object {:file-id file-id :page-id page-id :object-id object-id - :render-texts? (and (some? render-texts) (= render-texts "true"))}]))) + :embed? embed + :render-texts? render-texts}])))