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,113 @@
|
|
|
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
|
+
class Clearable {
|
|
15
|
+
constructor() {
|
|
16
|
+
if (typeof HTMLInputElement.prototype.clearable === 'function') {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
this.registerClearable();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private static createCloseButton(clearButtonTitle: string): HTMLButtonElement {
|
|
24
|
+
// The inlined markup represents the current generated markup from the
|
|
25
|
+
// icon api for the icon actions-close that can be found in the official
|
|
26
|
+
// icon repository and is registered in the backend icon api.
|
|
27
|
+
//
|
|
28
|
+
// It´s not possible to use/open the backend icon api without opening
|
|
29
|
+
// new possible vectors for attackers to sniff system information.
|
|
30
|
+
//
|
|
31
|
+
// When the icon definition of actions-close changes also the inline
|
|
32
|
+
// icon should be updated.
|
|
33
|
+
//
|
|
34
|
+
// https://github.com/typo3/typo3.icons
|
|
35
|
+
const closeIcon = `
|
|
36
|
+
<span class="t3js-icon icon icon-size-small icon-state-default icon-actions-close" data-identifier="actions-close">
|
|
37
|
+
<span class="icon-markup">
|
|
38
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
|
39
|
+
<g fill="currentColor">
|
|
40
|
+
<path d="M11.9 5.5 9.4 8l2.5 2.5c.2.2.2.5 0 .7l-.7.7c-.2.2-.5.2-.7 0L8 9.4l-2.5 2.5c-.2.2-.5.2-.7 0l-.7-.7c-.2-.2-.2-.5 0-.7L6.6 8 4.1 5.5c-.2-.2-.2-.5 0-.7l.7-.7c.2-.2.5-.2.7 0L8 6.6l2.5-2.5c.2-.2.5-.2.7 0l.7.7c.2.2.2.5 0 .7z"/>
|
|
41
|
+
</g>
|
|
42
|
+
</svg>
|
|
43
|
+
</span>
|
|
44
|
+
</span>
|
|
45
|
+
`;
|
|
46
|
+
|
|
47
|
+
const closeButton = document.createElement('button');
|
|
48
|
+
closeButton.type = 'button';
|
|
49
|
+
closeButton.tabIndex = -1;
|
|
50
|
+
closeButton.title = clearButtonTitle;
|
|
51
|
+
closeButton.ariaLabel = clearButtonTitle;
|
|
52
|
+
closeButton.innerHTML = closeIcon;
|
|
53
|
+
closeButton.style.visibility = 'hidden';
|
|
54
|
+
closeButton.classList.add('close');
|
|
55
|
+
|
|
56
|
+
return closeButton;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private registerClearable(): void {
|
|
60
|
+
HTMLInputElement.prototype.clearable = function(options: Options = {}): void {
|
|
61
|
+
if (this.dataset.clearable) {
|
|
62
|
+
// input field is already clearable, nothing to do here
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (typeof options !== 'object') {
|
|
67
|
+
throw new Error('Passed options must be an object, ' + typeof options + ' given');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.classList.add('form-control-clearable');
|
|
71
|
+
|
|
72
|
+
const wrap = document.createElement('div');
|
|
73
|
+
wrap.classList.add('form-control-clearable-wrapper');
|
|
74
|
+
this.parentNode.insertBefore(wrap, this);
|
|
75
|
+
wrap.appendChild(this);
|
|
76
|
+
|
|
77
|
+
let clearButtonTitle = 'Clear input';
|
|
78
|
+
if (this.dataset.clearableLabel) {
|
|
79
|
+
clearButtonTitle = this.dataset.clearableLabel;
|
|
80
|
+
} else if ('lang' in top.TYPO3 && top.TYPO3.lang['labels.inputfield.clearButton.title']) {
|
|
81
|
+
clearButtonTitle = top.TYPO3.lang['labels.inputfield.clearButton.title'];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const clearButton = Clearable.createCloseButton(clearButtonTitle);
|
|
85
|
+
|
|
86
|
+
const toggleClearButtonVisibility = (): void => {
|
|
87
|
+
clearButton.style.visibility = this.value.length === 0 ? 'hidden' : 'visible';
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
clearButton.addEventListener('click', (e: Event): void => {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
|
|
93
|
+
this.value = '';
|
|
94
|
+
|
|
95
|
+
if (typeof options.onClear === 'function') {
|
|
96
|
+
options.onClear(this);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));
|
|
100
|
+
toggleClearButtonVisibility();
|
|
101
|
+
});
|
|
102
|
+
wrap.appendChild(clearButton);
|
|
103
|
+
|
|
104
|
+
this.addEventListener('focus', toggleClearButtonVisibility);
|
|
105
|
+
this.addEventListener('keyup', toggleClearButtonVisibility);
|
|
106
|
+
|
|
107
|
+
toggleClearButtonVisibility();
|
|
108
|
+
this.dataset.clearable = 'true';
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export default new Clearable();
|
|
@@ -0,0 +1,64 @@
|
|
|
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 Severity from './severity';
|
|
15
|
+
import { customElement, property } from 'lit/decorators';
|
|
16
|
+
import { html, LitElement, nothing, type TemplateResult } from 'lit';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Module: @typo3/install/module/flash-message
|
|
20
|
+
*/
|
|
21
|
+
@customElement('typo3-install-flashmessage')
|
|
22
|
+
export class FlashMessage extends LitElement {
|
|
23
|
+
@property({ type: Number }) severity: number;
|
|
24
|
+
@property({ type: String }) subject: string;
|
|
25
|
+
@property({ type: String }) content: string;
|
|
26
|
+
|
|
27
|
+
public static create(severity: number, subject: string, content: string = ''): FlashMessage {
|
|
28
|
+
const isInIframe = window.location !== window.parent.location;
|
|
29
|
+
const doc = isInIframe ? window.parent.document : document;
|
|
30
|
+
const message = doc.createElement('typo3-install-flashmessage');
|
|
31
|
+
message.severity = severity;
|
|
32
|
+
message.subject = subject;
|
|
33
|
+
|
|
34
|
+
if (content) {
|
|
35
|
+
message.content = content;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return message;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
42
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
protected override render(): TemplateResult {
|
|
47
|
+
let content: TemplateResult | symbol = nothing;
|
|
48
|
+
if (this.content) {
|
|
49
|
+
content = html`<p class="alert-message">${this.content}</p>`;
|
|
50
|
+
}
|
|
51
|
+
return html`
|
|
52
|
+
<div class="t3js-message alert alert-${Severity.getCssClass(this.severity)}">
|
|
53
|
+
<div class="alert-title">${this.subject}</div>
|
|
54
|
+
${content}
|
|
55
|
+
</div>
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
declare global {
|
|
61
|
+
interface HTMLElementTagNameMap {
|
|
62
|
+
'typo3-install-flashmessage': FlashMessage;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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 Severity from './severity';
|
|
15
|
+
import { customElement, property } from 'lit/decorators';
|
|
16
|
+
import { html, LitElement, nothing, type TemplateResult } from 'lit';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Module: @typo3/install/module/info-box
|
|
20
|
+
*/
|
|
21
|
+
@customElement('typo3-install-infobox')
|
|
22
|
+
export class InfoBox extends LitElement {
|
|
23
|
+
@property({ type: Number }) severity: number;
|
|
24
|
+
@property({ type: String }) subject: string;
|
|
25
|
+
@property({ type: String }) content: string;
|
|
26
|
+
|
|
27
|
+
public static create(severity: number, subject: string, content: string = ''): InfoBox {
|
|
28
|
+
const isInIframe = window.location !== window.parent.location;
|
|
29
|
+
const doc = isInIframe ? window.parent.document : document;
|
|
30
|
+
const infobox = doc.createElement('typo3-install-infobox');
|
|
31
|
+
infobox.severity = severity;
|
|
32
|
+
infobox.subject = subject;
|
|
33
|
+
|
|
34
|
+
if (content) {
|
|
35
|
+
infobox.content = content;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return infobox;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
42
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
protected override render(): TemplateResult {
|
|
47
|
+
let content: TemplateResult | symbol = nothing;
|
|
48
|
+
if (this.content) {
|
|
49
|
+
content = html`<div class="callout-body">${this.content}</div>`;
|
|
50
|
+
}
|
|
51
|
+
return html`
|
|
52
|
+
<div class="t3js-infobox callout callout-sm callout-${Severity.getCssClass(this.severity)}">
|
|
53
|
+
<div class="callout-content">
|
|
54
|
+
<div class="callout-title">${this.subject}</div>
|
|
55
|
+
${content}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
declare global {
|
|
63
|
+
interface HTMLElementTagNameMap {
|
|
64
|
+
'typo3-install-infobox': InfoBox;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { customElement, property, state } from 'lit/decorators';
|
|
15
|
+
import { LitElement, type TemplateResult, html, nothing } from 'lit';
|
|
16
|
+
import { classMap } from 'lit/directives/class-map';
|
|
17
|
+
|
|
18
|
+
type Language = {
|
|
19
|
+
iso: string,
|
|
20
|
+
name: string,
|
|
21
|
+
active: boolean,
|
|
22
|
+
lastUpdate: string,
|
|
23
|
+
dependencies: string[]
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type ExtensionPack = {
|
|
27
|
+
iso: string,
|
|
28
|
+
exists: boolean,
|
|
29
|
+
lastUpdate: string
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
type Extension = {
|
|
33
|
+
key: string,
|
|
34
|
+
title: string,
|
|
35
|
+
type: string,
|
|
36
|
+
icon: string,
|
|
37
|
+
packs: ExtensionPack[]
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export type LanguagePacksGetDataResponse = {
|
|
41
|
+
languages: Language[],
|
|
42
|
+
extensions: Extension[],
|
|
43
|
+
activeLanguages: string[],
|
|
44
|
+
activeExtensions: string[],
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export type ActivateLanguageEvent = {
|
|
48
|
+
iso: string,
|
|
49
|
+
};
|
|
50
|
+
export type DeactivateLanguageEvent = {
|
|
51
|
+
iso: string,
|
|
52
|
+
};
|
|
53
|
+
export type DownloadPacksEvent = {
|
|
54
|
+
iso?: string,
|
|
55
|
+
extension?: string
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
@customElement('typo3-install-language-matrix')
|
|
59
|
+
export class LanguageMatrixElement extends LitElement {
|
|
60
|
+
@property({ type: Boolean }) configurationIsWritable: boolean = false;
|
|
61
|
+
@property({ type: Object }) data: LanguagePacksGetDataResponse | null = null;
|
|
62
|
+
|
|
63
|
+
@state()
|
|
64
|
+
private addLanguagesActive: boolean = false;
|
|
65
|
+
|
|
66
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
67
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
protected override render(): TemplateResult {
|
|
72
|
+
return html`
|
|
73
|
+
<div>
|
|
74
|
+
<h2>Active languages</h2>
|
|
75
|
+
<div class="table-fit">
|
|
76
|
+
<table class="table table-striped">
|
|
77
|
+
<thead>
|
|
78
|
+
<tr>
|
|
79
|
+
<th>
|
|
80
|
+
<div class="btn-group">
|
|
81
|
+
${this.globalActions()}
|
|
82
|
+
</div>
|
|
83
|
+
</th>
|
|
84
|
+
<th>Locale</th>
|
|
85
|
+
<th>Dependencies</th>
|
|
86
|
+
<th>Last update</th>
|
|
87
|
+
</tr>
|
|
88
|
+
</thead>
|
|
89
|
+
<tbody>
|
|
90
|
+
${this.renderLanguages()}
|
|
91
|
+
</tbody>
|
|
92
|
+
</table>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private globalActions(): TemplateResult {
|
|
99
|
+
const updateButtonClasses = {
|
|
100
|
+
'btn': true,
|
|
101
|
+
'btn-default': true,
|
|
102
|
+
'update-all': true,
|
|
103
|
+
'disabled': !this.hasActiveLanguages()
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
return html`
|
|
107
|
+
${this.configurationIsWritable ? html`
|
|
108
|
+
<button class="btn btn-default t3js-languagePacks-addLanguage-toggle"
|
|
109
|
+
@click=${() => this.addLanguagesActive = !this.addLanguagesActive}>
|
|
110
|
+
<typo3-backend-icon identifier=${this.addLanguagesActive ? 'actions-minus' : 'actions-plus'} size="small"></typo3-backend-icon>
|
|
111
|
+
Add language
|
|
112
|
+
</button>
|
|
113
|
+
` : nothing}
|
|
114
|
+
<button class=${classMap(updateButtonClasses)} ?disabled=${!this.hasActiveLanguages()}
|
|
115
|
+
@click=${() => this.dispatchEvent(new CustomEvent<DownloadPacksEvent>('download-packs'))}>
|
|
116
|
+
<typo3-backend-icon identifier="actions-download" size="small"></typo3-backend-icon>
|
|
117
|
+
Update all
|
|
118
|
+
</button>
|
|
119
|
+
`;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private renderLanguageActions(language: Language): TemplateResult[] {
|
|
123
|
+
const actions: TemplateResult[] = [];
|
|
124
|
+
const { iso } = language;
|
|
125
|
+
const eventData = { detail: { iso } };
|
|
126
|
+
|
|
127
|
+
if (language.active) {
|
|
128
|
+
if (this.configurationIsWritable) {
|
|
129
|
+
actions.push(html`
|
|
130
|
+
<button class="btn btn-default" title="Deactivate"
|
|
131
|
+
@click=${() => this.dispatchEvent(new CustomEvent<DeactivateLanguageEvent>('deactivate-language', eventData))}>
|
|
132
|
+
<typo3-backend-icon identifier="actions-minus" size="small"></typo3-backend-icon>
|
|
133
|
+
</button>
|
|
134
|
+
`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
actions.push(html`
|
|
138
|
+
<button class="btn btn-default" title="Download language packs"
|
|
139
|
+
@click=${() => this.dispatchEvent(new CustomEvent<DownloadPacksEvent>('download-packs', eventData))}>
|
|
140
|
+
<typo3-backend-icon identifier="actions-download" size="small"></typo3-backend-icon>
|
|
141
|
+
</button>
|
|
142
|
+
`);
|
|
143
|
+
} else {
|
|
144
|
+
if (this.configurationIsWritable) {
|
|
145
|
+
actions.push(html`
|
|
146
|
+
<button class="btn btn-default" title="Activate"
|
|
147
|
+
@click=${() => this.dispatchEvent(new CustomEvent<ActivateLanguageEvent>('activate-language', eventData))}>
|
|
148
|
+
<typo3-backend-icon identifier="actions-plus" size="small"></typo3-backend-icon>
|
|
149
|
+
</button>
|
|
150
|
+
`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return actions;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private renderLanguages(): TemplateResult[] {
|
|
158
|
+
return this.data.languages
|
|
159
|
+
.filter(language => this.addLanguagesActive ? !language.active : language.active)
|
|
160
|
+
.map(language => html`
|
|
161
|
+
<tr class=${classMap({ 't3-languagePacks-inactive': !language.active })}>
|
|
162
|
+
<td>
|
|
163
|
+
<div class="btn-group">
|
|
164
|
+
${this.renderLanguageActions(language)}
|
|
165
|
+
</div>
|
|
166
|
+
${language.name}
|
|
167
|
+
</td>
|
|
168
|
+
<td>${language.iso}</td>
|
|
169
|
+
<td>${language.dependencies.join(', ')}</td>
|
|
170
|
+
<td>${language.lastUpdate === null ? '' : language.lastUpdate}</td>
|
|
171
|
+
</tr>
|
|
172
|
+
`);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
private hasActiveLanguages() {
|
|
176
|
+
return Array.isArray(this.data.activeLanguages) && this.data.activeLanguages.length;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@customElement('typo3-install-extension-matrix')
|
|
181
|
+
export class ExtensionMatrixElement extends LitElement {
|
|
182
|
+
@property({ type: Object }) data: LanguagePacksGetDataResponse | null = null;
|
|
183
|
+
|
|
184
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
185
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
protected override render(): TemplateResult {
|
|
190
|
+
if (this.data.extensions.length === 0) {
|
|
191
|
+
return html`
|
|
192
|
+
<typo3-install-infobox
|
|
193
|
+
severity="0"
|
|
194
|
+
subject="Language packs have been found for every installed extension."
|
|
195
|
+
content="To download the latest changes, use the refresh button in the list above.">
|
|
196
|
+
</typo3-install-infobox>
|
|
197
|
+
`;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return html`
|
|
201
|
+
<div>
|
|
202
|
+
<h2>Translation status</h2>
|
|
203
|
+
<div class="table-fit">
|
|
204
|
+
<table class="table table-striped">
|
|
205
|
+
<thead>
|
|
206
|
+
<tr>
|
|
207
|
+
<th>Extension</th>
|
|
208
|
+
<th>Key</th>
|
|
209
|
+
${this.headerActions()}
|
|
210
|
+
</thead>
|
|
211
|
+
<tbody>
|
|
212
|
+
${this.renderExtensions()}
|
|
213
|
+
</tbody>
|
|
214
|
+
</table>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
`;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
private headerActions(): TemplateResult[] {
|
|
221
|
+
return this.data.activeLanguages.map(activeLanguage => html`
|
|
222
|
+
<th>
|
|
223
|
+
<button class="btn btn-default" title="Download and update all language packs"
|
|
224
|
+
@click=${() => this.dispatchEvent(new CustomEvent<DownloadPacksEvent>('download-packs', { detail: { iso: activeLanguage } }))}>
|
|
225
|
+
<typo3-backend-icon identifier="actions-download" size="small"></typo3-backend-icon>
|
|
226
|
+
${activeLanguage}
|
|
227
|
+
</button>
|
|
228
|
+
</th>
|
|
229
|
+
`);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
private renderExtensions(): TemplateResult[] {
|
|
233
|
+
return this.data.extensions.map(extension => html`
|
|
234
|
+
<tr>
|
|
235
|
+
<td>
|
|
236
|
+
${extension.icon ? html`
|
|
237
|
+
<img src="${extension.icon}" alt="${extension.title}" style="max-height: 16px; max-width: 16px;">
|
|
238
|
+
` : nothing}
|
|
239
|
+
${extension.title}
|
|
240
|
+
</td>
|
|
241
|
+
<td>${extension.key}</td>
|
|
242
|
+
${this.renderExtensionActions(extension)}
|
|
243
|
+
</tr>
|
|
244
|
+
`);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
private renderExtensionActions(extension: Extension): TemplateResult[] {
|
|
248
|
+
const cells: TemplateResult[] = [];
|
|
249
|
+
|
|
250
|
+
this.data.activeLanguages.forEach((language: string): void => {
|
|
251
|
+
let cell: TemplateResult | typeof nothing = nothing;
|
|
252
|
+
|
|
253
|
+
extension.packs.forEach((pack: ExtensionPack): void => {
|
|
254
|
+
if (pack.iso !== language) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
let tooltip;
|
|
259
|
+
if (pack.exists !== true) {
|
|
260
|
+
if (pack.lastUpdate !== null) {
|
|
261
|
+
tooltip = 'No language pack available for ' + pack.iso + ' when tried at ' + pack.lastUpdate + '. Click to re-try.';
|
|
262
|
+
} else {
|
|
263
|
+
tooltip = 'Language pack not downloaded. Click to download';
|
|
264
|
+
}
|
|
265
|
+
} else if (pack.lastUpdate === null) {
|
|
266
|
+
tooltip = 'Downloaded. Click to renew';
|
|
267
|
+
} else {
|
|
268
|
+
tooltip = 'Language pack downloaded at ' + pack.lastUpdate + '. Click to renew';
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const eventData = {
|
|
272
|
+
detail: {
|
|
273
|
+
iso: pack.iso,
|
|
274
|
+
extension: extension.key
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
cell = html`
|
|
278
|
+
<td>
|
|
279
|
+
<button class="btn btn-default" title=${tooltip}
|
|
280
|
+
@click=${() => this.dispatchEvent(new CustomEvent<DownloadPacksEvent>('download-packs', eventData))}>
|
|
281
|
+
<typo3-backend-icon identifier="actions-download" size="small"></typo3-backend-icon>
|
|
282
|
+
</button>
|
|
283
|
+
</td>
|
|
284
|
+
`;
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
// Render empty colum to avoid disturbed table build up if pack was not found for language.
|
|
288
|
+
if (cell === nothing) {
|
|
289
|
+
cell = html`<td></td>`;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
cells.push(cell);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
return cells;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
declare global {
|
|
300
|
+
interface HTMLElementTagNameMap {
|
|
301
|
+
'typo3-install-language-matrix': LanguageMatrixElement;
|
|
302
|
+
'typo3-install-extension-matrix': ExtensionMatrixElement;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { LitElement, type TemplateResult, html } from 'lit';
|
|
2
|
+
import { customElement, property } from 'lit/decorators';
|
|
3
|
+
|
|
4
|
+
@customElement('typo3-install-offset-group')
|
|
5
|
+
class OffsetGroupElement extends LitElement {
|
|
6
|
+
@property({ type: String }) offsetId: string | null = null;
|
|
7
|
+
@property({ type: Array }) values: string[] | null = null;
|
|
8
|
+
|
|
9
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
10
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
protected override render(): TemplateResult {
|
|
15
|
+
return html`
|
|
16
|
+
<div class="form-multigroup-wrap">
|
|
17
|
+
<div class="form-multigroup-item">
|
|
18
|
+
<div class="input-group">
|
|
19
|
+
<div class="input-group-text">x</div>
|
|
20
|
+
<input id="${this.offsetId}_offset_x" class="form-control t3js-emconf-offsetfield" data-target="#${this.offsetId}" value="${this.values[0]?.trim()}"/>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="form-multigroup-item">
|
|
24
|
+
<div class="input-group">
|
|
25
|
+
<div class="input-group-text">y</div>
|
|
26
|
+
<input id="${this.offsetId}_offset_y" class="form-control t3js-emconf-offsetfield" data-target="#${this.offsetId}" value="${this.values[1]?.trim()}"/>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
declare global {
|
|
35
|
+
interface HTMLElementTagNameMap {
|
|
36
|
+
'typo3-install-offset-group': OffsetGroupElement;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
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/install/module/severity
|
|
16
|
+
*/
|
|
17
|
+
class Severity {
|
|
18
|
+
public readonly loading: number = -3;
|
|
19
|
+
public readonly notice: number = -2;
|
|
20
|
+
public readonly info: number = -1;
|
|
21
|
+
public readonly ok: number = 0;
|
|
22
|
+
public readonly warning: number = 1;
|
|
23
|
+
public readonly error: number = 2;
|
|
24
|
+
|
|
25
|
+
public getCssClass(severity: number): string {
|
|
26
|
+
let severityClass;
|
|
27
|
+
switch (severity) {
|
|
28
|
+
case this.loading:
|
|
29
|
+
case this.notice:
|
|
30
|
+
severityClass = 'notice';
|
|
31
|
+
break;
|
|
32
|
+
case this.ok:
|
|
33
|
+
severityClass = 'success';
|
|
34
|
+
break;
|
|
35
|
+
case this.warning:
|
|
36
|
+
severityClass = 'warning';
|
|
37
|
+
break;
|
|
38
|
+
case this.error:
|
|
39
|
+
severityClass = 'danger';
|
|
40
|
+
break;
|
|
41
|
+
case this.info:
|
|
42
|
+
default:
|
|
43
|
+
severityClass = 'info';
|
|
44
|
+
}
|
|
45
|
+
return severityClass;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export default new Severity();
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { LitElement, type TemplateResult, html } from 'lit';
|
|
2
|
+
import { customElement, property } from 'lit/decorators';
|
|
3
|
+
|
|
4
|
+
@customElement('typo3-install-wrap-group')
|
|
5
|
+
class WrapGroupElement extends LitElement {
|
|
6
|
+
@property({ type: String }) wrapId: string | null = null;
|
|
7
|
+
@property({ type: Array }) values: string[] | null = null;
|
|
8
|
+
|
|
9
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
10
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
protected override render(): TemplateResult {
|
|
15
|
+
return html`
|
|
16
|
+
<div class="form-multigroup-wrap">
|
|
17
|
+
<div class="form-multigroup-item">
|
|
18
|
+
<div class="input-group">
|
|
19
|
+
<input id="${this.wrapId}_wrap_start" class="form-control t3js-emconf-wrapfield" data-target="#${this.wrapId}" value="${this.values[0].trim()}"/>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="form-multigroup-item">
|
|
23
|
+
<div class="input-group">
|
|
24
|
+
<input id="${this.wrapId}_wrap_end" class="form-control t3js-emconf-wrapfield" data-target="#${this.wrapId}" value="${this.values[0].trim()}"/>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
declare global {
|
|
33
|
+
interface HTMLElementTagNameMap {
|
|
34
|
+
'typo3-install-wrap-group': WrapGroupElement;
|
|
35
|
+
}
|
|
36
|
+
}
|