Skip to content

Commit 53a59c5

Browse files
committed
bug: disable iframes within shadowdom during dnd
1 parent 4291774 commit 53a59c5

File tree

1 file changed

+27
-5
lines changed
  • packages/dockview-core/src

1 file changed

+27
-5
lines changed

packages/dockview-core/src/dom.ts

+27-5
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,11 @@ export function isAncestor(
112112
return false;
113113
}
114114

115-
export function getElementsByTagName(tag: string): HTMLElement[] {
116-
return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);
115+
export function getElementsByTagName(
116+
tag: string,
117+
document: ParentNode
118+
): HTMLElement[] {
119+
return Array.prototype.slice.call(document.querySelectorAll(tag), 0);
117120
}
118121

119122
export interface IFocusTracker extends IDisposable {
@@ -288,10 +291,29 @@ export function addTestId(element: HTMLElement, id: string): void {
288291
element.setAttribute('data-testid', id);
289292
}
290293

291-
export function disableIframePointEvents() {
294+
export function disableIframePointEvents(rootNode: ParentNode = document) {
295+
const includeShadowDom = true;
296+
297+
const shadowRoots = [];
298+
299+
if (includeShadowDom) {
300+
const items = rootNode.querySelectorAll('*');
301+
302+
for (let i = 0; i < items.length; i++) {
303+
const item = items[i];
304+
if (item.shadowRoot) {
305+
shadowRoots.push(item.shadowRoot);
306+
}
307+
}
308+
}
309+
292310
const iframes: HTMLElement[] = [
293-
...getElementsByTagName('iframe'),
294-
...getElementsByTagName('webview'),
311+
...getElementsByTagName('iframe', rootNode),
312+
...getElementsByTagName('webview', rootNode),
313+
...shadowRoots.flatMap((root) => [
314+
...getElementsByTagName('iframe', root),
315+
...getElementsByTagName('webview', root),
316+
]),
295317
];
296318

297319
const original = new WeakMap<HTMLElement, string>(); // don't hold onto HTMLElement references longer than required

0 commit comments

Comments
 (0)