├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ ├── build.yml │ ├── generate-viewhelper-docs.yml │ ├── generate-xsd.yml │ └── release.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Classes ├── Asset.php ├── Events │ └── AfterCacheableContentIsGeneratedEventListener.php ├── Middleware │ ├── AssetInclusion.php │ └── RequestAvailability.php ├── Proxy │ ├── DispatcherProxy.php │ ├── DoctrineQueryProxy.php │ ├── FileRepositoryProxy.php │ ├── ResourceFactoryProxy.php │ └── SiteFinderProxy.php ├── Service │ ├── AssetService.php │ └── PageService.php ├── Traits │ ├── ArgumentOverride.php │ ├── ArrayConsumingViewHelperTrait.php │ ├── CompileWithContentArgumentAndRenderStatic.php │ ├── CompileWithRenderStatic.php │ ├── PageRecordViewHelperTrait.php │ ├── PageRendererTrait.php │ ├── SlideViewHelperTrait.php │ ├── SourceSetViewHelperTrait.php │ ├── TagViewHelperCompatibility.php │ ├── TagViewHelperTrait.php │ └── TemplateVariableViewHelperTrait.php ├── Utility │ ├── ContentObjectFetcher.php │ ├── ContextUtility.php │ ├── CoreUtility.php │ ├── ErrorUtility.php │ ├── FrontendSimulationUtility.php │ ├── RequestResolver.php │ └── ResourceUtility.php ├── View │ └── UncacheTemplateView.php └── ViewHelpers │ ├── Asset │ ├── AbstractAssetViewHelper.php │ ├── AssetInterface.php │ ├── PrefetchViewHelper.php │ ├── ScriptViewHelper.php │ └── StyleViewHelper.php │ ├── AssetViewHelper.php │ ├── CallViewHelper.php │ ├── Condition │ ├── Context │ │ ├── IsBackendViewHelper.php │ │ ├── IsCliViewHelper.php │ │ ├── IsDevelopmentViewHelper.php │ │ ├── IsFrontendViewHelper.php │ │ ├── IsProductionViewHelper.php │ │ └── IsTestingViewHelper.php │ ├── Form │ │ ├── HasValidatorViewHelper.php │ │ └── IsRequiredViewHelper.php │ ├── Iterator │ │ └── ContainsViewHelper.php │ ├── Page │ │ ├── HasSubpagesViewHelper.php │ │ ├── IsChildPageViewHelper.php │ │ └── IsLanguageViewHelper.php │ ├── String │ │ ├── ContainsViewHelper.php │ │ ├── IsLowercaseViewHelper.php │ │ ├── IsNumericViewHelper.php │ │ └── IsUppercaseViewHelper.php │ ├── Type │ │ ├── IsArrayViewHelper.php │ │ ├── IsBooleanViewHelper.php │ │ ├── IsDomainObjectViewHelper.php │ │ ├── IsFloatViewHelper.php │ │ ├── IsInstanceOfViewHelper.php │ │ ├── IsIntegerViewHelper.php │ │ ├── IsObjectViewHelper.php │ │ ├── IsQueryResultViewHelper.php │ │ ├── IsStringViewHelper.php │ │ └── IsTraversableViewHelper.php │ └── Variable │ │ ├── IsNullViewHelper.php │ │ └── IssetViewHelper.php │ ├── ConstViewHelper.php │ ├── Content │ ├── AbstractContentViewHelper.php │ ├── GetViewHelper.php │ ├── InfoViewHelper.php │ ├── Random │ │ ├── GetViewHelper.php │ │ └── RenderViewHelper.php │ ├── RenderViewHelper.php │ ├── Resources │ │ └── FalViewHelper.php │ └── ResourcesViewHelper.php │ ├── Context │ └── GetViewHelper.php │ ├── Count │ ├── BytesViewHelper.php │ ├── LinesViewHelper.php │ ├── SubstringViewHelper.php │ └── WordsViewHelper.php │ ├── DebugViewHelper.php │ ├── Extension │ ├── AbstractExtensionViewHelper.php │ ├── IconViewHelper.php │ ├── LoadedViewHelper.php │ └── Path │ │ ├── AbsoluteViewHelper.php │ │ ├── RelativeViewHelper.php │ │ ├── ResourcesViewHelper.php │ │ └── SiteRelativeViewHelper.php │ ├── Form │ └── FieldNameViewHelper.php │ ├── Format │ ├── AppendViewHelper.php │ ├── CaseViewHelper.php │ ├── DateRangeViewHelper.php │ ├── EliminateViewHelper.php │ ├── HashViewHelper.php │ ├── HideViewHelper.php │ ├── Json │ │ ├── DecodeViewHelper.php │ │ └── EncodeViewHelper.php │ ├── MarkdownViewHelper.php │ ├── Placeholder │ │ ├── ImageViewHelper.php │ │ └── LipsumViewHelper.php │ ├── PlaintextViewHelper.php │ ├── PregReplaceViewHelper.php │ ├── PrependViewHelper.php │ ├── ReplaceViewHelper.php │ ├── SanitizeStringViewHelper.php │ ├── SubstringViewHelper.php │ ├── TidyViewHelper.php │ ├── TrimViewHelper.php │ ├── Url │ │ ├── DecodeViewHelper.php │ │ └── EncodeViewHelper.php │ └── WordWrapViewHelper.php │ ├── Iterator │ ├── AbstractLoopViewHelper.php │ ├── ChunkViewHelper.php │ ├── ColumnViewHelper.php │ ├── DiffViewHelper.php │ ├── ExplodeViewHelper.php │ ├── ExtractViewHelper.php │ ├── FilterViewHelper.php │ ├── FirstViewHelper.php │ ├── ForViewHelper.php │ ├── ImplodeViewHelper.php │ ├── IndexOfViewHelper.php │ ├── IntersectViewHelper.php │ ├── KeysViewHelper.php │ ├── LastViewHelper.php │ ├── LoopViewHelper.php │ ├── MergeViewHelper.php │ ├── NextViewHelper.php │ ├── PopViewHelper.php │ ├── PreviousViewHelper.php │ ├── PushViewHelper.php │ ├── RandomViewHelper.php │ ├── RangeViewHelper.php │ ├── ReverseViewHelper.php │ ├── ShiftViewHelper.php │ ├── SliceViewHelper.php │ ├── SortViewHelper.php │ ├── SplitViewHelper.php │ ├── UniqueViewHelper.php │ └── ValuesViewHelper.php │ ├── LViewHelper.php │ ├── Math │ ├── AbstractMultipleMathViewHelper.php │ ├── AbstractSingleMathViewHelper.php │ ├── AverageViewHelper.php │ ├── CeilViewHelper.php │ ├── CubeViewHelper.php │ ├── CubicRootViewHelper.php │ ├── DivisionViewHelper.php │ ├── FloorViewHelper.php │ ├── MaximumViewHelper.php │ ├── MedianViewHelper.php │ ├── MinimumViewHelper.php │ ├── ModuloViewHelper.php │ ├── PowerViewHelper.php │ ├── ProductViewHelper.php │ ├── RangeViewHelper.php │ ├── RoundViewHelper.php │ ├── SquareRootViewHelper.php │ ├── SquareViewHelper.php │ ├── SubtractViewHelper.php │ └── SumViewHelper.php │ ├── Media │ ├── AbstractMediaTagViewHelper.php │ ├── AbstractMediaViewHelper.php │ ├── AudioViewHelper.php │ ├── ExistsViewHelper.php │ ├── ExtensionViewHelper.php │ ├── FilesViewHelper.php │ ├── GravatarViewHelper.php │ ├── Image │ │ ├── AbstractImageInfoViewHelper.php │ │ ├── AbstractImageViewHelper.php │ │ ├── HeightViewHelper.php │ │ ├── MimetypeViewHelper.php │ │ └── WidthViewHelper.php │ ├── ImageViewHelper.php │ ├── PdfThumbnailViewHelper.php │ ├── PictureViewHelper.php │ ├── SizeViewHelper.php │ ├── SourceViewHelper.php │ ├── SpotifyViewHelper.php │ ├── VideoViewHelper.php │ ├── VimeoViewHelper.php │ └── YoutubeViewHelper.php │ ├── Menu │ ├── AbstractMenuViewHelper.php │ ├── BrowseViewHelper.php │ ├── DeferredViewHelper.php │ ├── DirectoryViewHelper.php │ ├── ListViewHelper.php │ └── SubViewHelper.php │ ├── MenuViewHelper.php │ ├── Once │ ├── AbstractOnceViewHelper.php │ ├── CookieViewHelper.php │ ├── InstanceViewHelper.php │ ├── SessionViewHelper.php │ └── StandardViewHelper.php │ ├── OrViewHelper.php │ ├── Page │ ├── AbsoluteUrlViewHelper.php │ ├── BreadCrumbViewHelper.php │ ├── FooterViewHelper.php │ ├── Header │ │ ├── AlternateViewHelper.php │ │ ├── CanonicalViewHelper.php │ │ ├── LinkViewHelper.php │ │ ├── MetaViewHelper.php │ │ └── TitleViewHelper.php │ ├── HeaderViewHelper.php │ ├── InfoViewHelper.php │ ├── LanguageMenuViewHelper.php │ ├── LanguageViewHelper.php │ ├── LinkViewHelper.php │ ├── Resources │ │ └── FalViewHelper.php │ ├── ResourcesViewHelper.php │ ├── RootlineViewHelper.php │ └── StaticPrefixViewHelper.php │ ├── Random │ ├── NumberViewHelper.php │ └── StringViewHelper.php │ ├── Render │ ├── AbstractRenderViewHelper.php │ ├── AsciiViewHelper.php │ ├── CacheViewHelper.php │ ├── InlineViewHelper.php │ ├── RecordViewHelper.php │ ├── RequestViewHelper.php │ ├── TemplateViewHelper.php │ └── UncacheViewHelper.php │ ├── Resource │ ├── AbstractImageViewHelper.php │ ├── AbstractResourceViewHelper.php │ ├── CollectionViewHelper.php │ ├── FileViewHelper.php │ ├── ImageViewHelper.php │ ├── LanguageViewHelper.php │ ├── Record │ │ ├── AbstractRecordResourceViewHelper.php │ │ ├── FalViewHelper.php │ │ └── RecordResourceViewHelperInterface.php │ ├── RecordViewHelper.php │ └── ResourceViewHelperInterface.php │ ├── Security │ ├── AbstractSecurityViewHelper.php │ ├── AllowViewHelper.php │ └── DenyViewHelper.php │ ├── Site │ ├── NameViewHelper.php │ └── UrlViewHelper.php │ ├── System │ ├── DateTimeViewHelper.php │ ├── TimestampViewHelper.php │ └── UniqIdViewHelper.php │ ├── TagViewHelper.php │ ├── TryViewHelper.php │ ├── UnlessViewHelper.php │ ├── Uri │ ├── GravatarViewHelper.php │ ├── ImageViewHelper.php │ └── RequestViewHelper.php │ └── Variable │ ├── ConvertViewHelper.php │ ├── ExtensionConfigurationViewHelper.php │ ├── GetViewHelper.php │ ├── PregMatchViewHelper.php │ ├── Register │ ├── GetViewHelper.php │ └── SetViewHelper.php │ ├── SetViewHelper.php │ ├── TyposcriptViewHelper.php │ └── UnsetViewHelper.php ├── Configuration ├── RequestMiddlewares.php └── Services.yaml ├── Documentation ├── Changelog.rst ├── Changelog │ ├── 2.0.0.md │ ├── 2.0.1.md │ ├── 2.0.2.md │ ├── 2.1.0.md │ ├── 2.1.1.md │ ├── 2.1.2.md │ ├── 2.1.3.md │ ├── 2.1.4.md │ ├── 2.2.0.md │ ├── 2.3.0.md │ ├── 2.3.1.md │ ├── 2.3.2.md │ ├── 2.3.3.md │ ├── 2.4.0.md │ ├── 3.0.0.md │ ├── 3.0.1.md │ ├── 3.1.0.md │ ├── 4.0.0.md │ ├── 4.1.0.md │ ├── 4.2.0.md │ ├── 4.3.0.md │ ├── 4.3.1.md │ ├── 4.3.2.md │ ├── 4.3.3.md │ ├── 4.4.0.md │ ├── 5.0.0.md │ ├── 5.0.1.md │ ├── 5.1.0.md │ ├── 5.1.1.md │ ├── 5.2.0.md │ ├── 6.0.0.md │ ├── 6.0.1.md │ ├── 6.0.2.md │ ├── 6.0.3.md │ ├── 6.0.4.md │ ├── 6.0.5.md │ ├── 6.1.0.md │ ├── 6.1.1.md │ ├── 6.1.2.md │ ├── 6.1.3.md │ ├── 7.0.0.md │ ├── 7.0.1.md │ ├── 7.0.2.md │ ├── 7.0.3.md │ ├── 7.0.4.md │ ├── 7.0.5.md │ ├── 7.0.6.md │ ├── 7.0.7.md │ ├── 7.1.0.md │ ├── 7.1.1.md │ ├── 7.1.2.md │ └── 7.1.3.md ├── Classes │ └── ViewHelpers │ │ └── Iterator │ │ └── ForViewHelper │ │ ├── Arguments │ │ ├── from.md │ │ ├── iteration.md │ │ ├── step.md │ │ └── to.md │ │ └── README.md ├── Configuration │ └── Index.rst ├── Contribution │ └── Index.rst ├── Includes.rst.txt ├── Index.rst ├── Installation │ └── Index.rst ├── Settings.cfg ├── Sitemap.rst ├── Usage │ └── Index.rst ├── ViewHelpers │ ├── Asset.rst │ ├── Asset │ │ ├── Index.rst │ │ ├── Prefetch.rst │ │ ├── Script.rst │ │ └── Style.rst │ ├── Call.rst │ ├── Condition │ │ ├── Context │ │ │ ├── Index.rst │ │ │ ├── IsBackend.rst │ │ │ ├── IsCli.rst │ │ │ ├── IsDevelopment.rst │ │ │ ├── IsFrontend.rst │ │ │ ├── IsProduction.rst │ │ │ └── IsTesting.rst │ │ ├── Form │ │ │ ├── HasValidator.rst │ │ │ ├── Index.rst │ │ │ └── IsRequired.rst │ │ ├── Index.rst │ │ ├── Iterator │ │ │ ├── Contains.rst │ │ │ └── Index.rst │ │ ├── Page │ │ │ ├── HasSubpages.rst │ │ │ ├── Index.rst │ │ │ ├── IsChildPage.rst │ │ │ └── IsLanguage.rst │ │ ├── String │ │ │ ├── Contains.rst │ │ │ ├── Index.rst │ │ │ ├── IsLowercase.rst │ │ │ ├── IsNumeric.rst │ │ │ └── IsUppercase.rst │ │ ├── Type │ │ │ ├── Index.rst │ │ │ ├── IsArray.rst │ │ │ ├── IsBoolean.rst │ │ │ ├── IsDomainObject.rst │ │ │ ├── IsFloat.rst │ │ │ ├── IsInstanceOf.rst │ │ │ ├── IsInteger.rst │ │ │ ├── IsObject.rst │ │ │ ├── IsQueryResult.rst │ │ │ ├── IsString.rst │ │ │ └── IsTraversable.rst │ │ └── Variable │ │ │ ├── Index.rst │ │ │ ├── IsNull.rst │ │ │ └── Isset.rst │ ├── Const.rst │ ├── Content │ │ ├── Get.rst │ │ ├── Index.rst │ │ ├── Info.rst │ │ ├── Random │ │ │ ├── Get.rst │ │ │ ├── Index.rst │ │ │ └── Render.rst │ │ ├── Render.rst │ │ ├── Resources.rst │ │ └── Resources │ │ │ ├── Fal.rst │ │ │ └── Index.rst │ ├── Context │ │ ├── Get.rst │ │ └── Index.rst │ ├── Count │ │ ├── Bytes.rst │ │ ├── Index.rst │ │ ├── Lines.rst │ │ ├── Substring.rst │ │ └── Words.rst │ ├── Debug.rst │ ├── Extension │ │ ├── Icon.rst │ │ ├── Index.rst │ │ ├── Loaded.rst │ │ └── Path │ │ │ ├── Absolute.rst │ │ │ ├── Index.rst │ │ │ ├── Relative.rst │ │ │ ├── Resources.rst │ │ │ └── SiteRelative.rst │ ├── Form │ │ ├── FieldName.rst │ │ └── Index.rst │ ├── Format │ │ ├── Append.rst │ │ ├── Case.rst │ │ ├── DateRange.rst │ │ ├── Eliminate.rst │ │ ├── Hash.rst │ │ ├── Hide.rst │ │ ├── Index.rst │ │ ├── Json │ │ │ ├── Decode.rst │ │ │ ├── Encode.rst │ │ │ └── Index.rst │ │ ├── Markdown.rst │ │ ├── Placeholder │ │ │ ├── Image.rst │ │ │ ├── Index.rst │ │ │ └── Lipsum.rst │ │ ├── Plaintext.rst │ │ ├── PregReplace.rst │ │ ├── Prepend.rst │ │ ├── Replace.rst │ │ ├── SanitizeString.rst │ │ ├── Substring.rst │ │ ├── Tidy.rst │ │ ├── Trim.rst │ │ ├── Url │ │ │ ├── Decode.rst │ │ │ ├── Encode.rst │ │ │ ├── Index.rst │ │ │ └── SanitizeString.rst │ │ └── WordWrap.rst │ ├── Index.rst │ ├── Iterator │ │ ├── Chunk.rst │ │ ├── Column.rst │ │ ├── Diff.rst │ │ ├── Explode.rst │ │ ├── Extract.rst │ │ ├── Filter.rst │ │ ├── First.rst │ │ ├── For.rst │ │ ├── Implode.rst │ │ ├── Index.rst │ │ ├── IndexOf.rst │ │ ├── Intersect.rst │ │ ├── Keys.rst │ │ ├── Last.rst │ │ ├── Loop.rst │ │ ├── Merge.rst │ │ ├── Next.rst │ │ ├── Pop.rst │ │ ├── Previous.rst │ │ ├── Push.rst │ │ ├── Random.rst │ │ ├── Range.rst │ │ ├── Reverse.rst │ │ ├── Shift.rst │ │ ├── Slice.rst │ │ ├── Sort.rst │ │ ├── Split.rst │ │ ├── Unique.rst │ │ └── Values.rst │ ├── L.rst │ ├── Math │ │ ├── Average.rst │ │ ├── Ceil.rst │ │ ├── Cube.rst │ │ ├── CubicRoot.rst │ │ ├── Division.rst │ │ ├── Floor.rst │ │ ├── Index.rst │ │ ├── Maximum.rst │ │ ├── Median.rst │ │ ├── Minimum.rst │ │ ├── Modulo.rst │ │ ├── Power.rst │ │ ├── Product.rst │ │ ├── Range.rst │ │ ├── Round.rst │ │ ├── Square.rst │ │ ├── SquareRoot.rst │ │ ├── Subtract.rst │ │ └── Sum.rst │ ├── Media │ │ ├── Audio.rst │ │ ├── Exists.rst │ │ ├── Extension.rst │ │ ├── Files.rst │ │ ├── Gravatar.rst │ │ ├── Image.rst │ │ ├── Image │ │ │ ├── Height.rst │ │ │ ├── Index.rst │ │ │ ├── Mimetype.rst │ │ │ └── Width.rst │ │ ├── Index.rst │ │ ├── PdfThumbnail.rst │ │ ├── Picture.rst │ │ ├── Size.rst │ │ ├── Source.rst │ │ ├── Spotify.rst │ │ ├── Video.rst │ │ ├── Vimeo.rst │ │ └── Youtube.rst │ ├── Menu.rst │ ├── Menu │ │ ├── Browse.rst │ │ ├── Deferred.rst │ │ ├── Directory.rst │ │ ├── Index.rst │ │ ├── List.rst │ │ └── Sub.rst │ ├── Once │ │ ├── Cookie.rst │ │ ├── Index.rst │ │ ├── Instance.rst │ │ ├── Session.rst │ │ └── Standard.rst │ ├── Or.rst │ ├── Page │ │ ├── AbsoluteUrl.rst │ │ ├── BreadCrumb.rst │ │ ├── Footer.rst │ │ ├── Header.rst │ │ ├── Header │ │ │ ├── Alternate.rst │ │ │ ├── Canonical.rst │ │ │ ├── Index.rst │ │ │ ├── Link.rst │ │ │ ├── Meta.rst │ │ │ └── Title.rst │ │ ├── Index.rst │ │ ├── Info.rst │ │ ├── Language.rst │ │ ├── LanguageMenu.rst │ │ ├── Link.rst │ │ ├── Menu.rst │ │ ├── Menu │ │ │ ├── Browse.rst │ │ │ ├── Deferred.rst │ │ │ ├── Directory.rst │ │ │ ├── Index.rst │ │ │ ├── List.rst │ │ │ └── Sub.rst │ │ ├── Resources.rst │ │ ├── Resources │ │ │ ├── Fal.rst │ │ │ └── Index.rst │ │ ├── Rootline.rst │ │ └── StaticPrefix.rst │ ├── Random │ │ ├── Index.rst │ │ ├── Number.rst │ │ └── String.rst │ ├── Render │ │ ├── Ascii.rst │ │ ├── Cache.rst │ │ ├── Index.rst │ │ ├── Inline.rst │ │ ├── Record.rst │ │ ├── Request.rst │ │ ├── Template.rst │ │ └── Uncache.rst │ ├── Resource │ │ ├── Collection.rst │ │ ├── File.rst │ │ ├── Image.rst │ │ ├── Index.rst │ │ ├── Language.rst │ │ ├── Record.rst │ │ └── Record │ │ │ ├── Fal.rst │ │ │ └── Index.rst │ ├── Security │ │ ├── Allow.rst │ │ ├── Deny.rst │ │ └── Index.rst │ ├── Site │ │ ├── Index.rst │ │ ├── Name.rst │ │ └── Url.rst │ ├── System │ │ ├── DateTime.rst │ │ ├── Index.rst │ │ ├── Timestamp.rst │ │ └── UniqId.rst │ ├── Tag.rst │ ├── Try.rst │ ├── Unless.rst │ ├── Uri │ │ ├── Gravatar.rst │ │ ├── Image.rst │ │ ├── Index.rst │ │ └── Request.rst │ └── Variable │ │ ├── Convert.rst │ │ ├── ExtensionConfiguration.rst │ │ ├── Get.rst │ │ ├── Index.rst │ │ ├── PregMatch.rst │ │ ├── Register │ │ ├── Get.rst │ │ ├── Index.rst │ │ └── Set.rst │ │ ├── Set.rst │ │ ├── Typoscript.rst │ │ └── Unset.rst └── genindex.rst ├── LICENSE.md ├── README.md ├── Resources ├── Private │ └── Schemas │ │ └── Vhs.xsd └── Public │ └── Icons │ ├── Extension.gif │ └── Extension.svg ├── composer.json ├── ext_conf_template.txt ├── ext_emconf.php ├── ext_localconf.php ├── phpstan-baseline.neon ├── phpstan-bootstrap.php └── phpstan.neon /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: 'BUG: foobar fails when baz' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **I have checked that the bug exists in the `dev-development` branch** 11 | _Yes or no._ 12 | If you're about to answer "no" here, it is your responsibility to check `dev-development` **before** opening a bug report! 13 | 14 | **I have checked that there are no already open issues or recently closed issues about this bug** 15 | _Yes or no._ 16 | If you're about to answer "no" here, it is your responsibility to first check the open and recently closed issues for potential duplicaates. 17 | 18 | **Describe the bug** 19 | A clear and concise description of what the bug is. 20 | 21 | **To Reproduce** 22 | Steps to reproduce the behavior: 23 | 1. Go to '...' 24 | 2. Click on '....' 25 | 3. Scroll down to '....' 26 | 4. See error 27 | 28 | **Expected behavior** 29 | A clear and concise description of what you expected to happen. 30 | 31 | **Screenshots** 32 | If applicable, add screenshots to help explain your problem. 33 | 34 | **Additional context** 35 | Add any other context about the problem here. 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: 'Feature request: having foobar would be nice' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered or workarounds you currently have to use** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | tags: 4 | - "**" 5 | 6 | jobs: 7 | release: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Setup PHP 11 | uses: shivammathur/setup-php@v2 12 | with: 13 | php-version: 8.2 14 | extensions: mbstring, json 15 | ini-values: date.timezone="Europe/Copenhagen", opcache.fast_shutdown=0 16 | tools: composer:v2.2 17 | - name: "create working directory" 18 | run: "mkdir tailor" 19 | - name: "Install Tailor" 20 | working-directory: tailor 21 | run: "composer require typo3/tailor" 22 | - name: "Upload to TER" 23 | working-directory: tailor 24 | run: "./vendor/bin/tailor ter:publish $TAG $EXTENSION_KEY --artefact $ARTEFECT_URL --comment \"$MESSAGE\"" 25 | env: 26 | TYPO3_API_USERNAME: ${{ secrets.TER_USERNAME }} 27 | TYPO3_API_TOKEN: ${{ secrets.TER_TOKEN }} 28 | TAG: ${{ github.ref_name }} 29 | EXTENSION_KEY: vhs 30 | ARTEFECT_URL: "https://github.com/${{ github.repository }}/archive/${{ github.ref }}.zip" 31 | MESSAGE: "Automatic release built from GitHub. See the CHANGELOG.md file that is shipped with this release for details." 32 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Welcome, Contributor! 2 | ===================== 3 | 4 | It's great to see you here - and we welcome your contributions. But first, take a look at 5 | our official contribution guide which explains what we expect from you - in order to make 6 | sure you can expect the best possible result from our extensions. Without further ado: 7 | 8 | > https://fluidtypo3.org/documentation/contributing/contribution-guide.html 9 | -------------------------------------------------------------------------------- /Classes/Events/AfterCacheableContentIsGeneratedEventListener.php: -------------------------------------------------------------------------------- 1 | assetService = $assetService; 15 | } 16 | 17 | public function insertVhsAssetHeaderAndFooterCode(AfterCacheableContentIsGeneratedEvent $event): void 18 | { 19 | $this->assetService->buildAll([], $event->getController(), $event->isCachingEnabled()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Classes/Middleware/RequestAvailability.php: -------------------------------------------------------------------------------- 1 | handle($request); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Classes/Proxy/DispatcherProxy.php: -------------------------------------------------------------------------------- 1 | dispatcher = $dispatcher; 23 | } 24 | 25 | public function dispatch(RequestInterface $request, ?Response $response = null): ?ResponseInterface 26 | { 27 | return $this->dispatcher->dispatch($request, $response); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Classes/Proxy/FileRepositoryProxy.php: -------------------------------------------------------------------------------- 1 | fileRepository = $fileRepository; 14 | } 15 | 16 | public function findByRelation(string $tableName, string $fieldName, int $uid, ?int $workspaceId = null): array 17 | { 18 | return $this->fileRepository->findByRelation($tableName, $fieldName, $uid, $workspaceId); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Classes/Traits/ArgumentOverride.php: -------------------------------------------------------------------------------- 1 | =')) { 24 | return parent::registerArgument($name, $type, $description, $required, $defaultValue, $escape); 25 | } 26 | return parent::overrideArgument($name, $type, $description, $required, $defaultValue, $escape); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Classes/Traits/CompileWithRenderStatic.php: -------------------------------------------------------------------------------- 1 | arguments, 31 | $this->buildRenderChildrenClosure(), 32 | $this->renderingContext, 33 | ); 34 | } 35 | 36 | /** 37 | * @return \Closure 38 | */ 39 | abstract protected function buildRenderChildrenClosure(); 40 | } 41 | -------------------------------------------------------------------------------- /Classes/Traits/PageRendererTrait.php: -------------------------------------------------------------------------------- 1 | isFrontend(); 18 | } 19 | 20 | public static function isBackend(): bool 21 | { 22 | return ApplicationType::fromRequest($GLOBALS['TYPO3_REQUEST'])->isBackend(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Classes/Utility/CoreUtility.php: -------------------------------------------------------------------------------- 1 | getProperties(); 26 | $stat = $file->getStorage()->getFileInfo($file); 27 | $array = $file->toArray(); 28 | 29 | foreach ($properties as $key => $value) { 30 | $array[$key] = $value; 31 | } 32 | foreach ($stat as $key => $value) { 33 | $array[$key] = $value; 34 | } 35 | 36 | return $array; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Classes/ViewHelpers/Asset/ScriptViewHelper.php: -------------------------------------------------------------------------------- 1 | ` Asset. Settings specify 15 | * where to insert the Asset and how to treat it. 16 | */ 17 | class ScriptViewHelper extends AbstractAssetViewHelper 18 | { 19 | protected string $type = 'js'; 20 | 21 | public function initializeArguments(): void 22 | { 23 | parent::initializeArguments(); 24 | 25 | $this->registerArgument( 26 | 'async', 27 | 'boolean', 28 | 'If TRUE, adds "async" attribute to script tag (only works when standalone is set)', 29 | false, 30 | false 31 | ); 32 | $this->registerArgument( 33 | 'defer', 34 | 'boolean', 35 | 'If TRUE, adds "defer" attribute to script tag (only works when standalone is set)', 36 | false, 37 | false 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Classes/ViewHelpers/Asset/StyleViewHelper.php: -------------------------------------------------------------------------------- 1 | ` or `