defer.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use strict";
  2. var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
  3. var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
  4. if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
  5. else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
  6. return c > 3 && r && Object.defineProperty(target, key, r), r;
  7. };
  8. var __metadata = (this && this.__metadata) || function (k, v) {
  9. if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
  10. };
  11. Object.defineProperty(exports, "__esModule", { value: true });
  12. var core_1 = require("@angular/core");
  13. var common_1 = require("@angular/common");
  14. var DeferredLoader = /** @class */ (function () {
  15. function DeferredLoader(el, renderer, viewContainer) {
  16. this.el = el;
  17. this.renderer = renderer;
  18. this.viewContainer = viewContainer;
  19. this.onLoad = new core_1.EventEmitter();
  20. }
  21. DeferredLoader.prototype.ngAfterViewInit = function () {
  22. var _this = this;
  23. if (this.shouldLoad()) {
  24. this.load();
  25. }
  26. if (!this.isLoaded()) {
  27. this.documentScrollListener = this.renderer.listen('window', 'scroll', function () {
  28. if (_this.shouldLoad()) {
  29. _this.load();
  30. _this.documentScrollListener();
  31. _this.documentScrollListener = null;
  32. }
  33. });
  34. }
  35. };
  36. DeferredLoader.prototype.shouldLoad = function () {
  37. if (this.isLoaded()) {
  38. return false;
  39. }
  40. else {
  41. var rect = this.el.nativeElement.getBoundingClientRect();
  42. var docElement = document.documentElement;
  43. var winHeight = docElement.clientHeight;
  44. return (winHeight >= rect.top);
  45. }
  46. };
  47. DeferredLoader.prototype.load = function () {
  48. this.view = this.viewContainer.createEmbeddedView(this.template);
  49. this.onLoad.emit();
  50. };
  51. DeferredLoader.prototype.isLoaded = function () {
  52. return this.view != null;
  53. };
  54. DeferredLoader.prototype.ngOnDestroy = function () {
  55. this.view = null;
  56. if (this.documentScrollListener) {
  57. this.documentScrollListener();
  58. }
  59. };
  60. __decorate([
  61. core_1.Output(),
  62. __metadata("design:type", core_1.EventEmitter)
  63. ], DeferredLoader.prototype, "onLoad", void 0);
  64. __decorate([
  65. core_1.ContentChild(core_1.TemplateRef, { static: false }),
  66. __metadata("design:type", core_1.TemplateRef)
  67. ], DeferredLoader.prototype, "template", void 0);
  68. DeferredLoader = __decorate([
  69. core_1.Directive({
  70. selector: '[pDefer]'
  71. }),
  72. __metadata("design:paramtypes", [core_1.ElementRef, core_1.Renderer2, core_1.ViewContainerRef])
  73. ], DeferredLoader);
  74. return DeferredLoader;
  75. }());
  76. exports.DeferredLoader = DeferredLoader;
  77. var DeferModule = /** @class */ (function () {
  78. function DeferModule() {
  79. }
  80. DeferModule = __decorate([
  81. core_1.NgModule({
  82. imports: [common_1.CommonModule],
  83. exports: [DeferredLoader],
  84. declarations: [DeferredLoader]
  85. })
  86. ], DeferModule);
  87. return DeferModule;
  88. }());
  89. exports.DeferModule = DeferModule;
  90. //# sourceMappingURL=defer.js.map