← 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 |