Skip to content

Commit a05237d

Browse files
author
Hwashiang Yu
committed
MC-5383: Option Menus, Heading Inline Editor & tinyMCE Inline Editor Are Cut Off on Full Screen View
- Resolved banner and slider content type tinymce overflow on the right side - Resolved options menu on tabs and button and slide position - Refactored tinymce overflow test to extend heading test - Added test coverage for heading overflow and option menu overflow
1 parent 9578343 commit a05237d

File tree

11 files changed

+465
-81
lines changed

11 files changed

+465
-81
lines changed

app/code/Magento/PageBuilder/Test/Mftf/Section/PageBuilderHeadingSection.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
<element name="headingTextAlignToolbar" type="button" selector="(//div[contains(@class,'pagebuilder-heading')])[{{arg1}}]//i[contains(@class,'icon-pagebuilder-align-{{arg2}}')]" parameterized="true"/>
2626
<element name="headingTextAlignToolbarSelected" type="button" selector="(//div[contains(@class,'pagebuilder-heading')])[{{arg1}}]//a[contains(@class, 'toolbar-active')]//i[contains(@class,'icon-pagebuilder-align-{{arg2}}')]" parameterized="true"/>
2727
<element name="headingToolbarButtonViewportPositionTop" type="button" selector="return document.querySelector('.pagebuilder-toolbar-options-wrapper ul:{{arg1}}-child li:{{arg1}}-child').getBoundingClientRect().top;" parameterized="true"/>
28+
<element name="headingToolbarViewportPositionTop" type="button" selector="return document.querySelector('.pagebuilder-toolbar-options-wrapper').getBoundingClientRect().top;"/>
29+
<element name="headingToolbarViewportPositionBottom" type="button" selector="return document.querySelector('.pagebuilder-toolbar-options-wrapper').getBoundingClientRect().bottom;"/>
30+
<element name="allViewportPositionTop" type="button" selector="return document.querySelector('.pagebuilder-heading').getBoundingClientRect().top;"/>
31+
<element name="allViewportPositionBottom" type="button" selector="return document.querySelector('.pagebuilder-heading').getBoundingClientRect().bottom;"/>
2832
<!-- Advanced Configuration -->
2933
<element name="alignment" type="text" selector="(//div[contains(@class,'pagebuilder-heading')]//{{arg1}})[{{arg2}}][contains(@style,'text-align: {{arg3}};')]" parameterized="true"/>
3034
<element name="noAlignment" type="text" selector="(//{{arg1}})[{{arg2}}][not(contains(@style,'text-align:'))]" parameterized="true"/>

app/code/Magento/PageBuilder/Test/Mftf/Test/AdminPageBuilderPanelTest.xml

Lines changed: 255 additions & 61 deletions
Large diffs are not rendered by default.

app/code/Magento/PageBuilder/etc/adminhtml/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@
512512
<item name="component_initializers" xsi:type="array">
513513
<item name="text" xsi:type="string">Magento_PageBuilder/js/content-type/text/wysiwyg/tinymce4/component-initializer</item>
514514
<item name="slide" xsi:type="string">Magento_PageBuilder/js/content-type/slide/wysiwyg/tinymce4/component-initializer</item>
515+
<item name="banner" xsi:type="string">Magento_PageBuilder/js/content-type/banner/wysiwyg/tinymce4/component-initializer</item>
515516
</item>
516517
<item name="config_modifiers" xsi:type="array">
517518
<item name="text" xsi:type="string">Magento_PageBuilder/js/content-type/text/wysiwyg/tinymce4/config-modifier</item>

app/code/Magento/PageBuilder/view/adminhtml/web/css/source/content-type/_preview.less

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,6 @@
318318

319319
.pagebuilder-options-visible {
320320
opacity: 1;
321-
transform: translate(-50%, -50%);
322321
transition-delay: 200ms;
323322
visibility: visible;
324323
}
@@ -327,26 +326,24 @@
327326
height: 40px;
328327
opacity: 0;
329328
position: absolute;
330-
right: 50%;
329+
right: 0;
331330
text-align: center;
332331
top: 0;
333-
transform: translate(50%, -50%);
332+
transform: translate(0, -50%);
334333
-moz-transition: opacity 200ms, visibility 200ms;
335334
-o-transition: opacity 200ms, visibility 200ms;
336335
-webkit-transition: opacity 200ms, visibility 200ms;
337336
transition: opacity 200ms, visibility 200ms;
338337
visibility: hidden;
339338
z-index: 105;
340339

