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,183 @@
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 Client from '@typo3/backend/storage/client';
15
+ import '@typo3/backend/input/clearable';
16
+ import DocumentService from '@typo3/core/document-service';
17
+ import DebounceEvent from '@typo3/core/event/debounce-event';
18
+ import RegularEvent from '@typo3/core/event/regular-event';
19
+ import Mark from 'mark.js';
20
+ import DomHelper from '@typo3/backend/utility/dom-helper';
21
+
22
+ /**
23
+ * Utility class to perform client side search on ul/li trees. This is used in various
24
+ * backend modules that show trees, especially the "Active PageTsConfig" and "Active TypoScript".
25
+ *
26
+ * This is an add-on to collapse-state-persister.ts: When a search is performed, this search
27
+ * result collapse/expand state is not persisted in local storage, so the state without search
28
+ * "comes back" when a search word is reset.
29
+ *
30
+ * @internal
31
+ */
32
+ class CollapseStateSearch {
33
+ private readonly searchValueSelector: string = '.t3js-collapse-search-term';
34
+ private searchField: HTMLInputElement;
35
+ private searchForm: HTMLFormElement;
36
+ private searchSessionKey: string;
37
+ private searchValue: string = '';
38
+ private treeContainers: NodeListOf<HTMLElement>;
39
+ private numberOfSearchMatchesContainer: NodeListOf<HTMLElement>;
40
+ private markInstances: Array<any> = [];
41
+
42
+ constructor() {
43
+ DocumentService.ready().then(() => {
44
+ this.treeContainers = document.querySelectorAll('.t3js-collapse-states-search-tree');
45
+ if (this.treeContainers.length === 0) {
46
+ return;
47
+ }
48
+ this.numberOfSearchMatchesContainer = document.querySelectorAll('.t3js-collapse-states-search-numberOfSearchMatches');
49
+ this.searchField = document.querySelector(this.searchValueSelector);
50
+ this.searchForm = this.searchField.closest('form');
51
+ this.searchSessionKey = this.searchField.dataset.persistCollapseSearchKey;
52
+ this.searchValue = Client.get(this.searchSessionKey) ?? '';
53
+
54
+ this.registerEvents();
55
+
56
+ for (let i = 0; i < this.treeContainers.length; i++) {
57
+ this.markInstances[i] = new Mark(this.treeContainers[i]);
58
+ }
59
+
60
+ if (this.searchValue !== '') {
61
+ this.searchField.value = this.searchValue;
62
+ // Trigger "keyup" event to update clearable status
63
+ this.searchField.dispatchEvent(new Event('keyup'));
64
+ this.searchForm.requestSubmit();
65
+ }
66
+ });
67
+ }
68
+
69
+ private registerEvents(): void {
70
+ this.searchField.clearable({
71
+ onClear: (input: HTMLInputElement): void => {
72
+ input.closest('form').requestSubmit();
73
+ },
74
+ });
75
+
76
+ new DebounceEvent('input', (): void => {
77
+ this.searchForm.requestSubmit();
78
+ }).bindTo(this.searchField);
79
+
80
+ new RegularEvent('submit', (e: SubmitEvent): void => {
81
+ e.preventDefault();
82
+ for (let i = 0; i < this.treeContainers.length; i++) {
83
+ this.filterTree(this.searchField.value, this.treeContainers[i], this.numberOfSearchMatchesContainer[i], this.markInstances[i]);
84
+ }
85
+ }).bindTo(this.searchForm);
86
+ }
87
+
88
+ private filterTree(term: string, treeContainer: HTMLElement, numberOfSearchMatchesContainer: HTMLElement, markInstance: any): void {
89
+ // Normalize search term
90
+ term = term.toLowerCase();
91
+
92
+ markInstance.unmark();
93
+ Client.set(this.searchSessionKey, term);
94
+ if (term.length < 3) {
95
+ numberOfSearchMatchesContainer.classList.add('hidden');
96
+ return;
97
+ }
98
+
99
+ const matchingCollapsibleIds = new Set();
100
+ const matchingNodes = [
101
+ ...this.findNodesByIdentifier(term, treeContainer),
102
+ ...this.findNodesByValue(term, treeContainer),
103
+ ...this.findNodesByComment(term, treeContainer),
104
+ ...this.findNodesByConstantSubstitution(term, treeContainer)
105
+ ];
106
+
107
+ numberOfSearchMatchesContainer.innerText = String(TYPO3.lang['collapse-state-search.numberOfSearchMatches']).replace('%s', String(matchingNodes.length));
108
+ numberOfSearchMatchesContainer.classList.remove('hidden');
109
+
110
+ matchingNodes.forEach((match: Element|null): void => {
111
+ if (match === null) {
112
+ return;
113
+ }
114
+
115
+ const collapsibleIdentifier = (match.parentElement.querySelector('[data-bs-toggle="collapse"]') as HTMLElement|null)?.dataset.bsTarget;
116
+ if (collapsibleIdentifier !== undefined) {
117
+ matchingCollapsibleIds.add(collapsibleIdentifier.substring(1));
118
+ }
119
+
120
+ const parentElements = DomHelper.parents(match, '.collapse');
121
+ for (const parentEl of parentElements) {
122
+ matchingCollapsibleIds.add(parentEl.id);
123
+ }
124
+ });
125
+
126
+ const allNodes = Array.from(treeContainer.querySelectorAll('.collapse')) as HTMLElement[];
127
+ for (const node of allNodes) {
128
+ const isExpanded: boolean = node.classList.contains('show');
129
+ const id: string = node.id;
130
+ if (matchingCollapsibleIds.has(id)) {
131
+ // We're not using BootstrapCollapse.getOrCreateInstance() since this is too slow when
132
+ // dealing with many elements like with System > Configuration with TCA tree.
133
+ if (!isExpanded) {
134
+ const toggle: HTMLElement = document.querySelector('[data-bs-target="#' + id + '"]');
135
+ toggle.classList.remove('collapsed');
136
+ toggle.setAttribute('aria-expanded', 'true');
137
+ node.classList.add('show');
138
+ }
139
+ } else {
140
+ if (isExpanded) {
141
+ const toggle: HTMLElement = document.querySelector('[data-bs-target="#' + id + '"]');
142
+ toggle.classList.add('collapsed');
143
+ toggle.setAttribute('aria-expanded', 'false');
144
+ node.classList.remove('show');
145
+ }
146
+ }
147
+ }
148
+
149
+ markInstance.mark(term, {
150
+ element: 'span',
151
+ className: 'text-highlight'
152
+ });
153
+ }
154
+
155
+ private findNodesByIdentifier(term: string, treeContainer: HTMLElement): Element[] {
156
+ return Array.from(treeContainer.querySelectorAll('.treelist-label')).filter((el: Element): boolean => {
157
+ return el.textContent.toLowerCase().includes(term);
158
+ });
159
+ }
160
+
161
+ private findNodesByValue(term: string, treeContainer: HTMLElement): Element[] {
162
+ const matchingValueNodes = Array.from(treeContainer.querySelectorAll('.treelist-value')).filter((el: Element): boolean => {
163
+ return el.textContent.toLowerCase().includes(term);
164
+ });
165
+ return matchingValueNodes.map((node: Element): Element => {
166
+ return node.previousElementSibling;
167
+ });
168
+ }
169
+
170
+ private findNodesByComment(term: string, treeContainer: HTMLElement): Element[] {
171
+ return Array.from(treeContainer.querySelectorAll('.treelist-comment')).filter((el: Element): boolean => {
172
+ return el.textContent.toLowerCase().includes(term);
173
+ });
174
+ }
175
+
176
+ private findNodesByConstantSubstitution(term: string, treeContainer: HTMLElement): Element[] {
177
+ return Array.from(treeContainer.querySelectorAll('.treelist-constant-substitution')).filter((el: Element): boolean => {
178
+ return el.textContent.toLowerCase().includes(term);
179
+ });
180
+ }
181
+ }
182
+
183
+ export default new CollapseStateSearch();
@@ -0,0 +1,91 @@
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
+ * Module: @typo3/backend/utility/dom-helper
16
+ *
17
+ * @internal
18
+ */
19
+ export default class DomHelper {
20
+ /**
21
+ * Get all parent elements matching the passed `selector`
22
+ */
23
+ public static parents(el: Element, selector: string): Element[] {
24
+ const parents = [];
25
+ let closest;
26
+ while ((closest = el.parentElement.closest(selector)) !== null) {
27
+ el = closest;
28
+ parents.push(closest);
29
+ }
30
+
31
+ return parents;
32
+ }
33
+
34
+ /**
35
+ * Get the next scrollable parent element
36
+ */
37
+ public static scrollableParent(element: Element) {
38
+ let parent = element.parentElement;
39
+
40
+ while (parent) {
41
+ const style = window.getComputedStyle(parent);
42
+ const overflowY = style.overflowY;
43
+
44
+ if (overflowY === 'auto' || overflowY === 'scroll') {
45
+ return parent;
46
+ }
47
+ parent = parent.parentElement;
48
+ }
49
+
50
+ return document.documentElement;
51
+ }
52
+
53
+ /**
54
+ * Get all next siblings the passed `target` element inside `el`
55
+ */
56
+ public static nextAll(target: Element): Element[] {
57
+ const nextSiblings = [];
58
+ let node = target.nextElementSibling;
59
+ while (node !== null) {
60
+ nextSiblings.push(node);
61
+ node = node.nextElementSibling;
62
+ }
63
+
64
+ return nextSiblings;
65
+ }
66
+
67
+ /**
68
+ * This is a wrapper for scrollIntoViewIfNeeded() that falls back to scrollIntoView() if the former
69
+ * is not available.
70
+ *
71
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoViewIfNeeded
72
+ */
73
+ public static scrollIntoViewIfNeeded(target: Element, smooth: boolean = false): void {
74
+ if (!smooth && 'scrollIntoViewIfNeeded' in target && typeof target.scrollIntoViewIfNeeded === 'function') {
75
+ target.scrollIntoViewIfNeeded(true);
76
+ } else {
77
+ const rect = target.getBoundingClientRect();
78
+ const isInViewport = rect.top >= 0
79
+ && rect.left >= 0
80
+ && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)
81
+ && rect.right <= (window.innerWidth || document.documentElement.clientWidth);
82
+ if (!isInViewport) {
83
+ if (smooth) {
84
+ target.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
85
+ } else {
86
+ target.scrollIntoView();
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
@@ -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 type { DragTooltipMetadata } from '@typo3/backend/drag-tooltip';
15
+
16
+ /**
17
+ * Module: @typo3/backend/utility/drag-drop-utility
18
+ *
19
+ * @internal
20
+ */
21
+ export default class DragDropUtility {
22
+ public static isCopyModifierFromEvent(event: DragEvent): boolean {
23
+ if (event.dataTransfer.dropEffect === 'copy') {
24
+ return true;
25
+ }
26
+
27
+ if (event.dataTransfer.dropEffect === 'move') {
28
+ return false;
29
+ }
30
+
31
+ return navigator.userAgent.includes('Mac')
32
+ ? (event.dataTransfer.effectAllowed === 'copy' || event.altKey)
33
+ : event.ctrlKey;
34
+ }
35
+
36
+ public static updateEventAndTooltipToReflectCopyMoveIntention(event: DragEvent): void {
37
+ const isCopy = DragDropUtility.isCopyModifierFromEvent(event);
38
+ event.dataTransfer.dropEffect = isCopy ? 'copy' : 'move';
39
+ top.document.dispatchEvent(
40
+ new CustomEvent<DragTooltipMetadata>('typo3:drag-tooltip:metadata-update', {
41
+ detail: {
42
+ statusIconIdentifier: isCopy ? 'actions-duplicate' : 'actions-move'
43
+ }
44
+ })
45
+ );
46
+ }
47
+ }
@@ -0,0 +1,45 @@
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
+ interface Message {
15
+ [key: string]: any;
16
+ actionName: string;
17
+ }
18
+
19
+ export class MessageUtility {
20
+ /**
21
+ * Generates an URL for usage in postMessage
22
+ *
23
+ * @return {string}
24
+ */
25
+ public static getOrigin(): string {
26
+ return window.origin;
27
+ }
28
+
29
+ /**
30
+ * @param {string} receivedOrigin
31
+ */
32
+ public static verifyOrigin(receivedOrigin: string): boolean {
33
+ const currentDomain = MessageUtility.getOrigin();
34
+
35
+ return currentDomain === receivedOrigin;
36
+ }
37
+
38
+ /**
39
+ * @param {*} message
40
+ * @param {Window} windowObject
41
+ */
42
+ public static send(message: Message, windowObject: Window = window): void {
43
+ windowObject.postMessage(message, MessageUtility.getOrigin());
44
+ }
45
+ }
@@ -0,0 +1,32 @@
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
+ * @internal
16
+ */
17
+ export function topLevelModuleImport(specifier: string): Promise<any> {
18
+ const event: CustomEvent<{ specifier: string; importPromise?: Promise<any>; }> = new CustomEvent('typo3:import-javascript-module', {
19
+ detail: {
20
+ specifier,
21
+ importPromise: null
22
+ }
23
+ });
24
+
25
+ top.document.dispatchEvent(event);
26
+
27
+ if (event.detail.importPromise) {
28
+ return event.detail.importPromise;
29
+ }
30
+
31
+ return Promise.reject(new Error('Top level did not respond with a promise.'));
32
+ }
@@ -0,0 +1,194 @@
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
+ * Module: @typo3/backend/utility
16
+ */
17
+ class Utility {
18
+ /**
19
+ * Splits a string by a given delimiter and trims the values
20
+ *
21
+ * @param {string} delimiter
22
+ * @param {string} string
23
+ * @return Array<string>
24
+ */
25
+ public static trimExplode(delimiter: string, string: string): Array<string> {
26
+ return string.split(delimiter).map((item: string) => item.trim()).filter((item: string) => item !== '');
27
+ }
28
+
29
+ /**
30
+ * Trims string items.
31
+ *
32
+ * @param {string[]|any[]} items
33
+ */
34
+ public static trimItems(items: any[]): any[] {
35
+ return items.map((item: any) => {
36
+ if (item instanceof String) {
37
+ return item.trim();
38
+ }
39
+ return item;
40
+ });
41
+ }
42
+
43
+ /**
44
+ * Splits a string by a given delimiter and converts the values to integer
45
+ *
46
+ * @param {string} delimiter
47
+ * @param {string} string
48
+ * @param {boolean} excludeZeroValues
49
+ * @return Array<number>
50
+ */
51
+ public static intExplode(delimiter: string, string: string, excludeZeroValues: boolean = false): Array<number> {
52
+ return string
53
+ .split(delimiter)
54
+ .map((item: string) => parseInt(item, 10))
55
+ .filter((item: number) => !isNaN(item) || excludeZeroValues && item === 0);
56
+ }
57
+
58
+ /**
59
+ * Checks if a given number is really a number
60
+ *
61
+ * Taken from:
62
+ * http://dl.dropbox.com/u/35146/js/tests/isNumber.html
63
+ *
64
+ * @param {number} value
65
+ * @returns {boolean}
66
+ */
67
+ public static isNumber(value: number): boolean {
68
+ return !isNaN(parseFloat(value.toString())) && isFinite(value);
69
+ }
70
+
71
+ /**
72
+ * Updates a parameter inside of given url
73
+ *
74
+ * @param {string} url
75
+ * @param {string} key
76
+ * @param {string} value
77
+ * @returns {string}
78
+ * @deprecated will be removed in TYPO3 v14
79
+ */
80
+ public static updateQueryStringParameter(url: string, key: string, value: string): string {
81
+ console.warn('Utility.updateQueryStringParameter() has been marked as deprecated and will be removed in TYPO3 v14.');
82
+
83
+ const re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');
84
+ const separator = url.includes('?') ? '&' : '?';
85
+
86
+ if (url.match(re)) {
87
+ return url.replace(re, '$1' + key + '=' + value + '$2');
88
+ }
89
+ return url + separator + key + '=' + value;
90
+ }
91
+
92
+ public static convertFormToObject(form: HTMLFormElement): { [key: string]: any } {
93
+ const obj: { [key: string]: any } = {};
94
+ form.querySelectorAll('input, select, textarea').forEach((element: HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement): void => {
95
+ const name = element.name;
96
+ const value = element.value;
97
+
98
+ if (name) {
99
+ if (element.tagName.toLowerCase() === 'input' && element.type == 'checkbox') {
100
+ const checkbox = element as HTMLInputElement;
101
+ if (obj[name] === undefined) {
102
+ obj[name] = [];
103
+ }
104
+ if (checkbox.checked){
105
+ obj[name].push(value);
106
+ }
107
+
108
+ }else{
109
+ obj[name] = value;
110
+ }
111
+ }
112
+ });
113
+
114
+ return obj;
115
+ }
116
+
117
+ /**
118
+ * Performs a deep merge of `source` into `target`.
119
+ * Mutates `target` only but not its objects and arrays.
120
+ *
121
+ * @author inspired by [jhildenbiddle](https://stackoverflow.com/a/48218209/4828813).
122
+ */
123
+ public static mergeDeep(...objects: object[]) {
124
+ type IndexedObject = { [key: string]: any };
125
+ const isObject = (obj: any) => {
126
+ return obj && typeof obj === 'object';
127
+ };
128
+
129
+ return objects.reduce((prev: IndexedObject, obj: IndexedObject): IndexedObject => {
130
+ Object.keys(obj).forEach((key: string): void => {
131
+ const pVal = prev[key];
132
+ const oVal = obj[key];
133
+
134
+ if (Array.isArray(pVal) && Array.isArray(oVal)) {
135
+ prev[key] = pVal.concat(...oVal);
136
+ }
137
+ else if (isObject(pVal) && isObject(oVal)) {
138
+ prev[key] = Utility.mergeDeep(pVal, oVal);
139
+ }
140
+ else {
141
+ prev[key] = oVal;
142
+ }
143
+ });
144
+
145
+ return prev;
146
+ }, {});
147
+ }
148
+
149
+ /**
150
+ * Checks if the origin, pathnames and query string are equal (ignoring different fragments),
151
+ * and therefore point to the same server side resource.
152
+ *
153
+ * @param {string|null} url1
154
+ * @param {string|null} url2
155
+ *
156
+ * @returns {boolean}
157
+ */
158
+ public static urlsPointToSameServerSideResource(url1: null|string, url2: null|string): boolean {
159
+ if (!url1 || !url2) {
160
+ return false;
161
+ }
162
+
163
+ const currentWindowUrlOrigin = window.location.origin;
164
+
165
+ try {
166
+ const uriObject1 = new URL(url1, Utility.isValidUrl(url1) ? undefined : currentWindowUrlOrigin);
167
+ const uriObject2 = new URL(url2, Utility.isValidUrl(url2) ? undefined : currentWindowUrlOrigin);
168
+ const resource1 = uriObject1.origin + uriObject1.pathname + uriObject1.search;
169
+ const resource2 = uriObject2.origin + uriObject2.pathname + uriObject2.search;
170
+
171
+ return resource1 === resource2;
172
+ } catch {
173
+ return false;
174
+ }
175
+ }
176
+
177
+
178
+ /**
179
+ * Checks, if the given URL is valid.
180
+ *
181
+ * @param {null|string} url
182
+ * @private
183
+ */
184
+ private static isValidUrl(url: null|string): boolean {
185
+ try {
186
+ new URL(url);
187
+ return true;
188
+ } catch {
189
+ return false;
190
+ }
191
+ }
192
+ }
193
+
194
+ export default Utility;
@@ -0,0 +1,22 @@
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 ConsumerScope from '../event/consumer-scope';
15
+
16
+ export abstract class AbstractContainer {
17
+ protected readonly consumerScope: any = ConsumerScope;
18
+
19
+ constructor(consumerScope: any) {
20
+ this.consumerScope = consumerScope;
21
+ }
22
+ }