Skip to content

Commit 62d38d0

Browse files
committed
Merge branch 'ACP2E-2903' of https://github.com/adobe-commerce-tier-4/magento2-page-builder into T4-PR-06-14-2024
2 parents 5b48c10 + ad03657 commit 62d38d0

File tree

6 files changed

+116
-8
lines changed

6 files changed

+116
-8
lines changed

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/text/preview.js

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/js/utils/editor.js

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/content-type/text/preview.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import $ from "jquery";
77
import events from "Magento_PageBuilder/js/events";
8+
import {Editor} from "tinymce";
89
import _ from "underscore";
910
import HideShowOption from "../../content-type-menu/hide-show-option";
1011
import {OptionsInterface} from "../../content-type-menu/option.types";
@@ -158,7 +159,16 @@ export default class Preview extends BasePreview {
158159

159160
if (focus) {
160161
wysiwygConfig.adapter.settings.auto_focus = this.element.id;
161-
wysiwygConfig.adapter.settings.init_instance_callback = () => {
162+
wysiwygConfig.adapter.settings.init_instance_callback = (editor: Editor) => {
163+
editor.on("mousedown", (event) => {
164+
if (event.target.nodeName === "IMG"
165+
&& event.button !== 2
166+
&& editor.dom.getRoot() !== document.activeElement
167+
) {
168+
editor.selection.select(event.target);
169+
editor.nodeChanged();
170+
}
171+
});
162172
_.defer(() => {
163173
this.element.blur();
164174
this.element.focus();

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/utils/editor.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@ export function createBookmark(event: JQueryEventObject): Bookmark {
279279
* @param bookmark
280280
*/
281281
export function moveToBookmark(bookmark: Bookmark) {
282-
((window as any).tinymce.activeEditor as Editor).selection.moveToBookmark(bookmark);
282+
getActiveEditor().selection.moveToBookmark(bookmark);
283+
getActiveEditor().nodeChanged();
283284
}
284285

285286
/**

dev/tests/js/jasmine/tests/app/code/Magento/PageBuilder/adminhtml/web/js/content-type/text/preview.test.js

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66
/* eslint-disable max-nested-callbacks */
77
define([
88
'jquery',
9+
'underscore',
910
'Magento_PageBuilder/js/content-type/text/preview'
10-
], function ($, Preview) {
11+
], function ($, _, Preview) {
1112
'use strict';
1213

1314
describe('Magento_PageBuilder/js/content-type/text/preview', function () {
14-
var model;
15+
var model,
16+
config;
1517

1618
beforeEach(function () {
17-
model = new Preview({dataStore: {subscribe: jasmine.createSpy()}}, {});
18-
model.element = $('<div contenteditable="true">This text can be edited.</div>')[0];
19+
config = {};
20+
model = new Preview({dataStore: {subscribe: jasmine.createSpy()}}, config);
21+
model.element = $('<div id="pb-text-content" contenteditable="true">This text can be edited.</div>')[0];
1922
$('body').append($(model.element));
2023
});
2124
afterEach(function () {
@@ -96,5 +99,66 @@ define([
9699
expect(model.activateEditor).not.toHaveBeenCalled();
97100
});
98101
});
102+
103+
describe('initWysiwygFromClick()', function () {
104+
var originalDeferFn = _.defer,
105+
editor;
106+
107+
beforeEach(function () {
108+
config.additional_data = {
109+
wysiwygConfig: {
110+
wysiwygConfigData: {
111+
adapter: {
112+
settings: {
113+
114+
}
115+
}
116+
}
117+
}
118+
};
119+
editor = {
120+
on: function (event, callback) {
121+
$(model.element).on(event, callback);
122+
},
123+
dom: {
124+
getRoot: jasmine.createSpy('getRoot').and.returnValue(model.element)
125+
},
126+
selection: {
127+
select: jasmine.createSpy('select')
128+
},
129+
nodeChanged: jasmine.createSpy('nodeChanged')
130+
};
131+
_.defer = jasmine.createSpy('_.defer');
132+
});
133+
afterEach(function () {
134+
_.defer = originalDeferFn;
135+
});
136+
it('Should select image on mousedown', function () {
137+
var editorSettings = config.additional_data.wysiwygConfig.wysiwygConfigData.adapter.settings,
138+
img = document.createElement('img');
139+
140+
$(model.element).append(img);
141+
model.initWysiwygFromClick(true);
142+
expect(editorSettings.auto_focus).toEqual(model.element.id);
143+
expect(editorSettings.init_instance_callback).toBeInstanceOf(Function);
144+
editorSettings.init_instance_callback(editor);
145+
$(img).trigger('mousedown');
146+
expect(editor.selection.select).toHaveBeenCalledWith(img);
147+
expect(editor.nodeChanged).toHaveBeenCalled();
148+
});
149+
it('Should not select image if right button of the mouse is clicked', function () {
150+
var editorSettings = config.additional_data.wysiwygConfig.wysiwygConfigData.adapter.settings,
151+
img = document.createElement('img');
152+
153+
$(model.element).append(img);
154+
model.initWysiwygFromClick(true);
155+
expect(editorSettings.auto_focus).toEqual(model.element.id);
156+
expect(editorSettings.init_instance_callback).toBeInstanceOf(Function);
157+
editorSettings.init_instance_callback(editor);
158+
$(img).trigger($.Event('mousedown', {button: 2}));
159+
expect(editor.selection.select).not.toHaveBeenCalled();
160+
expect(editor.nodeChanged).not.toHaveBeenCalled();
161+
});
162+
});
99163
});
100164
});

dev/tests/js/jasmine/tests/app/code/Magento/PageBuilder/adminhtml/web/js/utils/editor.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,30 @@ define([
5959
expect(content).toEqual('<div id="x" data-t1="1"><span id="y"></span></div>');
6060
});
6161
});
62+
63+
describe('moveToBookmark', function () {
64+
var originalTinymce = window.tinymce;
65+
66+
beforeEach(function () {
67+
window.tinymce = {
68+
activeEditor: {
69+
selection: {
70+
moveToBookmark: jasmine.createSpy('moveToBookmark')
71+
},
72+
nodeChanged: jasmine.createSpy('nodeChanged')
73+
}
74+
};
75+
});
76+
afterEach(function () {
77+
originalTinymce && (window.tinymce = originalTinymce);
78+
});
79+
it('Should call activeEditor.selection.moveToBookmark and activeEditor.nodeChanged', function () {
80+
var bookmark = {id: 'test'};
81+
82+
utils.moveToBookmark(bookmark);
83+
expect(utils.getActiveEditor().selection.moveToBookmark).toHaveBeenCalledWith(bookmark);
84+
expect(utils.getActiveEditor().nodeChanged).toHaveBeenCalled();
85+
});
86+
});
6287
});
6388
});

0 commit comments

Comments
 (0)