all files / src/modules/ ModuleCallbacks.ts

100% Statements 57/57
100% Branches 2/2
100% Functions 13/13
100% Lines 56/56
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96              25×   25× 31× 23× 23×           103× 103×   103× 15×     103× 103×   103× 15×     273× 273×   273× 16×     266× 266×   266× 14×     229× 229×   229× 13×     25× 25×   25×     35× 35×   35× 12×     230× 230×   230× 13×     229× 229×   229× 13×    
import { ElementVNode, Module, VNode } from '../'
 
export class ModuleCallbacks implements Module {
  private _modules: Array<Module>
  private _moduleCount: number
 
  constructor(modules: Array<Module>) {
    this._modules = modules
    this._moduleCount = modules.length
  }
 
  public createRemoveElementFn(element: Element) {
    let listeners = this._moduleCount + 1
 
    return function removeElement() {
      if (--listeners === 0) {
        const parent = element.parentNode as Node
        parent.removeChild(element)
      }
    }
  }
 
  // module hooks
  public pre(vNode: VNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].pre(vNode)
  }
 
  public post(vNode: ElementVNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].post(vNode)
  }
 
  public init(vNode: VNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].init(vNode)
  }
 
  public create(vNode: ElementVNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].create(vNode)
  }
 
  public update(formerVNode: ElementVNode, vNode: ElementVNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].update(formerVNode, vNode)
  }
 
  public remove(vNode: ElementVNode, removeElement: () => void) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].remove(vNode, removeElement)
  }
 
  public destroy(vNode: ElementVNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].destroy(vNode)
  }
 
  public prepatch(formerVNode: VNode, vNode: VNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].prepatch(formerVNode, vNode)
  }
 
  public postpatch(formerVNode: ElementVNode, vNode: ElementVNode) {
    const modules = this._modules
    const moduleCount = this._moduleCount
 
    for (let i = 0; i < moduleCount; ++i)
      modules[i].postpatch(formerVNode, vNode)
  }
}