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.
- package/.github/workflows/sync-and-publish.yml +265 -0
- package/.last-synced-tag +1 -0
- package/LICENSE.txt +339 -0
- package/README-TYPO3.md +166 -0
- package/README.md +28 -0
- package/adminpanel/admin-panel.ts +375 -0
- package/adminpanel/modules/cache.ts +27 -0
- package/adminpanel/modules/preview.ts +75 -0
- package/backend/action-button/abstract-action.ts +22 -0
- package/backend/action-button/deferred-action.ts +41 -0
- package/backend/action-button/immediate-action.ts +31 -0
- package/backend/action-dispatcher.ts +104 -0
- package/backend/ajax-data-handler/message-interface.ts +18 -0
- package/backend/ajax-data-handler/response-interface.ts +20 -0
- package/backend/ajax-data-handler.ts +214 -0
- package/backend/backend-exception.ts +22 -0
- package/backend/broadcast-message.ts +50 -0
- package/backend/broadcast-service.ts +52 -0
- package/backend/browse-database.ts +38 -0
- package/backend/clear-cache.ts +88 -0
- package/backend/clipboard-panel.ts +240 -0
- package/backend/close-current-window.ts +2 -0
- package/backend/code-editor/autocomplete/completion-result.ts +105 -0
- package/backend/code-editor/autocomplete/ts-code-completion.ts +142 -0
- package/backend/code-editor/autocomplete/ts-parser.ts +485 -0
- package/backend/code-editor/autocomplete/ts-ref.ts +164 -0
- package/backend/code-editor/element/code-mirror-element.ts +282 -0
- package/backend/code-editor/language/typoscript.ts +181 -0
- package/backend/code-editor/stream-parser/typoscript.ts +1600 -0
- package/backend/color-picker.ts +158 -0
- package/backend/color-scheme-switch.ts +179 -0
- package/backend/column-selector-button.ts +302 -0
- package/backend/context-help.ts +68 -0
- package/backend/context-menu-actions.ts +322 -0
- package/backend/context-menu.ts +751 -0
- package/backend/copy-to-clipboard.ts +79 -0
- package/backend/date-time-picker.ts +270 -0
- package/backend/document-save-actions.ts +159 -0
- package/backend/drag-tooltip.ts +285 -0
- package/backend/drag-uploader.ts +914 -0
- package/backend/element/alert-element.ts +116 -0
- package/backend/element/dispatch-modal-button.ts +50 -0
- package/backend/element/draggable-resizable-element.ts +249 -0
- package/backend/element/editable-page-title.ts +306 -0
- package/backend/element/icon-element.ts +84 -0
- package/backend/element/immediate-action-element.ts +89 -0
- package/backend/element/pagination.ts +59 -0
- package/backend/element/progress-bar-element.ts +172 -0
- package/backend/element/progress-tracker-element.ts +119 -0
- package/backend/element/pseudo-button.ts +58 -0
- package/backend/element/spinner-element.ts +51 -0
- package/backend/element/thumbnail-element.ts +80 -0
- package/backend/element-browser.ts +182 -0
- package/backend/enum/data-transfer-types.ts +21 -0
- package/backend/enum/icon-types.ts +31 -0
- package/backend/enum/key-types.ts +27 -0
- package/backend/enum/severity.ts +20 -0
- package/backend/enum/viewport/scaffold-identifier.ts +24 -0
- package/backend/event/client-request.ts +25 -0
- package/backend/event/consumable.ts +18 -0
- package/backend/event/consumer-scope.ts +54 -0
- package/backend/event/event-dispatcher.ts +26 -0
- package/backend/event/interaction-request-assignment.ts +24 -0
- package/backend/event/interaction-request-map.ts +75 -0
- package/backend/event/interaction-request.ts +48 -0
- package/backend/event/trigger-request.ts +56 -0
- package/backend/form/submit-interceptor.ts +66 -0
- package/backend/form-engine/container/files-control-container.ts +716 -0
- package/backend/form-engine/container/flex-form-container-container.ts +166 -0
- package/backend/form-engine/container/flex-form-section-container.ts +210 -0
- package/backend/form-engine/container/inline-control-container.ts +1230 -0
- package/backend/form-engine/container/site-language-container.ts +616 -0
- package/backend/form-engine/element/abstract-sortable-select-items.ts +186 -0
- package/backend/form-engine/element/category-element.ts +160 -0
- package/backend/form-engine/element/color-element.ts +81 -0
- package/backend/form-engine/element/datetime-element.ts +66 -0
- package/backend/form-engine/element/extra/char-counter.ts +112 -0
- package/backend/form-engine/element/extra/select-box-filter.ts +85 -0
- package/backend/form-engine/element/folder-element.ts +66 -0
- package/backend/form-engine/element/group-element.ts +47 -0
- package/backend/form-engine/element/json-element.ts +52 -0
- package/backend/form-engine/element/link-element.ts +121 -0
- package/backend/form-engine/element/mfa-info-element.ts +169 -0
- package/backend/form-engine/element/modifier/resizable.ts +27 -0
- package/backend/form-engine/element/modifier/tabbable.ts +29 -0
- package/backend/form-engine/element/online-media-form-element.ts +65 -0
- package/backend/form-engine/element/password-element.ts +71 -0
- package/backend/form-engine/element/select-multiple-side-by-side-element.ts +83 -0
- package/backend/form-engine/element/select-single-element.ts +82 -0
- package/backend/form-engine/element/select-tree-element.ts +148 -0
- package/backend/form-engine/element/select-tree-toolbar.ts +118 -0
- package/backend/form-engine/element/select-tree.ts +210 -0
- package/backend/form-engine/element/slug-element.ts +243 -0
- package/backend/form-engine/element/suggest/result-container.ts +118 -0
- package/backend/form-engine/element/suggest/result-item.ts +90 -0
- package/backend/form-engine/element/table-permission-element.ts +101 -0
- package/backend/form-engine/element/table-wizard-element.ts +427 -0
- package/backend/form-engine/element/text-element.ts +52 -0
- package/backend/form-engine/element/text-table-element.ts +31 -0
- package/backend/form-engine/field-control/add-record.ts +40 -0
- package/backend/form-engine/field-control/edit-popup.ts +64 -0
- package/backend/form-engine/field-control/insert-clipboard.ts +50 -0
- package/backend/form-engine/field-control/link-popup.ts +53 -0
- package/backend/form-engine/field-control/list-module.ts +40 -0
- package/backend/form-engine/field-control/password-generator.ts +102 -0
- package/backend/form-engine/field-control/reset-selection.ts +48 -0
- package/backend/form-engine/field-wizard/localization-state-selector.ts +67 -0
- package/backend/form-engine/field-wizard/value-picker.ts +123 -0
- package/backend/form-engine/field-wizard/value-slider.ts +86 -0
- package/backend/form-engine/inline-relation/ajax-dispatcher.ts +124 -0
- package/backend/form-engine/inline-relation/inline-response-interface.ts +41 -0
- package/backend/form-engine-link-browser-adapter.ts +129 -0
- package/backend/form-engine-review.ts +155 -0
- package/backend/form-engine-suggest.ts +133 -0
- package/backend/form-engine-validation.ts +686 -0
- package/backend/form-engine.ts +1391 -0
- package/backend/global-event-handler.ts +252 -0
- package/backend/grid-editor.ts +1077 -0
- package/backend/hashing/md5.ts +252 -0
- package/backend/helper.ts +24 -0
- package/backend/hotkeys/hotkey-storage.ts +63 -0
- package/backend/hotkeys.ts +216 -0
- package/backend/icons.ts +236 -0
- package/backend/image-manipulation.ts +885 -0
- package/backend/info-window.ts +46 -0
- package/backend/input/clearable.ts +128 -0
- package/backend/input/index.d.ts +8 -0
- package/backend/java-script-module-import-event-handler.ts +19 -0
- package/backend/key-bindings.ts +42 -0
- package/backend/layout-module/drag-drop.ts +359 -0
- package/backend/layout-module/paste.ts +165 -0
- package/backend/link-browser.ts +89 -0
- package/backend/live-search/element/backend-search.ts +34 -0
- package/backend/live-search/element/hint.ts +33 -0
- package/backend/live-search/element/provider/default-result-item.ts +52 -0
- package/backend/live-search/element/provider/page-provider-result-item.ts +52 -0
- package/backend/live-search/element/result/item/action/action-container.ts +135 -0
- package/backend/live-search/element/result/item/action/action.ts +56 -0
- package/backend/live-search/element/result/item/item-container.ts +224 -0
- package/backend/live-search/element/result/item/item.ts +74 -0
- package/backend/live-search/element/result/result-container.ts +110 -0
- package/backend/live-search/element/result/result-detail-container.ts +50 -0
- package/backend/live-search/element/result/result-pagination.ts +122 -0
- package/backend/live-search/element/search-option-item.ts +70 -0
- package/backend/live-search/live-search-configurator.ts +54 -0
- package/backend/live-search/live-search-shortcut.ts +29 -0
- package/backend/live-search/result-types/backend-module-result-type.ts +8 -0
- package/backend/live-search/result-types/default-result-type.ts +21 -0
- package/backend/live-search/result-types/page-result-type.ts +23 -0
- package/backend/localization.ts +390 -0
- package/backend/login-refresh.ts +525 -0
- package/backend/login.ts +179 -0
- package/backend/mail-link-handler.ts +45 -0
- package/backend/modal-interface.ts +19 -0
- package/backend/modal.ts +685 -0
- package/backend/module/iframe.ts +125 -0
- package/backend/module/router.ts +275 -0
- package/backend/module-menu.ts +550 -0
- package/backend/module.ts +133 -0
- package/backend/multi-record-selection-action.ts +44 -0
- package/backend/multi-record-selection-delete-action.ts +108 -0
- package/backend/multi-record-selection-edit-action.ts +56 -0
- package/backend/multi-record-selection.ts +468 -0
- package/backend/multi-step-wizard.ts +568 -0
- package/backend/new-content-element-wizard-button.ts +51 -0
- package/backend/new-multiple-pages.ts +108 -0
- package/backend/new-record-wizard.ts +680 -0
- package/backend/notification.ts +366 -0
- package/backend/offset.ts +40 -0
- package/backend/online-media.ts +110 -0
- package/backend/page-actions.ts +91 -0
- package/backend/page-link-handler.ts +51 -0
- package/backend/pagetsconfig/pagetsconfig-includes.ts +77 -0
- package/backend/popover.ts +165 -0
- package/backend/record-download-button.ts +104 -0
- package/backend/record-link-handler.ts +31 -0
- package/backend/record-search.ts +44 -0
- package/backend/recordlist.ts +230 -0
- package/backend/resource/resource.ts +35 -0
- package/backend/security/element/csp-reports.ts +406 -0
- package/backend/security/element/sudo-mode.ts +249 -0
- package/backend/security/sudo-mode-interceptor.ts +19 -0
- package/backend/settings/editor/editable-setting.ts +231 -0
- package/backend/settings/editor.ts +451 -0
- package/backend/settings/enum/settings-mode.enum.ts +24 -0
- package/backend/settings/type/base.ts +200 -0
- package/backend/settings/type/bool.ts +56 -0
- package/backend/settings/type/color.ts +64 -0
- package/backend/settings/type/int.ts +85 -0
- package/backend/settings/type/number.ts +61 -0
- package/backend/settings/type/page.ts +100 -0
- package/backend/settings/type/string.ts +77 -0
- package/backend/settings/type/stringlist.ts +87 -0
- package/backend/severity.ts +88 -0
- package/backend/site-inline-actions.ts +32 -0
- package/backend/sortable-table.ts +208 -0
- package/backend/storage/abstract-client-storage.ts +76 -0
- package/backend/storage/browser-session.ts +28 -0
- package/backend/storage/client.ts +28 -0
- package/backend/storage/module-state-storage.ts +118 -0
- package/backend/storage/persistent.ts +204 -0
- package/backend/switch-user.ts +82 -0
- package/backend/tabs.ts +72 -0
- package/backend/telephone-link-handler.ts +40 -0
- package/backend/tests/backend/storage/browser-storage-test.ts +87 -0
- package/backend/tests/backend/storage/client-test.ts +87 -0
- package/backend/tests/backend/utility/dom-helper-test.ts +51 -0
- package/backend/tests/backend-exception-test.ts +28 -0
- package/backend/tests/element/immediate-action-element-test.ts +81 -0
- package/backend/tests/form-engine-validation-test.ts +304 -0
- package/backend/tests/grid-editor-test.ts +29 -0
- package/backend/tests/hashing/md5Test.ts +28 -0
- package/backend/tests/icons-test.ts +23 -0
- package/backend/tests/notification-test.ts +161 -0
- package/backend/tests/popover-test.ts +83 -0
- package/backend/toolbar/clear-cache-menu.ts +88 -0
- package/backend/toolbar/live-search.ts +284 -0
- package/backend/toolbar/shortcut-menu.ts +254 -0
- package/backend/toolbar/system-information-menu.ts +161 -0
- package/backend/toolbar.ts +41 -0
- package/backend/tree/file-storage-browser.ts +194 -0
- package/backend/tree/file-storage-tree-container.ts +465 -0
- package/backend/tree/file-storage-tree.ts +42 -0
- package/backend/tree/page-browser.ts +272 -0
- package/backend/tree/page-tree-element.ts +602 -0
- package/backend/tree/page-tree.ts +152 -0
- package/backend/tree/tree-module-state.ts +159 -0
- package/backend/tree/tree-node-toggle.ts +31 -0
- package/backend/tree/tree-node.ts +97 -0
- package/backend/tree/tree-toolbar.ts +117 -0
- package/backend/tree/tree.ts +1595 -0
- package/backend/url-link-handler.ts +36 -0
- package/backend/user-pass-login.ts +255 -0
- package/backend/user-settings-manager.ts +189 -0
- package/backend/utility/collapse-state-persister.ts +205 -0
- package/backend/utility/collapse-state-search.ts +183 -0
- package/backend/utility/dom-helper.ts +91 -0
- package/backend/utility/drag-drop-utility.ts +47 -0
- package/backend/utility/message-utility.ts +45 -0
- package/backend/utility/top-level-module-import.ts +32 -0
- package/backend/utility.ts +194 -0
- package/backend/viewport/abstract-container.ts +22 -0
- package/backend/viewport/content-container.ts +98 -0
- package/backend/viewport/loader.ts +28 -0
- package/backend/viewport/navigation-container.ts +119 -0
- package/backend/viewport/resizable-navigation.ts +176 -0
- package/backend/viewport/toolbar.ts +27 -0
- package/backend/viewport/topbar.ts +39 -0
- package/backend/viewport.ts +46 -0
- package/backend/window-manager.ts +84 -0
- package/backend/wizard/move-content-element.ts +107 -0
- package/backend/wizard/move-page.ts +74 -0
- package/backend/wizard.ts +331 -0
- package/belog/backend-log.ts +88 -0
- package/beuser/backend-user-listing.ts +40 -0
- package/beuser/permissions.ts +291 -0
- package/core/ajax/ajax-request-types.ts +15 -0
- package/core/ajax/ajax-request.ts +202 -0
- package/core/ajax/ajax-response.ts +57 -0
- package/core/ajax/input-transformer.ts +92 -0
- package/core/ajax/simple-response-interface.ts +5 -0
- package/core/authentication/mfa-provider/totp.ts +54 -0
- package/core/cache/dedupe-async-task.ts +95 -0
- package/core/directive/markdown.ts +82 -0
- package/core/directive/nl2br.ts +16 -0
- package/core/document-service.ts +35 -0
- package/core/event/debounce-event.ts +40 -0
- package/core/event/event-interface.ts +24 -0
- package/core/event/regular-event.ts +58 -0
- package/core/event/request-animation-frame-event.ts +42 -0
- package/core/event/throttle-event.ts +54 -0
- package/core/java-script-item-handler.ts +29 -0
- package/core/java-script-item-processor.ts +171 -0
- package/core/lit-helper.ts +126 -0
- package/core/literals.ts +17 -0
- package/core/referrer-refresh.ts +2 -0
- package/core/security-utility.ts +89 -0
- package/core/tests/ajax/ajax-request-test.ts +290 -0
- package/core/tests/ajax/input-transformer-test.ts +64 -0
- package/core/tests/cache/dedupe-async-task-test.ts +152 -0
- package/core/tests/event/throttle-event-test.ts +47 -0
- package/core/tests/literals-test.ts +24 -0
- package/core/tests/security-utility-test.ts +50 -0
- package/core/utility/types.ts +9 -0
- package/dashboard/chart-initializer.ts +136 -0
- package/dashboard/dashboard.ts +1487 -0
- package/extensionmanager/distribution-image.ts +55 -0
- package/extensionmanager/main.ts +291 -0
- package/extensionmanager/repository.ts +195 -0
- package/extensionmanager/update.ts +118 -0
- package/extensionmanager/upload-form.ts +42 -0
- package/filelist/browse-files.ts +148 -0
- package/filelist/browse-folders.ts +94 -0
- package/filelist/context-menu-actions.ts +335 -0
- package/filelist/create-folder.ts +69 -0
- package/filelist/file-delete.ts +69 -0
- package/filelist/file-list-actions.ts +132 -0
- package/filelist/file-list-dragdrop.ts +139 -0
- package/filelist/file-list-rename-handler.ts +128 -0
- package/filelist/file-list-transfer-handler.ts +138 -0
- package/filelist/file-list.ts +396 -0
- package/filelist/file-replace.ts +37 -0
- package/filelist/linkbrowser-file-handler.ts +94 -0
- package/filelist/linkbrowser-folder-handler.ts +74 -0
- package/filelist/rename-file.ts +109 -0
- package/form/backend/form-editor/component/property-grid-editor.ts +340 -0
- package/form/backend/form-editor/core.ts +2104 -0
- package/form/backend/form-editor/helper.ts +226 -0
- package/form/backend/form-editor/inspector-component.ts +2323 -0
- package/form/backend/form-editor/mediator.ts +941 -0
- package/form/backend/form-editor/modals-component.ts +433 -0
- package/form/backend/form-editor/stage-component.ts +908 -0
- package/form/backend/form-editor/tree-component.ts +548 -0
- package/form/backend/form-editor/view-model.ts +1343 -0
- package/form/backend/form-editor.ts +846 -0
- package/form/backend/form-manager/main.ts +39 -0
- package/form/backend/form-manager/view-model.ts +789 -0
- package/form/backend/form-manager.ts +180 -0
- package/form/backend/helper.ts +60 -0
- package/form/frontend/date-picker.ts +38 -0
- package/frontend/default_frontend.ts +82 -0
- package/impexp/context-menu-actions.ts +50 -0
- package/impexp/import-export.ts +62 -0
- package/indexed-search/pagination.ts +26 -0
- package/indexed-search/statistics.ts +50 -0
- package/info/translation-status.ts +48 -0
- package/install/ajax/ajax-queue.ts +83 -0
- package/install/init-install.ts +2 -0
- package/install/init-installer.ts +2 -0
- package/install/install.ts +25 -0
- package/install/installer.ts +458 -0
- package/install/message-interface.ts +18 -0
- package/install/module/abstract-inline-module.ts +27 -0
- package/install/module/abstract-interactable-module.ts +107 -0
- package/install/module/environment/environment-check.ts +92 -0
- package/install/module/environment/folder-structure.ts +145 -0
- package/install/module/environment/image-processing.ts +141 -0
- package/install/module/environment/mail-test.ts +127 -0
- package/install/module/environment/php-info.ts +50 -0
- package/install/module/environment/system-information.ts +50 -0
- package/install/module/maintenance/cache.ts +59 -0
- package/install/module/maintenance/clear-tables.ts +134 -0
- package/install/module/maintenance/clear-typo3temp-files.ts +137 -0
- package/install/module/maintenance/create-admin.ts +126 -0
- package/install/module/maintenance/database-analyzer.ts +266 -0
- package/install/module/maintenance/dump-autoload.ts +58 -0
- package/install/module/maintenance/language-packs.ts +338 -0
- package/install/module/maintenance/reset-backend-user-uc.ts +58 -0
- package/install/module/password-strength.ts +56 -0
- package/install/module/settings/change-install-tool-password.ts +101 -0
- package/install/module/settings/extension-configuration.ts +224 -0
- package/install/module/settings/features.ts +102 -0
- package/install/module/settings/local-configuration.ts +316 -0
- package/install/module/settings/presets.ts +147 -0
- package/install/module/settings/system-maintainer.ts +111 -0
- package/install/module/upgrade/core-update.ts +255 -0
- package/install/module/upgrade/extension-compat-tester.ts +195 -0
- package/install/module/upgrade/extension-scanner.ts +381 -0
- package/install/module/upgrade/tca-ext-tables-check.ts +93 -0
- package/install/module/upgrade/tca-migrations-check.ts +101 -0
- package/install/module/upgrade/upgrade-docs.ts +310 -0
- package/install/module/upgrade/upgrade-wizards.ts +612 -0
- package/install/renderable/clearable.ts +113 -0
- package/install/renderable/flash-message.ts +64 -0
- package/install/renderable/info-box.ts +66 -0
- package/install/renderable/language-packs.ts +304 -0
- package/install/renderable/offset-group.ts +38 -0
- package/install/renderable/severity.ts +49 -0
- package/install/renderable/wrap-group.ts +36 -0
- package/install/router.ts +468 -0
- package/linkvalidator/linkvalidator-modal.ts +45 -0
- package/linkvalidator/linkvalidator.ts +101 -0
- package/lowlevel/query-generator.ts +132 -0
- package/lowlevel/reference-index.ts +44 -0
- package/opendocs/toolbar/opendocs-menu.ts +117 -0
- package/package.json +34 -0
- package/recycler/recycler.ts +539 -0
- package/redirects/event-handler.ts +108 -0
- package/redirects/form-engine-evaluation.ts +34 -0
- package/redirects/redirects-module.ts +58 -0
- package/rte-ckeditor/ckeditor5.ts +402 -0
- package/rte-ckeditor/css-prefixer.ts +94 -0
- package/rte-ckeditor/legacy/ckeditor5-bundle.ts +17 -0
- package/rte-ckeditor/legacy/ckeditor5-inspector.ts +2 -0
- package/rte-ckeditor/plugin/typo3-link.ts +810 -0
- package/rte-ckeditor/plugin/whitespace.ts +114 -0
- package/rte-ckeditor/rte-link-browser.ts +112 -0
- package/rte-ckeditor/tests/css-prefixer-test.ts +314 -0
- package/scheduler/scheduler-add-group.ts +119 -0
- package/scheduler/scheduler-editable-group-name.ts +307 -0
- package/scheduler/scheduler-sortable-groups.ts +59 -0
- package/scheduler/scheduler.ts +466 -0
- package/setup/setup-module.ts +122 -0
- package/styleguide/checkbox-demo.ts +5 -0
- package/styleguide/element/theme-switcher-element.ts +101 -0
- package/styleguide/filter.ts +22 -0
- package/styleguide/find-icons.ts +78 -0
- package/styleguide/processing-indicator.ts +78 -0
- package/styleguide/render-notifications.ts +64 -0
- package/sys-note/element/delete-button.ts +78 -0
- package/tstemplate/constant-editor.ts +64 -0
- package/tstemplate/information-module.ts +31 -0
- package/tstemplate/template-analyzer.ts +77 -0
- package/viewpage/main.ts +253 -0
- package/workspaces/backend.ts +979 -0
- package/workspaces/preview.ts +232 -0
- package/workspaces/renderable/comment-view.ts +79 -0
- package/workspaces/renderable/diff-view.ts +58 -0
- package/workspaces/renderable/history-view.ts +97 -0
- package/workspaces/renderable/record-information.ts +118 -0
- package/workspaces/renderable/record-table.ts +355 -0
- package/workspaces/renderable/send-to-stage-form.ts +108 -0
- package/workspaces/toolbar/workspaces-menu.ts +190 -0
- package/workspaces/utility/icon-helper.ts +57 -0
- package/workspaces/workspaces.ts +136 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Module: @typo3/backend/form-engine-link-browser-adapter
|
|
16
|
+
* LinkBrowser communication with parent window
|
|
17
|
+
*/
|
|
18
|
+
import LinkBrowser from '@typo3/backend/link-browser';
|
|
19
|
+
import Modal from '@typo3/backend/modal';
|
|
20
|
+
import AjaxRequest from '@typo3/core/ajax/ajax-request';
|
|
21
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
22
|
+
|
|
23
|
+
interface OnFieldChangeItem {
|
|
24
|
+
name: string;
|
|
25
|
+
data: {[key: string]: string|number|boolean|null}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface Response {
|
|
29
|
+
typoLink?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default (function() {
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @exports @typo3/backend/form-engine-link-browser-adapter
|
|
36
|
+
*/
|
|
37
|
+
const FormEngineLinkBrowserAdapter: any = {
|
|
38
|
+
onFieldChangeItems: null // those are set in the module initializer function in PHP
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @param {OnFieldChangeItem[]} onFieldChangeItems
|
|
43
|
+
*/
|
|
44
|
+
FormEngineLinkBrowserAdapter.setOnFieldChangeItems = function(onFieldChangeItems: Array<OnFieldChangeItem>) {
|
|
45
|
+
FormEngineLinkBrowserAdapter.onFieldChangeItems = onFieldChangeItems;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Return reference to parent's form element
|
|
50
|
+
*
|
|
51
|
+
* @returns {Element}
|
|
52
|
+
*/
|
|
53
|
+
FormEngineLinkBrowserAdapter.checkReference = function(): void {
|
|
54
|
+
const selector = 'form[name="' + LinkBrowser.parameters.formName + '"] [data-formengine-input-name="' + LinkBrowser.parameters.itemName + '"]';
|
|
55
|
+
const opener = FormEngineLinkBrowserAdapter.getParent();
|
|
56
|
+
|
|
57
|
+
if (opener && opener.document && opener.document.querySelector(selector)) {
|
|
58
|
+
return opener.document.querySelector(selector);
|
|
59
|
+
} else {
|
|
60
|
+
Modal.dismiss();
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Save the current link back to the opener
|
|
66
|
+
*
|
|
67
|
+
* @param {String} input
|
|
68
|
+
*/
|
|
69
|
+
LinkBrowser.finalizeFunction = function(input: string): void {
|
|
70
|
+
const field = FormEngineLinkBrowserAdapter.checkReference();
|
|
71
|
+
if (field) {
|
|
72
|
+
const attributeValues = LinkBrowser.getLinkAttributeValues();
|
|
73
|
+
// encode link on server
|
|
74
|
+
attributeValues.url = input;
|
|
75
|
+
|
|
76
|
+
(new AjaxRequest(TYPO3.settings.ajaxUrls.link_browser_encodetypolink))
|
|
77
|
+
.withQueryArguments(attributeValues)
|
|
78
|
+
.get()
|
|
79
|
+
.then(async (response: AjaxResponse): Promise<void> => {
|
|
80
|
+
const data: Response = await response.resolve();
|
|
81
|
+
if (data.typoLink) {
|
|
82
|
+
field.value = data.typoLink;
|
|
83
|
+
field.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
84
|
+
|
|
85
|
+
if (FormEngineLinkBrowserAdapter.onFieldChangeItems instanceof Array) {
|
|
86
|
+
// @todo us `CustomEvent` or broadcast channel as alternative
|
|
87
|
+
FormEngineLinkBrowserAdapter.getParent()
|
|
88
|
+
.TYPO3.FormEngine.processOnFieldChange(FormEngineLinkBrowserAdapter.onFieldChangeItems);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Modal.dismiss();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Returns the parent document object
|
|
99
|
+
*/
|
|
100
|
+
FormEngineLinkBrowserAdapter.getParent = function(): Window {
|
|
101
|
+
let opener: Window;
|
|
102
|
+
if (
|
|
103
|
+
typeof window.parent !== 'undefined' &&
|
|
104
|
+
typeof window.parent.document.list_frame !== 'undefined' &&
|
|
105
|
+
window.parent.document.list_frame.parent.document.querySelector('.t3js-modal-iframe') !== null
|
|
106
|
+
) {
|
|
107
|
+
opener = window.parent.document.list_frame;
|
|
108
|
+
} else if (
|
|
109
|
+
typeof window.parent !== 'undefined' &&
|
|
110
|
+
typeof window.parent.frames.list_frame !== 'undefined' &&
|
|
111
|
+
window.parent.frames.list_frame.parent.document.querySelector('.t3js-modal-iframe') !== null
|
|
112
|
+
) {
|
|
113
|
+
opener = window.parent.frames.list_frame;
|
|
114
|
+
} else if (
|
|
115
|
+
typeof window.frames !== 'undefined' &&
|
|
116
|
+
typeof window.frames.frameElement !== 'undefined' &&
|
|
117
|
+
window.frames.frameElement !== null &&
|
|
118
|
+
window.frames.frameElement.classList.contains('t3js-modal-iframe')
|
|
119
|
+
) {
|
|
120
|
+
opener = (window.frames.frameElement as HTMLIFrameElement).contentWindow.parent;
|
|
121
|
+
} else if (window.opener) {
|
|
122
|
+
opener = window.opener;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return opener;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
return FormEngineLinkBrowserAdapter;
|
|
129
|
+
})();
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import 'bootstrap';
|
|
15
|
+
import DocumentService from '@typo3/core/document-service';
|
|
16
|
+
import { selector } from '@typo3/core/literals';
|
|
17
|
+
import '@typo3/backend/element/icon-element';
|
|
18
|
+
import Popover from './popover';
|
|
19
|
+
import { type Popover as BootstrapPopover, Tab as BootstrapTab } from 'bootstrap';
|
|
20
|
+
import DomHelper from '@typo3/backend/utility/dom-helper';
|
|
21
|
+
import type { PostValidationEvent } from '@typo3/backend/form-engine-validation';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Module: @typo3/backend/form-engine-review
|
|
25
|
+
* Enables interaction with record fields that need review
|
|
26
|
+
* @exports @typo3/backend/form-engine-review
|
|
27
|
+
*/
|
|
28
|
+
export class FormEngineReview {
|
|
29
|
+
|
|
30
|
+
private readonly toggleButtonClass: string = 't3js-toggle-review-panel';
|
|
31
|
+
private readonly labelSelector: string = '.t3js-formengine-label';
|
|
32
|
+
private readonly invalidFields: Set<HTMLInputElement|HTMLTextAreaElement|HTMLSelectElement>;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The constructor, set the class properties default values
|
|
36
|
+
*/
|
|
37
|
+
constructor(
|
|
38
|
+
private readonly formElement: HTMLFormElement
|
|
39
|
+
) {
|
|
40
|
+
this.invalidFields = new Set();
|
|
41
|
+
this.initialize();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the events
|
|
46
|
+
*/
|
|
47
|
+
private initialize(): void {
|
|
48
|
+
this.formElement.addEventListener('t3-formengine-postfieldvalidation', (e: CustomEvent<PostValidationEvent>): void => {
|
|
49
|
+
const field = e.detail.field;
|
|
50
|
+
if (e.detail.isValid) {
|
|
51
|
+
this.invalidFields.delete(field);
|
|
52
|
+
} else {
|
|
53
|
+
this.invalidFields.add(field);
|
|
54
|
+
}
|
|
55
|
+
this.checkForReviewableField();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
DocumentService.ready().then((): void => {
|
|
59
|
+
this.attachButtonToModuleHeader();
|
|
60
|
+
this.checkForReviewableField();
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Renders an invisible button to toggle the review panel into the least possible toolbar
|
|
66
|
+
*/
|
|
67
|
+
private attachButtonToModuleHeader(): void {
|
|
68
|
+
const leastButtonBar: HTMLElement = document.querySelector('.t3js-module-docheader-bar-buttons').lastElementChild.querySelector('[role="toolbar"]');
|
|
69
|
+
|
|
70
|
+
const icon = document.createElement('typo3-backend-icon');
|
|
71
|
+
icon.setAttribute('identifier', 'actions-exclamation-circle');
|
|
72
|
+
icon.setAttribute('size', 'small');
|
|
73
|
+
|
|
74
|
+
const button = document.createElement('button');
|
|
75
|
+
button.type = 'button';
|
|
76
|
+
button.classList.add('btn', 'btn-danger', 'btn-sm', 'hidden', this.toggleButtonClass);
|
|
77
|
+
button.title = TYPO3.lang['buttons.reviewFailedValidationFields'];
|
|
78
|
+
button.appendChild(icon);
|
|
79
|
+
|
|
80
|
+
Popover.popover(button);
|
|
81
|
+
leastButtonBar.prepend(button);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Checks if fields have failed validation. In such case, the markup is rendered and the toggle button is unlocked.
|
|
86
|
+
*/
|
|
87
|
+
private checkForReviewableField(): void {
|
|
88
|
+
const toggleButton: HTMLElement = document.querySelector('.' + this.toggleButtonClass);
|
|
89
|
+
if (toggleButton === null) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (this.invalidFields.size > 0) {
|
|
94
|
+
const erroneousListGroup = document.createElement('div');
|
|
95
|
+
erroneousListGroup.classList.add('list-group');
|
|
96
|
+
|
|
97
|
+
for (const invalidField of this.invalidFields) {
|
|
98
|
+
const fieldContainer = invalidField.closest('.t3js-formengine-validation-marker');
|
|
99
|
+
if (fieldContainer === null) {
|
|
100
|
+
console.error(invalidField);
|
|
101
|
+
throw new Error('Could not find an element containing the `t3js-formengine-validation-marker` class for the previously logged input field.');
|
|
102
|
+
}
|
|
103
|
+
const relatedInputField = fieldContainer.querySelector('[data-formengine-validation-rules]') as HTMLElement;
|
|
104
|
+
if (relatedInputField === null) {
|
|
105
|
+
console.error(fieldContainer);
|
|
106
|
+
throw new Error('Could not find an element containing the `data-formengine-validation-rules` attribute for the previously logged container.');
|
|
107
|
+
}
|
|
108
|
+
const link = document.createElement('a');
|
|
109
|
+
link.classList.add('list-group-item');
|
|
110
|
+
link.href = '#';
|
|
111
|
+
link.textContent = fieldContainer.querySelector(this.labelSelector)?.textContent || '';
|
|
112
|
+
link.addEventListener('click', (e: Event) => {
|
|
113
|
+
this.switchToField(e, fieldContainer, relatedInputField);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
erroneousListGroup.append(link);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
toggleButton.classList.remove('hidden');
|
|
120
|
+
Popover.setOptions(toggleButton, <BootstrapPopover.Options>{
|
|
121
|
+
html: true,
|
|
122
|
+
content: erroneousListGroup as Element
|
|
123
|
+
});
|
|
124
|
+
} else {
|
|
125
|
+
toggleButton.classList.add('hidden');
|
|
126
|
+
Popover.hide(toggleButton);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Finds the field in the form and focuses it
|
|
132
|
+
*/
|
|
133
|
+
private switchToField(e: Event, fieldContainer: Element, inputField: HTMLElement): void {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
|
|
136
|
+
// iterate possibly nested tab panels
|
|
137
|
+
let ref = inputField;
|
|
138
|
+
while (ref) {
|
|
139
|
+
if (ref.matches('[id][role="tabpanel"]')) {
|
|
140
|
+
const tabContainer = document.querySelector(selector`[aria-controls="${ref.id}"]`);
|
|
141
|
+
new BootstrapTab(tabContainer).show();
|
|
142
|
+
}
|
|
143
|
+
ref = ref.parentElement;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Check if the field is visible to the user. If this is the case, the field will be focussed, triggering a scroll
|
|
147
|
+
// to the input field. If checkVisibility() returns false, the input field is not visible, therefore scroll the
|
|
148
|
+
// field container into the view instead.
|
|
149
|
+
if (inputField.checkVisibility()) {
|
|
150
|
+
inputField.focus();
|
|
151
|
+
} else {
|
|
152
|
+
DomHelper.scrollIntoViewIfNeeded(fieldContainer);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
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 './form-engine/element/suggest/result-container';
|
|
15
|
+
import DocumentService from '@typo3/core/document-service';
|
|
16
|
+
import FormEngine from '@typo3/backend/form-engine';
|
|
17
|
+
import RegularEvent from '@typo3/core/event/regular-event';
|
|
18
|
+
import DebounceEvent from '@typo3/core/event/debounce-event';
|
|
19
|
+
import AjaxRequest from '@typo3/core/ajax/ajax-request';
|
|
20
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
21
|
+
import { selector } from '@typo3/core/literals';
|
|
22
|
+
|
|
23
|
+
class FormEngineSuggest {
|
|
24
|
+
private readonly element: HTMLInputElement;
|
|
25
|
+
private resultContainer: HTMLElement;
|
|
26
|
+
private currentRequest: AjaxRequest|null = null;
|
|
27
|
+
|
|
28
|
+
constructor(element: HTMLInputElement) {
|
|
29
|
+
this.element = element;
|
|
30
|
+
|
|
31
|
+
DocumentService.ready().then((): void => {
|
|
32
|
+
this.initialize(element);
|
|
33
|
+
this.registerEvents();
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private initialize(searchField: HTMLElement): void {
|
|
38
|
+
const containerElement: Element = searchField.closest('.t3-form-suggest-container');
|
|
39
|
+
|
|
40
|
+
this.resultContainer = document.createElement('typo3-backend-formengine-suggest-result-container');
|
|
41
|
+
this.resultContainer.hidden = true;
|
|
42
|
+
containerElement.append(this.resultContainer);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private registerEvents(): void {
|
|
46
|
+
new RegularEvent('typo3:formengine:suggest-item-chosen', (e: CustomEvent): void => {
|
|
47
|
+
let insertData: string = '';
|
|
48
|
+
if (this.element.dataset.fieldtype === 'select') {
|
|
49
|
+
insertData = e.detail.element.uid;
|
|
50
|
+
} else {
|
|
51
|
+
insertData = e.detail.element.table + '_' + e.detail.element.uid;
|
|
52
|
+
}
|
|
53
|
+
FormEngine.setSelectOptionFromExternalSource(this.element.dataset.field, insertData, e.detail.element.label, e.detail.element.label);
|
|
54
|
+
FormEngine.Validation.markFieldAsChanged(document.querySelector(selector`input[name="${this.element.dataset.field}"]`) as HTMLInputElement);
|
|
55
|
+
this.resultContainer.hidden = true;
|
|
56
|
+
}).bindTo(this.resultContainer);
|
|
57
|
+
|
|
58
|
+
new RegularEvent('focus', (): void => {
|
|
59
|
+
const results = JSON.parse(this.resultContainer.getAttribute('results'));
|
|
60
|
+
if (results?.length > 0) {
|
|
61
|
+
this.resultContainer.hidden = false;
|
|
62
|
+
}
|
|
63
|
+
}).bindTo(this.element);
|
|
64
|
+
|
|
65
|
+
new RegularEvent('blur', (e: FocusEvent): void => {
|
|
66
|
+
if ((e.relatedTarget as HTMLElement)?.tagName.toLowerCase() === 'typo3-backend-formengine-suggest-result-item') {
|
|
67
|
+
// don't to anything if focus switches to a result item
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
this.resultContainer.hidden = true;
|
|
72
|
+
}).bindTo(this.element);
|
|
73
|
+
|
|
74
|
+
new DebounceEvent('input', (e: InputEvent): void => {
|
|
75
|
+
if (this.currentRequest instanceof AjaxRequest) {
|
|
76
|
+
this.currentRequest.abort();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const target = e.target as HTMLInputElement;
|
|
80
|
+
|
|
81
|
+
if (target.value.length < parseInt(target.dataset.minchars, 10)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const uid = parseInt(target.dataset.uid, 10);
|
|
86
|
+
this.currentRequest = new AjaxRequest(TYPO3.settings.ajaxUrls.record_suggest);
|
|
87
|
+
this.currentRequest.post({
|
|
88
|
+
value: target.value,
|
|
89
|
+
tableName: target.dataset.tablename,
|
|
90
|
+
fieldName: target.dataset.fieldname,
|
|
91
|
+
uid: (isNaN(uid) ? null : uid),
|
|
92
|
+
pid: parseInt(target.dataset.pid, 10),
|
|
93
|
+
dataStructureIdentifier: target.dataset.datastructureidentifier,
|
|
94
|
+
flexFormSheetName: target.dataset.flexformsheetname,
|
|
95
|
+
flexFormFieldName: target.dataset.flexformfieldname,
|
|
96
|
+
flexFormContainerName: target.dataset.flexformcontainername,
|
|
97
|
+
flexFormContainerFieldName: target.dataset.flexformcontainerfieldname,
|
|
98
|
+
recordTypeValue: target.dataset.recordtypevalue,
|
|
99
|
+
}).then(async (response: AjaxResponse): Promise<void> => {
|
|
100
|
+
const resultSet = await response.raw().text();
|
|
101
|
+
this.resultContainer.setAttribute('results', resultSet);
|
|
102
|
+
this.resultContainer.hidden = false;
|
|
103
|
+
});
|
|
104
|
+
}).bindTo(this.element);
|
|
105
|
+
|
|
106
|
+
new RegularEvent('keydown', this.handleKeyDown).bindTo(this.element);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private readonly handleKeyDown = (e: KeyboardEvent): void => {
|
|
110
|
+
if (e.key === 'ArrowDown') {
|
|
111
|
+
e.preventDefault();
|
|
112
|
+
|
|
113
|
+
const results = JSON.parse(this.resultContainer.getAttribute('results'));
|
|
114
|
+
if (results?.length > 0) {
|
|
115
|
+
this.resultContainer.hidden = false;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Select first available result item
|
|
119
|
+
const firstSearchResultItem = this.resultContainer.querySelector('typo3-backend-formengine-suggest-result-item') as HTMLElement|null;
|
|
120
|
+
firstSearchResultItem?.focus();
|
|
121
|
+
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (e.key === 'Escape') {
|
|
126
|
+
e.preventDefault();
|
|
127
|
+
|
|
128
|
+
this.resultContainer.hidden = true;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export default FormEngineSuggest;
|