All files / src/lib/shared/utility projection.utility.ts

86.36% Statements 19/22
75% Branches 9/12
75% Functions 6/8
86.36% Lines 19/22

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52    1x 166x 166x     1x 251x 251x     1x 417x 417x 417x 75x 75x       75x   155x           342x         1x 16x 16x 16x                            
import { ElementRef } from '@angular/core';
 
const projectContent = (elementRef: ElementRef, templateSelector: string, targetSelector: string): void => {
  const element: Element = elementRef.nativeElement.querySelector(targetSelector);
  project(element, elementRef, templateSelector);
};
 
const projectSourceContent = (elementRef: ElementRef, sourceElementRef: ElementRef, templateSelector: string): void => {
  const element: Element = elementRef.nativeElement;
  project(element, sourceElementRef, templateSelector);
};
 
const project = (element: Element, sourceElementRef: ElementRef, templateSelector: string): void => {
  const templates: Array<HTMLTemplateElement> = Array.from(sourceElementRef.nativeElement.querySelectorAll(templateSelector));
  Eif (!!element) {
    if (templates.length) {
      templates.forEach((template: HTMLTemplateElement) => {
        const clone: Node = template.children.length === 0 && template.content.children.length > 0
          ? template.content.cloneNode(true)
          : template;
 
        Array.from((clone as Node).childNodes)
          .forEach((child: Node) => {
            element.appendChild(child);
          });
      });
    }
    else {
      // hide target element if nothing to project
      (element as HTMLElement).hidden = true;
    }
  }
};
 
const preserveContent = (elementRef: ElementRef, templateSelector: string, targetSelector: string): void => {
  const element: Element = elementRef.nativeElement.querySelector(targetSelector);
  const template: HTMLTemplateElement = elementRef.nativeElement.querySelector(templateSelector);
  Iif (!!element && !!template) {
    Array.from(element.children)
      .filter((elem: Element) => elem.nodeName !== 'TEMPLATE')
      .forEach((elem: Element) => {
        template.appendChild(elem);
      });
  }
};
 
export {
  projectContent,
  projectSourceContent,
  preserveContent
};