/** * This prototype outputs the resource hints tags */ prototype(Carbon.IncludeAssets:ResourceHints) < prototype(Neos.Fusion:Component) { @propTypes { type = ${PropTypes.oneOf(['preconnect', 'preload', 'prefetch', 'prerender'])} dnsPrefetch = ${PropTypes.anyOf( PropTypes.string, PropTypes.arrayOf( PropTypes.string ) )} preconnect = ${PropTypes.anyOf( PropTypes.string, PropTypes.arrayOf( PropTypes.string ) )} prefetch = ${PropTypes.anyOf( PropTypes.string, PropTypes.arrayOf( PropTypes.string ) )} preload = ${PropTypes.anyOf( PropTypes.string, PropTypes.arrayOf( PropTypes.string ) )} prerender = ${PropTypes.anyOf( PropTypes.string, PropTypes.arrayOf( PropTypes.string ) )} modulePreload = ${PropTypes.anyOf( PropTypes.string, PropTypes.arrayOf( PropTypes.string ) )} preloadNodes = ${PropTypes.anyOf( PropTypes.instanceOf('Neos\Eel\FlowQuery\FlowQuery'), PropTypes.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Domain\Model\Node') ), PropTypes.instanceOf('Neos\ContentRepository\Domain\Model\Node'), PropTypes.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Core\Projection\ContentGraph\Node') ), PropTypes.instanceOf('Neos\ContentRepository\Core\Projection\ContentGraph\Node') )} prerenderNodes = ${PropTypes.anyOf( PropTypes.instanceOf('Neos\Eel\FlowQuery\FlowQuery'), PropTypes.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Domain\Model\Node') ), PropTypes.instanceOf('Neos\ContentRepository\Domain\Model\Node'), PropTypes.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Core\Projection\ContentGraph\Node') ), PropTypes.instanceOf('Neos\ContentRepository\Core\Projection\ContentGraph\Node') )} } type = ${null} dnsPrefetch = ${Configuration.setting('Carbon.IncludeAssets.ResourceHints.DnsPrefetch')} preconnect = ${Configuration.setting('Carbon.IncludeAssets.ResourceHints.Preconnect')} prefetch = ${Configuration.setting('Carbon.IncludeAssets.ResourceHints.Prefetch')} preload = ${Configuration.setting('Carbon.IncludeAssets.ResourceHints.Preload')} prerender = ${Configuration.setting('Carbon.IncludeAssets.ResourceHints.Prerender')} modulePreload = ${Configuration.setting('Carbon.IncludeAssets.ResourceHints.ModulePreload')} // Pass documentNodes who should be preloaded (Array, FlowQuery or a single node) preloadNodes = ${null} // Pass documentNodes who should be prerendererd (Array, FlowQuery or a single node) prerenderNodes = ${null} renderer = afx` ` } prototype(Carbon.IncludeAssets:ResourceHints.Items) < prototype(Neos.Fusion:Component) { @propTypes { items = ${PropTypes.arrayOf( PropTypes.string )} rel = ${PropTypes.oneOf(['dns-prefetch', 'preconnect', 'prefetch', 'modulepreload', 'preload', 'prerender'])} type = ${PropTypes.oneOf(['modulepreload', 'resourcehint'])} } items = ${null} rel = ${null} type = ${this.rel == 'modulepreload' ? 'modulepreload' : 'resourcehint'} @private.items = ${Type.isString(props.items) ? String.split(props.items, ',') : value} renderer = Neos.Fusion:Loop { @if.set = ${props.rel && props.type && Carbon.Array.check(private.items)} items = ${Array.unique(private.items)} itemRenderer = Carbon.IncludeAssets:Internal.Tag.ResourceHint { rel = ${props.rel} fileObject = ${Carbon.IncludeAssets.parseFilename(item + '(' + props.type + ')')} path = ${this.fileObject.filename} } } } prototype(Carbon.IncludeAssets:ResourceHints.Nodes) < prototype(Neos.Fusion:Component) { @propTypes { items = ${PropTypes.anyOf( PropTypes.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Domain\Model\Node') ), PropTypes.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Core\Projection\ContentGraph\Node') ), PropTypes.instanceOf('Neos\ContentRepository\Core\Projection\ContentGraph\Nodes') )} rel = ${PropTypes.oneOf(['preload', 'prerender'])} as = ${PropTypes.string} } items = ${null} rel = ${null} as = ${null} // Internal items.@process { convertFlowQueryToArray = ${Type.instance(value, 'Neos\Eel\FlowQuery\FlowQuery') ? value.get() : value} convertSingleLegacyNodeToArray = ${Type.instance(value, 'Neos\ContentRepository\Domain\Model\Node') ? [value] : value} convertSingleNodeToArray = ${Type.instance(value, 'Neos\ContentRepository\Core\Projection\ContentGraph\Node') ? [value] : value} convertNodesToArray = ${Type.instance(value, 'Neos\ContentRepository\Core\Projection\ContentGraph\Nodes') ? Array.values(value) : value} } renderer = Neos.Fusion:Loop { @if.set = ${props.items && props.rel && Carbon.Array.check(props.items)} items = ${Array.unique(props.items)} itemRenderer = afx` ` } }