@ui5/webcomponents-base 0.0.0-78035f8e7 → 0.0.0-7e7d9ea6f

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.
Files changed (355) hide show
  1. package/.eslintignore +3 -0
  2. package/CHANGELOG.md +362 -0
  3. package/README.md +53 -7
  4. package/bundle.esm.js +20 -20
  5. package/dist/AssetRegistry.js +8 -7
  6. package/dist/Boot.js +59 -0
  7. package/dist/CSP.js +59 -0
  8. package/dist/CustomElementsRegistry.js +60 -4
  9. package/dist/CustomElementsScope.js +30 -0
  10. package/dist/CustomElementsScopeUtils.js +108 -0
  11. package/dist/DOMObserver.js +65 -0
  12. package/dist/Device.js +71 -773
  13. package/dist/EventProvider.js +30 -26
  14. package/dist/FeaturesRegistry.js +4 -1
  15. package/dist/FontFace.js +19 -62
  16. package/dist/InitialConfiguration.js +43 -8
  17. package/dist/Keys.js +125 -0
  18. package/dist/ManagedStyles.js +83 -0
  19. package/dist/MediaRange.js +109 -0
  20. package/dist/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  21. package/dist/Render.js +175 -0
  22. package/dist/RenderQueue.js +41 -17
  23. package/dist/RenderScheduler.js +24 -158
  24. package/dist/Runtimes.js +107 -0
  25. package/dist/StaticArea.js +1 -29
  26. package/dist/StaticAreaItem.js +58 -62
  27. package/dist/SystemCSSVars.js +4 -25
  28. package/dist/Theming.js +2 -1
  29. package/dist/UI5Element.js +386 -354
  30. package/dist/UI5ElementMetadata.js +187 -22
  31. package/dist/asset-registries/Icons.js +117 -13
  32. package/dist/asset-registries/Illustrations.js +30 -0
  33. package/dist/asset-registries/LocaleData.js +105 -66
  34. package/dist/asset-registries/Themes.js +29 -34
  35. package/dist/asset-registries/i18n.js +64 -47
  36. package/dist/assets/bundle.esm.691f93f5.js +43 -0
  37. package/dist/assets-meta/IconCollectionsAlias.js +18 -0
  38. package/dist/config/AnimationMode.js +11 -1
  39. package/dist/config/Icons.js +52 -0
  40. package/dist/config/Language.js +33 -6
  41. package/dist/config/Theme.js +25 -0
  42. package/dist/css/BusyIndicator.css +80 -0
  43. package/dist/css/FontFace.css +75 -0
  44. package/dist/css/OverrideFontFace.css +32 -0
  45. package/dist/css/SystemCSSVars.css +17 -0
  46. package/dist/delegate/ItemNavigation.js +244 -170
  47. package/dist/delegate/ResizeHandler.js +78 -37
  48. package/dist/delegate/ScrollEnablement.js +49 -20
  49. package/dist/features/F6Navigation.js +110 -0
  50. package/dist/features/OpenUI5Enablement.js +119 -0
  51. package/dist/features/OpenUI5Support.js +42 -7
  52. package/dist/generated/AssetParameters.js +1 -1
  53. package/dist/generated/VersionInfo.js +10 -0
  54. package/dist/generated/css/BusyIndicator.css.js +5 -0
  55. package/dist/generated/css/FontFace.css.js +5 -0
  56. package/dist/generated/css/OverrideFontFace.css.js +5 -0
  57. package/dist/generated/css/SystemCSSVars.css.js +5 -0
  58. package/dist/i18nBundle.js +38 -4
  59. package/dist/locale/applyDirection.js +6 -4
  60. package/dist/locale/directionChange.js +32 -0
  61. package/dist/locale/getEffectiveDir.js +28 -0
  62. package/dist/locale/getLocale.js +12 -2
  63. package/dist/locale/languageChange.js +1 -1
  64. package/dist/renderer/LitRenderer.js +43 -7
  65. package/dist/renderer/directives/style-map.js +72 -0
  66. package/dist/renderer/executeTemplate.js +34 -0
  67. package/dist/sap/base/Log.js +241 -0
  68. package/dist/sap/base/assert.js +8 -0
  69. package/dist/sap/base/security/URLListValidator.js +148 -0
  70. package/dist/sap/base/security/encodeCSS.js +14 -0
  71. package/dist/sap/base/security/encodeXML.js +23 -0
  72. package/dist/sap/base/security/sanitizeHTML.js +16 -0
  73. package/dist/sap/base/strings/toHex.js +8 -0
  74. package/dist/sap/base/util/now.js +7 -0
  75. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3585 -0
  76. package/dist/theming/CustomStyle.js +47 -6
  77. package/dist/theming/ThemeLoaded.js +22 -0
  78. package/dist/theming/applyTheme.js +13 -15
  79. package/dist/theming/getConstructableStyle.js +15 -10
  80. package/dist/theming/getEffectiveLinksHrefs.js +27 -0
  81. package/dist/theming/getEffectiveStyle.js +32 -8
  82. package/dist/theming/getStylesString.js +15 -0
  83. package/dist/theming/getThemeDesignerTheme.js +25 -5
  84. package/dist/theming/preloadLinks.js +23 -0
  85. package/dist/types/CSSColor.js +9 -0
  86. package/dist/types/CalendarType.js +1 -1
  87. package/dist/types/DataType.js +13 -1
  88. package/dist/types/Float.js +4 -0
  89. package/dist/types/Integer.js +4 -0
  90. package/dist/types/InvisibleMessageMode.js +30 -0
  91. package/dist/types/ItemNavigationBehavior.js +2 -7
  92. package/dist/types/PopupState.js +1 -1
  93. package/dist/types/ValueState.js +1 -1
  94. package/dist/updateShadowRoot.js +29 -0
  95. package/dist/util/AriaLabelHelper.js +41 -0
  96. package/dist/util/Caret.js +32 -0
  97. package/dist/util/ColorConversion.js +398 -0
  98. package/dist/util/FocusableElements.js +22 -9
  99. package/dist/util/HTMLSanitizer.js +7 -0
  100. package/dist/util/InvisibleMessage.js +69 -0
  101. package/dist/util/PopupUtils.js +93 -0
  102. package/dist/util/SlotsHelper.js +43 -0
  103. package/dist/util/TabbableElements.js +5 -1
  104. package/dist/util/arraysAreEqual.js +15 -0
  105. package/dist/util/clamp.js +12 -0
  106. package/dist/util/createLinkInHead.js +19 -0
  107. package/dist/util/debounce.js +17 -0
  108. package/dist/util/escapeRegex.js +10 -0
  109. package/dist/util/generateHighlightedMarkup.js +42 -0
  110. package/dist/util/getActiveElement.js +11 -0
  111. package/dist/util/getClassCopy.js +10 -0
  112. package/dist/util/getEffectiveContentDensity.js +5 -0
  113. package/dist/util/getNormalizedTarget.js +16 -0
  114. package/dist/util/isDefaultSlotProvided.js +11 -0
  115. package/dist/util/isElementInView.js +15 -0
  116. package/dist/util/isNodeHidden.js +1 -1
  117. package/dist/util/isNodeTabbable.js +4 -4
  118. package/dist/util/isValidPropertyName.js +6 -5
  119. package/hash.txt +1 -0
  120. package/index.js +1 -1
  121. package/lib/generate-asset-parameters/index.js +8 -5
  122. package/lib/generate-styles/index.js +26 -0
  123. package/lib/generate-version-info/index.js +32 -0
  124. package/package-scripts.js +37 -28
  125. package/package.json +20 -13
  126. package/src/AssetRegistry.js +8 -7
  127. package/src/Boot.js +59 -0
  128. package/src/CSP.js +59 -0
  129. package/src/CustomElementsRegistry.js +60 -4
  130. package/src/CustomElementsScope.js +30 -0
  131. package/src/CustomElementsScopeUtils.js +108 -0
  132. package/src/DOMObserver.js +65 -0
  133. package/src/Device.js +71 -773
  134. package/src/EventProvider.js +30 -26
  135. package/src/FeaturesRegistry.js +4 -1
  136. package/src/FontFace.js +19 -62
  137. package/src/InitialConfiguration.js +43 -8
  138. package/src/Keys.js +125 -0
  139. package/src/ManagedStyles.js +83 -0
  140. package/src/MediaRange.js +109 -0
  141. package/src/{util/parseProperties.js → PropertiesFileFormat.js} +6 -0
  142. package/src/Render.js +175 -0
  143. package/src/RenderQueue.js +41 -17
  144. package/src/RenderScheduler.js +24 -158
  145. package/src/Runtimes.js +107 -0
  146. package/src/StaticArea.js +1 -29
  147. package/src/StaticAreaItem.js +58 -62
  148. package/src/SystemCSSVars.js +4 -25
  149. package/src/Theming.js +2 -1
  150. package/src/UI5Element.js +386 -354
  151. package/src/UI5ElementMetadata.js +187 -22
  152. package/src/asset-registries/Icons.js +117 -13
  153. package/src/asset-registries/Illustrations.js +30 -0
  154. package/src/asset-registries/LocaleData.js +105 -66
  155. package/src/asset-registries/Themes.js +29 -34
  156. package/src/asset-registries/i18n.js +64 -47
  157. package/src/assets-meta/IconCollectionsAlias.js +18 -0
  158. package/src/config/AnimationMode.js +11 -1
  159. package/src/config/Icons.js +52 -0
  160. package/src/config/Language.js +33 -6
  161. package/src/config/Theme.js +25 -0
  162. package/src/css/BusyIndicator.css +80 -0
  163. package/src/css/FontFace.css +75 -0
  164. package/src/css/OverrideFontFace.css +32 -0
  165. package/src/css/SystemCSSVars.css +17 -0
  166. package/src/delegate/ItemNavigation.js +244 -170
  167. package/src/delegate/ResizeHandler.js +78 -37
  168. package/src/delegate/ScrollEnablement.js +49 -20
  169. package/src/features/F6Navigation.js +110 -0
  170. package/src/features/OpenUI5Enablement.js +119 -0
  171. package/src/features/OpenUI5Support.js +42 -7
  172. package/src/i18nBundle.js +38 -4
  173. package/src/locale/applyDirection.js +6 -4
  174. package/src/locale/directionChange.js +32 -0
  175. package/src/locale/getEffectiveDir.js +28 -0
  176. package/src/locale/getLocale.js +12 -2
  177. package/src/locale/languageChange.js +1 -1
  178. package/src/renderer/LitRenderer.js +43 -7
  179. package/src/renderer/directives/style-map.js +72 -0
  180. package/src/renderer/executeTemplate.js +34 -0
  181. package/src/theming/CustomStyle.js +47 -6
  182. package/src/theming/ThemeLoaded.js +22 -0
  183. package/src/theming/applyTheme.js +13 -15
  184. package/src/theming/getConstructableStyle.js +15 -10
  185. package/src/theming/getEffectiveLinksHrefs.js +27 -0
  186. package/src/theming/getEffectiveStyle.js +32 -8
  187. package/src/theming/getStylesString.js +15 -0
  188. package/src/theming/getThemeDesignerTheme.js +25 -5
  189. package/src/theming/preloadLinks.js +23 -0
  190. package/src/types/CSSColor.js +9 -0
  191. package/src/types/CalendarType.js +1 -1
  192. package/src/types/DataType.js +13 -1
  193. package/src/types/Float.js +4 -0
  194. package/src/types/Integer.js +4 -0
  195. package/src/types/InvisibleMessageMode.js +30 -0
  196. package/src/types/ItemNavigationBehavior.js +2 -7
  197. package/src/types/PopupState.js +1 -1
  198. package/src/types/ValueState.js +1 -1
  199. package/src/updateShadowRoot.js +29 -0
  200. package/src/util/AriaLabelHelper.js +41 -0
  201. package/src/util/Caret.js +32 -0
  202. package/src/util/ColorConversion.js +398 -0
  203. package/src/util/FocusableElements.js +22 -9
  204. package/src/util/HTMLSanitizer.js +7 -0
  205. package/src/util/InvisibleMessage.js +69 -0
  206. package/src/util/PopupUtils.js +93 -0
  207. package/src/util/SlotsHelper.js +43 -0
  208. package/src/util/TabbableElements.js +5 -1
  209. package/src/util/arraysAreEqual.js +15 -0
  210. package/src/util/clamp.js +12 -0
  211. package/src/util/createLinkInHead.js +19 -0
  212. package/src/util/debounce.js +17 -0
  213. package/src/util/escapeRegex.js +10 -0
  214. package/src/util/generateHighlightedMarkup.js +42 -0
  215. package/src/util/getActiveElement.js +11 -0
  216. package/src/util/getClassCopy.js +10 -0
  217. package/src/util/getEffectiveContentDensity.js +5 -0
  218. package/src/util/getNormalizedTarget.js +16 -0
  219. package/src/util/isDefaultSlotProvided.js +11 -0
  220. package/src/util/isElementInView.js +15 -0
  221. package/src/util/isNodeHidden.js +1 -1
  222. package/src/util/isNodeTabbable.js +4 -4
  223. package/src/util/isValidPropertyName.js +6 -5
  224. package/used-modules.txt +10 -0
  225. package/bundle.es5.js +0 -28
  226. package/config/.eslintrc.js +0 -3
  227. package/config/rollup.config.js +0 -1
  228. package/dist/SVGIconRegistry.js +0 -62
  229. package/dist/boot.js +0 -34
  230. package/dist/compatibility/DOMObserver.js +0 -62
  231. package/dist/compatibility/patchNodeValue.js +0 -24
  232. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  233. package/dist/delegate/CustomResize.js +0 -78
  234. package/dist/delegate/NativeResize.js +0 -44
  235. package/dist/features/PropertiesFormatSupport.js +0 -8
  236. package/dist/features/browsersupport/Edge.js +0 -6
  237. package/dist/features/browsersupport/IE11.js +0 -41
  238. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  239. package/dist/renderer/ifDefined.js +0 -21
  240. package/dist/resources/bundle.es5.js +0 -212
  241. package/dist/resources/bundle.es5.js.map +0 -1
  242. package/dist/resources/bundle.esm.js +0 -129
  243. package/dist/resources/bundle.esm.js.map +0 -1
  244. package/dist/test-resources/assets/Themes.js +0 -13
  245. package/dist/test-resources/elements/Child.js +0 -35
  246. package/dist/test-resources/elements/Generic.js +0 -84
  247. package/dist/test-resources/elements/GenericExt.js +0 -26
  248. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  249. package/dist/test-resources/elements/Parent.js +0 -37
  250. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  251. package/dist/test-resources/pages/AllTestElements.html +0 -42
  252. package/dist/test-resources/pages/Configuration.html +0 -20
  253. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  254. package/dist/test-resources/pages/assets/messagebundle_de.properties +0 -1
  255. package/dist/test-resources/pages/assets/messagebundle_en.properties +0 -1
  256. package/dist/test-resources/pages/assets/messagebundle_es.properties +0 -1
  257. package/dist/test-resources/pages/assets/messagebundle_fr.properties +0 -1
  258. package/dist/test-resources/pages/i18n.html +0 -40
  259. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  260. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  261. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  262. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  263. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  264. package/dist/test-resources/specs/Theming.spec.js +0 -31
  265. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -258
  266. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -93
  267. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -101
  268. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  269. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  270. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  271. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  272. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  273. package/dist/theming/CSSVarsPonyfill.js +0 -24
  274. package/dist/theming/adaptCSSForIE.js +0 -90
  275. package/dist/theming/createComponentStyleTag.js +0 -49
  276. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  277. package/dist/thirdparty/Array.from.js +0 -16
  278. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  279. package/dist/thirdparty/Array.prototype.find.js +0 -46
  280. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  281. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  282. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  283. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  284. package/dist/thirdparty/Number.isInteger.js +0 -5
  285. package/dist/thirdparty/Number.isNaN.js +0 -1
  286. package/dist/thirdparty/Number.parseInt.js +0 -1
  287. package/dist/thirdparty/Object.assign.js +0 -31
  288. package/dist/thirdparty/Object.entries.js +0 -11
  289. package/dist/thirdparty/Symbol.js +0 -2
  290. package/dist/thirdparty/WeakSet.js +0 -27
  291. package/dist/thirdparty/es6-string-methods.js +0 -182
  292. package/dist/thirdparty/events-polyfills.js +0 -89
  293. package/dist/thirdparty/fetch.js +0 -1
  294. package/dist/thirdparty/template.js +0 -600
  295. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  296. package/dist/util/getEffectiveAriaLabelText.js +0 -28
  297. package/dist/util/isSlot.js +0 -3
  298. package/dist/webcomponentsjs/LICENSE.md +0 -19
  299. package/dist/webcomponentsjs/README.md +0 -229
  300. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  301. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  302. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  303. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  304. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  305. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  306. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  307. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  308. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  309. package/dist/webcomponentsjs/package.json +0 -46
  310. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  311. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  312. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  313. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  314. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  315. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  316. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  317. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  318. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  319. package/src/SVGIconRegistry.js +0 -62
  320. package/src/boot.js +0 -34
  321. package/src/compatibility/DOMObserver.js +0 -62
  322. package/src/compatibility/patchNodeValue.js +0 -24
  323. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  324. package/src/delegate/CustomResize.js +0 -78
  325. package/src/delegate/NativeResize.js +0 -44
  326. package/src/features/PropertiesFormatSupport.js +0 -8
  327. package/src/features/browsersupport/Edge.js +0 -6
  328. package/src/features/browsersupport/IE11.js +0 -41
  329. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  330. package/src/renderer/ifDefined.js +0 -21
  331. package/src/theming/CSSVarsPonyfill.js +0 -24
  332. package/src/theming/adaptCSSForIE.js +0 -90
  333. package/src/theming/createComponentStyleTag.js +0 -49
  334. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  335. package/src/thirdparty/Array.from.js +0 -16
  336. package/src/thirdparty/Array.prototype.fill.js +0 -44
  337. package/src/thirdparty/Array.prototype.find.js +0 -46
  338. package/src/thirdparty/Array.prototype.includes.js +0 -51
  339. package/src/thirdparty/Element.prototype.closest.js +0 -11
  340. package/src/thirdparty/Element.prototype.matches.js +0 -6
  341. package/src/thirdparty/Map.prototype.keys.js +0 -9
  342. package/src/thirdparty/Number.isInteger.js +0 -5
  343. package/src/thirdparty/Number.isNaN.js +0 -1
  344. package/src/thirdparty/Number.parseInt.js +0 -1
  345. package/src/thirdparty/Object.assign.js +0 -31
  346. package/src/thirdparty/Object.entries.js +0 -11
  347. package/src/thirdparty/Symbol.js +0 -2
  348. package/src/thirdparty/WeakSet.js +0 -27
  349. package/src/thirdparty/es6-string-methods.js +0 -182
  350. package/src/thirdparty/events-polyfills.js +0 -89
  351. package/src/thirdparty/fetch.js +0 -1
  352. package/src/thirdparty/template.js +0 -600
  353. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  354. package/src/util/getEffectiveAriaLabelText.js +0 -28
  355. package/src/util/isSlot.js +0 -3
