@elementor/editor-embedded-documents-manager 4.3.1 → 4.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -168,6 +168,7 @@ async function fetchDocument(id) {
168
168
  const data = await import_editor_v1_adapters.ajax.load({
169
169
  data: { id },
170
170
  action: "get_document_config",
171
+ retry: true,
171
172
  unique_id: `embedded-document-${id}`
172
173
  });
173
174
  return { id, data };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/manager.ts","../src/styles-provider.ts"],"sourcesContent":["export { init } from './init';\nexport { embeddedDocumentsManager, setCurrentDocumentId } from './manager';\nexport type { EmbeddedDocumentLoadCallback } from './manager';\n","import { getV1CurrentDocument } from '@elementor/editor-documents';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport { embeddedDocumentsManager, setCurrentDocumentId } from './manager';\nimport { embeddedDocumentsStylesProvider } from './styles-provider';\n\nexport function init() {\n\tstylesRepository.register( embeddedDocumentsStylesProvider );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', () => {\n\t\tconst { id } = getV1CurrentDocument() ?? {};\n\n\t\tsetCurrentDocumentId( id ?? null );\n\t\tembeddedDocumentsManager.reset();\n\t} );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { ajax } from '@elementor/editor-v1-adapters';\n\nimport { addEmbeddedDocumentStyles, clearEmbeddedDocumentsStyles } from './styles-provider';\n\nexport type EmbeddedDocumentLoadCallback = ( documentId: number, data: Document ) => void;\n\ntype EmbeddedDocumentLoadListener = EmbeddedDocumentLoadCallback;\n\nconst pendingIds = new Set< number >();\nconst loadedDocuments = new Map< number, Document >();\nconst listeners = new Set< EmbeddedDocumentLoadListener >();\nlet currentDocumentId: number | null = null;\n\nexport function setCurrentDocumentId( id: number | null ): void {\n\tcurrentDocumentId = id;\n}\n\n/**\n * Adds post IDs to the manager. Any ID not yet loaded will be fetched;\n * already-loaded posts are skipped without notifying listeners.\n *\n * @param {number[]} ids Post IDs to load.\n */\nfunction addDocuments( ids: number[] ): void {\n\tconst newIds = ids.filter(\n\t\t( id ) => ! isCurrentDocument( id ) && ! pendingIds.has( id ) && ! loadedDocuments.has( id )\n\t);\n\n\tnewIds.forEach( ( id ) => pendingIds.add( id ) );\n\n\tif ( ! newIds.length ) {\n\t\treturn;\n\t}\n\n\tvoid fetchAndNotify( newIds );\n}\n\n/**\n * Registers a related post that was already fetched.\n *\n * @param {number} documentId The document / post ID.\n * @param {Document} data The document data to deliver.\n */\nfunction setDocument( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tconst isNew = ! loadedDocuments.has( documentId );\n\n\tloadedDocuments.set( documentId, data );\n\n\tif ( isNew ) {\n\t\tnotifyListeners( documentId, data );\n\t} else {\n\t\taddEmbeddedDocumentStyles( documentId, data );\n\t}\n}\n\n/**\n * Registers a callback that is invoked whenever a related (non-current) post\n * finishes loading. Already-loaded related posts are delivered to the callback\n * asynchronously on subscribe. Returns an unsubscribe function.\n *\n * @param {EmbeddedDocumentLoadCallback} callback Function called with (documentId, data) on each load.\n */\nfunction onDocumentLoad( callback: EmbeddedDocumentLoadCallback ): () => void {\n\tlisteners.add( callback );\n\n\tvoid Promise.resolve().then( () => {\n\t\tif ( ! listeners.has( callback ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tloadedDocuments.forEach( ( data, documentId ) => {\n\t\t\tif ( ! isCurrentDocument( documentId ) ) {\n\t\t\t\tcallback( documentId, data );\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn () => {\n\t\tlisteners.delete( callback );\n\t};\n}\n\nfunction reset(): void {\n\tpendingIds.clear();\n\tloadedDocuments.clear();\n\tclearEmbeddedDocumentsStyles();\n}\n\nexport const embeddedDocumentsManager = {\n\taddDocuments,\n\tsetDocument,\n\tonDocumentLoad,\n\treset,\n};\n\nfunction isCurrentDocument( documentId: number ): boolean {\n\treturn currentDocumentId !== null && documentId === currentDocumentId;\n}\n\nasync function fetchAndNotify( ids: number[] ): Promise< void > {\n\tconst results = await Promise.all( ids.map( fetchDocument ) );\n\n\tresults.forEach( ( result, index ) => {\n\t\tconst id = ids[ index ];\n\n\t\tif ( ! pendingIds.has( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tpendingIds.delete( id );\n\n\t\tif ( ! result || isCurrentDocument( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { data } = result;\n\t\tloadedDocuments.set( id, data );\n\t\tnotifyListeners( id, data );\n\t} );\n}\n\nasync function fetchDocument( id: number ): Promise< {\n\tid: number;\n\tdata: Document;\n} | null > {\n\ttry {\n\t\tconst data = await ajax.load< { id: number }, Document >( {\n\t\t\tdata: { id },\n\t\t\taction: 'get_document_config',\n\t\t\tunique_id: `embedded-document-${ id }`,\n\t\t} );\n\n\t\treturn { id, data };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction notifyListeners( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tlisteners.forEach( ( cb ) => cb( documentId, data ) );\n\taddEmbeddedDocumentStyles( documentId, data );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\n\nlet styles: StyleDefinition[] = [];\nlet documentStyles = new Map< number, StyleDefinition[] >();\nconst styleListeners = new Set< () => void >();\n\nexport const embeddedDocumentsStylesProvider = createStylesProvider( {\n\tkey: 'embedded-documents-styles',\n\tpriority: 75,\n\tsubscribe: ( cb ) => {\n\t\tstyleListeners.add( cb );\n\n\t\treturn () => {\n\t\t\tstyleListeners.delete( cb );\n\t\t};\n\t},\n\tactions: {\n\t\tall: () => styles,\n\t\tget: ( id ) => styles.find( ( style ) => style.id === id ) ?? null,\n\t},\n} );\n\nfunction notifyStyleListeners() {\n\tstyleListeners.forEach( ( cb ) => cb() );\n}\n\nexport function addEmbeddedDocumentStyles( documentId: number, document: Document ) {\n\tconst extracted = extractStylesFromDocument( document );\n\n\tif ( ! extracted.length ) {\n\t\tif ( ! documentStyles.has( documentId ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdocumentStyles.delete( documentId );\n\t} else {\n\t\tdocumentStyles.set( documentId, extracted );\n\t}\n\n\tstyles = [ ...documentStyles.values() ].flat();\n\tnotifyStyleListeners();\n}\n\nexport function clearEmbeddedDocumentsStyles() {\n\tdocumentStyles = new Map();\n\tstyles = [];\n\tnotifyStyleListeners();\n}\n\nfunction extractStylesFromDocument( document: Document ): StyleDefinition[] {\n\tif ( ! document.elements?.length ) {\n\t\treturn [];\n\t}\n\n\treturn document.elements.flatMap( extractStylesFromElement );\n}\n\nfunction extractStylesFromElement( element: V1ElementData ): StyleDefinition[] {\n\treturn [\n\t\t...Object.values( element.styles ?? {} ),\n\t\t...( element.elements ?? [] ).flatMap( extractStylesFromElement ),\n\t];\n}\n"],"mappings":"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","names":["import_editor_styles_repository","import_editor_v1_adapters"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/manager.ts","../src/styles-provider.ts"],"sourcesContent":["export { init } from './init';\nexport { embeddedDocumentsManager, setCurrentDocumentId } from './manager';\nexport type { EmbeddedDocumentLoadCallback } from './manager';\n","import { getV1CurrentDocument } from '@elementor/editor-documents';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport { embeddedDocumentsManager, setCurrentDocumentId } from './manager';\nimport { embeddedDocumentsStylesProvider } from './styles-provider';\n\nexport function init() {\n\tstylesRepository.register( embeddedDocumentsStylesProvider );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', () => {\n\t\tconst { id } = getV1CurrentDocument() ?? {};\n\n\t\tsetCurrentDocumentId( id ?? null );\n\t\tembeddedDocumentsManager.reset();\n\t} );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { ajax } from '@elementor/editor-v1-adapters';\n\nimport { addEmbeddedDocumentStyles, clearEmbeddedDocumentsStyles } from './styles-provider';\n\nexport type EmbeddedDocumentLoadCallback = ( documentId: number, data: Document ) => void;\n\ntype EmbeddedDocumentLoadListener = EmbeddedDocumentLoadCallback;\n\nconst pendingIds = new Set< number >();\nconst loadedDocuments = new Map< number, Document >();\nconst listeners = new Set< EmbeddedDocumentLoadListener >();\nlet currentDocumentId: number | null = null;\n\nexport function setCurrentDocumentId( id: number | null ): void {\n\tcurrentDocumentId = id;\n}\n\n/**\n * Adds post IDs to the manager. Any ID not yet loaded will be fetched;\n * already-loaded posts are skipped without notifying listeners.\n *\n * @param {number[]} ids Post IDs to load.\n */\nfunction addDocuments( ids: number[] ): void {\n\tconst newIds = ids.filter(\n\t\t( id ) => ! isCurrentDocument( id ) && ! pendingIds.has( id ) && ! loadedDocuments.has( id )\n\t);\n\n\tnewIds.forEach( ( id ) => pendingIds.add( id ) );\n\n\tif ( ! newIds.length ) {\n\t\treturn;\n\t}\n\n\tvoid fetchAndNotify( newIds );\n}\n\n/**\n * Registers a related post that was already fetched.\n *\n * @param {number} documentId The document / post ID.\n * @param {Document} data The document data to deliver.\n */\nfunction setDocument( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tconst isNew = ! loadedDocuments.has( documentId );\n\n\tloadedDocuments.set( documentId, data );\n\n\tif ( isNew ) {\n\t\tnotifyListeners( documentId, data );\n\t} else {\n\t\taddEmbeddedDocumentStyles( documentId, data );\n\t}\n}\n\n/**\n * Registers a callback that is invoked whenever a related (non-current) post\n * finishes loading. Already-loaded related posts are delivered to the callback\n * asynchronously on subscribe. Returns an unsubscribe function.\n *\n * @param {EmbeddedDocumentLoadCallback} callback Function called with (documentId, data) on each load.\n */\nfunction onDocumentLoad( callback: EmbeddedDocumentLoadCallback ): () => void {\n\tlisteners.add( callback );\n\n\tvoid Promise.resolve().then( () => {\n\t\tif ( ! listeners.has( callback ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tloadedDocuments.forEach( ( data, documentId ) => {\n\t\t\tif ( ! isCurrentDocument( documentId ) ) {\n\t\t\t\tcallback( documentId, data );\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn () => {\n\t\tlisteners.delete( callback );\n\t};\n}\n\nfunction reset(): void {\n\tpendingIds.clear();\n\tloadedDocuments.clear();\n\tclearEmbeddedDocumentsStyles();\n}\n\nexport const embeddedDocumentsManager = {\n\taddDocuments,\n\tsetDocument,\n\tonDocumentLoad,\n\treset,\n};\n\nfunction isCurrentDocument( documentId: number ): boolean {\n\treturn currentDocumentId !== null && documentId === currentDocumentId;\n}\n\nasync function fetchAndNotify( ids: number[] ): Promise< void > {\n\tconst results = await Promise.all( ids.map( fetchDocument ) );\n\n\tresults.forEach( ( result, index ) => {\n\t\tconst id = ids[ index ];\n\n\t\tif ( ! pendingIds.has( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tpendingIds.delete( id );\n\n\t\tif ( ! result || isCurrentDocument( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { data } = result;\n\t\tloadedDocuments.set( id, data );\n\t\tnotifyListeners( id, data );\n\t} );\n}\n\nasync function fetchDocument( id: number ): Promise< {\n\tid: number;\n\tdata: Document;\n} | null > {\n\ttry {\n\t\tconst data = await ajax.load< { id: number }, Document >( {\n\t\t\tdata: { id },\n\t\t\taction: 'get_document_config',\n\t\t\tretry: true,\n\t\t\tunique_id: `embedded-document-${ id }`,\n\t\t} );\n\n\t\treturn { id, data };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction notifyListeners( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tlisteners.forEach( ( cb ) => cb( documentId, data ) );\n\taddEmbeddedDocumentStyles( documentId, data );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\n\nlet styles: StyleDefinition[] = [];\nlet documentStyles = new Map< number, StyleDefinition[] >();\nconst styleListeners = new Set< () => void >();\n\nexport const embeddedDocumentsStylesProvider = createStylesProvider( {\n\tkey: 'embedded-documents-styles',\n\tpriority: 75,\n\tsubscribe: ( cb ) => {\n\t\tstyleListeners.add( cb );\n\n\t\treturn () => {\n\t\t\tstyleListeners.delete( cb );\n\t\t};\n\t},\n\tactions: {\n\t\tall: () => styles,\n\t\tget: ( id ) => styles.find( ( style ) => style.id === id ) ?? null,\n\t},\n} );\n\nfunction notifyStyleListeners() {\n\tstyleListeners.forEach( ( cb ) => cb() );\n}\n\nexport function addEmbeddedDocumentStyles( documentId: number, document: Document ) {\n\tconst extracted = extractStylesFromDocument( document );\n\n\tif ( ! extracted.length ) {\n\t\tif ( ! documentStyles.has( documentId ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdocumentStyles.delete( documentId );\n\t} else {\n\t\tdocumentStyles.set( documentId, extracted );\n\t}\n\n\tstyles = [ ...documentStyles.values() ].flat();\n\tnotifyStyleListeners();\n}\n\nexport function clearEmbeddedDocumentsStyles() {\n\tdocumentStyles = new Map();\n\tstyles = [];\n\tnotifyStyleListeners();\n}\n\nfunction extractStylesFromDocument( document: Document ): StyleDefinition[] {\n\tif ( ! document.elements?.length ) {\n\t\treturn [];\n\t}\n\n\treturn document.elements.flatMap( extractStylesFromElement );\n}\n\nfunction extractStylesFromElement( element: V1ElementData ): StyleDefinition[] {\n\treturn [\n\t\t...Object.values( element.styles ?? {} ),\n\t\t...( element.elements ?? [] ).flatMap( extractStylesFromElement ),\n\t];\n}\n"],"mappings":"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","names":["import_editor_styles_repository","import_editor_v1_adapters"]}
package/dist/index.mjs CHANGED
@@ -140,6 +140,7 @@ async function fetchDocument(id) {
140
140
  const data = await ajax.load({
141
141
  data: { id },
142
142
  action: "get_document_config",
143
+ retry: true,
143
144
  unique_id: `embedded-document-${id}`
144
145
  });
145
146
  return { id, data };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init.ts","../src/manager.ts","../src/styles-provider.ts"],"sourcesContent":["import { getV1CurrentDocument } from '@elementor/editor-documents';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport { embeddedDocumentsManager, setCurrentDocumentId } from './manager';\nimport { embeddedDocumentsStylesProvider } from './styles-provider';\n\nexport function init() {\n\tstylesRepository.register( embeddedDocumentsStylesProvider );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', () => {\n\t\tconst { id } = getV1CurrentDocument() ?? {};\n\n\t\tsetCurrentDocumentId( id ?? null );\n\t\tembeddedDocumentsManager.reset();\n\t} );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { ajax } from '@elementor/editor-v1-adapters';\n\nimport { addEmbeddedDocumentStyles, clearEmbeddedDocumentsStyles } from './styles-provider';\n\nexport type EmbeddedDocumentLoadCallback = ( documentId: number, data: Document ) => void;\n\ntype EmbeddedDocumentLoadListener = EmbeddedDocumentLoadCallback;\n\nconst pendingIds = new Set< number >();\nconst loadedDocuments = new Map< number, Document >();\nconst listeners = new Set< EmbeddedDocumentLoadListener >();\nlet currentDocumentId: number | null = null;\n\nexport function setCurrentDocumentId( id: number | null ): void {\n\tcurrentDocumentId = id;\n}\n\n/**\n * Adds post IDs to the manager. Any ID not yet loaded will be fetched;\n * already-loaded posts are skipped without notifying listeners.\n *\n * @param {number[]} ids Post IDs to load.\n */\nfunction addDocuments( ids: number[] ): void {\n\tconst newIds = ids.filter(\n\t\t( id ) => ! isCurrentDocument( id ) && ! pendingIds.has( id ) && ! loadedDocuments.has( id )\n\t);\n\n\tnewIds.forEach( ( id ) => pendingIds.add( id ) );\n\n\tif ( ! newIds.length ) {\n\t\treturn;\n\t}\n\n\tvoid fetchAndNotify( newIds );\n}\n\n/**\n * Registers a related post that was already fetched.\n *\n * @param {number} documentId The document / post ID.\n * @param {Document} data The document data to deliver.\n */\nfunction setDocument( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tconst isNew = ! loadedDocuments.has( documentId );\n\n\tloadedDocuments.set( documentId, data );\n\n\tif ( isNew ) {\n\t\tnotifyListeners( documentId, data );\n\t} else {\n\t\taddEmbeddedDocumentStyles( documentId, data );\n\t}\n}\n\n/**\n * Registers a callback that is invoked whenever a related (non-current) post\n * finishes loading. Already-loaded related posts are delivered to the callback\n * asynchronously on subscribe. Returns an unsubscribe function.\n *\n * @param {EmbeddedDocumentLoadCallback} callback Function called with (documentId, data) on each load.\n */\nfunction onDocumentLoad( callback: EmbeddedDocumentLoadCallback ): () => void {\n\tlisteners.add( callback );\n\n\tvoid Promise.resolve().then( () => {\n\t\tif ( ! listeners.has( callback ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tloadedDocuments.forEach( ( data, documentId ) => {\n\t\t\tif ( ! isCurrentDocument( documentId ) ) {\n\t\t\t\tcallback( documentId, data );\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn () => {\n\t\tlisteners.delete( callback );\n\t};\n}\n\nfunction reset(): void {\n\tpendingIds.clear();\n\tloadedDocuments.clear();\n\tclearEmbeddedDocumentsStyles();\n}\n\nexport const embeddedDocumentsManager = {\n\taddDocuments,\n\tsetDocument,\n\tonDocumentLoad,\n\treset,\n};\n\nfunction isCurrentDocument( documentId: number ): boolean {\n\treturn currentDocumentId !== null && documentId === currentDocumentId;\n}\n\nasync function fetchAndNotify( ids: number[] ): Promise< void > {\n\tconst results = await Promise.all( ids.map( fetchDocument ) );\n\n\tresults.forEach( ( result, index ) => {\n\t\tconst id = ids[ index ];\n\n\t\tif ( ! pendingIds.has( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tpendingIds.delete( id );\n\n\t\tif ( ! result || isCurrentDocument( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { data } = result;\n\t\tloadedDocuments.set( id, data );\n\t\tnotifyListeners( id, data );\n\t} );\n}\n\nasync function fetchDocument( id: number ): Promise< {\n\tid: number;\n\tdata: Document;\n} | null > {\n\ttry {\n\t\tconst data = await ajax.load< { id: number }, Document >( {\n\t\t\tdata: { id },\n\t\t\taction: 'get_document_config',\n\t\t\tunique_id: `embedded-document-${ id }`,\n\t\t} );\n\n\t\treturn { id, data };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction notifyListeners( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tlisteners.forEach( ( cb ) => cb( documentId, data ) );\n\taddEmbeddedDocumentStyles( documentId, data );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\n\nlet styles: StyleDefinition[] = [];\nlet documentStyles = new Map< number, StyleDefinition[] >();\nconst styleListeners = new Set< () => void >();\n\nexport const embeddedDocumentsStylesProvider = createStylesProvider( {\n\tkey: 'embedded-documents-styles',\n\tpriority: 75,\n\tsubscribe: ( cb ) => {\n\t\tstyleListeners.add( cb );\n\n\t\treturn () => {\n\t\t\tstyleListeners.delete( cb );\n\t\t};\n\t},\n\tactions: {\n\t\tall: () => styles,\n\t\tget: ( id ) => styles.find( ( style ) => style.id === id ) ?? null,\n\t},\n} );\n\nfunction notifyStyleListeners() {\n\tstyleListeners.forEach( ( cb ) => cb() );\n}\n\nexport function addEmbeddedDocumentStyles( documentId: number, document: Document ) {\n\tconst extracted = extractStylesFromDocument( document );\n\n\tif ( ! extracted.length ) {\n\t\tif ( ! documentStyles.has( documentId ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdocumentStyles.delete( documentId );\n\t} else {\n\t\tdocumentStyles.set( documentId, extracted );\n\t}\n\n\tstyles = [ ...documentStyles.values() ].flat();\n\tnotifyStyleListeners();\n}\n\nexport function clearEmbeddedDocumentsStyles() {\n\tdocumentStyles = new Map();\n\tstyles = [];\n\tnotifyStyleListeners();\n}\n\nfunction extractStylesFromDocument( document: Document ): StyleDefinition[] {\n\tif ( ! document.elements?.length ) {\n\t\treturn [];\n\t}\n\n\treturn document.elements.flatMap( extractStylesFromElement );\n}\n\nfunction extractStylesFromElement( element: V1ElementData ): StyleDefinition[] {\n\treturn [\n\t\t...Object.values( element.styles ?? {} ),\n\t\t...( element.elements ?? [] ).flatMap( extractStylesFromElement ),\n\t];\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/init.ts","../src/manager.ts","../src/styles-provider.ts"],"sourcesContent":["import { getV1CurrentDocument } from '@elementor/editor-documents';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport { embeddedDocumentsManager, setCurrentDocumentId } from './manager';\nimport { embeddedDocumentsStylesProvider } from './styles-provider';\n\nexport function init() {\n\tstylesRepository.register( embeddedDocumentsStylesProvider );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', () => {\n\t\tconst { id } = getV1CurrentDocument() ?? {};\n\n\t\tsetCurrentDocumentId( id ?? null );\n\t\tembeddedDocumentsManager.reset();\n\t} );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { ajax } from '@elementor/editor-v1-adapters';\n\nimport { addEmbeddedDocumentStyles, clearEmbeddedDocumentsStyles } from './styles-provider';\n\nexport type EmbeddedDocumentLoadCallback = ( documentId: number, data: Document ) => void;\n\ntype EmbeddedDocumentLoadListener = EmbeddedDocumentLoadCallback;\n\nconst pendingIds = new Set< number >();\nconst loadedDocuments = new Map< number, Document >();\nconst listeners = new Set< EmbeddedDocumentLoadListener >();\nlet currentDocumentId: number | null = null;\n\nexport function setCurrentDocumentId( id: number | null ): void {\n\tcurrentDocumentId = id;\n}\n\n/**\n * Adds post IDs to the manager. Any ID not yet loaded will be fetched;\n * already-loaded posts are skipped without notifying listeners.\n *\n * @param {number[]} ids Post IDs to load.\n */\nfunction addDocuments( ids: number[] ): void {\n\tconst newIds = ids.filter(\n\t\t( id ) => ! isCurrentDocument( id ) && ! pendingIds.has( id ) && ! loadedDocuments.has( id )\n\t);\n\n\tnewIds.forEach( ( id ) => pendingIds.add( id ) );\n\n\tif ( ! newIds.length ) {\n\t\treturn;\n\t}\n\n\tvoid fetchAndNotify( newIds );\n}\n\n/**\n * Registers a related post that was already fetched.\n *\n * @param {number} documentId The document / post ID.\n * @param {Document} data The document data to deliver.\n */\nfunction setDocument( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tconst isNew = ! loadedDocuments.has( documentId );\n\n\tloadedDocuments.set( documentId, data );\n\n\tif ( isNew ) {\n\t\tnotifyListeners( documentId, data );\n\t} else {\n\t\taddEmbeddedDocumentStyles( documentId, data );\n\t}\n}\n\n/**\n * Registers a callback that is invoked whenever a related (non-current) post\n * finishes loading. Already-loaded related posts are delivered to the callback\n * asynchronously on subscribe. Returns an unsubscribe function.\n *\n * @param {EmbeddedDocumentLoadCallback} callback Function called with (documentId, data) on each load.\n */\nfunction onDocumentLoad( callback: EmbeddedDocumentLoadCallback ): () => void {\n\tlisteners.add( callback );\n\n\tvoid Promise.resolve().then( () => {\n\t\tif ( ! listeners.has( callback ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tloadedDocuments.forEach( ( data, documentId ) => {\n\t\t\tif ( ! isCurrentDocument( documentId ) ) {\n\t\t\t\tcallback( documentId, data );\n\t\t\t}\n\t\t} );\n\t} );\n\n\treturn () => {\n\t\tlisteners.delete( callback );\n\t};\n}\n\nfunction reset(): void {\n\tpendingIds.clear();\n\tloadedDocuments.clear();\n\tclearEmbeddedDocumentsStyles();\n}\n\nexport const embeddedDocumentsManager = {\n\taddDocuments,\n\tsetDocument,\n\tonDocumentLoad,\n\treset,\n};\n\nfunction isCurrentDocument( documentId: number ): boolean {\n\treturn currentDocumentId !== null && documentId === currentDocumentId;\n}\n\nasync function fetchAndNotify( ids: number[] ): Promise< void > {\n\tconst results = await Promise.all( ids.map( fetchDocument ) );\n\n\tresults.forEach( ( result, index ) => {\n\t\tconst id = ids[ index ];\n\n\t\tif ( ! pendingIds.has( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tpendingIds.delete( id );\n\n\t\tif ( ! result || isCurrentDocument( id ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { data } = result;\n\t\tloadedDocuments.set( id, data );\n\t\tnotifyListeners( id, data );\n\t} );\n}\n\nasync function fetchDocument( id: number ): Promise< {\n\tid: number;\n\tdata: Document;\n} | null > {\n\ttry {\n\t\tconst data = await ajax.load< { id: number }, Document >( {\n\t\t\tdata: { id },\n\t\t\taction: 'get_document_config',\n\t\t\tretry: true,\n\t\t\tunique_id: `embedded-document-${ id }`,\n\t\t} );\n\n\t\treturn { id, data };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction notifyListeners( documentId: number, data: Document ): void {\n\tif ( isCurrentDocument( documentId ) ) {\n\t\treturn;\n\t}\n\n\tlisteners.forEach( ( cb ) => cb( documentId, data ) );\n\taddEmbeddedDocumentStyles( documentId, data );\n}\n","import { type Document } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\n\nlet styles: StyleDefinition[] = [];\nlet documentStyles = new Map< number, StyleDefinition[] >();\nconst styleListeners = new Set< () => void >();\n\nexport const embeddedDocumentsStylesProvider = createStylesProvider( {\n\tkey: 'embedded-documents-styles',\n\tpriority: 75,\n\tsubscribe: ( cb ) => {\n\t\tstyleListeners.add( cb );\n\n\t\treturn () => {\n\t\t\tstyleListeners.delete( cb );\n\t\t};\n\t},\n\tactions: {\n\t\tall: () => styles,\n\t\tget: ( id ) => styles.find( ( style ) => style.id === id ) ?? null,\n\t},\n} );\n\nfunction notifyStyleListeners() {\n\tstyleListeners.forEach( ( cb ) => cb() );\n}\n\nexport function addEmbeddedDocumentStyles( documentId: number, document: Document ) {\n\tconst extracted = extractStylesFromDocument( document );\n\n\tif ( ! extracted.length ) {\n\t\tif ( ! documentStyles.has( documentId ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdocumentStyles.delete( documentId );\n\t} else {\n\t\tdocumentStyles.set( documentId, extracted );\n\t}\n\n\tstyles = [ ...documentStyles.values() ].flat();\n\tnotifyStyleListeners();\n}\n\nexport function clearEmbeddedDocumentsStyles() {\n\tdocumentStyles = new Map();\n\tstyles = [];\n\tnotifyStyleListeners();\n}\n\nfunction extractStylesFromDocument( document: Document ): StyleDefinition[] {\n\tif ( ! document.elements?.length ) {\n\t\treturn [];\n\t}\n\n\treturn document.elements.flatMap( extractStylesFromElement );\n}\n\nfunction extractStylesFromElement( element: V1ElementData ): StyleDefinition[] {\n\treturn [\n\t\t...Object.values( element.styles ?? {} ),\n\t\t...( element.elements ?? [] ).flatMap( extractStylesFromElement ),\n\t];\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-embedded-documents-manager",
3
3
  "description": "Shared related-posts registry for the Elementor editor",
4
- "version": "4.3.1",
4
+ "version": "4.3.3",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -40,11 +40,11 @@
40
40
  "dev": "tsup --config=../../tsup.dev.ts"
41
41
  },
42
42
  "dependencies": {
43
- "@elementor/editor-documents": "4.3.1",
44
- "@elementor/editor-elements": "4.3.1",
45
- "@elementor/editor-v1-adapters": "4.3.1",
46
- "@elementor/editor-styles": "4.3.1",
47
- "@elementor/editor-styles-repository": "4.3.1"
43
+ "@elementor/editor-documents": "4.3.3",
44
+ "@elementor/editor-elements": "4.3.3",
45
+ "@elementor/editor-v1-adapters": "4.3.3",
46
+ "@elementor/editor-styles": "4.3.3",
47
+ "@elementor/editor-styles-repository": "4.3.3"
48
48
  },
49
49
  "devDependencies": {
50
50
  "tsup": "^8.3.5"
package/src/manager.ts CHANGED
@@ -132,6 +132,7 @@ async function fetchDocument( id: number ): Promise< {
132
132
  const data = await ajax.load< { id: number }, Document >( {
133
133
  data: { id },
134
134
  action: 'get_document_config',
135
+ retry: true,
135
136
  unique_id: `embedded-document-${ id }`,
136
137
  } );
137
138