PluginProbe
Elementor Website Builder – more than just a page builder / trunk
Elementor Website Builder – more than just a page builder vtrunk
4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 All 456 releases
← All changes | assets/js/packages/editor-templates/editor-templates.js +164 -2 4.1.0-dev3 → trunk View file →
@@ -1,3 +1,165 @@
1 -/*! For license information please see editor-templates.js.LICENSE.txt */
2 -!function(){"use strict";var e={"./packages/packages/core/editor-templates/src/init.ts":function(e,t,r){r.r(t),r.d(t,{init:function(){return init}});var a=r("@elementor/editor"),s=r("@elementor/editor-styles-repository"),o=r("@elementor/editor-v1-adapters"),n=r("@elementor/store"),l=r("./packages/packages/core/editor-templates/src/load-templates.ts"),c=r("./packages/packages/core/editor-templates/src/render-template-styles.tsx"),i=r("./packages/packages/core/editor-templates/src/store.ts"),p=r("./packages/packages/core/editor-templates/src/templates-styles-provider.ts"),d=r("./packages/packages/core/editor-templates/src/utils.ts");function init(){(0,d.isHandlingTemplateStyles)()&&((0,n.__registerSlice)(i.slice),s.stylesRepository.register(p.templatesStylesProvider),(0,o.registerDataHook)("after","editor/documents/attach-preview",async()=>{(0,l.unloadTemplates)(),(0,p.clearTemplatesStyles)(),await(0,l.loadTemplates)()}),(0,a.injectIntoLogic)({id:"templates-styles",component:c.RenderTemplateStyles}))}},"./packages/packages/core/editor-templates/src/load-templates.ts":function(e,t,r){r.r(t),r.d(t,{loadTemplates:function(){return loadTemplates},unloadTemplates:function(){return unloadTemplates}});var a=r("@elementor/editor-documents"),s=r("@elementor/editor-v1-adapters"),o=r("@elementor/store"),n=r("./packages/packages/core/editor-templates/src/store.ts");const l='data-elementor-post-type="elementor_library"',c="data-elementor-id";async function loadTemplates(){const e=(0,s.getCanvasIframeDocument)();if(!e)return;const t=(0,a.getV1CurrentDocument)()?.id,r=function getTemplateIds(e,t){const r=[...e.body.querySelectorAll(`[${l}]`)],a=r.map(e=>Number(e.getAttribute(c))).filter(e=>!isNaN(e)&&e!==t);return[...new Set(a)]}(e,t);if(!r.length)return;const i=await async function fetchDocuments(e){return(await Promise.all(e.map(async e=>{try{return await s.ajax.load({data:{id:e},action:"get_document_config",unique_id:`template-${e}`})}catch{return null}}))).filter(e=>null!==e)}(r);(0,o.__dispatch)(n.slice.actions.setTemplates(i))}function unloadTemplates(){(0,o.__dispatch)(n.slice.actions.clearTemplates())}},"./packages/packages/core/editor-templates/src/render-template-styles.tsx":function(e,t,r){r.r(t),r.d(t,{RenderTemplateStyles:function(){return RenderTemplateStyles}});var a=r("react"),s=r("./packages/packages/core/editor-templates/src/templates-styles-provider.ts"),o=r("./packages/packages/core/editor-templates/src/use-loaded-templates.ts");const RenderTemplateStyles=()=>{const e=(0,o.useLoadedTemplates)();return(0,a.useEffect)(()=>{const t=e.flatMap(extractStylesFromDocument);(0,s.addTemplateStyles)(t)},[e]),null};function extractStylesFromDocument(e){return e.length?e.flatMap(extractStylesFromElement):[]}function extractStylesFromElement(e){return[...Object.values(e.styles??{}),...(e.elements??[]).flatMap(extractStylesFromElement)]}},"./packages/packages/core/editor-templates/src/store.ts":function(e,t,r){r.r(t),r.d(t,{selectTemplates:function(){return o},slice:function(){return s}});var a=r("@elementor/store");const s=(0,a.__createSlice)({name:"templates",initialState:{entities:{}},reducers:{setTemplates(e,t){t.payload.forEach(t=>{e.entities[t.id]=t.elements??[]})},clearTemplates(e){e.entities={}}}}),o=(0,a.__createSelector)([e=>e.templates.entities],e=>Object.values(e))},"./packages/packages/core/editor-templates/src/templates-styles-provider.ts":function(e,t,r){r.r(t),r.d(t,{addTemplateStyles:function(){return addTemplateStyles},clearTemplatesStyles:function(){return clearTemplatesStyles},templatesStylesProvider:function(){return n}});var a=r("@elementor/editor-styles-repository");let s=[];const o=new Set;function addTemplateStyles(e){s=[...s,...e],o.forEach(e=>e())}function clearTemplatesStyles(){s=[],o.forEach(e=>e())}const n=(0,a.createStylesProvider)({key:"templates-styles",priority:50,subscribe:e=>(o.add(e),()=>{o.delete(e)}),actions:{all:()=>s,get:e=>s.find(t=>t.id===e)??null}})},"./packages/packages/core/editor-templates/src/use-loaded-templates.ts":function(e,t,r){r.r(t),r.d(t,{useLoadedTemplates:function(){return useLoadedTemplates}});var a=r("@elementor/store"),s=r("./packages/packages/core/editor-templates/src/store.ts");function useLoadedTemplates(){return(0,a.__useSelector)(s.selectTemplates)}},"./packages/packages/core/editor-templates/src/utils.ts":function(e,t,r){r.r(t),r.d(t,{isHandlingTemplateStyles:function(){return isHandlingTemplateStyles}});var a=r("@elementor/utils");const isHandlingTemplateStyles=()=>(0,a.isProActive)()&&!(0,a.isProAtLeast)("4.1")},"@elementor/editor":function(e){e.exports=window.elementorV2.editor},"@elementor/editor-documents":function(e){e.exports=window.elementorV2.editorDocuments},"@elementor/editor-styles-repository":function(e){e.exports=window.elementorV2.editorStylesRepository},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/store":function(e){e.exports=window.elementorV2.store},"@elementor/utils":function(e){e.exports=window.elementorV2.utils},react:function(e){e.exports=window.React}},t={};function __webpack_require__(r){var a=t[r];if(void 0!==a)return a.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,__webpack_require__),s.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};!function(){__webpack_require__.r(r),__webpack_require__.d(r,{init:function(){return e.init},isHandlingTemplateStyles:function(){return a.isHandlingTemplateStyles},useLoadedTemplates:function(){return t.useLoadedTemplates}});var e=__webpack_require__("./packages/packages/core/editor-templates/src/init.ts"),t=__webpack_require__("./packages/packages/core/editor-templates/src/use-loaded-templates.ts"),a=__webpack_require__("./packages/packages/core/editor-templates/src/utils.ts")}(),(window.elementorV2=window.elementorV2||{}).editorTemplates=r}(),window.elementorV2.editorTemplates?.init?.();
1 +(function(_elementor_editor, _elementor_editor_styles_repository, _elementor_editor_v1_adapters, _elementor_store, _elementor_editor_documents, react, _elementor_utils) {
2 +
3 +//#region \0rolldown/runtime.js
4 + var __defProp = Object.defineProperty;
5 + var __name = (target, value) => __defProp(target, "name", {
6 + value,
7 + configurable: true
8 + });
9 + var __exportAll = (all, no_symbols) => {
10 + let target = {};
11 + for (var name in all) {
12 + __defProp(target, name, {
13 + get: all[name],
14 + enumerable: true
15 + });
16 + }
17 + if (!no_symbols) {
18 + __defProp(target, Symbol.toStringTag, { value: "Module" });
19 + }
20 + return target;
21 + };
22 +
23 +//#endregion
24 +
25 +//#region packages/packages/core/editor-templates/src/store.ts
26 + var initialState = { entities: {} };
27 + var slice = (0, _elementor_store.__createSlice)({
28 + name: "templates",
29 + initialState,
30 + reducers: {
31 + setTemplates(state, action) {
32 + action.payload.forEach((doc) => {
33 + state.entities[doc.id] = doc.elements ?? [];
34 + });
35 + },
36 + clearTemplates(state) {
37 + state.entities = {};
38 + }
39 + }
40 + });
41 + var selectEntities = (state) => state.templates.entities;
42 + var selectTemplates = (0, _elementor_store.__createSelector)([selectEntities], (entities) => Object.values(entities));
43 +
44 +//#endregion
45 +//#region packages/packages/core/editor-templates/src/load-templates.ts
46 + var TEMPLATE_ATTRIBUTE = "data-elementor-post-type=\"elementor_library\"";
47 + var DOCUMENT_WRAPPER_ATTR = "data-elementor-id";
48 + async function loadTemplates() {
49 + const iframeDocument = (0, _elementor_editor_v1_adapters.getCanvasIframeDocument)();
50 + if (!iframeDocument) return;
51 + const currentDocumentId = (0, _elementor_editor_documents.getV1CurrentDocument)()?.id;
52 + const templateIds = getTemplateIds(iframeDocument, currentDocumentId);
53 + if (!templateIds.length) return;
54 + const documents = await fetchDocuments(templateIds);
55 + (0, _elementor_store.__dispatch)(slice.actions.setTemplates(documents));
56 + }
57 + function unloadTemplates() {
58 + (0, _elementor_store.__dispatch)(slice.actions.clearTemplates());
59 + }
60 + function getTemplateIds(iframeDocument, currentDocumentId) {
61 + const ids = [...iframeDocument.body.querySelectorAll(`[${TEMPLATE_ATTRIBUTE}]`)].map((el) => Number(el.getAttribute(DOCUMENT_WRAPPER_ATTR))).filter((id) => !isNaN(id) && id !== currentDocumentId);
62 + return [...new Set(ids)];
63 + }
64 + async function fetchDocuments(ids) {
65 + return (await Promise.all(ids.map(async (id) => {
66 + try {
67 + return await _elementor_editor_v1_adapters.ajax.load({
68 + data: { id },
69 + action: "get_document_config",
70 + unique_id: `template-${id}`
71 + });
72 + } catch {
73 + return null;
74 + }
75 + }))).filter((doc) => doc !== null);
76 + }
77 +
78 +//#endregion
79 +//#region packages/packages/core/editor-templates/src/templates-styles-provider.ts
80 + var styles = [];
81 + var listeners = /* @__PURE__ */ new Set();
82 + function addTemplateStyles(newStyles) {
83 + styles = [...styles, ...newStyles];
84 + listeners.forEach((cb) => cb());
85 + }
86 + function clearTemplatesStyles() {
87 + styles = [];
88 + listeners.forEach((cb) => cb());
89 + }
90 + var templatesStylesProvider = (0, _elementor_editor_styles_repository.createStylesProvider)({
91 + key: "templates-styles",
92 + priority: 50,
93 + subscribe: (cb) => {
94 + listeners.add(cb);
95 + return () => {
96 + listeners.delete(cb);
97 + };
98 + },
99 + actions: {
100 + all: () => styles,
101 + get: (id) => styles.find((style) => style.id === id) ?? null
102 + }
103 + });
104 +
105 +//#endregion
106 +//#region packages/packages/core/editor-templates/src/use-loaded-templates.ts
107 + function useLoadedTemplates() {
108 + return (0, _elementor_store.__useSelector)(selectTemplates);
109 + }
110 +
111 +//#endregion
112 +//#region packages/packages/core/editor-templates/src/render-template-styles.tsx
113 + var RenderTemplateStyles = () => {
114 + const templates = useLoadedTemplates();
115 + (0, react.useEffect)(() => {
116 + addTemplateStyles(templates.flatMap(extractStylesFromDocument));
117 + }, [templates]);
118 + return null;
119 + };
120 + function extractStylesFromDocument(elements) {
121 + if (!elements.length) return [];
122 + return elements.flatMap(extractStylesFromElement);
123 + }
124 + function extractStylesFromElement(element) {
125 + return [...Object.values(element.styles ?? {}), ...(element.elements ?? []).flatMap(extractStylesFromElement)];
126 + }
127 +
128 +//#endregion
129 +//#region packages/packages/core/editor-templates/src/utils.ts
130 + var MIN_PRO_VERSION_FOR_SELF_HANDLED_STYLES = "4.1";
131 + var isHandlingTemplateStyles = () => (0, _elementor_utils.isProActive)() && !(0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_SELF_HANDLED_STYLES);
132 +
133 +//#endregion
134 +//#region packages/packages/core/editor-templates/src/init.ts
135 + function init() {
136 + if (!isHandlingTemplateStyles()) return;
137 + (0, _elementor_store.__registerSlice)(slice);
138 + _elementor_editor_styles_repository.stylesRepository.register(templatesStylesProvider);
139 + (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", async () => {
140 + unloadTemplates();
141 + clearTemplatesStyles();
142 + await loadTemplates();
143 + });
144 + (0, _elementor_editor.injectIntoLogic)({
145 + id: "templates-styles",
146 + component: RenderTemplateStyles
147 + });
148 + }
149 +
150 +//#endregion
151 +//#region packages/packages/core/editor-templates/src/index.ts
152 + var src_exports = /* @__PURE__ */ __exportAll({
153 + init: () => init,
154 + isHandlingTemplateStyles: () => isHandlingTemplateStyles,
155 + useLoadedTemplates: () => useLoadedTemplates
156 + });
157 +
158 +//#endregion
159 +//#region \0elementor-package-library-entry
160 + (window.elementorV2 = window.elementorV2 || {}).editorTemplates = src_exports;
161 +
162 +//#endregion
163 +})(elementorV2.editor, elementorV2.editorStylesRepository, elementorV2.editorV1Adapters, elementorV2.store, elementorV2.editorDocuments, React, elementorV2.utils);
164 +window.elementorV2.editorTemplates?.init?.();
3 165 //# sourceMappingURL=editor-templates.js.map