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,42 @@
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 { AjaxResponse } from '@typo3/core/ajax/ajax-response';
15
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
16
+ import RegularEvent from '@typo3/core/event/regular-event';
17
+
18
+ class UploadForm {
19
+ public expandedUploadFormClass: string = 'transformed';
20
+
21
+ public initializeEvents(): void {
22
+ // Show upload form
23
+ new RegularEvent('click', (event: Event, target: HTMLAnchorElement): void => {
24
+ const uploadForm = document.querySelector('.extension-upload-form') as HTMLElement;
25
+
26
+ event.preventDefault();
27
+ if (uploadForm.classList.contains(this.expandedUploadFormClass)) {
28
+ uploadForm.style.display = 'none';
29
+ uploadForm.classList.remove(this.expandedUploadFormClass);
30
+ } else {
31
+ uploadForm.style.display = '';
32
+ uploadForm.classList.add(this.expandedUploadFormClass);
33
+
34
+ new AjaxRequest(target.href).get().then(async (response: AjaxResponse): Promise<void> => {
35
+ uploadForm.querySelector('.t3js-upload-form-target').innerHTML = await response.resolve();
36
+ });
37
+ }
38
+ }).delegateTo(document, '.t3js-upload');
39
+ }
40
+ }
41
+
42
+ export default UploadForm;
@@ -0,0 +1,148 @@
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 { MessageUtility } from '@typo3/backend/utility/message-utility';
15
+ import ElementBrowser from '@typo3/backend/element-browser';
16
+ import NProgress from 'nprogress';
17
+ import RegularEvent from '@typo3/core/event/regular-event';
18
+ import Icons from '@typo3/backend/icons';
19
+ import type { ActionEventDetails } from '@typo3/backend/multi-record-selection-action';
20
+ import { FileListActionEvent, type FileListActionDetail, FileListActionSelector, FileListActionUtility } from '@typo3/filelist/file-list-actions';
21
+ import InfoWindow from '@typo3/backend/info-window';
22
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
23
+ import type { ResourceInterface } from '@typo3/backend/resource/resource';
24
+
25
+ class BrowseFiles {
26
+ constructor() {
27
+
28
+ new RegularEvent(FileListActionEvent.primary, (event: CustomEvent): void => {
29
+ event.preventDefault();
30
+ const detail: FileListActionDetail = event.detail;
31
+ detail.originalAction = FileListActionEvent.primary;
32
+ detail.action = FileListActionEvent.select;
33
+ document.dispatchEvent(new CustomEvent(FileListActionEvent.select, { detail: detail }));
34
+ }).bindTo(document);
35
+
36
+ new RegularEvent(FileListActionEvent.select, (event: CustomEvent): void => {
37
+ event.preventDefault();
38
+ const detail: FileListActionDetail = event.detail;
39
+ const resource = detail.resources[0];
40
+ if (resource.type === 'file') {
41
+ BrowseFiles.insertElement(resource.name, resource.uid, detail.originalAction === FileListActionEvent.primary);
42
+ }
43
+ if (resource.type === 'folder') {
44
+ this.loadContent(resource);
45
+ }
46
+ }).bindTo(document);
47
+
48
+ new RegularEvent(FileListActionEvent.show, (event: CustomEvent): void => {
49
+ event.preventDefault();
50
+ const detail: FileListActionDetail = event.detail;
51
+ const resource = detail.resources[0];
52
+ InfoWindow.showItem('_' + resource.type.toUpperCase(), resource.identifier);
53
+ }).bindTo(document);
54
+
55
+ // Handle import selection event, dispatched from MultiRecordSelection
56
+ new RegularEvent('multiRecordSelection:action:import', this.importSelection).bindTo(document);
57
+
58
+ }
59
+
60
+ public static insertElement(fileName: string, fileUid: number, close?: boolean): boolean {
61
+ return ElementBrowser.insertElement(
62
+ 'sys_file',
63
+ String(fileUid),
64
+ fileName,
65
+ String(fileUid),
66
+ close,
67
+ );
68
+ }
69
+
70
+ private static handleNext(items: ResourceInterface[]): void {
71
+ if (items.length > 0) {
72
+ const item = items.pop();
73
+ BrowseFiles.insertElement(item.name, Number(item.uid));
74
+ }
75
+ }
76
+
77
+ private async loadContent(resource: ResourceInterface): Promise<void>
78
+ {
79
+ if (resource.type !== 'folder') {
80
+ return;
81
+ }
82
+ const contentsUrl = document.location.href + '&contentOnly=1&expandFolder=' + resource.identifier;
83
+ const response = await new AjaxRequest(contentsUrl).get();
84
+ const html = await response.resolve();
85
+ const contentContainer = document.querySelector('.element-browser-main-content .element-browser-body') as HTMLElement;
86
+ contentContainer.innerHTML = html;
87
+ const tree = document.querySelector('typo3-backend-component-filestorage-browser-tree');
88
+ if (tree) {
89
+ const treeNodeIdentifier = encodeURIComponent(resource.identifier);
90
+ // @todo Support loading the node via rootline, in case the node has not be loaded in the tree yet, see @typo3/backend/tree/tree-module-state
91
+ const node = tree.nodes.find((node) => node.identifier === treeNodeIdentifier);
92
+ if (node) {
93
+ await tree.expandNodeParents(node);
94
+ tree.selectNode(node, false);
95
+ }
96
+ }
97
+ }
98
+
99
+ private readonly importSelection = (event: CustomEvent): void => {
100
+ event.preventDefault();
101
+ const target: HTMLElement = event.target as HTMLElement;
102
+ const items: NodeListOf<HTMLInputElement> = (event.detail as ActionEventDetails).checkboxes;
103
+ if (!items.length) {
104
+ return;
105
+ }
106
+
107
+ const selectedItems: ResourceInterface[] = [];
108
+ items.forEach((checkbox: HTMLInputElement) => {
109
+ if (checkbox.checked) {
110
+ const element = checkbox.closest(FileListActionSelector.elementSelector) as HTMLInputElement;
111
+ const resource = FileListActionUtility.getResourceForElement(element);
112
+ if (resource.type === 'file' && resource.uid) {
113
+ selectedItems.unshift(resource);
114
+ }
115
+ }
116
+ });
117
+ if (!selectedItems.length) {
118
+ return;
119
+ }
120
+
121
+ Icons.getIcon('spinner-circle', Icons.sizes.small, null, null, Icons.markupIdentifiers.inline).then((icon: string): void => {
122
+ target.classList.add('disabled');
123
+ target.innerHTML = icon;
124
+ });
125
+ NProgress.configure({ parent: '.element-browser-main-content', showSpinner: false });
126
+ NProgress.start();
127
+ const stepping = 1 / selectedItems.length;
128
+ BrowseFiles.handleNext(selectedItems);
129
+
130
+ new RegularEvent('message', (event: MessageEvent): void => {
131
+ if (!MessageUtility.verifyOrigin(event.origin)) {
132
+ throw 'Denied message sent by ' + event.origin;
133
+ }
134
+
135
+ if (event.data.actionName === 'typo3:foreignRelation:inserted') {
136
+ if (selectedItems.length > 0) {
137
+ NProgress.inc(stepping);
138
+ BrowseFiles.handleNext(selectedItems);
139
+ } else {
140
+ NProgress.done();
141
+ ElementBrowser.focusOpenerAndClose();
142
+ }
143
+ }
144
+ }).bindTo(window);
145
+ };
146
+ }
147
+
148
+ export default new BrowseFiles();
@@ -0,0 +1,94 @@
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 ElementBrowser from '@typo3/backend/element-browser';
15
+ import RegularEvent from '@typo3/core/event/regular-event';
16
+ import type { ActionEventDetails } from '@typo3/backend/multi-record-selection-action';
17
+ import { FileListActionEvent, type FileListActionDetail, FileListActionSelector, FileListActionUtility } from '@typo3/filelist/file-list-actions';
18
+ import InfoWindow from '@typo3/backend/info-window';
19
+ import type { ResourceInterface } from '@typo3/backend/resource/resource';
20
+
21
+ /**
22
+ * Module: @typo3/backend/browse-folders
23
+ * Folder selection
24
+ * @exports @typo3/backend/browse-folders
25
+ */
26
+ class BrowseFolders {
27
+ constructor() {
28
+
29
+ new RegularEvent(FileListActionEvent.primary, (event: CustomEvent): void => {
30
+ event.preventDefault();
31
+ const detail: FileListActionDetail = event.detail;
32
+ detail.originalAction = FileListActionEvent.primary;
33
+ detail.action = FileListActionEvent.select;
34
+ document.dispatchEvent(new CustomEvent(FileListActionEvent.select, { detail: detail }));
35
+ }).bindTo(document);
36
+
37
+ new RegularEvent(FileListActionEvent.select, (event: CustomEvent): void => {
38
+ event.preventDefault();
39
+ const detail: FileListActionDetail = event.detail;
40
+ const resource = detail.resources[0];
41
+ if (resource.type === 'folder') {
42
+ BrowseFolders.insertElement(resource.identifier, detail.originalAction === FileListActionEvent.primary);
43
+ }
44
+ }).bindTo(document);
45
+
46
+ new RegularEvent(FileListActionEvent.show, (event: CustomEvent): void => {
47
+ event.preventDefault();
48
+ const detail: FileListActionDetail = event.detail;
49
+ const resource = detail.resources[0];
50
+ InfoWindow.showItem('_' + resource.type.toUpperCase(), resource.identifier);
51
+ }).bindTo(document);
52
+
53
+ // Handle import selection event, dispatched from MultiRecordSelection
54
+ new RegularEvent('multiRecordSelection:action:import', this.importSelection).bindTo(document);
55
+
56
+ }
57
+
58
+ public static insertElement(identifier: string, close?: boolean): boolean {
59
+ return ElementBrowser.insertElement(
60
+ '',
61
+ identifier,
62
+ identifier,
63
+ identifier,
64
+ close,
65
+ );
66
+ }
67
+
68
+ private readonly importSelection = (event: CustomEvent): void => {
69
+ event.preventDefault();
70
+ const items: NodeListOf<HTMLInputElement> = (event.detail as ActionEventDetails).checkboxes;
71
+ if (!items.length) {
72
+ return;
73
+ }
74
+ const selectedItems: ResourceInterface[] = [];
75
+ items.forEach((checkbox: HTMLInputElement) => {
76
+ if (checkbox.checked) {
77
+ const element = checkbox.closest(FileListActionSelector.elementSelector) as HTMLInputElement;
78
+ const resource = FileListActionUtility.getResourceForElement(element);
79
+ if (resource.type === 'folder' && resource.identifier) {
80
+ selectedItems.unshift(resource);
81
+ }
82
+ }
83
+ });
84
+ if (!selectedItems.length) {
85
+ return;
86
+ }
87
+ selectedItems.forEach(function (resource: ResourceInterface) {
88
+ BrowseFolders.insertElement(resource.identifier);
89
+ });
90
+ ElementBrowser.focusOpenerAndClose();
91
+ };
92
+ }
93
+
94
+ export default new BrowseFolders();
@@ -0,0 +1,335 @@
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 { lll } from '@typo3/core/lit-helper';
15
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
16
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
17
+ import Notification from '@typo3/backend/notification';
18
+ import Modal from '@typo3/backend/modal';
19
+ import Md5 from '@typo3/backend/hashing/md5';
20
+ import { fileListOpenElementBrowser } from '@typo3/filelist/file-list';
21
+ import { FileListActionEvent, type FileListActionDetail, FileListActionUtility } from './file-list-actions';
22
+
23
+ /**
24
+ * Module: @typo3/filelist/context-menu-actions
25
+ *
26
+ * JavaScript to handle filelist actions from context menu
27
+ * @exports @typo3/filelist/context-menu-actions
28
+ */
29
+ class ContextMenuActions {
30
+ public static getReturnUrl(): string {
31
+ return encodeURIComponent(top.list_frame.document.location.pathname + top.list_frame.document.location.search);
32
+ }
33
+
34
+ public static triggerFileDownload(downloadUrl: string, fileName: string, revokeObjectURL: boolean = false): void {
35
+ const anchorTag = document.createElement('a');
36
+ anchorTag.href = downloadUrl;
37
+ anchorTag.download = fileName;
38
+ document.body.appendChild(anchorTag);
39
+ anchorTag.click();
40
+ if (revokeObjectURL) {
41
+ URL.revokeObjectURL(downloadUrl);
42
+ }
43
+ document.body.removeChild(anchorTag);
44
+ // Add notification about successful preparation
45
+ Notification.success(lll('file_download.success'), '', 2);
46
+ }
47
+
48
+ public static renameFile(table: string, uid: string, dataset: DOMStringMap): void {
49
+ (async () => {
50
+ await import('@typo3/filelist/file-list-rename-handler');
51
+ const resource = FileListActionUtility.createResourceFromContextDataset(dataset);
52
+ const detail: FileListActionDetail = {
53
+ event: null,
54
+ trigger: null,
55
+ action: FileListActionEvent.rename,
56
+ resources: [resource],
57
+ url: null,
58
+ originalAction: null
59
+ };
60
+ document.dispatchEvent(new CustomEvent(FileListActionEvent.rename, { detail: detail }));
61
+ })();
62
+ }
63
+
64
+ public static replaceFile(table: string, uid: string, dataset: DOMStringMap): void {
65
+ const resource = FileListActionUtility.createResourceFromContextDataset(dataset);
66
+ const actionUrl: string = dataset.actionUrl;
67
+ top.TYPO3.Backend.ContentContainer.setUrl(
68
+ actionUrl + '&target=' + encodeURIComponent(resource.identifier) + '&uid=' + encodeURIComponent(resource.uid) + '&returnUrl=' + ContextMenuActions.getReturnUrl(),
69
+ );
70
+ }
71
+
72
+ public static editFile(table: string, uid: string, dataset: DOMStringMap): void {
73
+ const actionUrl: string = dataset.actionUrl;
74
+ top.TYPO3.Backend.ContentContainer.setUrl(
75
+ actionUrl + '&target=' + encodeURIComponent(uid) + '&returnUrl=' + ContextMenuActions.getReturnUrl(),
76
+ );
77
+ }
78
+
79
+ public static editMetadata(table: string, uid: string, dataset: DOMStringMap): void {
80
+ const resource = FileListActionUtility.createResourceFromContextDataset(dataset);
81
+ if (!resource.metaUid) {
82
+ return;
83
+ }
84
+ top.TYPO3.Backend.ContentContainer.setUrl(
85
+ top.TYPO3.settings.FormEngine.moduleUrl
86
+ + '&edit[sys_file_metadata][' + resource.metaUid + ']=edit'
87
+ + '&returnUrl=' + ContextMenuActions.getReturnUrl()
88
+ );
89
+ }
90
+
91
+ public static openInfoPopUp(table: string, uid: string): void {
92
+ if (table === 'sys_file_storage') {
93
+ top.TYPO3.InfoWindow.showItem(table, uid);
94
+ } else {
95
+ // Files and folders
96
+ top.TYPO3.InfoWindow.showItem('_FILE', uid);
97
+ }
98
+ }
99
+
100
+ public static uploadFile(table: string, uid: string, dataset: DOMStringMap): void {
101
+ const actionUrl: string = dataset.actionUrl;
102
+ top.TYPO3.Backend.ContentContainer.setUrl(
103
+ actionUrl + '&target=' + encodeURIComponent(uid) + '&returnUrl=' + ContextMenuActions.getReturnUrl(),
104
+ );
105
+ }
106
+
107
+ public static createFolder(table: string, uid: string, dataset: DOMStringMap): void {
108
+ top.TYPO3.Backend.ContentContainer.get().document.dispatchEvent(new CustomEvent(fileListOpenElementBrowser, {
109
+ detail: {
110
+ actionUrl: dataset.actionUrl,
111
+ identifier: dataset.identifier,
112
+ mode: dataset.mode,
113
+ }
114
+ }));
115
+ }
116
+
117
+ public static createFile(table: string, uid: string, dataset: DOMStringMap): void {
118
+ const actionUrl: string = dataset.actionUrl;
119
+ top.TYPO3.Backend.ContentContainer.setUrl(
120
+ actionUrl + '&target=' + encodeURIComponent(uid) + '&returnUrl=' + ContextMenuActions.getReturnUrl(),
121
+ );
122
+ }
123
+
124
+ public static downloadFile(table: string, uid: string, dataset: DOMStringMap): void {
125
+ ContextMenuActions.triggerFileDownload(dataset.url, dataset.name);
126
+ }
127
+
128
+ public static downloadFolder(table: string, uid: string, dataset: DOMStringMap): void {
129
+ // Add notification about the download being prepared
130
+ Notification.info(lll('file_download.prepare'), '', 2);
131
+ const actionUrl: string = dataset.actionUrl;
132
+ (new AjaxRequest(actionUrl)).post({ items: [uid] })
133
+ .then(async (response): Promise<void> => {
134
+ let fileName = response.response.headers.get('Content-Disposition');
135
+ if (!fileName) {
136
+ const data = await response.resolve();
137
+ if (data.success === false && data.status) {
138
+ Notification.warning(lll('file_download.' + data.status), lll('file_download.' + data.status + '.message'), 10);
139
+ } else {
140
+ Notification.error(lll('file_download.error'));
141
+ }
142
+ return;
143
+ }
144
+ fileName = fileName.substring(fileName.indexOf(' filename=') + 10);
145
+ const data = await response.raw().arrayBuffer();
146
+ const blob = new Blob([data], { type: response.raw().headers.get('Content-Type') });
147
+ ContextMenuActions.triggerFileDownload(URL.createObjectURL(blob), fileName, true);
148
+ })
149
+ .catch(() => {
150
+ Notification.error(lll('file_download.error'));
151
+ });
152
+ }
153
+
154
+ public static createFilemount(table: string, uid: string): void {
155
+ if (uid.split(':').length !== 2) {
156
+ return;
157
+ }
158
+ top.TYPO3.Backend.ContentContainer.setUrl(
159
+ top.TYPO3.settings.FormEngine.moduleUrl
160
+ + '&edit[sys_filemounts][0]=new'
161
+ + '&defVals[sys_filemounts][identifier]=' + encodeURIComponent(uid)
162
+ + '&returnUrl=' + ContextMenuActions.getReturnUrl()
163
+ );
164
+ }
165
+
166
+ public static deleteFile(table: string, uid: string, dataset: DOMStringMap): void {
167
+ const performDelete = () => {
168
+ top.TYPO3.Backend.ContentContainer.setUrl(
169
+ top.TYPO3.settings.FileCommit.moduleUrl
170
+ + '&data[delete][0][data]=' + encodeURIComponent(uid)
171
+ + '&data[delete][0][redirect]=' + ContextMenuActions.getReturnUrl(),
172
+ );
173
+ };
174
+ if (!dataset.title) {
175
+ performDelete();
176
+ return;
177
+ }
178
+
179
+ const modal = Modal.confirm(
180
+ dataset.title,
181
+ dataset.message,
182
+ SeverityEnum.warning,
183
+ [
184
+ {
185
+ text: dataset.buttonCloseText || TYPO3.lang['button.cancel'] || 'Cancel',
186
+ active: true,
187
+ btnClass: 'btn-default',
188
+ name: 'cancel',
189
+ },
190
+ {
191
+ text: dataset.buttonOkText || TYPO3.lang['button.delete'] || 'Delete',
192
+ btnClass: 'btn-warning',
193
+ name: 'delete',
194
+ },
195
+ ]
196
+ );
197
+
198
+ modal.addEventListener('button.clicked', (e: Event): void => {
199
+ const element: HTMLInputElement = <HTMLInputElement>e.target;
200
+ if (element.name === 'delete') {
201
+ performDelete();
202
+ }
203
+ modal.hideModal();
204
+ });
205
+ }
206
+
207
+ public static copyFile(table: string, uid: string): void {
208
+ const md5 = Md5.hash(uid);
209
+ const url = TYPO3.settings.ajaxUrls.contextmenu_clipboard;
210
+ const queryArguments = {
211
+ CB: {
212
+ el: {
213
+ ['_FILE%7C' + md5]: uid
214
+ },
215
+ setCopyMode: '1'
216
+ }
217
+ };
218
+ (new AjaxRequest(url)).withQueryArguments(queryArguments).get().finally((): void => {
219
+ top.TYPO3.Backend.ContentContainer.refresh();
220
+ });
221
+ }
222
+
223
+ public static copyReleaseFile(table: string, uid: string): void {
224
+ const md5 = Md5.hash(uid);
225
+ const url = TYPO3.settings.ajaxUrls.contextmenu_clipboard;
226
+ const queryArguments = {
227
+ CB: {
228
+ el: {
229
+ ['_FILE%7C' + md5]: '0'
230
+ },
231
+ setCopyMode: '1'
232
+ }
233
+ };
234
+ (new AjaxRequest(url)).withQueryArguments(queryArguments).get().finally((): void => {
235
+ top.TYPO3.Backend.ContentContainer.refresh();
236
+ });
237
+ }
238
+
239
+ public static cutFile(table: string, uid: string): void {
240
+ const md5 = Md5.hash(uid);
241
+ const url = TYPO3.settings.ajaxUrls.contextmenu_clipboard;
242
+ const queryArguments = {
243
+ CB: {
244
+ el: {
245
+ ['_FILE%7C' + md5]: uid
246
+ }
247
+ }
248
+ };
249
+ (new AjaxRequest(url)).withQueryArguments(queryArguments).get().finally((): void => {
250
+ top.TYPO3.Backend.ContentContainer.refresh();
251
+ });
252
+ }
253
+
254
+ public static cutReleaseFile(table: string, uid: string): void {
255
+ const md5 = Md5.hash(uid);
256
+ const url = TYPO3.settings.ajaxUrls.contextmenu_clipboard;
257
+ const queryArguments = {
258
+ CB: {
259
+ el: {
260
+ ['_FILE%7C' + md5]: '0'
261
+ }
262
+ }
263
+ };
264
+ (new AjaxRequest(url)).withQueryArguments(queryArguments).get().finally((): void => {
265
+ top.TYPO3.Backend.ContentContainer.refresh();
266
+ });
267
+ }
268
+
269
+ public static pasteFileInto(table: string, uid: string, dataset: DOMStringMap): void {
270
+ const performPaste = (): void => {
271
+ top.TYPO3.Backend.ContentContainer.setUrl(
272
+ top.TYPO3.settings.FileCommit.moduleUrl
273
+ + '&CB[paste]=FILE|' + encodeURIComponent(uid)
274
+ + '&CB[pad]=normal&redirect=' + ContextMenuActions.getReturnUrl(),
275
+ );
276
+ };
277
+ if (!dataset.title) {
278
+ performPaste();
279
+ return;
280
+ }
281
+ const modal = Modal.confirm(
282
+ dataset.title,
283
+ dataset.message,
284
+ SeverityEnum.warning,
285
+ [
286
+ {
287
+ text: dataset.buttonCloseText || TYPO3.lang['button.cancel'] || 'Cancel',
288
+ active: true,
289
+ btnClass: 'btn-default',
290
+ name: 'cancel',
291
+ },
292
+ {
293
+ text: dataset.buttonOkText || TYPO3.lang['button.ok'] || 'OK',
294
+ btnClass: 'btn-warning',
295
+ name: 'ok',
296
+ },
297
+ ]
298
+ );
299
+
300
+ modal.addEventListener('button.clicked', (e: Event): void => {
301
+ const element: HTMLInputElement = <HTMLInputElement>e.target;
302
+ if (element.name === 'ok') {
303
+ performPaste();
304
+ }
305
+ modal.hideModal();
306
+ });
307
+ }
308
+
309
+ public static updateOnlineMedia(table: string, uid: string, dataset: DOMStringMap)
310
+ {
311
+ if (!dataset.actionUrl || !dataset.filecontextUid || dataset.filecontextType !== 'file') {
312
+ return;
313
+ }
314
+
315
+ const payload = {
316
+ resource: {
317
+ 'type': dataset.filecontextType,
318
+ 'uid': dataset.filecontextUid
319
+ }
320
+ };
321
+
322
+ (new AjaxRequest(dataset.actionUrl)).post(payload)
323
+ .then(() => {
324
+ Notification.success(lll('online_media.update.success'));
325
+ })
326
+ .catch(() => {
327
+ Notification.error(lll('online_media.update.error'));
328
+ })
329
+ .finally(() => {
330
+ window.location.reload();
331
+ });
332
+ }
333
+ }
334
+
335
+ export default ContextMenuActions;
@@ -0,0 +1,69 @@
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 RegularEvent from '@typo3/core/event/regular-event';
15
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
16
+ import type { ResourceInterface } from '@typo3/backend/resource/resource';
17
+ import { FileListActionEvent, type FileListActionDetail } from '@typo3/filelist/file-list-actions';
18
+ import InfoWindow from '@typo3/backend/info-window';
19
+
20
+ class CreateFolder {
21
+ constructor() {
22
+ new RegularEvent(FileListActionEvent.primary, (event: CustomEvent): void => {
23
+ event.preventDefault();
24
+ const detail: FileListActionDetail = event.detail;
25
+ detail.action = FileListActionEvent.select;
26
+ document.dispatchEvent(new CustomEvent(FileListActionEvent.select, { detail: detail }));
27
+ }).bindTo(document);
28
+
29
+ new RegularEvent(FileListActionEvent.select, (event: CustomEvent): void => {
30
+ event.preventDefault();
31
+ const detail: FileListActionDetail = event.detail;
32
+ const resource = detail.resources[0];
33
+ if (resource.type === 'folder') {
34
+ this.loadContent(resource);
35
+ }
36
+ }).bindTo(document);
37
+
38
+ new RegularEvent(FileListActionEvent.show, (event: CustomEvent): void => {
39
+ event.preventDefault();
40
+ const detail: FileListActionDetail = event.detail;
41
+ const resource = detail.resources[0];
42
+ InfoWindow.showItem('_' + resource.type.toUpperCase(), resource.identifier);
43
+ }).bindTo(document);
44
+ }
45
+
46
+ private async loadContent(resource: ResourceInterface): Promise<void>
47
+ {
48
+ if (resource.type !== 'folder') {
49
+ return;
50
+ }
51
+ const contentsUrl = document.location.href + '&contentOnly=1&expandFolder=' + resource.identifier;
52
+ const response = await new AjaxRequest(contentsUrl).get();
53
+ const html = await response.resolve();
54
+ const contentContainer = document.querySelector('.element-browser-main-content .element-browser-body') as HTMLElement;
55
+ contentContainer.innerHTML = html;
56
+ const tree = document.querySelector('typo3-backend-component-filestorage-browser-tree');
57
+ if (tree) {
58
+ const treeNodeIdentifier = encodeURIComponent(resource.identifier);
59
+ // @todo Support loading the node via rootline, in case the node has not be loaded in the tree yet, see @typo3/backend/tree/tree-module-state
60
+ const node = tree.nodes.find((node) => node.identifier === treeNodeIdentifier);
61
+ if (node) {
62
+ await tree.expandNodeParents(node);
63
+ tree.selectNode(node, false);
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ export default new CreateFolder();