penpot/frontend/src/app/plugins/history.cljs
2026-04-20 19:37:02 +02:00

47 lines
1.3 KiB
Clojure

;; 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/.
;;
;; Copyright (c) KALEIDOS INC
(ns app.plugins.history
(:require
[app.main.data.workspace.undo :as dwu]
[app.main.store :as st]
[app.plugins.register :as r]
[app.plugins.utils :as u]
[app.util.object :as obj]))
(defn history-subcontext? [p]
(obj/type-of? p "HistorySubcontext"))
(defn history-subcontext
[plugin-id]
(obj/reify {:name "HistorySubcontext"}
:$plugin {:enumerable false :get (fn [] plugin-id)}
:undoBlockBegin
(fn []
(cond
(not (r/check-permission plugin-id "content:write"))
(u/not-valid plugin-id :resize "Plugin doesn't have 'content:write' permission")
:else
(let [id (js/Symbol)]
(st/emit! (dwu/start-undo-transaction id))
id)))
:undoBlockFinish
(fn [block-id]
(cond
(not (r/check-permission plugin-id "content:write"))
(u/not-valid plugin-id :resize "Plugin doesn't have 'content:write' permission")
(not block-id)
(u/not-valid plugin-id :undoBlockFinish block-id)
:else
(st/emit! (dwu/commit-undo-transaction block-id))))))