You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.8 KiB
88 lines
3.8 KiB
import * as i0 from '@angular/core';
|
|
import { EventEmitter, TemplateRef, Directive, Output, ContentChild, NgModule } from '@angular/core';
|
|
import { CommonModule } from '@angular/common';
|
|
|
|
class DeferredLoader {
|
|
constructor(el, renderer, viewContainer, cd) {
|
|
this.el = el;
|
|
this.renderer = renderer;
|
|
this.viewContainer = viewContainer;
|
|
this.cd = cd;
|
|
this.onLoad = new EventEmitter();
|
|
}
|
|
ngAfterViewInit() {
|
|
if (this.shouldLoad()) {
|
|
this.load();
|
|
}
|
|
if (!this.isLoaded()) {
|
|
this.documentScrollListener = this.renderer.listen('window', 'scroll', () => {
|
|
if (this.shouldLoad()) {
|
|
this.load();
|
|
this.documentScrollListener();
|
|
this.documentScrollListener = null;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
shouldLoad() {
|
|
if (this.isLoaded()) {
|
|
return false;
|
|
}
|
|
else {
|
|
let rect = this.el.nativeElement.getBoundingClientRect();
|
|
let docElement = document.documentElement;
|
|
let winHeight = docElement.clientHeight;
|
|
return (winHeight >= rect.top);
|
|
}
|
|
}
|
|
load() {
|
|
this.view = this.viewContainer.createEmbeddedView(this.template);
|
|
this.onLoad.emit();
|
|
this.cd.detectChanges();
|
|
}
|
|
isLoaded() {
|
|
return this.view != null;
|
|
}
|
|
ngOnDestroy() {
|
|
this.view = null;
|
|
if (this.documentScrollListener) {
|
|
this.documentScrollListener();
|
|
}
|
|
}
|
|
}
|
|
DeferredLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DeferredLoader, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
DeferredLoader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: DeferredLoader, selector: "[pDefer]", outputs: { onLoad: "onLoad" }, host: { classAttribute: "p-element" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
|
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DeferredLoader, decorators: [{
|
|
type: Directive,
|
|
args: [{
|
|
selector: '[pDefer]',
|
|
host: {
|
|
'class': 'p-element'
|
|
}
|
|
}]
|
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onLoad: [{
|
|
type: Output
|
|
}], template: [{
|
|
type: ContentChild,
|
|
args: [TemplateRef]
|
|
}] } });
|
|
class DeferModule {
|
|
}
|
|
DeferModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DeferModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
DeferModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DeferModule, declarations: [DeferredLoader], imports: [CommonModule], exports: [DeferredLoader] });
|
|
DeferModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DeferModule, imports: [[CommonModule]] });
|
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: DeferModule, decorators: [{
|
|
type: NgModule,
|
|
args: [{
|
|
imports: [CommonModule],
|
|
exports: [DeferredLoader],
|
|
declarations: [DeferredLoader]
|
|
}]
|
|
}] });
|
|
|
|
/**
|
|
* Generated bundle index. Do not edit.
|
|
*/
|
|
|
|
export { DeferModule, DeferredLoader };
|
|
//# sourceMappingURL=primeng-defer.mjs.map
|