@schukai/monster 3.51.5 → 3.52.0

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 (360) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +15 -12
  3. package/example/components/form/button.mjs +10 -0
  4. package/example/components/form/select.mjs +25 -0
  5. package/example/components/form/tree-select.mjs +27 -0
  6. package/example/components/host/host.mjs +0 -0
  7. package/example/components/notify/message.mjs +4 -0
  8. package/example/components/notify/notify.mjs +4 -0
  9. package/example/components/state/log.mjs +0 -0
  10. package/example/components/state/state.mjs +0 -0
  11. package/package.json +6 -2
  12. package/source/components/constants.mjs +132 -0
  13. package/source/components/datatable/columnbar.mjs +310 -0
  14. package/source/components/datatable/constants.mjs +121 -0
  15. package/source/components/datatable/dataset.mjs +219 -0
  16. package/source/components/datatable/datasource/dom.mjs +186 -0
  17. package/source/components/datatable/datasource/namespace.mjs +13 -0
  18. package/source/components/datatable/datasource/rest.mjs +400 -0
  19. package/source/components/datatable/datasource.mjs +102 -0
  20. package/source/components/datatable/datatable/header.mjs +268 -0
  21. package/source/components/datatable/datatable/namespace.mjs +13 -0
  22. package/source/components/datatable/datatable.mjs +789 -0
  23. package/source/components/datatable/embedded-pagination.mjs +113 -0
  24. package/source/components/datatable/filter/abstract-base.mjs +31 -0
  25. package/source/components/datatable/filter/date-range.mjs +1041 -0
  26. package/source/components/datatable/filter/input.mjs +175 -0
  27. package/source/components/datatable/filter/namespace.mjs +13 -0
  28. package/source/components/datatable/filter/range.mjs +671 -0
  29. package/source/components/datatable/filter/select.mjs +65 -0
  30. package/source/components/datatable/filter/settings.mjs +116 -0
  31. package/source/components/datatable/filter-button.mjs +98 -0
  32. package/source/components/datatable/filter.mjs +929 -0
  33. package/source/components/datatable/namespace.mjs +11 -0
  34. package/source/components/datatable/pagination.mjs +456 -0
  35. package/source/components/datatable/style/column-bar.pcss +123 -0
  36. package/source/components/datatable/style/dataset.pcss +13 -0
  37. package/source/components/datatable/style/datasource.pcss +16 -0
  38. package/source/components/datatable/style/datatable.pcss +239 -0
  39. package/source/components/datatable/style/embedded-pagination.pcss +101 -0
  40. package/source/components/datatable/style/filter-button.pcss +22 -0
  41. package/source/components/datatable/style/filter-controls-defaults.pcss +46 -0
  42. package/source/components/datatable/style/filter-date-range.pcss +9 -0
  43. package/source/components/datatable/style/filter-range.pcss +5 -0
  44. package/source/components/datatable/style/filter.pcss +156 -0
  45. package/source/components/datatable/style/pagination.pcss +59 -0
  46. package/source/components/datatable/style/select-filter.pcss +27 -0
  47. package/source/components/datatable/stylesheet/column-bar.mjs +33 -0
  48. package/source/components/datatable/stylesheet/dataset.mjs +33 -0
  49. package/source/components/datatable/stylesheet/datasource.mjs +33 -0
  50. package/source/components/datatable/stylesheet/datatable.mjs +33 -0
  51. package/source/components/datatable/stylesheet/embedded-pagination.mjs +33 -0
  52. package/source/components/datatable/stylesheet/filter-button.mjs +33 -0
  53. package/source/components/datatable/stylesheet/filter-controls-defaults.mjs +33 -0
  54. package/source/components/datatable/stylesheet/filter-date-range.mjs +33 -0
  55. package/source/components/datatable/stylesheet/filter-range.mjs +33 -0
  56. package/source/components/datatable/stylesheet/filter.mjs +33 -0
  57. package/source/components/datatable/stylesheet/namespace.mjs +13 -0
  58. package/source/components/datatable/stylesheet/pagination.mjs +33 -0
  59. package/source/components/datatable/stylesheet/select-filter.mjs +33 -0
  60. package/source/components/datatable/util.mjs +60 -0
  61. package/source/components/form/action-button.mjs +262 -0
  62. package/source/components/form/api-button.mjs +515 -0
  63. package/source/components/form/button-bar.mjs +739 -0
  64. package/source/components/form/button.mjs +350 -0
  65. package/source/components/form/confirm-button.mjs +330 -0
  66. package/source/components/form/constants.mjs +111 -0
  67. package/source/components/form/context-help.mjs +123 -0
  68. package/source/components/form/events.mjs +84 -0
  69. package/source/components/form/form.mjs +601 -0
  70. package/source/components/form/message-state-button.mjs +396 -0
  71. package/source/components/form/namespace.mjs +13 -0
  72. package/source/components/form/popper-button.mjs +435 -0
  73. package/source/components/form/popper.mjs +487 -0
  74. package/source/components/form/reload.mjs +360 -0
  75. package/source/components/form/select.mjs +2314 -0
  76. package/source/components/form/shadow-reload.mjs +137 -0
  77. package/source/components/form/state-button.mjs +182 -0
  78. package/source/components/form/style/action-button.pcss +41 -0
  79. package/source/components/form/style/api-button.pcss +0 -0
  80. package/source/components/form/style/button-bar.pcss +51 -0
  81. package/source/components/form/style/button.pcss +8 -0
  82. package/source/components/form/style/confirm-button.pcss +17 -0
  83. package/source/components/form/style/context-help.pcss +16 -0
  84. package/source/components/form/style/form.pcss +10 -0
  85. package/source/components/form/style/message-state-button.pcss +10 -0
  86. package/source/components/form/style/popper-button.pcss +16 -0
  87. package/source/components/form/style/popper.pcss +8 -0
  88. package/source/components/form/style/select.pcss +265 -0
  89. package/source/components/form/style/state-button.pcss +116 -0
  90. package/source/components/form/style/tabs.pcss +170 -0
  91. package/source/components/form/style/tree-select.pcss +81 -0
  92. package/source/components/form/stylesheet/action-button.mjs +33 -0
  93. package/source/components/form/stylesheet/api-button.mjs +33 -0
  94. package/source/components/form/stylesheet/button-bar.mjs +33 -0
  95. package/source/components/form/stylesheet/button.mjs +33 -0
  96. package/source/components/form/stylesheet/confirm-button.mjs +33 -0
  97. package/source/components/form/stylesheet/context-help.mjs +33 -0
  98. package/source/components/form/stylesheet/form.mjs +33 -0
  99. package/source/components/form/stylesheet/message-state-button.mjs +33 -0
  100. package/source/components/form/stylesheet/namespace.mjs +13 -0
  101. package/source/components/form/stylesheet/popper-button.mjs +33 -0
  102. package/source/components/form/stylesheet/popper.mjs +33 -0
  103. package/source/components/form/stylesheet/select.mjs +33 -0
  104. package/source/components/form/stylesheet/state-button.mjs +33 -0
  105. package/source/components/form/stylesheet/tabs.mjs +33 -0
  106. package/source/components/form/stylesheet/tree-select.mjs +33 -0
  107. package/source/components/form/tabs.mjs +1011 -0
  108. package/source/components/form/template.mjs +373 -0
  109. package/source/components/form/tree-select.mjs +527 -0
  110. package/source/components/form/types/namespace.mjs +13 -0
  111. package/source/components/form/types/state.mjs +93 -0
  112. package/source/components/form/util/fetch.mjs +133 -0
  113. package/source/components/form/util/floating-ui.mjs +245 -0
  114. package/source/components/form/util/namespace.mjs +13 -0
  115. package/source/components/form/util/popper.mjs +49 -0
  116. package/source/components/host/call-button.mjs +236 -0
  117. package/source/components/host/collapse.mjs +526 -0
  118. package/source/components/host/config-manager.mjs +304 -0
  119. package/source/components/host/constants.mjs +18 -0
  120. package/source/components/host/details.mjs +268 -0
  121. package/source/components/host/events.mjs +131 -0
  122. package/source/components/host/host.mjs +420 -0
  123. package/source/components/host/namespace.mjs +13 -0
  124. package/source/components/host/overlay.mjs +339 -0
  125. package/source/components/host/style/call-button.pcss +36 -0
  126. package/source/components/host/style/collapse.pcss +67 -0
  127. package/source/components/host/style/config-manager.pcss +5 -0
  128. package/source/components/host/style/details.pcss +68 -0
  129. package/source/components/host/style/host.pcss +43 -0
  130. package/source/components/host/style/overlay.pcss +73 -0
  131. package/source/components/host/style/toggle-button.pcss +36 -0
  132. package/source/components/host/style/viewer.pcss +13 -0
  133. package/source/components/host/stylesheet/call-button.mjs +33 -0
  134. package/source/components/host/stylesheet/collapse.mjs +33 -0
  135. package/source/components/host/stylesheet/config-manager.mjs +33 -0
  136. package/source/components/host/stylesheet/details.mjs +33 -0
  137. package/source/components/host/stylesheet/host.mjs +33 -0
  138. package/source/components/host/stylesheet/namespace.mjs +13 -0
  139. package/source/components/host/stylesheet/overlay.mjs +33 -0
  140. package/source/components/host/stylesheet/toggle-button.mjs +33 -0
  141. package/source/components/host/stylesheet/viewer.mjs +33 -0
  142. package/source/components/host/toggle-button.mjs +88 -0
  143. package/source/components/host/util.mjs +23 -0
  144. package/source/components/host/viewer.mjs +309 -0
  145. package/source/components/namespace.mjs +14 -0
  146. package/source/components/notify/constants.mjs +15 -0
  147. package/source/components/notify/events.mjs +15 -0
  148. package/source/components/notify/message.mjs +374 -0
  149. package/source/components/notify/namespace.mjs +15 -0
  150. package/source/components/notify/notify.mjs +236 -0
  151. package/source/components/notify/style/message.pcss +57 -0
  152. package/source/components/notify/style/notify.pcss +118 -0
  153. package/source/components/notify/stylesheet/message.mjs +33 -0
  154. package/source/components/notify/stylesheet/namespace.mjs +15 -0
  155. package/source/components/notify/stylesheet/notify.mjs +33 -0
  156. package/source/components/state/log/entry.mjs +126 -0
  157. package/source/components/state/log/namespace.mjs +13 -0
  158. package/source/components/state/log.mjs +275 -0
  159. package/source/components/state/namespace.mjs +13 -0
  160. package/source/components/state/state.mjs +131 -0
  161. package/source/components/state/style/log.pcss +111 -0
  162. package/source/components/state/style/state.pcss +113 -0
  163. package/source/components/state/stylesheet/log.mjs +33 -0
  164. package/source/components/state/stylesheet/state.mjs +33 -0
  165. package/source/components/style/badge.pcss +92 -0
  166. package/source/components/style/border.pcss +77 -0
  167. package/source/components/style/button.pcss +105 -0
  168. package/source/components/style/card.pcss +108 -0
  169. package/source/components/style/color.pcss +257 -0
  170. package/source/components/style/common.pcss +103 -0
  171. package/source/components/style/control.pcss +11 -0
  172. package/source/components/style/data-grid.pcss +43 -0
  173. package/source/components/style/display.pcss +42 -0
  174. package/source/components/style/floating-ui.pcss +33 -0
  175. package/source/components/style/form.pcss +5 -0
  176. package/source/components/style/host.pcss +15 -0
  177. package/source/components/style/link.pcss +63 -0
  178. package/source/components/style/mixin/badge.pcss +18 -0
  179. package/source/components/style/mixin/button.pcss +54 -0
  180. package/source/components/style/mixin/form.pcss +247 -0
  181. package/source/components/style/mixin/hover.pcss +8 -0
  182. package/source/components/style/mixin/media.pcss +107 -0
  183. package/source/components/style/mixin/property.pcss +288 -0
  184. package/source/components/style/mixin/skeleton.pcss +26 -0
  185. package/source/components/style/mixin/spinner.pcss +24 -0
  186. package/source/components/style/mixin/typography.pcss +52 -0
  187. package/source/components/style/normalize.pcss +14 -0
  188. package/source/components/style/popper.pcss +78 -0
  189. package/source/components/style/property.pcss +17 -0
  190. package/source/components/style/ripple.pcss +14 -0
  191. package/source/components/style/skeleton.pcss +28 -0
  192. package/source/components/style/space.pcss +47 -0
  193. package/source/components/style/spinner.pcss +6 -0
  194. package/source/components/style/table.pcss +46 -0
  195. package/source/components/style/theme.pcss +119 -0
  196. package/source/components/style/typography.pcss +131 -0
  197. package/source/components/stylesheet/badge.mjs +33 -0
  198. package/source/components/stylesheet/border.mjs +33 -0
  199. package/source/components/stylesheet/button.mjs +33 -0
  200. package/source/components/stylesheet/card.mjs +33 -0
  201. package/source/components/stylesheet/color.mjs +33 -0
  202. package/source/components/stylesheet/common.mjs +33 -0
  203. package/source/components/stylesheet/control.mjs +33 -0
  204. package/source/components/stylesheet/data-grid.mjs +33 -0
  205. package/source/components/stylesheet/display.mjs +33 -0
  206. package/source/components/stylesheet/floating-ui.mjs +33 -0
  207. package/source/components/stylesheet/form.mjs +33 -0
  208. package/source/components/stylesheet/host.mjs +33 -0
  209. package/source/components/stylesheet/link.mjs +33 -0
  210. package/source/components/stylesheet/namespace.mjs +13 -0
  211. package/source/components/stylesheet/normalize.mjs +33 -0
  212. package/source/components/stylesheet/popper.mjs +33 -0
  213. package/source/components/stylesheet/property.mjs +33 -0
  214. package/source/components/stylesheet/ripple.mjs +33 -0
  215. package/source/components/stylesheet/skeleton.mjs +33 -0
  216. package/source/components/stylesheet/space.mjs +33 -0
  217. package/source/components/stylesheet/spinner.mjs +33 -0
  218. package/source/components/stylesheet/table.mjs +33 -0
  219. package/source/components/stylesheet/theme.mjs +33 -0
  220. package/source/components/stylesheet/tree-menu.mjs +33 -0
  221. package/source/components/stylesheet/typography.mjs +33 -0
  222. package/source/components/tree-menu/namespace.mjs +13 -0
  223. package/source/components/tree-menu/style/tree-menu.pcss +107 -0
  224. package/source/components/tree-menu/stylesheet/namespace.mjs +13 -0
  225. package/source/components/tree-menu/stylesheet/tree-menu.mjs +33 -0
  226. package/source/components/tree-menu/tree-menu.mjs +660 -0
  227. package/source/constraints/abstract.mjs +17 -24
  228. package/source/constraints/abstractoperator.mjs +27 -22
  229. package/source/constraints/andoperator.mjs +20 -17
  230. package/source/constraints/invalid.mjs +17 -17
  231. package/source/constraints/isarray.mjs +20 -20
  232. package/source/constraints/isobject.mjs +20 -20
  233. package/source/constraints/oroperator.mjs +45 -45
  234. package/source/constraints/valid.mjs +17 -17
  235. package/source/data/buildmap.mjs +108 -103
  236. package/source/data/buildtree.mjs +59 -57
  237. package/source/data/datasource/dom.mjs +80 -84
  238. package/source/data/datasource/namespace.mjs +1 -1
  239. package/source/data/datasource/server/restapi/data-fetch-error.mjs +27 -25
  240. package/source/data/datasource/server/restapi/writeerror.mjs +34 -32
  241. package/source/data/datasource/server/restapi.mjs +176 -177
  242. package/source/data/datasource/server/webconnect.mjs +150 -156
  243. package/source/data/datasource/server.mjs +58 -59
  244. package/source/data/datasource/storage/localstorage.mjs +25 -24
  245. package/source/data/datasource/storage/sessionstorage.mjs +28 -25
  246. package/source/data/datasource/storage.mjs +74 -73
  247. package/source/data/datasource.mjs +176 -167
  248. package/source/data/diff.mjs +98 -97
  249. package/source/data/extend.mjs +42 -42
  250. package/source/data/pathfinder.mjs +301 -288
  251. package/source/data/pipe.mjs +36 -36
  252. package/source/data/transformer.mjs +742 -726
  253. package/source/dom/assembler.mjs +44 -44
  254. package/source/dom/attributes.mjs +142 -122
  255. package/source/dom/constants.mjs +62 -58
  256. package/source/dom/customcontrol.mjs +299 -299
  257. package/source/dom/customelement.mjs +843 -806
  258. package/source/dom/dimension.mjs +56 -46
  259. package/source/dom/events.mjs +74 -69
  260. package/source/dom/focusmanager.mjs +175 -175
  261. package/source/dom/locale.mjs +28 -28
  262. package/source/dom/ready.mjs +13 -13
  263. package/source/dom/resource/data.mjs +117 -111
  264. package/source/dom/resource/link/stylesheet.mjs +16 -16
  265. package/source/dom/resource/link.mjs +94 -96
  266. package/source/dom/resource/script.mjs +72 -74
  267. package/source/dom/resource.mjs +174 -172
  268. package/source/dom/resourcemanager.mjs +152 -156
  269. package/source/dom/slotted.mjs +78 -80
  270. package/source/dom/template.mjs +126 -112
  271. package/source/dom/theme.mjs +35 -35
  272. package/source/dom/updater.mjs +673 -651
  273. package/source/dom/util/extract-keys.mjs +34 -22
  274. package/source/dom/util/init-options-from-attributes.mjs +46 -38
  275. package/source/dom/util/namespace.mjs +13 -0
  276. package/source/dom/util/set-option-from-attribute.mjs +35 -29
  277. package/source/dom/util.mjs +112 -81
  278. package/source/dom/worker/factory.mjs +83 -83
  279. package/source/i18n/formatter.mjs +75 -73
  280. package/source/i18n/locale.mjs +146 -144
  281. package/source/i18n/provider.mjs +70 -64
  282. package/source/i18n/providers/embed.mjs +136 -127
  283. package/source/i18n/providers/fetch.mjs +84 -76
  284. package/source/i18n/translations.mjs +205 -195
  285. package/source/logging/handler/console.mjs +36 -36
  286. package/source/logging/handler.mjs +140 -140
  287. package/source/logging/logentry.mjs +25 -25
  288. package/source/logging/logger.mjs +177 -175
  289. package/source/math/random.mjs +63 -59
  290. package/source/monster.mjs +223 -103
  291. package/source/net/webconnect/message.mjs +31 -31
  292. package/source/net/webconnect.mjs +278 -271
  293. package/source/text/bracketed-key-value-hash.mjs +182 -179
  294. package/source/text/formatter.mjs +235 -210
  295. package/source/text/generate-range-comparison-expression.mjs +56 -34
  296. package/source/text/namespace.mjs +1 -1
  297. package/source/types/base.mjs +69 -61
  298. package/source/types/basewithoptions.mjs +46 -46
  299. package/source/types/binary.mjs +20 -20
  300. package/source/types/dataurl.mjs +96 -90
  301. package/source/types/global.mjs +45 -39
  302. package/source/types/id.mjs +25 -25
  303. package/source/types/internal.mjs +115 -114
  304. package/source/types/is.mjs +56 -40
  305. package/source/types/mediatype.mjs +119 -119
  306. package/source/types/namespace.mjs +1 -1
  307. package/source/types/node.mjs +160 -150
  308. package/source/types/nodelist.mjs +94 -96
  309. package/source/types/noderecursiveiterator.mjs +50 -50
  310. package/source/types/observablequeue.mjs +73 -73
  311. package/source/types/observer.mjs +104 -104
  312. package/source/types/observerlist.mjs +66 -66
  313. package/source/types/proxyobserver.mjs +210 -210
  314. package/source/types/queue.mjs +63 -63
  315. package/source/types/randomid.mjs +13 -13
  316. package/source/types/regex.mjs +3 -1
  317. package/source/types/stack.mjs +64 -64
  318. package/source/types/tokenlist.mjs +206 -205
  319. package/source/types/typeof.mjs +12 -10
  320. package/source/types/uniquequeue.mjs +48 -48
  321. package/source/types/uuid.mjs +32 -32
  322. package/source/types/validate.mjs +67 -67
  323. package/source/types/version.mjs +115 -105
  324. package/source/util/clone.mjs +103 -91
  325. package/source/util/comparator.mjs +97 -97
  326. package/source/util/deadmansswitch.mjs +40 -44
  327. package/source/util/freeze.mjs +10 -9
  328. package/source/util/namespace.mjs +1 -1
  329. package/source/util/processing.mjs +104 -105
  330. package/source/util/runtime.mjs +56 -44
  331. package/source/util/trimspaces.mjs +24 -24
  332. package/test/cases/components/form/button.mjs +122 -0
  333. package/test/cases/components/form/confirm-button.mjs +127 -0
  334. package/test/cases/components/form/form.mjs +317 -0
  335. package/test/cases/components/form/reload.mjs +188 -0
  336. package/test/cases/components/form/select.mjs +229 -0
  337. package/test/cases/components/form/state-button.mjs +130 -0
  338. package/test/cases/components/form/tabs.mjs +98 -0
  339. package/test/cases/components/form/template.mjs +189 -0
  340. package/test/cases/components/form/tree-select.mjs +216 -0
  341. package/test/cases/components/host/details.mjs +68 -0
  342. package/test/cases/components/host/host.mjs +70 -0
  343. package/test/cases/components/host/overlay.mjs +60 -0
  344. package/test/cases/components/host/util.mjs +79 -0
  345. package/test/cases/components/notify/message.mjs +39 -0
  346. package/test/cases/components/notify/notify.mjs +89 -0
  347. package/test/cases/dom/customcontrol.mjs +5 -4
  348. package/test/cases/math/random.mjs +0 -1
  349. package/test/cases/monster.mjs +1 -1
  350. package/test/cases/net/webconnect/message.mjs +0 -1
  351. package/test/cases/types/node.mjs +1 -1
  352. package/test/util/chai-dom.mjs +2 -2
  353. package/test/util/intersection-mock.mjs +69 -0
  354. package/test/util/jsdom.mjs +41 -25
  355. package/test/util/localstorage.mjs +1 -0
  356. package/test/util/resize-observer.mjs +29 -0
  357. package/test/util/websocket.mjs +4 -1
  358. package/test/web/import.js +16 -1
  359. package/test/web/test.html +28 -5
  360. package/test/web/tests.js +30398 -17879
