@ui5/webcomponents-base 0.0.0-0fcda382e → 0.0.0-10f3c0dc7

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 (1385) hide show
  1. package/.npsrc.json +3 -0
  2. package/AGENTS.md +195 -0
  3. package/CHANGELOG.md +3262 -0
  4. package/CLAUDE.md +1 -0
  5. package/LICENSE.txt +201 -0
  6. package/README.md +51 -11
  7. package/cypress.config.js +3 -0
  8. package/dist/.tsbuildinfobuild +1 -0
  9. package/dist/AssetRegistry.d.ts +5 -0
  10. package/dist/AssetRegistry.js +6 -9
  11. package/dist/AssetRegistry.js.map +1 -0
  12. package/dist/Assets-fetch.d.ts +1 -0
  13. package/dist/Assets-fetch.js +3 -0
  14. package/dist/Assets-fetch.js.map +1 -0
  15. package/dist/Assets-node.d.ts +12 -0
  16. package/dist/Assets-node.js +14 -0
  17. package/dist/Assets-node.js.map +1 -0
  18. package/dist/Assets.d.ts +1 -0
  19. package/dist/Assets.js +3 -0
  20. package/dist/Assets.js.map +1 -0
  21. package/dist/Boot.d.ts +11 -0
  22. package/dist/Boot.js +105 -0
  23. package/dist/Boot.js.map +1 -0
  24. package/dist/CustomElementsRegistry.d.ts +6 -0
  25. package/dist/CustomElementsRegistry.js +76 -18
  26. package/dist/CustomElementsRegistry.js.map +1 -0
  27. package/dist/CustomElementsScope.d.ts +7 -0
  28. package/dist/CustomElementsScope.js +11 -0
  29. package/dist/CustomElementsScope.js.map +1 -0
  30. package/dist/CustomElementsScopeUtils.d.ts +71 -0
  31. package/dist/CustomElementsScopeUtils.js +119 -0
  32. package/dist/CustomElementsScopeUtils.js.map +1 -0
  33. package/dist/DOMObserver.d.ts +11 -0
  34. package/dist/DOMObserver.js +23 -0
  35. package/dist/DOMObserver.js.map +1 -0
  36. package/dist/Device.d.ts +27 -0
  37. package/dist/Device.js +163 -815
  38. package/dist/Device.js.map +1 -0
  39. package/dist/DragAndDrop.d.ts +2 -0
  40. package/dist/DragAndDrop.js +5 -0
  41. package/dist/DragAndDrop.js.map +1 -0
  42. package/dist/EventProvider.d.ts +25 -0
  43. package/dist/EventProvider.js +67 -70
  44. package/dist/EventProvider.js.map +1 -0
  45. package/dist/FeaturesRegistry.d.ts +3 -0
  46. package/dist/FeaturesRegistry.js +5 -7
  47. package/dist/FeaturesRegistry.js.map +1 -0
  48. package/dist/FontFace.css +36 -0
  49. package/dist/FontFace.d.ts +2 -0
  50. package/dist/FontFace.js +18 -69
  51. package/dist/FontFace.js.map +1 -0
  52. package/dist/IgnoreCustomElements.d.ts +25 -0
  53. package/dist/IgnoreCustomElements.js +37 -0
  54. package/dist/IgnoreCustomElements.js.map +1 -0
  55. package/dist/InitialConfiguration.d.ts +35 -0
  56. package/dist/InitialConfiguration.js +158 -104
  57. package/dist/InitialConfiguration.js.map +1 -0
  58. package/dist/Keys.d.ts +67 -0
  59. package/dist/Keys.js +185 -157
  60. package/dist/Keys.js.map +1 -0
  61. package/dist/Location.d.ts +11 -0
  62. package/dist/Location.js +49 -0
  63. package/dist/Location.js.map +1 -0
  64. package/dist/ManagedStyles.d.ts +7 -0
  65. package/dist/ManagedStyles.js +69 -0
  66. package/dist/ManagedStyles.js.map +1 -0
  67. package/dist/MediaRange.d.ts +31 -0
  68. package/dist/MediaRange.js +88 -0
  69. package/dist/MediaRange.js.map +1 -0
  70. package/dist/PropertiesFileFormat.d.ts +8 -0
  71. package/dist/PropertiesFileFormat.js +85 -0
  72. package/dist/PropertiesFileFormat.js.map +1 -0
  73. package/dist/Render.d.ts +55 -0
  74. package/dist/Render.js +155 -0
  75. package/dist/Render.js.map +1 -0
  76. package/dist/RenderQueue.d.ts +19 -0
  77. package/dist/RenderQueue.js +53 -39
  78. package/dist/RenderQueue.js.map +1 -0
  79. package/dist/Runtimes.d.ts +32 -0
  80. package/dist/Runtimes.js +98 -0
  81. package/dist/Runtimes.js.map +1 -0
  82. package/dist/ScrollbarStyles.d.ts +2 -0
  83. package/dist/ScrollbarStyles.js +9 -0
  84. package/dist/ScrollbarStyles.js.map +1 -0
  85. package/dist/SystemCSSVars.d.ts +2 -0
  86. package/dist/SystemCSSVars.js +7 -0
  87. package/dist/SystemCSSVars.js.map +1 -0
  88. package/dist/Theming.d.ts +3 -0
  89. package/dist/Theming.js +3 -2
  90. package/dist/Theming.js.map +1 -0
  91. package/dist/UI5Element.d.ts +451 -0
  92. package/dist/UI5Element.js +1171 -883
  93. package/dist/UI5Element.js.map +1 -0
  94. package/dist/UI5ElementMetadata.d.ts +159 -0
  95. package/dist/UI5ElementMetadata.js +237 -164
  96. package/dist/UI5ElementMetadata.js.map +1 -0
  97. package/dist/animations/AnimationQueue.d.ts +8 -0
  98. package/dist/animations/AnimationQueue.js +31 -38
  99. package/dist/animations/AnimationQueue.js.map +1 -0
  100. package/dist/animations/animate.d.ts +14 -0
  101. package/dist/animations/animate.js +46 -51
  102. package/dist/animations/animate.js.map +1 -0
  103. package/dist/animations/scroll.d.ts +5 -0
  104. package/dist/animations/scroll.js +18 -27
  105. package/dist/animations/scroll.js.map +1 -0
  106. package/dist/animations/slideDown.d.ts +5 -0
  107. package/dist/animations/slideDown.js +53 -78
  108. package/dist/animations/slideDown.js.map +1 -0
  109. package/dist/animations/slideUp.d.ts +5 -0
  110. package/dist/animations/slideUp.js +49 -70
  111. package/dist/animations/slideUp.js.map +1 -0
  112. package/dist/asset-registries/Icons.d.ts +74 -0
  113. package/dist/asset-registries/Icons.js +180 -24
  114. package/dist/asset-registries/Icons.js.map +1 -0
  115. package/dist/asset-registries/Illustrations.d.ts +144 -0
  116. package/dist/asset-registries/Illustrations.js +158 -0
  117. package/dist/asset-registries/Illustrations.js.map +1 -0
  118. package/dist/asset-registries/LocaleData.d.ts +7 -0
  119. package/dist/asset-registries/LocaleData.js +126 -114
  120. package/dist/asset-registries/LocaleData.js.map +1 -0
  121. package/dist/asset-registries/Themes.d.ts +12 -0
  122. package/dist/asset-registries/Themes.js +58 -78
  123. package/dist/asset-registries/Themes.js.map +1 -0
  124. package/dist/asset-registries/i18n.d.ts +23 -0
  125. package/dist/asset-registries/i18n.js +83 -60
  126. package/dist/asset-registries/i18n.js.map +1 -0
  127. package/dist/asset-registries/util/IconCollectionsAlias.d.ts +30 -0
  128. package/dist/asset-registries/util/IconCollectionsAlias.js +37 -0
  129. package/dist/asset-registries/util/IconCollectionsAlias.js.map +1 -0
  130. package/dist/asset-registries/util/IconCollectionsByTheme.d.ts +20 -0
  131. package/dist/asset-registries/util/IconCollectionsByTheme.js +42 -0
  132. package/dist/asset-registries/util/IconCollectionsByTheme.js.map +1 -0
  133. package/dist/asset-registries/util/getIconCollectionByTheme.d.ts +13 -0
  134. package/dist/asset-registries/util/getIconCollectionByTheme.js +29 -0
  135. package/dist/asset-registries/util/getIconCollectionByTheme.js.map +1 -0
  136. package/dist/config/AnimationMode.d.ts +14 -0
  137. package/dist/config/AnimationMode.js +28 -10
  138. package/dist/config/AnimationMode.js.map +1 -0
  139. package/dist/config/CalendarType.d.ts +15 -0
  140. package/dist/config/CalendarType.js +36 -14
  141. package/dist/config/CalendarType.js.map +1 -0
  142. package/dist/config/ConfigurationReset.d.ts +4 -0
  143. package/dist/config/ConfigurationReset.js +11 -0
  144. package/dist/config/ConfigurationReset.js.map +1 -0
  145. package/dist/config/ConfigurationSync.d.ts +16 -0
  146. package/dist/config/ConfigurationSync.js +42 -0
  147. package/dist/config/ConfigurationSync.js.map +1 -0
  148. package/dist/config/Fonts.d.ts +16 -0
  149. package/dist/config/Fonts.js +30 -0
  150. package/dist/config/Fonts.js.map +1 -0
  151. package/dist/config/FormatSettings.d.ts +15 -0
  152. package/dist/config/FormatSettings.js +19 -9
  153. package/dist/config/FormatSettings.js.map +1 -0
  154. package/dist/config/Icons.d.ts +40 -0
  155. package/dist/config/Icons.js +44 -0
  156. package/dist/config/Icons.js.map +1 -0
  157. package/dist/config/Language.d.ts +41 -0
  158. package/dist/config/Language.js +97 -10
  159. package/dist/config/Language.js.map +1 -0
  160. package/dist/config/NoConflict.d.ts +20 -0
  161. package/dist/config/NoConflict.js +45 -41
  162. package/dist/config/NoConflict.js.map +1 -0
  163. package/dist/config/Theme.d.ts +51 -0
  164. package/dist/config/Theme.js +101 -24
  165. package/dist/config/Theme.js.map +1 -0
  166. package/dist/config/ThemeRoot.d.ts +29 -0
  167. package/dist/config/ThemeRoot.js +68 -0
  168. package/dist/config/ThemeRoot.js.map +1 -0
  169. package/dist/config/Timezone.d.ts +17 -0
  170. package/dist/config/Timezone.js +34 -0
  171. package/dist/config/Timezone.js.map +1 -0
  172. package/dist/config/Tooltips.d.ts +19 -0
  173. package/dist/config/Tooltips.js +29 -0
  174. package/dist/config/Tooltips.js.map +1 -0
  175. package/dist/config/UrlParams.d.ts +20 -0
  176. package/dist/config/UrlParams.js +30 -0
  177. package/dist/config/UrlParams.js.map +1 -0
  178. package/dist/connectToComponent.d.ts +9 -0
  179. package/dist/connectToComponent.js +59 -0
  180. package/dist/connectToComponent.js.map +1 -0
  181. package/dist/converters/DOMReference.d.ts +5 -0
  182. package/dist/converters/DOMReference.js +13 -0
  183. package/dist/converters/DOMReference.js.map +1 -0
  184. package/dist/createReactComponent.d.ts +26 -0
  185. package/dist/createReactComponent.js +51 -0
  186. package/dist/createReactComponent.js.map +1 -0
  187. package/dist/css/BusyIndicator.css +80 -0
  188. package/dist/css/MultipleDragGhost.css +17 -0
  189. package/dist/css/OpenUI5PopupStyles.css +10 -0
  190. package/dist/css/ScrollbarStyles.css +3 -0
  191. package/dist/css/SystemCSSVars.css +34 -0
  192. package/dist/custom-elements-internal.json +2962 -0
  193. package/dist/custom-elements.json +2659 -0
  194. package/dist/decorators/bound.d.ts +1 -0
  195. package/dist/decorators/bound.js +34 -0
  196. package/dist/decorators/bound.js.map +1 -0
  197. package/dist/decorators/customElement.d.ts +63 -0
  198. package/dist/decorators/customElement.js +45 -0
  199. package/dist/decorators/customElement.js.map +1 -0
  200. package/dist/decorators/event-strict.d.ts +15 -0
  201. package/dist/decorators/event-strict.js +26 -0
  202. package/dist/decorators/event-strict.js.map +1 -0
  203. package/dist/decorators/event.d.ts +16 -0
  204. package/dist/decorators/event.js +27 -0
  205. package/dist/decorators/event.js.map +1 -0
  206. package/dist/decorators/i18n.d.ts +17 -0
  207. package/dist/decorators/i18n.js +32 -0
  208. package/dist/decorators/i18n.js.map +1 -0
  209. package/dist/decorators/property.d.ts +9 -0
  210. package/dist/decorators/property.js +24 -0
  211. package/dist/decorators/property.js.map +1 -0
  212. package/dist/decorators/query.d.ts +25 -0
  213. package/dist/decorators/query.js +32 -0
  214. package/dist/decorators/query.js.map +1 -0
  215. package/dist/decorators/queryAll.d.ts +27 -0
  216. package/dist/decorators/queryAll.js +34 -0
  217. package/dist/decorators/queryAll.js.map +1 -0
  218. package/dist/decorators/slot-strict.d.ts +27 -0
  219. package/dist/decorators/slot-strict.js +54 -0
  220. package/dist/decorators/slot-strict.js.map +1 -0
  221. package/dist/decorators/slot.d.ts +27 -0
  222. package/dist/decorators/slot.js +55 -0
  223. package/dist/decorators/slot.js.map +1 -0
  224. package/dist/decorators.d.ts +9 -0
  225. package/dist/decorators.js +10 -0
  226. package/dist/decorators.js.map +1 -0
  227. package/dist/delegate/ItemNavigation.d.ts +114 -0
  228. package/dist/delegate/ItemNavigation.js +311 -274
  229. package/dist/delegate/ItemNavigation.js.map +1 -0
  230. package/dist/delegate/ResizeHandler.d.ts +23 -0
  231. package/dist/delegate/ResizeHandler.js +82 -63
  232. package/dist/delegate/ResizeHandler.js.map +1 -0
  233. package/dist/delegate/ScrollEnablement.d.ts +49 -0
  234. package/dist/delegate/ScrollEnablement.js +159 -153
  235. package/dist/delegate/ScrollEnablement.js.map +1 -0
  236. package/dist/features/F6Navigation.d.ts +21 -0
  237. package/dist/features/F6Navigation.js +198 -0
  238. package/dist/features/F6Navigation.js.map +1 -0
  239. package/dist/features/InputElementsFormSupport.d.ts +15 -0
  240. package/dist/features/InputElementsFormSupport.js +61 -0
  241. package/dist/features/InputElementsFormSupport.js.map +1 -0
  242. package/dist/features/LegacyDateFormats.d.ts +18 -0
  243. package/dist/features/LegacyDateFormats.js +20 -0
  244. package/dist/features/LegacyDateFormats.js.map +1 -0
  245. package/dist/features/OpenUI5Element.d.ts +9 -0
  246. package/dist/features/OpenUI5Element.js +5 -0
  247. package/dist/features/OpenUI5Element.js.map +1 -0
  248. package/dist/features/OpenUI5Enablement.d.ts +11 -0
  249. package/dist/features/OpenUI5Enablement.js +96 -0
  250. package/dist/features/OpenUI5Enablement.js.map +1 -0
  251. package/dist/features/OpenUI5Support.d.ts +45 -0
  252. package/dist/features/OpenUI5Support.js +183 -86
  253. package/dist/features/OpenUI5Support.js.map +1 -0
  254. package/dist/features/insertOpenUI5PopupStyles.d.ts +2 -0
  255. package/dist/features/insertOpenUI5PopupStyles.js +9 -0
  256. package/dist/features/insertOpenUI5PopupStyles.js.map +1 -0
  257. package/dist/features/patchPatcher.d.ts +12 -0
  258. package/dist/features/patchPatcher.js +21 -0
  259. package/dist/features/patchPatcher.js.map +1 -0
  260. package/dist/features/patchPopup.d.ts +33 -0
  261. package/dist/features/patchPopup.js +192 -0
  262. package/dist/features/patchPopup.js.map +1 -0
  263. package/dist/generated/AssetParameters.d.ts +6 -0
  264. package/dist/generated/AssetParameters.js +4 -9
  265. package/dist/generated/AssetParameters.js.map +1 -0
  266. package/dist/generated/VersionInfo.d.ts +10 -0
  267. package/dist/generated/VersionInfo.js +11 -0
  268. package/dist/generated/VersionInfo.js.map +1 -0
  269. package/dist/generated/assets/i18n/messagebundle_ar.json +1 -0
  270. package/dist/generated/assets/i18n/messagebundle_bg.json +1 -0
  271. package/dist/generated/assets/i18n/messagebundle_ca.json +1 -0
  272. package/dist/generated/assets/i18n/messagebundle_cnr.json +1 -0
  273. package/dist/generated/assets/i18n/messagebundle_cs.json +1 -0
  274. package/dist/generated/assets/i18n/messagebundle_cy.json +1 -0
  275. package/dist/generated/assets/i18n/messagebundle_da.json +1 -0
  276. package/dist/generated/assets/i18n/messagebundle_de.json +1 -0
  277. package/dist/generated/assets/i18n/messagebundle_el.json +1 -0
  278. package/dist/generated/assets/i18n/messagebundle_en.json +1 -0
  279. package/dist/generated/assets/i18n/messagebundle_en_GB.json +1 -0
  280. package/dist/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -0
  281. package/dist/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -0
  282. package/dist/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -0
  283. package/dist/generated/assets/i18n/messagebundle_es.json +1 -0
  284. package/dist/generated/assets/i18n/messagebundle_es_MX.json +1 -0
  285. package/dist/generated/assets/i18n/messagebundle_et.json +1 -0
  286. package/dist/generated/assets/i18n/messagebundle_fi.json +1 -0
  287. package/dist/generated/assets/i18n/messagebundle_fr.json +1 -0
  288. package/dist/generated/assets/i18n/messagebundle_fr_CA.json +1 -0
  289. package/dist/generated/assets/i18n/messagebundle_hi.json +1 -0
  290. package/dist/generated/assets/i18n/messagebundle_hr.json +1 -0
  291. package/dist/generated/assets/i18n/messagebundle_hu.json +1 -0
  292. package/dist/generated/assets/i18n/messagebundle_id.json +1 -0
  293. package/dist/generated/assets/i18n/messagebundle_it.json +1 -0
  294. package/dist/generated/assets/i18n/messagebundle_iw.json +1 -0
  295. package/dist/generated/assets/i18n/messagebundle_ja.json +1 -0
  296. package/dist/generated/assets/i18n/messagebundle_kk.json +1 -0
  297. package/dist/generated/assets/i18n/messagebundle_ko.json +1 -0
  298. package/dist/generated/assets/i18n/messagebundle_lt.json +1 -0
  299. package/dist/generated/assets/i18n/messagebundle_lv.json +1 -0
  300. package/dist/generated/assets/i18n/messagebundle_mk.json +1 -0
  301. package/dist/generated/assets/i18n/messagebundle_ms.json +1 -0
  302. package/dist/generated/assets/i18n/messagebundle_nl.json +1 -0
  303. package/dist/generated/assets/i18n/messagebundle_no.json +1 -0
  304. package/dist/generated/assets/i18n/messagebundle_pl.json +1 -0
  305. package/dist/generated/assets/i18n/messagebundle_pt.json +1 -0
  306. package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -0
  307. package/dist/generated/assets/i18n/messagebundle_ro.json +1 -0
  308. package/dist/generated/assets/i18n/messagebundle_ru.json +1 -0
  309. package/dist/generated/assets/i18n/messagebundle_sh.json +1 -0
  310. package/dist/generated/assets/i18n/messagebundle_sk.json +1 -0
  311. package/dist/generated/assets/i18n/messagebundle_sl.json +1 -0
  312. package/dist/generated/assets/i18n/messagebundle_sr.json +1 -0
  313. package/dist/generated/assets/i18n/messagebundle_sv.json +1 -0
  314. package/dist/generated/assets/i18n/messagebundle_th.json +1 -0
  315. package/dist/generated/assets/i18n/messagebundle_tr.json +1 -0
  316. package/dist/generated/assets/i18n/messagebundle_uk.json +1 -0
  317. package/dist/generated/assets/i18n/messagebundle_vi.json +1 -0
  318. package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -0
  319. package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -0
  320. package/dist/generated/css/BusyIndicator.css.d.ts +2 -0
  321. package/dist/generated/css/BusyIndicator.css.js +2 -0
  322. package/dist/generated/css/BusyIndicator.css.js.map +1 -0
  323. package/dist/generated/css/FontFace.css.d.ts +2 -0
  324. package/dist/generated/css/FontFace.css.js +37 -0
  325. package/dist/generated/css/FontFace.css.js.map +1 -0
  326. package/dist/generated/css/MultipleDragGhost.css.d.ts +2 -0
  327. package/dist/generated/css/MultipleDragGhost.css.js +2 -0
  328. package/dist/generated/css/MultipleDragGhost.css.js.map +1 -0
  329. package/dist/generated/css/OpenUI5PopupStyles.css.d.ts +2 -0
  330. package/dist/generated/css/OpenUI5PopupStyles.css.js +2 -0
  331. package/dist/generated/css/OpenUI5PopupStyles.css.js.map +1 -0
  332. package/dist/generated/css/ScrollbarStyles.css.d.ts +2 -0
  333. package/dist/generated/css/ScrollbarStyles.css.js +2 -0
  334. package/dist/generated/css/ScrollbarStyles.css.js.map +1 -0
  335. package/dist/generated/css/SystemCSSVars.css.d.ts +2 -0
  336. package/dist/generated/css/SystemCSSVars.css.js +2 -0
  337. package/dist/generated/css/SystemCSSVars.css.js.map +1 -0
  338. package/dist/generated/i18n/i18n-defaults.d.ts +3 -0
  339. package/dist/generated/i18n/i18n-defaults.js +3 -0
  340. package/dist/generated/i18n/i18n-defaults.js.map +1 -0
  341. package/dist/generated/json-imports/i18n-fetch.d.ts +1 -0
  342. package/dist/generated/json-imports/i18n-fetch.js +2 -0
  343. package/dist/generated/json-imports/i18n-fetch.js.map +1 -0
  344. package/dist/generated/json-imports/i18n-node.d.ts +1 -0
  345. package/dist/generated/json-imports/i18n-node.js +2 -0
  346. package/dist/generated/json-imports/i18n-node.js.map +1 -0
  347. package/dist/generated/json-imports/i18n.d.ts +1 -0
  348. package/dist/generated/json-imports/i18n.js +2 -0
  349. package/dist/generated/json-imports/i18n.js.map +1 -0
  350. package/dist/getSharedResource.d.ts +11 -0
  351. package/dist/getSharedResource.js +40 -0
  352. package/dist/getSharedResource.js.map +1 -0
  353. package/dist/global.d.ts +40 -0
  354. package/dist/i18nBundle.d.ts +41 -0
  355. package/dist/i18nBundle.js +71 -28
  356. package/dist/i18nBundle.js.map +1 -0
  357. package/dist/index.d.ts +51 -0
  358. package/dist/index.js +93 -0
  359. package/dist/index.js.map +1 -0
  360. package/dist/jsx-dev-runtime.d.ts +4 -0
  361. package/dist/jsx-dev-runtime.js +43 -0
  362. package/dist/jsx-dev-runtime.js.map +1 -0
  363. package/dist/jsx-runtime.d.ts +51 -0
  364. package/dist/jsx-runtime.js +27 -0
  365. package/dist/jsx-runtime.js.map +1 -0
  366. package/dist/jsx-utils.d.ts +3 -0
  367. package/dist/jsx-utils.js +48 -0
  368. package/dist/jsx-utils.js.map +1 -0
  369. package/dist/locale/Locale.d.ts +22 -0
  370. package/dist/locale/Locale.js +75 -87
  371. package/dist/locale/Locale.js.map +1 -0
  372. package/dist/locale/RTLAwareRegistry.d.ts +4 -0
  373. package/dist/locale/RTLAwareRegistry.js +9 -0
  374. package/dist/locale/RTLAwareRegistry.js.map +1 -0
  375. package/dist/locale/applyDirection.d.ts +11 -0
  376. package/dist/locale/applyDirection.js +18 -0
  377. package/dist/locale/applyDirection.js.map +1 -0
  378. package/dist/locale/directionChange.d.ts +15 -0
  379. package/dist/locale/directionChange.js +24 -0
  380. package/dist/locale/directionChange.js.map +1 -0
  381. package/dist/locale/getEffectiveDir.d.ts +2 -0
  382. package/dist/locale/getEffectiveDir.js +8 -0
  383. package/dist/locale/getEffectiveDir.js.map +1 -0
  384. package/dist/locale/getLocale.d.ts +7 -0
  385. package/dist/locale/getLocale.js +28 -21
  386. package/dist/locale/getLocale.js.map +1 -0
  387. package/dist/locale/languageChange.d.ts +5 -0
  388. package/dist/locale/languageChange.js +14 -0
  389. package/dist/locale/languageChange.js.map +1 -0
  390. package/dist/locale/nextFallbackLocale.d.ts +8 -0
  391. package/dist/locale/nextFallbackLocale.js +19 -19
  392. package/dist/locale/nextFallbackLocale.js.map +1 -0
  393. package/dist/locale/normalizeLocale.d.ts +7 -0
  394. package/dist/locale/normalizeLocale.js +34 -41
  395. package/dist/locale/normalizeLocale.js.map +1 -0
  396. package/dist/prod/AssetRegistry.js +2 -0
  397. package/dist/prod/AssetRegistry.js.map +7 -0
  398. package/dist/prod/Assets-fetch.js +2 -0
  399. package/dist/prod/Assets-fetch.js.map +7 -0
  400. package/dist/prod/Assets-node.js +2 -0
  401. package/dist/prod/Assets-node.js.map +7 -0
  402. package/dist/prod/Assets.js +2 -0
  403. package/dist/prod/Assets.js.map +7 -0
  404. package/dist/prod/Boot.js +2 -0
  405. package/dist/prod/Boot.js.map +7 -0
  406. package/dist/prod/CustomElementsRegistry.js +10 -0
  407. package/dist/prod/CustomElementsRegistry.js.map +7 -0
  408. package/dist/prod/CustomElementsScope.js +2 -0
  409. package/dist/prod/CustomElementsScope.js.map +7 -0
  410. package/dist/prod/CustomElementsScopeUtils.js +2 -0
  411. package/dist/prod/CustomElementsScopeUtils.js.map +7 -0
  412. package/dist/prod/DOMObserver.js +2 -0
  413. package/dist/prod/DOMObserver.js.map +7 -0
  414. package/dist/prod/Device.js +2 -0
  415. package/dist/prod/Device.js.map +7 -0
  416. package/dist/prod/DragAndDrop.js +2 -0
  417. package/dist/prod/DragAndDrop.js.map +7 -0
  418. package/dist/prod/EventProvider.js +2 -0
  419. package/dist/prod/EventProvider.js.map +7 -0
  420. package/dist/prod/FeaturesRegistry.js +2 -0
  421. package/dist/prod/FeaturesRegistry.js.map +7 -0
  422. package/dist/prod/FontFace.js +2 -0
  423. package/dist/prod/FontFace.js.map +7 -0
  424. package/dist/prod/IgnoreCustomElements.js +2 -0
  425. package/dist/prod/IgnoreCustomElements.js.map +7 -0
  426. package/dist/prod/InitialConfiguration.js +2 -0
  427. package/dist/prod/InitialConfiguration.js.map +7 -0
  428. package/dist/prod/Keys.js +2 -0
  429. package/dist/prod/Keys.js.map +7 -0
  430. package/dist/prod/Location.js +2 -0
  431. package/dist/prod/Location.js.map +7 -0
  432. package/dist/prod/ManagedStyles.js +2 -0
  433. package/dist/prod/ManagedStyles.js.map +7 -0
  434. package/dist/prod/MediaRange.js +2 -0
  435. package/dist/prod/MediaRange.js.map +7 -0
  436. package/dist/prod/PropertiesFileFormat.js +3 -0
  437. package/dist/prod/PropertiesFileFormat.js.map +7 -0
  438. package/dist/prod/Render.js +2 -0
  439. package/dist/prod/Render.js.map +7 -0
  440. package/dist/prod/RenderQueue.js +2 -0
  441. package/dist/prod/RenderQueue.js.map +7 -0
  442. package/dist/prod/Runtimes.js +2 -0
  443. package/dist/prod/Runtimes.js.map +7 -0
  444. package/dist/prod/ScrollbarStyles.js +2 -0
  445. package/dist/prod/ScrollbarStyles.js.map +7 -0
  446. package/dist/prod/SystemCSSVars.js +2 -0
  447. package/dist/prod/SystemCSSVars.js.map +7 -0
  448. package/dist/prod/Theming.js +2 -0
  449. package/dist/prod/Theming.js.map +7 -0
  450. package/dist/prod/UI5Element.js +2 -0
  451. package/dist/prod/UI5Element.js.map +7 -0
  452. package/dist/prod/UI5ElementMetadata.js +2 -0
  453. package/dist/prod/UI5ElementMetadata.js.map +7 -0
  454. package/dist/prod/animations/AnimationQueue.js +2 -0
  455. package/dist/prod/animations/AnimationQueue.js.map +7 -0
  456. package/dist/prod/animations/animate.js +2 -0
  457. package/dist/prod/animations/animate.js.map +7 -0
  458. package/dist/prod/animations/scroll.js +2 -0
  459. package/dist/prod/animations/scroll.js.map +7 -0
  460. package/dist/prod/animations/slideDown.js +2 -0
  461. package/dist/prod/animations/slideDown.js.map +7 -0
  462. package/dist/prod/animations/slideUp.js +2 -0
  463. package/dist/prod/animations/slideUp.js.map +7 -0
  464. package/dist/prod/asset-registries/Icons.js +2 -0
  465. package/dist/prod/asset-registries/Icons.js.map +7 -0
  466. package/dist/prod/asset-registries/Illustrations.js +2 -0
  467. package/dist/prod/asset-registries/Illustrations.js.map +7 -0
  468. package/dist/prod/asset-registries/LocaleData.js +2 -0
  469. package/dist/prod/asset-registries/LocaleData.js.map +7 -0
  470. package/dist/prod/asset-registries/Themes.js +2 -0
  471. package/dist/prod/asset-registries/Themes.js.map +7 -0
  472. package/dist/prod/asset-registries/i18n.js +2 -0
  473. package/dist/prod/asset-registries/i18n.js.map +7 -0
  474. package/dist/prod/asset-registries/util/IconCollectionsAlias.js +2 -0
  475. package/dist/prod/asset-registries/util/IconCollectionsAlias.js.map +7 -0
  476. package/dist/prod/asset-registries/util/IconCollectionsByTheme.js +2 -0
  477. package/dist/prod/asset-registries/util/IconCollectionsByTheme.js.map +7 -0
  478. package/dist/prod/asset-registries/util/getIconCollectionByTheme.js +2 -0
  479. package/dist/prod/asset-registries/util/getIconCollectionByTheme.js.map +7 -0
  480. package/dist/prod/config/AnimationMode.js +2 -0
  481. package/dist/prod/config/AnimationMode.js.map +7 -0
  482. package/dist/prod/config/CalendarType.js +2 -0
  483. package/dist/prod/config/CalendarType.js.map +7 -0
  484. package/dist/prod/config/ConfigurationReset.js +2 -0
  485. package/dist/prod/config/ConfigurationReset.js.map +7 -0
  486. package/dist/prod/config/ConfigurationSync.js +2 -0
  487. package/dist/prod/config/ConfigurationSync.js.map +7 -0
  488. package/dist/prod/config/Fonts.js +2 -0
  489. package/dist/prod/config/Fonts.js.map +7 -0
  490. package/dist/prod/config/FormatSettings.js +2 -0
  491. package/dist/prod/config/FormatSettings.js.map +7 -0
  492. package/dist/prod/config/Icons.js +2 -0
  493. package/dist/prod/config/Icons.js.map +7 -0
  494. package/dist/prod/config/Language.js +2 -0
  495. package/dist/prod/config/Language.js.map +7 -0
  496. package/dist/prod/config/NoConflict.js +2 -0
  497. package/dist/prod/config/NoConflict.js.map +7 -0
  498. package/dist/prod/config/Theme.js +2 -0
  499. package/dist/prod/config/Theme.js.map +7 -0
  500. package/dist/prod/config/ThemeRoot.js +2 -0
  501. package/dist/prod/config/ThemeRoot.js.map +7 -0
  502. package/dist/prod/config/Timezone.js +2 -0
  503. package/dist/prod/config/Timezone.js.map +7 -0
  504. package/dist/prod/config/Tooltips.js +2 -0
  505. package/dist/prod/config/Tooltips.js.map +7 -0
  506. package/dist/prod/config/UrlParams.js +2 -0
  507. package/dist/prod/config/UrlParams.js.map +7 -0
  508. package/dist/prod/connectToComponent.js +2 -0
  509. package/dist/prod/connectToComponent.js.map +7 -0
  510. package/dist/prod/converters/DOMReference.js +2 -0
  511. package/dist/prod/converters/DOMReference.js.map +7 -0
  512. package/dist/prod/createReactComponent.js +2 -0
  513. package/dist/prod/createReactComponent.js.map +7 -0
  514. package/dist/prod/decorators/bound.js +2 -0
  515. package/dist/prod/decorators/bound.js.map +7 -0
  516. package/dist/prod/decorators/customElement.js +2 -0
  517. package/dist/prod/decorators/customElement.js.map +7 -0
  518. package/dist/prod/decorators/event-strict.js +2 -0
  519. package/dist/prod/decorators/event-strict.js.map +7 -0
  520. package/dist/prod/decorators/event.js +2 -0
  521. package/dist/prod/decorators/event.js.map +7 -0
  522. package/dist/prod/decorators/i18n.js +2 -0
  523. package/dist/prod/decorators/i18n.js.map +7 -0
  524. package/dist/prod/decorators/property.js +2 -0
  525. package/dist/prod/decorators/property.js.map +7 -0
  526. package/dist/prod/decorators/query.js +2 -0
  527. package/dist/prod/decorators/query.js.map +7 -0
  528. package/dist/prod/decorators/queryAll.js +2 -0
  529. package/dist/prod/decorators/queryAll.js.map +7 -0
  530. package/dist/prod/decorators/slot-strict.js +2 -0
  531. package/dist/prod/decorators/slot-strict.js.map +7 -0
  532. package/dist/prod/decorators/slot.js +2 -0
  533. package/dist/prod/decorators/slot.js.map +7 -0
  534. package/dist/prod/decorators.js +2 -0
  535. package/dist/prod/decorators.js.map +7 -0
  536. package/dist/prod/delegate/ItemNavigation.js +2 -0
  537. package/dist/prod/delegate/ItemNavigation.js.map +7 -0
  538. package/dist/prod/delegate/ResizeHandler.js +2 -0
  539. package/dist/prod/delegate/ResizeHandler.js.map +7 -0
  540. package/dist/prod/delegate/ScrollEnablement.js +2 -0
  541. package/dist/prod/delegate/ScrollEnablement.js.map +7 -0
  542. package/dist/prod/features/F6Navigation.js +2 -0
  543. package/dist/prod/features/F6Navigation.js.map +7 -0
  544. package/dist/prod/features/InputElementsFormSupport.js +2 -0
  545. package/dist/prod/features/InputElementsFormSupport.js.map +7 -0
  546. package/dist/prod/features/LegacyDateFormats.js +2 -0
  547. package/dist/prod/features/LegacyDateFormats.js.map +7 -0
  548. package/dist/prod/features/OpenUI5Element.js +2 -0
  549. package/dist/prod/features/OpenUI5Element.js.map +7 -0
  550. package/dist/prod/features/OpenUI5Enablement.js +21 -0
  551. package/dist/prod/features/OpenUI5Enablement.js.map +7 -0
  552. package/dist/prod/features/OpenUI5Support.js +2 -0
  553. package/dist/prod/features/OpenUI5Support.js.map +7 -0
  554. package/dist/prod/features/insertOpenUI5PopupStyles.js +2 -0
  555. package/dist/prod/features/insertOpenUI5PopupStyles.js.map +7 -0
  556. package/dist/prod/features/patchPatcher.js +2 -0
  557. package/dist/prod/features/patchPatcher.js.map +7 -0
  558. package/dist/prod/features/patchPopup.js +2 -0
  559. package/dist/prod/features/patchPopup.js.map +7 -0
  560. package/dist/prod/generated/AssetParameters.js +2 -0
  561. package/dist/prod/generated/AssetParameters.js.map +7 -0
  562. package/dist/prod/generated/VersionInfo.js +2 -0
  563. package/dist/prod/generated/VersionInfo.js.map +7 -0
  564. package/dist/prod/generated/assets/i18n/messagebundle_ar.json +1 -0
  565. package/dist/prod/generated/assets/i18n/messagebundle_bg.json +1 -0
  566. package/dist/prod/generated/assets/i18n/messagebundle_ca.json +1 -0
  567. package/dist/prod/generated/assets/i18n/messagebundle_cnr.json +1 -0
  568. package/dist/prod/generated/assets/i18n/messagebundle_cs.json +1 -0
  569. package/dist/prod/generated/assets/i18n/messagebundle_cy.json +1 -0
  570. package/dist/prod/generated/assets/i18n/messagebundle_da.json +1 -0
  571. package/dist/prod/generated/assets/i18n/messagebundle_de.json +1 -0
  572. package/dist/prod/generated/assets/i18n/messagebundle_el.json +1 -0
  573. package/dist/prod/generated/assets/i18n/messagebundle_en.json +1 -0
  574. package/dist/prod/generated/assets/i18n/messagebundle_en_GB.json +1 -0
  575. package/dist/prod/generated/assets/i18n/messagebundle_en_US_sappsd.json +1 -0
  576. package/dist/prod/generated/assets/i18n/messagebundle_en_US_saprigi.json +1 -0
  577. package/dist/prod/generated/assets/i18n/messagebundle_en_US_saptrc.json +1 -0
  578. package/dist/prod/generated/assets/i18n/messagebundle_es.json +1 -0
  579. package/dist/prod/generated/assets/i18n/messagebundle_es_MX.json +1 -0
  580. package/dist/prod/generated/assets/i18n/messagebundle_et.json +1 -0
  581. package/dist/prod/generated/assets/i18n/messagebundle_fi.json +1 -0
  582. package/dist/prod/generated/assets/i18n/messagebundle_fr.json +1 -0
  583. package/dist/prod/generated/assets/i18n/messagebundle_fr_CA.json +1 -0
  584. package/dist/prod/generated/assets/i18n/messagebundle_hi.json +1 -0
  585. package/dist/prod/generated/assets/i18n/messagebundle_hr.json +1 -0
  586. package/dist/prod/generated/assets/i18n/messagebundle_hu.json +1 -0
  587. package/dist/prod/generated/assets/i18n/messagebundle_id.json +1 -0
  588. package/dist/prod/generated/assets/i18n/messagebundle_it.json +1 -0
  589. package/dist/prod/generated/assets/i18n/messagebundle_iw.json +1 -0
  590. package/dist/prod/generated/assets/i18n/messagebundle_ja.json +1 -0
  591. package/dist/prod/generated/assets/i18n/messagebundle_kk.json +1 -0
  592. package/dist/prod/generated/assets/i18n/messagebundle_ko.json +1 -0
  593. package/dist/prod/generated/assets/i18n/messagebundle_lt.json +1 -0
  594. package/dist/prod/generated/assets/i18n/messagebundle_lv.json +1 -0
  595. package/dist/prod/generated/assets/i18n/messagebundle_mk.json +1 -0
  596. package/dist/prod/generated/assets/i18n/messagebundle_ms.json +1 -0
  597. package/dist/prod/generated/assets/i18n/messagebundle_nl.json +1 -0
  598. package/dist/prod/generated/assets/i18n/messagebundle_no.json +1 -0
  599. package/dist/prod/generated/assets/i18n/messagebundle_pl.json +1 -0
  600. package/dist/prod/generated/assets/i18n/messagebundle_pt.json +1 -0
  601. package/dist/prod/generated/assets/i18n/messagebundle_pt_PT.json +1 -0
  602. package/dist/prod/generated/assets/i18n/messagebundle_ro.json +1 -0
  603. package/dist/prod/generated/assets/i18n/messagebundle_ru.json +1 -0
  604. package/dist/prod/generated/assets/i18n/messagebundle_sh.json +1 -0
  605. package/dist/prod/generated/assets/i18n/messagebundle_sk.json +1 -0
  606. package/dist/prod/generated/assets/i18n/messagebundle_sl.json +1 -0
  607. package/dist/prod/generated/assets/i18n/messagebundle_sr.json +1 -0
  608. package/dist/prod/generated/assets/i18n/messagebundle_sv.json +1 -0
  609. package/dist/prod/generated/assets/i18n/messagebundle_th.json +1 -0
  610. package/dist/prod/generated/assets/i18n/messagebundle_tr.json +1 -0
  611. package/dist/prod/generated/assets/i18n/messagebundle_uk.json +1 -0
  612. package/dist/prod/generated/assets/i18n/messagebundle_vi.json +1 -0
  613. package/dist/prod/generated/assets/i18n/messagebundle_zh_CN.json +1 -0
  614. package/dist/prod/generated/assets/i18n/messagebundle_zh_TW.json +1 -0
  615. package/dist/prod/generated/css/BusyIndicator.css.js +2 -0
  616. package/dist/prod/generated/css/BusyIndicator.css.js.map +7 -0
  617. package/dist/prod/generated/css/FontFace.css.js +37 -0
  618. package/dist/prod/generated/css/FontFace.css.js.map +7 -0
  619. package/dist/prod/generated/css/MultipleDragGhost.css.js +2 -0
  620. package/dist/prod/generated/css/MultipleDragGhost.css.js.map +7 -0
  621. package/dist/prod/generated/css/OpenUI5PopupStyles.css.js +2 -0
  622. package/dist/prod/generated/css/OpenUI5PopupStyles.css.js.map +7 -0
  623. package/dist/prod/generated/css/ScrollbarStyles.css.js +2 -0
  624. package/dist/prod/generated/css/ScrollbarStyles.css.js.map +7 -0
  625. package/dist/prod/generated/css/SystemCSSVars.css.js +2 -0
  626. package/dist/prod/generated/css/SystemCSSVars.css.js.map +7 -0
  627. package/dist/prod/generated/i18n/i18n-defaults.js +2 -0
  628. package/dist/prod/generated/i18n/i18n-defaults.js.map +7 -0
  629. package/dist/prod/generated/json-imports/i18n-fetch.js +2 -0
  630. package/dist/prod/generated/json-imports/i18n-fetch.js.map +7 -0
  631. package/dist/prod/generated/json-imports/i18n-node.js +2 -0
  632. package/dist/prod/generated/json-imports/i18n-node.js.map +7 -0
  633. package/dist/prod/generated/json-imports/i18n.js +2 -0
  634. package/dist/prod/generated/json-imports/i18n.js.map +7 -0
  635. package/dist/prod/getSharedResource.js +2 -0
  636. package/dist/prod/getSharedResource.js.map +7 -0
  637. package/dist/prod/global.d.js +2 -0
  638. package/dist/prod/global.d.js.map +7 -0
  639. package/dist/prod/i18nBundle.js +2 -0
  640. package/dist/prod/i18nBundle.js.map +7 -0
  641. package/dist/prod/index.js +2 -0
  642. package/dist/prod/index.js.map +7 -0
  643. package/dist/prod/jsx-dev-runtime.js +2 -0
  644. package/dist/prod/jsx-dev-runtime.js.map +7 -0
  645. package/dist/prod/jsx-runtime.js +2 -0
  646. package/dist/prod/jsx-runtime.js.map +7 -0
  647. package/dist/prod/jsx-utils.js +2 -0
  648. package/dist/prod/jsx-utils.js.map +7 -0
  649. package/dist/prod/locale/Locale.js +2 -0
  650. package/dist/prod/locale/Locale.js.map +7 -0
  651. package/dist/prod/locale/RTLAwareRegistry.js +2 -0
  652. package/dist/prod/locale/RTLAwareRegistry.js.map +7 -0
  653. package/dist/prod/locale/applyDirection.js +2 -0
  654. package/dist/prod/locale/applyDirection.js.map +7 -0
  655. package/dist/prod/locale/directionChange.js +2 -0
  656. package/dist/prod/locale/directionChange.js.map +7 -0
  657. package/dist/prod/locale/getEffectiveDir.js +2 -0
  658. package/dist/prod/locale/getEffectiveDir.js.map +7 -0
  659. package/dist/prod/locale/getLocale.js +2 -0
  660. package/dist/prod/locale/getLocale.js.map +7 -0
  661. package/dist/prod/locale/languageChange.js +2 -0
  662. package/dist/prod/locale/languageChange.js.map +7 -0
  663. package/dist/prod/locale/nextFallbackLocale.js +2 -0
  664. package/dist/prod/locale/nextFallbackLocale.js.map +7 -0
  665. package/dist/prod/locale/normalizeLocale.js +2 -0
  666. package/dist/prod/locale/normalizeLocale.js.map +7 -0
  667. package/dist/prod/renderer/JsxRenderer.js +2 -0
  668. package/dist/prod/renderer/JsxRenderer.js.map +7 -0
  669. package/dist/prod/renderer/LitRenderer.js +2 -0
  670. package/dist/prod/renderer/LitRenderer.js.map +7 -0
  671. package/dist/prod/renderer/directives/style-map.js +6 -0
  672. package/dist/prod/renderer/directives/style-map.js.map +7 -0
  673. package/dist/prod/renderer/executeTemplate.js +2 -0
  674. package/dist/prod/renderer/executeTemplate.js.map +7 -0
  675. package/dist/prod/sap/base/Log.js +736 -0
  676. package/dist/prod/sap/base/assert.js +34 -0
  677. package/dist/prod/sap/base/config/MemoryConfigurationProvider.js +20 -0
  678. package/dist/prod/sap/base/security/URLListValidator.js +410 -0
  679. package/dist/prod/sap/base/security/encodeCSS.js +40 -0
  680. package/dist/prod/sap/base/security/encodeXML.js +53 -0
  681. package/dist/prod/sap/base/security/sanitizeHTML.js +38 -0
  682. package/dist/prod/sap/base/strings/toHex.js +33 -0
  683. package/dist/prod/sap/base/util/now.js +22 -0
  684. package/dist/prod/sap/base/util/uid.js +27 -0
  685. package/dist/prod/sap/ui/thirdparty/caja-html-sanitizer.js +3612 -0
  686. package/dist/prod/ssr-dom-shim.js +2 -0
  687. package/dist/prod/ssr-dom-shim.js.map +7 -0
  688. package/dist/prod/ssr-dom.js +2 -0
  689. package/dist/prod/ssr-dom.js.map +7 -0
  690. package/dist/prod/theming/CustomStyle.js +2 -0
  691. package/dist/prod/theming/CustomStyle.js.map +7 -0
  692. package/dist/prod/theming/ThemeLoaded.js +2 -0
  693. package/dist/prod/theming/ThemeLoaded.js.map +7 -0
  694. package/dist/prod/theming/ThemeRegistered.js +2 -0
  695. package/dist/prod/theming/ThemeRegistered.js.map +7 -0
  696. package/dist/prod/theming/applyTheme.js +2 -0
  697. package/dist/prod/theming/applyTheme.js.map +7 -0
  698. package/dist/prod/theming/componentStyles.js +3 -0
  699. package/dist/prod/theming/componentStyles.js.map +7 -0
  700. package/dist/prod/theming/getConstructableStyle.js +2 -0
  701. package/dist/prod/theming/getConstructableStyle.js.map +7 -0
  702. package/dist/prod/theming/getEffectiveStyle.js +2 -0
  703. package/dist/prod/theming/getEffectiveStyle.js.map +7 -0
  704. package/dist/prod/theming/getStylesString.js +2 -0
  705. package/dist/prod/theming/getStylesString.js.map +7 -0
  706. package/dist/prod/theming/getThemeDesignerTheme.js +2 -0
  707. package/dist/prod/theming/getThemeDesignerTheme.js.map +7 -0
  708. package/dist/prod/thirdparty/_merge.js +2 -0
  709. package/dist/prod/thirdparty/_merge.js.map +7 -0
  710. package/dist/prod/thirdparty/isPlainObject.js +2 -0
  711. package/dist/prod/thirdparty/isPlainObject.js.map +7 -0
  712. package/dist/prod/thirdparty/merge.js +2 -0
  713. package/dist/prod/thirdparty/merge.js.map +7 -0
  714. package/dist/prod/thirdparty/preact/jsx.d.js +2 -0
  715. package/dist/prod/thirdparty/preact/jsx.d.js.map +7 -0
  716. package/dist/prod/thirdparty/preact/jsxRuntime.module.d.js +2 -0
  717. package/dist/prod/thirdparty/preact/jsxRuntime.module.d.js.map +7 -0
  718. package/dist/prod/thirdparty/preact/jsxRuntime.module.js +1 -0
  719. package/dist/prod/thirdparty/preact/preact.module.d.js +2 -0
  720. package/dist/prod/thirdparty/preact/preact.module.d.js.map +7 -0
  721. package/dist/prod/thirdparty/preact/preact.module.js +1 -0
  722. package/dist/prod/types/AnimationMode.js +2 -0
  723. package/dist/prod/types/AnimationMode.js.map +7 -0
  724. package/dist/prod/types/CalendarType.js +2 -0
  725. package/dist/prod/types/CalendarType.js.map +7 -0
  726. package/dist/prod/types/InvisibleMessageMode.js +2 -0
  727. package/dist/prod/types/InvisibleMessageMode.js.map +7 -0
  728. package/dist/prod/types/ItemNavigationBehavior.js +2 -0
  729. package/dist/prod/types/ItemNavigationBehavior.js.map +7 -0
  730. package/dist/prod/types/MovePlacement.js +2 -0
  731. package/dist/prod/types/MovePlacement.js.map +7 -0
  732. package/dist/prod/types/NavigationMode.js +2 -0
  733. package/dist/prod/types/NavigationMode.js.map +7 -0
  734. package/dist/prod/types/Orientation.js +2 -0
  735. package/dist/prod/types/Orientation.js.map +7 -0
  736. package/dist/prod/types/SortOrder.js +2 -0
  737. package/dist/prod/types/SortOrder.js.map +7 -0
  738. package/dist/prod/types/ValueState.js +2 -0
  739. package/dist/prod/types/ValueState.js.map +7 -0
  740. package/dist/prod/types.js +2 -0
  741. package/dist/prod/types.js.map +7 -0
  742. package/dist/prod/updateShadowRoot.js +2 -0
  743. package/dist/prod/updateShadowRoot.js.map +7 -0
  744. package/dist/prod/util/AccessibilityTextsHelper.js +2 -0
  745. package/dist/prod/util/AccessibilityTextsHelper.js.map +7 -0
  746. package/dist/prod/util/Caret.js +2 -0
  747. package/dist/prod/util/Caret.js.map +7 -0
  748. package/dist/prod/util/ColorConversion.js +2 -0
  749. package/dist/prod/util/ColorConversion.js.map +7 -0
  750. package/dist/prod/util/FetchHelper.js +2 -0
  751. package/dist/prod/util/FetchHelper.js.map +7 -0
  752. package/dist/prod/util/FocusableElements.js +2 -0
  753. package/dist/prod/util/FocusableElements.js.map +7 -0
  754. package/dist/prod/util/HTMLSanitizer.js +2 -0
  755. package/dist/prod/util/HTMLSanitizer.js.map +7 -0
  756. package/dist/prod/util/InvisibleMessage.js +2 -0
  757. package/dist/prod/util/InvisibleMessage.js.map +7 -0
  758. package/dist/prod/util/PopupUtils.js +2 -0
  759. package/dist/prod/util/PopupUtils.js.map +7 -0
  760. package/dist/prod/util/SelectionAssistant.js +2 -0
  761. package/dist/prod/util/SelectionAssistant.js.map +7 -0
  762. package/dist/prod/util/SlotsHelper.js +2 -0
  763. package/dist/prod/util/SlotsHelper.js.map +7 -0
  764. package/dist/prod/util/StringHelper.js +2 -0
  765. package/dist/prod/util/StringHelper.js.map +7 -0
  766. package/dist/prod/util/TabbableElements.js +2 -0
  767. package/dist/prod/util/TabbableElements.js.map +7 -0
  768. package/dist/prod/util/arraysAreEqual.js +2 -0
  769. package/dist/prod/util/arraysAreEqual.js.map +7 -0
  770. package/dist/prod/util/clamp.js +2 -0
  771. package/dist/prod/util/clamp.js.map +7 -0
  772. package/dist/prod/util/createInstanceChecker.js +2 -0
  773. package/dist/prod/util/createInstanceChecker.js.map +7 -0
  774. package/dist/prod/util/createLinkInHead.js +2 -0
  775. package/dist/prod/util/createLinkInHead.js.map +7 -0
  776. package/dist/prod/util/createMultiInstanceChecker.js +2 -0
  777. package/dist/prod/util/createMultiInstanceChecker.js.map +7 -0
  778. package/dist/prod/util/debounce.js +2 -0
  779. package/dist/prod/util/debounce.js.map +7 -0
  780. package/dist/prod/util/detectNavigatorLanguage.js +2 -0
  781. package/dist/prod/util/detectNavigatorLanguage.js.map +7 -0
  782. package/dist/prod/util/dragAndDrop/DragRegistry.js +2 -0
  783. package/dist/prod/util/dragAndDrop/DragRegistry.js.map +7 -0
  784. package/dist/prod/util/dragAndDrop/findClosestPosition.js +2 -0
  785. package/dist/prod/util/dragAndDrop/findClosestPosition.js.map +7 -0
  786. package/dist/prod/util/dragAndDrop/handleDragOver.js +2 -0
  787. package/dist/prod/util/dragAndDrop/handleDragOver.js.map +7 -0
  788. package/dist/prod/util/dragAndDrop/handleDrop.js +2 -0
  789. package/dist/prod/util/dragAndDrop/handleDrop.js.map +7 -0
  790. package/dist/prod/util/dragAndDrop/longDragOverHandler.js +2 -0
  791. package/dist/prod/util/dragAndDrop/longDragOverHandler.js.map +7 -0
  792. package/dist/prod/util/escapeRegex.js +2 -0
  793. package/dist/prod/util/escapeRegex.js.map +7 -0
  794. package/dist/prod/util/fixSafariActiveState.js +2 -0
  795. package/dist/prod/util/fixSafariActiveState.js.map +7 -0
  796. package/dist/prod/util/formatMessage.js +2 -0
  797. package/dist/prod/util/formatMessage.js.map +7 -0
  798. package/dist/prod/util/generateHighlightedMarkup.js +2 -0
  799. package/dist/prod/util/generateHighlightedMarkup.js.map +7 -0
  800. package/dist/prod/util/generateHighlightedMarkupFirstMatch.js +2 -0
  801. package/dist/prod/util/generateHighlightedMarkupFirstMatch.js.map +7 -0
  802. package/dist/prod/util/getActiveElement.js +2 -0
  803. package/dist/prod/util/getActiveElement.js.map +7 -0
  804. package/dist/prod/util/getClassCopy.js +2 -0
  805. package/dist/prod/util/getClassCopy.js.map +7 -0
  806. package/dist/prod/util/getDesigntimePropertyAsArray.js +2 -0
  807. package/dist/prod/util/getDesigntimePropertyAsArray.js.map +7 -0
  808. package/dist/prod/util/getEffectiveContentDensity.js +2 -0
  809. package/dist/prod/util/getEffectiveContentDensity.js.map +7 -0
  810. package/dist/prod/util/getFastNavigationGroups.js +2 -0
  811. package/dist/prod/util/getFastNavigationGroups.js.map +7 -0
  812. package/dist/prod/util/getFileExtension.js +2 -0
  813. package/dist/prod/util/getFileExtension.js.map +7 -0
  814. package/dist/prod/util/getNormalizedTarget.js +2 -0
  815. package/dist/prod/util/getNormalizedTarget.js.map +7 -0
  816. package/dist/prod/util/getParentElement.js +2 -0
  817. package/dist/prod/util/getParentElement.js.map +7 -0
  818. package/dist/prod/util/getSingletonElementInstance.js +2 -0
  819. package/dist/prod/util/getSingletonElementInstance.js.map +7 -0
  820. package/dist/prod/util/hash2str.js +2 -0
  821. package/dist/prod/util/hash2str.js.map +7 -0
  822. package/dist/prod/util/isElementClickable.js +2 -0
  823. package/dist/prod/util/isElementClickable.js.map +7 -0
  824. package/dist/prod/util/isElementHidden.js +2 -0
  825. package/dist/prod/util/isElementHidden.js.map +7 -0
  826. package/dist/prod/util/isElementInView.js +2 -0
  827. package/dist/prod/util/isElementInView.js.map +7 -0
  828. package/dist/prod/util/isElementTabbable.js +2 -0
  829. package/dist/prod/util/isElementTabbable.js.map +7 -0
  830. package/dist/prod/util/isEventMarked.js +2 -0
  831. package/dist/prod/util/isEventMarked.js.map +7 -0
  832. package/dist/prod/util/isValidPropertyName.js +2 -0
  833. package/dist/prod/util/isValidPropertyName.js.map +7 -0
  834. package/dist/prod/util/throttle.js +2 -0
  835. package/dist/prod/util/throttle.js.map +7 -0
  836. package/dist/prod/util/toLowercaseEnumValue.js +2 -0
  837. package/dist/prod/util/toLowercaseEnumValue.js.map +7 -0
  838. package/dist/prod/util/valueStateNavigation.js +2 -0
  839. package/dist/prod/util/valueStateNavigation.js.map +7 -0
  840. package/dist/prod/util/whenDOMReady.js +2 -0
  841. package/dist/prod/util/whenDOMReady.js.map +7 -0
  842. package/dist/prod/util/willShowContent.js +2 -0
  843. package/dist/prod/util/willShowContent.js.map +7 -0
  844. package/dist/prod/validateThemeRoot.js +2 -0
  845. package/dist/prod/validateThemeRoot.js.map +7 -0
  846. package/dist/react18/createReactComponent.d.ts +38 -0
  847. package/dist/react18/createReactComponent.js +112 -0
  848. package/dist/react18/createReactComponent.js.map +1 -0
  849. package/dist/renderer/JsxRenderer.d.ts +3 -0
  850. package/dist/renderer/JsxRenderer.js +26 -0
  851. package/dist/renderer/JsxRenderer.js.map +1 -0
  852. package/dist/renderer/LitRenderer.d.ts +14 -0
  853. package/dist/renderer/LitRenderer.js +33 -12
  854. package/dist/renderer/LitRenderer.js.map +1 -0
  855. package/dist/renderer/directives/style-map.d.ts +13 -0
  856. package/dist/renderer/directives/style-map.js +72 -0
  857. package/dist/renderer/directives/style-map.js.map +1 -0
  858. package/dist/renderer/executeTemplate.d.ts +12 -0
  859. package/dist/renderer/executeTemplate.js +12 -0
  860. package/dist/renderer/executeTemplate.js.map +1 -0
  861. package/dist/sap/base/Log.js +736 -0
  862. package/dist/sap/base/assert.js +34 -0
  863. package/dist/sap/base/config/MemoryConfigurationProvider.js +20 -0
  864. package/dist/sap/base/security/URLListValidator.js +410 -0
  865. package/dist/sap/base/security/encodeCSS.js +40 -0
  866. package/dist/sap/base/security/encodeXML.js +53 -0
  867. package/dist/sap/base/security/sanitizeHTML.js +38 -0
  868. package/dist/sap/base/strings/toHex.js +33 -0
  869. package/dist/sap/base/util/now.js +22 -0
  870. package/dist/sap/base/util/uid.js +27 -0
  871. package/dist/sap/ui/thirdparty/caja-html-sanitizer.js +3612 -0
  872. package/dist/ssr-dom-shim.d.ts +1 -0
  873. package/dist/ssr-dom-shim.js +63 -0
  874. package/dist/ssr-dom-shim.js.map +1 -0
  875. package/dist/ssr-dom.d.ts +1 -0
  876. package/dist/ssr-dom.js +3 -0
  877. package/dist/ssr-dom.js.map +1 -0
  878. package/dist/theming/CustomStyle.d.ts +6 -0
  879. package/dist/theming/CustomStyle.js +46 -17
  880. package/dist/theming/CustomStyle.js.map +1 -0
  881. package/dist/theming/ThemeLoaded.d.ts +5 -0
  882. package/dist/theming/ThemeLoaded.js +14 -0
  883. package/dist/theming/ThemeLoaded.js.map +1 -0
  884. package/dist/theming/ThemeRegistered.d.ts +4 -0
  885. package/dist/theming/ThemeRegistered.js +11 -0
  886. package/dist/theming/ThemeRegistered.js.map +1 -0
  887. package/dist/theming/applyTheme.d.ts +4 -0
  888. package/dist/theming/applyTheme.js +79 -69
  889. package/dist/theming/applyTheme.js.map +1 -0
  890. package/dist/theming/componentStyles.d.ts +3 -0
  891. package/dist/theming/componentStyles.js +15 -0
  892. package/dist/theming/componentStyles.js.map +1 -0
  893. package/dist/theming/getConstructableStyle.d.ts +9 -0
  894. package/dist/theming/getConstructableStyle.js +15 -15
  895. package/dist/theming/getConstructableStyle.js.map +1 -0
  896. package/dist/theming/getEffectiveStyle.d.ts +3 -0
  897. package/dist/theming/getEffectiveStyle.js +23 -13
  898. package/dist/theming/getEffectiveStyle.js.map +1 -0
  899. package/dist/theming/getStylesString.d.ts +3 -0
  900. package/dist/theming/getStylesString.js +9 -0
  901. package/dist/theming/getStylesString.js.map +1 -0
  902. package/dist/theming/getThemeDesignerTheme.d.ts +7 -0
  903. package/dist/theming/getThemeDesignerTheme.js +74 -60
  904. package/dist/theming/getThemeDesignerTheme.js.map +1 -0
  905. package/dist/thirdparty/_merge.d.ts +2 -0
  906. package/dist/thirdparty/_merge.js +7 -4
  907. package/dist/thirdparty/_merge.js.map +1 -0
  908. package/dist/thirdparty/isPlainObject.d.ts +2 -0
  909. package/dist/thirdparty/isPlainObject.js +11 -10
  910. package/dist/thirdparty/isPlainObject.js.map +1 -0
  911. package/dist/thirdparty/merge.d.ts +2 -0
  912. package/dist/thirdparty/merge.js +4 -8
  913. package/dist/thirdparty/merge.js.map +1 -0
  914. package/dist/thirdparty/preact/jsx.d.ts +2616 -0
  915. package/dist/thirdparty/preact/jsxRuntime.module.d.ts +62 -0
  916. package/dist/thirdparty/preact/jsxRuntime.module.js +1 -0
  917. package/dist/thirdparty/preact/preact.module.d.ts +398 -0
  918. package/dist/thirdparty/preact/preact.module.js +1 -0
  919. package/dist/types/AnimationMode.d.ts +24 -0
  920. package/dist/types/AnimationMode.js +25 -6
  921. package/dist/types/AnimationMode.js.map +1 -0
  922. package/dist/types/CalendarType.d.ts +28 -0
  923. package/dist/types/CalendarType.js +26 -18
  924. package/dist/types/CalendarType.js.map +1 -0
  925. package/dist/types/InvisibleMessageMode.d.ts +20 -0
  926. package/dist/types/InvisibleMessageMode.js +20 -0
  927. package/dist/types/InvisibleMessageMode.js.map +1 -0
  928. package/dist/types/ItemNavigationBehavior.d.ts +18 -0
  929. package/dist/types/ItemNavigationBehavior.js +16 -17
  930. package/dist/types/ItemNavigationBehavior.js.map +1 -0
  931. package/dist/types/MovePlacement.d.ts +20 -0
  932. package/dist/types/MovePlacement.js +22 -0
  933. package/dist/types/MovePlacement.js.map +1 -0
  934. package/dist/types/NavigationMode.d.ts +24 -0
  935. package/dist/types/NavigationMode.js +25 -5
  936. package/dist/types/NavigationMode.js.map +1 -0
  937. package/dist/types/Orientation.d.ts +16 -0
  938. package/dist/types/Orientation.js +18 -0
  939. package/dist/types/Orientation.js.map +1 -0
  940. package/dist/types/SortOrder.d.ts +24 -0
  941. package/dist/types/SortOrder.js +26 -0
  942. package/dist/types/SortOrder.js.map +1 -0
  943. package/dist/types/ValueState.d.ts +28 -0
  944. package/dist/types/ValueState.js +27 -19
  945. package/dist/types/ValueState.js.map +1 -0
  946. package/dist/types.d.ts +49 -0
  947. package/dist/types.js +2 -0
  948. package/dist/types.js.map +1 -0
  949. package/dist/updateShadowRoot.d.ts +7 -0
  950. package/dist/updateShadowRoot.js +18 -0
  951. package/dist/updateShadowRoot.js.map +1 -0
  952. package/dist/util/AccessibilityTextsHelper.d.ts +17 -0
  953. package/dist/util/AccessibilityTextsHelper.js +199 -0
  954. package/dist/util/AccessibilityTextsHelper.js.map +1 -0
  955. package/dist/util/Caret.d.ts +7 -0
  956. package/dist/util/Caret.js +23 -0
  957. package/dist/util/Caret.js.map +1 -0
  958. package/dist/util/ColorConversion.d.ts +31 -0
  959. package/dist/util/ColorConversion.js +354 -0
  960. package/dist/util/ColorConversion.js.map +1 -0
  961. package/dist/util/FetchHelper.d.ts +3 -0
  962. package/dist/util/FetchHelper.js +19 -25
  963. package/dist/util/FetchHelper.js.map +1 -0
  964. package/dist/util/FocusableElements.d.ts +4 -0
  965. package/dist/util/FocusableElements.js +96 -56
  966. package/dist/util/FocusableElements.js.map +1 -0
  967. package/dist/util/HTMLSanitizer.d.ts +5 -0
  968. package/dist/util/HTMLSanitizer.js +6 -0
  969. package/dist/util/HTMLSanitizer.js.map +1 -0
  970. package/dist/util/InvisibleMessage.d.ts +10 -0
  971. package/dist/util/InvisibleMessage.js +56 -0
  972. package/dist/util/InvisibleMessage.js.map +1 -0
  973. package/dist/util/PopupUtils.d.ts +5 -0
  974. package/dist/util/PopupUtils.js +60 -0
  975. package/dist/util/PopupUtils.js.map +1 -0
  976. package/dist/util/SelectionAssistant.d.ts +12 -0
  977. package/dist/util/SelectionAssistant.js +71 -0
  978. package/dist/util/SelectionAssistant.js.map +1 -0
  979. package/dist/util/SlotsHelper.d.ts +9 -0
  980. package/dist/util/SlotsHelper.js +30 -0
  981. package/dist/util/SlotsHelper.js.map +1 -0
  982. package/dist/util/StringHelper.d.ts +5 -0
  983. package/dist/util/StringHelper.js +32 -21
  984. package/dist/util/StringHelper.js.map +1 -0
  985. package/dist/util/TabbableElements.d.ts +17 -0
  986. package/dist/util/TabbableElements.js +46 -43
  987. package/dist/util/TabbableElements.js.map +1 -0
  988. package/dist/util/arraysAreEqual.d.ts +2 -0
  989. package/dist/util/arraysAreEqual.js +13 -0
  990. package/dist/util/arraysAreEqual.js.map +1 -0
  991. package/dist/util/clamp.d.ts +9 -0
  992. package/dist/util/clamp.js +13 -0
  993. package/dist/util/clamp.js.map +1 -0
  994. package/dist/util/createInstanceChecker.d.ts +2 -0
  995. package/dist/util/createInstanceChecker.js +8 -0
  996. package/dist/util/createInstanceChecker.js.map +1 -0
  997. package/dist/util/createLinkInHead.d.ts +7 -0
  998. package/dist/util/createLinkInHead.js +21 -0
  999. package/dist/util/createLinkInHead.js.map +1 -0
  1000. package/dist/util/createMultiInstanceChecker.d.ts +2 -0
  1001. package/dist/util/createMultiInstanceChecker.js +19 -0
  1002. package/dist/util/createMultiInstanceChecker.js.map +1 -0
  1003. package/dist/util/debounce.d.ts +2 -0
  1004. package/dist/util/debounce.js +15 -0
  1005. package/dist/util/debounce.js.map +1 -0
  1006. package/dist/util/detectNavigatorLanguage.d.ts +2 -0
  1007. package/dist/util/detectNavigatorLanguage.js +13 -11
  1008. package/dist/util/detectNavigatorLanguage.js.map +1 -0
  1009. package/dist/util/dragAndDrop/DragRegistry.d.ts +39 -0
  1010. package/dist/util/dragAndDrop/DragRegistry.js +62 -0
  1011. package/dist/util/dragAndDrop/DragRegistry.js.map +1 -0
  1012. package/dist/util/dragAndDrop/findClosestPosition.d.ts +12 -0
  1013. package/dist/util/dragAndDrop/findClosestPosition.js +106 -0
  1014. package/dist/util/dragAndDrop/findClosestPosition.js.map +1 -0
  1015. package/dist/util/dragAndDrop/handleDragOver.d.ts +16 -0
  1016. package/dist/util/dragAndDrop/handleDragOver.js +42 -0
  1017. package/dist/util/dragAndDrop/handleDragOver.js.map +1 -0
  1018. package/dist/util/dragAndDrop/handleDrop.d.ts +5 -0
  1019. package/dist/util/dragAndDrop/handleDrop.js +22 -0
  1020. package/dist/util/dragAndDrop/handleDrop.js.map +1 -0
  1021. package/dist/util/dragAndDrop/longDragOverHandler.d.ts +2 -0
  1022. package/dist/util/dragAndDrop/longDragOverHandler.js +25 -0
  1023. package/dist/util/dragAndDrop/longDragOverHandler.js.map +1 -0
  1024. package/dist/util/escapeRegex.d.ts +8 -0
  1025. package/dist/util/escapeRegex.js +11 -0
  1026. package/dist/util/escapeRegex.js.map +1 -0
  1027. package/dist/util/fixSafariActiveState.d.ts +2 -0
  1028. package/dist/util/fixSafariActiveState.js +11 -0
  1029. package/dist/util/fixSafariActiveState.js.map +1 -0
  1030. package/dist/util/formatMessage.d.ts +2 -0
  1031. package/dist/util/formatMessage.js +15 -19
  1032. package/dist/util/formatMessage.js.map +1 -0
  1033. package/dist/util/generateHighlightedMarkup.d.ts +9 -0
  1034. package/dist/util/generateHighlightedMarkup.js +41 -0
  1035. package/dist/util/generateHighlightedMarkup.js.map +1 -0
  1036. package/dist/util/generateHighlightedMarkupFirstMatch.d.ts +10 -0
  1037. package/dist/util/generateHighlightedMarkupFirstMatch.js +36 -0
  1038. package/dist/util/generateHighlightedMarkupFirstMatch.js.map +1 -0
  1039. package/dist/util/getActiveElement.d.ts +2 -0
  1040. package/dist/util/getActiveElement.js +9 -0
  1041. package/dist/util/getActiveElement.js.map +1 -0
  1042. package/dist/util/getClassCopy.d.ts +443 -0
  1043. package/dist/util/getClassCopy.js +10 -0
  1044. package/dist/util/getClassCopy.js.map +1 -0
  1045. package/dist/util/getDesigntimePropertyAsArray.d.ts +2 -0
  1046. package/dist/util/getDesigntimePropertyAsArray.js +5 -3
  1047. package/dist/util/getDesigntimePropertyAsArray.js.map +1 -0
  1048. package/dist/util/getEffectiveContentDensity.d.ts +2 -0
  1049. package/dist/util/getEffectiveContentDensity.js +4 -0
  1050. package/dist/util/getEffectiveContentDensity.js.map +1 -0
  1051. package/dist/util/getFastNavigationGroups.d.ts +2 -0
  1052. package/dist/util/getFastNavigationGroups.js +56 -0
  1053. package/dist/util/getFastNavigationGroups.js.map +1 -0
  1054. package/dist/util/getFileExtension.d.ts +12 -0
  1055. package/dist/util/getFileExtension.js +9 -11
  1056. package/dist/util/getFileExtension.js.map +1 -0
  1057. package/dist/util/getNormalizedTarget.d.ts +7 -0
  1058. package/dist/util/getNormalizedTarget.js +14 -0
  1059. package/dist/util/getNormalizedTarget.js.map +1 -0
  1060. package/dist/util/getParentElement.d.ts +2 -0
  1061. package/dist/util/getParentElement.js +5 -0
  1062. package/dist/util/getParentElement.js.map +1 -0
  1063. package/dist/util/getSingletonElementInstance.d.ts +11 -0
  1064. package/dist/util/getSingletonElementInstance.js +19 -0
  1065. package/dist/util/getSingletonElementInstance.js.map +1 -0
  1066. package/dist/util/hash2str.d.ts +1 -0
  1067. package/dist/util/hash2str.js +14 -0
  1068. package/dist/util/hash2str.js.map +1 -0
  1069. package/dist/util/isElementClickable.d.ts +2 -0
  1070. package/dist/util/isElementClickable.js +16 -0
  1071. package/dist/util/isElementClickable.js.map +1 -0
  1072. package/dist/util/isElementHidden.d.ts +2 -0
  1073. package/dist/util/isElementHidden.js +9 -0
  1074. package/dist/util/isElementHidden.js.map +1 -0
  1075. package/dist/util/isElementInView.d.ts +6 -0
  1076. package/dist/util/isElementInView.js +12 -0
  1077. package/dist/util/isElementInView.js.map +1 -0
  1078. package/dist/util/isElementTabbable.d.ts +9 -0
  1079. package/dist/util/isElementTabbable.js +30 -0
  1080. package/dist/util/isElementTabbable.js.map +1 -0
  1081. package/dist/util/isEventMarked.d.ts +2 -0
  1082. package/dist/util/isEventMarked.js +6 -0
  1083. package/dist/util/isEventMarked.js.map +1 -0
  1084. package/dist/util/isValidPropertyName.d.ts +8 -0
  1085. package/dist/util/isValidPropertyName.js +19 -14
  1086. package/dist/util/isValidPropertyName.js.map +1 -0
  1087. package/dist/util/throttle.d.ts +2 -0
  1088. package/dist/util/throttle.js +20 -0
  1089. package/dist/util/throttle.js.map +1 -0
  1090. package/dist/util/toLowercaseEnumValue.d.ts +3 -0
  1091. package/dist/util/toLowercaseEnumValue.js +4 -0
  1092. package/dist/util/toLowercaseEnumValue.js.map +1 -0
  1093. package/dist/util/valueStateNavigation.d.ts +8 -0
  1094. package/dist/util/valueStateNavigation.js +40 -0
  1095. package/dist/util/valueStateNavigation.js.map +1 -0
  1096. package/dist/util/whenDOMReady.d.ts +2 -0
  1097. package/dist/util/whenDOMReady.js +11 -10
  1098. package/dist/util/whenDOMReady.js.map +1 -0
  1099. package/dist/util/willShowContent.d.ts +2 -0
  1100. package/dist/util/willShowContent.js +7 -0
  1101. package/dist/util/willShowContent.js.map +1 -0
  1102. package/dist/validateThemeRoot.d.ts +2 -0
  1103. package/dist/validateThemeRoot.js +60 -0
  1104. package/dist/validateThemeRoot.js.map +1 -0
  1105. package/dist/vscode.html-custom-data.json +22 -0
  1106. package/package-scripts.cjs +105 -0
  1107. package/package.json +70 -22
  1108. package/src/css/BusyIndicator.css +80 -0
  1109. package/src/css/MultipleDragGhost.css +17 -0
  1110. package/src/css/OpenUI5PopupStyles.css +10 -0
  1111. package/src/css/ScrollbarStyles.css +3 -0
  1112. package/src/css/SystemCSSVars.css +34 -0
  1113. package/src/i18n/messagebundle.properties +5 -0
  1114. package/src/i18n/messagebundle_ar.properties +2 -0
  1115. package/src/i18n/messagebundle_bg.properties +2 -0
  1116. package/src/i18n/messagebundle_ca.properties +2 -0
  1117. package/src/i18n/messagebundle_cnr.properties +2 -0
  1118. package/src/i18n/messagebundle_cs.properties +2 -0
  1119. package/src/i18n/messagebundle_cy.properties +2 -0
  1120. package/src/i18n/messagebundle_da.properties +2 -0
  1121. package/src/i18n/messagebundle_de.properties +2 -0
  1122. package/src/i18n/messagebundle_el.properties +2 -0
  1123. package/src/i18n/messagebundle_en.properties +2 -0
  1124. package/src/i18n/messagebundle_en_GB.properties +2 -0
  1125. package/src/i18n/messagebundle_en_US_sappsd.properties +2 -0
  1126. package/src/i18n/messagebundle_en_US_saprigi.properties +2 -0
  1127. package/src/i18n/messagebundle_en_US_saptrc.properties +2 -0
  1128. package/src/i18n/messagebundle_es.properties +2 -0
  1129. package/src/i18n/messagebundle_es_MX.properties +2 -0
  1130. package/src/i18n/messagebundle_et.properties +2 -0
  1131. package/src/i18n/messagebundle_fi.properties +2 -0
  1132. package/src/i18n/messagebundle_fr.properties +2 -0
  1133. package/src/i18n/messagebundle_fr_CA.properties +2 -0
  1134. package/src/i18n/messagebundle_hi.properties +2 -0
  1135. package/src/i18n/messagebundle_hr.properties +2 -0
  1136. package/src/i18n/messagebundle_hu.properties +2 -0
  1137. package/src/i18n/messagebundle_id.properties +2 -0
  1138. package/src/i18n/messagebundle_it.properties +2 -0
  1139. package/src/i18n/messagebundle_iw.properties +2 -0
  1140. package/src/i18n/messagebundle_ja.properties +2 -0
  1141. package/src/i18n/messagebundle_kk.properties +2 -0
  1142. package/src/i18n/messagebundle_ko.properties +2 -0
  1143. package/src/i18n/messagebundle_lt.properties +2 -0
  1144. package/src/i18n/messagebundle_lv.properties +2 -0
  1145. package/src/i18n/messagebundle_mk.properties +2 -0
  1146. package/src/i18n/messagebundle_ms.properties +2 -0
  1147. package/src/i18n/messagebundle_nl.properties +2 -0
  1148. package/src/i18n/messagebundle_no.properties +2 -0
  1149. package/src/i18n/messagebundle_pl.properties +2 -0
  1150. package/src/i18n/messagebundle_pt.properties +2 -0
  1151. package/src/i18n/messagebundle_pt_PT.properties +2 -0
  1152. package/src/i18n/messagebundle_ro.properties +2 -0
  1153. package/src/i18n/messagebundle_ru.properties +2 -0
  1154. package/src/i18n/messagebundle_sh.properties +2 -0
  1155. package/src/i18n/messagebundle_sk.properties +2 -0
  1156. package/src/i18n/messagebundle_sl.properties +2 -0
  1157. package/src/i18n/messagebundle_sr.properties +2 -0
  1158. package/src/i18n/messagebundle_sv.properties +2 -0
  1159. package/src/i18n/messagebundle_th.properties +2 -0
  1160. package/src/i18n/messagebundle_tr.properties +2 -0
  1161. package/src/i18n/messagebundle_uk.properties +2 -0
  1162. package/src/i18n/messagebundle_vi.properties +2 -0
  1163. package/src/i18n/messagebundle_zh_CN.properties +2 -0
  1164. package/src/i18n/messagebundle_zh_TW.properties +2 -0
  1165. package/src/react18/createReactComponent.tsx +140 -0
  1166. package/src/thirdparty/preact/jsxRuntime.module.js +1 -0
  1167. package/src/thirdparty/preact/preact.module.js +1 -0
  1168. package/src/thirdparty/preact/version.txt +1 -0
  1169. package/tsconfig.json +19 -0
  1170. package/.eslintignore +0 -11
  1171. package/bundle.es5.js +0 -28
  1172. package/bundle.esm.js +0 -49
  1173. package/config/.eslintrc.js +0 -3
  1174. package/config/rollup.config.js +0 -1
  1175. package/config/wdio.conf.js +0 -1
  1176. package/dist/RenderScheduler.js +0 -146
  1177. package/dist/SVGIconRegistry.js +0 -60
  1178. package/dist/StaticArea.js +0 -41
  1179. package/dist/StaticAreaItem.js +0 -105
  1180. package/dist/animations/config.js +0 -5
  1181. package/dist/boot.js +0 -32
  1182. package/dist/compatibility/DOMObserver.js +0 -62
  1183. package/dist/compatibility/patchNodeValue.js +0 -24
  1184. package/dist/compatibility/whenPolyfillLoaded.js +0 -26
  1185. package/dist/config/RTL.js +0 -31
  1186. package/dist/delegate/CustomResize.js +0 -78
  1187. package/dist/delegate/NativeResize.js +0 -44
  1188. package/dist/features/browsersupport/Edge.js +0 -6
  1189. package/dist/features/browsersupport/IE11.js +0 -41
  1190. package/dist/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  1191. package/dist/renderer/ifDefined.js +0 -21
  1192. package/dist/resources/bundle.es5.js +0 -212
  1193. package/dist/resources/bundle.es5.js.map +0 -1
  1194. package/dist/resources/bundle.esm.js +0 -129
  1195. package/dist/resources/bundle.esm.js.map +0 -1
  1196. package/dist/test-resources/assets/Themes.js +0 -13
  1197. package/dist/test-resources/elements/Child.js +0 -35
  1198. package/dist/test-resources/elements/Generic.js +0 -84
  1199. package/dist/test-resources/elements/GenericExt.js +0 -26
  1200. package/dist/test-resources/elements/NoShadowDOM.js +0 -13
  1201. package/dist/test-resources/elements/Parent.js +0 -37
  1202. package/dist/test-resources/elements/WithStaticArea.js +0 -76
  1203. package/dist/test-resources/pages/AllTestElements.html +0 -42
  1204. package/dist/test-resources/pages/Configuration.html +0 -20
  1205. package/dist/test-resources/pages/ConfigurationScript.html +0 -36
  1206. package/dist/test-resources/specs/ConfigurationChange.spec.js +0 -25
  1207. package/dist/test-resources/specs/ConfigurationScript.spec.js +0 -61
  1208. package/dist/test-resources/specs/ConfigurationURL.spec.js +0 -45
  1209. package/dist/test-resources/specs/CustomTheme.spec.js +0 -25
  1210. package/dist/test-resources/specs/StaticArea.spec.js +0 -34
  1211. package/dist/test-resources/specs/Theming.spec.js +0 -31
  1212. package/dist/test-resources/specs/UI5ElementInvalidation.js +0 -258
  1213. package/dist/test-resources/specs/UI5ElementLifecycle.js +0 -93
  1214. package/dist/test-resources/specs/UI5ElementListenForChildPropChanges.spec.js +0 -101
  1215. package/dist/test-resources/specs/UI5ElementMetadataExt.js +0 -40
  1216. package/dist/test-resources/specs/UI5ElementPropertyValidation.js +0 -12
  1217. package/dist/test-resources/specs/UI5ElementPropsAndAttrs.spec.js +0 -65
  1218. package/dist/test-resources/specs/UI5ElementShadowDOM.js +0 -22
  1219. package/dist/test-resources/specs/UI5ElementSlots.js +0 -34
  1220. package/dist/theming/CSSVarsPonyfill.js +0 -24
  1221. package/dist/theming/adaptCSSForIE.js +0 -90
  1222. package/dist/theming/createComponentStyleTag.js +0 -49
  1223. package/dist/theming/createThemePropertiesStyleTag.js +0 -20
  1224. package/dist/thirdparty/Array.from.js +0 -16
  1225. package/dist/thirdparty/Array.prototype.fill.js +0 -44
  1226. package/dist/thirdparty/Array.prototype.find.js +0 -46
  1227. package/dist/thirdparty/Array.prototype.includes.js +0 -51
  1228. package/dist/thirdparty/Element.prototype.closest.js +0 -11
  1229. package/dist/thirdparty/Element.prototype.matches.js +0 -6
  1230. package/dist/thirdparty/Map.prototype.keys.js +0 -9
  1231. package/dist/thirdparty/Number.isInteger.js +0 -5
  1232. package/dist/thirdparty/Number.isNaN.js +0 -1
  1233. package/dist/thirdparty/Number.parseInt.js +0 -1
  1234. package/dist/thirdparty/Object.assign.js +0 -31
  1235. package/dist/thirdparty/Object.entries.js +0 -11
  1236. package/dist/thirdparty/Symbol.js +0 -2
  1237. package/dist/thirdparty/WeakSet.js +0 -27
  1238. package/dist/thirdparty/es6-string-methods.js +0 -182
  1239. package/dist/thirdparty/events-polyfills.js +0 -89
  1240. package/dist/thirdparty/fetch.js +0 -1
  1241. package/dist/thirdparty/template.js +0 -600
  1242. package/dist/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  1243. package/dist/types/CSSSize.js +0 -9
  1244. package/dist/types/DataType.js +0 -25
  1245. package/dist/types/Integer.js +0 -9
  1246. package/dist/types/PopupState.js +0 -37
  1247. package/dist/util/createStyleInHead.js +0 -18
  1248. package/dist/util/findNodeOwner.js +0 -35
  1249. package/dist/util/isDescendantOf.js +0 -15
  1250. package/dist/util/isNodeClickable.js +0 -19
  1251. package/dist/util/isNodeHidden.js +0 -13
  1252. package/dist/util/isNodeTabbable.js +0 -28
  1253. package/dist/webcomponentsjs/LICENSE.md +0 -19
  1254. package/dist/webcomponentsjs/README.md +0 -229
  1255. package/dist/webcomponentsjs/bundles/webcomponents-ce.js +0 -63
  1256. package/dist/webcomponentsjs/bundles/webcomponents-ce.js.map +0 -1
  1257. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js +0 -297
  1258. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js.map +0 -1
  1259. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js +0 -208
  1260. package/dist/webcomponentsjs/bundles/webcomponents-sd-ce.js.map +0 -1
  1261. package/dist/webcomponentsjs/bundles/webcomponents-sd.js +0 -166
  1262. package/dist/webcomponentsjs/bundles/webcomponents-sd.js.map +0 -1
  1263. package/dist/webcomponentsjs/custom-elements-es5-adapter.js +0 -15
  1264. package/dist/webcomponentsjs/package.json +0 -46
  1265. package/dist/webcomponentsjs/src/entrypoints/custom-elements-es5-adapter-index.js +0 -16
  1266. package/dist/webcomponentsjs/src/entrypoints/webcomponents-bundle-index.js +0 -53
  1267. package/dist/webcomponentsjs/src/entrypoints/webcomponents-ce-index.js +0 -17
  1268. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-index.js +0 -19
  1269. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-ce-pf-index.js +0 -28
  1270. package/dist/webcomponentsjs/src/entrypoints/webcomponents-sd-index.js +0 -18
  1271. package/dist/webcomponentsjs/webcomponents-bundle.js +0 -298
  1272. package/dist/webcomponentsjs/webcomponents-bundle.js.map +0 -1
  1273. package/dist/webcomponentsjs/webcomponents-loader.js +0 -185
  1274. package/index.js +0 -4
  1275. package/lib/generate-asset-parameters/index.js +0 -22
  1276. package/package-scripts.js +0 -47
  1277. package/src/AssetRegistry.js +0 -9
  1278. package/src/CustomElementsRegistry.js +0 -23
  1279. package/src/Device.js +0 -823
  1280. package/src/EventProvider.js +0 -73
  1281. package/src/FeaturesRegistry.js +0 -11
  1282. package/src/FontFace.js +0 -73
  1283. package/src/InitialConfiguration.js +0 -131
  1284. package/src/Keys.js +0 -161
  1285. package/src/RenderQueue.js +0 -42
  1286. package/src/RenderScheduler.js +0 -146
  1287. package/src/SVGIconRegistry.js +0 -60
  1288. package/src/StaticArea.js +0 -41
  1289. package/src/StaticAreaItem.js +0 -105
  1290. package/src/Theming.js +0 -3
  1291. package/src/UI5Element.js +0 -898
  1292. package/src/UI5ElementMetadata.js +0 -173
  1293. package/src/animations/AnimationQueue.js +0 -42
  1294. package/src/animations/animate.js +0 -53
  1295. package/src/animations/config.js +0 -5
  1296. package/src/animations/scroll.js +0 -28
  1297. package/src/animations/slideDown.js +0 -79
  1298. package/src/animations/slideUp.js +0 -71
  1299. package/src/asset-registries/Icons.js +0 -24
  1300. package/src/asset-registries/LocaleData.js +0 -125
  1301. package/src/asset-registries/Themes.js +0 -87
  1302. package/src/asset-registries/i18n.js +0 -79
  1303. package/src/boot.js +0 -32
  1304. package/src/compatibility/DOMObserver.js +0 -62
  1305. package/src/compatibility/patchNodeValue.js +0 -24
  1306. package/src/compatibility/whenPolyfillLoaded.js +0 -26
  1307. package/src/config/AnimationMode.js +0 -13
  1308. package/src/config/CalendarType.js +0 -18
  1309. package/src/config/FormatSettings.js +0 -13
  1310. package/src/config/Language.js +0 -12
  1311. package/src/config/NoConflict.js +0 -51
  1312. package/src/config/RTL.js +0 -31
  1313. package/src/config/Theme.js +0 -28
  1314. package/src/delegate/CustomResize.js +0 -78
  1315. package/src/delegate/ItemNavigation.js +0 -278
  1316. package/src/delegate/NativeResize.js +0 -44
  1317. package/src/delegate/ResizeHandler.js +0 -66
  1318. package/src/delegate/ScrollEnablement.js +0 -159
  1319. package/src/features/OpenUI5Support.js +0 -90
  1320. package/src/features/browsersupport/Edge.js +0 -6
  1321. package/src/features/browsersupport/IE11.js +0 -41
  1322. package/src/features/browsersupport/IE11WithWebComponentsPolyfill.js +0 -5
  1323. package/src/i18nBundle.js +0 -33
  1324. package/src/locale/Locale.js +0 -91
  1325. package/src/locale/getLocale.js +0 -31
  1326. package/src/locale/nextFallbackLocale.js +0 -28
  1327. package/src/locale/normalizeLocale.js +0 -54
  1328. package/src/renderer/LitRenderer.js +0 -15
  1329. package/src/renderer/ifDefined.js +0 -21
  1330. package/src/theming/CSSVarsPonyfill.js +0 -24
  1331. package/src/theming/CustomStyle.js +0 -19
  1332. package/src/theming/adaptCSSForIE.js +0 -90
  1333. package/src/theming/applyTheme.js +0 -81
  1334. package/src/theming/createComponentStyleTag.js +0 -49
  1335. package/src/theming/createThemePropertiesStyleTag.js +0 -20
  1336. package/src/theming/getConstructableStyle.js +0 -25
  1337. package/src/theming/getEffectiveStyle.js +0 -15
  1338. package/src/theming/getThemeDesignerTheme.js +0 -67
  1339. package/src/thirdparty/Array.from.js +0 -16
  1340. package/src/thirdparty/Array.prototype.fill.js +0 -44
  1341. package/src/thirdparty/Array.prototype.find.js +0 -46
  1342. package/src/thirdparty/Array.prototype.includes.js +0 -51
  1343. package/src/thirdparty/Element.prototype.closest.js +0 -11
  1344. package/src/thirdparty/Element.prototype.matches.js +0 -6
  1345. package/src/thirdparty/Map.prototype.keys.js +0 -9
  1346. package/src/thirdparty/Number.isInteger.js +0 -5
  1347. package/src/thirdparty/Number.isNaN.js +0 -1
  1348. package/src/thirdparty/Number.parseInt.js +0 -1
  1349. package/src/thirdparty/Object.assign.js +0 -31
  1350. package/src/thirdparty/Object.entries.js +0 -11
  1351. package/src/thirdparty/Symbol.js +0 -2
  1352. package/src/thirdparty/WeakSet.js +0 -27
  1353. package/src/thirdparty/_merge.js +0 -32
  1354. package/src/thirdparty/es6-string-methods.js +0 -182
  1355. package/src/thirdparty/events-polyfills.js +0 -89
  1356. package/src/thirdparty/fetch.js +0 -1
  1357. package/src/thirdparty/isPlainObject.js +0 -18
  1358. package/src/thirdparty/merge.js +0 -10
  1359. package/src/thirdparty/template.js +0 -600
  1360. package/src/thirdparty/webcomponents-sd-ce-pf.js +0 -318
  1361. package/src/types/AnimationMode.js +0 -7
  1362. package/src/types/CSSSize.js +0 -9
  1363. package/src/types/CalendarType.js +0 -22
  1364. package/src/types/DataType.js +0 -25
  1365. package/src/types/Integer.js +0 -9
  1366. package/src/types/ItemNavigationBehavior.js +0 -21
  1367. package/src/types/NavigationMode.js +0 -6
  1368. package/src/types/PopupState.js +0 -37
  1369. package/src/types/ValueState.js +0 -22
  1370. package/src/util/FetchHelper.js +0 -31
  1371. package/src/util/FocusableElements.js +0 -60
  1372. package/src/util/StringHelper.js +0 -26
  1373. package/src/util/TabbableElements.js +0 -47
  1374. package/src/util/createStyleInHead.js +0 -18
  1375. package/src/util/detectNavigatorLanguage.js +0 -13
  1376. package/src/util/findNodeOwner.js +0 -35
  1377. package/src/util/formatMessage.js +0 -23
  1378. package/src/util/getDesigntimePropertyAsArray.js +0 -4
  1379. package/src/util/getFileExtension.js +0 -21
  1380. package/src/util/isDescendantOf.js +0 -15
  1381. package/src/util/isNodeClickable.js +0 -19
  1382. package/src/util/isNodeHidden.js +0 -13
  1383. package/src/util/isNodeTabbable.js +0 -28
  1384. package/src/util/isValidPropertyName.js +0 -23
  1385. package/src/util/whenDOMReady.js +0 -13