@@ -0,0 +1,32 @@
1
+ import EventProvider from "../EventProvider.js";
2
+
3
+ const eventProvider = new EventProvider();
4
+ const DIR_CHANGE = "directionChange";
5
+
6
+ /**
7
+ * Attach a callback that will be executed whenever the application calls the "applyDirection" function
8
+ * @public
9
+ * @param listener
10
+ */
11
+ const attachDirectionChange = listener => {
12
+ eventProvider.attachEvent(DIR_CHANGE, listener);
13
+ };
14
+
15
+ /**
16
+ * Detach a callback that was passed with "attachDirectionChange"
17
+ * @public
18
+ * @param listener
19
+ */
20
+ const detachDirectionChange = listener => {
21
+ eventProvider.detachEvent(DIR_CHANGE, listener);
22
+ };
23
+
24
+ const fireDirectionChange = () => {
25
+ return eventProvider.fireEvent(DIR_CHANGE);
26
+ };
27
+
28
+ export {
29
+ attachDirectionChange,
30
+ detachDirectionChange,
31
+ fireDirectionChange,
32
+ };
@@ -0,0 +1,28 @@
1
+ import { getRTL } from "../config/RTL.js";
2
+
3
+ const GLOBAL_DIR_CSS_VAR = "--_ui5_dir";
4
+
5
+ const getEffectiveDir = element => {
6
+ const doc = window.document;
7
+ const dirValues = ["ltr", "rtl"]; // exclude "auto" and "" from all calculations
8
+ const locallyAppliedDir = getComputedStyle(element).getPropertyValue(GLOBAL_DIR_CSS_VAR);
9
+
10
+ // In that order, inspect the CSS Var (for modern browsers), the element itself, html and body (for IE fallback)
11
+ if (dirValues.includes(locallyAppliedDir)) {
12
+ return locallyAppliedDir;
13
+ }
14
+ if (dirValues.includes(element.dir)) {
15
+ return element.dir;
16
+ }
17
+ if (dirValues.includes(doc.documentElement.dir)) {
18
+ return doc.documentElement.dir;
19
+ }
20
+ if (dirValues.includes(doc.body.dir)) {
21
+ return doc.body.dir;
22
+ }
23
+
24
+ // Finally, check the configuration for explicitly set RTL or language-implied RTL
25
+ return getRTL() ? "rtl" : undefined;
26
+ };
27
+
28
+ export default getEffectiveDir;
@@ -2,10 +2,20 @@ import detectNavigatorLanguage from "../util/detectNavigatorLanguage.js";
2
2
  import { getLanguage as getConfigLanguage } from "../config/Language.js";
