Skip to content

Commit 7a3261c

Browse files
authored
feat(framework): support several runtimes simultaneously (#1691)
1 parent 095d6dc commit 7a3261c

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed
+26-4
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,45 @@
1-
const DefinitionsSet = new Set();
1+
const Definitions = new Set();
2+
const Failures = new Set();
3+
let failureTimeout;
24

35
const registerTag = tag => {
4-
DefinitionsSet.add(tag);
6+
Definitions.add(tag);
57
};
68

79
const isTagRegistered = tag => {
8-
return DefinitionsSet.has(tag);
10+
return Definitions.has(tag);
911
};
1012

1113
const getAllRegisteredTags = () => {
1214
const arr = [];
13-
DefinitionsSet.forEach(tag => {
15+
Definitions.forEach(tag => {
1416
arr.push(tag);
1517
});
1618
return arr;
1719
};
1820

21+
const recordTagRegistrationFailure = tag => {
22+
Failures.add(tag);
23+
if (!failureTimeout) {
24+
failureTimeout = setTimeout(() => {
25+
displayFailedRegistrations();
26+
failureTimeout = undefined;
27+
}, 1000);
28+
}
29+
};
30+
31+
const displayFailedRegistrations = () => {
32+
const tags = []; // IE only supports Set.prototype.forEach
33+
Failures.forEach(tag => {
34+
tags.push(tag);
35+
});
36+
console.warn(`The following tags have already been defined by a different UI5 Web Components version: ${tags.join(", ")}`); // eslint-disable-line
37+
Failures.clear();
38+
};
39+
1940
export {
2041
registerTag,
2142
isTagRegistered,
2243
getAllRegisteredTags,
44+
recordTagRegistrationFailure,
2345
};

packages/base/src/UI5Element.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import boot from "./boot.js";
33
import UI5ElementMetadata from "./UI5ElementMetadata.js";
44
import StaticAreaItem from "./StaticAreaItem.js";
55
import RenderScheduler from "./RenderScheduler.js";
6-
import { registerTag, isTagRegistered } from "./CustomElementsRegistry.js";
6+
import { registerTag, isTagRegistered, recordTagRegistrationFailure } from "./CustomElementsRegistry.js";
77
import DOMObserver from "./compatibility/DOMObserver.js";
88
import { skipOriginalEvent } from "./config/NoConflict.js";
99
import getConstructableStyle from "./theming/getConstructableStyle.js";
@@ -901,7 +901,7 @@ class UI5Element extends HTMLElement {
901901
const definedGlobally = customElements.get(tag);
902902

903903
if (definedGlobally && !definedLocally) {
904-
console.warn(`Skipping definition of tag ${tag}, because it was already defined by another instance of ui5-webcomponents.`); // eslint-disable-line
904+
recordTagRegistrationFailure(tag);
905905
} else if (!definedGlobally) {
906906
this._generateAccessors();
907907
registerTag(tag);

packages/base/src/delegate/ItemNavigation.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
} from "../Keys.js";
1010

1111
import EventProvider from "../EventProvider.js";
12-
import UI5Element from "../UI5Element.js";
1312
import NavigationMode from "../types/NavigationMode.js";
1413
import ItemNavigationBehavior from "../types/ItemNavigationBehavior.js";
1514

@@ -193,7 +192,7 @@ class ItemNavigation extends EventProvider {
193192

194193
const currentItem = items[this.currentIndex];
195194

196-
if (currentItem instanceof UI5Element) {
195+
if (currentItem.isUI5Element) {
197196
return currentItem.getFocusDomRef();
198197
}
199198

packages/base/src/delegate/ResizeHandler.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import UI5Element from "../UI5Element.js";
21
import NativeResize from "./NativeResize.js";
32
import CustomResize from "./CustomResize.js";
43

@@ -38,7 +37,7 @@ class ResizeHandler {
3837
* @memberof ResizeHandler
3938
*/
4039
static register(ref, callback) {
41-
if (ref instanceof UI5Element) {
40+
if (ref.isUI5Element) {
4241
ref = ref.getDomRef();
4342
}
4443

@@ -53,7 +52,7 @@ class ResizeHandler {
5352
* @memberof ResizeHandler
5453
*/
5554
static deregister(ref, callback) {
56-
if (ref instanceof UI5Element) {
55+
if (ref.isUI5Element) {
5756
ref = ref.getDomRef();
5857
}
5958

packages/base/src/util/FocusableElements.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import UI5Element from "../UI5Element.js";
21
import isNodeHidden from "./isNodeHidden.js";
32
import isNodeClickable from "./isNodeClickable.js";
43

@@ -32,7 +31,7 @@ const findFocusableElement = (container, forward) => {
3231
while (child) {
3332
const originalChild = child;
3433

35-
child = child instanceof UI5Element ? child.getFocusDomRef() : child;
34+
child = child.isUI5Element ? child.getFocusDomRef() : child;
3635
if (!child) {
3736
return null;
3837
}

0 commit comments

Comments
 (0)