( injector: Injector, blockData: Map<string, BlockSummary>, nodes: Map<string, Comment>, )
| 653 | * properly initialized |
| 654 | */ |
| 655 | export function processAndInitTriggers( |
| 656 | injector: Injector, |
| 657 | blockData: Map<string, BlockSummary>, |
| 658 | nodes: Map<string, Comment>, |
| 659 | ) { |
| 660 | const idleElements: ElementTrigger[] = []; |
| 661 | const timerElements: ElementTrigger[] = []; |
| 662 | const viewportElements: ElementTrigger[] = []; |
| 663 | const immediateElements: ElementTrigger[] = []; |
| 664 | for (let [blockId, blockSummary] of blockData) { |
| 665 | const commentNode = nodes.get(blockId); |
| 666 | if (commentNode !== undefined) { |
| 667 | const numRootNodes = blockSummary.data[NUM_ROOT_NODES]; |
| 668 | let currentNode: Comment | HTMLElement = commentNode; |
| 669 | for (let i = 0; i < numRootNodes; i++) { |
| 670 | currentNode = currentNode.previousSibling as HTMLElement; |
| 671 | if (currentNode.nodeType !== Node.ELEMENT_NODE) { |
| 672 | continue; |
| 673 | } |
| 674 | const elementTrigger: ElementTrigger = {el: currentNode, blockName: blockId}; |
| 675 | // hydrate |
| 676 | if (blockSummary.hydrate.idle) { |
| 677 | idleElements.push(elementTrigger); |
| 678 | } |
| 679 | if (blockSummary.hydrate.immediate) { |
| 680 | immediateElements.push(elementTrigger); |
| 681 | } |
| 682 | if (blockSummary.hydrate.timer !== null) { |
| 683 | elementTrigger.delay = blockSummary.hydrate.timer; |
| 684 | timerElements.push(elementTrigger); |
| 685 | } |
| 686 | if (blockSummary.hydrate.viewport) { |
| 687 | if (typeof blockSummary.hydrate.viewport !== 'boolean') { |
| 688 | elementTrigger.intersectionObserverOptions = blockSummary.hydrate.viewport; |
| 689 | } |
| 690 | viewportElements.push(elementTrigger); |
| 691 | } |
| 692 | } |
| 693 | } |
| 694 | } |
| 695 | |
| 696 | setIdleTriggers(injector, idleElements); |
| 697 | setImmediateTriggers(injector, immediateElements); |
| 698 | setViewportTriggers(injector, viewportElements); |
| 699 | setTimerTriggers(injector, timerElements); |
| 700 | } |
| 701 | |
| 702 | function setIdleTriggers(injector: Injector, elementTriggers: ElementTrigger[]) { |
| 703 | for (const elementTrigger of elementTriggers) { |
no test coverage detected
searching dependent graphs…