3
3
  import Locale from "./Locale.js";
4
4
 
5
+ const cache = new Map();
6
+
7
+ const getLocaleInstance = lang => {
8
+ if (!cache.has(lang)) {
9
+ cache.set(lang, new Locale(lang));
10
+ }
11
+
12
+ return cache.get(lang);
13
+ };
14
+
5
15
  const convertToLocaleOrNull = lang => {
6
16
  try {
7
17
  if (lang && typeof lang === "string") {
8
- return new Locale(lang);
18
+ return getLocaleInstance(lang);
9
19
  }
10
20
  } catch (e) {
11
21
  // ignore
@@ -22,7 +32,7 @@ const getLocale = lang => {
22
32
  }
23
33
 
24
34
  if (getConfigLanguage()) {
25
- return new Locale(getConfigLanguage());
35
+ return getLocaleInstance(getConfigLanguage());
26
36
  }
27
37
 
28
38
  return convertToLocaleOrNull(detectNavigatorLanguage());
@@ -12,7 +12,7 @@ const detachLanguageChange = listener => {
12
12
  };
13
13
 
14
14
  const fireLanguageChange = lang => {
15
- return eventProvider.fireEvent(LANG_CHANGE, lang);
15
+ return eventProvider.fireEventAsync(LANG_CHANGE, lang);
16
16
  };
17
17
 
18
18
  export {
@@ -1,16 +1,52 @@
1
- import { html, render } from "lit-html/lit-html.js";
1
+ import {
2
+ render,
3
+ html,
4
+ svg,
5
+ } from "lit-html";
6
+ import { getFeature } from "../FeaturesRegistry.js";
2
7
 
3
- const litRender = (templateResult, domNode, styles, { eventContext } = {}) => {
4
- if (styles) {
5
- templateResult = html`<style>${styles}</style>${templateResult}`;
8
+ const effectiveHtml = (...args) => {
9
+ const LitStatic = getFeature("LitStatic");
10
+ const fn = LitStatic ? LitStatic.html : html;
11
+ return fn(...args);
12
+ };
13
+
14
+ const effectiveSvg = (...args) => {
15
+ const LitStatic = getFeature("LitStatic");
16
+ const fn = LitStatic ? LitStatic.svg : svg;
17
+ return fn(...args);
18
+ };
19
+
20
+ const litRender = (templateResult, domNode, styleStrOrHrefsArr, forStaticArea, { host } = {}) => {
21
+ const OpenUI5Enablement = getFeature("OpenUI5Enablement");
22
+ if (OpenUI5Enablement && !forStaticArea) {
23
+ templateResult = OpenUI5Enablement.wrapTemplateResultInBusyMarkup(effectiveHtml, host, templateResult);
24
+ }
25
+
26
+ if (typeof styleStrOrHrefsArr === "string") {
27
+ templateResult = effectiveHtml`<style>${styleStrOrHrefsArr}</style>${templateResult}`;
28
+ } else if (Array.isArray(styleStrOrHrefsArr) && styleStrOrHrefsArr.length) {
29
+ templateResult = effectiveHtml`${styleStrOrHrefsArr.map(href => effectiveHtml`<link type="text/css" rel="stylesheet" href="${href}">`)}${templateResult}`;
6
30
  }
7
- render(templateResult, domNode, { eventContext });
31
+ render(templateResult, domNode, { host });
8
32
  };
9
33
 
10
- export { html, svg } from "lit-html/lit-html.js";
34
+ const scopeTag = (tag, tags, suffix) => {
35
+ const LitStatic = getFeature("LitStatic");
36
+ if (LitStatic) {
37
+ return LitStatic.unsafeStatic((tags || []).includes(tag) ? `${tag}-${suffix}` : tag);
38
+ }
39
+ };
40
+
41
+ export {
42
+ effectiveHtml as html,
43
+ effectiveSvg as svg,
44
+ };
45
+ export { scopeTag };
11
46
  export { repeat } from "lit-html/directives/repeat.js";
12
47
  export { classMap } from "lit-html/directives/class-map.js";
13
- export { styleMap } from "lit-html/directives/style-map.js";
48
+ export { styleMap } from "./directives/style-map.js";
49
+ export { ifDefined } from "lit-html/directives/if-defined.js";
14
50
  export { unsafeHTML } from "lit-html/directives/unsafe-html.js";
15
51
 
16
52
  export default litRender;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2018 Google LLC
4
+ * SPDX-License-Identifier: BSD-3-Clause
5
+ */
6
+
7
+ /**
8
+ * This is the original style-map.js directive from lit-html 2 with the only difference that "render" is not called even for the first rendering (update is used instead)
9
+ */
10
+
11
+ import { noChange } from 'lit-html';
12
+ import { directive, Directive, PartType, } from 'lit-html/directive.js';
13
+ class StyleMapDirective extends Directive {
14
+ constructor(partInfo) {
15
+ var _a;
16
+ super(partInfo);
17
+ if (partInfo.type !== PartType.ATTRIBUTE ||
18
+ partInfo.name !== 'style' ||
19
+ ((_a = partInfo.strings) === null || _a === void 0 ? void 0 : _a.length) > 2) {
20
+ throw new Error('The `styleMap` directive must be used in the `style` attribute ' +
21
+ 'and must be the only part in the attribute.');
22
+ }
23
+ }
24
+ render(styleInfo) {
25
+ return "";
26
+ }
27
+ update(part, [styleInfo]) {
28
+ const { style } = part.element;
29
+ if (this._previousStyleProperties === undefined) {
30
+ this._previousStyleProperties = new Set();
31
+ for (const name in styleInfo) {
32
+ this._previousStyleProperties.add(name);
33
+ }
34
+ // return this.render(styleInfo);
35
+ }
36
+ // Remove old properties that no longer exist in styleInfo
37
+ // We use forEach() instead of for-of so that re don't require down-level
38
+ // iteration.
39
+ this._previousStyleProperties.forEach((name) => {
40
+ // If the name isn't in styleInfo or it's null/undefined
41
+ if (styleInfo[name] == null) {
42
+ this._previousStyleProperties.delete(name);
43
+ if (name.includes('-')) {
44
+ style.removeProperty(name);
45
+ }
46
+ else {
47
+ // Note reset using empty string (vs null) as IE11 does not always
48
+ // reset via null (https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style#setting_styles)
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ style[name] = '';
51
+ }
52
+ }
53
+ });
54
+ // Add or update properties
55
+ for (const name in styleInfo) {
56
+ const value = styleInfo[name];
57
+ if (value != null) {
58
+ this._previousStyleProperties.add(name);
59
+ if (name.includes('-')) {
60
+ style.setProperty(name, value);
61
+ }
62
+ else {
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ style[name] = value;
65
+ }
66
+ }
67
+ }
68
+ return noChange;
69
+ }
70
+ }
71
+
72
+ export const styleMap = directive(StyleMapDirective);
@@ -0,0 +1,34 @@
1
+ import { getCustomElementsScopingSuffix, shouldScopeCustomElement } from "../CustomElementsScopeUtils.js";
2
+
3
+ /**
4
+ * Runs a component's template with the component's current state, while also scoping HTML
5
+ *
6
+ * @param template - the template to execute
7
+ * @param component - the component
8
+ * @public
9
+ * @returns {*}
10
+ */
11
+ const executeTemplate = (template, component) => {
12
+ const tagsToScope = getTagsToScope(component);
13
+ const scope = getCustomElementsScopingSuffix();
14
+ return template(component, tagsToScope, scope);
15
+ };
16
+
17
+ /**
18
+ * Returns all tags, used inside component's template subject to scoping.
19
+ * @param component - the component
20
+ * @returns {Array[]}
21
+ * @private
22
+ */
23
+ const getTagsToScope = component => {
24
+ const componentTag = component.constructor.getMetadata().getPureTag();
25
+ const tagsToScope = component.constructor.getUniqueDependencies().map(dep => dep.getMetadata().getPureTag()).filter(shouldScopeCustomElement);
26
+
27
+ if (shouldScopeCustomElement(componentTag)) {
28
+ tagsToScope.push(componentTag);
29
+ }
30
+
31
+ return tagsToScope;
32
+ };
33
+
34
+ export default executeTemplate;
@@ -0,0 +1,241 @@
1
+ import now from './util/now.js';
2
+ var Log = {};
3
+ Log.Level = {
4
+ NONE: -1,
5
+ FATAL: 0,
6
+ ERROR: 1,
7
+ WARNING: 2,
8
+ INFO: 3,
9
+ DEBUG: 4,
10
+ TRACE: 5,
11
+ ALL: 5 + 1
12
+ };
13
+ var sDefaultComponent, aLog = [], mMaxLevel = { '': Log.Level.ERROR }, iLogEntriesLimit = 3000, oListener = null, bLogSupportInfo = false;
14
+ function pad0(i, w) {
15
+ return ('000' + String(i)).slice(-w);
16
+ }
17
+ function level(sComponent) {
18
+ return !sComponent || isNaN(mMaxLevel[sComponent]) ? mMaxLevel[''] : mMaxLevel[sComponent];
19
+ }
20
+ function discardLogEntries() {
21
+ var iLogLength = aLog.length;
22
+ if (iLogLength) {
23
+ var iEntriesToKeep = Math.min(iLogLength, Math.floor(iLogEntriesLimit * 0.7));
24
+ if (oListener) {
25
+ oListener.onDiscardLogEntries(aLog.slice(0, iLogLength - iEntriesToKeep));
26
+ }
27
+ if (iEntriesToKeep) {
28
+ aLog = aLog.slice(-iEntriesToKeep, iLogLength);
29
+ } else {
30
+ aLog = [];
31
+ }
32
+ }
33
+ }
34
+ function getLogEntryListenerInstance() {
35
+ if (!oListener) {
36
+ oListener = {
37
+ listeners: [],
38
+ onLogEntry: function (oLogEntry) {
39
+ for (var i = 0; i < oListener.listeners.length; i++) {
40
+ if (oListener.listeners[i].onLogEntry) {
41
+ oListener.listeners[i].onLogEntry(oLogEntry);
42
+ }
43
+ }
44
+ },
45
+ onDiscardLogEntries: function (aDiscardedLogEntries) {
46
+ for (var i = 0; i < oListener.listeners.length; i++) {
47
+ if (oListener.listeners[i].onDiscardLogEntries) {
48
+ oListener.listeners[i].onDiscardLogEntries(aDiscardedLogEntries);
49
+ }
50
+ }
51
+ },
52
+ attach: function (oLog, oLstnr) {
53
+ if (oLstnr) {
54
+ oListener.listeners.push(oLstnr);
55
+ if (oLstnr.onAttachToLog) {
56
+ oLstnr.onAttachToLog(oLog);
57
+ }
58
+ }
59
+ },
60
+ detach: function (oLog, oLstnr) {
61
+ for (var i = 0; i < oListener.listeners.length; i++) {
62
+ if (oListener.listeners[i] === oLstnr) {
63
+ if (oLstnr.onDetachFromLog) {
64
+ oLstnr.onDetachFromLog(oLog);
65
+ }
66
+ oListener.listeners.splice(i, 1);
67
+ return;
68
+ }
69
+ }
70
+ }
71
+ };
72
+ }
73
+ return oListener;
74
+ }
75
+ Log.fatal = function (sMessage, sDetails, sComponent, fnSupportInfo) {
76
+ log(Log.Level.FATAL, sMessage, sDetails, sComponent, fnSupportInfo);
77
+ };
78
+ Log.error = function (sMessage, sDetails, sComponent, fnSupportInfo) {
79
+ log(Log.Level.ERROR, sMessage, sDetails, sComponent, fnSupportInfo);
80
+ };
81
+ Log.warning = function (sMessage, sDetails, sComponent, fnSupportInfo) {
82
+ log(Log.Level.WARNING, sMessage, sDetails, sComponent, fnSupportInfo);
83
+ };
84
+ Log.info = function (sMessage, sDetails, sComponent, fnSupportInfo) {
85
+ log(Log.Level.INFO, sMessage, sDetails, sComponent, fnSupportInfo);
86
+ };
87
+ Log.debug = function (sMessage, sDetails, sComponent, fnSupportInfo) {
88
+ log(Log.Level.DEBUG, sMessage, sDetails, sComponent, fnSupportInfo);
89
+ };
90
+ Log.trace = function (sMessage, sDetails, sComponent, fnSupportInfo) {
91
+ log(Log.Level.TRACE, sMessage, sDetails, sComponent, fnSupportInfo);
92
+ };
93
+ Log.setLevel = function (iLogLevel, sComponent, _bDefault) {
94
+ sComponent = sComponent || sDefaultComponent || '';
95
+ if (!_bDefault || mMaxLevel[sComponent] == null) {
96
+ mMaxLevel[sComponent] = iLogLevel;
97
+ var sLogLevel;
98
+ Object.keys(Log.Level).forEach(function (sLevel) {
99
+ if (Log.Level[sLevel] === iLogLevel) {
100
+ sLogLevel = sLevel;
101
+ }
102
+ });
103
+ log(Log.Level.INFO, 'Changing log level ' + (sComponent ? 'for \'' + sComponent + '\' ' : '') + 'to ' + sLogLevel, '', 'sap.base.log');
104
+ }
105
+ };
106
+ Log.getLevel = function (sComponent) {
107
+ return level(sComponent || sDefaultComponent);
108
+ };
109
+ Log.isLoggable = function (iLevel, sComponent) {
110
+ return (iLevel == null ? Log.Level.DEBUG : iLevel) <= level(sComponent || sDefaultComponent);
111
+ };
112
+ Log.logSupportInfo = function (bEnabled) {
113
+ bLogSupportInfo = bEnabled;
114
+ };
115
+ function log(iLevel, sMessage, sDetails, sComponent, fnSupportInfo) {
116
+ if (!fnSupportInfo && !sComponent && typeof sDetails === 'function') {
117
+ fnSupportInfo = sDetails;
118
+ sDetails = '';
119
+ }
120
+ if (!fnSupportInfo && typeof sComponent === 'function') {
121
+ fnSupportInfo = sComponent;
122
+ sComponent = '';
123
+ }
124
+ sComponent = sComponent || sDefaultComponent;
125
+ if (iLevel <= level(sComponent)) {
126
+ var fNow = now(), oNow = new Date(fNow), iMicroSeconds = Math.floor((fNow - Math.floor(fNow)) * 1000), oLogEntry = {
127
+ time: pad0(oNow.getHours(), 2) + ':' + pad0(oNow.getMinutes(), 2) + ':' + pad0(oNow.getSeconds(), 2) + '.' + pad0(oNow.getMilliseconds(), 3) + pad0(iMicroSeconds, 3),
128
+ date: pad0(oNow.getFullYear(), 4) + '-' + pad0(oNow.getMonth() + 1, 2) + '-' + pad0(oNow.getDate(), 2),
129
+ timestamp: fNow,
130
+ level: iLevel,
131
+ message: String(sMessage || ''),
132
+ details: String(sDetails || ''),
133
+ component: String(sComponent || '')
134
+ };
135
+ if (bLogSupportInfo && typeof fnSupportInfo === 'function') {
136
+ oLogEntry.supportInfo = fnSupportInfo();
137
+ }
138
+ if (iLogEntriesLimit) {
139
+ if (aLog.length >= iLogEntriesLimit) {
140
+ discardLogEntries();
141
+ }
142
+ aLog.push(oLogEntry);
143
+ }
144
+ if (oListener) {
145
+ oListener.onLogEntry(oLogEntry);
146
+ }
147
+ if (console) {
148
+ var isDetailsError = sDetails instanceof Error, logText = oLogEntry.date + ' ' + oLogEntry.time + ' ' + oLogEntry.message + ' - ' + oLogEntry.details + ' ' + oLogEntry.component;
149
+ switch (iLevel) {
150
+ case Log.Level.FATAL:
151
+ case Log.Level.ERROR:
152
+ isDetailsError ? console.error(logText, '\n', sDetails) : console.error(logText);
153
+ break;
154
+ case Log.Level.WARNING:
155
+ isDetailsError ? console.warn(logText, '\n', sDetails) : console.warn(logText);
156
+ break;
157
+ case Log.Level.INFO:
158
+ if (console.info) {
159
+ isDetailsError ? console.info(logText, '\n', sDetails) : console.info(logText);
160
+ } else {
161
+ isDetailsError ? console.log(logText, '\n', sDetails) : console.log(logText);
162
+ }
163
+ break;
164
+ case Log.Level.DEBUG:
165
+ isDetailsError ? console.debug(logText, '\n', sDetails) : console.debug(logText);
166
+ break;
167
+ case Log.Level.TRACE:
168
+ isDetailsError ? console.trace(logText, '\n', sDetails) : console.trace(logText);
169
+ break;
170
+ }
171
+ if (console.info && oLogEntry.supportInfo) {
172
+ console.info(oLogEntry.supportInfo);
173
+ }
174
+ }
175
+ return oLogEntry;
176
+ }
177
+ }
178
+ Log.getLogEntries = function () {
179
+ return aLog.slice();
180
+ };
181
+ Log.getLogEntriesLimit = function () {
182
+ return iLogEntriesLimit;
183
+ };
184
+ Log.setLogEntriesLimit = function (iLimit) {
185
+ if (iLimit < 0) {
186
+ throw new Error('The log entries limit needs to be greater than or equal to 0!');
187
+ }
188
+ iLogEntriesLimit = iLimit;
189
+ if (aLog.length >= iLogEntriesLimit) {
190
+ discardLogEntries();
191
+ }
192
+ };
193
+ Log.addLogListener = function (oListener) {
194
+ getLogEntryListenerInstance().attach(this, oListener);
195
+ };
196
+ Log.removeLogListener = function (oListener) {
197
+ getLogEntryListenerInstance().detach(this, oListener);
198
+ };
199
+ function Logger(sComponent) {
200
+ this.fatal = function (msg, detail, comp, support) {
201
+ Log.fatal(msg, detail, comp || sComponent, support);
202
+ return this;
203
+ };
204
+ this.error = function (msg, detail, comp, support) {
205
+ Log.error(msg, detail, comp || sComponent, support);
206
+ return this;
207
+ };
208
+ this.warning = function (msg, detail, comp, support) {
209
+ Log.warning(msg, detail, comp || sComponent, support);
210
+ return this;
211
+ };
212
+ this.info = function (msg, detail, comp, support) {
213
+ Log.info(msg, detail, comp || sComponent, support);
214
+ return this;
215
+ };
216
+ this.debug = function (msg, detail, comp, support) {
217
+ Log.debug(msg, detail, comp || sComponent, support);
218
+ return this;
219
+ };
220
+ this.trace = function (msg, detail, comp, support) {
221
+ Log.trace(msg, detail, comp || sComponent, support);
222
+ return this;
223
+ };
224
+ this.setLevel = function (level, comp) {
225
+ Log.setLevel(level, comp || sComponent);
226
+ return this;
227
+ };
228
+ this.getLevel = function (comp) {
229
+ return Log.getLevel(comp || sComponent);
230
+ };
231
+ this.isLoggable = function (level, comp) {
232
+ return Log.isLoggable(level, comp || sComponent);
233
+ };
234
+ }
235
+ Log.getLogger = function (sComponent, iDefaultLogLevel) {
236
+ if (!isNaN(iDefaultLogLevel) && mMaxLevel[sComponent] == null) {
237
+ mMaxLevel[sComponent] = iDefaultLogLevel;
238
+ }
239
+ return new Logger(sComponent);
240
+ };
241
+ export default Log;
@@ -0,0 +1,8 @@
1
+ import Log from './Log.js';
2
+ var fnAssert = function (bResult, vMessage) {
3
+ if (!bResult) {
4
+ var sMessage = typeof vMessage === 'function' ? vMessage() : vMessage;
5
+ console.assert(bResult, sMessage);
6
+ }
7
+ };
8
+ export default fnAssert;
@@ -0,0 +1,148 @@
1
+ var rBasicUrl = /^(?:([^:\/?#]+):)?((?:\/\/((?:\[[^\]]+\]|[^\/?#:]+))(?::([0-9]+))?)?([^?#]*))(?:\?([^#]*))?(?:#(.*))?$/;
2
+ var rCheckPath = /^([a-z0-9-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*$/i;
3
+ var rCheckQuery = /^([a-z0-9-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*$/i;
4
+ var rCheckFragment = rCheckQuery;
5
+ var rCheckMail = /^([a-z0-9!$'*+:^_`{|}~-]|%[0-9a-f]{2})+(?:\.([a-z0-9!$'*+:^_`{|}~-]|%[0-9a-f]{2})+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
6
+ var rCheckIPv4 = /^([0-9]{1,3}\.){3}[0-9]{1,3}$/;
7
+ var rCheckValidIPv4 = /^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/;
8
+ var rCheckIPv6 = /^\[[^\]]+\]$/;
9
+ var rCheckValidIPv6 = /^\[(((([0-9a-f]{1,4}:){6}|(::([0-9a-f]{1,4}:){5})|(([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4})|((([0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3})|((([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2})|((([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:)|((([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::))(([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])))|((([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4})|((([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::))\]$/i;
10
+ var rCheckHostName = /^([a-z0-9]([a-z0-9\-]*[a-z0-9])?\.)*[a-z0-9]([a-z0-9\-]*[a-z0-9])?$/i;
11
+ var oURLListValidator = {};
12
+ oURLListValidator._createEntry = function (protocol, host, port, path) {
13
+ return new URLListValidatorEntry(protocol, host, port, path);
14
+ };
15
+ function URLListValidatorEntry(protocol, host, port, path) {
16
+ Object.defineProperties(this, {
17
+ protocol: {
18
+ value: protocol && protocol.toUpperCase(),
19
+ enumerable: true
20
+ },
21
+ host: {
22
+ value: host && host.toUpperCase(),
23
+ enumerable: true
24
+ },
25
+ port: {
26
+ value: port,
27
+ enumerable: true
28
+ },
29
+ path: {
30
+ value: path,
31
+ enumerable: true
32
+ }
33
+ });
34
+ }
35
+ var aAllowedEntries = [];
36
+ oURLListValidator.clear = function () {
37
+ aAllowedEntries = [];
38
+ };
39
+ oURLListValidator.add = function (protocol, host, port, path) {
40
+ var oEntry = this._createEntry(protocol, host, port, path);
41
+ aAllowedEntries.push(oEntry);
42
+ };
43
+ oURLListValidator._delete = function (oEntry) {
44
+ aAllowedEntries.splice(aAllowedEntries.indexOf(oEntry), 1);
45
+ };
46
+ oURLListValidator.entries = function () {
47
+ return aAllowedEntries.slice();
48
+ };
49
+ oURLListValidator.validate = function (sUrl) {
50
+ var result = rBasicUrl.exec(sUrl);
51
+ if (!result) {
52
+ return false;
53
+ }
54
+ var sProtocol = result[1], sBody = result[2], sHost = result[3], sPort = result[4], sPath = result[5], sQuery = result[6], sHash = result[7];
55
+ if (sProtocol) {
56
+ sProtocol = sProtocol.toUpperCase();
57
+ if (aAllowedEntries.length <= 0) {
58
+ if (!(/^(https?|ftp)/i).test(sProtocol)) {
59
+ return false;
60
+ }
61
+ }
62
+ }
63
+ if (sHost) {
64
+ if (rCheckIPv4.test(sHost)) {
65
+ if (!rCheckValidIPv4.test(sHost)) {
66
+ return false;
67
+ }
68
+ } else if (rCheckIPv6.test(sHost)) {
69
+ if (!rCheckValidIPv6.test(sHost)) {
70
+ return false;
71
+ }
72
+ } else if (!rCheckHostName.test(sHost)) {
73
+ return false;
74
+ }
75
+ sHost = sHost.toUpperCase();
76
+ }
77
+ if (sPath) {
78
+ if (sProtocol === "MAILTO") {
79
+ var aAddresses = sBody.split(",");
80
+ for (var i = 0; i < aAddresses.length; i++) {
81
+ if (!rCheckMail.test(aAddresses[i])) {
82
+ return false;
83
+ }
84
+ }
85
+ } else {
86
+ var aComponents = sPath.split("/");
87
+ for (var i = 0; i < aComponents.length; i++) {
88
+ if (!rCheckPath.test(aComponents[i])) {
89
+ return false;
90
+ }
91
+ }
92
+ }
93
+ }
94
+ if (sQuery) {
95
+ if (!rCheckQuery.test(sQuery)) {
96
+ return false;
97
+ }
98
+ }
99
+ if (sHash) {
100
+ if (!rCheckFragment.test(sHash)) {
101
+ return false;
102
+ }
103
+ }
104
+ if (aAllowedEntries.length > 0) {
105
+ var bFound = false;
106
+ for (var i = 0; i < aAllowedEntries.length; i++) {
107
+ if (!sProtocol || !aAllowedEntries[i].protocol || sProtocol == aAllowedEntries[i].protocol) {
108
+ var bOk = false;
109
+ if (sHost && aAllowedEntries[i].host && (/^\*/).test(aAllowedEntries[i].host)) {
110
+ if (!aAllowedEntries[i]._hostRegexp) {
111
+ var sHostEscaped = aAllowedEntries[i].host.slice(1).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
112
+ aAllowedEntries[i]._hostRegexp = RegExp(sHostEscaped + "$");
113
+ }
114
+ var rFilter = aAllowedEntries[i]._hostRegexp;
115
+ if (rFilter.test(sHost)) {
116
+ bOk = true;
117
+ }
118
+ } else if (!sHost || !aAllowedEntries[i].host || sHost == aAllowedEntries[i].host) {
119
+ bOk = true;
120
+ }
121
+ if (bOk) {
122
+ if (!sHost && !sPort || !aAllowedEntries[i].port || sPort == aAllowedEntries[i].port) {
123
+ if (aAllowedEntries[i].path && (/\*$/).test(aAllowedEntries[i].path)) {
124
+ if (!aAllowedEntries[i]._pathRegexp) {
125
+ var sPathEscaped = aAllowedEntries[i].path.slice(0, -1).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
126
+ aAllowedEntries[i]._pathRegexp = RegExp("^" + sPathEscaped);
127
+ }
128
+ var rFilter = aAllowedEntries[i]._pathRegexp;
129
+ if (rFilter.test(sPath)) {
130
+ bFound = true;
131
+ }
132
+ } else if (!aAllowedEntries[i].path || sPath == aAllowedEntries[i].path) {
133
+ bFound = true;
134
+ }
135
+ }
136
+ }
137
+ }
138
+ if (bFound) {
139
+ break;
140
+ }
141
+ }
142
+ if (!bFound) {
143
+ return false;
144
+ }
145
+ }
146
+ return true;
147
+ };
148
+ export default oURLListValidator;
@@ -0,0 +1,14 @@
1
+ import toHex from '../strings/toHex.js';
2
+ var rCSS = /[\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\xff\u2028\u2029][0-9A-Fa-f]?/g;
3
+ var fnCSS = function (sChar) {
4
+ var iChar = sChar.charCodeAt(0);
5
+ if (sChar.length === 1) {
6
+ return '\\' + toHex(iChar);
7
+ } else {
8
+ return '\\' + toHex(iChar) + ' ' + sChar.substr(1);
9
+ }
10
+ };
11
+ var fnEncodeCSS = function (sString) {
12
+ return sString.replace(rCSS, fnCSS);
13
+ };
14
+ export default fnEncodeCSS;