/**
* 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`
`
}
}