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,172 @@
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 { css, html, LitElement, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { classMap } from 'lit/directives/class-map';
17
+ import { styleMap } from 'lit/directives/style-map.js';
18
+ import Severity from '@typo3/backend/severity';
19
+ import { SeverityEnum } from '@typo3/backend/enum/severity';
20
+
21
+ /**
22
+ * Module: @typo3/backend/element/progress-bar-element
23
+ * @internal
24
+ *
25
+ * @example
26
+ * <typo3-backend-progress-bar></typo3-backend-progress-bar>
27
+ * + `value` can be any positive number value between and 0 and `max` or `undefined`. The latter will render an indeterminate state.
28
+ * + `max` represents the upper value range
29
+ * + `severity` defines the visual severity of the progress bar, ignored in indeterminate state
30
+ * + `label` is an optional label describing the progress bar
31
+ */
32
+ @customElement('typo3-backend-progress-bar')
33
+ export class ProgressBarElement extends LitElement {
34
+ static override styles = css`
35
+ @keyframes progress-indeterminate {
36
+ 0% {
37
+ inset-inline-start: -33%;
38
+ }
39
+
40
+ 100% {
41
+ inset-inline-start: 100%;
42
+ }
43
+ }
44
+
45
+ :host {
46
+ --progress-bar-height: 4px;
47
+ --progress-bar-color-primary: var(--typo3-state-primary-border-color);
48
+ --progress-bar-color-success: var(--typo3-state-success-border-color);
49
+ --progress-bar-color-warning: var(--typo3-state-warning-border-color);
50
+ --progress-bar-color-danger: var(--typo3-state-danger-border-color);
51
+ --progress-bar-color-info: var(--typo3-state-info-border-color);
52
+ --progress-bar-color: var(--progress-bar-color-primary);
53
+ --progress-track-color: light-dark(var(--token-color-neutral-20), var(--token-color-neutral-80));
54
+ --progress-border-radius: var(--typo3-component-border-radius);
55
+ display: block;
56
+ width: 100%;
57
+ border-radius: var(--progress-border-radius);
58
+ }
59
+
60
+ .progress {
61
+ position: relative;
62
+ overflow: hidden;
63
+ height: var(--progress-bar-height);
64
+ border-radius: var(--progress-border-radius);
65
+ }
66
+
67
+ .value {
68
+ display: block;
69
+ width: 1px !important;
70
+ height: 1px !important;
71
+ padding: 0 !important;
72
+ margin: -1px !important;
73
+ overflow: hidden !important;
74
+ clip: rect(0, 0, 0, 0) !important;
75
+ white-space: nowrap !important;
76
+ border: 0 !important;
77
+ }
78
+
79
+ .track {
80
+ background: var(--progress-track-color);
81
+ inset: 0;
82
+ }
83
+
84
+ .bar {
85
+ background: var(--progress-bar-color);
86
+ transition: width 0.5s ease-in-out;
87
+
88
+ &.bar-success {
89
+ --progress-bar-color: var(--progress-bar-color-success);
90
+ }
91
+
92
+ &.bar-warning {
93
+ --progress-bar-color: var(--progress-bar-color-warning);
94
+ }
95
+
96
+ &.bar-danger {
97
+ --progress-bar-color: var(--progress-bar-color-danger);
98
+ }
99
+
100
+ &.bar-info {
101
+ --progress-bar-color: var(--progress-bar-color-info);
102
+ }
103
+
104
+ &.indeterminate {
105
+ animation-name: progress-indeterminate;
106
+ animation-duration: 3s;
107
+ animation-iteration-count: infinite;
108
+ animation-timing-function: linear;
109
+ width: 33%;
110
+ background-image: linear-gradient(to right, var(--progress-track-color) 0%, transparent 50%, var(--progress-track-color) 100%)
111
+ }
112
+ }
113
+
114
+ .track,
115
+ .bar {
116
+ position: absolute;
117
+ height: var(--progress-bar-height);
118
+ }
119
+
120
+ .label {
121
+ margin-top: .5rem;
122
+ }
123
+ `;
124
+
125
+ @property({ type: Number, reflect: true }) value: number|undefined = undefined;
126
+ @property({ type: Number, reflect: true }) max: number = 100;
127
+ @property({ type: Number, reflect: true }) severity: SeverityEnum|undefined = undefined;
128
+ @property({ type: String, reflect: true }) label: string|undefined;
129
+
130
+ protected override render(): TemplateResult {
131
+ const labelIdentifier = 'progress-label-' + (Math.random() + 1).toString(36).substring(2);
132
+ const isLabelDefined = this.label !== undefined && this.label;
133
+ const isIndeterminate = isNaN(this.value);
134
+ const classes = classMap({
135
+ bar: true,
136
+ ['bar-' + Severity.getCssClass(this.severity)]: !isIndeterminate && this.severity !== undefined,
137
+ indeterminate: isIndeterminate,
138
+ });
139
+ const styles = isIndeterminate ? nothing : styleMap({
140
+ width: (this.clamp(this.value, 0, this.max) / this.max * 100).toString() + '%',
141
+ });
142
+
143
+ return html`
144
+ <div class="progress-wrapper">
145
+ <div
146
+ role="progressbar"
147
+ class="progress"
148
+ aria-valuenow=${!isIndeterminate ? this.value : nothing}
149
+ aria-valuemin="0"
150
+ aria-valuemax=${this.max}
151
+ aria-describedby=${isLabelDefined ? labelIdentifier : nothing}
152
+ >
153
+ <div class="track"></div>
154
+ <div class=${classes} style=${styles}>
155
+ ${!isIndeterminate ? html`<span class="value">${this.value}%</span>` : nothing}
156
+ </div>
157
+ </div>
158
+ ${isLabelDefined ? html`<div class="label" id=${labelIdentifier}>${this.label}</div>` : nothing}
159
+ </div>
160
+ `;
161
+ }
162
+
163
+ private clamp(value: number, min: number, max: number): number {
164
+ return Math.min(max, Math.max(min, value));
165
+ }
166
+ }
167
+
168
+ declare global {
169
+ interface HTMLElementTagNameMap {
170
+ 'typo3-backend-progress-bar': ProgressBarElement;
171
+ }
172
+ }
@@ -0,0 +1,119 @@
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 { css, html, LitElement, nothing, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { styleMap } from 'lit/directives/style-map';
17
+ import { lll } from '@typo3/core/lit-helper';
18
+
19
+ export type Stage = string;
20
+
21
+ /**
22
+ * Module: @typo3/backend/element/progress-track-element
23
+ * @internal
24
+ *
25
+ * @example
26
+ * <typo3-backend-progress-tracker stages="[&quot;Stage 1&quot;,&quot;Stage 2&quot;,&quot;Stage 3&quot;,&quot;Stage 4&quot;]"></typo3-backend-progress-tracker>
27
+ */
28
+ @customElement('typo3-backend-progress-tracker')
29
+ export class ProgressTrackerElement extends LitElement {
30
+ static override styles = css`
31
+ :host {
32
+ --progress-tracker-margin: var(--typo3-spacing);
33
+ --progress-tracker-stage: 0;
34
+ --progress-tracker-stages: 0;
35
+ --progress-tracker-gap: .25rem;
36
+ --progress-tracker-bar-height: 6px;
37
+ --progress-tracker-bar-border-radius: 3px;
38
+ --progress-tracker-bar-bg: light-dark(var(--token-color-neutral-20), var(--token-color-neutral-80));
39
+ --progress-tracker-bar-progress-bg: var(--typo3-state-primary-border-color);
40
+
41
+ display: block;
42
+ width: 100%;
43
+ margin-bottom: var(--progress-tracker-margin);
44
+ }
45
+
46
+ .tracker {
47
+ position: relative;
48
+ display: grid;
49
+ gap: var(--progress-tracker-gap);
50
+ grid-template-columns: auto min-content;
51
+ grid-template-areas:
52
+ "stage step"
53
+ "bar bar";
54
+ }
55
+
56
+ .tracker-stage {
57
+ grid-area: stage;
58
+ }
59
+
60
+ .tracker-step {
61
+ grid-area: step;
62
+ white-space: nowrap;
63
+ }
64
+
65
+ .tracker-bar {
66
+ grid-area: bar;
67
+ position: relative;
68
+ width: 100%;
69
+ height: var(--progress-tracker-bar-height);
70
+ border-radius: var(--progress-tracker-bar-border-radius);
71
+ background-color: var(--progress-tracker-bar-bg);
72
+ }
73
+
74
+ .tracker-bar:after {
75
+ content: '';
76
+ height: 100%;
77
+ width: calc(100% / var(--progress-tracker-stages) * var(--progress-tracker-stage));
78
+ display: block;
79
+ border-radius: inherit;
80
+ background-color: var(--progress-tracker-bar-progress-bg);
81
+ }
82
+
83
+ @media (prefers-reduced-motion: no-preference) {
84
+ .tracker-bar:after {
85
+ transition: width 0.5s ease-in-out;
86
+ }
87
+ }
88
+ `;
89
+
90
+ @property({ attribute: 'stages', type: Array }) stages: Stage[] = [];
91
+ @property({ attribute: 'active', type: Number, reflect: true }) activeStage: number = 0;
92
+
93
+ protected override render(): TemplateResult | symbol {
94
+ if (this.stages.length < 2) {
95
+ return nothing;
96
+ }
97
+ this.activeStage = Math.min(Math.max(this.activeStage, this.stages.length > 0 ? 1 : 0), this.stages.length);
98
+ const currentStage = this.stages[this.activeStage - 1];
99
+
100
+ const styles = styleMap({
101
+ '--progress-tracker-stage': `${this.activeStage}`,
102
+ '--progress-tracker-stages': `${this.stages.length}`,
103
+ });
104
+
105
+ return html`
106
+ <div class="tracker" role="group" aria-describedby="tracker-details" style=${styles}>
107
+ <div class="tracker-stage" id="tracker-stage" aria-live="polite">${currentStage}</div>
108
+ <div class="tracker-step" id="tracker-details">${lll('progressTracker.steps', this.activeStage, this.stages.length) || `Step ${this.activeStage} of ${this.stages.length}`}</div>
109
+ <div class="tracker-bar" id="tracker-bar" aria-hidden="true"></div>
110
+ </div>
111
+ `;
112
+ }
113
+ }
114
+
115
+ declare global {
116
+ interface HTMLElementTagNameMap {
117
+ 'typo3-backend-progress-tracker': ProgressTrackerElement;
118
+ }
119
+ }
@@ -0,0 +1,58 @@
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 { property } from 'lit/decorators';
15
+ import { html, css, LitElement, type TemplateResult } from 'lit';
16
+ import { KeyTypesEnum } from '@typo3/backend/enum/key-types';
17
+
18
+ /**
19
+ * @internal
20
+ */
21
+ export abstract class PseudoButtonLitElement extends LitElement {
22
+ static override styles = [
23
+ css`:host { cursor: pointer; appearance: button; }`
24
+ ];
25
+
26
+ // eslint-disable-next-line lit/no-native-attributes
27
+ @property({ type: String, reflect: true }) override role: string = 'button';
28
+ @property({ type: String, reflect: true }) override tabIndex: number = 0;
29
+
30
+ public constructor() {
31
+ super();
32
+ this.addEventListener('click', (e: Event): void => {
33
+ e.preventDefault();
34
+ this.buttonActivated(e);
35
+ });
36
+ this.addEventListener('keydown', (e: KeyboardEvent): void => {
37
+ if (e.key === KeyTypesEnum.SPACE) {
38
+ e.preventDefault();
39
+ }
40
+ if (e.key === KeyTypesEnum.ENTER) {
41
+ e.preventDefault();
42
+ this.buttonActivated(e);
43
+ }
44
+ });
45
+ this.addEventListener('keyup', (e: KeyboardEvent): void => {
46
+ if (e.key === KeyTypesEnum.SPACE) {
47
+ e.preventDefault();
48
+ this.buttonActivated(e);
49
+ }
50
+ });
51
+ }
52
+
53
+ protected override render(): TemplateResult {
54
+ return html`<slot></slot>`;
55
+ }
56
+
57
+ protected abstract buttonActivated(e: Event): void | Promise<void>;
58
+ }
@@ -0,0 +1,51 @@
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, type TemplateResult } from 'lit';
15
+ import { customElement, property } from 'lit/decorators';
16
+ import { Sizes } from '../enum/icon-types';
17
+ import { IconStyles } from '@typo3/backend/icons';
18
+
19
+ /**
20
+ * Module: @typo3/backend/element/spinner-element
21
+ *
22
+ * @example
23
+ * <typo3-backend-spinner size="small"></typo3-backend-spinner>
24
+ * + attribute size can be one of small, default, large or mega
25
+ */
26
+ @customElement('typo3-backend-spinner')
27
+ export class SpinnerElement extends LitElement {
28
+ static override styles = IconStyles.getStyles();
29
+
30
+ @property({ type: String }) size: Sizes = Sizes.default;
31
+
32
+ protected override render(): TemplateResult {
33
+ return html`
34
+ <span class="icon icon-size-${this.size} icon-state-default icon-spin">
35
+ <span class="icon-markup">
36
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 16 16">
37
+ <g fill="currentColor">
38
+ <path d="M8 15c-3.86 0-7-3.141-7-7 0-3.86 3.14-7 7-7 3.859 0 7 3.14 7 7 0 3.859-3.141 7-7 7zM8 3C5.243 3 3 5.243 3 8s2.243 5 5 5 5-2.243 5-5-2.243-5-5-5z" opacity=".3"/><path d="M14 9a1 1 0 0 1-1-1c0-2.757-2.243-5-5-5a1 1 0 0 1 0-2c3.859 0 7 3.14 7 7a1 1 0 0 1-1 1z"/>
39
+ </g>
40
+ </svg>
41
+ </span>
42
+ </span>
43
+ `;
44
+ }
45
+ }
46
+
47
+ declare global {
48
+ interface HTMLElementTagNameMap {
49
+ 'typo3-backend-spinner': SpinnerElement;
50
+ }
51
+ }
@@ -0,0 +1,80 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ import { customElement, property } from 'lit/decorators.js';
15
+ import { html, LitElement, type TemplateResult } from 'lit';
16
+ import { Task } from '@lit/task';
17
+ import '@typo3/backend/element/spinner-element';
18
+ import '@typo3/backend/element/icon-element';
19
+
20
+ export const ThumbnailSize = {
21
+ default: 'default',
22
+ small: 'small',
23
+ medium: 'medium',
24
+ large: 'large',
25
+ } as const;
26
+ type ThumbnailSizeType = typeof ThumbnailSize[keyof typeof ThumbnailSize];
27
+
28
+ @customElement('typo3-backend-thumbnail')
29
+ export class ThumbnailElement extends LitElement {
30
+ @property({ type: String, reflect: true }) url: string;
31
+ @property({ type: String, reflect: true }) size: ThumbnailSizeType = ThumbnailSize.default;
32
+ @property({ type: Boolean, reflect: true }) keepAspectRatio: boolean = false;
33
+ @property({ type: Number, reflect: true }) width: number;
34
+ @property({ type: Number, reflect: true }) height: number;
35
+
36
+ private readonly thumbnailTask = new Task(this, {
37
+ task: async ([url, size, keepAspectRatio, width, height]: [string, ThumbnailSizeType, boolean, number, number]): Promise<TemplateResult> => {
38
+ const thumbnailUrl = new URL(url, window.origin);
39
+ thumbnailUrl.searchParams.set('size', size);
40
+ thumbnailUrl.searchParams.set('keepAspectRatio', keepAspectRatio ? '1' : '0');
41
+
42
+ const img = new Image();
43
+ img.src = thumbnailUrl.toString();
44
+
45
+ if (width > 0) {
46
+ img.width = width;
47
+ }
48
+
49
+ if (height > 0 && !keepAspectRatio) {
50
+ // Only set height if we do not want to keep the aspect ratio (image is being cropped)
51
+ img.height = height;
52
+ }
53
+
54
+ await new Promise<void>(((resolve, reject) => {
55
+ img.onload = () => resolve();
56
+ img.onerror = () => reject();
57
+ }));
58
+ return html`${img}`;
59
+ },
60
+ args: () => [this.url, this.size, this.keepAspectRatio, this.width, this.height]
61
+ });
62
+
63
+ protected override createRenderRoot(): HTMLElement | ShadowRoot {
64
+ return this;
65
+ }
66
+
67
+ protected override render(): TemplateResult | symbol {
68
+ return this.thumbnailTask.render({
69
+ pending: () => html`<typo3-backend-spinner size=${this.size}></typo3-backend-size>`,
70
+ complete: (markup) => html`${markup}`,
71
+ error: () => html`<typo3-backend-icon identifier="default-not-found" size="small"></typo3-backend-icon>`
72
+ });
73
+ }
74
+ }
75
+
76
+ declare global {
77
+ interface HTMLElementTagNameMap {
78
+ 'typo3-backend-thumbnail': ThumbnailElement;
79
+ }
80
+ }
@@ -0,0 +1,182 @@
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 DocumentService from '@typo3/core/document-service';
16
+ import Modal from '@typo3/backend/modal';
17
+
18
+ interface RTESettings {
19
+ parameters: string;
20
+ configuration: string;
21
+ }
22
+
23
+ interface InlineSettings {
24
+ objectId: string;
25
+ }
26
+
27
+ declare global {
28
+ interface Document {
29
+ list_frame: Window;
30
+ }
31
+ interface Window {
32
+ editform: any;
33
+ content: any;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Module: @typo3/backend/element-browser
39
+ * @exports @typo3/backend/element-browser
40
+ * ElementBrowser communication with parent windows
41
+ */
42
+ class ElementBrowser {
43
+ private opener: Window = null;
44
+ private fieldReference: string = '';
45
+ private readonly rte: RTESettings = {
46
+ parameters: '',
47
+ configuration: '',
48
+ };
49
+ private readonly irre: InlineSettings = {
50
+ objectId: '',
51
+ };
52
+
53
+ constructor() {
54
+ DocumentService.ready().then((): void => {
55
+ const data = document.body.dataset;
56
+ this.fieldReference = data.fieldReference;
57
+ this.rte.parameters = data.rteParameters;
58
+ this.rte.configuration = data.rteConfiguration;
59
+ this.irre.objectId = data.irreObjectId;
60
+ });
61
+ }
62
+
63
+ /**
64
+ * Returns the parent document object
65
+ */
66
+ public getParent(): Window | null {
67
+ const isInModalFrame = typeof window.frames !== 'undefined'
68
+ && typeof window.frames.frameElement !== 'undefined'
69
+ && window.frames.frameElement.classList.contains('t3js-modal-iframe');
70
+ const otherModalFrames = Array.from(top.frames || []).filter((item: Window) => {
71
+ try {
72
+ return typeof item.frameElement !== 'undefined'
73
+ && item.frameElement.classList.contains('t3js-modal-iframe')
74
+ && item.frameElement !== window.frames.frameElement;
75
+ } catch {
76
+ // browser extensions might inject their own frames, resulting in
77
+ // `DOMException: Permission denied to access property "document" on cross-origin object`
78
+ return false;
79
+ }
80
+ });
81
+
82
+ if (this.opener === null) {
83
+ // in case the current modal frame was triggered by another modal frame
84
+ // (which is NOT the parent element in the DOM)
85
+ if (isInModalFrame && otherModalFrames.length > 0) {
86
+ this.opener = otherModalFrames.pop();
87
+ } else if (
88
+ typeof window.parent !== 'undefined' &&
89
+ typeof window.parent.document.list_frame !== 'undefined' &&
90
+ window.parent.document.list_frame.parent.document.querySelector('.t3js-modal-iframe') !== null
91
+ ) {
92
+ this.opener = window.parent.document.list_frame;
93
+ } else if (
94
+ typeof window.parent !== 'undefined' &&
95
+ typeof window.parent.frames.list_frame !== 'undefined' &&
96
+ window.parent.frames.list_frame.parent.document.querySelector('.t3js-modal-iframe') !== null
97
+ ) {
98
+ this.opener = window.parent.frames.list_frame;
99
+ } else if (
100
+ typeof window.frames !== 'undefined' &&
101
+ typeof window.frames.frameElement !== 'undefined' &&
102
+ window.frames.frameElement !== null &&
103
+ window.frames.frameElement.classList.contains('t3js-modal-iframe')
104
+ ) {
105
+ this.opener = (<HTMLFrameElement>window.frames.frameElement).contentWindow.parent;
106
+ } else if (window.opener) {
107
+ this.opener = window.opener;
108
+ }
109
+ }
110
+
111
+ return this.opener;
112
+ }
113
+
114
+ public insertElement(
115
+ table: string,
116
+ uid: string,
117
+ title: string,
118
+ value: string,
119
+ close: boolean,
120
+ ): boolean {
121
+ // Call a check function in the opener window (e.g. for uniqueness handling):
122
+ if (this.irre.objectId) {
123
+ if (this.getParent()) {
124
+ const message = {
125
+ actionName: 'typo3:foreignRelation:insert',
126
+ objectGroup: this.irre.objectId,
127
+ table: table,
128
+ uid: uid,
129
+ };
130
+ MessageUtility.send(message, this.getParent());
131
+ } else {
132
+ alert('Error - reference to main window is not set properly!');
133
+ this.focusOpenerAndClose();
134
+ }
135
+
136
+ if (close) {
137
+ // // > After postMessage() is called, the MessageEvent will be dispatched only after all pending execution contexts have finished.
138
+ // // See: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#notes
139
+ setTimeout(() => this.focusOpenerAndClose(), 0);
140
+ }
141
+
142
+ return true;
143
+ }
144
+
145
+ if (this.fieldReference && !this.rte.parameters && !this.rte.configuration) {
146
+ this.addElement(title, value ? value : table + '_' + uid, close);
147
+ }
148
+ return false;
149
+ }
150
+
151
+ public focusOpenerAndClose = (): void => {
152
+ if (this.getParent()) {
153
+ this.getParent().focus();
154
+ }
155
+ Modal.dismiss();
156
+ close();
157
+ };
158
+
159
+
160
+ private addElement(label: string, value: string, close: boolean): void {
161
+ if (this.getParent()) {
162
+ const message = {
163
+ actionName: 'typo3:elementBrowser:elementAdded',
164
+ fieldName: this.fieldReference,
165
+ value: value,
166
+ label: label
167
+ };
168
+ MessageUtility.send(message, this.getParent());
169
+
170
+ if (close) {
171
+ // > After postMessage() is called, the MessageEvent will be dispatched only after all pending execution contexts have finished.
172
+ // See: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#notes
173
+ setTimeout(() => this.focusOpenerAndClose(), 0);
174
+ }
175
+ } else {
176
+ alert('Error - reference to main window is not set properly!');
177
+ this.focusOpenerAndClose();
178
+ }
179
+ }
180
+ }
181
+
182
+ export default new ElementBrowser();
@@ -0,0 +1,21 @@
1
+ /*
2
+ * This file is part of the TYPO3 CMS project.
3
+ *
4
+ * It is free software; you can redistribute it and/or modify it under
5
+ * the terms of the GNU General Public License, either version 2
6
+ * of the License, or any later version.
7
+ *
8
+ * For the full copyright and license information, please read the
9
+ * LICENSE.txt file that was distributed with this source code.
10
+ *
11
+ * The TYPO3 project - inspiring people to share!
12
+ */
13
+
14
+ export enum DataTransferTypes {
15
+ treenode = 'application/x-typo3-treenode',
16
+ newTreenode = 'application/x-typo3-new-treenode+json',
17
+ pages = 'application/x-typo3-record-pages+json',
18
+ falResources = 'application/x-typo3-fal-resources+json',
19
+ dragTooltip = 'application/x-typo3-drag-tooltip+json',
20
+ content = 'application/x-typo3-content+json',
21
+ }