@ui5/webcomponents-base 0.0.0-b4cbc43ba → 0.0.0-b93c2a321
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +3 -0
- package/CHANGELOG.md +214 -0
- package/README.md +26 -2
- package/bundle.esm.js +10 -7
- package/dist/AssetRegistry.js +8 -9
- package/dist/Boot.js +17 -6
- package/dist/CSP.js +59 -0
- package/dist/CustomElementsRegistry.js +60 -4
- package/dist/CustomElementsScope.js +20 -98
- package/dist/CustomElementsScopeUtils.js +108 -0
- package/dist/DOMObserver.js +6 -2
- package/dist/Device.js +69 -776
- package/dist/EventProvider.js +19 -25
- package/dist/FeaturesRegistry.js +4 -1
- package/dist/FontFace.js +7 -95
- package/dist/InitialConfiguration.js +37 -21
- package/dist/Keys.js +74 -0
- package/dist/ManagedStyles.js +83 -0
- package/dist/MediaRange.js +109 -0
- package/dist/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
- package/dist/Render.js +3 -2
- package/dist/Runtimes.js +107 -0
- package/dist/StaticArea.js +3 -0
- package/dist/StaticAreaItem.js +31 -10
- package/dist/SystemCSSVars.js +4 -25
- package/dist/UI5Element.js +66 -65
- package/dist/UI5ElementMetadata.js +18 -2
- package/dist/asset-registries/Icons.js +117 -14
- package/dist/asset-registries/Illustrations.js +30 -0
- package/dist/asset-registries/LocaleData.js +97 -68
- package/dist/asset-registries/Themes.js +23 -33
- package/dist/asset-registries/i18n.js +61 -50
- package/dist/assets-meta/IconCollectionsAlias.js +18 -0
- package/dist/config/Icons.js +52 -0
- package/dist/config/Language.js +15 -15
- package/dist/config/Theme.js +25 -0
- package/dist/css/BusyIndicator.css +76 -0
- package/dist/css/FontFace.css +75 -0
- package/dist/css/OverrideFontFace.css +32 -0
- package/dist/css/SystemCSSVars.css +17 -0
- package/dist/delegate/ItemNavigation.js +163 -105
- package/dist/delegate/ScrollEnablement.js +25 -19
- package/dist/features/F6Navigation.js +108 -0
- package/dist/features/OpenUI5Enablement.js +119 -0
- package/dist/features/OpenUI5Support.js +41 -6
- package/dist/generated/AssetParameters.js +1 -1
- package/dist/generated/VersionInfo.js +10 -0
- package/dist/generated/css/BusyIndicator.css.js +5 -0
- package/dist/generated/css/FontFace.css.js +5 -0
- package/dist/generated/css/OverrideFontFace.css.js +5 -0
- package/dist/generated/css/SystemCSSVars.css.js +5 -0
- package/dist/i18nBundle.js +38 -4
- package/dist/renderer/LitRenderer.js +39 -18
- package/dist/renderer/directives/style-map.js +72 -0
- package/dist/renderer/executeTemplate.js +19 -2
- package/dist/resources/bundle.esm.js +15 -104
- package/dist/resources/bundle.esm.js.map +1 -1
- package/dist/sap/base/Log.js +241 -0
- package/dist/sap/base/assert.js +8 -0
- package/dist/sap/base/security/URLListValidator.js +148 -0
- package/dist/sap/base/security/encodeCSS.js +14 -0
- package/dist/sap/base/security/encodeXML.js +23 -0
- package/dist/sap/base/security/sanitizeHTML.js +16 -0
- package/dist/sap/base/strings/toHex.js +8 -0
- package/dist/sap/base/util/now.js +7 -0
- package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
- package/dist/test-resources/assets/Themes.js +8 -8
- package/dist/test-resources/elements/WithStaticArea.js +2 -1
- package/dist/test-resources/pages/AllTestElements.html +3 -0
- package/dist/test-resources/pages/i18n.html +2 -9
- package/dist/test-resources/specs/ConfigurationChange.spec.js +10 -8
- package/dist/test-resources/specs/ConfigurationScript.spec.js +25 -23
- package/dist/test-resources/specs/ConfigurationURL.spec.js +65 -17
- package/dist/test-resources/specs/CustomTheme.spec.js +9 -7
- package/dist/test-resources/specs/EventProvider.spec.js +63 -0
- package/dist/test-resources/specs/StaticArea.spec.js +56 -12
- package/dist/test-resources/specs/Theming.spec.js +12 -10
- package/dist/test-resources/specs/UI5ElementInvalidation.js +30 -28
- package/dist/test-resources/specs/UI5ElementLifecycle.js +12 -10
- package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +12 -10
- package/dist/test-resources/specs/UI5ElementMetadataExt.js +9 -7
- package/dist/test-resources/specs/UI5ElementPropertyValidation.js +7 -5
- package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +37 -35
- package/dist/test-resources/specs/UI5ElementShadowDOM.js +10 -8
- package/dist/test-resources/specs/UI5ElementSlots.js +10 -8
- package/dist/theming/CustomStyle.js +23 -3
- package/dist/theming/applyTheme.js +11 -10
- package/dist/theming/getEffectiveLinksHrefs.js +27 -0
- package/dist/theming/getEffectiveStyle.js +9 -0
- package/dist/theming/getStylesString.js +4 -2
- package/dist/theming/getThemeDesignerTheme.js +25 -5
- package/dist/theming/preloadLinks.js +23 -0
- package/dist/types/CSSColor.js +9 -0
- package/dist/types/DataType.js +12 -0
- package/dist/types/Float.js +4 -0
- package/dist/types/Integer.js +4 -0
- package/dist/types/InvisibleMessageMode.js +30 -0
- package/dist/updateShadowRoot.js +8 -4
- package/dist/util/AriaLabelHelper.js +4 -4
- package/dist/util/ColorConversion.js +370 -0
- package/dist/util/FocusableElements.js +13 -7
- package/dist/util/HTMLSanitizer.js +7 -0
- package/dist/util/InvisibleMessage.js +60 -0
- package/dist/util/PopupUtils.js +93 -0
- package/dist/util/TabbableElements.js +5 -1
- package/dist/util/clamp.js +12 -0
- package/dist/util/createLinkInHead.js +19 -0
- package/dist/util/escapeRegex.js +10 -0
- package/dist/util/generateHighlightedMarkup.js +42 -0
- package/dist/util/getClassCopy.js +10 -0
- package/dist/util/getNormalizedTarget.js +16 -0
- package/dist/util/isElementInView.js +15 -0
- package/dist/util/isNodeHidden.js +1 -1
- package/dist/util/isNodeTabbable.js +4 -4
- package/hash.txt +1 -0
- package/index.js +1 -1
- package/lib/generate-asset-parameters/index.js +0 -1
- package/lib/generate-styles/index.js +18 -0
- package/lib/generate-version-info/index.js +27 -0
- package/package-scripts.js +31 -15
- package/package.json +19 -10
- package/src/AssetRegistry.js +8 -9
- package/src/Boot.js +17 -6
- package/src/CSP.js +59 -0
- package/src/CustomElementsRegistry.js +60 -4
- package/src/CustomElementsScope.js +20 -98
- package/src/CustomElementsScopeUtils.js +108 -0
- package/src/DOMObserver.js +6 -2
- package/src/Device.js +69 -776
- package/src/EventProvider.js +19 -25
- package/src/FeaturesRegistry.js +4 -1
- package/src/FontFace.js +7 -95
- package/src/InitialConfiguration.js +37 -21
- package/src/Keys.js +74 -0
- package/src/ManagedStyles.js +83 -0
- package/src/MediaRange.js +109 -0
- package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
- package/src/Render.js +3 -2
- package/src/Runtimes.js +107 -0
- package/src/StaticArea.js +3 -0
- package/src/StaticAreaItem.js +31 -10
- package/src/SystemCSSVars.js +4 -25
- package/src/UI5Element.js +66 -65
- package/src/UI5ElementMetadata.js +18 -2
- package/src/asset-registries/Icons.js +117 -14
- package/src/asset-registries/Illustrations.js +30 -0
- package/src/asset-registries/LocaleData.js +97 -68
- package/src/asset-registries/Themes.js +23 -33
- package/src/asset-registries/i18n.js +61 -50
- package/src/assets-meta/IconCollectionsAlias.js +18 -0
- package/src/config/Icons.js +52 -0
- package/src/config/Language.js +15 -15
- package/src/config/Theme.js +25 -0
- package/src/css/BusyIndicator.css +76 -0
- package/src/css/FontFace.css +75 -0
- package/src/css/OverrideFontFace.css +32 -0
- package/src/css/SystemCSSVars.css +17 -0
- package/src/delegate/ItemNavigation.js +163 -105
- package/src/delegate/ScrollEnablement.js +25 -19
- package/src/features/F6Navigation.js +108 -0
- package/src/features/OpenUI5Enablement.js +119 -0
- package/src/features/OpenUI5Support.js +41 -6
- package/src/i18nBundle.js +38 -4
- package/src/renderer/LitRenderer.js +39 -18
- package/src/renderer/directives/style-map.js +72 -0
- package/src/renderer/executeTemplate.js +19 -2
- package/src/theming/CustomStyle.js +23 -3
- package/src/theming/applyTheme.js +11 -10
- package/src/theming/getEffectiveLinksHrefs.js +27 -0
- package/src/theming/getEffectiveStyle.js +9 -0
- package/src/theming/getStylesString.js +4 -2
- package/src/theming/getThemeDesignerTheme.js +25 -5
- package/src/theming/preloadLinks.js +23 -0
- package/src/types/CSSColor.js +9 -0
- package/src/types/DataType.js +12 -0
- package/src/types/Float.js +4 -0
- package/src/types/Integer.js +4 -0
- package/src/types/InvisibleMessageMode.js +30 -0
- package/src/updateShadowRoot.js +8 -4
- package/src/util/AriaLabelHelper.js +4 -4
- package/src/util/ColorConversion.js +370 -0
- package/src/util/FocusableElements.js +13 -7
- package/src/util/HTMLSanitizer.js +7 -0
- package/src/util/InvisibleMessage.js +60 -0
- package/src/util/PopupUtils.js +93 -0
- package/src/util/TabbableElements.js +5 -1
- package/src/util/clamp.js +12 -0
- package/src/util/createLinkInHead.js +19 -0
- package/src/util/escapeRegex.js +10 -0
- package/src/util/generateHighlightedMarkup.js +42 -0
- package/src/util/getClassCopy.js +10 -0
- package/src/util/getNormalizedTarget.js +16 -0
- package/src/util/isElementInView.js +15 -0
- package/src/util/isNodeHidden.js +1 -1
- package/src/util/isNodeTabbable.js +4 -4
- package/used-modules.txt +10 -0
- package/dist/SVGIconRegistry.js +0 -73
- package/dist/config/AssetsPath.js +0 -17
- package/dist/features/PropertiesFormatSupport.js +0 -8
- package/dist/renderer/ifDefined.js +0 -21
- package/dist/renderer/scopeHTML.js +0 -32
- package/dist/theming/createThemePropertiesStyleTag.js +0 -20
- package/dist/util/EffectiveAssetPath.js +0 -27
- package/dist/util/encodeCSS.js +0 -24
- package/src/SVGIconRegistry.js +0 -73
- package/src/config/AssetsPath.js +0 -17
- package/src/features/PropertiesFormatSupport.js +0 -8
- package/src/renderer/ifDefined.js +0 -21
- package/src/renderer/scopeHTML.js +0 -32
- package/src/theming/createThemePropertiesStyleTag.js +0 -20
- package/src/util/EffectiveAssetPath.js +0 -27
- package/src/util/encodeCSS.js +0 -24
package/dist/EventProvider.js
CHANGED
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
class EventProvider {
|
|
2
2
|
constructor() {
|
|
3
|
-
this._eventRegistry =
|
|
3
|
+
this._eventRegistry = new Map();
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
attachEvent(eventName, fnFunction) {
|
|
7
7
|
const eventRegistry = this._eventRegistry;
|
|
8
|
-
|
|
8
|
+
const eventListeners = eventRegistry.get(eventName);
|
|
9
9
|
|
|
10
10
|
if (!Array.isArray(eventListeners)) {
|
|
11
|
-
eventRegistry
|
|
12
|
-
|
|
11
|
+
eventRegistry.set(eventName, [fnFunction]);
|
|
12
|
+
return;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
eventListeners.
|
|
16
|
-
|
|
17
|
-
}
|
|
15
|
+
if (!eventListeners.includes(fnFunction)) {
|
|
16
|
+
eventListeners.push(fnFunction);
|
|
17
|
+
}
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
detachEvent(eventName, fnFunction) {
|
|
21
21
|
const eventRegistry = this._eventRegistry;
|
|
22
|
-
|
|
22
|
+
const eventListeners = eventRegistry.get(eventName);
|
|
23
23
|
|
|
24
24
|
if (!eventListeners) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
|
+
const indexOfFnToDetach = eventListeners.indexOf(fnFunction);
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
29
|
+
if (indexOfFnToDetach !== -1) {
|
|
30
|
+
eventListeners.splice(indexOfFnToDetach, 1);
|
|
31
|
+
}
|
|
31
32
|
|
|
32
33
|
if (eventListeners.length === 0) {
|
|
33
|
-
delete
|
|
34
|
+
eventRegistry.delete(eventName);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -43,14 +44,14 @@ class EventProvider {
|
|
|
43
44
|
*/
|
|
44
45
|
fireEvent(eventName, data) {
|
|
45
46
|
const eventRegistry = this._eventRegistry;
|
|
46
|
-
const eventListeners = eventRegistry
|
|
47
|
+
const eventListeners = eventRegistry.get(eventName);
|
|
47
48
|
|
|
48
49
|
if (!eventListeners) {
|
|
49
50
|
return [];
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
return eventListeners.map(
|
|
53
|
-
return
|
|
53
|
+
return eventListeners.map(fn => {
|
|
54
|
+
return fn.call(this, data); // eslint-disable-line
|
|
54
55
|
});
|
|
55
56
|
}
|
|
56
57
|
|
|
@@ -67,24 +68,17 @@ class EventProvider {
|
|
|
67
68
|
|
|
68
69
|
isHandlerAttached(eventName, fnFunction) {
|
|
69
70
|
const eventRegistry = this._eventRegistry;
|
|
70
|
-
const eventListeners = eventRegistry
|
|
71
|
+
const eventListeners = eventRegistry.get(eventName);
|
|
71
72
|
|
|
72
73
|
if (!eventListeners) {
|
|
73
74
|
return false;
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
const event = eventListeners[i];
|
|
78
|
-
if (event["function"] === fnFunction) { // eslint-disable-line
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return false;
|
|
77
|
+
return eventListeners.includes(fnFunction);
|
|
84
78
|
}
|
|
85
79
|
|
|
86
80
|
hasListeners(eventName) {
|
|
87
|
-
return !!this._eventRegistry
|
|
81
|
+
return !!this._eventRegistry.get(eventName);
|
|
88
82
|
}
|
|
89
83
|
}
|
|
90
84
|
|
package/dist/FeaturesRegistry.js
CHANGED
package/dist/FontFace.js
CHANGED
|
@@ -1,95 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
* CSS font face used for the texts provided by SAP.
|
|
3
|
-
*/
|
|
4
|
-
import createStyleInHead from "./util/createStyleInHead.js";
|
|
1
|
+
import { hasStyle, createStyle } from "./ManagedStyles.js";
|
|
5
2
|
import { getFeature } from "./FeaturesRegistry.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const font72RegularWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff?ui5-webcomponents`;
|
|
9
|
-
const font72RegularWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular.woff2?ui5-webcomponents`;
|
|
10
|
-
|
|
11
|
-
const font72RegularFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff?ui5-webcomponents`;
|
|
12
|
-
const font72RegularFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Regular-full.woff2?ui5-webcomponents`;
|
|
13
|
-
|
|
14
|
-
const font72BoldWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff?ui5-webcomponents`;
|
|
15
|
-
const font72BoldWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold.woff2?ui5-webcomponents`;
|
|
16
|
-
|
|
17
|
-
const font72BoldFullWoff = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff?ui5-webcomponents`;
|
|
18
|
-
const font72BoldFullWoff2 = `https://ui5.sap.com/sdk/resources/sap/ui/core/themes/sap_fiori_3/fonts/72-Bold-full.woff2?ui5-webcomponents`;
|
|
19
|
-
|
|
20
|
-
const fontFaceCSS = `
|
|
21
|
-
@font-face {
|
|
22
|
-
font-family: "72";
|
|
23
|
-
font-style: normal;
|
|
24
|
-
font-weight: 400;
|
|
25
|
-
src: local("72"),
|
|
26
|
-
url(${font72RegularWoff2}) format("woff2"),
|
|
27
|
-
url(${font72RegularWoff}) format("woff");
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
@font-face {
|
|
31
|
-
font-family: "72full";
|
|
32
|
-
font-style: normal;
|
|
33
|
-
font-weight: 400;
|
|
34
|
-
src: local('72-full'),
|
|
35
|
-
url(${font72RegularFullWoff2}) format("woff2"),
|
|
36
|
-
url(${font72RegularFullWoff}) format("woff");
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
@font-face {
|
|
41
|
-
font-family: "72";
|
|
42
|
-
font-style: normal;
|
|
43
|
-
font-weight: 700;
|
|
44
|
-
src: local('72-Bold'),
|
|
45
|
-
url(${font72BoldWoff2}) format("woff2"),
|
|
46
|
-
url(${font72BoldWoff}) format("woff");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
@font-face {
|
|
50
|
-
font-family: "72full";
|
|
51
|
-
font-style: normal;
|
|
52
|
-
font-weight: 700;
|
|
53
|
-
src: local('72-Bold-full'),
|
|
54
|
-
url(${font72BoldFullWoff2}) format("woff2"),
|
|
55
|
-
url(${font72BoldFullWoff}) format("woff");
|
|
56
|
-
}
|
|
57
|
-
`;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Some diacritics are supported by the 72 font:
|
|
61
|
-
* * Grave
|
|
62
|
-
* * Acute
|
|
63
|
-
* * Circumflex
|
|
64
|
-
* * Tilde
|
|
65
|
-
*
|
|
66
|
-
* However, the following diacritics and the combination of multiple diacritics (including the supported ones) are not supported:
|
|
67
|
-
* * Breve
|
|
68
|
-
* * Horn
|
|
69
|
-
* * Dot below
|
|
70
|
-
* * Hook above
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* Override for the characters that aren't covered by the '72' font to other system fonts
|
|
74
|
-
*
|
|
75
|
-
* U+0102-0103: A and a with Breve
|
|
76
|
-
* U+01A0-01A1: O and o with Horn
|
|
77
|
-
* U+01AF-01B0: U and u with Horn
|
|
78
|
-
* U+1EA0-1EB7: A and a with diacritics that are not supported by the font and combination of multiple diacritics
|
|
79
|
-
* U+1EB8-1EC7: E and e with diacritics that are not supported by the font and combination of multiple diacritics
|
|
80
|
-
* U+1EC8-1ECB: I and i with diacritics that are not supported by the font and combination of multiple diacritics
|
|
81
|
-
* U+1ECC-1EE3: O and o with diacritics that are not supported by the font and combination of multiple diacritics
|
|
82
|
-
* U+1EE4-1EF1: U and u with diacritics that are not supported by the font and combination of multiple diacritics
|
|
83
|
-
* U+1EF4-1EF7: Y and y with diacritics that are not supported by the font and combination of multiple diacritics
|
|
84
|
-
*
|
|
85
|
-
*/
|
|
86
|
-
const overrideFontFaceCSS = `
|
|
87
|
-
@font-face {
|
|
88
|
-
font-family: '72override';
|
|
89
|
-
unicode-range: U+0102-0103, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EB7, U+1EB8-1EC7, U+1EC8-1ECB, U+1ECC-1EE3, U+1EE4-1EF1, U+1EF4-1EF7;
|
|
90
|
-
src: local('Arial'), local('Helvetica'), local('sans-serif');
|
|
91
|
-
}
|
|
92
|
-
`;
|
|
3
|
+
import fontFaceCSS from "./generated/css/FontFace.css.js";
|
|
4
|
+
import overrideFontFaceCSS from "./generated/css/OverrideFontFace.css.js";
|
|
93
5
|
|
|
94
6
|
const insertFontFace = () => {
|
|
95
7
|
const OpenUI5Support = getFeature("OpenUI5Support");
|
|
@@ -104,14 +16,14 @@ const insertFontFace = () => {
|
|
|
104
16
|
};
|
|
105
17
|
|
|
106
18
|
const insertMainFontFace = () => {
|
|
107
|
-
if (!
|
|
108
|
-
|
|
19
|
+
if (!hasStyle("data-ui5-font-face")) {
|
|
20
|
+
createStyle(fontFaceCSS, "data-ui5-font-face");
|
|
109
21
|
}
|
|
110
22
|
};
|
|
111
23
|
|
|
112
24
|
const insertOverrideFontFace = () => {
|
|
113
|
-
if (!
|
|
114
|
-
|
|
25
|
+
if (!hasStyle("data-ui5-font-face-override")) {
|
|
26
|
+
createStyle(overrideFontFaceCSS, "data-ui5-font-face-override");
|
|
115
27
|
}
|
|
116
28
|
};
|
|
117
29
|
|
|
@@ -12,8 +12,7 @@ let initialConfig = {
|
|
|
12
12
|
calendarType: null,
|
|
13
13
|
noConflict: false, // no URL
|
|
14
14
|
formatSettings: {},
|
|
15
|
-
|
|
16
|
-
assetsPath: "",
|
|
15
|
+
fetchDefaultLanguage: false,
|
|
17
16
|
};
|
|
18
17
|
|
|
19
18
|
/* General settings */
|
|
@@ -38,13 +37,13 @@ const getLanguage = () => {
|
|
|
38
37
|
};
|
|
39
38
|
|
|
40
39
|
/**
|
|
41
|
-
* Returns if the default language, that is inlined build time,
|
|
42
|
-
* should be
|
|
40
|
+
* Returns if the default language, that is inlined at build time,
|
|
41
|
+
* should be fetched over the network instead.
|
|
43
42
|
* @returns {Boolean}
|
|
44
43
|
*/
|
|
45
|
-
const
|
|
44
|
+
const getFetchDefaultLanguage = () => {
|
|
46
45
|
initConfiguration();
|
|
47
|
-
return initialConfig.
|
|
46
|
+
return initialConfig.fetchDefaultLanguage;
|
|
48
47
|
};
|
|
49
48
|
|
|
50
49
|
const getNoConflict = () => {
|
|
@@ -62,11 +61,6 @@ const getFormatSettings = () => {
|
|
|
62
61
|
return initialConfig.formatSettings;
|
|
63
62
|
};
|
|
64
63
|
|
|
65
|
-
const getAssetsPath = () => {
|
|
66
|
-
initConfiguration();
|
|
67
|
-
return initialConfig.assetsPath;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
64
|
const booleanMapping = new Map();
|
|
71
65
|
booleanMapping.set("true", true);
|
|
72
66
|
booleanMapping.set("false", false);
|
|
@@ -92,23 +86,47 @@ const parseConfigurationScript = () => {
|
|
|
92
86
|
const parseURLParameters = () => {
|
|
93
87
|
const params = new URLSearchParams(window.location.search);
|
|
94
88
|
|
|
89
|
+
// Process "sap-*" params first
|
|
95
90
|
params.forEach((value, key) => {
|
|
96
|
-
|
|
91
|
+
const parts = key.split("sap-").length;
|
|
92
|
+
if (parts === 0 || parts === key.split("sap-ui-").length) {
|
|
97
93
|
return;
|
|
98
94
|
}
|
|
99
95
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const param = key.split("sap-ui-")[1];
|
|
96
|
+
applyURLParam(key, value, "sap");
|
|
97
|
+
});
|
|
103
98
|
|
|
104
|
-
|
|
105
|
-
|
|
99
|
+
// Process "sap-ui-*" params
|
|
100
|
+
params.forEach((value, key) => {
|
|
101
|
+
if (!key.startsWith("sap-ui")) {
|
|
102
|
+
return;
|
|
106
103
|
}
|
|
107
104
|
|
|
108
|
-
|
|
105
|
+
applyURLParam(key, value, "sap-ui");
|
|
109
106
|
});
|
|
110
107
|
};
|
|
111
108
|
|
|
109
|
+
const normalizeParamValue = (param, value) => {
|
|
110
|
+
if (param === "theme" && value.includes("@")) { // the theme parameter might have @<URL-TO-THEME> in the value - strip this
|
|
111
|
+
return value.split("@")[0];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return value;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const applyURLParam = (key, value, paramType) => {
|
|
118
|
+
const lowerCaseValue = value.toLowerCase();
|
|
119
|
+
const param = key.split(`${paramType}-`)[1];
|
|
120
|
+
|
|
121
|
+
if (booleanMapping.has(value)) {
|
|
122
|
+
value = booleanMapping.get(lowerCaseValue);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
value = normalizeParamValue(param, value);
|
|
126
|
+
|
|
127
|
+
initialConfig[param] = value;
|
|
128
|
+
};
|
|
129
|
+
|
|
112
130
|
const applyOpenUI5Configuration = () => {
|
|
113
131
|
const OpenUI5Support = getFeature("OpenUI5Support");
|
|
114
132
|
if (!OpenUI5Support || !OpenUI5Support.isLoaded()) {
|
|
@@ -119,7 +137,6 @@ const applyOpenUI5Configuration = () => {
|
|
|
119
137
|
initialConfig = merge(initialConfig, OpenUI5Config);
|
|
120
138
|
};
|
|
121
139
|
|
|
122
|
-
|
|
123
140
|
const initConfiguration = () => {
|
|
124
141
|
if (initialized) {
|
|
125
142
|
return;
|
|
@@ -142,9 +159,8 @@ export {
|
|
|
142
159
|
getTheme,
|
|
143
160
|
getRTL,
|
|
144
161
|
getLanguage,
|
|
145
|
-
|
|
162
|
+
getFetchDefaultLanguage,
|
|
146
163
|
getNoConflict,
|
|
147
164
|
getCalendarType,
|
|
148
165
|
getFormatSettings,
|
|
149
|
-
getAssetsPath,
|
|
150
166
|
};
|
package/dist/Keys.js
CHANGED
|
@@ -111,6 +111,8 @@ const isSpace = event => (event.key ? (event.key === "Spacebar" || event.key ===
|
|
|
111
111
|
|
|
112
112
|
const isSpaceShift = event => (event.key ? (event.key === "Spacebar" || event.key === " ") : event.keyCode === KeyCodes.SPACE) && checkModifierKeys(event, false, false, true);
|
|
113
113
|
|
|
114
|
+
const isSpaceCtrl = event => (event.key ? (event.key === "Spacebar" || event.key === " ") : event.keyCode === KeyCodes.SPACE) && checkModifierKeys(event, true, false, false);
|
|
115
|
+
|
|
114
116
|
const isLeft = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && !hasModifierKeys(event);
|
|
115
117
|
|
|
116
118
|
const isRight = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && !hasModifierKeys(event);
|
|
@@ -127,14 +129,38 @@ const isUpCtrl = event => (event.key ? (event.key === "ArrowUp" || event.key ===
|
|
|
127
129
|
|
|
128
130
|
const isDownCtrl = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, true, false, false);
|
|
129
131
|
|
|
132
|
+
const isUpShift = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, false, false, true);
|
|
133
|
+
|
|
134
|
+
const isDownShift = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, false, false, true);
|
|
135
|
+
|
|
136
|
+
const isUpAlt = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, false, true, false);
|
|
137
|
+
|
|
138
|
+
const isDownAlt = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, false, true, false);
|
|
139
|
+
|
|
140
|
+
const isLeftShift = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && checkModifierKeys(event, false, false, true);
|
|
141
|
+
|
|
142
|
+
const isRightShift = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && checkModifierKeys(event, false, false, true);
|
|
143
|
+
|
|
144
|
+
const isLeftShiftCtrl = event => (event.key ? (event.key === "ArrowLeft" || event.key === "Left") : event.keyCode === KeyCodes.ARROW_LEFT) && checkModifierKeys(event, true, false, true);
|
|
145
|
+
|
|
146
|
+
const isRightShiftCtrl = event => (event.key ? (event.key === "ArrowRight" || event.key === "Right") : event.keyCode === KeyCodes.ARROW_RIGHT) && checkModifierKeys(event, true, false, true);
|
|
147
|
+
|
|
148
|
+
const isUpShiftCtrl = event => (event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_UP) && checkModifierKeys(event, true, false, true);
|
|
149
|
+
|
|
150
|
+
const isDownShiftCtrl = event => (event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, true, false, true);
|
|
151
|
+
|
|
130
152
|
const isHome = event => (event.key ? event.key === "Home" : event.keyCode === KeyCodes.HOME) && !hasModifierKeys(event);
|
|
131
153
|
|
|
132
154
|
const isEnd = event => (event.key ? event.key === "End" : event.keyCode === KeyCodes.END) && !hasModifierKeys(event);
|
|
133
155
|
|
|
134
156
|
const isHomeCtrl = event => (event.key ? event.key === "Home" : event.keyCode === KeyCodes.HOME) && checkModifierKeys(event, true, false, false);
|
|
135
157
|
|
|
158
|
+
const isHomeShift = event => (event.key ? event.key === "Home" : event.keyCode === KeyCodes.HOME) && checkModifierKeys(event, false, false, true);
|
|
159
|
+
|
|
136
160
|
const isEndCtrl = event => (event.key ? event.key === "End" : event.keyCode === KeyCodes.END) && checkModifierKeys(event, true, false, false);
|
|
137
161
|
|
|
162
|
+
const isEndShift = event => (event.key ? event.key === "End" : event.keyCode === KeyCodes.END) && checkModifierKeys(event, false, false, true);
|
|
163
|
+
|
|
138
164
|
const isEscape = event => (event.key ? event.key === "Escape" || event.key === "Esc" : event.keyCode === KeyCodes.ESCAPE) && !hasModifierKeys(event);
|
|
139
165
|
|
|
140
166
|
const isTabNext = event => (event.key ? event.key === "Tab" : event.keyCode === KeyCodes.TAB) && !hasModifierKeys(event);
|
|
@@ -145,14 +171,24 @@ const isBackSpace = event => (event.key ? event.key === "Backspace" : event.keyC
|
|
|
145
171
|
|
|
146
172
|
const isDelete = event => (event.key ? event.key === "Delete" : event.keyCode === KeyCodes.DELETE) && !hasModifierKeys(event);
|
|
147
173
|
|
|
174
|
+
const isDeleteShift = event => (event.key ? event.key === "Delete" : event.keyCode === KeyCodes.DELETE) && checkModifierKeys(event, false, false, true);
|
|
175
|
+
|
|
176
|
+
const isInsertShift = event => (event.key ? event.key === "Insert" : event.keyCode === KeyCodes.DELETE) && checkModifierKeys(event, false, false, true);
|
|
177
|
+
|
|
178
|
+
const isInsertCtrl = event => (event.key ? event.key === "Insert" : event.keyCode === KeyCodes.DELETE) && checkModifierKeys(event, true, false, false);
|
|
179
|
+
|
|
148
180
|
const isPageUp = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && !hasModifierKeys(event);
|
|
149
181
|
|
|
150
182
|
const isPageDown = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && !hasModifierKeys(event);
|
|
151
183
|
|
|
152
184
|
const isPageUpShift = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, false, false, true);
|
|
153
185
|
|
|
186
|
+
const isPageUpAlt = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, false, true, false);
|
|
187
|
+
|
|
154
188
|
const isPageDownShift = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, false, false, true);
|
|
155
189
|
|
|
190
|
+
const isPageDownAlt = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, false, true, false);
|
|
191
|
+
|
|
156
192
|
const isPageUpShiftCtrl = event => (event.key ? event.key === "PageUp" : event.keyCode === KeyCodes.PAGE_UP) && checkModifierKeys(event, true, false, true);
|
|
157
193
|
|
|
158
194
|
const isPageDownShiftCtrl = event => (event.key ? event.key === "PageDown" : event.keyCode === KeyCodes.PAGE_DOWN) && checkModifierKeys(event, true, false, true);
|
|
@@ -175,10 +211,24 @@ const isF4 = event => {
|
|
|
175
211
|
|
|
176
212
|
const isF4Shift = event => (event.key ? event.key === "F4" : event.keyCode === KeyCodes.F4) && checkModifierKeys(event, false, false, true);
|
|
177
213
|
|
|
214
|
+
const isF6Next = event => ((event.key ? event.key === "F6" : event.keyCode === KeyCodes.F6) && checkModifierKeys(event, false, false, false))
|
|
215
|
+
|| ((event.key ? (event.key === "ArrowDown" || event.key === "Down") : event.keyCode === KeyCodes.ARROW_DOWN) && checkModifierKeys(event, true, true, false));
|
|
216
|
+
|
|
217
|
+
const isF6Previous = event => ((event.key ? event.key === "F6" : event.keyCode === KeyCodes.F6) && checkModifierKeys(event, false, false, true))
|
|
218
|
+
|| ((event.key ? (event.key === "ArrowUp" || event.key === "Up") : event.keyCode === KeyCodes.ARROW_Up) && checkModifierKeys(event, true, true, false));
|
|
219
|
+
|
|
220
|
+
const isF7 = event => (event.key ? event.key === "F7" : event.keyCode === KeyCodes.F7) && !hasModifierKeys(event);
|
|
221
|
+
|
|
178
222
|
const isShowByArrows = event => {
|
|
179
223
|
return ((event.key === "ArrowDown" || event.key === "Down") || (event.key === "ArrowUp" || event.key === "Up")) && checkModifierKeys(event, /* Ctrl */ false, /* Alt */ true, /* Shift */ false);
|
|
180
224
|
};
|
|
181
225
|
|
|
226
|
+
const isShift = event => event.key === "Shift" || event.keyCode === KeyCodes.SHIFT;
|
|
227
|
+
|
|
228
|
+
const isCtrlA = event => ((event.key === "A" || event.key === "a") || event.which === KeyCodes.A) && checkModifierKeys(event, true, false, false);
|
|
229
|
+
|
|
230
|
+
const isCtrlV = event => ((event.key === "V" || event.key === "v") || event.which === KeyCodes.V) && checkModifierKeys(event, true, false, false);
|
|
231
|
+
|
|
182
232
|
const hasModifierKeys = event => event.shiftKey || event.altKey || getCtrlKey(event);
|
|
183
233
|
|
|
184
234
|
const getCtrlKey = event => !!(event.metaKey || event.ctrlKey); // double negation doesn't have effect on boolean but ensures null and undefined are equivalent to false.
|
|
@@ -190,6 +240,7 @@ export {
|
|
|
190
240
|
isEnterShift,
|
|
191
241
|
isSpace,
|
|
192
242
|
isSpaceShift,
|
|
243
|
+
isSpaceCtrl,
|
|
193
244
|
isLeft,
|
|
194
245
|
isRight,
|
|
195
246
|
isUp,
|
|
@@ -198,12 +249,24 @@ export {
|
|
|
198
249
|
isRightCtrl,
|
|
199
250
|
isUpCtrl,
|
|
200
251
|
isDownCtrl,
|
|
252
|
+
isUpShift,
|
|
253
|
+
isDownShift,
|
|
254
|
+
isUpAlt,
|
|
255
|
+
isDownAlt,
|
|
256
|
+
isLeftShift,
|
|
257
|
+
isRightShift,
|
|
258
|
+
isLeftShiftCtrl,
|
|
259
|
+
isRightShiftCtrl,
|
|
260
|
+
isUpShiftCtrl,
|
|
261
|
+
isDownShiftCtrl,
|
|
201
262
|
isHome,
|
|
202
263
|
isEnd,
|
|
203
264
|
isPlus,
|
|
204
265
|
isMinus,
|
|
205
266
|
isHomeCtrl,
|
|
206
267
|
isEndCtrl,
|
|
268
|
+
isHomeShift,
|
|
269
|
+
isEndShift,
|
|
207
270
|
isEscape,
|
|
208
271
|
isTabNext,
|
|
209
272
|
isTabPrevious,
|
|
@@ -212,10 +275,21 @@ export {
|
|
|
212
275
|
isShow,
|
|
213
276
|
isF4,
|
|
214
277
|
isF4Shift,
|
|
278
|
+
isF6Previous,
|
|
279
|
+
isF6Next,
|
|
280
|
+
isF7,
|
|
215
281
|
isPageUp,
|
|
216
282
|
isPageDown,
|
|
217
283
|
isPageUpShift,
|
|
284
|
+
isPageUpAlt,
|
|
218
285
|
isPageDownShift,
|
|
286
|
+
isPageDownAlt,
|
|
219
287
|
isPageUpShiftCtrl,
|
|
220
288
|
isPageDownShiftCtrl,
|
|
289
|
+
isShift,
|
|
290
|
+
isCtrlA,
|
|
291
|
+
isCtrlV,
|
|
292
|
+
isDeleteShift,
|
|
293
|
+
isInsertShift,
|
|
294
|
+
isInsertCtrl,
|
|
221
295
|
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import createStyleInHead from "./util/createStyleInHead.js";
|
|
2
|
+
import createLinkInHead from "./util/createLinkInHead.js";
|
|
3
|
+
import { shouldUseLinks, getUrl } from "./CSP.js";
|
|
4
|
+
|
|
5
|
+
const getStyleId = (name, value) => {
|
|
6
|
+
return value ? `${name}|${value}` : name;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const createStyle = (data, name, value = "") => {
|
|
10
|
+
const content = typeof data === "string" ? data : data.content;
|
|
11
|
+
|
|
12
|
+
if (shouldUseLinks()) {
|
|
13
|
+
const attributes = {};
|
|
14
|
+
attributes[name] = value;
|
|
15
|
+
const href = getUrl(data.packageName, data.fileName);
|
|
16
|
+
createLinkInHead(href, attributes);
|
|
17
|
+
} else if (document.adoptedStyleSheets) {
|
|
18
|
+
const stylesheet = new CSSStyleSheet();
|
|
19
|
+
stylesheet.replaceSync(content);
|
|
20
|
+
stylesheet._ui5StyleId = getStyleId(name, value); // set an id so that we can find the style later
|
|
21
|
+
document.adoptedStyleSheets = [...document.adoptedStyleSheets, stylesheet];
|
|
22
|
+
} else {
|
|
23
|
+
const attributes = {};
|
|
24
|
+
attributes[name] = value;
|
|
25
|
+
createStyleInHead(content, attributes);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const updateStyle = (data, name, value = "") => {
|
|
30
|
+
const content = typeof data === "string" ? data : data.content;
|
|
31
|
+
|
|
32
|
+
if (shouldUseLinks()) {
|
|
33
|
+
document.querySelector(`head>link[${name}="${value}"]`).href = getUrl(data.packageName, data.fileName);
|
|
34
|
+
} else if (document.adoptedStyleSheets) {
|
|
35
|
+
document.adoptedStyleSheets.find(sh => sh._ui5StyleId === getStyleId(name, value)).replaceSync(content || "");
|
|
36
|
+
} else {
|
|
37
|
+
document.querySelector(`head>style[${name}="${value}"]`).textContent = content || "";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const hasStyle = (name, value = "") => {
|
|
42
|
+
if (shouldUseLinks()) {
|
|
43
|
+
return !!document.querySelector(`head>link[${name}="${value}"]`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (document.adoptedStyleSheets) {
|
|
47
|
+
return !!document.adoptedStyleSheets.find(sh => sh._ui5StyleId === getStyleId(name, value));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return !!document.querySelector(`head>style[${name}="${value}"]`);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const removeStyle = (name, value = "") => {
|
|
54
|
+
if (shouldUseLinks()) {
|
|
55
|
+
const linkElement = document.querySelector(`head>link[${name}="${value}"]`);
|
|
56
|
+
if (linkElement) {
|
|
57
|
+
linkElement.parentElement.removeChild(linkElement);
|
|
58
|
+
}
|
|
59
|
+
} else if (document.adoptedStyleSheets) {
|
|
60
|
+
document.adoptedStyleSheets = document.adoptedStyleSheets.filter(sh => sh._ui5StyleId !== getStyleId(name, value));
|
|
61
|
+
} else {
|
|
62
|
+
const styleElement = document.querySelector(`head > style[${name}="${value}"]`);
|
|
63
|
+
if (styleElement) {
|
|
64
|
+
styleElement.parentElement.removeChild(styleElement);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const createOrUpdateStyle = (data, name, value = "") => {
|
|
70
|
+
if (hasStyle(name, value)) {
|
|
71
|
+
updateStyle(data, name, value);
|
|
72
|
+
} else {
|
|
73
|
+
createStyle(data, name, value);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export {
|
|
78
|
+
createStyle,
|
|
79
|
+
hasStyle,
|
|
80
|
+
updateStyle,
|
|
81
|
+
removeStyle,
|
|
82
|
+
createOrUpdateStyle,
|
|
83
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
const querySets = {};
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Initializes a screen width media query range set.
|
|
5
|
+
*
|
|
6
|
+
* This initialization step makes the range set ready to be used for one of the other functions in namespace <code>MediaRange</code>.
|
|
7
|
+
*
|
|
8
|
+
* A range set can be defined as shown in the following example:
|
|
9
|
+
* <pre>
|
|
10
|
+
* MediaRange.initRangeSet("MyRangeSet", [200, 400], ["Small", "Medium", "Large"]);
|
|
11
|
+
* </pre>
|
|
12
|
+
* This example defines the following named ranges:
|
|
13
|
+
* <ul>
|
|
14
|
+
* <li><code>"Small"</code>: For screens smaller than 200 pixels.</li>
|
|
15
|
+
* <li><code>"Medium"</code>: For screens greater than or equal to 200 pixels and smaller than 400 pixels.</li>
|
|
16
|
+
* <li><code>"Large"</code>: For screens greater than or equal to 400 pixels.</li>
|
|
17
|
+
* </ul>
|
|
18
|
+
*
|
|
19
|
+
* @param {string} name The name of the range set to be initialized.
|
|
20
|
+
* The name must be a valid id and consist only of letters and numeric digits.
|
|
21
|
+
*
|
|
22
|
+
* @param {int[]} [borders] The range borders
|
|
23
|
+
*
|
|
24
|
+
* @param {string[]} [names] The names of the ranges. The names must be a valid id and consist only of letters and digits.
|
|
25
|
+
*
|
|
26
|
+
* @name MediaRange.initRangeSet
|
|
27
|
+
* @function
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
const _initRangeSet = (name, borders, names) => {
|
|
31
|
+
querySets[name] = {
|
|
32
|
+
borders,
|
|
33
|
+
names,
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Returns information about the current active range of the range set with the given name.
|
|
39
|
+
*
|
|
40
|
+
* If the optional parameter <code>width</code> is given, the active range will be determined for that width,
|
|
41
|
+
* otherwise it is determined for the current window size.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} name The name of the range set. The range set must be initialized beforehand ({@link MediaRange.initRangeSet})
|
|
44
|
+
* @param {int} [width] An optional width, based on which the range should be determined;
|
|
45
|
+
* If <code>width</code> is not provided, the window size will be used.
|
|
46
|
+
* @returns {string} The name of the current active interval of the range set.
|
|
47
|
+
*
|
|
48
|
+
* @name MediaRange.getCurrentRange
|
|
49
|
+
* @function
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
const _getCurrentRange = (name, width = window.innerWidth) => {
|
|
53
|
+
const querySet = querySets[name];
|
|
54
|
+
let i = 0;
|
|
55
|
+
|
|
56
|
+
if (!querySet) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
for (; i < querySet.borders.length; i++) {
|
|
61
|
+
if (width < querySet.borders[i]) {
|
|
62
|
+
return querySet.names[i];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return querySet.names[i];
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Enumeration containing the names and settings of predefined screen width media query range sets.
|
|
71
|
+
*
|
|
72
|
+
* @namespace
|
|
73
|
+
* @name MediaRange.RANGESETS
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
const RANGESETS = {
|
|
77
|
+
/**
|
|
78
|
+
* A 4-step range set (S-M-L-XL).
|
|
79
|
+
*
|
|
80
|
+
* The ranges of this set are:
|
|
81
|
+
* <ul>
|
|
82
|
+
* <li><code>"S"</code>: For screens smaller than 600 pixels.</li>
|
|
83
|
+
* <li><code>"M"</code>: For screens greater than or equal to 600 pixels and smaller than 1024 pixels.</li>
|
|
84
|
+
* <li><code>"L"</code>: For screens greater than or equal to 1024 pixels and smaller than 1440 pixels.</li>
|
|
85
|
+
* <li><code>"XL"</code>: For screens greater than or equal to 1440 pixels.</li>
|
|
86
|
+
* </ul>
|
|
87
|
+
*
|
|
88
|
+
* @name MediaRange.RANGESETS.RANGE_4STEPS
|
|
89
|
+
* @public
|
|
90
|
+
*/
|
|
91
|
+
RANGE_4STEPS: "4Step",
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* API for screen width changes.
|
|
96
|
+
*
|
|
97
|
+
* @namespace
|
|
98
|
+
* @name MediaRange
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
const MediaRange = {
|
|
102
|
+
RANGESETS,
|
|
103
|
+
initRangeSet: _initRangeSet,
|
|
104
|
+
getCurrentRange: _getCurrentRange,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
MediaRange.initRangeSet(MediaRange.RANGESETS.RANGE_4STEPS, [600, 1024, 1440], ["S", "M", "L", "XL"]);
|
|
108
|
+
|
|
109
|
+
export default MediaRange;
|