/**
* This prototype outputs the resource hints tags
*/
prototype(Carbon.IncludeAssets:ResourceHints) < prototype(Neos.Fusion:Component) {
@propTypes {
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')
)}
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')
)}
}
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'}
// Internal
items.@process.convertToArray = ${Type.isString(value) ? String.split(value, ',') : value}
@if.set = ${this.items && this.rel && this.type && Type.isArray(this.items) && Array.length(this.items)}
renderer = Neos.Fusion:Loop {
items = ${Array.unique(props.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.arrayOf( PropTypes.instanceOf('Neos\ContentRepository\Domain\Model\Node') )}
rel = ${PropTypes.oneOf(['preload', 'prerender'])}
type = ${PropTypes.string}
}
items = ${null}
rel = ${null}
as = ${null}
// Internal
items.@process {
convertFlowQueryToArray = ${Type.instance(value, 'Neos\Eel\FlowQuery\FlowQuery') ? value.get() : value}
convertSingleToArray = ${Type.instance(value, 'Neos\ContentRepository\Domain\Model\Node') ? [value] : value}
}
@if.set = ${this.items && this.rel && Type.isArray(this.items) && Array.length(this.items)}
renderer = Neos.Fusion:Loop {
items = ${Array.unique(props.items)}
itemRenderer = afx`
`
}
}