@wizishop/img-manager 15.2.54 → 15.2.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +1 -1
- package/assets/i18n/es.json +1 -1
- package/assets/i18n/fr.json +1 -1
- package/assets/i18n/it.json +1 -1
- package/esm2020/lib/components/images-view/images-actions-handler.mjs +13 -2
- package/esm2020/lib/components/images-view/mosaic-view/img-card/img-card.component.mjs +3 -3
- package/esm2020/lib/components/images-view/table-view/table-view.component.mjs +14 -3
- package/esm2020/lib/services/img-manager.service.mjs +45 -2
- package/fesm2015/wizishop-img-manager.mjs +74 -6
- package/fesm2015/wizishop-img-manager.mjs.map +1 -1
- package/fesm2020/wizishop-img-manager.mjs +71 -6
- package/fesm2020/wizishop-img-manager.mjs.map +1 -1
- package/lib/components/images-view/images-actions-handler.d.ts +1 -0
- package/lib/components/images-view/table-view/table-view.component.d.ts +1 -0
- package/lib/services/img-manager.service.d.ts +3 -0
- package/package.json +2 -2
- package/wizishop-img-manager-15.2.57.tgz +0 -0
- package/wz-img-manager.scss +40 -2
- package/wizishop-img-manager-15.2.54.tgz +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
1
|
+
import { Injectable, NgZone, inject } from '@angular/core';
|
|
2
2
|
import { HttpParams } from '@angular/common/http';
|
|
3
3
|
import { BehaviorSubject, debounceTime, distinctUntilChanged, forkJoin, map, merge, shareReplay, startWith, Subject, switchMap, take, tap } from "rxjs";
|
|
4
4
|
import { ApiService } from './api.service';
|
|
@@ -7,6 +7,7 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
export class ImgManagerService {
|
|
8
8
|
constructor() {
|
|
9
9
|
this.uploadService = inject(UploadService);
|
|
10
|
+
this.ngZone = inject(NgZone); // Injecter NgZone
|
|
10
11
|
this.params = new HttpParams().set("limit", "20").set("page", "1");
|
|
11
12
|
// Display the img selection
|
|
12
13
|
this.pageFicheProductConfig = {
|
|
@@ -127,10 +128,52 @@ export class ImgManagerService {
|
|
|
127
128
|
this.destroy$.next();
|
|
128
129
|
this.destroy$.complete();
|
|
129
130
|
}
|
|
131
|
+
copyToClipboard(url) {
|
|
132
|
+
return new Promise((resolve) => {
|
|
133
|
+
// Vérifier si l'API Clipboard est disponible
|
|
134
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
135
|
+
navigator.clipboard.writeText(url)
|
|
136
|
+
.then(() => resolve(true))
|
|
137
|
+
.catch((error) => {
|
|
138
|
+
console.error('Failed to copy to clipboard:', error);
|
|
139
|
+
resolve(this.fallbackCopyToClipboard(url));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Fallback pour les navigateurs qui ne supportent pas l'API Clipboard
|
|
144
|
+
resolve(this.fallbackCopyToClipboard(url));
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
fallbackCopyToClipboard(text) {
|
|
149
|
+
let success = false;
|
|
150
|
+
// Exécuter en dehors du cycle de détection d'Angular
|
|
151
|
+
this.ngZone.runOutsideAngular(() => {
|
|
152
|
+
const textArea = document.createElement('textarea');
|
|
153
|
+
textArea.value = text;
|
|
154
|
+
textArea.style.position = 'fixed';
|
|
155
|
+
textArea.style.left = '-999999px';
|
|
156
|
+
textArea.style.top = '-999999px';
|
|
157
|
+
document.body.appendChild(textArea);
|
|
158
|
+
textArea.focus();
|
|
159
|
+
textArea.select();
|
|
160
|
+
try {
|
|
161
|
+
success = document.execCommand('copy');
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('Fallback: Failed to copy to clipboard:', error);
|
|
165
|
+
success = false;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
document.body.removeChild(textArea);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
return success;
|
|
172
|
+
}
|
|
130
173
|
}
|
|
131
174
|
ImgManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
132
175
|
ImgManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgManagerService });
|
|
133
176
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgManagerService, decorators: [{
|
|
134
177
|
type: Injectable
|
|
135
178
|
}] });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBR2pELE1BQU0sT0FBTyxpQkFBaUI7SUFEOUI7UUFHbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFdkQsV0FBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVELDRCQUE0QjtRQUNwQiwyQkFBc0IsR0FBNEI7WUFDeEQsY0FBYyxFQUFFLFFBQVE7WUFDeEIsZUFBZSxFQUFFLElBQUk7WUFDckIsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixhQUFhLEVBQUUsSUFBSTtZQUNuQixVQUFVLEVBQUUsSUFBSTtZQUNoQixnQkFBZ0IsRUFBRSxJQUFJO1NBQ3ZCLENBQUE7UUFFTyw4QkFBeUIsR0FBNEI7WUFDM0QsY0FBYyxFQUFFLFFBQVE7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O1NBQ1Y7SUFDSCxDQUFDO0lBRUQsNkJBQTZCO1FBQzNCLE9BQU87WUFDTCxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLElBQUksQ0FBQyxzQkFBc0I7WUFDM0IsSUFBSSxDQUFDLDRCQUE0QjtTQUNsQyxDQUFBO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7OEdBMUxVLGlCQUFpQjtrSEFBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZvcmtKb2luLCBtYXAsIG1lcmdlLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJbWdQaWN0dXJlc0RUTywgUGFyYW1zSW1nTWFuYWdlckRUTyB9IGZyb20gJy4uL2R0by9pbWctbWFuYWdlci5kdG8nO1xuaW1wb3J0IHsgSW1nTWFuYWdlckRpc3BsYXlDb25maWcgfSBmcm9tICcuLi9kdG8vZXhwb3J0LWR0b3MuYXBpJztcbmltcG9ydCB7IEltZ01hbmFnZXJDb25maWcgfSBmcm9tICcuLi9kdG8vY29uZmlnL2ltZy1tYW5hZ2VyJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL3VwbG9hZC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEltZ01hbmFnZXJTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVwbG9hZFNlcnZpY2UgPSBpbmplY3QoVXBsb2FkU2VydmljZSk7XG5cbiAgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoXCJsaW1pdFwiLFwiMjBcIikuc2V0KFwicGFnZVwiLFwiMVwiKTtcblxuICAvLyBEaXNwbGF5IHRoZSBpbWcgc2VsZWN0aW9uXG4gIHByaXZhdGUgcGFnZUZpY2hlUHJvZHVjdENvbmZpZzogSW1nTWFuYWdlckRpc3BsYXlDb25maWcgPSB7XG4gICAgc3RhdGVEaXNwbGF5ZWQ6ICdjbG9zZWQnLFxuICAgIG11bHRpcGxlSW1nTW9kZTogdHJ1ZSxcbiAgICBzaG93SW1nTWFuYWdlck1vZHVsZTogdHJ1ZSxcbiAgICBzaG93U2VsZWN0aW9uOiB0cnVlLFxuICAgIGRpc3BsYXlCdG46IHRydWUsXG4gICAgcGFnZWZpY2hlUHJvZHVjdDogdHJ1ZVxuICB9XG5cbiAgcHJpdmF0ZSBhbmd1bGFyRmljaGVQcm9kdWN0Q29uZmlnOiBJbWdNYW5hZ2VyRGlzcGxheUNvbmZpZyA9IHtcbiAgICBzdGF0ZURpc3BsYXllZDogJ2Nsb3NlZCcsXG4gICAgbXVsdGlwbGVJbWdNb2RlOiB0cnVlLFxuICAgIHNob3dJbWdNYW5hZ2VyTW9kdWxlOiB0cnVlLFxuICAgIHNob3dTZWxlY3Rpb246IHRydWUsXG4gICAgZGlzcGxheUJ0bjogZmFsc2UsXG4gICAgcGFnZWZpY2hlUHJvZHVjdDogdHJ1ZVxuICB9XG5cbiAgcHJpdmF0ZSB3aXppYmxvY2tDb25maWc6IEltZ01hbmFnZXJEaXNwbGF5Q29uZmlnID0ge1xuICAgIHN0YXRlRGlzcGxheWVkOiAnY2xvc2VkJyxcbiAgICBtdWx0aXBsZUltZ01vZGU6IGZhbHNlLFxuICAgIHNob3dJbWdNYW5hZ2VyTW9kdWxlOiB0cnVlLFxuICAgIHNob3dTZWxlY3Rpb246IGZhbHNlLFxuICAgIGRpc3BsYXlCdG46IGZhbHNlXG4gIH1cblxuICBwcml2YXRlIHNpbXBsZVdpdGhCdXR0b25PcGVuZXJDb25maWc6IEltZ01hbmFnZXJEaXNwbGF5Q29uZmlnID0ge1xuICAgIHN0YXRlRGlzcGxheWVkOiAnY2xvc2VkJyxcbiAgICBtdWx0aXBsZUltZ01vZGU6IGZhbHNlLFxuICAgIHNob3dJbWdNYW5hZ2VyTW9kdWxlOiB0cnVlLFxuICAgIHNob3dTZWxlY3Rpb246IGZhbHNlLFxuICAgIGRpc3BsYXlCdG46IHRydWVcbiAgfVxuXG4gIHByaXZhdGUgZnVsbFdpbmRvd0NvbmZpZzogSW1nTWFuYWdlckRpc3BsYXlDb25maWcgPSB7XG4gICAgc3RhdGVEaXNwbGF5ZWQ6ICd3aW5kb3cnLFxuICAgIG11bHRpcGxlSW1nTW9kZTogZmFsc2UsXG4gICAgc2hvd0ltZ01hbmFnZXJNb2R1bGU6IHRydWUsXG4gICAgc2hvd1NlbGVjdGlvbjogZmFsc2UsXG4gICAgZGlzcGxheUJ0bjogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXBpU2VydmljZSA9IGluamVjdChBcGlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBnZXQgREVGQVVMVF9TRUFSQ0hfUEFSQU1TKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaW1pdDogJzMwJyxcbiAgICAgIHBhZ2U6ICcxJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgREVGQVVMVF9EQVRBX0xJU1QoKToge1xuICAgIGltYWdlTGlzdDogSW1nUGljdHVyZXNEVE87XG4gICAgaW1hZ2VUb3RhbDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgaW1hZ2VMaXN0OiB7XG4gICAgICAgIGRhdGE6IFtdLFxuICAgICAgICBmaWx0ZXI6IFtdLFxuICAgICAgICBsaW1pdDogMCxcbiAgICAgICAgcGFnZTogMCxcbiAgICAgICAgdG90YWxSZWNvcmRzOiAwXG4gICAgICB9LFxuICAgICAgaW1hZ2VUb3RhbDogMFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtc0ltZ01hbmFnZXJEVE8+KHRoaXMuREVGQVVMVF9TRUFSQ0hfUEFSQU1TKTtcbiAgcHVibGljIHJlZnJlc2hJbWFnZUxpc3QkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHVibGljIHJlc2V0SW1hZ2VMaXN0JCA9IG1lcmdlKFxuICAgIHRoaXMudXBsb2FkU2VydmljZS5pbWFnZVVwbG9hZGVkJFxuICApO1xuXG4gIHB1YmxpYyBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJpdmF0ZSBmZXRjaEltYWdlc0xpc3QkID0gbWVyZ2UoXG4gICAgICB0aGlzLnNlYXJjaEltYWdlc1BhcmFtZXRlcnMkLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg4MDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgKSxcbiAgICAgIHRoaXMucmVmcmVzaEltYWdlTGlzdCQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQpXG4gICAgICApLFxuICAgICkucGlwZShcbiAgICAgIG1hcCgocGFyYW1zKSA9PiB0aGlzLmdldEh0dHBQYXJhbWV0ZXJzKHBhcmFtcykpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICAgIHN3aXRjaE1hcCgocGFyYW1zKSA9PiBmb3JrSm9pbih7XG4gICAgICAgIGltYWdlTGlzdDogdGhpcy5hcGlTZXJ2aWNlLmdldFNob3BJbWdMaXN0KHBhcmFtcykucGlwZSh0YWtlKDEpKSxcbiAgICAgICAgaW1hZ2VUb3RhbDogdGhpcy5hcGlTZXJ2aWNlLmdldFNob3BUb3RhbEltZ0xpc3QocGFyYW1zKS5waXBlKHRha2UoMSkpXG4gICAgICB9KSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpKVxuICAgICk7XG5cblxuICBwdWJsaWMgaW1hZ2VMaXN0JCA9IG1lcmdlKFxuICAgICAgdGhpcy5mZXRjaEltYWdlc0xpc3QkLFxuICAgICAgdGhpcy5yZXNldEltYWdlTGlzdCQucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQubmV4dCh0aGlzLkRFRkFVTFRfU0VBUkNIX1BBUkFNUykpLFxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5ERUZBVUxUX0RBVEFfTElTVClcbiAgICAgICAgKVxuICApLnBpcGUoXG4gICAgc3RhcnRXaXRoKCB0aGlzLkRFRkFVTFRfREFUQV9MSVNUKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG5cbiAgZ2V0SHR0cFBhcmFtZXRlcnMocGFyYW1zPzogUGFyYW1zSW1nTWFuYWdlckRUTykge1xuICAgIGxldCBwYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLnNldCgnaWRfZmlsZTpzb3J0JywgJ2Rlc2MnKTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtIGluIHBhcmFtcykge1xuICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuc2V0KHBhcmFtLCBwYXJhbXNbcGFyYW1dKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zPy5zZWFyY2gpIHtcbiAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLnNldCgnZGlzcGxheV9uYW1lOmNvbnRhaW5zJywgcGFyYW1zLnNlYXJjaCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbWV0ZXJzO1xuICB9XG5cbiAgZ2V0U2hvcEltZyhpZEZpbGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZ2V0U2hvcEltZyhpZEZpbGUpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZWZyZXNoSW1hZ2VMaXN0JC5uZXh0KCkpXG4gICAgKTtcbiAgfVxuXG4gIHJlcGxhY2VJbWcoaW1hZ2VCYXNlNjQ6IHN0cmluZywgaWRfZmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5yZXBsYWNlSW1nKGltYWdlQmFzZTY0LCBpZF9maWxlKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMucmVmcmVzaEltYWdlTGlzdCQubmV4dCgpKVxuICAgICk7XG4gIH1cblxuXG4gIHJlbW92ZUltZyhpZF9maWxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnJlbW92ZUltZyhpZF9maWxlKS5waXBlKFxuICAgICAgdGFwKCgpID0+IHRoaXMucmVmcmVzaEltYWdlTGlzdCQubmV4dCgpKVxuICAgICk7XG4gIH1cblxuICByZW1vdmVNdWx0aXBsZUltZyhpZF9hcnJheTogc3RyaW5nW10pe1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucmVtb3ZlTXVsdGlwbGVJbWcoaWRfYXJyYXkpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZWZyZXNoSW1hZ2VMaXN0JC5uZXh0KCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEltZ01hbmFnZXJEaXNwbGF5Q29uZmlnKGRpc3BsYXlOYW1lOiBJbWdNYW5hZ2VyQ29uZmlnKSB7XG4gICAgc3dpdGNoIChkaXNwbGF5TmFtZSkge1xuICAgICAgY2FzZSBcIndpbmRvd1wiOlxuICAgICAgICByZXR1cm4gdGhpcy5mdWxsV2luZG93Q29uZmlnO1xuXG4gICAgICBjYXNlIFwid2l6aS1ibG9ja1wiOlxuICAgICAgICByZXR1cm4gdGhpcy53aXppYmxvY2tDb25maWc7XG5cbiAgICAgIGNhc2UgXCJmaWNoZS1wcm9kdWN0XCI6XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VGaWNoZVByb2R1Y3RDb25maWc7XG5cbiAgICAgIGNhc2UgXCJzaW1wbGUtd2l0aC1idXR0b25cIjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlV2l0aEJ1dHRvbk9wZW5lckNvbmZpZztcblxuICAgICAgY2FzZSAnYW5ndWxhci1maWNoZS1wcm9kdWN0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpY2hlUHJvZHVjdENvbmZpZ1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0QWxsSW1nTWFuYWdlckRpc3BsYXlDb25maWcoKTogSW1nTWFuYWdlckRpc3BsYXlDb25maWdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuZnVsbFdpbmRvd0NvbmZpZyxcbiAgICAgIHRoaXMud2l6aWJsb2NrQ29uZmlnLFxuICAgICAgdGhpcy5wYWdlRmljaGVQcm9kdWN0Q29uZmlnLFxuICAgICAgdGhpcy5zaW1wbGVXaXRoQnV0dG9uT3BlbmVyQ29uZmlnLFxuICAgIF1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufSJdfQ==
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3d6LWltZy1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvaW1nLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXhKLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUdqRCxNQUFNLE9BQU8saUJBQWlCO0lBRDlCO1FBR21CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7UUFHOUQsV0FBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVELDRCQUE0QjtRQUNwQiwyQkFBc0IsR0FBNEI7WUFDeEQsY0FBYyxFQUFFLFFBQVE7WUFDeEIsZUFBZSxFQUFFLElBQUk7WUFDckIsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixhQUFhLEVBQUUsSUFBSTtZQUNuQixVQUFVLEVBQUUsSUFBSTtZQUNoQixnQkFB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O1FBRXBCLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUNsQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7WUFDbEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFbEIsSUFBSTtnQkFDRixPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4QztZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDakI7b0JBQVM7Z0JBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OzhHQXhPVSxpQkFBaUI7a0hBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZvcmtKb2luLCBtYXAsIG1lcmdlLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJbWdQaWN0dXJlc0RUTywgUGFyYW1zSW1nTWFuYWdlckRUTyB9IGZyb20gJy4uL2R0by9pbWctbWFuYWdlci5kdG8nO1xuaW1wb3J0IHsgSW1nTWFuYWdlckRpc3BsYXlDb25maWcgfSBmcm9tICcuLi9kdG8vZXhwb3J0LWR0b3MuYXBpJztcbmltcG9ydCB7IEltZ01hbmFnZXJDb25maWcgfSBmcm9tICcuLi9kdG8vY29uZmlnL2ltZy1tYW5hZ2VyJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZFNlcnZpY2UgfSBmcm9tICcuL3VwbG9hZC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEltZ01hbmFnZXJTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVwbG9hZFNlcnZpY2UgPSBpbmplY3QoVXBsb2FkU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTsgLy8gSW5qZWN0ZXIgTmdab25lXG5cblxuICBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldChcImxpbWl0XCIsXCIyMFwiKS5zZXQoXCJwYWdlXCIsXCIxXCIpO1xuXG4gIC8vIERpc3BsYXkgdGhlIGltZyBzZWxlY3Rpb25cbiAgcHJpdmF0ZSBwYWdlRmljaGVQcm9kdWN0Q29uZmlnOiBJbWdNYW5hZ2VyRGlzcGxheUNvbmZpZyA9IHtcbiAgICBzdGF0ZURpc3BsYXllZDogJ2Nsb3NlZCcsXG4gICAgbXVsdGlwbGVJbWdNb2RlOiB0cnVlLFxuICAgIHNob3dJbWdNYW5hZ2VyTW9kdWxlOiB0cnVlLFxuICAgIHNob3dTZWxlY3Rpb246IHRydWUsXG4gICAgZGlzcGxheUJ0bjogdHJ1ZSxcbiAgICBwYWdlZmljaGVQcm9kdWN0OiB0cnVlXG4gIH1cblxuICBwcml2YXRlIGFuZ3VsYXJGaWNoZVByb2R1Y3RDb25maWc6IEltZ01hbmFnZXJEaXNwbGF5Q29uZmlnID0ge1xuICAgIHN0YXRlRGlzcGxheWVkOiAnY2xvc2VkJyxcbiAgICBtdWx0aXBsZUltZ01vZGU6IHRydWUsXG4gICAgc2hvd0ltZ01hbmFnZXJNb2R1bGU6IHRydWUsXG4gICAgc2hvd1NlbGVjdGlvbjogdHJ1ZSxcbiAgICBkaXNwbGF5QnRuOiBmYWxzZSxcbiAgICBwYWdlZmljaGVQcm9kdWN0OiB0cnVlXG4gIH1cblxuICBwcml2YXRlIHdpemlibG9ja0NvbmZpZzogSW1nTWFuYWdlckRpc3BsYXlDb25maWcgPSB7XG4gICAgc3RhdGVEaXNwbGF5ZWQ6ICdjbG9zZWQnLFxuICAgIG11bHRpcGxlSW1nTW9kZTogZmFsc2UsXG4gICAgc2hvd0ltZ01hbmFnZXJNb2R1bGU6IHRydWUsXG4gICAgc2hvd1NlbGVjdGlvbjogZmFsc2UsXG4gICAgZGlzcGxheUJ0bjogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgc2ltcGxlV2l0aEJ1dHRvbk9wZW5lckNvbmZpZzogSW1nTWFuYWdlckRpc3BsYXlDb25maWcgPSB7XG4gICAgc3RhdGVEaXNwbGF5ZWQ6ICdjbG9zZWQnLFxuICAgIG11bHRpcGxlSW1nTW9kZTogZmFsc2UsXG4gICAgc2hvd0ltZ01hbmFnZXJNb2R1bGU6IHRydWUsXG4gICAgc2hvd1NlbGVjdGlvbjogZmFsc2UsXG4gICAgZGlzcGxheUJ0bjogdHJ1ZVxuICB9XG5cbiAgcHJpdmF0ZSBmdWxsV2luZG93Q29uZmlnOiBJbWdNYW5hZ2VyRGlzcGxheUNvbmZpZyA9IHtcbiAgICBzdGF0ZURpc3BsYXllZDogJ3dpbmRvdycsXG4gICAgbXVsdGlwbGVJbWdNb2RlOiBmYWxzZSxcbiAgICBzaG93SW1nTWFuYWdlck1vZHVsZTogdHJ1ZSxcbiAgICBzaG93U2VsZWN0aW9uOiBmYWxzZSxcbiAgICBkaXNwbGF5QnRuOiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBhcGlTZXJ2aWNlID0gaW5qZWN0KEFwaVNlcnZpY2UpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIGdldCBERUZBVUxUX1NFQVJDSF9QQVJBTVMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbWl0OiAnMzAnLFxuICAgICAgcGFnZTogJzEnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBERUZBVUxUX0RBVEFfTElTVCgpOiB7XG4gICAgaW1hZ2VMaXN0OiBJbWdQaWN0dXJlc0RUTztcbiAgICBpbWFnZVRvdGFsOiBudW1iZXI7XG4gIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBpbWFnZUxpc3Q6IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGZpbHRlcjogW10sXG4gICAgICAgIGxpbWl0OiAwLFxuICAgICAgICBwYWdlOiAwLFxuICAgICAgICB0b3RhbFJlY29yZHM6IDBcbiAgICAgIH0sXG4gICAgICBpbWFnZVRvdGFsOiAwXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFyYW1zSW1nTWFuYWdlckRUTz4odGhpcy5ERUZBVUxUX1NFQVJDSF9QQVJBTVMpO1xuICBwdWJsaWMgcmVmcmVzaEltYWdlTGlzdCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgcmVzZXRJbWFnZUxpc3QkID0gbWVyZ2UoXG4gICAgdGhpcy51cGxvYWRTZXJ2aWNlLmltYWdlVXBsb2FkZWQkXG4gICk7XG5cbiAgcHVibGljIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIGZldGNoSW1hZ2VzTGlzdCQgPSBtZXJnZShcbiAgICAgIHRoaXMuc2VhcmNoSW1hZ2VzUGFyYW1ldGVycyQucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDgwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApLFxuICAgICAgdGhpcy5yZWZyZXNoSW1hZ2VMaXN0JC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJClcbiAgICAgICksXG4gICAgKS5waXBlKFxuICAgICAgbWFwKChwYXJhbXMpID0+IHRoaXMuZ2V0SHR0cFBhcmFtZXRlcnMocGFyYW1zKSksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChwYXJhbXMpID0+IGZvcmtKb2luKHtcbiAgICAgICAgaW1hZ2VMaXN0OiB0aGlzLmFwaVNlcnZpY2UuZ2V0U2hvcEltZ0xpc3QocGFyYW1zKS5waXBlKHRha2UoMSkpLFxuICAgICAgICBpbWFnZVRvdGFsOiB0aGlzLmFwaVNlcnZpY2UuZ2V0U2hvcFRvdGFsSW1nTGlzdChwYXJhbXMpLnBpcGUodGFrZSgxKSlcbiAgICAgIH0pKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSkpXG4gICAgKTtcblxuXG4gIHB1YmxpYyBpbWFnZUxpc3QkID0gbWVyZ2UoXG4gICAgICB0aGlzLmZldGNoSW1hZ2VzTGlzdCQsXG4gICAgICB0aGlzLnJlc2V0SW1hZ2VMaXN0JC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSkpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5zZWFyY2hJbWFnZXNQYXJhbWV0ZXJzJC5uZXh0KHRoaXMuREVGQVVMVF9TRUFSQ0hfUEFSQU1TKSksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLkRFRkFVTFRfREFUQV9MSVNUKVxuICAgICAgICApXG4gICkucGlwZShcbiAgICBzdGFydFdpdGgoIHRoaXMuREVGQVVMVF9EQVRBX0xJU1QpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cblxuICBnZXRIdHRwUGFyYW1ldGVycyhwYXJhbXM/OiBQYXJhbXNJbWdNYW5hZ2VyRFRPKSB7XG4gICAgbGV0IHBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuc2V0KCdpZF9maWxlOnNvcnQnLCAnZGVzYycpO1xuICAgIGZvciAoY29uc3QgcGFyYW0gaW4gcGFyYW1zKSB7XG4gICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5zZXQocGFyYW0sIHBhcmFtc1twYXJhbV0pO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXM/LnNlYXJjaCkge1xuICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnMuc2V0KCdkaXNwbGF5X25hbWU6Y29udGFpbnMnLCBwYXJhbXMuc2VhcmNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBnZXRTaG9wSW1nKGlkRmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5nZXRTaG9wSW1nKGlkRmlsZSkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlZnJlc2hJbWFnZUxpc3QkLm5leHQoKSlcbiAgICApO1xuICB9XG5cbiAgcmVwbGFjZUltZyhpbWFnZUJhc2U2NDogc3RyaW5nLCBpZF9maWxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnJlcGxhY2VJbWcoaW1hZ2VCYXNlNjQsIGlkX2ZpbGUpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZWZyZXNoSW1hZ2VMaXN0JC5uZXh0KCkpXG4gICAgKTtcbiAgfVxuXG5cbiAgcmVtb3ZlSW1nKGlkX2ZpbGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucmVtb3ZlSW1nKGlkX2ZpbGUpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZWZyZXNoSW1hZ2VMaXN0JC5uZXh0KCkpXG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZU11bHRpcGxlSW1nKGlkX2FycmF5OiBzdHJpbmdbXSl7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5yZW1vdmVNdWx0aXBsZUltZyhpZF9hcnJheSkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlZnJlc2hJbWFnZUxpc3QkLm5leHQoKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0SW1nTWFuYWdlckRpc3BsYXlDb25maWcoZGlzcGxheU5hbWU6IEltZ01hbmFnZXJDb25maWcpIHtcbiAgICBzd2l0Y2ggKGRpc3BsYXlOYW1lKSB7XG4gICAgICBjYXNlIFwid2luZG93XCI6XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bGxXaW5kb3dDb25maWc7XG5cbiAgICAgIGNhc2UgXCJ3aXppLWJsb2NrXCI6XG4gICAgICAgIHJldHVybiB0aGlzLndpemlibG9ja0NvbmZpZztcblxuICAgICAgY2FzZSBcImZpY2hlLXByb2R1Y3RcIjpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZUZpY2hlUHJvZHVjdENvbmZpZztcblxuICAgICAgY2FzZSBcInNpbXBsZS13aXRoLWJ1dHRvblwiOlxuICAgICAgICByZXR1cm4gdGhpcy5zaW1wbGVXaXRoQnV0dG9uT3BlbmVyQ29uZmlnO1xuXG4gICAgICBjYXNlICdhbmd1bGFyLWZpY2hlLXByb2R1Y3QnOlxuICAgICAgICByZXR1cm4gdGhpcy5hbmd1bGFyRmljaGVQcm9kdWN0Q29uZmlnXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRBbGxJbWdNYW5hZ2VyRGlzcGxheUNvbmZpZygpOiBJbWdNYW5hZ2VyRGlzcGxheUNvbmZpZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5mdWxsV2luZG93Q29uZmlnLFxuICAgICAgdGhpcy53aXppYmxvY2tDb25maWcsXG4gICAgICB0aGlzLnBhZ2VGaWNoZVByb2R1Y3RDb25maWcsXG4gICAgICB0aGlzLnNpbXBsZVdpdGhCdXR0b25PcGVuZXJDb25maWcsXG4gICAgXVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBWw6lyaWZpZXIgc2kgbCdBUEkgQ2xpcGJvYXJkIGVzdCBkaXNwb25pYmxlXG4gICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkge1xuICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh1cmwpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQ6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmZhbGxiYWNrQ29weVRvQ2xpcGJvYXJkKHVybCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmFsbGJhY2sgcG91ciBsZXMgbmF2aWdhdGV1cnMgcXVpIG5lIHN1cHBvcnRlbnQgcGFzIGwnQVBJIENsaXBib2FyZFxuICAgICAgICByZXNvbHZlKHRoaXMuZmFsbGJhY2tDb3B5VG9DbGlwYm9hcmQodXJsKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrQ29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG4gICAgXG4gICAgLy8gRXjDqWN1dGVyIGVuIGRlaG9ycyBkdSBjeWNsZSBkZSBkw6l0ZWN0aW9uIGQnQW5ndWxhclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgIHRleHRBcmVhLnZhbHVlID0gdGV4dDtcbiAgICAgIHRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgIHRleHRBcmVhLnN0eWxlLmxlZnQgPSAnLTk5OTk5OXB4JztcbiAgICAgIHRleHRBcmVhLnN0eWxlLnRvcCA9ICctOTk5OTk5cHgnO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7XG4gICAgICB0ZXh0QXJlYS5mb2N1cygpO1xuICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFsbGJhY2s6IEZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZDonLCBlcnJvcik7XG4gICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbn0iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, inject, Component, ViewEncapsulation, Input, EventEmitter, Directive, Output, HostBinding, HostListener, ViewChild, ChangeDetectionStrategy, Pipe, Inject, NgModule } from '@angular/core';
|
|
2
|
+
import { Injectable, inject, Component, ViewEncapsulation, Input, EventEmitter, Directive, Output, HostBinding, HostListener, ViewChild, ChangeDetectionStrategy, NgZone, Pipe, Inject, NgModule } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, Subject, tap, Observable, forkJoin, merge, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, switchMap, map as map$1, take as take$1, startWith, shareReplay, combineLatest } from 'rxjs';
|
|
4
4
|
import { take, map, takeUntil, debounceTime, distinctUntilChanged, tap as tap$1, filter } from 'rxjs/operators';
|
|
5
5
|
import * as i1 from '@wizishop/ng-wizi-bulma';
|
|
@@ -20,6 +20,7 @@ import * as i8 from 'ngx-scrollbar/reached-event';
|
|
|
20
20
|
import { NgScrollbarReachedModule } from 'ngx-scrollbar/reached-event';
|
|
21
21
|
import * as i4$1 from 'ngx-image-cropper';
|
|
22
22
|
import { ImageCropperModule } from 'ngx-image-cropper';
|
|
23
|
+
import { __awaiter } from 'tslib';
|
|
23
24
|
import { v4 } from 'uuid';
|
|
24
25
|
import * as i3$3 from '@angular/cdk/drag-drop';
|
|
25
26
|
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
@@ -1027,6 +1028,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
1027
1028
|
class ImgManagerService {
|
|
1028
1029
|
constructor() {
|
|
1029
1030
|
this.uploadService = inject(UploadService);
|
|
1031
|
+
this.ngZone = inject(NgZone); // Injecter NgZone
|
|
1030
1032
|
this.params = new HttpParams().set("limit", "20").set("page", "1");
|
|
1031
1033
|
// Display the img selection
|
|
1032
1034
|
this.pageFicheProductConfig = {
|
|
@@ -1147,6 +1149,48 @@ class ImgManagerService {
|
|
|
1147
1149
|
this.destroy$.next();
|
|
1148
1150
|
this.destroy$.complete();
|
|
1149
1151
|
}
|
|
1152
|
+
copyToClipboard(url) {
|
|
1153
|
+
return new Promise((resolve) => {
|
|
1154
|
+
// Vérifier si l'API Clipboard est disponible
|
|
1155
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
1156
|
+
navigator.clipboard.writeText(url)
|
|
1157
|
+
.then(() => resolve(true))
|
|
1158
|
+
.catch((error) => {
|
|
1159
|
+
console.error('Failed to copy to clipboard:', error);
|
|
1160
|
+
resolve(this.fallbackCopyToClipboard(url));
|
|
1161
|
+
});
|
|
1162
|
+
}
|
|
1163
|
+
else {
|
|
1164
|
+
// Fallback pour les navigateurs qui ne supportent pas l'API Clipboard
|
|
1165
|
+
resolve(this.fallbackCopyToClipboard(url));
|
|
1166
|
+
}
|
|
1167
|
+
});
|
|
1168
|
+
}
|
|
1169
|
+
fallbackCopyToClipboard(text) {
|
|
1170
|
+
let success = false;
|
|
1171
|
+
// Exécuter en dehors du cycle de détection d'Angular
|
|
1172
|
+
this.ngZone.runOutsideAngular(() => {
|
|
1173
|
+
const textArea = document.createElement('textarea');
|
|
1174
|
+
textArea.value = text;
|
|
1175
|
+
textArea.style.position = 'fixed';
|
|
1176
|
+
textArea.style.left = '-999999px';
|
|
1177
|
+
textArea.style.top = '-999999px';
|
|
1178
|
+
document.body.appendChild(textArea);
|
|
1179
|
+
textArea.focus();
|
|
1180
|
+
textArea.select();
|
|
1181
|
+
try {
|
|
1182
|
+
success = document.execCommand('copy');
|
|
1183
|
+
}
|
|
1184
|
+
catch (error) {
|
|
1185
|
+
console.error('Fallback: Failed to copy to clipboard:', error);
|
|
1186
|
+
success = false;
|
|
1187
|
+
}
|
|
1188
|
+
finally {
|
|
1189
|
+
document.body.removeChild(textArea);
|
|
1190
|
+
}
|
|
1191
|
+
});
|
|
1192
|
+
return success;
|
|
1193
|
+
}
|
|
1150
1194
|
}
|
|
1151
1195
|
ImgManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1152
1196
|
ImgManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgManagerService });
|
|
@@ -1291,6 +1335,17 @@ class ImagesActionHandler {
|
|
|
1291
1335
|
onEdit(picture) {
|
|
1292
1336
|
this.imgEventCardService.emitImgToEdit(picture);
|
|
1293
1337
|
}
|
|
1338
|
+
copyLink(file_name) {
|
|
1339
|
+
const url = this.imgCDNService.getUrlImg('raw') + file_name;
|
|
1340
|
+
this.imgManager.copyToClipboard(url).then(success => {
|
|
1341
|
+
if (success) {
|
|
1342
|
+
this.alertService.openAlert('ImgManager.ImgList.linkCopied');
|
|
1343
|
+
}
|
|
1344
|
+
else {
|
|
1345
|
+
this.alertService.openAlert('ImgManager.ImgList.linkCopyFailed');
|
|
1346
|
+
}
|
|
1347
|
+
});
|
|
1348
|
+
}
|
|
1294
1349
|
onToggleSelectImg(index) {
|
|
1295
1350
|
if (this.disable || this.stateDisplayed === 'window') {
|
|
1296
1351
|
return;
|
|
@@ -1338,7 +1393,7 @@ class ImagesActionHandler {
|
|
|
1338
1393
|
downloadUrl(url, fileName) {
|
|
1339
1394
|
const a = document.createElement('a');
|
|
1340
1395
|
a.href = url;
|
|
1341
|
-
a.download = fileName;
|
|
1396
|
+
a.download = fileName.replace(/[.]/g, "");
|
|
1342
1397
|
a.click();
|
|
1343
1398
|
}
|
|
1344
1399
|
ngDestroy() {
|
|
@@ -1417,14 +1472,14 @@ class ImgCardComponent extends ImagesActionHandler {
|
|
|
1417
1472
|
}
|
|
1418
1473
|
}
|
|
1419
1474
|
ImgCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgCardComponent, deps: [{ token: ImgManagerService }, { token: ImgSelectionService }, { token: i3$1.HttpClient }, { token: ImgCDNService }, { token: ImgEventService }, { token: AlertService }, { token: i3.TranslateService }, { token: ApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1420
|
-
ImgCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ImgCardComponent, selector: "img-card", inputs: { tabDisplayed: "tabDisplayed", fullSize: "fullSize", picture: "picture", index: "index" }, outputs: { toggleImgSelected: "toggleImgSelected", switchDisplayWindow: "switchDisplayWindow" }, usesInheritance: true, ngImport: i0, template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\n <div class=\"img-card\">\n <div class=\"img-card__container\"\n [ngClass]=\"{\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\n 'imgSelected': picture.selected,\n 'deletion': picture.deleted}\">\n <img\n class=\"img-card__container__img\"\n [src]=\"picture.file_name | imgSrc : '400'\"\n [alt]=\"picture.display_name\"\n (click)=\"onToggleImgSelected()\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <div\n class=\"img-card__container__config\"\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\n >\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\n </button>\n </div>\n <div\n class=\"img-card__container__config img-card__container__config--small\"\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\n >\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\n </div>\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\n <div>\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\n </div>\n </div>\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\n <i class=\"far fa-check\"></i>\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\n </div>\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"img-card__container__overlay\"\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\n </div>\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\n\n </div>\n <div\n class=\"img-card__nameContainer\"\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\n <input\n type=\"text\"\n class=\"wzImgMngInput img-card__nameContainer__name\"\n [(ngModel)]=\"picture.display_name\"\n (ngModelChange)=\"onNameChange(picture.id_file)\"\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\n (blur)=\"focusInput = false;\"\n >\n <span>{{picture.display_name}}</span>\n </div>\n\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: ImageSrcPipe, name: "imgSrc" }], animations: [
|
|
1475
|
+
ImgCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ImgCardComponent, selector: "img-card", inputs: { tabDisplayed: "tabDisplayed", fullSize: "fullSize", picture: "picture", index: "index" }, outputs: { toggleImgSelected: "toggleImgSelected", switchDisplayWindow: "switchDisplayWindow" }, usesInheritance: true, ngImport: i0, template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\n <div class=\"img-card\">\n <div class=\"img-card__container\"\n [ngClass]=\"{\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\n 'imgSelected': picture.selected,\n 'deletion': picture.deleted}\">\n <img\n class=\"img-card__container__img\"\n [src]=\"picture.file_name | imgSrc : '400'\"\n [alt]=\"picture.display_name\"\n (click)=\"onToggleImgSelected()\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <div\n class=\"img-card__container__config\"\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\n >\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\n <button type=\"button\" class=\"copy\" (click)=\"copyLink(picture.file_name)\"><i class=\"fal fa-copy\"></i><span>{{ 'ImgManager.ImgCard.copyLink' | translate }}</span></button>\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\n </button>\n </div>\n <div\n class=\"img-card__container__config img-card__container__config--small\"\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\n >\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\n </div>\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\n <div>\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\n </div>\n </div>\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\n <i class=\"far fa-check\"></i>\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\n </div>\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"img-card__container__overlay\"\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\n </div>\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\n\n </div>\n <div\n class=\"img-card__nameContainer\"\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\n <input\n type=\"text\"\n class=\"wzImgMngInput img-card__nameContainer__name\"\n [(ngModel)]=\"picture.display_name\"\n (ngModelChange)=\"onNameChange(picture.id_file)\"\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\n (blur)=\"focusInput = false;\"\n >\n <span>{{picture.display_name}}</span>\n </div>\n\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: LoadingDirective, selector: "[btnLoadingAnim]" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: ImageSrcPipe, name: "imgSrc" }], animations: [
|
|
1421
1476
|
easeInOut
|
|
1422
1477
|
] });
|
|
1423
1478
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ImgCardComponent, decorators: [{
|
|
1424
1479
|
type: Component,
|
|
1425
1480
|
args: [{ selector: 'img-card', animations: [
|
|
1426
1481
|
easeInOut
|
|
1427
|
-
], template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\n <div class=\"img-card\">\n <div class=\"img-card__container\"\n [ngClass]=\"{\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\n 'imgSelected': picture.selected,\n 'deletion': picture.deleted}\">\n <img\n class=\"img-card__container__img\"\n [src]=\"picture.file_name | imgSrc : '400'\"\n [alt]=\"picture.display_name\"\n (click)=\"onToggleImgSelected()\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <div\n class=\"img-card__container__config\"\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\n >\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\n </button>\n </div>\n <div\n class=\"img-card__container__config img-card__container__config--small\"\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\n >\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\n </div>\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\n <div>\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\n </div>\n </div>\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\n <i class=\"far fa-check\"></i>\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\n </div>\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"img-card__container__overlay\"\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\n </div>\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\n\n </div>\n <div\n class=\"img-card__nameContainer\"\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\n <input\n type=\"text\"\n class=\"wzImgMngInput img-card__nameContainer__name\"\n [(ngModel)]=\"picture.display_name\"\n (ngModelChange)=\"onNameChange(picture.id_file)\"\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\n (blur)=\"focusInput = false;\"\n >\n <span>{{picture.display_name}}</span>\n </div>\n\n </div>\n</div>\n" }]
|
|
1482
|
+
], template: "<div class=\"addCssPriority\" [@easeInOut]=\"'in'\" [ngClass]=\"{ 'fullSize': fullSize }\">\n <div class=\"img-card\">\n <div class=\"img-card__container\"\n [ngClass]=\"{\n 'smallDisplay': stateDisplayed === 'small' || isUploadSection,\n 'imgSelected': picture.selected,\n 'deletion': picture.deleted}\">\n <img\n class=\"img-card__container__img\"\n [src]=\"picture.file_name | imgSrc : '400'\"\n [alt]=\"picture.display_name\"\n (click)=\"onToggleImgSelected()\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <div\n class=\"img-card__container__config\"\n *ngIf=\"!picture.deleted && stateDisplayed !== 'small'\"\n >\n <button type=\"button\" class=\"size\"><i class=\"fal fa-image-polaroid\"></i><span>{{picture.raw_height}}x{{picture.raw_width}}</span></button>\n <button type=\"button\" class=\"dl\" (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"><i class=\"fal fa-download\"></i><span>{{ 'ImgManager.ImgCard.download' | translate }}</span></button>\n <button type=\"button\" class=\"edit\" (click)=\"onEdit(picture)\"><i class=\"far fa-crop-alt\"></i><span>{{ 'ImgManager.ImgCard.edit' | translate }}</span></button>\n <button type=\"button\" class=\"copy\" (click)=\"copyLink(picture.file_name)\"><i class=\"fal fa-copy\"></i><span>{{ 'ImgManager.ImgCard.copyLink' | translate }}</span></button>\n <button type=\"button\" class=\"deleted\" (click)=\"activeConfirmDelete = true;\"><i class=\"fal fa-times\"></i><span>{{ 'ImgManager.ImgCard.del' | translate }}</span></button>\n <button type=\"button\" class=\"selected\" (click)=\"onToggleImgSelected()\" *ngIf=\"stateDisplayed !== 'window'\">\n <i *ngIf=\"!picture.selected\" class=\"fal fa-square\"></i>\n <i *ngIf=\"picture.selected\" class=\"fa-solid fa-check-square checked\"></i>\n <span>{{ 'ImgManager.ImgCard.select' | translate }}</span>\n </button>\n </div>\n <div\n class=\"img-card__container__config img-card__container__config--small\"\n *ngIf=\"!picture.deleted && stateDisplayed === 'small'\"\n >\n <button class=\"show-edit\" (click)=\"displayLargeWindow()\"><i class=\"fa-solid fa-edit\"></i></button>\n </div>\n <div class=\"img-card__container__delete\" [ngClass]=\"{ 'show' : activeConfirmDelete}\">\n <span>{{ 'ImgManager.ImgCard.confirmDeleteImg' | translate }}</span>\n <div>\n <button (click)=\"activeConfirmDelete = false;\">{{ 'no' | translate }}</button>\n <button (click)=\"onRemoveImg(picture);activeConfirmDelete = false;\">{{ 'yes' | translate }}</button>\n </div>\n </div>\n <div class=\"img-card__container__valid\" *ngIf=\"stateDisplayed === 'small' && tabDisplayed == 'img-upload'\">\n <i class=\"far fa-check\"></i>\n <span>{{ 'ImgManager.ImgCard.validImgSmall' | translate }}</span>\n </div>\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"img-card__container__overlay\"\n [ngClass]=\"{'img-card__container__overlay--smallDisplay': stateDisplayed === 'small' || isUploadSection}\">\n <i (click)=\"onToggleImgSelected()\" class=\"fad fa-folder-times\"></i>\n </div>\n <span btnLoadingAnim class=\"btnLoadingAnnimation\" *ngIf=\"picture.deleted\"></span>\n\n </div>\n <div\n class=\"img-card__nameContainer\"\n [ngClass]=\"{'smallNameDisplay': stateDisplayed === 'small' || isUploadSection, 'focus': focusInput}\">\n <input\n type=\"text\"\n class=\"wzImgMngInput img-card__nameContainer__name\"\n [(ngModel)]=\"picture.display_name\"\n (ngModelChange)=\"onNameChange(picture.id_file)\"\n [ngModelOptions]=\"{standalone: true, updateOn: 'blur'}\"\n (focus)=\"previousName=picture.display_name;focusInput = true;\"\n (blur)=\"focusInput = false;\"\n >\n <span>{{picture.display_name}}</span>\n </div>\n\n </div>\n</div>\n" }]
|
|
1428
1483
|
}], ctorParameters: function () { return [{ type: ImgManagerService }, { type: ImgSelectionService }, { type: i3$1.HttpClient }, { type: ImgCDNService }, { type: ImgEventService }, { type: AlertService }, { type: i3.TranslateService }, { type: ApiService }]; }, propDecorators: { tabDisplayed: [{
|
|
1429
1484
|
type: Input
|
|
1430
1485
|
}], fullSize: [{
|
|
@@ -2970,16 +3025,29 @@ class TableViewComponent extends ImagesActionHandler {
|
|
|
2970
3025
|
}
|
|
2971
3026
|
ngOnInit() {
|
|
2972
3027
|
}
|
|
3028
|
+
// Copy the image link to clipboard
|
|
3029
|
+
copyImageLink(file_name) {
|
|
3030
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
3031
|
+
const url = this.imgCDNService.getUrlImg('raw') + file_name;
|
|
3032
|
+
const success = yield this.imgManager.copyToClipboard(url);
|
|
3033
|
+
if (success) {
|
|
3034
|
+
this.alertService.openAlert('ImgManager.ImgList.linkCopied');
|
|
3035
|
+
}
|
|
3036
|
+
else {
|
|
3037
|
+
this.alertService.openAlert('ImgManager.ImgList.linkCopyFailed');
|
|
3038
|
+
}
|
|
3039
|
+
});
|
|
3040
|
+
}
|
|
2973
3041
|
}
|
|
2974
3042
|
TableViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableViewComponent, deps: [{ token: ImgManagerService }, { token: ImgSelectionService }, { token: i3$1.HttpClient }, { token: ImgCDNService }, { token: ImgEventService }, { token: AlertService }, { token: i3.TranslateService }, { token: ApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2975
|
-
TableViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TableViewComponent, selector: "table-view", usesInheritance: true, ngImport: i0, template: "<div class=\"table-view\" [@listAnimation]=\"picturesList.length\">\n <wz-table\n [checkbox]=\"true\"\n (toggleAllCheckBox)=\"onToggleAllCheckBoxRow($event)\"\n [(tableFilters)]=\"tableFilters\"\n (tableFiltersChange)=\"onFiltersChange()\"\n [placeholder]=\"'ImgManager.SearchBar.placeholder' | translate\"\n [disablePagniation]=\"displayPexelsResults\"\n [isLoading]=\"isLoading\"\n >\n <!-- Header Section -->\n <div\n headerCell\n [headerName]=\"'ImgManager.ImgList.titleImgName' | translate\"\n columnSize=\"2\"\n sortName=\"name\"\n ></div>\n <div\n headerCell\n centerCell=\"center\"\n [headerName]=\"'ImgManager.ImgList.titleResolution' | translate\"\n ></div>\n <div headerCell columnSize=\"0\"></div>\n\n <!-- Body Section -->\n <div\n tableRow\n checkBoxRow\n [checkBoxValue]=\"picture.delSelected\"\n (checkBoxValueChange)=\"onToggleDelSelection(index)\"\n *ngFor=\"let picture of picturesList; let index = index\"\n >\n\n <div tableColumn columnSize=\"2\">\n <div class=\"table-view__row__container\">\n <div\n class=\"table-view__row__container__imgContainer\"\n [ngClass]=\"{'imgSelected': picture.selected}\"\n (click)=\"onToggleSelectImg(index)\">\n <img\n class=\"table-view__row__container__imgContainer__img\"\n [src]=\"picture.file_name | imgSrc : '100'\"\n alt=\"picture.display_name\"\n [ngClass]=\"{'pictureDeletion': picture.deleted}\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <!-- If the img is not loaded, or the link is broken, an icon is displayed -->\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"table-view__row__container__imgContainer__overlay\"\n >\n <i class=\"fad fa-folder-times\"></i>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"wzImgMngInput table-view__row__container__name\"\n [(ngModel)]=\"picture.display_name\"\n (focus)=\"previousName=picture.display_name\"\n (blur)=\"onNameChange(picture.id_file)\"\n (click)=\"onToggleDelSelection(index)\"\n [ngClass]=\"{'desabled': picture.deleted}\"\n [disabled]=\"picture.deleted\"\n >\n </div>\n </div>\n\n <div\n tableColumn\n centerCell=\"center\"\n (click)=\"onToggleDelSelection(index)\"\n >\n <p class=\"grey\">{{picture.raw_height}}x{{picture.raw_width}}</p>\n </div>\n\n <div tableColumn centerCell=\"center\" columnSize=\"0\" class=\"table-view__dropdown-options\">\n <!-- Dropdown -->\n <dropdown dropdownId=\"dropdown-options\" [disable]=\"picture.deleted\">\n <ng-container label>\n <div class=\"table-view__dropdown-options__label rotate\">\n <span> <i class=\"far fa-ellipsis-h is-size-4\" aria-haspopup=\"true\" aria-controls=\"dropdown-menu\"> </i> </span>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"\n >\n <i class=\"far fa-download download\"></i> \n <p>{{ 'ImgManager.ImgList.download' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onEdit(picture)\"\n >\n <i class=\"far fa-crop-alt edit\"></i> \n <p>{{ 'ImgManager.ImgList.edit' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onRemoveImg(picture)\"\n >\n <i class=\"fal fa-times deleted\"></i> \n <p>{{ 'ImgManager.ImgList.remove' | translate }}</p>\n </div>\n </ng-container>\n </dropdown>\n </div>\n </div>\n </wz-table>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DropdownComponent, selector: "dropdown", inputs: ["dropDownMenuClass", "disable"] }, { kind: "component", type: TableComponent, selector: "wz-table", inputs: ["tableFilters", "tableRoutingName", "placeholder", "checkbox", "disableSearch", "disablePagniation", "isLoading"], outputs: ["tableFiltersChange", "toggleAllCheckBox"] }, { kind: "directive", type: TableColumn, selector: "[tableColumn]", inputs: ["columnSize", "centerCell"] }, { kind: "directive", type: CheckBoxRow, selector: "[checkBoxRow]", inputs: ["checkBoxId", "checkBoxName", "checkBoxValue"], outputs: ["checkBoxValueChange"] }, { kind: "directive", type: TableColumnHeader, selector: "[headerCell]", inputs: ["headerName", "columnSize", "filterRouting", "tableName", "sortName", "centerCell", "tableFilters"], outputs: ["onSortChange", "tableFiltersChange"] }, { kind: "directive", type: TableRow, selector: "[tableRow]" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: ImageSrcPipe, name: "imgSrc" }], animations: [
|
|
3043
|
+
TableViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TableViewComponent, selector: "table-view", usesInheritance: true, ngImport: i0, template: "<div class=\"table-view\" [@listAnimation]=\"picturesList.length\">\n <wz-table\n [checkbox]=\"true\"\n (toggleAllCheckBox)=\"onToggleAllCheckBoxRow($event)\"\n [(tableFilters)]=\"tableFilters\"\n (tableFiltersChange)=\"onFiltersChange()\"\n [placeholder]=\"'ImgManager.SearchBar.placeholder' | translate\"\n [disablePagniation]=\"displayPexelsResults\"\n [isLoading]=\"isLoading\"\n >\n <!-- Header Section -->\n <div\n headerCell\n [headerName]=\"'ImgManager.ImgList.titleImgName' | translate\"\n columnSize=\"2\"\n sortName=\"name\"\n ></div>\n <div\n headerCell\n centerCell=\"center\"\n [headerName]=\"'ImgManager.ImgList.titleResolution' | translate\"\n ></div>\n <div headerCell columnSize=\"0\"></div>\n\n <!-- Body Section -->\n <div\n tableRow\n checkBoxRow\n [checkBoxValue]=\"picture.delSelected\"\n (checkBoxValueChange)=\"onToggleDelSelection(index)\"\n *ngFor=\"let picture of picturesList; let index = index\"\n >\n\n <div tableColumn columnSize=\"2\">\n <div class=\"table-view__row__container\">\n <div\n class=\"table-view__row__container__imgContainer\"\n [ngClass]=\"{'imgSelected': picture.selected}\"\n (click)=\"onToggleSelectImg(index)\">\n <img\n class=\"table-view__row__container__imgContainer__img\"\n [src]=\"picture.file_name | imgSrc : '100'\"\n alt=\"picture.display_name\"\n [ngClass]=\"{'pictureDeletion': picture.deleted}\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <!-- If the img is not loaded, or the link is broken, an icon is displayed -->\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"table-view__row__container__imgContainer__overlay\"\n >\n <i class=\"fad fa-folder-times\"></i>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"wzImgMngInput table-view__row__container__name\"\n [(ngModel)]=\"picture.display_name\"\n (focus)=\"previousName=picture.display_name\"\n (blur)=\"onNameChange(picture.id_file)\"\n (click)=\"onToggleDelSelection(index)\"\n [ngClass]=\"{'desabled': picture.deleted}\"\n [disabled]=\"picture.deleted\"\n >\n </div>\n </div>\n\n <div\n tableColumn\n centerCell=\"center\"\n (click)=\"onToggleDelSelection(index)\"\n >\n <p class=\"grey\">{{picture.raw_height}}x{{picture.raw_width}}</p>\n </div>\n\n <div tableColumn centerCell=\"center\" columnSize=\"0\" class=\"table-view__dropdown-options\">\n <!-- Dropdown -->\n <dropdown dropdownId=\"dropdown-options\" [disable]=\"picture.deleted\">\n <ng-container label>\n <div class=\"table-view__dropdown-options__label rotate\">\n <span> <i class=\"far fa-ellipsis-h is-size-4\" aria-haspopup=\"true\" aria-controls=\"dropdown-menu\"> </i> </span>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"\n >\n <i class=\"far fa-download download\"></i> \n <p>{{ 'ImgManager.ImgList.download' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onEdit(picture)\"\n >\n <i class=\"far fa-crop-alt edit\"></i> \n <p>{{ 'ImgManager.ImgList.edit' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"copyImageLink(picture.file_name)\"\n >\n <i class=\"far fa-copy copy\"></i> \n <p>{{ 'ImgManager.ImgList.Link' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onRemoveImg(picture)\"\n >\n <i class=\"fal fa-times deleted\"></i> \n <p>{{ 'ImgManager.ImgList.remove' | translate }}</p>\n </div>\n </ng-container>\n </dropdown>\n </div>\n </div>\n </wz-table>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DropdownComponent, selector: "dropdown", inputs: ["dropDownMenuClass", "disable"] }, { kind: "component", type: TableComponent, selector: "wz-table", inputs: ["tableFilters", "tableRoutingName", "placeholder", "checkbox", "disableSearch", "disablePagniation", "isLoading"], outputs: ["tableFiltersChange", "toggleAllCheckBox"] }, { kind: "directive", type: TableColumn, selector: "[tableColumn]", inputs: ["columnSize", "centerCell"] }, { kind: "directive", type: CheckBoxRow, selector: "[checkBoxRow]", inputs: ["checkBoxId", "checkBoxName", "checkBoxValue"], outputs: ["checkBoxValueChange"] }, { kind: "directive", type: TableColumnHeader, selector: "[headerCell]", inputs: ["headerName", "columnSize", "filterRouting", "tableName", "sortName", "centerCell", "tableFilters"], outputs: ["onSortChange", "tableFiltersChange"] }, { kind: "directive", type: TableRow, selector: "[tableRow]" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: ImageSrcPipe, name: "imgSrc" }], animations: [
|
|
2976
3044
|
listAnnimation
|
|
2977
3045
|
] });
|
|
2978
3046
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableViewComponent, decorators: [{
|
|
2979
3047
|
type: Component,
|
|
2980
3048
|
args: [{ selector: 'table-view', animations: [
|
|
2981
3049
|
listAnnimation
|
|
2982
|
-
], template: "<div class=\"table-view\" [@listAnimation]=\"picturesList.length\">\n <wz-table\n [checkbox]=\"true\"\n (toggleAllCheckBox)=\"onToggleAllCheckBoxRow($event)\"\n [(tableFilters)]=\"tableFilters\"\n (tableFiltersChange)=\"onFiltersChange()\"\n [placeholder]=\"'ImgManager.SearchBar.placeholder' | translate\"\n [disablePagniation]=\"displayPexelsResults\"\n [isLoading]=\"isLoading\"\n >\n <!-- Header Section -->\n <div\n headerCell\n [headerName]=\"'ImgManager.ImgList.titleImgName' | translate\"\n columnSize=\"2\"\n sortName=\"name\"\n ></div>\n <div\n headerCell\n centerCell=\"center\"\n [headerName]=\"'ImgManager.ImgList.titleResolution' | translate\"\n ></div>\n <div headerCell columnSize=\"0\"></div>\n\n <!-- Body Section -->\n <div\n tableRow\n checkBoxRow\n [checkBoxValue]=\"picture.delSelected\"\n (checkBoxValueChange)=\"onToggleDelSelection(index)\"\n *ngFor=\"let picture of picturesList; let index = index\"\n >\n\n <div tableColumn columnSize=\"2\">\n <div class=\"table-view__row__container\">\n <div\n class=\"table-view__row__container__imgContainer\"\n [ngClass]=\"{'imgSelected': picture.selected}\"\n (click)=\"onToggleSelectImg(index)\">\n <img\n class=\"table-view__row__container__imgContainer__img\"\n [src]=\"picture.file_name | imgSrc : '100'\"\n alt=\"picture.display_name\"\n [ngClass]=\"{'pictureDeletion': picture.deleted}\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <!-- If the img is not loaded, or the link is broken, an icon is displayed -->\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"table-view__row__container__imgContainer__overlay\"\n >\n <i class=\"fad fa-folder-times\"></i>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"wzImgMngInput table-view__row__container__name\"\n [(ngModel)]=\"picture.display_name\"\n (focus)=\"previousName=picture.display_name\"\n (blur)=\"onNameChange(picture.id_file)\"\n (click)=\"onToggleDelSelection(index)\"\n [ngClass]=\"{'desabled': picture.deleted}\"\n [disabled]=\"picture.deleted\"\n >\n </div>\n </div>\n\n <div\n tableColumn\n centerCell=\"center\"\n (click)=\"onToggleDelSelection(index)\"\n >\n <p class=\"grey\">{{picture.raw_height}}x{{picture.raw_width}}</p>\n </div>\n\n <div tableColumn centerCell=\"center\" columnSize=\"0\" class=\"table-view__dropdown-options\">\n <!-- Dropdown -->\n <dropdown dropdownId=\"dropdown-options\" [disable]=\"picture.deleted\">\n <ng-container label>\n <div class=\"table-view__dropdown-options__label rotate\">\n <span> <i class=\"far fa-ellipsis-h is-size-4\" aria-haspopup=\"true\" aria-controls=\"dropdown-menu\"> </i> </span>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"\n >\n <i class=\"far fa-download download\"></i> \n <p>{{ 'ImgManager.ImgList.download' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onEdit(picture)\"\n >\n <i class=\"far fa-crop-alt edit\"></i> \n <p>{{ 'ImgManager.ImgList.edit' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onRemoveImg(picture)\"\n >\n <i class=\"fal fa-times deleted\"></i> \n <p>{{ 'ImgManager.ImgList.remove' | translate }}</p>\n </div>\n </ng-container>\n </dropdown>\n </div>\n </div>\n </wz-table>\n</div>\n" }]
|
|
3050
|
+
], template: "<div class=\"table-view\" [@listAnimation]=\"picturesList.length\">\n <wz-table\n [checkbox]=\"true\"\n (toggleAllCheckBox)=\"onToggleAllCheckBoxRow($event)\"\n [(tableFilters)]=\"tableFilters\"\n (tableFiltersChange)=\"onFiltersChange()\"\n [placeholder]=\"'ImgManager.SearchBar.placeholder' | translate\"\n [disablePagniation]=\"displayPexelsResults\"\n [isLoading]=\"isLoading\"\n >\n <!-- Header Section -->\n <div\n headerCell\n [headerName]=\"'ImgManager.ImgList.titleImgName' | translate\"\n columnSize=\"2\"\n sortName=\"name\"\n ></div>\n <div\n headerCell\n centerCell=\"center\"\n [headerName]=\"'ImgManager.ImgList.titleResolution' | translate\"\n ></div>\n <div headerCell columnSize=\"0\"></div>\n\n <!-- Body Section -->\n <div\n tableRow\n checkBoxRow\n [checkBoxValue]=\"picture.delSelected\"\n (checkBoxValueChange)=\"onToggleDelSelection(index)\"\n *ngFor=\"let picture of picturesList; let index = index\"\n >\n\n <div tableColumn columnSize=\"2\">\n <div class=\"table-view__row__container\">\n <div\n class=\"table-view__row__container__imgContainer\"\n [ngClass]=\"{'imgSelected': picture.selected}\"\n (click)=\"onToggleSelectImg(index)\">\n <img\n class=\"table-view__row__container__imgContainer__img\"\n [src]=\"picture.file_name | imgSrc : '100'\"\n alt=\"picture.display_name\"\n [ngClass]=\"{'pictureDeletion': picture.deleted}\"\n (error)=\"picture.imgNotLoaded=true;onPictureNotLoading($event);\"\n />\n <!-- If the img is not loaded, or the link is broken, an icon is displayed -->\n <div\n *ngIf=\"picture.imgNotLoaded\"\n class=\"table-view__row__container__imgContainer__overlay\"\n >\n <i class=\"fad fa-folder-times\"></i>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"wzImgMngInput table-view__row__container__name\"\n [(ngModel)]=\"picture.display_name\"\n (focus)=\"previousName=picture.display_name\"\n (blur)=\"onNameChange(picture.id_file)\"\n (click)=\"onToggleDelSelection(index)\"\n [ngClass]=\"{'desabled': picture.deleted}\"\n [disabled]=\"picture.deleted\"\n >\n </div>\n </div>\n\n <div\n tableColumn\n centerCell=\"center\"\n (click)=\"onToggleDelSelection(index)\"\n >\n <p class=\"grey\">{{picture.raw_height}}x{{picture.raw_width}}</p>\n </div>\n\n <div tableColumn centerCell=\"center\" columnSize=\"0\" class=\"table-view__dropdown-options\">\n <!-- Dropdown -->\n <dropdown dropdownId=\"dropdown-options\" [disable]=\"picture.deleted\">\n <ng-container label>\n <div class=\"table-view__dropdown-options__label rotate\">\n <span> <i class=\"far fa-ellipsis-h is-size-4\" aria-haspopup=\"true\" aria-controls=\"dropdown-menu\"> </i> </span>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onDownloadImg(picture.display_name, picture.file_name)\"\n >\n <i class=\"far fa-download download\"></i> \n <p>{{ 'ImgManager.ImgList.download' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onEdit(picture)\"\n >\n <i class=\"far fa-crop-alt edit\"></i> \n <p>{{ 'ImgManager.ImgList.edit' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"copyImageLink(picture.file_name)\"\n >\n <i class=\"far fa-copy copy\"></i> \n <p>{{ 'ImgManager.ImgList.Link' | translate }}</p>\n </div>\n </ng-container>\n <ng-container item>\n <div\n class=\"dropdown-item\"\n (click)=\"onRemoveImg(picture)\"\n >\n <i class=\"fal fa-times deleted\"></i> \n <p>{{ 'ImgManager.ImgList.remove' | translate }}</p>\n </div>\n </ng-container>\n </dropdown>\n </div>\n </div>\n </wz-table>\n</div>\n" }]
|
|
2983
3051
|
}], ctorParameters: function () { return [{ type: ImgManagerService }, { type: ImgSelectionService }, { type: i3$1.HttpClient }, { type: ImgCDNService }, { type: ImgEventService }, { type: AlertService }, { type: i3.TranslateService }, { type: ApiService }]; } });
|
|
2984
3052
|
|
|
2985
3053
|
class ImagesViewComponent {
|