Skip to content

Commit 77aa5b6

Browse files
committed
MC-5443: IE11 - Cannot Use Slide Item Option Menu
Support applying focus to slide in one click - relatedTarget is always null for these events in IE11, but document.activeElement can be used in its place
1 parent bac265a commit 77aa5b6

File tree

3 files changed

+45
-4
lines changed
  • app/code/Magento/PageBuilder/view/adminhtml/web

3 files changed

+45
-4
lines changed

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

Lines changed: 20 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: 24 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,13 +172,33 @@ 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+
const relatedTargetIsDescendantOfNavigation = (
182+
relatedTarget &&
183+
$(relatedTarget as HTMLElement).closest(this.navigationElement).length
184+
);
185+
186+
const shouldUnsetFocusedSlide = !relatedTarget || !relatedTargetIsDescendantOfNavigation;
187+
188+
if (shouldUnsetFocusedSlide) {
177189
this.setFocusedSlide(null);
178190
}
179191
}
180192

193+
/**
194+
* Set reference to navigation element in template
195+
*
196+
* @param {HTMLElement} navigationElement
197+
*/
198+
public afterNavigationRender(navigationElement: HTMLElement): void {
199+
this.navigationElement = navigationElement;
200+
}
201+
181202
/**
182203
* Navigate to a slide
183204
*

0 commit comments

Comments
 (0)