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,180 @@
|
|
|
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/form/backend/form-manager
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
type ViewModel = typeof import('@typo3/form/backend/form-manager/view-model');
|
|
19
|
+
|
|
20
|
+
export interface LabelValuePair {
|
|
21
|
+
label: string;
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type FormManagerConfiguration = {
|
|
26
|
+
selectablePrototypesConfiguration?: Array<{
|
|
27
|
+
label: string;
|
|
28
|
+
identifier: string;
|
|
29
|
+
newFormTemplates: Array<{
|
|
30
|
+
label: string;
|
|
31
|
+
templatePath: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>,
|
|
34
|
+
accessibleFormStorageFolders?: LabelValuePair[],
|
|
35
|
+
endpoints?: {
|
|
36
|
+
[key: string]: string;
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export function assert(test: boolean|(() => boolean), message: string, messageCode: number): void {
|
|
41
|
+
if (typeof test === 'function') {
|
|
42
|
+
test = (test() !== false);
|
|
43
|
+
}
|
|
44
|
+
if (!test) {
|
|
45
|
+
message = message || 'Assertion failed';
|
|
46
|
+
if (messageCode) {
|
|
47
|
+
message = message + ' (' + messageCode + ')';
|
|
48
|
+
}
|
|
49
|
+
if ('undefined' !== typeof Error) {
|
|
50
|
+
throw new Error(message);
|
|
51
|
+
}
|
|
52
|
+
throw message;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export class FormManager {
|
|
57
|
+
private isRunning: boolean = false;
|
|
58
|
+
private configuration: FormManagerConfiguration;
|
|
59
|
+
private readonly viewModel: ViewModel;
|
|
60
|
+
|
|
61
|
+
public constructor(
|
|
62
|
+
configuration: FormManagerConfiguration,
|
|
63
|
+
viewModel: ViewModel
|
|
64
|
+
) {
|
|
65
|
+
this.configuration = configuration;
|
|
66
|
+
this.viewModel = viewModel;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @todo deprecate, use exported `assert()` method instead
|
|
71
|
+
*/
|
|
72
|
+
public assert(test: boolean|(() => boolean), message: string, messageCode: number): void {
|
|
73
|
+
assert(test, message, messageCode);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public getPrototypes(): LabelValuePair[] {
|
|
77
|
+
if (!Array.isArray(this.configuration.selectablePrototypesConfiguration)) {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return this.configuration.selectablePrototypesConfiguration.map((selectablePrototype): LabelValuePair => {
|
|
82
|
+
return {
|
|
83
|
+
label: selectablePrototype.label,
|
|
84
|
+
value: selectablePrototype.identifier,
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public getTemplatesForPrototype(prototypeName: string): LabelValuePair[] {
|
|
90
|
+
assert('string' === typeof prototypeName, 'Invalid parameter "prototypeName"', 1475945286);
|
|
91
|
+
if (!Array.isArray(this.configuration.selectablePrototypesConfiguration)) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const templates: LabelValuePair[] = [];
|
|
96
|
+
this.configuration.selectablePrototypesConfiguration.forEach((selectablePrototype): void => {
|
|
97
|
+
if (!Array.isArray(selectablePrototype.newFormTemplates)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (selectablePrototype.identifier !== prototypeName) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
selectablePrototype.newFormTemplates.forEach((newFormTemplate): void => {
|
|
105
|
+
templates.push({
|
|
106
|
+
label: newFormTemplate.label,
|
|
107
|
+
value: newFormTemplate.templatePath,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
return templates;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
public getAccessibleFormStorageFolders(): LabelValuePair[] {
|
|
116
|
+
if (!Array.isArray(this.configuration.accessibleFormStorageFolders)) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return this.configuration.accessibleFormStorageFolders.map((folder): LabelValuePair => {
|
|
121
|
+
return {
|
|
122
|
+
label: folder.label,
|
|
123
|
+
value: folder.value,
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @throws 1477506508
|
|
130
|
+
*/
|
|
131
|
+
public getAjaxEndpoint(endpointName: string): string {
|
|
132
|
+
assert(typeof this.configuration.endpoints[endpointName] !== 'undefined', 'Endpoint ' + endpointName + ' does not exist', 1477506508);
|
|
133
|
+
|
|
134
|
+
return this.configuration.endpoints[endpointName];
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @throws 1475942618
|
|
139
|
+
*/
|
|
140
|
+
public run(): FormManager {
|
|
141
|
+
if (this.isRunning) {
|
|
142
|
+
throw 'You can not run the app twice (1475942618)';
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
this.bootstrap();
|
|
146
|
+
this.isRunning = true;
|
|
147
|
+
return this;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @throws 1475942906
|
|
152
|
+
*/
|
|
153
|
+
private viewSetup(): void {
|
|
154
|
+
assert('function' === typeof this.viewModel.bootstrap, 'The view model does not implement the method "bootstrap"', 1475942906);
|
|
155
|
+
this.viewModel.bootstrap(this);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @throws 1477506504
|
|
160
|
+
*/
|
|
161
|
+
private bootstrap(): void {
|
|
162
|
+
this.configuration = this.configuration || {};
|
|
163
|
+
assert('object' === typeof this.configuration.endpoints, 'Invalid parameter "endpoints"', 1477506504);
|
|
164
|
+
this.viewSetup();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
let formManagerInstance: FormManager = null;
|
|
169
|
+
/**
|
|
170
|
+
* Return a singleton instance of a "FormManager" object.
|
|
171
|
+
*/
|
|
172
|
+
export function getInstance(
|
|
173
|
+
configuration: FormManagerConfiguration,
|
|
174
|
+
viewModel: ViewModel
|
|
175
|
+
): FormManager {
|
|
176
|
+
if (formManagerInstance === null) {
|
|
177
|
+
formManagerInstance = new FormManager(configuration, viewModel);
|
|
178
|
+
}
|
|
179
|
+
return formManagerInstance;
|
|
180
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 { loadModule, type JavaScriptItemPayload } from '@typo3/core/java-script-item-processor';
|
|
15
|
+
import DocumentService from '@typo3/core/document-service';
|
|
16
|
+
|
|
17
|
+
interface ModuleRequirements {
|
|
18
|
+
app: JavaScriptItemPayload;
|
|
19
|
+
viewModel: JavaScriptItemPayload;
|
|
20
|
+
mediator?: JavaScriptItemPayload;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @exports @typo3/form/backend/helper
|
|
25
|
+
*/
|
|
26
|
+
export class Helper {
|
|
27
|
+
public static dispatchFormEditor(requirements: ModuleRequirements, options: any): void {
|
|
28
|
+
DocumentService.ready().then((): void => {
|
|
29
|
+
Promise.all([
|
|
30
|
+
loadModule(requirements.app),
|
|
31
|
+
loadModule(requirements.mediator),
|
|
32
|
+
loadModule(requirements.viewModel),
|
|
33
|
+
]).then((modules: [any, any, any]) =>
|
|
34
|
+
((
|
|
35
|
+
app: typeof import('@typo3/form/backend/form-editor'),
|
|
36
|
+
mediator: typeof import('@typo3/form/backend/form-editor/mediator'),
|
|
37
|
+
viewModel: typeof import('@typo3/form/backend/form-editor/view-model')
|
|
38
|
+
) => {
|
|
39
|
+
window.TYPO3.FORMEDITOR_APP = app.getInstance(options, mediator, viewModel).run();
|
|
40
|
+
})(...modules)
|
|
41
|
+
);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static dispatchFormManager(requirements: ModuleRequirements, options: any): void {
|
|
46
|
+
DocumentService.ready().then((): void => {
|
|
47
|
+
Promise.all([
|
|
48
|
+
loadModule(requirements.app),
|
|
49
|
+
loadModule(requirements.viewModel)
|
|
50
|
+
]).then((modules: [any, any]) =>
|
|
51
|
+
((
|
|
52
|
+
formManager: typeof import('@typo3/form/backend/form-manager'),
|
|
53
|
+
viewModel: typeof import('@typo3/form/backend/form-manager/view-model')
|
|
54
|
+
) => {
|
|
55
|
+
window.TYPO3.FORMMANAGER_APP = formManager.getInstance(options, viewModel).run();
|
|
56
|
+
})(...modules)
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
* DatePicker initialization used by DatePickerViewHelper.
|
|
16
|
+
*
|
|
17
|
+
* Note: Requires jQuery UI to be included on the page.
|
|
18
|
+
*
|
|
19
|
+
* Scope: frontend
|
|
20
|
+
*/
|
|
21
|
+
interface JQuery { // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
22
|
+
datepicker(optionsOrInstruction: object | string, value?: string): JQuery;
|
|
23
|
+
}
|
|
24
|
+
if (typeof $ !== 'undefined') { // eslint-disable-line no-restricted-globals
|
|
25
|
+
$(function(jQuery: JQueryStatic) { // eslint-disable-line no-restricted-globals
|
|
26
|
+
jQuery('input[data-t3-form-datepicker]').each(function (this: HTMLInputElement) {
|
|
27
|
+
jQuery(this).datepicker({
|
|
28
|
+
dateFormat: jQuery(this).data('format')
|
|
29
|
+
}).on('keydown', function(this: HTMLInputElement, e: JQueryEventObject) {
|
|
30
|
+
// By using "backspace" or "delete", you can clear the datepicker again.
|
|
31
|
+
if (e.keyCode === 8 || e.keyCode === 46) {
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
jQuery(this).datepicker('setDate', '');
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
(function() {
|
|
14
|
+
function decryptCharcode(charCode: number, start: number, end: number, offset: number): string {
|
|
15
|
+
charCode = charCode + offset;
|
|
16
|
+
if (offset > 0 && charCode > end) {
|
|
17
|
+
charCode = start + (charCode - end - 1);
|
|
18
|
+
} else if (offset < 0 && charCode < start) {
|
|
19
|
+
charCode = end - (start - charCode - 1);
|
|
20
|
+
}
|
|
21
|
+
return String.fromCharCode(charCode);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function decryptString(value: string, offset: number): string {
|
|
25
|
+
let result = '';
|
|
26
|
+
for (let i = 0; i < value.length; i++) {
|
|
27
|
+
const charCode = value.charCodeAt(i);
|
|
28
|
+
if (charCode >= 0x2B && charCode <= 0x3A) {
|
|
29
|
+
result += decryptCharcode(charCode,0x2B,0x3A,offset); /* 0-9 . , - + / : */
|
|
30
|
+
} else if (charCode >= 0x40 && charCode <= 0x5A) {
|
|
31
|
+
result += decryptCharcode(charCode,0x40,0x5A,offset); /* A-Z @ */
|
|
32
|
+
} else if (charCode >= 0x61 && charCode <= 0x7A) {
|
|
33
|
+
result += decryptCharcode(charCode,0x61,0x7A,offset); /* a-z */
|
|
34
|
+
} else {
|
|
35
|
+
result += value.charAt(i);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function windowOpen(url: string, target: string | null, features: string | null): Window {
|
|
42
|
+
const windowRef = window.open(url, target, features);
|
|
43
|
+
if (windowRef) {
|
|
44
|
+
windowRef.focus();
|
|
45
|
+
}
|
|
46
|
+
return windowRef;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function delegateEvent(
|
|
50
|
+
event: string,
|
|
51
|
+
selector: string,
|
|
52
|
+
callback: (evt: Event, targetElement: HTMLElement) => void
|
|
53
|
+
): void {
|
|
54
|
+
document.addEventListener(event, function(evt: Event) {
|
|
55
|
+
for (let node = evt.target as Node; node; node = node.parentNode !== document ? node.parentNode : null) {
|
|
56
|
+
if ('matches' in node) {
|
|
57
|
+
const targetElement = node as HTMLElement;
|
|
58
|
+
if (targetElement.matches(selector)) {
|
|
59
|
+
callback(evt, targetElement);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
delegateEvent('click', 'a[data-mailto-token][data-mailto-vector]', function(evt: Event, evtTarget: HTMLElement) {
|
|
67
|
+
evt.preventDefault();
|
|
68
|
+
const dataset = evtTarget.dataset;
|
|
69
|
+
const value = dataset.mailtoToken;
|
|
70
|
+
const offset = parseInt(dataset.mailtoVector, 10) * -1;
|
|
71
|
+
document.location.href = decryptString(value, offset);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
delegateEvent('click', 'a[data-window-url]', function(evt: Event, evtTarget: HTMLElement) {
|
|
75
|
+
evt.preventDefault();
|
|
76
|
+
const dataset = evtTarget.dataset;
|
|
77
|
+
const url = dataset.windowUrl;
|
|
78
|
+
const target = dataset.windowTarget || null;
|
|
79
|
+
const features = dataset.windowFeatures || null;
|
|
80
|
+
windowOpen(url, target, features);
|
|
81
|
+
});
|
|
82
|
+
})();
|
|
@@ -0,0 +1,50 @@
|
|
|
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/impexp/context-menu-actions
|
|
16
|
+
*
|
|
17
|
+
* JavaScript to handle import/export actions from context menu
|
|
18
|
+
* @exports @typo3/impexp/context-menu-actions
|
|
19
|
+
*/
|
|
20
|
+
class ContextMenuActions {
|
|
21
|
+
|
|
22
|
+
public exportT3d(table: string, uid: number, dataset: DOMStringMap): void {
|
|
23
|
+
const actionUrl: string = dataset.actionUrl;
|
|
24
|
+
if (table === 'pages') {
|
|
25
|
+
top.TYPO3.Backend.ContentContainer.setUrl(
|
|
26
|
+
actionUrl +
|
|
27
|
+
'&id=' + uid +
|
|
28
|
+
'&tx_impexp[pagetree][id]=' + uid +
|
|
29
|
+
'&tx_impexp[pagetree][levels]=0' +
|
|
30
|
+
'&tx_impexp[pagetree][tables][]=_ALL',
|
|
31
|
+
);
|
|
32
|
+
} else {
|
|
33
|
+
top.TYPO3.Backend.ContentContainer.setUrl(
|
|
34
|
+
actionUrl +
|
|
35
|
+
'&tx_impexp[record][]=' + table + ':' + uid +
|
|
36
|
+
'&tx_impexp[external_ref][tables][]=_ALL',
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public importT3d(table: string, uid: number, dataset: DOMStringMap): void {
|
|
42
|
+
const actionUrl: string = dataset.actionUrl;
|
|
43
|
+
top.TYPO3.Backend.ContentContainer.setUrl(
|
|
44
|
+
actionUrl + '&id=' + uid + '&table=' + table,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
export default new ContextMenuActions();
|
|
@@ -0,0 +1,62 @@
|
|
|
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 Modal from '@typo3/backend/modal';
|
|
15
|
+
import RegularEvent from '@typo3/core/event/regular-event';
|
|
16
|
+
import DocumentService from '@typo3/core/document-service';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Module: @typo3/impexp/import-export
|
|
20
|
+
* JavaScript to handle confirm windows in the Import/Export module
|
|
21
|
+
* @exports @typo3/impexp/import-export
|
|
22
|
+
*/
|
|
23
|
+
class ImportExport {
|
|
24
|
+
constructor() {
|
|
25
|
+
DocumentService.ready().then((): void => this.registerEvents());
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private registerEvents(): void {
|
|
29
|
+
new RegularEvent('click', this.triggerConfirmation).delegateTo(document, '.t3js-confirm-trigger');
|
|
30
|
+
|
|
31
|
+
const toggleDisabledControl = document.querySelector('.t3js-impexp-toggledisabled');
|
|
32
|
+
if (toggleDisabledControl !== null) {
|
|
33
|
+
new RegularEvent('click', this.toggleDisabled).bindTo(toggleDisabledControl);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private triggerConfirmation(this: HTMLButtonElement): void {
|
|
38
|
+
const modal = Modal.confirm(this.dataset.title, this.dataset.message);
|
|
39
|
+
modal.addEventListener('confirm.button.ok', (): void => {
|
|
40
|
+
const submitTrigger: HTMLInputElement = document.getElementById('t3js-submit-field') as HTMLInputElement;
|
|
41
|
+
submitTrigger.name = this.name;
|
|
42
|
+
submitTrigger.closest('form').submit();
|
|
43
|
+
|
|
44
|
+
modal.hideModal();
|
|
45
|
+
});
|
|
46
|
+
modal.addEventListener('confirm.button.cancel', (): void => {
|
|
47
|
+
modal.hideModal();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private toggleDisabled() {
|
|
52
|
+
const checkboxes: NodeListOf<HTMLInputElement> = document.querySelectorAll('table.t3js-impexp-preview tr[data-active="hidden"] input.t3js-exclude-checkbox');
|
|
53
|
+
if (checkboxes.length > 0) {
|
|
54
|
+
const firstCheckbox = checkboxes.item(0);
|
|
55
|
+
checkboxes.forEach((element: HTMLInputElement): void => {
|
|
56
|
+
element.checked = !firstCheckbox.checked;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default new ImportExport();
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
(function() {
|
|
14
|
+
document.addEventListener('click', (evt: MouseEvent) => {
|
|
15
|
+
const target = evt.target as HTMLElement|null;
|
|
16
|
+
if (!target.classList.contains('tx-indexedsearch-page-selector')) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
evt.preventDefault();
|
|
20
|
+
|
|
21
|
+
const data = target.dataset;
|
|
22
|
+
(document.getElementById(data.prefix + '_pointer') as HTMLInputElement).value = data.pointer;
|
|
23
|
+
(document.getElementById(data.prefix + '_freeIndexUid') as HTMLInputElement).value = data.freeIndexUid;
|
|
24
|
+
document.forms.namedItem(data.prefix).submit();
|
|
25
|
+
});
|
|
26
|
+
})();
|
|
@@ -0,0 +1,50 @@
|
|
|
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 SortableTable from '@typo3/backend/sortable-table';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Module: @typo3/indexed-search/statistics
|
|
18
|
+
*
|
|
19
|
+
* Functionality for the indexed search statistics module
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* <typo3-indexed-search-statistics>
|
|
23
|
+
* ...
|
|
24
|
+
* </typo3-indexed-search-statistics>
|
|
25
|
+
*
|
|
26
|
+
* This is based on W3C custom elements ("web components") specification, see
|
|
27
|
+
* https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements
|
|
28
|
+
*/
|
|
29
|
+
class IndexedSearchStatistics extends HTMLElement {
|
|
30
|
+
constructor() {
|
|
31
|
+
super();
|
|
32
|
+
const slot: HTMLSlotElement = document.createElement('slot');
|
|
33
|
+
slot.addEventListener('slotchange', () => this.initializeWordList(slot));
|
|
34
|
+
this.attachShadow({ mode: 'open' }).append(slot);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public connectedCallback(): void {
|
|
38
|
+
this.initializeWordList(this.shadowRoot.querySelector('slot'));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private initializeWordList(slot: HTMLSlotElement): void {
|
|
42
|
+
const wordList: HTMLTableElement = (slot.assignedElements()[0].children[0] ?? null) as HTMLTableElement|null;
|
|
43
|
+
if (wordList === null || wordList.tagName.toLowerCase() !== 'table') {
|
|
44
|
+
throw new Error(`Sortable table could not be initialized. Expected <table> child name, but found: ${wordList}`);
|
|
45
|
+
}
|
|
46
|
+
new SortableTable(wordList);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
window.customElements.define('typo3-indexed-search-statistics', IndexedSearchStatistics);
|
|
@@ -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 RegularEvent from '@typo3/core/event/regular-event';
|
|
15
|
+
import Icons from '@typo3/backend/icons';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Module: @typo3/info/translation-status
|
|
19
|
+
*/
|
|
20
|
+
class TranslationStatus {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.registerEvents();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private registerEvents(): void {
|
|
26
|
+
new RegularEvent('click', this.toggleNewButton).delegateTo(document, 'input[type="checkbox"][data-lang]');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private async toggleNewButton(this: HTMLInputElement): Promise<void> {
|
|
30
|
+
const relatedCreationButton = document.querySelector(`.t3js-language-new[data-lang="${this.dataset.lang}"]`) as HTMLAnchorElement;
|
|
31
|
+
const relatedCreationButtonIcon = relatedCreationButton.querySelector('.t3js-icon') as HTMLSpanElement;
|
|
32
|
+
const selectedButtons = document.querySelectorAll(`input[type="checkbox"][data-lang="${this.dataset.lang}"]:checked`);
|
|
33
|
+
const actionUrl = new URL(location.origin + relatedCreationButton.dataset.editUrl);
|
|
34
|
+
selectedButtons.forEach((element: HTMLInputElement): void => {
|
|
35
|
+
actionUrl.searchParams.set(`cmd[pages][${element.dataset.uid}][localize]`, this.dataset.lang);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const disableCreationButton = selectedButtons.length === 0;
|
|
39
|
+
|
|
40
|
+
relatedCreationButton.href = actionUrl.toString();
|
|
41
|
+
relatedCreationButton.classList.toggle('disabled', disableCreationButton);
|
|
42
|
+
|
|
43
|
+
const newIcon = await Icons.getIcon(relatedCreationButtonIcon.dataset.identifier, Icons.sizes.small, null, disableCreationButton ? Icons.states.disabled : Icons.states.default);
|
|
44
|
+
relatedCreationButtonIcon.replaceWith(document.createRange().createContextualFragment(newIcon));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default new TranslationStatus();
|
|
@@ -0,0 +1,83 @@
|
|
|
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 type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
16
|
+
|
|
17
|
+
interface Payload {
|
|
18
|
+
url: string;
|
|
19
|
+
method?: string;
|
|
20
|
+
data?: { [key: string]: any},
|
|
21
|
+
onfulfilled: (value: AjaxResponse) => Promise<void>;
|
|
22
|
+
onrejected: (reason: string) => void;
|
|
23
|
+
finally?: () => void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Module: @typo3/install/module/ajax-queue
|
|
28
|
+
*/
|
|
29
|
+
class AjaxQueue {
|
|
30
|
+
private requests: Array<AjaxRequest> = [];
|
|
31
|
+
private requestCount: number = 0;
|
|
32
|
+
private readonly threshold: number = 5;
|
|
33
|
+
private queue: Array<Payload> = [];
|
|
34
|
+
|
|
35
|
+
public add(payload: Payload): void {
|
|
36
|
+
this.queue.push(payload);
|
|
37
|
+
this.handleNext();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public flush(): void {
|
|
41
|
+
this.queue = [];
|
|
42
|
+
this.requests.forEach((request: AjaxRequest) => request.abort());
|
|
43
|
+
this.requests = [];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private handleNext(): void {
|
|
47
|
+
if (this.queue.length > 0 && this.requestCount < this.threshold) {
|
|
48
|
+
this.incrementRequestCount();
|
|
49
|
+
this.sendRequest(this.queue.shift()).finally((): void => {
|
|
50
|
+
this.decrementRequestCount();
|
|
51
|
+
this.handleNext();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private async sendRequest(payload: Payload): Promise<void> {
|
|
57
|
+
const request = new AjaxRequest(payload.url);
|
|
58
|
+
let response: Promise<AjaxResponse>;
|
|
59
|
+
if (typeof payload.method !== 'undefined' && payload.method.toUpperCase() === 'POST') {
|
|
60
|
+
response = request.post(payload.data);
|
|
61
|
+
} else {
|
|
62
|
+
response = request.withQueryArguments(payload.data || {}).get();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
this.requests.push(request);
|
|
66
|
+
return response.then(payload.onfulfilled, payload.onrejected).then((): void => {
|
|
67
|
+
const idx = this.requests.indexOf(request);
|
|
68
|
+
this.requests.splice(idx, 1);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private incrementRequestCount(): void {
|
|
73
|
+
this.requestCount++;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private decrementRequestCount(): void {
|
|
77
|
+
if (this.requestCount > 0) {
|
|
78
|
+
this.requestCount--;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export default new AjaxQueue();
|