Skip to content

Commit 42c2e49

Browse files
committed
Merge remote-tracking branch 'remotes/origin/MC-5443' into cms-team-1-delivery
2 parents b686987 + 4f9cab3 commit 42c2e49

File tree

6 files changed

+70
-6
lines changed

6 files changed

+70
-6
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,10 @@
221221
border: none;
222222
transition: all .3s;
223223
}
224+
225+
.pagebuilder-options {
226+
z-index: auto;
227+
}
224228
}
225229

226230
&.focus {

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

Lines changed: 28 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/stage.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/template/content-type/slider/default/preview.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
</div>
1717
<div class="slider-controls focus-options">
1818
<div class="slider-navigation"
19+
afterRender="afterNavigationRender"
1920
each="$parent.getChildren()"
2021
data-bind="sortableChildren: { handle: '.navigation-dot-anchor', containment: 'parent', placeholder: 'navigation-dot sortable-placeholder', tolerance: 'pointer', start: onSortStart.bind($parent.preview), stop: onSortStop.bind($parent.preview) }">
2122
<div class="navigation-dot"

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

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export default class Preview extends PreviewCollection {
4141
protected events: DataObject = {
4242
columnWidthChangeAfter: "onColumnResize",
4343
};
44+
private navigationElement: HTMLElement;
4445
private ready: boolean = false;
4546
private childSubscribe: KnockoutSubscription;
4647
private contentTypeHeightReset: boolean;
@@ -171,11 +172,39 @@ export default class Preview extends PreviewCollection {
171172
* @param {JQueryEventObject} event
172173
*/
173174
public onFocusOut(data: PreviewCollection, event: JQueryEventObject) {
174-
if (_.isNull(event.relatedTarget) ||
175-
event.relatedTarget && !$(event.currentTarget as HTMLElement).closest(event.relatedTarget).length
176-
) {
175+
let relatedTarget = event.relatedTarget;
176+
177+
if (!relatedTarget && document.activeElement && !(document.activeElement instanceof HTMLBodyElement)) {
178+
relatedTarget = document.activeElement;
179+
}
180+
181+
if (!relatedTarget) {
177182
this.setFocusedSlide(null);
183+
return;
178184
}
185+
186+
const $relatedTarget = $(relatedTarget);
187+
188+
const isRelatedTargetDescendantOfNavigation = $relatedTarget.closest(this.navigationElement).length;
189+
const isFocusedOnAnotherSlideInThisSlider = (
190+
$relatedTarget.hasClass("navigation-dot-anchor") &&
191+
isRelatedTargetDescendantOfNavigation
192+
);
193+
194+
if (isFocusedOnAnotherSlideInThisSlider) {
195+
events.trigger("stage:interactionStop");
196+
} else if (!isRelatedTargetDescendantOfNavigation) {
197+
this.setFocusedSlide(null);
198+
}
199+
}
200+
201+
/**
202+
* Set reference to navigation element in template
203+
*
204+
* @param {HTMLElement} navigationElement
205+
*/
206+
public afterNavigationRender(navigationElement: HTMLElement): void {
207+
this.navigationElement = navigationElement;
179208
}
180209

181210
/**

app/code/Magento/PageBuilder/view/adminhtml/web/ts/js/stage.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ export default class Stage {
199199
});
200200
events.on("stage:interactionStop", (args: {force: boolean}) => {
201201
const forced = (_.isObject(args) && args.force === true);
202-
if (--interactionLevel === 0 || forced) {
202+
interactionLevel = Math.max(interactionLevel - 1, 0);
203+
204+
if (interactionLevel === 0 || forced) {
203205
this.interacting(false);
204206
if (forced) {
205207
interactionLevel = 0;

0 commit comments

Comments
 (0)