@@ -11,7 +11,11 @@ import { ATTRIBUTE_OBJECTLINK } from "../dom/constants.mjs";
11
11
  import { getDocument } from "../dom/util.mjs";
12
12
  import { Base } from "../types/base.mjs";
13
13
  import { isObject, isString } from "../types/is.mjs";
14
- import { validateInteger, validateObject, validateString } from "../types/validate.mjs";
14
+ import {
15
+ validateInteger,
16
+ validateObject,
17
+ validateString,
18
+ } from "../types/validate.mjs";
15
19
  import { Locale, parseLocale } from "./locale.mjs";
16
20
  import { translationsLinkSymbol } from "./provider.mjs";
17
21
 
@@ -28,174 +32,176 @@ export { Translations, getDocumentTranslations };
28
32
  * @see https://datatracker.ietf.org/doc/html/rfc3066
29
33
  */
30
34
  class Translations extends Base {
31
- /**
32
- *
33
- * @param {Locale} locale
34
- */
35
- constructor(locale) {
36
- super();
37
-
38
- if (locale instanceof Locale) {
39
- this.locale = locale;
40
- } else {
41
- this.locale = parseLocale(validateString(locale));
42
- }
43
-
44
- this.storage = new Map();
45
- }
46
-
47
- /**
48
- * This method is called by the `instanceof` operator.
49
- * @returns {symbol}
50
- * @since 3.27.0
51
- */
52
- static get [instanceSymbol]() {
53
- return Symbol.for("@schukai/monster/i18n/translations@@instance");
54
- }
55
-
56
- /**
57
- * Fetches a text using the specified key.
58
- * If no suitable key is found, `defaultText` is taken.
59
- *
60
- * @param {string} key
61
- * @param {string|undefined} defaultText
62
- * @return {string}
63
- * @throws {Error} key not found
64
- */
65
- getText(key, defaultText) {
66
- if (!this.storage.has(key)) {
67
- if (defaultText === undefined) {
68
- throw new Error(`key ${key} not found`);
69
- }
70
-
71
- return validateString(defaultText);
72
- }
73
-
74
- let r = this.storage.get(key);
75
- if (isObject(r)) {
76
- return this.getPluralRuleText(key, "other", defaultText);
77
- }
78
-
79
- return this.storage.get(key);
80
- }
81
-
82
- /**
83
- * A number `count` can be passed to this method. In addition to a number, one of the keywords can also be passed directly.
84
- * "zero", "one", "two", "few", "many" and "other". Remember: not every language has all rules.
85
- *
86
- * The appropriate text for this number is then selected. If no suitable key is found, `defaultText` is taken.
87
- *
88
- * @param {string} key
89
- * @param {integer|count} count
90
- * @param {string|undefined} defaultText
91
- * @return {string}
92
- */
93
- getPluralRuleText(key, count, defaultText) {
94
- if (!this.storage.has(key)) {
95
- return validateString(defaultText);
96
- }
97
-
98
- let r = validateObject(this.storage.get(key));
99
-
100
- let keyword;
101
- if (isString(count)) {
102
- keyword = count.toLocaleString();
103
- } else {
104
- count = validateInteger(count);
105
- if (count === 0) {
106
- // special handling for zero count
107
- if (r.hasOwnProperty("zero")) {
108
- return validateString(r["zero"]);
109
- }
110
- }
111
-
112
- keyword = new Intl.PluralRules(this.locale.toString()).select(validateInteger(count));
113
- }
114
-
115
- if (r.hasOwnProperty(keyword)) {
116
- return validateString(r[keyword]);
117
- }
118
-
119
- // @deprecated since 2023-03-14
120
- // DEFAULT_KEY is undefined
121
- // if (r.hasOwnProperty(DEFAULT_KEY)) {
122
- // return validateString(r[DEFAULT_KEY]);
123
- // }
124
-
125
- return validateString(defaultText);
126
- }
127
-
128
- /**
129
- * Set a text for a key
130
- *
131
- * ```
132
- * translations.setText("text1", "Make my day!");
133
- * // plural rules
134
- * translations.setText("text6", {
135
- * "zero": "There are no files on Disk.",
136
- * "one": "There is one file on Disk.",
137
- * "other": "There are files on Disk."
138
- * "default": "There are files on Disk."
139
- * });
140
- * ```
141
- *
142
- * @param {string} key
143
- * @param {string|object} text
144
- * @return {Translations}
145
- * @throws {TypeError} value is not a string or object
146
- */
147
- setText(key, text) {
148
- if (isString(text) || isObject(text)) {
149
- this.storage.set(validateString(key), text);
150
- return this;
151
- }
152
-
153
- throw new TypeError("value is not a string or object");
154
- }
155
-
156
- /**
157
- * This method can be used to transfer overlays from an object. The keys are transferred, and the values are entered
158
- * as text.
159
- *
160
- * The values can either be character strings or, in the case of texts with plural forms, objects. The plural forms
161
- * must be stored as text via a standard key "zero", "one", "two", "few", "many" and "other".
162
- *
163
- * Additionally, the key default can be specified, which will be used if no other key fits.
164
- *
165
- * In some languages, like for example in German, there is no own more number at the value 0. In these languages,
166
- * the function applies additionally zero.
167
- *
168
- * ```
169
- * translations.assignTranslations({
170
- * "text1": "Make my day!",
171
- * "text2": "I'll be back!",
172
- * "text6": {
173
- * "zero": "There are no files on Disk.",
174
- * "one": "There is one file on Disk.",
175
- * "other": "There are files on Disk."
176
- * "default": "There are files on Disk."
177
- * });
178
- * ```
179
- *
180
- * @param {object} translations
181
- * @return {Translations}
182
- */
183
- assignTranslations(translations) {
184
- validateObject(translations);
185
-
186
- if (translations instanceof Translations) {
187
- translations.storage.forEach((v, k) => {
188
- this.setText(k, v);
189
- });
190
- return this;
191
- }
192
-
193
- for (const [k, v] of Object.entries(translations)) {
194
- this.setText(k, v);
195
- }
196
-
197
- return this;
198
- }
35
+ /**
36
+ *
37
+ * @param {Locale} locale
38
+ */
39
+ constructor(locale) {
40
+ super();
41
+
42
+ if (locale instanceof Locale) {
43
+ this.locale = locale;
44
+ } else {
45
+ this.locale = parseLocale(validateString(locale));
46
+ }
47
+
48
+ this.storage = new Map();
49
+ }
50
+
51
+ /**
52
+ * This method is called by the `instanceof` operator.
53
+ * @returns {symbol}
54
+ * @since 3.27.0
55
+ */
56
+ static get [instanceSymbol]() {
57
+ return Symbol.for("@schukai/monster/i18n/translations@@instance");
58
+ }
59
+
60
+ /**
61
+ * Fetches a text using the specified key.
62
+ * If no suitable key is found, `defaultText` is taken.
63
+ *
64
+ * @param {string} key
65
+ * @param {string|undefined} defaultText
66
+ * @return {string}
67
+ * @throws {Error} key not found
68
+ */
69
+ getText(key, defaultText) {
70
+ if (!this.storage.has(key)) {
71
+ if (defaultText === undefined) {
72
+ throw new Error(`key ${key} not found`);
73
+ }
74
+
75
+ return validateString(defaultText);
76
+ }
77
+
78
+ const r = this.storage.get(key);
79
+ if (isObject(r)) {
80
+ return this.getPluralRuleText(key, "other", defaultText);
81
+ }
82
+
83
+ return this.storage.get(key);
84
+ }
85
+
86
+ /**
87
+ * A number `count` can be passed to this method. In addition to a number, one of the keywords can also be passed directly.
88
+ * "zero", "one", "two", "few", "many" and "other". Remember: not every language has all rules.
89
+ *
90
+ * The appropriate text for this number is then selected. If no suitable key is found, `defaultText` is taken.
91
+ *
92
+ * @param {string} key
93
+ * @param {integer|count} count
94
+ * @param {string|undefined} defaultText
95
+ * @return {string}
96
+ */
97
+ getPluralRuleText(key, count, defaultText) {
98
+ if (!this.storage.has(key)) {
99
+ return validateString(defaultText);
100
+ }
101
+
102
+ const r = validateObject(this.storage.get(key));
103
+
104
+ let keyword;
105
+ if (isString(count)) {
106
+ keyword = count.toLocaleString();
107
+ } else {
108
+ count = validateInteger(count);
109
+ if (count === 0) {
110
+ // special handling for zero count
111
+ if (r.hasOwnProperty("zero")) {
112
+ return validateString(r["zero"]);
113
+ }
114
+ }
115
+
116
+ keyword = new Intl.PluralRules(this.locale.toString()).select(
117
+ validateInteger(count),
118
+ );
119
+ }
120
+
121
+ if (r.hasOwnProperty(keyword)) {
122
+ return validateString(r[keyword]);
123
+ }
124
+
125
+ // @deprecated since 2023-03-14
126
+ // DEFAULT_KEY is undefined
127
+ // if (r.hasOwnProperty(DEFAULT_KEY)) {
128
+ // return validateString(r[DEFAULT_KEY]);
129
+ // }
130
+
131
+ return validateString(defaultText);
132
+ }
133
+
134
+ /**
135
+ * Set a text for a key
136
+ *
137
+ * ```
138
+ * translations.setText("text1", "Make my day!");
139
+ * // plural rules
140
+ * translations.setText("text6", {
141
+ * "zero": "There are no files on Disk.",
142
+ * "one": "There is one file on Disk.",
143
+ * "other": "There are files on Disk."
144
+ * "default": "There are files on Disk."
145
+ * });
146
+ * ```
147
+ *
148
+ * @param {string} key
149
+ * @param {string|object} text
150
+ * @return {Translations}
151
+ * @throws {TypeError} value is not a string or object
152
+ */
153
+ setText(key, text) {
154
+ if (isString(text) || isObject(text)) {
155
+ this.storage.set(validateString(key), text);
156
+ return this;
157
+ }
158
+
159
+ throw new TypeError("value is not a string or object");
160
+ }
161
+
162
+ /**
163
+ * This method can be used to transfer overlays from an object. The keys are transferred, and the values are entered
164
+ * as text.
165
+ *
166
+ * The values can either be character strings or, in the case of texts with plural forms, objects. The plural forms
167
+ * must be stored as text via a standard key "zero", "one", "two", "few", "many" and "other".
168
+ *
169
+ * Additionally, the key default can be specified, which will be used if no other key fits.
170
+ *
171
+ * In some languages, like for example in German, there is no own more number at the value 0. In these languages,
172
+ * the function applies additionally zero.
173
+ *
174
+ * ```
175
+ * translations.assignTranslations({
176
+ * "text1": "Make my day!",
177
+ * "text2": "I'll be back!",
178
+ * "text6": {
179
+ * "zero": "There are no files on Disk.",
180
+ * "one": "There is one file on Disk.",
181
+ * "other": "There are files on Disk."
182
+ * "default": "There are files on Disk."
183
+ * });
184
+ * ```
185
+ *
186
+ * @param {object} translations
187
+ * @return {Translations}
188
+ */
189
+ assignTranslations(translations) {
190
+ validateObject(translations);
191
+
192
+ if (translations instanceof Translations) {
193
+ translations.storage.forEach((v, k) => {
194
+ this.setText(k, v);
195
+ });
196
+ return this;
197
+ }
198
+
199
+ for (const [k, v] of Object.entries(translations)) {
200
+ this.setText(k, v);
201
+ }
202
+
203
+ return this;
204
+ }
199
205
  }