@@ -0,0 +1,3612 @@
1
+ (function() {
2
+ /* Copyright Google Inc.
3
+ * Licensed under the Apache Licence Version 2.0
4
+ * Autogenerated at Tue May 22 10:18:21 PDT 2012
5
+ * \@overrides window
6
+ * \@provides cssSchema, CSS_PROP_BIT_QUANTITY, CSS_PROP_BIT_HASH_VALUE, CSS_PROP_BIT_NEGATIVE_QUANTITY, CSS_PROP_BIT_QSTRING_CONTENT, CSS_PROP_BIT_QSTRING_URL, CSS_PROP_BIT_HISTORY_INSENSITIVE, CSS_PROP_BIT_Z_INDEX, CSS_PROP_BIT_ALLOWED_IN_LINK */
7
+ /**
8
+ * @const
9
+ * @type {number}
10
+ */
11
+ var CSS_PROP_BIT_QUANTITY = 1;
12
+ /**
13
+ * @const
14
+ * @type {number}
15
+ */
16
+ var CSS_PROP_BIT_HASH_VALUE = 2;
17
+ /**
18
+ * @const
19
+ * @type {number}
20
+ */
21
+ var CSS_PROP_BIT_NEGATIVE_QUANTITY = 4;
22
+ /**
23
+ * @const
24
+ * @type {number}
25
+ */
26
+ var CSS_PROP_BIT_QSTRING_CONTENT = 8;
27
+ /**
28
+ * @const
29
+ * @type {number}
30
+ */
31
+ var CSS_PROP_BIT_QSTRING_URL = 16;
32
+ /**
33
+ * @const
34
+ * @type {number}
35
+ */
36
+ var CSS_PROP_BIT_HISTORY_INSENSITIVE = 32;
37
+ /**
38
+ * @const
39
+ * @type {number}
40
+ */
41
+ var CSS_PROP_BIT_Z_INDEX = 64;
42
+ /**
43
+ * @const
44
+ * @type {number}
45
+ */
46
+ var CSS_PROP_BIT_ALLOWED_IN_LINK = 128;
47
+ var cssSchema = (function () {
48
+ var s = [
49
+ 'rgb(?:\\(\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)|a\\(\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0|\\d+(?:\\.\\d+)?%)\\s*,\\s*(?:\\d+|0(?:\\.\\d+)?|\\.\\d+|1(?:\\.0+)?|0|\\d+(?:\\.\\d+)?%)) *\\)'
50
+ ], c = [ /^ *$/i, RegExp('^ *(?:\\s*' + s[ 0 ] + '|(?:\\s*' + s[ 0 ] +
51
+ ')?)+ *$', 'i'), RegExp('^ *\\s*' + s[ 0 ] + ' *$', 'i'),
52
+ RegExp('^ *\\s*' + s[ 0 ] + '\\s*' + s[ 0 ] + ' *$', 'i') ], L = [ [
53
+ 'aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige',
54
+ 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown',
55
+ 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral',
56
+ 'cornflowerblue', 'cornsilk', 'crimson', 'cyan', 'darkblue',
57
+ 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkkhaki',
58
+ 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred',
59
+ 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray',
60
+ 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray',
61
+ 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia',
62
+ 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green',
63
+ 'greenyellow', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory',
64
+ 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon',
65
+ 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow',
66
+ 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen',
67
+ 'lightskyblue', 'lightslategray', 'lightsteelblue', 'lightyellow',
68
+ 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine',
69
+ 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
70
+ 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise',
71
+ 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose',
72
+ 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab',
73
+ 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen',
74
+ 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru',
75
+ 'pink', 'plum', 'powderblue', 'purple', 'red', 'rosybrown',
76
+ 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen',
77
+ 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray',
78
+ 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato',
79
+ 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow',
80
+ 'yellowgreen' ], [ 'all-scroll', 'col-resize', 'crosshair', 'default',
81
+ 'e-resize', 'hand', 'help', 'move', 'n-resize', 'ne-resize', 'no-drop',
82
+ 'not-allowed', 'nw-resize', 'pointer', 'progress', 'row-resize',
83
+ 's-resize', 'se-resize', 'sw-resize', 'text', 'vertical-text',
84
+ 'w-resize', 'wait' ], [ '-moz-inline-box', '-moz-inline-stack',
85
+ 'block', 'inline', 'inline-block', 'inline-table', 'list-item',
86
+ 'run-in', 'table', 'table-caption', 'table-cell', 'table-column',
87
+ 'table-column-group', 'table-footer-group', 'table-header-group',
88
+ 'table-row', 'table-row-group' ], [ 'armenian', 'circle', 'decimal',
89
+ 'decimal-leading-zero', 'disc', 'georgian', 'lower-alpha',
90
+ 'lower-greek', 'lower-latin', 'lower-roman', 'square', 'upper-alpha',
91
+ 'upper-latin', 'upper-roman' ], [ '100', '200', '300', '400', '500',
92
+ '600', '700', '800', '900', 'bold', 'bolder', 'lighter' ], [
93
+ 'condensed', 'expanded', 'extra-condensed', 'extra-expanded',
94
+ 'narrower', 'semi-condensed', 'semi-expanded', 'ultra-condensed',
95
+ 'ultra-expanded', 'wider' ], [ 'behind', 'center-left', 'center-right',
96
+ 'far-left', 'far-right', 'left-side', 'leftwards', 'right-side',
97
+ 'rightwards' ], [ 'large', 'larger', 'small', 'smaller', 'x-large',
98
+ 'x-small', 'xx-large', 'xx-small' ], [ '-moz-pre-wrap', '-o-pre-wrap',
99
+ '-pre-wrap', 'nowrap', 'pre', 'pre-line', 'pre-wrap' ], [ 'dashed',
100
+ 'dotted', 'double', 'groove', 'outset', 'ridge', 'solid' ], [
101
+ 'baseline', 'middle', 'sub', 'super', 'text-bottom', 'text-top' ], [
102
+ 'caption', 'icon', 'menu', 'message-box', 'small-caption', 'status-bar'
103
+ ], [ 'fast', 'faster', 'slow', 'slower', 'x-fast', 'x-slow' ], [ 'above',
104
+ 'below', 'higher', 'level', 'lower' ], [ 'border-box', 'contain',
105
+ 'content-box', 'cover', 'padding-box' ], [ 'cursive', 'fantasy',
106
+ 'monospace', 'sans-serif', 'serif' ], [ 'loud', 'silent', 'soft',
107
+ 'x-loud', 'x-soft' ], [ 'no-repeat', 'repeat-x', 'repeat-y', 'round',
108
+ 'space' ], [ 'blink', 'line-through', 'overline', 'underline' ], [
109
+ 'high', 'low', 'x-high', 'x-low' ], [ 'absolute', 'relative', 'static'
110
+ ], [ 'capitalize', 'lowercase', 'uppercase' ], [ 'child', 'female',
111
+ 'male' ], [ 'bidi-override', 'embed' ], [ 'bottom', 'top' ], [ 'clip',
112
+ 'ellipsis' ], [ 'continuous', 'digits' ], [ 'hide', 'show' ], [
113
+ 'inside', 'outside' ], [ 'italic', 'oblique' ], [ 'left', 'right' ], [
114
+ 'ltr', 'rtl' ], [ 'no-content', 'no-display' ], [ 'suppress',
115
+ 'unrestricted' ], [ 'thick', 'thin' ], [ ',' ], [ '/' ], [ 'always' ],
116
+ [ 'auto' ], [ 'avoid' ], [ 'both' ], [ 'break-word' ], [ 'center' ], [
117
+ 'code' ], [ 'collapse' ], [ 'fixed' ], [ 'hidden' ], [ 'inherit' ], [
118
+ 'inset' ], [ 'invert' ], [ 'justify' ], [ 'local' ], [ 'medium' ], [
119
+ 'mix' ], [ 'none' ], [ 'normal' ], [ 'once' ], [ 'repeat' ], [ 'scroll'
120
+ ], [ 'separate' ], [ 'small-caps' ], [ 'spell-out' ], [ 'transparent' ],
121
+ [ 'visible' ],
122
+ // ##### BEGIN: MODIFIED BY SAP
123
+ [ 'flex', 'inline-flex', 'grid', 'inline-grid', 'flow-root', 'contents' ], [ 'initial', 'revert', 'revert-layer', 'unset' ]
124
+ // ##### END: MODIFIED BY SAP
125
+ ];
126
+ return {
127
+ '-moz-border-radius': {
128
+ 'cssExtra': c[ 0 ],
129
+ 'cssPropBits': 5,
130
+ 'cssLitGroup': [ L[ 36 ] ]
131
+ },
132
+ '-moz-border-radius-bottomleft': {
133
+ 'cssExtra': c[ 0 ],
134
+ 'cssPropBits': 5
135
+ },
136
+ '-moz-border-radius-bottomright': {
137
+ 'cssExtra': c[ 0 ],
138
+ 'cssPropBits': 5
139
+ },
140
+ '-moz-border-radius-topleft': {
141
+ 'cssExtra': c[ 0 ],
142
+ 'cssPropBits': 5
143
+ },
144
+ '-moz-border-radius-topright': {
145
+ 'cssExtra': c[ 0 ],
146
+ 'cssPropBits': 5
147
+ },
148
+ '-moz-box-shadow': {
149
+ 'cssExtra': c[ 1 ],
150
+ 'cssAlternates': [ 'boxShadow' ],
151
+ 'cssPropBits': 7,
152
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
153
+ },
154
+ '-moz-opacity': {
155
+ 'cssPropBits': 1,
156
+ 'cssLitGroup': [ L[ 47 ] ]
157
+ },
158
+ '-moz-outline': {
159
+ 'cssExtra': c[ 3 ],
160
+ 'cssPropBits': 7,
161
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
162
+ 49 ], L[ 52 ], L[ 54 ] ]
163
+ },
164
+ '-moz-outline-color': {
165
+ 'cssExtra': c[ 2 ],
166
+ 'cssPropBits': 2,
167
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 49 ] ]
168
+ },
169
+ '-moz-outline-style': {
170
+ 'cssPropBits': 0,
171
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
172
+ },
173
+ '-moz-outline-width': {
174
+ 'cssPropBits': 5,
175
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
176
+ },
177
+ '-o-text-overflow': {
178
+ 'cssPropBits': 0,
179
+ 'cssLitGroup': [ L[ 25 ] ]
180
+ },
181
+ '-webkit-border-bottom-left-radius': {
182
+ 'cssExtra': c[ 0 ],
183
+ 'cssPropBits': 5
184
+ },
185
+ '-webkit-border-bottom-right-radius': {
186
+ 'cssExtra': c[ 0 ],
187
+ 'cssPropBits': 5
188
+ },
189
+ '-webkit-border-radius': {
190
+ 'cssExtra': c[ 0 ],
191
+ 'cssPropBits': 5,
192
+ 'cssLitGroup': [ L[ 36 ] ]
193
+ },
194
+ '-webkit-border-radius-bottom-left': {
195
+ 'cssExtra': c[ 0 ],
196
+ 'cssPropBits': 5
197
+ },
198
+ '-webkit-border-radius-bottom-right': {
199
+ 'cssExtra': c[ 0 ],
200
+ 'cssPropBits': 5
201
+ },
202
+ '-webkit-border-radius-top-left': {
203
+ 'cssExtra': c[ 0 ],
204
+ 'cssPropBits': 5
205
+ },
206
+ '-webkit-border-radius-top-right': {
207
+ 'cssExtra': c[ 0 ],
208
+ 'cssPropBits': 5
209
+ },
210
+ '-webkit-border-top-left-radius': {
211
+ 'cssExtra': c[ 0 ],
212
+ 'cssPropBits': 5
213
+ },
214
+ '-webkit-border-top-right-radius': {
215
+ 'cssExtra': c[ 0 ],
216
+ 'cssPropBits': 5
217
+ },
218
+ '-webkit-box-shadow': {
219
+ 'cssExtra': c[ 1 ],
220
+ 'cssAlternates': [ 'boxShadow' ],
221
+ 'cssPropBits': 7,
222
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
223
+ },
224
+ 'azimuth': {
225
+ 'cssPropBits': 5,
226
+ 'cssLitGroup': [ L[ 6 ], L[ 30 ], L[ 42 ], L[ 47 ] ]
227
+ },
228
+ 'background': {
229
+ 'cssExtra': RegExp('^ *(?:\\s*' + s[ 0 ] + '){0,2} *$', 'i'),
230
+ 'cssPropBits': 23,
231
+ 'cssLitGroup': [ L[ 0 ], L[ 14 ], L[ 17 ], L[ 24 ], L[ 30 ], L[ 35 ],
232
+ L[ 36 ], L[ 38 ], L[ 42 ], L[ 45 ], L[ 47 ], L[ 51 ], L[ 54 ], L[ 57
233
+ ], L[ 58 ], L[ 62 ] ]
234
+ },
235
+ 'background-attachment': {
236
+ 'cssExtra': c[ 0 ],
237
+ 'cssPropBits': 0,
238
+ 'cssLitGroup': [ L[ 35 ], L[ 45 ], L[ 51 ], L[ 58 ] ]
239
+ },
240
+ 'background-color': {
241
+ 'cssExtra': c[ 2 ],
242
+ 'cssPropBits': 130,
243
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
244
+ },
245
+ 'background-image': {
246
+ 'cssExtra': c[ 0 ],
247
+ 'cssPropBits': 16,
248
+ 'cssLitGroup': [ L[ 35 ], L[ 54 ] ]
249
+ },
250
+ 'background-position': {
251
+ 'cssExtra': c[ 0 ],
252
+ 'cssPropBits': 5,
253
+ 'cssLitGroup': [ L[ 24 ], L[ 30 ], L[ 35 ], L[ 42 ] ]
254
+ },
255
+ 'background-repeat': {
256
+ 'cssExtra': c[ 0 ],
257
+ 'cssPropBits': 0,
258
+ 'cssLitGroup': [ L[ 17 ], L[ 35 ], L[ 57 ] ]
259
+ },
260
+ 'border': {
261
+ 'cssExtra': c[ 3 ],
262
+ 'cssPropBits': 7,
263
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
264
+ 52 ], L[ 54 ], L[ 62 ] ]
265
+ },
266
+ 'border-bottom': {
267
+ 'cssExtra': c[ 3 ],
268
+ 'cssPropBits': 7,
269
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
270
+ 52 ], L[ 54 ], L[ 62 ] ]
271
+ },
272
+ 'border-bottom-color': {
273
+ 'cssExtra': c[ 2 ],
274
+ 'cssPropBits': 2,
275
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
276
+ },
277
+ 'border-bottom-left-radius': {
278
+ 'cssExtra': c[ 0 ],
279
+ 'cssPropBits': 5
280
+ },
281
+ 'border-bottom-right-radius': {
282
+ 'cssExtra': c[ 0 ],
283
+ 'cssPropBits': 5
284
+ },
285
+ 'border-bottom-style': {
286
+ 'cssPropBits': 0,
287
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
288
+ },
289
+ 'border-bottom-width': {
290
+ 'cssPropBits': 5,
291
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
292
+ },
293
+ 'border-collapse': {
294
+ 'cssPropBits': 0,
295
+ 'cssLitGroup': [ L[ 44 ], L[ 47 ], L[ 59 ] ]
296
+ },
297
+ 'border-color': {
298
+ 'cssExtra': RegExp('^ *(?:\\s*' + s[ 0 ] + '){1,4} *$', 'i'),
299
+ 'cssPropBits': 2,
300
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
301
+ },
302
+ 'border-left': {
303
+ 'cssExtra': c[ 3 ],
304
+ 'cssPropBits': 7,
305
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
306
+ 52 ], L[ 54 ], L[ 62 ] ]
307
+ },
308
+ 'border-left-color': {
309
+ 'cssExtra': c[ 2 ],
310
+ 'cssPropBits': 2,
311
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
312
+ },
313
+ 'border-left-style': {
314
+ 'cssPropBits': 0,
315
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
316
+ },
317
+ 'border-left-width': {
318
+ 'cssPropBits': 5,
319
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
320
+ },
321
+ 'border-radius': {
322
+ 'cssExtra': c[ 0 ],
323
+ 'cssPropBits': 5,
324
+ 'cssLitGroup': [ L[ 36 ] ]
325
+ },
326
+ 'border-right': {
327
+ 'cssExtra': c[ 3 ],
328
+ 'cssPropBits': 7,
329
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
330
+ 52 ], L[ 54 ], L[ 62 ] ]
331
+ },
332
+ 'border-right-color': {
333
+ 'cssExtra': c[ 2 ],
334
+ 'cssPropBits': 2,
335
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
336
+ },
337
+ 'border-right-style': {
338
+ 'cssPropBits': 0,
339
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
340
+ },
341
+ 'border-right-width': {
342
+ 'cssPropBits': 5,
343
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
344
+ },
345
+ 'border-spacing': {
346
+ 'cssExtra': c[ 0 ],
347
+ 'cssPropBits': 5,
348
+ 'cssLitGroup': [ L[ 47 ] ]
349
+ },
350
+ 'border-style': {
351
+ 'cssPropBits': 0,
352
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
353
+ },
354
+ 'border-top': {
355
+ 'cssExtra': c[ 3 ],
356
+ 'cssPropBits': 7,
357
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
358
+ 52 ], L[ 54 ], L[ 62 ] ]
359
+ },
360
+ 'border-top-color': {
361
+ 'cssExtra': c[ 2 ],
362
+ 'cssPropBits': 2,
363
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 62 ] ]
364
+ },
365
+ 'border-top-left-radius': {
366
+ 'cssExtra': c[ 0 ],
367
+ 'cssPropBits': 5
368
+ },
369
+ 'border-top-right-radius': {
370
+ 'cssExtra': c[ 0 ],
371
+ 'cssPropBits': 5
372
+ },
373
+ 'border-top-style': {
374
+ 'cssPropBits': 0,
375
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
376
+ },
377
+ 'border-top-width': {
378
+ 'cssPropBits': 5,
379
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
380
+ },
381
+ 'border-width': {
382
+ 'cssPropBits': 5,
383
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
384
+ },
385
+ 'bottom': {
386
+ 'cssPropBits': 5,
387
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
388
+ },
389
+ 'box-shadow': {
390
+ 'cssExtra': c[ 1 ],
391
+ 'cssPropBits': 7,
392
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
393
+ },
394
+ 'caption-side': {
395
+ 'cssPropBits': 0,
396
+ 'cssLitGroup': [ L[ 24 ], L[ 47 ] ]
397
+ },
398
+ 'clear': {
399
+ 'cssPropBits': 0,
400
+ 'cssLitGroup': [ L[ 30 ], L[ 40 ], L[ 47 ], L[ 54 ] ]
401
+ },
402
+ 'clip': {
403
+ 'cssExtra':
404
+ /^ *\s*rect\(\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto)\s*,\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto)\s*,\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto)\s*,\s*(?:0|[+\-]?\d+(?:\.\d+)?(?:[cem]m|ex|in|p[ctx])|auto) *\) *$/i,
405
+ 'cssPropBits': 0,
406
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
407
+ },
408
+ 'color': {
409
+ 'cssExtra': c[ 2 ],
410
+ 'cssPropBits': 130,
411
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ] ]
412
+ },
413
+ 'content': { 'cssPropBits': 0 },
414
+ 'counter-increment': {
415
+ 'cssExtra': c[ 0 ],
416
+ 'cssPropBits': 5,
417
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
418
+ },
419
+ 'counter-reset': {
420
+ 'cssExtra': c[ 0 ],
421
+ 'cssPropBits': 5,
422
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
423
+ },
424
+ 'cue': {
425
+ 'cssPropBits': 16,
426
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
427
+ },
428
+ 'cue-after': {
429
+ 'cssPropBits': 16,
430
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
431
+ },
432
+ 'cue-before': {
433
+ 'cssPropBits': 16,
434
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
435
+ },
436
+ 'cursor': {
437
+ 'cssExtra': c[ 0 ],
438
+ 'cssPropBits': 144,
439
+ 'cssLitGroup': [ L[ 1 ], L[ 35 ], L[ 38 ], L[ 47 ] ]
440
+ },
441
+ 'direction': {
442
+ 'cssPropBits': 0,
443
+ 'cssLitGroup': [ L[ 31 ], L[ 47 ] ]
444
+ },
445
+ 'display': {
446
+ 'cssPropBits': 32,
447
+ // ##### BEGIN: MODIFIED BY SAP
448
+ 'cssLitGroup': [ L[ 2 ], L[ 47 ], L[ 54 ], L[ 64 ], L[ 65 ] ]
449
+ // ##### END: MODIFIED BY SAP
450
+ },
451
+ 'elevation': {
452
+ 'cssPropBits': 5,
453
+ 'cssLitGroup': [ L[ 13 ], L[ 47 ] ]
454
+ },
455
+ 'empty-cells': {
456
+ 'cssPropBits': 0,
457
+ 'cssLitGroup': [ L[ 27 ], L[ 47 ] ]
458
+ },
459
+ 'filter': {
460
+ 'cssExtra':
461
+ /^ *(?:\s*alpha\(\s*opacity\s*=\s*(?:0|\d+(?:\.\d+)?%|[+\-]?\d+(?:\.\d+)?) *\))+ *$/i,
462
+ 'cssPropBits': 32
463
+ },
464
+ 'float': {
465
+ 'cssAlternates': [ 'cssFloat', 'styleFloat' ],
466
+ 'cssPropBits': 32,
467
+ 'cssLitGroup': [ L[ 30 ], L[ 47 ], L[ 54 ] ]
468
+ },
469
+ 'font': {
470
+ 'cssExtra': c[ 0 ],
471
+ 'cssPropBits': 9,
472
+ 'cssLitGroup': [ L[ 4 ], L[ 7 ], L[ 11 ], L[ 15 ], L[ 29 ], L[ 35 ], L[
473
+ 36 ], L[ 47 ], L[ 52 ], L[ 55 ], L[ 60 ] ]
474
+ },
475
+ 'font-family': {
476
+ 'cssExtra': c[ 0 ],
477
+ 'cssPropBits': 8,
478
+ 'cssLitGroup': [ L[ 15 ], L[ 35 ], L[ 47 ] ]
479
+ },
480
+ 'font-size': {
481
+ 'cssPropBits': 1,
482
+ 'cssLitGroup': [ L[ 7 ], L[ 47 ], L[ 52 ] ]
483
+ },
484
+ 'font-stretch': {
485
+ 'cssPropBits': 0,
486
+ 'cssLitGroup': [ L[ 5 ], L[ 55 ] ]
487
+ },
488
+ 'font-style': {
489
+ 'cssPropBits': 0,
490
+ 'cssLitGroup': [ L[ 29 ], L[ 47 ], L[ 55 ] ]
491
+ },
492
+ 'font-variant': {
493
+ 'cssPropBits': 0,
494
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ], L[ 60 ] ]
495
+ },
496
+ 'font-weight': {
497
+ 'cssPropBits': 0,
498
+ 'cssLitGroup': [ L[ 4 ], L[ 47 ], L[ 55 ] ],
499
+ // ##### BEGIN: MODIFIED BY SAP
500
+ 'cssLitNumeric': true
501
+ // ##### END: MODIFIED BY SAP
502
+ },
503
+ 'height': {
504
+ 'cssPropBits': 37,
505
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
506
+ },
507
+ 'left': {
508
+ 'cssPropBits': 37,
509
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
510
+ },
511
+ 'letter-spacing': {
512
+ 'cssPropBits': 5,
513
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ] ]
514
+ },
515
+ 'line-height': {
516
+ 'cssPropBits': 1,
517
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ] ]
518
+ },
519
+ 'list-style': {
520
+ 'cssPropBits': 16,
521
+ 'cssLitGroup': [ L[ 3 ], L[ 28 ], L[ 47 ], L[ 54 ] ]
522
+ },
523
+ 'list-style-image': {
524
+ 'cssPropBits': 16,
525
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
526
+ },
527
+ 'list-style-position': {
528
+ 'cssPropBits': 0,
529
+ 'cssLitGroup': [ L[ 28 ], L[ 47 ] ]
530
+ },
531
+ 'list-style-type': {
532
+ 'cssPropBits': 0,
533
+ 'cssLitGroup': [ L[ 3 ], L[ 47 ], L[ 54 ] ]
534
+ },
535
+ 'margin': {
536
+ 'cssPropBits': 5,
537
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
538
+ },
539
+ 'margin-bottom': {
540
+ 'cssPropBits': 5,
541
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
542
+ },
543
+ 'margin-left': {
544
+ 'cssPropBits': 5,
545
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
546
+ },
547
+ 'margin-right': {
548
+ 'cssPropBits': 5,
549
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
550
+ },
551
+ 'margin-top': {
552
+ 'cssPropBits': 5,
553
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
554
+ },
555
+ 'max-height': {
556
+ 'cssPropBits': 1,
557
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ], L[ 54 ] ]
558
+ },
559
+ 'max-width': {
560
+ 'cssPropBits': 1,
561
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ], L[ 54 ] ]
562
+ },
563
+ 'min-height': {
564
+ 'cssPropBits': 1,
565
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
566
+ },
567
+ 'min-width': {
568
+ 'cssPropBits': 1,
569
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
570
+ },
571
+ 'opacity': {
572
+ 'cssPropBits': 33,
573
+ 'cssLitGroup': [ L[ 47 ] ]
574
+ },
575
+ 'outline': {
576
+ 'cssExtra': c[ 3 ],
577
+ 'cssPropBits': 7,
578
+ 'cssLitGroup': [ L[ 0 ], L[ 9 ], L[ 34 ], L[ 46 ], L[ 47 ], L[ 48 ], L[
579
+ 49 ], L[ 52 ], L[ 54 ] ]
580
+ },
581
+ 'outline-color': {
582
+ 'cssExtra': c[ 2 ],
583
+ 'cssPropBits': 2,
584
+ 'cssLitGroup': [ L[ 0 ], L[ 47 ], L[ 49 ] ]
585
+ },
586
+ 'outline-style': {
587
+ 'cssPropBits': 0,
588
+ 'cssLitGroup': [ L[ 9 ], L[ 46 ], L[ 47 ], L[ 48 ], L[ 54 ] ]
589
+ },
590
+ 'outline-width': {
591
+ 'cssPropBits': 5,
592
+ 'cssLitGroup': [ L[ 34 ], L[ 47 ], L[ 52 ] ]
593
+ },
594
+ 'overflow': {
595
+ 'cssPropBits': 32,
596
+ 'cssLitGroup': [ L[ 38 ], L[ 46 ], L[ 47 ], L[ 58 ], L[ 63 ] ]
597
+ },
598
+ 'overflow-x': {
599
+ 'cssPropBits': 0,
600
+ 'cssLitGroup': [ L[ 32 ], L[ 38 ], L[ 46 ], L[ 58 ], L[ 63 ] ]
601
+ },
602
+ 'overflow-y': {
603
+ 'cssPropBits': 0,
604
+ 'cssLitGroup': [ L[ 32 ], L[ 38 ], L[ 46 ], L[ 58 ], L[ 63 ] ]
605
+ },
606
+ 'padding': {
607
+ 'cssPropBits': 1,
608
+ 'cssLitGroup': [ L[ 47 ] ]
609
+ },
610
+ 'padding-bottom': {
611
+ 'cssPropBits': 33,
612
+ 'cssLitGroup': [ L[ 47 ] ]
613
+ },
614
+ 'padding-left': {
615
+ 'cssPropBits': 33,
616
+ 'cssLitGroup': [ L[ 47 ] ]
617
+ },
618
+ 'padding-right': {
619
+ 'cssPropBits': 33,
620
+ 'cssLitGroup': [ L[ 47 ] ]
621
+ },
622
+ 'padding-top': {
623
+ 'cssPropBits': 33,
624
+ 'cssLitGroup': [ L[ 47 ] ]
625
+ },
626
+ 'page-break-after': {
627
+ 'cssPropBits': 0,
628
+ 'cssLitGroup': [ L[ 30 ], L[ 37 ], L[ 38 ], L[ 39 ], L[ 47 ] ]
629
+ },
630
+ 'page-break-before': {
631
+ 'cssPropBits': 0,
632
+ 'cssLitGroup': [ L[ 30 ], L[ 37 ], L[ 38 ], L[ 39 ], L[ 47 ] ]
633
+ },
634
+ 'page-break-inside': {
635
+ 'cssPropBits': 0,
636
+ 'cssLitGroup': [ L[ 38 ], L[ 39 ], L[ 47 ] ]
637
+ },
638
+ 'pause': {
639
+ 'cssPropBits': 5,
640
+ 'cssLitGroup': [ L[ 47 ] ]
641
+ },
642
+ 'pause-after': {
643
+ 'cssPropBits': 5,
644
+ 'cssLitGroup': [ L[ 47 ] ]
645
+ },
646
+ 'pause-before': {
647
+ 'cssPropBits': 5,
648
+ 'cssLitGroup': [ L[ 47 ] ]
649
+ },
650
+ 'pitch': {
651
+ 'cssPropBits': 5,
652
+ 'cssLitGroup': [ L[ 19 ], L[ 47 ], L[ 52 ] ]
653
+ },
654
+ 'pitch-range': {
655
+ 'cssPropBits': 5,
656
+ 'cssLitGroup': [ L[ 47 ] ]
657
+ },
658
+ 'play-during': {
659
+ 'cssExtra': c[ 0 ],
660
+ 'cssPropBits': 16,
661
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ], L[ 53 ], L[ 54 ], L[ 57 ] ]
662
+ },
663
+ 'position': {
664
+ 'cssPropBits': 32,
665
+ 'cssLitGroup': [ L[ 20 ], L[ 47 ] ]
666
+ },
667
+ 'quotes': {
668
+ 'cssExtra': c[ 0 ],
669
+ 'cssPropBits': 0,
670
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ] ]
671
+ },
672
+ 'richness': {
673
+ 'cssPropBits': 5,
674
+ 'cssLitGroup': [ L[ 47 ] ]
675
+ },
676
+ 'right': {
677
+ 'cssPropBits': 37,
678
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
679
+ },
680
+ 'speak': {
681
+ 'cssPropBits': 0,
682
+ 'cssLitGroup': [ L[ 47 ], L[ 54 ], L[ 55 ], L[ 61 ] ]
683
+ },
684
+ 'speak-header': {
685
+ 'cssPropBits': 0,
686
+ 'cssLitGroup': [ L[ 37 ], L[ 47 ], L[ 56 ] ]
687
+ },
688
+ 'speak-numeral': {
689
+ 'cssPropBits': 0,
690
+ 'cssLitGroup': [ L[ 26 ], L[ 47 ] ]
691
+ },
692
+ 'speak-punctuation': {
693
+ 'cssPropBits': 0,
694
+ 'cssLitGroup': [ L[ 43 ], L[ 47 ], L[ 54 ] ]
695
+ },
696
+ 'speech-rate': {
697
+ 'cssPropBits': 5,
698
+ 'cssLitGroup': [ L[ 12 ], L[ 47 ], L[ 52 ] ]
699
+ },
700
+ 'stress': {
701
+ 'cssPropBits': 5,
702
+ 'cssLitGroup': [ L[ 47 ] ]
703
+ },
704
+ 'table-layout': {
705
+ 'cssPropBits': 0,
706
+ 'cssLitGroup': [ L[ 38 ], L[ 45 ], L[ 47 ] ]
707
+ },
708
+ 'text-align': {
709
+ 'cssPropBits': 0,
710
+ 'cssLitGroup': [ L[ 30 ], L[ 42 ], L[ 47 ], L[ 50 ] ]
711
+ },
712
+ 'text-decoration': {
713
+ 'cssPropBits': 0,
714
+ 'cssLitGroup': [ L[ 18 ], L[ 47 ], L[ 54 ] ]
715
+ },
716
+ // ##### BEGIN: MODIFIED BY SAP
717
+ 'text-decoration-line': {
718
+ 'cssPropBits': 0,
719
+ 'cssLitGroup': [ L[ 18 ], L[ 47 ], L[ 54 ] ]
720
+ },
721
+ // ##### END: MODIFIED BY SAP
722
+ 'text-indent': {
723
+ 'cssPropBits': 5,
724
+ 'cssLitGroup': [ L[ 47 ] ]
725
+ },
726
+ 'text-overflow': {
727
+ 'cssPropBits': 0,
728
+ 'cssLitGroup': [ L[ 25 ] ]
729
+ },
730
+ 'text-shadow': {
731
+ 'cssExtra': c[ 1 ],
732
+ 'cssPropBits': 7,
733
+ 'cssLitGroup': [ L[ 0 ], L[ 35 ], L[ 48 ], L[ 54 ] ]
734
+ },
735
+ 'text-transform': {
736
+ 'cssPropBits': 0,
737
+ 'cssLitGroup': [ L[ 21 ], L[ 47 ], L[ 54 ] ]
738
+ },
739
+ 'text-wrap': {
740
+ 'cssPropBits': 0,
741
+ 'cssLitGroup': [ L[ 33 ], L[ 54 ], L[ 55 ] ]
742
+ },
743
+ 'top': {
744
+ 'cssPropBits': 37,
745
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
746
+ },
747
+ 'unicode-bidi': {
748
+ 'cssPropBits': 0,
749
+ 'cssLitGroup': [ L[ 23 ], L[ 47 ], L[ 55 ] ]
750
+ },
751
+ 'vertical-align': {
752
+ 'cssPropBits': 5,
753
+ 'cssLitGroup': [ L[ 10 ], L[ 24 ], L[ 47 ] ]
754
+ },
755
+ 'visibility': {
756
+ 'cssPropBits': 32,
757
+ 'cssLitGroup': [ L[ 44 ], L[ 46 ], L[ 47 ], L[ 63 ] ]
758
+ },
759
+ 'voice-family': {
760
+ 'cssExtra': c[ 0 ],
761
+ 'cssPropBits': 8,
762
+ 'cssLitGroup': [ L[ 22 ], L[ 35 ], L[ 47 ] ]
763
+ },
764
+ 'volume': {
765
+ 'cssPropBits': 1,
766
+ 'cssLitGroup': [ L[ 16 ], L[ 47 ], L[ 52 ] ]
767
+ },
768
+ 'white-space': {
769
+ 'cssPropBits': 0,
770
+ 'cssLitGroup': [ L[ 8 ], L[ 47 ], L[ 55 ] ]
771
+ },
772
+ 'width': {
773
+ 'cssPropBits': 33,
774
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
775
+ },
776
+ 'word-spacing': {
777
+ 'cssPropBits': 5,
778
+ 'cssLitGroup': [ L[ 47 ], L[ 55 ] ]
779
+ },
780
+ 'word-wrap': {
781
+ 'cssPropBits': 0,
782
+ 'cssLitGroup': [ L[ 41 ], L[ 55 ] ]
783
+ },
784
+ 'z-index': {
785
+ 'cssPropBits': 69,
786
+ 'cssLitGroup': [ L[ 38 ], L[ 47 ] ]
787
+ },
788
+ 'zoom': {
789
+ 'cssPropBits': 1,
790
+ 'cssLitGroup': [ L[ 55 ] ]
791
+ }
792
+ };
793
+ })();
794
+ if (typeof window !== 'undefined') {
795
+ window['cssSchema'] = cssSchema;
796
+ }
797
+ // Copyright (C) 2011 Google Inc.
798
+ //
799
+ // Licensed under the Apache License, Version 2.0 (the "License");
800
+ // you may not use this file except in compliance with the License.
801
+ // You may obtain a copy of the License at
802
+ //
803
+ // http://www.apache.org/licenses/LICENSE-2.0
804
+ //
805
+ // Unless required by applicable law or agreed to in writing, software
806
+ // distributed under the License is distributed on an "AS IS" BASIS,
807
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
808
+ // See the License for the specific language governing permissions and
809
+ // limitations under the License.
810
+
811
+ /**
812
+ * A lexical scannar for CSS3 as defined at http://www.w3.org/TR/css3-syntax .
813
+ *
814
+ * @author Mike Samuel <mikesamuel@gmail.com>
815
+ * \@provides lexCss, decodeCss
816
+ * \@overrides window
817
+ */
818
+
819
+ var lexCss;
820
+ var decodeCss;
821
+
822
+ (function () {
823
+
824
+ /**
825
+ * Decodes an escape sequence as specified in CSS3 section 4.1.
826
+ * http://www.w3.org/TR/css3-syntax/#characters
827
+ * @private
828
+ */
829
+ function decodeCssEscape(s) {
830
+ var i = parseInt(s.substring(1), 16);
831
+ // If parseInt didn't find a hex diigt, it returns NaN so return the
832
+ // escaped character.
833
+ // Otherwise, parseInt will stop at the first non-hex digit so there's no
834
+ // need to worry about trailing whitespace.
835
+ if (i > 0xffff) {
836
+ // A supplemental codepoint.
837
+ return i -= 0x10000,
838
+ String.fromCharCode(
839
+ 0xd800 + (i >> 10),
840
+ 0xdc00 + (i & 0x3FF));
841
+ } else if (i == i) {
842
+ return String.fromCharCode(i);
843
+ } else if (s[1] < ' ') {
844
+ // "a backslash followed by a newline is ignored".
845
+ return '';
846
+ } else {
847
+ return s[1];
848
+ }
849
+ }
850
+
851
+ /**
852
+ * Returns an equivalent CSS string literal given plain text: foo -> "foo".
853
+ * @private
854
+ */
855
+ function escapeCssString(s, replacer) {
856
+ return '"' + s.replace(/[\u0000-\u001f\\\"<>]/g, replacer) + '"';
857
+ }
858
+
859
+ /**
860
+ * Maps chars to CSS escaped equivalents: "\n" -> "\\a ".
861
+ * @private
862
+ */
863
+ function escapeCssStrChar(ch) {
864
+ return cssStrChars[ch]
865
+ || (cssStrChars[ch] = '\\' + ch.charCodeAt(0).toString(16) + ' ');
866
+ }
867
+
868
+ /**
869
+ * Maps chars to URI escaped equivalents: "\n" -> "%0a".
870
+ * @private
871
+ */
872
+ function escapeCssUrlChar(ch) {
873
+ return cssUrlChars[ch]
874
+ || (cssUrlChars[ch] = (ch < '\x10' ? '%0' : '%')
875
+ + ch.charCodeAt(0).toString(16));
876
+ }
877
+
878
+ /**
879
+ * Mapping of CSS special characters to escaped equivalents.
880
+ * @private
881
+ */
882
+ var cssStrChars = {
883
+ '\\': '\\\\'
884
+ };
885
+
886
+ /**
887
+ * Mapping of CSS special characters to URL-escaped equivalents.
888
+ * @private
889
+ */
890
+ var cssUrlChars = {
891
+ '\\': '%5c'
892
+ };
893
+
894
+ // The comments below are copied from the CSS3 module syntax at
895
+ // http://www.w3.org/TR/css3-syntax .
896
+ // These string constants minify out when this is run-through closure
897
+ // compiler.
898
+ // Rules that have been adapted have comments prefixed with "Diff:", and
899
+ // where rules have been combined to avoid back-tracking in the regex engine
900
+ // or to work around limitations, there is a comment prefixed with
901
+ // "NewRule:".
902
+
903
+ // In the below, we assume CRLF and CR have been normalize to CR.
904
+
905
+ // wc ::= #x9 | #xA | #xC | #xD | #x20
906
+ var WC = '[\\t\\n\\f ]';
907
+ // w ::= wc*
908
+ var W = WC + '*';
909
+ // nl ::= #xA | #xD #xA | #xD | #xC
910
+ var NL = '[\\n\\f]';
911
+ // nonascii ::= [#x80-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF]
912
+ // NewRule: Supplemental codepoints are represented as surrogate pairs in JS.
913
+ var SURROGATE_PAIR = '[\\ud800-\\udbff][\\udc00-\\udfff]';
914
+ var NONASCII = '[\\u0080-\\ud7ff\\ue000-\\ufffd]|' + SURROGATE_PAIR;
915
+ // unicode ::= '\' [0-9a-fA-F]{1,6} wc?
916
+ // NewRule: No point in having ESCAPE do (\\x|\\y)
917
+ var UNICODE_TAIL = '[0-9a-fA-F]{1,6}' + WC + '?';
918
+ var UNICODE = '\\\\' + UNICODE_TAIL;
919
+ // escape ::= unicode
920
+ // | '\' [#x20-#x7E#x80-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF]
921
+ // NewRule: Below we use escape tail to efficiently match an escape or a
922
+ // line continuation so we can decode string content.
923
+ var ESCAPE_TAIL = '(?:' + UNICODE_TAIL
924
+ + '|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|'
925
+ + SURROGATE_PAIR + ')';
926
+ var ESCAPE = '\\\\' + ESCAPE_TAIL;
927
+ // urlchar ::= [#x9#x21#x23-#x26#x28-#x7E] | nonascii | escape
928
+ var URLCHAR = '(?:[\\t\\x21\\x23-\\x26\\x28-\\x5b\\x5d-\\x7e]|'
929
+ + NONASCII + '|' + ESCAPE + ')';
930
+ // stringchar ::= urlchar | #x20 | '\' nl
931
+ // We ignore mismatched surrogate pairs inside strings, so stringchar
932
+ // simplifies to a non-(quote|newline|backslash) or backslash any.
933
+ // Since we normalize CRLF to a single code-unit, there is no special
934
+ // handling needed for '\\' + CRLF.
935
+ var STRINGCHAR = '[^\'"\\n\\f\\\\]|\\\\[\\s\\S]';
936
+ // string ::= '"' (stringchar | "'")* '"' | "'" (stringchar | '"')* "'"
937
+ var STRING = '"(?:\'|' + STRINGCHAR + ')*"'
938
+ + '|\'(?:\"|' + STRINGCHAR + ')*\'';
939
+ // num ::= [0-9]+ | [0-9]* '.' [0-9]+
940
+ // Diff: We attach signs to num tokens.
941
+ var NUM = '[-+]?(?:[0-9]+(?:[.][0-9]+)?|[.][0-9]+)';
942
+ // nmstart ::= [a-zA-Z] | '_' | nonascii | escape
943
+ var NMSTART = '(?:[a-zA-Z_]|' + NONASCII + '|' + ESCAPE + ')';
944
+ // nmchar ::= [a-zA-Z0-9] | '-' | '_' | nonascii | escape
945
+ var NMCHAR = '(?:[a-zA-Z0-9_-]|' + NONASCII + '|' + ESCAPE + ')';
946
+ // name ::= nmchar+
947
+ var NAME = NMCHAR + '+';
948
+ // ident ::= '-'? nmstart nmchar*
949
+ var IDENT = '-?' + NMSTART + NMCHAR + '*';
950
+
951
+ // ATKEYWORD ::= '@' ident
952
+ var ATKEYWORD = '@' + IDENT;
953
+ // HASH ::= '#' name
954
+ var HASH = '#' + NAME;
955
+ // NUMBER ::= num
956
+ var NUMBER = NUM;
957
+
958
+ // NewRule: union of IDENT, ATKEYWORD, HASH, but excluding #[0-9].
959
+ var WORD_TERM = '(?:@?-?' + NMSTART + '|#)' + NMCHAR + '*';
960
+
961
+ // PERCENTAGE ::= num '%'
962
+ var PERCENTAGE = NUM + '%';
963
+ // DIMENSION ::= num ident
964
+ var DIMENSION = NUM + IDENT;
965
+ var NUMERIC_VALUE = NUM + '(?:%|' + IDENT + ')?';
966
+ // URI ::= "url(" w (string | urlchar* ) w ")"
967
+ var URI = 'url[(]' + W + '(?:' + STRING + '|' + URLCHAR + '*)' + W + '[)]';
968
+ // UNICODE-RANGE ::= "U+" [0-9A-F?]{1,6} ('-' [0-9A-F]{1,6})?
969
+ var UNICODE_RANGE = 'U[+][0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?';
970
+ // CDO ::= "<\!--"
971
+ var CDO = '<\!--';
972
+ // CDC ::= "-->"
973
+ var CDC = '-->';
974
+ // S ::= wc+
975
+ var S = WC + '+';
976
+ // COMMENT ::= "/*" [^*]* '*'+ ([^/] [^*]* '*'+)* "/"
977
+ // Diff: recognizes // comments.
978
+ var COMMENT = '/(?:[*][^*]*[*]+(?:[^/][^*]*[*]+)*/|/[^\\n\\f]*)';
979
+ // FUNCTION ::= ident '('
980
+ // Diff: We exclude url explicitly.
981
+ // TODO: should we be tolerant of "fn ("?
982
+ // ##### BEGIN: MODIFIED BY SAP
983
+ // Avoid risk of 'catastrophic backtracking' when unicode escapes are used
984
+ // var FUNCTION = '(?!url[(])' + IDENT + '[(]';
985
+ var FUNCTION = '(?!url[(])(?=(' + IDENT + '))\\1[(]';
986
+ // ##### END: MODIFIED BY SAP
987
+ // INCLUDES ::= "~="
988
+ var INCLUDES = '~=';
989
+ // DASHMATCH ::= "|="
990
+ var DASHMATCH = '[|]=';
991
+ // PREFIXMATCH ::= "^="
992
+ var PREFIXMATCH = '[^]=';
993
+ // SUFFIXMATCH ::= "$="
994
+ var SUFFIXMATCH = '[$]=';
995
+ // SUBSTRINGMATCH ::= "*="
996
+ var SUBSTRINGMATCH = '[*]=';
997
+ // NewRule: one rule for all the comparison operators.
998
+ var CMP_OPS = '[~|^$*]=';
999
+ // CHAR ::= any character not matched by the above rules, except for " or '
1000
+ // Diff: We exclude / and \ since they are handled above to prevent
1001
+ // /* without a following */ from combining when comments are concatenated.
1002
+ var CHAR = '[^"\'\\\\/]|/(?![/*])';
1003
+ // BOM ::= #xFEFF
1004
+ var BOM = '\\uFEFF';
1005
+
1006
+ var CSS_TOKEN = new RegExp([
1007
+ BOM, UNICODE_RANGE, URI, FUNCTION, WORD_TERM, STRING, NUMERIC_VALUE,
1008
+ CDO, CDC, S, COMMENT, CMP_OPS, CHAR].join("|"), 'gi');
1009
+
1010
+ /**
1011
+ * Decodes CSS escape sequences in a CSS string body.
1012
+ */
1013
+ decodeCss = function (css) {
1014
+ return css.replace(
1015
+ new RegExp('\\\\(?:' + ESCAPE_TAIL + '|' + NL + ')', 'g'),
1016
+ decodeCssEscape);
1017
+ };
1018
+
1019
+ /**
1020
+ * Given CSS Text, returns an array of normalized tokens.
1021
+ * @param {string} cssText
1022
+ * @return {Array.<string>} tokens where all ignorable token sequences have
1023
+ * been reduced to a single {@code " "} and all strings and
1024
+ * {@code url(...)} tokens have been normalized to use double quotes as
1025
+ * delimiters and to not otherwise contain double quotes.
1026
+ */
1027
+ lexCss = function (cssText) {
1028
+ cssText = '' + cssText;
1029
+ var tokens = cssText.replace(/\r\n?/g, '\n') // Normalize CRLF & CR to LF.
1030
+ .match(CSS_TOKEN) || [];
1031
+ var j = 0;
1032
+ var last = ' ';
1033
+ for (var i = 0, n = tokens.length; i < n; ++i) {
1034
+ // Normalize all escape sequences. We will have to re-escape some
1035
+ // codepoints in string and url(...) bodies but we already know the
1036
+ // boundaries.
1037
+ // We might mistakenly treat a malformed identifier like \22\20\22 as a
1038
+ // string, but that will not break any valid stylesheets since we requote
1039
+ // and re-escape in string below.
1040
+ var tok = decodeCss(tokens[i]);
1041
+ var len = tok.length;
1042
+ var cc = tok.charCodeAt(0);
1043
+ tok =
1044
+ // All strings should be double quoted, and the body should never
1045
+ // contain a double quote.
1046
+ (cc == '"'.charCodeAt(0) || cc == '\''.charCodeAt(0))
1047
+ ? escapeCssString(tok.substring(1, len - 1), escapeCssStrChar)
1048
+ // A breaking ignorable token should is replaced with a single space.
1049
+ : (cc == '/'.charCodeAt(0) && len > 1 // Comment.
1050
+ || tok == '\\' || tok == CDC || tok == CDO || tok == '\ufeff'
1051
+ // Characters in W.
1052
+ || cc <= ' '.charCodeAt(0))
1053
+ ? ' '
1054
+ // Make sure that all url(...)s are double quoted.
1055
+ : /url\(/i.test(tok)
1056
+ ? 'url(' + escapeCssString(
1057
+ tok.replace(
1058
+ new RegExp('^url\\(' + W + '["\']?|["\']?' + W + '\\)$', 'gi'),
1059
+ ''),
1060
+ escapeCssUrlChar)
1061
+ + ')'
1062
+ // Escapes in identifier like tokens will have been normalized above.
1063
+ : tok;
1064
+ // Merge adjacent space tokens.
1065
+ if (last != tok || tok != ' ') {
1066
+ tokens[j++] = last = tok;
1067
+ }
1068
+ }
1069
+ tokens.length = j;
1070
+ return tokens;
1071
+ };
1072
+ })();
1073
+
1074
+ // Exports for closure compiler.
1075
+ if (typeof window !== 'undefined') {
1076
+ window['lexCss'] = lexCss;
1077
+ window['decodeCss'] = decodeCss;
1078
+ }
1079
+ // Copyright (C) 2011 Google Inc.
1080
+ //
1081
+ // Licensed under the Apache License, Version 2.0 (the "License");
1082
+ // you may not use this file except in compliance with the License.
1083
+ // You may obtain a copy of the License at
1084
+ //
1085
+ // http://www.apache.org/licenses/LICENSE-2.0
1086
+ //
1087
+ // Unless required by applicable law or agreed to in writing, software
1088
+ // distributed under the License is distributed on an "AS IS" BASIS,
1089
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1090
+ // See the License for the specific language governing permissions and
1091
+ // limitations under the License.
1092
+
1093
+ /**
1094
+ * @fileoverview
1095
+ * JavaScript support for client-side CSS sanitization.
1096
+ * The CSS property schema API is defined in CssPropertyPatterns.java which
1097
+ * is used to generate css-defs.js.
1098
+ *
1099
+ * @author mikesamuel@gmail.com
1100
+ * \@requires CSS_PROP_BIT_ALLOWED_IN_LINK
1101
+ * \@requires CSS_PROP_BIT_HASH_VALUE
1102
+ * \@requires CSS_PROP_BIT_NEGATIVE_QUANTITY
1103
+ * \@requires CSS_PROP_BIT_QSTRING_CONTENT
1104
+ * \@requires CSS_PROP_BIT_QSTRING_URL
1105
+ * \@requires CSS_PROP_BIT_QUANTITY
1106
+ * \@requires CSS_PROP_BIT_Z_INDEX
1107
+ * \@requires cssSchema
1108
+ * \@requires decodeCss
1109
+ * \@requires html4
1110
+ * \@overrides window
1111
+ * \@requires parseCssStylesheet
1112
+ * \@provides sanitizeCssProperty
1113
+ * \@provides sanitizeCssSelectors
1114
+ * \@provides sanitizeStylesheet
1115
+ */
1116
+
1117
+ /**
1118
+ * Given a series of normalized CSS tokens, applies a property schema, as
1119
+ * defined in CssPropertyPatterns.java, and sanitizes the tokens in place.
1120
+ * @param property a property name.
1121
+ * @param propertySchema a property of cssSchema as defined by
1122
+ * CssPropertyPatterns.java
1123
+ * @param tokens as parsed by lexCss. Modified in place.
1124
+ * @param opt_naiveUriRewriter a URI rewriter; an object with a "rewrite"
1125
+ * function that takes a URL and returns a safe URL.
1126
+ */
1127
+ var sanitizeCssProperty = (function () {
1128
+ var NOEFFECT_URL = 'url("about:blank")';
1129
+ /**
1130
+ * The set of characters that need to be normalized inside url("...").
1131
+ * We normalize newlines because they are not allowed inside quoted strings,
1132
+ * normalize quote characters, angle-brackets, and asterisks because they
1133
+ * could be used to break out of the URL or introduce targets for CSS
1134
+ * error recovery. We normalize parentheses since they delimit unquoted
1135
+ * URLs and calls and could be a target for error recovery.
1136
+ */
1137
+ var NORM_URL_REGEXP = /[\n\f\r\"\'()*<>]/g;
1138
+ /** The replacements for NORM_URL_REGEXP. */
1139
+ var NORM_URL_REPLACEMENTS = {
1140
+ '\n': '%0a',
1141
+ '\f': '%0c',
1142
+ '\r': '%0d',
1143
+ '"': '%22',
1144
+ '\'': '%27',
1145
+ '(': '%28',
1146
+ ')': '%29',
1147
+ '*': '%2a',
1148
+ '<': '%3c',
1149
+ '>': '%3e'
1150
+ };
1151
+
1152
+
1153
+ function normalizeUrl(s) {
1154
+ if ('string' === typeof s) {
1155
+ return 'url("' + s.replace(NORM_URL_REGEXP, normalizeUrlChar) + '")';
1156
+ } else {
1157
+ return NOEFFECT_URL;
1158
+ }
1159
+ }
1160
+ function normalizeUrlChar(ch) {
1161
+ return NORM_URL_REPLACEMENTS[ch];
1162
+ }
1163
+
1164
+ // From RFC3986
1165
+ var URI_SCHEME_RE = new RegExp(
1166
+ '^' +
1167
+ '(?:' +
1168
+ '([^:\/?# ]+)' + // scheme
1169
+ ':)?'
1170
+ );
1171
+
1172
+ var ALLOWED_URI_SCHEMES = /^(?:https?|mailto)$/i;
1173
+
1174
+ function safeUri(uri, prop, naiveUriRewriter) {
1175
+ if (!naiveUriRewriter) { return null; }
1176
+ var parsed = ('' + uri).match(URI_SCHEME_RE);
1177
+ if (parsed && (!parsed[1] || ALLOWED_URI_SCHEMES.test(parsed[1]))) {
1178
+ return naiveUriRewriter(uri, prop);
1179
+ } else {
1180
+ return null;
1181
+ }
1182
+ }
1183
+
1184
+ function unionArrays(arrs) {
1185
+ var map = {};
1186
+ for (var i = arrs.length; --i >= 0;) {
1187
+ var arr = arrs[i];
1188
+ for (var j = arr.length; --j >= 0;) {
1189
+ map[arr[j]] = ALLOWED_LITERAL;
1190
+ }
1191
+ }
1192
+ return map;
1193
+ }
1194
+
1195
+ /**
1196
+ * Normalize tokens within a function call they can match against
1197
+ * cssSchema[propName].cssExtra.
1198
+ * @return the exclusive end in tokens of the function call.
1199
+ */
1200
+ function normalizeFunctionCall(tokens, start) {
1201
+ var parenDepth = 1, end = start + 1, n = tokens.length;
1202
+ while (end < n && parenDepth) {
1203
+ // TODO: Can URLs appear in functions?
1204
+ var token = tokens[end++];
1205
+ parenDepth += (token === '(' ? 1 : token === ')' ? -1 : 0);
1206
+ }
1207
+ return end;
1208
+ }
1209
+
1210
+ // Used as map value to avoid hasOwnProperty checks.
1211
+ var ALLOWED_LITERAL = {};
1212
+
1213
+ return function (property, propertySchema, tokens, opt_naiveUriRewriter) {
1214
+ var propBits = propertySchema.cssPropBits;
1215
+ // Used to determine whether to treat quoted strings as URLs or
1216
+ // plain text content, and whether unrecognized keywords can be quoted
1217
+ // to treate ['Arial', 'Black'] equivalently to ['"Arial Black"'].
1218
+ var qstringBits = propBits & (
1219
+ CSS_PROP_BIT_QSTRING_CONTENT | CSS_PROP_BIT_QSTRING_URL);
1220
+ // TODO(mikesamuel): Figure out what to do with props like
1221
+ // content that admit both URLs and strings.
1222
+
1223
+ // Used to join unquoted keywords into a single quoted string.
1224
+ var lastQuoted = NaN;
1225
+ var i = 0, k = 0;
1226
+ for (;i < tokens.length; ++i) {
1227
+ // Has the effect of normalizing hex digits, keywords,
1228
+ // and function names.
1229
+ var token = tokens[i].toLowerCase();
1230
+ var cc = token.charCodeAt(0), cc1, cc2, isnum1, isnum2, end;
1231
+ var litGroup, litMap;
1232
+ token = (
1233
+ // Strip out spaces. Normally cssparser.js dumps these, but we
1234
+ // strip them out in case the content doesn't come via cssparser.js.
1235
+ (cc === ' '.charCodeAt(0))
1236
+ ? ''
1237
+ : (cc === '"'.charCodeAt(0))
1238
+ ? ( // Quoted string.
1239
+ (qstringBits === CSS_PROP_BIT_QSTRING_URL && opt_naiveUriRewriter)
1240
+ // Sanitize and convert to url("...") syntax.
1241
+ // Treat url content as case-sensitive.
1242
+ ? (normalizeUrl(
1243
+ safeUri(
1244
+ decodeCss(tokens[i].substring(1, token.length - 1)),
1245
+ property,
1246
+ opt_naiveUriRewriter
1247
+ )
1248
+ ))
1249
+ // Drop if plain text content strings not allowed.
1250
+ : (qstringBits === CSS_PROP_BIT_QSTRING_CONTENT) ? token : '')
1251
+ // Preserve hash color literals if allowed.
1252
+ : (cc === '#'.charCodeAt(0) && /^#(?:[0-9a-f]{3}){1,2}$/.test(token))
1253
+ ? (propBits & CSS_PROP_BIT_HASH_VALUE ? token : '')
1254
+ // ##### BEGIN: MODIFIED BY SAP
1255
+ // : ('0'.charCodeAt(0) <= cc && cc <= '9'.charCodeAt(0))
1256
+ : ('0'.charCodeAt(0) <= cc && cc <= '9'.charCodeAt(0) && !propertySchema.cssLitNumeric)
1257
+ // ##### END: MODIFIED BY SAP
1258
+ // A number starting with a digit.
1259
+ ? ((propBits & CSS_PROP_BIT_QUANTITY)
1260
+ ? ((propBits & CSS_PROP_BIT_Z_INDEX)
1261
+ ? (token.match(/^\d{1,7}$/) ? token : '')
1262
+ : token)
1263
+ : '')
1264
+ // Normalize quantities so they don't start with a '.' or '+' sign and
1265
+ // make sure they all have an integer component so can't be confused
1266
+ // with a dotted identifier.
1267
+ // This can't be done in the lexer since ".4" is a valid rule part.
1268
+ : (cc1 = token.charCodeAt(1),
1269
+ cc2 = token.charCodeAt(2),
1270
+ isnum1 = '0'.charCodeAt(0) <= cc1 && cc1 <= '9'.charCodeAt(0),
1271
+ isnum2 = '0'.charCodeAt(0) <= cc2 && cc2 <= '9'.charCodeAt(0),
1272
+ // +.5 -> 0.5 if allowed.
1273
+ (cc === '+'.charCodeAt(0)
1274
+ && (isnum1 || (cc1 === '.'.charCodeAt(0) && isnum2))))
1275
+ ? ((propBits & CSS_PROP_BIT_QUANTITY)
1276
+ ? ((propBits & CSS_PROP_BIT_Z_INDEX)
1277
+ ? (token.match(/^\+\d{1,7}$/) ? token : '')
1278
+ : ((isnum1 ? '' : '0') + token.substring(1)))
1279
+ : '')
1280
+ // -.5 -> -0.5 if allowed otherwise -> 0 if quantities allowed.
1281
+ : (cc === '-'.charCodeAt(0)
1282
+ && (isnum1 || (cc1 === '.'.charCodeAt(0) && isnum2)))
1283
+ ? ((propBits & CSS_PROP_BIT_NEGATIVE_QUANTITY)
1284
+ ? ((propBits & CSS_PROP_BIT_Z_INDEX)
1285
+ ? (token.match(/^\-\d{1,7}$/) ? token : '')
1286
+ : ((isnum1 ? '-' : '-0') + token.substring(1)))
1287
+ : ((propBits & CSS_PROP_BIT_QUANTITY) ? '0' : ''))
1288
+ // .5 -> 0.5 if allowed.
1289
+ : (cc === '.'.charCodeAt(0) && isnum1)
1290
+ ? ((propBits & CSS_PROP_BIT_QUANTITY) ? '0' + token : '')
1291
+ // Handle url("...") by rewriting the body.
1292
+ : ('url(' === token.substring(0, 4))
1293
+ ? ((opt_naiveUriRewriter && (qstringBits & CSS_PROP_BIT_QSTRING_URL))
1294
+ ? normalizeUrl(
1295
+ safeUri(
1296
+ tokens[i].substring(5, token.length - 2),
1297
+ property,
1298
+ opt_naiveUriRewriter
1299
+ )
1300
+ )
1301
+ : '')
1302
+ // Handle func(...) and literal tokens
1303
+ // such as keywords and punctuation.
1304
+ : (
1305
+ // Step 1. Combine func(...) into something that can be compared
1306
+ // against propertySchema.cssExtra.
1307
+ (token.charAt(token.length-1) === '(')
1308
+ && (end = normalizeFunctionCall(tokens, i),
1309
+ // When tokens is
1310
+ // ['x', ' ', 'rgb(', '255', ',', '0', ',', '0', ')', ' ', 'y']
1311
+ // and i is the index of 'rgb(' and end is the index of ')'
1312
+ // splices tokens to where i now is the index of the whole call:
1313
+ // ['x', ' ', 'rgb( 255 , 0 , 0 )', ' ', 'y']
1314
+ tokens.splice(i, end - i,
1315
+ token = tokens.slice(i, end).join(' '))),
1316
+ litGroup = propertySchema.cssLitGroup,
1317
+ litMap = (
1318
+ litGroup
1319
+ ? (propertySchema.cssLitMap
1320
+ // Lazily compute the union from litGroup.
1321
+ || (propertySchema.cssLitMap = unionArrays(litGroup)))
1322
+ : ALLOWED_LITERAL), // A convenient empty object.
1323
+ (litMap[token] === ALLOWED_LITERAL
1324
+ || propertySchema.cssExtra && propertySchema.cssExtra.test(token)))
1325
+ // Token is in the literal map or matches extra.
1326
+ ? token
1327
+ : (/^\w+$/.test(token)
1328
+ && (qstringBits === CSS_PROP_BIT_QSTRING_CONTENT))
1329
+ // Quote unrecognized keywords so font names like
1330
+ // Arial Bold
1331
+ // ->
1332
+ // "Arial Bold"
1333
+ ? (lastQuoted+1 === k
1334
+ // If the last token was also a keyword that was quoted, then
1335
+ // combine this token into that.
1336
+ ? (tokens[lastQuoted] = tokens[lastQuoted]
1337
+ .substring(0, tokens[lastQuoted].length-1) + ' ' + token + '"',
1338
+ token = '')
1339
+ : (lastQuoted = k, '"' + token + '"'))
1340
+ // Disallowed.
1341
+ : '');
1342
+ if (token) {
1343
+ tokens[k++] = token;
1344
+ }
1345
+ }
1346
+ // For single URL properties, if the URL failed to pass the sanitizer,
1347
+ // then just drop it.
1348
+ if (k === 1 && tokens[0] === NOEFFECT_URL) { k = 0; }
1349
+ tokens.length = k;
1350
+ };
1351
+ })();
1352
+
1353
+ /**
1354
+ * Given a series of tokens, returns two lists of sanitized selectors.
1355
+ * @param {Array.<string>} selectors In the form produces by csslexer.js.
1356
+ * @param {string} suffix a suffix that is added to all IDs and which is
1357
+ * used as a CLASS names so that the returned selectors will only match
1358
+ * nodes under one with suffix as a class name.
1359
+ * If suffix is {@code "sfx"}, the selector
1360
+ * {@code ["a", "#foo", " ", "b", ".bar"]} will be namespaced to
1361
+ * {@code [".sfx", " ", "a", "#foo-sfx", " ", "b", ".bar"]}.
1362
+ * @return {Array.<Array.<string>>} an array of length 2 where the zeroeth
1363
+ * element contains history-insensitive selectors and the first element
1364
+ * contains history-sensitive selectors.
1365
+ */
1366
+ function sanitizeCssSelectors(selectors, suffix) {
1367
+ // Produce two distinct lists of selectors to sequester selectors that are
1368
+ // history sensitive (:visited), so that we can disallow properties in the
1369
+ // property groups for the history sensitive ones.
1370
+ var historySensitiveSelectors = [];
1371
+ var historyInsensitiveSelectors = [];
1372
+
1373
+ // Remove any spaces that are not operators.
1374
+ var k = 0, i;
1375
+ for (i = 0; i < selectors.length; ++i) {
1376
+ if (!(selectors[i] == ' '
1377
+ && (selectors[i-1] == '>' || selectors[i+1] == '>'))) {
1378
+ selectors[k++] = selectors[i];
1379
+ }
1380
+ }
1381
+ selectors.length = k;
1382
+
1383
+ // Split around commas. If there is an error in one of the comma separated
1384
+ // bits, we throw the whole away, but the failure of one selector does not
1385
+ // affect others.
1386
+ var n = selectors.length, start = 0;
1387
+ for (i = 0; i < n; ++i) {
1388
+ if (selectors[i] == ',') {
1389
+ processSelector(start, i);
1390
+ start = i+1;
1391
+ }
1392
+ }
1393
+ processSelector(start, n);
1394
+
1395
+
1396
+ function processSelector(start, end) {
1397
+ var historySensitive = false;
1398
+
1399
+ // Space around commas is not an operator.
1400
+ if (selectors[start] === ' ') { ++start; }
1401
+ if (end-1 !== start && selectors[end] === ' ') { --end; }
1402
+
1403
+ // Split the selector into element selectors, content around
1404
+ // space (ancestor operator) and '>' (descendant operator).
1405
+ var out = [];
1406
+ var lastOperator = start;
1407
+ var elSelector = '';
1408
+ for (var i = start; i < end; ++i) {
1409
+ var tok = selectors[i];
1410
+ var isChild = (tok === '>');
1411
+ if (isChild || tok === ' ') {
1412
+ // We've found the end of a single link in the selector chain.
1413
+ // We disallow absolute positions relative to html.
1414
+ elSelector = processElementSelector(lastOperator, i, false);
1415
+ if (!elSelector || (isChild && /^html/i.test(elSelector))) {
1416
+ return;
1417
+ }
1418
+ lastOperator = i+1;
1419
+ out.push(elSelector, isChild ? ' > ' : ' ');
1420
+ }
1421
+ }
1422
+ elSelector = processElementSelector(lastOperator, end, true);
1423
+ if (!elSelector) { return; }
1424
+ out.push(elSelector);
1425
+
1426
+ function processElementSelector(start, end, last) {
1427
+ var debugStart = start, debugEnd = end;
1428
+
1429
+ // Split the element selector into three parts.
1430
+ // DIV.foo#bar:hover
1431
+ // ^ ^
1432
+ // el classes pseudo
1433
+ var element, classId, pseudoSelector, tok, elType;
1434
+ element = '';
1435
+ if (start < end) {
1436
+ tok = selectors[start].toLowerCase();
1437
+ if (tok === '*'
1438
+ || (tok === 'body' && start+1 !== end && !last)
1439
+ || ('number' === typeof (elType = html4.ELEMENTS[tok])
1440
+ && !(elType & html4.eflags.UNSAFE))) {
1441
+ ++start;
1442
+ element = tok;
1443
+ }
1444
+ }
1445
+ classId = '';
1446
+ while (start < end) {
1447
+ tok = selectors[start];
1448
+ if (tok.charAt(0) === '#') {
1449
+ if (/^#_|__$|[^#0-9A-Za-z:_\-]/.test(tok)) { return null; }
1450
+ // Rewrite ID elements to include the suffix.
1451
+ classId += tok + '-' + suffix;
1452
+ } else if (tok === '.') {
1453
+ if (++start < end
1454
+ && /^[0-9A-Za-z:_\-]+$/.test(tok = selectors[start])
1455
+ && !/^_|__$/.test(tok)) {
1456
+ classId += '.' + tok;
1457
+ } else {
1458
+ return null;
1459
+ }
1460
+ } else {
1461
+ break;
1462
+ }
1463
+ ++start;
1464
+ }
1465
+ pseudoSelector = '';
1466
+ if (start < end && selectors[start] === ':') {
1467
+ tok = selectors[++start];
1468
+ if (tok === 'visited' || tok === 'link') {
1469
+ if (!/^[a*]?$/.test(element)) {
1470
+ return null;
1471
+ }
1472
+ historySensitive = true;
1473
+ pseudoSelector = ':' + tok;
1474
+ element = 'a';
1475
+ ++start;
1476
+ }
1477
+ }
1478
+ if (start === end) {
1479
+ return element + classId + pseudoSelector;
1480
+ }
1481
+ return null;
1482
+ }
1483
+
1484
+
1485
+ var safeSelector = out.join('');
1486
+ if (/^body\b/.test(safeSelector)) {
1487
+ // Substitute the class that is attached to pseudo body elements for
1488
+ // the body element.
1489
+ safeSelector = '.vdoc-body___.' + suffix + safeSelector.substring(4);
1490
+ } else {
1491
+ // Namespace the selector so that it only matches under
1492
+ // a node with suffix in its CLASS attribute.
1493
+ safeSelector = '.' + suffix + ' ' + safeSelector;
1494
+ }
1495
+
1496
+ (historySensitive
1497
+ ? historySensitiveSelectors
1498
+ : historyInsensitiveSelectors).push(safeSelector);
1499
+ }
1500
+
1501
+ return [historyInsensitiveSelectors, historySensitiveSelectors];
1502
+ }
1503
+
1504
+ var sanitizeStylesheet = (function () {
1505
+ var allowed = {};
1506
+ var cssMediaTypeWhitelist = {
1507
+ 'braille': allowed,
1508
+ 'embossed': allowed,
1509
+ 'handheld': allowed,
1510
+ 'print': allowed,
1511
+ 'projection': allowed,
1512
+ 'screen': allowed,
1513
+ 'speech': allowed,
1514
+ 'tty': allowed,
1515
+ 'tv': allowed
1516
+ };
1517
+
1518
+ /**
1519
+ * Given a series of sanitized tokens, removes any properties that would
1520
+ * leak user history if allowed to style links differently depending on
1521
+ * whether the linked URL is in the user's browser history.
1522
+ * @param {Array.<string>} blockOfProperties
1523
+ */
1524
+ function sanitizeHistorySensitive(blockOfProperties) {
1525
+ var elide = false;
1526
+ for (var i = 0, n = blockOfProperties.length; i < n-1; ++i) {
1527
+ var token = blockOfProperties[i];
1528
+ if (':' === blockOfProperties[i+1]) {
1529
+ elide = !(cssSchema[token].cssPropBits & CSS_PROP_BIT_ALLOWED_IN_LINK);
1530
+ }
1531
+ if (elide) { blockOfProperties[i] = ''; }
1532
+ if (';' === token) { elide = false; }
1533
+ }
1534
+ return blockOfProperties.join('');
1535
+ }
1536
+
1537
+ /**
1538
+ * @param {string} cssText a string containing a CSS stylesheet.
1539
+ * @param {string} suffix a suffix that is added to all IDs and which is
1540
+ * used as a CLASS names so that the returned selectors will only match
1541
+ * nodes under one with suffix as a class name.
1542
+ * If suffix is {@code "sfx"}, the selector
1543
+ * {@code ["a", "#foo", " ", "b", ".bar"]} will be namespaced to
1544
+ * {@code [".sfx", " ", "a", "#foo-sfx", " ", "b", ".bar"]}.
1545
+ * @param {function(string, string)} opt_naiveUriRewriter maps URLs of media
1546
+ * (images, sounds) that appear as CSS property values to sanitized
1547
+ * URLs or null if the URL should not be allowed as an external media
1548
+ * file in sanitized CSS.
1549
+ */
1550
+ return function /*sanitizeStylesheet*/(
1551
+ cssText, suffix, opt_naiveUriRewriter) {
1552
+ var safeCss = void 0;
1553
+ // A stack describing the { ... } regions.
1554
+ // Null elements indicate blocks that should not be emitted.
1555
+ var blockStack = [];
1556
+ // True when the content of the current block should be left off safeCss.
1557
+ var elide = false;
1558
+ parseCssStylesheet(
1559
+ cssText,
1560
+ {
1561
+ startStylesheet: function () {
1562
+ safeCss = [];
1563
+ },
1564
+ endStylesheet: function () {
1565
+ },
1566
+ startAtrule: function (atIdent, headerArray) {
1567
+ if (elide) {
1568
+ atIdent = null;
1569
+ } else if (atIdent === '@media') {
1570
+ headerArray = headerArray.filter(
1571
+ function (mediaType) {
1572
+ return cssMediaTypeWhitelist[mediaType] == allowed;
1573
+ });
1574
+ if (headerArray.length) {
1575
+ safeCss.push(atIdent, headerArray.join(','), '{');
1576
+ } else {
1577
+ atIdent = null;
1578
+ }
1579
+ } else {
1580
+ if (atIdent === '@import') {
1581
+ // TODO: Use a logger instead.
1582
+ if (window.console) {
1583
+ window.console.log(
1584
+ '@import ' + headerArray.join(' ') + ' elided');
1585
+ }
1586
+ }
1587
+ atIdent = null; // Elide the block.
1588
+ }
1589
+ elide = !atIdent;
1590
+ blockStack.push(atIdent);
1591
+ },
1592
+ endAtrule: function () {
1593
+ var atIdent = blockStack.pop();
1594
+ if (!elide) {
1595
+ safeCss.push(';');
1596
+ }
1597
+ checkElide();
1598
+ },
1599
+ startBlock: function () {
1600
+ // There are no bare blocks in CSS, so we do not change the
1601
+ // block stack here, but instead in the events that bracket
1602
+ // blocks.
1603
+ if (!elide) {
1604
+ safeCss.push('{');
1605
+ }
1606
+ },
1607
+ endBlock: function () {
1608
+ if (!elide) {
1609
+ safeCss.push('}');
1610
+ elide = true; // skip any semicolon from endAtRule.
1611
+ }
1612
+ },
1613
+ startRuleset: function (selectorArray) {
1614
+ var historySensitiveSelectors = void 0;
1615
+ var removeHistoryInsensitiveSelectors = false;
1616
+ if (!elide) {
1617
+ var selectors = sanitizeCssSelectors(selectorArray, suffix);
1618
+ var historyInsensitiveSelectors = selectors[0];
1619
+ historySensitiveSelectors = selectors[1];
1620
+ if (!historyInsensitiveSelectors.length
1621
+ && !historySensitiveSelectors.length) {
1622
+ elide = true;
1623
+ } else {
1624
+ var selector = historyInsensitiveSelectors.join(', ');
1625
+ if (!selector) {
1626
+ // If we have only history sensitive selectors,
1627
+ // use an impossible rule so that we can capture the content
1628
+ // for later processing by
1629
+ // history insenstive content for use below.
1630
+ selector = 'head > html';
1631
+ removeHistoryInsensitiveSelectors = true;
1632
+ }
1633
+ safeCss.push(selector, '{');
1634
+ }
1635
+ }
1636
+ blockStack.push(
1637
+ elide
1638
+ ? null
1639
+ // Sometimes a single list of selectors is split in two,
1640
+ // div, a:visited
1641
+ // because we want to allow some properties for DIV that
1642
+ // we don't want to allow for A:VISITED to avoid leaking
1643
+ // user history.
1644
+ // Store the history sensitive selectors and the position
1645
+ // where the block starts so we can later create a copy
1646
+ // of the permissive tokens, and filter it to handle the
1647
+ // history sensitive case.
1648
+ : {
1649
+ historySensitiveSelectors: historySensitiveSelectors,
1650
+ endOfSelectors: safeCss.length - 1, // 1 is open curly
1651
+ removeHistoryInsensitiveSelectors:
1652
+ removeHistoryInsensitiveSelectors
1653
+ });
1654
+ },
1655
+ endRuleset: function () {
1656
+ var rules = blockStack.pop();
1657
+ var propertiesEnd = safeCss.length;
1658
+ if (!elide) {
1659
+ safeCss.push('}');
1660
+ if (rules) {
1661
+ var extraSelectors = rules.historySensitiveSelectors;
1662
+ if (extraSelectors.length) {
1663
+ var propertyGroupTokens = safeCss.slice(rules.endOfSelectors);
1664
+ safeCss.push(extraSelectors.join(', '),
1665
+ sanitizeHistorySensitive(propertyGroupTokens));
1666
+ }
1667
+ }
1668
+ }
1669
+ if (rules && rules.removeHistoryInsensitiveSelectors) {
1670
+ safeCss.splice(
1671
+ // -1 and +1 account for curly braces.
1672
+ rules.endOfSelectors - 1, propertiesEnd + 1);
1673
+ }
1674
+ checkElide();
1675
+ },
1676
+ declaration: function (property, valueArray) {
1677
+ if (!elide) {
1678
+ var schema = cssSchema[property];
1679
+ if (schema) {
1680
+ sanitizeCssProperty(property, schema, valueArray, opt_naiveUriRewriter);
1681
+ if (valueArray.length) {
1682
+ safeCss.push(property, ':', valueArray.join(' '), ';');
1683
+ }
1684
+ }
1685
+ }
1686
+ }
1687
+ });
1688
+ function checkElide() {
1689
+ elide = blockStack.length !== 0
1690
+ && blockStack[blockStack.length-1] !== null;
1691
+ }
1692
+ return safeCss.join('');
1693
+ };
1694
+ })();
1695
+
1696
+ // Exports for closure compiler.
1697
+ if (typeof window !== 'undefined') {
1698
+ window['sanitizeCssProperty'] = sanitizeCssProperty;
1699
+ window['sanitizeCssSelectors'] = sanitizeCssSelectors;
1700
+ window['sanitizeStylesheet'] = sanitizeStylesheet;
1701
+ }
1702
+ // Copyright (C) 2010 Google Inc.
1703
+ //
1704
+ // Licensed under the Apache License, Version 2.0 (the "License");
1705
+ // you may not use this file except in compliance with the License.
1706
+ // You may obtain a copy of the License at
1707
+ //
1708
+ // http://www.apache.org/licenses/LICENSE-2.0
1709
+ //
1710
+ // Unless required by applicable law or agreed to in writing, software
1711
+ // distributed under the License is distributed on an "AS IS" BASIS,
1712
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1713
+ // See the License for the specific language governing permissions and
1714
+ // limitations under the License.
1715
+
1716
+ /**
1717
+ * @fileoverview
1718
+ * Utilities for dealing with CSS source code.
1719
+ *
1720
+ * @author mikesamuel@gmail.com
1721
+ * \@requires lexCss
1722
+ * \@overrides window
1723
+ * \@provides parseCssStylesheet, parseCssDeclarations
1724
+ */
1725
+
1726
+ /**
1727
+ * parseCssStylesheet takes a chunk of CSS text and a handler object with
1728
+ * methods that it calls as below:
1729
+ * <pre>
1730
+ * // At the beginning of a stylesheet.
1731
+ * handler.startStylesheet();
1732
+ *
1733
+ * // For an @foo rule ended by a semicolon: @import "foo.css";
1734
+ * handler.startAtrule('@import', ['"foo.css"']);
1735
+ * handler.endAtrule();
1736
+ *
1737
+ * // For an @foo rule ended with a block. @media print { ... }
1738
+ * handler.startAtrule('@media', ['print']);
1739
+ * handler.startBlock();
1740
+ * // Calls to contents elided. Probably selectors and declarations as below.
1741
+ * handler.endBlock();
1742
+ * handler.endAtrule();
1743
+ *
1744
+ * // For a ruleset: p.clazz q, s { color: blue; }
1745
+ * handler.startRuleset(['p', '.', 'clazz', ' ', 'q', ',', ' ', 's']);
1746
+ * handler.declaration('color', ['blue']);
1747
+ * handler.endRuleset();
1748
+ *
1749
+ * // At the end of a stylesheet.
1750
+ * handler.endStylesheet();
1751
+ * </pre>
1752
+ * When errors are encountered, the parser drops the useless tokens and
1753
+ * attempts to resume parsing.
1754
+ *
1755
+ * @param {string} cssText CSS3 content to parse as a stylesheet.
1756
+ * @param {Object} handler An object like <pre>{
1757
+ * startStylesheet: function () { ... },
1758
+ * endStylesheet: function () { ... },
1759
+ * startAtrule: function (atIdent, headerArray) { ... },
1760
+ * endAtrule: function () { ... },
1761
+ * startBlock: function () { ... },
1762
+ * endBlock: function () { ... },
1763
+ * startRuleset: function (selectorArray) { ... },
1764
+ * endRuleset: function () { ... },
1765
+ * declaration: function (property, valueArray) { ... },
1766
+ * }</pre>
1767
+ */
1768
+ var parseCssStylesheet;
1769
+
1770
+ /**
1771
+ * parseCssDeclarations parses a run of declaration productions as seen in the
1772
+ * body of the HTML5 {@code style} attribute.
1773
+ *
1774
+ * @param {string} cssText CSS3 content to parse as a run of declarations.
1775
+ * @param {Object} handler An object like <pre>{
1776
+ * declaration: function (property, valueArray) { ... },
1777
+ * }</pre>
1778
+ */
1779
+ var parseCssDeclarations;
1780
+
1781
+ (function () {
1782
+ // stylesheet : [ CDO | CDC | S | statement ]*;
1783
+ parseCssStylesheet = function(cssText, handler) {
1784
+ var toks = lexCss(cssText);
1785
+ if (handler.startStylesheet) { handler.startStylesheet(); }
1786
+ for (var i = 0, n = toks.length; i < n;) {
1787
+ // CDO and CDC ("<!--" and "-->") are converted to space by the lexer.
1788
+ i = toks[i] === ' ' ? i+1 : statement(toks, i, n, handler);
1789
+ }
1790
+ if (handler.endStylesheet) { handler.endStylesheet(); }
1791
+ };
1792
+
1793
+ // statement : ruleset | at-rule;
1794
+ function statement(toks, i, n, handler) {
1795
+ if (i < n) {
1796
+ var tok = toks[i];
1797
+ if (tok.charAt(0) === '@') {
1798
+ return atrule(toks, i, n, handler, true);
1799
+ } else {
1800
+ return ruleset(toks, i, n, handler);
1801
+ }
1802
+ } else {
1803
+ return i;
1804
+ }
1805
+ }
1806
+
1807
+ // at-rule : ATKEYWORD S* any* [ block | ';' S* ];
1808
+ function atrule(toks, i, n, handler, blockok) {
1809
+ var start = i++;
1810
+ while (i < n && toks[i] !== '{' && toks[i] !== ';') {
1811
+ ++i;
1812
+ }
1813
+ if (i < n && (blockok || toks[i] === ';')) {
1814
+ var s = start+1, e = i;
1815
+ if (s < n && toks[s] === ' ') { ++s; }
1816
+ if (e > s && toks[e-1] === ' ') { --e; }
1817
+ if (handler.startAtrule) {
1818
+ handler.startAtrule(toks[start].toLowerCase(), toks.slice(s, e));
1819
+ }
1820
+ i = (toks[i] === '{')
1821
+ ? block(toks, i, n, handler)
1822
+ : i+1; // Skip over ';'
1823
+ if (handler.endAtrule) {
1824
+ handler.endAtrule();
1825
+ }
1826
+ }
1827
+ // Else we reached end of input or are missing a semicolon.
1828
+ // Drop the rule on the floor.
1829
+ return i;
1830
+ }
1831
+
1832
+ // block : '{' S* [ any | block | ATKEYWORD S* | ';' S* ]* '}' S*;
1833
+ // Assumes the leading '{' has been verified by callers.
1834
+ function block(toks, i, n, handler) {
1835
+ ++i; // skip over '{'
1836
+ if (handler.startBlock) { handler.startBlock(); }
1837
+ while (i < n) {
1838
+ var ch = toks[i].charAt(0);
1839
+ if (ch == '}') {
1840
+ ++i;
1841
+ break;
1842
+ }
1843
+ if (ch === ' ' || ch === ';') {
1844
+ i = i+1;
1845
+ } else if (ch === '@') {
1846
+ i = atrule(toks, i, n, handler, false);
1847
+ } else if (ch === '{') {
1848
+ i = block(toks, i, n, handler);
1849
+ } else {
1850
+ // Instead of using (any* block) to subsume ruleset we allow either
1851
+ // blocks or rulesets with a non-blank selector.
1852
+ // This is more restrictive but does not require atrule specific
1853
+ // parse tree fixup to realize that the contents of the block in
1854
+ // @media print { ... }
1855
+ // is a ruleset. We just don't care about any block carrying at-rules
1856
+ // whose body content is not ruleset content.
1857
+ i = ruleset(toks, i, n, handler);
1858
+ }
1859
+ }
1860
+ if (handler.endBlock) { handler.endBlock(); }
1861
+ return i;
1862
+ }
1863
+
1864
+ // ruleset : selector? '{' S* declaration? [ ';' S* declaration? ]* '}' S*;
1865
+ function ruleset(toks, i, n, handler) {
1866
+ // toks[s:e] are the selector tokens including internal whitespace.
1867
+ var s = i, e = selector(toks, i, n, true);
1868
+ if (e < 0) {
1869
+ // Skip malformed content per selector calling convention.
1870
+ e = ~e;
1871
+ // Make sure we skip at least one token.
1872
+ return i === e ? e+1 : e;
1873
+ }
1874
+ i = e;
1875
+ // Don't include any trailing space in the selector slice.
1876
+ if (e > s && toks[e-1] === ' ') { --e; }
1877
+ var tok = toks[i];
1878
+ ++i; // Skip over '{'
1879
+ if (tok !== '{') {
1880
+ // Skips past the '{' when there is a malformed input.
1881
+ return i;
1882
+ }
1883
+ if (handler.startRuleset) {
1884
+ handler.startRuleset(toks.slice(s, e));
1885
+ }
1886
+ while (i < n) {
1887
+ tok = toks[i];
1888
+ if (tok === '}') {
1889
+ ++i;
1890
+ break;
1891
+ }
1892
+ if (tok === ' ') {
1893
+ i = i+1;
1894
+ } else {
1895
+ i = declaration(toks, i, n, handler);
1896
+ }
1897
+ }
1898
+ if (handler.endRuleset) {
1899
+ handler.endRuleset();
1900
+ }
1901
+ return i < n ? i+1 : i;
1902
+ }
1903
+
1904
+ // selector : any+;
1905
+ // any : [ IDENT | NUMBER | PERCENTAGE | DIMENSION | STRING
1906
+ // | DELIM | URI | HASH | UNICODE-RANGE | INCLUDES
1907
+ // | FUNCTION S* any* ')' | DASHMATCH | '(' S* any* ')'
1908
+ // | '[' S* any* ']' ] S*;
1909
+ // A negative return value, rv, indicates the selector was malformed and
1910
+ // the index at which we stopped is ~rv.
1911
+ function selector(toks, i, n, allowSemi) {
1912
+ var s = i;
1913
+ // The definition of any above can be summed up as
1914
+ // "any run of token except ('[', ']', '(', ')', ':', ';', '{', '}')
1915
+ // or nested runs of parenthesized tokens or square bracketed tokens".
1916
+ // Spaces are significant in the selector.
1917
+ // Selector is used as (selector?) so the below looks for (any*) for
1918
+ // simplicity.
1919
+ var tok;
1920
+ // Keeping a stack pointer actually causes this to minify better since
1921
+ // ".length" and ".push" are a lo of chars.
1922
+ var brackets = [], stackLast = -1;
1923
+ for (;i < n; ++i) {
1924
+ tok = toks[i].charAt(0);
1925
+ if (tok === '[' || tok === '(') {
1926
+ brackets[++stackLast] = tok;
1927
+ } else if ((tok === ']' && brackets[stackLast] === '[') ||
1928
+ (tok === ')' && brackets[stackLast] === '(')) {
1929
+ --stackLast;
1930
+ } else if (tok === '{' || tok === '}' || tok === ';' || tok === '@'
1931
+ || (tok === ':' && !allowSemi)) {
1932
+ break;
1933
+ }
1934
+ }
1935
+ if (stackLast >= 0) {
1936
+ // Returns the bitwise inverse of i+1 to indicate an error in the
1937
+ // token stream so that clients can ignore it.
1938
+ i = ~(i+1);
1939
+ }
1940
+ return i;
1941
+ }
1942
+
1943
+ var ident = /^-?[a-z]/i;
1944
+
1945
+ // declaration : property ':' S* value;
1946
+ // property : IDENT S*;
1947
+ // value : [ any | block | ATKEYWORD S* ]+;
1948
+ function declaration(toks, i, n, handler) {
1949
+ var property = toks[i++];
1950
+ if (!ident.test(property)) {
1951
+ return i+1; // skip one token.
1952
+ }
1953
+ var tok;
1954
+ if (i < n && toks[i] === ' ') { ++i; }
1955
+ if (i == n || toks[i] !== ':') {
1956
+ // skip tokens to next semi or close bracket.
1957
+ while (i < n && (tok = toks[i]) !== ';' && tok !== '}') { ++i; }
1958
+ return i;
1959
+ }
1960
+ ++i;
1961
+ if (i < n && toks[i] === ' ') { ++i; }
1962
+
1963
+ // None of the rules we care about want atrules or blocks in value, so
1964
+ // we look for any+ but that is the same as selector but not zero-length.
1965
+ // This gets us the benefit of not emitting any value with mismatched
1966
+ // brackets.
1967
+ var s = i, e = selector(toks, i, n, false);
1968
+ if (e < 0) {
1969
+ // Skip malformed content per selector calling convention.
1970
+ e = ~e;
1971
+ } else {
1972
+ var value = [], valuelen = 0;
1973
+ for (var j = s; j < e; ++j) {
1974
+ tok = toks[j];
1975
+ if (tok !== ' ') {
1976
+ value[valuelen++] = tok;
1977
+ }
1978
+ }
1979
+ // One of the following is now true:
1980
+ // (1) e is flush with the end of the tokens as in <... style="x:y">.
1981
+ // (2) tok[e] points to a ';' in which case we need to consume the semi.
1982
+ // (3) tok[e] points to a '}' in which case we don't consume it.
1983
+ // (4) else there is bogus unparsed value content at toks[e:].
1984
+ // Allow declaration flush with end for style attr body.
1985
+ if (e < n) { // 2, 3, or 4
1986
+ do {
1987
+ tok = toks[e];
1988
+ if (tok === ';' || tok === '}') { break; }
1989
+ // Don't emit the property if there is questionable trailing content.
1990
+ valuelen = 0;
1991
+ } while (++e < n);
1992
+ if (tok === ';') {
1993
+ ++e;
1994
+ }
1995
+ }
1996
+ if (valuelen && handler.declaration) {
1997
+ // TODO: coerce non-keyword ident tokens to quoted strings.
1998
+ handler.declaration(property.toLowerCase(), value);
1999
+ }
2000
+ }
2001
+ return e;
2002
+ }
2003
+
2004
+ parseCssDeclarations = function(cssText, handler) {
2005
+ var toks = lexCss(cssText);
2006
+ for (var i = 0, n = toks.length; i < n;) {
2007
+ i = toks[i] !== ' ' ? declaration(toks, i, n, handler) : i+1;
2008
+ }
2009
+ };
2010
+ })();
2011
+
2012
+ // Exports for closure compiler.
2013
+ if (typeof window !== 'undefined') {
2014
+ window['parseCssStylesheet'] = parseCssStylesheet;
2015
+ window['parseCssDeclarations'] = parseCssDeclarations;
2016
+ }
2017
+ /*!
2018
+ * OpenUI5
2019
+ * (c) Copyright 2026 SAP SE or an SAP affiliate company.
2020
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
2021
+ */
2022
+ // Based on coding from the HTML4 Sanitizer by Google Inc.
2023
+ // The HTML Attributes and ELements were reorganized according to the actual HTML5 specification
2024
+ // from the W3C. All types and flags were reviewed again as accurately as possible with HTML4 only
2025
+ // elements removed, you can still see them as comments. All rules which are new or changed from the
2026
+ // old HTML4 file are also marked "new" within the comment. The comments also state which attributes
2027
+ // and elements are assigned to respective types and flags. All rules which were not 100% clear were
2028
+ // analyzed in a way of similarity, so for example "audio" and "video" content behaves like images etc.
2029
+ // URIEFFECTS state if a URL is loaded inplace within a tag where the actual document is in control
2030
+ // of what type of content is loaded like "image" or if a new document is loaded like with "a href".
2031
+ // LOADERTYPES state if content is loaded as sandboxed which means it is loaded within a specific
2032
+ // surroundig player like with video content for example or if it is loaded freely without restrictions.
2033
+ // @overrides window
2034
+ // @provides html4
2035
+
2036
+ var html4 = {};
2037
+ html4.atype = {
2038
+ NONE: 0,
2039
+ URI: 1, //action, cite, data, href, icon, manifest, poster, src
2040
+ URI_FRAGMENT: 11, //usemap
2041
+ SCRIPT: 2, //all event handlers
2042
+ STYLE: 3, //style
2043
+ ID: 4, //id
2044
+ IDREF: 5, //for
2045
+ IDREFS: 6, //headers
2046
+ GLOBAL_NAME: 7, //name of form, iframe, img, map, meta
2047
+ LOCAL_NAME: 8, //name of button, fieldset, input, keygen, object, output, param, select, textarea
2048
+ CLASSES: 9, //class
2049
+ FRAME_TARGET: 10 //formtarget, srcdoc, target
2050
+ };
2051
+
2052
+ html4.ATTRIBS = {
2053
+ '*::accesskey': 0, //NONE
2054
+ '*::class': 9, //CLASSES
2055
+ '*::contenteditable': 0, //NONE new
2056
+ '*::contextmenu': 0, //NONE new
2057
+ '*::dir': 0, //NONE
2058
+ '*::draggable': 0, //NONE new
2059
+ '*::dropzone': 0, //NONE new
2060
+ '*::hidden': 0, //NONE new
2061
+ '*::id': 4, //ID
2062
+ '*::lang': 0, //NONE
2063
+ '*::onabort': 2, //SCRIPT new
2064
+ '*::onblur': 2, //SCRIPT new
2065
+ '*::oncanplay': 2, //SCRIPT new
2066
+ '*::oncanplaythrough': 2, //SCRIPT new
2067
+ '*::onchange': 2, //SCRIPT new
2068
+ '*::onclick': 2, //SCRIPT
2069
+ '*::oncontextmenu': 2, //SCRIPT new
2070
+ '*::oncuechange': 2, //SCRIPT new
2071
+ '*::ondblclick': 2, //SCRIPT
2072
+ '*::ondrag': 2, //SCRIPT new
2073
+ '*::ondragend': 2, //SCRIPT new
2074
+ '*::ondragenter': 2, //SCRIPT new
2075
+ '*::ondragleave': 2, //SCRIPT new
2076
+ '*::ondragover': 2, //SCRIPT new
2077
+ '*::ondragstart': 2, //SCRIPT new
2078
+ '*::ondrop': 2, //SCRIPT new
2079
+ '*::ondurationchange': 2, //SCRIPT new
2080
+ '*::onemptied': 2, //SCRIPT new
2081
+ '*::onended': 2, //SCRIPT new
2082
+ '*::onerror': 2, //SCRIPT new
2083
+ '*::onfocus': 2, //SCRIPT new
2084
+ '*::oninput': 2, //SCRIPT new
2085
+ '*::oninvalid': 2, //SCRIPT new
2086
+ '*::onkeydown': 2, //SCRIPT
2087
+ '*::onkeypress': 2, //SCRIPT
2088
+ '*::onkeyup': 2, //SCRIPT
2089
+ '*::onload': 2, //SCRIPT
2090
+ '*::onloadeddata': 2, //SCRIPT new
2091
+ '*::onloadedmetadata': 2, //SCRIPT new
2092
+ '*::onloadstart': 2, //SCRIPT new
2093
+ '*::onmousedown': 2, //SCRIPT
2094
+ '*::onmousemove': 2, //SCRIPT
2095
+ '*::onmouseout': 2, //SCRIPT
2096
+ '*::onmouseover': 2, //SCRIPT
2097
+ '*::onmouseup': 2, //SCRIPT
2098
+ '*::onmousewheel': 2, //SCRIPT new
2099
+ '*::onpause': 2, //SCRIPT new
2100
+ '*::onplay': 2, //SCRIPT new
2101
+ '*::onplaying': 2, //SCRIPT new
2102
+ '*::onprogress': 2, //SCRIPT new
2103
+ '*::onratechange': 2, //SCRIPT new
2104
+ '*::onreadystatechange': 2, //SCRIPT new
2105
+ '*::onreset': 2, //SCRIPT new
2106
+ '*::onscroll': 2, //SCRIPT new
2107
+ '*::onseeked': 2, //SCRIPT new
2108
+ '*::onseeking': 2, //SCRIPT new
2109
+ '*::onselect': 2, //SCRIPT new
2110
+ '*::onshow': 2, //SCRIPT new
2111
+ '*::onstalled': 2, //SCRIPT new
2112
+ '*::onsubmit': 2, //SCRIPT new
2113
+ '*::onsuspend': 2, //SCRIPT new
2114
+ '*::ontimeupdate': 2, //SCRIPT new
2115
+ '*::onvolumechange': 2, //SCRIPT new
2116
+ '*::onwaiting': 2, //SCRIPT new
2117
+ '*::spellcheck': 0, //NONE new
2118
+ '*::style': 3, //STYLE
2119
+ '*::tabindex': 0, //NONE
2120
+ '*::title': 0, //NONE
2121
+ //--------------------- 'a::accesskey': 0, moved to global
2122
+ //--------------------- 'a::coords': 0,
2123
+ 'a::href': 1, //URI
2124
+ 'a::hreflang': 0, //NONE
2125
+ 'a::media': 0, //NONE new
2126
+ //--------------------- 'a::name': 7,
2127
+ //--------------------- 'a::onblur': 2, moved to global
2128
+ //--------------------- 'a::onfocus': 2, moved to global
2129
+ 'a::rel': 0, //NONE
2130
+ //--------------------- 'a::rev': 0,
2131
+ //--------------------- 'a::shape': 0,
2132
+ //--------------------- 'a::tabindex': 0, moved to global
2133
+ 'a::target': 0, //changed to "0" because of CSN 1918585 2013, original value was 10 FRAME_TARGET but it seems uncritical
2134
+ 'a::type': 0, //NONE
2135
+ //--------------------- 'area::accesskey': 0, moved to global
2136
+ 'area::alt': 0, //NONE
2137
+ 'area::coords': 0, //NONE
2138
+ 'area::href': 1, //URI
2139
+ 'area::hreflang': 0, //NONE new
2140
+ 'area::media': 0, //NONE new
2141
+ //--------------------- 'area::nohref': 0,
2142
+ //--------------------- 'area::onblur': 2, moved to global
2143
+ //--------------------- 'area::onfocus': 2, moved to global
2144
+ 'area::rel': 0, //NONE new
2145
+ 'area::shape': 0, //NONE
2146
+ //--------------------- 'area::tabindex': 0, moved to global
2147
+ 'area::target': 10, //FRAME_TARGET
2148
+ 'area::type': 0, //NONE
2149
+ 'audio::autoplay': 0, //NONE new
2150
+ 'audio::controls': 0, //NONE new
2151
+ 'audio::loop': 0, //NONE new
2152
+ 'audio::mediagroup': 0, //NONE new
2153
+ 'audio::preload': 0, //NONE new
2154
+ 'audio::src': 1, //URI
2155
+ 'base::href': 1, //URI
2156
+ 'base::target': 10, //FRAME_TARGET
2157
+ //--------------------- 'bdo::dir': 0,
2158
+ 'blockquote::cite': 1, //URI
2159
+ 'body::onafterprint': 2, //SCRIPT new
2160
+ 'body::onbeforeprint': 2, //SCRIPT new
2161
+ 'body::onbeforeunload': 2, //SCRIPT new
2162
+ 'body::onblur': 2, //SCRIPT new
2163
+ 'body::onerror': 2, //SCRIPT new
2164
+ 'body::onfocus': 2, //SCRIPT new
2165
+ 'body::onhashchange': 2, //SCRIPT new
2166
+ 'body::onload': 2, //SCRIPT new
2167
+ 'body::onmessage': 2, //SCRIPT new
2168
+ 'body::onoffline': 2, //SCRIPT new
2169
+ 'body::ononline': 2, //SCRIPT new
2170
+ 'body::onpagehide': 2, //SCRIPT new
2171
+ 'body::onpageshow': 2, //SCRIPT new
2172
+ 'body::onpopstate': 2, //SCRIPT new
2173
+ 'body::onredo': 2, //SCRIPT new
2174
+ 'body::onresize': 2, //SCRIPT new
2175
+ 'body::onscroll': 2, //SCRIPT new
2176
+ 'body::onstorage': 2, //SCRIPT new
2177
+ 'body::onundo': 2, //SCRIPT new
2178
+ 'body::onunload': 2, //SCRIPT new
2179
+ //--------------------- 'br::clear': 0,
2180
+ //--------------------- 'button::accesskey': 0, moved to global
2181
+ 'button::autofocus': 0, //NONE new
2182
+ 'button::disabled': 0, //NONE
2183
+ 'button::form': 0, //NONE new
2184
+ 'button::formaction': 1, //URI new
2185
+ 'button::formenctype': 0, //NONE new
2186
+ 'button::formmethod': 0, //NONE new
2187
+ 'button::formnovalidate': 0, //NONE new
2188
+ 'button::formtarget': 10, //FRAME_TARGET new
2189
+ 'button::name': 8, //LOCAL_NAME
2190
+ //--------------------- 'button::onblur': 2,
2191
+ //--------------------- 'button::onfocus': 2,
2192
+ //--------------------- 'button::tabindex': 0, moved to global
2193
+ 'button::type': 0, //NONE
2194
+ 'button::value': 0, //NONE
2195
+ 'canvas::height': 0, //NONE
2196
+ 'canvas::width': 0, //NONE
2197
+ //--------------------- 'caption::align': 0,
2198
+ //--------------------- 'col::align': 0,
2199
+ //--------------------- 'col::char': 0,
2200
+ //--------------------- 'col::charoff': 0,
2201
+ 'col::span': 0, //NONE
2202
+ //--------------------- 'col::valign': 0,
2203
+ //--------------------- 'col::width': 0,
2204
+ //--------------------- 'colgroup::align': 0,
2205
+ //--------------------- 'colgroup::char': 0,
2206
+ //--------------------- 'colgroup::charoff': 0,
2207
+ 'colgroup::span': 0, //NONE
2208
+ //--------------------- 'colgroup::valign': 0,
2209
+ //--------------------- 'colgroup::width': 0,
2210
+ 'command::checked': 0, //NONE new
2211
+ 'command::disabled': 0, //NONE new
2212
+ 'command::icon': 1, //URI new
2213
+ 'command::label': 0, //NONE new
2214
+ 'command::radiogroup': 0, //NONE new
2215
+ 'command::type': 0, //NONE new
2216
+ 'del::cite': 1, //URI
2217
+ 'del::datetime': 0, //NONE
2218
+ 'details::open': 0, //NONE new
2219
+ //--------------------- 'dir::compact': 0,
2220
+ //--------------------- 'div::align': 0,
2221
+ //--------------------- 'dl::compact': 0,
2222
+ 'embed::height': 0, //NONE new
2223
+ 'embed::src': 1, //URI new
2224
+ 'embed::type': 0, //NONE new
2225
+ 'embed::width': 0, //NONE new
2226
+ 'fieldset::disabled': 0, //NONE new
2227
+ 'fieldset::form': 0, //NONE new
2228
+ 'fieldset::name': 8, //LOCAL_NAME new
2229
+ //--------------------- 'font::color': 0,
2230
+ //--------------------- 'font::face': 0,
2231
+ //--------------------- 'font::size': 0,
2232
+ //--------------------- 'form::accept': 0,
2233
+ 'form::accept-charset': 0, //NONE
2234
+ 'form::action': 1, //URI
2235
+ 'form::autocomplete': 0, //NONE
2236
+ 'form::enctype': 0, //NONE
2237
+ 'form::method': 0, //NONE
2238
+ 'form::name': 7, //GLOBAL_NAME
2239
+ 'form::novalidate': 0, //NONE new
2240
+ //--------------------- 'form::onreset': 2,
2241
+ //--------------------- 'form::onsubmit': 2,
2242
+ 'form::target': 10, //FRAME_TARGET
2243
+ //--------------------- 'h1::align': 0,
2244
+ //--------------------- 'h2::align': 0,
2245
+ //--------------------- 'h3::align': 0,
2246
+ //--------------------- 'h4::align': 0,
2247
+ //--------------------- 'h5::align': 0,
2248
+ //--------------------- 'h6::align': 0,
2249
+ //--------------------- 'hr::align': 0,
2250
+ //--------------------- 'hr::noshade': 0,
2251
+ //--------------------- 'hr::size': 0,
2252
+ //--------------------- 'hr::width': 0,
2253
+ 'html:: manifest': 1, //URI new
2254
+ //--------------------- 'iframe::align': 0,
2255
+ //--------------------- 'iframe::frameborder': 0,
2256
+ 'iframe::height': 0, //NONE
2257
+ //--------------------- 'iframe::marginheight': 0,
2258
+ //--------------------- 'iframe::marginwidth': 0,
2259
+ 'iframe::name': 7, //GLOBAL_NAME new
2260
+ 'iframe::sandbox': 0, //NONE new
2261
+ 'iframe::seamless': 0, //NONE new
2262
+ 'iframe::src': 1, //URI new
2263
+ 'iframe::srcdoc': 10, //FRAME_TARGET new
2264
+ 'iframe::width': 0, //NONE
2265
+ //--------------------- 'img::align': 0,
2266
+ 'img::alt': 0, //NONE
2267
+ //--------------------- 'img::border': 0,
2268
+ 'img::height': 0, //NONE
2269
+ //--------------------- 'img::hspace': 0,
2270
+ 'img::ismap': 0, //NONE
2271
+ 'img::name': 7, //GLOBAL_NAME
2272
+ 'img::src': 1, //URI
2273
+ 'img::usemap': 11, //URI_FRAGMENT
2274
+ //--------------------- 'img::vspace': 0,
2275
+ 'img::width': 0, //NONE
2276
+ 'input::accept': 0, //NONE
2277
+ //--------------------- 'input::accesskey': 0, moved to global
2278
+ //--------------------- 'input::align': 0,
2279
+ 'input::alt': 0, //NONE
2280
+ 'input::autocomplete': 0, //NONE
2281
+ 'input::autofocus': 0, //NONE new
2282
+ 'input::checked': 0, //NONE
2283
+ 'input::dirname': 0, //NONE new
2284
+ 'input::disabled': 0, //NONE
2285
+ 'input::form': 0, //NONE new
2286
+ 'input::formaction': 1, //URI new
2287
+ 'input::formenctype': 0, //NONE new
2288
+ 'input::formmethod': 0, //NONE new
2289
+ 'input::formnovalidate': 0, //NONE new
2290
+ 'input::formtarget': 10, //FRAME_TARGET new
2291
+ 'input::height': 0, //NONE new
2292
+ //--------------------- 'input::ismap': 0,
2293
+ 'input::list': 0, //NONE new
2294
+ 'input::max': 0, //NONE new
2295
+ 'input::maxlength': 0, //NONE
2296
+ 'input::min': 0, //NONE new
2297
+ 'input::multiple': 0, //NONE new
2298
+ 'input::name': 8, //LOCAL_NAME
2299
+ //--------------------- 'input::onblur': 2,
2300
+ //--------------------- 'input::onchange': 2,
2301
+ //--------------------- 'input::onfocus': 2,
2302
+ //--------------------- 'input::onselect': 2,
2303
+ 'input::pattern': 0, //NONE new
2304
+ 'input::placeholder': 0, //NONE new
2305
+ 'input::readonly': 0, //NONE
2306
+ 'input::required': 0, //NONE new
2307
+ 'input::step': 0, //NONE new
2308
+ 'input::size': 0, //NONE
2309
+ 'input::src': 1, //URI
2310
+ //--------------------- 'input::tabindex': 0, moved to global
2311
+ 'input::type': 0, //NONE
2312
+ //--------------------- 'input::usemap': 11,
2313
+ 'input::value': 0, //NONE
2314
+ 'input::width': 0, //NONE new
2315
+ 'ins::cite': 1, //URI
2316
+ 'ins::datetime': 0, //NONE
2317
+ //--------------------- 'label::accesskey': 0, moved to global
2318
+ 'keygen::autofocus': 0, //NONE new
2319
+ 'keygen::challenge': 0, //NONE new
2320
+ 'keygen::disabled': 0, //NONE new
2321
+ 'keygen::form': 0, //NONE new
2322
+ 'keygen::keytype': 0, //NONE new
2323
+ 'keygen::name': 8, //LOCAL_NAME new
2324
+ 'label::for': 5, //IDREF
2325
+ 'label::form': 0, //NONE new
2326
+ //--------------------- 'label::onblur': 2,
2327
+ //--------------------- 'label::onfocus': 2,
2328
+ //--------------------- 'legend::accesskey': 0, moved to global
2329
+ //--------------------- 'legend::align': 0,
2330
+ //--------------------- 'li::type': 0,
2331
+ 'link::href': 1, //URI new
2332
+ 'link::hreflang': 0, //NONE new
2333
+ 'link::media': 0, //NONE new
2334
+ 'link::rel': 0, //NONE new
2335
+ 'link::sizes': 0, //NONE new
2336
+ 'link::type': 0, //NONE new
2337
+ 'li::value': 0, //NONE new
2338
+ 'map::name': 7, //GLOBAL_NAME
2339
+ //--------------------- 'menu::compact': 0,
2340
+ 'menu::label': 0, //NONE new
2341
+ 'menu::type': 0, //NONE new
2342
+ 'meta::charset': 0, //NONE new
2343
+ 'meta::content': 0, //NONE new
2344
+ 'meta::http-equiv': 0, //NONE new
2345
+ 'meta::name': 7, //GLOBAL_NAME new
2346
+ 'meter::form': 0, //NONE new
2347
+ 'meter::high': 0, //NONE new
2348
+ 'meter::low': 0, //NONE new
2349
+ 'meter::max': 0, //NONE new
2350
+ 'meter::min': 0, //NONE new
2351
+ 'meter::optimum': 0, //NONE new
2352
+ 'meter::value': 0, //NONE new
2353
+ 'object::data': 1, //URI new
2354
+ 'object::form': 0, //NONE new
2355
+ 'object::height': 0, //NONE new
2356
+ 'object::name': 8, //LOCAL_NAME new
2357
+ 'object::type': 0, //NONE new
2358
+ 'object::usemap': 11, //URI_FRAGMENT new
2359
+ 'object::width': 0, //NONE new
2360
+ //--------------------- 'ol::compact': 0,
2361
+ 'ol::reversed': 0, //NONE new
2362
+ 'ol::start': 0, //NONE
2363
+ //--------------------- 'ol::type': 0,
2364
+ 'optgroup::disabled': 0, //NONE
2365
+ 'optgroup::label': 0, //NONE
2366
+ 'option::disabled': 0, //NONE
2367
+ 'option::label': 0, //NONE
2368
+ 'option::selected': 0, //NONE
2369
+ 'option::value': 0, //NONE
2370
+ 'output::for': 5, //IDREF new
2371
+ 'output::form': 0, //NONE new
2372
+ 'output::name': 8, //LOCAL_NAME new
2373
+ //--------------------- 'p::align': 0,
2374
+ 'param::name': 8, //LOCAL_NAME new
2375
+ 'param::value': 0, //NONE new
2376
+ 'progress::form': 0, //NONE new
2377
+ 'progress::max': 0, //NONE new
2378
+ 'progress::value': 0, //NONE new
2379
+ //--------------------- 'pre::width': 0,
2380
+ 'q::cite': 1, //URI
2381
+ 'script::async': 0, //NONE new
2382
+ 'script::charset': 0, //NONE new
2383
+ 'script::defer': 0, //NONE new
2384
+ 'script::src': 1, //URI new
2385
+ 'script::type': 0, //NONE new
2386
+ 'select::autofocus': 0, //NONE new
2387
+ 'select::disabled': 0, //NONE
2388
+ 'select::form': 0, //NONE new
2389
+ 'select::multiple': 0, //NONE
2390
+ 'select::name': 8, //LOCAL_NAME
2391
+ //--------------------- 'select::onblur': 2,
2392
+ //--------------------- 'select::onchange': 2,
2393
+ //--------------------- 'select::onfocus': 2,
2394
+ 'select::required': 0, //NONE new
2395
+ 'select::size': 0, //NONE
2396
+ //--------------------- 'select::tabindex': 0, moved to global
2397
+ 'source::media': 0, //NONE new
2398
+ 'source::src': 1, //URI new
2399
+ 'source::type': 0, //NONE new
2400
+ 'style::media': 0, //NONE new
2401
+ 'style::scoped': 0, //NONE new
2402
+ 'style::type': 0, //NONE new
2403
+ //--------------------- 'table::align': 0,
2404
+ //--------------------- 'table::bgcolor': 0,
2405
+ 'table::border': 0, //NONE
2406
+ //--------------------- 'table::cellpadding': 0,
2407
+ //--------------------- 'table::cellspacing': 0,
2408
+ //--------------------- 'table::frame': 0,
2409
+ //--------------------- 'table::rules': 0,
2410
+ //--------------------- 'table::summary': 0,
2411
+ //--------------------- 'table::width': 0,
2412
+ //--------------------- 'tbody::align': 0,
2413
+ //--------------------- 'tbody::char': 0,
2414
+ //--------------------- 'tbody::charoff': 0,
2415
+ //--------------------- 'tbody::valign': 0,
2416
+ //--------------------- 'td::abbr': 0,
2417
+ //--------------------- 'td::align': 0,
2418
+ //--------------------- 'td::axis': 0,
2419
+ //--------------------- 'td::bgcolor': 0,
2420
+ //--------------------- 'td::char': 0,
2421
+ //--------------------- 'td::charoff': 0,
2422
+ 'td::colspan': 0, //NONE
2423
+ 'td::headers': 6, //IDREFS
2424
+ //--------------------- 'td::height': 0,
2425
+ //--------------------- 'td::nowrap': 0,
2426
+ 'td::rowspan': 0, //NONE
2427
+ //--------------------- 'td::scope': 0,
2428
+ //--------------------- 'td::valign': 0,
2429
+ //--------------------- 'td::width': 0,
2430
+ //--------------------- 'textarea::accesskey': 0, moved to global
2431
+ 'textarea::autofocus': 0, //NONE new
2432
+ 'textarea::cols': 0, //NONE
2433
+ 'textarea::disabled': 0, //NONE
2434
+ 'textarea::form': 0, //NONE new
2435
+ 'textarea::maxlength': 0, //NONE new
2436
+ 'textarea::name': 8, //LOCAL_NAME
2437
+ //--------------------- 'textarea::onblur': 2,
2438
+ //--------------------- 'textarea::onchange': 2,
2439
+ //--------------------- 'textarea::onfocus': 2,
2440
+ //--------------------- 'textarea::onselect': 2,
2441
+ 'textarea::placeholder': 0, //NONE new
2442
+ 'textarea::readonly': 0, //NONE
2443
+ 'textarea::required': 0, //NONE new
2444
+ 'textarea::rows': 0, //NONE
2445
+ 'textarea::wrap': 0, //NONE new
2446
+ //--------------------- 'textarea::tabindex': 0, moved to global
2447
+ //--------------------- 'tfoot::align': 0,
2448
+ //--------------------- 'tfoot::char': 0,
2449
+ //--------------------- 'tfoot::charoff': 0,
2450
+ //--------------------- 'tfoot::valign': 0,
2451
+ //--------------------- 'th::abbr': 0,
2452
+ //--------------------- 'th::align': 0,
2453
+ //--------------------- 'th::axis': 0,
2454
+ //--------------------- 'th::bgcolor': 0,
2455
+ //--------------------- 'th::char': 0,
2456
+ //--------------------- 'th::charoff': 0,
2457
+ 'th::colspan': 0, //NONE
2458
+ 'th::headers': 6, //IDREFS
2459
+ //--------------------- 'th::height': 0,
2460
+ //--------------------- 'th::nowrap': 0,
2461
+ 'th::rowspan': 0, //NONE
2462
+ 'th::scope': 0, //NONE
2463
+ //--------------------- 'th::valign': 0,
2464
+ //--------------------- 'th::width': 0,
2465
+ //--------------------- 'thead::align': 0,
2466
+ //--------------------- 'thead::char': 0,
2467
+ //--------------------- 'thead::charoff': 0,
2468
+ //--------------------- 'thead::valign': 0,
2469
+ 'time::datetime': 0, //NONE new
2470
+ 'time::pubdate': 0, //NONE new
2471
+ //--------------------- 'tr::align': 0,
2472
+ //--------------------- 'tr::bgcolor': 0,
2473
+ //--------------------- 'tr::char': 0,
2474
+ //--------------------- 'tr::charoff': 0,
2475
+ //--------------------- 'tr::valign': 0,
2476
+ 'track::default': 0, //NONE new
2477
+ 'track::kind': 0, //NONE new
2478
+ 'track::label': 0, //NONE new
2479
+ 'track::src': 1, //URI new
2480
+ 'track::srclang': 0, //NONE new
2481
+ //--------------------- 'ul::compact': 0,
2482
+ //--------------------- 'ul::type': 0
2483
+ 'video::autoplay': 0, //NONE new
2484
+ 'video::controls': 0, //NONE new
2485
+ 'video::height': 0, //NONE new
2486
+ 'video::loop': 0, //NONE new
2487
+ 'video::mediagroup': 0, //NONE new
2488
+ 'video::poster': 1, //URI new
2489
+ 'video::preload': 0, //NONE new
2490
+ 'video::src': 1, //URI new
2491
+ 'video::width': 0 //NONE new
2492
+ };
2493
+ html4.eflags = {
2494
+ OPTIONAL_ENDTAG: 1,
2495
+ EMPTY: 2,
2496
+ CDATA: 4,
2497
+ RCDATA: 8,
2498
+ UNSAFE: 16,
2499
+ FOLDABLE: 32,
2500
+ SCRIPT: 64,
2501
+ STYLE: 128
2502
+ };
2503
+ html4.ELEMENTS = {
2504
+ 'a': 0,
2505
+ 'abbr': 0,
2506
+ //--------------------- 'acronym': 0,
2507
+ 'address': 0,
2508
+ //--------------------- 'applet': 16,
2509
+ 'area': 2, //EMPTY
2510
+ 'article': 0, //new
2511
+ 'aside': 0, //new
2512
+ 'audio': 0, //new
2513
+ 'b': 0,
2514
+ 'base': 18, //EMPTY, UNSAFE
2515
+ //--------------------- 'basefont': 18,
2516
+ 'bdi': 0, //new
2517
+ 'bdo': 0,
2518
+ //--------------------- 'big': 0,
2519
+ 'blockquote': 0,
2520
+ 'body': 49, //OPTIONAL_ENDTAG, UNSAFE, FOLDABLE
2521
+ 'br': 2, //EMPTY
2522
+ 'button': 0,
2523
+ 'canvas': 0,
2524
+ 'caption': 0,
2525
+ //--------------------- 'center': 0,
2526
+ 'cite': 0,
2527
+ 'code': 0,
2528
+ 'col': 2, //EMPTY
2529
+ 'colgroup': 1, //OPTIONAL_ENDTAG
2530
+ 'command': 2, //EMPTY new
2531
+ 'datalist': 0, //new
2532
+ 'dd': 1, //OPTIONAL_ENDTAG
2533
+ 'del': 0,
2534
+ 'details': 0, //new
2535
+ 'dfn': 0,
2536
+ //--------------------- 'dir': 0,
2537
+ 'div': 0,
2538
+ 'dl': 0,
2539
+ 'dt': 1, //OPTIONAL_ENDTAG
2540
+ 'em': 0,
2541
+ 'embed': 18, //EMPTY, UNSAFE new
2542
+ 'fieldset': 0,
2543
+ 'figcaption': 0, //new
2544
+ 'figure': 0, //new
2545
+ //--------------------- 'font': 0,
2546
+ 'footer': 0, //new
2547
+ 'form': 0,
2548
+ //--------------------- 'frame': 18,
2549
+ //--------------------- 'frameset': 16,
2550
+ 'h1': 0,
2551
+ 'h2': 0,
2552
+ 'h3': 0,
2553
+ 'h4': 0,
2554
+ 'h5': 0,
2555
+ 'h6': 0,
2556
+ 'head': 49, //OPTIONAL_ENDTAG, UNSAFE, FOLDABLE
2557
+ 'header': 0, //new
2558
+ 'hgroup': 0, //new
2559
+ 'hr': 2, //EMPTY
2560
+ 'html': 49, //OPTIONAL_ENDTAG, UNSAFE, FOLDABLE
2561
+ 'i': 0,
2562
+ 'iframe': 0, //new
2563
+ 'img': 2,//EMPTY
2564
+ 'input': 2, //EMPTY
2565
+ 'ins': 0,
2566
+ //--------------------- 'isindex': 18,
2567
+ 'kbd': 0,
2568
+ 'keygen': 2, //EMPTY new
2569
+ 'label': 0,
2570
+ 'legend': 0,
2571
+ 'li': 1, //OPTIONAL_ENDTAG
2572
+ 'link': 18, //EMPTY, UNSAFE
2573
+ 'map': 0,
2574
+ 'mark': 0, //new
2575
+ 'menu': 0,
2576
+ 'meta': 18, //EMPTY, UNSAFE
2577
+ 'meter': 0, //new
2578
+ 'nav': 0,
2579
+ //--------------------- 'nobr': 0,
2580
+ //--------------------- 'noembed': 4,
2581
+ //--------------------- 'noframes': 20,
2582
+ 'noscript': 20, //CDATA, UNSAFE
2583
+ 'object': 16, //UNSAFE
2584
+ 'ol': 0,
2585
+ 'optgroup': 1, //OPTIONAL_ENDTAG new !!!!vorher 0
2586
+ 'option': 1, //OPTIONAL_ENDTAG
2587
+ 'output': 0, //new
2588
+ 'p': 1, //OPTIONAL_ENDTAG
2589
+ 'param': 18, //EMPTY, UNSAFE
2590
+ 'pre': 0,
2591
+ 'progress': 0, //new
2592
+ 'q': 0,
2593
+ 'rp': 1, //OPTIONAL_ENDTAG new
2594
+ 'rt': 1, //OPTIONAL_ENDTAG new
2595
+ 'ruby': 0, //new
2596
+ 's': 0,
2597
+ 'samp': 0,
2598
+ 'script': 84, //CDATA, UNSAFE, SCRIPT
2599
+ 'section': 0, //new
2600
+ 'select': 0,
2601
+ 'small': 0,
2602
+ 'source': 2, //EMPTY new
2603
+ 'span': 0,
2604
+ //--------------------- 'strike': 0,
2605
+ 'strong': 0,
2606
+ 'style': 148, //CDATA, UNSAFE, STYLE
2607
+ 'sub': 0,
2608
+ 'summary': 0, //new
2609
+ 'sup': 0,
2610
+ 'table': 0,
2611
+ 'tbody': 1, //OPTIONAL_ENDTAG
2612
+ 'td': 1, //OPTIONAL_ENDTAG
2613
+ 'textarea': 8, //RCDATA
2614
+ 'tfoot': 1, //OPTIONAL_ENDTAG
2615
+ 'th': 1, //OPTIONAL_ENDTAG
2616
+ 'thead': 1, //OPTIONAL_ENDTAG
2617
+ 'time': 0, //new
2618
+ 'title': 24, //RCDATA, UNSAFE
2619
+ 'tr': 1, //OPTIONAL_ENDTAG
2620
+ 'track': 2, //EMPTY new
2621
+ //--------------------- 'tt': 0,
2622
+ 'u': 0,
2623
+ 'ul': 0,
2624
+ 'var': 0,
2625
+ 'video': 0, //new
2626
+ 'wbr': 2 //EMPTY new
2627
+ };
2628
+ html4.ueffects = {
2629
+ NOT_LOADED: 0,
2630
+ SAME_DOCUMENT: 1,
2631
+ NEW_DOCUMENT: 2
2632
+ };
2633
+ html4.URIEFFECTS = {
2634
+ 'a::href': 2, //NEW_DOCUMENT
2635
+ 'area::href': 2, //NEW_DOCUMENT
2636
+ 'audio::src': 1, //SAME_DOCUMENT new
2637
+ 'base::href':2, //NEW_DOCUMENT new
2638
+ 'blockquote::cite': 0, //NOT_LOADED
2639
+ //--------------------- 'body::background': 1,
2640
+ 'button::formaction': 2, //NEW_DOCUMENT new
2641
+ 'command::icon': 1, //SAME_DOCUMENT new
2642
+ 'del::cite': 0, //NOT_LOADED
2643
+ 'embed::src': 1, //SAME_DOCUMENT new
2644
+ 'form::action': 2, //NEW_DOCUMENT
2645
+ 'html:: manifest': 1, //SAME_DOCUMENT new
2646
+ 'iframe::src': 1, //SAME_DOCUMENT new
2647
+ 'img::src': 1, //SAME_DOCUMENT
2648
+ 'input::formaction': 2, //NEW_DOCUMENT new
2649
+ 'input::src': 1, //SAME_DOCUMENT
2650
+ 'ins::cite': 0, //NOT_LOADED
2651
+ 'link::href': 2, //NEW_DOCUMENT new
2652
+ 'object::data': 1, //SAME_DOCUMENT new
2653
+ 'q::cite': 0, //NOT_LOADED
2654
+ 'script::src': 1, //SAME_DOCUMENT new
2655
+ 'source::src': 1, //SAME_DOCUMENT new
2656
+ 'track::src': 1, //SAME_DOCUMENT new
2657
+ 'video::poster': 1, //SAME_DOCUMENT new
2658
+ 'video::src': 1 //SAME_DOCUMENT new
2659
+ };
2660
+ html4.ltypes = {
2661
+ UNSANDBOXED: 2,
2662
+ SANDBOXED: 1,
2663
+ DATA: 0
2664
+ };
2665
+ html4.LOADERTYPES = {
2666
+ 'a::href': 2, //UNSANDBOXED
2667
+ 'area::href': 2, //UNSANDBOXED
2668
+ 'audio::src': 1, //SANDBOXED new
2669
+ 'base::href': 2, //UNSANDBOXED new
2670
+ 'blockquote::cite': 2, //UNSANDBOXED
2671
+ //--------------------- 'body::background': 1,
2672
+ 'button::formaction': 2, //UNSANDBOXED new
2673
+ 'command::icon': 1, //SANDBOXED new
2674
+ 'del::cite': 2, //UNSANDBOXED
2675
+ 'embed::src': 1, //SANDBOXED new
2676
+ 'form::action': 2, //UNSANDBOXED
2677
+ 'html:: manifest': 1, //SANDBOXED new
2678
+ 'iframe::src': 1, //SANDBOXED new
2679
+ 'img::src': 1, //SANDBOXED
2680
+ 'input::formaction': 2, //UNSANDBOXED new
2681
+ 'input::src': 1, //SANDBOXED
2682
+ 'ins::cite': 2, //UNSANDBOXED
2683
+ 'link::href': 2, //UNSANDBOXED new
2684
+ 'object::data': 0, //DATA new
2685
+ 'q::cite': 2, //UNSANDBOXED
2686
+ 'script::src': 1, //SANDBOXED new
2687
+ 'source::src': 1, //SANDBOXED new
2688
+ 'track::src': 1, //SANDBOXED new
2689
+ 'video::poster': 1, //SANDBOXED new
2690
+ 'video::src': 1 //SANDBOXED new
2691
+ };if (typeof window !== 'undefined') {
2692
+ window['html4'] = html4;
2693
+ }// Copyright (C) 2006 Google Inc.
2694
+ //
2695
+ // Licensed under the Apache License, Version 2.0 (the "License");
2696
+ // you may not use this file except in compliance with the License.
2697
+ // You may obtain a copy of the License at
2698
+ //
2699
+ // http://www.apache.org/licenses/LICENSE-2.0
2700
+ //
2701
+ // Unless required by applicable law or agreed to in writing, software
2702
+ // distributed under the License is distributed on an "AS IS" BASIS,
2703
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2704
+ // See the License for the specific language governing permissions and
2705
+ // limitations under the License.
2706
+
2707
+ /**
2708
+ * @fileoverview
2709
+ * An HTML sanitizer that can satisfy a variety of security policies.
2710
+ *
2711
+ * <p>
2712
+ * The HTML sanitizer is built around a SAX parser and HTML element and
2713
+ * attributes schemas.
2714
+ *
2715
+ * If the cssparser is loaded, inline styles are sanitized using the
2716
+ * css property and value schemas. Else they are remove during
2717
+ * sanitization.
2718
+ *
2719
+ * If it exists, uses parseCssDeclarations, sanitizeCssProperty, cssSchema
2720
+ *
2721
+ * @author mikesamuel@gmail.com
2722
+ * @author jasvir@gmail.com
2723
+ * \@requires html4
2724
+ * \@overrides window
2725
+ * \@provides html, html_sanitize
2726
+ */
2727
+
2728
+ /**
2729
+ * \@namespace
2730
+ */
2731
+ var html = (function(html4) {
2732
+
2733
+ // For closure compiler
2734
+ var parseCssDeclarations, sanitizeCssProperty, cssSchema;
2735
+ if ('undefined' !== typeof window) {
2736
+ parseCssDeclarations = window['parseCssDeclarations'];
2737
+ sanitizeCssProperty = window['sanitizeCssProperty'];
2738
+ cssSchema = window['cssSchema'];
2739
+ }
2740
+
2741
+ var lcase;
2742
+ // The below may not be true on browsers in the Turkish locale.
2743
+ if ('script' === 'SCRIPT'.toLowerCase()) {
2744
+ lcase = function(s) { return s.toLowerCase(); };
2745
+ } else {
2746
+ /**
2747
+ * {\@updoc
2748
+ * $ lcase('SCRIPT')
2749
+ * # 'script'
2750
+ * $ lcase('script')
2751
+ * # 'script'
2752
+ * }
2753
+ */
2754
+ lcase = function(s) {
2755
+ return s.replace(
2756
+ /[A-Z]/g,
2757
+ function(ch) {
2758
+ return String.fromCharCode(ch.charCodeAt(0) | 32);
2759
+ });
2760
+ };
2761
+ }
2762
+
2763
+ // The keys of this object must be 'quoted' or JSCompiler will mangle them!
2764
+ var ENTITIES = {
2765
+ 'lt': '<',
2766
+ 'gt': '>',
2767
+ 'amp': '&',
2768
+ 'nbsp': '\xA0',
2769
+ 'quot': '"',
2770
+ 'apos': '\''
2771
+ };
2772
+
2773
+ var decimalEscapeRe = /^#(\d+)$/;
2774
+ var hexEscapeRe = /^#x([0-9A-Fa-f]+)$/;
2775
+ /**
2776
+ * Decodes an HTML entity.
2777
+ *
2778
+ * {\@updoc
2779
+ * $ lookupEntity('lt')
2780
+ * # '<'
2781
+ * $ lookupEntity('GT')
2782
+ * # '>'
2783
+ * $ lookupEntity('amp')
2784
+ * # '&'
2785
+ * $ lookupEntity('nbsp')
2786
+ * # '\xA0'
2787
+ * $ lookupEntity('apos')
2788
+ * # "'"
2789
+ * $ lookupEntity('quot')
2790
+ * # '"'
2791
+ * $ lookupEntity('#xa')
2792
+ * # '\n'
2793
+ * $ lookupEntity('#10')
2794
+ * # '\n'
2795
+ * $ lookupEntity('#x0a')
2796
+ * # '\n'
2797
+ * $ lookupEntity('#010')
2798
+ * # '\n'
2799
+ * $ lookupEntity('#x00A')
2800
+ * # '\n'
2801
+ * $ lookupEntity('Pi') // Known failure
2802
+ * # '\u03A0'
2803
+ * $ lookupEntity('pi') // Known failure
2804
+ * # '\u03C0'
2805
+ * }
2806
+ *
2807
+ * @param {string} name the content between the '&' and the ';'.
2808
+ * @return {string} a single unicode code-point as a string.
2809
+ */
2810
+ function lookupEntity(name) {
2811
+ name = lcase(name); // TODO: &pi; is different from &Pi;
2812
+ if (ENTITIES.hasOwnProperty(name)) { return ENTITIES[name]; }
2813
+ var m = name.match(decimalEscapeRe);
2814
+ if (m) {
2815
+ return String.fromCharCode(parseInt(m[1], 10));
2816
+ } else if (!!(m = name.match(hexEscapeRe))) {
2817
+ return String.fromCharCode(parseInt(m[1], 16));
2818
+ }
2819
+ return '';
2820
+ }
2821
+
2822
+ function decodeOneEntity(_, name) {
2823
+ return lookupEntity(name);
2824
+ }
2825
+
2826
+ var nulRe = /\0/g;
2827
+ function stripNULs(s) {
2828
+ return s.replace(nulRe, '');
2829
+ }
2830
+
2831
+ var entityRe = /&(#\d+|#x[0-9A-Fa-f]+|\w+);/g;
2832
+ /**
2833
+ * The plain text of a chunk of HTML CDATA which possibly containing.
2834
+ *
2835
+ * {\@updoc
2836
+ * $ unescapeEntities('')
2837
+ * # ''
2838
+ * $ unescapeEntities('hello World!')
2839
+ * # 'hello World!'
2840
+ * $ unescapeEntities('1 &lt; 2 &amp;&AMP; 4 &gt; 3&#10;')
2841
+ * # '1 < 2 && 4 > 3\n'
2842
+ * $ unescapeEntities('&lt;&lt <- unfinished entity&gt;')
2843
+ * # '<&lt <- unfinished entity>'
2844
+ * $ unescapeEntities('/foo?bar=baz&copy=true') // & often unescaped in URLS
2845
+ * # '/foo?bar=baz&copy=true'
2846
+ * $ unescapeEntities('pi=&pi;&#x3c0;, Pi=&Pi;\u03A0') // FIXME: known failure
2847
+ * # 'pi=\u03C0\u03c0, Pi=\u03A0\u03A0'
2848
+ * }
2849
+ *
2850
+ * @param {string} s a chunk of HTML CDATA. It must not start or end inside
2851
+ * an HTML entity.
2852
+ */
2853
+ function unescapeEntities(s) {
2854
+ return s.replace(entityRe, decodeOneEntity);
2855
+ }
2856
+
2857
+ var ampRe = /&/g;
2858
+ var looseAmpRe = /&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi;
2859
+ var ltRe = /[<]/g;
2860
+ var gtRe = />/g;
2861
+ var quotRe = /\"/g;
2862
+
2863
+ /**
2864
+ * Escapes HTML special characters in attribute values.
2865
+ *
2866
+ * {\@updoc
2867
+ * $ escapeAttrib('')
2868
+ * # ''
2869
+ * $ escapeAttrib('"<<&==&>>"') // Do not just escape the first occurrence.
2870
+ * # '&#34;&lt;&lt;&amp;&#61;&#61;&amp;&gt;&gt;&#34;'
2871
+ * $ escapeAttrib('Hello <World>!')
2872
+ * # 'Hello &lt;World&gt;!'
2873
+ * }
2874
+ */
2875
+ function escapeAttrib(s) {
2876
+ return ('' + s).replace(ampRe, '&amp;').replace(ltRe, '&lt;')
2877
+ .replace(gtRe, '&gt;').replace(quotRe, '&#34;');
2878
+ }
2879
+
2880
+ /**
2881
+ * Escape entities in RCDATA that can be escaped without changing the meaning.
2882
+ * {\@updoc
2883
+ * $ normalizeRCData('1 < 2 &&amp; 3 > 4 &amp;& 5 &lt; 7&8')
2884
+ * # '1 &lt; 2 &amp;&amp; 3 &gt; 4 &amp;&amp; 5 &lt; 7&amp;8'
2885
+ * }
2886
+ */
2887
+ function normalizeRCData(rcdata) {
2888
+ return rcdata
2889
+ .replace(looseAmpRe, '&amp;$1')
2890
+ .replace(ltRe, '&lt;')
2891
+ .replace(gtRe, '&gt;');
2892
+ }
2893
+
2894
+ // TODO(mikesamuel): validate sanitizer regexs against the HTML5 grammar at
2895
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html
2896
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html
2897
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html
2898
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html
2899
+
2900
+ // We initially split input so that potentially meaningful characters
2901
+ // like '<' and '>' are separate tokens, using a fast dumb process that
2902
+ // ignores quoting. Then we walk that token stream, and when we see a
2903
+ // '<' that's the start of a tag, we use ATTR_RE to extract tag
2904
+ // attributes from the next token. That token will never have a '>'
2905
+ // character. However, it might have an unbalanced quote character, and
2906
+ // when we see that, we combine additional tokens to balance the quote.
2907
+
2908
+ var ATTR_RE = new RegExp(
2909
+ '^\\s*' +
2910
+ '([a-z][a-z-]*)' + // 1 = Attribute name
2911
+ '(?:' + (
2912
+ '\\s*(=)\\s*' + // 2 = Is there a value?
2913
+ '(' + ( // 3 = Attribute value
2914
+ // TODO(felix8a): maybe use backref to match quotes
2915
+ '(\")[^\"]*(\"|$)' + // 4, 5 = Double-quoted string
2916
+ '|' +
2917
+ '(\')[^\']*(\'|$)' + // 6, 7 = Single-quoted string
2918
+ '|' +
2919
+ // Positive lookahead to prevent interpretation of
2920
+ // <foo a= b=c> as <foo a='b=c'>
2921
+ // TODO(felix8a): might be able to drop this case
2922
+ '(?=[a-z][a-z-]*\\s*=)' +
2923
+ '|' +
2924
+ // Unquoted value that isn't an attribute name
2925
+ // (since we didn't match the positive lookahead above)
2926
+ '[^\"\'\\s]*' ) +
2927
+ ')' ) +
2928
+ ')?',
2929
+ 'i');
2930
+
2931
+ var ENTITY_RE = /^(#[0-9]+|#x[0-9a-f]+|\w+);/i;
2932
+
2933
+ // false on IE<=8, true on most other browsers
2934
+ var splitWillCapture = ('a,b'.split(/(,)/).length === 3);
2935
+
2936
+ // bitmask for tags with special parsing, like <script> and <textarea>
2937
+ var EFLAGS_TEXT = html4.eflags.CDATA | html4.eflags.RCDATA;
2938
+
2939
+ /**
2940
+ * Given a SAX-like event handler, produce a function that feeds those
2941
+ * events and a parameter to the event handler.
2942
+ *
2943
+ * The event handler has the form:{@code
2944
+ * {
2945
+ * // Name is an upper-case HTML tag name. Attribs is an array of
2946
+ * // alternating upper-case attribute names, and attribute values. The
2947
+ * // attribs array is reused by the parser. Param is the value passed to
2948
+ * // the saxParser.
2949
+ * startTag: function (name, attribs, param) { ... },
2950
+ * endTag: function (name, param) { ... },
2951
+ * pcdata: function (text, param) { ... },
2952
+ * rcdata: function (text, param) { ... },
2953
+ * cdata: function (text, param) { ... },
2954
+ * startDoc: function (param) { ... },
2955
+ * endDoc: function (param) { ... }
2956
+ * }}
2957
+ *
2958
+ * @param {Object} handler a record containing event handlers.
2959
+ * @return {function(string, Object)} A function that takes a chunk of HTML
2960
+ * and a parameter. The parameter is passed on to the handler methods.
2961
+ */
2962
+ function makeSaxParser(handler) {
2963
+ return function(htmlText, param) {
2964
+ return parse(htmlText, handler, param);
2965
+ };
2966
+ }
2967
+
2968
+ // Parsing strategy is to split input into parts that might be lexically
2969
+ // meaningful (every ">" becomes a separate part), and then recombine
2970
+ // parts if we discover they're in a different context.
2971
+
2972
+ // Note, html-sanitizer filters unknown tags here, even though they also
2973
+ // get filtered out by the sanitizer's handler. This is back-compat
2974
+ // behavior; makeSaxParser is public.
2975
+
2976
+ // TODO(felix8a): Significant performance regressions from -legacy,
2977
+ // tested on
2978
+ // Chrome 18.0
2979
+ // Firefox 11.0
2980
+ // IE 6, 7, 8, 9
2981
+ // Opera 11.61
2982
+ // Safari 5.1.3
2983
+ // Many of these are unusual patterns that are linearly slower and still
2984
+ // pretty fast (eg 1ms to 5ms), so not necessarily worth fixing.
2985
+
2986
+ // TODO(felix8a): "<script> && && && ... <\/script>" is slower on all
2987
+ // browsers. The hotspot is htmlSplit.
2988
+
2989
+ // TODO(felix8a): "<p title='>>>>...'><\/p>" is slower on all browsers.
2990
+ // This is partly htmlSplit, but the hotspot is parseTagAndAttrs.
2991
+
2992
+ // TODO(felix8a): "<a><\/a><a><\/a>..." is slower on IE9.
2993
+ // "<a>1<\/a><a>1<\/a>..." is faster, "<a><\/a>2<a><\/a>2..." is faster.
2994
+
2995
+ // TODO(felix8a): "<p<p<p..." is slower on IE[6-8]
2996
+
2997
+ var continuationMarker = {};
2998
+ function parse(htmlText, handler, param) {
2999
+ var h = handler;
3000
+ var m, p, tagName;
3001
+ var parts = htmlSplit(htmlText);
3002
+ var state = {
3003
+ noMoreGT: false,
3004
+ noMoreEndComments: false
3005
+ };
3006
+ parseCPS(handler, parts, 0, state, param);
3007
+ }
3008
+
3009
+ function continuationMaker(h, parts, initial, state, param) {
3010
+ return function () {
3011
+ parseCPS(h, parts, initial, state, param);
3012
+ };
3013
+ }
3014
+
3015
+ function parseCPS(h, parts, initial, state, param) {
3016
+ try {
3017
+ if (h.startDoc && initial == 0) { h.startDoc(param); }
3018
+ var m, p, tagName;
3019
+ for (var pos = initial, end = parts.length; pos < end;) {
3020
+ var current = parts[pos++];
3021
+ var next = parts[pos];
3022
+ switch (current) {
3023
+ case '&':
3024
+ if (ENTITY_RE.test(next)) {
3025
+ if (h.pcdata) {
3026
+ h.pcdata('&' + next, param, continuationMarker,
3027
+ continuationMaker(h, parts, pos, state, param));
3028
+ }
3029
+ pos++;
3030
+ } else {
3031
+ if (h.pcdata) { h.pcdata("&amp;", param, continuationMarker,
3032
+ continuationMaker(h, parts, pos, state, param));
3033
+ }
3034
+ }
3035
+ break;
3036
+ case '<\/':
3037
+ if (m = /^(\w+)[^\'\"]*/.exec(next)) {
3038
+ if (m[0].length === next.length && parts[pos + 1] === '>') {
3039
+ // fast case, no attribute parsing needed
3040
+ pos += 2;
3041
+ tagName = lcase(m[1]);
3042
+ if (html4.ELEMENTS.hasOwnProperty(tagName)) {
3043
+ if (h.endTag) {
3044
+ h.endTag(tagName, param, continuationMarker,
3045
+ continuationMaker(h, parts, pos, state, param));
3046
+ }
3047
+ }
3048
+ } else {
3049
+ // slow case, need to parse attributes
3050
+ // TODO(felix8a): do we really care about misparsing this?
3051
+ pos = parseEndTag(
3052
+ parts, pos, h, param, continuationMarker, state);
3053
+ }
3054
+ } else {
3055
+ if (h.pcdata) {
3056
+ h.pcdata('&lt;/', param, continuationMarker,
3057
+ continuationMaker(h, parts, pos, state, param));
3058
+ }
3059
+ }
3060
+ break;
3061
+ case '<':
3062
+ if (m = /^(\w+)\s*\/?/.exec(next)) {
3063
+ if (m[0].length === next.length && parts[pos + 1] === '>') {
3064
+ // fast case, no attribute parsing needed
3065
+ pos += 2;
3066
+ tagName = lcase(m[1]);
3067
+ if (html4.ELEMENTS.hasOwnProperty(tagName)) {
3068
+ if (h.startTag) {
3069
+ h.startTag(tagName, [], param, continuationMarker,
3070
+ continuationMaker(h, parts, pos, state, param));
3071
+ }
3072
+ // tags like <script> and <textarea> have special parsing
3073
+ var eflags = html4.ELEMENTS[tagName];
3074
+ if (eflags & EFLAGS_TEXT) {
3075
+ var tag = { name: tagName, next: pos, eflags: eflags };
3076
+ pos = parseText(
3077
+ parts, tag, h, param, continuationMarker, state);
3078
+ }
3079
+ }
3080
+ } else {
3081
+ // slow case, need to parse attributes
3082
+ pos = parseStartTag(
3083
+ parts, pos, h, param, continuationMarker, state);
3084
+ }
3085
+ } else {
3086
+ if (h.pcdata) {
3087
+ h.pcdata('&lt;', param, continuationMarker,
3088
+ continuationMaker(h, parts, pos, state, param));
3089
+ }
3090
+ }
3091
+ break;
3092
+ case '<\!--':
3093
+ // The pathological case is n copies of '<\!--' without '-->', and
3094
+ // repeated failure to find '-->' is quadratic. We avoid that by
3095
+ // remembering when search for '-->' fails.
3096
+ if (!state.noMoreEndComments) {
3097
+ // A comment <\!--x--> is split into three tokens:
3098
+ // '<\!--', 'x--', '>'
3099
+ // We want to find the next '>' token that has a preceding '--'.
3100
+ // pos is at the 'x--'.
3101
+ for (p = pos + 1; p < end; p++) {
3102
+ if (parts[p] === '>' && /--$/.test(parts[p - 1])) { break; }
3103
+ }
3104
+ if (p < end) {
3105
+ pos = p + 1;
3106
+ } else {
3107
+ state.noMoreEndComments = true;
3108
+ }
3109
+ }
3110
+ if (state.noMoreEndComments) {
3111
+ if (h.pcdata) {
3112
+ h.pcdata('&lt;!--', param, continuationMarker,
3113
+ continuationMaker(h, parts, pos, state, param));
3114
+ }
3115
+ }
3116
+ break;
3117
+ case '<\!':
3118
+ if (!/^\w/.test(next)) {
3119
+ if (h.pcdata) {
3120
+ h.pcdata('&lt;!', param, continuationMarker,
3121
+ continuationMaker(h, parts, pos, state, param));
3122
+ }
3123
+ } else {
3124
+ // similar to noMoreEndComment logic
3125
+ if (!state.noMoreGT) {
3126
+ for (p = pos + 1; p < end; p++) {
3127
+ if (parts[p] === '>') { break; }
3128
+ }
3129
+ if (p < end) {
3130
+ pos = p + 1;
3131
+ } else {
3132
+ state.noMoreGT = true;
3133
+ }
3134
+ }
3135
+ if (state.noMoreGT) {
3136
+ if (h.pcdata) {
3137
+ h.pcdata('&lt;!', param, continuationMarker,
3138
+ continuationMaker(h, parts, pos, state, param));
3139
+ }
3140
+ }
3141
+ }
3142
+ break;
3143
+ case '<?':
3144
+ // similar to noMoreEndComment logic
3145
+ if (!state.noMoreGT) {
3146
+ for (p = pos + 1; p < end; p++) {
3147
+ if (parts[p] === '>') { break; }
3148
+ }
3149
+ if (p < end) {
3150
+ pos = p + 1;
3151
+ } else {
3152
+ state.noMoreGT = true;
3153
+ }
3154
+ }
3155
+ if (state.noMoreGT) {
3156
+ if (h.pcdata) {
3157
+ h.pcdata('&lt;?', param, continuationMarker,
3158
+ continuationMaker(h, parts, pos, state, param));
3159
+ }
3160
+ }
3161
+ break;
3162
+ case '>':
3163
+ if (h.pcdata) {
3164
+ h.pcdata("&gt;", param, continuationMarker,
3165
+ continuationMaker(h, parts, pos, state, param));
3166
+ }
3167
+ break;
3168
+ case '':
3169
+ break;
3170
+ default:
3171
+ if (h.pcdata) {
3172
+ h.pcdata(current, param, continuationMarker,
3173
+ continuationMaker(h, parts, pos, state, param));
3174
+ }
3175
+ break;
3176
+ }
3177
+ }
3178
+ if (h.endDoc) { h.endDoc(param); }
3179
+ } catch (e) {
3180
+ if (e !== continuationMarker) { throw e; }
3181
+ }
3182
+ }
3183
+
3184
+ // Split str into parts for the html parser.
3185
+ function htmlSplit(str) {
3186
+ // can't hoist this out of the function because of the re.exec loop.
3187
+ var re = /(<\/|<\!--|<[!?]|[&<>])/g;
3188
+ str += '';
3189
+ if (splitWillCapture) {
3190
+ return str.split(re);
3191
+ } else {
3192
+ var parts = [];
3193
+ var lastPos = 0;
3194
+ var m;
3195
+ while ((m = re.exec(str)) !== null) {
3196
+ parts.push(str.substring(lastPos, m.index));
3197
+ parts.push(m[0]);
3198
+ lastPos = m.index + m[0].length;
3199
+ }
3200
+ parts.push(str.substring(lastPos));
3201
+ return parts;
3202
+ }
3203
+ }
3204
+
3205
+ function parseEndTag(parts, pos, h, param, continuationMarker, state) {
3206
+ var tag = parseTagAndAttrs(parts, pos);
3207
+ // drop unclosed tags
3208
+ if (!tag) { return parts.length; }
3209
+ if (tag.eflags !== void 0) {
3210
+ if (h.endTag) {
3211
+ h.endTag(tag.name, param, continuationMarker,
3212
+ continuationMaker(h, parts, pos, state, param));
3213
+ }
3214
+ }
3215
+ return tag.next;
3216
+ }
3217
+
3218
+ function parseStartTag(parts, pos, h, param, continuationMarker, state) {
3219
+ var tag = parseTagAndAttrs(parts, pos);
3220
+ // drop unclosed tags
3221
+ if (!tag) { return parts.length; }
3222
+ if (tag.eflags !== void 0) {
3223
+ if (h.startTag) {
3224
+ h.startTag(tag.name, tag.attrs, param, continuationMarker,
3225
+ continuationMaker(h, parts, tag.next, state, param));
3226
+ }
3227
+ // tags like <script> and <textarea> have special parsing
3228
+ if (tag.eflags & EFLAGS_TEXT) {
3229
+ return parseText(parts, tag, h, param, continuationMarker, state);
3230
+ }
3231
+ }
3232
+ return tag.next;
3233
+ }
3234
+
3235
+ var endTagRe = {};
3236
+
3237
+ // Tags like <script> and <textarea> are flagged as CDATA or RCDATA,
3238
+ // which means everything is text until we see the correct closing tag.
3239
+ function parseText(parts, tag, h, param, continuationMarker, state) {
3240
+ var end = parts.length;
3241
+ if (!endTagRe.hasOwnProperty(tag.name)) {
3242
+ endTagRe[tag.name] = new RegExp('^' + tag.name + '(?:[\\s\\/]|$)', 'i');
3243
+ }
3244
+ var re = endTagRe[tag.name];
3245
+ var first = tag.next;
3246
+ var p = tag.next + 1;
3247
+ for (; p < end; p++) {
3248
+ if (parts[p - 1] === '<\/' && re.test(parts[p])) { break; }
3249
+ }
3250
+ if (p < end) { p -= 1; }
3251
+ var buf = parts.slice(first, p).join('');
3252
+ if (tag.eflags & html4.eflags.CDATA) {
3253
+ if (h.cdata) {
3254
+ h.cdata(buf, param, continuationMarker,
3255
+ continuationMaker(h, parts, p, state, param));
3256
+ }
3257
+ } else if (tag.eflags & html4.eflags.RCDATA) {
3258
+ if (h.rcdata) {
3259
+ h.rcdata(normalizeRCData(buf), param, continuationMarker,
3260
+ continuationMaker(h, parts, p, state, param));
3261
+ }
3262
+ } else {
3263
+ throw new Error('bug');
3264
+ }
3265
+ return p;
3266
+ }
3267
+
3268
+ // at this point, parts[pos-1] is either "<" or "<\/".
3269
+ function parseTagAndAttrs(parts, pos) {
3270
+ var m = /^(\w+)/.exec(parts[pos]);
3271
+ var tag = { name: lcase(m[1]) };
3272
+ if (html4.ELEMENTS.hasOwnProperty(tag.name)) {
3273
+ tag.eflags = html4.ELEMENTS[tag.name];
3274
+ } else {
3275
+ tag.eflags = void 0;
3276
+ }
3277
+ var buf = parts[pos].substr(m[0].length);
3278
+ // Find the next '>'. We optimistically assume this '>' is not in a
3279
+ // quoted context, and further down we fix things up if it turns out to
3280
+ // be quoted.
3281
+ var p = pos + 1;
3282
+ var end = parts.length;
3283
+ for (; p < end; p++) {
3284
+ if (parts[p] === '>') { break; }
3285
+ buf += parts[p];
3286
+ }
3287
+ if (end <= p) { return void 0; }
3288
+ var attrs = [];
3289
+ while (buf !== '') {
3290
+ m = ATTR_RE.exec(buf);
3291
+ if (!m) {
3292
+ // No attribute found: skip garbage
3293
+ buf = buf.replace(/^[\s\S][^a-z\s]*/, '');
3294
+
3295
+ } else if ((m[4] && !m[5]) || (m[6] && !m[7])) {
3296
+ // Unterminated quote: slurp to the next unquoted '>'
3297
+ var quote = m[4] || m[6];
3298
+ var sawQuote = false;
3299
+ var abuf = [buf, parts[p++]];
3300
+ for (; p < end; p++) {
3301
+ if (sawQuote) {
3302
+ if (parts[p] === '>') { break; }
3303
+ } else if (0 <= parts[p].indexOf(quote)) {
3304
+ sawQuote = true;
3305
+ }
3306
+ abuf.push(parts[p]);
3307
+ }
3308
+ // Slurp failed: lose the garbage
3309
+ if (end <= p) { break; }
3310
+ // Otherwise retry attribute parsing
3311
+ buf = abuf.join('');
3312
+ continue;
3313
+
3314
+ } else {
3315
+ // We have an attribute
3316
+ var aName = lcase(m[1]);
3317
+ var aValue = m[2] ? decodeValue(m[3]) : aName;
3318
+ attrs.push(aName, aValue);
3319
+ buf = buf.substr(m[0].length);
3320
+ }
3321
+ }
3322
+ tag.attrs = attrs;
3323
+ tag.next = p + 1;
3324
+ return tag;
3325
+ }
3326
+
3327
+ function decodeValue(v) {
3328
+ var q = v.charCodeAt(0);
3329
+ if (q === 0x22 || q === 0x27) { // " or '
3330
+ v = v.substr(1, v.length - 2);
3331
+ }
3332
+ return unescapeEntities(stripNULs(v));
3333
+ }
3334
+
3335
+ /**
3336
+ * Returns a function that strips unsafe tags and attributes from html.
3337
+ * @param {function(string, Array.<string>): ?Array.<string>} tagPolicy
3338
+ * A function that takes (tagName, attribs[]), where tagName is a key in
3339
+ * html4.ELEMENTS and attribs is an array of alternating attribute names
3340
+ * and values. It should return a sanitized attribute array, or null to
3341
+ * delete the tag. It's okay for tagPolicy to modify the attribs array,
3342
+ * but the same array is reused, so it should not be held between calls.
3343
+ * @return {function(string, Array)} A function that sanitizes a string of
3344
+ * HTML and appends result strings to the second argument, an array.
3345
+ */
3346
+ function makeHtmlSanitizer(tagPolicy) {
3347
+ var stack;
3348
+ var ignoring;
3349
+ var emit = function (text, out) {
3350
+ if (!ignoring) { out.push(text); }
3351
+ };
3352
+ return makeSaxParser({
3353
+ startDoc: function(_) {
3354
+ stack = [];
3355
+ ignoring = false;
3356
+ },
3357
+ startTag: function(tagName, attribs, out) {
3358
+ if (ignoring) { return; }
3359
+ if (!html4.ELEMENTS.hasOwnProperty(tagName)) { return; }
3360
+ var eflags = html4.ELEMENTS[tagName];
3361
+ if (eflags & html4.eflags.FOLDABLE) {
3362
+ return;
3363
+ }
3364
+ attribs = tagPolicy(tagName, attribs);
3365
+ if (!attribs) {
3366
+ ignoring = !(eflags & html4.eflags.EMPTY);
3367
+ return;
3368
+ }
3369
+ // TODO(mikesamuel): relying on tagPolicy not to insert unsafe
3370
+ // attribute names.
3371
+ if (!(eflags & html4.eflags.EMPTY)) {
3372
+ stack.push(tagName);
3373
+ }
3374
+
3375
+ out.push('<', tagName);
3376
+ for (var i = 0, n = attribs.length; i < n; i += 2) {
3377
+ var attribName = attribs[i],
3378
+ value = attribs[i + 1];
3379
+ if (value !== null && value !== void 0) {
3380
+ out.push(' ', attribName, '="', escapeAttrib(value), '"');
3381
+ }
3382
+ }
3383
+ out.push('>');
3384
+ },
3385
+ endTag: function(tagName, out) {
3386
+ if (ignoring) {
3387
+ ignoring = false;
3388
+ return;
3389
+ }
3390
+ if (!html4.ELEMENTS.hasOwnProperty(tagName)) { return; }
3391
+ var eflags = html4.ELEMENTS[tagName];
3392
+ if (!(eflags & (html4.eflags.EMPTY | html4.eflags.FOLDABLE))) {
3393
+ var index;
3394
+ if (eflags & html4.eflags.OPTIONAL_ENDTAG) {
3395
+ for (index = stack.length; --index >= 0;) {
3396
+ var stackEl = stack[index];
3397
+ if (stackEl === tagName) { break; }
3398
+ if (!(html4.ELEMENTS[stackEl] &
3399
+ html4.eflags.OPTIONAL_ENDTAG)) {
3400
+ // Don't pop non optional end tags looking for a match.
3401
+ return;
3402
+ }
3403
+ }
3404
+ } else {
3405
+ for (index = stack.length; --index >= 0;) {
3406
+ if (stack[index] === tagName) { break; }
3407
+ }
3408
+ }
3409
+ if (index < 0) { return; } // Not opened.
3410
+ for (var i = stack.length; --i > index;) {
3411
+ var stackEl = stack[i];
3412
+ if (!(html4.ELEMENTS[stackEl] &
3413
+ html4.eflags.OPTIONAL_ENDTAG)) {
3414
+ out.push('<\/', stackEl, '>');
3415
+ }
3416
+ }
3417
+ stack.length = index;
3418
+ out.push('<\/', tagName, '>');
3419
+ }
3420
+ },
3421
+ pcdata: emit,
3422
+ rcdata: emit,
3423
+ cdata: emit,
3424
+ endDoc: function(out) {
3425
+ for (; stack.length; stack.length--) {
3426
+ out.push('<\/', stack[stack.length - 1], '>');
3427
+ }
3428
+ }
3429
+ });
3430
+ }
3431
+
3432
+ // From RFC3986
3433
+ var URI_SCHEME_RE = new RegExp(
3434
+ '^' +
3435
+ '(?:' +
3436
+ '([^:\/?# ]+)' + // scheme
3437
+ ':)?'
3438
+ );
3439
+
3440
+ var ALLOWED_URI_SCHEMES = /^(?:https?|mailto)$/i;
3441
+
3442
+ function safeUri(uri, naiveUriRewriter) {
3443
+ if (!naiveUriRewriter) { return null; }
3444
+ var parsed = ('' + uri).match(URI_SCHEME_RE);
3445
+ if (parsed && (!parsed[1] || ALLOWED_URI_SCHEMES.test(parsed[1]))) {
3446
+ return naiveUriRewriter(uri);
3447
+ } else {
3448
+ return null;
3449
+ }
3450
+ }
3451
+
3452
+ /**
3453
+ * Sanitizes attributes on an HTML tag.
3454
+ * @param {string} tagName An HTML tag name in lowercase.
3455
+ * @param {Array.<?string>} attribs An array of alternating names and values.
3456
+ * @param {?function(?string): ?string} opt_naiveUriRewriter A transform to
3457
+ * apply to URI attributes; it can return a new string value, or null to
3458
+ * delete the attribute. If unspecified, URI attributes are deleted.
3459
+ * @param {function(?string): ?string} opt_nmTokenPolicy A transform to apply
3460
+ * to attributes containing HTML names, element IDs, and space-separated
3461
+ * lists of classes; it can return a new string value, or null to delete
3462
+ * the attribute. If unspecified, these attributes are kept unchanged.
3463
+ * @return {Array.<?string>} The sanitized attributes as a list of alternating
3464
+ * names and values, where a null value means to omit the attribute.
3465
+ */
3466
+ function sanitizeAttribs(
3467
+ tagName, attribs, opt_naiveUriRewriter, opt_nmTokenPolicy) {
3468
+ for (var i = 0; i < attribs.length; i += 2) {
3469
+ var attribName = attribs[i];
3470
+ var value = attribs[i + 1];
3471
+ var atype = null, attribKey;
3472
+ if ((attribKey = tagName + '::' + attribName,
3473
+ html4.ATTRIBS.hasOwnProperty(attribKey)) ||
3474
+ (attribKey = '*::' + attribName,
3475
+ html4.ATTRIBS.hasOwnProperty(attribKey))) {
3476
+ atype = html4.ATTRIBS[attribKey];
3477
+ }
3478
+ if (atype !== null) {
3479
+ switch (atype) {
3480
+ case html4.atype.NONE: break;
3481
+ case html4.atype.SCRIPT:
3482
+ value = null;
3483
+ break;
3484
+ case html4.atype.STYLE:
3485
+ if ('undefined' === typeof parseCssDeclarations) {
3486
+ value = null;
3487
+ break;
3488
+ }
3489
+ var sanitizedDeclarations = [];
3490
+ parseCssDeclarations(
3491
+ value,
3492
+ {
3493
+ declaration: function (property, tokens) {
3494
+ var normProp = property.toLowerCase();
3495
+ var schema = cssSchema[normProp];
3496
+ if (!schema) {
3497
+ return;
3498
+ }
3499
+ sanitizeCssProperty(
3500
+ normProp, schema, tokens,
3501
+ opt_naiveUriRewriter);
3502
+ sanitizedDeclarations.push(property + ': ' + tokens.join(' '));
3503
+ }
3504
+ });
3505
+ value = sanitizedDeclarations.length > 0 ? sanitizedDeclarations.join(' ; ') : null;
3506
+ break;
3507
+ case html4.atype.ID:
3508
+ case html4.atype.IDREF:
3509
+ case html4.atype.IDREFS:
3510
+ case html4.atype.GLOBAL_NAME:
3511
+ case html4.atype.LOCAL_NAME:
3512
+ case html4.atype.CLASSES:
3513
+ value = opt_nmTokenPolicy ? opt_nmTokenPolicy(value) : value;
3514
+ break;
3515
+ case html4.atype.URI:
3516
+ value = safeUri(value, opt_naiveUriRewriter);
3517
+ break;
3518
+ case html4.atype.URI_FRAGMENT:
3519
+ if (value && '#' === value.charAt(0)) {
3520
+ value = value.substring(1); // remove the leading '#'
3521
+ value = opt_nmTokenPolicy ? opt_nmTokenPolicy(value) : value;
3522
+ if (value !== null && value !== void 0) {
3523
+ value = '#' + value; // restore the leading '#'
3524
+ }
3525
+ } else {
3526
+ value = null;
3527
+ }
3528
+ break;
3529
+ default:
3530
+ value = null;
3531
+ break;
3532
+ }
3533
+ } else {
3534
+ value = null;
3535
+ }
3536
+ attribs[i + 1] = value;
3537
+ }
3538
+ return attribs;
3539
+ }
3540
+
3541
+ /**
3542
+ * Creates a tag policy that omits all tags marked UNSAFE in html4-defs.js
3543
+ * and applies the default attribute sanitizer with the supplied policy for
3544
+ * URI attributes and NMTOKEN attributes.
3545
+ * @param {?function(?string): ?string} opt_naiveUriRewriter A transform to
3546
+ * apply to URI attributes. If not given, URI attributes are deleted.
3547
+ * @param {function(?string): ?string} opt_nmTokenPolicy A transform to apply
3548
+ * to attributes containing HTML names, element IDs, and space-separated
3549
+ * lists of classes. If not given, such attributes are left unchanged.
3550
+ * @return {function(string, Array.<?string>)} A tagPolicy suitable for
3551
+ * passing to html.sanitize.
3552
+ */
3553
+ function makeTagPolicy(opt_naiveUriRewriter, opt_nmTokenPolicy) {
3554
+ return function(tagName, attribs) {
3555
+ if (!(html4.ELEMENTS[tagName] & html4.eflags.UNSAFE)) {
3556
+ return sanitizeAttribs(
3557
+ tagName, attribs, opt_naiveUriRewriter, opt_nmTokenPolicy);
3558
+ }
3559
+ };
3560
+ }
3561
+
3562
+ /**
3563
+ * Sanitizes HTML tags and attributes according to a given policy.
3564
+ * @param {string} inputHtml The HTML to sanitize.
3565
+ * @param {function(string, Array.<?string>)} tagPolicy A function that
3566
+ * decides which tags to accept and sanitizes their attributes (see
3567
+ * makeHtmlSanitizer above for details).
3568
+ * @return {string} The sanitized HTML.
3569
+ */
3570
+ function sanitizeWithPolicy(inputHtml, tagPolicy) {
3571
+ var outputArray = [];
3572
+ makeHtmlSanitizer(tagPolicy)(inputHtml, outputArray);
3573
+ return outputArray.join('');
3574
+ }
3575
+
3576
+ /**
3577
+ * Strips unsafe tags and attributes from HTML.
3578
+ * @param {string} inputHtml The HTML to sanitize.
3579
+ * @param {?function(?string): ?string} opt_naiveUriRewriter A transform to
3580
+ * apply to URI attributes. If not given, URI attributes are deleted.
3581
+ * @param {function(?string): ?string} opt_nmTokenPolicy A transform to apply
3582
+ * to attributes containing HTML names, element IDs, and space-separated
3583
+ * lists of classes. If not given, such attributes are left unchanged.
3584
+ */
3585
+ function sanitize(inputHtml, opt_naiveUriRewriter, opt_nmTokenPolicy) {
3586
+ var tagPolicy = makeTagPolicy(opt_naiveUriRewriter, opt_nmTokenPolicy);
3587
+ return sanitizeWithPolicy(inputHtml, tagPolicy);
3588
+ }
3589
+
3590
+ return {
3591
+ escapeAttrib: escapeAttrib,
3592
+ makeHtmlSanitizer: makeHtmlSanitizer,
3593
+ makeSaxParser: makeSaxParser,
3594
+ makeTagPolicy: makeTagPolicy,
3595
+ normalizeRCData: normalizeRCData,
3596
+ sanitize: sanitize,
3597
+ sanitizeAttribs: sanitizeAttribs,
3598
+ sanitizeWithPolicy: sanitizeWithPolicy,
3599
+ unescapeEntities: unescapeEntities
3600
+ };
3601
+ })(html4);
3602
+
3603
+ var html_sanitize = html.sanitize;
3604
+
3605
+ // Exports for closure compiler. Note this file is also cajoled
3606
+ // for domado and run in an environment without 'window'
3607
+ if (typeof window !== 'undefined') {
3608
+ window['html'] = html;
3609
+ window['html_sanitize'] = html_sanitize;
3610
+ }
3611
+
3612
+ }());