🐛 Fix problem with plugins content attribute (#7835)

This commit is contained in:
Alonso Torres 2025-11-28 13:41:27 +01:00 committed by GitHub
parent a4e6aa0588
commit 2c3becb408
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 46 additions and 7 deletions

View File

@ -87,6 +87,7 @@ example. It's still usable as before, we just removed the example.
- Fix problem with plugins generating code for pages different than current one [Taiga #12312](https://tree.taiga.io/project/penpot/issue/12312) - Fix problem with plugins generating code for pages different than current one [Taiga #12312](https://tree.taiga.io/project/penpot/issue/12312)
- Fix input confirmation behavior is not uniform [Taiga #12294](https://tree.taiga.io/project/penpot/issue/12294) - Fix input confirmation behavior is not uniform [Taiga #12294](https://tree.taiga.io/project/penpot/issue/12294)
- Fix copy/pasting application/transit+json [Taiga #12721](https://tree.taiga.io/project/penpot/issue/12721) - Fix copy/pasting application/transit+json [Taiga #12721](https://tree.taiga.io/project/penpot/issue/12721)
- Fix problem with plugins content attribute [Plugins #209](https://github.com/penpot/penpot-plugins/issues/209)
## 2.11.1 ## 2.11.1

View File

@ -267,3 +267,4 @@
(-> (stp/convert-to-path shape objects) (-> (stp/convert-to-path shape objects)
(update :content impl/path-data)))) (update :content impl/path-data))))
(dm/export impl/decode-segments)

View File

@ -565,6 +565,9 @@
(def check-content (def check-content
(sm/check-fn schema:content)) (sm/check-fn schema:content))
(def decode-segments
(sm/lazy-decoder schema:segments sm/json-transformer))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; CONSTRUCTORS & PREDICATES ;; CONSTRUCTORS & PREDICATES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -7,6 +7,8 @@
(ns app.plugins.parser (ns app.plugins.parser
(:require (:require
[app.common.data :as d] [app.common.data :as d]
[app.common.json :as json]
[app.common.types.path :as path]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.util.object :as obj] [app.util.object :as obj]
[cuerdas.core :as str])) [cuerdas.core :as str]))
@ -514,3 +516,8 @@
(case axis (case axis
"horizontal" :y "horizontal" :y
"vertical" :x)) "vertical" :x))
(defn parse-commands
[commands]
(-> (json/->clj commands)
(path/decode-segments)))

View File

@ -1034,8 +1034,8 @@
(fn [] (fn []
(let [shape (u/locate-shape file-id page-id id)] (let [shape (u/locate-shape file-id page-id id)]
(cond (cond
(not (cfh/path-shape? shape)) (and (not (cfh/path-shape? shape)) (not (cfh/bool-shape? shape)))
(u/display-not-valid :makeMask (:type shape)) (u/display-not-valid :toD (:type shape))
:else :else
(.toString (:content shape))))) (.toString (:content shape)))))
@ -1488,13 +1488,37 @@
(cond-> (or (cfh/path-shape? data) (cfh/bool-shape? data)) (cond-> (or (cfh/path-shape? data) (cfh/bool-shape? data))
(crc/add-properties! (crc/add-properties!
{:name "content" {:name "commands"
:get #(-> % u/proxy->shape :content format/format-path-content)
:set
(fn [_ value]
(let [segments (parser/parse-commands value)]
(cond
(not (r/check-permission plugin-id "content:write"))
(u/display-not-valid :content "Plugin doesn't have 'content:write' permission")
(not (sm/validate path/schema:segments segments))
(u/display-not-valid :content segments)
:else
(let [selrect (path/calc-selrect segments)
content (path/from-plain segments)
points (grc/rect->points selrect)]
(st/emit! (dwsh/update-shapes
[id]
(fn [shape]
(-> shape
(assoc :content content)
(assoc :selrect selrect)
(assoc :points points)))))))))}
{:name "d"
:get #(-> % u/proxy->shape :content str) :get #(-> % u/proxy->shape :content str)
:set :set
(fn [_ value] (fn [_ value]
(let [segments (if (string? value) (let [segments
(svg.path/parse value) (if (string? value)
value)] (svg.path/parse value)
value)]
(cond (cond
(not (r/check-permission plugin-id "content:write")) (not (r/check-permission plugin-id "content:write"))
(u/display-not-valid :content "Plugin doesn't have 'content:write' permission") (u/display-not-valid :content "Plugin doesn't have 'content:write' permission")
@ -1514,4 +1538,7 @@
(-> shape (-> shape
(assoc :content content) (assoc :content content)
(assoc :selrect selrect) (assoc :selrect selrect)
(assoc :points points)))))))))})))))) (assoc :points points)))))))))}
{:name "content"
:get #(.-d %)
:set (fn [self value] (set! (.-d self) value))}))))))