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,58 @@
|
|
|
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 Notification from '@typo3/backend/notification';
|
|
15
|
+
import AjaxRequest from '@typo3/core/ajax/ajax-request';
|
|
16
|
+
import Router from '../../router';
|
|
17
|
+
import { AbstractInlineModule, type ActionResponse } from '../abstract-inline-module';
|
|
18
|
+
import type MessageInterface from '@typo3/install/message-interface';
|
|
19
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Module: @typo3/install/module/dump-autoload
|
|
23
|
+
*/
|
|
24
|
+
class DumpAutoload extends AbstractInlineModule {
|
|
25
|
+
public override initialize(trigger: HTMLButtonElement): void {
|
|
26
|
+
this.setButtonState(trigger, false);
|
|
27
|
+
|
|
28
|
+
(new AjaxRequest(Router.getUrl('dumpAutoload')))
|
|
29
|
+
.get({ cache: 'no-cache' })
|
|
30
|
+
.then(
|
|
31
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
32
|
+
const data: ActionResponse = await response.resolve();
|
|
33
|
+
if (data.success === true && Array.isArray(data.status)) {
|
|
34
|
+
if (data.status.length > 0) {
|
|
35
|
+
data.status.forEach((element: MessageInterface): void => {
|
|
36
|
+
Notification.success(element.message);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
(): void => {
|
|
44
|
+
// In case the dump action fails (typically 500 from server), do not kill the entire
|
|
45
|
+
// Install Tool, instead show a notification that something went wrong.
|
|
46
|
+
Notification.error(
|
|
47
|
+
'Autoloader not dumped',
|
|
48
|
+
'Dumping autoload files failed for unknown reasons. Check the system for broken extensions and try again.'
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
.finally((): void => {
|
|
53
|
+
this.setButtonState(trigger, true);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default new DumpAutoload();
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import 'bootstrap';
|
|
15
|
+
import { AbstractInteractableModule, type ModuleLoadedResponse } from '../abstract-interactable-module';
|
|
16
|
+
import AjaxRequest from '@typo3/core/ajax/ajax-request';
|
|
17
|
+
import { FlashMessage } from '../../renderable/flash-message';
|
|
18
|
+
import { InfoBox } from '../../renderable/info-box';
|
|
19
|
+
import '../../renderable/language-packs';
|
|
20
|
+
import Severity from '../../renderable/severity';
|
|
21
|
+
import Router from '../../router';
|
|
22
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
23
|
+
import type MessageInterface from '@typo3/install/message-interface';
|
|
24
|
+
import type { ModalElement } from '@typo3/backend/modal';
|
|
25
|
+
import type {
|
|
26
|
+
ActivateLanguageEvent,
|
|
27
|
+
DeactivateLanguageEvent,
|
|
28
|
+
DownloadPacksEvent,
|
|
29
|
+
LanguagePacksGetDataResponse
|
|
30
|
+
} from '../../renderable/language-packs';
|
|
31
|
+
import type { ProgressBarElement } from '@typo3/backend/element/progress-bar-element';
|
|
32
|
+
|
|
33
|
+
enum Identifiers {
|
|
34
|
+
outputContainer = '.t3js-languagePacks-output',
|
|
35
|
+
contentContainer = '.t3js-languagePacks-mainContent',
|
|
36
|
+
notifications = '.t3js-languagePacks-notifications'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type LanguageActivationChangedResponse = {
|
|
40
|
+
status: MessageInterface[],
|
|
41
|
+
success: boolean,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
type LanguageUpdatedResponse = {
|
|
45
|
+
packResult: string,
|
|
46
|
+
success: true,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Module: @typo3/install/module/language-packs
|
|
51
|
+
*/
|
|
52
|
+
class LanguagePacks extends AbstractInteractableModule {
|
|
53
|
+
private activeLanguages: string[] = [];
|
|
54
|
+
private activeExtensions: string[] = [];
|
|
55
|
+
|
|
56
|
+
private packsUpdateDetails: { [id: string]: number } = {
|
|
57
|
+
toHandle: 0,
|
|
58
|
+
handled: 0,
|
|
59
|
+
updated: 0,
|
|
60
|
+
new: 0,
|
|
61
|
+
failed: 0,
|
|
62
|
+
skipped: 0,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
private notifications: Element[] = [];
|
|
66
|
+
|
|
67
|
+
private static pluralize(count: number, word: string = 'pack', suffix: string = 's', additionalCount: number = 0): string {
|
|
68
|
+
return count !== 1 && additionalCount !== 1 ? word + suffix : word;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public override initialize(currentModal: ModalElement): void {
|
|
72
|
+
super.initialize(currentModal);
|
|
73
|
+
|
|
74
|
+
Promise.all([
|
|
75
|
+
this.loadModuleFrameAgnostic('@typo3/install/renderable/info-box.js'),
|
|
76
|
+
this.loadModuleFrameAgnostic('@typo3/install/renderable/flash-message.js'),
|
|
77
|
+
this.loadModuleFrameAgnostic('@typo3/install/renderable/language-packs.js')
|
|
78
|
+
]).then((): void => {
|
|
79
|
+
this.getData();
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private getData(): void {
|
|
84
|
+
const modalContent = this.getModalBody();
|
|
85
|
+
(new AjaxRequest(Router.getUrl('languagePacksGetData')))
|
|
86
|
+
.get({ cache: 'no-cache' })
|
|
87
|
+
.then(
|
|
88
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
89
|
+
const data: ModuleLoadedResponse & LanguagePacksGetDataResponse = await response.resolve();
|
|
90
|
+
const { success, html, ...state } = data;
|
|
91
|
+
if (success === true) {
|
|
92
|
+
this.activeLanguages = data.activeLanguages;
|
|
93
|
+
this.activeExtensions = data.activeExtensions;
|
|
94
|
+
modalContent.innerHTML = html;
|
|
95
|
+
const contentContainer: HTMLElement = modalContent.parentElement.querySelector(Identifiers.contentContainer);
|
|
96
|
+
contentContainer.innerHTML = '';
|
|
97
|
+
|
|
98
|
+
const documentRef = window.location !== window.parent.location ? parent.document : document;
|
|
99
|
+
|
|
100
|
+
const languageMatrix = documentRef.createElement('typo3-install-language-matrix');
|
|
101
|
+
languageMatrix.data = state;
|
|
102
|
+
if (this.getModuleContent().dataset.configurationIsWritable === 'true') {
|
|
103
|
+
languageMatrix.setAttribute('configurationIsWritable', '');
|
|
104
|
+
}
|
|
105
|
+
languageMatrix.addEventListener('activate-language', (e: CustomEvent<ActivateLanguageEvent>) => {
|
|
106
|
+
this.activateLanguage(e.detail.iso);
|
|
107
|
+
});
|
|
108
|
+
languageMatrix.addEventListener('deactivate-language', (e: CustomEvent<DeactivateLanguageEvent>) => {
|
|
109
|
+
this.deactivateLanguage(e.detail.iso);
|
|
110
|
+
});
|
|
111
|
+
languageMatrix.addEventListener('download-packs', (e: CustomEvent<DownloadPacksEvent>) => {
|
|
112
|
+
this.updatePacks(e.detail?.iso || undefined, undefined);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const extensionMatrix = documentRef.createElement('typo3-install-extension-matrix');
|
|
116
|
+
extensionMatrix.data = state;
|
|
117
|
+
extensionMatrix.addEventListener('download-packs', (e: CustomEvent<DownloadPacksEvent>) => {
|
|
118
|
+
this.updatePacks(
|
|
119
|
+
e.detail?.iso || undefined,
|
|
120
|
+
e.detail?.extension || undefined
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
contentContainer.append(languageMatrix, extensionMatrix);
|
|
125
|
+
} else {
|
|
126
|
+
this.addNotification(InfoBox.create(Severity.error, 'Something went wrong'));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
this.renderNotifications();
|
|
130
|
+
},
|
|
131
|
+
(error: AjaxResponse): void => {
|
|
132
|
+
Router.handleAjaxError(error, modalContent);
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private activateLanguage(iso: string): void {
|
|
138
|
+
const modalContent = this.getModalBody();
|
|
139
|
+
const outputContainer = this.findInModal(Identifiers.outputContainer);
|
|
140
|
+
this.renderProgressBar(outputContainer);
|
|
141
|
+
this.getNotificationBox().innerHTML = '';
|
|
142
|
+
(new AjaxRequest(Router.getUrl()))
|
|
143
|
+
.post({
|
|
144
|
+
install: {
|
|
145
|
+
action: 'languagePacksActivateLanguage',
|
|
146
|
+
token: this.getModuleContent().dataset.languagePacksActivateLanguageToken,
|
|
147
|
+
iso: iso,
|
|
148
|
+
},
|
|
149
|
+
})
|
|
150
|
+
.then(
|
|
151
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
152
|
+
const data: LanguageActivationChangedResponse = await response.resolve();
|
|
153
|
+
outputContainer.innerHTML = '';
|
|
154
|
+
if (data.success === true && Array.isArray(data.status)) {
|
|
155
|
+
data.status.forEach((element: MessageInterface): void => {
|
|
156
|
+
this.addNotification(InfoBox.create(element.severity, element.title, element.message));
|
|
157
|
+
});
|
|
158
|
+
} else {
|
|
159
|
+
this.addNotification(InfoBox.create(Severity.error, 'Something went wrong'));
|
|
160
|
+
}
|
|
161
|
+
this.getData();
|
|
162
|
+
},
|
|
163
|
+
(error: AjaxResponse): void => {
|
|
164
|
+
Router.handleAjaxError(error, modalContent);
|
|
165
|
+
}
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private deactivateLanguage(iso: string): void {
|
|
170
|
+
const modalContent = this.getModalBody();
|
|
171
|
+
const outputContainer = this.findInModal(Identifiers.outputContainer);
|
|
172
|
+
this.renderProgressBar(outputContainer);
|
|
173
|
+
this.getNotificationBox().innerHTML = '';
|
|
174
|
+
(new AjaxRequest(Router.getUrl()))
|
|
175
|
+
.post({
|
|
176
|
+
install: {
|
|
177
|
+
action: 'languagePacksDeactivateLanguage',
|
|
178
|
+
token: this.getModuleContent().dataset.languagePacksDeactivateLanguageToken,
|
|
179
|
+
iso: iso,
|
|
180
|
+
},
|
|
181
|
+
})
|
|
182
|
+
.then(
|
|
183
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
184
|
+
const data: LanguageActivationChangedResponse = await response.resolve();
|
|
185
|
+
outputContainer.innerHTML = '';
|
|
186
|
+
if (data.success === true && Array.isArray(data.status)) {
|
|
187
|
+
data.status.forEach((element: MessageInterface): void => {
|
|
188
|
+
this.addNotification(InfoBox.create(element.severity, element.title, element.message));
|
|
189
|
+
});
|
|
190
|
+
} else {
|
|
191
|
+
this.addNotification(InfoBox.create(Severity.error, 'Something went wrong'));
|
|
192
|
+
}
|
|
193
|
+
this.getData();
|
|
194
|
+
},
|
|
195
|
+
(error: AjaxResponse): void => {
|
|
196
|
+
Router.handleAjaxError(error, modalContent);
|
|
197
|
+
}
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
private updatePacks(iso: string | undefined, extension: string | undefined): void {
|
|
202
|
+
const outputContainer = this.findInModal(Identifiers.outputContainer);
|
|
203
|
+
const contentContainer = this.findInModal(Identifiers.contentContainer);
|
|
204
|
+
const isos = iso === undefined ? this.activeLanguages : [iso];
|
|
205
|
+
let updateIsoTimes = true;
|
|
206
|
+
let extensions = this.activeExtensions;
|
|
207
|
+
if (extension !== undefined) {
|
|
208
|
+
extensions = [extension];
|
|
209
|
+
updateIsoTimes = false;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
this.packsUpdateDetails = {
|
|
213
|
+
toHandle: isos.length * extensions.length,
|
|
214
|
+
handled: 0,
|
|
215
|
+
updated: 0,
|
|
216
|
+
new: 0,
|
|
217
|
+
failed: 0,
|
|
218
|
+
skipped: 0,
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
const progressBar = this.renderProgressBar(
|
|
222
|
+
outputContainer,
|
|
223
|
+
this.packsUpdateDetails.toHandle === 1 ? undefined : {
|
|
224
|
+
value: 0,
|
|
225
|
+
max: this.packsUpdateDetails.toHandle,
|
|
226
|
+
label: '0 of ' + this.packsUpdateDetails.toHandle + ' language ' +
|
|
227
|
+
LanguagePacks.pluralize(this.packsUpdateDetails.toHandle) + ' updated'
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
contentContainer.innerHTML = '';
|
|
231
|
+
|
|
232
|
+
isos.forEach((isoCode: string): void => {
|
|
233
|
+
extensions.forEach((extensionKey: string): void => {
|
|
234
|
+
this.getNotificationBox().innerHTML = '';
|
|
235
|
+
|
|
236
|
+
(new AjaxRequest(Router.getUrl()))
|
|
237
|
+
.post({
|
|
238
|
+
install: {
|
|
239
|
+
action: 'languagePacksUpdatePack',
|
|
240
|
+
token: this.getModuleContent().dataset.languagePacksUpdatePackToken,
|
|
241
|
+
iso: isoCode,
|
|
242
|
+
extension: extensionKey,
|
|
243
|
+
},
|
|
244
|
+
})
|
|
245
|
+
.then(
|
|
246
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
247
|
+
const data: LanguageUpdatedResponse = await response.resolve();
|
|
248
|
+
if (data.success === true) {
|
|
249
|
+
this.packsUpdateDetails.handled++;
|
|
250
|
+
if (data.packResult === 'new') {
|
|
251
|
+
this.packsUpdateDetails.new++;
|
|
252
|
+
} else if (data.packResult === 'update') {
|
|
253
|
+
this.packsUpdateDetails.updated++;
|
|
254
|
+
} else if (data.packResult === 'skipped') {
|
|
255
|
+
this.packsUpdateDetails.skipped++;
|
|
256
|
+
} else {
|
|
257
|
+
this.packsUpdateDetails.failed++;
|
|
258
|
+
}
|
|
259
|
+
this.packUpdateDone(updateIsoTimes, isos, progressBar);
|
|
260
|
+
} else {
|
|
261
|
+
this.packsUpdateDetails.handled++;
|
|
262
|
+
this.packsUpdateDetails.failed++;
|
|
263
|
+
this.packUpdateDone(updateIsoTimes, isos, progressBar);
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
(): void => {
|
|
267
|
+
this.packsUpdateDetails.handled++;
|
|
268
|
+
this.packsUpdateDetails.failed++;
|
|
269
|
+
this.packUpdateDone(updateIsoTimes, isos, progressBar);
|
|
270
|
+
}
|
|
271
|
+
);
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
private packUpdateDone(updateIsoTimes: boolean, isos: string[], progressBar: ProgressBarElement): void {
|
|
277
|
+
const modalContent = this.getModalBody();
|
|
278
|
+
if (this.packsUpdateDetails.handled === this.packsUpdateDetails.toHandle) {
|
|
279
|
+
// All done - create summary, update 'last update' of iso list, render main view
|
|
280
|
+
this.addNotification(InfoBox.create(
|
|
281
|
+
Severity.ok,
|
|
282
|
+
'Language packs updated',
|
|
283
|
+
this.packsUpdateDetails.new + ' new language ' + LanguagePacks.pluralize(this.packsUpdateDetails.new) + ' downloaded, ' +
|
|
284
|
+
this.packsUpdateDetails.updated + ' language ' + LanguagePacks.pluralize(this.packsUpdateDetails.updated) + ' updated, ' +
|
|
285
|
+
this.packsUpdateDetails.skipped + ' language ' + LanguagePacks.pluralize(this.packsUpdateDetails.skipped) + ' skipped, ' +
|
|
286
|
+
this.packsUpdateDetails.failed + ' language ' + LanguagePacks.pluralize(this.packsUpdateDetails.failed) + ' not available'
|
|
287
|
+
));
|
|
288
|
+
if (updateIsoTimes === true) {
|
|
289
|
+
(new AjaxRequest(Router.getUrl()))
|
|
290
|
+
.post({
|
|
291
|
+
install: {
|
|
292
|
+
action: 'languagePacksUpdateIsoTimes',
|
|
293
|
+
token: this.getModuleContent().dataset.languagePacksUpdateIsoTimesToken,
|
|
294
|
+
isos: isos,
|
|
295
|
+
},
|
|
296
|
+
})
|
|
297
|
+
.then(
|
|
298
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
299
|
+
const data = await response.resolve();
|
|
300
|
+
if (data.success === true) {
|
|
301
|
+
this.getData();
|
|
302
|
+
} else {
|
|
303
|
+
this.addNotification(FlashMessage.create(Severity.error, 'Something went wrong'));
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
(error: AjaxResponse): void => {
|
|
307
|
+
Router.handleAjaxError(error, modalContent);
|
|
308
|
+
}
|
|
309
|
+
);
|
|
310
|
+
} else {
|
|
311
|
+
this.getData();
|
|
312
|
+
}
|
|
313
|
+
} else {
|
|
314
|
+
// Update progress bar
|
|
315
|
+
progressBar.value = this.packsUpdateDetails.handled;
|
|
316
|
+
progressBar.label = this.packsUpdateDetails.handled + ' of ' + this.packsUpdateDetails.toHandle + ' language ' +
|
|
317
|
+
LanguagePacks.pluralize(this.packsUpdateDetails.handled, 'pack', 's', this.packsUpdateDetails.toHandle) + ' updated';
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
private getNotificationBox(): HTMLElement {
|
|
322
|
+
return this.findInModal(Identifiers.notifications);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
private addNotification(notification: Element): void {
|
|
326
|
+
this.notifications.push(notification);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
private renderNotifications(): void {
|
|
330
|
+
const $notificationBox = this.getNotificationBox();
|
|
331
|
+
for (const notification of this.notifications) {
|
|
332
|
+
$notificationBox.appendChild(notification);
|
|
333
|
+
}
|
|
334
|
+
this.notifications = [];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
export default new LanguagePacks();
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { AbstractInlineModule, type ActionResponse } from '../abstract-inline-module';
|
|
16
|
+
import Notification from '@typo3/backend/notification';
|
|
17
|
+
import Router from '../../router';
|
|
18
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
19
|
+
import type MessageInterface from '@typo3/install/message-interface';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Module: @typo3/install/module/reset-backend-user-uc
|
|
23
|
+
*/
|
|
24
|
+
class ResetBackendUserUc extends AbstractInlineModule {
|
|
25
|
+
public override initialize($trigger: HTMLButtonElement): void {
|
|
26
|
+
this.setButtonState($trigger, false);
|
|
27
|
+
|
|
28
|
+
(new AjaxRequest(Router.getUrl('resetBackendUserUc')))
|
|
29
|
+
.get({ cache: 'no-cache' })
|
|
30
|
+
.then(
|
|
31
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
32
|
+
const data: ActionResponse = await response.resolve();
|
|
33
|
+
if (data.success === true && Array.isArray(data.status)) {
|
|
34
|
+
if (data.status.length > 0) {
|
|
35
|
+
data.status.forEach((element: MessageInterface): void => {
|
|
36
|
+
Notification.success(element.title, element.message);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
(): void => {
|
|
44
|
+
// In case the reset action fails (typically 500 from server), do not kill the entire
|
|
45
|
+
// Install Tool, instead show a notification that something went wrong.
|
|
46
|
+
Notification.error(
|
|
47
|
+
'Reset preferences of all backend users failed',
|
|
48
|
+
'Resetting preferences of all backend users failed for an unknown reason. Please check your server\'s logs for further investigation.'
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
.finally((): void => {
|
|
53
|
+
this.setButtonState($trigger, true);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default new ResetBackendUserUc();
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import RegularEvent from '@typo3/core/event/regular-event';
|
|
15
|
+
|
|
16
|
+
class PasswordStrength {
|
|
17
|
+
public initialize(fieldElement: HTMLInputElement): void {
|
|
18
|
+
// Simple password strength indicator
|
|
19
|
+
new RegularEvent('keyup', (event: Event): void => {
|
|
20
|
+
const field = event.target as HTMLInputElement;
|
|
21
|
+
this.checkPassword(field);
|
|
22
|
+
}).bindTo(fieldElement);
|
|
23
|
+
|
|
24
|
+
new RegularEvent('blur', (event: Event): void => {
|
|
25
|
+
const field = event.target as HTMLInputElement;
|
|
26
|
+
field.classList.remove('has-error', 'has-success', 'has-warning');
|
|
27
|
+
}).bindTo(fieldElement);
|
|
28
|
+
|
|
29
|
+
new RegularEvent('focus', (event: Event): void => {
|
|
30
|
+
const field = event.target as HTMLInputElement;
|
|
31
|
+
this.checkPassword(field);
|
|
32
|
+
}).bindTo(fieldElement);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
private checkPassword(fieldElement: HTMLInputElement): void {
|
|
36
|
+
const value = fieldElement.value;
|
|
37
|
+
const strongRegex = new RegExp('^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$', 'g');
|
|
38
|
+
const mediumRegex = new RegExp('^(?=.{8,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$', 'g');
|
|
39
|
+
const enoughRegex = new RegExp('(?=.{8,}).*', 'g');
|
|
40
|
+
fieldElement.classList.remove('has-error', 'has-success', 'has-warning');
|
|
41
|
+
|
|
42
|
+
if (value.length === 0) {
|
|
43
|
+
fieldElement.classList.add('has-error');
|
|
44
|
+
} else if (!enoughRegex.test(value)) {
|
|
45
|
+
fieldElement.classList.add('has-error');
|
|
46
|
+
} else if (strongRegex.test(value)) {
|
|
47
|
+
fieldElement.classList.add('has-success');
|
|
48
|
+
} else if (mediumRegex.test(value)) {
|
|
49
|
+
fieldElement.classList.add('has-warning');
|
|
50
|
+
} else {
|
|
51
|
+
fieldElement.classList.add('has-warning');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export default new PasswordStrength();
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the TYPO3 CMS project.
|
|
3
|
+
*
|
|
4
|
+
* It is free software; you can redistribute it and/or modify it under
|
|
5
|
+
* the terms of the GNU General Public License, either version 2
|
|
6
|
+
* of the License, or any later version.
|
|
7
|
+
*
|
|
8
|
+
* For the full copyright and license information, please read the
|
|
9
|
+
* LICENSE.txt file that was distributed with this source code.
|
|
10
|
+
*
|
|
11
|
+
* The TYPO3 project - inspiring people to share!
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import Modal from '@typo3/backend/modal';
|
|
15
|
+
import Notification from '@typo3/backend/notification';
|
|
16
|
+
import AjaxRequest from '@typo3/core/ajax/ajax-request';
|
|
17
|
+
import Router from '../../router';
|
|
18
|
+
import PasswordStrength from '../password-strength';
|
|
19
|
+
import { AbstractInteractableModule, type ModuleLoadedResponseWithButtons } from '../abstract-interactable-module';
|
|
20
|
+
import RegularEvent from '@typo3/core/event/regular-event';
|
|
21
|
+
import type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
22
|
+
import type MessageInterface from '@typo3/install/message-interface';
|
|
23
|
+
import type { ModalElement } from '@typo3/backend/modal';
|
|
24
|
+
|
|
25
|
+
enum Identifiers {
|
|
26
|
+
changeButton = '.t3js-changeInstallToolPassword-change'
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type PasswordUpdatedResponse = {
|
|
30
|
+
status: MessageInterface[],
|
|
31
|
+
success: boolean,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Module: @typo3/install/module/change-install-tool-password
|
|
36
|
+
*/
|
|
37
|
+
class ChangeInstallToolPassword extends AbstractInteractableModule {
|
|
38
|
+
public override initialize(currentModal: ModalElement): void {
|
|
39
|
+
super.initialize(currentModal);
|
|
40
|
+
this.getData();
|
|
41
|
+
|
|
42
|
+
new RegularEvent('click', (event: Event): void => {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
this.change();
|
|
45
|
+
}).delegateTo(currentModal, Identifiers.changeButton);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private getData(): void {
|
|
49
|
+
const modalContent = this.getModalBody();
|
|
50
|
+
(new AjaxRequest(Router.getUrl('changeInstallToolPasswordGetData')))
|
|
51
|
+
.get({ cache: 'no-cache' })
|
|
52
|
+
.then(
|
|
53
|
+
async (response: AjaxResponse): Promise<void> => {
|
|
54
|
+
const data: ModuleLoadedResponseWithButtons = await response.resolve();
|
|
55
|
+
if (data.success === true) {
|
|
56
|
+
modalContent.innerHTML = data.html;
|
|
57
|
+
|
|
58
|
+
PasswordStrength.initialize(modalContent.querySelector('.t3-install-form-password-strength'));
|
|
59
|
+
Modal.setButtons(data.buttons);
|
|
60
|
+
} else {
|
|
61
|
+
Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
(error: AjaxResponse): void => {
|
|
65
|
+
Router.handleAjaxError(error, modalContent);
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private change(): void {
|
|
71
|
+
this.setModalButtonsState(false);
|
|
72
|
+
|
|
73
|
+
const modalContent = this.getModalBody();
|
|
74
|
+
const executeToken = this.getModuleContent().dataset.installToolToken;
|
|
75
|
+
(new AjaxRequest(Router.getUrl())).post({
|
|
76
|
+
install: {
|
|
77
|
+
action: 'changeInstallToolPassword',
|
|
78
|
+
token: executeToken,
|
|
79
|
+
password: (this.findInModal('.t3js-changeInstallToolPassword-password') as HTMLInputElement).value,
|
|
80
|
+
passwordCheck: (this.findInModal('.t3js-changeInstallToolPassword-password-check') as HTMLInputElement).value,
|
|
81
|
+
},
|
|
82
|
+
}).then(async (response: AjaxResponse): Promise<void> => {
|
|
83
|
+
const data: PasswordUpdatedResponse = await response.resolve();
|
|
84
|
+
if (data.success === true && Array.isArray(data.status)) {
|
|
85
|
+
data.status.forEach((element: MessageInterface): void => {
|
|
86
|
+
Notification.showMessage(element.title, element.message, element.severity);
|
|
87
|
+
});
|
|
88
|
+
} else {
|
|
89
|
+
Notification.error('Something went wrong', 'The request was not processed successfully. Please check the browser\'s console and TYPO3\'s log.');
|
|
90
|
+
}
|
|
91
|
+
}, (error: AjaxResponse): void => {
|
|
92
|
+
Router.handleAjaxError(error, modalContent);
|
|
93
|
+
}).finally((): void => {
|
|
94
|
+
(this.findInModal('.t3js-changeInstallToolPassword-password') as HTMLInputElement).value = '';
|
|
95
|
+
(this.findInModal('.t3js-changeInstallToolPassword-password-check') as HTMLInputElement).value = '';
|
|
96
|
+
this.setModalButtonsState(true);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default new ChangeInstallToolPassword();
|