All files / lib/pipeline/module/compiler slotModule.ts

100% Statements 8/8
100% Branches 4/4
100% Functions 1/1
100% Lines 8/8

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  26x         26x     1654x   29x   29x   19x     10x       29x      
import { HtmlCompilerModule, HtmlCompilerContext } from '../htmlCompiler';
import { MSlotNode, DocumentNode } from '../../..';
 
/**
 * Processes <m-slot> tags by replacing them with content extracted from <m-content> tags at the point of reference.
 */
export class SlotModule implements HtmlCompilerModule {
    enterNode(htmlContext: HtmlCompilerContext): void {
        // check if this is a m-slot
        if (MSlotNode.isMSlotNode(htmlContext.node)) {
            // get contents from context, and clone in case slot is repeated
            const content: DocumentNode | undefined = htmlContext.pipelineContext.fragmentContext.slotContents.get(htmlContext.node.slot)?.clone();
 
            if (content !== undefined) {
                // fill content
                htmlContext.node.replaceSelf(content.childNodes);
            } else {
                // remove slot tag
                htmlContext.node.removeSelf(true);
            }
 
            // mark as deleted
            htmlContext.setDeleted();
        }
    }
}