@lenne.tech/ng-base 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/lenne.tech-ng-base-src-lib-base.umd.js +237 -145
- package/bundles/lenne.tech-ng-base-src-lib-base.umd.js.map +1 -1
- package/bundles/lenne.tech-ng-base.umd.js +237 -145
- package/bundles/lenne.tech-ng-base.umd.js.map +1 -1
- package/esm2015/lib/base/directives/match-height.directive.js +45 -29
- package/esm2015/lib/base/public-api.js +2 -1
- package/esm2015/lib/base/services/image.service.js +113 -0
- package/esm2015/lib/base/services/scroll.service.js +9 -84
- package/esm2015/src/lib/base/directives/match-height.directive.js +45 -29
- package/esm2015/src/lib/base/public-api.js +2 -1
- package/esm2015/src/lib/base/services/image.service.js +113 -0
- package/esm2015/src/lib/base/services/scroll.service.js +9 -84
- package/fesm2015/lenne.tech-ng-base-src-lib-base.js +160 -113
- package/fesm2015/lenne.tech-ng-base-src-lib-base.js.map +1 -1
- package/fesm2015/lenne.tech-ng-base.js +160 -113
- package/fesm2015/lenne.tech-ng-base.js.map +1 -1
- package/lib/base/directives/match-height.directive.d.ts +7 -3
- package/lib/base/public-api.d.ts +1 -0
- package/lib/base/services/image.service.d.ts +25 -0
- package/lib/base/services/scroll.service.d.ts +5 -21
- package/package.json +1 -1
- package/src/lib/base/directives/match-height.directive.d.ts +7 -3
- package/src/lib/base/lenne.tech-ng-base-src-lib-base.metadata.json +1 -1
- package/src/lib/base/public-api.d.ts +1 -0
- package/src/lib/base/services/image.service.d.ts +25 -0
- package/src/lib/base/services/scroll.service.d.ts +5 -21
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Directive, ElementRef, HostListener, Input, NgZone } from '@angular/core';
|
|
3
|
+
import { ImageService } from '../services/image.service';
|
|
2
4
|
/**
|
|
3
5
|
* Set same height (maximum) to different elements
|
|
4
6
|
*/
|
|
5
7
|
export class MatchHeightDirective {
|
|
6
|
-
constructor(el) {
|
|
8
|
+
constructor(el, imageService, zone) {
|
|
7
9
|
this.el = el;
|
|
10
|
+
this.imageService = imageService;
|
|
11
|
+
this.zone = zone;
|
|
12
|
+
this.loadLazyImages = true;
|
|
8
13
|
}
|
|
9
14
|
onResize() {
|
|
10
15
|
this.matchHeight(this.el.nativeElement, this.ltMatchHeight);
|
|
@@ -13,33 +18,41 @@ export class MatchHeightDirective {
|
|
|
13
18
|
this.matchHeight(this.el.nativeElement, this.ltMatchHeight);
|
|
14
19
|
}
|
|
15
20
|
matchHeight(parent, target) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (!Array.isArray(target)) {
|
|
21
|
-
classNames = [target];
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
classNames = target;
|
|
25
|
-
}
|
|
26
|
-
classNames.forEach((className) => {
|
|
27
|
-
// find all child structureElements with the selected class name
|
|
28
|
-
const children = parent.getElementsByClassName(className);
|
|
29
|
-
if (!children) {
|
|
21
|
+
// Timeout is set to force Angular to wait for all actions and only continue once the process has run through.
|
|
22
|
+
// Otherwise, an infinite loop will occur.
|
|
23
|
+
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
if (!parent) {
|
|
30
25
|
return;
|
|
31
26
|
}
|
|
32
|
-
|
|
33
|
-
Array.
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
let classNames;
|
|
28
|
+
if (!Array.isArray(target)) {
|
|
29
|
+
classNames = [target];
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
classNames = target;
|
|
33
|
+
}
|
|
34
|
+
for (const className of classNames) {
|
|
35
|
+
// find all child structureElements with the selected class name
|
|
36
|
+
const children = parent.getElementsByClassName(className);
|
|
37
|
+
if (!children || children.length < 2) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// Load images of children
|
|
41
|
+
if (this.loadLazyImages) {
|
|
42
|
+
yield this.imageService.preLoadImages({ elements: children });
|
|
43
|
+
}
|
|
44
|
+
// reset all children height
|
|
45
|
+
Array.from(children).forEach((element) => {
|
|
46
|
+
element.style.height = 'initial';
|
|
47
|
+
});
|
|
48
|
+
// get all the child structureElements heights
|
|
49
|
+
const itemHeights = Array.from(children).map((x) => x.getBoundingClientRect().height);
|
|
50
|
+
// find out the tallest one
|
|
51
|
+
const maxHeight = itemHeights.reduce((prev, curr) => (curr > prev ? curr : prev), 0);
|
|
52
|
+
// update the child structureElements height to the tallest one
|
|
53
|
+
Array.from(children).forEach((element) => (element.style.height = `${maxHeight}px`));
|
|
54
|
+
}
|
|
55
|
+
}), 1);
|
|
43
56
|
}
|
|
44
57
|
}
|
|
45
58
|
MatchHeightDirective.decorators = [
|
|
@@ -48,10 +61,13 @@ MatchHeightDirective.decorators = [
|
|
|
48
61
|
},] }
|
|
49
62
|
];
|
|
50
63
|
MatchHeightDirective.ctorParameters = () => [
|
|
51
|
-
{ type: ElementRef }
|
|
64
|
+
{ type: ElementRef },
|
|
65
|
+
{ type: ImageService },
|
|
66
|
+
{ type: NgZone }
|
|
52
67
|
];
|
|
53
68
|
MatchHeightDirective.propDecorators = {
|
|
54
69
|
ltMatchHeight: [{ type: Input }],
|
|
70
|
+
loadLazyImages: [{ type: Input }],
|
|
55
71
|
onResize: [{ type: HostListener, args: ['window:resize',] }]
|
|
56
72
|
};
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtaGVpZ2h0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2RpcmVjdGl2ZXMvbWF0Y2gtaGVpZ2h0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RDs7R0FFRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFBc0IsRUFBYyxFQUFZLFlBQTBCLEVBQVUsSUFBWTtRQUExRSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVksaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBRmhHLG1CQUFjLEdBQUcsSUFBSSxDQUFDO0lBRTZFLENBQUM7SUFHcEcsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFtQixFQUFFLE1BQXlCO1FBQ3hELDhHQUE4RztRQUM5RywwQ0FBMEM7UUFDMUMsVUFBVSxDQUFDLEdBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLE9BQU87YUFDUjtZQUVELElBQUksVUFBVSxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLFVBQVUsR0FBRyxNQUFNLENBQUM7YUFDckI7WUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtnQkFDbEMsZ0VBQWdFO2dCQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRTFELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BDLFNBQVM7aUJBQ1Y7Z0JBRUQsMEJBQTBCO2dCQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3ZCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDL0Q7Z0JBRUQsNEJBQTRCO2dCQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtvQkFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFFSCw4Q0FBOEM7Z0JBQzlDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFdEYsMkJBQTJCO2dCQUMzQixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUVyRiwrREFBK0Q7Z0JBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNuRztRQUNILENBQUMsQ0FBQSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs7O1lBakVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2FBQzVCOzs7WUFScUMsVUFBVTtZQUN2QyxZQUFZO1lBRGtELE1BQU07Ozs0QkFXMUUsS0FBSzs2QkFHTCxLQUFLO3VCQUtMLFlBQVksU0FBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ltYWdlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFNldCBzYW1lIGhlaWdodCAobWF4aW11bSkgdG8gZGlmZmVyZW50IGVsZW1lbnRzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tsdE1hdGNoSGVpZ2h0XScsXG59KVxuZXhwb3J0IGNsYXNzIE1hdGNoSGVpZ2h0RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIC8vIGNsYXNzIG5hbWUgdG8gbWF0Y2ggaGVpZ2h0XG4gIEBJbnB1dCgpXG4gIGx0TWF0Y2hIZWlnaHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRMYXp5SW1hZ2VzID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBpbWFnZVNlcnZpY2U6IEltYWdlU2VydmljZSwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uUmVzaXplKCkge1xuICAgIHRoaXMubWF0Y2hIZWlnaHQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLmx0TWF0Y2hIZWlnaHQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMubWF0Y2hIZWlnaHQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLmx0TWF0Y2hIZWlnaHQpO1xuICB9XG5cbiAgbWF0Y2hIZWlnaHQocGFyZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIC8vIFRpbWVvdXQgaXMgc2V0IHRvIGZvcmNlIEFuZ3VsYXIgdG8gd2FpdCBmb3IgYWxsIGFjdGlvbnMgYW5kIG9ubHkgY29udGludWUgb25jZSB0aGUgcHJvY2VzcyBoYXMgcnVuIHRocm91Z2guXG4gICAgLy8gT3RoZXJ3aXNlLCBhbiBpbmZpbml0ZSBsb29wIHdpbGwgb2NjdXIuXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBjbGFzc05hbWVzO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgY2xhc3NOYW1lcyA9IFt0YXJnZXRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NOYW1lcyA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3NOYW1lcykge1xuICAgICAgICAvLyBmaW5kIGFsbCBjaGlsZCBzdHJ1Y3R1cmVFbGVtZW50cyB3aXRoIHRoZSBzZWxlY3RlZCBjbGFzcyBuYW1lXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvYWQgaW1hZ2VzIG9mIGNoaWxkcmVuXG4gICAgICAgIGlmICh0aGlzLmxvYWRMYXp5SW1hZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbWFnZVNlcnZpY2UucHJlTG9hZEltYWdlcyh7IGVsZW1lbnRzOiBjaGlsZHJlbiB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc2V0IGFsbCBjaGlsZHJlbiBoZWlnaHRcbiAgICAgICAgQXJyYXkuZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9ICdpbml0aWFsJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ2V0IGFsbCB0aGUgY2hpbGQgc3RydWN0dXJlRWxlbWVudHMgaGVpZ2h0c1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0cyA9IEFycmF5LmZyb20oY2hpbGRyZW4pLm1hcCgoeCkgPT4geC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIGZpbmQgb3V0IHRoZSB0YWxsZXN0IG9uZVxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpdGVtSGVpZ2h0cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBjaGlsZCBzdHJ1Y3R1cmVFbGVtZW50cyBoZWlnaHQgdG8gdGhlIHRhbGxlc3Qgb25lXG4gICAgICAgIEFycmF5LmZyb20oY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiAoZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgKSk7XG4gICAgICB9XG4gICAgfSwgMSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -48,6 +48,7 @@ export * from './services/fullscreen.service';
|
|
|
48
48
|
export * from './services/graphql.service';
|
|
49
49
|
export * from './services/graphql-meta.service';
|
|
50
50
|
export * from './services/graphql-plus.service';
|
|
51
|
+
export * from './services/image.service';
|
|
51
52
|
export * from './services/loader.service';
|
|
52
53
|
export * from './services/scroll.service';
|
|
53
54
|
export * from './services/seo.service';
|
|
@@ -56,4 +57,4 @@ export * from './services/storage.service';
|
|
|
56
57
|
export * from './types/storage.type';
|
|
57
58
|
// Validators
|
|
58
59
|
export * from './validators/must-match.validator';
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYyxlQUFlLENBQUM7QUFFOUIsVUFBVTtBQUNWLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBRXpDLGFBQWE7QUFDYixjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELFlBQVk7QUFDWixjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELFNBQVM7QUFDVCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxRQUFRO0FBQ1IsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUV4QyxhQUFhO0FBQ2IsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsa0NBQWtDLENBQUM7QUFFakQsUUFBUTtBQUNSLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxXQUFXO0FBQ1gsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxRQUFRO0FBQ1IsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxhQUFhO0FBQ2IsY0FBYyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwb3J0cyBmb3IgcHVibGljIEFQSVxuICovXG5cbi8vIE1vZHVsZVxuZXhwb3J0ICogZnJvbSAnLi9iYXNlLm1vZHVsZSc7XG5cbi8vIENsYXNzZXNcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy9iYXNpYy11c2VyLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy9ncmFwaHFsLWVudW0uY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzL2dyYXBocWwtbWV0YS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMvZ3JhcGhxbC10eXBlLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vY2xhc3Nlcy9oZWxwZXIuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzL3N0YW5kYXJkLmNsYXNzJztcblxuLy8gRGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2NvbnRleHQtbWVudS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2xhenktbG9hZC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL21hdGNoLWhlaWdodC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuXG4vLyBGYWN0b3JpZXNcbmV4cG9ydCAqIGZyb20gJy4vZmFjdG9yaWVzL2Fwb2xsby1vcHRpb25zLmZhY3RvcnknO1xuXG4vLyBHdWFyZHNcbmV4cG9ydCAqIGZyb20gJy4vZ3VhcmRzL2F1dGguZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9ndWFyZHMvY2FuLWRlYWN0aXZhdGUuZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9ndWFyZHMvbG9nb3V0Lmd1YXJkJztcblxuLy8gRW51bXNcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvY29tcGFyaXNvbi1vcGVyYXRvci5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vZW51bXMvZ3JhcGhxbC1yZXF1ZXN0LXR5cGUuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zL2xvZ2ljYWwtb3BlcmF0b3IuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zL3NvcnQtb3JkZXIuZW51bSc7XG5cbi8vIEludGVyZmFjZXNcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9iYXNlLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9jYW4tY29tcG9uZW50LWRlYWN0aXZhdGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9jb21iaW5lZC1maWx0ZXItaW5wdXQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9maWVsZC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2ZpZWxkLW9iamVjdC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1pbnB1dC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2dyYXBocWwtb3B0aW9ucy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2dyYXBocWwtcGx1cy1vcHRpb25zLmludGVyZmFjZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2dyYXBocWwtdHlwZS1jb2xsZWN0aW9uLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvc2luZ2xlLWZpbHRlci1pbnB1dC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL3NvcnQtaW5wdXQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9maW5kLWFyZ3MuaW50ZXJmYWNlJztcblxuLy8gUGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvZWxsaXBzZXMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3NhZmUtaHRtbC5waXBlJztcblxuLy8gU2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZnVsbHNjcmVlbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZ3JhcGhxbC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZ3JhcGhxbC1tZXRhLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9ncmFwaHFsLXBsdXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ltYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9sb2FkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3Njcm9sbC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2VvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBUeXBlc1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9zdG9yYWdlLnR5cGUnO1xuXG4vLyBWYWxpZGF0b3JzXG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMvbXVzdC1tYXRjaC52YWxpZGF0b3InO1xuIl19
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Image service
|
|
6
|
+
*/
|
|
7
|
+
export class ImageService {
|
|
8
|
+
/**
|
|
9
|
+
* Preaload images (for lazy handling)
|
|
10
|
+
*
|
|
11
|
+
* @param options
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
preLoadImages(options) {
|
|
15
|
+
// Init configuration
|
|
16
|
+
const config = Object.assign({ doneFunnction: undefined, elements: document, regExp: undefined, timeout: undefined }, options);
|
|
17
|
+
return new Promise((resolve) => {
|
|
18
|
+
var _a;
|
|
19
|
+
// Init variables
|
|
20
|
+
let resolved = false;
|
|
21
|
+
let timeoutId;
|
|
22
|
+
// HTMLCollection to array
|
|
23
|
+
if (config.elements instanceof HTMLCollection) {
|
|
24
|
+
config.elements = Array.from(config.elements);
|
|
25
|
+
}
|
|
26
|
+
// Single element to array
|
|
27
|
+
if (!Array.isArray(config.elements)) {
|
|
28
|
+
config.elements = [config.elements];
|
|
29
|
+
}
|
|
30
|
+
// Init loading
|
|
31
|
+
const promises = [];
|
|
32
|
+
// Get all images
|
|
33
|
+
let images = [];
|
|
34
|
+
config.elements.forEach((element) => {
|
|
35
|
+
images = images.concat(Array.from(element.getElementsByTagName('img')));
|
|
36
|
+
});
|
|
37
|
+
// Prepare images
|
|
38
|
+
for (const image of images) {
|
|
39
|
+
const src = image.getAttribute('src');
|
|
40
|
+
// Check if changes are necessary and possible
|
|
41
|
+
if ((image.complete && image.naturalHeight !== 0) || // already laoded
|
|
42
|
+
image.getAttribute('loading') !== 'lazy' || // loading attribute !== lazy
|
|
43
|
+
!src || // Image has no src
|
|
44
|
+
((_a = config.regExp) === null || _a === void 0 ? void 0 : _a.test(src)) // Test if src matches regular expression
|
|
45
|
+
) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Replace lazy loading image with immediately loading image
|
|
49
|
+
const newImage = document.createElement('img');
|
|
50
|
+
Array.from(image.attributes).forEach((attr) => {
|
|
51
|
+
if (attr.name !== 'loading' && attr.name !== 'src') {
|
|
52
|
+
newImage.setAttribute(attr.name, attr.value);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
image.replaceWith(newImage);
|
|
56
|
+
// Wait for laoding
|
|
57
|
+
promises.push(this.loadImage(newImage, src));
|
|
58
|
+
}
|
|
59
|
+
if (config.timeout) {
|
|
60
|
+
timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
resolved = true;
|
|
62
|
+
if (config.doneFunnction) {
|
|
63
|
+
yield config.doneFunction();
|
|
64
|
+
}
|
|
65
|
+
resolve(undefined);
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
// Wait until all images loaded
|
|
69
|
+
Promise.all(promises)
|
|
70
|
+
.catch((e) => console.error('Error during image loading', e))
|
|
71
|
+
.finally(() => __awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
// Check if already resolved
|
|
73
|
+
if (resolved) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Stop timeout
|
|
77
|
+
if (timeoutId) {
|
|
78
|
+
clearTimeout(timeoutId);
|
|
79
|
+
}
|
|
80
|
+
// Return result
|
|
81
|
+
let result;
|
|
82
|
+
if (config.doneFunnction) {
|
|
83
|
+
result = yield config.doneFunction();
|
|
84
|
+
}
|
|
85
|
+
resolve(result);
|
|
86
|
+
}));
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Load image for image element
|
|
91
|
+
*
|
|
92
|
+
* @param imageElement
|
|
93
|
+
* @param src
|
|
94
|
+
* @protected
|
|
95
|
+
*/
|
|
96
|
+
loadImage(imageElement, src) {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
src = src || imageElement.src;
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
imageElement.onload = () => resolve(imageElement);
|
|
101
|
+
imageElement.onerror = reject;
|
|
102
|
+
imageElement.src = src;
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
ImageService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ImageService_Factory() { return new ImageService(); }, token: ImageService, providedIn: "root" });
|
|
108
|
+
ImageService.decorators = [
|
|
109
|
+
{ type: Injectable, args: [{
|
|
110
|
+
providedIn: 'root',
|
|
111
|
+
},] }
|
|
112
|
+
];
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL3NlcnZpY2VzL2ltYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDOztHQUVHO0FBSUgsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsT0FLcEI7UUFDQyxxQkFBcUI7UUFDckIsTUFBTSxNQUFNLG1CQUNWLGFBQWEsRUFBRSxTQUFTLEVBQ3hCLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLE9BQU8sRUFBRSxTQUFTLElBQ2YsT0FBTyxDQUNYLENBQUM7UUFFRixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7O1lBQzdCLGlCQUFpQjtZQUNqQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxTQUFTLENBQUM7WUFFZCwwQkFBMEI7WUFDMUIsSUFBSSxNQUFNLENBQUMsUUFBUSxZQUFZLGNBQWMsRUFBRTtnQkFDN0MsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMvQztZQUVELDBCQUEwQjtZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFjLENBQUM7YUFDbEQ7WUFFRCxlQUFlO1lBQ2YsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBRXBCLGlCQUFpQjtZQUNqQixJQUFJLE1BQU0sR0FBdUIsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FB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QUFDLEdBQUcsQ0FBQztZQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyQyxZQUFZLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDbEQsWUFBWSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQzlCLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBOzs7O1lBNUhGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBJbWFnZSBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZVNlcnZpY2Uge1xuICAvKipcbiAgICogUHJlYWxvYWQgaW1hZ2VzIChmb3IgbGF6eSBoYW5kbGluZylcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHVibGljIHByZUxvYWRJbWFnZXMob3B0aW9ucz86IHtcbiAgICBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkO1xuICAgIGVsZW1lbnRzPzogRWxlbWVudCB8IEVsZW1lbnRbXSB8IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4gfCBEb2N1bWVudCB8IEhUTUxFbGVtZW50IHwgSFRNTEVsZW1lbnRbXTtcbiAgICByZWdFeHA/OiBSZWdFeHA7XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSW5pdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZG9uZUZ1bm5jdGlvbjogdW5kZWZpbmVkLFxuICAgICAgZWxlbWVudHM6IGRvY3VtZW50LFxuICAgICAgcmVnRXhwOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIEluaXQgdmFyaWFibGVzXG4gICAgICBsZXQgcmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGxldCB0aW1lb3V0SWQ7XG5cbiAgICAgIC8vIEhUTUxDb2xsZWN0aW9uIHRvIGFycmF5XG4gICAgICBpZiAoY29uZmlnLmVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24pIHtcbiAgICAgICAgY29uZmlnLmVsZW1lbnRzID0gQXJyYXkuZnJvbShjb25maWcuZWxlbWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW5nbGUgZWxlbWVudCB0byBhcnJheVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5lbGVtZW50cykpIHtcbiAgICAgICAgY29uZmlnLmVsZW1lbnRzID0gW2NvbmZpZy5lbGVtZW50c10gYXMgRWxlbWVudFtdO1xuICAgICAgfVxuXG4gICAgICAvLyBJbml0IGxvYWRpbmdcbiAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG5cbiAgICAgIC8vIEdldCBhbGwgaW1hZ2VzXG4gICAgICBsZXQgaW1hZ2VzOiBIVE1MSW1hZ2VFbGVtZW50W10gPSBbXTtcbiAgICAgIGNvbmZpZy5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGltYWdlcyA9IGltYWdlcy5jb25jYXQoQXJyYXkuZnJvbShlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKSkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFByZXBhcmUgaW1hZ2VzXG4gICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgICBjb25zdCBzcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNoYW5nZXMgYXJlIG5lY2Vzc2FyeSBhbmQgcG9zc2libGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChpbWFnZS5jb21wbGV0ZSAmJiBpbWFnZS5uYXR1cmFsSGVpZ2h0ICE9PSAwKSB8fCAvLyBhbHJlYWR5IGxhb2RlZFxuICAgICAgICAgIGltYWdlLmdldEF0dHJpYnV0ZSgnbG9hZGluZycpICE9PSAnbGF6eScgfHwgLy8gbG9hZGluZyBhdHRyaWJ1dGUgIT09IGxhenlcbiAgICAgICAgICAhc3JjIHx8IC8vIEltYWdlIGhhcyBubyBzcmNcbiAgICAgICAgICBjb25maWcucmVnRXhwPy50ZXN0KHNyYykgLy8gVGVzdCBpZiBzcmMgbWF0Y2hlcyByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXBsYWNlIGxhenkgbG9hZGluZyBpbWFnZSB3aXRoIGltbWVkaWF0ZWx5IGxvYWRpbmcgaW1hZ2VcbiAgICAgICAgY29uc3QgbmV3SW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgQXJyYXkuZnJvbShpbWFnZS5hdHRyaWJ1dGVzKS5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ2xvYWRpbmcnICYmIGF0dHIubmFtZSAhPT0gJ3NyYycpIHtcbiAgICAgICAgICAgIG5ld0ltYWdlLnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGltYWdlLnJlcGxhY2VXaXRoKG5ld0ltYWdlKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBsYW9kaW5nXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy5sb2FkSW1hZ2UobmV3SW1hZ2UsIHNyYykpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChjb25maWcuZG9uZUZ1bm5jdGlvbikge1xuICAgICAgICAgICAgYXdhaXQgY29uZmlnLmRvbmVGdW5jdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IHVudGlsIGFsbCBpbWFnZXMgbG9hZGVkXG4gICAgICBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgLmNhdGNoKChlKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgaW1hZ2UgbG9hZGluZycsIGUpKVxuICAgICAgICAuZmluYWxseShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSByZXNvbHZlZFxuICAgICAgICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0b3AgdGltZW91dFxuICAgICAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJldHVybiByZXN1bHRcbiAgICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAgIGlmIChjb25maWcuZG9uZUZ1bm5jdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgY29uZmlnLmRvbmVGdW5jdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgaW1hZ2UgZm9yIGltYWdlIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIGltYWdlRWxlbWVudFxuICAgKiBAcGFyYW0gc3JjXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkSW1hZ2UoaW1hZ2VFbGVtZW50OiBIVE1MSW1hZ2VFbGVtZW50LCBzcmM/OiBzdHJpbmcpIHtcbiAgICBzcmMgPSBzcmMgfHwgaW1hZ2VFbGVtZW50LnNyYztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW1hZ2VFbGVtZW50Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2VFbGVtZW50KTtcbiAgICAgIGltYWdlRWxlbWVudC5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgaW1hZ2VFbGVtZW50LnNyYyA9IHNyYztcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -2,9 +2,11 @@ import { __awaiter } from "tslib";
|
|
|
2
2
|
import { Inject, Injectable } from '@angular/core';
|
|
3
3
|
import { Router } from '@angular/router';
|
|
4
4
|
import { BASE_MODULE_CONFIG } from '../interfaces/base-module-config.interface';
|
|
5
|
+
import { ImageService } from './image.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@angular/router";
|
|
7
8
|
import * as i2 from "../interfaces/base-module-config.interface";
|
|
9
|
+
import * as i3 from "./image.service";
|
|
8
10
|
/**
|
|
9
11
|
* Scroll service for autoscroll to specific fragments
|
|
10
12
|
*/
|
|
@@ -12,9 +14,10 @@ export class ScrollService {
|
|
|
12
14
|
/**
|
|
13
15
|
* Initializer
|
|
14
16
|
*/
|
|
15
|
-
constructor(router, moduleConfig) {
|
|
17
|
+
constructor(router, moduleConfig, imageService) {
|
|
16
18
|
this.router = router;
|
|
17
19
|
this.moduleConfig = moduleConfig;
|
|
20
|
+
this.imageService = imageService;
|
|
18
21
|
/**
|
|
19
22
|
* Is a scroll listener set
|
|
20
23
|
*
|
|
@@ -64,7 +67,7 @@ export class ScrollService {
|
|
|
64
67
|
}
|
|
65
68
|
// Load images before scrolling (once)
|
|
66
69
|
if (config.loadImagesBefore) {
|
|
67
|
-
yield this.preLoadImages();
|
|
70
|
+
yield this.imageService.preLoadImages();
|
|
68
71
|
}
|
|
69
72
|
// Get get bounding rect of target element
|
|
70
73
|
const cords = el.getBoundingClientRect();
|
|
@@ -175,87 +178,8 @@ export class ScrollService {
|
|
|
175
178
|
// Return promise
|
|
176
179
|
return this.scrollPromise;
|
|
177
180
|
}
|
|
178
|
-
/**
|
|
179
|
-
* Preaload images (for lazy handling)
|
|
180
|
-
*
|
|
181
|
-
* @param options
|
|
182
|
-
* @protected
|
|
183
|
-
*/
|
|
184
|
-
preLoadImages(options) {
|
|
185
|
-
// Init configuration
|
|
186
|
-
const config = Object.assign({ doneFunnction: undefined, timeout: undefined }, options);
|
|
187
|
-
return new Promise((resolve) => {
|
|
188
|
-
// Init variables
|
|
189
|
-
let resolved = false;
|
|
190
|
-
let timeoutId;
|
|
191
|
-
// Init loading
|
|
192
|
-
const images = Array.from(document.getElementsByTagName('img'));
|
|
193
|
-
const promises = [];
|
|
194
|
-
// Prepare images
|
|
195
|
-
for (const image of images) {
|
|
196
|
-
const src = image.getAttribute('src');
|
|
197
|
-
// Check if changes are necessary and possible
|
|
198
|
-
if ((image.complete && image.naturalHeight !== 0) || image.getAttribute('loading') !== 'lazy' || !src) {
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
const newImage = document.createElement('img');
|
|
202
|
-
Array.from(image.attributes).forEach((attr) => {
|
|
203
|
-
if (attr.name !== 'loading' && attr.name !== 'src') {
|
|
204
|
-
newImage.setAttribute(attr.name, attr.value);
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
image.replaceWith(newImage);
|
|
208
|
-
promises.push(this.loadImage(newImage, src));
|
|
209
|
-
}
|
|
210
|
-
if (config.timeout) {
|
|
211
|
-
timeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
212
|
-
resolved = true;
|
|
213
|
-
if (config.doneFunnction) {
|
|
214
|
-
yield config.doneFunction();
|
|
215
|
-
}
|
|
216
|
-
resolve(undefined);
|
|
217
|
-
}));
|
|
218
|
-
}
|
|
219
|
-
// Wait until all images loaded
|
|
220
|
-
Promise.all(promises)
|
|
221
|
-
.catch((e) => console.error('Error during image loading', e))
|
|
222
|
-
.finally(() => __awaiter(this, void 0, void 0, function* () {
|
|
223
|
-
// Check if already resolved
|
|
224
|
-
if (resolved) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
// Stop timeout
|
|
228
|
-
if (timeoutId) {
|
|
229
|
-
clearTimeout(timeoutId);
|
|
230
|
-
}
|
|
231
|
-
// Return result
|
|
232
|
-
let result;
|
|
233
|
-
if (config.doneFunnction) {
|
|
234
|
-
result = yield config.doneFunction();
|
|
235
|
-
}
|
|
236
|
-
resolve(result);
|
|
237
|
-
}));
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Load image for image element
|
|
242
|
-
*
|
|
243
|
-
* @param imageElement
|
|
244
|
-
* @param src
|
|
245
|
-
* @protected
|
|
246
|
-
*/
|
|
247
|
-
loadImage(imageElement, src) {
|
|
248
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
249
|
-
src = src || imageElement.src;
|
|
250
|
-
return new Promise((resolve, reject) => {
|
|
251
|
-
imageElement.onload = () => resolve(imageElement);
|
|
252
|
-
imageElement.onerror = reject;
|
|
253
|
-
imageElement.src = src;
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
181
|
}
|
|
258
|
-
ScrollService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScrollService_Factory() { return new ScrollService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.BASE_MODULE_CONFIG)); }, token: ScrollService, providedIn: "root" });
|
|
182
|
+
ScrollService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ScrollService_Factory() { return new ScrollService(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.BASE_MODULE_CONFIG), i0.ɵɵinject(i3.ImageService)); }, token: ScrollService, providedIn: "root" });
|
|
259
183
|
ScrollService.decorators = [
|
|
260
184
|
{ type: Injectable, args: [{
|
|
261
185
|
providedIn: 'root',
|
|
@@ -263,6 +187,7 @@ ScrollService.decorators = [
|
|
|
263
187
|
];
|
|
264
188
|
ScrollService.ctorParameters = () => [
|
|
265
189
|
{ type: Router },
|
|
266
|
-
{ type: undefined, decorators: [{ type: Inject, args: [BASE_MODULE_CONFIG,] }] }
|
|
190
|
+
{ type: undefined, decorators: [{ type: Inject, args: [BASE_MODULE_CONFIG,] }] },
|
|
191
|
+
{ type: ImageService }
|
|
267
192
|
];
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSw0Q0FBNEMsQ0FBQzs7OztBQUVsRzs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBNkN4Qjs7T0FFRztJQUNILFlBQW9CLE1BQWMsRUFBc0MsWUFBOEI7UUFBbEYsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFzQyxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFqQ3RHOzs7O1dBSUc7UUFDTyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUVqQzs7OztXQUlHO1FBQ08sZ0JBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQXNCekIsTUFBTSxNQUFNLG1CQUNWLHFCQUFxQixFQUFFLEdBQUcsRUFDMUIsWUFBWSxFQUFFLEdBQUcsRUFDakIsa0JBQWtCLEVBQUUsR0FBRyxJQUNwQixZQUFZLENBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDRyxRQUFRLENBQ1osRUFBVSxFQUNWLFVBTUksRUFBRTs7WUFFTixpQkFBaUI7WUFDakIsTUFBTSxNQUFNLG1CQUNWLFFBQVEsRUFBRSxJQUFJLEVBQ2QsZ0JBQWdCLEVBQUUsSUFB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LENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTs7OztZQXBWRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVJRLE1BQU07NENBeUR3QixNQUFNLFNBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQkFTRV9NT0RVTEVfQ09ORklHLCBCYXNlTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9iYXNlLW1vZHVsZS1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBTY3JvbGwgc2VydmljZSBmb3IgYXV0b3Njcm9sbCB0byBzcGVjaWZpYyBmcmFnbWVudHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgcHJvbWlzZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmVzb2x2ZSBmdW5jdGlvbiBvZiBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxQcm9taXNlUmVzb2x2ZTogKHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIElzIGEgc2Nyb2xsIGxpc3RlbmVyIHNldFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsTGlzdGVuZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgdGltZXI7XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxUaW1lciA9IC0xO1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgb2Zmc2V0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERldGVjdGlvbiBvZmZzZXRcbiAgICogU2hvdWxkIGJlID49IHNjcm9sbE9mZnNldFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRldGVjdGlvbk9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyByYXRlIGZvciBzY3JvbGwgZG9uZSBkZXRlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxTYW1wbGluZ1JhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIEBJbmplY3QoQkFTRV9NT0RVTEVfQ09ORklHKSBwcml2YXRlIG1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZykge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIHNjcm9sbERldGVjdGlvbk9mZnNldDogMjAwLFxuICAgICAgc2Nyb2xsT2Zmc2V0OiAxMDAsXG4gICAgICBzY3JvbGxTYW1wbGluZ1JhdGU6IDEwMCxcbiAgICAgIC4uLm1vZHVsZUNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5kZXRlY3Rpb25PZmZzZXQgPSBjb25maWcuc2Nyb2xsRGV0ZWN0aW9uT2Zmc2V0O1xuICAgIHRoaXMuc2Nyb2xsT2Zmc2V0ID0gY29uZmlnLnNjcm9sbE9mZnNldDtcbiAgICB0aGlzLnNjcm9sbFNhbXBsaW5nUmF0ZSA9IGNvbmZpZy5zY3JvbGxTYW1wbGluZ1JhdGU7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHRvIHN0cnVjdHVyZUVsZW1lbnQgd2l0aCBzcGVjaWZpYyBJRFxuICAgKi9cbiAgYXN5bmMgc2Nyb2xsVG8oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjaGVja1VybD86IGJvb2xlYW47XG4gICAgICBsb2FkSW1hZ2VzQmVmb3JlPzogYm9vbGVhbjtcbiAgICAgIHJlc2V0U3R5bGVzPzogYm9vbGVhbjtcbiAgICAgIHNldE92ZXJmbG93PzogYm9vbGVhbjtcbiAgICAgIHN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8vIFByZXBhcmUgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgY2hlY2tVcmw6IHRydWUsXG4gICAgICBsb2FkSW1hZ2VzQmVmb3JlOiB0cnVlLFxuICAgICAgcmVzZXRTdHlsZXM6IGZhbHNlLFxuICAgICAgc2V0T3ZlcmZsb3c6IHRydWUsXG4gICAgICBzdG9wUHJvcGFnYXRpb246IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBjdXJyZW50IFVSTFxuICAgIGlmIChjb25maWcuY2hlY2tVcmwgJiYgdGhpcy5yb3V0ZXIudXJsICE9PSAnLycgJiYgIXRoaXMucm91dGVyLnVybC5zdGFydHNXaXRoKCcvIycpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSwgeyBmcmFnbWVudDogaWQgfSk7XG4gICAgICByZXR1cm4gIWNvbmZpZy5zdG9wUHJvcGFnYXRpb247XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGFyZ2V0IGVsZW1lbnQgZXhpdHNcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICBpZiAoIWVsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNaXNzaW5nIHNjcm9sbCBlbGVtZW50IHdpdGggSUQ6JywgaWQpO1xuICAgICAgcmV0dXJuICFjb25maWcuc3RvcFByb3BhZ2F0aW9uO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGJvZHkgb3ZlcmZsb3cgaXMgdmlzaWJsZVxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBzY3JvbGwgaGFuZGxpbmdcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgIGxldCB1bmRvT3ZlcmZsb3dDaGFuZ2VzID0gZmFsc2U7XG4gICAgY29uc3Qgc2Nyb2xsQm9keVN0eWxlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkod2luZG93LmdldENvbXB1dGVkU3R5bGUoYm9keSkpKTtcbiAgICBpZiAoY29uZmlnLnNldE92ZXJmbG93ICYmIChzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WCAhPT0gJ3Zpc2libGUnIHx8IHNjcm9sbEJvZHlTdHlsZXMub3ZlcmZsb3dZICE9PSAndmlzaWJsZScpKSB7XG4gICAgICAvLyBTZXQgYm9keSBvdmVyZmxvdyB0byB2aXNpYmxlXG4gICAgICBjb25zb2xlLndhcm4oJ1N0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgd2lsbCBiZSBzZXQgdG8gXCJ2aXNpYmxlXCIgZm9yIHNjcm9sbGluZyEnKTtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gJ3Zpc2libGUnO1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSAndmlzaWJsZSc7XG4gICAgICB1bmRvT3ZlcmZsb3dDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGltYWdlcyBiZWZvcmUgc2Nyb2xsaW5nIChvbmNlKVxuICAgIGlmIChjb25maWcubG9hZEltYWdlc0JlZm9yZSkge1xuICAgICAgYXdhaXQgdGhpcy5wcmVMb2FkSW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGdldCBib3VuZGluZyByZWN0IG9mIHRhcmdldCBlbGVtZW50XG4gICAgY29uc3QgY29yZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFNjcm9sbCB0byBlbGVtZW50XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiBjb3Jkcy50b3AgLSB0aGlzLnNjcm9sbE9mZnNldCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZSh7XG4gICAgICBkb25lRnVuY3Rpb246ICgpID0+IHtcbiAgICAgICAgLy8gVW5kbyBjaGFuZ2VzXG4gICAgICAgIGlmICh1bmRvT3ZlcmZsb3dDaGFuZ2VzICYmIGNvbmZpZy5yZXNldFN0eWxlcykge1xuICAgICAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1g7XG4gICAgICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ09yaWdpbmFsIHN0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJuIHN0b3AgcHJvcGFnYXRpb24gY29uZmlndXJhdGlvblxuICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBhY3RpdmUgc3RydWN0dXJlRWxlbWVudFxuICAgKi9cbiAgZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdD8pOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpO1xuICAgIGxldCBsYXN0SWQgPSBudWxsO1xuICAgIGxldCBsYXN0UG9zaXRpb24gPSAwIC0gdGhpcy5kZXRlY3Rpb25PZmZzZXQgLSAxO1xuICAgIGVsZW1lbnRzV2l0aElkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvcmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvcCA9IGNvcmRzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIHRoaXMuZGV0ZWN0aW9uT2Zmc2V0O1xuICAgICAgaWYgKFxuICAgICAgICAoIWxpc3QgfHwgIWxpc3QubGVuZ3RoIHx8IGxpc3QuaW5jbHVkZXMoZWxlbWVudC5pZCkpICYmIC8vIEluIGxpc3RcbiAgICAgICAgdG9wIDwgY3VycmVudFNjcm9sbFBvc2l0aW9uICYmIC8vIEluIGFjdGl2ZSBhcmVhXG4gICAgICAgIGxhc3RQb3NpdGlvbiA8IHRvcCAvLyBIaWdoZXIgdGhhbiB0aGUgbGFzdCBvbmVcbiAgICAgICkge1xuICAgICAgICBsYXN0SWQgPSBlbGVtZW50LmlkO1xuICAgICAgICBsYXN0UG9zaXRpb24gPSB0b3A7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxhc3RJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBJRCBpcyBhY3RpdmVcbiAgICovXG4gIGlzQWN0aXZlKGlkLCBsaXN0PywgaXNGaXJzdD8pIHtcbiAgICBjb25zdCBsYXN0QWN0aXZlRWxlbWVudCA9IHRoaXMuZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdCk7XG4gICAgcmV0dXJuIGlkID09PSBsYXN0QWN0aXZlRWxlbWVudCB8fCAobGFzdEFjdGl2ZUVsZW1lbnQgPT09IG51bGwgJiYgaXNGaXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIHNjcm9sbERvbmUob3B0aW9uczogeyBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkOyB0aW1lb3V0PzogbnVtYmVyIH0gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSW5pdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZG9uZUZ1bmN0aW9uOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZSBmb3Igc2Nyb2xsIGRvbmVcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gSW5pdCB2YXJpYWJsZXNcbiAgICAgIGxldCByZWplY3RlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVvdXRJZDogbnVtYmVyO1xuXG4gICAgICAvLyBTZXQgdGltZW91dCBoYW5kbGluZyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQgZm9yIHNjcm9sbERvbmUgYWZ0ZXI6JyArIGNvbmZpZy50aW1lb3V0KSk7XG4gICAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3Igc2Nyb2xsIGRvbmVcbiAgICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZURldGVjdGlvbigpO1xuXG4gICAgICAvLyBSZXNvbHZlIHByb21pc2UgaWYgbm90IGFscmVhZHkgcmVqZWN0ZWRcbiAgICAgIGlmICghcmVqZWN0ZWQpIHtcbiAgICAgICAgLy8gU3RvcCB0aW1lb3V0IGlmIHNldFxuICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHJlc3VsdCAoaWYgZG9uZUZ1bmN0aW9uIGlzIHNldClcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgaWYgKGNvbmZpZy5kb25lRnVuY3Rpb24pIHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25maWcuZG9uZUZ1bmN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY3JvbGwgZG9uZVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgZGV0ZWN0b25cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbERvbmVEZXRlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmV0dXJuIGN1cnJlbnQgc2Nyb2xsIHByb21pc2UgKFNpbmdlbHRvbilcbiAgICBpZiAodGhpcy5zY3JvbGxQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxQcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAgdGhpcy5zY3JvbGxQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVGltZXIgIT09IC0xKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxEb25lRGV0ZWN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnNjcm9sbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRoaXMuc2Nyb2xsU2FtcGxpbmdSYXRlKTtcbiAgICB9KTtcblxuICAgIC8vIExpc2l0ZW5pbmcgdG8gc2Nyb2xsIGV2ZW50O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbERvbmVEZXRlY3Rpb24uYmluZCh0aGlzKSk7XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZVxuICAgIHJldHVybiB0aGlzLnNjcm9sbFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogUHJlYWxvYWQgaW1hZ2VzIChmb3IgbGF6eSBoYW5kbGluZylcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHByZUxvYWRJbWFnZXMob3B0aW9ucz86IHtcbiAgICBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkO1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIEluaXQgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGRvbmVGdW5uY3Rpb246IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSW5pdCB2YXJpYWJsZXNcbiAgICAgIGxldCByZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVvdXRJZDtcblxuICAgICAgLy8gSW5pdCBsb2FkaW5nXG4gICAgICBjb25zdCBpbWFnZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKSk7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgICAvLyBQcmVwYXJlIGltYWdlc1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBpbWFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBjaGFuZ2VzIGFyZSBuZWNlc3NhcnkgYW5kIHBvc3NpYmxlXG4gICAgICAgIGlmICgoaW1hZ2UuY29tcGxldGUgJiYgaW1hZ2UubmF0dXJhbEhlaWdodCAhPT0gMCkgfHwgaW1hZ2UuZ2V0QXR0cmlidXRlKCdsb2FkaW5nJykgIT09ICdsYXp5JyB8fCAhc3JjKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdJbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBBcnJheS5mcm9tKGltYWdlLmF0dHJpYnV0ZXMpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAnbG9hZGluZycgJiYgYXR0ci5uYW1lICE9PSAnc3JjJykge1xuICAgICAgICAgICAgbmV3SW1hZ2Uuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW1hZ2UucmVwbGFjZVdpdGgobmV3SW1hZ2UpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMubG9hZEltYWdlKG5ld0ltYWdlLCBzcmMpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoY29uZmlnLmRvbmVGdW5uY3Rpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IGNvbmZpZy5kb25lRnVuY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCB1bnRpbCBhbGwgaW1hZ2VzIGxvYWRlZFxuICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGltYWdlIGxvYWRpbmcnLCBlKSlcbiAgICAgICAgLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIENoZWNrIGlmIGFscmVhZHkgcmVzb2x2ZWRcbiAgICAgICAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRpbWVvdXRcbiAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXR1cm4gcmVzdWx0XG4gICAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgICBpZiAoY29uZmlnLmRvbmVGdW5uY3Rpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbmZpZy5kb25lRnVuY3Rpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGltYWdlIGZvciBpbWFnZSBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBpbWFnZUVsZW1lbnRcbiAgICogQHBhcmFtIHNyY1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEltYWdlKGltYWdlRWxlbWVudDogSFRNTEltYWdlRWxlbWVudCwgc3JjPzogc3RyaW5nKSB7XG4gICAgc3JjID0gc3JjIHx8IGltYWdlRWxlbWVudC5zcmM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGltYWdlRWxlbWVudC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltYWdlRWxlbWVudCk7XG4gICAgICBpbWFnZUVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgIGltYWdlRWxlbWVudC5zcmMgPSBzcmM7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NyYy9saWIvYmFzZS9zZXJ2aWNlcy9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRS9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUE2Q3hCOztPQUVHO0lBQ0gsWUFDWSxNQUFjLEVBQ2MsWUFBOEIsRUFDMUQsWUFBMEI7UUFGMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNjLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUMxRCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXBDdEM7Ozs7V0FJRztRQUNPLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWpDOzs7O1dBSUc7UUFDTyxnQkFBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBMEJ6QixNQUFNLE1BQU0sbUJBQ1YscUJBQXFCLEVBQUUsR0FBRyxFQUMxQixZQUFZLEVBQUUsR0FBRyxFQUNqQixrQkFBa0IsRUFBRSxHQUFHLElBQ3BCLFlBQVksQ0FDaEIsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN4QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNHLFFBQVEsQ0FDWixFQUFVLEVBQ1Ys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QUlHO0lBQ08sbUJBQW1CO1FBQzNCLDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzNCO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN4QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0JBQy9CLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsOEJBQThCO1FBQzlCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXZFLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQzs7OztZQXpQRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVRRLE1BQU07NENBNERWLE1BQU0sU0FBQyxrQkFBa0I7WUExRHJCLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCQVNFX01PRFVMRV9DT05GSUcsIEJhc2VNb2R1bGVDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Jhc2UtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi9pbWFnZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBTY3JvbGwgc2VydmljZSBmb3IgYXV0b3Njcm9sbCB0byBzcGVjaWZpYyBmcmFnbWVudHNcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgcHJvbWlzZVxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsUHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmVzb2x2ZSBmdW5jdGlvbiBvZiBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxQcm9taXNlUmVzb2x2ZTogKHZhbHVlOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4pID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIElzIGEgc2Nyb2xsIGxpc3RlbmVyIHNldFxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgc2Nyb2xsTGlzdGVuZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQ3VycmVudCBzY3JvbGwgdGltZXI7XG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBzY3JvbGxUaW1lciA9IC0xO1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgb2Zmc2V0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2Nyb2xsT2Zmc2V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERldGVjdGlvbiBvZmZzZXRcbiAgICogU2hvdWxkIGJlID49IHNjcm9sbE9mZnNldFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRldGVjdGlvbk9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTYW1wbGluZyByYXRlIGZvciBzY3JvbGwgZG9uZSBkZXRlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzY3JvbGxTYW1wbGluZ1JhdGU6IG51bWJlcjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KEJBU0VfTU9EVUxFX0NPTkZJRykgcHJvdGVjdGVkIG1vZHVsZUNvbmZpZzogQmFzZU1vZHVsZUNvbmZpZyxcbiAgICBwcm90ZWN0ZWQgaW1hZ2VTZXJ2aWNlOiBJbWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgc2Nyb2xsRGV0ZWN0aW9uT2Zmc2V0OiAyMDAsXG4gICAgICBzY3JvbGxPZmZzZXQ6IDEwMCxcbiAgICAgIHNjcm9sbFNhbXBsaW5nUmF0ZTogMTAwLFxuICAgICAgLi4ubW9kdWxlQ29uZmlnLFxuICAgIH07XG5cbiAgICB0aGlzLmRldGVjdGlvbk9mZnNldCA9IGNvbmZpZy5zY3JvbGxEZXRlY3Rpb25PZmZzZXQ7XG4gICAgdGhpcy5zY3JvbGxPZmZzZXQgPSBjb25maWcuc2Nyb2xsT2Zmc2V0O1xuICAgIHRoaXMuc2Nyb2xsU2FtcGxpbmdSYXRlID0gY29uZmlnLnNjcm9sbFNhbXBsaW5nUmF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgdG8gc3RydWN0dXJlRWxlbWVudCB3aXRoIHNwZWNpZmljIElEXG4gICAqL1xuICBhc3luYyBzY3JvbGxUbyhcbiAgICBpZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGNoZWNrVXJsPzogYm9vbGVhbjtcbiAgICAgIGxvYWRJbWFnZXNCZWZvcmU/OiBib29sZWFuO1xuICAgICAgcmVzZXRTdHlsZXM/OiBib29sZWFuO1xuICAgICAgc2V0T3ZlcmZsb3c/OiBib29sZWFuO1xuICAgICAgc3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUHJlcGFyZSBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBjaGVja1VybDogdHJ1ZSxcbiAgICAgIGxvYWRJbWFnZXNCZWZvcmU6IHRydWUsXG4gICAgICByZXNldFN0eWxlczogZmFsc2UsXG4gICAgICBzZXRPdmVyZmxvdzogdHJ1ZSxcbiAgICAgIHN0b3BQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGN1cnJlbnQgVVJMXG4gICAgaWYgKGNvbmZpZy5jaGVja1VybCAmJiB0aGlzLnJvdXRlci51cmwgIT09ICcvJyAmJiAhdGhpcy5yb3V0ZXIudXJsLnN0YXJ0c1dpdGgoJy8jJykpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddLCB7IGZyYWdtZW50OiBpZCB9KTtcbiAgICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0YXJnZXQgZWxlbWVudCBleGl0c1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01pc3Npbmcgc2Nyb2xsIGVsZW1lbnQgd2l0aCBJRDonLCBpZCk7XG4gICAgICByZXR1cm4gIWNvbmZpZy5zdG9wUHJvcGFnYXRpb247XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYm9keSBvdmVyZmxvdyBpcyB2aXNpYmxlXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHNjcm9sbCBoYW5kbGluZ1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG4gICAgbGV0IHVuZG9PdmVyZmxvd0NoYW5nZXMgPSBmYWxzZTtcbiAgICBjb25zdCBzY3JvbGxCb2R5U3R5bGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib2R5KSkpO1xuICAgIGlmIChjb25maWcuc2V0T3ZlcmZsb3cgJiYgKHNjcm9sbEJvZHlTdHlsZXMub3ZlcmZsb3dYICE9PSAndmlzaWJsZScgfHwgc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1kgIT09ICd2aXNpYmxlJykpIHtcbiAgICAgIC8vIFNldCBib2R5IG92ZXJmbG93IHRvIHZpc2libGVcbiAgICAgIGNvbnNvbGUud2FybignU3R5bGUgb2YgYm9keSBlbGVtZW50IGZvciBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSB3aWxsIGJlIHNldCB0byBcInZpc2libGVcIiBmb3Igc2Nyb2xsaW5nIScpO1xuICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1ggPSAndmlzaWJsZSc7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93WSA9ICd2aXNpYmxlJztcbiAgICAgIHVuZG9PdmVyZmxvd0NoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIExvYWQgaW1hZ2VzIGJlZm9yZSBzY3JvbGxpbmcgKG9uY2UpXG4gICAgaWYgKGNvbmZpZy5sb2FkSW1hZ2VzQmVmb3JlKSB7XG4gICAgICBhd2FpdCB0aGlzLmltYWdlU2VydmljZS5wcmVMb2FkSW1hZ2VzKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGdldCBib3VuZGluZyByZWN0IG9mIHRhcmdldCBlbGVtZW50XG4gICAgY29uc3QgY29yZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vIFNjcm9sbCB0byBlbGVtZW50XG4gICAgd2luZG93LnNjcm9sbEJ5KHsgdG9wOiBjb3Jkcy50b3AgLSB0aGlzLnNjcm9sbE9mZnNldCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZSh7XG4gICAgICBkb25lRnVuY3Rpb246ICgpID0+IHtcbiAgICAgICAgLy8gVW5kbyBjaGFuZ2VzXG4gICAgICAgIGlmICh1bmRvT3ZlcmZsb3dDaGFuZ2VzICYmIGNvbmZpZy5yZXNldFN0eWxlcykge1xuICAgICAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3dYID0gc2Nyb2xsQm9keVN0eWxlcy5vdmVyZmxvd1g7XG4gICAgICAgICAgYm9keS5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGxCb2R5U3R5bGVzLm92ZXJmbG93WTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ09yaWdpbmFsIHN0eWxlIG9mIGJvZHkgZWxlbWVudCBmb3Igb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gUmV0dXJuIHN0b3AgcHJvcGFnYXRpb24gY29uZmlndXJhdGlvblxuICAgIHJldHVybiAhY29uZmlnLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBhY3RpdmUgc3RydWN0dXJlRWxlbWVudFxuICAgKi9cbiAgZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdD8pOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZO1xuICAgIGNvbnN0IGVsZW1lbnRzV2l0aElkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpO1xuICAgIGxldCBsYXN0SWQgPSBudWxsO1xuICAgIGxldCBsYXN0UG9zaXRpb24gPSAwIC0gdGhpcy5kZXRlY3Rpb25PZmZzZXQgLSAxO1xuICAgIGVsZW1lbnRzV2l0aElkLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvcmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRvcCA9IGNvcmRzLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCAtIHRoaXMuZGV0ZWN0aW9uT2Zmc2V0O1xuICAgICAgaWYgKFxuICAgICAgICAoIWxpc3QgfHwgIWxpc3QubGVuZ3RoIHx8IGxpc3QuaW5jbHVkZXMoZWxlbWVudC5pZCkpICYmIC8vIEluIGxpc3RcbiAgICAgICAgdG9wIDwgY3VycmVudFNjcm9sbFBvc2l0aW9uICYmIC8vIEluIGFjdGl2ZSBhcmVhXG4gICAgICAgIGxhc3RQb3NpdGlvbiA8IHRvcCAvLyBIaWdoZXIgdGhhbiB0aGUgbGFzdCBvbmVcbiAgICAgICkge1xuICAgICAgICBsYXN0SWQgPSBlbGVtZW50LmlkO1xuICAgICAgICBsYXN0UG9zaXRpb24gPSB0b3A7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxhc3RJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBJRCBpcyBhY3RpdmVcbiAgICovXG4gIGlzQWN0aXZlKGlkLCBsaXN0PywgaXNGaXJzdD8pIHtcbiAgICBjb25zdCBsYXN0QWN0aXZlRWxlbWVudCA9IHRoaXMuZ2V0TGFzdEFjdGl2ZUVsZW1lbnQobGlzdCk7XG4gICAgcmV0dXJuIGlkID09PSBsYXN0QWN0aXZlRWxlbWVudCB8fCAobGFzdEFjdGl2ZUVsZW1lbnQgPT09IG51bGwgJiYgaXNGaXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIHNjcm9sbERvbmUob3B0aW9uczogeyBkb25lRnVuY3Rpb24/OiAoKSA9PiBQcm9taXNlPGFueT4gfCBhbnkgfCB2b2lkOyB0aW1lb3V0PzogbnVtYmVyIH0gPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gSW5pdCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZG9uZUZ1bmN0aW9uOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZSBmb3Igc2Nyb2xsIGRvbmVcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gSW5pdCB2YXJpYWJsZXNcbiAgICAgIGxldCByZWplY3RlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRpbWVvdXRJZDogbnVtYmVyO1xuXG4gICAgICAvLyBTZXQgdGltZW91dCBoYW5kbGluZyBpZiBuZWNlc3NhcnlcbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVvdXQgZm9yIHNjcm9sbERvbmUgYWZ0ZXI6JyArIGNvbmZpZy50aW1lb3V0KSk7XG4gICAgICAgIH0sIGNvbmZpZy50aW1lb3V0KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2FpdCBmb3Igc2Nyb2xsIGRvbmVcbiAgICAgIGF3YWl0IHRoaXMuc2Nyb2xsRG9uZURldGVjdGlvbigpO1xuXG4gICAgICAvLyBSZXNvbHZlIHByb21pc2UgaWYgbm90IGFscmVhZHkgcmVqZWN0ZWRcbiAgICAgIGlmICghcmVqZWN0ZWQpIHtcbiAgICAgICAgLy8gU3RvcCB0aW1lb3V0IGlmIHNldFxuICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHJlc3VsdCAoaWYgZG9uZUZ1bmN0aW9uIGlzIHNldClcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgaWYgKGNvbmZpZy5kb25lRnVuY3Rpb24pIHtcbiAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25maWcuZG9uZUZ1bmN0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY3JvbGwgZG9uZVxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGRvbmUgZGV0ZWN0b25cbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHNjcm9sbERvbmVEZXRlY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmV0dXJuIGN1cnJlbnQgc2Nyb2xsIHByb21pc2UgKFNpbmdlbHRvbilcbiAgICBpZiAodGhpcy5zY3JvbGxQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY3JvbGxQcm9taXNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBjdXJyZW50IHNjcm9sbCBwcm9taXNlXG4gICAgdGhpcy5zY3JvbGxQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVGltZXIgIT09IC0xKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaW1lcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zY3JvbGxEb25lRGV0ZWN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnNjcm9sbFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIHRoaXMuc2Nyb2xsU2FtcGxpbmdSYXRlKTtcbiAgICB9KTtcblxuICAgIC8vIExpc2l0ZW5pbmcgdG8gc2Nyb2xsIGV2ZW50O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnNjcm9sbERvbmVEZXRlY3Rpb24uYmluZCh0aGlzKSk7XG5cbiAgICAvLyBSZXR1cm4gcHJvbWlzZVxuICAgIHJldHVybiB0aGlzLnNjcm9sbFByb21pc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Directive, ElementRef, HostListener, Input, NgZone } from '@angular/core';
|
|
3
|
+
import { ImageService } from '../services/image.service';
|
|
2
4
|
/**
|
|
3
5
|
* Set same height (maximum) to different elements
|
|
4
6
|
*/
|
|
5
7
|
export class MatchHeightDirective {
|
|
6
|
-
constructor(el) {
|
|
8
|
+
constructor(el, imageService, zone) {
|
|
7
9
|
this.el = el;
|
|
10
|
+
this.imageService = imageService;
|
|
11
|
+
this.zone = zone;
|
|
12
|
+
this.loadLazyImages = true;
|
|
8
13
|
}
|
|
9
14
|
onResize() {
|
|
10
15
|
this.matchHeight(this.el.nativeElement, this.ltMatchHeight);
|
|
@@ -13,33 +18,41 @@ export class MatchHeightDirective {
|
|
|
13
18
|
this.matchHeight(this.el.nativeElement, this.ltMatchHeight);
|
|
14
19
|
}
|
|
15
20
|
matchHeight(parent, target) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (!Array.isArray(target)) {
|
|
21
|
-
classNames = [target];
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
classNames = target;
|
|
25
|
-
}
|
|
26
|
-
classNames.forEach((className) => {
|
|
27
|
-
// find all child structureElements with the selected class name
|
|
28
|
-
const children = parent.getElementsByClassName(className);
|
|
29
|
-
if (!children) {
|
|
21
|
+
// Timeout is set to force Angular to wait for all actions and only continue once the process has run through.
|
|
22
|
+
// Otherwise, an infinite loop will occur.
|
|
23
|
+
setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
if (!parent) {
|
|
30
25
|
return;
|
|
31
26
|
}
|
|
32
|
-
|
|
33
|
-
Array.
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
let classNames;
|
|
28
|
+
if (!Array.isArray(target)) {
|
|
29
|
+
classNames = [target];
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
classNames = target;
|
|
33
|
+
}
|
|
34
|
+
for (const className of classNames) {
|
|
35
|
+
// find all child structureElements with the selected class name
|
|
36
|
+
const children = parent.getElementsByClassName(className);
|
|
37
|
+
if (!children || children.length < 2) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
// Load images of children
|
|
41
|
+
if (this.loadLazyImages) {
|
|
42
|
+
yield this.imageService.preLoadImages({ elements: children });
|
|
43
|
+
}
|
|
44
|
+
// reset all children height
|
|
45
|
+
Array.from(children).forEach((element) => {
|
|
46
|
+
element.style.height = 'initial';
|
|
47
|
+
});
|
|
48
|
+
// get all the child structureElements heights
|
|
49
|
+
const itemHeights = Array.from(children).map((x) => x.getBoundingClientRect().height);
|
|
50
|
+
// find out the tallest one
|
|
51
|
+
const maxHeight = itemHeights.reduce((prev, curr) => (curr > prev ? curr : prev), 0);
|
|
52
|
+
// update the child structureElements height to the tallest one
|
|
53
|
+
Array.from(children).forEach((element) => (element.style.height = `${maxHeight}px`));
|
|
54
|
+
}
|
|
55
|
+
}), 1);
|
|
43
56
|
}
|
|
44
57
|
}
|
|
45
58
|
MatchHeightDirective.decorators = [
|
|
@@ -48,10 +61,13 @@ MatchHeightDirective.decorators = [
|
|
|
48
61
|
},] }
|
|
49
62
|
];
|
|
50
63
|
MatchHeightDirective.ctorParameters = () => [
|
|
51
|
-
{ type: ElementRef }
|
|
64
|
+
{ type: ElementRef },
|
|
65
|
+
{ type: ImageService },
|
|
66
|
+
{ type: NgZone }
|
|
52
67
|
];
|
|
53
68
|
MatchHeightDirective.propDecorators = {
|
|
54
69
|
ltMatchHeight: [{ type: Input }],
|
|
70
|
+
loadLazyImages: [{ type: Input }],
|
|
55
71
|
onResize: [{ type: HostListener, args: ['window:resize',] }]
|
|
56
72
|
};
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtaGVpZ2h0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2xpYi9iYXNlL2RpcmVjdGl2ZXMvbWF0Y2gtaGVpZ2h0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RDs7R0FFRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFBc0IsRUFBYyxFQUFZLFlBQTBCLEVBQVUsSUFBWTtRQUExRSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVksaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBRmhHLG1CQUFjLEdBQUcsSUFBSSxDQUFDO0lBRTZFLENBQUM7SUFHcEcsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFtQixFQUFFLE1BQXlCO1FBQ3hELDhHQUE4RztRQUM5RywwQ0FBMEM7UUFDMUMsVUFBVSxDQUFDLEdBQVMsRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNYLE9BQU87YUFDUjtZQUVELElBQUksVUFBVSxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLFVBQVUsR0FBRyxNQUFNLENBQUM7YUFDckI7WUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtnQkFDbEMsZ0VBQWdFO2dCQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRTFELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3BDLFNBQVM7aUJBQ1Y7Z0JBRUQsMEJBQTBCO2dCQUMxQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3ZCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDL0Q7Z0JBRUQsNEJBQTRCO2dCQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtvQkFDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztnQkFFSCw4Q0FBOEM7Z0JBQzlDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFdEYsMkJBQTJCO2dCQUMzQixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUVyRiwrREFBK0Q7Z0JBQy9ELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNuRztRQUNILENBQUMsQ0FBQSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs7O1lBakVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2FBQzVCOzs7WUFScUMsVUFBVTtZQUN2QyxZQUFZO1lBRGtELE1BQU07Ozs0QkFXMUUsS0FBSzs2QkFHTCxLQUFLO3VCQUtMLFlBQVksU0FBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ltYWdlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFNldCBzYW1lIGhlaWdodCAobWF4aW11bSkgdG8gZGlmZmVyZW50IGVsZW1lbnRzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tsdE1hdGNoSGVpZ2h0XScsXG59KVxuZXhwb3J0IGNsYXNzIE1hdGNoSGVpZ2h0RGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIC8vIGNsYXNzIG5hbWUgdG8gbWF0Y2ggaGVpZ2h0XG4gIEBJbnB1dCgpXG4gIGx0TWF0Y2hIZWlnaHQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRMYXp5SW1hZ2VzID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBpbWFnZVNlcnZpY2U6IEltYWdlU2VydmljZSwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uUmVzaXplKCkge1xuICAgIHRoaXMubWF0Y2hIZWlnaHQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLmx0TWF0Y2hIZWlnaHQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMubWF0Y2hIZWlnaHQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLmx0TWF0Y2hIZWlnaHQpO1xuICB9XG5cbiAgbWF0Y2hIZWlnaHQocGFyZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIC8vIFRpbWVvdXQgaXMgc2V0IHRvIGZvcmNlIEFuZ3VsYXIgdG8gd2FpdCBmb3IgYWxsIGFjdGlvbnMgYW5kIG9ubHkgY29udGludWUgb25jZSB0aGUgcHJvY2VzcyBoYXMgcnVuIHRocm91Z2guXG4gICAgLy8gT3RoZXJ3aXNlLCBhbiBpbmZpbml0ZSBsb29wIHdpbGwgb2NjdXIuXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBjbGFzc05hbWVzO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgY2xhc3NOYW1lcyA9IFt0YXJnZXRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xhc3NOYW1lcyA9IHRhcmdldDtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3NOYW1lcykge1xuICAgICAgICAvLyBmaW5kIGFsbCBjaGlsZCBzdHJ1Y3R1cmVFbGVtZW50cyB3aXRoIHRoZSBzZWxlY3RlZCBjbGFzcyBuYW1lXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcblxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvYWQgaW1hZ2VzIG9mIGNoaWxkcmVuXG4gICAgICAgIGlmICh0aGlzLmxvYWRMYXp5SW1hZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbWFnZVNlcnZpY2UucHJlTG9hZEltYWdlcyh7IGVsZW1lbnRzOiBjaGlsZHJlbiB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc2V0IGFsbCBjaGlsZHJlbiBoZWlnaHRcbiAgICAgICAgQXJyYXkuZnJvbShjaGlsZHJlbikuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9ICdpbml0aWFsJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZ2V0IGFsbCB0aGUgY2hpbGQgc3RydWN0dXJlRWxlbWVudHMgaGVpZ2h0c1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0cyA9IEFycmF5LmZyb20oY2hpbGRyZW4pLm1hcCgoeCkgPT4geC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuXG4gICAgICAgIC8vIGZpbmQgb3V0IHRoZSB0YWxsZXN0IG9uZVxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpdGVtSGVpZ2h0cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHRoZSBjaGlsZCBzdHJ1Y3R1cmVFbGVtZW50cyBoZWlnaHQgdG8gdGhlIHRhbGxlc3Qgb25lXG4gICAgICAgIEFycmF5LmZyb20oY2hpbGRyZW4pLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiAoZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgKSk7XG4gICAgICB9XG4gICAgfSwgMSk7XG4gIH1cbn1cbiJdfQ==
|