mirror of
https://github.com/penpot/penpot.git
synced 2025-02-09 00:28:20 -05:00
🐛 Parametrized render to embed objects. Fix problem with fonts when exporting to SVG
This commit is contained in:
parent
e6f8269c0b
commit
118b4367e7
6 changed files with 17 additions and 9 deletions
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
(defn- get-mtype
|
(defn- get-mtype
|
||||||
[type]
|
[type]
|
||||||
|
|
||||||
(case (d/name type)
|
(case (d/name type)
|
||||||
"zip" "application/zip"
|
"zip" "application/zip"
|
||||||
"pdf" "application/pdf"
|
"pdf" "application/pdf"
|
||||||
|
|
|
@ -327,6 +327,7 @@
|
||||||
:page-id page-id
|
:page-id page-id
|
||||||
:object-id object-id
|
:object-id object-id
|
||||||
:render-texts true
|
:render-texts true
|
||||||
|
:embed true
|
||||||
:route "render-object"}
|
:route "render-object"}
|
||||||
|
|
||||||
uri (-> (or uri (cf/get :public-uri))
|
uri (-> (or uri (cf/get :public-uri))
|
||||||
|
|
|
@ -226,7 +226,7 @@
|
||||||
font-style: %(style)s;
|
font-style: %(style)s;
|
||||||
font-weight: %(weight)s;
|
font-weight: %(weight)s;
|
||||||
font-display: block;
|
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
|
:else
|
||||||
(let [{:keys [weight style suffix] :as variant}
|
(let [{:keys [weight style suffix] :as variant}
|
||||||
(d/seek #(= (:id %) font-variant-id) variants)
|
(d/seek #(= (:id %) font-variant-id) variants)
|
||||||
font-data {:family family
|
font-data {:baseurl (str cf/public-uri)
|
||||||
|
:family family
|
||||||
:style style
|
:style style
|
||||||
:suffix (or suffix font-variant-id)
|
:suffix (or suffix font-variant-id)
|
||||||
:weight weight}]
|
:weight weight}]
|
||||||
|
|
|
@ -115,10 +115,12 @@
|
||||||
(let [file-id (uuid (get-in route [:path-params :file-id]))
|
(let [file-id (uuid (get-in route [:path-params :file-id]))
|
||||||
page-id (uuid (get-in route [:path-params :page-id]))
|
page-id (uuid (get-in route [:path-params :page-id]))
|
||||||
object-id (uuid (get-in route [:path-params :object-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-texts (get-in route [:query-params :render-texts])]
|
||||||
[:& render/render-object {:file-id file-id
|
[:& render/render-object {:file-id file-id
|
||||||
:page-id page-id
|
:page-id page-id
|
||||||
:object-id object-id
|
:object-id object-id
|
||||||
|
:embed? embed?
|
||||||
:render-texts? (and (some? render-texts) (= render-texts "true"))}]))
|
:render-texts? (and (some? render-texts) (= render-texts "true"))}]))
|
||||||
|
|
||||||
:render-sprite
|
:render-sprite
|
||||||
|
|
|
@ -52,8 +52,8 @@
|
||||||
|
|
||||||
(mf/defc object-svg
|
(mf/defc object-svg
|
||||||
{::mf/wrap [mf/memo]}
|
{::mf/wrap [mf/memo]}
|
||||||
[{:keys [objects object-id zoom render-texts?]
|
[{:keys [objects object-id zoom render-texts? embed?]
|
||||||
:or {zoom 1}
|
:or {zoom 1 embed? false}
|
||||||
:as props}]
|
:as props}]
|
||||||
(let [object (get objects object-id)
|
(let [object (get objects object-id)
|
||||||
frame-id (if (= :frame (:type object))
|
frame-id (if (= :frame (:type object))
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
{:size (str (mth/ceil width) "px "
|
{:size (str (mth/ceil width) "px "
|
||||||
(mth/ceil height) "px")}))
|
(mth/ceil height) "px")}))
|
||||||
|
|
||||||
[:& (mf/provider embed/context) {:value false}
|
[:& (mf/provider embed/context) {:value embed?}
|
||||||
[:svg {:id "screenshot"
|
[:svg {:id "screenshot"
|
||||||
:view-box vbox
|
:view-box vbox
|
||||||
:width width
|
:width width
|
||||||
|
@ -152,7 +152,7 @@
|
||||||
objects))
|
objects))
|
||||||
|
|
||||||
(mf/defc render-object
|
(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)]
|
(let [objects (mf/use-state nil)]
|
||||||
|
|
||||||
(mf/with-effect [file-id page-id object-id]
|
(mf/with-effect [file-id page-id object-id]
|
||||||
|
@ -171,6 +171,7 @@
|
||||||
(when @objects
|
(when @objects
|
||||||
[:& object-svg {:objects @objects
|
[:& object-svg {:objects @objects
|
||||||
:object-id object-id
|
:object-id object-id
|
||||||
|
:embed? embed?
|
||||||
:render-texts? render-texts?
|
:render-texts? render-texts?
|
||||||
:zoom 1}])))
|
:zoom 1}])))
|
||||||
|
|
||||||
|
|
|
@ -60,17 +60,19 @@
|
||||||
(s/def ::file-id ::us/uuid)
|
(s/def ::file-id ::us/uuid)
|
||||||
(s/def ::object-id ::us/uuid)
|
(s/def ::object-id ::us/uuid)
|
||||||
(s/def ::render-text ::us/boolean)
|
(s/def ::render-text ::us/boolean)
|
||||||
|
(s/def ::embed ::us/boolean)
|
||||||
|
|
||||||
(s/def ::render-object-params
|
(s/def ::render-object-params
|
||||||
(s/keys :req-un [::file-id ::page-id ::object-id]
|
(s/keys :req-un [::file-id ::page-id ::object-id]
|
||||||
:opt-un [::render-text]))
|
:opt-un [::render-text ::embed]))
|
||||||
|
|
||||||
(defn- render-object
|
(defn- render-object
|
||||||
[params]
|
[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
|
(mf/html
|
||||||
[:& render/render-object
|
[:& render/render-object
|
||||||
{:file-id file-id
|
{:file-id file-id
|
||||||
:page-id page-id
|
:page-id page-id
|
||||||
:object-id object-id
|
:object-id object-id
|
||||||
:render-texts? (and (some? render-texts) (= render-texts "true"))}])))
|
:embed? embed
|
||||||
|
:render-texts? render-texts}])))
|
||||||
|
|
Loading…
Add table
Reference in a new issue