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,240 @@
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 { html, LitElement, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { until } from 'lit/directives/until';
17
+ import { unsafeHTML } from 'lit/directives/unsafe-html';
18
+ import { classMap } from 'lit/directives/class-map';
19
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
20
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
21
+ import Notification from '@typo3/backend/notification';
22
+ import '@typo3/backend/element/spinner-element';
23
+ import '@typo3/backend/element/icon-element';
24
+
25
+ enum CopyMode {
26
+ cut = 'cut',
27
+ copy = 'copy',
28
+ }
29
+
30
+ interface ClipboardData {
31
+ current: string;
32
+ copyMode: CopyMode;
33
+ elementCount: number;
34
+ tabs: Array<ClipboardTab>;
35
+ labels: Record<string, string>;
36
+ }
37
+
38
+ interface ClipboardTab {
39
+ identifier: string;
40
+ info: string;
41
+ title: string;
42
+ description: string;
43
+ items: Array<ClipboardTabItem>;
44
+ }
45
+
46
+ interface ClipboardTabItem {
47
+ identifier: string;
48
+ title: string;
49
+ icon: string;
50
+ thumb: string;
51
+ infoDataDispatch: DispatchArgs;
52
+ }
53
+
54
+ interface DispatchArgs {
55
+ action: string,
56
+ args: Array<any>
57
+ }
58
+
59
+ /**
60
+ * Module: @typo3/backend/clipboard-panel
61
+ *
62
+ * @example
63
+ * <typo3-backend-clipboard-panel return-url="/typo3/module" table="_FILE"></typo3-backend-clipboard-panel>
64
+ */
65
+ @customElement('typo3-backend-clipboard-panel')
66
+ export class ClipboardPanel extends LitElement {
67
+ @property({ type: String, attribute: 'return-url' }) returnUrl: string = '';
68
+ @property({ type: String }) table: string = '';
69
+
70
+ private static renderLoader(): TemplateResult {
71
+ return html`
72
+ <div class="panel panel-default">
73
+ <div class="panel-loader">
74
+ <typo3-backend-spinner size="small"></typo3-backend-spinner>
75
+ </div>
76
+ </div>
77
+ `;
78
+ }
79
+
80
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
81
+ // @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
82
+ // const renderRoot = this.attachShadow({mode: 'open'});
83
+ return this;
84
+ }
85
+
86
+ protected override render(): TemplateResult {
87
+ return html`
88
+ ${until(this.renderPanel(), ClipboardPanel.renderLoader())}
89
+ `;
90
+ }
91
+
92
+ private renderPanel(): Promise<TemplateResult> {
93
+ return (new AjaxRequest(top.TYPO3.settings.Clipboard.moduleUrl))
94
+ .withQueryArguments({ action: 'getClipboardData' })
95
+ .post({ table: this.table })
96
+ .then(async (response: AjaxResponse): Promise<TemplateResult> => {
97
+ const resolvedBody = await response.resolve();
98
+ if (resolvedBody.success === true && resolvedBody.data) {
99
+ const clipboardData: ClipboardData = resolvedBody.data;
100
+ return html`
101
+ <div class="panel panel-default" data-clipboard-panel>
102
+ <div class="panel-heading">
103
+ ${clipboardData.labels.clipboard}
104
+ </div>
105
+ <div class="table-fit">
106
+ <table class="table">
107
+ <tbody>
108
+ ${clipboardData.tabs.map((tab: ClipboardTab): TemplateResult => this.renderTab(tab, clipboardData))}
109
+ </tbody>
110
+ </table>
111
+ </div>
112
+ </div>
113
+ `;
114
+ } else {
115
+ return html`
116
+ <div class="alert alert-danger">Clipboard data could not be fetched</div>
117
+ `;
118
+ }
119
+ })
120
+ .catch((): TemplateResult => {
121
+ return html`
122
+ <div class="alert alert-danger">An error occurred while fetching clipboard data</div>
123
+ `;
124
+ });
125
+ }
126
+
127
+ private renderTab(tab: ClipboardTab, clipboardData: ClipboardData): TemplateResult {
128
+ return html`
129
+ <tr>
130
+ <td colspan="2" class="nowrap">
131
+ <button type="button" class="btn btn-link" aria-checked="${clipboardData.current === tab.identifier}" title="${tab.description}" data-action="setP" @click="${(event: PointerEvent) => this.updateClipboard(event, { CB: { 'setP': tab.identifier } })}">
132
+ ${clipboardData.current === tab.identifier ? html`
133
+ <typo3-backend-icon identifier="actions-check-circle-alt" size="small"></typo3-backend-icon>
134
+ ${tab.title}
135
+ ${tab.info}` : html`
136
+ <typo3-backend-icon identifier="actions-circle" size="small"></typo3-backend-icon>
137
+ <span class="text-body-secondary">
138
+ ${tab.title}
139
+ ${tab.info}
140
+ </span>
141
+ `}
142
+ </button>
143
+ </td>
144
+ <td class="col-control nowrap">
145
+ ${clipboardData.current !== tab.identifier ? nothing : html`
146
+ <div class="btn-group">
147
+ <input type="radio" class="btn-check" id="clipboard-copymode-copy" data-action="setCopyMode" ?checked=${clipboardData.copyMode === CopyMode.copy} @click="${(event: PointerEvent) => this.updateClipboard(event, { CB: { 'setCopyMode': '1' } })}">
148
+ <label class="btn btn-default btn-sm" for="clipboard-copymode-copy">
149
+ <typo3-backend-icon identifier="actions-edit-copy" size="small"></typo3-backend-icon>
150
+ ${clipboardData.labels.copyElements}
151
+ </label>
152
+ <input type="radio" class="btn-check" id="clipboard-copymode-move" data-action="setCopyMode" ?checked=${clipboardData.copyMode !== CopyMode.copy} @click="${(event: PointerEvent) => this.updateClipboard(event, { CB: { 'setCopyMode': '0' } })}">
153
+ <label class="btn btn-default btn-sm" for="clipboard-copymode-move">
154
+ <typo3-backend-icon identifier="actions-cut" size="small"></typo3-backend-icon>
155
+ ${clipboardData.labels.moveElements}
156
+ </label>
157
+ </div>
158
+ ${!clipboardData.elementCount ? nothing : html`
159
+ <button type="button" class="btn btn-default btn-sm" title="${clipboardData.labels.removeAll}" data-action="removeAll" @click="${(event: PointerEvent) => this.updateClipboard(event, { CB: { 'removeAll': tab.identifier } })}">
160
+ <typo3-backend-icon identifier="actions-minus" size="small"></typo3-backend-icon>
161
+ ${clipboardData.labels.removeAll}
162
+ </button>`}
163
+ `}
164
+ </td>
165
+ </tr>
166
+ ${clipboardData.current === tab.identifier && tab.items ? tab.items.map((tabItem: ClipboardTabItem): TemplateResult => this.renderTabItem(tabItem, tab.identifier, clipboardData)) : nothing}
167
+ `;
168
+ }
169
+
170
+ private renderTabItem(tabItem: ClipboardTabItem, tabIdentifier: string, clipboardData: ClipboardData): TemplateResult {
171
+ return html`
172
+ <tr>
173
+ <td class="col-icon nowrap ${classMap({ 'ps-4': !tabItem.identifier })}">
174
+ ${unsafeHTML(tabItem.icon)}
175
+ </td>
176
+ <td class="nowrap" style="width: 95%">
177
+ ${unsafeHTML(tabItem.title)}
178
+ ${tabIdentifier === 'normal' ? html`<strong>(${clipboardData.copyMode === CopyMode.copy ? html`${clipboardData.labels.copy}` : html`${clipboardData.labels.cut}`})</strong>` : nothing}
179
+ ${tabItem.thumb ? html`<div class="d-block">${unsafeHTML(tabItem.thumb)}</div>` : nothing}
180
+ </td>
181
+ <td class="col-control nowrap">
182
+ <div class="btn-group">
183
+ ${!tabItem.infoDataDispatch ? nothing : html`
184
+ <button type="button" class="btn btn-default btn-sm" data-dispatch-action="${tabItem.infoDataDispatch.action}" data-dispatch-args="${tabItem.infoDataDispatch.args}" title="${clipboardData.labels.info}">
185
+ <typo3-backend-icon identifier="actions-document-info" size="small"></typo3-backend-icon>
186
+ </button>
187
+ `}
188
+ ${!tabItem.identifier ? nothing : html`
189
+ <button type="button" class="btn btn-default btn-sm" title="${clipboardData.labels.removeItem}" data-action="remove" @click="${(event: PointerEvent) => this.updateClipboard(event,{ CB: { 'remove': tabItem.identifier } })}">
190
+ <typo3-backend-icon identifier="actions-minus" size="small"></typo3-backend-icon>
191
+ ${clipboardData.labels.removeItem}
192
+ </button>
193
+ `}
194
+ </div>
195
+ </td>
196
+ </tr>`;
197
+ }
198
+
199
+ private updateClipboard(event: PointerEvent, payload: object): void {
200
+ event.preventDefault();
201
+ const target: HTMLElement = event.currentTarget as HTMLElement;
202
+ (new AjaxRequest(top.TYPO3.settings.Clipboard.moduleUrl))
203
+ .post(payload)
204
+ .then(async (response: AjaxResponse): Promise<void> => {
205
+ const resolvedBody = await response.resolve();
206
+ if (resolvedBody.success === true) {
207
+ // In case action is provided, dispatch an event to let
208
+ // other components react on the updated clipboard state.
209
+ if (target.dataset.action) {
210
+ target.dispatchEvent(new CustomEvent('typo3:clipboard:' + target.dataset.action, {
211
+ detail: { payload: payload, response: resolvedBody },
212
+ bubbles: true,
213
+ cancelable: false
214
+ }));
215
+ }
216
+ // @todo Add possibility for a callback, e.g. to dispatch an event after clipboard data was updated
217
+ this.reloadModule();
218
+ } else {
219
+ Notification.error('Clipboard data could not be updated');
220
+ }
221
+ })
222
+ .catch((): void => {
223
+ Notification.error('An error occurred while updating clipboard data');
224
+ });
225
+ }
226
+
227
+ private reloadModule (): void {
228
+ if (this.returnUrl) {
229
+ this.ownerDocument.location.href = this.returnUrl;
230
+ } else {
231
+ this.ownerDocument.location.reload();
232
+ }
233
+ }
234
+ }
235
+
236
+ declare global {
237
+ interface HTMLElementTagNameMap {
238
+ 'typo3-backend-clipboard-panel': ClipboardPanel;
239
+ }
240
+ }
@@ -0,0 +1,2 @@
1
+ self.close();
2
+ window.opener.location.reload();
@@ -0,0 +1,105 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import type { TsRef, TsRefType } from './ts-ref';
15
+ import type { TreeNode } from './ts-parser';
16
+
17
+ export type Proposal = {
18
+ type: string,
19
+ word?: string,
20
+ cssClass?: string,
21
+ };
22
+
23
+ export class CompletionResult {
24
+ private readonly tsRef: TsRef;
25
+ private readonly tsTreeNode: TreeNode;
26
+
27
+ constructor(tsRef: TsRef, tsTreeNode: TreeNode) {
28
+ this.tsRef = tsRef;
29
+ this.tsTreeNode = tsTreeNode;
30
+ }
31
+
32
+ /**
33
+ * returns the type of the currentTsTreeNode
34
+ */
35
+ public getType(): TsRefType | null {
36
+ const val = this.tsTreeNode.getValue();
37
+ if (this.tsRef.isType(val)) {
38
+ return this.tsRef.getType(val);
39
+ }
40
+ return null;
41
+ }
42
+
43
+ /**
44
+ * returns a list of possible path completions (proposals), which is:
45
+ * a list of the children of the current TsTreeNode (= userdefined properties)
46
+ * and a list of properties allowed for the current object in the TsRef
47
+ * remove all words from list that don't start with the string in filter
48
+ */
49
+ public getFilteredProposals(filter: string): Array<Proposal> {
50
+ const defined: Record<string, boolean> = {};
51
+ const propArr: Array<Proposal> = [];
52
+ const childNodes = this.tsTreeNode.getChildNodes();
53
+ const value = this.tsTreeNode.getValue();
54
+
55
+ // first get the childNodes of the Node (=properties defined by the user)
56
+ for (const key in childNodes) {
57
+ if (typeof childNodes[key].value !== 'undefined' && childNodes[key].value !== null) {
58
+ const propObj: Proposal = {} as Proposal;
59
+ propObj.word = key;
60
+ if (this.tsRef.typeHasProperty(value, childNodes[key].name)) {
61
+ this.tsRef.cssClass = 'definedTSREFProperty';
62
+ propObj.type = childNodes[key].value;
63
+ } else {
64
+ propObj.cssClass = 'userProperty';
65
+ if (this.tsRef.isType(childNodes[key].value)) {
66
+ propObj.type = childNodes[key].value;
67
+ } else {
68
+ propObj.type = '';
69
+ }
70
+ }
71
+ propArr.push(propObj);
72
+ defined[key] = true;
73
+ }
74
+ }
75
+
76
+ // then get the tsref properties
77
+ const props = this.tsRef.getPropertiesFromTypeId(this.tsTreeNode.getValue());
78
+ for (const key in props) {
79
+ // show just the TSREF properties - no properties of the array-prototype and no properties which have been defined by the user
80
+ if (typeof props[key].value !== 'undefined' && defined[key] !== true) {
81
+ const propObj = {
82
+ word: key,
83
+ cssClass: 'undefinedTSREFProperty',
84
+ type: props[key].value,
85
+ };
86
+ propArr.push(propObj);
87
+ }
88
+ }
89
+
90
+ const result: Array<Proposal> = [];
91
+ let wordBeginning = '';
92
+
93
+ for (let i = 0; i < propArr.length; i++) {
94
+ if (filter.length === 0) {
95
+ result.push(propArr[i]);
96
+ continue;
97
+ }
98
+ wordBeginning = propArr[i].word.substring(0, filter.length);
99
+ if (wordBeginning.toLowerCase() === filter.toLowerCase()) {
100
+ result.push(propArr[i]);
101
+ }
102
+ }
103
+ return result;
104
+ }
105
+ }
@@ -0,0 +1,142 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ /**
15
+ * Module: ./ts-code-completion
16
+ * Contains the TsCodeCompletion class
17
+ */
18
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
19
+ import { TsRef } from './ts-ref';
20
+ import { TsParser } from './ts-parser';
21
+ import { CompletionResult, type Proposal } from './completion-result';
22
+
23
+ import type { CodeMirror5CompatibleCompletionState } from '../language/typoscript';
24
+
25
+ export type ContentObjectIdentifier = string;
26
+
27
+ export type TsObjTree = {
28
+ c?: Record<string, TsObjTree>;
29
+ v?: ContentObjectIdentifier;
30
+ };
31
+
32
+ export class TsCodeCompletion {
33
+ public extTsObjTree: TsObjTree = {};
34
+ private readonly tsRef: TsRef;
35
+ private readonly parser: TsParser = null;
36
+ private proposals: Array<Proposal> = null;
37
+ private compResult: CompletionResult = null;
38
+
39
+ constructor(id: number) {
40
+ this.tsRef = new TsRef();
41
+ this.parser = new TsParser(this.tsRef, this.extTsObjTree);
42
+ this.tsRef.loadTsrefAsync();
43
+ this.loadExtTemplatesAsync(id);
44
+ }
45
+
46
+ /**
47
+ * Refreshes the code completion list based on the cursor's position
48
+ */
49
+ public refreshCodeCompletion(
50
+ completionState: CodeMirror5CompatibleCompletionState
51
+ ): Array<Proposal['word']> {
52
+ // the cursornode has to be stored cause inserted breaks have to be deleted after pressing enter if the codecompletion is active
53
+ const filter = this.getFilter(completionState);
54
+
55
+ // TODO: implement cases: operatorCompletion reference/copy path completion (formerly found in getCompletionResults())
56
+ const currentTsTreeNode = this.parser.buildTsObjTree(completionState);
57
+ this.compResult = new CompletionResult(
58
+ this.tsRef,
59
+ currentTsTreeNode
60
+ );
61
+
62
+ this.proposals = this.compResult.getFilteredProposals(filter);
63
+
64
+ const proposals: string[] = [];
65
+ for (let i = 0; i < this.proposals.length; i++) {
66
+ proposals[i] = this.proposals[i].word;
67
+ }
68
+
69
+ return proposals;
70
+ }
71
+
72
+ /**
73
+ * All external templates along the rootline have to be loaded,
74
+ * this function retrieves the JSON code by committing a AJAX request
75
+ */
76
+ private loadExtTemplatesAsync(id: number): void {
77
+ if (Number.isNaN(id) || id === 0) {
78
+ return null;
79
+ }
80
+ new AjaxRequest(TYPO3.settings.ajaxUrls.codeeditor_codecompletion_loadtemplates)
81
+ .withQueryArguments({ pageId: id })
82
+ .get()
83
+ .then(async (response) => {
84
+ this.extTsObjTree.c = await response.resolve();
85
+ this.resolveExtReferencesRec(this.extTsObjTree.c);
86
+ });
87
+ }
88
+
89
+ /**
90
+ * Since the references are not resolved server side we have to do it client-side
91
+ * Benefit: less loading time due to less data which has to be transmitted
92
+ *
93
+ * @param {Array} childNodes
94
+ */
95
+ private resolveExtReferencesRec(childNodes: Record<string, TsObjTree>): void {
96
+ for (const key of Object.keys(childNodes)) {
97
+ let childNode;
98
+ // if the childnode has a value and there is a part of a reference operator ('<')
99
+ // and it does not look like a html tag ('>')
100
+ if (childNodes[key].v && childNodes[key].v.startsWith('<') && !childNodes[key].v.includes('>')) {
101
+ const path = childNodes[key].v.replace(/</, '').trim();
102
+ // if there are still whitespaces it's no path
103
+ if (path.indexOf(' ') === -1) {
104
+ childNode = this.getExtChildNode(path);
105
+ // if the node was found - reference it
106
+ if (childNode !== null) {
107
+ childNodes[key] = childNode;
108
+ }
109
+ }
110
+ }
111
+ // if there was no reference-resolving then we go deeper into the tree
112
+ if (!childNode && childNodes[key].c) {
113
+ this.resolveExtReferencesRec(childNodes[key].c);
114
+ }
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Get the child node of given path
120
+ */
121
+ private getExtChildNode(path: string): object {
122
+ let extTree = this.extTsObjTree;
123
+
124
+ const pathParts = path.split('.');
125
+ for (let i = 0; i < pathParts.length; i++) {
126
+ const pathSeg = pathParts[i];
127
+ if (typeof extTree.c === 'undefined' || typeof extTree.c[pathSeg] === 'undefined') {
128
+ return null;
129
+ }
130
+ extTree = extTree.c[pathSeg];
131
+ }
132
+ return extTree;
133
+ }
134
+
135
+ private getFilter(completionState: CodeMirror5CompatibleCompletionState): string {
136
+ if (completionState.completingAfterDot) {
137
+ return '';
138
+ }
139
+
140
+ return completionState.token.string.replace('.', '').replace(/\s/g, '');
141
+ }
142
+ }