typo3-typescript-sources 13.4.20

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 (415) hide show
  1. package/.github/workflows/sync-and-publish.yml +265 -0
  2. package/.last-synced-tag +1 -0
  3. package/LICENSE.txt +339 -0
  4. package/README-TYPO3.md +166 -0
  5. package/README.md +28 -0
  6. package/adminpanel/admin-panel.ts +375 -0
  7. package/adminpanel/modules/cache.ts +27 -0
  8. package/adminpanel/modules/preview.ts +75 -0
  9. package/backend/action-button/abstract-action.ts +22 -0
  10. package/backend/action-button/deferred-action.ts +41 -0
  11. package/backend/action-button/immediate-action.ts +31 -0
  12. package/backend/action-dispatcher.ts +104 -0
  13. package/backend/ajax-data-handler/message-interface.ts +18 -0
  14. package/backend/ajax-data-handler/response-interface.ts +20 -0
  15. package/backend/ajax-data-handler.ts +214 -0
  16. package/backend/backend-exception.ts +22 -0
  17. package/backend/broadcast-message.ts +50 -0
  18. package/backend/broadcast-service.ts +52 -0
  19. package/backend/browse-database.ts +38 -0
  20. package/backend/clear-cache.ts +88 -0
  21. package/backend/clipboard-panel.ts +240 -0
  22. package/backend/close-current-window.ts +2 -0
  23. package/backend/code-editor/autocomplete/completion-result.ts +105 -0
  24. package/backend/code-editor/autocomplete/ts-code-completion.ts +142 -0
  25. package/backend/code-editor/autocomplete/ts-parser.ts +485 -0
  26. package/backend/code-editor/autocomplete/ts-ref.ts +164 -0
  27. package/backend/code-editor/element/code-mirror-element.ts +282 -0
  28. package/backend/code-editor/language/typoscript.ts +181 -0
  29. package/backend/code-editor/stream-parser/typoscript.ts +1600 -0
  30. package/backend/color-picker.ts +158 -0
  31. package/backend/color-scheme-switch.ts +179 -0
  32. package/backend/column-selector-button.ts +302 -0
  33. package/backend/context-help.ts +68 -0
  34. package/backend/context-menu-actions.ts +322 -0
  35. package/backend/context-menu.ts +751 -0
  36. package/backend/copy-to-clipboard.ts +79 -0
  37. package/backend/date-time-picker.ts +270 -0
  38. package/backend/document-save-actions.ts +159 -0
  39. package/backend/drag-tooltip.ts +285 -0
  40. package/backend/drag-uploader.ts +914 -0
  41. package/backend/element/alert-element.ts +116 -0
  42. package/backend/element/dispatch-modal-button.ts +50 -0
  43. package/backend/element/draggable-resizable-element.ts +249 -0
  44. package/backend/element/editable-page-title.ts +306 -0
  45. package/backend/element/icon-element.ts +84 -0
  46. package/backend/element/immediate-action-element.ts +89 -0
  47. package/backend/element/pagination.ts +59 -0
  48. package/backend/element/progress-bar-element.ts +172 -0
  49. package/backend/element/progress-tracker-element.ts +119 -0
  50. package/backend/element/pseudo-button.ts +58 -0
  51. package/backend/element/spinner-element.ts +51 -0
  52. package/backend/element/thumbnail-element.ts +80 -0
  53. package/backend/element-browser.ts +182 -0
  54. package/backend/enum/data-transfer-types.ts +21 -0
  55. package/backend/enum/icon-types.ts +31 -0
  56. package/backend/enum/key-types.ts +27 -0
  57. package/backend/enum/severity.ts +20 -0
  58. package/backend/enum/viewport/scaffold-identifier.ts +24 -0
  59. package/backend/event/client-request.ts +25 -0
  60. package/backend/event/consumable.ts +18 -0
  61. package/backend/event/consumer-scope.ts +54 -0
  62. package/backend/event/event-dispatcher.ts +26 -0
  63. package/backend/event/interaction-request-assignment.ts +24 -0
  64. package/backend/event/interaction-request-map.ts +75 -0
  65. package/backend/event/interaction-request.ts +48 -0
  66. package/backend/event/trigger-request.ts +56 -0
  67. package/backend/form/submit-interceptor.ts +66 -0
  68. package/backend/form-engine/container/files-control-container.ts +716 -0
  69. package/backend/form-engine/container/flex-form-container-container.ts +166 -0
  70. package/backend/form-engine/container/flex-form-section-container.ts +210 -0
  71. package/backend/form-engine/container/inline-control-container.ts +1230 -0
  72. package/backend/form-engine/container/site-language-container.ts +616 -0
  73. package/backend/form-engine/element/abstract-sortable-select-items.ts +186 -0
  74. package/backend/form-engine/element/category-element.ts +160 -0
  75. package/backend/form-engine/element/color-element.ts +81 -0
  76. package/backend/form-engine/element/datetime-element.ts +66 -0
  77. package/backend/form-engine/element/extra/char-counter.ts +112 -0
  78. package/backend/form-engine/element/extra/select-box-filter.ts +85 -0
  79. package/backend/form-engine/element/folder-element.ts +66 -0
  80. package/backend/form-engine/element/group-element.ts +47 -0
  81. package/backend/form-engine/element/json-element.ts +52 -0
  82. package/backend/form-engine/element/link-element.ts +121 -0
  83. package/backend/form-engine/element/mfa-info-element.ts +169 -0
  84. package/backend/form-engine/element/modifier/resizable.ts +27 -0
  85. package/backend/form-engine/element/modifier/tabbable.ts +29 -0
  86. package/backend/form-engine/element/online-media-form-element.ts +65 -0
  87. package/backend/form-engine/element/password-element.ts +71 -0
  88. package/backend/form-engine/element/select-multiple-side-by-side-element.ts +83 -0
  89. package/backend/form-engine/element/select-single-element.ts +82 -0
  90. package/backend/form-engine/element/select-tree-element.ts +148 -0
  91. package/backend/form-engine/element/select-tree-toolbar.ts +118 -0
  92. package/backend/form-engine/element/select-tree.ts +210 -0
  93. package/backend/form-engine/element/slug-element.ts +243 -0
  94. package/backend/form-engine/element/suggest/result-container.ts +118 -0
  95. package/backend/form-engine/element/suggest/result-item.ts +90 -0
  96. package/backend/form-engine/element/table-permission-element.ts +101 -0
  97. package/backend/form-engine/element/table-wizard-element.ts +427 -0
  98. package/backend/form-engine/element/text-element.ts +52 -0
  99. package/backend/form-engine/element/text-table-element.ts +31 -0
  100. package/backend/form-engine/field-control/add-record.ts +40 -0
  101. package/backend/form-engine/field-control/edit-popup.ts +64 -0
  102. package/backend/form-engine/field-control/insert-clipboard.ts +50 -0
  103. package/backend/form-engine/field-control/link-popup.ts +53 -0
  104. package/backend/form-engine/field-control/list-module.ts +40 -0
  105. package/backend/form-engine/field-control/password-generator.ts +102 -0
  106. package/backend/form-engine/field-control/reset-selection.ts +48 -0
  107. package/backend/form-engine/field-wizard/localization-state-selector.ts +67 -0
  108. package/backend/form-engine/field-wizard/value-picker.ts +123 -0
  109. package/backend/form-engine/field-wizard/value-slider.ts +86 -0
  110. package/backend/form-engine/inline-relation/ajax-dispatcher.ts +124 -0
  111. package/backend/form-engine/inline-relation/inline-response-interface.ts +41 -0
  112. package/backend/form-engine-link-browser-adapter.ts +129 -0
  113. package/backend/form-engine-review.ts +155 -0
  114. package/backend/form-engine-suggest.ts +133 -0
  115. package/backend/form-engine-validation.ts +686 -0
  116. package/backend/form-engine.ts +1391 -0
  117. package/backend/global-event-handler.ts +252 -0
  118. package/backend/grid-editor.ts +1077 -0
  119. package/backend/hashing/md5.ts +252 -0
  120. package/backend/helper.ts +24 -0
  121. package/backend/hotkeys/hotkey-storage.ts +63 -0
  122. package/backend/hotkeys.ts +216 -0
  123. package/backend/icons.ts +236 -0
  124. package/backend/image-manipulation.ts +885 -0
  125. package/backend/info-window.ts +46 -0
  126. package/backend/input/clearable.ts +128 -0
  127. package/backend/input/index.d.ts +8 -0
  128. package/backend/java-script-module-import-event-handler.ts +19 -0
  129. package/backend/key-bindings.ts +42 -0
  130. package/backend/layout-module/drag-drop.ts +359 -0
  131. package/backend/layout-module/paste.ts +165 -0
  132. package/backend/link-browser.ts +89 -0
  133. package/backend/live-search/element/backend-search.ts +34 -0
  134. package/backend/live-search/element/hint.ts +33 -0
  135. package/backend/live-search/element/provider/default-result-item.ts +52 -0
  136. package/backend/live-search/element/provider/page-provider-result-item.ts +52 -0
  137. package/backend/live-search/element/result/item/action/action-container.ts +135 -0
  138. package/backend/live-search/element/result/item/action/action.ts +56 -0
  139. package/backend/live-search/element/result/item/item-container.ts +224 -0
  140. package/backend/live-search/element/result/item/item.ts +74 -0
  141. package/backend/live-search/element/result/result-container.ts +110 -0
  142. package/backend/live-search/element/result/result-detail-container.ts +50 -0
  143. package/backend/live-search/element/result/result-pagination.ts +122 -0
  144. package/backend/live-search/element/search-option-item.ts +70 -0
  145. package/backend/live-search/live-search-configurator.ts +54 -0
  146. package/backend/live-search/live-search-shortcut.ts +29 -0
  147. package/backend/live-search/result-types/backend-module-result-type.ts +8 -0
  148. package/backend/live-search/result-types/default-result-type.ts +21 -0
  149. package/backend/live-search/result-types/page-result-type.ts +23 -0
  150. package/backend/localization.ts +390 -0
  151. package/backend/login-refresh.ts +525 -0
  152. package/backend/login.ts +179 -0
  153. package/backend/mail-link-handler.ts +45 -0
  154. package/backend/modal-interface.ts +19 -0
  155. package/backend/modal.ts +685 -0
  156. package/backend/module/iframe.ts +125 -0
  157. package/backend/module/router.ts +275 -0
  158. package/backend/module-menu.ts +550 -0
  159. package/backend/module.ts +133 -0
  160. package/backend/multi-record-selection-action.ts +44 -0
  161. package/backend/multi-record-selection-delete-action.ts +108 -0
  162. package/backend/multi-record-selection-edit-action.ts +56 -0
  163. package/backend/multi-record-selection.ts +468 -0
  164. package/backend/multi-step-wizard.ts +568 -0
  165. package/backend/new-content-element-wizard-button.ts +51 -0
  166. package/backend/new-multiple-pages.ts +108 -0
  167. package/backend/new-record-wizard.ts +680 -0
  168. package/backend/notification.ts +366 -0
  169. package/backend/offset.ts +40 -0
  170. package/backend/online-media.ts +110 -0
  171. package/backend/page-actions.ts +91 -0
  172. package/backend/page-link-handler.ts +51 -0
  173. package/backend/pagetsconfig/pagetsconfig-includes.ts +77 -0
  174. package/backend/popover.ts +165 -0
  175. package/backend/record-download-button.ts +104 -0
  176. package/backend/record-link-handler.ts +31 -0
  177. package/backend/record-search.ts +44 -0
  178. package/backend/recordlist.ts +230 -0
  179. package/backend/resource/resource.ts +35 -0
  180. package/backend/security/element/csp-reports.ts +406 -0
  181. package/backend/security/element/sudo-mode.ts +249 -0
  182. package/backend/security/sudo-mode-interceptor.ts +19 -0
  183. package/backend/settings/editor/editable-setting.ts +231 -0
  184. package/backend/settings/editor.ts +451 -0
  185. package/backend/settings/enum/settings-mode.enum.ts +24 -0
  186. package/backend/settings/type/base.ts +200 -0
  187. package/backend/settings/type/bool.ts +56 -0
  188. package/backend/settings/type/color.ts +64 -0
  189. package/backend/settings/type/int.ts +85 -0
  190. package/backend/settings/type/number.ts +61 -0
  191. package/backend/settings/type/page.ts +100 -0
  192. package/backend/settings/type/string.ts +77 -0
  193. package/backend/settings/type/stringlist.ts +87 -0
  194. package/backend/severity.ts +88 -0
  195. package/backend/site-inline-actions.ts +32 -0
  196. package/backend/sortable-table.ts +208 -0
  197. package/backend/storage/abstract-client-storage.ts +76 -0
  198. package/backend/storage/browser-session.ts +28 -0
  199. package/backend/storage/client.ts +28 -0
  200. package/backend/storage/module-state-storage.ts +118 -0
  201. package/backend/storage/persistent.ts +204 -0
  202. package/backend/switch-user.ts +82 -0
  203. package/backend/tabs.ts +72 -0
  204. package/backend/telephone-link-handler.ts +40 -0
  205. package/backend/tests/backend/storage/browser-storage-test.ts +87 -0
  206. package/backend/tests/backend/storage/client-test.ts +87 -0
  207. package/backend/tests/backend/utility/dom-helper-test.ts +51 -0
  208. package/backend/tests/backend-exception-test.ts +28 -0
  209. package/backend/tests/element/immediate-action-element-test.ts +81 -0
  210. package/backend/tests/form-engine-validation-test.ts +304 -0
  211. package/backend/tests/grid-editor-test.ts +29 -0
  212. package/backend/tests/hashing/md5Test.ts +28 -0
  213. package/backend/tests/icons-test.ts +23 -0
  214. package/backend/tests/notification-test.ts +161 -0
  215. package/backend/tests/popover-test.ts +83 -0
  216. package/backend/toolbar/clear-cache-menu.ts +88 -0
  217. package/backend/toolbar/live-search.ts +284 -0
  218. package/backend/toolbar/shortcut-menu.ts +254 -0
  219. package/backend/toolbar/system-information-menu.ts +161 -0
  220. package/backend/toolbar.ts +41 -0
  221. package/backend/tree/file-storage-browser.ts +194 -0
  222. package/backend/tree/file-storage-tree-container.ts +465 -0
  223. package/backend/tree/file-storage-tree.ts +42 -0
  224. package/backend/tree/page-browser.ts +272 -0
  225. package/backend/tree/page-tree-element.ts +602 -0
  226. package/backend/tree/page-tree.ts +152 -0
  227. package/backend/tree/tree-module-state.ts +159 -0
  228. package/backend/tree/tree-node-toggle.ts +31 -0
  229. package/backend/tree/tree-node.ts +97 -0
  230. package/backend/tree/tree-toolbar.ts +117 -0
  231. package/backend/tree/tree.ts +1595 -0
  232. package/backend/url-link-handler.ts +36 -0
  233. package/backend/user-pass-login.ts +255 -0
  234. package/backend/user-settings-manager.ts +189 -0
  235. package/backend/utility/collapse-state-persister.ts +205 -0
  236. package/backend/utility/collapse-state-search.ts +183 -0
  237. package/backend/utility/dom-helper.ts +91 -0
  238. package/backend/utility/drag-drop-utility.ts +47 -0
  239. package/backend/utility/message-utility.ts +45 -0
  240. package/backend/utility/top-level-module-import.ts +32 -0
  241. package/backend/utility.ts +194 -0
  242. package/backend/viewport/abstract-container.ts +22 -0
  243. package/backend/viewport/content-container.ts +98 -0
  244. package/backend/viewport/loader.ts +28 -0
  245. package/backend/viewport/navigation-container.ts +119 -0
  246. package/backend/viewport/resizable-navigation.ts +176 -0
  247. package/backend/viewport/toolbar.ts +27 -0
  248. package/backend/viewport/topbar.ts +39 -0
  249. package/backend/viewport.ts +46 -0
  250. package/backend/window-manager.ts +84 -0
  251. package/backend/wizard/move-content-element.ts +107 -0
  252. package/backend/wizard/move-page.ts +74 -0
  253. package/backend/wizard.ts +331 -0
  254. package/belog/backend-log.ts +88 -0
  255. package/beuser/backend-user-listing.ts +40 -0
  256. package/beuser/permissions.ts +291 -0
  257. package/core/ajax/ajax-request-types.ts +15 -0
  258. package/core/ajax/ajax-request.ts +202 -0
  259. package/core/ajax/ajax-response.ts +57 -0
  260. package/core/ajax/input-transformer.ts +92 -0
  261. package/core/ajax/simple-response-interface.ts +5 -0
  262. package/core/authentication/mfa-provider/totp.ts +54 -0
  263. package/core/cache/dedupe-async-task.ts +95 -0
  264. package/core/directive/markdown.ts +82 -0
  265. package/core/directive/nl2br.ts +16 -0
  266. package/core/document-service.ts +35 -0
  267. package/core/event/debounce-event.ts +40 -0
  268. package/core/event/event-interface.ts +24 -0
  269. package/core/event/regular-event.ts +58 -0
  270. package/core/event/request-animation-frame-event.ts +42 -0
  271. package/core/event/throttle-event.ts +54 -0
  272. package/core/java-script-item-handler.ts +29 -0
  273. package/core/java-script-item-processor.ts +171 -0
  274. package/core/lit-helper.ts +126 -0
  275. package/core/literals.ts +17 -0
  276. package/core/referrer-refresh.ts +2 -0
  277. package/core/security-utility.ts +89 -0
  278. package/core/tests/ajax/ajax-request-test.ts +290 -0
  279. package/core/tests/ajax/input-transformer-test.ts +64 -0
  280. package/core/tests/cache/dedupe-async-task-test.ts +152 -0
  281. package/core/tests/event/throttle-event-test.ts +47 -0
  282. package/core/tests/literals-test.ts +24 -0
  283. package/core/tests/security-utility-test.ts +50 -0
  284. package/core/utility/types.ts +9 -0
  285. package/dashboard/chart-initializer.ts +136 -0
  286. package/dashboard/dashboard.ts +1487 -0
  287. package/extensionmanager/distribution-image.ts +55 -0
  288. package/extensionmanager/main.ts +291 -0
  289. package/extensionmanager/repository.ts +195 -0
  290. package/extensionmanager/update.ts +118 -0
  291. package/extensionmanager/upload-form.ts +42 -0
  292. package/filelist/browse-files.ts +148 -0
  293. package/filelist/browse-folders.ts +94 -0
  294. package/filelist/context-menu-actions.ts +335 -0
  295. package/filelist/create-folder.ts +69 -0
  296. package/filelist/file-delete.ts +69 -0
  297. package/filelist/file-list-actions.ts +132 -0
  298. package/filelist/file-list-dragdrop.ts +139 -0
  299. package/filelist/file-list-rename-handler.ts +128 -0
  300. package/filelist/file-list-transfer-handler.ts +138 -0
  301. package/filelist/file-list.ts +396 -0
  302. package/filelist/file-replace.ts +37 -0
  303. package/filelist/linkbrowser-file-handler.ts +94 -0
  304. package/filelist/linkbrowser-folder-handler.ts +74 -0
  305. package/filelist/rename-file.ts +109 -0
  306. package/form/backend/form-editor/component/property-grid-editor.ts +340 -0
  307. package/form/backend/form-editor/core.ts +2104 -0
  308. package/form/backend/form-editor/helper.ts +226 -0
  309. package/form/backend/form-editor/inspector-component.ts +2323 -0
  310. package/form/backend/form-editor/mediator.ts +941 -0
  311. package/form/backend/form-editor/modals-component.ts +433 -0
  312. package/form/backend/form-editor/stage-component.ts +908 -0
  313. package/form/backend/form-editor/tree-component.ts +548 -0
  314. package/form/backend/form-editor/view-model.ts +1343 -0
  315. package/form/backend/form-editor.ts +846 -0
  316. package/form/backend/form-manager/main.ts +39 -0
  317. package/form/backend/form-manager/view-model.ts +789 -0
  318. package/form/backend/form-manager.ts +180 -0
  319. package/form/backend/helper.ts +60 -0
  320. package/form/frontend/date-picker.ts +38 -0
  321. package/frontend/default_frontend.ts +82 -0
  322. package/impexp/context-menu-actions.ts +50 -0
  323. package/impexp/import-export.ts +62 -0
  324. package/indexed-search/pagination.ts +26 -0
  325. package/indexed-search/statistics.ts +50 -0
  326. package/info/translation-status.ts +48 -0
  327. package/install/ajax/ajax-queue.ts +83 -0
  328. package/install/init-install.ts +2 -0
  329. package/install/init-installer.ts +2 -0
  330. package/install/install.ts +25 -0
  331. package/install/installer.ts +458 -0
  332. package/install/message-interface.ts +18 -0
  333. package/install/module/abstract-inline-module.ts +27 -0
  334. package/install/module/abstract-interactable-module.ts +107 -0
  335. package/install/module/environment/environment-check.ts +92 -0
  336. package/install/module/environment/folder-structure.ts +145 -0
  337. package/install/module/environment/image-processing.ts +141 -0
  338. package/install/module/environment/mail-test.ts +127 -0
  339. package/install/module/environment/php-info.ts +50 -0
  340. package/install/module/environment/system-information.ts +50 -0
  341. package/install/module/maintenance/cache.ts +59 -0
  342. package/install/module/maintenance/clear-tables.ts +134 -0
  343. package/install/module/maintenance/clear-typo3temp-files.ts +137 -0
  344. package/install/module/maintenance/create-admin.ts +126 -0
  345. package/install/module/maintenance/database-analyzer.ts +266 -0
  346. package/install/module/maintenance/dump-autoload.ts +58 -0
  347. package/install/module/maintenance/language-packs.ts +338 -0
  348. package/install/module/maintenance/reset-backend-user-uc.ts +58 -0
  349. package/install/module/password-strength.ts +56 -0
  350. package/install/module/settings/change-install-tool-password.ts +101 -0
  351. package/install/module/settings/extension-configuration.ts +224 -0
  352. package/install/module/settings/features.ts +102 -0
  353. package/install/module/settings/local-configuration.ts +316 -0
  354. package/install/module/settings/presets.ts +147 -0
  355. package/install/module/settings/system-maintainer.ts +111 -0
  356. package/install/module/upgrade/core-update.ts +255 -0
  357. package/install/module/upgrade/extension-compat-tester.ts +195 -0
  358. package/install/module/upgrade/extension-scanner.ts +381 -0
  359. package/install/module/upgrade/tca-ext-tables-check.ts +93 -0
  360. package/install/module/upgrade/tca-migrations-check.ts +101 -0
  361. package/install/module/upgrade/upgrade-docs.ts +310 -0
  362. package/install/module/upgrade/upgrade-wizards.ts +612 -0
  363. package/install/renderable/clearable.ts +113 -0
  364. package/install/renderable/flash-message.ts +64 -0
  365. package/install/renderable/info-box.ts +66 -0
  366. package/install/renderable/language-packs.ts +304 -0
  367. package/install/renderable/offset-group.ts +38 -0
  368. package/install/renderable/severity.ts +49 -0
  369. package/install/renderable/wrap-group.ts +36 -0
  370. package/install/router.ts +468 -0
  371. package/linkvalidator/linkvalidator-modal.ts +45 -0
  372. package/linkvalidator/linkvalidator.ts +101 -0
  373. package/lowlevel/query-generator.ts +132 -0
  374. package/lowlevel/reference-index.ts +44 -0
  375. package/opendocs/toolbar/opendocs-menu.ts +117 -0
  376. package/package.json +34 -0
  377. package/recycler/recycler.ts +539 -0
  378. package/redirects/event-handler.ts +108 -0
  379. package/redirects/form-engine-evaluation.ts +34 -0
  380. package/redirects/redirects-module.ts +58 -0
  381. package/rte-ckeditor/ckeditor5.ts +402 -0
  382. package/rte-ckeditor/css-prefixer.ts +94 -0
  383. package/rte-ckeditor/legacy/ckeditor5-bundle.ts +17 -0
  384. package/rte-ckeditor/legacy/ckeditor5-inspector.ts +2 -0
  385. package/rte-ckeditor/plugin/typo3-link.ts +810 -0
  386. package/rte-ckeditor/plugin/whitespace.ts +114 -0
  387. package/rte-ckeditor/rte-link-browser.ts +112 -0
  388. package/rte-ckeditor/tests/css-prefixer-test.ts +314 -0
  389. package/scheduler/scheduler-add-group.ts +119 -0
  390. package/scheduler/scheduler-editable-group-name.ts +307 -0
  391. package/scheduler/scheduler-sortable-groups.ts +59 -0
  392. package/scheduler/scheduler.ts +466 -0
  393. package/setup/setup-module.ts +122 -0
  394. package/styleguide/checkbox-demo.ts +5 -0
  395. package/styleguide/element/theme-switcher-element.ts +101 -0
  396. package/styleguide/filter.ts +22 -0
  397. package/styleguide/find-icons.ts +78 -0
  398. package/styleguide/processing-indicator.ts +78 -0
  399. package/styleguide/render-notifications.ts +64 -0
  400. package/sys-note/element/delete-button.ts +78 -0
  401. package/tstemplate/constant-editor.ts +64 -0
  402. package/tstemplate/information-module.ts +31 -0
  403. package/tstemplate/template-analyzer.ts +77 -0
  404. package/viewpage/main.ts +253 -0
  405. package/workspaces/backend.ts +979 -0
  406. package/workspaces/preview.ts +232 -0
  407. package/workspaces/renderable/comment-view.ts +79 -0
  408. package/workspaces/renderable/diff-view.ts +58 -0
  409. package/workspaces/renderable/history-view.ts +97 -0
  410. package/workspaces/renderable/record-information.ts +118 -0
  411. package/workspaces/renderable/record-table.ts +355 -0
  412. package/workspaces/renderable/send-to-stage-form.ts +108 -0
  413. package/workspaces/toolbar/workspaces-menu.ts +190 -0
  414. package/workspaces/utility/icon-helper.ts +57 -0
  415. package/workspaces/workspaces.ts +136 -0
