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,79 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { customElement, property } from 'lit/decorators';
15
+ import { PseudoButtonLitElement } from '@typo3/backend/element/pseudo-button';
16
+ import Notification from '@typo3/backend/notification';
17
+ import { lll } from '@typo3/core/lit-helper';
18
+
19
+ export function copyToClipboard(text: string): void {
20
+ if (!text.length) {
21
+ console.warn('No text for copy to clipboard given.');
22
+ Notification.error(lll('copyToClipboard.error'));
23
+ return;
24
+ }
25
+ if (navigator.clipboard) {
26
+ navigator.clipboard.writeText(text).then((): void => {
27
+ Notification.success(lll('copyToClipboard.success'), '', 1);
28
+ }).catch((): void => {
29
+ Notification.error(lll('copyToClipboard.error'));
30
+ });
31
+ } else {
32
+ const textarea = document.createElement('textarea');
33
+ textarea.value = text;
34
+ document.body.appendChild(textarea);
35
+ textarea.focus();
36
+ textarea.select();
37
+ try {
38
+ if (document.execCommand('copy')) {
39
+ Notification.success(lll('copyToClipboard.success'), '', 1);
40
+ } else {
41
+ Notification.error(lll('copyToClipboard.error'));
42
+ }
43
+ } catch {
44
+ Notification.error(lll('copyToClipboard.error'));
45
+ }
46
+ document.body.removeChild(textarea);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Module: @typo3/backend/copy-to-clipboard
52
+ *
53
+ * This module can be used to copy a given text to
54
+ * the operating systems' clipboard.
55
+ *
56
+ * @example
57
+ * <typo3-copy-to-clipboard text="some text">
58
+ * Copy to clipboard
59
+ * </typo3-copy-to-clipboard>
60
+ */
61
+ @customElement('typo3-copy-to-clipboard')
62
+ export class CopyToClipboard extends PseudoButtonLitElement {
63
+ @property({ type: String }) text: string;
64
+
65
+ protected override buttonActivated(): void {
66
+ if (typeof this.text !== 'string') {
67
+ console.warn('No text for copy to clipboard given.');
68
+ Notification.error(lll('copyToClipboard.error'));
69
+ return;
70
+ }
71
+ copyToClipboard(this.text);
72
+ }
73
+ }
74
+
75
+ declare global {
76
+ interface HTMLElementTagNameMap {
77
+ 'typo3-copy-to-clipboard': CopyToClipboard;
78
+ }
79
+ }
@@ -0,0 +1,270 @@
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 flatpickr from 'flatpickr';
15
+ import ShortcutButtonsPlugin from 'shortcut-buttons-flatpickr';
16
+ import { DateTime } from 'luxon';
17
+ import ThrottleEvent from '@typo3/core/event/throttle-event';
18
+ import type { PostValidationEvent } from '@typo3/backend/form-engine-validation';
19
+ import '@typo3/backend/input/clearable';
20
+
21
+ const ISO8601_UTC = 'ISO8601_UTC';
22
+
23
+ interface FlatpickrInputElement extends HTMLInputElement {
24
+ _flatpickr: flatpickr.Instance;
25
+ }
26
+
27
+ /**
28
+ * Module: @typo3/backend/date-time-picker
29
+ * contains all logic for the date time picker used in FormEngine, EXT:belog and EXT:scheduler
30
+ */
31
+ class DateTimePicker {
32
+ private readonly format: string = (typeof opener?.top?.TYPO3 !== 'undefined' ? opener.top : top).TYPO3.settings.DateTimePicker.DateFormat;
33
+
34
+ /**
35
+ * initialize date fields to add a datepicker to each field
36
+ * note: this function can be called multiple times (e.g. after AJAX requests) because it only
37
+ * applies to fields which haven't been used yet.
38
+ */
39
+ public initialize(element: HTMLInputElement): void {
40
+ if (!(element instanceof HTMLInputElement) || typeof element.dataset.datepickerInitialized !== 'undefined') {
41
+ return;
42
+ }
43
+
44
+ let userLocale = document.documentElement.lang;
45
+ if (!userLocale || userLocale === 'en') {
46
+ // flatpickr's English localization is "default"
47
+ userLocale = 'default';
48
+ } else if (userLocale === 'ch') {
49
+ // Fix our made up locale "ch"
50
+ userLocale = 'zh';
51
+ }
52
+
53
+ element.dataset.datepickerInitialized = '1';
54
+ import('flatpickr/dist/l10n').then((): void => {
55
+ this.initializeField(element, userLocale as flatpickr.Options.LocaleKey);
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Initialize a single field
61
+ */
62
+ private initializeField(inputElement: HTMLInputElement, locale: flatpickr.Options.LocaleKey): void {
63
+ const scrollEvent = this.getScrollEvent();
64
+ const options = this.getDateOptions(inputElement);
65
+ options.locale = locale;
66
+ options.onOpen = [
67
+ (): void => {
68
+ scrollEvent.bindTo(document.querySelector('.t3js-module-body'));
69
+ }
70
+ ];
71
+ options.onClose = (): void => {
72
+ scrollEvent.release();
73
+ };
74
+
75
+ // initialize the date time picker on this element
76
+ const dateTimePicker = flatpickr(inputElement, options);
77
+ if (dateTimePicker.altInput instanceof HTMLInputElement) {
78
+ // Explicitly handle clearing input (invoked by clearable control) if altInput is available
79
+ dateTimePicker.input.addEventListener('typo3:internal:clear', (): void => {
80
+ // @todo The `typo3:internal:clear` event is a hack and must fall again
81
+ dateTimePicker.clear();
82
+ });
83
+ }
84
+
85
+ dateTimePicker._input.addEventListener('change', (e: Event): void => {
86
+ // Update selected date in picker after manually entering a value
87
+ const value = (e.target as HTMLInputElement).value;
88
+ const parsedDate: Date = dateTimePicker.parseDate(value, dateTimePicker.config.altFormat);
89
+
90
+ dateTimePicker.setDate(parsedDate, true);
91
+ });
92
+
93
+ dateTimePicker._input.addEventListener('keyup', (e: KeyboardEvent): void => {
94
+ if (e.key === 'Escape') {
95
+ dateTimePicker.close();
96
+ }
97
+ });
98
+ }
99
+
100
+ /**
101
+ * Due to some whack CSS the scrollPosition of the document stays 0 which renders a stuck date time picker.
102
+ * Because of this the position is recalculated on scrolling `.t3js-module-body`.
103
+ *
104
+ * @return {ThrottleEvent}
105
+ */
106
+ private getScrollEvent(): ThrottleEvent {
107
+ return new ThrottleEvent('scroll', (): void => {
108
+ const activeFlatpickrElement = document.querySelector('.flatpickr-input.active') as FlatpickrInputElement;
109
+ if (activeFlatpickrElement === null) {
110
+ return;
111
+ }
112
+
113
+ const bounds = activeFlatpickrElement.getBoundingClientRect();
114
+ const additionalOffset = 2;
115
+ const calendarHeight = activeFlatpickrElement._flatpickr.calendarContainer.offsetHeight;
116
+ const distanceFromBottom = window.innerHeight - bounds.bottom;
117
+ const showOnTop = distanceFromBottom < calendarHeight && bounds.top > calendarHeight;
118
+
119
+ let newPosition;
120
+ let arrowClass;
121
+ if (showOnTop) {
122
+ newPosition = bounds.y - calendarHeight - additionalOffset;
123
+ arrowClass = 'arrowBottom';
124
+ } else {
125
+ newPosition = bounds.y + bounds.height + additionalOffset;
126
+ arrowClass = 'arrowTop';
127
+ }
128
+
129
+ activeFlatpickrElement._flatpickr.calendarContainer.style.top = newPosition + 'px';
130
+ activeFlatpickrElement._flatpickr.calendarContainer.classList.remove('arrowBottom', 'arrowTop');
131
+ activeFlatpickrElement._flatpickr.calendarContainer.classList.add(arrowClass);
132
+ }, 15);
133
+ }
134
+
135
+ /**
136
+ * Initialize a single field
137
+ *
138
+ * @param {HTMLInputElement} inputElement
139
+ */
140
+ private getDateOptions(inputElement: HTMLInputElement): flatpickr.Options.Options {
141
+
142
+ const format = this.format;
143
+ const type = inputElement.dataset.dateType;
144
+ const now = new Date();
145
+ const options: flatpickr.Options.Options = {
146
+ altFormat: '',
147
+ allowInput: true,
148
+ altInput: true,
149
+ ariaDateFormat: 'DDDD',
150
+ // We configure a dummy dateFormat token and use luxon parsing/formatting
151
+ // internally, as flatpickr cannot be configured to ignore timezones
152
+ // (in order to behave similar to <input type=datetime-local>)
153
+ dateFormat: ISO8601_UTC,
154
+ defaultHour: now.getHours(),
155
+ defaultMinute: now.getMinutes(),
156
+ enableSeconds: false,
157
+ enableTime: false,
158
+ formatDate: (date: Date, format: string) => {
159
+ const dt = DateTime.fromJSDate(date);
160
+ if (format === ISO8601_UTC) {
161
+ // JS dates are always encoded in localtime (flatpickr can only operate in localtime) and are now "intepreted" as UTC:
162
+ // We discard the intermediate local-time offset; that means the hours and minutes from localtime are rendered as-is
163
+ return dt.toUTC().plus(dt.offset * 60 * 1000).toISO({ suppressMilliseconds: true });
164
+ }
165
+ return dt.toFormat(format);
166
+ },
167
+ parseDate: (currentDateString: string, format: string): Date => {
168
+ if (format === ISO8601_UTC) {
169
+ const isoDt = DateTime.fromISO(currentDateString, { zone: 'utc' });
170
+ if (!isoDt.isValid) {
171
+ throw new Error('Invalid ISO8601 date: ' + currentDateString);
172
+ }
173
+ const localDate = isoDt.toLocal();
174
+ // This is the reverse operation of the formatting in `formatDate`:
175
+ // We substract the localtime offset to generate a local-time JS Date instance,
176
+ // that will contain the same local-time hour/time values as the UTC input.
177
+ return localDate.minus(localDate.offset * 60 * 1000).toJSDate();
178
+ }
179
+ return DateTime.fromFormat(currentDateString, format).toJSDate();
180
+ },
181
+ onReady: (dates: Date[], currentDateString: string, self: flatpickr.Instance): void => {
182
+ if (self.altInput !== undefined) {
183
+ // Transfer the id of the original input to the altInput
184
+ // This is a hack for the picker button - one would use `{wrap: true}` in flatpickr, but this apparently
185
+ // collides with using altInput – sigh.
186
+ self.altInput.id = self.input.id;
187
+ self.input.removeAttribute('id');
188
+ self.altInput.clearable();
189
+ if (self.input.dataset.formengineInputName !== undefined) {
190
+ self.altInput.dataset.formengineDatepickerRealInputName = self.input.dataset.formengineInputName;
191
+ }
192
+
193
+ // Register a custom event handler for `t3-formengine-postfieldvalidation` to be able to toggle the `has-error` class on the mirrored field
194
+ self.altInput.form.addEventListener('t3-formengine-postfieldvalidation', (e: CustomEvent<PostValidationEvent>): void => {
195
+ if (e.detail.field === self.input) {
196
+ self.altInput.classList.toggle('has-error', !e.detail.isValid);
197
+ }
198
+ });
199
+ }
200
+ },
201
+ onChange: (dates: Date[], currentDateString: string, self: flatpickr.Instance): void => {
202
+ self.input.dispatchEvent(new Event('formengine.dp.change'));
203
+ },
204
+ maxDate: '',
205
+ minDate: '',
206
+ minuteIncrement: 1,
207
+ noCalendar: false,
208
+ showMonths: 1,
209
+ // Disable month dropdown in `time`, `timesec` or `year` fields to fix:
210
+ // `TypeError: Cannot set properties of undefined (setting 'tabIndex')` in flatpickr
211
+ // Rproducible when entering an arbitrary time (e.g. "13:30")
212
+ // and pressing the TAB key in a time field.
213
+ monthSelectorType: type.startsWith('date') ? 'dropdown' : 'static',
214
+ weekNumbers: true,
215
+ time_24hr: !Intl.DateTimeFormat(navigator.language, { hour: 'numeric' }).resolvedOptions().hour12,
216
+ plugins: [
217
+ ShortcutButtonsPlugin({
218
+ theme: 'typo3',
219
+ button: [
220
+ {
221
+ label: top.TYPO3.lang['labels.datepicker.today'] || 'Today'
222
+ },
223
+ ],
224
+ onClick: (index: number, fp: flatpickr.Instance) => {
225
+ fp.setDate(new Date(), true);
226
+ }
227
+ })
228
+ ],
229
+ };
230
+
231
+ // set options based on type
232
+ switch (type) {
233
+ case 'datetime':
234
+ options.altFormat = format[1];
235
+ options.enableTime = true;
236
+ break;
237
+ case 'date':
238
+ options.altFormat = format[0];
239
+ break;
240
+ case 'time':
241
+ options.altFormat = 'HH:mm';
242
+ options.enableTime = true;
243
+ options.noCalendar = true;
244
+ break;
245
+ case 'timesec':
246
+ options.altFormat = 'HH:mm:ss';
247
+ options.enableSeconds = true;
248
+ options.enableTime = true;
249
+ options.noCalendar = true;
250
+ break;
251
+ case 'year':
252
+ options.altFormat = 'yyyy';
253
+ break;
254
+ default:
255
+ }
256
+
257
+ if (inputElement.dataset.dateMinDate !== undefined) {
258
+ options.minDate = options.parseDate(inputElement.dataset.dateMinDate, ISO8601_UTC);
259
+ options.minDate.setSeconds(0);
260
+ }
261
+ if (inputElement.dataset.dateMaxDate !== undefined) {
262
+ options.maxDate = options.parseDate(inputElement.dataset.dateMaxDate, ISO8601_UTC);
263
+ options.maxDate.setSeconds(59);
264
+ }
265
+
266
+ return options;
267
+ }
268
+ }
269
+
270
+ export default new DateTimePicker();
@@ -0,0 +1,159 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import DocumentService from '@typo3/core/document-service';
15
+ import Icons from './icons';
16
+ import RegularEvent from '@typo3/core/event/regular-event';
17
+ import { selector } from '@typo3/core/literals';
18
+
19
+ export type PreSubmitCallback = (e: Event) => boolean;
20
+
21
+ type SubmitTriggerHTMLElement = HTMLAnchorElement|HTMLButtonElement;
22
+
23
+ /**
24
+ * Module: @typo3/backend/document-save-actions
25
+ * @deprecated: use @typo3/backend/form/submit-interceptor instead
26
+ */
27
+ class DocumentSaveActions {
28
+ private static instance: DocumentSaveActions = null;
29
+ private preventDoubleClick: boolean = false;
30
+ private readonly preSubmitCallbacks: PreSubmitCallback[] = [];
31
+
32
+ private constructor() {
33
+ console.warn('The module `@typo3/backend/document-save-actions.js` has been deprecated and will be removed in TYPO3 v14. Please consider migrating to `@typo3/backend/form/submit-interceptor.js` instead.');
34
+ DocumentService.ready().then((): void => {
35
+ this.initializeSaveHandling();
36
+ });
37
+ }
38
+
39
+ public static getInstance(): DocumentSaveActions {
40
+ if (DocumentSaveActions.instance === null) {
41
+ DocumentSaveActions.instance = new DocumentSaveActions();
42
+ }
43
+
44
+ return DocumentSaveActions.instance;
45
+ }
46
+
47
+ public static registerEvents(): void {
48
+ DocumentSaveActions.getInstance();
49
+ }
50
+
51
+ /**
52
+ * Adds a callback being executed before submit
53
+ */
54
+ public addPreSubmitCallback(callback: PreSubmitCallback): void {
55
+ if (typeof callback !== 'function') {
56
+ throw 'callback must be a function.';
57
+ }
58
+
59
+ this.preSubmitCallbacks.push(callback);
60
+ }
61
+
62
+ /**
63
+ * Initializes the save handling
64
+ */
65
+ private initializeSaveHandling(): void {
66
+ const docHeader = document.querySelector('.t3js-module-docheader');
67
+ if (docHeader === null) {
68
+ return;
69
+ }
70
+
71
+ const elements = [
72
+ 'button[form]',
73
+ 'button[name^="_save"]',
74
+ 'a[data-name^="_save"]',
75
+ 'button[name="CMD"][value^="save"]',
76
+ 'a[data-name="CMD"][data-value^="save"]',
77
+ ].join(',');
78
+
79
+ new RegularEvent('click', (e: Event, target: SubmitTriggerHTMLElement): void => {
80
+ if (this.preventDoubleClick) {
81
+ return;
82
+ }
83
+
84
+ const form = this.getAttachedForm(target);
85
+ if (form === null) {
86
+ return;
87
+ }
88
+
89
+ // Run any preSubmit callbacks
90
+ for (const callback of this.preSubmitCallbacks) {
91
+ const callbackResult = callback(e);
92
+ if (!callbackResult) {
93
+ e.preventDefault();
94
+ return;
95
+ }
96
+ }
97
+
98
+ this.preventDoubleClick = true;
99
+
100
+ // All callbacks were executed, add dummy field for POST action to make clear we're submitting something...
101
+ this.attachSaveFieldToForm(form, target);
102
+
103
+ form.addEventListener('submit', (): void => {
104
+ const splitButton = target.closest('.t3js-splitbutton');
105
+ let affectedButton: SubmitTriggerHTMLElement;
106
+ if (splitButton !== null) {
107
+ affectedButton = splitButton.firstElementChild as HTMLButtonElement;
108
+ splitButton.querySelectorAll('button').forEach((button: HTMLButtonElement): void => { button.disabled = true; });
109
+ } else {
110
+ affectedButton = target;
111
+ if (affectedButton instanceof HTMLAnchorElement) {
112
+ affectedButton.classList.add('disabled');
113
+ } else {
114
+ affectedButton.disabled = true;
115
+ }
116
+ }
117
+
118
+ Icons.getIcon('spinner-circle', Icons.sizes.small).then((markup: string): void => {
119
+ affectedButton.replaceChild(document.createRange().createContextualFragment(markup), target.querySelector('.t3js-icon'));
120
+ }).catch(() => {
121
+ // Catch error in case the promise was not resolved
122
+ // e.g. loading a new page
123
+ });
124
+ }, { once: true });
125
+ }).delegateTo(docHeader, elements);
126
+ }
127
+
128
+ private getAttachedForm(trigger: SubmitTriggerHTMLElement): HTMLFormElement|null {
129
+ let form;
130
+ if (trigger instanceof HTMLAnchorElement) {
131
+ form = document.querySelector(selector`#${trigger.dataset.form}`) as HTMLFormElement|null;
132
+ } else {
133
+ form = trigger.form;
134
+ }
135
+
136
+ if (!form) {
137
+ form = trigger.closest('form');
138
+ }
139
+
140
+ return form;
141
+ }
142
+
143
+ private attachSaveFieldToForm(form: HTMLFormElement, trigger: SubmitTriggerHTMLElement): void {
144
+ const inputId = form.name + '_save_field';
145
+ let saveValueInput = document.getElementById(inputId) as HTMLInputElement|null;
146
+ if (saveValueInput === null) {
147
+ saveValueInput = document.createElement('input');
148
+ saveValueInput.id = inputId;
149
+ saveValueInput.type = 'hidden';
150
+
151
+ form.append(saveValueInput);
152
+ }
153
+
154
+ saveValueInput.name = trigger instanceof HTMLAnchorElement ? trigger.dataset.name : trigger.name;
155
+ saveValueInput.value = trigger instanceof HTMLAnchorElement ? trigger.dataset.value : trigger.value;
156
+ }
157
+ }
158
+
159
+ export default DocumentSaveActions;