200
206
 
201
207
  /**
@@ -210,30 +216,34 @@ class Translations extends Base {
210
216
  * @memberOf Monster.I18n
211
217
  */
212
218
  function getDocumentTranslations(element) {
213
- const d = getDocument();
214
-
215
- if (!(element instanceof HTMLElement)) {
216
- element = d.querySelector(`[${ATTRIBUTE_OBJECTLINK}~="${translationsLinkSymbol.toString()}"]`);
217
- if (element === null) {
218
- throw new Error("Cannot find element with translations. Add a translations object to the document.");
219
- }
220
- }
221
-
222
- if (!(element instanceof HTMLElement)) {
223
- throw new Error("Element is not an HTMLElement.");
224
- }
225
-
226
- if (!hasObjectLink(element, translationsLinkSymbol)) {
227
- throw new Error("This element has no translations.");
228
- }
229
-
230
- let obj = getLinkedObjects(element, translationsLinkSymbol);
231
-
232
- for (const t of obj) {
233
- if (t instanceof Translations) {
234
- return t;
235
- }
236
- }
237
-
238
- throw new Error("Missing translations.");
219
+ const d = getDocument();
220
+
221
+ if (!(element instanceof HTMLElement)) {
222
+ element = d.querySelector(
223
+ `[${ATTRIBUTE_OBJECTLINK}~="${translationsLinkSymbol.toString()}"]`,
224
+ );
225
+ if (element === null) {
226
+ throw new Error(
227
+ "Cannot find element with translations. Add a translations object to the document.",
228
+ );
229
+ }
230
+ }
231
+
232
+ if (!(element instanceof HTMLElement)) {
233
+ throw new Error("Element is not an HTMLElement.");
234
+ }
235
+
236
+ if (!hasObjectLink(element, translationsLinkSymbol)) {
237
+ throw new Error("This element has no translations.");
238
+ }
239
+
240
+ const obj = getLinkedObjects(element, translationsLinkSymbol);
241
+
242
+ for (const t of obj) {
243
+ if (t instanceof Translations) {
244
+ return t;
245
+ }
246
+ }
247
+
248
+ throw new Error("Missing translations.");
239
249
  }
