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,92 @@
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 'bootstrap';
15
+ import { AbstractInteractableModule, type ModuleLoadedResponseWithButtons } from '../abstract-interactable-module';
16
+ import Modal from '@typo3/backend/modal';
17
+ import Notification from '@typo3/backend/notification';
18
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
19
+ import type MessageInterface from '../../message-interface';
20
+ import { InfoBox } from '../../renderable/info-box';
21
+ import Router from '../../router';
22
+ import RegularEvent from '@typo3/core/event/regular-event';
23
+ import type { ModalElement } from '@typo3/backend/modal';
24
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
25
+
26
+ enum Identifiers {
27
+ executeTrigger = '.t3js-environmentCheck-execute',
28
+ outputContainer = '.t3js-environmentCheck-output'
29
+ }
30
+
31
+ type EnvironmentCheckResponse = ModuleLoadedResponseWithButtons & {
32
+ status: {
33
+ error: MessageInterface[],
34
+ warning: MessageInterface[],
35
+ ok: MessageInterface[],
36
+ information: MessageInterface[],
37
+ notice: MessageInterface[]
38
+ },
39
+ };
40
+
41
+ /**
42
+ * Module: @typo3/install/environment-check
43
+ */
44
+ class EnvironmentCheck extends AbstractInteractableModule {
45
+ public override initialize(currentModal: ModalElement): void {
46
+ super.initialize(currentModal);
47
+
48
+ this.loadModuleFrameAgnostic('@typo3/install/renderable/info-box.js').then((): void => {
49
+ // Get status on initialize to have the badge and content ready
50
+ this.runTests();
51
+ });
52
+
53
+ new RegularEvent('click', (event: Event): void => {
54
+ event.preventDefault();
55
+ this.runTests();
56
+ }).delegateTo(currentModal, Identifiers.executeTrigger);
57
+ }
58
+
59
+ private runTests(): void {
60
+ this.setModalButtonsState(false);
61
+ const modalContent: HTMLElement = this.getModalBody();
62
+ const outputContainer: HTMLElement = modalContent.querySelector(Identifiers.outputContainer);
63
+ if (outputContainer !== null) {
64
+ this.renderProgressBar(outputContainer);
65
+ }
66
+ (new AjaxRequest(Router.getUrl('environmentCheckGetStatus')))
67
+ .get({ cache: 'no-cache' })
68
+ .then(
69
+ async (response: AjaxResponse): Promise<void> => {
70
+ const data: EnvironmentCheckResponse = await response.resolve();
71
+ modalContent.innerHTML = data.html;
72
+ Modal.setButtons(data.buttons);
73
+ if (data.success === true && typeof (data.status) === 'object') {
74
+ for (const messages of Object.values(data.status)) {
75
+ for (const status of messages) {
76
+ modalContent.querySelector(Identifiers.outputContainer).append(InfoBox.create(status.severity, status.title, status.message));
77
+ }
78
+ }
79
+ } else {
80
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
81
+ }
82
+ },
83
+ (error: AjaxResponse): void => {
84
+ Router.handleAjaxError(error, modalContent);
85
+ }
86
+ ).finally((): void => {
87
+ this.setModalButtonsState(true);
88
+ });
89
+ }
90
+ }
91
+
92
+ export default new EnvironmentCheck();
@@ -0,0 +1,145 @@
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 'bootstrap';
15
+ import { AbstractInteractableModule, type ModuleLoadedResponseWithButtons } from '../abstract-interactable-module';
16
+ import Modal from '@typo3/backend/modal';
17
+ import Notification from '@typo3/backend/notification';
18
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
19
+ import { InfoBox } from '../../renderable/info-box';
20
+ import Severity from '../../renderable/severity';
21
+ import Router from '../../router';
22
+ import RegularEvent from '@typo3/core/event/regular-event';
23
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
24
+ import type { ModalElement } from '@typo3/backend/modal';
25
+ import type MessageInterface from '@typo3/install/message-interface';
26
+
27
+ enum Identifiers {
28
+ outputContainer = '.t3js-folderStructure-output',
29
+ errorContainer = '.t3js-folderStructure-errors',
30
+ errorList = '.t3js-folderStructure-errors-list',
31
+ errorFixTrigger = '.t3js-folderStructure-errors-fix',
32
+ okContainer = '.t3js-folderStructure-ok',
33
+ okList = '.t3js-folderStructure-ok-list',
34
+ permissionContainer = '.t3js-folderStructure-permissions'
35
+ }
36
+
37
+ type FolderStructureResponse = ModuleLoadedResponseWithButtons & {
38
+ errorStatus: MessageInterface[],
39
+ okStatus: MessageInterface[],
40
+ folderStructureFilePermissionStatus: MessageInterface,
41
+ folderStructureDirectoryPermissionStatus: MessageInterface,
42
+ };
43
+
44
+ /**
45
+ * Module: @typo3/install/module/folder-structure
46
+ */
47
+ class FolderStructure extends AbstractInteractableModule {
48
+ private static removeLoadingMessage(container: HTMLElement): void {
49
+ container.querySelector('typo3-backend-progress-bar').remove();
50
+ }
51
+
52
+ public override initialize(currentModal: ModalElement): void {
53
+ super.initialize(currentModal);
54
+
55
+ this.loadModuleFrameAgnostic('@typo3/install/renderable/info-box.js').then((): void => {
56
+ // Get status on initialize to have the badge and content ready
57
+ this.getStatus();
58
+ });
59
+
60
+ new RegularEvent('click', (event: Event): void => {
61
+ event.preventDefault();
62
+ this.fix();
63
+ }).delegateTo(currentModal, Identifiers.errorFixTrigger);
64
+ }
65
+
66
+ private getStatus(): void {
67
+ const modalContent = this.getModalBody();
68
+
69
+ (new AjaxRequest(Router.getUrl('folderStructureGetStatus')))
70
+ .get({ cache: 'no-cache' })
71
+ .then(
72
+ async (response: AjaxResponse): Promise<void> => {
73
+ const data: FolderStructureResponse = await response.resolve();
74
+ modalContent.innerHTML = data.html;
75
+ Modal.setButtons(data.buttons);
76
+ if (data.success === true && Array.isArray(data.errorStatus)) {
77
+ if (data.errorStatus.length > 0) {
78
+ modalContent.querySelector<HTMLElement>(Identifiers.errorContainer).style.display = 'block';
79
+ modalContent.querySelector(Identifiers.errorList).innerHTML = '';
80
+ data.errorStatus.forEach(((aElement: any): void => {
81
+ modalContent.querySelector(Identifiers.errorList).appendChild(InfoBox.create(aElement.severity, aElement.title, aElement.message));
82
+ }));
83
+ } else {
84
+ modalContent.querySelector<HTMLElement>(Identifiers.errorContainer).style.display = 'none';
85
+ }
86
+ }
87
+ if (data.success === true && Array.isArray(data.okStatus)) {
88
+ if (data.okStatus.length > 0) {
89
+ modalContent.querySelector<HTMLElement>(Identifiers.okContainer).style.display = 'block';
90
+ modalContent.querySelector(Identifiers.okList).innerHTML = '';
91
+ data.okStatus.forEach(((aElement: any): void => {
92
+ modalContent.querySelector(Identifiers.okList).appendChild(InfoBox.create(aElement.severity, aElement.title, aElement.message));
93
+ }));
94
+ } else {
95
+ modalContent.querySelector<HTMLElement>(Identifiers.okContainer).style.display = 'none';
96
+ }
97
+ }
98
+ let element = data.folderStructureFilePermissionStatus;
99
+ const selectorPermissionContainer = modalContent.querySelector(Identifiers.permissionContainer);
100
+ selectorPermissionContainer.replaceChildren(InfoBox.create(element.severity, element.title, element.message));
101
+
102
+ element = data.folderStructureDirectoryPermissionStatus;
103
+ selectorPermissionContainer.appendChild(InfoBox.create(element.severity, element.title, element.message));
104
+ },
105
+ (error: AjaxResponse): void => {
106
+ Router.handleAjaxError(error, modalContent);
107
+ }
108
+ );
109
+ }
110
+
111
+ private fix(): void {
112
+ this.setModalButtonsState(false);
113
+
114
+ const modalContent = this.getModalBody();
115
+ const outputContainer = this.findInModal(Identifiers.outputContainer);
116
+ this.renderProgressBar(outputContainer);
117
+ (new AjaxRequest(Router.getUrl('folderStructureFix')))
118
+ .get({ cache: 'no-cache' })
119
+ .then(
120
+ async (response: AjaxResponse): Promise<void> => {
121
+ const data = await response.resolve();
122
+ FolderStructure.removeLoadingMessage(outputContainer);
123
+ if (data.success === true && Array.isArray(data.fixedStatus)) {
124
+ if (data.fixedStatus.length > 0) {
125
+ data.fixedStatus.forEach((element: any): void => {
126
+ outputContainer.append(InfoBox.create(element.severity, element.title, element.message));
127
+ });
128
+ } else {
129
+ outputContainer.append(InfoBox.create(Severity.warning, 'Nothing fixed'));
130
+ }
131
+ this.getStatus();
132
+ } else {
133
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
134
+ }
135
+ },
136
+ (error: AjaxResponse): void => {
137
+ Router.handleAjaxError(error, modalContent);
138
+ }
139
+ ).finally((): void => {
140
+ this.setModalButtonsState(true);
141
+ });
142
+ }
143
+ }
144
+
145
+ export default new FolderStructure();
@@ -0,0 +1,141 @@
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 'bootstrap';
15
+ import { AbstractInteractableModule, type ModuleLoadedResponseWithButtons } from '../abstract-interactable-module';
16
+ import Modal from '@typo3/backend/modal';
17
+ import Notification from '@typo3/backend/notification';
18
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
19
+ import { InfoBox } from '../../renderable/info-box';
20
+ import Severity from '../../renderable/severity';
21
+ import Router from '../../router';
22
+ import type MessageInterface from '@typo3/install/message-interface';
23
+ import RegularEvent from '@typo3/core/event/regular-event';
24
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
25
+ import type { ModalElement } from '@typo3/backend/modal';
26
+
27
+ enum Identifiers {
28
+ executeTrigger = '.t3js-imageProcessing-execute',
29
+ testContainer = '.t3js-imageProcessing-twinContainer',
30
+ twinImageTemplate = '#t3js-imageProcessing-twinImage-template',
31
+ commandContainer = '.t3js-imageProcessing-command',
32
+ commandText = '.t3js-imageProcessing-command-text',
33
+ twinImages = '.t3js-imageProcessing-images'
34
+ }
35
+
36
+ type ImageProcessResponse = {
37
+ command?: string[],
38
+ fileExists: boolean,
39
+ outputFile: string,
40
+ referenceFile: string,
41
+ success: boolean,
42
+ status?: MessageInterface[]
43
+ };
44
+
45
+ /**
46
+ * Module: @typo3/install/module/image-processing
47
+ */
48
+ class ImageProcessing extends AbstractInteractableModule {
49
+ public override initialize(currentModal: ModalElement): void {
50
+ super.initialize(currentModal);
51
+ this.loadModuleFrameAgnostic('@typo3/install/renderable/info-box.js').then((): void => {
52
+ this.getData();
53
+ });
54
+
55
+ new RegularEvent('click', (event: Event): void => {
56
+ event.preventDefault();
57
+ this.runTests();
58
+ }).delegateTo(currentModal, Identifiers.executeTrigger);
59
+ }
60
+
61
+ private getData(): void {
62
+ const modalContent: HTMLElement = this.getModalBody();
63
+ (new AjaxRequest(Router.getUrl('imageProcessingGetData')))
64
+ .get({ cache: 'no-cache' })
65
+ .then(
66
+ async (response: AjaxResponse): Promise<void> => {
67
+ const data: ModuleLoadedResponseWithButtons = await response.resolve();
68
+ if (data.success === true) {
69
+ modalContent.innerHTML = data.html;
70
+ Modal.setButtons(data.buttons);
71
+ this.runTests();
72
+ } else {
73
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
74
+ }
75
+ },
76
+ (error: AjaxResponse): void => {
77
+ Router.handleAjaxError(error, modalContent);
78
+ }
79
+ );
80
+ }
81
+
82
+ private runTests(): void {
83
+ const modalContent: HTMLElement = this.getModalBody();
84
+ this.setModalButtonsState(false);
85
+
86
+ const twinImageTemplate = this.findInModal(Identifiers.twinImageTemplate) as HTMLTemplateElement;
87
+ const promises: Array<Promise<void>> = [];
88
+ modalContent.querySelectorAll(Identifiers.testContainer).forEach((container: HTMLElement): void => {
89
+ container.replaceChildren(InfoBox.create(Severity.loading, 'Loading...'));
90
+ const request = (new AjaxRequest(Router.getUrl(container.dataset.test)))
91
+ .get({ cache: 'no-cache' })
92
+ .then(
93
+ async (response: AjaxResponse): Promise<void> => {
94
+ const data: ImageProcessResponse = await response.resolve();
95
+ if (data.success === true) {
96
+ container.innerHTML = '';
97
+ if (Array.isArray(data.status)) {
98
+ data.status.forEach((element: MessageInterface): void => {
99
+ container.append(InfoBox.create(element.severity, element.title, element.message));
100
+ });
101
+ }
102
+ const aTwin: HTMLElement = twinImageTemplate.content.cloneNode(true) as HTMLElement;
103
+ if (data.fileExists === true) {
104
+ aTwin.querySelector('img.reference')?.setAttribute('src', data.referenceFile);
105
+ aTwin.querySelector('img.result')?.setAttribute('src', data.outputFile);
106
+ aTwin.querySelectorAll(Identifiers.twinImages).forEach((image: HTMLElement) => image.hidden = false);
107
+ }
108
+ if (Array.isArray(data.command) && data.command.length > 0) {
109
+ const commandContainer: HTMLElement = aTwin.querySelector(Identifiers.commandContainer);
110
+ if (commandContainer !== null) {
111
+ commandContainer.hidden = false;
112
+ }
113
+ const commandText: Array<string> = [];
114
+ data.command.forEach((aElement: any): void => {
115
+ commandText.push('<strong>Command:</strong>\n' + aElement[1]);
116
+ if (aElement.length === 3) {
117
+ commandText.push('<strong>Result:</strong>\n' + aElement[2]);
118
+ }
119
+ });
120
+ const commandTextElement: HTMLElement = aTwin.querySelector(Identifiers.commandText);
121
+ if (commandTextElement !== null) {
122
+ commandTextElement.innerHTML = commandText.join('\n');
123
+ }
124
+ }
125
+ container.append(aTwin);
126
+ }
127
+ },
128
+ (error: AjaxResponse): void => {
129
+ Router.handleAjaxError(error, modalContent);
130
+ }
131
+ );
132
+ promises.push(request);
133
+ });
134
+
135
+ Promise.all(promises).then((): void => {
136
+ this.setModalButtonsState(true);
137
+ });
138
+ }
139
+ }
140
+
141
+ export default new ImageProcessing();
@@ -0,0 +1,127 @@
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 'bootstrap';
15
+ import { AbstractInteractableModule, type ModuleLoadedResponseWithButtons } from '../abstract-interactable-module';
16
+ import Modal from '@typo3/backend/modal';
17
+ import Notification from '@typo3/backend/notification';
18
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
19
+ import { InfoBox } from '../../renderable/info-box';
20
+ import Router from '../../router';
21
+ import type MessageInterface from '@typo3/install/message-interface';
22
+ import RegularEvent from '@typo3/core/event/regular-event';
23
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
24
+ import type { ModalElement } from '@typo3/backend/modal';
25
+
26
+ enum Identifiers {
27
+ outputContainer = '.t3js-mailTest-output',
28
+ mailTestButton = '.t3js-mailTest-execute'
29
+ }
30
+
31
+ type MailGetDataResponse = ModuleLoadedResponseWithButtons & {
32
+ messages: MessageInterface[],
33
+ sendPossible: boolean,
34
+ };
35
+
36
+ type SendTestMailResponse = {
37
+ success: boolean,
38
+ status: MessageInterface[],
39
+ };
40
+
41
+ /**
42
+ * Module: @typo3/install/module/create-admin
43
+ */
44
+ class MailTest extends AbstractInteractableModule {
45
+
46
+ public override initialize(currentModal: ModalElement): void {
47
+ super.initialize(currentModal);
48
+ this.loadModuleFrameAgnostic('@typo3/install/renderable/info-box.js').then((): void => {
49
+ this.getData();
50
+ });
51
+
52
+ new RegularEvent('click', (event: Event): void => {
53
+ event.preventDefault();
54
+ this.send();
55
+ }).delegateTo(currentModal, Identifiers.mailTestButton);
56
+
57
+ new RegularEvent('submit', (event: Event): void => {
58
+ event.preventDefault();
59
+ this.send();
60
+ }).delegateTo(currentModal, 'form');
61
+ }
62
+
63
+ private getData(): void {
64
+ const modalContent = this.getModalBody();
65
+ (new AjaxRequest(Router.getUrl('mailTestGetData')))
66
+ .get({ cache: 'no-cache' })
67
+ .then(
68
+ async (response: AjaxResponse): Promise<void> => {
69
+ const data: MailGetDataResponse = await response.resolve();
70
+ if (data.success === true) {
71
+ modalContent.innerHTML = data.html;
72
+ const outputContainer: HTMLElement = this.findInModal(Identifiers.outputContainer);
73
+ if (data.messages && Array.isArray(data.messages)) {
74
+ data.messages.forEach((element: MessageInterface): void => {
75
+ outputContainer.append(InfoBox.create(element.severity, element.title, element.message));
76
+ });
77
+ }
78
+ if (data.sendPossible) {
79
+ Modal.setButtons(data.buttons);
80
+ }
81
+ } else {
82
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
83
+ }
84
+
85
+ },
86
+ (error: AjaxResponse): void => {
87
+ Router.handleAjaxError(error, modalContent);
88
+ },
89
+ );
90
+ }
91
+
92
+ private send(): void {
93
+ this.setModalButtonsState(false);
94
+
95
+ const executeToken: string = this.getModuleContent().dataset.mailTestToken;
96
+ const outputContainer: HTMLElement = this.findInModal(Identifiers.outputContainer);
97
+ this.renderProgressBar(outputContainer);
98
+ (new AjaxRequest(Router.getUrl())).post({
99
+ install: {
100
+ action: 'mailTest',
101
+ token: executeToken,
102
+ email: (this.findInModal('.t3js-mailTest-email') as HTMLInputElement).value,
103
+ },
104
+ }).then(
105
+ async (response: AjaxResponse): Promise<void> => {
106
+ const data: SendTestMailResponse = await response.resolve();
107
+ outputContainer.innerHTML = '';
108
+ if (Array.isArray(data.status)) {
109
+ data.status.forEach((element: MessageInterface): void => {
110
+ outputContainer.innerHTML = '';
111
+ outputContainer.append(InfoBox.create(element.severity, element.title, element.message));
112
+ });
113
+ } else {
114
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
115
+ }
116
+ },
117
+ (): void => {
118
+ // 500 can happen here if the mail configuration is broken
119
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
120
+ },
121
+ ).finally((): void => {
122
+ this.setModalButtonsState(true);
123
+ });
124
+ }
125
+ }
126
+
127
+ export default new MailTest();
@@ -0,0 +1,50 @@
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 Notification from '@typo3/backend/notification';
15
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
16
+ import Router from '../../router';
17
+ import { AbstractInteractableModule, type ModuleLoadedResponse } from '../abstract-interactable-module';
18
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
19
+ import type { ModalElement } from '@typo3/backend/modal';
20
+
21
+ /**
22
+ * Module: @typo3/install/module/php-info
23
+ */
24
+ class PhpInfo extends AbstractInteractableModule {
25
+ public override initialize(currentModal: ModalElement): void {
26
+ super.initialize(currentModal);
27
+ this.getData();
28
+ }
29
+
30
+ private getData(): void {
31
+ const modalContent = this.getModalBody();
32
+ (new AjaxRequest(Router.getUrl('phpInfoGetData')))
33
+ .get({ cache: 'no-cache' })
34
+ .then(
35
+ async (response: AjaxResponse): Promise<void> => {
36
+ const data: ModuleLoadedResponse = await response.resolve();
37
+ if (data.success === true) {
38
+ modalContent.innerHTML = data.html;
39
+ } else {
40
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
41
+ }
42
+ },
43
+ (error: AjaxResponse): void => {
44
+ Router.handleAjaxError(error, modalContent);
45
+ }
46
+ );
47
+ }
48
+ }
49
+
50
+ export default new PhpInfo();
@@ -0,0 +1,50 @@
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 Notification from '@typo3/backend/notification';
15
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
16
+ import Router from '../../router';
17
+ import { AbstractInteractableModule, type ModuleLoadedResponse } from '../abstract-interactable-module';
18
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
19
+ import type { ModalElement } from '@typo3/backend/modal';
20
+
21
+ /**
22
+ * Module: @typo3/install/module/system-information
23
+ */
24
+ class SystemInformation extends AbstractInteractableModule {
25
+ public override initialize(currentModal: ModalElement): void {
26
+ super.initialize(currentModal);
27
+ this.getData();
28
+ }
29
+
30
+ private getData(): void {
31
+ const modalContent = this.getModalBody();
32
+ (new AjaxRequest(Router.getUrl('systemInformationGetData')))
33
+ .get({ cache: 'no-cache' })
34
+ .then(
35
+ async (response: AjaxResponse): Promise<void> => {
36
+ const data: ModuleLoadedResponse = await response.resolve();
37
+ if (data.success === true) {
38
+ modalContent.innerHTML = data.html;
39
+ } else {
40
+ Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
41
+ }
42
+ },
43
+ (error: AjaxResponse): void => {
44
+ Router.handleAjaxError(error, modalContent);
45
+ }
46
+ );
47
+ }
48
+ }
49
+
50
+ export default new SystemInformation();
@@ -0,0 +1,59 @@
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 Notification from '@typo3/backend/notification';
15
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
16
+ import Router from '../../router';
17
+ import { AbstractInlineModule, type ActionResponse } from '../abstract-inline-module';
18
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
19
+ import type MessageInterface from '@typo3/install/message-interface';
20
+
21
+ /**
22
+ * Module: @typo3/install/module/cache
23
+ */
24
+ class Cache extends AbstractInlineModule {
25
+ public override initialize(trigger: HTMLButtonElement): void {
26
+ this.setButtonState(trigger, false);
27
+
28
+ (new AjaxRequest(Router.getUrl('cacheClearAll', 'maintenance')))
29
+ .get({ cache: 'no-cache' })
30
+ .then(
31
+ async (response: AjaxResponse): Promise<void> => {
32
+ const data: ActionResponse = await response.resolve();
33
+ if (data.success === true && Array.isArray(data.status)) {
34
+ if (data.status.length > 0) {
35
+ data.status.forEach((element: MessageInterface): void => {
36
+ Notification.success(element.title, element.message);
37
+ });
38
+ }
39
+ } else {
40
+ Notification.error('Something went wrong clearing caches');
41
+ }
42
+ },
43
+ (): void => {
44
+ // In case the clear cache action fails (typically 500 from server), do not kill the entire
45
+ // Install Tool, instead show a notification that something went wrong.
46
+ Notification.error(
47
+ 'Clearing caches failed',
48
+ 'Clearing caches went wrong on the server side. Check the system for broken extensions or missing database tables and try again.'
49
+ + ' Also ensure you are properly authenticated and the server does not report specific PHP parse errors or JavaScript errors are listed in the browser console.',
50
+ );
51
+ },
52
+ )
53
+ .finally((): void => {
54
+ this.setButtonState(trigger, true);
55
+ });
56
+ }
57
+ }
58
+
59
+ export default new Cache();