@@ -0,0 +1,66 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import DocumentService from '@typo3/core/document-service';
15
+ import { AbstractSortableSelectItems } from '@typo3/backend/form-engine/element/abstract-sortable-select-items';
16
+ import { selector } from '@typo3/core/literals';
17
+
18
+ class FolderSortableSelectItems extends AbstractSortableSelectItems {
19
+ public registerEventHandler(element: HTMLSelectElement): void {
20
+ this.registerSortableEventHandler(element);
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Module: @typo3/backend/form-engine/element/folder-element
26
+ *
27
+ * Functionality for the folder element
28
+ *
29
+ * @example
30
+ * <typo3-formengine-element-folder recordFieldId="some-id">
31
+ * ...
32
+ * </typo3-formengine-element-folder>
33
+ *
34
+ * This is based on W3C custom elements ("web components") specification, see
35
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
36
+ */
37
+ class FolderElement extends HTMLElement {
38
+ private recordField: HTMLSelectElement = null;
39
+
40
+ public async connectedCallback(): Promise<void> {
41
+ if (this.recordField !== null) {
42
+ // Element is already initialized, which means the component has been rendered before. Nothing to do here.
43
+ return;
44
+ }
45
+
46
+ const recordFieldId = this.getAttribute('recordFieldId');
47
+ if (recordFieldId === null) {
48
+ return;
49
+ }
50
+
51
+ await DocumentService.ready();
52
+ this.recordField = this.querySelector<HTMLSelectElement>(selector`#${recordFieldId}`);
53
+ if (!this.recordField) {
54
+ return;
55
+ }
56
+
57
+ this.registerEventHandler();
58
+ }
59
+
60
+ private registerEventHandler(): void {
61
+ const folderSortableSelectItems = new FolderSortableSelectItems();
62
+ folderSortableSelectItems.registerEventHandler(this.recordField);
63
+ }
64
+ }
65
+
66
+ window.customElements.define('typo3-formengine-element-folder', FolderElement);
@@ -0,0 +1,47 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { AbstractSortableSelectItems } from './abstract-sortable-select-items';
15
+ import DocumentService from '@typo3/core/document-service';
16
+ import FormEngineSuggest from '../../form-engine-suggest';
17
+
18
+ class GroupElement extends AbstractSortableSelectItems {
19
+ private element: HTMLSelectElement = null;
20
+
21
+ constructor(elementId: string) {
22
+ super();
23
+
24
+ DocumentService.ready().then((): void => {
25
+ this.element = <HTMLSelectElement>document.getElementById(elementId);
26
+ if (this.element === null) {
27
+ return;
28
+ }
29
+ this.registerEventHandler();
30
+ this.registerSuggest();
31
+ });
32
+ }
33
+
34
+ private registerEventHandler(): void {
35
+ this.registerSortableEventHandler(this.element);
36
+ }
37
+
38
+ private registerSuggest(): void {
39
+ let suggestField;
40
+ if ((suggestField = <HTMLInputElement>this.element.closest('.t3js-formengine-field-item').querySelector('.t3-form-suggest')) !== null) {
41
+ // tslint:disable-next-line:no-unused-expression
42
+ new FormEngineSuggest(suggestField);
43
+ }
44
+ }
45
+ }
46
+
47
+ export default GroupElement;
@@ -0,0 +1,52 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import DocumentService from '@typo3/core/document-service';
15
+ import { Resizable } from './modifier/resizable';
16
+ import { Tabbable } from './modifier/tabbable';
17
+
18
+ /**
19
+ * Module: @typo3/backend/form-engine/element/json-element
20
+ *
21
+ * Functionality for the json element
22
+ *
23
+ * @example
24
+ * <typo3-formengine-element-json recordFieldId="some-id">
25
+ * ...
26
+ * </typo3-formengine-element-json>
27
+ *
28
+ * This is based on W3C custom elements ("web components") specification, see
29
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
30
+ */
31
+ class JsonElement extends HTMLElement {
32
+ private element: HTMLTextAreaElement = null;
33
+
34
+ public async connectedCallback(): Promise<void> {
35
+ if (this.element !== null) {
36
+ // Element is already initialized, which means the component has been rendered before. Nothing to do here.
37
+ return;
38
+ }
39
+
40
+ await DocumentService.ready();
41
+ this.element = document.getElementById((this.getAttribute('recordFieldId') || '' as string)) as HTMLTextAreaElement;
42
+
43
+ if (!this.element) {
44
+ return;
45
+ }
46
+
47
+ Resizable.enable(this.element);
48
+ Tabbable.enable(this.element);
49
+ }
50
+ }
51
+
52
+ window.customElements.define('typo3-formengine-element-json', JsonElement);
@@ -0,0 +1,121 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { selector } from '@typo3/core/literals';
15
+
16
+ enum Selectors {
17
+ toggleSelector = '.t3js-form-field-link-explanation-toggle',
18
+ inputFieldSelector = '.t3js-form-field-link-input',
19
+ explanationSelector = '.t3js-form-field-link-explanation',
20
+ iconSelector = '.t3js-form-field-link-icon',
21
+ containerSelector = '.t3js-form-field-link',
22
+ }
23
+
24
+ /**
25
+ * Module: @typo3/backend/form-engine/element/link-element
26
+ *
27
+ * Functionality for the link element
28
+ *
29
+ * @example
30
+ * <typo3-formengine-element-link recordFieldId="some-id">
31
+ * ...
32
+ * </typo3-formengine-element-link>
33
+ *
34
+ * This is based on W3C custom elements ("web components") specification, see
35
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
36
+ */
37
+ class LinkElement extends HTMLElement {
38
+ constructor() {
39
+ super();
40
+
41
+ this.addEventListener('click', (e: Event) => this.handleClick(e));
42
+ this.addEventListener('change', (e: Event) => this.handleChange(e));
43
+ }
44
+
45
+ private get element(): HTMLSelectElement {
46
+ const recordFieldId = this.getAttribute('recordFieldId');
47
+ if (recordFieldId === null) {
48
+ throw new Error('Missing recordFieldId attribute on <typo3-formengine-element-link>');
49
+ }
50
+
51
+ const element = this.querySelector<HTMLSelectElement>(selector`#${recordFieldId}`);
52
+ if (element === null) {
53
+ throw new Error(`recordFieldId #${recordFieldId} not found in <typo3-formengine-element-link>`);
54
+ }
55
+
56
+ return element;
57
+ }
58
+
59
+ private get container(): HTMLElement {
60
+ return this.element.closest<HTMLElement>(Selectors.containerSelector);
61
+ }
62
+
63
+ private get toggleSelector(): HTMLButtonElement {
64
+ return this.container.querySelector<HTMLButtonElement>(Selectors.toggleSelector);
65
+ }
66
+
67
+ private get explanationField(): HTMLInputElement {
68
+ return this.container.querySelector<HTMLInputElement>(Selectors.explanationSelector);
69
+ }
70
+
71
+ private get icon(): HTMLSpanElement {
72
+ return this.container.querySelector<HTMLSpanElement>(Selectors.iconSelector);
73
+ }
74
+
75
+ private handleClick(e: Event): void {
76
+ const initiator = e.target as Element;
77
+ const isToggleButton = initiator.closest(Selectors.toggleSelector) !== null;
78
+ if (isToggleButton) {
79
+ e.preventDefault();
80
+ const explanationHidden = this.explanationField.hasAttribute('hidden');
81
+ if (explanationHidden) {
82
+ this.showExplanation();
83
+ } else {
84
+ this.hideExplanation();
85
+ }
86
+ }
87
+ }
88
+
89
+ private handleChange(e: Event): void {
90
+ const initiator = e.target as Element;
91
+ const isInputField = initiator.closest(Selectors.inputFieldSelector) !== null;
92
+ if (isInputField) {
93
+ const explanationVisible = !this.explanationField.hasAttribute('hidden');
94
+ if (explanationVisible) {
95
+ this.hideExplanation();
96
+ }
97
+ this.disableToggle();
98
+ this.clearIcon();
99
+ }
100
+ }
101
+
102
+ private showExplanation(): void {
103
+ this.explanationField.removeAttribute('hidden');
104
+ this.element.setAttribute('hidden', '');
105
+ }
106
+
107
+ private hideExplanation(): void {
108
+ this.explanationField.setAttribute('hidden', '');
109
+ this.element.removeAttribute('hidden');
110
+ }
111
+
112
+ private disableToggle(): void {
113
+ this.toggleSelector.setAttribute('disabled', '');
114
+ }
115
+
116
+ private clearIcon(): void {
117
+ this.icon.replaceChildren();
118
+ }
119
+ }
120
+
121
+ window.customElements.define('typo3-formengine-element-link', LinkElement);
@@ -0,0 +1,169 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
15
+ import DocumentService from '@typo3/core/document-service';
16
+ import RegularEvent from '@typo3/core/event/regular-event';
17
+ import Notification from '@typo3/backend/notification';
18
+ import Modal from '@typo3/backend/modal';
19
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
20
+ import { selector } from '@typo3/core/literals';
21
+ import { sudoModeInterceptor } from '@typo3/backend/security/sudo-mode-interceptor';
22
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
23
+
24
+ interface FieldOptions {
25
+ userId: number,
26
+ tableName: string
27
+ }
28
+
29
+ interface Response {
30
+ success: boolean;
31
+ status: Array<Status>;
32
+ remaining: number;
33
+ }
34
+
35
+ interface Status {
36
+ title: string;
37
+ message: string;
38
+ }
39
+
40
+ enum Selectors {
41
+ deactivteProviderButton = '.t3js-deactivate-provider-button',
42
+ deactivteMfaButton = '.t3js-deactivate-mfa-button',
43
+ providerslist = '.t3js-mfa-active-providers-list',
44
+ mfaStatusLabel = '.t3js-mfa-status-label',
45
+ }
46
+
47
+ class MfaInfoElement {
48
+ private readonly options: FieldOptions = null;
49
+ private fullElement: HTMLElement = null;
50
+ private deactivteProviderButtons: NodeListOf<HTMLButtonElement> = null;
51
+ private deactivteMfaButton: HTMLButtonElement = null;
52
+ private providersList: HTMLUListElement = null;
53
+ private mfaStatusLabel: HTMLSpanElement = null;
54
+ private request: AjaxRequest = null;
55
+
56
+ constructor(selector: string, options: FieldOptions) {
57
+ this.options = options;
58
+ DocumentService.ready().then((document: Document): void => {
59
+ this.fullElement = document.querySelector(selector);
60
+ this.deactivteProviderButtons = this.fullElement.querySelectorAll(Selectors.deactivteProviderButton);
61
+ this.deactivteMfaButton = this.fullElement.querySelector(Selectors.deactivteMfaButton);
62
+ this.providersList = this.fullElement.querySelector(Selectors.providerslist);
63
+ this.mfaStatusLabel = this.fullElement.parentElement.querySelector(Selectors.mfaStatusLabel);
64
+ this.registerEvents();
65
+ });
66
+ }
67
+
68
+ private registerEvents(): void {
69
+ new RegularEvent('click', (e: Event): void => {
70
+ e.preventDefault();
71
+ this.prepareDeactivateRequest(this.deactivteMfaButton);
72
+ }).bindTo(this.deactivteMfaButton);
73
+
74
+ this.deactivteProviderButtons.forEach((buttonElement: HTMLButtonElement): void => {
75
+ new RegularEvent('click', (e: Event): void => {
76
+ e.preventDefault();
77
+ this.prepareDeactivateRequest(buttonElement);
78
+ }).bindTo(buttonElement);
79
+ });
80
+ }
81
+
82
+ private prepareDeactivateRequest(button: HTMLButtonElement): void {
83
+ const modal = Modal.show(
84
+ button.dataset.confirmationTitle || button.getAttribute('title') || 'Deactivate provider(s)',
85
+ button.dataset.confirmationContent || 'Are you sure you want to continue? This action cannot be undone and will be applied immediately!',
86
+ SeverityEnum.warning,
87
+ [
88
+ {
89
+ text: button.dataset.confirmationCancelText || 'Cancel',
90
+ active: true,
91
+ btnClass: 'btn-default',
92
+ name: 'cancel'
93
+ },
94
+ {
95
+ text: button.dataset.confirmationDeactivateText || 'Deactivate',
96
+ btnClass: 'btn-warning',
97
+ name: 'deactivate',
98
+ trigger: (): void => {
99
+ this.sendDeactivateRequest(button.dataset.provider);
100
+ }
101
+ }
102
+ ]
103
+ );
104
+
105
+ modal.addEventListener('button.clicked', (): void => {
106
+ modal.hideModal();
107
+ });
108
+ }
109
+
110
+ private sendDeactivateRequest(provider?: string): void {
111
+ if (this.request instanceof AjaxRequest) {
112
+ this.request.abort();
113
+ }
114
+ this.request = (new AjaxRequest(TYPO3.settings.ajaxUrls.mfa)).addMiddleware(sudoModeInterceptor);
115
+ this.request.post({
116
+ action: 'deactivate',
117
+ provider: provider,
118
+ userId: this.options.userId,
119
+ tableName: this.options.tableName
120
+ }).then(async (response: AjaxResponse): Promise<void> => {
121
+ const data: Response = await response.resolve();
122
+ if (data.status.length > 0) {
123
+ data.status.forEach((status: Status): void => {
124
+ if (data.success) {
125
+ Notification.success(status.title, status.message);
126
+ } else {
127
+ Notification.error(status.title, status.message);
128
+ }
129
+ });
130
+ }
131
+ if (!data.success) {
132
+ return;
133
+ }
134
+ if (provider === undefined || data.remaining === 0) {
135
+ this.deactivateMfa();
136
+ return;
137
+ }
138
+ if (this.providersList === null) {
139
+ return;
140
+ }
141
+ const providerEntry: HTMLLIElement = this.providersList.querySelector(selector`li#provider-${provider}`);
142
+ if (providerEntry === null) {
143
+ return;
144
+ }
145
+ providerEntry.remove();
146
+ const providerEntries: NodeListOf<HTMLLIElement> = this.providersList.querySelectorAll('li');
147
+ if (providerEntries.length === 0){
148
+ this.deactivateMfa();
149
+ }
150
+ }).finally((): void => {
151
+ this.request = null;
152
+ });
153
+ }
154
+
155
+ private deactivateMfa(): void {
156
+ this.deactivteMfaButton.classList.add('disabled');
157
+ this.deactivteMfaButton.setAttribute('disabled', 'disabled');
158
+ if (this.providersList !== null) {
159
+ this.providersList.remove();
160
+ }
161
+ if (this.mfaStatusLabel !== null) {
162
+ this.mfaStatusLabel.innerText = this.mfaStatusLabel.dataset.alternativeLabel;
163
+ this.mfaStatusLabel.classList.remove('badge-success');
164
+ this.mfaStatusLabel.classList.add('badge-danger');
165
+ }
166
+ }
167
+ }
168
+
169
+ export default MfaInfoElement;
@@ -0,0 +1,27 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import autosize from 'autosize';
15
+
16
+ /**
17
+ * Convert textarea so they grow when it is typed in.
18
+ */
19
+ export class Resizable {
20
+
21
+ /**
22
+ * @param {HTMLTextAreaElement} textarea
23
+ */
24
+ public static enable(textarea: HTMLTextAreaElement): void {
25
+ autosize(textarea);
26
+ }
27
+ }
@@ -0,0 +1,29 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ /**
15
+ * Convert textarea to enable tab
16
+ */
17
+ export class Tabbable {
18
+
19
+ /**
20
+ * @param {HTMLTextAreaElement} textarea
21
+ */
22
+ public static enable(textarea: HTMLTextAreaElement): void {
23
+ if (textarea.classList.contains('t3js-enable-tab')) {
24
+ import('taboverride').then(({ default: taboverride }): void => {
25
+ taboverride.set(textarea);
26
+ });
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,65 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { customElement, property } from 'lit/decorators';
15
+ import { LitElement, type TemplateResult, html } from 'lit';
16
+
17
+ /**
18
+ * Module: @typo3/backend/form-engine/element/online-media-form-element
19
+ */
20
+ @customElement('typo3-backend-formengine-online-media-form')
21
+ export class OnlineMediaFormElement extends LitElement {
22
+ @property({ type: String }) placeholder: string;
23
+ @property({ type: String, attribute: 'help-text' }) allowedExtensionsHelpText: string;
24
+ @property({ type: String, attribute: 'extensions' }) allowedExtensions: string;
25
+
26
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
27
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
28
+ return this;
29
+ }
30
+
31
+ protected override render(): TemplateResult {
32
+ return html`
33
+ <form @submit="${ this.dispatchSubmitEvent }">
34
+ <div class="form-control-wrap">
35
+ <input type="text" class="form-control" name="online-media-url" placeholder="${this.placeholder}" required>
36
+ <div class="form-text">
37
+ ${this.allowedExtensionsHelpText}<br>
38
+ <ul class="badge-list">
39
+ ${this.allowedExtensions.split(',').map((ext: string) => html`
40
+ <li><span class="badge badge-success">${ext.trim().toUpperCase()}</span></li>
41
+ `)}
42
+ </ul>
43
+ </div>
44
+ </div>
45
+ </form>
46
+ `;
47
+ }
48
+
49
+ private dispatchSubmitEvent(e: SubmitEvent): void {
50
+ e.preventDefault();
51
+
52
+ const formData = new FormData(e.target as HTMLFormElement);
53
+ const submittedData = Object.fromEntries(formData);
54
+
55
+ this.dispatchEvent(new CustomEvent('typo3:formengine:online-media-added', {
56
+ detail: submittedData
57
+ }));
58
+ }
59
+ }
60
+
61
+ declare global {
62
+ interface HTMLElementTagNameMap {
63
+ 'typo3-backend-formengine-online-media-form': OnlineMediaFormElement;
64
+ }
65
+ }
@@ -0,0 +1,71 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import DocumentService from '@typo3/core/document-service';
15
+ import { selector } from '@typo3/core/literals';
16
+
17
+ /**
18
+ * Module: @typo3/backend/form-engine/element/password-element
19
+ *
20
+ * Functionality for the password element
21
+ *
22
+ * @example
23
+ * <typo3-formengine-element-password recordFieldId="some-id" passwordPolicy="some-policy">
24
+ * ...
25
+ * </typo3-formengine-element-password>
26
+ *
27
+ * This is based on W3C custom elements ("web components") specification, see
28
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
29
+ */
30
+ class PasswordElement extends HTMLElement {
31
+ private element: HTMLInputElement = null;
32
+ private passwordPolicyInfo: HTMLElement|null = null;
33
+ private passwordPolicySet: boolean = false;
34
+
35
+ public async connectedCallback(): Promise<void> {
36
+ if (this.element !== null) {
37
+ // Element is already initialized, which means the component has been rendered before. Nothing to do here.
38
+ return;
39
+ }
40
+
41
+ const recordFieldId = this.getAttribute('recordFieldId');
42
+ if (recordFieldId === null) {
43
+ return;
44
+ }
45
+
46
+ await DocumentService.ready();
47
+ this.element = this.querySelector<HTMLInputElement>(selector`#${recordFieldId}`);
48
+ if (!this.element) {
49
+ return;
50
+ }
51
+
52
+ this.passwordPolicyInfo = this.querySelector<HTMLElement>(selector`#password-policy-info-${this.element.id}`);
53
+ this.passwordPolicySet = (this.getAttribute('passwordPolicy') || '') !== '';
54
+
55
+ this.registerEventHandler();
56
+ }
57
+
58
+ private registerEventHandler(): void {
59
+ if (this.passwordPolicySet && this.passwordPolicyInfo !== null) {
60
+ this.element.addEventListener('focusin', (): void => {
61
+ this.passwordPolicyInfo.classList.remove('hidden');
62
+ });
63
+
64
+ this.element.addEventListener('focusout', (): void => {
65
+ this.passwordPolicyInfo.classList.add('hidden');
66
+ });
67
+ }
68
+ }
69
+ }
70
+
71
+ window.customElements.define('typo3-formengine-element-password', PasswordElement);