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,166 @@
1
+ # TYPO3 CMS
2
+
3
+ TYPO3 is an open source PHP based web content management system released
4
+ under the GNU GPL. TYPO3 is copyright © 1999-2025 by Kasper Skårhøj.
5
+
6
+ This document provides a basic introduction to TYPO3.
7
+
8
+ ## Getting Started
9
+
10
+ TYPO3 requires a web server with PHP and a database.
11
+ The backend is accessed via a supported browser.
12
+
13
+ Please see the [Installation Guide](https://docs.typo3.org/installation)
14
+ in order to set up a basic TYPO3 installation on your web server.
15
+
16
+ ## What is TYPO3?
17
+
18
+ TYPO3 is a free and open source Content Management Framework. It is
19
+ released under the GNU General Public License. It can run on several web
20
+ servers, such as Apache, nginx or IIS, on top of many operating systems,
21
+ among them Linux, Microsoft Windows, FreeBSD or macOS.
22
+
23
+ TYPO3 was initially authored by Kasper Skårhøj and is now further
24
+ developed by a community of contributors and the [TYPO3 Core Development
25
+ Team](https://typo3.org/community/teams/typo3-development/).
26
+
27
+ To get more info about the GPL license, visit
28
+ https://opensource.org/licenses/gpl-license
29
+
30
+ ## What is a Content Management Framework?
31
+
32
+ A Content Management Framework is more than just a content management
33
+ system, due to the separation of the streamlined core and optional
34
+ plugins (extensions). TYPO3 has an open API that allows you to extend
35
+ the frontend (website) and/or backend (administration) functionality.
36
+
37
+ The concept of extensions makes TYPO3 capable of being developed and
38
+ used in almost any way you can imagine, either by using any of the many
39
+ extensions which are available for download, or by writing your own.
40
+
41
+ ## TYPO3 System requirements
42
+
43
+ TYPO3 is based upon PHP and uses a database management system like
44
+ MySQL.
45
+
46
+ For more specific information regarding requirements see the file
47
+ [INSTALL.md](INSTALL.md#server-system-requirements) in this folder.
48
+
49
+ ## TYPO3 resources
50
+
51
+ Here is an overview of the most important TYPO3 resources to help you
52
+ get started:
53
+
54
+ ### Get more information
55
+
56
+ * https://typo3.org/ is the main project website. It provides up-to-date
57
+ official news, information about events and the TYPO3 community.
58
+
59
+ * https://docs.typo3.org/: TYPO3 is one of the most thoroughly
60
+ documented OpenSource products around, with manuals covering basic
61
+ tutorials, TypoScript, administration, development, core structure,
62
+ etc. You should make the time to locate the various documents, and
63
+ read those that apply to the work you want to do.
64
+
65
+ * https://get.typo3.org/ is the platform where you can download TYPO3
66
+ and find all release notes and change logs of TYPO3 releases.
67
+
68
+ * https://extensions.typo3.org/ is the platform where you can search for
69
+ and download TYPO3 extensions.
70
+
71
+ ### Chat with us
72
+
73
+ The TYPO3 community is using a tool called Slack to openly communicate
74
+ with each other and with the public. Several TYPO3 teams use Slack as a
75
+ way to communicate internally and most channels are a welcome place for
76
+ you to join and get yourself involved.
77
+
78
+ * Register: https://my.typo3.org/about-mytypo3org/slack
79
+ * Slack: https://typo3.slack.com/
80
+
81
+ ### Exchange information, ask questions, get help
82
+
83
+ Slack is nice for short discussions, but when asking questions, most
84
+ answers are lost in the noise after a few minutes.
85
+
86
+ #### StackOverflow
87
+
88
+ **To let everyone profit from an answer, we recommend to ask questions
89
+ on StackOverflow**. If you like, you can then post a link into the
90
+ corresponding Slack channel to raise attention. And please, do not
91
+ forget to tag your questions correctly with `typo3` (and possibly other
92
+ tags like `typo3-9.5.x`, `Fluid` or `Extbase`).
93
+
94
+ * [StackOverflow questions tagged "TYPO3"](https://stackoverflow.com/questions/tagged/typo3)
95
+
96
+ #### Official meet the TYPO3 Community overview:
97
+
98
+ Visit https://typo3.org/community/meet/
99
+
100
+ ## Contributing
101
+
102
+ If you want to contribute to the TYPO3 source code, take a look at our
103
+ Contributors Walkthrough and Review System:
104
+
105
+ * https://docs.typo3.org/core-contribution
106
+ * https://review.typo3.org/
107
+
108
+ > Please use the [TYPO3 Slack chat](#chat-with-us), if you need help in
109
+ > setting up your contribution environment. The community is very
110
+ > helpful and get you up and running! (Please post your questions in
111
+ > Slack Channel `#typo3-cms-coredev` regarding contribution support)
112
+
113
+ The [repository at GitHub](https://github.com/typo3/typo3) is a
114
+ synchronized mirror of the primary TYPO3 core git repository:
115
+
116
+ * https://git.typo3.org/typo3/typo3
117
+
118
+ If you want to file a bug report, take a look at:
119
+
120
+ * [https://forge.typo3.org](https://forge.typo3.org/projects/typo3cms-core/issues)
121
+
122
+ ## Security
123
+
124
+ If you learn about a potential security issue in the TYPO3 core or in
125
+ an extension, please always contact the TYPO3 Security Team via security@typo3.org.
126
+ Please always include the version number where you've discovered the issue.
127
+ If we can confirm a problem in a third-party extension, we will inform the
128
+ author immediately.
129
+
130
+ If you discover a security problem in your own extension, please inform
131
+ the TYPO3 Security Team as well. They can help you to fix it, and they
132
+ may want to issue an advisory once it is fixed.
133
+
134
+ For more details see [TYPO3 Security Team](https://typo3.org/community/teams/security/).
135
+
136
+ ## Final notes
137
+
138
+ TYPO3 is said to be one of the most sophisticated PHP / Internet related
139
+ applications available, and the more you play with it, the more you will
140
+ agree.
141
+
142
+ Due to the advanced level of the code and functionality, a degree of
143
+ study, time and perseverance is required to fully understand it, and get
144
+ the best from it. You should keep trying, as we say it's definitely
145
+ worth it. TYPO3 is the Enterprise Content Management System "for all".
146
+
147
+ The GPL license allows for developments that are based upon TYPO3 to
148
+ also be freely available under the GPL. Please remember this, because
149
+ TYPO3 is about "Inspiring People To Share". If you are making money with
150
+ TYPO3 you can donate or become a member of the
151
+ [TYPO3 Association](https://typo3.org/association).
152
+
153
+ By becoming a supporting member, individuals and organisations mainly
154
+ fund core development of TYPO3. The decision about what the funds are
155
+ used for, is made by all members of the Association and the TYPO3
156
+ Association Board. The decisions will be made transparent to the community
157
+ and especially the supporting members. Your funds will also serve for
158
+ other purposes as laid out in the bylaws.
159
+
160
+ * [Donate to TYPO3](https://typo3.org/donate)
161
+ * [Become a member of the TYPO3 Association](
162
+ https://typo3.org/membership)
163
+
164
+ ## Copyleft
165
+
166
+ This document is a part of the TYPO3 project.
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # TYPO3 TypeScript Sources
2
+
3
+ This repository contains the TypeScript sources from the TYPO3 Core, automatically extracted and published to npm.
4
+
5
+ ## 📦 Installation
6
+
7
+ ```bash
8
+ npm install typo3-typescript-sources
9
+ ```
10
+
11
+ ## 🔍 Source
12
+
13
+ - **Original Repository:** [TYPO3/typo3](https://github.com/TYPO3/typo3)
14
+ - **Source Path:** `Build/Sources/TypeScript/`
15
+ - **Current TYPO3 Version:** `v13.4.20`
16
+
17
+ ## 📝 License
18
+
19
+ This package maintains the same license as TYPO3 Core: **GPL-2.0-or-later**
20
+
21
+ ## 🤖 Automation
22
+
23
+ This repository is automatically synchronized with TYPO3 Core releases via GitHub Actions.
24
+
25
+ ## ⚠️ Note
26
+
27
+ This is an unofficial split package maintained by [@maikschneider](https://github.com/maikschneider).
28
+ For official TYPO3 packages, please refer to the [TYPO3 Core repository](https://github.com/TYPO3/typo3).
@@ -0,0 +1,375 @@
1
+ ((): void => {
2
+ const AdminPanelSelectors = {
3
+ adminPanelRole: 'form[data-typo3-role=typo3-adminPanel]',
4
+ moduleTriggerRole: '[data-typo3-role=typo3-adminPanel-module-trigger]',
5
+ moduleParentClass: '.typo3-adminPanel-module',
6
+ contentTabRole: '[data-typo3-role=typo3-adminPanel-content-tab]',
7
+ saveButtonRole: '[data-typo3-role=typo3-adminPanel-saveButton]',
8
+ triggerRole: '[data-typo3-role=typo3-adminPanel-trigger]',
9
+ popupTriggerRole: '[data-typo3-role=typo3-adminPanel-popup-trigger]',
10
+ panelTriggerRole: '[data-typo3-role=typo3-adminPanel-panel-trigger]',
11
+ panelParentClass: '.typo3-adminPanel-panel',
12
+ contentSettingsTriggerRole: '[data-typo3-role=typo3-adminPanel-content-settings]',
13
+ contentSettingsParentClass: '.typo3-adminPanel-content-settings',
14
+ contentParentClass: '.typo3-adminPanel-content',
15
+ zoomTarget: '[data-typo3-zoom-target]',
16
+ zoomClose: '[data-typo3-zoom-close]',
17
+ currentContentRole: '[data-typo3-role=typo3-adminPanel-content]',
18
+ contentPaneRole: '[data-typo3-role=typo3-adminPanel-content-pane]',
19
+ };
20
+
21
+ const AdminPanelClasses = {
22
+ active: 'active',
23
+ activeModule: 'typo3-adminPanel-module-active',
24
+ activeContentSetting: 'typo3-adminPanel-content-settings-active',
25
+ backdrop: 'typo3-adminPanel-backdrop',
26
+ activeTab: 'typo3-adminPanel-content-header-item-active',
27
+ activePane: 'typo3-adminPanel-content-panes-item-active',
28
+ noScroll: 'typo3-adminPanel-noscroll',
29
+ zoomShow: 'typo3-adminPanel-zoom-show',
30
+ };
31
+
32
+ class AdminPanel {
33
+ private readonly adminPanel: HTMLFormElement;
34
+ private readonly modules: AdminPanelModule[];
35
+ private readonly popups: AdminPanelPopup[];
36
+ private readonly trigger: HTMLElement;
37
+
38
+ constructor() {
39
+ this.adminPanel = document.querySelector(AdminPanelSelectors.adminPanelRole) as HTMLFormElement;
40
+ this.modules = (this.querySelectorAll(AdminPanelSelectors.moduleTriggerRole) as Element[]).map(
41
+ (moduleTrigger: HTMLElement) => {
42
+ const moduleParent = moduleTrigger.closest(AdminPanelSelectors.moduleParentClass);
43
+ return new AdminPanelModule(this, moduleParent, moduleTrigger);
44
+ },
45
+ );
46
+ this.popups = this.querySelectorAll(AdminPanelSelectors.popupTriggerRole).map(
47
+ (popupTrigger: HTMLElement) => new AdminPanelPopup(this, popupTrigger),
48
+ );
49
+ this.querySelectorAll(AdminPanelSelectors.panelTriggerRole).forEach(
50
+ (panelTrigger: HTMLElement) => {
51
+ const panelParent = panelTrigger.closest(AdminPanelSelectors.panelParentClass);
52
+ new AdminPanelPanel(panelParent, panelTrigger);
53
+ },
54
+ );
55
+ this.querySelectorAll(AdminPanelSelectors.contentSettingsTriggerRole).forEach(
56
+ (contentSettingTrigger: HTMLElement) => {
57
+ const contentSettingElement = contentSettingTrigger
58
+ .closest(AdminPanelSelectors.contentParentClass)
59
+ .querySelector(AdminPanelSelectors.contentSettingsParentClass);
60
+ new AdminPanelContentSetting(contentSettingElement, contentSettingTrigger);
61
+ },
62
+ );
63
+ this.trigger = document.querySelector(AdminPanelSelectors.triggerRole) as HTMLElement;
64
+
65
+ this.initializeEvents();
66
+ this.addBackdropListener();
67
+ }
68
+
69
+ disableModules(): void {
70
+ this.modules.forEach((module: AdminPanelModule) => module.disable());
71
+ }
72
+
73
+ disablePopups(): void {
74
+ this.popups.forEach((popup: AdminPanelPopup) => popup.disable());
75
+ }
76
+
77
+ renderBackdrop(): void {
78
+ const adminPanel = document.getElementById('TSFE_ADMIN_PANEL_FORM');
79
+ const backdrop = document.createElement('div');
80
+ const body = document.querySelector('body');
81
+ body.classList.add(AdminPanelClasses.noScroll);
82
+ backdrop.classList.add(AdminPanelClasses.backdrop);
83
+ adminPanel.appendChild(backdrop);
84
+ this.addBackdropListener();
85
+ }
86
+
87
+ removeBackdrop(): void {
88
+ const backdrop = document.querySelector('.' + AdminPanelClasses.backdrop);
89
+ const body = document.querySelector('body');
90
+ body.classList.remove(AdminPanelClasses.noScroll);
91
+ if (backdrop !== null) {
92
+ backdrop.remove();
93
+ }
94
+ }
95
+
96
+ private querySelectorAll(selectors: string, subject: Element = null): Node[] {
97
+ if (subject === null) {
98
+ return Array.from(document.querySelectorAll(selectors));
99
+ }
100
+ return Array.from(subject.querySelectorAll(selectors));
101
+ }
102
+
103
+ private initializeEvents(): void {
104
+ this
105
+ .querySelectorAll(AdminPanelSelectors.contentTabRole)
106
+ .forEach((tab: HTMLElement) => tab.addEventListener('click', this.switchTab.bind(this)));
107
+ this
108
+ .querySelectorAll(AdminPanelSelectors.zoomTarget)
109
+ .forEach((zoomTrigger: HTMLElement) => zoomTrigger.addEventListener('click', this.openZoom.bind(this)));
110
+ this
111
+ .querySelectorAll(AdminPanelSelectors.zoomClose)
112
+ .forEach((zoomTrigger: HTMLElement) => zoomTrigger.addEventListener('click', this.closeZoom.bind(this)));
113
+ this
114
+ .querySelectorAll(AdminPanelSelectors.triggerRole)
115
+ .forEach((trigger: HTMLElement) => trigger.addEventListener('click', this.toggleAdminPanelState.bind(this)));
116
+ this
117
+ .querySelectorAll(AdminPanelSelectors.saveButtonRole)
118
+ .forEach((elm: HTMLElement) => elm.addEventListener('click', this.sendAdminPanelForm.bind(this)));
119
+
120
+ this
121
+ .querySelectorAll('[data-typo3-role=typo3-adminPanel-content-close]')
122
+ .forEach((elm: HTMLElement) => {
123
+ elm.addEventListener('click', () => {
124
+ this.disableModules();
125
+ this.removeBackdrop();
126
+ });
127
+ });
128
+ this
129
+ .querySelectorAll('.typo3-adminPanel-table th, .typo3-adminPanel-table td')
130
+ .forEach((elm: HTMLElement) => {
131
+ elm.addEventListener('click', () => {
132
+ elm.focus();
133
+ try {
134
+ document.execCommand('copy');
135
+ } catch {
136
+ // nothing here
137
+ }
138
+ });
139
+ });
140
+ }
141
+
142
+ private switchTab(event: MouseEvent): void {
143
+ event.preventDefault();
144
+
145
+ const activeTabClass = AdminPanelClasses.activeTab;
146
+ const activePaneClass = AdminPanelClasses.activePane;
147
+ const currentTab = event.currentTarget as HTMLElement;
148
+ const currentContent = currentTab.closest(AdminPanelSelectors.currentContentRole);
149
+ const contentTabs = this.querySelectorAll(AdminPanelSelectors.contentTabRole, currentContent);
150
+ const contentPanes = this.querySelectorAll(AdminPanelSelectors.contentPaneRole, currentContent);
151
+
152
+ contentTabs.forEach((element: HTMLElement) => element.classList.remove(activeTabClass));
153
+ currentTab.classList.add(activeTabClass);
154
+ contentPanes.forEach((element: HTMLElement) => element.classList.remove(activePaneClass));
155
+
156
+ const activePane = document.querySelector('[data-typo3-tab-id=' + currentTab.dataset.typo3TabTarget + ']');
157
+ activePane.classList.add(activePaneClass);
158
+ }
159
+
160
+ private openZoom(event: MouseEvent): void {
161
+ event.preventDefault();
162
+ const trigger = event.currentTarget as HTMLElement;
163
+ const targetId = trigger.getAttribute('data-typo3-zoom-target');
164
+ const target = document.querySelector('[data-typo3-zoom-id=' + targetId + ']');
165
+ target.classList.add(AdminPanelClasses.zoomShow);
166
+ }
167
+
168
+ private closeZoom(event: MouseEvent): void {
169
+ event.preventDefault();
170
+ const trigger = event.currentTarget as HTMLElement;
171
+ const target = trigger.closest('[data-typo3-zoom-id]');
172
+ target.classList.remove(AdminPanelClasses.zoomShow);
173
+ }
174
+
175
+ private sendAdminPanelForm(event: MouseEvent): void {
176
+ event.preventDefault();
177
+ const formData = new FormData(this.adminPanel);
178
+ const request = new XMLHttpRequest();
179
+ request.open('POST', this.adminPanel.dataset.typo3AjaxUrl);
180
+ request.send(formData);
181
+ request.onload = () => location.assign(this.getCleanReloadUrl());
182
+ }
183
+
184
+ private toggleAdminPanelState(): void {
185
+ const request = new XMLHttpRequest();
186
+ request.open('GET', this.trigger.dataset.typo3AjaxUrl);
187
+ request.send();
188
+ request.onload = () => location.reload();
189
+ }
190
+
191
+ /**
192
+ * When previewing access/time restricted packs from the backend, "ADMCMD_" parameters are attached to the URL
193
+ * - their settings will be saved in the admin panel. To make sure that the user is able to change those settings
194
+ * via the Admin Panel User Interface the $_GET parameters are removed from the URL after saving and the page is
195
+ * reloaded
196
+ */
197
+ private getCleanReloadUrl(): string {
198
+ const urlParams: string[] = [];
199
+ location.search.substr(1).split('&').forEach((item: string): void => {
200
+ if (item && !item.includes('ADMCMD_')) {
201
+ urlParams.push(item);
202
+ }
203
+ });
204
+
205
+ const queryString = urlParams ? '?' + urlParams.join('&') : '';
206
+ return location.origin + location.pathname + queryString;
207
+ }
208
+
209
+ private addBackdropListener(): void {
210
+ this.querySelectorAll('.' + AdminPanelClasses.backdrop)
211
+ .forEach((elm: HTMLElement) => {
212
+ elm.addEventListener('click', () => {
213
+ this.removeBackdrop();
214
+ this
215
+ .querySelectorAll(AdminPanelSelectors.moduleTriggerRole)
216
+ .forEach((innerElm: HTMLElement) => {
217
+ innerElm.closest(AdminPanelSelectors.moduleParentClass)
218
+ .classList.remove(AdminPanelClasses.activeModule);
219
+ });
220
+ });
221
+ });
222
+ }
223
+ }
224
+
225
+ interface AdminPanelSwitchable {
226
+ isActive(): boolean;
227
+ enable(): void;
228
+ disable(): void;
229
+ }
230
+
231
+ class AdminPanelPopup implements AdminPanelSwitchable {
232
+ private readonly adminPanel: AdminPanel;
233
+ private readonly element: Element;
234
+
235
+ constructor(adminPanel: AdminPanel, element: Element) {
236
+ this.adminPanel = adminPanel;
237
+ this.element = element;
238
+ this.initializeEvents();
239
+ }
240
+
241
+ isActive(): boolean {
242
+ return this.element.classList.contains(AdminPanelClasses.active);
243
+ }
244
+
245
+ enable(): void {
246
+ this.element.classList.add(AdminPanelClasses.active);
247
+ }
248
+
249
+ disable(): void {
250
+ this.element.classList.remove(AdminPanelClasses.active);
251
+ }
252
+
253
+ private initializeEvents(): void {
254
+ this.element.addEventListener('click', () => {
255
+ if (this.isActive()) {
256
+ this.disable();
257
+ } else {
258
+ this.adminPanel.disablePopups();
259
+ this.enable();
260
+ }
261
+
262
+ });
263
+ }
264
+ }
265
+
266
+ class AdminPanelPanel implements AdminPanelSwitchable {
267
+ private readonly element: Element;
268
+ private readonly trigger: Element;
269
+
270
+ constructor(element: Element, trigger: Element) {
271
+ this.element = element;
272
+ this.trigger = trigger;
273
+ this.initializeEvents();
274
+ }
275
+
276
+ isActive(): boolean {
277
+ return this.element.classList.contains(AdminPanelClasses.active);
278
+ }
279
+
280
+ enable(): void {
281
+ this.element.classList.add(AdminPanelClasses.active);
282
+ }
283
+
284
+ disable(): void {
285
+ this.element.classList.remove(AdminPanelClasses.active);
286
+ }
287
+
288
+ private initializeEvents(): void {
289
+ this.trigger.addEventListener('click', () => {
290
+ if (this.isActive()) {
291
+ this.disable();
292
+ } else {
293
+ this.enable();
294
+ }
295
+ });
296
+ }
297
+ }
298
+
299
+ class AdminPanelContentSetting implements AdminPanelSwitchable {
300
+ private readonly element: Element;
301
+ private readonly trigger: Element;
302
+
303
+ constructor(element: Element, trigger: Element) {
304
+ this.element = element;
305
+ this.trigger = trigger;
306
+ this.initializeEvents();
307
+ }
308
+
309
+ isActive(): boolean {
310
+ return this.element.classList.contains(AdminPanelClasses.activeContentSetting);
311
+ }
312
+
313
+ enable(): void {
314
+ this.element.classList.add(AdminPanelClasses.activeContentSetting);
315
+ }
316
+
317
+ disable(): void {
318
+ this.element.classList.remove(AdminPanelClasses.activeContentSetting);
319
+ }
320
+
321
+ private initializeEvents(): void {
322
+ this.trigger.addEventListener('click', () => {
323
+ if (this.isActive()) {
324
+ this.disable();
325
+ } else {
326
+ this.enable();
327
+ }
328
+ });
329
+ }
330
+ }
331
+
332
+ class AdminPanelModule implements AdminPanelSwitchable {
333
+ private readonly adminPanel: AdminPanel;
334
+ private readonly element: Element;
335
+ private readonly trigger: Element;
336
+
337
+ constructor(adminPanel: AdminPanel, element: Element, trigger: Element) {
338
+ this.adminPanel = adminPanel;
339
+ this.element = element;
340
+ this.trigger = trigger;
341
+ this.initializeEvents();
342
+ }
343
+
344
+ isActive(): boolean {
345
+ return this.element.classList.contains(AdminPanelClasses.activeModule);
346
+ }
347
+
348
+ enable(): void {
349
+ this.element.classList.add(AdminPanelClasses.activeModule);
350
+ }
351
+
352
+ disable(): void {
353
+ this.element.classList.remove(AdminPanelClasses.activeModule);
354
+ }
355
+
356
+ private initializeEvents(): void {
357
+ this.trigger.addEventListener('click', () => {
358
+ this.adminPanel.removeBackdrop();
359
+ if (this.isActive()) {
360
+ this.disable();
361
+ } else {
362
+ this.adminPanel.disableModules();
363
+ this.adminPanel.renderBackdrop();
364
+ this.enable();
365
+ }
366
+ });
367
+ }
368
+ }
369
+
370
+ window.addEventListener(
371
+ 'load',
372
+ () => new AdminPanel(),
373
+ false,
374
+ );
375
+ })();
@@ -0,0 +1,27 @@
1
+ ((): void => {
2
+ class AdminPanelCache {
3
+ private readonly buttons: NodeList;
4
+
5
+ constructor() {
6
+ this.buttons = document.querySelectorAll('[data-typo3-role="clearCacheButton"]');
7
+
8
+ this.buttons.forEach((element: HTMLElement): void => {
9
+ element.addEventListener('click', (): void => {
10
+ const url = element.dataset.typo3AjaxUrl;
11
+ const request = new XMLHttpRequest();
12
+ request.open('GET', url);
13
+ request.send();
14
+ request.onload = (): void => {
15
+ location.reload();
16
+ };
17
+ });
18
+ });
19
+ }
20
+ }
21
+
22
+ window.addEventListener(
23
+ 'load',
24
+ () => new AdminPanelCache(),
25
+ false,
26
+ );
27
+ })();
@@ -0,0 +1,75 @@
1
+ ((): void => {
2
+ class AdminPanelPreview {
3
+ private readonly dateField: HTMLInputElement = null;
4
+ private readonly timeField: HTMLInputElement = null;
5
+ private readonly targetField: HTMLInputElement = null;
6
+ private readonly toggleField: HTMLInputElement = null;
7
+
8
+ /**
9
+ * Initialize date and time fields of preview
10
+ *
11
+ * PHP / backend side always uses UTC timestamps (for generating time based previews and access time checks)
12
+ * Date and Time fields are HTML5 input fields, combined they update the "targetfield" always containing a PHP
13
+ * compatible (seconds-based) timestamp
14
+ */
15
+ constructor() {
16
+ this.dateField = <HTMLInputElement>document.getElementById('preview_simulateDate-date-hr');
17
+ this.timeField = <HTMLInputElement>document.getElementById('preview_simulateDate-time-hr');
18
+ this.targetField = <HTMLInputElement>document.getElementById(this.dateField.dataset.bsTarget);
19
+ this.toggleField = <HTMLInputElement>document.getElementById('typo3-adminPanel-simulate-date-toggle');
20
+
21
+ if (this.targetField.value) {
22
+ const initialDate = new Date(parseInt(this.targetField.value, 10) * 1000);
23
+ this.dateField.valueAsDate = initialDate;
24
+ this.timeField.valueAsDate = initialDate;
25
+ }
26
+
27
+ this.toggleField.addEventListener('change', this.toggleDisplay);
28
+ this.dateField.addEventListener('change', this.updateDateField);
29
+ this.timeField.addEventListener('change', this.updateDateField);
30
+ }
31
+
32
+ private readonly toggleDisplay = (): void => {
33
+ const toggleVal = this.toggleField.checked;
34
+ const groupElement = <HTMLDivElement>document.getElementById('typo3-adminPanel-preview_simulateDate');
35
+ if (toggleVal) {
36
+ groupElement.classList.remove('typo3-adminPanel-group-disable');
37
+ this.dateField.disabled = false;
38
+ this.timeField.disabled = false;
39
+ this.updateDateField();
40
+ } else {
41
+ groupElement.classList.add('typo3-adminPanel-group-disable');
42
+ this.dateField.disabled = true;
43
+ this.timeField.disabled = true;
44
+ this.targetField.value = '';
45
+ }
46
+ };
47
+
48
+ private readonly updateDateField = (): void => {
49
+ let dateVal = this.dateField.value;
50
+ let timeVal = this.timeField.value;
51
+ if (!dateVal && timeVal) {
52
+ const tempDate = new Date();
53
+ dateVal = tempDate.getFullYear() + '-' + (tempDate.getMonth() + 1) + '-' + tempDate.getDate();
54
+ }
55
+ if (dateVal && !timeVal) {
56
+ timeVal = '00:00';
57
+ }
58
+
59
+ if (!dateVal && !timeVal) {
60
+ this.targetField.value = '';
61
+ } else {
62
+ const stringDate = dateVal + ' ' + timeVal;
63
+ const date = new Date(stringDate);
64
+
65
+ this.targetField.value = (date.valueOf() / 1000).toString();
66
+ }
67
+ };
68
+ }
69
+
70
+ window.addEventListener(
71
+ 'load',
72
+ () => new AdminPanelPreview(),
73
+ false,
74
+ );
75
+ })();
@@ -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
+ export abstract class AbstractAction {
15
+ protected callback: (promise?: Promise<void>) => void|Promise<void>;
16
+
17
+ constructor(callback: (promise?: Promise<void>) => void|Promise<void>) {
18
+ this.callback = callback;
19
+ }
20
+
21
+ public abstract execute(el: HTMLElement): Promise<void>;
22
+ }