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,53 @@
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 DocumentService from '@typo3/core/document-service';
15
+ import FormEngine from '@typo3/backend/form-engine';
16
+ import Modal from '../../modal';
17
+
18
+ /**
19
+ * This module is used for the field control "Link popup"
20
+ */
21
+ class LinkPopup {
22
+ private controlElement: HTMLElement = null;
23
+
24
+ constructor(controlElementId: string) {
25
+ DocumentService.ready().then((): void => {
26
+ this.controlElement = <HTMLElement>document.querySelector(controlElementId);
27
+ if (this.controlElement === null) {
28
+ return;
29
+ }
30
+ this.controlElement.addEventListener('click', this.handleControlClick);
31
+ });
32
+ }
33
+
34
+ /**
35
+ * @param {Event} e
36
+ */
37
+ private readonly handleControlClick = (e: Event): void => {
38
+ e.preventDefault();
39
+
40
+ const itemName = this.controlElement.dataset.itemName;
41
+ const url = this.controlElement.getAttribute('href')
42
+ + '&P[currentValue]=' + encodeURIComponent(document.forms.namedItem('editform')[itemName].value)
43
+ + '&P[currentSelectedValues]=' + encodeURIComponent(FormEngine.getFieldElement(itemName).val());
44
+
45
+ Modal.advanced({
46
+ type: Modal.types.iframe,
47
+ content: url,
48
+ size: Modal.sizes.large,
49
+ });
50
+ };
51
+ }
52
+
53
+ export default LinkPopup;
@@ -0,0 +1,40 @@
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 DocumentService from '@typo3/core/document-service';
15
+ import FormEngine from '@typo3/backend/form-engine';
16
+
17
+ /**
18
+ * This module is used for the field control "List module" used for "group" fields
19
+ */
20
+ class ListModule {
21
+ private controlElement: HTMLElement = null;
22
+
23
+ constructor(controlElementId: string) {
24
+ DocumentService.ready().then((): void => {
25
+ this.controlElement = <HTMLElement>document.querySelector(controlElementId);
26
+ this.controlElement.addEventListener('click', this.registerClickHandler);
27
+ });
28
+ }
29
+
30
+ /**
31
+ * @param {Event} e
32
+ */
33
+ private readonly registerClickHandler = (e: Event): void => {
34
+ e.preventDefault();
35
+
36
+ FormEngine.preventFollowLinkIfNotSaved(this.controlElement.getAttribute('href'));
37
+ };
38
+ }
39
+
40
+ export default ListModule;
@@ -0,0 +1,102 @@
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 DocumentService from '@typo3/core/document-service';
15
+ import FormEngineValidation from '@typo3/backend/form-engine-validation';
16
+ import AjaxRequest from '@typo3/core/ajax/ajax-request';
17
+ import Notification from '@typo3/backend/notification';
18
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
19
+
20
+ interface PasswordRules {
21
+ length: number;
22
+ random: string;
23
+ digitCharacters: boolean;
24
+ lowerCaseCharacters: boolean;
25
+ upperCaseCharacters: boolean;
26
+ specialCharacters: boolean;
27
+ }
28
+
29
+ /**
30
+ * Handles the "Generate Password" field control
31
+ */
32
+ class PasswordGenerator {
33
+ private controlElement: HTMLAnchorElement = null;
34
+ private humanReadableField: HTMLInputElement = null;
35
+ private hiddenField: HTMLInputElement = null;
36
+ private passwordRules: PasswordRules = null;
37
+
38
+ constructor(controlElementId: string) {
39
+ DocumentService.ready().then((): void => {
40
+ this.controlElement = <HTMLAnchorElement>document.getElementById(controlElementId);
41
+ this.humanReadableField = <HTMLInputElement>document.querySelector(
42
+ 'input[data-formengine-input-name="' + this.controlElement.dataset.itemName + '"]',
43
+ );
44
+ this.hiddenField = <HTMLInputElement>document.querySelector(
45
+ 'input[name="' + this.controlElement.dataset.itemName + '"]',
46
+ );
47
+ this.passwordRules = JSON.parse(this.controlElement.dataset.passwordRules || '{}');
48
+
49
+ // Set human-readable field to disable and readonly in case edit is disallowed in the field control settings
50
+ if (!this.controlElement.dataset.allowEdit) {
51
+ this.humanReadableField.disabled = true;
52
+ this.humanReadableField.readOnly = true;
53
+ // Also remove clearable possibility
54
+ if (this.humanReadableField.isClearable || this.humanReadableField.classList.contains('t3js-clearable')) {
55
+ this.humanReadableField.classList.remove('t3js-clearable');
56
+ const clearableContainer = <HTMLDivElement>this.humanReadableField.closest('div.form-control-clearable-wrapper');
57
+ if (clearableContainer) {
58
+ clearableContainer.classList.remove('form-control-clearable');
59
+ const closeButton = <HTMLButtonElement>clearableContainer.querySelector('button.close');
60
+ if (closeButton) {
61
+ clearableContainer.removeChild(closeButton);
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ this.controlElement.addEventListener('click', this.generatePassword.bind(this));
68
+ });
69
+ }
70
+
71
+ private generatePassword(e: Event): void {
72
+ e.preventDefault();
73
+
74
+ // Generate new password
75
+ (new AjaxRequest(TYPO3.settings.ajaxUrls.password_generate)).post({
76
+ passwordRules: this.passwordRules,
77
+ })
78
+ .then(async (response: AjaxResponse): Promise<void> => {
79
+ const resolvedBody = await response.resolve();
80
+ if (resolvedBody.success === true) {
81
+ // Set type=text to display the generated password (allow to copy) and update the field value
82
+ this.humanReadableField.type = 'text';
83
+ this.humanReadableField.value = resolvedBody.password;
84
+ // Manually dispatch "change" to enable FormEngine handling (instead of manually calling "updateInputField()").
85
+ // This way custom modules are also triggered when listening on this event.
86
+ this.humanReadableField.dispatchEvent(new Event('change'));
87
+ // Due to formatting and processing done by FormEngine, we need to set the value again (allow to copy)
88
+ this.humanReadableField.value = this.hiddenField.value;
89
+ // Finally validate and mark the field as changed
90
+ FormEngineValidation.validateField(this.humanReadableField);
91
+ FormEngineValidation.markFieldAsChanged(this.humanReadableField);
92
+ } else {
93
+ Notification.warning(resolvedBody.message || 'No password was generated');
94
+ }
95
+ })
96
+ .catch(() => {
97
+ Notification.error('Password could not be generated');
98
+ });
99
+ }
100
+ }
101
+
102
+ export default PasswordGenerator;
@@ -0,0 +1,48 @@
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 DocumentService from '@typo3/core/document-service';
15
+
16
+ /**
17
+ * This module is used for the field control "Reset selection" used for selectSingleBox
18
+ */
19
+ class ResetSelection {
20
+ private controlElement: HTMLElement = null;
21
+
22
+ constructor(controlElementId: string) {
23
+ DocumentService.ready().then((): void => {
24
+ this.controlElement = <HTMLElement>document.querySelector(controlElementId);
25
+ if (this.controlElement !== null) {
26
+ this.controlElement.addEventListener('click', this.registerClickHandler);
27
+ }
28
+ });
29
+ }
30
+
31
+ /**
32
+ * @param {Event} e
33
+ */
34
+ private readonly registerClickHandler = (e: Event): void => {
35
+ e.preventDefault();
36
+
37
+ const itemName: string = this.controlElement.dataset.itemName;
38
+ const selectedIndices: Array<number> = JSON.parse(this.controlElement.dataset.selectedIndices);
39
+ const field = (<HTMLSelectElement>document.forms.namedItem('editform').querySelector('[name="' + itemName + '[]"]'));
40
+
41
+ field.selectedIndex = -1;
42
+ for (const i of selectedIndices) {
43
+ field.options[i].selected = true;
44
+ }
45
+ };
46
+ }
47
+
48
+ export default ResetSelection;
@@ -0,0 +1,67 @@
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 DocumentService from '@typo3/core/document-service';
15
+ import RegularEvent from '@typo3/core/event/regular-event';
16
+
17
+ enum States {
18
+ CUSTOM = 'custom',
19
+ }
20
+
21
+ class LocalizationStateSelector {
22
+ constructor(fieldName: string) {
23
+ DocumentService.ready().then((): void => {
24
+ this.registerEventHandler(fieldName);
25
+ });
26
+ }
27
+
28
+ /**
29
+ * @param {string} fieldName
30
+ */
31
+ private registerEventHandler(fieldName: string): void {
32
+ new RegularEvent('change', (e: Event): void => {
33
+ const target = e.target as HTMLInputElement;
34
+ const input: HTMLInputElement = target.closest('.t3js-formengine-field-item')?.querySelector('[data-formengine-input-name]');
35
+ if (!input) {
36
+ return;
37
+ }
38
+
39
+ const lastState = input.dataset.lastL10nState || false;
40
+ const currentState = target.value;
41
+
42
+ if (lastState && currentState === lastState) {
43
+ return;
44
+ }
45
+
46
+ if (currentState === States.CUSTOM) {
47
+ if (lastState) {
48
+ target.dataset.originalLanguageValue = input.value;
49
+ }
50
+ input.disabled = false;
51
+ } else {
52
+ if (lastState === States.CUSTOM) {
53
+ (target.closest('.t3js-l10n-state-container')
54
+ .querySelector('.t3js-l10n-state-custom') as HTMLElement)
55
+ .dataset.originalLanguageValue = input.value;
56
+ }
57
+ input.disabled = true;
58
+ }
59
+
60
+ input.value = target.dataset.originalLanguageValue;
61
+ input.dispatchEvent(new Event('change'));
62
+ input.dataset.lastL10nState = target.value;
63
+ }).delegateTo(document, '.t3js-l10n-state-container input[type="radio"][name="' + fieldName + '"]');
64
+ }
65
+ }
66
+
67
+ export default LocalizationStateSelector;
@@ -0,0 +1,123 @@
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
+ enum InsertModes {
15
+ append = 'append',
16
+ replace = 'replace',
17
+ prepend = 'prepend'
18
+ }
19
+
20
+ /**
21
+ * Module @typo3/backend/form-engine/field-wizard/value-picker
22
+ *
23
+ * @example
24
+ * <typo3-formengine-valuepicker mode="prepend" linked-field="css-selector">
25
+ * <select>
26
+ * </typo3-formengine-valuepicker>
27
+ *
28
+ * This is based on W3C custom elements ("web components") specification, see
29
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
30
+ */
31
+ export class ValuePicker extends HTMLElement {
32
+ private valuePicker: HTMLSelectElement|null = null;
33
+ private linkedField: HTMLInputElement|HTMLTextAreaElement|null = null;
34
+ private initialValueSet: boolean = false;
35
+
36
+ public constructor() {
37
+ super();
38
+ const slot = document.createElement('slot');
39
+ slot.addEventListener('slotchange', () => this.initializeValuePicker(slot));
40
+ this.attachShadow({ mode: 'open' }).append(slot);
41
+ }
42
+
43
+ public connectedCallback(): void {
44
+ this.linkedField = document.querySelector(this.getAttribute('linked-field')) as HTMLInputElement|HTMLTextAreaElement|null;
45
+ this.linkedField?.addEventListener('change', this.linkedFieldOnChange);
46
+ this.initializeValuePicker(this.shadowRoot.querySelector('slot'));
47
+ }
48
+
49
+ public disconnectedCallback(): void {
50
+ this.linkedField?.removeEventListener('change', this.linkedFieldOnChange);
51
+ this.linkedField = null;
52
+ }
53
+
54
+ private initializeValuePicker(slot: HTMLSlotElement): void {
55
+ const picker = (slot.assignedElements()[0] ?? null) as HTMLSelectElement|null;
56
+ if (picker !== null && picker.tagName.toLowerCase() !== 'select') {
57
+ throw new Error(`ValuePicker could not be initialized. Expected <select> child name, but found: ${picker}`);
58
+ }
59
+ if (picker !== this.valuePicker) {
60
+ this.valuePicker?.removeEventListener('change', this.onChange);
61
+ this.valuePicker = picker;
62
+ this.valuePicker?.addEventListener('change', this.onChange);
63
+ this.initialValueSet = false;
64
+ }
65
+ this.setInitialPickerValue();
66
+ }
67
+
68
+ private setInitialPickerValue() {
69
+ if (this.linkedField === null || this.valuePicker === null || this.initialValueSet) {
70
+ return;
71
+ }
72
+ if (this.getInsertMode() === InsertModes.replace) {
73
+ const formEngineInputField = (document.getElementsByName(this.linkedField.dataset.formengineInputName)[0] ?? null) as HTMLInputElement|HTMLTextAreaElement;
74
+ if (formEngineInputField !== null) {
75
+ this.selectValue(formEngineInputField.value);
76
+ this.initialValueSet = true;
77
+ }
78
+ }
79
+ }
80
+
81
+ private readonly onChange = () => {
82
+ this.setValue();
83
+ this.valuePicker.blur();
84
+ };
85
+
86
+ private readonly linkedFieldOnChange = () => {
87
+ if (this.valuePicker === null) {
88
+ return;
89
+ }
90
+ if (this.getInsertMode() === InsertModes.replace) {
91
+ this.selectValue(this.linkedField.value);
92
+ } else {
93
+ this.valuePicker.selectedIndex = 0;
94
+ }
95
+ };
96
+
97
+ private selectValue (value: string): void {
98
+ this.valuePicker.selectedIndex = Array.from(this.valuePicker.options).findIndex((option): boolean => option.value === value);
99
+ }
100
+
101
+ private getInsertMode (): InsertModes {
102
+ return this.getAttribute('mode') as InsertModes ?? InsertModes.replace;
103
+ }
104
+
105
+ private setValue (): void {
106
+ const selectedValue = this.valuePicker.options[this.valuePicker.selectedIndex].value;
107
+
108
+ switch (this.getInsertMode()) {
109
+ case InsertModes.append:
110
+ this.linkedField.value += selectedValue;
111
+ break;
112
+ case InsertModes.prepend:
113
+ this.linkedField.value = selectedValue + this.linkedField.value;
114
+ break;
115
+ default:
116
+ this.linkedField.value = selectedValue;
117
+ break;
118
+ }
119
+ this.linkedField.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
120
+ }
121
+ }
122
+
123
+ window.customElements.define('typo3-formengine-valuepicker', ValuePicker);
@@ -0,0 +1,86 @@
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 DocumentService from '@typo3/core/document-service';
15
+ import ThrottleEvent from '@typo3/core/event/throttle-event';
16
+
17
+ enum Format {
18
+ integer = 'integer',
19
+ decimal = 'decimal'
20
+ }
21
+
22
+ /**
23
+ * Module @typo3/backend/form-engine/field-wizard/value-slider
24
+ *
25
+ * @example
26
+ * <typo3-formengine-valueslider linked-field="css-selector" format="integer" precision="2">
27
+ * <input>
28
+ * </typo3-formengine-valueslider>
29
+ *
30
+ * This is based on W3C custom elements ("web components") specification, see
31
+ * https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
32
+ */
33
+ export class ValueSlider extends HTMLElement {
34
+ private valueSlider: HTMLInputElement = null;
35
+
36
+ public async connectedCallback(): Promise<void> {
37
+ if (this.valueSlider !== null) {
38
+ // Element is already initialized, which means the component has been rendered before. Nothing to do here.
39
+ return;
40
+ }
41
+
42
+ await DocumentService.ready();
43
+ this.valueSlider = this.querySelector('input') as HTMLInputElement;
44
+ if (this.valueSlider !== null) {
45
+ new ThrottleEvent('input', this.handleRangeChange, 25).bindTo(this.valueSlider);
46
+ }
47
+ }
48
+
49
+ private readonly handleRangeChange = (e: Event): void => {
50
+ const target = e.target as HTMLInputElement;
51
+ this.updateValue(target);
52
+ this.updateTooltipValue(target);
53
+ };
54
+
55
+ /**
56
+ * Update value of slider element
57
+ *
58
+ * @param {HTMLInputElement} element
59
+ */
60
+ private updateValue(element: HTMLInputElement): void {
61
+ const foreignField = document.querySelector(this.getAttribute('linked-field')) as HTMLInputElement;
62
+ foreignField.value = element.value;
63
+ foreignField.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
64
+ }
65
+
66
+ /**
67
+ * @param {HTMLInputElement} element
68
+ */
69
+ private updateTooltipValue(element: HTMLInputElement): void {
70
+ let renderedValue;
71
+ const value = element.value;
72
+
73
+ switch (this.getAttribute('format')) {
74
+ case Format.decimal:
75
+ renderedValue = parseFloat(value).toFixed(Number(this.getAttribute('precision')) || 2);
76
+ break;
77
+ case Format.integer:
78
+ default:
79
+ renderedValue = parseInt(value, 10);
80
+ }
81
+
82
+ element.title = renderedValue.toString();
83
+ }
84
+ }
85
+
86
+ window.customElements.define('typo3-formengine-valueslider', ValueSlider);
@@ -0,0 +1,124 @@
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 AjaxRequest from '@typo3/core/ajax/ajax-request';
15
+ import { JavaScriptItemProcessor } from '@typo3/core/java-script-item-processor';
16
+ import Notification from '../../notification';
17
+ import Utility from '../../utility';
18
+ import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
19
+
20
+ export interface Context {
21
+ config: object;
22
+ hmac: string;
23
+ }
24
+
25
+ interface Message {
26
+ title: string;
27
+ message: string;
28
+ }
29
+
30
+ export interface AjaxDispatcherResponse {
31
+ hasErrors: boolean;
32
+ messages: Message[];
33
+ stylesheetFiles: string[];
34
+ inlineData: object;
35
+ scriptItems?: any[];
36
+ }
37
+
38
+ export class AjaxDispatcher {
39
+ private readonly objectGroup: string = null;
40
+
41
+ constructor(objectGroup: string) {
42
+ this.objectGroup = objectGroup;
43
+ }
44
+
45
+ public newRequest(endpoint: string): AjaxRequest {
46
+ return new AjaxRequest(endpoint);
47
+ }
48
+
49
+ /**
50
+ * @param {String} routeName
51
+ */
52
+ public getEndpoint(routeName: string): string {
53
+ if (typeof TYPO3.settings.ajaxUrls[routeName] !== 'undefined') {
54
+ return TYPO3.settings.ajaxUrls[routeName];
55
+ }
56
+
57
+ throw 'Undefined endpoint for route "' + routeName + '"';
58
+ }
59
+
60
+ public send(request: AjaxRequest, params: Array<string>): Promise<AjaxDispatcherResponse> {
61
+ const sentRequest = request.post(this.createRequestBody(params)).then(async (response: AjaxResponse): Promise<AjaxDispatcherResponse> => {
62
+ return this.processResponse(await response.resolve());
63
+ });
64
+ sentRequest.catch((reason: Error): void => {
65
+ Notification.error('Error ' + reason.message);
66
+ });
67
+
68
+ return sentRequest;
69
+ }
70
+
71
+ private createRequestBody(input: Array<string>): Record<string, string> {
72
+ const body: Record<string, string> = {};
73
+ for (let i = 0; i < input.length; i++) {
74
+ body['ajax[' + i + ']'] = input[i];
75
+ }
76
+
77
+ body['ajax[context]'] = JSON.stringify(this.getContext());
78
+
79
+ return body;
80
+ }
81
+
82
+ private getContext(): Context {
83
+ let context: Context;
84
+
85
+ if (typeof TYPO3.settings.FormEngineInline.config[this.objectGroup] !== 'undefined'
86
+ && typeof TYPO3.settings.FormEngineInline.config[this.objectGroup].context !== 'undefined'
87
+ ) {
88
+ context = TYPO3.settings.FormEngineInline.config[this.objectGroup].context;
89
+ }
90
+
91
+ return context;
92
+ }
93
+
94
+ private processResponse(json: AjaxDispatcherResponse): AjaxDispatcherResponse {
95
+ if (json.hasErrors) {
96
+ for (const message of json.messages) {
97
+ Notification.error(message.title, message.message);
98
+ }
99
+ }
100
+
101
+ if (json.stylesheetFiles) {
102
+ document.querySelector('head').append(
103
+ ...json.stylesheetFiles.filter(file => file).map(file => {
104
+ const element = document.createElement('link');
105
+ element.rel = 'stylesheet';
106
+ element.type = 'text/css';
107
+ element.href = file;
108
+ return element;
109
+ })
110
+ );
111
+ }
112
+
113
+ if (typeof json.inlineData === 'object') {
114
+ TYPO3.settings.FormEngineInline = Utility.mergeDeep(TYPO3.settings.FormEngineInline, json.inlineData) as typeof TYPO3.settings.FormEngineInline;
115
+ }
116
+
117
+ if (json.scriptItems instanceof Array && json.scriptItems.length > 0) {
118
+ const processor = new JavaScriptItemProcessor();
119
+ processor.processItems(json.scriptItems);
120
+ }
121
+
122
+ return json;
123
+ }
124
+ }
@@ -0,0 +1,41 @@
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 { AjaxDispatcherResponse } from '@typo3/backend/form-engine/inline-relation/ajax-dispatcher';
15
+
16
+ export interface InlineResponseInterface extends AjaxDispatcherResponse{
17
+ data: string;
18
+ inlineData: InlineData;
19
+ stylesheetFiles: Array<string>;
20
+ compilerInput?: CompilerInput,
21
+ }
22
+
23
+ interface InlineData {
24
+ config: { [key: string]: object };
25
+ map: { [key: string]: Array<string> };
26
+ nested: { [key: string]: Array<Array<string>> };
27
+ }
28
+
29
+ interface CompilerInput {
30
+ uid: string;
31
+ childChildUid: string;
32
+ parentConfig: { [key: string]: any };
33
+ delete?: Array<string>;
34
+ localize?: Array<LocalizeItem>;
35
+ }
36
+
37
+ interface LocalizeItem {
38
+ uid: string;
39
+ selectedValue: string;
40
+ remove?: number;
41
+ }