registerBeforeAfterPrintHooks()

in projects/libs/flex-layout/core/media-marshaller/print-hook.ts [111:145]


  registerBeforeAfterPrintHooks(target: HookTarget) {
    // `defaultView` may be null when rendering on the server or in other contexts.
    if (!this._document.defaultView || this.registeredBeforeAfterPrintHooks) {
      return;
    }

    this.registeredBeforeAfterPrintHooks = true;

    const beforePrintListener = () => {
      // If we aren't already printing, start printing and update the styles as
      // if there was a regular print `MediaChange`(from matchMedia).
      if (!this.isPrinting) {
        this.isPrintingBeforeAfterEvent = true;
        this.startPrinting(target, this.getEventBreakpoints(new MediaChange(true, PRINT)));
        target.updateStyles();
      }
    };

    const afterPrintListener = () => {
      // If we aren't already printing, start printing and update the styles as
      // if there was a regular print `MediaChange`(from matchMedia).
      this.isPrintingBeforeAfterEvent = false;
      if (this.isPrinting) {
        this.stopPrinting(target);
        target.updateStyles();
      }
    };

    // Could we have teardown logic to remove if there are no print listeners being used?
    this._document.defaultView.addEventListener('beforeprint', beforePrintListener);
    this._document.defaultView.addEventListener('afterprint', afterPrintListener);

    this.beforePrintEventListeners.push(beforePrintListener);
    this.afterPrintEventListeners.push(afterPrintListener);
  }