@elementor/editor-canvas 4.2.0-923 → 4.2.0-924
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 +14 -7
- package/dist/index.mjs +15 -8
- package/package.json +18 -18
- package/src/legacy/__tests__/init-legacy-views.test.ts +66 -0
- package/src/legacy/init-legacy-views.ts +20 -10
package/dist/index.js
CHANGED
|
@@ -3734,22 +3734,29 @@ function registerModelExtensions(type, extensions) {
|
|
|
3734
3734
|
}
|
|
3735
3735
|
function registerElementType(type, elementTypeGenerator) {
|
|
3736
3736
|
elementsLegacyTypes[type] = elementTypeGenerator;
|
|
3737
|
+
if ((0, import_editor_v1_adapters14.__privateIsReady)()) {
|
|
3738
|
+
registerElementInLegacyManager(type, createDomRenderer());
|
|
3739
|
+
}
|
|
3737
3740
|
}
|
|
3738
3741
|
function initLegacyViews() {
|
|
3739
3742
|
(0, import_editor_v1_adapters14.__privateListenTo)((0, import_editor_v1_adapters14.v1ReadyEvent)(), () => {
|
|
3740
3743
|
const widgetsCache = (0, import_editor_elements10.getWidgetsCache)() ?? {};
|
|
3741
|
-
const legacyWindow = window;
|
|
3742
3744
|
const renderer = createDomRenderer();
|
|
3743
3745
|
registerProPromotionTypes(widgetsCache);
|
|
3744
|
-
Object.
|
|
3745
|
-
|
|
3746
|
-
return;
|
|
3747
|
-
}
|
|
3748
|
-
const ResolvedElementType = resolveElementType(type, renderer, element);
|
|
3749
|
-
tryRegisterElement(legacyWindow, type, element, ResolvedElementType);
|
|
3746
|
+
Object.keys(widgetsCache).forEach((type) => {
|
|
3747
|
+
registerElementInLegacyManager(type, renderer);
|
|
3750
3748
|
});
|
|
3751
3749
|
});
|
|
3752
3750
|
}
|
|
3751
|
+
function registerElementInLegacyManager(type, renderer) {
|
|
3752
|
+
const element = ((0, import_editor_elements10.getWidgetsCache)() ?? {})[type];
|
|
3753
|
+
if (!element?.atomic) {
|
|
3754
|
+
return;
|
|
3755
|
+
}
|
|
3756
|
+
const legacyWindow = window;
|
|
3757
|
+
const ResolvedElementType = resolveElementType(type, renderer, element);
|
|
3758
|
+
tryRegisterElement(legacyWindow, type, element, ResolvedElementType);
|
|
3759
|
+
}
|
|
3753
3760
|
function registerProPromotionTypes(widgetsCache) {
|
|
3754
3761
|
Object.entries(widgetsCache).forEach(([type, element]) => {
|
|
3755
3762
|
if (element.meta?.is_pro_promotion) {
|
package/dist/index.mjs
CHANGED
|
@@ -2397,7 +2397,7 @@ function initStyleTransformers() {
|
|
|
2397
2397
|
|
|
2398
2398
|
// src/legacy/init-legacy-views.ts
|
|
2399
2399
|
import { getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
|
|
2400
|
-
import { __privateListenTo, v1ReadyEvent as v1ReadyEvent2 } from "@elementor/editor-v1-adapters";
|
|
2400
|
+
import { __privateIsReady as isV1Ready, __privateListenTo, v1ReadyEvent as v1ReadyEvent2 } from "@elementor/editor-v1-adapters";
|
|
2401
2401
|
|
|
2402
2402
|
// src/renderers/create-dom-renderer.ts
|
|
2403
2403
|
import { createArrayLoader, createEnvironment } from "@elementor/twing";
|
|
@@ -3698,22 +3698,29 @@ function registerModelExtensions(type, extensions) {
|
|
|
3698
3698
|
}
|
|
3699
3699
|
function registerElementType(type, elementTypeGenerator) {
|
|
3700
3700
|
elementsLegacyTypes[type] = elementTypeGenerator;
|
|
3701
|
+
if (isV1Ready()) {
|
|
3702
|
+
registerElementInLegacyManager(type, createDomRenderer());
|
|
3703
|
+
}
|
|
3701
3704
|
}
|
|
3702
3705
|
function initLegacyViews() {
|
|
3703
3706
|
__privateListenTo(v1ReadyEvent2(), () => {
|
|
3704
3707
|
const widgetsCache = getWidgetsCache3() ?? {};
|
|
3705
|
-
const legacyWindow = window;
|
|
3706
3708
|
const renderer = createDomRenderer();
|
|
3707
3709
|
registerProPromotionTypes(widgetsCache);
|
|
3708
|
-
Object.
|
|
3709
|
-
|
|
3710
|
-
return;
|
|
3711
|
-
}
|
|
3712
|
-
const ResolvedElementType = resolveElementType(type, renderer, element);
|
|
3713
|
-
tryRegisterElement(legacyWindow, type, element, ResolvedElementType);
|
|
3710
|
+
Object.keys(widgetsCache).forEach((type) => {
|
|
3711
|
+
registerElementInLegacyManager(type, renderer);
|
|
3714
3712
|
});
|
|
3715
3713
|
});
|
|
3716
3714
|
}
|
|
3715
|
+
function registerElementInLegacyManager(type, renderer) {
|
|
3716
|
+
const element = (getWidgetsCache3() ?? {})[type];
|
|
3717
|
+
if (!element?.atomic) {
|
|
3718
|
+
return;
|
|
3719
|
+
}
|
|
3720
|
+
const legacyWindow = window;
|
|
3721
|
+
const ResolvedElementType = resolveElementType(type, renderer, element);
|
|
3722
|
+
tryRegisterElement(legacyWindow, type, element, ResolvedElementType);
|
|
3723
|
+
}
|
|
3717
3724
|
function registerProPromotionTypes(widgetsCache) {
|
|
3718
3725
|
Object.entries(widgetsCache).forEach(([type, element]) => {
|
|
3719
3726
|
if (element.meta?.is_pro_promotion) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-canvas",
|
|
3
3
|
"description": "Elementor Editor Canvas",
|
|
4
|
-
"version": "4.2.0-
|
|
4
|
+
"version": "4.2.0-924",
|
|
5
5
|
"private": false,
|
|
6
6
|
"author": "Elementor Team",
|
|
7
7
|
"homepage": "https://elementor.com/",
|
|
@@ -37,25 +37,25 @@
|
|
|
37
37
|
"react-dom": "^18.3.1"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@elementor/editor": "4.2.0-
|
|
40
|
+
"@elementor/editor": "4.2.0-924",
|
|
41
41
|
"dompurify": "^3.2.6",
|
|
42
|
-
"@elementor/editor-controls": "4.2.0-
|
|
43
|
-
"@elementor/editor-documents": "4.2.0-
|
|
44
|
-
"@elementor/editor-elements": "4.2.0-
|
|
45
|
-
"@elementor/editor-interactions": "4.2.0-
|
|
46
|
-
"@elementor/editor-mcp": "4.2.0-
|
|
47
|
-
"@elementor/editor-notifications": "4.2.0-
|
|
48
|
-
"@elementor/editor-props": "4.2.0-
|
|
49
|
-
"@elementor/editor-responsive": "4.2.0-
|
|
50
|
-
"@elementor/editor-styles": "4.2.0-
|
|
51
|
-
"@elementor/editor-styles-repository": "4.2.0-
|
|
52
|
-
"@elementor/editor-ui": "4.2.0-
|
|
53
|
-
"@elementor/editor-v1-adapters": "4.2.0-
|
|
54
|
-
"@elementor/schema": "4.2.0-
|
|
55
|
-
"@elementor/twing": "4.2.0-
|
|
42
|
+
"@elementor/editor-controls": "4.2.0-924",
|
|
43
|
+
"@elementor/editor-documents": "4.2.0-924",
|
|
44
|
+
"@elementor/editor-elements": "4.2.0-924",
|
|
45
|
+
"@elementor/editor-interactions": "4.2.0-924",
|
|
46
|
+
"@elementor/editor-mcp": "4.2.0-924",
|
|
47
|
+
"@elementor/editor-notifications": "4.2.0-924",
|
|
48
|
+
"@elementor/editor-props": "4.2.0-924",
|
|
49
|
+
"@elementor/editor-responsive": "4.2.0-924",
|
|
50
|
+
"@elementor/editor-styles": "4.2.0-924",
|
|
51
|
+
"@elementor/editor-styles-repository": "4.2.0-924",
|
|
52
|
+
"@elementor/editor-ui": "4.2.0-924",
|
|
53
|
+
"@elementor/editor-v1-adapters": "4.2.0-924",
|
|
54
|
+
"@elementor/schema": "4.2.0-924",
|
|
55
|
+
"@elementor/twing": "4.2.0-924",
|
|
56
56
|
"@elementor/ui": "1.37.5",
|
|
57
|
-
"@elementor/utils": "4.2.0-
|
|
58
|
-
"@elementor/wp-media": "4.2.0-
|
|
57
|
+
"@elementor/utils": "4.2.0-924",
|
|
58
|
+
"@elementor/wp-media": "4.2.0-924",
|
|
59
59
|
"@floating-ui/react": "^0.27.5",
|
|
60
60
|
"@wordpress/i18n": "^5.13.0"
|
|
61
61
|
},
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { mockLegacyElementor } from 'test-utils';
|
|
2
|
+
import { getWidgetsCache } from '@elementor/editor-elements';
|
|
3
|
+
|
|
4
|
+
import { createTemplatedElementType } from '../create-templated-element-type';
|
|
5
|
+
import { initLegacyViews, registerElementType } from '../init-legacy-views';
|
|
6
|
+
import type { LegacyWindow } from '../types';
|
|
7
|
+
|
|
8
|
+
jest.mock( '@elementor/editor-elements', () => ( {
|
|
9
|
+
getWidgetsCache: jest.fn(),
|
|
10
|
+
} ) );
|
|
11
|
+
|
|
12
|
+
jest.mock( '../../renderers/create-dom-renderer', () => ( {
|
|
13
|
+
createDomRenderer: jest.fn( () => ( {
|
|
14
|
+
register: jest.fn(),
|
|
15
|
+
render: jest.fn(),
|
|
16
|
+
} ) ),
|
|
17
|
+
} ) );
|
|
18
|
+
|
|
19
|
+
const MOCK_TYPE = 'test-loop-type';
|
|
20
|
+
|
|
21
|
+
const createMockAtomicWidget = () => ( {
|
|
22
|
+
atomic: true,
|
|
23
|
+
controls: {},
|
|
24
|
+
title: MOCK_TYPE,
|
|
25
|
+
twig_templates: {},
|
|
26
|
+
twig_main_template: 'main',
|
|
27
|
+
atomic_props_schema: {},
|
|
28
|
+
base_styles_dictionary: {},
|
|
29
|
+
} );
|
|
30
|
+
|
|
31
|
+
const createMockElementsManager = () => ( {
|
|
32
|
+
getElementTypeClass: jest.fn().mockReturnValue( null ),
|
|
33
|
+
registerElementType: jest.fn(),
|
|
34
|
+
elementTypes: {} as Record< string, unknown >,
|
|
35
|
+
} );
|
|
36
|
+
|
|
37
|
+
const attachMockElementsManager = ( elementsManager: ReturnType< typeof createMockElementsManager > ) => {
|
|
38
|
+
const legacyWindow = window as unknown as LegacyWindow;
|
|
39
|
+
legacyWindow.elementor.elementsManager =
|
|
40
|
+
elementsManager as unknown as LegacyWindow[ 'elementor' ][ 'elementsManager' ];
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
describe( 'initLegacyViews', () => {
|
|
44
|
+
beforeEach( () => {
|
|
45
|
+
mockLegacyElementor();
|
|
46
|
+
} );
|
|
47
|
+
|
|
48
|
+
it( 'should register a late element type via the legacy manager without leaking state', () => {
|
|
49
|
+
// Arrange
|
|
50
|
+
const elementsManager = createMockElementsManager();
|
|
51
|
+
attachMockElementsManager( elementsManager );
|
|
52
|
+
|
|
53
|
+
jest.mocked( getWidgetsCache ).mockReturnValue( { [ MOCK_TYPE ]: createMockAtomicWidget() } );
|
|
54
|
+
|
|
55
|
+
initLegacyViews();
|
|
56
|
+
elementsManager.registerElementType.mockClear();
|
|
57
|
+
|
|
58
|
+
// Act
|
|
59
|
+
registerElementType( MOCK_TYPE, ( options ) => createTemplatedElementType( options ) );
|
|
60
|
+
|
|
61
|
+
// Assert
|
|
62
|
+
expect( elementsManager.registerElementType ).toHaveBeenCalledTimes( 1 );
|
|
63
|
+
const [ registeredInstance ] = elementsManager.registerElementType.mock.calls[ 0 ];
|
|
64
|
+
expect( registeredInstance.getType() ).toBe( MOCK_TYPE );
|
|
65
|
+
} );
|
|
66
|
+
} );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getWidgetsCache, type V1ElementConfig } from '@elementor/editor-elements';
|
|
2
|
-
import { __privateListenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';
|
|
2
|
+
import { __privateIsReady as isV1Ready, __privateListenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';
|
|
3
3
|
|
|
4
4
|
import { createDomRenderer, type DomRenderer } from '../renderers/create-dom-renderer';
|
|
5
5
|
import { createElementType } from './create-element-type';
|
|
@@ -30,28 +30,38 @@ export function registerElementType(
|
|
|
30
30
|
elementTypeGenerator: ElementLegacyType[ keyof ElementLegacyType ]
|
|
31
31
|
) {
|
|
32
32
|
elementsLegacyTypes[ type ] = elementTypeGenerator;
|
|
33
|
+
|
|
34
|
+
if ( isV1Ready() ) {
|
|
35
|
+
registerElementInLegacyManager( type, createDomRenderer() );
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
|
|
35
39
|
export function initLegacyViews() {
|
|
36
40
|
__privateListenTo( v1ReadyEvent(), () => {
|
|
37
41
|
const widgetsCache = getWidgetsCache() ?? {};
|
|
38
|
-
const legacyWindow = window as unknown as LegacyWindow;
|
|
39
42
|
const renderer = createDomRenderer();
|
|
40
43
|
|
|
41
44
|
registerProPromotionTypes( widgetsCache );
|
|
42
45
|
|
|
43
|
-
Object.
|
|
44
|
-
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const ResolvedElementType = resolveElementType( type, renderer, element );
|
|
49
|
-
|
|
50
|
-
tryRegisterElement( legacyWindow, type, element, ResolvedElementType );
|
|
46
|
+
Object.keys( widgetsCache ).forEach( ( type ) => {
|
|
47
|
+
registerElementInLegacyManager( type, renderer );
|
|
51
48
|
} );
|
|
52
49
|
} );
|
|
53
50
|
}
|
|
54
51
|
|
|
52
|
+
function registerElementInLegacyManager( type: string, renderer: DomRenderer ) {
|
|
53
|
+
const element = ( getWidgetsCache() ?? {} )[ type ];
|
|
54
|
+
|
|
55
|
+
if ( ! element?.atomic ) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const legacyWindow = window as unknown as LegacyWindow;
|
|
60
|
+
const ResolvedElementType = resolveElementType( type, renderer, element );
|
|
61
|
+
|
|
62
|
+
tryRegisterElement( legacyWindow, type, element, ResolvedElementType );
|
|
63
|
+
}
|
|
64
|
+
|
|
55
65
|
function registerProPromotionTypes( widgetsCache: Record< string, V1ElementConfig > ) {
|
|
56
66
|
Object.entries( widgetsCache ).forEach( ( [ type, element ] ) => {
|
|
57
67
|
if ( element.meta?.is_pro_promotion ) {
|