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,232 @@
|
|
|
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 type { AjaxResponse } from '@typo3/core/ajax/ajax-response';
|
|
15
|
+
import { SeverityEnum } from '@typo3/backend/enum/severity';
|
|
16
|
+
import DocumentService from '@typo3/core/document-service';
|
|
17
|
+
import Modal from '@typo3/backend/modal';
|
|
18
|
+
import Utility from '@typo3/backend/utility';
|
|
19
|
+
import Workspaces from './workspaces';
|
|
20
|
+
import ThrottleEvent from '@typo3/core/event/throttle-event';
|
|
21
|
+
import '@typo3/workspaces/renderable/send-to-stage-form';
|
|
22
|
+
import RegularEvent from '@typo3/core/event/regular-event';
|
|
23
|
+
|
|
24
|
+
enum Identifiers {
|
|
25
|
+
topbar = '.t3js-workspace-topbar',
|
|
26
|
+
stageSliderContainer = '.t3js-stage-slider-container',
|
|
27
|
+
stageSlider = '.t3js-stage-slider',
|
|
28
|
+
liveView = '.t3js-workspace-view-live',
|
|
29
|
+
workspaceView = '.t3js-workspace-view-workspace',
|
|
30
|
+
sendToStageAction = '[data-action="send-to-stage"]',
|
|
31
|
+
discardAction = '[data-action="discard"]',
|
|
32
|
+
stageButtonsContainer = '.t3js-stage-buttons',
|
|
33
|
+
previewModeContainer = '.t3js-preview-mode',
|
|
34
|
+
activePreviewMode = '.t3js-active-preview-mode',
|
|
35
|
+
workspacePreview = '.t3js-workspace-preview',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Loaded in "Frontend workspace preview". Contains JS for "Send to stage ..." / "Discard"
|
|
40
|
+
* buttons, preview mode selector, preview slider and so on.
|
|
41
|
+
*/
|
|
42
|
+
class Preview extends Workspaces {
|
|
43
|
+
private currentSlidePosition: number = 100;
|
|
44
|
+
private readonly elements: { [key: string]: HTMLElement } = {};
|
|
45
|
+
|
|
46
|
+
constructor() {
|
|
47
|
+
super();
|
|
48
|
+
|
|
49
|
+
DocumentService.ready().then((): void => {
|
|
50
|
+
this.getElements();
|
|
51
|
+
this.resizeViews();
|
|
52
|
+
this.registerEvents();
|
|
53
|
+
this.initStageButtons();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Fetches and stores often required elements
|
|
59
|
+
*/
|
|
60
|
+
private getElements(): void {
|
|
61
|
+
this.elements.liveView = document.querySelector(Identifiers.liveView) as HTMLElement;
|
|
62
|
+
this.elements.stageSliderContainer = document.querySelector(Identifiers.stageSliderContainer) as HTMLElement;
|
|
63
|
+
this.elements.stageSlider = document.querySelector(Identifiers.stageSlider) as HTMLElement;
|
|
64
|
+
this.elements.workspaceView = document.querySelector(Identifiers.workspaceView) as HTMLElement;
|
|
65
|
+
this.elements.stageButtonsContainer = document.querySelector(Identifiers.stageButtonsContainer) as HTMLElement;
|
|
66
|
+
this.elements.previewModeContainer = document.querySelector(Identifiers.previewModeContainer) as HTMLElement;
|
|
67
|
+
this.elements.activePreviewMode = document.querySelector(Identifiers.activePreviewMode) as HTMLElement;
|
|
68
|
+
this.elements.workspacePreview = document.querySelector(Identifiers.workspacePreview) as HTMLElement;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Registers the events
|
|
73
|
+
*/
|
|
74
|
+
private registerEvents(): void {
|
|
75
|
+
new ThrottleEvent('resize', (): void => {
|
|
76
|
+
this.resizeViews();
|
|
77
|
+
}, 50).bindTo(window);
|
|
78
|
+
new RegularEvent('click', this.renderDiscardWindow.bind(this)).delegateTo(document, Identifiers.discardAction);
|
|
79
|
+
new RegularEvent('click', this.renderSendPageToStageWindow.bind(this)).delegateTo(document, Identifiers.sendToStageAction);
|
|
80
|
+
new RegularEvent('click', () => {
|
|
81
|
+
window.top.document.querySelectorAll('.t3js-workspace-recipient:not([disabled])').forEach((element: HTMLInputElement) => {
|
|
82
|
+
element.checked = true;
|
|
83
|
+
});
|
|
84
|
+
}).delegateTo(document, '.t3js-workspace-recipients-selectall');
|
|
85
|
+
new RegularEvent('click', () => {
|
|
86
|
+
window.top.document.querySelectorAll('.t3js-workspace-recipient:not([disabled])').forEach((element: HTMLInputElement) => {
|
|
87
|
+
element.checked = false;
|
|
88
|
+
});
|
|
89
|
+
}).delegateTo(document, '.t3js-workspace-recipients-deselectall');
|
|
90
|
+
|
|
91
|
+
new ThrottleEvent('input', this.updateSlidePosition.bind(this), 10).bindTo(document.querySelector(Identifiers.stageSlider));
|
|
92
|
+
new RegularEvent('click', this.changePreviewMode.bind(this)).delegateTo(this.elements.previewModeContainer, '[data-preview-mode]');
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private initStageButtons(): void {
|
|
96
|
+
this.sendRemoteRequest([
|
|
97
|
+
this.generateRemoteActionsPayload('updateStageChangeButtons', [TYPO3.settings.Workspaces.id]),
|
|
98
|
+
], Identifiers.topbar).then(async (response: AjaxResponse): Promise<void> => {
|
|
99
|
+
this.renderStageButtons((await response.resolve())[0].result);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Renders the staging buttons
|
|
105
|
+
*/
|
|
106
|
+
private renderStageButtons(buttons: string): void {
|
|
107
|
+
this.elements.stageButtonsContainer.innerHTML = buttons;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Updates the position of the comparison slider
|
|
112
|
+
*/
|
|
113
|
+
private updateSlidePosition(e: Event): void {
|
|
114
|
+
this.currentSlidePosition = parseInt((e.target as HTMLInputElement).value, 10);
|
|
115
|
+
this.resizeViews();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Resize the views based on the current viewport height and slider position
|
|
120
|
+
*/
|
|
121
|
+
private resizeViews(): void {
|
|
122
|
+
if (this.elements.activePreviewMode.dataset.activePreviewMode === 'slider') {
|
|
123
|
+
this.elements.liveView.style.height = (100 - this.currentSlidePosition) + '%';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Renders the discard window
|
|
129
|
+
*/
|
|
130
|
+
private renderDiscardWindow(): void {
|
|
131
|
+
const modal = Modal.confirm(
|
|
132
|
+
TYPO3.lang['window.discardAll.title'],
|
|
133
|
+
TYPO3.lang['window.discardAll.message'],
|
|
134
|
+
SeverityEnum.warning,
|
|
135
|
+
[
|
|
136
|
+
{
|
|
137
|
+
text: TYPO3.lang.cancel,
|
|
138
|
+
active: true,
|
|
139
|
+
btnClass: 'btn-default',
|
|
140
|
+
name: 'cancel',
|
|
141
|
+
trigger: (): void => {
|
|
142
|
+
modal.hideModal();
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
text: TYPO3.lang.ok,
|
|
147
|
+
btnClass: 'btn-warning',
|
|
148
|
+
name: 'ok',
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
);
|
|
152
|
+
modal.addEventListener('button.clicked', (e: Event): void => {
|
|
153
|
+
if ((e.target as HTMLButtonElement).name === 'ok') {
|
|
154
|
+
this.sendRemoteRequest([
|
|
155
|
+
this.generateRemoteActionsPayload('discardStagesFromPage', [TYPO3.settings.Workspaces.id]),
|
|
156
|
+
this.generateRemoteActionsPayload('updateStageChangeButtons', [TYPO3.settings.Workspaces.id]),
|
|
157
|
+
], Identifiers.topbar).then(async (response: AjaxResponse): Promise<void> => {
|
|
158
|
+
modal.hideModal();
|
|
159
|
+
this.renderStageButtons((await response.resolve())[1].result);
|
|
160
|
+
// Reloading live view IFRAME
|
|
161
|
+
this.elements.workspaceView.setAttribute('src', this.elements.workspaceView.getAttribute('src'));
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Renders the "send page to stage" window
|
|
169
|
+
*/
|
|
170
|
+
private renderSendPageToStageWindow(e: Event, target: HTMLElement): void {
|
|
171
|
+
const direction = target.dataset.direction;
|
|
172
|
+
let actionName;
|
|
173
|
+
|
|
174
|
+
if (direction === 'prev') {
|
|
175
|
+
actionName = 'sendPageToPreviousStage';
|
|
176
|
+
} else if (direction === 'next') {
|
|
177
|
+
actionName = 'sendPageToNextStage';
|
|
178
|
+
} else {
|
|
179
|
+
throw 'Invalid direction ' + direction + ' requested.';
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
this.sendRemoteRequest(
|
|
183
|
+
this.generateRemoteActionsPayload(actionName, [TYPO3.settings.Workspaces.id]),
|
|
184
|
+
Identifiers.topbar
|
|
185
|
+
).then(async (response: AjaxResponse): Promise<void> => {
|
|
186
|
+
const resolvedResponse = await response.resolve();
|
|
187
|
+
const modal = this.renderSendToStageWindow(resolvedResponse);
|
|
188
|
+
modal.addEventListener('button.clicked', (modalEvent: Event): void => {
|
|
189
|
+
const modalTarget = modalEvent.target as HTMLButtonElement;
|
|
190
|
+
if (modalTarget.name === 'ok') {
|
|
191
|
+
const serializedForm = Utility.convertFormToObject(modal.querySelector('form'));
|
|
192
|
+
serializedForm.affects = resolvedResponse[0].result.affects;
|
|
193
|
+
serializedForm.stageId = parseInt(target.dataset.stageId, 10);
|
|
194
|
+
|
|
195
|
+
this.sendRemoteRequest([
|
|
196
|
+
this.generateRemoteActionsPayload('sentCollectionToStage', [serializedForm]),
|
|
197
|
+
this.generateRemoteActionsPayload('updateStageChangeButtons', [TYPO3.settings.Workspaces.id]),
|
|
198
|
+
], Identifiers.topbar).then(async (updateResponse: AjaxResponse): Promise<void> => {
|
|
199
|
+
modal.hideModal();
|
|
200
|
+
|
|
201
|
+
this.renderStageButtons((await updateResponse.resolve())[1].result);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Changes the preview mode
|
|
210
|
+
*/
|
|
211
|
+
private changePreviewMode(e: Event, target: HTMLElement): void {
|
|
212
|
+
e.preventDefault();
|
|
213
|
+
|
|
214
|
+
const currentPreviewMode = this.elements.activePreviewMode.dataset.activePreviewMode;
|
|
215
|
+
const newPreviewMode = target.dataset.previewMode;
|
|
216
|
+
|
|
217
|
+
this.elements.activePreviewMode.textContent = target.textContent;
|
|
218
|
+
this.elements.activePreviewMode.dataset.activePreviewMode = newPreviewMode;
|
|
219
|
+
this.elements.workspacePreview.classList.remove('typo3-workspace-preview-' + currentPreviewMode);
|
|
220
|
+
this.elements.workspacePreview.classList.add('typo3-workspace-preview-' + newPreviewMode);
|
|
221
|
+
|
|
222
|
+
if (newPreviewMode === 'slider') {
|
|
223
|
+
this.elements.stageSliderContainer.style.display = '';
|
|
224
|
+
this.resizeViews();
|
|
225
|
+
} else {
|
|
226
|
+
this.elements.stageSliderContainer.style.display = 'none';
|
|
227
|
+
this.elements.liveView.style.height = '';
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export default new Preview();
|
|
@@ -0,0 +1,79 @@
|
|
|
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 } from 'lit/decorators';
|
|
15
|
+
import { html, LitElement, nothing, type TemplateResult } from 'lit';
|
|
16
|
+
import { repeat } from 'lit/directives/repeat';
|
|
17
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html';
|
|
18
|
+
import { nl2br } from '@typo3/core/directive/nl2br';
|
|
19
|
+
|
|
20
|
+
type Comment = {
|
|
21
|
+
user_comment: string;
|
|
22
|
+
previous_stage_title: string;
|
|
23
|
+
stage_title: string;
|
|
24
|
+
tstamp: number;
|
|
25
|
+
user_username: string;
|
|
26
|
+
user_avatar: string
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
@customElement('typo3-workspaces-comment-view')
|
|
30
|
+
export class CommentViewElement extends LitElement {
|
|
31
|
+
@property({ type: Array })
|
|
32
|
+
public comments: Comment[] = [];
|
|
33
|
+
|
|
34
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
35
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
protected override render(): TemplateResult {
|
|
40
|
+
return html`
|
|
41
|
+
<div>
|
|
42
|
+
${repeat(this.comments, (comment) => comment.tstamp, (comment) => this.renderComment(comment))}
|
|
43
|
+
</div>
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
protected renderComment(comment: Comment): TemplateResult {
|
|
48
|
+
return html`
|
|
49
|
+
<div class="media">
|
|
50
|
+
<div class="media-left text-center">
|
|
51
|
+
<div>
|
|
52
|
+
${unsafeHTML(comment.user_avatar)}
|
|
53
|
+
</div>
|
|
54
|
+
${comment.user_username}
|
|
55
|
+
</div>
|
|
56
|
+
<div class="panel panel-default">
|
|
57
|
+
${comment.user_comment ? html`
|
|
58
|
+
<div class="panel-body">
|
|
59
|
+
${nl2br(comment.user_comment)}
|
|
60
|
+
</div>
|
|
61
|
+
` : nothing}
|
|
62
|
+
<div class="panel-footer">
|
|
63
|
+
<span class="badge badge-success me-2">
|
|
64
|
+
${comment.previous_stage_title} ⇾ ${comment.stage_title}
|
|
65
|
+
</span>
|
|
66
|
+
<span class="badge badge-info">
|
|
67
|
+
${comment.tstamp}
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
declare global {
|
|
76
|
+
interface HTMLElementTagNameMap {
|
|
77
|
+
'typo3-workspaces-comment-view': CommentViewElement;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -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 { customElement, property } from 'lit/decorators';
|
|
15
|
+
import { html, LitElement, type TemplateResult } from 'lit';
|
|
16
|
+
import { repeat } from 'lit/directives/repeat';
|
|
17
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html';
|
|
18
|
+
|
|
19
|
+
export type Diff = {
|
|
20
|
+
field: string,
|
|
21
|
+
label: string,
|
|
22
|
+
content: string,
|
|
23
|
+
html: string
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
@customElement('typo3-workspaces-diff-view')
|
|
27
|
+
export class DiffViewElement extends LitElement {
|
|
28
|
+
@property({ type: Array })
|
|
29
|
+
public diffs: Diff[] = [];
|
|
30
|
+
|
|
31
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
32
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected override render(): TemplateResult {
|
|
37
|
+
return html`
|
|
38
|
+
<div class="diff">
|
|
39
|
+
${repeat(this.diffs, (diff) => diff.field, (diff) => this.renderDiffItem(diff))}
|
|
40
|
+
</div>
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
protected renderDiffItem(diff: Diff) {
|
|
45
|
+
return html`
|
|
46
|
+
<div class="diff-item">
|
|
47
|
+
<div class="diff-item-title">${diff.label}</div>
|
|
48
|
+
<div class="diff-item-result">${unsafeHTML(diff.content)}</div>
|
|
49
|
+
</div>
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
declare global {
|
|
55
|
+
interface HTMLElementTagNameMap {
|
|
56
|
+
'typo3-workspaces-diff-view': DiffViewElement;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
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 } from 'lit/decorators';
|
|
15
|
+
import { html, LitElement, nothing, type TemplateResult } from 'lit';
|
|
16
|
+
import { repeat } from 'lit/directives/repeat';
|
|
17
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html';
|
|
18
|
+
import type { Diff } from './diff-view';
|
|
19
|
+
|
|
20
|
+
type History = {
|
|
21
|
+
differences: string | Diff[];
|
|
22
|
+
datetime: string;
|
|
23
|
+
user: string;
|
|
24
|
+
user_avatar: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
@customElement('typo3-workspaces-history-view')
|
|
28
|
+
export class HistoryViewElement extends LitElement {
|
|
29
|
+
@property({ type: Array })
|
|
30
|
+
public historyItems: History[] = [];
|
|
31
|
+
|
|
32
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
33
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
protected override render(): TemplateResult {
|
|
38
|
+
return html`
|
|
39
|
+
<div>
|
|
40
|
+
${repeat(this.historyItems, (historyItem) => historyItem.datetime, (historyItem) => this.renderHistoryItem(historyItem))}
|
|
41
|
+
</div>
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
protected renderHistoryItem(historyItem: History): TemplateResult|typeof nothing {
|
|
46
|
+
if (typeof historyItem.differences === 'object' && historyItem.differences.length === 0) {
|
|
47
|
+
return nothing;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return html`
|
|
51
|
+
<div class="media">
|
|
52
|
+
<div class="media-left text-center">
|
|
53
|
+
<div>
|
|
54
|
+
${unsafeHTML(historyItem.user_avatar)}
|
|
55
|
+
</div>
|
|
56
|
+
${historyItem.user}
|
|
57
|
+
</div>
|
|
58
|
+
<div class="media-body">
|
|
59
|
+
<div class="panel panel-default">
|
|
60
|
+
${typeof historyItem.differences === 'object' ? html`
|
|
61
|
+
<div>
|
|
62
|
+
<div class="diff">
|
|
63
|
+
${repeat(historyItem.differences, (diff) => diff, (diff) => html`
|
|
64
|
+
<div class="diff-item">
|
|
65
|
+
<div class="diff-item-title">
|
|
66
|
+
${diff.label}
|
|
67
|
+
</div>
|
|
68
|
+
<div class="diff-item-result diff-item-result-inline">
|
|
69
|
+
${unsafeHTML(diff.html)}
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
`)}
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
` : html`
|
|
76
|
+
<div class="panel-body">
|
|
77
|
+
${historyItem.differences}
|
|
78
|
+
</div>
|
|
79
|
+
`}
|
|
80
|
+
<div class="panel-footer">
|
|
81
|
+
<span class="badge badge-info">
|
|
82
|
+
${historyItem.datetime}
|
|
83
|
+
</span>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
declare global {
|
|
93
|
+
interface HTMLElementTagNameMap {
|
|
94
|
+
'typo3-workspaces-history-view': HistoryViewElement;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
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 } from 'lit/decorators';
|
|
15
|
+
import { html, LitElement, nothing } from 'lit';
|
|
16
|
+
import type { Diff } from './diff-view';
|
|
17
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html';
|
|
18
|
+
import '@typo3/workspaces/renderable/diff-view';
|
|
19
|
+
import '@typo3/workspaces/renderable/comment-view';
|
|
20
|
+
import '@typo3/workspaces/renderable/history-view';
|
|
21
|
+
|
|
22
|
+
type RecordInformation = {
|
|
23
|
+
path_Live: string,
|
|
24
|
+
label_Stage: string,
|
|
25
|
+
label_NextStage: {
|
|
26
|
+
title: string
|
|
27
|
+
},
|
|
28
|
+
label_PrevStage: {
|
|
29
|
+
title: string
|
|
30
|
+
},
|
|
31
|
+
diff: Diff[],
|
|
32
|
+
comments: Comment[],
|
|
33
|
+
history: {
|
|
34
|
+
data: History[]
|
|
35
|
+
},
|
|
36
|
+
stage_position: string,
|
|
37
|
+
stage_count: string
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
@customElement('typo3-workspaces-record-information')
|
|
41
|
+
export class RecordInformationElement extends LitElement {
|
|
42
|
+
@property({ type: Object })
|
|
43
|
+
public record: RecordInformation;
|
|
44
|
+
|
|
45
|
+
@property({ type: Object })
|
|
46
|
+
public TYPO3lang: typeof TYPO3.lang | null = null;
|
|
47
|
+
|
|
48
|
+
protected override createRenderRoot(): HTMLElement | ShadowRoot {
|
|
49
|
+
// @todo Switch to Shadow DOM once Bootstrap CSS style can be applied correctly
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
protected override render() {
|
|
54
|
+
return html`
|
|
55
|
+
<div>
|
|
56
|
+
<p>${unsafeHTML(this.TYPO3lang.path.replace('{0}', this.record.path_Live))}</p>
|
|
57
|
+
<p>${unsafeHTML(this.TYPO3lang.current_step.replace('{0}', this.record.label_Stage).replace('{1}', this.record.stage_position).replace('{2}', this.record.stage_count))}</p>
|
|
58
|
+
<ul class="nav nav-tabs" role="tablist">
|
|
59
|
+
${ this.record.diff.length > 0 ? this.renderNavLink(this.TYPO3lang['window.recordChanges.tabs.changeSummary'], '#workspace-changes') : nothing}
|
|
60
|
+
${ this.record.comments.length > 0 ? this.renderNavLink(this.TYPO3lang['window.recordChanges.tabs.changeSummary'], '#workspace-comments', this.record.comments.length) : nothing}
|
|
61
|
+
${ this.record.history.data.length > 0 ? this.renderNavLink(this.TYPO3lang['window.recordChanges.tabs.history'], '#workspace-history') : nothing}
|
|
62
|
+
</ul>
|
|
63
|
+
<div class="tab-content">
|
|
64
|
+
${ this.record.diff.length > 0 ? html`
|
|
65
|
+
<div class="tab-pane" id="workspace-changes" role="tabpanel">
|
|
66
|
+
<div class="form-section">
|
|
67
|
+
<typo3-workspaces-diff-view .diffs=${this.record.diff}></typo3-workspaces-diff-view>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
` : nothing}
|
|
71
|
+
${ this.record.comments.length > 0 ? html`
|
|
72
|
+
<div class="tab-pane" id="workspace-comments" role="tabpanel">
|
|
73
|
+
<div class="form-section">
|
|
74
|
+
<typo3-workspaces-comment-view .comments=${this.record.comments}></typo3-workspaces-comment-view>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
` : nothing}
|
|
78
|
+
${ this.record.history.data.length > 0 ? html`
|
|
79
|
+
<div class="tab-pane" id="workspace-history" role="tabpanel">
|
|
80
|
+
<div class="form-section">
|
|
81
|
+
<typo3-workspaces-history-view .historyItems=${this.record.history.data}></typo3-workspaces-history-view>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
` : nothing}
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
protected renderNavLink(text: string, target: string, count: number = 0) {
|
|
91
|
+
return html`
|
|
92
|
+
<li class="nav-item" role="presentation">
|
|
93
|
+
<button
|
|
94
|
+
type="button"
|
|
95
|
+
class="nav-link"
|
|
96
|
+
data-bs-toggle="tab"
|
|
97
|
+
data-bs-target="${target}"
|
|
98
|
+
aria-controls="${target}"
|
|
99
|
+
role="tab"
|
|
100
|
+
>
|
|
101
|
+
${text}
|
|
102
|
+
${count > 0 ? html`<span class="badge">${count}</span>` : nothing}
|
|
103
|
+
</button>
|
|
104
|
+
</li>
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
protected override firstUpdated(): void {
|
|
109
|
+
this.renderRoot.querySelector('.nav-link').classList.add('active');
|
|
110
|
+
this.renderRoot.querySelector('.tab-pane').classList.add('active');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
declare global {
|
|
115
|
+
interface HTMLElementTagNameMap {
|
|
116
|
+
'typo3-workspaces-record-information': RecordInformationElement;
|
|
117
|
+
}
|
|
118
|
+
}
|