From bb04181abfb86eaf128fae3708341be617868de0 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 29 Jan 2021 11:50:49 +0100 Subject: [PATCH] :bug: Fixed problem with old svgs --- .../app/main/data/workspace/svg_upload.cljs | 35 +--------------- frontend/src/app/main/ui/shapes/svg_raw.cljs | 7 +++- frontend/src/app/util/svg.cljs | 42 +++++++++++++++++++ 3 files changed, 49 insertions(+), 35 deletions(-) create mode 100644 frontend/src/app/util/svg.cljs diff --git a/frontend/src/app/main/data/workspace/svg_upload.cljs b/frontend/src/app/main/data/workspace/svg_upload.cljs index ea6b4a072..96d7845ea 100644 --- a/frontend/src/app/main/data/workspace/svg_upload.cljs +++ b/frontend/src/app/main/data/workspace/svg_upload.cljs @@ -18,7 +18,7 @@ [beicon.core :as rx] [cuerdas.core :as str] [potok.core :as ptk] - + [app.util.svg :as usvg] [app.util.geom.path :as ugp])) (defn- svg-dimensions [data] @@ -30,37 +30,6 @@ height (d/parse-integer height-str)] [width height])) - -(defn clean-attrs - "Transforms attributes to their react equivalent" - [attrs] - (letfn [(transform-key [key] - (-> (name key) - (str/replace ":" "-") - (str/camel) - (keyword))) - - (format-styles [style-str] - (->> (str/split style-str ";") - (map str/trim) - (map #(str/split % ":")) - (group-by first) - (map (fn [[key val]] - (vector - (transform-key key) - (second (first val))))) - (into {}))) - - (map-fn [[key val]] - (cond - (= key :class) [:className val] - (= key :style) [key (format-styles val)] - :else (vector (transform-key key) val)))] - - (->> attrs - (map map-fn) - (into {})))) - (defn tag-name [{:keys [tag]}] (cond (string? tag) tag (keyword? tag) (name tag) @@ -103,7 +72,7 @@ :height height :x x :y y - :content (if (map? data) (update data :attrs clean-attrs) data)} + :content (if (map? data) (update data :attrs usvg/clean-attrs) data)} (gsh/setup-selrect))) (defn parse-path [name frame-id {:keys [attrs] :as data}] diff --git a/frontend/src/app/main/ui/shapes/svg_raw.cljs b/frontend/src/app/main/ui/shapes/svg_raw.cljs index 3eb282a2a..01442e161 100644 --- a/frontend/src/app/main/ui/shapes/svg_raw.cljs +++ b/frontend/src/app/main/ui/shapes/svg_raw.cljs @@ -9,14 +9,15 @@ (ns app.main.ui.shapes.svg-raw (:require + [app.common.data :as cd] [app.common.geom.matrix :as gmt] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] + [app.common.uuid :as uuid] [app.main.ui.shapes.attrs :as usa] [app.util.data :as ud] - [app.common.data :as cd] - [app.common.uuid :as uuid] [app.util.object :as obj] + [app.util.svg :as usvg] [cuerdas.core :as str] [rumext.alpha :as mf])) @@ -49,6 +50,8 @@ (defn set-styles [attrs shape] (let [custom-attrs (usa/extract-style-attrs shape) + attrs (cond-> attrs + (string? (:style attrs)) usvg/clean-attrs) style (obj/merge! (clj->js (:style attrs {})) (obj/get custom-attrs "style"))] (-> (clj->js attrs) diff --git a/frontend/src/app/util/svg.cljs b/frontend/src/app/util/svg.cljs new file mode 100644 index 000000000..eedb6cb44 --- /dev/null +++ b/frontend/src/app/util/svg.cljs @@ -0,0 +1,42 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; This Source Code Form is "Incompatible With Secondary Licenses", as +;; defined by the Mozilla Public License, v. 2.0. +;; +;; Copyright (c) 2020-2021 UXBOX Labs SL + +(ns app.util.svg + (:require + [cuerdas.core :as str])) + +(defn clean-attrs + "Transforms attributes to their react equivalent" + [attrs] + (letfn [(transform-key [key] + (-> (name key) + (str/replace ":" "-") + (str/camel) + (keyword))) + + (format-styles [style-str] + (->> (str/split style-str ";") + (map str/trim) + (map #(str/split % ":")) + (group-by first) + (map (fn [[key val]] + (vector + (transform-key key) + (second (first val))))) + (into {}))) + + (map-fn [[key val]] + (cond + (= key :class) [:className val] + (and (= key :style) (string? val)) [key (format-styles val)] + :else (vector (transform-key key) val)))] + + (->> attrs + (map map-fn) + (into {}))))