@candy-kingdom/bonnie 0.15.0 → 0.17.0
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.
|
@@ -5,13 +5,16 @@ import { MediaStatus } from '../core/MediaStatus';
|
|
|
5
5
|
import { MediaObjectFit } from '../core/MediaObjectFit';
|
|
6
6
|
import { DeviceServiceBase } from '../core/device.service.base';
|
|
7
7
|
import { VideoSrcDirective } from './vidsrc.directive';
|
|
8
|
-
import {
|
|
8
|
+
import { matchesMediaQuery, descendingT } from '../core/utils';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "../core/device.service.base";
|
|
11
11
|
import * as i2 from "../core/unsubscribe.service";
|
|
12
12
|
import * as i3 from "./vidsrc.directive";
|
|
13
13
|
import * as i4 from "@angular/common";
|
|
14
14
|
import * as i5 from "../core/intersection.component";
|
|
15
|
+
function isWebM(src) {
|
|
16
|
+
return src.mimeType === 'video/webm';
|
|
17
|
+
}
|
|
15
18
|
export class MarcyVideoComponent {
|
|
16
19
|
constructor(device, cd, _u, srcDir) {
|
|
17
20
|
this.device = device;
|
|
@@ -99,31 +102,40 @@ export class MarcyVideoComponent {
|
|
|
99
102
|
if (!matchesMediaQuery(videoSource.mediaQuery))
|
|
100
103
|
continue;
|
|
101
104
|
// SSR
|
|
102
|
-
if (typeof this.videoRef.nativeElement
|
|
105
|
+
if (typeof this.videoRef.nativeElement?.canPlayType !== 'function') {
|
|
103
106
|
// return first mp4, because all players can play them
|
|
104
107
|
const mp4Srcs = videoSource
|
|
105
108
|
.srcSet
|
|
106
109
|
.filter(x => x.mimeType === 'video/mp4')
|
|
107
110
|
.sort(descendingT(x => x.meta.width)); // bigest video
|
|
111
|
+
console.log(`ssr found video ${mp4Srcs[0].url}`);
|
|
108
112
|
// element or undefined
|
|
109
113
|
return mp4Srcs[0];
|
|
110
114
|
}
|
|
111
115
|
const fileSrcs = videoSource
|
|
112
116
|
.srcSet
|
|
113
117
|
.filter(x => this.videoRef.nativeElement.canPlayType(x.mimeType))
|
|
114
|
-
.sort(
|
|
115
|
-
.
|
|
118
|
+
.sort((a, b) => {
|
|
119
|
+
if (a.meta.width === b.meta.width) {
|
|
120
|
+
return isWebM(a) ? 1 : -1; // if same width prefer webM
|
|
121
|
+
}
|
|
122
|
+
// else prefer smallest
|
|
123
|
+
return a.meta.width <= b.meta.width ? 1 : -1;
|
|
124
|
+
}); // smallest video
|
|
116
125
|
if (fileSrcs.length === 0)
|
|
117
126
|
continue;
|
|
127
|
+
console.log('sources ', fileSrcs);
|
|
118
128
|
let bestSrc = fileSrcs[0];
|
|
119
129
|
for (let i = 1; i < fileSrcs.length; i++) {
|
|
120
130
|
const fileSrc = fileSrcs[i];
|
|
121
131
|
const currentDiff = fileSrc.meta.width - realPixelsVideoWidth;
|
|
132
|
+
console.log(`browser video currentDiff ${currentDiff}`);
|
|
122
133
|
// too big video source width
|
|
123
134
|
if (currentDiff > 0)
|
|
124
135
|
break;
|
|
125
136
|
bestSrc = fileSrc;
|
|
126
137
|
}
|
|
138
|
+
console.log(`browser found suitable video ${bestSrc.url}`);
|
|
127
139
|
return bestSrc;
|
|
128
140
|
}
|
|
129
141
|
return undefined;
|
|
@@ -144,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
|
144
156
|
}], objectFit: [{
|
|
145
157
|
type: Input
|
|
146
158
|
}] } });
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyY3ktdmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUvc3JjL2xpYi9tYXJjeS12aWRlby9tYXJjeS12aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL21hcmN5LXZpZGVvL21hcmN5LXZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQXFCLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3SixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjVCLFlBRXdCLE1BQXlCLEVBQ3pCLEVBQXFCLEVBQ3BCLEVBQXVCLEVBQzVCLE1BQTBCO1FBSHRCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQ3pCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3BCLE9BQUUsR0FBRixFQUFFLENBQXFCO1FBcEJoQyxnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUMx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LE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU1QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxvQkFBb0IsQ0FBQztnQkFFOUQsNkJBQTZCO2dCQUM3QixJQUFJLFdBQVcsR0FBRyxDQUFDO29CQUNmLE1BQU07Z0JBRVYsT0FBTyxHQUFHLE9BQU8sQ0FBQzthQUNyQjtZQUVELE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs4R0FqTFEsbUJBQW1CO2tHQUFuQixtQkFBbUIsMkdBRmpCLENBQUMsbUJBQW1CLENBQUMsNkhDaEJwQyxpMENBaUNBOzsyRkRmYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksV0FBVyxhQUdWLENBQUMsbUJBQW1CLENBQUM7OzBCQXdCdkIsUUFBUTt5Q0FqQkQsUUFBUTtzQkFEdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUlGLFFBQVE7c0JBRHZCLE1BQU07Z0JBaUdJLFNBQVM7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCwgT25EZXN0cm95LCBPcHRpb25hbCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgKiBhcyBNQ29yZSBmcm9tICcuLi9nZW5lcmF0ZWQnO1xyXG5cclxuaW1wb3J0IHsgVW5zdWJzY3JpYmVyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdW5zdWJzY3JpYmUuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lZGlhU3RhdHVzIH0gZnJvbSAnLi4vY29yZS9NZWRpYVN0YXR1cyc7XHJcbmltcG9ydCB7IE1lZGlhT2JqZWN0Rml0IH0gZnJvbSAnLi4vY29yZS9NZWRpYU9iamVjdEZpdCc7XHJcbmltcG9ydCB7IERldmljZVNlcnZpY2VCYXNlIH0gZnJvbSAnLi4vY29yZS9kZXZpY2Uuc2VydmljZS5iYXNlJztcclxuaW1wb3J0IHsgVmlkZW9TcmNEaXJlY3RpdmUgfSBmcm9tICcuL3ZpZHNyYy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBhc2NlbmRpbmdULCBtYXRjaGVzTWVkaWFRdWVyeSwgZGVzY2VuZGluZ1QgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdib24tdmlkZW8nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21hcmN5LXZpZGVvLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL21hcmN5LXZpZGVvLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtVbnN1YnNjcmliZXJTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFyY3lWaWRlb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgTWVkaWFTdGF0dXMgPSBNZWRpYVN0YXR1cztcclxuICAgIHB1YmxpYyByZWFkb25seSBNYXJjeU9iamVjdEZpdCA9IE1lZGlhT2JqZWN0Rml0O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3ZpZGVvJylcclxuICAgIHB1YmxpYyByZWFkb25seSB2aWRlb1JlZiE6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgJHN0YXR1cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVkaWFTdGF0dXM+KE1lZGlhU3RhdHVzLk5vdFNldCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3JjOiBWaWRlb1NyY0RpcmVjdGl2ZTtcclxuXHJcbiAgICBwdWJsaWMgc291cmNlPzogTUNvcmUuRmlsZVNyYzxNQ29yZS5WaWRlb01ldGE+O1xyXG5cclxuICAgIHByaXZhdGUgX29iamVjdEZpdCA9IE1lZGlhT2JqZWN0Rml0Lk9yaWdpbmFsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZGV2aWNlOiBEZXZpY2VTZXJ2aWNlQmFzZSxcclxuICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdTogVW5zdWJzY3JpYmVyU2VydmljZSxcclxuICAgICAgICAgICAgQE9wdGlvbmFsKCkgc3JjRGlyPzogVmlkZW9TcmNEaXJlY3RpdmVcclxuICAgICAgICApIHtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ01hcmN5VmlkZW9Db21wb25lbnQgY3RvcicpO1xyXG5cclxuICAgICAgICBpZiAoc3JjRGlyID09PSB1bmRlZmluZWQgfHwgc3JjRGlyID09PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7TWFyY3lWaWRlb0NvbXBvbmVudC5uYW1lfSBzaG91bGQgaGF2ZSBbdmlkc3JjXSBkaXJlY3RpdmUgYXMgc291cmNlIG9iamVjdGApO1xyXG5cclxuICAgICAgICB0aGlzLnNyYyA9IHNyY0RpcjtcclxuXHJcbiAgICAgICAgY2QuZGV0YWNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IG5nT25Jbml0Jyk7XHJcblxyXG4gICAgICAgIC8vIGJpbmQgbG9hZGVkIGV2ZW50XHJcbiAgICAgICAgdGhpcy4kc3RhdHVzXHJcbiAgICAgICAgICAgIC5waXBlXHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgIHRoaXMuX3UudGFrZVVudGlsRGVzdHJveSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0dXMgPT4gc3RhdHVzID09PSBNZWRpYVN0YXR1cy5Mb2FkZWQpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzTG9hZGVkLm5leHQoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ01hcmN5VmlkZW9Db21wb25lbnQgbmdBZnRlclZpZXdJbml0Jyk7XHJcblxyXG4gICAgICAgIC8vIGJpbmQgc3JjIGNoYW5nZXNcclxuICAgICAgICB0aGlzLnNyYy5zcmNDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGhpcy5fdS50YWtlVW50aWxEZXN0cm95KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IG9uU3JjQ2hhbmdlJywgdmFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNvdXJjZXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyByZXN1YnNjcmliZSBiZWNhdXNlIGl0cyB1cGRhdGVkIHdpdGggc3JjXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvTWVkaWFRdWVyeUNoYW5nZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNvdXJjZXMoKTtcclxuXHJcbiAgICAgICAgLy8gaW5pdGlhbCwgZm9yIHNyYyBhZGRlZCBiZWZvcmUgaW5pdFxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9NZWRpYVF1ZXJ5Q2hhbmdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb01lZGlhUXVlcnlDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zcmNcclxuICAgICAgICAgICAgLndhdGNoTWVkaWFRdWVyaWVzKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCB3YXRjaE1lZGlhUXVlcmllcycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTb3VyY2VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlU291cmNlcygpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCB1cGRhdGVTb3VyY2VzJyk7XHJcblxyXG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5maW5kTW9yZVN1aXRhYmxlU291cmNlKCk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IG5ldyBzb3VyY2UnLCB0aGlzLnNvdXJjZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLiRzdGF0dXMudmFsdWUgPT09IE1lZGlhU3RhdHVzLk5vdFNldCAmJiB0aGlzLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHN0YXR1cy5uZXh0KE1lZGlhU3RhdHVzLk5vdFNldCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy4kc3RhdHVzLm5leHQoTWVkaWFTdGF0dXMuTm90TG9hZGVkKTtcclxuXHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgb2JqZWN0Rml0KHZhbDogTWVkaWFPYmplY3RGaXQgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLl9vYmplY3RGaXQgPSB2YWwgPz8gTWVkaWFPYmplY3RGaXQuT3JpZ2luYWw7XHJcblxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb2JqZWN0Rml0KCk6IE1lZGlhT2JqZWN0Rml0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0Rml0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkxvYWQoKSB7XHJcbiAgICAgICAgdGhpcy4kc3RhdHVzLm5leHQoTWVkaWFTdGF0dXMuTG9hZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmRNb3JlU3VpdGFibGVTb3VyY2UoKTogTUNvcmUuRmlsZVNyYzxNQ29yZS5WaWRlb01ldGE+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBpZiAodGhpcy52aWRlb1JlZiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdza2lwcGluZyBmaW5kTW9yZVN1aXRhYmxlU291cmNlLiB2aWRlb1JlZiBpcyBlbXB0eSBzdGlsbCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2aWRlb1NvdXJjZXMgPSB0aGlzLnNyYy5kYXRhPy5zb3VyY2VzID8/IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50VmlkZW9XaWR0aCA9IHRoaXMudmlkZW9SZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgICAgICBjb25zdCByZWFsUGl4ZWxzVmlkZW9XaWR0aCA9IHRoaXMuZGV2aWNlLmRldmljZVBpeGVsUmF0aW8gKiBjdXJyZW50VmlkZW9XaWR0aDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coYE1hcmN5VmlkZW9Db21wb25lbnQgY3VycmVudFZpZGVvV2lkdGggJHtjdXJyZW50VmlkZW9XaWR0aH1gKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgTWFyY3lWaWRlb0NvbXBvbmVudCByZWFsUGl4ZWxzVmlkZW9XaWR0aCAke3JlYWxQaXhlbHNWaWRlb1dpZHRofWApO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZGVvU291cmNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IHZpZGVvU291cmNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlc01lZGlhUXVlcnkodmlkZW9Tb3VyY2UubWVkaWFRdWVyeSkpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNTUlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlkZW9SZWYubmF0aXZlRWxlbWVudC5jYW5QbGF5VHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZpcnN0IG1wNCwgYmVjYXVzZSBhbGwgcGxheWVycyBjYW4gcGxheSB0aGVtXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtcDRTcmNzID0gdmlkZW9Tb3VyY2VcclxuICAgICAgICAgICAgICAgICAgICAuc3JjU2V0XHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHgubWltZVR5cGUgPT09ICd2aWRlby9tcDQnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KGRlc2NlbmRpbmdUKHggPT4geC5tZXRhLndpZHRoKSk7IC8vIGJpZ2VzdCB2aWRlb1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbXA0U3Jjc1swXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsZVNyY3MgPSB2aWRlb1NvdXJjZVxyXG4gICAgICAgICAgICAgICAgLnNyY1NldFxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHRoaXMudmlkZW9SZWYubmF0aXZlRWxlbWVudC5jYW5QbGF5VHlwZSh4Lm1pbWVUeXBlKSlcclxuICAgICAgICAgICAgICAgIC5zb3J0KGFzY2VuZGluZ1QoeCA9PiB4Lm1ldGEud2lkdGgpKSAvLyBzbWFsbGVzdCB2aWRlb1xyXG4gICAgICAgICAgICAgICAgLnNvcnQoeCA9PiB4Lm1pbWVUeXBlLmluY2x1ZGVzKCd3ZWJtJykgPyAxIDogLTEpOy8vIHdlYm0gZmlyc3RcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWxlU3Jjcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBiZXN0U3JjID0gZmlsZVNyY3NbMF07XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpbGVTcmNzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlU3JjID0gZmlsZVNyY3NbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERpZmYgPSBmaWxlU3JjLm1ldGEud2lkdGggLSByZWFsUGl4ZWxzVmlkZW9XaWR0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB0b28gYmlnIHZpZGVvIHNvdXJjZSB3aWR0aFxyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnREaWZmID4gMClcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBiZXN0U3JjID0gZmlsZVNyYztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGJlc3RTcmM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgW2NsYXNzLmtub3duUmF0aW9dPVwic3JjLnJhdGlvID4gMCAmJiBvYmplY3RGaXQgPT09IE1hcmN5T2JqZWN0Rml0Lk9yaWdpbmFsXCJcclxuICAgICBbY2xhc3MuY292ZXJdPVwib2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5Db3ZlclwiXHJcbiAgICAgW2NsYXNzLmNvbnRhaW5dPVwib2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5Db250YWluXCJcclxuICAgICBbY2xhc3MubG9hZGVkXT1cIigkc3RhdHVzIHwgYXN5bmMpID09PSBNZWRpYVN0YXR1cy5Mb2FkZWRcIlxyXG4gICAgIGNsYXNzPVwidmlkZW8tY29udGFpbmVyXCI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2UuaXNTU1IgOyB0aGVuIHNzclRlbXBsYXRlIGVsc2UgYnJvd3NlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjdmlkZW9UZW1wbGF0ZT5cclxuICAgIDx2aWRlbyAjdmlkZW9cclxuICAgICAgICAgICBbc3JjXT1cInNvdXJjZSAhPT0gdW5kZWZpbmVkID8gc291cmNlLnVybCA6JycgXCJcclxuICAgICAgICAgICAobG9hZCk9XCJvbkxvYWQoKVwiXHJcbiAgICAgICAgICAgKGNhbnBsYXkpPVwidmlkZW8ubXV0ZWQ9dHJ1ZTt2aWRlby5wbGF5KCk7XCJcclxuICAgICAgICAgICBwbGF5c0lubGluZVxyXG4gICAgICAgICAgIGF1dG9wbGF5XHJcbiAgICAgICAgICAgbG9vcFxyXG4gICAgICAgICAgIG11dGVkPiA8L3ZpZGVvPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc3NyVGVtcGxhdGU+XHJcbiAgICA8bm9zY3JpcHQgKm5nSWY9XCJkZXZpY2UuaXNTU1JcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpZGVvVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbm9zY3JpcHQ+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNicm93c2VyVGVtcGxhdGU+XHJcbiAgICA8Ym9uLWludGVyc2VjdGlvbiAjaW50ZXJzZWN0aW9uWm9uZSBbc2Vzc2lvbl09XCJzcmNcIiAoaW50ZXJzZWN0ZWQpPVwiY2QuZGV0ZWN0Q2hhbmdlcygpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWRlb1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Jvbi1pbnRlcnNlY3Rpb24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInNyYy5yYXRpbyA+IDAgJiYgb2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5PcmlnaW5hbFwiIFtzdHlsZS5wYWRkaW5nLXRvcF09XCIxMDAgLyBzcmMucmF0aW8gKyclJ1wiPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFyY3ktdmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ib25uaWUvc3JjL2xpYi9tYXJjeS12aWRlby9tYXJjeS12aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Jvbm5pZS9zcmMvbGliL21hcmN5LXZpZGVvL21hcmN5LXZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQXFCLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUM3SixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFFL0QsU0FBUyxNQUFNLENBQUMsR0FBbUM7SUFDakQsT0FBTyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQztBQUN2QyxDQUFDO0FBUUQsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUIsWUFFb0IsTUFBeUIsRUFDekIsRUFBcUIsRUFDcEIsRUFBdUIsRUFDNUIsTUFBMEI7UUFIdEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsT0FBRSxHQUFGLEVB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U0FBUzt1QkFBQyxPQUFPO2dCQUlGLFFBQVE7c0JBRHZCLE1BQU07Z0JBaUdJLFNBQVM7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uSW5pdCwgT25EZXN0cm95LCBPcHRpb25hbCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgKiBhcyBNQ29yZSBmcm9tICcuLi9nZW5lcmF0ZWQnO1xyXG5cclxuaW1wb3J0IHsgVW5zdWJzY3JpYmVyU2VydmljZSB9IGZyb20gJy4uL2NvcmUvdW5zdWJzY3JpYmUuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lZGlhU3RhdHVzIH0gZnJvbSAnLi4vY29yZS9NZWRpYVN0YXR1cyc7XHJcbmltcG9ydCB7IE1lZGlhT2JqZWN0Rml0IH0gZnJvbSAnLi4vY29yZS9NZWRpYU9iamVjdEZpdCc7XHJcbmltcG9ydCB7IERldmljZVNlcnZpY2VCYXNlIH0gZnJvbSAnLi4vY29yZS9kZXZpY2Uuc2VydmljZS5iYXNlJztcclxuaW1wb3J0IHsgVmlkZW9TcmNEaXJlY3RpdmUgfSBmcm9tICcuL3ZpZHNyYy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBtYXRjaGVzTWVkaWFRdWVyeSwgZGVzY2VuZGluZ1QgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuXHJcbmZ1bmN0aW9uIGlzV2ViTShzcmM6IE1Db3JlLkZpbGVTcmM8TUNvcmUuSW1hZ2VNZXRhPik6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBzcmMubWltZVR5cGUgPT09ICd2aWRlby93ZWJtJztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdib24tdmlkZW8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJjeS12aWRlby5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWFyY3ktdmlkZW8uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtVbnN1YnNjcmliZXJTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFyY3lWaWRlb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IE1lZGlhU3RhdHVzID0gTWVkaWFTdGF0dXM7XHJcbiAgcHVibGljIHJlYWRvbmx5IE1hcmN5T2JqZWN0Rml0ID0gTWVkaWFPYmplY3RGaXQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZpZGVvJylcclxuICBwdWJsaWMgcmVhZG9ubHkgdmlkZW9SZWYhOiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgcmVhZG9ubHkgaXNMb2FkZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5ICRzdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhU3RhdHVzPihNZWRpYVN0YXR1cy5Ob3RTZXQpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzcmM6IFZpZGVvU3JjRGlyZWN0aXZlO1xyXG5cclxuICBwdWJsaWMgc291cmNlPzogTUNvcmUuRmlsZVNyYzxNQ29yZS5WaWRlb01ldGE+O1xyXG5cclxuICBwcml2YXRlIF9vYmplY3RGaXQgPSBNZWRpYU9iamVjdEZpdC5PcmlnaW5hbDtcclxuXHJcbiAgY29uc3RydWN0b3JcclxuICAgIChcclxuICAgICAgcHVibGljIHJlYWRvbmx5IGRldmljZTogRGV2aWNlU2VydmljZUJhc2UsXHJcbiAgICAgIHB1YmxpYyByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3U6IFVuc3Vic2NyaWJlclNlcnZpY2UsXHJcbiAgICAgIEBPcHRpb25hbCgpIHNyY0Rpcj86IFZpZGVvU3JjRGlyZWN0aXZlXHJcbiAgICApIHtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCBjdG9yJyk7XHJcblxyXG4gICAgaWYgKHNyY0RpciA9PT0gdW5kZWZpbmVkIHx8IHNyY0RpciA9PT0gbnVsbClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke01hcmN5VmlkZW9Db21wb25lbnQubmFtZX0gc2hvdWxkIGhhdmUgW3ZpZHNyY10gZGlyZWN0aXZlIGFzIHNvdXJjZSBvYmplY3RgKTtcclxuXHJcbiAgICB0aGlzLnNyYyA9IHNyY0RpcjtcclxuXHJcbiAgICBjZC5kZXRhY2goKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdNYXJjeVZpZGVvQ29tcG9uZW50IG5nT25Jbml0Jyk7XHJcblxyXG4gICAgLy8gYmluZCBsb2FkZWQgZXZlbnRcclxuICAgIHRoaXMuJHN0YXR1c1xyXG4gICAgICAucGlwZVxyXG4gICAgICAoXHJcbiAgICAgICAgdGhpcy5fdS50YWtlVW50aWxEZXN0cm95LFxyXG4gICAgICAgIGZpbHRlcihzdGF0dXMgPT4gc3RhdHVzID09PSBNZWRpYVN0YXR1cy5Mb2FkZWQpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzTG9hZGVkLm5leHQoKSk7XHJcblxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coJ01hcmN5VmlkZW9Db21wb25lbnQgbmdBZnRlclZpZXdJbml0Jyk7XHJcblxyXG4gICAgLy8gYmluZCBzcmMgY2hhbmdlc1xyXG4gICAgdGhpcy5zcmMuc3JjQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRoaXMuX3UudGFrZVVudGlsRGVzdHJveSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ01hcmN5VmlkZW9Db21wb25lbnQgb25TcmNDaGFuZ2UnLCB2YWwpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVNvdXJjZXMoKTtcclxuXHJcbiAgICAgICAgLy8gcmVzdWJzY3JpYmUgYmVjYXVzZSBpdHMgdXBkYXRlZCB3aXRoIHNyY1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9NZWRpYVF1ZXJ5Q2hhbmdlKCk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgdGhpcy51cGRhdGVTb3VyY2VzKCk7XHJcblxyXG4gICAgLy8gaW5pdGlhbCwgZm9yIHNyYyBhZGRlZCBiZWZvcmUgaW5pdFxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhUXVlcnlDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9NZWRpYVF1ZXJ5Q2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zcmNcclxuICAgICAgLndhdGNoTWVkaWFRdWVyaWVzKClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ01hcmN5VmlkZW9Db21wb25lbnQgd2F0Y2hNZWRpYVF1ZXJpZXMnKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNvdXJjZXMoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVNvdXJjZXMoKSB7XHJcbiAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCB1cGRhdGVTb3VyY2VzJyk7XHJcblxyXG4gICAgdGhpcy5zb3VyY2UgPSB0aGlzLmZpbmRNb3JlU3VpdGFibGVTb3VyY2UoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnTWFyY3lWaWRlb0NvbXBvbmVudCBuZXcgc291cmNlJywgdGhpcy5zb3VyY2UpO1xyXG5cclxuICAgIGlmICh0aGlzLiRzdGF0dXMudmFsdWUgPT09IE1lZGlhU3RhdHVzLk5vdFNldCAmJiB0aGlzLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLiRzdGF0dXMubmV4dChNZWRpYVN0YXR1cy5Ob3RTZXQpO1xyXG5cclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLiRzdGF0dXMubmV4dChNZWRpYVN0YXR1cy5Ob3RMb2FkZWQpO1xyXG5cclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IG9iamVjdEZpdCh2YWw6IE1lZGlhT2JqZWN0Rml0IHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9vYmplY3RGaXQgPSB2YWwgPz8gTWVkaWFPYmplY3RGaXQuT3JpZ2luYWw7XHJcblxyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9iamVjdEZpdCgpOiBNZWRpYU9iamVjdEZpdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0Rml0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTG9hZCgpIHtcclxuICAgIHRoaXMuJHN0YXR1cy5uZXh0KE1lZGlhU3RhdHVzLkxvYWRlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRNb3JlU3VpdGFibGVTb3VyY2UoKTogTUNvcmUuRmlsZVNyYzxNQ29yZS5WaWRlb01ldGE+IHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnZpZGVvUmVmID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ3NraXBwaW5nIGZpbmRNb3JlU3VpdGFibGVTb3VyY2UuIHZpZGVvUmVmIGlzIGVtcHR5IHN0aWxsJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWRlb1NvdXJjZXMgPSB0aGlzLnNyYy5kYXRhPy5zb3VyY2VzID8/IFtdO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRWaWRlb1dpZHRoID0gdGhpcy52aWRlb1JlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgY29uc3QgcmVhbFBpeGVsc1ZpZGVvV2lkdGggPSB0aGlzLmRldmljZS5kZXZpY2VQaXhlbFJhdGlvICogY3VycmVudFZpZGVvV2lkdGg7XHJcblxyXG4gICAgY29uc29sZS5sb2coYE1hcmN5VmlkZW9Db21wb25lbnQgY3VycmVudFZpZGVvV2lkdGggJHtjdXJyZW50VmlkZW9XaWR0aH1gKTtcclxuICAgIGNvbnNvbGUubG9nKGBNYXJjeVZpZGVvQ29tcG9uZW50IHJlYWxQaXhlbHNWaWRlb1dpZHRoICR7cmVhbFBpeGVsc1ZpZGVvV2lkdGh9YCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWRlb1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgdmlkZW9Tb3VyY2UgPSB2aWRlb1NvdXJjZXNbaV07XHJcblxyXG4gICAgICBpZiAoIW1hdGNoZXNNZWRpYVF1ZXJ5KHZpZGVvU291cmNlLm1lZGlhUXVlcnkpKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgLy8gU1NSXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy52aWRlb1JlZi5uYXRpdmVFbGVtZW50Py5jYW5QbGF5VHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIHJldHVybiBmaXJzdCBtcDQsIGJlY2F1c2UgYWxsIHBsYXllcnMgY2FuIHBsYXkgdGhlbVxyXG4gICAgICAgIGNvbnN0IG1wNFNyY3MgPSB2aWRlb1NvdXJjZVxyXG4gICAgICAgICAgLnNyY1NldFxyXG4gICAgICAgICAgLmZpbHRlcih4ID0+IHgubWltZVR5cGUgPT09ICd2aWRlby9tcDQnKVxyXG4gICAgICAgICAgLnNvcnQoZGVzY2VuZGluZ1QoeCA9PiB4Lm1ldGEud2lkdGgpKTsgLy8gYmlnZXN0IHZpZGVvXHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBzc3IgZm91bmQgdmlkZW8gJHttcDRTcmNzWzBdLnVybH1gKVxyXG5cclxuICAgICAgICAvLyBlbGVtZW50IG9yIHVuZGVmaW5lZFxyXG4gICAgICAgIHJldHVybiBtcDRTcmNzWzBdO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgY29uc3QgZmlsZVNyY3MgPSB2aWRlb1NvdXJjZVxyXG4gICAgICAgIC5zcmNTZXRcclxuICAgICAgICAuZmlsdGVyKHggPT4gdGhpcy52aWRlb1JlZi5uYXRpdmVFbGVtZW50LmNhblBsYXlUeXBlKHgubWltZVR5cGUpKVxyXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICBpZiAoYS5tZXRhLndpZHRoID09PSBiLm1ldGEud2lkdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzV2ViTShhKSA/IDEgOiAtMTsgLy8gaWYgc2FtZSB3aWR0aCBwcmVmZXIgd2ViTVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGVsc2UgcHJlZmVyIHNtYWxsZXN0XHJcbiAgICAgICAgICByZXR1cm4gYS5tZXRhLndpZHRoIDw9IGIubWV0YS53aWR0aCA/IDEgOiAtMTtcclxuICAgICAgICB9KTsgLy8gc21hbGxlc3QgdmlkZW9cclxuXHJcbiAgICAgIGlmIChmaWxlU3Jjcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZygnc291cmNlcyAnLCBmaWxlU3Jjcyk7XHJcblxyXG4gICAgICBsZXQgYmVzdFNyYyA9IGZpbGVTcmNzWzBdO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaWxlU3Jjcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGZpbGVTcmMgPSBmaWxlU3Jjc1tpXTtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudERpZmYgPSBmaWxlU3JjLm1ldGEud2lkdGggLSByZWFsUGl4ZWxzVmlkZW9XaWR0aDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coYGJyb3dzZXIgdmlkZW8gY3VycmVudERpZmYgJHtjdXJyZW50RGlmZn1gKVxyXG5cclxuICAgICAgICAvLyB0b28gYmlnIHZpZGVvIHNvdXJjZSB3aWR0aFxyXG4gICAgICAgIGlmIChjdXJyZW50RGlmZiA+IDApXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgYmVzdFNyYyA9IGZpbGVTcmM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKGBicm93c2VyIGZvdW5kIHN1aXRhYmxlIHZpZGVvICR7YmVzdFNyYy51cmx9YClcclxuXHJcbiAgICAgIHJldHVybiBiZXN0U3JjO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2NsYXNzLmtub3duUmF0aW9dPVwic3JjLnJhdGlvID4gMCAmJiBvYmplY3RGaXQgPT09IE1hcmN5T2JqZWN0Rml0Lk9yaWdpbmFsXCJcclxuICAgICBbY2xhc3MuY292ZXJdPVwib2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5Db3ZlclwiXHJcbiAgICAgW2NsYXNzLmNvbnRhaW5dPVwib2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5Db250YWluXCJcclxuICAgICBbY2xhc3MubG9hZGVkXT1cIigkc3RhdHVzIHwgYXN5bmMpID09PSBNZWRpYVN0YXR1cy5Mb2FkZWRcIlxyXG4gICAgIGNsYXNzPVwidmlkZW8tY29udGFpbmVyXCI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXZpY2UuaXNTU1IgOyB0aGVuIHNzclRlbXBsYXRlIGVsc2UgYnJvd3NlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjdmlkZW9UZW1wbGF0ZT5cclxuICAgIDx2aWRlbyAjdmlkZW9cclxuICAgICAgICAgICBbc3JjXT1cInNvdXJjZSAhPT0gdW5kZWZpbmVkID8gc291cmNlLnVybCA6JycgXCJcclxuICAgICAgICAgICAobG9hZCk9XCJvbkxvYWQoKVwiXHJcbiAgICAgICAgICAgKGNhbnBsYXkpPVwidmlkZW8ubXV0ZWQ9dHJ1ZTt2aWRlby5wbGF5KCk7XCJcclxuICAgICAgICAgICBwbGF5c0lubGluZVxyXG4gICAgICAgICAgIGF1dG9wbGF5XHJcbiAgICAgICAgICAgbG9vcFxyXG4gICAgICAgICAgIG11dGVkPiA8L3ZpZGVvPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc3NyVGVtcGxhdGU+XHJcbiAgICA8bm9zY3JpcHQgKm5nSWY9XCJkZXZpY2UuaXNTU1JcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZpZGVvVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbm9zY3JpcHQ+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNicm93c2VyVGVtcGxhdGU+XHJcbiAgICA8Ym9uLWludGVyc2VjdGlvbiAjaW50ZXJzZWN0aW9uWm9uZSBbc2Vzc2lvbl09XCJzcmNcIiAoaW50ZXJzZWN0ZWQpPVwiY2QuZGV0ZWN0Q2hhbmdlcygpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWRlb1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Jvbi1pbnRlcnNlY3Rpb24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInNyYy5yYXRpbyA+IDAgJiYgb2JqZWN0Rml0ID09PSBNYXJjeU9iamVjdEZpdC5PcmlnaW5hbFwiIFtzdHlsZS5wYWRkaW5nLXRvcF09XCIxMDAgLyBzcmMucmF0aW8gKyclJ1wiPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -772,6 +772,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
|
772
772
|
type: Input
|
|
773
773
|
}] } });
|
|
774
774
|
|
|
775
|
+
function isWebM(src) {
|
|
776
|
+
return src.mimeType === 'video/webm';
|
|
777
|
+
}
|
|
775
778
|
class MarcyVideoComponent {
|
|
776
779
|
constructor(device, cd, _u, srcDir) {
|
|
777
780
|
this.device = device;
|
|
@@ -859,31 +862,40 @@ class MarcyVideoComponent {
|
|
|
859
862
|
if (!matchesMediaQuery(videoSource.mediaQuery))
|
|
860
863
|
continue;
|
|
861
864
|
// SSR
|
|
862
|
-
if (typeof this.videoRef.nativeElement
|
|
865
|
+
if (typeof this.videoRef.nativeElement?.canPlayType !== 'function') {
|
|
863
866
|
// return first mp4, because all players can play them
|
|
864
867
|
const mp4Srcs = videoSource
|
|
865
868
|
.srcSet
|
|
866
869
|
.filter(x => x.mimeType === 'video/mp4')
|
|
867
870
|
.sort(descendingT(x => x.meta.width)); // bigest video
|
|
871
|
+
console.log(`ssr found video ${mp4Srcs[0].url}`);
|
|
868
872
|
// element or undefined
|
|
869
873
|
return mp4Srcs[0];
|
|
870
874
|
}
|
|
871
875
|
const fileSrcs = videoSource
|
|
872
876
|
.srcSet
|
|
873
877
|
.filter(x => this.videoRef.nativeElement.canPlayType(x.mimeType))
|
|
874
|
-
.sort(
|
|
875
|
-
.
|
|
878
|
+
.sort((a, b) => {
|
|
879
|
+
if (a.meta.width === b.meta.width) {
|
|
880
|
+
return isWebM(a) ? 1 : -1; // if same width prefer webM
|
|
881
|
+
}
|
|
882
|
+
// else prefer smallest
|
|
883
|
+
return a.meta.width <= b.meta.width ? 1 : -1;
|
|
884
|
+
}); // smallest video
|
|
876
885
|
if (fileSrcs.length === 0)
|
|
877
886
|
continue;
|
|
887
|
+
console.log('sources ', fileSrcs);
|
|
878
888
|
let bestSrc = fileSrcs[0];
|
|
879
889
|
for (let i = 1; i < fileSrcs.length; i++) {
|
|
880
890
|
const fileSrc = fileSrcs[i];
|
|
881
891
|
const currentDiff = fileSrc.meta.width - realPixelsVideoWidth;
|
|
892
|
+
console.log(`browser video currentDiff ${currentDiff}`);
|
|
882
893
|
// too big video source width
|
|
883
894
|
if (currentDiff > 0)
|
|
884
895
|
break;
|
|
885
896
|
bestSrc = fileSrc;
|
|
886
897
|
}
|
|
898
|
+
console.log(`browser found suitable video ${bestSrc.url}`);
|
|
887
899
|
return bestSrc;
|
|
888
900
|
}
|
|
889
901
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candy-kingdom-bonnie.mjs","sources":["../../../../libs/bonnie/src/lib/generated/bone.ts","../../../../libs/bonnie/src/lib/generated/file-format.ts","../../../../libs/bonnie/src/lib/generated/file-meta.ts","../../../../libs/bonnie/src/lib/generated/file-src-base.ts","../../../../libs/bonnie/src/lib/generated/file-src.ts","../../../../libs/bonnie/src/lib/generated/i-equatable.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route-with-data.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route.ts","../../../../libs/bonnie/src/lib/generated/i-have-skeleton.ts","../../../../libs/bonnie/src/lib/generated/i-page.ts","../../../../libs/bonnie/src/lib/generated/image-meta.ts","../../../../libs/bonnie/src/lib/generated/image-source.ts","../../../../libs/bonnie/src/lib/generated/image.ts","../../../../libs/bonnie/src/lib/generated/localized-object.ts","../../../../libs/bonnie/src/lib/generated/localized-string.ts","../../../../libs/bonnie/src/lib/generated/media-source-base.ts","../../../../libs/bonnie/src/lib/generated/media-source.ts","../../../../libs/bonnie/src/lib/generated/open-graph-data.ts","../../../../libs/bonnie/src/lib/generated/page-base.ts","../../../../libs/bonnie/src/lib/generated/page-data.ts","../../../../libs/bonnie/src/lib/generated/page.ts","../../../../libs/bonnie/src/lib/generated/pix-media.ts","../../../../libs/bonnie/src/lib/generated/pix-meta.ts","../../../../libs/bonnie/src/lib/generated/publish-status.ts","../../../../libs/bonnie/src/lib/generated/sizes-item.ts","../../../../libs/bonnie/src/lib/generated/sizes-width-unit.ts","../../../../libs/bonnie/src/lib/generated/svg-meta.ts","../../../../libs/bonnie/src/lib/generated/video-meta.ts","../../../../libs/bonnie/src/lib/generated/video-source.ts","../../../../libs/bonnie/src/lib/generated/video.ts","../../../../libs/bonnie/src/lib/generated/view.ts","../../../../libs/bonnie/src/lib/generated/index.ts","../../../../libs/bonnie/src/lib/core/utils.ts","../../../../libs/bonnie/src/lib/core/unsubscribe.service.ts","../../../../libs/bonnie/src/lib/core/src.directive.ts","../../../../libs/bonnie/src/lib/core/MediaStatus.ts","../../../../libs/bonnie/src/lib/core/MediaObjectFit.ts","../../../../libs/bonnie/src/lib/core/device.service.ts","../../../../libs/bonnie/src/lib/core/device.service.base.ts","../../../../libs/bonnie/src/lib/core/intersection.component.ts","../../../../libs/bonnie/src/lib/core/encode-uri.pipe.ts","../../../../libs/bonnie/src/lib/core/emptyImage.ts","../../../../libs/bonnie/src/lib/core/emptyVideo.ts","../../../../libs/bonnie/src/lib/core/emptyBone.ts","../../../../libs/bonnie/src/lib/core/emptyLocalizedString.ts","../../../../libs/bonnie/src/lib/localization/LocalizeServiceBase.ts","../../../../libs/bonnie/src/lib/localization/localize.pipe.ts","../../../../libs/bonnie/src/lib/marcy-image/imgsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-image/toHtmlSources.ts","../../../../libs/bonnie/src/lib/marcy-image/getDefaultSrc.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.html","../../../../libs/bonnie/src/lib/marcy-video/vidsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.html","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.ts","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.html","../../../../libs/bonnie/src/lib/skeleton/bone.directive.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton-anchor.directive.ts","../../../../libs/bonnie/src/lib/skeleton/unknown-bone.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.html","../../../../libs/bonnie/src/lib/skeleton/BoneMap.ts","../../../../libs/bonnie/src/lib/bonnie.module.ts","../../../../libs/bonnie/src/candy-kingdom-bonnie.ts"],"sourcesContent":["/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface Bone {\r\n style: string;\r\n mediaQuery: string;\r\n enabled: boolean;\r\n type: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileFormat {\r\n extension: string;\r\n mimeType: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileMeta {\r\n byteCount: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileSrcBase {\r\n mimeType: string;\r\n url: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { FileMeta } from \"./file-meta\";\r\nimport { FileSrcBase } from \"./file-src-base\";\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileSrc<T extends FileMeta> extends FileSrcBase {\r\n meta: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport interface IEquatable<T> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IHaveDataRoute } from \"./i-have-data-route\";\r\n\r\nexport interface IHaveDataRouteWithData<T> extends IHaveDataRoute {\r\n data: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport interface IHaveDataRoute {\r\n dataRoute: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { Bone } from \"./bone\";\r\n\r\nexport interface IHaveSkeleton {\r\n bones: Bone[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PageData } from \"./page-data\";\r\n\r\nexport interface IPage<TData extends PageData> {\r\n data: TData;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMeta } from \"./pix-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileMeta } from \"./file-meta\";\r\n\r\nexport interface ImageMeta extends PixMeta {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { MediaSource } from \"./media-source\";\r\nimport { ImageMeta } from \"./image-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\nimport { SizesItem } from \"./sizes-item\";\r\n\r\nexport interface ImageSource extends MediaSource<ImageMeta> {\r\n sizes: SizesItem[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMedia } from \"./pix-media\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { ImageSource } from \"./image-source\";\r\n\r\nexport interface Image extends PixMedia {\r\n readonly $type: 'image';\r\n sources: ImageSource[];\r\n type: 'image';\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface LocalizedObject<T> {\r\n [locale: string]: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { LocalizedObject } from \"./localized-object\";\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface LocalizedString extends LocalizedObject<string> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileSrcBase } from \"./file-src-base\";\r\n\r\nexport interface MediaSourceBase {\r\n srcSet: FileSrcBase[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { FileMeta } from \"./file-meta\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileSrc } from \"./file-src\";\r\n\r\nexport interface MediaSource<TMeta extends FileMeta> extends MediaSourceBase {\r\n srcSet: FileSrc<TMeta>[];\r\n mediaQuery: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { LocalizedString } from \"./localized-string\";\r\nimport { LocalizedObject } from \"./localized-object\";\r\nimport { FileSrc } from \"./file-src\";\r\nimport { ImageMeta } from \"./image-meta\";\r\n\r\nexport interface OpenGraphData {\r\n title: LocalizedString;\r\n description: LocalizedString;\r\n image: LocalizedObject<FileSrc<ImageMeta>>;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IHaveSkeleton } from \"./i-have-skeleton\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { PublishStatus } from \"./publish-status\";\r\nimport { LocalizedString } from \"./localized-string\";\r\nimport { OpenGraphData } from \"./open-graph-data\";\r\nimport { Bone } from \"./bone\";\r\n\r\nexport interface PageBase {\r\n id: string;\r\n url: string;\r\n route: string;\r\n order: number;\r\n publishStatus: PublishStatus;\r\n title: LocalizedString;\r\n openGraph: OpenGraphData;\r\n bones: Bone[];\r\n children: PageBase[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface PageData {\r\n type: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PageData } from \"./page-data\";\r\nimport { PageBase } from \"./page-base\";\r\nimport { IHaveSkeleton } from \"./i-have-skeleton\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { IPage } from \"./i-page\";\r\n\r\nexport interface Page<T extends PageData> extends PageBase {\r\n data: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\n\r\nexport interface PixMedia {\r\n sources: MediaSourceBase[];\r\n type: 'image' | 'video';\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { FileMeta } from \"./file-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface PixMeta extends FileMeta {\r\n width: number;\r\n height: number;\r\n ratio: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport enum PublishStatus {\r\n NotSet = 0,\r\n Draft = 1,\r\n Published = 2,\r\n Archived = 3,\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { SizesWidthUnit } from \"./sizes-width-unit\";\r\n\r\nexport interface SizesItem {\r\n width: number;\r\n unit: SizesWidthUnit;\r\n mediaQuery: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport enum SizesWidthUnit {\r\n Px = \"Px\",\r\n Em = \"Em\",\r\n Vw = \"Vw\",\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMeta } from \"./pix-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileMeta } from \"./file-meta\";\r\n\r\nexport interface SvgMeta extends PixMeta {\r\n preciseWidth: number;\r\n preciseHeight: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMeta } from \"./pix-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileMeta } from \"./file-meta\";\r\n\r\nexport interface VideoMeta extends PixMeta {\r\n duration: number;\r\n fullFormat: string;\r\n hasAudio: boolean;\r\n frameRate: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { MediaSource } from \"./media-source\";\r\nimport { VideoMeta } from \"./video-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\n\r\nexport interface VideoSource extends MediaSource<VideoMeta> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMedia } from \"./pix-media\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { VideoSource } from \"./video-source\";\r\n\r\nexport interface Video extends PixMedia {\r\n readonly $type: 'video';\r\n sources: VideoSource[];\r\n type: 'video';\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IHaveSkeleton } from \"./i-have-skeleton\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { Bone } from \"./bone\";\r\n\r\nexport interface View {\r\n id: string;\r\n code: string;\r\n bones: Bone[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport * from './bone';\r\nexport * from './file-format';\r\nexport * from './file-meta';\r\nexport * from './file-src-base';\r\nexport * from './file-src';\r\nexport * from './i-equatable';\r\nexport * from './i-have-data-route-with-data';\r\nexport * from './i-have-data-route';\r\nexport * from './i-have-skeleton';\r\nexport * from './i-page';\r\nexport * from './image-meta';\r\nexport * from './image-source';\r\nexport * from './image';\r\nexport * from './localized-object';\r\nexport * from './localized-string';\r\nexport * from './media-source-base';\r\nexport * from './media-source';\r\nexport * from './open-graph-data';\r\nexport * from './page-base';\r\nexport * from './page-data';\r\nexport * from './page';\r\nexport * from './pix-media';\r\nexport * from './pix-meta';\r\nexport * from './publish-status';\r\nexport * from './sizes-item';\r\nexport * from './sizes-width-unit';\r\nexport * from './svg-meta';\r\nexport * from './video-meta';\r\nexport * from './video-source';\r\nexport * from './video';\r\nexport * from './view';\r\n","import * as MCore from '../generated';\r\n\r\n// https://stackoverflow.com/questions/42136098/array-groupby-in-typescript\r\n\r\nexport const groupBy = <T, K extends keyof any>(arr: T[], key: (i: T) => K) =>\r\n arr.reduce((groups, item) => {\r\n (groups[key(item)] ||= []).push(item);\r\n return groups;\r\n }, {} as Record<K, T[]>);\r\n\r\nexport function distinct<T>(value: T, index: number, array: T[]) {\r\n return array.indexOf(value) === index;\r\n}\r\n\r\nexport function ascending(a: number, b: number) {\r\n return a - b;\r\n}\r\n\r\nexport function ascendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\r\n return function (a: T, b: T) { return ascending(sel(a), sel(b)) };\r\n}\r\n\r\nexport function descending(a: number, b: number) {\r\n return b - a;\r\n}\r\n\r\nexport function descendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\r\n return function (a: T, b: T) { return descending(sel(a), sel(b)) };\r\n}\r\n\r\nexport function generateSizesString(sizes: MCore.SizesItem[]): string {\r\n const sizesString = sizes\r\n .sort(x => x.width)\r\n .map(x => `${x.mediaQuery} ${x.width}${x.unit.toLowerCase()}`.trim())\r\n .join(',');\r\n\r\n return sizesString;\r\n}\r\n\r\nexport function matchesMediaQuery(mediaQuery?: string): boolean {\r\n const isEmptyQuery = mediaQuery === null || mediaQuery === undefined || mediaQuery.trim().length === 0;\r\n\r\n // work for SSR and browser\r\n if (isEmptyQuery)\r\n return true;\r\n\r\n // other queries disallowed in SSR\r\n if (typeof window === 'undefined')\r\n return false;\r\n\r\n const mediaQueryList = window.matchMedia(mediaQuery);\r\n\r\n return mediaQueryList.matches;\r\n}\r\n\r\nexport function isLocalUrlString(url: string): boolean {\r\n if (url === undefined || url === null || url.trim().length === 0)\r\n return true;\r\n\r\n if (url.startsWith('//'))\r\n return false;\r\n\r\n if (url.startsWith('./') || url.startsWith('/'))\r\n return true;\r\n\r\n return false;\r\n}\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { Observable, Subject, takeUntil } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class UnsubscriberService implements OnDestroy {\r\n private readonly _destroy$ = new Subject<void>();\r\n\r\n public readonly takeUntilDestroy = <T>\r\n (\r\n origin: Observable<T>\r\n ): Observable<T> => origin.pipe(takeUntil(this._destroy$));\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next();\r\n this._destroy$.complete();\r\n }\r\n}\r\n","import { ChangeDetectorRef, Directive, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject, Observable, fromEvent, NEVER, merge, Subject, takeUntil } from 'rxjs';\r\n\r\nimport * as MCore from '../generated';\r\nimport * as utils from './utils';\r\n\r\nimport { UnsubscriberService } from './unsubscribe.service';\r\n\r\n@Directive({\r\n selector: '[bonSrcBase]',\r\n providers: [UnsubscriberService]\r\n})\r\nexport class SrcBaseDirective<T extends MCore.Image | MCore.Video> implements OnInit {\r\n @Output()\r\n public readonly ratioChange = new EventEmitter<number>()\r\n\r\n @Output()\r\n public readonly srcChange = new EventEmitter<T | undefined>()\r\n\r\n private readonly _ratioSubject = new BehaviorSubject<number>(0);\r\n private readonly _queryChangeClearSubject = new Subject<void>();\r\n\r\n private _data?: T;\r\n\r\n constructor(private readonly _u: UnsubscriberService, private readonly cd: ChangeDetectorRef) {\r\n console.log('SrcBaseDirective ctor');\r\n this.cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n console.log('SrcBaseDirective ngOnInit');\r\n\r\n this._ratioSubject\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe(x => {\r\n this.ratioChange.next(x);\r\n this.cd.detectChanges(); // todo: verify, do i need it here\r\n });\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get ratio(): number {\r\n return this._ratioSubject.value;\r\n }\r\n\r\n public get data(): T | undefined {\r\n return this._data;\r\n }\r\n\r\n public set data(val: T | undefined) {\r\n console.log('set data', val);\r\n\r\n if (val !== undefined && val !== null && val.sources.length === 0) {\r\n console.warn(`image should have sources!`);\r\n val = undefined;\r\n }\r\n\r\n this._data = val;\r\n\r\n console.log('calling src change ', this._data);\r\n\r\n // clear mediaQuery subscriptions\r\n this._queryChangeClearSubject.next();\r\n\r\n // ratio\r\n this._ratioSubject.next(0);\r\n\r\n this.srcChange.next(this._data);\r\n\r\n if (this._data === undefined || this._data.sources.length === 0) {\r\n return;\r\n }\r\n\r\n const allRatios = this._data.sources\r\n .flatMap(x => x.srcSet)\r\n .map(x => x.meta.ratio)\r\n .filter(utils.distinct);\r\n\r\n if (allRatios.length === 1) {\r\n // same ratio for all\r\n this._ratioSubject.next(allRatios[0]);\r\n return;\r\n }\r\n\r\n this.watchMediaQueries()\r\n .subscribe(() => {this.calcRatio(); console.log('watchMediaQueries calcRatio')});\r\n\r\n this.calcRatio();\r\n }\r\n\r\n private calcRatio(): void {\r\n if (this._data === undefined || this._data === null || this._data.sources.length === 0)\r\n return;\r\n\r\n for (let i = 0; i < this._data.sources.length; i++) {\r\n const source = this._data.sources[i];\r\n const srcRatios = source.srcSet\r\n .sort(utils.descendingT(x => x.meta.width))\r\n .map(x => x.meta.ratio)\r\n .filter(utils.distinct);\r\n\r\n if (srcRatios.length === 0) {\r\n // console.warn(`each source should have srcSet with same ratio. founded: ${srcRatios.join(', ')}`);\r\n return;\r\n }\r\n\r\n if (srcRatios.length > 1) {\r\n console.warn(`each source should have srcSet with same ratio. founded: ${srcRatios.join(', ')}`);\r\n }\r\n\r\n const ratio = srcRatios[0]; // most accurate ratio in biggest image\r\n\r\n if (source.mediaQuery.length === 0) {\r\n this._ratioSubject.next(ratio);\r\n return;\r\n }\r\n\r\n if (typeof window === 'undefined' || typeof window.matchMedia === 'undefined')\r\n return;\r\n\r\n const mediaQueryList = window.matchMedia(source.mediaQuery);\r\n\r\n if (mediaQueryList.matches) {\r\n this._ratioSubject.next(ratio);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n public watchMediaQueries(): Observable<MediaQueryListEvent> {\r\n console.log('watchMediaQueries');\r\n\r\n if (this._data === undefined\r\n || this._data === null\r\n || typeof window === 'undefined'\r\n || typeof window.matchMedia === 'undefined')\r\n return NEVER.pipe(this._u.takeUntilDestroy, takeUntil(this._queryChangeClearSubject));\r\n\r\n const mediaQueries = this._data.sources\r\n .map(x => x.mediaQuery)\r\n .filter(utils.distinct)\r\n .filter(x => x.length > 0);\r\n\r\n console.log('watchMediaQueries mediaQueries', mediaQueries);\r\n\r\n const queryObservables = mediaQueries.map\r\n (\r\n media => {\r\n const queryList = window.matchMedia(media);\r\n const observable = fromEvent<MediaQueryListEvent>(queryList, 'change')\r\n .pipe(this._u.takeUntilDestroy, takeUntil(this._queryChangeClearSubject));\r\n\r\n return observable;\r\n }\r\n );\r\n\r\n const combinedObservable = merge(...queryObservables);\r\n return combinedObservable;\r\n }\r\n}\r\n\r\n\r\n","export enum MediaStatus {\r\n NotSet = 'NotSet',\r\n NotLoaded = 'NotLoaded',\r\n Loading = 'Loading',\r\n Loaded = 'Loaded'\r\n}\r\n","export enum MediaObjectFit {\r\n Original = 'Original',\r\n Cover = 'Cover',\r\n Contain = 'Contain'\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { DeviceServiceBase } from \"./device.service.base\";\r\n\r\n@Injectable()\r\nexport class DeviceService implements DeviceServiceBase {\r\n public readonly devicePixelRatio = typeof window === 'undefined' ? 1 : window.devicePixelRatio;\r\n public readonly isSSR = typeof window === 'undefined';\r\n}\r\n","export abstract class DeviceServiceBase {\r\n public abstract get isSSR(): boolean;\r\n public abstract get devicePixelRatio(): number;\r\n}","import { ElementRef, OnInit, OnDestroy, Component, Output, EventEmitter, Input, ChangeDetectorRef } from '@angular/core';\r\nimport { BehaviorSubject, Observable, filter, skip } from 'rxjs';\r\nimport { UnsubscriberService } from './unsubscribe.service';\r\n\r\n@Component({\r\n selector: 'bon-intersection',\r\n template: '<ng-content></ng-content>',\r\n styles: [':host{display:block}'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class IntersectionComponent implements OnInit, OnDestroy {\r\n @Output()\r\n public readonly intersected = new EventEmitter<void>();\r\n\r\n private readonly intersectionObserver?: IntersectionObserver;\r\n private readonly _intersectSubject = new BehaviorSubject<boolean>(false);\r\n\r\n private _session: any;\r\n\r\n constructor(private readonly _hostRef: ElementRef, private readonly _u: UnsubscriberService, cd: ChangeDetectorRef) {\r\n cd.detach();\r\n // no template with variables, so we don't need to call changeDetection\r\n\r\n if (typeof window === 'undefined' || typeof IntersectionObserver === 'undefined') {\r\n // call intersection without any\r\n return;\r\n }\r\n\r\n this.intersectionObserver = new IntersectionObserver(this.onIntersection.bind(this));\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._intersectSubject\r\n .pipe(this._u.takeUntilDestroy, filter(x => x === true))\r\n .subscribe(x => this.intersected.next());\r\n }\r\n\r\n @Input()\r\n public set session(newSession: any) {\r\n if (this._session === newSession)\r\n return;\r\n\r\n console.log('reset intersection Observer');\r\n\r\n this._session = newSession;\r\n this.reset();\r\n }\r\n\r\n public get intersectedOnce(): boolean {\r\n return this._intersectSubject.value;\r\n }\r\n\r\n private reset(): void {\r\n if (this.intersectionObserver === undefined || this.intersectionObserver === null)\r\n return;\r\n\r\n this.intersectionObserver.unobserve(this._hostRef.nativeElement);\r\n\r\n this._intersectSubject.next(false);\r\n\r\n this.intersectionObserver.observe(this._hostRef.nativeElement);\r\n }\r\n\r\n private onIntersection(entries: IntersectionObserverEntry[], observer: IntersectionObserver): void {\r\n if (entries.length > 1) {\r\n console.warn('multi entries!');\r\n }\r\n\r\n const isIntersecting = entries[0].isIntersecting\r\n this._intersectSubject.next(isIntersecting);\r\n\r\n console.log(`intersected ${isIntersecting}`, this._hostRef.nativeElement);\r\n\r\n // only once will recieve intersection\r\n if (isIntersecting) {\r\n observer.unobserve(this._hostRef.nativeElement);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._intersectSubject.complete();\r\n this.intersectionObserver?.disconnect();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'encodeURIComponent', pure: true })\r\nexport class EncodeURIComponentPipe implements PipeTransform {\r\n public transform(value: string): string {\r\n\r\n return encodeURIComponent(value);\r\n }\r\n}\r\n","import { Image } from \"../generated\";\r\n\r\nexport function emptyImage(): Image {\r\n return {\r\n $type: 'image', // todo: remove\r\n type: 'image',\r\n sources: [],\r\n }\r\n}\r\n\r\n\r\n","import { Video } from \"../generated\";\r\n\r\n\r\nexport function emptyVideo(): Video {\r\n return {\r\n $type: 'video', // todo: remove\r\n type: 'video',\r\n sources: [],\r\n };\r\n}\r\n","import { Bone } from \"../generated\";\r\n\r\n\r\nexport function emptyBone(): Bone {\r\n return {\r\n style: '',\r\n mediaQuery: '',\r\n enabled: true,\r\n type: ''\r\n };\r\n}\r\n","import { LocalizedString } from \"../generated\";\r\n\r\n\r\nexport function emptyLocalizedString(): LocalizedString {\r\n return {};\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { LocalizedObject, LocalizedString } from '../generated';\r\nimport { isLocalUrlString } from '../core/utils';\r\n\r\nexport abstract class LocalizeServiceBase {\r\n public abstract get locale(): string;\r\n public abstract get locale$(): Observable<string>;\r\n\r\n public getLocalized<T>(value: LocalizedObject<T>, defaultValue: T, locale?: string): T {\r\n if (value === undefined)\r\n return defaultValue;\r\n\r\n locale = locale ?? this.locale;\r\n\r\n const obj = value[locale] ?? defaultValue;\r\n return obj;\r\n }\r\n\r\n public getLocalizedText(value: LocalizedString, locale?: string): string {\r\n return this.getLocalized<string>(value, '', locale);\r\n };\r\n\r\n public isLocalUrl(value: LocalizedString, locale?: string): boolean {\r\n const url = this.getLocalizedText(value, locale);\r\n return isLocalUrlString(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { LocalizeServiceBase } from './LocalizeServiceBase';\r\nimport { LocalizedObject, LocalizedString } from '../generated';\r\n\r\n\r\n\r\n@Pipe({ name: 'localize', pure: false })\r\nexport class LocalizePipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) {\r\n }\r\n\r\n public transform(value: LocalizedString, locale?: string): string {\r\n if (value === undefined || value === null)\r\n return '';\r\n\r\n return this.localizeService.getLocalizedText(value, locale);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'localizeObject', pure: false })\r\nexport class LocalizeObjectPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform<T>(object: LocalizedObject<T>, locale?: string): T | undefined {\r\n if (object === undefined || object === null)\r\n return undefined;\r\n\r\n return this.localizeService.getLocalized<T | undefined>(object, undefined, locale);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'localizationIsNotEmpty', pure: false })\r\nexport class LocalizationIsNotEmptyPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n if (value === undefined || value === null)\r\n return false;\r\n\r\n const text = this.localizeService.getLocalizedText(value, locale);\r\n\r\n const isNotEmpty = text.trim().length > 0;\r\n return isNotEmpty;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'localizationIsEmpty', pure: false })\r\nexport class LocalizationIsEmptyPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n\r\n if (value === undefined || value === null)\r\n return true;\r\n\r\n const text = this.localizeService.getLocalizedText(value, locale);\r\n\r\n const isEmpty = text.trim().length === 0;\r\n return isEmpty;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'localizeUrl', pure: false })\r\nexport class LocalizeUrlPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase, private readonly domSanitizer: DomSanitizer) {\r\n\r\n }\r\n\r\n public transform(value: LocalizedString, locale?: string): SafeResourceUrl {\r\n if (value === undefined || value === null)\r\n return '';\r\n\r\n const urlString = this.localizeService.getLocalizedText(value, locale);\r\n const safeUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(urlString);\r\n return safeUrl;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'isLocalUrl', pure: false })\r\nexport class IsLocalUrlPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n\r\n if (value === undefined || value === null)\r\n return false;\r\n\r\n const isLocal = this.localizeService.isLocalUrl(value, locale);\r\n return isLocal;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'isNotLocalUrl', pure: false })\r\nexport class IsNotLocalUrlPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n\r\n if (value === undefined || value === null)\r\n return false;\r\n\r\n const isLocal = this.localizeService.isLocalUrl(value, locale);\r\n return !isLocal;\r\n }\r\n}\r\n","import { Directive, Input, OnInit } from '@angular/core';\r\nimport * as MCore from '../generated';\r\nimport { SrcBaseDirective } from '../core/src.directive';\r\n\r\n@Directive({\r\n selector: '[imgsrc]'\r\n})\r\nexport class ImageSrcDirective extends SrcBaseDirective<MCore.Image> implements OnInit {\r\n\r\n @Input()\r\n public set imgsrc(value: MCore.Image | undefined) {\r\n console.log('set imgsrc', value);\r\n this.data = value;\r\n }\r\n}\r\n","import * as MCore from '../generated';\r\nimport * as utils from '../core/utils';\r\n\r\nimport { IHtmlPictureSource } from './IHtmlPictureSource';\r\n\r\nexport function toHtmlPictureSources(imageSource: MCore.ImageSource): IHtmlPictureSource[] {\r\n const sizes = utils.generateSizesString(imageSource.sizes);\r\n const groupedByMime = utils.groupBy(imageSource.srcSet, x => x.mimeType);\r\n\r\n const simpleSources: IHtmlPictureSource[] = [];\r\n\r\n for (const mime in groupedByMime) {\r\n const fileSrcs = groupedByMime[mime].sort(utils.ascendingT(x => x.meta.width));\r\n\r\n const srcSet = fileSrcs\r\n .map(x => `${x.url} ${x.meta.width}w`)\r\n .join(',');\r\n\r\n const source: IHtmlPictureSource = { mime, sizes, srcSet, media: imageSource.mediaQuery };\r\n\r\n simpleSources.push(source);\r\n }\r\n\r\n return simpleSources;\r\n}\r\n\r\n","import * as MCore from '../generated';\r\nimport * as utils from '../core/utils';\r\n\r\nexport function getDefaultSrc(image: MCore.Image | undefined): MCore.FileSrc<MCore.ImageMeta> | undefined {\r\n if (image === undefined || image === null)\r\n return undefined;\r\n\r\n const files = image.sources\r\n .flatMap(x => x.srcSet)\r\n .sort(utils.descendingT(x => x.meta.width));\r\n\r\n const prefferedFiles = files.filter(\r\n x => x.mimeType === 'image/jpeg'\r\n || x.mimeType === 'image/png'\r\n || x.mimeType === 'image/gif'\r\n );\r\n\r\n if (prefferedFiles.length > 0)\r\n return prefferedFiles[0];\r\n\r\n if (files.length > 0)\r\n return files[0];\r\n\r\n return undefined;\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnInit, OnDestroy, Optional } from '@angular/core';\r\nimport { BehaviorSubject, filter } from 'rxjs';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { MediaStatus } from '../core/MediaStatus';\r\nimport { MediaObjectFit } from '../core/MediaObjectFit';\r\nimport { ImageSrcDirective } from './imgsrc.directive';\r\nimport { IHtmlPictureSource } from './IHtmlPictureSource';\r\nimport { toHtmlPictureSources } from './toHtmlSources';\r\nimport { getDefaultSrc } from './getDefaultSrc';\r\nimport { DeviceServiceBase } from '../core/device.service.base';\r\n\r\n@Component({\r\n selector: 'bon-image',\r\n templateUrl: './marcy-image.component.html',\r\n styleUrls: ['./marcy-image.component.scss'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class MarcyImageComponent implements OnInit {\r\n public readonly MediaStatus = MediaStatus;\r\n public readonly MarcyObjectFit = MediaObjectFit;\r\n\r\n @Output()\r\n public readonly isLoaded: EventEmitter<void> = new EventEmitter();\r\n public readonly sources: IHtmlPictureSource[] = [];\r\n\r\n public readonly $status = new BehaviorSubject<MediaStatus>(MediaStatus.NotSet);\r\n\r\n public defaultSrc = '';\r\n\r\n private _objectFit = MediaObjectFit.Original;\r\n\r\n public readonly src: ImageSrcDirective;\r\n\r\n constructor\r\n (\r\n public readonly device: DeviceServiceBase,\r\n public readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService,\r\n @Optional() srcDir?: ImageSrcDirective\r\n ) {\r\n\r\n console.log('MarcyImageComponent ctor');\r\n\r\n if (srcDir === undefined || srcDir === null)\r\n throw new Error(`${MarcyImageComponent.name} should have [imgsrc] directive as source object`);\r\n\r\n this.src = srcDir;\r\n\r\n // bind src changes\r\n this.src.srcChange\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe(this.onSrcChange.bind(this))\r\n\r\n cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n // bind loaded event\r\n this.$status\r\n .pipe\r\n (\r\n this._u.takeUntilDestroy,\r\n filter(status => status === MediaStatus.Loaded)\r\n )\r\n .subscribe(x => this.isLoaded.next());\r\n\r\n this.cd.detectChanges();\r\n }\r\n private onSrcChange(val: MCore.Image | undefined) {\r\n console.log('MarcyImageComponent onSrcChange', val);\r\n this.defaultSrc = getDefaultSrc(val)?.url ?? '';\r\n\r\n this.sources.splice(0, this.sources.length);\r\n\r\n if (val === undefined || val === null || val.sources.length === 0) {\r\n this.$status.next(MediaStatus.NotSet);\r\n\r\n this.cd.detectChanges();\r\n return;\r\n }\r\n\r\n const newSources = val.sources.flatMap(toHtmlPictureSources);\r\n\r\n console.log('MarcyImageComponent newSources', newSources);\r\n\r\n this.sources.push(...newSources);\r\n\r\n this.$status.next(MediaStatus.NotLoaded);\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n @Input()\r\n public set objectFit(val: MediaObjectFit | undefined) {\r\n this._objectFit = val ?? MediaObjectFit.Original;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get objectFit(): MediaObjectFit {\r\n return this._objectFit;\r\n }\r\n\r\n public onLoad() {\r\n this.$status.next(MediaStatus.Loaded);\r\n }\r\n}\r\n","<div *ngIf=\"sources.length > 0\"\r\n [class.knownRatio]=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\"\r\n [class.cover]=\"objectFit === MarcyObjectFit.Cover\"\r\n [class.contain]=\"objectFit === MarcyObjectFit.Contain\"\r\n [class.loaded]=\"($status | async) === MediaStatus.Loaded\"\r\n class=\"picture-container\">\r\n\r\n <ng-template #pictureTemplate>\r\n <picture>\r\n <source *ngFor=\"let source of sources\"\r\n [srcset]=\"source.srcSet\"\r\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\r\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\r\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\r\n\r\n <img [src]=\"defaultSrc\" (load)=\"onLoad()\" />\r\n </picture>\r\n </ng-template>\r\n\r\n <noscript *ngIf=\"device.isSSR\">\r\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\r\n </noscript>\r\n\r\n <bon-intersection #intersectionZone *ngIf=\"!device.isSSR\" [session]=\"src\" (intersected)=\"cd.detectChanges()\">\r\n\r\n <ng-container *ngIf=\"intersectionZone.intersectedOnce\">\r\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n </bon-intersection>\r\n\r\n <div *ngIf=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\" [style.padding-top]=\"100 / src.ratio +'%'\"></div>\r\n</div>\r\n","import { Directive, Input, OnInit } from '@angular/core';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { SrcBaseDirective } from '../core/src.directive';\r\n\r\n@Directive({\r\n selector: '[vidsrc]'\r\n})\r\nexport class VideoSrcDirective extends SrcBaseDirective<MCore.Video> implements OnInit {\r\n\r\n @Input()\r\n public set vidsrc(value: MCore.Video | undefined) {\r\n this.data = value;\r\n\r\n console.log('set vidsrc', value);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnInit, OnDestroy, Optional, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { BehaviorSubject, filter } from 'rxjs';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { MediaStatus } from '../core/MediaStatus';\r\nimport { MediaObjectFit } from '../core/MediaObjectFit';\r\nimport { DeviceServiceBase } from '../core/device.service.base';\r\nimport { VideoSrcDirective } from './vidsrc.directive';\r\nimport { ascendingT, matchesMediaQuery, descendingT } from '../core/utils';\r\n\r\n@Component({\r\n selector: 'bon-video',\r\n templateUrl: './marcy-video.component.html',\r\n styleUrls: ['./marcy-video.component.scss'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class MarcyVideoComponent implements OnInit, AfterViewInit {\r\n public readonly MediaStatus = MediaStatus;\r\n public readonly MarcyObjectFit = MediaObjectFit;\r\n\r\n @ViewChild('video')\r\n public readonly videoRef!: ElementRef<HTMLVideoElement>;\r\n\r\n @Output()\r\n public readonly isLoaded: EventEmitter<void> = new EventEmitter();\r\n\r\n public readonly $status = new BehaviorSubject<MediaStatus>(MediaStatus.NotSet);\r\n public readonly src: VideoSrcDirective;\r\n\r\n public source?: MCore.FileSrc<MCore.VideoMeta>;\r\n\r\n private _objectFit = MediaObjectFit.Original;\r\n\r\n constructor\r\n (\r\n public readonly device: DeviceServiceBase,\r\n public readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService,\r\n @Optional() srcDir?: VideoSrcDirective\r\n ) {\r\n\r\n console.log('MarcyVideoComponent ctor');\r\n\r\n if (srcDir === undefined || srcDir === null)\r\n throw new Error(`${MarcyVideoComponent.name} should have [vidsrc] directive as source object`);\r\n\r\n this.src = srcDir;\r\n\r\n cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n console.log('MarcyVideoComponent ngOnInit');\r\n\r\n // bind loaded event\r\n this.$status\r\n .pipe\r\n (\r\n this._u.takeUntilDestroy,\r\n filter(status => status === MediaStatus.Loaded)\r\n )\r\n .subscribe(() => this.isLoaded.next());\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public ngAfterViewInit() {\r\n console.log('MarcyVideoComponent ngAfterViewInit');\r\n\r\n // bind src changes\r\n this.src.srcChange\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe((val) => {\r\n console.log('MarcyVideoComponent onSrcChange', val);\r\n\r\n this.updateSources();\r\n\r\n // resubscribe because its updated with src\r\n this.subscribeToMediaQueryChange();\r\n })\r\n\r\n this.updateSources();\r\n\r\n // initial, for src added before init\r\n this.subscribeToMediaQueryChange();\r\n }\r\n\r\n private subscribeToMediaQueryChange(): void {\r\n this.src\r\n .watchMediaQueries()\r\n .subscribe(() => {\r\n console.log('MarcyVideoComponent watchMediaQueries');\r\n this.updateSources();\r\n });\r\n }\r\n\r\n private updateSources() {\r\n console.log('MarcyVideoComponent updateSources');\r\n\r\n this.source = this.findMoreSuitableSource();\r\n\r\n console.log('MarcyVideoComponent new source', this.source);\r\n\r\n if (this.$status.value === MediaStatus.NotSet && this.source === undefined) {\r\n return;\r\n }\r\n\r\n if (this.source === undefined) {\r\n this.$status.next(MediaStatus.NotSet);\r\n\r\n this.cd.detectChanges();\r\n return;\r\n }\r\n\r\n this.$status.next(MediaStatus.NotLoaded);\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n @Input()\r\n public set objectFit(val: MediaObjectFit | undefined) {\r\n this._objectFit = val ?? MediaObjectFit.Original;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get objectFit(): MediaObjectFit {\r\n return this._objectFit;\r\n }\r\n\r\n public onLoad() {\r\n this.$status.next(MediaStatus.Loaded);\r\n }\r\n\r\n private findMoreSuitableSource(): MCore.FileSrc<MCore.VideoMeta> | undefined {\r\n if (this.videoRef === undefined) {\r\n console.log('skipping findMoreSuitableSource. videoRef is empty still');\r\n return;\r\n }\r\n\r\n const videoSources = this.src.data?.sources ?? [];\r\n\r\n const currentVideoWidth = this.videoRef.nativeElement.clientWidth;\r\n const realPixelsVideoWidth = this.device.devicePixelRatio * currentVideoWidth;\r\n\r\n console.log(`MarcyVideoComponent currentVideoWidth ${currentVideoWidth}`);\r\n console.log(`MarcyVideoComponent realPixelsVideoWidth ${realPixelsVideoWidth}`);\r\n\r\n for (let i = 0; i < videoSources.length; i++) {\r\n const videoSource = videoSources[i];\r\n\r\n if (!matchesMediaQuery(videoSource.mediaQuery))\r\n continue;\r\n\r\n // SSR\r\n if (typeof this.videoRef.nativeElement.canPlayType !== 'function') {\r\n // return first mp4, because all players can play them\r\n const mp4Srcs = videoSource\r\n .srcSet\r\n .filter(x => x.mimeType === 'video/mp4')\r\n .sort(descendingT(x => x.meta.width)); // bigest video\r\n\r\n // element or undefined\r\n return mp4Srcs[0];\r\n }\r\n\r\n const fileSrcs = videoSource\r\n .srcSet\r\n .filter(x => this.videoRef.nativeElement.canPlayType(x.mimeType))\r\n .sort(ascendingT(x => x.meta.width)) // smallest video\r\n .sort(x => x.mimeType.includes('webm') ? 1 : -1);// webm first\r\n\r\n if (fileSrcs.length === 0)\r\n continue;\r\n\r\n let bestSrc = fileSrcs[0];\r\n\r\n for (let i = 1; i < fileSrcs.length; i++) {\r\n const fileSrc = fileSrcs[i];\r\n\r\n const currentDiff = fileSrc.meta.width - realPixelsVideoWidth;\r\n\r\n // too big video source width\r\n if (currentDiff > 0)\r\n break;\r\n\r\n bestSrc = fileSrc;\r\n }\r\n\r\n return bestSrc;\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","<div [class.knownRatio]=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\"\r\n [class.cover]=\"objectFit === MarcyObjectFit.Cover\"\r\n [class.contain]=\"objectFit === MarcyObjectFit.Contain\"\r\n [class.loaded]=\"($status | async) === MediaStatus.Loaded\"\r\n class=\"video-container\">\r\n\r\n <ng-container *ngIf=\"device.isSSR ; then ssrTemplate else browserTemplate\"></ng-container>\r\n\r\n <ng-template #videoTemplate>\r\n <video #video\r\n [src]=\"source !== undefined ? source.url :'' \"\r\n (load)=\"onLoad()\"\r\n (canplay)=\"video.muted=true;video.play();\"\r\n playsInline\r\n autoplay\r\n loop\r\n muted> </video>\r\n </ng-template>\r\n\r\n <ng-template #ssrTemplate>\r\n <noscript *ngIf=\"device.isSSR\">\r\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\r\n </noscript>\r\n </ng-template>\r\n\r\n <ng-template #browserTemplate>\r\n <bon-intersection #intersectionZone [session]=\"src\" (intersected)=\"cd.detectChanges()\">\r\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\r\n </bon-intersection>\r\n </ng-template>\r\n\r\n <div *ngIf=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\" [style.padding-top]=\"100 / src.ratio +'%'\"></div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnInit } from '@angular/core';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { MediaObjectFit } from '../core/MediaObjectFit';\r\nimport { DeviceServiceBase } from '../core/device.service.base';\r\n\r\n@Component({\r\n selector: 'bon-media',\r\n templateUrl: './marcy-media.component.html',\r\n styleUrls: ['./marcy-media.component.scss'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class MarcyMediaComponent implements OnInit {\r\n public readonly MarcyObjectFit = MediaObjectFit;\r\n\r\n @Output()\r\n public readonly isLoaded: EventEmitter<void> = new EventEmitter();\r\n\r\n private _objectFit = MediaObjectFit.Original;\r\n private _src?: MCore.Video | MCore.Image;\r\n\r\n constructor\r\n (\r\n public readonly device: DeviceServiceBase,\r\n public readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService\r\n ) {\r\n\r\n console.log('MarcyMediaComponent ctor');\r\n\r\n cd.detach();\r\n }\r\n\r\n\r\n public ngOnInit(): void {\r\n console.log('MarcyMediaComponent ngOnInit');\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n\r\n public get src(): MCore.Video | MCore.Image | undefined {\r\n return this._src;\r\n }\r\n\r\n @Input()\r\n public set src(val: MCore.Video | MCore.Image | undefined) {\r\n console.log('set data', val);\r\n\r\n this._src = val;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n @Input()\r\n public set objectFit(val: MediaObjectFit | undefined) {\r\n this._objectFit = val ?? MediaObjectFit.Original;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get objectFit(): MediaObjectFit {\r\n return this._objectFit;\r\n }\r\n\r\n public onLoad() {\r\n this.isLoaded.next();\r\n }\r\n\r\n}\r\n","<bon-image *ngIf=\"src && src.type==='image'\"\r\n [imgsrc]=\"src\"\r\n [objectFit]=\"objectFit\"\r\n (isLoaded)=\"onLoad()\"></bon-image>\r\n\r\n<bon-video *ngIf=\"src && src.type==='video'\"\r\n [vidsrc]=\"src\"\r\n [objectFit]=\"objectFit\"\r\n (isLoaded)=\"onLoad()\"></bon-video>\r\n","import { ChangeDetectorRef, Directive, OnInit } from '@angular/core';\r\nimport { Bone } from '../generated';\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { LocalizeServiceBase } from '../localization/LocalizeServiceBase';\r\n\r\n@Directive({\r\n selector: '[bonBoneDir]',\r\n standalone: true\r\n})\r\nexport class BoneDirective<T extends Bone = Bone> implements OnInit {\r\n private _bone?: T;\r\n\r\n constructor(private readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService,\r\n private readonly localizationService: LocalizeServiceBase) {\r\n this.cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.localizationService.locale$\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe(() => {\r\n // need to detect changes in our detached components\r\n this.cd.detectChanges();\r\n })\r\n }\r\n\r\n public set bone(value: T) {\r\n this._bone = value;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get bone(): T {\r\n if (this._bone === undefined || this._bone === null)\r\n throw new Error('The property \"bone\" should be set at least once. For example in skeleton');\r\n\r\n return this._bone;\r\n }\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[bonSkeletonAnchor]',\r\n standalone: true\r\n})\r\nexport class SkeletonAnchorDirective {\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}\r\n","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { IBoneComponent } from \"./IBoneComponent\";\r\nimport { Bone } from '../generated';\r\nimport { BoneDirective } from './bone.directive';\r\n\r\n@Component({\r\n selector: 'bon-unknown-bone',\r\n hostDirectives: [BoneDirective],\r\n template: `<h2>unknown bone {{bd.bone.type}}</h2>\r\n <div>{{bd.bone | json}}</div>`,\r\n styles: [\r\n `:host{\r\n display: block;\r\n border: 2px solid red;\r\n box-sizing: border-box;\r\n }`\r\n ]\r\n})\r\nexport class UnknownBoneComponent implements IBoneComponent {\r\n constructor(private readonly cd: ChangeDetectorRef, public readonly bd: BoneDirective<Bone>) {\r\n console.log('BoneDirective', bd);\r\n cd.detach();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.cd.detectChanges();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, Type, ViewChild } from '@angular/core';\r\nimport { SkeletonAnchorDirective } from './skeleton-anchor.directive';\r\nimport { IBoneComponent } from \"./IBoneComponent\";\r\nimport { Bone } from '../generated';\r\nimport { UnknownBoneComponent } from './unknown-bone.component';\r\n\r\n@Component({\r\n selector: 'bon-skeleton',\r\n templateUrl: './skeleton.component.html',\r\n styleUrls: ['./skeleton.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SkeletonComponent implements OnInit {\r\n @ViewChild(SkeletonAnchorDirective, { static: true })\r\n public skeletonAnchor!: SkeletonAnchorDirective;\r\n\r\n @Input({ required: true })\r\n public map?: Map<string, Type<IBoneComponent>>;\r\n\r\n private readonly _bones: Bone[] = [];\r\n\r\n private iniailized = false;\r\n\r\n constructor(private cd: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.iniailized = true;\r\n this.fillComponentFromBones();\r\n }\r\n\r\n @Input()\r\n public set bones(newValue: Bone[] | undefined) {\r\n this._bones.splice(0, this._bones.length);\r\n this._bones.push(...newValue ?? []);\r\n\r\n this.fillComponentFromBones();\r\n }\r\n\r\n private fillComponentFromBones(): void {\r\n if (this.iniailized === false)\r\n return;\r\n\r\n const viewContainerRef = this.skeletonAnchor.viewContainerRef;\r\n viewContainerRef.clear();\r\n\r\n if (this.map === undefined || this.map === null)\r\n throw new Error('add type map with input: [map]=\"...\"');\r\n\r\n for (const bone of this._bones) {\r\n let componentType = this.map.get(bone.type);\r\n\r\n if (componentType === undefined || componentType === null) {\r\n console.warn(`Mapping type for ${bone.type} not found`);\r\n componentType = UnknownBoneComponent;\r\n }\r\n\r\n const boneComponentRef = viewContainerRef.createComponent(componentType);\r\n\r\n boneComponentRef.instance.bd.bone = bone;\r\n }\r\n }\r\n\r\n}\r\n","<ng-template bonSkeletonAnchor></ng-template>\r\n","import { Type } from \"@angular/core\";\r\nimport { IBoneComponent } from \"./IBoneComponent\";\r\n\r\n\r\nexport class BoneMap extends Map<string, Type<IBoneComponent>>\r\n{\r\n public getRequired(key: string): Type<IBoneComponent> {\r\n const value = this.get(key);\r\n\r\n if (value === undefined || value === null) {\r\n throw Error(`BoneMap doesn't contain type for key = ${key}`);\r\n }\r\n\r\n return value;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { MarcyImageComponent } from './marcy-image/marcy-image.component';\r\nimport { IntersectionComponent } from './core/intersection.component';\r\nimport { UnsubscriberService } from './core/unsubscribe.service';\r\nimport { SrcBaseDirective } from './core/src.directive';\r\nimport { ImageSrcDirective } from './marcy-image/imgsrc.directive';\r\nimport { VideoSrcDirective } from './marcy-video/vidsrc.directive';\r\nimport { DeviceServiceBase } from './core/device.service.base';\r\nimport { DeviceService } from './core/device.service';\r\nimport { MarcyVideoComponent } from './marcy-video/marcy-video.component';\r\nimport { SkeletonAnchorDirective } from './skeleton/skeleton-anchor.directive';\r\nimport { SkeletonComponent } from './skeleton/skeleton.component';\r\nimport { LocalizationIsNotEmptyPipe, LocalizePipe } from './localization/localize.pipe';\r\nimport { UnknownBoneComponent } from './skeleton/unknown-bone.component';\r\nimport { MarcyMediaComponent } from './marcy-media/marcy-media.component';\r\nimport { BoneDirective } from './skeleton/bone.directive';\r\nimport { EncodeURIComponentPipe } from './core';\r\n\r\nconst components = [\r\n MarcyImageComponent,\r\n MarcyVideoComponent,\r\n MarcyMediaComponent,\r\n IntersectionComponent,\r\n //\r\n SkeletonComponent,\r\n UnknownBoneComponent\r\n];\r\n\r\nconst directives = [\r\n SrcBaseDirective,\r\n ImageSrcDirective,\r\n VideoSrcDirective,\r\n];\r\n\r\nconst standAloneDirectives = [\r\n SkeletonAnchorDirective,\r\n BoneDirective\r\n];\r\n\r\nconst pipes = [\r\n EncodeURIComponentPipe,\r\n LocalizePipe,\r\n LocalizationIsNotEmptyPipe\r\n]\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n ],\r\n providers:\r\n [\r\n ...pipes,\r\n UnsubscriberService,\r\n DeviceService,\r\n { provide: DeviceServiceBase, useExisting: DeviceService },\r\n ],\r\n imports: [\r\n CommonModule,\r\n ...standAloneDirectives\r\n ],\r\n exports: [\r\n CommonModule,\r\n ...pipes,\r\n ...components,\r\n ...directives,\r\n ...standAloneDirectives\r\n ]\r\n})\r\nexport class BonnieModule { } // todo: move to standalone\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["utils.distinct","utils.descendingT","i1.UnsubscriberService","i1.LocalizeServiceBase","utils.generateSizesString","utils.groupBy","utils.ascendingT","i1.DeviceServiceBase","i2.UnsubscriberService","i3.ImageSrcDirective","i5.IntersectionComponent","i3.VideoSrcDirective","i3","i4.MarcyImageComponent","i5.MarcyVideoComponent","i6.ImageSrcDirective","i7.VideoSrcDirective","i2.LocalizeServiceBase","i1.BoneDirective","i2","i1.SkeletonAnchorDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"candy-kingdom-bonnie.mjs","sources":["../../../../libs/bonnie/src/lib/generated/bone.ts","../../../../libs/bonnie/src/lib/generated/file-format.ts","../../../../libs/bonnie/src/lib/generated/file-meta.ts","../../../../libs/bonnie/src/lib/generated/file-src-base.ts","../../../../libs/bonnie/src/lib/generated/file-src.ts","../../../../libs/bonnie/src/lib/generated/i-equatable.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route-with-data.ts","../../../../libs/bonnie/src/lib/generated/i-have-data-route.ts","../../../../libs/bonnie/src/lib/generated/i-have-skeleton.ts","../../../../libs/bonnie/src/lib/generated/i-page.ts","../../../../libs/bonnie/src/lib/generated/image-meta.ts","../../../../libs/bonnie/src/lib/generated/image-source.ts","../../../../libs/bonnie/src/lib/generated/image.ts","../../../../libs/bonnie/src/lib/generated/localized-object.ts","../../../../libs/bonnie/src/lib/generated/localized-string.ts","../../../../libs/bonnie/src/lib/generated/media-source-base.ts","../../../../libs/bonnie/src/lib/generated/media-source.ts","../../../../libs/bonnie/src/lib/generated/open-graph-data.ts","../../../../libs/bonnie/src/lib/generated/page-base.ts","../../../../libs/bonnie/src/lib/generated/page-data.ts","../../../../libs/bonnie/src/lib/generated/page.ts","../../../../libs/bonnie/src/lib/generated/pix-media.ts","../../../../libs/bonnie/src/lib/generated/pix-meta.ts","../../../../libs/bonnie/src/lib/generated/publish-status.ts","../../../../libs/bonnie/src/lib/generated/sizes-item.ts","../../../../libs/bonnie/src/lib/generated/sizes-width-unit.ts","../../../../libs/bonnie/src/lib/generated/svg-meta.ts","../../../../libs/bonnie/src/lib/generated/video-meta.ts","../../../../libs/bonnie/src/lib/generated/video-source.ts","../../../../libs/bonnie/src/lib/generated/video.ts","../../../../libs/bonnie/src/lib/generated/view.ts","../../../../libs/bonnie/src/lib/generated/index.ts","../../../../libs/bonnie/src/lib/core/utils.ts","../../../../libs/bonnie/src/lib/core/unsubscribe.service.ts","../../../../libs/bonnie/src/lib/core/src.directive.ts","../../../../libs/bonnie/src/lib/core/MediaStatus.ts","../../../../libs/bonnie/src/lib/core/MediaObjectFit.ts","../../../../libs/bonnie/src/lib/core/device.service.ts","../../../../libs/bonnie/src/lib/core/device.service.base.ts","../../../../libs/bonnie/src/lib/core/intersection.component.ts","../../../../libs/bonnie/src/lib/core/encode-uri.pipe.ts","../../../../libs/bonnie/src/lib/core/emptyImage.ts","../../../../libs/bonnie/src/lib/core/emptyVideo.ts","../../../../libs/bonnie/src/lib/core/emptyBone.ts","../../../../libs/bonnie/src/lib/core/emptyLocalizedString.ts","../../../../libs/bonnie/src/lib/localization/LocalizeServiceBase.ts","../../../../libs/bonnie/src/lib/localization/localize.pipe.ts","../../../../libs/bonnie/src/lib/marcy-image/imgsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-image/toHtmlSources.ts","../../../../libs/bonnie/src/lib/marcy-image/getDefaultSrc.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.ts","../../../../libs/bonnie/src/lib/marcy-image/marcy-image.component.html","../../../../libs/bonnie/src/lib/marcy-video/vidsrc.directive.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.ts","../../../../libs/bonnie/src/lib/marcy-video/marcy-video.component.html","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.ts","../../../../libs/bonnie/src/lib/marcy-media/marcy-media.component.html","../../../../libs/bonnie/src/lib/skeleton/bone.directive.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton-anchor.directive.ts","../../../../libs/bonnie/src/lib/skeleton/unknown-bone.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.ts","../../../../libs/bonnie/src/lib/skeleton/skeleton.component.html","../../../../libs/bonnie/src/lib/skeleton/BoneMap.ts","../../../../libs/bonnie/src/lib/bonnie.module.ts","../../../../libs/bonnie/src/candy-kingdom-bonnie.ts"],"sourcesContent":["/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface Bone {\r\n style: string;\r\n mediaQuery: string;\r\n enabled: boolean;\r\n type: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileFormat {\r\n extension: string;\r\n mimeType: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileMeta {\r\n byteCount: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileSrcBase {\r\n mimeType: string;\r\n url: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { FileMeta } from \"./file-meta\";\r\nimport { FileSrcBase } from \"./file-src-base\";\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface FileSrc<T extends FileMeta> extends FileSrcBase {\r\n meta: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport interface IEquatable<T> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IHaveDataRoute } from \"./i-have-data-route\";\r\n\r\nexport interface IHaveDataRouteWithData<T> extends IHaveDataRoute {\r\n data: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport interface IHaveDataRoute {\r\n dataRoute: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { Bone } from \"./bone\";\r\n\r\nexport interface IHaveSkeleton {\r\n bones: Bone[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PageData } from \"./page-data\";\r\n\r\nexport interface IPage<TData extends PageData> {\r\n data: TData;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMeta } from \"./pix-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileMeta } from \"./file-meta\";\r\n\r\nexport interface ImageMeta extends PixMeta {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { MediaSource } from \"./media-source\";\r\nimport { ImageMeta } from \"./image-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\nimport { SizesItem } from \"./sizes-item\";\r\n\r\nexport interface ImageSource extends MediaSource<ImageMeta> {\r\n sizes: SizesItem[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMedia } from \"./pix-media\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { ImageSource } from \"./image-source\";\r\n\r\nexport interface Image extends PixMedia {\r\n readonly $type: 'image';\r\n sources: ImageSource[];\r\n type: 'image';\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface LocalizedObject<T> {\r\n [locale: string]: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { LocalizedObject } from \"./localized-object\";\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface LocalizedString extends LocalizedObject<string> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileSrcBase } from \"./file-src-base\";\r\n\r\nexport interface MediaSourceBase {\r\n srcSet: FileSrcBase[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { FileMeta } from \"./file-meta\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileSrc } from \"./file-src\";\r\n\r\nexport interface MediaSource<TMeta extends FileMeta> extends MediaSourceBase {\r\n srcSet: FileSrc<TMeta>[];\r\n mediaQuery: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { LocalizedString } from \"./localized-string\";\r\nimport { LocalizedObject } from \"./localized-object\";\r\nimport { FileSrc } from \"./file-src\";\r\nimport { ImageMeta } from \"./image-meta\";\r\n\r\nexport interface OpenGraphData {\r\n title: LocalizedString;\r\n description: LocalizedString;\r\n image: LocalizedObject<FileSrc<ImageMeta>>;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IHaveSkeleton } from \"./i-have-skeleton\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { PublishStatus } from \"./publish-status\";\r\nimport { LocalizedString } from \"./localized-string\";\r\nimport { OpenGraphData } from \"./open-graph-data\";\r\nimport { Bone } from \"./bone\";\r\n\r\nexport interface PageBase {\r\n id: string;\r\n url: string;\r\n route: string;\r\n order: number;\r\n publishStatus: PublishStatus;\r\n title: LocalizedString;\r\n openGraph: OpenGraphData;\r\n bones: Bone[];\r\n children: PageBase[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface PageData {\r\n type: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PageData } from \"./page-data\";\r\nimport { PageBase } from \"./page-base\";\r\nimport { IHaveSkeleton } from \"./i-have-skeleton\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { IPage } from \"./i-page\";\r\n\r\nexport interface Page<T extends PageData> extends PageBase {\r\n data: T;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\n\r\nexport interface PixMedia {\r\n sources: MediaSourceBase[];\r\n type: 'image' | 'video';\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { FileMeta } from \"./file-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\n\r\nexport interface PixMeta extends FileMeta {\r\n width: number;\r\n height: number;\r\n ratio: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport enum PublishStatus {\r\n NotSet = 0,\r\n Draft = 1,\r\n Published = 2,\r\n Archived = 3,\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { SizesWidthUnit } from \"./sizes-width-unit\";\r\n\r\nexport interface SizesItem {\r\n width: number;\r\n unit: SizesWidthUnit;\r\n mediaQuery: string;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport enum SizesWidthUnit {\r\n Px = \"Px\",\r\n Em = \"Em\",\r\n Vw = \"Vw\",\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMeta } from \"./pix-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileMeta } from \"./file-meta\";\r\n\r\nexport interface SvgMeta extends PixMeta {\r\n preciseWidth: number;\r\n preciseHeight: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMeta } from \"./pix-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { FileMeta } from \"./file-meta\";\r\n\r\nexport interface VideoMeta extends PixMeta {\r\n duration: number;\r\n fullFormat: string;\r\n hasAudio: boolean;\r\n frameRate: number;\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { MediaSource } from \"./media-source\";\r\nimport { VideoMeta } from \"./video-meta\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { MediaSourceBase } from \"./media-source-base\";\r\n\r\nexport interface VideoSource extends MediaSource<VideoMeta> {\r\n\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { PixMedia } from \"./pix-media\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { VideoSource } from \"./video-source\";\r\n\r\nexport interface Video extends PixMedia {\r\n readonly $type: 'video';\r\n sources: VideoSource[];\r\n type: 'video';\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nimport { IHaveSkeleton } from \"./i-have-skeleton\";\r\nimport { IEquatable } from \"./i-equatable\";\r\nimport { Bone } from \"./bone\";\r\n\r\nexport interface View {\r\n id: string;\r\n code: string;\r\n bones: Bone[];\r\n}\r\n","/**\r\n * This is a TypeGen auto-generated file.\r\n * Any changes made to this file can be lost when this file is regenerated.\r\n */\r\n\r\nexport * from './bone';\r\nexport * from './file-format';\r\nexport * from './file-meta';\r\nexport * from './file-src-base';\r\nexport * from './file-src';\r\nexport * from './i-equatable';\r\nexport * from './i-have-data-route-with-data';\r\nexport * from './i-have-data-route';\r\nexport * from './i-have-skeleton';\r\nexport * from './i-page';\r\nexport * from './image-meta';\r\nexport * from './image-source';\r\nexport * from './image';\r\nexport * from './localized-object';\r\nexport * from './localized-string';\r\nexport * from './media-source-base';\r\nexport * from './media-source';\r\nexport * from './open-graph-data';\r\nexport * from './page-base';\r\nexport * from './page-data';\r\nexport * from './page';\r\nexport * from './pix-media';\r\nexport * from './pix-meta';\r\nexport * from './publish-status';\r\nexport * from './sizes-item';\r\nexport * from './sizes-width-unit';\r\nexport * from './svg-meta';\r\nexport * from './video-meta';\r\nexport * from './video-source';\r\nexport * from './video';\r\nexport * from './view';\r\n","import * as MCore from '../generated';\r\n\r\n// https://stackoverflow.com/questions/42136098/array-groupby-in-typescript\r\n\r\nexport const groupBy = <T, K extends keyof any>(arr: T[], key: (i: T) => K) =>\r\n arr.reduce((groups, item) => {\r\n (groups[key(item)] ||= []).push(item);\r\n return groups;\r\n }, {} as Record<K, T[]>);\r\n\r\nexport function distinct<T>(value: T, index: number, array: T[]) {\r\n return array.indexOf(value) === index;\r\n}\r\n\r\nexport function ascending(a: number, b: number) {\r\n return a - b;\r\n}\r\n\r\nexport function ascendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\r\n return function (a: T, b: T) { return ascending(sel(a), sel(b)) };\r\n}\r\n\r\nexport function descending(a: number, b: number) {\r\n return b - a;\r\n}\r\n\r\nexport function descendingT<T>(sel: (x: T) => number): (a: T, b: T) => number {\r\n return function (a: T, b: T) { return descending(sel(a), sel(b)) };\r\n}\r\n\r\nexport function generateSizesString(sizes: MCore.SizesItem[]): string {\r\n const sizesString = sizes\r\n .sort(x => x.width)\r\n .map(x => `${x.mediaQuery} ${x.width}${x.unit.toLowerCase()}`.trim())\r\n .join(',');\r\n\r\n return sizesString;\r\n}\r\n\r\nexport function matchesMediaQuery(mediaQuery?: string): boolean {\r\n const isEmptyQuery = mediaQuery === null || mediaQuery === undefined || mediaQuery.trim().length === 0;\r\n\r\n // work for SSR and browser\r\n if (isEmptyQuery)\r\n return true;\r\n\r\n // other queries disallowed in SSR\r\n if (typeof window === 'undefined')\r\n return false;\r\n\r\n const mediaQueryList = window.matchMedia(mediaQuery);\r\n\r\n return mediaQueryList.matches;\r\n}\r\n\r\nexport function isLocalUrlString(url: string): boolean {\r\n if (url === undefined || url === null || url.trim().length === 0)\r\n return true;\r\n\r\n if (url.startsWith('//'))\r\n return false;\r\n\r\n if (url.startsWith('./') || url.startsWith('/'))\r\n return true;\r\n\r\n return false;\r\n}\r\n","import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { Observable, Subject, takeUntil } from \"rxjs\";\r\n\r\n@Injectable()\r\nexport class UnsubscriberService implements OnDestroy {\r\n private readonly _destroy$ = new Subject<void>();\r\n\r\n public readonly takeUntilDestroy = <T>\r\n (\r\n origin: Observable<T>\r\n ): Observable<T> => origin.pipe(takeUntil(this._destroy$));\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next();\r\n this._destroy$.complete();\r\n }\r\n}\r\n","import { ChangeDetectorRef, Directive, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject, Observable, fromEvent, NEVER, merge, Subject, takeUntil } from 'rxjs';\r\n\r\nimport * as MCore from '../generated';\r\nimport * as utils from './utils';\r\n\r\nimport { UnsubscriberService } from './unsubscribe.service';\r\n\r\n@Directive({\r\n selector: '[bonSrcBase]',\r\n providers: [UnsubscriberService]\r\n})\r\nexport class SrcBaseDirective<T extends MCore.Image | MCore.Video> implements OnInit {\r\n @Output()\r\n public readonly ratioChange = new EventEmitter<number>()\r\n\r\n @Output()\r\n public readonly srcChange = new EventEmitter<T | undefined>()\r\n\r\n private readonly _ratioSubject = new BehaviorSubject<number>(0);\r\n private readonly _queryChangeClearSubject = new Subject<void>();\r\n\r\n private _data?: T;\r\n\r\n constructor(private readonly _u: UnsubscriberService, private readonly cd: ChangeDetectorRef) {\r\n console.log('SrcBaseDirective ctor');\r\n this.cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n console.log('SrcBaseDirective ngOnInit');\r\n\r\n this._ratioSubject\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe(x => {\r\n this.ratioChange.next(x);\r\n this.cd.detectChanges(); // todo: verify, do i need it here\r\n });\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get ratio(): number {\r\n return this._ratioSubject.value;\r\n }\r\n\r\n public get data(): T | undefined {\r\n return this._data;\r\n }\r\n\r\n public set data(val: T | undefined) {\r\n console.log('set data', val);\r\n\r\n if (val !== undefined && val !== null && val.sources.length === 0) {\r\n console.warn(`image should have sources!`);\r\n val = undefined;\r\n }\r\n\r\n this._data = val;\r\n\r\n console.log('calling src change ', this._data);\r\n\r\n // clear mediaQuery subscriptions\r\n this._queryChangeClearSubject.next();\r\n\r\n // ratio\r\n this._ratioSubject.next(0);\r\n\r\n this.srcChange.next(this._data);\r\n\r\n if (this._data === undefined || this._data.sources.length === 0) {\r\n return;\r\n }\r\n\r\n const allRatios = this._data.sources\r\n .flatMap(x => x.srcSet)\r\n .map(x => x.meta.ratio)\r\n .filter(utils.distinct);\r\n\r\n if (allRatios.length === 1) {\r\n // same ratio for all\r\n this._ratioSubject.next(allRatios[0]);\r\n return;\r\n }\r\n\r\n this.watchMediaQueries()\r\n .subscribe(() => {this.calcRatio(); console.log('watchMediaQueries calcRatio')});\r\n\r\n this.calcRatio();\r\n }\r\n\r\n private calcRatio(): void {\r\n if (this._data === undefined || this._data === null || this._data.sources.length === 0)\r\n return;\r\n\r\n for (let i = 0; i < this._data.sources.length; i++) {\r\n const source = this._data.sources[i];\r\n const srcRatios = source.srcSet\r\n .sort(utils.descendingT(x => x.meta.width))\r\n .map(x => x.meta.ratio)\r\n .filter(utils.distinct);\r\n\r\n if (srcRatios.length === 0) {\r\n // console.warn(`each source should have srcSet with same ratio. founded: ${srcRatios.join(', ')}`);\r\n return;\r\n }\r\n\r\n if (srcRatios.length > 1) {\r\n console.warn(`each source should have srcSet with same ratio. founded: ${srcRatios.join(', ')}`);\r\n }\r\n\r\n const ratio = srcRatios[0]; // most accurate ratio in biggest image\r\n\r\n if (source.mediaQuery.length === 0) {\r\n this._ratioSubject.next(ratio);\r\n return;\r\n }\r\n\r\n if (typeof window === 'undefined' || typeof window.matchMedia === 'undefined')\r\n return;\r\n\r\n const mediaQueryList = window.matchMedia(source.mediaQuery);\r\n\r\n if (mediaQueryList.matches) {\r\n this._ratioSubject.next(ratio);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n public watchMediaQueries(): Observable<MediaQueryListEvent> {\r\n console.log('watchMediaQueries');\r\n\r\n if (this._data === undefined\r\n || this._data === null\r\n || typeof window === 'undefined'\r\n || typeof window.matchMedia === 'undefined')\r\n return NEVER.pipe(this._u.takeUntilDestroy, takeUntil(this._queryChangeClearSubject));\r\n\r\n const mediaQueries = this._data.sources\r\n .map(x => x.mediaQuery)\r\n .filter(utils.distinct)\r\n .filter(x => x.length > 0);\r\n\r\n console.log('watchMediaQueries mediaQueries', mediaQueries);\r\n\r\n const queryObservables = mediaQueries.map\r\n (\r\n media => {\r\n const queryList = window.matchMedia(media);\r\n const observable = fromEvent<MediaQueryListEvent>(queryList, 'change')\r\n .pipe(this._u.takeUntilDestroy, takeUntil(this._queryChangeClearSubject));\r\n\r\n return observable;\r\n }\r\n );\r\n\r\n const combinedObservable = merge(...queryObservables);\r\n return combinedObservable;\r\n }\r\n}\r\n\r\n\r\n","export enum MediaStatus {\r\n NotSet = 'NotSet',\r\n NotLoaded = 'NotLoaded',\r\n Loading = 'Loading',\r\n Loaded = 'Loaded'\r\n}\r\n","export enum MediaObjectFit {\r\n Original = 'Original',\r\n Cover = 'Cover',\r\n Contain = 'Contain'\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { DeviceServiceBase } from \"./device.service.base\";\r\n\r\n@Injectable()\r\nexport class DeviceService implements DeviceServiceBase {\r\n public readonly devicePixelRatio = typeof window === 'undefined' ? 1 : window.devicePixelRatio;\r\n public readonly isSSR = typeof window === 'undefined';\r\n}\r\n","export abstract class DeviceServiceBase {\r\n public abstract get isSSR(): boolean;\r\n public abstract get devicePixelRatio(): number;\r\n}","import { ElementRef, OnInit, OnDestroy, Component, Output, EventEmitter, Input, ChangeDetectorRef } from '@angular/core';\r\nimport { BehaviorSubject, Observable, filter, skip } from 'rxjs';\r\nimport { UnsubscriberService } from './unsubscribe.service';\r\n\r\n@Component({\r\n selector: 'bon-intersection',\r\n template: '<ng-content></ng-content>',\r\n styles: [':host{display:block}'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class IntersectionComponent implements OnInit, OnDestroy {\r\n @Output()\r\n public readonly intersected = new EventEmitter<void>();\r\n\r\n private readonly intersectionObserver?: IntersectionObserver;\r\n private readonly _intersectSubject = new BehaviorSubject<boolean>(false);\r\n\r\n private _session: any;\r\n\r\n constructor(private readonly _hostRef: ElementRef, private readonly _u: UnsubscriberService, cd: ChangeDetectorRef) {\r\n cd.detach();\r\n // no template with variables, so we don't need to call changeDetection\r\n\r\n if (typeof window === 'undefined' || typeof IntersectionObserver === 'undefined') {\r\n // call intersection without any\r\n return;\r\n }\r\n\r\n this.intersectionObserver = new IntersectionObserver(this.onIntersection.bind(this));\r\n }\r\n\r\n public ngOnInit(): void {\r\n this._intersectSubject\r\n .pipe(this._u.takeUntilDestroy, filter(x => x === true))\r\n .subscribe(x => this.intersected.next());\r\n }\r\n\r\n @Input()\r\n public set session(newSession: any) {\r\n if (this._session === newSession)\r\n return;\r\n\r\n console.log('reset intersection Observer');\r\n\r\n this._session = newSession;\r\n this.reset();\r\n }\r\n\r\n public get intersectedOnce(): boolean {\r\n return this._intersectSubject.value;\r\n }\r\n\r\n private reset(): void {\r\n if (this.intersectionObserver === undefined || this.intersectionObserver === null)\r\n return;\r\n\r\n this.intersectionObserver.unobserve(this._hostRef.nativeElement);\r\n\r\n this._intersectSubject.next(false);\r\n\r\n this.intersectionObserver.observe(this._hostRef.nativeElement);\r\n }\r\n\r\n private onIntersection(entries: IntersectionObserverEntry[], observer: IntersectionObserver): void {\r\n if (entries.length > 1) {\r\n console.warn('multi entries!');\r\n }\r\n\r\n const isIntersecting = entries[0].isIntersecting\r\n this._intersectSubject.next(isIntersecting);\r\n\r\n console.log(`intersected ${isIntersecting}`, this._hostRef.nativeElement);\r\n\r\n // only once will recieve intersection\r\n if (isIntersecting) {\r\n observer.unobserve(this._hostRef.nativeElement);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._intersectSubject.complete();\r\n this.intersectionObserver?.disconnect();\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n@Pipe({ name: 'encodeURIComponent', pure: true })\r\nexport class EncodeURIComponentPipe implements PipeTransform {\r\n public transform(value: string): string {\r\n\r\n return encodeURIComponent(value);\r\n }\r\n}\r\n","import { Image } from \"../generated\";\r\n\r\nexport function emptyImage(): Image {\r\n return {\r\n $type: 'image', // todo: remove\r\n type: 'image',\r\n sources: [],\r\n }\r\n}\r\n\r\n\r\n","import { Video } from \"../generated\";\r\n\r\n\r\nexport function emptyVideo(): Video {\r\n return {\r\n $type: 'video', // todo: remove\r\n type: 'video',\r\n sources: [],\r\n };\r\n}\r\n","import { Bone } from \"../generated\";\r\n\r\n\r\nexport function emptyBone(): Bone {\r\n return {\r\n style: '',\r\n mediaQuery: '',\r\n enabled: true,\r\n type: ''\r\n };\r\n}\r\n","import { LocalizedString } from \"../generated\";\r\n\r\n\r\nexport function emptyLocalizedString(): LocalizedString {\r\n return {};\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { LocalizedObject, LocalizedString } from '../generated';\r\nimport { isLocalUrlString } from '../core/utils';\r\n\r\nexport abstract class LocalizeServiceBase {\r\n public abstract get locale(): string;\r\n public abstract get locale$(): Observable<string>;\r\n\r\n public getLocalized<T>(value: LocalizedObject<T>, defaultValue: T, locale?: string): T {\r\n if (value === undefined)\r\n return defaultValue;\r\n\r\n locale = locale ?? this.locale;\r\n\r\n const obj = value[locale] ?? defaultValue;\r\n return obj;\r\n }\r\n\r\n public getLocalizedText(value: LocalizedString, locale?: string): string {\r\n return this.getLocalized<string>(value, '', locale);\r\n };\r\n\r\n public isLocalUrl(value: LocalizedString, locale?: string): boolean {\r\n const url = this.getLocalizedText(value, locale);\r\n return isLocalUrlString(url);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { LocalizeServiceBase } from './LocalizeServiceBase';\r\nimport { LocalizedObject, LocalizedString } from '../generated';\r\n\r\n\r\n\r\n@Pipe({ name: 'localize', pure: false })\r\nexport class LocalizePipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) {\r\n }\r\n\r\n public transform(value: LocalizedString, locale?: string): string {\r\n if (value === undefined || value === null)\r\n return '';\r\n\r\n return this.localizeService.getLocalizedText(value, locale);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'localizeObject', pure: false })\r\nexport class LocalizeObjectPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform<T>(object: LocalizedObject<T>, locale?: string): T | undefined {\r\n if (object === undefined || object === null)\r\n return undefined;\r\n\r\n return this.localizeService.getLocalized<T | undefined>(object, undefined, locale);\r\n }\r\n}\r\n\r\n@Pipe({ name: 'localizationIsNotEmpty', pure: false })\r\nexport class LocalizationIsNotEmptyPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n if (value === undefined || value === null)\r\n return false;\r\n\r\n const text = this.localizeService.getLocalizedText(value, locale);\r\n\r\n const isNotEmpty = text.trim().length > 0;\r\n return isNotEmpty;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'localizationIsEmpty', pure: false })\r\nexport class LocalizationIsEmptyPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n\r\n if (value === undefined || value === null)\r\n return true;\r\n\r\n const text = this.localizeService.getLocalizedText(value, locale);\r\n\r\n const isEmpty = text.trim().length === 0;\r\n return isEmpty;\r\n }\r\n}\r\n\r\n\r\n@Pipe({ name: 'localizeUrl', pure: false })\r\nexport class LocalizeUrlPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase, private readonly domSanitizer: DomSanitizer) {\r\n\r\n }\r\n\r\n public transform(value: LocalizedString, locale?: string): SafeResourceUrl {\r\n if (value === undefined || value === null)\r\n return '';\r\n\r\n const urlString = this.localizeService.getLocalizedText(value, locale);\r\n const safeUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(urlString);\r\n return safeUrl;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'isLocalUrl', pure: false })\r\nexport class IsLocalUrlPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n\r\n if (value === undefined || value === null)\r\n return false;\r\n\r\n const isLocal = this.localizeService.isLocalUrl(value, locale);\r\n return isLocal;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'isNotLocalUrl', pure: false })\r\nexport class IsNotLocalUrlPipe implements PipeTransform {\r\n constructor(private readonly localizeService: LocalizeServiceBase) { }\r\n\r\n public transform(value: LocalizedString, locale?: string): boolean {\r\n\r\n if (value === undefined || value === null)\r\n return false;\r\n\r\n const isLocal = this.localizeService.isLocalUrl(value, locale);\r\n return !isLocal;\r\n }\r\n}\r\n","import { Directive, Input, OnInit } from '@angular/core';\r\nimport * as MCore from '../generated';\r\nimport { SrcBaseDirective } from '../core/src.directive';\r\n\r\n@Directive({\r\n selector: '[imgsrc]'\r\n})\r\nexport class ImageSrcDirective extends SrcBaseDirective<MCore.Image> implements OnInit {\r\n\r\n @Input()\r\n public set imgsrc(value: MCore.Image | undefined) {\r\n console.log('set imgsrc', value);\r\n this.data = value;\r\n }\r\n}\r\n","import * as MCore from '../generated';\r\nimport * as utils from '../core/utils';\r\n\r\nimport { IHtmlPictureSource } from './IHtmlPictureSource';\r\n\r\nexport function toHtmlPictureSources(imageSource: MCore.ImageSource): IHtmlPictureSource[] {\r\n const sizes = utils.generateSizesString(imageSource.sizes);\r\n const groupedByMime = utils.groupBy(imageSource.srcSet, x => x.mimeType);\r\n\r\n const simpleSources: IHtmlPictureSource[] = [];\r\n\r\n for (const mime in groupedByMime) {\r\n const fileSrcs = groupedByMime[mime].sort(utils.ascendingT(x => x.meta.width));\r\n\r\n const srcSet = fileSrcs\r\n .map(x => `${x.url} ${x.meta.width}w`)\r\n .join(',');\r\n\r\n const source: IHtmlPictureSource = { mime, sizes, srcSet, media: imageSource.mediaQuery };\r\n\r\n simpleSources.push(source);\r\n }\r\n\r\n return simpleSources;\r\n}\r\n\r\n","import * as MCore from '../generated';\r\nimport * as utils from '../core/utils';\r\n\r\nexport function getDefaultSrc(image: MCore.Image | undefined): MCore.FileSrc<MCore.ImageMeta> | undefined {\r\n if (image === undefined || image === null)\r\n return undefined;\r\n\r\n const files = image.sources\r\n .flatMap(x => x.srcSet)\r\n .sort(utils.descendingT(x => x.meta.width));\r\n\r\n const prefferedFiles = files.filter(\r\n x => x.mimeType === 'image/jpeg'\r\n || x.mimeType === 'image/png'\r\n || x.mimeType === 'image/gif'\r\n );\r\n\r\n if (prefferedFiles.length > 0)\r\n return prefferedFiles[0];\r\n\r\n if (files.length > 0)\r\n return files[0];\r\n\r\n return undefined;\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnInit, OnDestroy, Optional } from '@angular/core';\r\nimport { BehaviorSubject, filter } from 'rxjs';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { MediaStatus } from '../core/MediaStatus';\r\nimport { MediaObjectFit } from '../core/MediaObjectFit';\r\nimport { ImageSrcDirective } from './imgsrc.directive';\r\nimport { IHtmlPictureSource } from './IHtmlPictureSource';\r\nimport { toHtmlPictureSources } from './toHtmlSources';\r\nimport { getDefaultSrc } from './getDefaultSrc';\r\nimport { DeviceServiceBase } from '../core/device.service.base';\r\n\r\n@Component({\r\n selector: 'bon-image',\r\n templateUrl: './marcy-image.component.html',\r\n styleUrls: ['./marcy-image.component.scss'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class MarcyImageComponent implements OnInit {\r\n public readonly MediaStatus = MediaStatus;\r\n public readonly MarcyObjectFit = MediaObjectFit;\r\n\r\n @Output()\r\n public readonly isLoaded: EventEmitter<void> = new EventEmitter();\r\n public readonly sources: IHtmlPictureSource[] = [];\r\n\r\n public readonly $status = new BehaviorSubject<MediaStatus>(MediaStatus.NotSet);\r\n\r\n public defaultSrc = '';\r\n\r\n private _objectFit = MediaObjectFit.Original;\r\n\r\n public readonly src: ImageSrcDirective;\r\n\r\n constructor\r\n (\r\n public readonly device: DeviceServiceBase,\r\n public readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService,\r\n @Optional() srcDir?: ImageSrcDirective\r\n ) {\r\n\r\n console.log('MarcyImageComponent ctor');\r\n\r\n if (srcDir === undefined || srcDir === null)\r\n throw new Error(`${MarcyImageComponent.name} should have [imgsrc] directive as source object`);\r\n\r\n this.src = srcDir;\r\n\r\n // bind src changes\r\n this.src.srcChange\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe(this.onSrcChange.bind(this))\r\n\r\n cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n // bind loaded event\r\n this.$status\r\n .pipe\r\n (\r\n this._u.takeUntilDestroy,\r\n filter(status => status === MediaStatus.Loaded)\r\n )\r\n .subscribe(x => this.isLoaded.next());\r\n\r\n this.cd.detectChanges();\r\n }\r\n private onSrcChange(val: MCore.Image | undefined) {\r\n console.log('MarcyImageComponent onSrcChange', val);\r\n this.defaultSrc = getDefaultSrc(val)?.url ?? '';\r\n\r\n this.sources.splice(0, this.sources.length);\r\n\r\n if (val === undefined || val === null || val.sources.length === 0) {\r\n this.$status.next(MediaStatus.NotSet);\r\n\r\n this.cd.detectChanges();\r\n return;\r\n }\r\n\r\n const newSources = val.sources.flatMap(toHtmlPictureSources);\r\n\r\n console.log('MarcyImageComponent newSources', newSources);\r\n\r\n this.sources.push(...newSources);\r\n\r\n this.$status.next(MediaStatus.NotLoaded);\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n @Input()\r\n public set objectFit(val: MediaObjectFit | undefined) {\r\n this._objectFit = val ?? MediaObjectFit.Original;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get objectFit(): MediaObjectFit {\r\n return this._objectFit;\r\n }\r\n\r\n public onLoad() {\r\n this.$status.next(MediaStatus.Loaded);\r\n }\r\n}\r\n","<div *ngIf=\"sources.length > 0\"\r\n [class.knownRatio]=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\"\r\n [class.cover]=\"objectFit === MarcyObjectFit.Cover\"\r\n [class.contain]=\"objectFit === MarcyObjectFit.Contain\"\r\n [class.loaded]=\"($status | async) === MediaStatus.Loaded\"\r\n class=\"picture-container\">\r\n\r\n <ng-template #pictureTemplate>\r\n <picture>\r\n <source *ngFor=\"let source of sources\"\r\n [srcset]=\"source.srcSet\"\r\n [attr.media]=\"source.media.length > 0 ? source.media : undefined\"\r\n [attr.type]=\"source.mime.length > 0 ? source.mime : undefined\"\r\n [attr.sizes]=\"source.sizes.length > 0 ? source.sizes : undefined\" />\r\n\r\n <img [src]=\"defaultSrc\" (load)=\"onLoad()\" />\r\n </picture>\r\n </ng-template>\r\n\r\n <noscript *ngIf=\"device.isSSR\">\r\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\r\n </noscript>\r\n\r\n <bon-intersection #intersectionZone *ngIf=\"!device.isSSR\" [session]=\"src\" (intersected)=\"cd.detectChanges()\">\r\n\r\n <ng-container *ngIf=\"intersectionZone.intersectedOnce\">\r\n <ng-container *ngTemplateOutlet=\"pictureTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n </bon-intersection>\r\n\r\n <div *ngIf=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\" [style.padding-top]=\"100 / src.ratio +'%'\"></div>\r\n</div>\r\n","import { Directive, Input, OnInit } from '@angular/core';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { SrcBaseDirective } from '../core/src.directive';\r\n\r\n@Directive({\r\n selector: '[vidsrc]'\r\n})\r\nexport class VideoSrcDirective extends SrcBaseDirective<MCore.Video> implements OnInit {\r\n\r\n @Input()\r\n public set vidsrc(value: MCore.Video | undefined) {\r\n this.data = value;\r\n\r\n console.log('set vidsrc', value);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnInit, OnDestroy, Optional, ElementRef, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { BehaviorSubject, filter } from 'rxjs';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { MediaStatus } from '../core/MediaStatus';\r\nimport { MediaObjectFit } from '../core/MediaObjectFit';\r\nimport { DeviceServiceBase } from '../core/device.service.base';\r\nimport { VideoSrcDirective } from './vidsrc.directive';\r\nimport { matchesMediaQuery, descendingT } from '../core/utils';\r\n\r\nfunction isWebM(src: MCore.FileSrc<MCore.ImageMeta>): boolean {\r\n return src.mimeType === 'video/webm';\r\n}\r\n\r\n@Component({\r\n selector: 'bon-video',\r\n templateUrl: './marcy-video.component.html',\r\n styleUrls: ['./marcy-video.component.scss'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class MarcyVideoComponent implements OnInit, AfterViewInit {\r\n public readonly MediaStatus = MediaStatus;\r\n public readonly MarcyObjectFit = MediaObjectFit;\r\n\r\n @ViewChild('video')\r\n public readonly videoRef!: ElementRef<HTMLVideoElement>;\r\n\r\n @Output()\r\n public readonly isLoaded: EventEmitter<void> = new EventEmitter();\r\n\r\n public readonly $status = new BehaviorSubject<MediaStatus>(MediaStatus.NotSet);\r\n public readonly src: VideoSrcDirective;\r\n\r\n public source?: MCore.FileSrc<MCore.VideoMeta>;\r\n\r\n private _objectFit = MediaObjectFit.Original;\r\n\r\n constructor\r\n (\r\n public readonly device: DeviceServiceBase,\r\n public readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService,\r\n @Optional() srcDir?: VideoSrcDirective\r\n ) {\r\n\r\n console.log('MarcyVideoComponent ctor');\r\n\r\n if (srcDir === undefined || srcDir === null)\r\n throw new Error(`${MarcyVideoComponent.name} should have [vidsrc] directive as source object`);\r\n\r\n this.src = srcDir;\r\n\r\n cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n console.log('MarcyVideoComponent ngOnInit');\r\n\r\n // bind loaded event\r\n this.$status\r\n .pipe\r\n (\r\n this._u.takeUntilDestroy,\r\n filter(status => status === MediaStatus.Loaded)\r\n )\r\n .subscribe(() => this.isLoaded.next());\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public ngAfterViewInit() {\r\n console.log('MarcyVideoComponent ngAfterViewInit');\r\n\r\n // bind src changes\r\n this.src.srcChange\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe((val) => {\r\n console.log('MarcyVideoComponent onSrcChange', val);\r\n\r\n this.updateSources();\r\n\r\n // resubscribe because its updated with src\r\n this.subscribeToMediaQueryChange();\r\n })\r\n\r\n this.updateSources();\r\n\r\n // initial, for src added before init\r\n this.subscribeToMediaQueryChange();\r\n }\r\n\r\n private subscribeToMediaQueryChange(): void {\r\n this.src\r\n .watchMediaQueries()\r\n .subscribe(() => {\r\n console.log('MarcyVideoComponent watchMediaQueries');\r\n this.updateSources();\r\n });\r\n }\r\n\r\n private updateSources() {\r\n console.log('MarcyVideoComponent updateSources');\r\n\r\n this.source = this.findMoreSuitableSource();\r\n\r\n console.log('MarcyVideoComponent new source', this.source);\r\n\r\n if (this.$status.value === MediaStatus.NotSet && this.source === undefined) {\r\n return;\r\n }\r\n\r\n if (this.source === undefined) {\r\n this.$status.next(MediaStatus.NotSet);\r\n\r\n this.cd.detectChanges();\r\n return;\r\n }\r\n\r\n this.$status.next(MediaStatus.NotLoaded);\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n @Input()\r\n public set objectFit(val: MediaObjectFit | undefined) {\r\n this._objectFit = val ?? MediaObjectFit.Original;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get objectFit(): MediaObjectFit {\r\n return this._objectFit;\r\n }\r\n\r\n public onLoad() {\r\n this.$status.next(MediaStatus.Loaded);\r\n }\r\n\r\n private findMoreSuitableSource(): MCore.FileSrc<MCore.VideoMeta> | undefined {\r\n if (this.videoRef === undefined) {\r\n console.log('skipping findMoreSuitableSource. videoRef is empty still');\r\n return;\r\n }\r\n\r\n const videoSources = this.src.data?.sources ?? [];\r\n\r\n const currentVideoWidth = this.videoRef.nativeElement.clientWidth;\r\n const realPixelsVideoWidth = this.device.devicePixelRatio * currentVideoWidth;\r\n\r\n console.log(`MarcyVideoComponent currentVideoWidth ${currentVideoWidth}`);\r\n console.log(`MarcyVideoComponent realPixelsVideoWidth ${realPixelsVideoWidth}`);\r\n\r\n for (let i = 0; i < videoSources.length; i++) {\r\n const videoSource = videoSources[i];\r\n\r\n if (!matchesMediaQuery(videoSource.mediaQuery))\r\n continue;\r\n\r\n // SSR\r\n if (typeof this.videoRef.nativeElement?.canPlayType !== 'function') {\r\n // return first mp4, because all players can play them\r\n const mp4Srcs = videoSource\r\n .srcSet\r\n .filter(x => x.mimeType === 'video/mp4')\r\n .sort(descendingT(x => x.meta.width)); // bigest video\r\n\r\n console.log(`ssr found video ${mp4Srcs[0].url}`)\r\n\r\n // element or undefined\r\n return mp4Srcs[0];\r\n }\r\n\r\n\r\n const fileSrcs = videoSource\r\n .srcSet\r\n .filter(x => this.videoRef.nativeElement.canPlayType(x.mimeType))\r\n .sort((a, b) => {\r\n if (a.meta.width === b.meta.width) {\r\n return isWebM(a) ? 1 : -1; // if same width prefer webM\r\n }\r\n\r\n // else prefer smallest\r\n return a.meta.width <= b.meta.width ? 1 : -1;\r\n }); // smallest video\r\n\r\n if (fileSrcs.length === 0)\r\n continue;\r\n\r\n console.log('sources ', fileSrcs);\r\n\r\n let bestSrc = fileSrcs[0];\r\n\r\n for (let i = 1; i < fileSrcs.length; i++) {\r\n const fileSrc = fileSrcs[i];\r\n\r\n const currentDiff = fileSrc.meta.width - realPixelsVideoWidth;\r\n\r\n console.log(`browser video currentDiff ${currentDiff}`)\r\n\r\n // too big video source width\r\n if (currentDiff > 0)\r\n break;\r\n\r\n bestSrc = fileSrc;\r\n }\r\n\r\n console.log(`browser found suitable video ${bestSrc.url}`)\r\n\r\n return bestSrc;\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","<div [class.knownRatio]=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\"\r\n [class.cover]=\"objectFit === MarcyObjectFit.Cover\"\r\n [class.contain]=\"objectFit === MarcyObjectFit.Contain\"\r\n [class.loaded]=\"($status | async) === MediaStatus.Loaded\"\r\n class=\"video-container\">\r\n\r\n <ng-container *ngIf=\"device.isSSR ; then ssrTemplate else browserTemplate\"></ng-container>\r\n\r\n <ng-template #videoTemplate>\r\n <video #video\r\n [src]=\"source !== undefined ? source.url :'' \"\r\n (load)=\"onLoad()\"\r\n (canplay)=\"video.muted=true;video.play();\"\r\n playsInline\r\n autoplay\r\n loop\r\n muted> </video>\r\n </ng-template>\r\n\r\n <ng-template #ssrTemplate>\r\n <noscript *ngIf=\"device.isSSR\">\r\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\r\n </noscript>\r\n </ng-template>\r\n\r\n <ng-template #browserTemplate>\r\n <bon-intersection #intersectionZone [session]=\"src\" (intersected)=\"cd.detectChanges()\">\r\n <ng-container *ngTemplateOutlet=\"videoTemplate\"></ng-container>\r\n </bon-intersection>\r\n </ng-template>\r\n\r\n <div *ngIf=\"src.ratio > 0 && objectFit === MarcyObjectFit.Original\" [style.padding-top]=\"100 / src.ratio +'%'\"></div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectorRef, OnInit } from '@angular/core';\r\n\r\nimport * as MCore from '../generated';\r\n\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { MediaObjectFit } from '../core/MediaObjectFit';\r\nimport { DeviceServiceBase } from '../core/device.service.base';\r\n\r\n@Component({\r\n selector: 'bon-media',\r\n templateUrl: './marcy-media.component.html',\r\n styleUrls: ['./marcy-media.component.scss'],\r\n providers: [UnsubscriberService]\r\n})\r\nexport class MarcyMediaComponent implements OnInit {\r\n public readonly MarcyObjectFit = MediaObjectFit;\r\n\r\n @Output()\r\n public readonly isLoaded: EventEmitter<void> = new EventEmitter();\r\n\r\n private _objectFit = MediaObjectFit.Original;\r\n private _src?: MCore.Video | MCore.Image;\r\n\r\n constructor\r\n (\r\n public readonly device: DeviceServiceBase,\r\n public readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService\r\n ) {\r\n\r\n console.log('MarcyMediaComponent ctor');\r\n\r\n cd.detach();\r\n }\r\n\r\n\r\n public ngOnInit(): void {\r\n console.log('MarcyMediaComponent ngOnInit');\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n\r\n public get src(): MCore.Video | MCore.Image | undefined {\r\n return this._src;\r\n }\r\n\r\n @Input()\r\n public set src(val: MCore.Video | MCore.Image | undefined) {\r\n console.log('set data', val);\r\n\r\n this._src = val;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n @Input()\r\n public set objectFit(val: MediaObjectFit | undefined) {\r\n this._objectFit = val ?? MediaObjectFit.Original;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get objectFit(): MediaObjectFit {\r\n return this._objectFit;\r\n }\r\n\r\n public onLoad() {\r\n this.isLoaded.next();\r\n }\r\n\r\n}\r\n","<bon-image *ngIf=\"src && src.type==='image'\"\r\n [imgsrc]=\"src\"\r\n [objectFit]=\"objectFit\"\r\n (isLoaded)=\"onLoad()\"></bon-image>\r\n\r\n<bon-video *ngIf=\"src && src.type==='video'\"\r\n [vidsrc]=\"src\"\r\n [objectFit]=\"objectFit\"\r\n (isLoaded)=\"onLoad()\"></bon-video>\r\n","import { ChangeDetectorRef, Directive, OnInit } from '@angular/core';\r\nimport { Bone } from '../generated';\r\nimport { UnsubscriberService } from '../core/unsubscribe.service';\r\nimport { LocalizeServiceBase } from '../localization/LocalizeServiceBase';\r\n\r\n@Directive({\r\n selector: '[bonBoneDir]',\r\n standalone: true\r\n})\r\nexport class BoneDirective<T extends Bone = Bone> implements OnInit {\r\n private _bone?: T;\r\n\r\n constructor(private readonly cd: ChangeDetectorRef,\r\n private readonly _u: UnsubscriberService,\r\n private readonly localizationService: LocalizeServiceBase) {\r\n this.cd.detach();\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.localizationService.locale$\r\n .pipe(this._u.takeUntilDestroy)\r\n .subscribe(() => {\r\n // need to detect changes in our detached components\r\n this.cd.detectChanges();\r\n })\r\n }\r\n\r\n public set bone(value: T) {\r\n this._bone = value;\r\n\r\n this.cd.detectChanges();\r\n }\r\n\r\n public get bone(): T {\r\n if (this._bone === undefined || this._bone === null)\r\n throw new Error('The property \"bone\" should be set at least once. For example in skeleton');\r\n\r\n return this._bone;\r\n }\r\n}\r\n","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[bonSkeletonAnchor]',\r\n standalone: true\r\n})\r\nexport class SkeletonAnchorDirective {\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n}\r\n","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { IBoneComponent } from \"./IBoneComponent\";\r\nimport { Bone } from '../generated';\r\nimport { BoneDirective } from './bone.directive';\r\n\r\n@Component({\r\n selector: 'bon-unknown-bone',\r\n hostDirectives: [BoneDirective],\r\n template: `<h2>unknown bone {{bd.bone.type}}</h2>\r\n <div>{{bd.bone | json}}</div>`,\r\n styles: [\r\n `:host{\r\n display: block;\r\n border: 2px solid red;\r\n box-sizing: border-box;\r\n }`\r\n ]\r\n})\r\nexport class UnknownBoneComponent implements IBoneComponent {\r\n constructor(private readonly cd: ChangeDetectorRef, public readonly bd: BoneDirective<Bone>) {\r\n console.log('BoneDirective', bd);\r\n cd.detach();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.cd.detectChanges();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, Type, ViewChild } from '@angular/core';\r\nimport { SkeletonAnchorDirective } from './skeleton-anchor.directive';\r\nimport { IBoneComponent } from \"./IBoneComponent\";\r\nimport { Bone } from '../generated';\r\nimport { UnknownBoneComponent } from './unknown-bone.component';\r\n\r\n@Component({\r\n selector: 'bon-skeleton',\r\n templateUrl: './skeleton.component.html',\r\n styleUrls: ['./skeleton.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SkeletonComponent implements OnInit {\r\n @ViewChild(SkeletonAnchorDirective, { static: true })\r\n public skeletonAnchor!: SkeletonAnchorDirective;\r\n\r\n @Input({ required: true })\r\n public map?: Map<string, Type<IBoneComponent>>;\r\n\r\n private readonly _bones: Bone[] = [];\r\n\r\n private iniailized = false;\r\n\r\n constructor(private cd: ChangeDetectorRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.iniailized = true;\r\n this.fillComponentFromBones();\r\n }\r\n\r\n @Input()\r\n public set bones(newValue: Bone[] | undefined) {\r\n this._bones.splice(0, this._bones.length);\r\n this._bones.push(...newValue ?? []);\r\n\r\n this.fillComponentFromBones();\r\n }\r\n\r\n private fillComponentFromBones(): void {\r\n if (this.iniailized === false)\r\n return;\r\n\r\n const viewContainerRef = this.skeletonAnchor.viewContainerRef;\r\n viewContainerRef.clear();\r\n\r\n if (this.map === undefined || this.map === null)\r\n throw new Error('add type map with input: [map]=\"...\"');\r\n\r\n for (const bone of this._bones) {\r\n let componentType = this.map.get(bone.type);\r\n\r\n if (componentType === undefined || componentType === null) {\r\n console.warn(`Mapping type for ${bone.type} not found`);\r\n componentType = UnknownBoneComponent;\r\n }\r\n\r\n const boneComponentRef = viewContainerRef.createComponent(componentType);\r\n\r\n boneComponentRef.instance.bd.bone = bone;\r\n }\r\n }\r\n\r\n}\r\n","<ng-template bonSkeletonAnchor></ng-template>\r\n","import { Type } from \"@angular/core\";\r\nimport { IBoneComponent } from \"./IBoneComponent\";\r\n\r\n\r\nexport class BoneMap extends Map<string, Type<IBoneComponent>>\r\n{\r\n public getRequired(key: string): Type<IBoneComponent> {\r\n const value = this.get(key);\r\n\r\n if (value === undefined || value === null) {\r\n throw Error(`BoneMap doesn't contain type for key = ${key}`);\r\n }\r\n\r\n return value;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { MarcyImageComponent } from './marcy-image/marcy-image.component';\r\nimport { IntersectionComponent } from './core/intersection.component';\r\nimport { UnsubscriberService } from './core/unsubscribe.service';\r\nimport { SrcBaseDirective } from './core/src.directive';\r\nimport { ImageSrcDirective } from './marcy-image/imgsrc.directive';\r\nimport { VideoSrcDirective } from './marcy-video/vidsrc.directive';\r\nimport { DeviceServiceBase } from './core/device.service.base';\r\nimport { DeviceService } from './core/device.service';\r\nimport { MarcyVideoComponent } from './marcy-video/marcy-video.component';\r\nimport { SkeletonAnchorDirective } from './skeleton/skeleton-anchor.directive';\r\nimport { SkeletonComponent } from './skeleton/skeleton.component';\r\nimport { LocalizationIsNotEmptyPipe, LocalizePipe } from './localization/localize.pipe';\r\nimport { UnknownBoneComponent } from './skeleton/unknown-bone.component';\r\nimport { MarcyMediaComponent } from './marcy-media/marcy-media.component';\r\nimport { BoneDirective } from './skeleton/bone.directive';\r\nimport { EncodeURIComponentPipe } from './core';\r\n\r\nconst components = [\r\n MarcyImageComponent,\r\n MarcyVideoComponent,\r\n MarcyMediaComponent,\r\n IntersectionComponent,\r\n //\r\n SkeletonComponent,\r\n UnknownBoneComponent\r\n];\r\n\r\nconst directives = [\r\n SrcBaseDirective,\r\n ImageSrcDirective,\r\n VideoSrcDirective,\r\n];\r\n\r\nconst standAloneDirectives = [\r\n SkeletonAnchorDirective,\r\n BoneDirective\r\n];\r\n\r\nconst pipes = [\r\n EncodeURIComponentPipe,\r\n LocalizePipe,\r\n LocalizationIsNotEmptyPipe\r\n]\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n ],\r\n providers:\r\n [\r\n ...pipes,\r\n UnsubscriberService,\r\n DeviceService,\r\n { provide: DeviceServiceBase, useExisting: DeviceService },\r\n ],\r\n imports: [\r\n CommonModule,\r\n ...standAloneDirectives\r\n ],\r\n exports: [\r\n CommonModule,\r\n ...pipes,\r\n ...components,\r\n ...directives,\r\n ...standAloneDirectives\r\n ]\r\n})\r\nexport class BonnieModule { } // todo: move to standalone\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["utils.distinct","utils.descendingT","i1.UnsubscriberService","i1.LocalizeServiceBase","utils.generateSizesString","utils.groupBy","utils.ascendingT","i1.DeviceServiceBase","i2.UnsubscriberService","i3.ImageSrcDirective","i5.IntersectionComponent","i3.VideoSrcDirective","i3","i4.MarcyImageComponent","i5.MarcyVideoComponent","i6.ImageSrcDirective","i7.VideoSrcDirective","i2.LocalizeServiceBase","i1.BoneDirective","i2","i1.SkeletonAnchorDirective"],"mappings":"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"}
|