@@ -21,44 +21,44 @@ export { ConsoleHandler };
21
21
  * @memberOf Monster.Logging.Handler
22
22
  */
23
23
  class ConsoleHandler extends Handler {
24
- /**
25
- * This is the central log function. this method must be
26
- * overwritten by derived handlers with their own logic.
27
- *
28
- * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
29
- *
30
- * @param {LogEntry} entry
31
- * @returns {boolean}
32
- */
33
- log(entry) {
34
- if (super.log(entry)) {
35
- let console = getGlobalObject("console");
36
- if (!console) return false;
24
+ /**
25
+ * This is the central log function. this method must be
26
+ * overwritten by derived handlers with their own logic.
27
+ *
28
+ * ALL > TRACE > DEBUG > INFO > WARN > ERROR > FATAL > OFF (ALL = 0xff;OFF = 0x00;
29
+ *
30
+ * @param {LogEntry} entry
31
+ * @returns {boolean}
32
+ */
33
+ log(entry) {
34
+ if (super.log(entry)) {
35
+ const console = getGlobalObject("console");
36
+ if (!console) return false;
37
37
 
38
- if (!console.error) console.error = console.log;
39
- if (!console.warn) console.warn = console.log;
38
+ if (!console.error) console.error = console.log;
39
+ if (!console.warn) console.warn = console.log;
40
40
 
41
- switch (entry.getLogLevel()) {
42
- case TRACE:
43
- case DEBUG:
44
- case INFO:
45
- console.log(entry.toString());
46
- break;
47
- case FATAL:
48
- case ERROR:
49
- console.error(entry.toString());
50
- break;
51
- case WARN:
52
- console.warn(entry.toString());
53
- break;
54
- default:
55
- console.log(entry.toString());
56
- break;
57
- }
41
+ switch (entry.getLogLevel()) {
42
+ case TRACE:
43
+ case DEBUG:
44
+ case INFO:
45
+ console.log(entry.toString());
46
+ break;
47
+ case FATAL:
48
+ case ERROR:
49
+ console.error(entry.toString());
50
+ break;
51
+ case WARN:
52
+ console.warn(entry.toString());
53
+ break;
54
+ default:
55
+ console.log(entry.toString());
56
+ break;
57
+ }
58
58
 
59
- return true;
60
- }
59
+ return true;
60
+ }
61
61
 
62
- return false;
63
- }
62
+ return false;
63
+ }
64
64
  }