@elementor/editor-embedded-documents-manager 4.3.2 → 4.3.4
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 +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
- package/src/manager.ts +1 -0
package/dist/index.js
CHANGED
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
package/dist/index.mjs.map
CHANGED
|
@@ -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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
|
|
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.
|
|
4
|
+
"version": "4.3.4",
|
|
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.
|
|
44
|
-
"@elementor/editor-elements": "4.3.
|
|
45
|
-
"@elementor/editor-v1-adapters": "4.3.
|
|
46
|
-
"@elementor/editor-styles": "4.3.
|
|
47
|
-
"@elementor/editor-styles-repository": "4.3.
|
|
43
|
+
"@elementor/editor-documents": "4.3.4",
|
|
44
|
+
"@elementor/editor-elements": "4.3.4",
|
|
45
|
+
"@elementor/editor-v1-adapters": "4.3.4",
|
|
46
|
+
"@elementor/editor-styles": "4.3.4",
|
|
47
|
+
"@elementor/editor-styles-repository": "4.3.4"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"tsup": "^8.3.5"
|
package/src/manager.ts
CHANGED