341-
&.pagebuilder-options-right {
342-
right: 0;
343-
transform: translate(0, -50%);
340+
&.pagebuilder-options-middle {
341+
right: 50%;
342+
transform: translate(50%, -50%);
344343
}
345344

346345
&.pagebuilder-options-visible {
347-
opacity: 1;
348-
transition-delay: 200ms;
349-
visibility: visible;
346+
.pagebuilder-options-visible
350347
}
351348

352349
.pagebuilder-options-wrapper {
@@ -464,11 +461,12 @@
464461

465462
.focus-options {
466463
.pagebuilder-options {
464+
right: 50%;
465+
top: -20px;
466+
transform: translate(50%, -50%);
467467
-moz-transition: opacity 200ms, visibility 200ms, transform 200ms;
468468
-o-transition: opacity 200ms, visibility 200ms, transform 200ms;
469469
-webkit-transition: opacity 200ms, visibility 200ms, transform 200ms;
470-
top: -20px;
471-
transform: translate(-50%, -20%);
472470
transition: opacity 200ms, visibility 200ms, transform 200ms;
473471
transition-delay: 0ms !important; // Arrow options have no delay in transitioning out
474472

app/code/Magento/PageBuilder/view/adminhtml/web/js/content-type/banner/wysiwyg/tinymce4/component-initializer.js

Lines changed: 73 additions & 0 deletions
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/content-type/banner/wysiwyg/tinymce4/config-modifier.js

Lines changed: 33 additions & 0 deletions
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/content-type/preview.js

Lines changed: 4 additions & 4 deletions
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/content-type/slide/wysiwyg/tinymce4/component-initializer.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.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
import $ from "jquery";
7+
import WysiwygEvents from "mage/adminhtml/wysiwyg/events";
8+
import {AdditionalDataConfigInterface} from "../../../../content-type-config";
9+
import WysiwygComponentInitializerInterface from "../../../../wysiwyg/component-initializer-interface";
10+
import WysiwygInterface from "../../../../wysiwyg/wysiwyg-interface";
11+
12+
export default class ComponentInitializer implements WysiwygComponentInitializerInterface {
13+
/**
14+
* The editor element
15+
*/
16+
private $element: JQuery;
17+
18+
/**
19+
* The configuration of the wysiwyg content type
20+
*/
21+
private config: AdditionalDataConfigInterface;
22+
23+
/**
24+
* Initialize the instance
25+
*
26+
* @param {Wysiwyg} wysiwyg
27+
*/
28+
public initialize(wysiwyg: WysiwygInterface): void {
29+
this.$element = $("#" + wysiwyg.elementId);
30+
this.config = wysiwyg.config;
31+
const tinymce = wysiwyg.getAdapter();
32+
33+
tinymce.eventBus.attachEventHandler(WysiwygEvents.afterFocus, this.onFocus.bind(this));
34+
tinymce.eventBus.attachEventHandler(WysiwygEvents.afterBlur, this.onBlur.bind(this));
35+
}
36+
37+
/**
38+
* Called when tinymce is focused
39+
*/
40+
private onFocus() {
41+
// If there isn't enough room for a left-aligned toolbar, right align it
42+
if ($(window).width() <
43+
this.$element.offset().left + parseInt(this.config.adapter_config.minToolbarWidth, 10)
44+
) {
45+
this.$element.addClass("_right-aligned-toolbar");
46+
}
47+
else {
48+
this.$element.removeClass("_right-aligned-toolbar");
49+
}
50+
51+
$.each(this.config.adapter_config.parentSelectorsToUnderlay, (i, selector) => {
52+
this.$element.closest(selector as string).css("z-index", 100);
53+
});
54+
}
55+
56+
/**
57+
* Called when tinymce is blurred
58+
*/
59+
private onBlur() {
60+
$.each(this.config.adapter_config.parentSelectorsToUnderlay, (i, selector) => {
61+
this.$element.closest(selector as string).css("z-index", "");
62+
});
63+
}
64+
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,11 @@ export default class Preview {
196196

197197
const middleOfPreview = currentTarget.getBoundingClientRect().left + currentTarget.offsetWidth / 2;
198198

199-
// if there are space for moving options menu to the middle
200-
if (!(window.innerWidth - middleOfPreview > optionsMenu.width() / 2)) {
201-
optionsMenu.parent().addClass("pagebuilder-options-right");
199+
// Check for space for option menu
200+
if (window.innerWidth - middleOfPreview > optionsMenu.width() / 2) {
201+
optionsMenu.parent().addClass("pagebuilder-options-middle");
202202
} else {
203-
optionsMenu.parent().removeClass("pagebuilder-options-right");
203+
optionsMenu.parent().removeClass("pagebuilder-options-middle");
204204
}
205205

206206
optionsMenu.parent().addClass("pagebuilder-options-visible");

0 commit comments

Comments
 (0)