├── .crowdin.yml ├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ ├── documentation.yml │ ├── publish.yml │ └── tests.yaml ├── .gitignore ├── Build ├── Scripts │ └── runTests.sh ├── Sources │ ├── js │ │ ├── components │ │ │ ├── button-bar.js │ │ │ ├── colorpicker.js │ │ │ ├── element-key.js │ │ │ ├── field-group.js │ │ │ ├── field-key.js │ │ │ ├── field-row.js │ │ │ ├── field.js │ │ │ ├── form-field.js │ │ │ ├── item-list.js │ │ │ ├── key-value-list.js │ │ │ ├── nested-draggable.js │ │ │ ├── select-multiple-side-by-side.js │ │ │ └── splash-screen.js │ │ └── mask.js │ └── scss │ │ ├── _button.scss │ │ ├── _callout.scss │ │ ├── _checkbox.scss │ │ ├── _edit.scss │ │ ├── _elements.scss │ │ ├── _field-form.scss │ │ ├── _field-group.scss │ │ ├── _field-list.scss │ │ ├── _field.scss │ │ ├── _fields.scss │ │ ├── _footer.scss │ │ ├── _form-control-icon.scss │ │ ├── _item-table.scss │ │ ├── _list.scss │ │ ├── _multiple-side-by-side.scss │ │ ├── _overrides.scss │ │ ├── _reset-button.scss │ │ ├── _root.scss │ │ ├── _setup-incomplete.scss │ │ ├── _sidebar.scss │ │ ├── _spinner.scss │ │ ├── _splashscreen.scss │ │ ├── _templa.scss │ │ ├── _utility.scss │ │ ├── _variables.scss │ │ └── mask.scss ├── package-lock.json ├── package.json ├── php-cs-fixer.php ├── php-cs-fixer │ └── header-comment.php ├── phpstan │ ├── phpstan-baseline.neon │ ├── phpstan-constants.php │ └── phpstan.neon ├── phpunit │ ├── UnitTests.xml │ └── UnitTestsBootstrap.php ├── rollup.config.js └── testing-docker │ └── docker-compose.yaml ├── CHANGELOG.md ├── Classes ├── CodeGenerator │ ├── HtmlCodeGenerator.php │ ├── SqlCodeGenerator.php │ ├── TcaCodeGenerator.php │ └── TyposcriptCodeGenerator.php ├── Command │ ├── ConvertFormatCommand.php │ └── RestructureOverrideFieldsCommand.php ├── ConfigurationLoader │ ├── ConfigurationLoader.php │ └── ConfigurationLoaderInterface.php ├── Controller │ ├── AjaxController.php │ ├── FieldsController.php │ └── MaskController.php ├── DataProcessing │ └── MaskProcessor.php ├── Definition │ ├── ArrayDefinitionSorter.php │ ├── ElementDefinition.php │ ├── ElementDefinitionCollection.php │ ├── ElementTcaDefinition.php │ ├── NestedTcaFieldDefinitions.php │ ├── PaletteDefinition.php │ ├── PaletteDefinitionCollection.php │ ├── SqlColumnDefinition.php │ ├── SqlDefinition.php │ ├── TableDefinition.php │ ├── TableDefinitionCollection.php │ ├── TcaDefinition.php │ └── TcaFieldDefinition.php ├── DependencyInjection │ └── LoaderPass.php ├── Domain │ └── Repository │ │ ├── BackendLayoutRepository.php │ │ └── StorageRepository.php ├── Enumeration │ ├── FieldType.php │ └── Tab.php ├── Event │ ├── MaskAfterElementDeletedEvent.php │ ├── MaskAfterElementSavedEvent.php │ └── MaskAllowedFieldsEvent.php ├── EventListeners │ ├── MaskBackendPreviewEventListener.php │ ├── NestedContentElementsUsedEventListener.php │ └── RegisterIcons.php ├── Fluid │ └── FluidTemplateContentObject.php ├── Form │ └── FormDataProvider │ │ └── TcaTypesShowitemMaskBeLayoutFields.php ├── Helper │ └── InlineHelper.php ├── Imaging │ ├── IconProvider │ │ └── ContentElementIconProvider.php │ └── PreviewIconResolver.php ├── ItemsProcFuncs │ ├── CTypeList.php │ └── ColPosList.php ├── Loader │ ├── JsonLoader.php │ ├── JsonSplitLoader.php │ ├── LoaderInterface.php │ └── LoaderRegistry.php ├── Migrations │ ├── ConfigCleanerMigration.php │ ├── DefaultTcaMigration.php │ ├── DescriptionByElementMigration.php │ ├── MigrationInterface.php │ ├── MigrationManager.php │ ├── OrphanRemoverMigration.php │ ├── RepeatableMigrationInterface.php │ └── RteMigration.php ├── Updates │ ├── ConvertTemplatesToUppercase.php │ ├── FillTranslationSourceField.php │ ├── MigrateContentFields.php │ └── MoveRteOptions.php └── Utility │ ├── AffixUtility.php │ ├── ArrayToTypoScriptConverter.php │ ├── DateUtility.php │ ├── FieldTypeUtility.php │ ├── OverrideFieldsUtility.php │ ├── TcaConverter.php │ └── TemplatePathUtility.php ├── Configuration ├── Backend │ ├── AjaxRoutes.php │ └── Modules.php ├── ContentSecurityPolicies.php ├── JavaScriptModules.php ├── Mask │ ├── FieldGroups.php │ ├── TYPO3v12 │ │ └── Defaults.php │ ├── TYPO3v13 │ │ └── Defaults.php │ ├── Tabs │ │ ├── category.php │ │ ├── check.php │ │ ├── colorpicker.php │ │ ├── content.php │ │ ├── date.php │ │ ├── datetime.php │ │ ├── email.php │ │ ├── file.php │ │ ├── float.php │ │ ├── folder.php │ │ ├── group.php │ │ ├── inline.php │ │ ├── integer.php │ │ ├── linebreak.php │ │ ├── link.php │ │ ├── media.php │ │ ├── palette.php │ │ ├── radio.php │ │ ├── richtext.php │ │ ├── select.php │ │ ├── slug.php │ │ ├── string.php │ │ ├── tab.php │ │ ├── text.php │ │ └── timestamp.php │ └── TcaFields.php ├── Services.php ├── Services.yaml ├── Sets │ └── Mask │ │ ├── config.yaml │ │ └── setup.typoscript ├── TCA │ └── Overrides │ │ ├── pages.php │ │ ├── sys_template.php │ │ └── tt_content.php └── TypoScript │ └── setup.typoscript ├── Documentation ├── API │ ├── Events.rst │ ├── Index.rst │ └── Loader.rst ├── BackendPreview │ └── Index.rst ├── ChangeLog │ ├── 6.0 │ │ ├── CheckboxUI.rst │ │ ├── FieldSelection.rst │ │ ├── Group.rst │ │ ├── HTMLGeneration.rst │ │ ├── ImageOverlay.rst │ │ ├── Index.rst │ │ ├── LanguageSync.rst │ │ ├── NewDefaults.rst │ │ ├── Palettes.rst │ │ ├── RelationsResolved.rst │ │ ├── SelectIcons.rst │ │ └── Timestamp.rst │ ├── 7.0 │ │ ├── IconAndColorPicker.rst │ │ ├── Index.rst │ │ ├── MultiStepWizard.rst │ │ ├── MultiUse.rst │ │ ├── NewAppearance.rst │ │ └── Validation.rst │ ├── 7.1 │ │ └── Index.rst │ ├── 7.2 │ │ └── Index.rst │ ├── 8.0 │ │ └── Index.rst │ ├── 8.1 │ │ └── Index.rst │ ├── 8.2 │ │ └── Index.rst │ ├── 8.3 │ │ └── Index.rst │ └── Index.rst ├── Contentelements │ └── Index.rst ├── ExtensionSettings │ └── Index.rst ├── Fieldtypes │ ├── Index.rst │ └── Type │ │ ├── Category.rst │ │ ├── Check.rst │ │ ├── Colorpicker.rst │ │ ├── Content.rst │ │ ├── Date.rst │ │ ├── Datetime.rst │ │ ├── Email.rst │ │ ├── File.rst │ │ ├── Float.rst │ │ ├── Folder.rst │ │ ├── Group.rst │ │ ├── Inline.rst │ │ ├── Integer.rst │ │ ├── Linebreak.rst │ │ ├── Link.rst │ │ ├── Media.rst │ │ ├── Palette.rst │ │ ├── Radio.rst │ │ ├── Richtext.rst │ │ ├── Select.rst │ │ ├── Slug.rst │ │ ├── String.rst │ │ ├── Tab.rst │ │ ├── Text.rst │ │ └── Timestamp.rst ├── Glossary │ └── Index.rst ├── Guides │ ├── CropVariants.rst │ ├── DataProcessors.rst │ ├── FluidStyledContent.rst │ ├── Index.rst │ ├── NewContentElementWizard.rst │ ├── OverrideTCA.rst │ ├── RTEConfig.rst │ ├── TypoScriptConstants.rst │ └── UseExistingTCAFields.rst ├── Images │ ├── AdministratorManual │ │ ├── ExtensionConfiguration.png │ │ └── TypoScriptTemplate.png │ ├── ContentelementsManual │ │ ├── Backendpreview.png │ │ ├── ElementMetaData.png │ │ ├── FieldForm.png │ │ ├── Fontawesome.png │ │ ├── MaskBuilder.png │ │ ├── ShortTitle.png │ │ └── Wizard.png │ ├── FieldTypes │ │ ├── Category.svg │ │ ├── CategoryPreview.png │ │ ├── Check.svg │ │ ├── CheckPreview.png │ │ ├── Colorpicker.svg │ │ ├── ColorpickerPreview.png │ │ ├── Content.svg │ │ ├── ContentPreview.png │ │ ├── Date.svg │ │ ├── DatePreview.png │ │ ├── Datetime.svg │ │ ├── DatetimePreview.png │ │ ├── Email.svg │ │ ├── EmailPreview.png │ │ ├── File.svg │ │ ├── FilePreview.png │ │ ├── Float.svg │ │ ├── FloatPreview.png │ │ ├── Folder.svg │ │ ├── FolderPreview.png │ │ ├── Group.svg │ │ ├── GroupPreview.png │ │ ├── Inline.svg │ │ ├── InlinePreview.png │ │ ├── Integer.svg │ │ ├── IntegerPreview.png │ │ ├── Linebreak.svg │ │ ├── LinebreakPreview.png │ │ ├── Link.svg │ │ ├── LinkPreview.png │ │ ├── Media.svg │ │ ├── MediaPreview.png │ │ ├── Palette.svg │ │ ├── PalettePreview.png │ │ ├── Radio.svg │ │ ├── RadioPreview.png │ │ ├── Richtext.svg │ │ ├── RichtextPreview.png │ │ ├── Select.svg │ │ ├── SelectPreview.png │ │ ├── Slug.svg │ │ ├── SlugPreview.png │ │ ├── String.svg │ │ ├── StringPreview.png │ │ ├── Tab.svg │ │ ├── TabPreview.png │ │ ├── Text.svg │ │ ├── TextPreview.png │ │ ├── Timestamp.svg │ │ └── TimestampPreview.png │ ├── Guides │ │ └── MaskContentElement.png │ ├── IntroductionManual │ │ └── BackendScreenshot.png │ ├── Mask6 │ │ ├── checkboxes.png │ │ ├── existing-fields.png │ │ ├── group-resolving.png │ │ ├── image-cropping.png │ │ ├── linebreak-builder.png │ │ ├── linebreak-in-element.png │ │ ├── mask-group-element.png │ │ ├── mask-group.png │ │ ├── palette-builder.png │ │ ├── palette-in-element.png │ │ ├── select-icons1.png │ │ ├── select-icons2.png │ │ └── timestamp.png │ ├── Mask7.1 │ │ ├── AutoConfiguration.png │ │ ├── ColorPicker.png │ │ ├── DescriptionOverrides.png │ │ └── MissingDirectories.png │ ├── Mask7.2 │ │ ├── BodytextAsText.png │ │ ├── CTypeSelect.png │ │ ├── ElementSearch.png │ │ ├── ForeignTableSelect.png │ │ ├── ItemGroups.png │ │ ├── ItemSorting.png │ │ ├── ItemsModule.png │ │ ├── LinkHandler.png │ │ ├── Migrations.png │ │ ├── OverlayIcon.png │ │ └── ValuePicker.png │ ├── Mask7 │ │ ├── AlertError.png │ │ ├── ColorPicker.png │ │ ├── MaskBuilder.png │ │ ├── MultiUse.png │ │ ├── MultiUsePopup.png │ │ ├── Responsive.png │ │ └── Validation.png │ ├── PageTemplates │ │ ├── BackendLayout.png │ │ ├── DataDebug.png │ │ └── PageRecord.png │ └── SponsorsManual │ │ ├── advancedwebmarketing.jpg │ │ ├── checkdomain.jpg │ │ ├── dkd.jpg │ │ ├── eovision.jpg │ │ ├── hotelglueck.jpg │ │ ├── joppnet.jpg │ │ ├── mbit.jpg │ │ ├── mittwald.jpg │ │ ├── pinkdata.jpg │ │ ├── primeit.jpg │ │ ├── profitbricks.jpg │ │ ├── rackspeed.jpg │ │ ├── robhost.jpg │ │ ├── schwabe.jpg │ │ ├── seminaris.jpg │ │ ├── sgalinski.jpg │ │ ├── sitedesign.jpg │ │ ├── skidata.jpg │ │ ├── t3premium.svg │ │ ├── tommoko.jpg │ │ ├── ttg.jpg │ │ ├── webconsulting.png │ │ └── webservices.jpg ├── Includes.txt ├── Index.rst ├── Installation │ ├── Index.rst │ └── _codesnippets │ │ └── _config.yaml ├── Introduction │ └── Index.rst ├── Pagetemplates │ └── Index.rst ├── Sitepackage │ └── Index.rst ├── Sponsors │ └── Index.rst ├── ToDoList │ └── Index.rst ├── Troubleshooting │ └── Index.rst ├── Upgrade │ └── Index.rst └── guides.xml ├── LICENSE ├── Makefile ├── README.md ├── Resources ├── Private │ ├── .htaccess │ ├── Language │ │ ├── locallang.xlf │ │ └── locallang_mask.xlf │ ├── Partials │ │ ├── Edit.html │ │ ├── Element.html │ │ ├── Form.html │ │ ├── Form │ │ │ ├── Description.html │ │ │ ├── Key.html │ │ │ ├── KeySelect.html │ │ │ ├── Label.html │ │ │ ├── OverrideDescription.html │ │ │ └── OverrideLabel.html │ │ ├── List.html │ │ └── List │ │ │ ├── Footer.html │ │ │ └── Header.html │ └── Templates │ │ ├── Ajax │ │ └── ShowHtml.html │ │ └── Wizard │ │ └── Main.html └── Public │ ├── Fonts │ ├── iconpicker.eot │ ├── iconpicker.svg │ ├── iconpicker.ttf │ └── iconpicker.woff │ ├── Icons │ ├── Extension.svg │ ├── Fieldtypes │ │ ├── Category.svg │ │ ├── Check.svg │ │ ├── Colorpicker.svg │ │ ├── Content.svg │ │ ├── Date.svg │ │ ├── Datetime.svg │ │ ├── Email.svg │ │ ├── File.svg │ │ ├── Float.svg │ │ ├── Folder.svg │ │ ├── Group.svg │ │ ├── Inline.svg │ │ ├── Integer.svg │ │ ├── Linebreak.svg │ │ ├── Link.svg │ │ ├── Media.svg │ │ ├── Palette.svg │ │ ├── Radio.svg │ │ ├── Richtext.svg │ │ ├── Select.svg │ │ ├── Slug.svg │ │ ├── String.svg │ │ ├── Tab.svg │ │ ├── Text.svg │ │ └── Timestamp.svg │ ├── MaskUkraine.svg │ └── module-mask_wizard.svg │ ├── Images │ ├── Logo_TVconverter.png │ ├── Logo_WEBprofil_T3camp_druck.png │ ├── Logo_WEBprofil_T3camp_druck_Kopie_2.png │ ├── banner.jpg │ ├── empty.svg │ ├── github_logo.svg │ ├── legacy-icon.gif │ └── verified.svg │ ├── JavaScript │ └── mask.js │ └── Styles │ ├── Backend │ └── backend.css │ ├── disable-dark-mode.css │ ├── mask.css │ └── mask.css.map ├── Tests └── Unit │ ├── CodeGenerator │ ├── TcaCodeGeneratorTest.php │ └── TypoScriptCodeGeneratorTest.php │ ├── ConfigurationLoader │ └── FakeConfigurationLoader.php │ ├── Controller │ └── FieldsControllerTest.php │ ├── Definition │ ├── ArrayDefinitionSorterTest.php │ ├── ElementDefinitionCollectionTest.php │ ├── SqlColumnDefinitionTest.php │ ├── TableDefinitionCollectionTest.php │ └── TcaFieldDefinitionTest.php │ ├── Domain │ └── Repository │ │ └── StorageRepositoryTest.php │ ├── Event │ ├── MaskAfterElementDeletedEventTest.php │ ├── MaskAfterElementSavedEventTest.php │ └── MaskAllowedFieldsEventTest.php │ ├── Fixtures │ ├── Configuration │ │ ├── ContentElements │ │ │ ├── a.json │ │ │ ├── b.json │ │ │ ├── c.json │ │ │ ├── d.json │ │ │ └── e.json │ │ ├── legacyRte.json │ │ ├── mask.json │ │ ├── missingDefaults.json │ │ └── orphanTables.json │ ├── Defaults.php │ ├── FieldGroups.php │ ├── Tabs │ │ ├── check.php │ │ ├── content.php │ │ ├── date.php │ │ ├── datetime.php │ │ ├── file.php │ │ ├── float.php │ │ ├── group.php │ │ ├── inline.php │ │ ├── integer.php │ │ ├── linebreak.php │ │ ├── link.php │ │ ├── palette.php │ │ ├── radio.php │ │ ├── richtext.php │ │ ├── select.php │ │ ├── string.php │ │ ├── tab.php │ │ ├── text.php │ │ └── timestamp.php │ ├── TcaFields.php │ └── Templates │ │ ├── Uc_first.html │ │ ├── UpperExists.html │ │ └── under_scored.html │ ├── Helper │ └── InlineHelperTest.php │ ├── Loader │ ├── JsonLoaderTest.php │ └── JsonSplitLoaderTest.php │ ├── Migrations │ ├── ConfigCleanerMigrationTest.php │ ├── DefaultTcaMigrationTest.php │ ├── DescriptionsByElementMigrationTest.php │ ├── OrphanTableMigrationTest.php │ └── RteMigrationTest.php │ ├── PackageManagerTrait.php │ ├── StorageRepositoryCreatorTrait.php │ └── Utility │ ├── AffixUtilityTest.php │ ├── DateUtilityTest.php │ ├── OverrideFieldsUtilityTest.php │ ├── TcaConverterTest.php │ └── TemplatePathUtilityTest.php ├── composer.json ├── ext_conf_template.txt ├── ext_emconf.php ├── ext_localconf.php └── ext_tables.sql /.crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /Resources/Private/Language/ 3 | translation: /%original_path%/%two_letters_code%.%original_file_name% 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | charset = utf-8 9 | end_of_line = lf 10 | indent_style = space 11 | indent_size = 4 12 | insert_final_newline = true 13 | trim_trailing_whitespace = true 14 | 15 | # TS/JS-Files 16 | [*.{ts,js}] 17 | indent_size = 2 18 | 19 | [*.neon] 20 | indent_size = 2 21 | 22 | # JSON-Files 23 | [*.json] 24 | indent_style = tab 25 | 26 | # ReST-Files 27 | [*.rst] 28 | indent_size = 3 29 | max_line_length = 80 30 | 31 | # YAML-Files 32 | [*.{yaml,yml}] 33 | indent_size = 2 34 | 35 | # package.json 36 | # .travis.yml 37 | [{package.json,.travis.yml}] 38 | indent_size = 2 39 | 40 | # XLF-Files 41 | [*.xlf] 42 | indent_style = tab 43 | 44 | # SQL-Files 45 | [*.sql] 46 | indent_style = tab 47 | indent_size = 2 48 | 49 | # .htaccess 50 | [{_.htaccess,.htaccess}] 51 | indent_style = tab 52 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [nhovratov, gernott] 2 | -------------------------------------------------------------------------------- /.github/workflows/documentation.yml: -------------------------------------------------------------------------------- 1 | name: test documentation 2 | 3 | on: [ push, pull_request ] 4 | 5 | jobs: 6 | tests: 7 | name: documentation 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v4 12 | 13 | - name: Test if the documentation will render without warnings 14 | run: | 15 | mkdir -p Documentation-GENERATED-temp \ 16 | && docker run --rm --pull always -v $(pwd):/project \ 17 | ghcr.io/typo3-documentation/render-guides:latest --config=Documentation --no-progress --fail-on-log 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | *.iml 3 | .Build/ 4 | Build/node_modules/ 5 | composer.lock 6 | var/ 7 | Build/testing-docker/.env 8 | Build/phpunit/.phpunit.result.cache 9 | .phpunit.result.cache 10 | .php_cs.cache 11 | .php-cs-fixer.cache 12 | Documentation-GENERATED-temp/ 13 | .env 14 | .vscode 15 | .cache/ 16 | .DS_Store 17 | -------------------------------------------------------------------------------- /Build/Sources/js/components/colorpicker.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import ColorPicker from '@typo3/backend/color-picker.js'; 3 | import $ from 'jquery'; 4 | 5 | export default Vue.component( 6 | 'colorpicker', 7 | { 8 | props: { 9 | global: Object, 10 | tcaKey: String, 11 | }, 12 | mounted: function () { 13 | ColorPicker.initialize(); 14 | $(this.$refs['colorpicker']).minicolors('settings', { 15 | changeDelay: 200, 16 | change: function () { 17 | this.global.activeField.tca[this.tcaKey] = $(this.$refs['colorpicker']).data('minicolorsLastChange')['value']; 18 | }.bind(this) 19 | }); 20 | }, 21 | methods: { 22 | value: function () { return this.global.activeField.tca[this.tcaKey]; }, 23 | }, 24 | template: ` 25 |
26 | 31 | 32 |
33 | ` 34 | } 35 | ); 36 | -------------------------------------------------------------------------------- /Build/Sources/js/components/element-key.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | export default Vue.component( 4 | 'element-key', 5 | { 6 | props: { 7 | element: Object, 8 | mode: String, 9 | }, 10 | mounted: function () { 11 | if (this.element.key === '') { 12 | this.$refs.elementKey.focus(); 13 | } 14 | }, 15 | template: ` 16 | 24 | ` 25 | } 26 | ); 27 | -------------------------------------------------------------------------------- /Build/Sources/js/components/field-key.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | export default Vue.component( 4 | 'field-key', 5 | { 6 | props: { 7 | global: Object, 8 | validateKey: Function, 9 | loadField: Function, 10 | }, 11 | updated: function () { 12 | if (this.global.activeField.key === this.global.maskPrefix) { 13 | this.$refs.fieldKey.focus(); 14 | } 15 | }, 16 | methods: { 17 | onInput: function () { 18 | if (this.validateKey(this.global.activeField)) { 19 | this.loadField(); 20 | } 21 | } 22 | }, 23 | template: ` 24 | 33 | ` 34 | } 35 | ); 36 | -------------------------------------------------------------------------------- /Build/Sources/js/components/field.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | export default Vue.component( 4 | 'field', 5 | { 6 | props: { 7 | type: Object, 8 | addField: Function, 9 | typo3Version: Number, 10 | optionalExtensionStatus: Object, 11 | }, 12 | template: ` 13 |
  • 14 |
    15 |
    16 |
    17 |
  • 18 | ` 19 | } 20 | ); 21 | -------------------------------------------------------------------------------- /Build/Sources/js/components/splash-screen.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | 3 | export default Vue.component( 4 | 'splashscreen', 5 | { 6 | props: { 7 | loaded: Boolean, 8 | logoPath: String, 9 | }, 10 | template: ` 11 | 12 |
    13 |
    14 |
    15 |
    16 |
    17 | 18 |

    #StandWithUkraine

    19 |
    20 |
    21 | ` 22 | } 23 | ); 24 | -------------------------------------------------------------------------------- /Build/Sources/scss/_button.scss: -------------------------------------------------------------------------------- 1 | .btn-mask { 2 | background-color: var(--mask-webprofil); 3 | border-color: var(--mask-webprofil-10); 4 | color: #fff; 5 | 6 | &:hover { 7 | color: #fff; 8 | background-color: var(--mask-webprofil-5); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Build/Sources/scss/_callout.scss: -------------------------------------------------------------------------------- 1 | .mask-field-form .callout { 2 | margin-top: 0; 3 | margin-bottom: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /Build/Sources/scss/_checkbox.scss: -------------------------------------------------------------------------------- 1 | .form-switch.checkbox-invert .form-check-input { 2 | --typo3-form-check-mask-position: right center; 3 | --typo3-form-check-color: var(--typo3-form-check-checked-color); 4 | --typo3-form-check-bg: var(--typo3-form-check-checked-bg); 5 | --typo3-form-check-border-color: var(--typo3-form-check-checked-border-color); 6 | } 7 | 8 | .form-switch.checkbox-invert .form-check-input:checked { 9 | --typo3-form-check-mask-position: left center; 10 | --typo3-form-check-color: var(--typo3-input-color); 11 | --typo3-form-check-bg: var(--typo3-input-bg); 12 | --typo3-form-check-border-color: var(--typo3-input-border-color); 13 | } 14 | -------------------------------------------------------------------------------- /Build/Sources/scss/_edit.scss: -------------------------------------------------------------------------------- 1 | @use "sass:math"; 2 | 3 | .mask-edit { 4 | padding: 10px; 5 | 6 | @media screen and (min-width: $bp-edit-flex) { 7 | display: flex; 8 | flex-wrap: wrap; 9 | } 10 | 11 | @media screen and (min-width: $bp-laptop) { 12 | flex-wrap: nowrap; 13 | } 14 | } 15 | 16 | .col-xl-6 { 17 | @media screen and (min-width: $bp-desktop) { 18 | width: 50%; 19 | } 20 | } 21 | 22 | .col-xl-4 { 23 | @media screen and (min-width: $bp-desktop) { 24 | width: percentage(math.div(1, 3)); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Build/Sources/scss/_field-form.scss: -------------------------------------------------------------------------------- 1 | .mask-field-form { 2 | background: var(--mask-default-bg); 3 | margin-bottom: 0; 4 | width: 969px; 5 | max-width: 100%; 6 | 7 | &__inner { 8 | position: sticky; 9 | top: 10px; 10 | } 11 | 12 | .mask-shared-info { 13 | font-weight: bold; 14 | border-left: 3px solid #6daae0; 15 | background: #ebf3fb; 16 | padding: 4px 10px; 17 | 18 | &:before { 19 | font-family: FontAwesome; 20 | font-size: 12.5px; 21 | text-align: center; 22 | content: "\f06a"; 23 | color: #6daae0; 24 | display: inline-block; 25 | margin-right: 5px; 26 | } 27 | 28 | small { 29 | display: block; 30 | font-weight: initial; 31 | margin-left: 20px; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Build/Sources/scss/_field-group.scss: -------------------------------------------------------------------------------- 1 | .mask-field-group { 2 | position: relative; 3 | margin-bottom: 10px; 4 | 5 | &:hover { 6 | .mask-field-group { 7 | &__label { 8 | color: var(--mask-default-color); 9 | } 10 | } 11 | } 12 | 13 | &__label { 14 | font-size: 10px; 15 | position: absolute; 16 | right: 10px; 17 | bottom: 5px; 18 | color: var(--mask-field-group-color); 19 | pointer-events: none; 20 | } 21 | 22 | &__list { 23 | background-color: var(--mask-default-bg); 24 | padding: 10px; 25 | border: 1px solid var(--mask-border-color); 26 | list-style: none; 27 | margin: 0; 28 | 29 | > div { 30 | display: flex; 31 | flex-wrap: wrap; 32 | } 33 | 34 | li { 35 | background: var(--mask-default-bg); 36 | color: var(--mask-field-group-item-color); 37 | font-family: 'Source Sans Pro', sans-serif; 38 | font-size: 1.2em; 39 | font-weight: 700; 40 | margin: 2px 3px; 41 | 42 | img { 43 | box-shadow: 1px 1px 1px 1px rgba(#000, 0.3); 44 | } 45 | 46 | &:hover { 47 | img { 48 | filter: brightness(0.85); 49 | } 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Build/Sources/scss/_field-list.scss: -------------------------------------------------------------------------------- 1 | .mask-field-list { 2 | background: none; 3 | height: auto; 4 | margin: 0; 5 | border: 1px dashed var(--mask-field-list-border); 6 | padding: 10px; 7 | background-color: var(--mask-default-bg); 8 | 9 | &--empty { 10 | background: url('../Images/empty.svg') no-repeat; 11 | background-position: center 35%; 12 | background-size: 300px; 13 | background-color: var(--mask-default-bg); 14 | } 15 | 16 | > .dragtarget { 17 | display: block; 18 | min-height: 438px; 19 | padding: 0 0 40px; 20 | margin: 0; 21 | list-style: none; 22 | } 23 | 24 | .mask-field--selectable { 25 | width: 100%; 26 | border: 1px dashed var(--mask-border-color); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Build/Sources/scss/_fields.scss: -------------------------------------------------------------------------------- 1 | .mask-fields { 2 | background-color: var(--mask-bg-light); 3 | border: 1px solid var(--mask-border-color); 4 | padding: 8px 15px 20px; 5 | margin-bottom: 20px; 6 | width: 480px; 7 | max-width: 100%; 8 | 9 | @media screen and (min-width: $bp-edit-flex) { 10 | flex-shrink: 0; 11 | margin-right: 10px; 12 | } 13 | 14 | @media screen and (min-width: $bp-laptop) { 15 | width: 380px; 16 | } 17 | 18 | @media screen and (min-width: $bp-desktop) { 19 | width: 465px; 20 | margin-bottom: 0; 21 | } 22 | 23 | &__label { 24 | margin-bottom: 5px; 25 | font-size: 16px; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Build/Sources/scss/_form-control-icon.scss: -------------------------------------------------------------------------------- 1 | .form-control-icon { 2 | position: absolute; 3 | top: 50%; 4 | left: 15px; 5 | transform: translate(0, -50%); 6 | z-index: 1; 7 | pointer-events: none; 8 | 9 | + .form-control, 10 | + .form-control-clearable .form-control { 11 | padding-left: 3.25em; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Build/Sources/scss/_item-table.scss: -------------------------------------------------------------------------------- 1 | .item-table { 2 | th:first-child, 3 | th:last-child { 4 | width: 50px; 5 | } 6 | 7 | .js-draggable { 8 | cursor: pointer; 9 | } 10 | 11 | .sortable-chosen { 12 | td { 13 | background-color: rgba(#000, 0.1); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Build/Sources/scss/_multiple-side-by-side.scss: -------------------------------------------------------------------------------- 1 | .mask-multiple-side-by-side-list { 2 | max-height: 450px; 3 | overflow-y: scroll; 4 | 5 | .list-group-item { 6 | cursor: pointer; 7 | user-select: none; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Build/Sources/scss/_overrides.scss: -------------------------------------------------------------------------------- 1 | .module-body { 2 | padding: 0; 3 | } 4 | -------------------------------------------------------------------------------- /Build/Sources/scss/_reset-button.scss: -------------------------------------------------------------------------------- 1 | .reset-button { 2 | margin: 10px 0; 3 | } 4 | -------------------------------------------------------------------------------- /Build/Sources/scss/_root.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | color-scheme: light dark; 3 | 4 | // basic colors (previously scss variables) 5 | --mask-bg-light: light-dark(#fafafa, #050505); 6 | --mask-bg-medium: light-dark(#efefef, #101010); 7 | --mask-bg-dark: light-dark(#dedede, #212121); 8 | --mask-color: #D4372F; 9 | --mask-webprofil: #cb002d; 10 | --mask-webprofil-5: #{darken(#cb002d, 5)}; 11 | --mask-webprofil-10: #{darken(#cb002d, 10)}; 12 | --mask-highlight-color: light-dark(#eaf4fd, #07070a); 13 | --mask-color-inline-border: #9e97d1; 14 | --mask-color-palette-border: #4e4e4e; 15 | --mask-border-color: light-dark(#ccc, #333); 16 | --mask-default-bg: light-dark(#fff, #000); 17 | --mask-default-color: light-dark(#000, #fff); 18 | 19 | // some colors for specific elements/areas 20 | --mask-error-bg: #c83c3c; 21 | --mask-field-list-border: light-dark(#bbb, #444); 22 | --mask-sidebar-toggle-bg: light-dark(#ededed, #121212); 23 | --mask-sidebar-toggle-bg-hover: light-dark(#e1e0e0, #1e1f1f); 24 | --mask-field-group-color: light-dark(#555, #aaa); 25 | --mask-field-group-item-color: light-dark(#4c4c4c, #b3b3b3); 26 | } 27 | -------------------------------------------------------------------------------- /Build/Sources/scss/_setup-incomplete.scss: -------------------------------------------------------------------------------- 1 | .mask-setup-incomplete { 2 | display: flex; 3 | flex-direction: column; 4 | justify-content: center; 5 | align-items: center; 6 | height: 100%; 7 | 8 | &__content { 9 | max-width: 750px; 10 | margin: 0 auto 20px; 11 | } 12 | 13 | &__text { 14 | text-align: center; 15 | font-size: 22px; 16 | } 17 | 18 | h1 { 19 | font-size: 50px; 20 | line-height: 50px; 21 | } 22 | 23 | &__form { 24 | width: 850px; 25 | max-width: 100%; 26 | border: 1px solid var(--mask-border-color); 27 | padding: 20px; 28 | 29 | .control-label { 30 | padding-top: 7px; 31 | margin-bottom: 0; 32 | text-align: right; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Build/Sources/scss/_spinner.scss: -------------------------------------------------------------------------------- 1 | .half-circle-spinner, .half-circle-spinner * { 2 | box-sizing: border-box; 3 | } 4 | 5 | .half-circle-spinner { 6 | width: 60px; 7 | height: 60px; 8 | border-radius: 100%; 9 | position: relative; 10 | margin-bottom: 20px; 11 | } 12 | 13 | .half-circle-spinner .circle { 14 | content: ""; 15 | position: absolute; 16 | width: 100%; 17 | height: 100%; 18 | border-radius: 100%; 19 | border: calc(60px / 10) solid transparent; 20 | } 21 | 22 | .half-circle-spinner .circle.circle-1 { 23 | border-top-color: var(--mask-color); 24 | animation: half-circle-spinner-animation 1s infinite; 25 | } 26 | 27 | .half-circle-spinner .circle.circle-2 { 28 | border-bottom-color: var(--mask-color); 29 | animation: half-circle-spinner-animation 1s infinite alternate; 30 | } 31 | 32 | @keyframes half-circle-spinner-animation { 33 | 0% { 34 | transform: rotate(0deg); 35 | 36 | } 37 | 100% { 38 | transform: rotate(360deg); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Build/Sources/scss/_splashscreen.scss: -------------------------------------------------------------------------------- 1 | .mask-splashscreen { 2 | position: absolute; 3 | top: 0; 4 | right: 0; 5 | bottom: 0; 6 | left: 0; 7 | z-index: 100; 8 | background-color: var(--mask-default-bg); 9 | display: flex; 10 | justify-content: center; 11 | align-items: center; 12 | flex-direction: column; 13 | 14 | &__logo { 15 | margin-bottom: 5px; 16 | } 17 | 18 | &__label { 19 | font-size: 65px; 20 | font-weight: 600; 21 | } 22 | } 23 | 24 | .fade-leave-active { 25 | transition: opacity 0.5s; 26 | } 27 | 28 | .fade-leave-to { 29 | opacity: 0; 30 | } 31 | -------------------------------------------------------------------------------- /Build/Sources/scss/_templa.scss: -------------------------------------------------------------------------------- 1 | .templa { 2 | text-align: left; 3 | 4 | &__wrap { 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | 9 | @media screen and (min-width: $bp-desktop) { 10 | justify-content: flex-start; 11 | } 12 | } 13 | 14 | &__image { 15 | margin-right: 10px; 16 | height: auto; 17 | 18 | @media screen and (min-width: $bp-desktop) { 19 | width: 85px; 20 | } 21 | } 22 | 23 | &__text { 24 | font-size: 11px; 25 | line-height: 1.2; 26 | margin-bottom: 0; 27 | 28 | @media screen and (min-width: $bp-edit-flex) { 29 | font-size: 12px; 30 | } 31 | 32 | @media screen and (min-width: $bp-desktop) { 33 | font-size: 11px; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Build/Sources/scss/_utility.scss: -------------------------------------------------------------------------------- 1 | %error { 2 | content: ""; 3 | vertical-align: middle; 4 | mask: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' viewBox='0 0 16 16'%3e%3cg fill='currentColor'%3e%3cpath d='M8 2c3.3 0 6 2.7 6 6s-2.7 6-6 6-6-2.7-6-6 2.7-6 6-6m0-1C4.1 1 1 4.1 1 8s3.1 7 7 7 7-3.1 7-7-3.1-7-7-7z'/%3e%3ccircle cx='8' cy='11' r='1'/%3e%3cpath d='M8.5 9h-1l-.445-4.45A.5.5 0 0 1 7.552 4h.896a.5.5 0 0 1 .497.55L8.5 9z'/%3e%3c/g%3e%3c/svg%3e"); 5 | background-color: var(--mask-error-bg); 6 | background-size: contain; 7 | display: inline-block; 8 | border-radius: 50%; 9 | width: 14px; 10 | height: 14px; 11 | position: absolute; 12 | top: -2px; 13 | left: -3px; 14 | } 15 | 16 | .disable-pointer { 17 | pointer-events: none; 18 | } 19 | 20 | .mb-0 { 21 | margin-bottom: 0; 22 | } 23 | -------------------------------------------------------------------------------- /Build/Sources/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | $bp-edit-flex: 860px; 2 | $bp-laptop: 1100px; 3 | $bp-desktop: 1650px; 4 | -------------------------------------------------------------------------------- /Build/Sources/scss/mask.scss: -------------------------------------------------------------------------------- 1 | @import 'variables'; 2 | @import 'root'; 3 | @import "utility"; 4 | 5 | @import "sidebar"; 6 | @import "field-list"; 7 | @import "field-form"; 8 | @import "fields"; 9 | @import "field-group"; 10 | @import "footer"; 11 | @import "splashscreen"; 12 | @import "list"; 13 | @import "edit"; 14 | @import "elements"; 15 | @import "templa"; 16 | @import "spinner"; 17 | @import "field"; 18 | @import "button"; 19 | @import "callout"; 20 | @import "checkbox"; 21 | @import "reset-button"; 22 | @import "overrides"; 23 | @import "setup-incomplete"; 24 | @import "item-table"; 25 | @import "multiple-side-by-side"; 26 | @import "form-control-icon"; 27 | -------------------------------------------------------------------------------- /Build/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@mask/mask", 3 | "type": "module", 4 | "version": "1.0.0", 5 | "description": "", 6 | "main": "index.js", 7 | "exports": { 8 | "./": "./Sources/js/" 9 | }, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1", 12 | "js": "rollup -c", 13 | "watchjs": "rollup -c -w", 14 | "sass": "sass Sources/scss/mask.scss ../Resources/Public/Styles/mask.css -w" 15 | }, 16 | "author": "", 17 | "license": "ISC", 18 | "dependencies": { 19 | "sass": "^1.43.5", 20 | "vue": "^2.7.14", 21 | "vuedraggable": "^2.24.3" 22 | }, 23 | "devDependencies": { 24 | "@rollup/plugin-commonjs": "^23.0.3", 25 | "@rollup/plugin-node-resolve": "^15.0.1", 26 | "@rollup/plugin-replace": "^5.0.1", 27 | "rollup": "^3.6.0", 28 | "rollup-plugin-minification": "^0.2.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Build/php-cs-fixer.php: -------------------------------------------------------------------------------- 1 | getFinder()->exclude(['var'])->in(__DIR__ . '/..'); 5 | return $config; 6 | -------------------------------------------------------------------------------- /Build/phpstan/phpstan-constants.php: -------------------------------------------------------------------------------- 1 | 2 | 14 | 31 | 32 | 33 | ../../Tests/Unit/ 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Classes/ConfigurationLoader/ConfigurationLoaderInterface.php: -------------------------------------------------------------------------------- 1 | excludedKeys = $keys; 36 | } 37 | 38 | /** 39 | * Sort the given array by keys recursively while taking care of exceptions. 40 | * 41 | * @param array $array 42 | * @return array 43 | */ 44 | public function sort(array $array): array 45 | { 46 | ksort($array); 47 | foreach ($array as $key => $item) { 48 | if (in_array($key, $this->excludedKeys, true)) { 49 | continue; 50 | } 51 | if (is_array($item)) { 52 | $array[$key] = $this->sort($item); 53 | } 54 | } 55 | 56 | return $array; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Classes/Definition/PaletteDefinition.php: -------------------------------------------------------------------------------- 1 | key = $key; 37 | $this->label = $label; 38 | $this->description = $description; 39 | $this->showitem = $showitem; 40 | } 41 | 42 | public function toArray(): array 43 | { 44 | return [ 45 | 'label' => $this->label, 46 | 'description' => $this->description, 47 | 'showitem' => $this->showitem, 48 | ]; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Classes/Definition/SqlColumnDefinition.php: -------------------------------------------------------------------------------- 1 | column = $column; 36 | $this->sqlDefinition = $sqlDefinition; 37 | } 38 | 39 | public function toArray(): array 40 | { 41 | return [ 42 | $this->column => $this->sqlDefinition, 43 | ]; 44 | } 45 | 46 | public function setNull(): void 47 | { 48 | $this->sqlDefinition = trim(str_replace('NOT NULL', '', $this->sqlDefinition)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Classes/Enumeration/Tab.php: -------------------------------------------------------------------------------- 1 | tableDefinitionCollection = $tableDefinitionCollection; 30 | $this->elementKey = $elementKey; 31 | } 32 | 33 | public function getTableDefinitionCollection(): TableDefinitionCollection 34 | { 35 | return $this->tableDefinitionCollection; 36 | } 37 | 38 | public function getElementKey(): string 39 | { 40 | return $this->elementKey; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Classes/Event/MaskAfterElementSavedEvent.php: -------------------------------------------------------------------------------- 1 | tableDefinitionCollection = $tableDefinitionCollection; 31 | $this->elementKey = $elementKey; 32 | $this->isNewElement = $isNewElement; 33 | } 34 | 35 | public function getTableDefinitionCollection(): TableDefinitionCollection 36 | { 37 | return $this->tableDefinitionCollection; 38 | } 39 | 40 | public function getElementKey(): string 41 | { 42 | return $this->elementKey; 43 | } 44 | 45 | public function isNewElement(): bool 46 | { 47 | return $this->isNewElement; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Classes/EventListeners/NestedContentElementsUsedEventListener.php: -------------------------------------------------------------------------------- 1 | getRecord()['colPos'] === 999) { 30 | $event->setUsed(true); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Classes/EventListeners/RegisterIcons.php: -------------------------------------------------------------------------------- 1 | iconRegistry->registerIcon( 37 | 'mask-fieldtype-' . $maskIcon->value, 38 | SvgIconProvider::class, 39 | ['source' => 'EXT:mask/Resources/Public/Icons/Fieldtypes/' . GeneralUtility::underscoredToUpperCamelCase($maskIcon->value) . '.svg'] 40 | ); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Classes/Fluid/FluidTemplateContentObject.php: -------------------------------------------------------------------------------- 1 | cObj->getCurrentTable() === 'pages') { 35 | $data = $variables['data']; 36 | $inlineHelper = GeneralUtility::makeInstance(InlineHelper::class); 37 | $inlineHelper->addFilesToData($data, 'pages'); 38 | $inlineHelper->addIrreToData($data, 'pages', '', 'pages'); 39 | $variables['data'] = $data; 40 | } elseif (!array_key_exists('parentRecord', $variables)) { 41 | $variables['parentRecord'] = $this->cObj->parentRecord['data'] ?? []; 42 | } 43 | 44 | return $variables; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Classes/Loader/LoaderInterface.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'parent' => 'tools', 6 | 'position' => ['after' => 'extensionmanager'], 7 | 'access' => 'user', 8 | 'workspaces' => 'online', 9 | 'path' => '/module/mask', 10 | 'icon' => 'EXT:mask/Resources/Public/Icons/module-mask_wizard.svg', // @todo iconIdentifier 11 | 'labels' => 'LLL:EXT:mask/Resources/Private/Language/locallang_mask.xlf', 12 | 'routes' => [ 13 | '_default' => [ 14 | 'target' => \MASK\Mask\Controller\MaskController::class . '::mainAction', 15 | ], 16 | ], 17 | ], 18 | ]; 19 | -------------------------------------------------------------------------------- /Configuration/ContentSecurityPolicies.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'core', 6 | 'backend', 7 | ], 8 | 'tags' => [ 9 | 'backend.module', 10 | ], 11 | 'imports' => [ 12 | '@mask/mask' => 'EXT:mask/Resources/Public/JavaScript/mask.js', 13 | ], 14 | ]; 15 | -------------------------------------------------------------------------------- /Configuration/Mask/FieldGroups.php: -------------------------------------------------------------------------------- 1 | value => 'input', 10 | FieldType::INTEGER->value => 'input', 11 | FieldType::FLOAT->value => 'input', 12 | FieldType::LINK->value => 'input', 13 | FieldType::EMAIL->value => 'input', 14 | 15 | FieldType::TEXT->value => 'text', 16 | FieldType::RICHTEXT->value => 'text', 17 | 18 | FieldType::DATE->value => 'date', 19 | FieldType::DATETIME->value => 'date', 20 | FieldType::TIMESTAMP->value => 'date', 21 | 22 | FieldType::CHECK->value => 'choice', 23 | FieldType::RADIO->value => 'choice', 24 | FieldType::SELECT->value => 'choice', 25 | FieldType::CATEGORY->value => 'choice', 26 | FieldType::GROUP->value => 'choice', 27 | 28 | FieldType::COLORPICKER->value => 'special', 29 | FieldType::SLUG->value => 'special', 30 | FieldType::FOLDER->value => 'special', 31 | 32 | FieldType::FILE->value => 'repeating', 33 | FieldType::MEDIA->value => 'repeating', 34 | FieldType::INLINE->value => 'repeating', 35 | FieldType::CONTENT->value => 'repeating', 36 | 37 | FieldType::TAB->value => 'structure', 38 | FieldType::PALETTE->value => 'structure', 39 | FieldType::LINEBREAK->value => 'structure', 40 | ]; 41 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/category.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | ], 10 | [ 11 | 'config.relationship' => 12, 12 | ], 13 | [ 14 | 'config.treeConfig.startingPoints' => 12, 15 | ], 16 | ], 17 | Tab::VALIDATION->value => [ 18 | [ 19 | 'config.minitems' => 6, 20 | 'config.maxitems' => 6, 21 | 'config.exclusiveKeys' => 6, 22 | ], 23 | ], 24 | Tab::APPEARANCE->value => [ 25 | [ 26 | 'config.treeConfig.appearance.showHeader' => 6, 27 | 'config.treeConfig.appearance.expandAll' => 6, 28 | ], 29 | [ 30 | 'config.treeConfig.appearance.nonSelectableLevels' => 6, 31 | ], 32 | ], 33 | Tab::LOCALIZATION->value => [ 34 | [ 35 | 'config.behaviour.allowLanguageSynchronization' => 6, 36 | ], 37 | ], 38 | Tab::EXTENDED->value => [ 39 | [ 40 | 'config.size' => 6, 41 | ], 42 | ], 43 | ]; 44 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/check.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.renderType' => 6, 9 | 'config.default' => 6, 10 | ], 11 | [ 12 | 'config.items' => 12, 13 | ], 14 | ], 15 | Tab::LOCALIZATION->value => [ 16 | [ 17 | 'l10n_mode' => 12, 18 | ], 19 | [ 20 | 'config.behaviour.allowLanguageSynchronization' => 6, 21 | ], 22 | ], 23 | Tab::EXTENDED->value => [ 24 | [ 25 | 'config.cols' => 6, 26 | ], 27 | ], 28 | ]; 29 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/colorpicker.php: -------------------------------------------------------------------------------- 1 | value => [ 8 | [ 9 | 'config.default' => 6, 10 | 'config.placeholder' => 6, 11 | ], 12 | [ 13 | 'config.size' => 6, 14 | ], 15 | ], 16 | Tab::VALUE_PICKER->value => [ 17 | [ 18 | 'config.valuePicker.mode' => 6, 19 | 'config.valuePicker.items' => 12, 20 | ], 21 | ], 22 | Tab::LOCALIZATION->value => [ 23 | [ 24 | 'l10n_mode' => 12, 25 | ], 26 | [ 27 | 'config.behaviour.allowLanguageSynchronization' => 6, 28 | ], 29 | ], 30 | Tab::EXTENDED->value => [ 31 | [ 32 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 33 | 'config.mode' => 6, 34 | ], 35 | ], 36 | ]; 37 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/date.php: -------------------------------------------------------------------------------- 1 | value => [ 8 | [ 9 | 'config.default' => 6, 10 | 'config.placeholder' => 6, 11 | ], 12 | ], 13 | Tab::VALIDATION->value => [ 14 | [ 15 | 'config.range.lower' => 6, 16 | 'config.range.upper' => 6, 17 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 18 | ], 19 | ], 20 | Tab::LOCALIZATION->value => [ 21 | [ 22 | 'l10n_mode' => 12, 23 | ], 24 | [ 25 | 'config.behaviour.allowLanguageSynchronization' => 6, 26 | ], 27 | ], 28 | Tab::EXTENDED->value => [ 29 | [ 30 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 31 | 'config.mode' => 6, 32 | ], 33 | ], 34 | ]; 35 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/datetime.php: -------------------------------------------------------------------------------- 1 | value => [ 8 | [ 9 | 'config.default' => 6, 10 | 'config.placeholder' => 6, 11 | ], 12 | ], 13 | Tab::VALIDATION->value => [ 14 | [ 15 | 'config.range.lower' => 6, 16 | 'config.range.upper' => 6, 17 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 18 | ], 19 | ], 20 | Tab::LOCALIZATION->value => [ 21 | [ 22 | 'l10n_mode' => 12, 23 | ], 24 | [ 25 | 'config.behaviour.allowLanguageSynchronization' => 6, 26 | ], 27 | ], 28 | Tab::EXTENDED->value => [ 29 | [ 30 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 31 | 'config.mode' => 6, 32 | ], 33 | ], 34 | ]; 35 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/email.php: -------------------------------------------------------------------------------- 1 | value => [ 8 | [ 9 | 'config.default' => 6, 10 | 'config.placeholder' => 6, 11 | ], 12 | [ 13 | 'config.size' => 6, 14 | ], 15 | ], 16 | Tab::VALIDATION->value => [ 17 | [ 18 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 19 | 'config.eval.unique' => 6, 20 | 'config.eval.uniqueInPid' => 6, 21 | ], 22 | ], 23 | Tab::LOCALIZATION->value => [ 24 | [ 25 | 'l10n_mode' => 12, 26 | ], 27 | [ 28 | 'config.behaviour.allowLanguageSynchronization' => 6, 29 | ], 30 | ], 31 | Tab::EXTENDED->value => [ 32 | [ 33 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 34 | 'config.mode' => 6, 35 | 'config.autocomplete' => 6, 36 | ], 37 | ], 38 | ]; 39 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/float.php: -------------------------------------------------------------------------------- 1 | getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 8 | ]; 9 | 10 | if ((new Typo3Version())->getMajorVersion() === 11) { 11 | $validation['config.max'] = 6; 12 | } 13 | 14 | return [ 15 | Tab::GENERAL->value => [ 16 | [ 17 | 'config.default' => 6, 18 | 'config.placeholder' => 6, 19 | ], 20 | [ 21 | 'config.size' => 6, 22 | ], 23 | ], 24 | Tab::VALIDATION->value => [ 25 | $validation, 26 | [ 27 | 'config.range.lower' => 6, 28 | 'config.range.upper' => 6, 29 | ], 30 | ], 31 | Tab::FIELD_CONTROL->value => [ 32 | [ 33 | 'config.slider.step' => 6, 34 | 'config.slider.width' => 6, 35 | ], 36 | ], 37 | Tab::VALUE_PICKER->value => [ 38 | [ 39 | 'config.valuePicker.mode' => 6, 40 | 'config.valuePicker.items' => 12, 41 | ], 42 | ], 43 | Tab::LOCALIZATION->value => [ 44 | [ 45 | 'l10n_mode' => 12, 46 | ], 47 | [ 48 | 'config.behaviour.allowLanguageSynchronization' => 6, 49 | ], 50 | ], 51 | Tab::EXTENDED->value => [ 52 | [ 53 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 54 | 'config.mode' => 6, 55 | 'config.autocomplete' => 6, 56 | ], 57 | ], 58 | ]; 59 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/folder.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.elementBrowserEntryPoints._default' => 6, 9 | ], 10 | ], 11 | Tab::VALIDATION->value => [ 12 | [ 13 | 'config.minitems' => 6, 14 | 'config.maxitems' => 6, 15 | ], 16 | ], 17 | Tab::LOCALIZATION->value => [ 18 | [ 19 | 'l10n_mode' => 12, 20 | ], 21 | [ 22 | 'config.behaviour.allowLanguageSynchronization' => 6, 23 | ], 24 | ], 25 | Tab::EXTENDED->value => [ 26 | [ 27 | 'config.size' => 6, 28 | 'config.autoSizeMax' => 6, 29 | ], 30 | [ 31 | 'config.multiple' => 6, 32 | ], 33 | ], 34 | ]; 35 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/group.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.allowed' => 6, 9 | 'config.elementBrowserEntryPoints._default' => 6, 10 | ], 11 | ], 12 | Tab::VALIDATION->value => [ 13 | [ 14 | 'config.minitems' => 6, 15 | 'config.maxitems' => 6, 16 | ], 17 | ], 18 | Tab::FIELD_CONTROL->value => [ 19 | [ 20 | 'config.fieldControl' => 12, 21 | 'config.fieldControl.editPopup.disabled' => 4, 22 | 'config.fieldControl.addRecord.disabled' => 4, 23 | 'config.fieldControl.listModule.disabled' => 4, 24 | 'config.fieldControl.elementBrowser.disabled' => 4, 25 | 'config.fieldControl.insertClipboard.disabled' => 4, 26 | ], 27 | [ 28 | 'config.fieldWizard' => 12, 29 | 'config.fieldWizard.recordsOverview.disabled' => 4, 30 | 'config.fieldWizard.tableList.disabled' => 4, 31 | ], 32 | ], 33 | Tab::LOCALIZATION->value => [ 34 | [ 35 | 'l10n_mode' => 12, 36 | ], 37 | [ 38 | 'config.behaviour.allowLanguageSynchronization' => 6, 39 | ], 40 | ], 41 | Tab::EXTENDED->value => [ 42 | [ 43 | 'config.size' => 6, 44 | 'config.autoSizeMax' => 6, 45 | ], 46 | [ 47 | 'config.multiple' => 6, 48 | ], 49 | ], 50 | ]; 51 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/integer.php: -------------------------------------------------------------------------------- 1 | getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 8 | ]; 9 | 10 | if ((new Typo3Version())->getMajorVersion() === 11) { 11 | $validation['config.max'] = 6; 12 | } 13 | 14 | return [ 15 | Tab::GENERAL->value => [ 16 | [ 17 | 'config.default' => 6, 18 | 'config.placeholder' => 6, 19 | ], 20 | [ 21 | 'config.size' => 6, 22 | ], 23 | ], 24 | Tab::VALIDATION->value => [ 25 | $validation, 26 | [ 27 | 'config.range.lower' => 6, 28 | 'config.range.upper' => 6, 29 | ], 30 | ], 31 | Tab::FIELD_CONTROL->value => [ 32 | [ 33 | 'config.slider.step' => 6, 34 | 'config.slider.width' => 6, 35 | ], 36 | ], 37 | Tab::VALUE_PICKER->value => [ 38 | [ 39 | 'config.valuePicker.mode' => 6, 40 | 'config.valuePicker.items' => 12, 41 | ], 42 | ], 43 | Tab::LOCALIZATION->value => [ 44 | [ 45 | 'l10n_mode' => 12, 46 | ], 47 | [ 48 | 'config.behaviour.allowLanguageSynchronization' => 6, 49 | ], 50 | ], 51 | Tab::EXTENDED->value => [ 52 | [ 53 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 54 | 'config.mode' => 6, 55 | 'config.autocomplete' => 6, 56 | ], 57 | ], 58 | ]; 59 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/linebreak.php: -------------------------------------------------------------------------------- 1 | getMajorVersion() < 12) { 7 | $linkHandler = [ 8 | 'config.fieldControl.linkPopup.options.blindLinkOptions' => 12, 9 | ]; 10 | $validation = [ 11 | 'config.eval.required' => 6, 12 | 'config.fieldControl.linkPopup.options.allowedExtensions' => 6, 13 | ]; 14 | } else { 15 | $linkHandler = [ 16 | 'config.allowedTypes' => 12, 17 | ]; 18 | $validation = [ 19 | 'config.required' => 6, 20 | 'config.appearance.allowedFileExtensions' => 6, 21 | ]; 22 | } 23 | 24 | return [ 25 | Tab::GENERAL->value => [ 26 | [ 27 | 'config.placeholder' => 6, 28 | ], 29 | [ 30 | 'config.size' => 6, 31 | ], 32 | ], 33 | Tab::VALIDATION->value => [ 34 | $validation, 35 | ], 36 | Tab::FIELD_CONTROL->value => [ 37 | $linkHandler, 38 | ], 39 | Tab::LOCALIZATION->value => [ 40 | [ 41 | 'l10n_mode' => 12, 42 | ], 43 | [ 44 | 'config.behaviour.allowLanguageSynchronization' => 6, 45 | ], 46 | ], 47 | Tab::EXTENDED->value => [ 48 | [ 49 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 50 | 'config.mode' => 6, 51 | ], 52 | ], 53 | ]; 54 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/palette.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/radio.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | ], 10 | [ 11 | 'config.items' => 12, 12 | ], 13 | ], 14 | Tab::LOCALIZATION->value => [ 15 | [ 16 | 'l10n_mode' => 12, 17 | ], 18 | [ 19 | 'config.behaviour.allowLanguageSynchronization' => 6, 20 | ], 21 | ], 22 | ]; 23 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/richtext.php: -------------------------------------------------------------------------------- 1 | getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 8 | ]; 9 | 10 | return [ 11 | Tab::GENERAL->value => [ 12 | [ 13 | 'config.richtextConfiguration' => 6, 14 | ], 15 | [ 16 | 'config.default' => 6, 17 | ], 18 | ], 19 | Tab::VALIDATION->value => [ 20 | $validation, 21 | ], 22 | Tab::LOCALIZATION->value => [ 23 | [ 24 | 'l10n_mode' => 12, 25 | ], 26 | [ 27 | 'config.behaviour.allowLanguageSynchronization' => 6, 28 | ], 29 | ], 30 | ]; 31 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/slug.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.eval.slug' => 12, 9 | ], 10 | ], 11 | Tab::GENERATOR->value => [ 12 | [ 13 | 'config.generatorOptions.fields' => 12, 14 | 'config.generatorOptions.replacements' => 12, 15 | ], 16 | [ 17 | 'config.generatorOptions.fieldSeparator' => 6, 18 | 'config.fallbackCharacter' => 6, 19 | ], 20 | [ 21 | 'config.prependSlash' => 6, 22 | ], 23 | ], 24 | ]; 25 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/tab.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /Configuration/Mask/Tabs/timestamp.php: -------------------------------------------------------------------------------- 1 | value => [ 8 | [ 9 | (new Typo3Version())->getMajorVersion() === 11 ? 'config.eval' : 'config.format' => 6, 10 | ], 11 | [ 12 | 'config.default' => 6, 13 | 'config.placeholder' => 6, 14 | ], 15 | ], 16 | Tab::VALIDATION->value => [ 17 | [ 18 | 'config.range.lower' => 6, 19 | 'config.range.upper' => 6, 20 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.required' : 'config.eval.required' => 6, 21 | ], 22 | ], 23 | Tab::LOCALIZATION->value => [ 24 | [ 25 | 'l10n_mode' => 12, 26 | ], 27 | [ 28 | 'config.behaviour.allowLanguageSynchronization' => 6, 29 | ], 30 | ], 31 | Tab::EXTENDED->value => [ 32 | [ 33 | (new Typo3Version())->getMajorVersion() > 11 ? 'config.nullable' : 'config.eval.null' => 6, 34 | 'config.mode' => 6, 35 | ], 36 | ], 37 | ]; 38 | -------------------------------------------------------------------------------- /Configuration/Services.php: -------------------------------------------------------------------------------- 1 | addCompilerPass(new LoaderPass('mask.loader')); 14 | $containerBuilder->registerForAutoconfiguration(MigrationInterface::class)->addTag('mask.migration'); 15 | }; 16 | -------------------------------------------------------------------------------- /Configuration/Sets/Mask/config.yaml: -------------------------------------------------------------------------------- 1 | name: mask/mask 2 | label: Mask 3 | dependencies: 4 | - typo3/fluid-styled-content 5 | -------------------------------------------------------------------------------- /Configuration/Sets/Mask/setup.typoscript: -------------------------------------------------------------------------------- 1 | @import 'EXT:mask/Configuration/TypoScript/setup.typoscript' 2 | -------------------------------------------------------------------------------- /Configuration/TCA/Overrides/pages.php: -------------------------------------------------------------------------------- 1 | generateFieldsTca('pages'); 7 | \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('pages', $pagesColumns); 8 | $GLOBALS['TCA']['pages']['ctrl']['searchFields'] = $tcaCodeGenerator->addSearchFields('pages'); 9 | -------------------------------------------------------------------------------- /Configuration/TCA/Overrides/sys_template.php: -------------------------------------------------------------------------------- 1 | `_ 15 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/6.0/NewDefaults.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | =================================================== 4 | Translation options for inline fields on by default 5 | =================================================== 6 | 7 | Some translation options for inline, file and content fields are enabled by 8 | default now as they would be turned on most of the time. 9 | 10 | * `showPossibleLocalizationRecords` 11 | * `showAllLocalizationLink` 12 | * `showRemovedLocalizationRecords` 13 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/6.0/Palettes.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ========================== 4 | Group fields with palettes 5 | ========================== 6 | 7 | Palettes are a very old concept in TYPO3 which allow you to group fields. These 8 | fields are shown next to each other instead of each in a new line. It is 9 | possible to add a manual break with the linebreak instruction. 10 | 11 | The element builder comes now with the palette and linebreak fields. You can 12 | drag in normal fields into the palette like you would do with inline fields. 13 | The only thing you have to enter into the palette is the key and a label. 14 | Fields in the palette will appear next to each other, when you edit the element. 15 | 16 | .. figure:: ../../Images/Mask6/palette-builder.png 17 | :class: with-border 18 | :alt: Palette in the mask element builder 19 | 20 | Palette in the mask element builder 21 | 22 | .. figure:: ../../Images/Mask6/palette-in-element.png 23 | :class: with-border 24 | :alt: Rendered palette in element 25 | 26 | Rendered palette in element 27 | 28 | Linebreaks 29 | ========== 30 | 31 | Linebreaks can be used to add a manual newline. Use this if you want to keep the 32 | grouping of fields, but there is not enough horizontal space left. 33 | 34 | .. figure:: ../../Images/Mask6/linebreak-builder.png 35 | :class: with-border 36 | :alt: Linebreak in the mask element builder 37 | 38 | Linebreak in the mask element builder 39 | 40 | .. figure:: ../../Images/Mask6/linebreak-in-element.png 41 | :class: with-border 42 | :alt: Rendered linebreak in element 43 | 44 | Rendered linebreak in element 45 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/6.0/RelationsResolved.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ===================================================== 4 | Relations of group and select fields are resolved now 5 | ===================================================== 6 | 7 | Previously only a comma list was provided in the data array. Developers had to 8 | write custom DataProcessors or ViewHelpers to get the result they needed. Now an 9 | additional entry with the suffix "_items" in the array is provided with the 10 | resolved database entries. 11 | 12 | .. figure:: ../../Images/Mask6/group-resolving.png 13 | :alt: Debug data 14 | 15 | Debug data 16 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/6.0/SelectIcons.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ================ 4 | Icons for select 5 | ================ 6 | 7 | It is now possible to use the third and fourth option of select items to provide 8 | custom icons and descriptions. 9 | 10 | .. figure:: ../../Images/Mask6/select-icons1.png 11 | :class: with-border 12 | :alt: 2 new options for items 13 | 14 | 2 new options for items 15 | 16 | .. figure:: ../../Images/Mask6/select-icons2.png 17 | :class: with-border 18 | :alt: Rendered icons in element 19 | 20 | Rendered icons in element 21 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/6.0/Timestamp.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ============================= 4 | Timestamp field to the rescue 5 | ============================= 6 | 7 | Without going in too much detail, the normal date and datetime fields, which 8 | store dates as DATE types in the database, can show wrong dates. This has to do 9 | with a lot of back and forth timezone conversion. For this reason the new field 10 | timestamp has been introduced, which stores dates as unix timestamps. In order 11 | to avoid wrong dates, use timestamp from now on. Old date and datetime fields 12 | are preserved for backwards compatibility. 13 | 14 | For more technical insight read: `Date and DateTime saves wrong date `_ 15 | 16 | .. figure:: ../../Images/Mask6/timestamp.png 17 | :class: with-border 18 | :alt: Timestamp element 19 | 20 | Timestamp element 21 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/7.0/IconAndColorPicker.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ============================= 4 | Updated Icon and Color Picker 5 | ============================= 6 | 7 | Updated icon picker 8 | =================== 9 | 10 | The jQuery fontIconPicker got an upgrade to `version 3 `__. This 11 | brings a new feature: Filter by category. 12 | 13 | .. figure:: ../../Images/ContentelementsManual/Fontawesome.png 14 | :alt: FontAwesome icon picker 15 | :class: with-border 16 | 17 | The new filter by category drop down 18 | 19 | New color picker 20 | ================ 21 | 22 | Mask uses now the color picker of TYPO3: `jQuery Minicolors `__. This 23 | unifies the user experience. Before the native browser color picker was used, which has different features depending 24 | on your browser. You can now copy and paste a HEX value directly into the color picker. 25 | 26 | .. figure:: ../../Images/Mask7/ColorPicker.png 27 | :alt: color picker 28 | :class: with-border 29 | 30 | The new color picker 31 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/7.0/MultiStepWizard.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | =============================== 4 | Wizard for new content elements 5 | =============================== 6 | 7 | By clicking on `Create new content element` a new wizard pops out, which guides you through some mandatory fields. First 8 | you can choose a label for your element. In the next step you can either accept the auto-generated key or edit it. These 9 | steps are completely optional and you can leave them initially blank. At the latest when you want to save your element 10 | these fields have to be set. You can switch to the `Element Meta Data` tab anytime and edit your label and key. 11 | 12 | .. figure:: ../../Images/ContentelementsManual/Wizard.png 13 | :alt: Multi Step Wizard for new element 14 | :class: with-border 15 | 16 | The Multi Step Wizard guides you through mandatory fields 17 | 18 | .. note:: 19 | The MultiStepWizard component of TYPO3 is used for this. In TYPO3 v10 it has some weird behaviour, which is fixed in 20 | TYPO3 v11. This is the reason why it's not allowed to go to the previous step. 21 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/7.0/MultiUse.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ======================== 4 | Improved Reusable fields 5 | ======================== 6 | 7 | You can see directly, if you are using a shared field in the field list now. It is indicated by a blue info dot. 8 | 9 | .. figure:: ../../Images/Mask7/MultiUse.png 10 | :alt: Blue dot indicating shared field 11 | :class: with-border 12 | 13 | Shared fields are indicated by a blue info dot 14 | 15 | The info message that you are using a shared field appears now at the top of the form instead of the bottom. By clicking 16 | on the `Show content elements` button, a modal appears which lists all of the elements that share this field. This is 17 | especially useful if you have a lot of elements which share the same fields. 18 | 19 | .. figure:: ../../Images/Mask7/MultiUsePopup.png 20 | :alt: Multi Use Popup 21 | :class: with-border 22 | 23 | The multi use modal lists all of the elements that share the current field 24 | 25 | When you select a shared field from the `Choose field` dropdown, all settings are loaded directly into the current 26 | field. This way you can directly inspect the settings of the chosen shared field. 27 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/7.0/Validation.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | =================== 4 | Improved validation 5 | =================== 6 | 7 | The validation in the Mask Builder has improved a lot. You can immediately see, if one of your fields has an error. 8 | Fields are marked with a red dot, which indicates there is something wrong and you should fix it. 9 | 10 | .. figure:: ../../Images/Mask7/Validation.png 11 | :alt: Validation in the Mask Builder 12 | :class: with-border 13 | 14 | The Mask Builder shows you if fields have an error 15 | 16 | If you try to save with errors, an alert pops up and instructs you to fix your errors. After clicking ok, the active 17 | field changes to the first field having an error. 18 | 19 | .. figure:: ../../Images/Mask7/AlertError.png 20 | :alt: Error alert no allowing saving 21 | :class: with-border 22 | 23 | An error alert appears if trying to save with errors 24 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/8.3/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | ================ 4 | Mask version 8.3 5 | ================ 6 | 7 | New PSR-14 MaskAfterElementSavedEvent and MaskAfterElementDeletedEvent 8 | ====================================================================== 9 | 10 | The newly introduced :php:`\MASK\Mask\Event\MaskAfterElementSavedEvent` 11 | and :php:`\MASK\Mask\Event\MaskAfterElementDeletedEvent` allow to execute custom 12 | code as soon as an content element was saved or deleted. 13 | Refer to this :ref:`documentation ` on how to use it. 14 | 15 | Special Thanks 16 | ============== 17 | 18 | This version was brought to you by Sebastian Dernbach `sebastiande `__. 19 | Thank you! 20 | -------------------------------------------------------------------------------- /Documentation/ChangeLog/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _changelog: 4 | 5 | ChangeLog 6 | ========= 7 | 8 | Have a look at `CHANGELOG.md `__ for a complete changelog. 9 | 10 | .. toctree:: 11 | :maxdepth: 1 12 | :titlesonly: 13 | 14 | 8.3/Index 15 | 8.2/Index 16 | 8.1/Index 17 | 8.0/Index 18 | 7.2/Index 19 | 7.1/Index 20 | 7.0/Index 21 | 6.0/Index 22 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _fieldtypes: 4 | 5 | =========== 6 | Field Types 7 | =========== 8 | 9 | The Mask field types are basically a convenient combination of the :ref:`TCA column types `. If certain criteria meet, a 10 | field will be assigned to a Mask field type. The criteria are specific TCA settings, which define the type of the 11 | field. For example the TCA type `input` can have many appearances. With :php:`renderType => 'inputLink'` set, the field 12 | transforms into a link field. Mask will assign it to the field type `Link` then. This is how core fields are displayed 13 | as the appropriate field type. 14 | 15 | .. toctree:: 16 | :maxdepth: 1 17 | :glob: 18 | 19 | Type/* 20 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Check.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-check: 4 | 5 | Check 6 | ===== 7 | 8 | .. figure:: ../../Images/FieldTypes/Check.svg 9 | :alt: Check 10 | :class: float-left 11 | :width: 64px 12 | 13 | One or more checkboxes. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'check' 20 | 21 | .. figure:: ../../Images/FieldTypes/CheckPreview.png 22 | :alt: Check field 23 | :class: with-border 24 | 25 | Check field 26 | 27 | Available TCA options 28 | --------------------- 29 | 30 | * :ref:`config.renderType ` 31 | * :ref:`l10n_mode ` 32 | * :ref:`config.behaviour.allowLanguageSynchronization ` 33 | * :ref:`config.items ` 34 | * :ref:`config.default ` 35 | * :ref:`config.cols ` 36 | 37 | See a complete overview of Check TCA options in the :ref:`official documentation `. 38 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Colorpicker.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-colorpicker: 4 | 5 | Colorpicker 6 | =========== 7 | 8 | .. figure:: ../../Images/FieldTypes/Colorpicker.svg 9 | :alt: Colorpicker 10 | :class: float-left 11 | :width: 64px 12 | 13 | A colorpicker for choosing color hex-values. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'input', 20 | 'renderType' => 'colorpicker' 21 | 22 | .. figure:: ../../Images/FieldTypes/ColorpickerPreview.png 23 | :alt: Colorpicker field 24 | :class: with-border 25 | 26 | Colorpicker field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.default ` 32 | * :ref:`config.placeholder ` 33 | * :ref:`config.size ` 34 | * :ref:`l10n_mode ` 35 | * :ref:`config.behaviour.allowLanguageSynchronization ` 36 | * :ref:`config.eval.null ` 37 | * :ref:`config.mode ` 38 | 39 | See a complete overview of Colorpicker TCA options in the :ref:`official documentation `. 40 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Date.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-date: 4 | 5 | Date 6 | ==== 7 | 8 | .. figure:: ../../Images/FieldTypes/Date.svg 9 | :alt: Date 10 | :class: float-left 11 | :width: 64px 12 | 13 | An input field for a date (stored as MySQL DATE type). 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'input', 20 | 'dbType' => 'date' 21 | 22 | .. figure:: ../../Images/FieldTypes/DatePreview.png 23 | :alt: Date field 24 | :class: with-border 25 | 26 | Date field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.default ` 32 | * :ref:`config.placeholder ` 33 | * :ref:`config.range.lower ` 34 | * :ref:`config.range.upper ` 35 | * :ref:`config.eval.required ` 36 | * :ref:`l10n_mode ` 37 | * :ref:`config.behaviour.allowLanguageSynchronization ` 38 | * :ref:`config.eval.null ` 39 | * :ref:`config.mode ` 40 | 41 | See a complete overview of Date TCA options in the :ref:`official documentation `. 42 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Datetime.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-datetime: 4 | 5 | Datetime 6 | ======== 7 | 8 | .. figure:: ../../Images/FieldTypes/Datetime.svg 9 | :alt: Datetime 10 | :class: float-left 11 | :width: 64px 12 | 13 | An input field for date and time (stored as MySQL DATETIME type). 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'input', 20 | 'dbType' => 'datetime' 21 | 22 | .. figure:: ../../Images/FieldTypes/DatetimePreview.png 23 | :alt: Datetime field 24 | :class: with-border 25 | 26 | Datetime field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.default ` 32 | * :ref:`config.placeholder ` 33 | * :ref:`config.range.lower ` 34 | * :ref:`config.range.upper ` 35 | * :ref:`config.eval.required ` 36 | * :ref:`l10n_mode ` 37 | * :ref:`config.behaviour.allowLanguageSynchronization ` 38 | * :ref:`config.eval.null ` 39 | * :ref:`config.mode ` 40 | 41 | See a complete overview of Datetime TCA options in the :ref:`official documentation `. 42 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Email.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-email: 4 | 5 | Email 6 | ===== 7 | 8 | .. important:: 9 | 10 | Only available for TYPO3 v12 or higher. For TYPO3 v11 or lower use type 11 | :ref:`String ` with eval set to `email`. 12 | 13 | .. figure:: ../../Images/FieldTypes/Email.svg 14 | :alt: Email 15 | :class: float-left 16 | :width: 64px 17 | 18 | An input field validated for a correct email address. 19 | 20 | .. rst-class:: clear-both 21 | 22 | .. code-block:: php 23 | 24 | 'type' => 'email' 25 | 26 | .. figure:: ../../Images/FieldTypes/EmailPreview.png 27 | :alt: Email field 28 | :class: with-border 29 | 30 | Email field 31 | 32 | Available TCA options 33 | --------------------- 34 | 35 | * :ref:`config.default ` 36 | * :ref:`config.placeholder ` 37 | * :ref:`config.size ` 38 | * :ref:`config.eval.required ` 39 | * :ref:`config.eval.unique ` 40 | * :ref:`config.eval.uniqueInPid ` 41 | * :ref:`l10n_mode ` 42 | * :ref:`config.behaviour.allowLanguageSynchronization ` 43 | * :ref:`config.eval.null ` 44 | * :ref:`config.mode ` 45 | * :ref:`config.autocomplete ` 46 | 47 | See a complete overview of Email TCA options in the :ref:`official documentation `. 48 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Float.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-float: 4 | 5 | Float 6 | ===== 7 | 8 | .. figure:: ../../Images/FieldTypes/Float.svg 9 | :alt: Float 10 | :class: float-left 11 | :width: 64px 12 | 13 | An input field for floats. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'input', 20 | 'eval' => 'double2' 21 | 22 | .. figure:: ../../Images/FieldTypes/FloatPreview.png 23 | :alt: Float field 24 | :class: with-border 25 | 26 | Float field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.default ` 32 | * :ref:`config.placeholder ` 33 | * :ref:`config.size ` 34 | * :ref:`config.eval.required ` 35 | * :ref:`config.max ` 36 | * :ref:`config.range.lower ` 37 | * :ref:`config.range.upper ` 38 | * :ref:`config.slider.step ` 39 | * :ref:`config.slider.width ` 40 | * :ref:`l10n_mode ` 41 | * :ref:`config.behaviour.allowLanguageSynchronization ` 42 | * :ref:`config.eval.null ` 43 | * :ref:`config.mode ` 44 | * :ref:`config.autocomplete ` 45 | 46 | See a complete overview of Float TCA options in the :ref:`official documentation `. 47 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Folder.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-folder: 4 | 5 | Folder 6 | ====== 7 | 8 | .. figure:: ../../Images/FieldTypes/Folder.svg 9 | :alt: Folder 10 | :class: float-left 11 | :width: 64px 12 | 13 | Select one or more folders in a folder browse window. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'folder' 20 | 21 | .. figure:: ../../Images/FieldTypes/FolderPreview.png 22 | :alt: Folder field 23 | :class: with-border 24 | 25 | Folder field 26 | 27 | Available TCA options 28 | --------------------- 29 | 30 | * :ref:`config.elementBrowserEntryPoints ` 31 | * :ref:`config.minitems ` 32 | * :ref:`config.maxitems ` 33 | * :ref:`l10n_mode ` 34 | * :ref:`config.behaviour.allowLanguageSynchronization ` 35 | * :ref:`config.size ` 36 | * :ref:`config.autoSizeMax ` 37 | * :ref:`config.multiple ` 38 | 39 | See a complete overview of Folder TCA options in the :ref:`official documentation `. 40 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Linebreak.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-linebreak: 4 | 5 | Linebreak 6 | ========= 7 | 8 | .. figure:: ../../Images/FieldTypes/Linebreak.svg 9 | :alt: Linebreak 10 | :class: float-left 11 | :width: 64px 12 | 13 | For use in conjunction with :ref:`Palettes ` only. They allow you to add a linebreak between two fields in a palette, if there 14 | is too little space to fit them all in one line. 15 | 16 | .. rst-class:: clear-both 17 | 18 | .. figure:: ../../Images/FieldTypes/LinebreakPreview.png 19 | :alt: Linebreak field 20 | :class: with-border 21 | 22 | Linebreak field 23 | 24 | Official Documentation 25 | ---------------------- 26 | 27 | Read about linebreaks in the :ref:`official documentation `. 28 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Link.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-link: 4 | 5 | Link 6 | ==== 7 | 8 | .. figure:: ../../Images/FieldTypes/Link.svg 9 | :alt: Link 10 | :class: float-left 11 | :width: 64px 12 | 13 | An input field for links. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'input', 20 | 'renderType' => 'inputLink' 21 | 22 | .. figure:: ../../Images/FieldTypes/LinkPreview.png 23 | :alt: Link field 24 | :class: with-border 25 | 26 | Link field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.placeholder ` 32 | * :ref:`config.size ` 33 | * :ref:`config.eval.required ` 34 | * :ref:`config.fieldControl.linkPopup.options.allowedExtensions ` 35 | * :ref:`config.fieldControl.linkPopup.options.blindLinkOptions ` 36 | * :ref:`l10n_mode ` 37 | * :ref:`config.behaviour.allowLanguageSynchronization ` 38 | * :ref:`config.eval.null ` 39 | * :ref:`config.mode ` 40 | 41 | See a complete overview of inputLink TCA options in the :ref:`official documentation `. 42 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Palette.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-palette: 4 | 5 | Palette 6 | ======= 7 | 8 | .. figure:: ../../Images/FieldTypes/Palette.svg 9 | :alt: Palette 10 | :class: float-left 11 | :width: 64px 12 | 13 | Palettes allow you to group multiple fields. They will by default be shown next to each other. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. figure:: ../../Images/FieldTypes/PalettePreview.png 18 | :alt: Palette field 19 | :class: with-border 20 | 21 | Palette field 22 | 23 | Official Documentation 24 | ---------------------- 25 | 26 | Read about palettes in the :ref:`official documentation `. 27 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Radio.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-radio: 4 | 5 | Radiobutton 6 | =========== 7 | 8 | .. figure:: ../../Images/FieldTypes/Radio.svg 9 | :alt: Radio 10 | :class: float-left 11 | :width: 64px 12 | 13 | One or more radiobuttons. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'radio' 20 | 21 | .. figure:: ../../Images/FieldTypes/RadioPreview.png 22 | :alt: Radio field 23 | :class: with-border 24 | 25 | Radio field 26 | 27 | Available TCA options 28 | --------------------- 29 | 30 | * :ref:`config.items ` 31 | * :ref:`config.default ` 32 | * :ref:`l10n_mode ` 33 | * :ref:`config.behaviour.allowLanguageSynchronization ` 34 | 35 | See a complete overview of Radio TCA options in the :ref:`official documentation `. 36 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Richtext.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-richtext: 4 | 5 | Richtext 6 | ======== 7 | 8 | .. figure:: ../../Images/FieldTypes/Richtext.svg 9 | :alt: Richtext 10 | :class: float-left 11 | :width: 64px 12 | 13 | A multiline textfield with richtext editor. 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'text', 20 | 'enableRichtext' => true 21 | 22 | .. figure:: ../../Images/FieldTypes/RichtextPreview.png 23 | :alt: Richtext field 24 | :class: with-border 25 | 26 | Richtext field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.richtextConfiguration ` 32 | * :ref:`config.default ` 33 | * :ref:`l10n_mode ` 34 | * :ref:`config.behaviour.allowLanguageSynchronization ` 35 | 36 | See a complete overview of Richtext TCA options in the :ref:`official documentation `. 37 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Slug.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-slug: 4 | 5 | Slug 6 | ==== 7 | 8 | .. figure:: ../../Images/FieldTypes/Slug.svg 9 | :alt: Slug 10 | :class: float-left 11 | :width: 64px 12 | 13 | The slug field can create a unique identifier per content element, which can be 14 | used for the HTML id property or other use cases. 15 | 16 | .. rst-class:: clear-both 17 | 18 | .. code-block:: php 19 | 20 | 'type' => 'slug' 21 | 22 | .. figure:: ../../Images/FieldTypes/SlugPreview.png 23 | :alt: Slug field 24 | :class: with-border 25 | 26 | Slug field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.eval.slug ` 32 | * :ref:`config.generatorOptions.fields ` 33 | * :ref:`config.generatorOptions.replacements ` 34 | * :ref:`config.generatorOptions.fieldSeparator ` 35 | * :ref:`config.fallbackCharacter ` 36 | * :ref:`config.prependSlash ` 37 | 38 | See a complete overview of Slug TCA options in the :ref:`official documentation `. 39 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Tab.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-tab: 4 | 5 | Tab 6 | === 7 | 8 | .. figure:: ../../Images/FieldTypes/Tab.svg 9 | :alt: Tab 10 | :class: float-left 11 | :width: 64px 12 | 13 | With the tab field, you can add a tab divider to better organize your fields in several tabs, and make editor's life 14 | easier. 15 | 16 | .. rst-class:: clear-both 17 | 18 | .. figure:: ../../Images/FieldTypes/TabPreview.png 19 | :alt: Tab field 20 | :class: with-border 21 | 22 | Tab field 23 | 24 | Official Documentation 25 | ---------------------- 26 | 27 | Read about tabs in the :ref:`official documentation `. 28 | -------------------------------------------------------------------------------- /Documentation/Fieldtypes/Type/Timestamp.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../Includes.txt 2 | 3 | .. _fields-timestamp: 4 | 5 | Timestamp 6 | ========= 7 | 8 | .. figure:: ../../Images/FieldTypes/Timestamp.svg 9 | :alt: Timestamp 10 | :class: float-left 11 | :width: 64px 12 | 13 | An input field for a date (stored as UNIX timestamp). 14 | 15 | .. rst-class:: clear-both 16 | 17 | .. code-block:: php 18 | 19 | 'type' => 'input', 20 | 'renderType' => 'inputDateTime' 21 | 22 | .. figure:: ../../Images/FieldTypes/TimestampPreview.png 23 | :alt: Timestamp field 24 | :class: with-border 25 | 26 | Timestamp field 27 | 28 | Available TCA options 29 | --------------------- 30 | 31 | * :ref:`config.eval ` 32 | * :ref:`config.default ` 33 | * :ref:`config.placeholder ` 34 | * :ref:`config.range.lower ` 35 | * :ref:`config.range.upper ` 36 | * :ref:`config.eval.required ` 37 | * :ref:`l10n_mode ` 38 | * :ref:`config.behaviour.allowLanguageSynchronization ` 39 | * :ref:`config.eval.null ` 40 | * :ref:`config.mode ` 41 | 42 | See a complete overview of Timestamp TCA options in the :ref:`official documentation `. 43 | -------------------------------------------------------------------------------- /Documentation/Glossary/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _glossary: 4 | 5 | ======== 6 | Glossary 7 | ======== 8 | 9 | Here you can find explanations for common terms when working with Mask. 10 | 11 | .. _fluid-styled-content: 12 | 13 | Fluid Styled Content 14 | ==================== 15 | 16 | :doc:`Fluid Styled Content` is a core extension of TYPO3 which provides all the regular content elements 17 | you can find in your installation like Header, Text and Text & Images. Mask does not depend on it directly, but it is 18 | good practice to include it nevertheless. Most of the time you will want to have some generic content elements for your 19 | site. Even if you don't need them, this extension includes the TypoScript snippet `lib.parseFunc_RTE` too, which is 20 | essential for TYPO3 richtext parsing. Also you can use the standard layout of Fluid Styled Content by 21 | :ref:`specifying the paths in TypoScript `. 22 | -------------------------------------------------------------------------------- /Documentation/Guides/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _guides: 4 | 5 | =============== 6 | Tips and tricks 7 | =============== 8 | 9 | Here you can find general guides on how to work with Mask. There are many tips and tricks how to enhance the default 10 | functionality. 11 | 12 | .. toctree:: 13 | :maxdepth: 1 14 | :titlesonly: 15 | 16 | OverrideTCA 17 | FluidStyledContent 18 | DataProcessors 19 | CropVariants 20 | RTEConfig 21 | UseExistingTCAFields 22 | NewContentElementWizard 23 | TypoScriptConstants 24 | -------------------------------------------------------------------------------- /Documentation/Guides/RTEConfig.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _rteconfig-guide: 4 | 5 | ========== 6 | RTE Config 7 | ========== 8 | 9 | You can exactly define which :ref:`RTE config ` a mask element should offer for its 10 | richtext fields. 11 | 12 | For this, you have to follow these 3 steps: 13 | 14 | Create the config 15 | ================= 16 | 17 | In your :ref:`sitepackage `, add the config files you need, e.g. 18 | `sitepackage/Configuration/RTE/Custom.yaml` and `sitepackage/Configuration/RTE/Simple.yaml`. 19 | To get the right keys, the `CKeditor configurator `__ 20 | is helpful. 21 | 22 | Load the config 23 | =============== 24 | 25 | In `sitepackage/ext_localconf.php` wire the new config files as RTE presets: 26 | 27 | :: 28 | 29 | $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['custom'] = 'EXT:sitepackage/Configuration/RTE/Custom.yaml'; 30 | $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['simple'] = 'EXT:sitepackage/Configuration/RTE/Simple.yaml'; 31 | 32 | 33 | Target the config 34 | ================= 35 | 36 | In TsConfig (e.g. `sitepackage/Configuration/TsConfig/Page/RTE.tsconfig`), assign the config to the desired field, using 37 | the element's cType as well as the configs key: 38 | 39 | .. code-block:: ts 40 | 41 | RTE.default.preset = custom 42 | RTE.config.tt_content.tx_mask_content.types.mask_teaser.preset = simple 43 | 44 | .. versionadded:: 7.0.0 45 | 46 | Since Mask v7 you can assign the RTE presets directly in the Mask builder. 47 | -------------------------------------------------------------------------------- /Documentation/Guides/TypoScriptConstants.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _typoscriptconstants-guide: 4 | 5 | ============================== 6 | Accessing TypoScript constants 7 | ============================== 8 | 9 | To access a TypoScript constant in content elements, 10 | first make it available to all mask elements via TypoScript: 11 | 12 | .. code-block:: typoscript 13 | 14 | lib.maskContentElement { 15 | settings { 16 | pageTitle = {$mysitepackage.page.title} 17 | } 18 | } 19 | 20 | In your mask content element fluid template it can be accessed via 21 | :html:`{settings.pageTitle}`. 22 | -------------------------------------------------------------------------------- /Documentation/Images/AdministratorManual/ExtensionConfiguration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/AdministratorManual/ExtensionConfiguration.png -------------------------------------------------------------------------------- /Documentation/Images/AdministratorManual/TypoScriptTemplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/AdministratorManual/TypoScriptTemplate.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/Backendpreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/Backendpreview.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/ElementMetaData.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/ElementMetaData.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/FieldForm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/FieldForm.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/Fontawesome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/Fontawesome.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/MaskBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/MaskBuilder.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/ShortTitle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/ShortTitle.png -------------------------------------------------------------------------------- /Documentation/Images/ContentelementsManual/Wizard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/ContentelementsManual/Wizard.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Category.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/CategoryPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/CategoryPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/CheckPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/CheckPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/ColorpickerPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/ColorpickerPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Content.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/ContentPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/ContentPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/DatePreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/DatePreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/DatetimePreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/DatetimePreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Email.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/EmailPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/EmailPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/File.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/FilePreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/FilePreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/FloatPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/FloatPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/FolderPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/FolderPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Group.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/GroupPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/GroupPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/InlinePreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/InlinePreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/IntegerPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/IntegerPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Linebreak.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/LinebreakPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/LinebreakPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/LinkPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/LinkPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Media.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/MediaPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/MediaPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Palette.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/PalettePreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/PalettePreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/RadioPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/RadioPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/RichtextPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/RichtextPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 13 | 15 | 16 | 19 | 20 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/SelectPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/SelectPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/SlugPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/SlugPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/StringPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/StringPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/TabPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/TabPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/Text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 12 | 14 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/TextPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/TextPreview.png -------------------------------------------------------------------------------- /Documentation/Images/FieldTypes/TimestampPreview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/FieldTypes/TimestampPreview.png -------------------------------------------------------------------------------- /Documentation/Images/Guides/MaskContentElement.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Guides/MaskContentElement.png -------------------------------------------------------------------------------- /Documentation/Images/IntroductionManual/BackendScreenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/IntroductionManual/BackendScreenshot.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/checkboxes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/checkboxes.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/existing-fields.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/existing-fields.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/group-resolving.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/group-resolving.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/image-cropping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/image-cropping.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/linebreak-builder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/linebreak-builder.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/linebreak-in-element.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/linebreak-in-element.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/mask-group-element.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/mask-group-element.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/mask-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/mask-group.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/palette-builder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/palette-builder.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/palette-in-element.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/palette-in-element.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/select-icons1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/select-icons1.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/select-icons2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/select-icons2.png -------------------------------------------------------------------------------- /Documentation/Images/Mask6/timestamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask6/timestamp.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.1/AutoConfiguration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.1/AutoConfiguration.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.1/ColorPicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.1/ColorPicker.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.1/DescriptionOverrides.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.1/DescriptionOverrides.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.1/MissingDirectories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.1/MissingDirectories.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/BodytextAsText.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/BodytextAsText.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/CTypeSelect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/CTypeSelect.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/ElementSearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/ElementSearch.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/ForeignTableSelect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/ForeignTableSelect.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/ItemGroups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/ItemGroups.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/ItemSorting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/ItemSorting.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/ItemsModule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/ItemsModule.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/LinkHandler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/LinkHandler.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/Migrations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/Migrations.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/OverlayIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/OverlayIcon.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7.2/ValuePicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7.2/ValuePicker.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/AlertError.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/AlertError.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/ColorPicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/ColorPicker.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/MaskBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/MaskBuilder.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/MultiUse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/MultiUse.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/MultiUsePopup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/MultiUsePopup.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/Responsive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/Responsive.png -------------------------------------------------------------------------------- /Documentation/Images/Mask7/Validation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/Mask7/Validation.png -------------------------------------------------------------------------------- /Documentation/Images/PageTemplates/BackendLayout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/PageTemplates/BackendLayout.png -------------------------------------------------------------------------------- /Documentation/Images/PageTemplates/DataDebug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/PageTemplates/DataDebug.png -------------------------------------------------------------------------------- /Documentation/Images/PageTemplates/PageRecord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/PageTemplates/PageRecord.png -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/advancedwebmarketing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/advancedwebmarketing.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/checkdomain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/checkdomain.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/dkd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/dkd.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/eovision.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/eovision.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/hotelglueck.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/hotelglueck.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/joppnet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/joppnet.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/mbit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/mbit.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/mittwald.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/mittwald.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/pinkdata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/pinkdata.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/primeit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/primeit.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/profitbricks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/profitbricks.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/rackspeed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/rackspeed.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/robhost.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/robhost.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/schwabe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/schwabe.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/seminaris.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/seminaris.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/sgalinski.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/sgalinski.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/sitedesign.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/sitedesign.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/skidata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/skidata.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/tommoko.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/tommoko.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/ttg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/ttg.jpg -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/webconsulting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/webconsulting.png -------------------------------------------------------------------------------- /Documentation/Images/SponsorsManual/webservices.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Documentation/Images/SponsorsManual/webservices.jpg -------------------------------------------------------------------------------- /Documentation/Includes.txt: -------------------------------------------------------------------------------- 1 | .. You can put central messages to display on all pages here 2 | -------------------------------------------------------------------------------- /Documentation/Installation/_codesnippets/_config.yaml: -------------------------------------------------------------------------------- 1 | name: myvendor/my-site-package 2 | label: My site package set 3 | dependencies: 4 | - mask/mask 5 | -------------------------------------------------------------------------------- /Documentation/Sitepackage/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _sitepackage: 4 | 5 | ============ 6 | Sitepackages 7 | ============ 8 | 9 | Mask can only help you with creating custom content elements and render them in 10 | own fluid templates. To get started with creating your TYPO3 website in general 11 | you need what's called a sitepackage. This is a special extension specialized 12 | in defining html layouts, css, JavaScript, typoscript, ... so basically it's a 13 | Theme-Extension. 14 | 15 | There are many resources out there to get started. These are a few of those: 16 | 17 | - https://www.sitepackagebuilder.com/ 18 | - https://extensions.typo3.org/extension/bootstrap_package/ 19 | - https://docs.typo3.org/m/typo3/tutorial-sitepackage/main/en-us/ 20 | -------------------------------------------------------------------------------- /Documentation/ToDoList/Index.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../Includes.txt 2 | 3 | .. _todo: 4 | 5 | To-Do list 6 | ========== 7 | 8 | If you are interested in the current TODO-List, look into the issues on Github 9 | and the community's wishlist. In the Project page of Github you can find 10 | everything, what we are currently working on. 11 | 12 | * `Github Projects `__ 13 | * `Github Issues `__ 14 | * `Community wishlist `__ 15 | -------------------------------------------------------------------------------- /Documentation/guides.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: help 2 | help: ## Displays this list of targets with descriptions 3 | @echo "The following commands are available:\n" 4 | @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' 5 | 6 | .PHONY: docs 7 | docs: ## Generate projects docs (from "Documentation" directory) 8 | mkdir -p Documentation-GENERATED-temp 9 | 10 | docker run --rm --pull always -v "$(shell pwd)":/project -t ghcr.io/typo3-documentation/render-guides:latest --config=Documentation 11 | 12 | .PHONY: test-docs 13 | test-docs: ## Test the documentation rendering 14 | mkdir -p Documentation-GENERATED-temp 15 | 16 | docker run --rm --pull always -v "$(shell pwd)":/project -t ghcr.io/typo3-documentation/render-guides:latest --config=Documentation --no-progress --fail-on-log 17 | -------------------------------------------------------------------------------- /Resources/Private/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /Resources/Private/Partials/Form/Description.html: -------------------------------------------------------------------------------- 1 | 4 |
    5 | {f:translate(key: 'LLL:EXT:mask/Resources/Private/Language/locallang.xlf:tx_mask.placeholder.description')} 6 |
    7 | 14 |
    15 |
    16 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Form/Key.html: -------------------------------------------------------------------------------- 1 | 4 |
    5 | {f:translate(key: 'LLL:EXT:mask/Resources/Private/Language/locallang.xlf:tx_mask.field.fieldkey.description')} 6 |
    7 | 8 |
    9 |
    10 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Form/Label.html: -------------------------------------------------------------------------------- 1 | 4 |
    5 | {f:translate(key: 'LLL:EXT:mask/Resources/Private/Language/locallang.xlf:tx_mask.placeholder.label')} 6 |
    7 | 13 |
    14 |
    15 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Form/OverrideDescription.html: -------------------------------------------------------------------------------- 1 | 4 |
    5 |
    6 | 12 |
    13 |
    14 | -------------------------------------------------------------------------------- /Resources/Private/Partials/Form/OverrideLabel.html: -------------------------------------------------------------------------------- 1 | 4 |
    5 |
    6 | 12 |
    13 |
    14 | -------------------------------------------------------------------------------- /Resources/Private/Partials/List/Header.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | Mask 4 |
    5 | 8 | 14 |
    15 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Ajax/ShowHtml.html: -------------------------------------------------------------------------------- 1 |

    2 |

    : EXT:mask_project/Resources/Private/Mask/Frontend/Templates.

    3 |

    4 | 5 | 6 | 7 | 8 | 9 |

    10 | 11 |
    {f:if(condition: html, then: html, else: '{f:translate(key: \'LLL:EXT:mask/Resources/Private/Language/locallang.xlf:tx_mask.no_fields\')}')}
    12 | -------------------------------------------------------------------------------- /Resources/Private/Templates/Wizard/Main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
    5 |
    6 | 7 |
    8 | 9 | 10 |
    11 |
    12 | -------------------------------------------------------------------------------- /Resources/Public/Fonts/iconpicker.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Fonts/iconpicker.eot -------------------------------------------------------------------------------- /Resources/Public/Fonts/iconpicker.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Fonts/iconpicker.ttf -------------------------------------------------------------------------------- /Resources/Public/Fonts/iconpicker.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Fonts/iconpicker.woff -------------------------------------------------------------------------------- /Resources/Public/Icons/Extension.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 14 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Category.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | background 5 | 6 | 7 | 8 | Layer 1 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Content.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Email.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/File.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | image/svg+xml 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Group.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Linebreak.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Media.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Palette.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 13 | 15 | 16 | 19 | 20 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 11 | 12 | 13 | 14 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Resources/Public/Icons/Fieldtypes/Text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 12 | 14 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Resources/Public/Icons/module-mask_wizard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 14 | 16 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Resources/Public/Images/Logo_TVconverter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Images/Logo_TVconverter.png -------------------------------------------------------------------------------- /Resources/Public/Images/Logo_WEBprofil_T3camp_druck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Images/Logo_WEBprofil_T3camp_druck.png -------------------------------------------------------------------------------- /Resources/Public/Images/Logo_WEBprofil_T3camp_druck_Kopie_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Images/Logo_WEBprofil_T3camp_druck_Kopie_2.png -------------------------------------------------------------------------------- /Resources/Public/Images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Images/banner.jpg -------------------------------------------------------------------------------- /Resources/Public/Images/legacy-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Resources/Public/Images/legacy-icon.gif -------------------------------------------------------------------------------- /Resources/Public/Images/verified.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Resources/Public/Styles/Backend/backend.css: -------------------------------------------------------------------------------- 1 | /** 2 | This css file is included in the whole typo3 backend. 3 | It can be used to style the mask content elements in the backend. 4 | */ 5 | 6 | .icon-unify { 7 | font-family: 'Source Sans Pro', Verdana, Arial, Helvetica, sans-serif; 8 | font-weight: bold; 9 | border-radius: 0; 10 | text-transform: uppercase; 11 | } 12 | 13 | .icon-size-large .icon-unify { 14 | line-height: 47px; 15 | font-size: 35px; 16 | } 17 | 18 | .icon-size-default .icon-unify { 19 | line-height: 32px; 20 | font-size: 28px; 21 | } 22 | 23 | .content_preview { 24 | display: block; 25 | padding: 10px 0 4px 0; 26 | border-top: 1px solid #CACACA; 27 | margin-top: 6px; 28 | } 29 | -------------------------------------------------------------------------------- /Resources/Public/Styles/disable-dark-mode.css: -------------------------------------------------------------------------------- 1 | :root { 2 | color-scheme: light; 3 | } 4 | -------------------------------------------------------------------------------- /Tests/Unit/Definition/SqlColumnDefinitionTest.php: -------------------------------------------------------------------------------- 1 | setNull(); 32 | self::assertSame('varchar(255) DEFAULT \'\'', $sqlColumnDefinition->sqlDefinition); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Tests/Unit/Event/MaskAfterElementDeletedEventTest.php: -------------------------------------------------------------------------------- 1 | getElementKey()); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Tests/Unit/Event/MaskAfterElementSavedEventTest.php: -------------------------------------------------------------------------------- 1 | getElementKey()); 36 | self::assertTrue($event->isNewElement()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Configuration/ContentElements/c.json: -------------------------------------------------------------------------------- 1 | { 2 | "tt_content": { 3 | "elements": { 4 | "c": { 5 | "key": "c", 6 | "label": "C", 7 | "description": "", 8 | "shortLabel": "", 9 | "color": "#000000", 10 | "icon": "", 11 | "columns": [ 12 | "header", 13 | "tx_mask_file" 14 | ], 15 | "columnsOverride": [], 16 | "labels": [ 17 | "Header", 18 | "File" 19 | ], 20 | "descriptions": [ 21 | "", 22 | "only images are allowed" 23 | ], 24 | "sorting": 2 25 | } 26 | }, 27 | "sql": { 28 | "tx_mask_file": { 29 | "tt_content": { 30 | "tx_mask_file": "int(11) unsigned DEFAULT '0' NOT NULL" 31 | } 32 | } 33 | }, 34 | "tca": { 35 | "tx_mask_file": { 36 | "config": { 37 | "appearance": { 38 | "fileUploadAllowed": 1 39 | } 40 | }, 41 | "type": "file", 42 | "key": "file", 43 | "fullKey": "tx_mask_file", 44 | "imageoverlayPalette": 1 45 | }, 46 | "header": { 47 | "coreField": 1, 48 | "type": "string", 49 | "key": "header", 50 | "fullKey": "header" 51 | } 52 | }, 53 | "palettes": [] 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Configuration/legacyRte.json: -------------------------------------------------------------------------------- 1 | { 2 | "tt_content": { 3 | "elements": { 4 | "element1": { 5 | "label": "Element 1", 6 | "key": "element1", 7 | "labels": { 8 | "0": "RTE Field" 9 | }, 10 | "columns": { 11 | "0": "tx_mask_rte" 12 | }, 13 | "options": { 14 | "0": "rte", 15 | "1": "rte" 16 | } 17 | } 18 | }, 19 | "tca": { 20 | "tx_mask_rte": { 21 | "config": { 22 | "type": "text" 23 | }, 24 | "key": "rte" 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Configuration/missingDefaults.json: -------------------------------------------------------------------------------- 1 | { 2 | "tt_content": { 3 | "elements": { 4 | "element1": { 5 | "key": "element1", 6 | "label": "Element 1", 7 | "labels": { 8 | "0": "Integer Field", 9 | "1": "File Field", 10 | "2": "RTE Field" 11 | }, 12 | "columns": { 13 | "0": "tx_mask_integer", 14 | "1": "tx_mask_file", 15 | "2": "tx_mask_rte" 16 | } 17 | } 18 | }, 19 | "tca": { 20 | "tx_mask_integer": { 21 | "config": { 22 | "type": "input", 23 | "eval": "int,required" 24 | }, 25 | "key": "integer" 26 | }, 27 | "tx_mask_file": { 28 | "config": { 29 | "minitems": "", 30 | "maxitems": "" 31 | }, 32 | "key": "file", 33 | "options": "file" 34 | }, 35 | "tx_mask_rte": { 36 | "key": "rte", 37 | "config": { 38 | "type": "text" 39 | }, 40 | "type": "richtext", 41 | "exclude": "1" 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/FieldGroups.php: -------------------------------------------------------------------------------- 1 | value => 'input', 7 | FieldType::INTEGER->value => 'input', 8 | FieldType::FLOAT->value => 'input', 9 | FieldType::LINK->value => 'input', 10 | 11 | FieldType::TEXT->value => 'text', 12 | FieldType::RICHTEXT->value => 'text', 13 | 14 | FieldType::DATE->value => 'date', 15 | FieldType::DATETIME->value => 'date', 16 | FieldType::TIMESTAMP->value => 'date', 17 | 18 | FieldType::CHECK->value => 'choice', 19 | FieldType::RADIO->value => 'choice', 20 | FieldType::SELECT->value => 'choice', 21 | FieldType::GROUP->value => 'choice', 22 | 23 | FieldType::FILE->value => 'repeating', 24 | FieldType::INLINE->value => 'repeating', 25 | FieldType::CONTENT->value => 'repeating', 26 | 27 | FieldType::TAB->value => 'structure', 28 | FieldType::PALETTE->value => 'structure', 29 | FieldType::LINEBREAK->value => 'structure', 30 | ]; 31 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/check.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.renderType' => 6, 9 | ], 10 | ], 11 | Tab::LOCALIZATION->value => [ 12 | [ 13 | 'l10n_mode' => 12, 14 | ], 15 | [ 16 | 'config.behaviour.allowLanguageSynchronization' => 6, 17 | ], 18 | ], 19 | Tab::EXTENDED->value => [ 20 | [ 21 | 'config.items' => 12, 22 | ], 23 | [ 24 | 'config.default' => 6, 25 | ], 26 | [ 27 | 'config.cols' => 6, 28 | ], 29 | ], 30 | ]; 31 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/content.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'cTypes' => 12, 9 | ], 10 | ], 11 | Tab::VALIDATION->value => [ 12 | [ 13 | 'config.minitems' => 6, 14 | 'config.maxitems' => 6, 15 | ], 16 | ], 17 | Tab::APPEARANCE->value => [ 18 | [ 19 | 'config.appearance.newRecordLinkTitle' => 6, 20 | 'config.appearance.levelLinksPosition' => 6, 21 | ], 22 | [ 23 | 'config.appearance.expandSingle' => 6, 24 | ], 25 | ], 26 | Tab::LOCALIZATION->value => [ 27 | [ 28 | 'l10n_mode' => 12, 29 | ], 30 | [ 31 | 'config.behaviour.allowLanguageSynchronization' => 6, 32 | ], 33 | [ 34 | 'config.appearance.showSynchronizationLink' => 6, 35 | 'config.appearance.showPossibleLocalizationRecords' => 6, 36 | 'config.appearance.showAllLocalizationLink' => 6, 37 | 'config.appearance.showRemovedLocalizationRecords' => 6, 38 | ], 39 | ], 40 | ]; 41 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/date.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | 'config.placeholder' => 6, 10 | ], 11 | ], 12 | Tab::VALIDATION->value => [ 13 | [ 14 | 'config.range.lower' => 6, 15 | 'config.range.upper' => 6, 16 | 'config.eval.required' => 6, 17 | ], 18 | ], 19 | Tab::LOCALIZATION->value => [ 20 | [ 21 | 'l10n_mode' => 12, 22 | ], 23 | [ 24 | 'config.behaviour.allowLanguageSynchronization' => 6, 25 | ], 26 | ], 27 | Tab::EXTENDED->value => [ 28 | [ 29 | 'config.eval.null' => 6, 30 | 'config.mode' => 6, 31 | ], 32 | ], 33 | ]; 34 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/datetime.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | 'config.placeholder' => 6, 10 | ], 11 | ], 12 | Tab::VALIDATION->value => [ 13 | [ 14 | 'config.range.lower' => 6, 15 | 'config.range.upper' => 6, 16 | 'config.eval.required' => 6, 17 | ], 18 | ], 19 | Tab::LOCALIZATION->value => [ 20 | [ 21 | 'l10n_mode' => 12, 22 | ], 23 | [ 24 | 'config.behaviour.allowLanguageSynchronization' => 6, 25 | ], 26 | ], 27 | Tab::EXTENDED->value => [ 28 | [ 29 | 'config.eval.null' => 6, 30 | 'config.mode' => 6, 31 | ], 32 | ], 33 | ]; 34 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/file.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'imageoverlayPalette' => 6, 9 | ], 10 | ], 11 | Tab::VALIDATION->value => [ 12 | [ 13 | 'config.minitems' => 6, 14 | 'config.maxitems' => 6, 15 | ], 16 | ], 17 | Tab::APPEARANCE->value => [ 18 | [ 19 | 'allowedFileExtensions' => 6, 20 | ], 21 | [ 22 | 'config.appearance.collapseAll' => 6, 23 | 'config.appearance.expandSingle' => 6, 24 | 'config.appearance.useSortable' => 6, 25 | 'config.appearance.fileUploadAllowed' => 6, 26 | ], 27 | ], 28 | Tab::LOCALIZATION->value => [ 29 | [ 30 | 'l10n_mode' => 12, 31 | ], 32 | [ 33 | 'config.behaviour.allowLanguageSynchronization' => 6, 34 | ], 35 | [ 36 | 'config.appearance.showSynchronizationLink' => 6, 37 | 'config.appearance.showPossibleLocalizationRecords' => 6, 38 | 'config.appearance.showAllLocalizationLink' => 6, 39 | 'config.appearance.showRemovedLocalizationRecords' => 6, 40 | ], 41 | ], 42 | ]; 43 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/float.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | 'config.placeholder' => 6, 10 | ], 11 | [ 12 | 'config.size' => 6, 13 | ], 14 | ], 15 | Tab::VALIDATION->value => [ 16 | [ 17 | 'config.eval.required' => 6, 18 | 'config.max' => 6, 19 | 'config.range.lower' => 6, 20 | 'config.range.upper' => 6, 21 | ], 22 | ], 23 | Tab::FIELD_CONTROL->value => [ 24 | [ 25 | 'config.slider.step' => 6, 26 | 'config.slider.width' => 6, 27 | ], 28 | ], 29 | Tab::LOCALIZATION->value => [ 30 | [ 31 | 'l10n_mode' => 12, 32 | ], 33 | [ 34 | 'config.behaviour.allowLanguageSynchronization' => 6, 35 | ], 36 | ], 37 | Tab::EXTENDED->value => [ 38 | [ 39 | 'config.eval.null' => 6, 40 | 'config.mode' => 6, 41 | 'config.autocomplete' => 6, 42 | ], 43 | ], 44 | ]; 45 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/group.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.internal_type' => 6, 9 | 'config.allowed' => 6, 10 | ], 11 | ], 12 | Tab::VALIDATION->value => [ 13 | [ 14 | 'config.minitems' => 6, 15 | 'config.maxitems' => 6, 16 | ], 17 | ], 18 | Tab::FIELD_CONTROL->value => [ 19 | [ 20 | 'config.fieldControl' => 12, 21 | 'config.fieldControl.editPopup.disabled' => 4, 22 | 'config.fieldControl.addRecord.disabled' => 4, 23 | 'config.fieldControl.listModule.disabled' => 4, 24 | 'config.fieldControl.elementBrowser.disabled' => 4, 25 | 'config.fieldControl.insertClipboard.disabled' => 4, 26 | ], 27 | [ 28 | 'config.fieldWizard' => 12, 29 | 'config.fieldWizard.recordsOverview.disabled' => 4, 30 | 'config.fieldWizard.tableList.disabled' => 4, 31 | ], 32 | ], 33 | Tab::LOCALIZATION->value => [ 34 | [ 35 | 'l10n_mode' => 12, 36 | ], 37 | [ 38 | 'config.behaviour.allowLanguageSynchronization' => 6, 39 | ], 40 | ], 41 | Tab::EXTENDED->value => [ 42 | [ 43 | 'config.size' => 6, 44 | 'config.autoSizeMax' => 6, 45 | ], 46 | [ 47 | 'config.multiple' => 6, 48 | ], 49 | ], 50 | ]; 51 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/inline.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'ctrl.label' => 6, 9 | 'ctrl.iconfile' => 6, 10 | ], 11 | ], 12 | Tab::VALIDATION->value => [ 13 | [ 14 | 'config.minitems' => 6, 15 | 'config.maxitems' => 6, 16 | ], 17 | ], 18 | Tab::APPEARANCE->value => [ 19 | [ 20 | 'config.appearance.newRecordLinkTitle' => 6, 21 | 'config.appearance.levelLinksPosition' => 6, 22 | ], 23 | [ 24 | 'config.appearance.collapseAll' => 6, 25 | 'config.appearance.expandSingle' => 6, 26 | 'config.appearance.useSortable' => 6, 27 | ], 28 | ], 29 | Tab::LOCALIZATION->value => [ 30 | [ 31 | 'l10n_mode' => 12, 32 | ], 33 | [ 34 | 'config.behaviour.allowLanguageSynchronization' => 6, 35 | ], 36 | [ 37 | 'config.appearance.showSynchronizationLink' => 6, 38 | 'config.appearance.showPossibleLocalizationRecords' => 6, 39 | 'config.appearance.showAllLocalizationLink' => 6, 40 | 'config.appearance.showRemovedLocalizationRecords' => 6, 41 | ], 42 | ], 43 | ]; 44 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/integer.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | 'config.placeholder' => 6, 10 | ], 11 | [ 12 | 'config.size' => 6, 13 | ], 14 | ], 15 | Tab::VALIDATION->value => [ 16 | [ 17 | 'config.eval.required' => 6, 18 | 'config.max' => 6, 19 | ], 20 | [ 21 | 'config.range.lower' => 6, 22 | 'config.range.upper' => 6, 23 | ], 24 | ], 25 | Tab::FIELD_CONTROL->value => [ 26 | [ 27 | 'config.slider.step' => 6, 28 | 'config.slider.width' => 6, 29 | ], 30 | ], 31 | Tab::LOCALIZATION->value => [ 32 | [ 33 | 'l10n_mode' => 12, 34 | ], 35 | [ 36 | 'config.behaviour.allowLanguageSynchronization' => 6, 37 | ], 38 | ], 39 | Tab::EXTENDED->value => [ 40 | [ 41 | 'config.eval.null' => 6, 42 | 'config.mode' => 6, 43 | 'config.autocomplete' => 6, 44 | ], 45 | ], 46 | ]; 47 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/linebreak.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.placeholder' => 6, 9 | ], 10 | [ 11 | 'config.size' => 6, 12 | ], 13 | ], 14 | Tab::VALIDATION->value => [ 15 | [ 16 | 'config.eval.required' => 6, 17 | 'config.fieldControl.linkPopup.options.allowedExtensions' => 6, 18 | ], 19 | ], 20 | Tab::FIELD_CONTROL->value => [ 21 | [ 22 | 'config.fieldControl.linkPopup.options.blindLinkOptions' => 12, 23 | 'config.fieldControl.linkPopup.options.blindLinkOptions.file' => 4, 24 | 'config.fieldControl.linkPopup.options.blindLinkOptions.mail' => 4, 25 | 'config.fieldControl.linkPopup.options.blindLinkOptions.page' => 4, 26 | 'config.fieldControl.linkPopup.options.blindLinkOptions.folder' => 4, 27 | 'config.fieldControl.linkPopup.options.blindLinkOptions.url' => 4, 28 | 'config.fieldControl.linkPopup.options.blindLinkOptions.telephone' => 4, 29 | ], 30 | ], 31 | Tab::LOCALIZATION->value => [ 32 | [ 33 | 'l10n_mode' => 12, 34 | ], 35 | [ 36 | 'config.behaviour.allowLanguageSynchronization' => 6, 37 | ], 38 | ], 39 | Tab::EXTENDED->value => [ 40 | [ 41 | 'config.eval.null' => 6, 42 | 'config.mode' => 6, 43 | ], 44 | ], 45 | ]; 46 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/palette.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/radio.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.items' => 12, 9 | ], 10 | [ 11 | 'config.default' => 6, 12 | ], 13 | ], 14 | Tab::LOCALIZATION->value => [ 15 | [ 16 | 'l10n_mode' => 12, 17 | ], 18 | [ 19 | 'config.behaviour.allowLanguageSynchronization' => 6, 20 | ], 21 | ], 22 | ]; 23 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/richtext.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.richtextConfiguration' => 6, 9 | ], 10 | [ 11 | 'config.default' => 6, 12 | ], 13 | ], 14 | Tab::LOCALIZATION->value => [ 15 | [ 16 | 'l10n_mode' => 12, 17 | ], 18 | [ 19 | 'config.behaviour.allowLanguageSynchronization' => 6, 20 | ], 21 | ], 22 | ]; 23 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/select.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.renderType' => 6, 9 | ], 10 | [ 11 | 'config.items' => 12, 12 | ], 13 | ], 14 | Tab::VALIDATION->value => [ 15 | [ 16 | 'config.minitems' => 6, 17 | 'config.maxitems' => 6, 18 | ], 19 | ], 20 | Tab::DATABASE->value => [ 21 | [ 22 | 'config.foreign_table' => 6, 23 | ], 24 | [ 25 | 'config.foreign_table_where' => 12, 26 | ], 27 | ], 28 | Tab::FILES->value => [ 29 | [ 30 | 'config.fileFolder' => 6, 31 | 'config.fileFolder_extList' => 6, 32 | 'config.fileFolder_recursions' => 6, 33 | ], 34 | ], 35 | Tab::LOCALIZATION->value => [ 36 | [ 37 | 'l10n_mode' => 12, 38 | ], 39 | [ 40 | 'config.behaviour.allowLanguageSynchronization' => 6, 41 | ], 42 | ], 43 | Tab::EXTENDED->value => [ 44 | [ 45 | 'config.size' => 6, 46 | 'config.autoSizeMax' => 6, 47 | ], 48 | ], 49 | ]; 50 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/string.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | 'config.placeholder' => 6, 10 | ], 11 | [ 12 | 'config.size' => 6, 13 | ], 14 | ], 15 | Tab::VALIDATION->value => [ 16 | [ 17 | 'config.max' => 6, 18 | 'config.is_in' => 6, 19 | ], 20 | [ 21 | 'config.eval.required' => 6, 22 | 'config.eval.trim' => 6, 23 | 'config.eval.alpha' => 6, 24 | 'config.eval.num' => 6, 25 | 'config.eval.alphanum' => 6, 26 | 'config.eval.alphanum_x' => 6, 27 | 'config.eval.domainname' => 6, 28 | 'config.eval.email' => 6, 29 | 'config.eval.lower' => 6, 30 | 'config.eval.upper' => 6, 31 | 'config.eval.unique' => 6, 32 | 'config.eval.uniqueInPid' => 6, 33 | 'config.eval.nospace' => 6, 34 | ], 35 | ], 36 | Tab::LOCALIZATION->value => [ 37 | [ 38 | 'l10n_mode' => 12, 39 | ], 40 | [ 41 | 'config.behaviour.allowLanguageSynchronization' => 6, 42 | ], 43 | ], 44 | Tab::EXTENDED->value => [ 45 | [ 46 | 'config.eval.null' => 6, 47 | 'config.mode' => 6, 48 | 'config.eval.md5' => 6, 49 | 'config.eval.password' => 6, 50 | 'config.autocomplete' => 6, 51 | ], 52 | ], 53 | ]; 54 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/tab.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | 8 | ], 9 | ]; 10 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/text.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.default' => 6, 9 | 'config.placeholder' => 6, 10 | ], 11 | [ 12 | 'config.cols' => 6, 13 | 'config.rows' => 6, 14 | ], 15 | ], 16 | Tab::VALIDATION->value => [ 17 | [ 18 | 'config.max' => 6, 19 | ], 20 | [ 21 | 'config.eval.required' => 6, 22 | 'config.eval.trim' => 6, 23 | ], 24 | ], 25 | Tab::LOCALIZATION->value => [ 26 | [ 27 | 'l10n_mode' => 12, 28 | ], 29 | [ 30 | 'config.behaviour.allowLanguageSynchronization' => 6, 31 | ], 32 | ], 33 | Tab::WIZARDS->value => [ 34 | [ 35 | 'config.format' => 6, 36 | ], 37 | ], 38 | Tab::EXTENDED->value => [ 39 | [ 40 | 'config.eval.null' => 6, 41 | 'config.mode' => 6, 42 | 'config.fixedFont' => 6, 43 | 'config.enableTabulator' => 6, 44 | 'config.wrap' => 6, 45 | ], 46 | ], 47 | ]; 48 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Tabs/timestamp.php: -------------------------------------------------------------------------------- 1 | value => [ 7 | [ 8 | 'config.eval' => 6, 9 | ], 10 | [ 11 | 'config.default' => 6, 12 | 'config.placeholder' => 6, 13 | ], 14 | ], 15 | Tab::VALIDATION->value => [ 16 | [ 17 | 'config.range.lower' => 6, 18 | 'config.range.upper' => 6, 19 | 'config.eval.required' => 6, 20 | ], 21 | ], 22 | Tab::LOCALIZATION->value => [ 23 | [ 24 | 'l10n_mode' => 12, 25 | ], 26 | [ 27 | 'config.behaviour.allowLanguageSynchronization' => 6, 28 | ], 29 | ], 30 | Tab::EXTENDED->value => [ 31 | [ 32 | 'config.eval.null' => 6, 33 | 'config.mode' => 6, 34 | ], 35 | ], 36 | ]; 37 | -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Templates/Uc_first.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Tests/Unit/Fixtures/Templates/Uc_first.html -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Templates/UpperExists.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Tests/Unit/Fixtures/Templates/UpperExists.html -------------------------------------------------------------------------------- /Tests/Unit/Fixtures/Templates/under_scored.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gernott/mask/e78cdc05e180963ed0a637dd867b83c1d6bdb4d8/Tests/Unit/Fixtures/Templates/under_scored.html -------------------------------------------------------------------------------- /Tests/Unit/PackageManagerTrait.php: -------------------------------------------------------------------------------- 1 | createMock(Package::class); 30 | $packageMock->method('getPackagePath')->willReturn(realpath(__DIR__ . '/../../') . '/'); 31 | $packageManagerMock = $this->createMock(PackageManager::class); 32 | $packageManagerMock->method('isPackageActive')->willReturn(true)->with('mask'); 33 | $packageManagerMock->method('getPackage')->willReturn($packageMock)->with('mask'); 34 | // @todo Replace workaround for resolvePackagePath. 35 | $packageManagerMock->method('resolvePackagePath')->willReturnCallback(function ($path) { 36 | return Environment::getProjectPath() . str_replace('EXT:mask', '', $path); 37 | }); 38 | 39 | ExtensionManagementUtility::setPackageManager($packageManagerMock); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /ext_emconf.php: -------------------------------------------------------------------------------- 1 | 'Mask', 5 | 'description' => 'Create your own content elements and page templates. Easy to use, even without programming skills because of the comfortable drag and drop system. Stored in structured database tables. Style your frontend with Fluid tags. Ideal, if you want to switch from Templavoila.', 6 | 'category' => 'plugin', 7 | 'author' => 'WEBprofil - Gernot Ploiner e.U.', 8 | 'author_email' => 'office@webprofil.at', 9 | 'author_company' => 'WEBprofil - Gernot Ploiner e.U.', 10 | 'state' => 'stable', 11 | 'clearCacheOnLoad' => 1, 12 | 'version' => '9.0.8', 13 | 'constraints' => [ 14 | 'depends' => [ 15 | 'typo3' => '12.4.0-13.4.99', 16 | 'fluid' => '12.4.0-13.4.99', 17 | 'fluid_styled_content' => '12.4.0-13.4.99', 18 | ], 19 | 'conflicts' => [], 20 | 'suggests' => [ 21 | 'gridelements' => '', 22 | 'container' => '', 23 | ], 24 | ], 25 | ]; 26 | -------------------------------------------------------------------------------- /ext_tables.sql: -------------------------------------------------------------------------------- 1 | -- Add index for CType to speed up number of used elements lookup -- 2 | CREATE TABLE tt_content ( 3 | KEY CType (CType), 4 | ); 5 | --------------------------------------------------------------------------------