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
package/README-TYPO3.md
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# TYPO3 CMS
|
|
2
|
+
|
|
3
|
+
TYPO3 is an open source PHP based web content management system released
|
|
4
|
+
under the GNU GPL. TYPO3 is copyright © 1999-2025 by Kasper Skårhøj.
|
|
5
|
+
|
|
6
|
+
This document provides a basic introduction to TYPO3.
|
|
7
|
+
|
|
8
|
+
## Getting Started
|
|
9
|
+
|
|
10
|
+
TYPO3 requires a web server with PHP and a database.
|
|
11
|
+
The backend is accessed via a supported browser.
|
|
12
|
+
|
|
13
|
+
Please see the [Installation Guide](https://docs.typo3.org/installation)
|
|
14
|
+
in order to set up a basic TYPO3 installation on your web server.
|
|
15
|
+
|
|
16
|
+
## What is TYPO3?
|
|
17
|
+
|
|
18
|
+
TYPO3 is a free and open source Content Management Framework. It is
|
|
19
|
+
released under the GNU General Public License. It can run on several web
|
|
20
|
+
servers, such as Apache, nginx or IIS, on top of many operating systems,
|
|
21
|
+
among them Linux, Microsoft Windows, FreeBSD or macOS.
|
|
22
|
+
|
|
23
|
+
TYPO3 was initially authored by Kasper Skårhøj and is now further
|
|
24
|
+
developed by a community of contributors and the [TYPO3 Core Development
|
|
25
|
+
Team](https://typo3.org/community/teams/typo3-development/).
|
|
26
|
+
|
|
27
|
+
To get more info about the GPL license, visit
|
|
28
|
+
https://opensource.org/licenses/gpl-license
|
|
29
|
+
|
|
30
|
+
## What is a Content Management Framework?
|
|
31
|
+
|
|
32
|
+
A Content Management Framework is more than just a content management
|
|
33
|
+
system, due to the separation of the streamlined core and optional
|
|
34
|
+
plugins (extensions). TYPO3 has an open API that allows you to extend
|
|
35
|
+
the frontend (website) and/or backend (administration) functionality.
|
|
36
|
+
|
|
37
|
+
The concept of extensions makes TYPO3 capable of being developed and
|
|
38
|
+
used in almost any way you can imagine, either by using any of the many
|
|
39
|
+
extensions which are available for download, or by writing your own.
|
|
40
|
+
|
|
41
|
+
## TYPO3 System requirements
|
|
42
|
+
|
|
43
|
+
TYPO3 is based upon PHP and uses a database management system like
|
|
44
|
+
MySQL.
|
|
45
|
+
|
|
46
|
+
For more specific information regarding requirements see the file
|
|
47
|
+
[INSTALL.md](INSTALL.md#server-system-requirements) in this folder.
|
|
48
|
+
|
|
49
|
+
## TYPO3 resources
|
|
50
|
+
|
|
51
|
+
Here is an overview of the most important TYPO3 resources to help you
|
|
52
|
+
get started:
|
|
53
|
+
|
|
54
|
+
### Get more information
|
|
55
|
+
|
|
56
|
+
* https://typo3.org/ is the main project website. It provides up-to-date
|
|
57
|
+
official news, information about events and the TYPO3 community.
|
|
58
|
+
|
|
59
|
+
* https://docs.typo3.org/: TYPO3 is one of the most thoroughly
|
|
60
|
+
documented OpenSource products around, with manuals covering basic
|
|
61
|
+
tutorials, TypoScript, administration, development, core structure,
|
|
62
|
+
etc. You should make the time to locate the various documents, and
|
|
63
|
+
read those that apply to the work you want to do.
|
|
64
|
+
|
|
65
|
+
* https://get.typo3.org/ is the platform where you can download TYPO3
|
|
66
|
+
and find all release notes and change logs of TYPO3 releases.
|
|
67
|
+
|
|
68
|
+
* https://extensions.typo3.org/ is the platform where you can search for
|
|
69
|
+
and download TYPO3 extensions.
|
|
70
|
+
|
|
71
|
+
### Chat with us
|
|
72
|
+
|
|
73
|
+
The TYPO3 community is using a tool called Slack to openly communicate
|
|
74
|
+
with each other and with the public. Several TYPO3 teams use Slack as a
|
|
75
|
+
way to communicate internally and most channels are a welcome place for
|
|
76
|
+
you to join and get yourself involved.
|
|
77
|
+
|
|
78
|
+
* Register: https://my.typo3.org/about-mytypo3org/slack
|
|
79
|
+
* Slack: https://typo3.slack.com/
|
|
80
|
+
|
|
81
|
+
### Exchange information, ask questions, get help
|
|
82
|
+
|
|
83
|
+
Slack is nice for short discussions, but when asking questions, most
|
|
84
|
+
answers are lost in the noise after a few minutes.
|
|
85
|
+
|
|
86
|
+
#### StackOverflow
|
|
87
|
+
|
|
88
|
+
**To let everyone profit from an answer, we recommend to ask questions
|
|
89
|
+
on StackOverflow**. If you like, you can then post a link into the
|
|
90
|
+
corresponding Slack channel to raise attention. And please, do not
|
|
91
|
+
forget to tag your questions correctly with `typo3` (and possibly other
|
|
92
|
+
tags like `typo3-9.5.x`, `Fluid` or `Extbase`).
|
|
93
|
+
|
|
94
|
+
* [StackOverflow questions tagged "TYPO3"](https://stackoverflow.com/questions/tagged/typo3)
|
|
95
|
+
|
|
96
|
+
#### Official meet the TYPO3 Community overview:
|
|
97
|
+
|
|
98
|
+
Visit https://typo3.org/community/meet/
|
|
99
|
+
|
|
100
|
+
## Contributing
|
|
101
|
+
|
|
102
|
+
If you want to contribute to the TYPO3 source code, take a look at our
|
|
103
|
+
Contributors Walkthrough and Review System:
|
|
104
|
+
|
|
105
|
+
* https://docs.typo3.org/core-contribution
|
|
106
|
+
* https://review.typo3.org/
|
|
107
|
+
|
|
108
|
+
> Please use the [TYPO3 Slack chat](#chat-with-us), if you need help in
|
|
109
|
+
> setting up your contribution environment. The community is very
|
|
110
|
+
> helpful and get you up and running! (Please post your questions in
|
|
111
|
+
> Slack Channel `#typo3-cms-coredev` regarding contribution support)
|
|
112
|
+
|
|
113
|
+
The [repository at GitHub](https://github.com/typo3/typo3) is a
|
|
114
|
+
synchronized mirror of the primary TYPO3 core git repository:
|
|
115
|
+
|
|
116
|
+
* https://git.typo3.org/typo3/typo3
|
|
117
|
+
|
|
118
|
+
If you want to file a bug report, take a look at:
|
|
119
|
+
|
|
120
|
+
* [https://forge.typo3.org](https://forge.typo3.org/projects/typo3cms-core/issues)
|
|
121
|
+
|
|
122
|
+
## Security
|
|
123
|
+
|
|
124
|
+
If you learn about a potential security issue in the TYPO3 core or in
|
|
125
|
+
an extension, please always contact the TYPO3 Security Team via security@typo3.org.
|
|
126
|
+
Please always include the version number where you've discovered the issue.
|
|
127
|
+
If we can confirm a problem in a third-party extension, we will inform the
|
|
128
|
+
author immediately.
|
|
129
|
+
|
|
130
|
+
If you discover a security problem in your own extension, please inform
|
|
131
|
+
the TYPO3 Security Team as well. They can help you to fix it, and they
|
|
132
|
+
may want to issue an advisory once it is fixed.
|
|
133
|
+
|
|
134
|
+
For more details see [TYPO3 Security Team](https://typo3.org/community/teams/security/).
|
|
135
|
+
|
|
136
|
+
## Final notes
|
|
137
|
+
|
|
138
|
+
TYPO3 is said to be one of the most sophisticated PHP / Internet related
|
|
139
|
+
applications available, and the more you play with it, the more you will
|
|
140
|
+
agree.
|
|
141
|
+
|
|
142
|
+
Due to the advanced level of the code and functionality, a degree of
|
|
143
|
+
study, time and perseverance is required to fully understand it, and get
|
|
144
|
+
the best from it. You should keep trying, as we say it's definitely
|
|
145
|
+
worth it. TYPO3 is the Enterprise Content Management System "for all".
|
|
146
|
+
|
|
147
|
+
The GPL license allows for developments that are based upon TYPO3 to
|
|
148
|
+
also be freely available under the GPL. Please remember this, because
|
|
149
|
+
TYPO3 is about "Inspiring People To Share". If you are making money with
|
|
150
|
+
TYPO3 you can donate or become a member of the
|
|
151
|
+
[TYPO3 Association](https://typo3.org/association).
|
|
152
|
+
|
|
153
|
+
By becoming a supporting member, individuals and organisations mainly
|
|
154
|
+
fund core development of TYPO3. The decision about what the funds are
|
|
155
|
+
used for, is made by all members of the Association and the TYPO3
|
|
156
|
+
Association Board. The decisions will be made transparent to the community
|
|
157
|
+
and especially the supporting members. Your funds will also serve for
|
|
158
|
+
other purposes as laid out in the bylaws.
|
|
159
|
+
|
|
160
|
+
* [Donate to TYPO3](https://typo3.org/donate)
|
|
161
|
+
* [Become a member of the TYPO3 Association](
|
|
162
|
+
https://typo3.org/membership)
|
|
163
|
+
|
|
164
|
+
## Copyleft
|
|
165
|
+
|
|
166
|
+
This document is a part of the TYPO3 project.
|
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# TYPO3 TypeScript Sources
|
|
2
|
+
|
|
3
|
+
This repository contains the TypeScript sources from the TYPO3 Core, automatically extracted and published to npm.
|
|
4
|
+
|
|
5
|
+
## 📦 Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install typo3-typescript-sources
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 🔍 Source
|
|
12
|
+
|
|
13
|
+
- **Original Repository:** [TYPO3/typo3](https://github.com/TYPO3/typo3)
|
|
14
|
+
- **Source Path:** `Build/Sources/TypeScript/`
|
|
15
|
+
- **Current TYPO3 Version:** `v13.4.20`
|
|
16
|
+
|
|
17
|
+
## 📝 License
|
|
18
|
+
|
|
19
|
+
This package maintains the same license as TYPO3 Core: **GPL-2.0-or-later**
|
|
20
|
+
|
|
21
|
+
## 🤖 Automation
|
|
22
|
+
|
|
23
|
+
This repository is automatically synchronized with TYPO3 Core releases via GitHub Actions.
|
|
24
|
+
|
|
25
|
+
## ⚠️ Note
|
|
26
|
+
|
|
27
|
+
This is an unofficial split package maintained by [@maikschneider](https://github.com/maikschneider).
|
|
28
|
+
For official TYPO3 packages, please refer to the [TYPO3 Core repository](https://github.com/TYPO3/typo3).
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
((): void => {
|
|
2
|
+
const AdminPanelSelectors = {
|
|
3
|
+
adminPanelRole: 'form[data-typo3-role=typo3-adminPanel]',
|
|
4
|
+
moduleTriggerRole: '[data-typo3-role=typo3-adminPanel-module-trigger]',
|
|
5
|
+
moduleParentClass: '.typo3-adminPanel-module',
|
|
6
|
+
contentTabRole: '[data-typo3-role=typo3-adminPanel-content-tab]',
|
|
7
|
+
saveButtonRole: '[data-typo3-role=typo3-adminPanel-saveButton]',
|
|
8
|
+
triggerRole: '[data-typo3-role=typo3-adminPanel-trigger]',
|
|
9
|
+
popupTriggerRole: '[data-typo3-role=typo3-adminPanel-popup-trigger]',
|
|
10
|
+
panelTriggerRole: '[data-typo3-role=typo3-adminPanel-panel-trigger]',
|
|
11
|
+
panelParentClass: '.typo3-adminPanel-panel',
|
|
12
|
+
contentSettingsTriggerRole: '[data-typo3-role=typo3-adminPanel-content-settings]',
|
|
13
|
+
contentSettingsParentClass: '.typo3-adminPanel-content-settings',
|
|
14
|
+
contentParentClass: '.typo3-adminPanel-content',
|
|
15
|
+
zoomTarget: '[data-typo3-zoom-target]',
|
|
16
|
+
zoomClose: '[data-typo3-zoom-close]',
|
|
17
|
+
currentContentRole: '[data-typo3-role=typo3-adminPanel-content]',
|
|
18
|
+
contentPaneRole: '[data-typo3-role=typo3-adminPanel-content-pane]',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const AdminPanelClasses = {
|
|
22
|
+
active: 'active',
|
|
23
|
+
activeModule: 'typo3-adminPanel-module-active',
|
|
24
|
+
activeContentSetting: 'typo3-adminPanel-content-settings-active',
|
|
25
|
+
backdrop: 'typo3-adminPanel-backdrop',
|
|
26
|
+
activeTab: 'typo3-adminPanel-content-header-item-active',
|
|
27
|
+
activePane: 'typo3-adminPanel-content-panes-item-active',
|
|
28
|
+
noScroll: 'typo3-adminPanel-noscroll',
|
|
29
|
+
zoomShow: 'typo3-adminPanel-zoom-show',
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
class AdminPanel {
|
|
33
|
+
private readonly adminPanel: HTMLFormElement;
|
|
34
|
+
private readonly modules: AdminPanelModule[];
|
|
35
|
+
private readonly popups: AdminPanelPopup[];
|
|
36
|
+
private readonly trigger: HTMLElement;
|
|
37
|
+
|
|
38
|
+
constructor() {
|
|
39
|
+
this.adminPanel = document.querySelector(AdminPanelSelectors.adminPanelRole) as HTMLFormElement;
|
|
40
|
+
this.modules = (this.querySelectorAll(AdminPanelSelectors.moduleTriggerRole) as Element[]).map(
|
|
41
|
+
(moduleTrigger: HTMLElement) => {
|
|
42
|
+
const moduleParent = moduleTrigger.closest(AdminPanelSelectors.moduleParentClass);
|
|
43
|
+
return new AdminPanelModule(this, moduleParent, moduleTrigger);
|
|
44
|
+
},
|
|
45
|
+
);
|
|
46
|
+
this.popups = this.querySelectorAll(AdminPanelSelectors.popupTriggerRole).map(
|
|
47
|
+
(popupTrigger: HTMLElement) => new AdminPanelPopup(this, popupTrigger),
|
|
48
|
+
);
|
|
49
|
+
this.querySelectorAll(AdminPanelSelectors.panelTriggerRole).forEach(
|
|
50
|
+
(panelTrigger: HTMLElement) => {
|
|
51
|
+
const panelParent = panelTrigger.closest(AdminPanelSelectors.panelParentClass);
|
|
52
|
+
new AdminPanelPanel(panelParent, panelTrigger);
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
this.querySelectorAll(AdminPanelSelectors.contentSettingsTriggerRole).forEach(
|
|
56
|
+
(contentSettingTrigger: HTMLElement) => {
|
|
57
|
+
const contentSettingElement = contentSettingTrigger
|
|
58
|
+
.closest(AdminPanelSelectors.contentParentClass)
|
|
59
|
+
.querySelector(AdminPanelSelectors.contentSettingsParentClass);
|
|
60
|
+
new AdminPanelContentSetting(contentSettingElement, contentSettingTrigger);
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
this.trigger = document.querySelector(AdminPanelSelectors.triggerRole) as HTMLElement;
|
|
64
|
+
|
|
65
|
+
this.initializeEvents();
|
|
66
|
+
this.addBackdropListener();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
disableModules(): void {
|
|
70
|
+
this.modules.forEach((module: AdminPanelModule) => module.disable());
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
disablePopups(): void {
|
|
74
|
+
this.popups.forEach((popup: AdminPanelPopup) => popup.disable());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
renderBackdrop(): void {
|
|
78
|
+
const adminPanel = document.getElementById('TSFE_ADMIN_PANEL_FORM');
|
|
79
|
+
const backdrop = document.createElement('div');
|
|
80
|
+
const body = document.querySelector('body');
|
|
81
|
+
body.classList.add(AdminPanelClasses.noScroll);
|
|
82
|
+
backdrop.classList.add(AdminPanelClasses.backdrop);
|
|
83
|
+
adminPanel.appendChild(backdrop);
|
|
84
|
+
this.addBackdropListener();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
removeBackdrop(): void {
|
|
88
|
+
const backdrop = document.querySelector('.' + AdminPanelClasses.backdrop);
|
|
89
|
+
const body = document.querySelector('body');
|
|
90
|
+
body.classList.remove(AdminPanelClasses.noScroll);
|
|
91
|
+
if (backdrop !== null) {
|
|
92
|
+
backdrop.remove();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private querySelectorAll(selectors: string, subject: Element = null): Node[] {
|
|
97
|
+
if (subject === null) {
|
|
98
|
+
return Array.from(document.querySelectorAll(selectors));
|
|
99
|
+
}
|
|
100
|
+
return Array.from(subject.querySelectorAll(selectors));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private initializeEvents(): void {
|
|
104
|
+
this
|
|
105
|
+
.querySelectorAll(AdminPanelSelectors.contentTabRole)
|
|
106
|
+
.forEach((tab: HTMLElement) => tab.addEventListener('click', this.switchTab.bind(this)));
|
|
107
|
+
this
|
|
108
|
+
.querySelectorAll(AdminPanelSelectors.zoomTarget)
|
|
109
|
+
.forEach((zoomTrigger: HTMLElement) => zoomTrigger.addEventListener('click', this.openZoom.bind(this)));
|
|
110
|
+
this
|
|
111
|
+
.querySelectorAll(AdminPanelSelectors.zoomClose)
|
|
112
|
+
.forEach((zoomTrigger: HTMLElement) => zoomTrigger.addEventListener('click', this.closeZoom.bind(this)));
|
|
113
|
+
this
|
|
114
|
+
.querySelectorAll(AdminPanelSelectors.triggerRole)
|
|
115
|
+
.forEach((trigger: HTMLElement) => trigger.addEventListener('click', this.toggleAdminPanelState.bind(this)));
|
|
116
|
+
this
|
|
117
|
+
.querySelectorAll(AdminPanelSelectors.saveButtonRole)
|
|
118
|
+
.forEach((elm: HTMLElement) => elm.addEventListener('click', this.sendAdminPanelForm.bind(this)));
|
|
119
|
+
|
|
120
|
+
this
|
|
121
|
+
.querySelectorAll('[data-typo3-role=typo3-adminPanel-content-close]')
|
|
122
|
+
.forEach((elm: HTMLElement) => {
|
|
123
|
+
elm.addEventListener('click', () => {
|
|
124
|
+
this.disableModules();
|
|
125
|
+
this.removeBackdrop();
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
this
|
|
129
|
+
.querySelectorAll('.typo3-adminPanel-table th, .typo3-adminPanel-table td')
|
|
130
|
+
.forEach((elm: HTMLElement) => {
|
|
131
|
+
elm.addEventListener('click', () => {
|
|
132
|
+
elm.focus();
|
|
133
|
+
try {
|
|
134
|
+
document.execCommand('copy');
|
|
135
|
+
} catch {
|
|
136
|
+
// nothing here
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
private switchTab(event: MouseEvent): void {
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
|
|
145
|
+
const activeTabClass = AdminPanelClasses.activeTab;
|
|
146
|
+
const activePaneClass = AdminPanelClasses.activePane;
|
|
147
|
+
const currentTab = event.currentTarget as HTMLElement;
|
|
148
|
+
const currentContent = currentTab.closest(AdminPanelSelectors.currentContentRole);
|
|
149
|
+
const contentTabs = this.querySelectorAll(AdminPanelSelectors.contentTabRole, currentContent);
|
|
150
|
+
const contentPanes = this.querySelectorAll(AdminPanelSelectors.contentPaneRole, currentContent);
|
|
151
|
+
|
|
152
|
+
contentTabs.forEach((element: HTMLElement) => element.classList.remove(activeTabClass));
|
|
153
|
+
currentTab.classList.add(activeTabClass);
|
|
154
|
+
contentPanes.forEach((element: HTMLElement) => element.classList.remove(activePaneClass));
|
|
155
|
+
|
|
156
|
+
const activePane = document.querySelector('[data-typo3-tab-id=' + currentTab.dataset.typo3TabTarget + ']');
|
|
157
|
+
activePane.classList.add(activePaneClass);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private openZoom(event: MouseEvent): void {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
const trigger = event.currentTarget as HTMLElement;
|
|
163
|
+
const targetId = trigger.getAttribute('data-typo3-zoom-target');
|
|
164
|
+
const target = document.querySelector('[data-typo3-zoom-id=' + targetId + ']');
|
|
165
|
+
target.classList.add(AdminPanelClasses.zoomShow);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private closeZoom(event: MouseEvent): void {
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
const trigger = event.currentTarget as HTMLElement;
|
|
171
|
+
const target = trigger.closest('[data-typo3-zoom-id]');
|
|
172
|
+
target.classList.remove(AdminPanelClasses.zoomShow);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
private sendAdminPanelForm(event: MouseEvent): void {
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
const formData = new FormData(this.adminPanel);
|
|
178
|
+
const request = new XMLHttpRequest();
|
|
179
|
+
request.open('POST', this.adminPanel.dataset.typo3AjaxUrl);
|
|
180
|
+
request.send(formData);
|
|
181
|
+
request.onload = () => location.assign(this.getCleanReloadUrl());
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private toggleAdminPanelState(): void {
|
|
185
|
+
const request = new XMLHttpRequest();
|
|
186
|
+
request.open('GET', this.trigger.dataset.typo3AjaxUrl);
|
|
187
|
+
request.send();
|
|
188
|
+
request.onload = () => location.reload();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* When previewing access/time restricted packs from the backend, "ADMCMD_" parameters are attached to the URL
|
|
193
|
+
* - their settings will be saved in the admin panel. To make sure that the user is able to change those settings
|
|
194
|
+
* via the Admin Panel User Interface the $_GET parameters are removed from the URL after saving and the page is
|
|
195
|
+
* reloaded
|
|
196
|
+
*/
|
|
197
|
+
private getCleanReloadUrl(): string {
|
|
198
|
+
const urlParams: string[] = [];
|
|
199
|
+
location.search.substr(1).split('&').forEach((item: string): void => {
|
|
200
|
+
if (item && !item.includes('ADMCMD_')) {
|
|
201
|
+
urlParams.push(item);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
const queryString = urlParams ? '?' + urlParams.join('&') : '';
|
|
206
|
+
return location.origin + location.pathname + queryString;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
private addBackdropListener(): void {
|
|
210
|
+
this.querySelectorAll('.' + AdminPanelClasses.backdrop)
|
|
211
|
+
.forEach((elm: HTMLElement) => {
|
|
212
|
+
elm.addEventListener('click', () => {
|
|
213
|
+
this.removeBackdrop();
|
|
214
|
+
this
|
|
215
|
+
.querySelectorAll(AdminPanelSelectors.moduleTriggerRole)
|
|
216
|
+
.forEach((innerElm: HTMLElement) => {
|
|
217
|
+
innerElm.closest(AdminPanelSelectors.moduleParentClass)
|
|
218
|
+
.classList.remove(AdminPanelClasses.activeModule);
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
interface AdminPanelSwitchable {
|
|
226
|
+
isActive(): boolean;
|
|
227
|
+
enable(): void;
|
|
228
|
+
disable(): void;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
class AdminPanelPopup implements AdminPanelSwitchable {
|
|
232
|
+
private readonly adminPanel: AdminPanel;
|
|
233
|
+
private readonly element: Element;
|
|
234
|
+
|
|
235
|
+
constructor(adminPanel: AdminPanel, element: Element) {
|
|
236
|
+
this.adminPanel = adminPanel;
|
|
237
|
+
this.element = element;
|
|
238
|
+
this.initializeEvents();
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
isActive(): boolean {
|
|
242
|
+
return this.element.classList.contains(AdminPanelClasses.active);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
enable(): void {
|
|
246
|
+
this.element.classList.add(AdminPanelClasses.active);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
disable(): void {
|
|
250
|
+
this.element.classList.remove(AdminPanelClasses.active);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
private initializeEvents(): void {
|
|
254
|
+
this.element.addEventListener('click', () => {
|
|
255
|
+
if (this.isActive()) {
|
|
256
|
+
this.disable();
|
|
257
|
+
} else {
|
|
258
|
+
this.adminPanel.disablePopups();
|
|
259
|
+
this.enable();
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
class AdminPanelPanel implements AdminPanelSwitchable {
|
|
267
|
+
private readonly element: Element;
|
|
268
|
+
private readonly trigger: Element;
|
|
269
|
+
|
|
270
|
+
constructor(element: Element, trigger: Element) {
|
|
271
|
+
this.element = element;
|
|
272
|
+
this.trigger = trigger;
|
|
273
|
+
this.initializeEvents();
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
isActive(): boolean {
|
|
277
|
+
return this.element.classList.contains(AdminPanelClasses.active);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
enable(): void {
|
|
281
|
+
this.element.classList.add(AdminPanelClasses.active);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
disable(): void {
|
|
285
|
+
this.element.classList.remove(AdminPanelClasses.active);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private initializeEvents(): void {
|
|
289
|
+
this.trigger.addEventListener('click', () => {
|
|
290
|
+
if (this.isActive()) {
|
|
291
|
+
this.disable();
|
|
292
|
+
} else {
|
|
293
|
+
this.enable();
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
class AdminPanelContentSetting implements AdminPanelSwitchable {
|
|
300
|
+
private readonly element: Element;
|
|
301
|
+
private readonly trigger: Element;
|
|
302
|
+
|
|
303
|
+
constructor(element: Element, trigger: Element) {
|
|
304
|
+
this.element = element;
|
|
305
|
+
this.trigger = trigger;
|
|
306
|
+
this.initializeEvents();
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
isActive(): boolean {
|
|
310
|
+
return this.element.classList.contains(AdminPanelClasses.activeContentSetting);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
enable(): void {
|
|
314
|
+
this.element.classList.add(AdminPanelClasses.activeContentSetting);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
disable(): void {
|
|
318
|
+
this.element.classList.remove(AdminPanelClasses.activeContentSetting);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
private initializeEvents(): void {
|
|
322
|
+
this.trigger.addEventListener('click', () => {
|
|
323
|
+
if (this.isActive()) {
|
|
324
|
+
this.disable();
|
|
325
|
+
} else {
|
|
326
|
+
this.enable();
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
class AdminPanelModule implements AdminPanelSwitchable {
|
|
333
|
+
private readonly adminPanel: AdminPanel;
|
|
334
|
+
private readonly element: Element;
|
|
335
|
+
private readonly trigger: Element;
|
|
336
|
+
|
|
337
|
+
constructor(adminPanel: AdminPanel, element: Element, trigger: Element) {
|
|
338
|
+
this.adminPanel = adminPanel;
|
|
339
|
+
this.element = element;
|
|
340
|
+
this.trigger = trigger;
|
|
341
|
+
this.initializeEvents();
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
isActive(): boolean {
|
|
345
|
+
return this.element.classList.contains(AdminPanelClasses.activeModule);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
enable(): void {
|
|
349
|
+
this.element.classList.add(AdminPanelClasses.activeModule);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
disable(): void {
|
|
353
|
+
this.element.classList.remove(AdminPanelClasses.activeModule);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
private initializeEvents(): void {
|
|
357
|
+
this.trigger.addEventListener('click', () => {
|
|
358
|
+
this.adminPanel.removeBackdrop();
|
|
359
|
+
if (this.isActive()) {
|
|
360
|
+
this.disable();
|
|
361
|
+
} else {
|
|
362
|
+
this.adminPanel.disableModules();
|
|
363
|
+
this.adminPanel.renderBackdrop();
|
|
364
|
+
this.enable();
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
window.addEventListener(
|
|
371
|
+
'load',
|
|
372
|
+
() => new AdminPanel(),
|
|
373
|
+
false,
|
|
374
|
+
);
|
|
375
|
+
})();
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
((): void => {
|
|
2
|
+
class AdminPanelCache {
|
|
3
|
+
private readonly buttons: NodeList;
|
|
4
|
+
|
|
5
|
+
constructor() {
|
|
6
|
+
this.buttons = document.querySelectorAll('[data-typo3-role="clearCacheButton"]');
|
|
7
|
+
|
|
8
|
+
this.buttons.forEach((element: HTMLElement): void => {
|
|
9
|
+
element.addEventListener('click', (): void => {
|
|
10
|
+
const url = element.dataset.typo3AjaxUrl;
|
|
11
|
+
const request = new XMLHttpRequest();
|
|
12
|
+
request.open('GET', url);
|
|
13
|
+
request.send();
|
|
14
|
+
request.onload = (): void => {
|
|
15
|
+
location.reload();
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
window.addEventListener(
|
|
23
|
+
'load',
|
|
24
|
+
() => new AdminPanelCache(),
|
|
25
|
+
false,
|
|
26
|
+
);
|
|
27
|
+
})();
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
((): void => {
|
|
2
|
+
class AdminPanelPreview {
|
|
3
|
+
private readonly dateField: HTMLInputElement = null;
|
|
4
|
+
private readonly timeField: HTMLInputElement = null;
|
|
5
|
+
private readonly targetField: HTMLInputElement = null;
|
|
6
|
+
private readonly toggleField: HTMLInputElement = null;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Initialize date and time fields of preview
|
|
10
|
+
*
|
|
11
|
+
* PHP / backend side always uses UTC timestamps (for generating time based previews and access time checks)
|
|
12
|
+
* Date and Time fields are HTML5 input fields, combined they update the "targetfield" always containing a PHP
|
|
13
|
+
* compatible (seconds-based) timestamp
|
|
14
|
+
*/
|
|
15
|
+
constructor() {
|
|
16
|
+
this.dateField = <HTMLInputElement>document.getElementById('preview_simulateDate-date-hr');
|
|
17
|
+
this.timeField = <HTMLInputElement>document.getElementById('preview_simulateDate-time-hr');
|
|
18
|
+
this.targetField = <HTMLInputElement>document.getElementById(this.dateField.dataset.bsTarget);
|
|
19
|
+
this.toggleField = <HTMLInputElement>document.getElementById('typo3-adminPanel-simulate-date-toggle');
|
|
20
|
+
|
|
21
|
+
if (this.targetField.value) {
|
|
22
|
+
const initialDate = new Date(parseInt(this.targetField.value, 10) * 1000);
|
|
23
|
+
this.dateField.valueAsDate = initialDate;
|
|
24
|
+
this.timeField.valueAsDate = initialDate;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.toggleField.addEventListener('change', this.toggleDisplay);
|
|
28
|
+
this.dateField.addEventListener('change', this.updateDateField);
|
|
29
|
+
this.timeField.addEventListener('change', this.updateDateField);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private readonly toggleDisplay = (): void => {
|
|
33
|
+
const toggleVal = this.toggleField.checked;
|
|
34
|
+
const groupElement = <HTMLDivElement>document.getElementById('typo3-adminPanel-preview_simulateDate');
|
|
35
|
+
if (toggleVal) {
|
|
36
|
+
groupElement.classList.remove('typo3-adminPanel-group-disable');
|
|
37
|
+
this.dateField.disabled = false;
|
|
38
|
+
this.timeField.disabled = false;
|
|
39
|
+
this.updateDateField();
|
|
40
|
+
} else {
|
|
41
|
+
groupElement.classList.add('typo3-adminPanel-group-disable');
|
|
42
|
+
this.dateField.disabled = true;
|
|
43
|
+
this.timeField.disabled = true;
|
|
44
|
+
this.targetField.value = '';
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
private readonly updateDateField = (): void => {
|
|
49
|
+
let dateVal = this.dateField.value;
|
|
50
|
+
let timeVal = this.timeField.value;
|
|
51
|
+
if (!dateVal && timeVal) {
|
|
52
|
+
const tempDate = new Date();
|
|
53
|
+
dateVal = tempDate.getFullYear() + '-' + (tempDate.getMonth() + 1) + '-' + tempDate.getDate();
|
|
54
|
+
}
|
|
55
|
+
if (dateVal && !timeVal) {
|
|
56
|
+
timeVal = '00:00';
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!dateVal && !timeVal) {
|
|
60
|
+
this.targetField.value = '';
|
|
61
|
+
} else {
|
|
62
|
+
const stringDate = dateVal + ' ' + timeVal;
|
|
63
|
+
const date = new Date(stringDate);
|
|
64
|
+
|
|
65
|
+
this.targetField.value = (date.valueOf() / 1000).toString();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
window.addEventListener(
|
|
71
|
+
'load',
|
|
72
|
+
() => new AdminPanelPreview(),
|
|
73
|
+
false,
|
|
74
|
+
);
|
|
75
|
+
})();
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
export abstract class AbstractAction {
|
|
15
|
+
protected callback: (promise?: Promise<void>) => void|Promise<void>;
|
|
16
|
+
|
|
17
|
+
constructor(callback: (promise?: Promise<void>) => void|Promise<void>) {
|
|
18
|
+
this.callback = callback;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public abstract execute(el: HTMLElement): Promise<void>;
|
|
22
|
+
}
|