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,204 @@
|
|
|
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
|
+
export type UC = { [key: string]: string | number | boolean | null | UC };
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Module: @typo3/backend/storage/persistent
|
|
21
|
+
* Wrapper for persistent storage in UC
|
|
22
|
+
* @exports @typo3/backend/storage/persistent
|
|
23
|
+
*/
|
|
24
|
+
class Persistent {
|
|
25
|
+
private data: UC|null = null;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Persistent storage, stores everything on the server via AJAX, does a greedy load on read
|
|
29
|
+
* common functions get/set/clear
|
|
30
|
+
*
|
|
31
|
+
* @param {String} key
|
|
32
|
+
* @returns {any}
|
|
33
|
+
*/
|
|
34
|
+
public get(key: string): any {
|
|
35
|
+
if (this.data === null) {
|
|
36
|
+
this.data = this.loadFromServer();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return this.getRecursiveDataByDeepKey(this.data, key.split('.'));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Store data persistent on server
|
|
44
|
+
*
|
|
45
|
+
* @param {String} key
|
|
46
|
+
* @param {String} value
|
|
47
|
+
* @returns {Promise<UC>}
|
|
48
|
+
*/
|
|
49
|
+
public set(key: string, value: string|UC): Promise<UC> {
|
|
50
|
+
if (this.data !== null) {
|
|
51
|
+
this.data = this.setRecursiveDataByDeepKey(this.data, key.split('.'), value);
|
|
52
|
+
}
|
|
53
|
+
return this.storeOnServer(key, value);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @param {string} key
|
|
58
|
+
* @param {string} value
|
|
59
|
+
* @returns {Promise<UC>}
|
|
60
|
+
*/
|
|
61
|
+
public async addToList(key: string, value: string): Promise<UC> {
|
|
62
|
+
const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
|
|
63
|
+
action: 'addToList',
|
|
64
|
+
key,
|
|
65
|
+
value,
|
|
66
|
+
});
|
|
67
|
+
return this.resolveResponse(response);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @param {string} key
|
|
72
|
+
* @param {string} value
|
|
73
|
+
* @returns {Promise<UC>}
|
|
74
|
+
*/
|
|
75
|
+
public async removeFromList(key: string, value: string): Promise<UC> {
|
|
76
|
+
const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
|
|
77
|
+
action: 'removeFromList',
|
|
78
|
+
key,
|
|
79
|
+
value,
|
|
80
|
+
});
|
|
81
|
+
return this.resolveResponse(response);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public async unset(key: string): Promise<UC> {
|
|
85
|
+
const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
|
|
86
|
+
action: 'unset',
|
|
87
|
+
key,
|
|
88
|
+
});
|
|
89
|
+
return this.resolveResponse(response);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Clears the UC
|
|
94
|
+
*/
|
|
95
|
+
public clear(): void {
|
|
96
|
+
new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
|
|
97
|
+
action: 'clear',
|
|
98
|
+
});
|
|
99
|
+
this.data = null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Checks if a key was set before, useful to not do all the undefined checks all the time
|
|
104
|
+
*
|
|
105
|
+
* @param {string} key
|
|
106
|
+
* @returns {boolean}
|
|
107
|
+
*/
|
|
108
|
+
public isset(key: string): boolean {
|
|
109
|
+
const value = this.get(key);
|
|
110
|
+
return (typeof value !== 'undefined' && value !== null);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Loads the data from outside, only used for the initial call from BackendController
|
|
115
|
+
*
|
|
116
|
+
* @param {UC} data
|
|
117
|
+
*/
|
|
118
|
+
public load(data: UC): void {
|
|
119
|
+
this.data = data;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Loads all data from the server
|
|
124
|
+
*/
|
|
125
|
+
private loadFromServer(): UC {
|
|
126
|
+
const url = new URL(location.origin + TYPO3.settings.ajaxUrls.usersettings_process);
|
|
127
|
+
url.searchParams.set('action', 'getAll');
|
|
128
|
+
|
|
129
|
+
const request = new XMLHttpRequest();
|
|
130
|
+
const async = false;
|
|
131
|
+
request.open('GET', url.toString(), async);
|
|
132
|
+
request.send();
|
|
133
|
+
|
|
134
|
+
if (request.status === 200) {
|
|
135
|
+
return JSON.parse(request.responseText);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
throw `Unexpected response code ${request.status}, reason: ${request.responseText}`;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Stores data on the server, and gets the updated data on return
|
|
143
|
+
* to always be up-to-date inside the browser
|
|
144
|
+
*
|
|
145
|
+
* @param {string} key
|
|
146
|
+
* @param {string|object} value
|
|
147
|
+
* @returns {Promise<UC>}
|
|
148
|
+
*/
|
|
149
|
+
private async storeOnServer(key: string, value: string|object): Promise<UC> {
|
|
150
|
+
const response = await new AjaxRequest(TYPO3.settings.ajaxUrls.usersettings_process).post({
|
|
151
|
+
action: 'set',
|
|
152
|
+
key,
|
|
153
|
+
value,
|
|
154
|
+
});
|
|
155
|
+
return this.resolveResponse(response);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Helper function used to set a value which could have been a flat object key data["my.foo.bar"] to
|
|
160
|
+
* data[my][foo][bar] is called recursively by itself
|
|
161
|
+
*
|
|
162
|
+
* @param {object} data the data to be used as base
|
|
163
|
+
* @param {string[]} keyParts the keyParts for the subtree
|
|
164
|
+
* @returns {UC}
|
|
165
|
+
*/
|
|
166
|
+
private getRecursiveDataByDeepKey(data: any, keyParts: string[]): any {
|
|
167
|
+
if (keyParts.length === 1) {
|
|
168
|
+
return (data || {})[keyParts[0]];
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const firstKey = keyParts.shift();
|
|
172
|
+
return this.getRecursiveDataByDeepKey(data[firstKey] || {}, keyParts);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* helper function used to set a value which could have been a flat object key data["my.foo.bar"] to
|
|
177
|
+
* data[my][foo][bar]
|
|
178
|
+
* is called recursively by itself
|
|
179
|
+
*
|
|
180
|
+
* @param {UC} data
|
|
181
|
+
* @param {string[]} keyParts
|
|
182
|
+
* @param {UC} value
|
|
183
|
+
* @returns {UC}
|
|
184
|
+
*/
|
|
185
|
+
private setRecursiveDataByDeepKey(data: UC, keyParts: string[], value: string | UC): UC {
|
|
186
|
+
if (keyParts.length === 1) {
|
|
187
|
+
data = data || {};
|
|
188
|
+
data[keyParts[0]] = value;
|
|
189
|
+
} else {
|
|
190
|
+
const firstKey = keyParts.shift();
|
|
191
|
+
data[firstKey] = this.setRecursiveDataByDeepKey((data[firstKey] as UC) || {}, keyParts, value);
|
|
192
|
+
}
|
|
193
|
+
return data;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private async resolveResponse(response: AjaxResponse): Promise<UC> {
|
|
197
|
+
const resolvedResponse = await response.resolve();
|
|
198
|
+
this.data = resolvedResponse;
|
|
199
|
+
|
|
200
|
+
return resolvedResponse;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export default new Persistent();
|
|
@@ -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
|
+
|
|
14
|
+
import { PseudoButtonLitElement } from '@typo3/backend/element/pseudo-button';
|
|
15
|
+
import { customElement, property } from 'lit/decorators';
|
|
16
|
+
import AjaxRequest from '@typo3/core/ajax/ajax-request';
|
|
17
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
18
|
+
import Notification from '@typo3/backend/notification';
|
|
19
|
+
|
|
20
|
+
enum Modes {
|
|
21
|
+
switch = 'switch',
|
|
22
|
+
exit = 'exit',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Module: @typo3/backend/switch-user
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* <typo3-backend-switch-user class="some" targetuser="123" mode="switch">
|
|
30
|
+
* Switch user
|
|
31
|
+
* </typo3-backend-switch-user>
|
|
32
|
+
*/
|
|
33
|
+
@customElement('typo3-backend-switch-user')
|
|
34
|
+
export class SwitchUser extends PseudoButtonLitElement {
|
|
35
|
+
|
|
36
|
+
@property({ type: String }) targetUser: string;
|
|
37
|
+
@property({ type: Modes }) mode: Modes = Modes.switch;
|
|
38
|
+
|
|
39
|
+
protected override buttonActivated(): void {
|
|
40
|
+
if (this.mode === Modes.switch) {
|
|
41
|
+
this.handleSwitchUser();
|
|
42
|
+
} else if (this.mode === Modes.exit) {
|
|
43
|
+
this.handleExitSwitchUser();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private handleSwitchUser(): void {
|
|
48
|
+
if (!this.targetUser) {
|
|
49
|
+
// Invalid request without target user
|
|
50
|
+
Notification.error('Switching to user went wrong.');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
(new AjaxRequest(TYPO3.settings.ajaxUrls.switch_user)).post({
|
|
55
|
+
targetUser: this.targetUser,
|
|
56
|
+
}).then(async (response: AjaxResponse): Promise<void> => {
|
|
57
|
+
const data = await response.resolve();
|
|
58
|
+
if (data.success === true && data.url) {
|
|
59
|
+
top.window.location.href = data.url;
|
|
60
|
+
} else {
|
|
61
|
+
Notification.error('Switching to user went wrong.');
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private handleExitSwitchUser(): void {
|
|
67
|
+
(new AjaxRequest(TYPO3.settings.ajaxUrls.switch_user_exit)).post({}).then(async (response: AjaxResponse): Promise<void> => {
|
|
68
|
+
const data = await response.resolve();
|
|
69
|
+
if (data.success === true && data.url) {
|
|
70
|
+
top.window.location.href = data.url;
|
|
71
|
+
} else {
|
|
72
|
+
Notification.error('Exiting current user went wrong.');
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
declare global {
|
|
79
|
+
interface HTMLElementTagNameMap {
|
|
80
|
+
'typo3-backend-switch-user': SwitchUser;
|
|
81
|
+
}
|
|
82
|
+
}
|
package/backend/tabs.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
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 { Tab } from 'bootstrap';
|
|
15
|
+
import BrowserSession from './storage/browser-session';
|
|
16
|
+
import Client from './storage/client';
|
|
17
|
+
import DocumentService from '@typo3/core/document-service';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Module: @typo3/backend/tabs
|
|
21
|
+
* @exports @typo3/backend/tabs
|
|
22
|
+
*/
|
|
23
|
+
class Tabs {
|
|
24
|
+
constructor() {
|
|
25
|
+
DocumentService.ready().then((): void => {
|
|
26
|
+
const tabContainers = document.querySelectorAll('.t3js-tabs');
|
|
27
|
+
tabContainers.forEach((tabContainer: HTMLElement): void => {
|
|
28
|
+
const currentActiveTab = Tabs.receiveActiveTab(tabContainer.id);
|
|
29
|
+
if (currentActiveTab) {
|
|
30
|
+
const tabButton = document.querySelector('[data-bs-target="#' + currentActiveTab + '"]');
|
|
31
|
+
if (tabButton) {
|
|
32
|
+
new Tab(tabButton).show();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const storeLastActiveTab = tabContainer.dataset.storeLastTab === '1';
|
|
37
|
+
if (storeLastActiveTab) {
|
|
38
|
+
tabContainer.addEventListener('show.bs.tab', (e: Event): void => {
|
|
39
|
+
const id = (e.currentTarget as HTMLElement).id;
|
|
40
|
+
const tabTarget = (e.target as HTMLButtonElement).dataset.bsTarget.slice(1);
|
|
41
|
+
Tabs.storeActiveTab(id, tabTarget);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Remove legacy values from localStorage
|
|
48
|
+
Client.unsetByPrefix('tabs-');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Receive active tab from storage
|
|
53
|
+
*
|
|
54
|
+
* @param {string} id
|
|
55
|
+
* @returns {string}
|
|
56
|
+
*/
|
|
57
|
+
private static receiveActiveTab(id: string): string {
|
|
58
|
+
return BrowserSession.get(id) || '';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Set active tab to storage
|
|
63
|
+
*
|
|
64
|
+
* @param {string} id
|
|
65
|
+
* @param {string} target
|
|
66
|
+
*/
|
|
67
|
+
private static storeActiveTab(id: string, target: string): void {
|
|
68
|
+
BrowserSession.set(id, target);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export default new Tabs();
|
|
@@ -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 LinkBrowser from './link-browser';
|
|
15
|
+
import RegularEvent from '@typo3/core/event/regular-event';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Module: @typo3/backend/telephone-link-handler
|
|
19
|
+
* @exports @typo3/backend/telephone-link-handler
|
|
20
|
+
* Telephone link interaction
|
|
21
|
+
*/
|
|
22
|
+
class TelephoneLinkHandler {
|
|
23
|
+
constructor() {
|
|
24
|
+
new RegularEvent('submit', (evt: MouseEvent, targetEl: HTMLElement): void => {
|
|
25
|
+
evt.preventDefault();
|
|
26
|
+
const inputField = targetEl.querySelector('[name="ltelephone"]') as HTMLInputElement;
|
|
27
|
+
let value = inputField.value;
|
|
28
|
+
if (value === 'tel:') {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (value.startsWith('tel:')) {
|
|
32
|
+
value = value.substr(4);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
LinkBrowser.finalizeFunction('tel:' + value);
|
|
36
|
+
}).delegateTo(document, '#ltelephoneform');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default new TelephoneLinkHandler();
|
|
@@ -0,0 +1,87 @@
|
|
|
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 BrowserSession from '@typo3/backend/storage/browser-session.js';
|
|
15
|
+
import { expect } from '@open-wc/testing';
|
|
16
|
+
import type { } from 'mocha';
|
|
17
|
+
|
|
18
|
+
describe('@typo3/backend/storage/browser-session', () => {
|
|
19
|
+
afterEach((): void => {
|
|
20
|
+
BrowserSession.clear();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('can set and get item', () => {
|
|
24
|
+
const key = 'test-key';
|
|
25
|
+
BrowserSession.set(key, 'foo');
|
|
26
|
+
expect(BrowserSession.get(key)).to.equal('foo');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('can check if item is set', () => {
|
|
30
|
+
const key = 'test-key';
|
|
31
|
+
expect(BrowserSession.isset(key)).to.be.false;
|
|
32
|
+
BrowserSession.set(key, 'foo');
|
|
33
|
+
expect(BrowserSession.isset(key)).to.be.true;
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('can get multiple items by prefix', () => {
|
|
37
|
+
const entries = {
|
|
38
|
+
'test-prefix-foo': 'foo',
|
|
39
|
+
'test-prefix-bar': 'bar',
|
|
40
|
+
'test-prefix-baz': 'baz',
|
|
41
|
+
};
|
|
42
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
43
|
+
BrowserSession.set(key, value);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const items = BrowserSession.getByPrefix('test-prefix-');
|
|
47
|
+
expect(items).to.eql(entries);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('can remove item', () => {
|
|
51
|
+
const key = 'item-to-be-removed';
|
|
52
|
+
BrowserSession.set(key, 'foo');
|
|
53
|
+
expect(BrowserSession.get(key)).not.to.be.null;
|
|
54
|
+
|
|
55
|
+
BrowserSession.unset(key);
|
|
56
|
+
expect(BrowserSession.get(key)).to.be.null;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('can remove multiple items by prefix', () => {
|
|
60
|
+
const entries = {
|
|
61
|
+
'test-prefix-foo': 'foo',
|
|
62
|
+
'test-prefix-bar': 'bar',
|
|
63
|
+
'test-prefix-baz': 'baz',
|
|
64
|
+
};
|
|
65
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
66
|
+
BrowserSession.set(key, value);
|
|
67
|
+
}
|
|
68
|
+
BrowserSession.unsetByPrefix('test-prefix-');
|
|
69
|
+
|
|
70
|
+
const items = BrowserSession.getByPrefix('test-prefix-');
|
|
71
|
+
expect(items).to.be.empty;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('can clear storage', () => {
|
|
75
|
+
const entries = {
|
|
76
|
+
'foo': 'foo',
|
|
77
|
+
'baz': 'bencer',
|
|
78
|
+
'huselpusel': '42',
|
|
79
|
+
};
|
|
80
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
81
|
+
BrowserSession.set(key, value);
|
|
82
|
+
}
|
|
83
|
+
BrowserSession.clear();
|
|
84
|
+
|
|
85
|
+
expect(sessionStorage).to.be.empty;
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -0,0 +1,87 @@
|
|
|
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 Client from '@typo3/backend/storage/client.js';
|
|
15
|
+
import { expect } from '@open-wc/testing';
|
|
16
|
+
import type { } from 'mocha';
|
|
17
|
+
|
|
18
|
+
describe('@typo3/backend/storage/client', () => {
|
|
19
|
+
afterEach((): void => {
|
|
20
|
+
Client.clear();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('can set and get item', () => {
|
|
24
|
+
const key = 'test-key';
|
|
25
|
+
Client.set(key, 'foo');
|
|
26
|
+
expect(Client.get(key)).to.equal('foo');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('can check if item is set', () => {
|
|
30
|
+
const key = 'test-key';
|
|
31
|
+
expect(Client.isset(key)).to.be.false;
|
|
32
|
+
Client.set(key, 'foo');
|
|
33
|
+
expect(Client.isset(key)).to.be.true;
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('can get multiple items by prefix', () => {
|
|
37
|
+
const entries = {
|
|
38
|
+
'test-prefix-foo': 'foo',
|
|
39
|
+
'test-prefix-bar': 'bar',
|
|
40
|
+
'test-prefix-baz': 'baz',
|
|
41
|
+
};
|
|
42
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
43
|
+
Client.set(key, value);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const items = Client.getByPrefix('test-prefix-');
|
|
47
|
+
expect(items).to.eql(entries);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('can remove item', () => {
|
|
51
|
+
const key = 'item-to-be-removed';
|
|
52
|
+
Client.set(key, 'foo');
|
|
53
|
+
expect(Client.get(key)).not.to.be.null;
|
|
54
|
+
|
|
55
|
+
Client.unset(key);
|
|
56
|
+
expect(Client.get(key)).to.be.null;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('can remove multiple items by prefix', () => {
|
|
60
|
+
const entries = {
|
|
61
|
+
'test-prefix-foo': 'foo',
|
|
62
|
+
'test-prefix-bar': 'bar',
|
|
63
|
+
'test-prefix-baz': 'baz',
|
|
64
|
+
};
|
|
65
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
66
|
+
Client.set(key, value);
|
|
67
|
+
}
|
|
68
|
+
Client.unsetByPrefix('test-prefix-');
|
|
69
|
+
|
|
70
|
+
const items = Client.getByPrefix('test-prefix-');
|
|
71
|
+
expect(items).to.be.empty;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('can clear storage', () => {
|
|
75
|
+
const entries = {
|
|
76
|
+
'foo': 'foo',
|
|
77
|
+
'baz': 'bencer',
|
|
78
|
+
'huselpusel': '42',
|
|
79
|
+
};
|
|
80
|
+
for (const [key, value] of Object.entries(entries)) {
|
|
81
|
+
Client.set(key, value);
|
|
82
|
+
}
|
|
83
|
+
Client.clear();
|
|
84
|
+
|
|
85
|
+
expect(localStorage).to.be.empty;
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import DomHelper from '@typo3/backend/utility/dom-helper.js';
|
|
15
|
+
import { expect } from '@open-wc/testing';
|
|
16
|
+
|
|
17
|
+
describe('@typo3/backend/utility/dom-helper', () => {
|
|
18
|
+
it('parents() returns all parents matching the selector', () => {
|
|
19
|
+
const markup =
|
|
20
|
+
`<div class="dummy-matching-element">
|
|
21
|
+
<ul>
|
|
22
|
+
<li>
|
|
23
|
+
<p class="dummy-matching-element">
|
|
24
|
+
<span class="dummy-matching-element">
|
|
25
|
+
<span id="enter-here"></span>
|
|
26
|
+
</span>
|
|
27
|
+
</p>
|
|
28
|
+
</li>
|
|
29
|
+
</ul>
|
|
30
|
+
</div>`;
|
|
31
|
+
const wrapperElement = document.createElement('div');
|
|
32
|
+
wrapperElement.append(document.createRange().createContextualFragment(markup));
|
|
33
|
+
|
|
34
|
+
const parents = DomHelper.parents(wrapperElement.querySelector('#enter-here'), '.dummy-matching-element');
|
|
35
|
+
expect(parents).to.length(3);
|
|
36
|
+
expect(parents.map((el: HTMLElement) => el.tagName)).to.have.ordered.members(['SPAN', 'P', 'DIV']);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('nextAll() returns a proper list of all next elements', () => {
|
|
40
|
+
const wrapperElement = document.createElement('div');
|
|
41
|
+
const pElement = document.createElement('p');
|
|
42
|
+
const strongElement = document.createElement('strong');
|
|
43
|
+
const ulElement = document.createElement('ul');
|
|
44
|
+
ulElement.append(document.createElement('li'));
|
|
45
|
+
wrapperElement.append(pElement, strongElement, ulElement);
|
|
46
|
+
|
|
47
|
+
const nextAll = DomHelper.nextAll(pElement);
|
|
48
|
+
expect(nextAll).to.length(2);
|
|
49
|
+
expect(nextAll).to.have.ordered.members([strongElement, ulElement]);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
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 { BackendException } from '@typo3/backend/backend-exception.js';
|
|
15
|
+
import { expect } from '@open-wc/testing';
|
|
16
|
+
import type { } from 'mocha';
|
|
17
|
+
|
|
18
|
+
describe('@typo3/backend/backend-exception', () => {
|
|
19
|
+
it('sets exception message', () => {
|
|
20
|
+
const backendException: BackendException = new BackendException('some message');
|
|
21
|
+
expect(backendException.message).to.equal('some message');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('sets exception code', () => {
|
|
25
|
+
const backendException: BackendException = new BackendException('', 12345);
|
|
26
|
+
expect(backendException.code).to.equal(12345);
|
|
27
|
+
});
|
|
28
|
+
});
|