PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.2
Elementor Website Builder – more than just a page builder v4.3.2
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 4.1.0-dev2 All 455 releases
elementor / assets / js / packages / editor-templates / editor-templates.js

editor-templates.js in Elementor Website Builder – more than just a page builder 4.3.2, at assets/js/packages/editor-templates/editor-templates.js

165 lines 5.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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?.();
165 //# sourceMappingURL=editor-templates.js.map