mirror of
https://github.com/penpot/penpot.git
synced 2025-02-13 10:38:13 -05:00
Merge pull request #3347 from penpot/niwinz-fonts-local-caching
🐛 Fix several bugs related to fonts and components migration
This commit is contained in:
commit
a895eaf61c
7 changed files with 39 additions and 39 deletions
|
@ -273,16 +273,13 @@
|
|||
(binding [pmap/*tracked* (atom {})]
|
||||
(let [data (ctf/migrate-to-components-v2 data)
|
||||
features (conj features "components/v2")
|
||||
modified-at (dt/now)
|
||||
features' (db/create-array conn "text" features)]
|
||||
(db/update! conn :file
|
||||
{:data (blob/encode data)
|
||||
:modified-at modified-at
|
||||
:features features'}
|
||||
{:id id})
|
||||
(persist-pointers! conn id)
|
||||
(-> file
|
||||
(assoc :modified-at modified-at)
|
||||
(assoc :features features)
|
||||
(assoc :data data))))
|
||||
file)]
|
||||
|
|
|
@ -3,10 +3,10 @@ LABEL maintainer="Andrey Antukh <niwi@niwi.nz>"
|
|||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV NODE_VERSION=v18.15.0 \
|
||||
CLOJURE_VERSION=1.11.1.1257 \
|
||||
CLJKONDO_VERSION=2023.03.17 \
|
||||
BABASHKA_VERSION=1.3.176 \
|
||||
ENV NODE_VERSION=v18.16.1 \
|
||||
CLOJURE_VERSION=1.11.1.1347 \
|
||||
CLJKONDO_VERSION=2023.05.26 \
|
||||
BABASHKA_VERSION=1.3.181 \
|
||||
LANG=en_US.UTF-8 \
|
||||
LC_ALL=en_US.UTF-8
|
||||
|
||||
|
@ -104,16 +104,12 @@ RUN set -eux; \
|
|||
ARCH="$(dpkg --print-architecture)"; \
|
||||
case "${ARCH}" in \
|
||||
aarch64|arm64) \
|
||||
ESUM='1c4be9aa173cb0deb0d215643d9509c8900e5497290b29eee4bee335fa57984f'; \
|
||||
BINARY_URL='https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_aarch64_linux_hotspot_19.0.2_7.tar.gz'; \
|
||||
;; \
|
||||
armhf|armv7l) \
|
||||
ESUM='6a51cb3868b5a3b81848a0d276267230ff3f8639f20ba9ae9ef1d386440bf1fd'; \
|
||||
BINARY_URL='https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_arm_linux_hotspot_19.0.2_7.tar.gz'; \
|
||||
ESUM='b16c0271899de1f0e277dc0398bfff11b54511765f104fa938929ac484dc926d'; \
|
||||
BINARY_URL='https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.1%2B9/OpenJDK20U-jdk_aarch64_linux_hotspot_20.0.1_9.tar.gz'; \
|
||||
;; \
|
||||
amd64|x86_64) \
|
||||
ESUM='3a3ba7a3f8c3a5999e2c91ea1dca843435a0d1c43737bd2f6822b2f02fc52165'; \
|
||||
BINARY_URL='https://github.com/adoptium/temurin19-binaries/releases/download/jdk-19.0.2%2B7/OpenJDK19U-jdk_x64_linux_hotspot_19.0.2_7.tar.gz'; \
|
||||
ESUM='43ad054f135a7894dc87ad5d10ad45d8e82846186515892acdbc17c2c5cd27e4'; \
|
||||
BINARY_URL='https://github.com/adoptium/temurin20-binaries/releases/download/jdk-20.0.1%2B9/OpenJDK20U-jdk_x64_linux_hotspot_20.0.1_9.tar.gz'; \
|
||||
;; \
|
||||
*) \
|
||||
echo "Unsupported arch: ${ARCH}"; \
|
||||
|
|
|
@ -126,19 +126,23 @@
|
|||
(assoc :path "/internal/gfonts/css")
|
||||
(assoc :query query)))))
|
||||
|
||||
(defn- fetch-and-process-gfont-css
|
||||
[url]
|
||||
(defn- process-gfont-css
|
||||
[css]
|
||||
(let [base (dm/str (assoc cf/public-uri :path "/internal/gfonts/font"))]
|
||||
(->> (http/send! {:method :get :uri url :mode :cors :response-type :text})
|
||||
(rx/map :body)
|
||||
(rx/map #(str/replace % "https://fonts.gstatic.com/s" base)))))
|
||||
(str/replace css "https://fonts.gstatic.com/s" base)))
|
||||
|
||||
(defn- fetch-gfont-css
|
||||
[url]
|
||||
(->> (http/send! {:method :get :uri url :mode :cors :response-type :text})
|
||||
(rx/map :body)))
|
||||
|
||||
(defmethod load-font :google
|
||||
[{:keys [id ::on-loaded] :as font}]
|
||||
(when (exists? js/window)
|
||||
(log/info :hint "load-font" :font-id id :backend "google")
|
||||
(let [url (generate-gfonts-url font)]
|
||||
(->> (fetch-and-process-gfont-css url)
|
||||
(->> (fetch-gfont-css url)
|
||||
(rx/map process-gfont-css)
|
||||
(rx/tap #(on-loaded id))
|
||||
(rx/subs (partial add-font-css! id)))
|
||||
nil)))
|
||||
|
@ -257,7 +261,6 @@
|
|||
"Given a font and the variant-id, retrieves the fontface CSS"
|
||||
[{:keys [font-id font-variant-id]
|
||||
:or {font-variant-id "regular"}}]
|
||||
|
||||
(let [{:keys [backend family] :as font} (get @fontsdb font-id)]
|
||||
(cond
|
||||
(nil? font)
|
||||
|
@ -265,10 +268,9 @@
|
|||
|
||||
(= :google backend)
|
||||
(let [variant (get-variant font font-variant-id)]
|
||||
(-> (generate-gfonts-url
|
||||
{:family family
|
||||
:variants [variant]})
|
||||
(http/fetch-text)))
|
||||
(->> (rx/of (generate-gfonts-url {:family family :variants [variant]}))
|
||||
(rx/mapcat fetch-gfont-css)
|
||||
(rx/map process-gfont-css)))
|
||||
|
||||
(= :custom backend)
|
||||
(let [variant (get-variant font font-variant-id)
|
||||
|
|
|
@ -62,9 +62,9 @@
|
|||
|
||||
(defn render
|
||||
"Renders a thumbnail."
|
||||
[{:keys [data styles] :as params}]
|
||||
[{:keys [data styles width] :as params}]
|
||||
(let [id (dm/str (uuid/next))
|
||||
payload #js {:data data :styles styles}
|
||||
payload #js {:data data :styles styles :width width}
|
||||
message #js {:id id
|
||||
:scope "penpot/thumbnail-renderer"
|
||||
:payload payload}]
|
||||
|
|
|
@ -62,7 +62,9 @@
|
|||
(rx/mapcat (fn [{:keys [fonts] :as result}]
|
||||
(->> (fonts/render-font-styles fonts)
|
||||
(rx/map (fn [styles]
|
||||
(assoc result :styles styles))))))
|
||||
(assoc result
|
||||
:styles styles
|
||||
:width 250))))))
|
||||
(rx/mapcat thr/render)
|
||||
(rx/mapcat (partial persist-thumbnail file-id revn)))))
|
||||
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
(obj/set! image "onload" #(do
|
||||
(rx/push! subs image)
|
||||
(rx/end! subs)))
|
||||
|
||||
(obj/set! image "crossOrigin" "anonymous")
|
||||
(obj/set! image "onerror" #(rx/error! subs %))
|
||||
(obj/set! image "onabort" #(rx/error! subs (ex/error :type :internal
|
||||
|
@ -157,10 +156,10 @@
|
|||
|
||||
(defn- svg-prepare
|
||||
"Prepares an SVG for rendering (resolves images to Data URIs and adds intrinsic size)."
|
||||
[data styles]
|
||||
[data styles width]
|
||||
(let [svg (svg-parse data)]
|
||||
(->> (svg-resolve-all! svg styles)
|
||||
(rx/map #(svg-set-intrinsic-size! % 300))
|
||||
(rx/map #(svg-set-intrinsic-size! % width))
|
||||
(rx/map svg-stringify))))
|
||||
|
||||
(defn- bitmap->blob
|
||||
|
@ -182,13 +181,15 @@
|
|||
"Renders a thumbnail using it's SVG and returns an ArrayBuffer of the image."
|
||||
[payload]
|
||||
(let [data (unchecked-get payload "data")
|
||||
styles (unchecked-get payload "styles")]
|
||||
(->> (svg-prepare data styles)
|
||||
styles (unchecked-get payload "styles")
|
||||
width (d/nilv (unchecked-get payload "width") 300)]
|
||||
(->> (svg-prepare data styles width)
|
||||
(rx/map #(wapi/create-blob % "image/svg+xml"))
|
||||
(rx/map wapi/create-uri)
|
||||
(rx/mapcat (fn [uri]
|
||||
(->> (create-image uri)
|
||||
(rx/mapcat wapi/create-image-bitmap)
|
||||
(rx/mapcat #(wapi/create-image-bitmap % #js {:resizeWidth width
|
||||
:resizeQuality "medium"}))
|
||||
(rx/tap #(wapi/revoke-uri uri)))))
|
||||
(rx/mapcat bitmap->blob))))
|
||||
|
||||
|
|
|
@ -126,13 +126,15 @@
|
|||
[clipboard-data]
|
||||
(when clipboard-data
|
||||
(let [file-list (-> (.-files ^js clipboard-data))]
|
||||
(->> (range (.-length file-list))
|
||||
(map #(.item file-list %))
|
||||
(->> (range (.-length ^js file-list))
|
||||
(map #(.item ^js file-list %))
|
||||
(filter #(str/starts-with? (.-type %) "image/"))))))
|
||||
|
||||
(defn create-image-bitmap
|
||||
[image]
|
||||
(js/createImageBitmap image))
|
||||
([image]
|
||||
(js/createImageBitmap image))
|
||||
([image options]
|
||||
(js/createImageBitmap image options)))
|
||||
|
||||
(defn request-fullscreen
|
||||
[el]
|
||||
|
|
Loading…
Add table
Reference in a new issue