|
|
|
@ -4,46 +4,53 @@ import { x, b } from 'code-red';
|
|
|
|
|
|
|
|
|
|
|
|
/** @extends Wrapper */
|
|
|
|
/** @extends Wrapper */
|
|
|
|
export default class HeadWrapper extends Wrapper {
|
|
|
|
export default class HeadWrapper extends Wrapper {
|
|
|
|
|
|
|
|
/** @type {import('./Fragment.js').default} */
|
|
|
|
/** @type {import('./Fragment.js').default} */
|
|
|
|
fragment;
|
|
|
|
fragment;
|
|
|
|
|
|
|
|
|
|
|
|
/** @type {import('../../nodes/Head.js').default} */
|
|
|
|
/** @type {import('../../nodes/Head.js').default} */
|
|
|
|
node;
|
|
|
|
node;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @param {import('../Renderer.js').default} renderer
|
|
|
|
* @param {import('../Renderer.js').default} renderer
|
|
|
|
* @param {import('../Block.js').default} block
|
|
|
|
* @param {import('../Block.js').default} block
|
|
|
|
* @param {import('./shared/Wrapper.js').default} parent
|
|
|
|
* @param {import('./shared/Wrapper.js').default} parent
|
|
|
|
* @param {import('../../nodes/Head.js').default} node
|
|
|
|
* @param {import('../../nodes/Head.js').default} node
|
|
|
|
* @param {boolean} strip_whitespace
|
|
|
|
* @param {boolean} strip_whitespace
|
|
|
|
* @param {import('./shared/Wrapper.js').default} next_sibling
|
|
|
|
* @param {import('./shared/Wrapper.js').default} next_sibling
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
constructor(renderer, block, parent, node, strip_whitespace, next_sibling) {
|
|
|
|
constructor(renderer, block, parent, node, strip_whitespace, next_sibling) {
|
|
|
|
super(renderer, block, parent, node);
|
|
|
|
super(renderer, block, parent, node);
|
|
|
|
this.fragment = new FragmentWrapper(
|
|
|
|
this.fragment = new FragmentWrapper(renderer, block, node.children, this, strip_whitespace, next_sibling);
|
|
|
|
renderer,
|
|
|
|
}
|
|
|
|
block,
|
|
|
|
|
|
|
|
node.children,
|
|
|
|
/**
|
|
|
|
this,
|
|
|
|
* @param {import('../Block.js').default} block
|
|
|
|
strip_whitespace,
|
|
|
|
* @param {import('estree').Identifier} _parent_node
|
|
|
|
next_sibling
|
|
|
|
* @param {import('estree').Identifier} _parent_nodes
|
|
|
|
);
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
render(block, _parent_node, _parent_nodes) {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/** @type {import('estree').Identifier} */
|
|
|
|
* @param {import('../Block.js').default} block
|
|
|
|
let nodes;
|
|
|
|
* @param {import('estree').Identifier} _parent_node
|
|
|
|
if (this.renderer.options.hydratable && this.fragment.nodes.length) {
|
|
|
|
* @param {import('estree').Identifier} _parent_nodes
|
|
|
|
nodes = block.get_unique_name('head_nodes');
|
|
|
|
*/
|
|
|
|
block.chunks.claim.push(b `const ${nodes} = @head_selector('${this.node.id}', @_document.head);`);
|
|
|
|
render(block, _parent_node, _parent_nodes) {
|
|
|
|
}
|
|
|
|
/** @type {import('estree').Identifier} */
|
|
|
|
this.fragment.render(block, /** @type {unknown} */ /** @type {import('estree').Identifier} */ ((x `@_document.head`)), nodes);
|
|
|
|
let nodes;
|
|
|
|
if (nodes && this.renderer.options.hydratable) {
|
|
|
|
if (this.renderer.options.hydratable && this.fragment.nodes.length) {
|
|
|
|
block.chunks.claim.push(b `${nodes}.forEach(@detach);`);
|
|
|
|
nodes = block.get_unique_name('head_nodes');
|
|
|
|
}
|
|
|
|
block.chunks.claim.push(
|
|
|
|
}
|
|
|
|
b`const ${nodes} = @head_selector('${this.node.id}', @_document.head);`
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.fragment.render(
|
|
|
|
|
|
|
|
block,
|
|
|
|
|
|
|
|
/** @type {unknown} */ /** @type {import('estree').Identifier} */ (x`@_document.head`),
|
|
|
|
|
|
|
|
nodes
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
if (nodes && this.renderer.options.hydratable) {
|
|
|
|
|
|
|
|
block.chunks.claim.push(b`${nodes}.forEach(@detach);`);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|