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,107 @@
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 RegularEvent from '@typo3/core/event/regular-event';
15
+ import DocumentService from '@typo3/core/document-service';
16
+ import AjaxDataHandler from '@typo3/backend/ajax-data-handler';
17
+ import Modal from '@typo3/backend/modal';
18
+ import Notification from '@typo3/backend/notification';
19
+ import ImmediateAction from '@typo3/backend/action-button/immediate-action';
20
+ import { lll } from '@typo3/core/lit-helper';
21
+ import Viewport from '@typo3/backend/viewport';
22
+
23
+ export class MoveContentElement {
24
+ public constructor() {
25
+ this.initialize();
26
+ }
27
+
28
+ private async initialize(): Promise<void> {
29
+ await DocumentService.ready();
30
+ this.registerEvents(document.querySelector('.element-browser-body') as HTMLElement);
31
+ }
32
+
33
+ private registerEvents(container: HTMLElement): void {
34
+ new RegularEvent('change', async (e: Event): Promise<void> => {
35
+ const recordTitle = (document.querySelector('#elementRecordTitle') as HTMLInputElement).value;
36
+ const url = new URL(window.location.href);
37
+ const uid = url.searchParams.get('uid');
38
+ const headline = document.querySelector('h2') as HTMLHeadingElement;
39
+ if (headline) {
40
+ headline.innerText = lll('headline.' + ((e.target as HTMLInputElement).checked ? 'copy' : 'move'), recordTitle, uid);
41
+ }
42
+
43
+ const buttonLabel = (e.target as HTMLInputElement).checked
44
+ ? lll('copyElementToHere')
45
+ : lll('moveElementToHere');
46
+
47
+ document.querySelectorAll('[data-action="paste"]').forEach((button: HTMLButtonElement): void => {
48
+ button.querySelector('span.t3js-button-label').textContent = buttonLabel;
49
+ });
50
+ }).delegateTo(container, '#makeCopy');
51
+
52
+ new RegularEvent('click', async (e: Event, actionElement: HTMLElement): Promise<void> => {
53
+ const modeCheckbox = (document.querySelector('#makeCopy') as HTMLInputElement);
54
+ const recordTitle = (document.querySelector('#elementRecordTitle') as HTMLInputElement).value;
55
+ const targetPageTitle = (document.querySelector('#pageRecordTitle') as HTMLInputElement).value;
56
+ const pageUid = (document.querySelector('#pageUid') as HTMLInputElement).value;
57
+ const url = new URL(window.location.href);
58
+ const uid = url.searchParams.get('uid');
59
+ const returnUrl = new URL(url.searchParams.get('returnUrl'), window.origin);
60
+
61
+ const isCopyAction = modeCheckbox.checked;
62
+ const action = isCopyAction ? 'copy' : 'move';
63
+ const parameters: { cmd: object, data?: object } = {
64
+ cmd: {
65
+ tt_content: {
66
+ [uid]: {
67
+ [action]: actionElement.dataset.position
68
+ }
69
+ }
70
+ }
71
+ };
72
+
73
+ if (actionElement.dataset.colpos !== undefined) {
74
+ parameters.data = {
75
+ tt_content: {
76
+ [uid]: {
77
+ colPos: actionElement.dataset.colpos
78
+ }
79
+ }
80
+ };
81
+ }
82
+ AjaxDataHandler.process(parameters).then((): void => {
83
+ Modal.dismiss();
84
+
85
+ Notification.success(
86
+ lll(isCopyAction ? 'moveElement.notification.elementCopied.title' : 'moveElement.notification.elementMoved.title'),
87
+ lll(isCopyAction ? 'moveElement.notification.elementCopied.message' : 'moveElement.notification.elementMoved.message', recordTitle),
88
+ 10,
89
+ [
90
+ {
91
+ label: lll('moveElement.notification.elementPasted.action.dismiss'),
92
+ },
93
+ {
94
+ label: lll('moveElement.notification.elementPasted.action.open', targetPageTitle),
95
+ action: new ImmediateAction((): void => {
96
+ returnUrl.searchParams.set('id', pageUid);
97
+ Viewport.ContentContainer.setUrl(returnUrl.toString());
98
+ })
99
+ }
100
+ ]
101
+ );
102
+
103
+ Viewport.ContentContainer.setUrl(returnUrl.toString());
104
+ });
105
+ }).delegateTo(container, '[data-action="paste"]');
106
+ }
107
+ }
@@ -0,0 +1,74 @@
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 RegularEvent from '@typo3/core/event/regular-event';
15
+ import DocumentService from '@typo3/core/document-service';
16
+ import AjaxDataHandler from '@typo3/backend/ajax-data-handler';
17
+ import Modal from '@typo3/backend/modal';
18
+ import ModuleMenu from '@typo3/backend/module-menu';
19
+ import Notification from '@typo3/backend/notification';
20
+ import ImmediateAction from '@typo3/backend/action-button/immediate-action';
21
+ import { lll } from '@typo3/core/lit-helper';
22
+
23
+ export class MovePage {
24
+ public constructor() {
25
+ this.initialize();
26
+ }
27
+
28
+ private async initialize(): Promise<void> {
29
+ await DocumentService.ready();
30
+ this.registerEvents(document.querySelector('.element-browser-body') as HTMLElement);
31
+ }
32
+
33
+ private registerEvents(container: HTMLElement): void {
34
+ const recordTitle = (document.querySelector('#elementRecordTitle') as HTMLInputElement).value;
35
+ const url = new URL(window.location.href);
36
+
37
+ new RegularEvent('click', async (e: Event, actionElement: HTMLElement): Promise<void> => {
38
+ const isCopyAction = (document.querySelector('#makeCopy') as HTMLInputElement).checked;
39
+ const action = isCopyAction ? 'copy' : 'move';
40
+ const parameters = {
41
+ cmd: {
42
+ [url.searchParams.get('table')]: {
43
+ [url.searchParams.get('uid')]: {
44
+ [action]: actionElement.dataset.position
45
+ }
46
+ }
47
+ }
48
+ };
49
+ AjaxDataHandler.process(parameters).then((): void => {
50
+ Modal.dismiss();
51
+
52
+ Notification.success(
53
+ lll(isCopyAction ? 'movePage.notification.pageCopied.title' : 'movePage.notification.pageMoved.title'),
54
+ lll(isCopyAction ? 'movePage.notification.pageCopied.message' : 'movePage.notification.pageMoved.message', recordTitle),
55
+ 10,
56
+ [
57
+ {
58
+ label: lll('movePage.notification.pagePasted.action.dismiss'),
59
+ },
60
+ {
61
+ label: lll('movePage.notification.pagePasted.action.open', recordTitle),
62
+ action: new ImmediateAction((): void => {
63
+ ModuleMenu.App.showModule('web_list', 'id=' + url.searchParams.get('uid'));
64
+ })
65
+ }
66
+ ]
67
+ );
68
+
69
+ top.document.dispatchEvent(new CustomEvent('typo3:pagetree:refresh'));
70
+ ModuleMenu.App.showModule('web_list', 'id=' + url.searchParams.get('expandPage'));
71
+ });
72
+ }).delegateTo(container, '[data-action="paste"]');
73
+ }
74
+ }
@@ -0,0 +1,331 @@
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 { SeverityEnum } from './enum/severity';
15
+ import $ from 'jquery';
16
+ import { Carousel } from 'bootstrap';
17
+ import { default as Modal, type ModalElement } from './modal';
18
+ import Severity from './severity';
19
+ import Icons from './icons';
20
+ import { topLevelModuleImport } from './utility/top-level-module-import';
21
+
22
+ type SlideCallback = ($slide: JQuery, settings: WizardSettings, identifier: string) => void;
23
+
24
+ interface WizardSettings {
25
+ [key: string]: any;
26
+ }
27
+
28
+ interface WizardSetup {
29
+ slides: Array<any>;
30
+ settings: WizardSettings;
31
+ forceSelection: boolean;
32
+ $carousel: JQuery;
33
+ carousel: Carousel;
34
+ }
35
+
36
+ interface Slide {
37
+ identifier: string;
38
+ title: string;
39
+ content: string|JQuery;
40
+ severity: SeverityEnum;
41
+ callback?: SlideCallback;
42
+ }
43
+
44
+ /**
45
+ * Module: @typo3/backend/wizard
46
+ * @exports @typo3/backend/wizard
47
+ * @deprecated will be removed in TYPO3 14.0
48
+ */
49
+ class Wizard {
50
+ private setup: WizardSetup;
51
+ private readonly originalSetup: WizardSetup;
52
+
53
+ constructor() {
54
+ console.warn(
55
+ 'The module `@typo3/backend/wizard.js` has been marked as deprecated and will be removed in TYPO3 v14.0. '
56
+ + 'Consider migrating to `@typo3/backend/multi-step-wizard.js`.'
57
+ );
58
+
59
+ this.setup = {
60
+ slides: [],
61
+ settings: {},
62
+ forceSelection: true,
63
+ $carousel: null,
64
+ carousel: null,
65
+ };
66
+ this.originalSetup = $.extend(true, {}, this.setup);
67
+ }
68
+
69
+ public set(key: string, value: any): Wizard {
70
+ this.setup.settings[key] = value;
71
+ return this;
72
+ }
73
+
74
+ public addSlide(
75
+ identifier: string,
76
+ title: string,
77
+ content: string = '',
78
+ severity: SeverityEnum = SeverityEnum.notice,
79
+ callback?: SlideCallback,
80
+ ): Wizard {
81
+ const slide: Slide = {
82
+ identifier: identifier,
83
+ title: title,
84
+ content: content,
85
+ severity: severity,
86
+ callback: callback,
87
+ };
88
+ this.setup.slides.push(slide);
89
+ return this;
90
+ }
91
+
92
+ public addFinalProcessingSlide(callback?: SlideCallback): Promise<void> {
93
+ if (!callback) {
94
+ callback = (): void => {
95
+ this.dismiss();
96
+ };
97
+ }
98
+
99
+ return Icons.getIcon('spinner-circle', Icons.sizes.large, null, null).then((markup: string) => {
100
+ const $processingSlide = $('<div />', { class: 'text-center' }).append(markup);
101
+ this.addSlide(
102
+ 'final-processing-slide', top.TYPO3.lang['wizard.processing.title'],
103
+ $processingSlide[0].outerHTML,
104
+ Severity.notice,
105
+ callback,
106
+ );
107
+ });
108
+ }
109
+
110
+ public show(): void {
111
+ const $slides = this.generateSlides();
112
+ const firstSlide = this.setup.slides[0];
113
+
114
+ Modal.advanced({
115
+ title: firstSlide.title,
116
+ content: $slides,
117
+ severity: firstSlide.severity,
118
+ staticBackdrop: true,
119
+ buttons: [{
120
+ text: top.TYPO3.lang['wizard.button.cancel'],
121
+ active: true,
122
+ btnClass: 'btn-default',
123
+ name: 'cancel',
124
+ trigger: (): void => {
125
+ this.getComponent().trigger('wizard-dismiss');
126
+ },
127
+ }, {
128
+ text: top.TYPO3.lang['wizard.button.next'],
129
+ btnClass: 'btn-primary',
130
+ name: 'next',
131
+ }],
132
+ callback: (modal: ModalElement): void => {
133
+ topLevelModuleImport('@typo3/backend/element/progress-bar-element.js').then((): void => {
134
+ this.setup.carousel = new Carousel(modal.querySelector('.carousel'));
135
+ this.addProgressBar();
136
+ this.initializeEvents(modal);
137
+ });
138
+ }
139
+ });
140
+
141
+ if (this.setup.forceSelection) {
142
+ this.lockNextStep();
143
+ }
144
+
145
+ this.getComponent().on('wizard-visible', (): void => {
146
+ this.runSlideCallback(firstSlide, this.setup.$carousel.find('.carousel-item').first());
147
+ }).on('wizard-dismissed', (): void => {
148
+ this.setup = $.extend(true, {}, this.originalSetup);
149
+ });
150
+ }
151
+
152
+ public getComponent(): JQuery {
153
+ if (this.setup.$carousel === null) {
154
+ this.generateSlides();
155
+ }
156
+ return this.setup.$carousel;
157
+ }
158
+
159
+ public dismiss(): void {
160
+ Modal.dismiss();
161
+ }
162
+
163
+ public lockNextStep(): JQuery {
164
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="next"]');
165
+ $button.prop('disabled', true);
166
+ return $button;
167
+ }
168
+
169
+ public unlockNextStep(): JQuery {
170
+ const $button = this.setup.$carousel.closest('.modal').find('button[name="next"]');
171
+ $button.prop('disabled', false);
172
+ return $button;
173
+ }
174
+
175
+ public setForceSelection(force: boolean): void {
176
+ this.setup.forceSelection = force;
177
+ }
178
+
179
+ private initializeEvents(modal: ModalElement): void {
180
+ const $modal = this.setup.$carousel.closest('.modal');
181
+ const $modalTitle = $modal.find('.modal-title');
182
+ const $modalFooter = $modal.find('.modal-footer');
183
+ const $nextButton = $modalFooter.find('button[name="next"]');
184
+
185
+ $nextButton.on('click', (): void => {
186
+ this.setup.carousel.next();
187
+ });
188
+
189
+ this.setup.$carousel.get(0).addEventListener('slide.bs.carousel', (): void => {
190
+ const nextSlideNumber = this.setup.$carousel.data('currentSlide') + 1;
191
+ const currentIndex = this.setup.$carousel.data('currentIndex') + 1;
192
+
193
+ $modalTitle.text(this.setup.slides[currentIndex].title);
194
+
195
+ this.setup.$carousel.data('currentSlide', nextSlideNumber);
196
+ this.setup.$carousel.data('currentIndex', currentIndex);
197
+
198
+ if (nextSlideNumber >= this.setup.$carousel.data('realSlideCount')) {
199
+ // Point of no return - hide modal footer disable any closing ability
200
+ $modal.find('.modal-header .close').remove();
201
+ $modalFooter.slideUp();
202
+ } else {
203
+ const progressBar = $modalFooter.find('typo3-backend-progress-bar');
204
+ progressBar.attr('value', currentIndex);
205
+ progressBar.attr('label', top.TYPO3.lang['wizard.progress']
206
+ .replace('{0}', nextSlideNumber)
207
+ .replace('{1}', this.setup.$carousel.data('slideCount'))
208
+ );
209
+ }
210
+
211
+ $modal
212
+ .removeClass('modal-severity-' + Severity.getCssClass(this.setup.slides[currentIndex - 1].severity))
213
+ .addClass('modal-severity-' + Severity.getCssClass(this.setup.slides[currentIndex].severity));
214
+ });
215
+ this.setup.$carousel.get(0).addEventListener('slid.bs.carousel', (evt: Event & Carousel.Event): void => {
216
+ const currentIndex = this.setup.$carousel.data('currentIndex');
217
+ const slide = this.setup.slides[currentIndex];
218
+
219
+ this.runSlideCallback(slide, $(evt.relatedTarget));
220
+
221
+ if (this.setup.forceSelection) {
222
+ this.lockNextStep();
223
+ }
224
+ });
225
+
226
+ /**
227
+ * Custom event, closes the wizard
228
+ */
229
+ const cmp = this.getComponent();
230
+ cmp.on('wizard-dismiss', this.dismiss);
231
+
232
+ modal.addEventListener('typo3-modal-hidden', (): void => {
233
+ cmp.trigger('wizard-dismissed');
234
+ });
235
+ modal.addEventListener('typo3-modal-shown', (): void => {
236
+ cmp.trigger('wizard-visible');
237
+ });
238
+ }
239
+
240
+ private runSlideCallback(slide: Slide, $slide: JQuery): void {
241
+ if (typeof slide.callback === 'function') {
242
+ slide.callback($slide, this.setup.settings, slide.identifier);
243
+ }
244
+ }
245
+
246
+ private addProgressBar(): void {
247
+ const realSlideCount = this.setup.$carousel.find('.carousel-item').length;
248
+ const slideCount = Math.max(1, realSlideCount);
249
+ const initialStep = Math.round(100 / slideCount);
250
+ const $modal = this.setup.$carousel.closest('.modal');
251
+ const $modalFooter = $modal.find('.modal-footer');
252
+
253
+ this.setup.$carousel
254
+ .data('initialStep', initialStep)
255
+ .data('slideCount', slideCount)
256
+ .data('realSlideCount', realSlideCount)
257
+ .data('currentIndex', 0)
258
+ .data('currentSlide', 1);
259
+
260
+ // Append progress bar to modal footer
261
+ if (slideCount > 1) {
262
+ const progressBar = document.createElement('typo3-backend-progress-bar');
263
+ progressBar.value = 0;
264
+ progressBar.max = slideCount - 1; // progress is index-based
265
+ progressBar.label = top.TYPO3.lang['wizard.progress']
266
+ .replace('{0}', '1')
267
+ .replace('{1}', slideCount.toString());
268
+ $modalFooter.prepend(progressBar);
269
+ }
270
+ }
271
+
272
+ private generateSlides(): JQuery {
273
+ // Check whether the slides were already generated
274
+ if (this.setup.$carousel !== null) {
275
+ return this.setup.$carousel;
276
+ }
277
+
278
+ let slides = '<div class="carousel slide" data-bs-ride="false">'
279
+ + '<div class="carousel-inner" role="listbox">';
280
+
281
+ for (const currentSlide of Object.values(this.setup.slides)) {
282
+ let slideContent = currentSlide.content;
283
+
284
+ if (typeof slideContent === 'object') {
285
+ slideContent = slideContent.html();
286
+ }
287
+ slides += '<div class="carousel-item" data-bs-slide="' + currentSlide.identifier + '">' + slideContent + '</div>';
288
+ }
289
+
290
+ slides += '</div></div>';
291
+
292
+ this.setup.$carousel = $(slides);
293
+ this.setup.$carousel.find('.carousel-item').first().addClass('active');
294
+
295
+ return this.setup.$carousel;
296
+ }
297
+ }
298
+
299
+ let wizardObject: Wizard;
300
+ try {
301
+ // fetch from opening window
302
+ if (window.opener && window.opener.TYPO3 && window.opener.TYPO3.Wizard) {
303
+ wizardObject = window.opener.TYPO3.Wizard;
304
+ }
305
+
306
+ // fetch from parent
307
+ if (parent && parent.window.TYPO3 && parent.window.TYPO3.Wizard) {
308
+ wizardObject = parent.window.TYPO3.Wizard;
309
+ }
310
+
311
+ // fetch object from outer frame
312
+ if (top && top.TYPO3 && top.TYPO3.Wizard) {
313
+ wizardObject = top.TYPO3.Wizard;
314
+ }
315
+ } catch {
316
+ // This only happens if the opener, parent or top is some other url (eg a local file)
317
+ // which loaded the current window. Then the browser's cross domain policy jumps in
318
+ // and raises an exception.
319
+ // For this case we are safe and we can create our global object below.
320
+ }
321
+
322
+ if (!wizardObject) {
323
+ wizardObject = new Wizard();
324
+
325
+ // attach to global frame
326
+ if (typeof TYPO3 !== 'undefined') {
327
+ TYPO3.Wizard = wizardObject;
328
+ }
329
+ }
330
+
331
+ export default wizardObject;
@@ -0,0 +1,88 @@
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 Modal from '@typo3/backend/modal';
15
+ import DocumentService from '@typo3/core/document-service';
16
+ import DateTimePicker from '@typo3/backend/date-time-picker';
17
+ import '@typo3/backend/input/clearable';
18
+ import { MessageUtility } from '@typo3/backend/utility/message-utility';
19
+
20
+ /**
21
+ * Module: @typo3/belog/backend-log
22
+ * JavaScript for backend log
23
+ * @exports @typo3/belog/backend-log
24
+ */
25
+ class BackendLog {
26
+ private clearableElements: NodeListOf<HTMLInputElement> = null;
27
+ private dateTimePickerElements: NodeListOf<HTMLInputElement> = null;
28
+ private elementBrowserElements: NodeListOf<HTMLAnchorElement> = null;
29
+
30
+ constructor() {
31
+ DocumentService.ready().then((): void => {
32
+ this.clearableElements = document.querySelectorAll('.t3js-clearable') as NodeListOf<HTMLInputElement>;
33
+ this.dateTimePickerElements = document.querySelectorAll('.t3js-datetimepicker');
34
+ this.elementBrowserElements = document.querySelectorAll('.t3js-element-browser');
35
+ this.initializeClearableElements();
36
+ this.initializeDateTimePickerElements();
37
+ this.initializeElementBrowserElements();
38
+ this.initializeElementBrowserEventListener();
39
+ });
40
+ }
41
+
42
+ private initializeClearableElements(): void {
43
+ this.clearableElements.forEach(
44
+ (clearableField) => clearableField.clearable()
45
+ );
46
+ }
47
+
48
+ private initializeDateTimePickerElements(): void {
49
+ this.dateTimePickerElements.forEach(
50
+ (dateTimePickerElement: HTMLInputElement) => DateTimePicker.initialize(dateTimePickerElement)
51
+ );
52
+ }
53
+
54
+ private initializeElementBrowserElements(): void {
55
+ this.elementBrowserElements.forEach((element: HTMLAnchorElement): void => {
56
+ const triggerField = <HTMLInputElement>document.getElementById(element.dataset.triggerFor);
57
+ element.dataset.params = triggerField.name + '|||pages';
58
+ element.addEventListener('click', (event: Event): void => {
59
+ event.preventDefault();
60
+ const target = <HTMLAnchorElement>event.currentTarget;
61
+ Modal.advanced({
62
+ type: Modal.types.iframe,
63
+ content: target.dataset.target + '&mode=' + target.dataset.mode + '&bparams=' + target.dataset.params,
64
+ size: Modal.sizes.large
65
+ });
66
+ });
67
+ });
68
+ }
69
+
70
+ private initializeElementBrowserEventListener(): void {
71
+ window.addEventListener('message', (e: MessageEvent): void => {
72
+ if (!MessageUtility.verifyOrigin(e.origin)
73
+ || e.data.actionName !== 'typo3:elementBrowser:elementAdded'
74
+ || typeof e.data.fieldName !== 'string'
75
+ || typeof e.data.value !== 'string'
76
+ ) {
77
+ return;
78
+ }
79
+
80
+ const field = <HTMLInputElement>document.querySelector('input[name="' + e.data.fieldName + '"]');
81
+ if (field) {
82
+ field.value = e.data.value.split('_').pop();
83
+ }
84
+ });
85
+ }
86
+ }
87
+
88
+ export default new BackendLog();
@@ -0,0 +1,40 @@
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 RegularEvent from '@typo3/core/event/regular-event';
15
+ import DocumentService from '@typo3/core/document-service';
16
+
17
+ /**
18
+ * Module: @typo3/beuser/backend-user-listing
19
+ * JavaScript for backend user listing
20
+ * @exports @typo3/beuser/backend-user-listing
21
+ */
22
+ class BackendUserListing {
23
+ private readonly searchField: HTMLInputElement = document.querySelector('#tx_Beuser_username');
24
+ private readonly activeSearch: boolean = this.searchField ? (this.searchField.value !== '') : false;
25
+
26
+ constructor() {
27
+ DocumentService.ready().then((): void => {
28
+ // Respond to browser related clearable event
29
+ if (this.searchField) {
30
+ new RegularEvent('search', (): void => {
31
+ if (this.searchField.value === '' && this.activeSearch) {
32
+ this.searchField.closest('form').submit();
33
+ }
34
+ }).bindTo(this.searchField);
35
+ }
36
+ });
37
+ }
38
+ }
39
+
40
+ export default new BackendUserListing();