adb-shared 1.0.22 → 2.0.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.
- package/{esm2015/adb-shared.js → esm2020/adb-shared.mjs} +0 -0
- package/esm2020/lib/components/adb-header/adb-header.component.mjs +102 -0
- package/{esm2015/lib/components/adb-header/adb-header.module.js → esm2020/lib/components/adb-header/adb-header.module.mjs} +5 -5
- package/{esm2015/lib/components/adb-header/environment.service.js → esm2020/lib/components/adb-header/environment.service.mjs} +4 -4
- package/{esm2015/lib/components/adb-header/navigation.model.js → esm2020/lib/components/adb-header/navigation.model.mjs} +0 -0
- package/esm2020/lib/components/date-picker/adb-date-picker.component.mjs +138 -0
- package/esm2020/lib/components/date-picker/adb-date-picker.directive.mjs +117 -0
- package/esm2020/lib/components/date-picker/adb-date-picker.module.mjs +24 -0
- package/esm2020/lib/components/date-picker/adb-date-picker.service.mjs +28 -0
- package/{esm2015/lib/components/pagers/infinite-scroll.component.js → esm2020/lib/components/pagers/infinite-scroll.component.mjs} +4 -4
- package/{esm2015/lib/components/pagers/pager-base.directive.js → esm2020/lib/components/pagers/pager-base.directive.mjs} +4 -4
- package/esm2020/lib/components/pagers/pager.mjs +31 -0
- package/{esm2015/lib/components/pagers/pagers.module.js → esm2020/lib/components/pagers/pagers.module.mjs} +5 -5
- package/esm2020/lib/directives/click-outside.directive.mjs +28 -0
- package/{esm2015/lib/directives/directives.module.js → esm2020/lib/directives/directives.module.mjs} +5 -5
- package/{esm2015/lib/directives/focus.directive.js → esm2020/lib/directives/focus.directive.mjs} +4 -4
- package/esm2020/lib/pipes/date.pipe.mjs +22 -0
- package/{esm2015/lib/pipes/highlight.pipe.js → esm2020/lib/pipes/highlight.pipe.mjs} +4 -4
- package/{esm2015/lib/pipes/number-spacing.pipe.js → esm2020/lib/pipes/number-spacing.pipe.mjs} +4 -4
- package/esm2020/lib/pipes/pipes.module.mjs +19 -0
- package/esm2020/public-api.mjs +19 -0
- package/fesm2015/adb-shared.mjs +727 -0
- package/fesm2015/adb-shared.mjs.map +1 -0
- package/fesm2020/adb-shared.mjs +724 -0
- package/fesm2020/adb-shared.mjs.map +1 -0
- package/lib/components/date-picker/adb-date-picker.component.d.ts +54 -0
- package/lib/components/date-picker/adb-date-picker.directive.d.ts +33 -0
- package/lib/components/date-picker/adb-date-picker.module.d.ts +12 -0
- package/lib/components/date-picker/adb-date-picker.service.d.ts +20 -0
- package/lib/directives/click-outside.directive.d.ts +1 -1
- package/lib/pipes/date.pipe.d.ts +10 -0
- package/lib/pipes/pipes.module.d.ts +2 -1
- package/package.json +25 -11
- package/public-api.d.ts +4 -0
- package/bundles/adb-shared.umd.js +0 -832
- package/bundles/adb-shared.umd.js.map +0 -1
- package/esm2015/lib/components/adb-header/adb-header.component.js +0 -105
- package/esm2015/lib/components/pagers/pager.js +0 -34
- package/esm2015/lib/directives/click-outside.directive.js +0 -28
- package/esm2015/lib/pipes/pipes.module.js +0 -18
- package/esm2015/public-api.js +0 -15
- package/fesm2015/adb-shared.js +0 -433
- package/fesm2015/adb-shared.js.map +0 -1
|
File without changes
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { Subscription } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
import * as i2 from "./environment.service";
|
|
6
|
+
import * as i3 from "@ngx-translate/core";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
export class ADBHeaderComponent {
|
|
9
|
+
constructor(httpClient, envService, trans) {
|
|
10
|
+
this.httpClient = httpClient;
|
|
11
|
+
this.envService = envService;
|
|
12
|
+
this.trans = trans;
|
|
13
|
+
this.subscription = new Subscription();
|
|
14
|
+
this.loginClicked = new EventEmitter();
|
|
15
|
+
this.logoutClicked = new EventEmitter();
|
|
16
|
+
this.dropMenuChange = new EventEmitter();
|
|
17
|
+
this.translationFinished = false;
|
|
18
|
+
this.showMenu = false;
|
|
19
|
+
this.showUserMenu = false;
|
|
20
|
+
}
|
|
21
|
+
set userName(fullName) {
|
|
22
|
+
this.fullName = fullName;
|
|
23
|
+
const splitted = fullName.split(' ');
|
|
24
|
+
if (splitted?.length > 1) {
|
|
25
|
+
const initials = splitted.shift().charAt(0) + splitted.pop().charAt(0);
|
|
26
|
+
this.initials = initials.toUpperCase();
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
this.initials = this.fullName ? this.fullName.charAt(0).toUpperCase() : this.fullName;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
;
|
|
33
|
+
ngOnInit() {
|
|
34
|
+
this.url = window.location.href;
|
|
35
|
+
const baseUrl = this.envService.environment.resourceUrl;
|
|
36
|
+
this.subscription.add(this.httpClient.get(baseUrl + '/assets/links.json').subscribe(result => {
|
|
37
|
+
this.navigation = result;
|
|
38
|
+
}));
|
|
39
|
+
this.initTranslations(baseUrl);
|
|
40
|
+
}
|
|
41
|
+
initTranslations(baseUrl) {
|
|
42
|
+
if (this.trans.store.translations[this.trans.currentLang]) {
|
|
43
|
+
this.loadTranslation(baseUrl, this.trans.currentLang);
|
|
44
|
+
}
|
|
45
|
+
this.subscription.add(this.trans.onLangChange.subscribe((event) => {
|
|
46
|
+
this.translationFinished = false;
|
|
47
|
+
this.loadTranslation(baseUrl, event.lang);
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
loadTranslation(baseUrl, lang) {
|
|
51
|
+
//TODO: Prepare for diffents lang then en sv (en-GB) or add more files in devcomponentserver :)
|
|
52
|
+
this.subscription.add(this.httpClient.get(baseUrl + `/assets/i18n/${lang}.json`).subscribe(translations => {
|
|
53
|
+
this.trans.setTranslation(lang, translations, true);
|
|
54
|
+
this.translationFinished = true;
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
showMenuDropdown(show) {
|
|
58
|
+
if (this.showMenu !== show) {
|
|
59
|
+
this.showMenu = show;
|
|
60
|
+
this.dropMenuChange.emit(show);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
setLanguage(lang) {
|
|
64
|
+
this.trans.use(lang);
|
|
65
|
+
this.showMenu = false;
|
|
66
|
+
this.dropMenuChange.emit(false);
|
|
67
|
+
//TODO: set localstorage/cookies or probaly event to main app
|
|
68
|
+
}
|
|
69
|
+
onExpandLink(event, transId) {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
event.stopPropagation();
|
|
72
|
+
if (this.expandedLink === transId) {
|
|
73
|
+
this.expandedLink = null;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.expandedLink = transId;
|
|
77
|
+
}
|
|
78
|
+
login() {
|
|
79
|
+
this.loginClicked.emit();
|
|
80
|
+
}
|
|
81
|
+
logout() {
|
|
82
|
+
this.logoutClicked.emit();
|
|
83
|
+
}
|
|
84
|
+
ngOnDestroy() {
|
|
85
|
+
this.subscription.unsubscribe();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** @nocollapse */ ADBHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ADBHeaderComponent, deps: [{ token: i1.HttpClient }, { token: i2.EnvironmentService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
89
|
+
/** @nocollapse */ ADBHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ADBHeaderComponent, selector: "adb-header2", inputs: { userName: "userName" }, outputs: { loginClicked: "loginClicked", logoutClicked: "logoutClicked", dropMenuChange: "dropMenuChange" }, ngImport: i0, template: "<header id=\"top-header\" (clickOutside)=\"showUserMenu=false;showMenuDropdown(false);\">\r\n <nav class=\"d-flex flex-wrap px-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center justify-content-between justify-content-md-start\">\r\n <div class=\"logo d-none d-md-block\">\r\n <img src=\"/assets/images/logo.svg\" style=\"height: 3.2rem;\">\r\n </div>\r\n <div class=\"logo ps-2 d-sm-block d-md-none d-flex align-items-center\">\r\n <img src=\"/assets/images/logo_sm_white.png\" style=\"height: 2rem;\">\r\n </div>\r\n <strong class=\"bigger\">{{'ADB_HEADER.TITLE'|translate}}</strong>\r\n </div>\r\n <div *ngIf=\"translationFinished\" class=\"flex-grow-1 d-flex justify-content-lg-between justify-content-end align-items-center\">\r\n <div *ngIf=\"navigation\" class=\"d-flex align-items-center\">\r\n <nav class=\"d-none align-items-center d-lg-flex pe-4 gap-4\" *ngIf=\"navigation\">\r\n <ng-container *ngFor=\"let link of navigation.links\">\r\n <a href=\"{{link.url}}?lang={{trans.currentLang}}\" *ngIf=\"link.topLink\" [ngClass]=\"{'d-none d-xl-block':link.transId==='ADB_HEADER.OBSERVATION'}\">\r\n {{link.transId|translate}}\r\n </a>\r\n </ng-container>\r\n </nav>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-sm py-1 px-2 btn-primary\" (click)=\"showUserMenu = false;showMenuDropdown(!showMenu)\">\r\n {{'ADB_HEADER.MENY'|translate}}\r\n <i class=\"ms-1 fas\" [ngClass]=\"showMenu?'fa-chevron-up':'fa-chevron-down'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"d-none d-md-block ps-4\">\r\n <button *ngIf=\"initials\" type=\"button\" class=\"btn initials\" (click)=\"showUserMenu = !showUserMenu;showMenuDropdown(false)\">{{initials}}</button>\r\n <button *ngIf=\"!initials\" type=\"button\" (click)=\"showUserMenu = !showUserMenu;showMenuDropdown(false)\" class=\"btn btn-link\">\r\n {{'ADB_HEADER.LOGIN'|translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </nav>\r\n <div class=\"menu\" *ngIf=\"showUserMenu\">\r\n <div class=\"menu-body bg-white p-3\" style=\"width:15rem\">\r\n <ng-container *ngIf=\"initials\">\r\n <div class=\"d-flex align-items-center gap-2 text-dark\">\r\n <span class=\"initials\">{{initials}}</span>\r\n <strong>{{fullName}}</strong>\r\n </div>\r\n <hr class=\"mx-n3 text-muted\">\r\n <button (click)=\"logout()\" type=\"button\" class=\"btn btn-link p-0\">\r\n <i class=\"fas fa-sign-out-alt me-1\"></i>{{'ADB_HEADER.LOGOUT'|translate}}\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!initials\">\r\n <div class=\"d-flex justify-content-center\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"login()\" id=\"start-login\">{{'ADB_HEADER.LOGIN'|translate}}</button>\r\n </div>\r\n <a *ngIf=\"navigation\" class=\"d-block mt-3\" href=\"{{navigation.createAccountLink}}?lang={{trans.currentLang}}&returnUrl={{url}}\">\r\n {{'ADB_HEADER.CREATE_USER'|translate}}\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"menu\" *ngIf=\"showMenu\">\r\n <div class=\"menu-body\" *ngIf=\"navigation\">\r\n <div class=\"px-3 pt-3 mb-1\">\r\n <div class=\"d-flex justify-content-between flex-wrap gap-2 mb-2\">\r\n <div>\r\n <div class=\"d-flex d-md-none align-items-center gap-2\" *ngIf=\"initials\">\r\n <span class=\"initials me-2\">{{initials}}</span>\r\n <button type=\"button\" (click)=\"logout()\" class=\"btn btn-primary\">\r\n {{'ADB_HEADER.LOGOUT'|translate}}\r\n </button>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-none\" *ngIf=\"!initials\">\r\n <button type=\"button\" (click)=\"login()\" class=\"btn btn-primary\" id=\"login\">\r\n {{'ADB_HEADER.LOGIN'|translate}}\r\n </button>\r\n <a href=\"{{navigation.createAccountLink}}?lang={{trans.currentLang}}&returnUrl={{url}}\"\r\n class=\"btn btn-primary text-white\">\r\n {{'ADB_HEADER.CREATE_USER'|translate}}\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <button type=\"button\" *ngIf=\"trans.currentLang==='en'\" (click)=\"setLanguage('sv')\"\r\n class=\"btn btn-primary\">\r\n {{'ADB_HEADER.IN_SWEDISH'|translate}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"trans.currentLang==='sv'\" (click)=\"setLanguage('en')\"\r\n class=\"btn btn-primary\">\r\n {{'ADB_HEADER.IN_ENGLISH'|translate}}\r\n </button>\r\n </div>\r\n </div>\r\n {{'ADB_HEADER.SERVICES'|translate}}\r\n </div>\r\n <div id=\"splash\">\r\n <div class=\"px-3 d-flex flex-column\">\r\n <ul class=\"list-group ms-0 mb-0 ps-0\">\r\n <li class=\"mb-1 list-group-item p-0 rounded\" *ngFor=\"let link of navigation.links\"\r\n [attr.aria-expanded]=\"link.transId===expandedLink?true:false\" role=\"button\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <a href=\"{{link.url}}?lang={{trans.currentLang}}\" class=\"d-flex align-items-center flex-grow-1 p-2\">\r\n <small class=\"fa-stack me-1\" *ngIf=\"link.icon\">\r\n <span class=\"fas fa-circle fa-stack-2x text-primary\"></span>\r\n <span class=\"fas fa-stack-1x fa-inverse\" [ngClass]=\"link.icon\"></span>\r\n </small>\r\n {{link.transId|translate}}\r\n </a>\r\n <button class=\"btn btn-expand me-2\" *ngIf=\"link.children?.length>0\" (click)=\"onExpandLink($event,link.transId)\">\r\n <i class=\"fas fa-chevron-up\" [ngClass]=\"link.transId===expandedLink?'d-block ':'d-none'\"></i>\r\n <i class=\"fas fa-chevron-down\" [ngClass]=\"link.transId!==expandedLink?'d-block ':'d-none'\"></i>\r\n </button>\r\n </div>\r\n <ul class=\"list-unstyled\" [ngClass]=\"link.transId===expandedLink?'d-block':'d-none'\">\r\n <li class=\"py-1 m-0\" [class.pt-0]=\"first\" *ngFor=\"let subLink of link.children;let first = first\" style=\"padding-left:3rem;\">\r\n <a class=\"w-100 d-block\" href=\"{{subLink.url}}?lang={{trans.currentLang}}\">\r\n {{subLink.transId|translate}}\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"navigation.about\" class=\"mt-2 mb-auto\">\r\n <div class=\"mb-1\">{{'ADB_HEADER.CONTACT'|translate}}</div>\r\n <div class=\"mb-1 row\">\r\n <div class=\"col-sm-6 mb-2\">\r\n <div class=\"bg-white p-2 rounded\">\r\n <small class=\"fa-stack\" *ngIf=\"navigation.about.icon\">\r\n <span class=\"fas fa-circle fa-stack-2x text-primary\"></span>\r\n <span class=\"fas fa-stack-1x fa-inverse fa-envelope\"></span>\r\n </small>\r\n <a class=\"bg-white p-2\" href=\"mailto:artfakta@artdatabanken.se\">artfakta@artdatabanken.se</a>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-6 mb-2\">\r\n <div class=\"bg-white p-2 rounded\">\r\n <small class=\"fa-stack\" *ngIf=\"navigation.about.icon\">\r\n <span class=\"fas fa-circle fa-stack-2x text-primary\"></span>\r\n <span class=\"fas fa-stack-1x fa-inverse\" [ngClass]=\"navigation.about.icon\"></span>\r\n </small>\r\n <a [href]=\"navigation.about.url\">{{navigation.about.transId|translate}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height:10rem\"></div>\r\n <div class=\"mb-3\">\r\n {{'ADB_HEADER.DEVELOPED_BY'|translate}}\r\n <a href=\"https://www.artdatabanken.se/\" class=\"text-white\"><u>{{'ADB_HEADER.ARTDATABANKEN'|translate}}</u></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</header>\r\n", directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe } });
|
|
90
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ADBHeaderComponent, decorators: [{
|
|
91
|
+
type: Component,
|
|
92
|
+
args: [{ selector: 'adb-header2', template: "<header id=\"top-header\" (clickOutside)=\"showUserMenu=false;showMenuDropdown(false);\">\r\n <nav class=\"d-flex flex-wrap px-3\">\r\n <div class=\"flex-grow-1 d-flex align-items-center justify-content-between justify-content-md-start\">\r\n <div class=\"logo d-none d-md-block\">\r\n <img src=\"/assets/images/logo.svg\" style=\"height: 3.2rem;\">\r\n </div>\r\n <div class=\"logo ps-2 d-sm-block d-md-none d-flex align-items-center\">\r\n <img src=\"/assets/images/logo_sm_white.png\" style=\"height: 2rem;\">\r\n </div>\r\n <strong class=\"bigger\">{{'ADB_HEADER.TITLE'|translate}}</strong>\r\n </div>\r\n <div *ngIf=\"translationFinished\" class=\"flex-grow-1 d-flex justify-content-lg-between justify-content-end align-items-center\">\r\n <div *ngIf=\"navigation\" class=\"d-flex align-items-center\">\r\n <nav class=\"d-none align-items-center d-lg-flex pe-4 gap-4\" *ngIf=\"navigation\">\r\n <ng-container *ngFor=\"let link of navigation.links\">\r\n <a href=\"{{link.url}}?lang={{trans.currentLang}}\" *ngIf=\"link.topLink\" [ngClass]=\"{'d-none d-xl-block':link.transId==='ADB_HEADER.OBSERVATION'}\">\r\n {{link.transId|translate}}\r\n </a>\r\n </ng-container>\r\n </nav>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-sm py-1 px-2 btn-primary\" (click)=\"showUserMenu = false;showMenuDropdown(!showMenu)\">\r\n {{'ADB_HEADER.MENY'|translate}}\r\n <i class=\"ms-1 fas\" [ngClass]=\"showMenu?'fa-chevron-up':'fa-chevron-down'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"d-none d-md-block ps-4\">\r\n <button *ngIf=\"initials\" type=\"button\" class=\"btn initials\" (click)=\"showUserMenu = !showUserMenu;showMenuDropdown(false)\">{{initials}}</button>\r\n <button *ngIf=\"!initials\" type=\"button\" (click)=\"showUserMenu = !showUserMenu;showMenuDropdown(false)\" class=\"btn btn-link\">\r\n {{'ADB_HEADER.LOGIN'|translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </nav>\r\n <div class=\"menu\" *ngIf=\"showUserMenu\">\r\n <div class=\"menu-body bg-white p-3\" style=\"width:15rem\">\r\n <ng-container *ngIf=\"initials\">\r\n <div class=\"d-flex align-items-center gap-2 text-dark\">\r\n <span class=\"initials\">{{initials}}</span>\r\n <strong>{{fullName}}</strong>\r\n </div>\r\n <hr class=\"mx-n3 text-muted\">\r\n <button (click)=\"logout()\" type=\"button\" class=\"btn btn-link p-0\">\r\n <i class=\"fas fa-sign-out-alt me-1\"></i>{{'ADB_HEADER.LOGOUT'|translate}}\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!initials\">\r\n <div class=\"d-flex justify-content-center\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"login()\" id=\"start-login\">{{'ADB_HEADER.LOGIN'|translate}}</button>\r\n </div>\r\n <a *ngIf=\"navigation\" class=\"d-block mt-3\" href=\"{{navigation.createAccountLink}}?lang={{trans.currentLang}}&returnUrl={{url}}\">\r\n {{'ADB_HEADER.CREATE_USER'|translate}}\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"menu\" *ngIf=\"showMenu\">\r\n <div class=\"menu-body\" *ngIf=\"navigation\">\r\n <div class=\"px-3 pt-3 mb-1\">\r\n <div class=\"d-flex justify-content-between flex-wrap gap-2 mb-2\">\r\n <div>\r\n <div class=\"d-flex d-md-none align-items-center gap-2\" *ngIf=\"initials\">\r\n <span class=\"initials me-2\">{{initials}}</span>\r\n <button type=\"button\" (click)=\"logout()\" class=\"btn btn-primary\">\r\n {{'ADB_HEADER.LOGOUT'|translate}}\r\n </button>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-none\" *ngIf=\"!initials\">\r\n <button type=\"button\" (click)=\"login()\" class=\"btn btn-primary\" id=\"login\">\r\n {{'ADB_HEADER.LOGIN'|translate}}\r\n </button>\r\n <a href=\"{{navigation.createAccountLink}}?lang={{trans.currentLang}}&returnUrl={{url}}\"\r\n class=\"btn btn-primary text-white\">\r\n {{'ADB_HEADER.CREATE_USER'|translate}}\r\n </a>\r\n </div>\r\n </div>\r\n <div>\r\n <button type=\"button\" *ngIf=\"trans.currentLang==='en'\" (click)=\"setLanguage('sv')\"\r\n class=\"btn btn-primary\">\r\n {{'ADB_HEADER.IN_SWEDISH'|translate}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"trans.currentLang==='sv'\" (click)=\"setLanguage('en')\"\r\n class=\"btn btn-primary\">\r\n {{'ADB_HEADER.IN_ENGLISH'|translate}}\r\n </button>\r\n </div>\r\n </div>\r\n {{'ADB_HEADER.SERVICES'|translate}}\r\n </div>\r\n <div id=\"splash\">\r\n <div class=\"px-3 d-flex flex-column\">\r\n <ul class=\"list-group ms-0 mb-0 ps-0\">\r\n <li class=\"mb-1 list-group-item p-0 rounded\" *ngFor=\"let link of navigation.links\"\r\n [attr.aria-expanded]=\"link.transId===expandedLink?true:false\" role=\"button\">\r\n <div class=\"d-flex align-items-center justify-content-between\">\r\n <a href=\"{{link.url}}?lang={{trans.currentLang}}\" class=\"d-flex align-items-center flex-grow-1 p-2\">\r\n <small class=\"fa-stack me-1\" *ngIf=\"link.icon\">\r\n <span class=\"fas fa-circle fa-stack-2x text-primary\"></span>\r\n <span class=\"fas fa-stack-1x fa-inverse\" [ngClass]=\"link.icon\"></span>\r\n </small>\r\n {{link.transId|translate}}\r\n </a>\r\n <button class=\"btn btn-expand me-2\" *ngIf=\"link.children?.length>0\" (click)=\"onExpandLink($event,link.transId)\">\r\n <i class=\"fas fa-chevron-up\" [ngClass]=\"link.transId===expandedLink?'d-block ':'d-none'\"></i>\r\n <i class=\"fas fa-chevron-down\" [ngClass]=\"link.transId!==expandedLink?'d-block ':'d-none'\"></i>\r\n </button>\r\n </div>\r\n <ul class=\"list-unstyled\" [ngClass]=\"link.transId===expandedLink?'d-block':'d-none'\">\r\n <li class=\"py-1 m-0\" [class.pt-0]=\"first\" *ngFor=\"let subLink of link.children;let first = first\" style=\"padding-left:3rem;\">\r\n <a class=\"w-100 d-block\" href=\"{{subLink.url}}?lang={{trans.currentLang}}\">\r\n {{subLink.transId|translate}}\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"navigation.about\" class=\"mt-2 mb-auto\">\r\n <div class=\"mb-1\">{{'ADB_HEADER.CONTACT'|translate}}</div>\r\n <div class=\"mb-1 row\">\r\n <div class=\"col-sm-6 mb-2\">\r\n <div class=\"bg-white p-2 rounded\">\r\n <small class=\"fa-stack\" *ngIf=\"navigation.about.icon\">\r\n <span class=\"fas fa-circle fa-stack-2x text-primary\"></span>\r\n <span class=\"fas fa-stack-1x fa-inverse fa-envelope\"></span>\r\n </small>\r\n <a class=\"bg-white p-2\" href=\"mailto:artfakta@artdatabanken.se\">artfakta@artdatabanken.se</a>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-6 mb-2\">\r\n <div class=\"bg-white p-2 rounded\">\r\n <small class=\"fa-stack\" *ngIf=\"navigation.about.icon\">\r\n <span class=\"fas fa-circle fa-stack-2x text-primary\"></span>\r\n <span class=\"fas fa-stack-1x fa-inverse\" [ngClass]=\"navigation.about.icon\"></span>\r\n </small>\r\n <a [href]=\"navigation.about.url\">{{navigation.about.transId|translate}}</a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div style=\"height:10rem\"></div>\r\n <div class=\"mb-3\">\r\n {{'ADB_HEADER.DEVELOPED_BY'|translate}}\r\n <a href=\"https://www.artdatabanken.se/\" class=\"text-white\"><u>{{'ADB_HEADER.ARTDATABANKEN'|translate}}</u></a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</header>\r\n" }]
|
|
93
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EnvironmentService }, { type: i3.TranslateService }]; }, propDecorators: { loginClicked: [{
|
|
94
|
+
type: Output
|
|
95
|
+
}], logoutClicked: [{
|
|
96
|
+
type: Output
|
|
97
|
+
}], dropMenuChange: [{
|
|
98
|
+
type: Output
|
|
99
|
+
}], userName: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}] } });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnRkYXRhLXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvYWRiLWhlYWRlci9hZGItaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FydGRhdGEtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9hZGItaGVhZGVyL2FkYi1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYsT0FBTyxFQUFZLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBUTlDLE1BQU0sT0FBTyxrQkFBa0I7SUF1QjdCLFlBQ1UsVUFBc0IsRUFDdEIsVUFBOEIsRUFDL0IsS0FBdUI7UUFGdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQXpCeEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXZELHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQVk1QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBUXJCLENBQUM7SUFwQkQsSUFBYSxRQUFRLENBQUMsUUFBZ0I7UUFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FB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SUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLDZEQUE2RDtJQUMvRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVUsRUFBRSxPQUFlO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssT0FBTyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7O2tJQXpGVSxrQkFBa0I7c0hBQWxCLGtCQUFrQixrTUNYL0IseTlUQXVKQTsyRkQ1SWEsa0JBQWtCO2tCQUo5QixTQUFTOytCQUNFLGFBQWE7aUtBS2IsWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR00sUUFBUTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4vZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb24gfSBmcm9tICcuL25hdmlnYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FkYi1oZWFkZXIyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRiLWhlYWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFEQkhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBAT3V0cHV0KCkgbG9naW5DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBsb2dvdXRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkcm9wTWVudUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBmdWxsTmFtZTogc3RyaW5nO1xyXG4gIHRyYW5zbGF0aW9uRmluaXNoZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZXQgdXNlck5hbWUoZnVsbE5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5mdWxsTmFtZSA9IGZ1bGxOYW1lO1xyXG4gICAgY29uc3Qgc3BsaXR0ZWQgPSBmdWxsTmFtZS5zcGxpdCgnICcpO1xyXG4gICAgaWYgKHNwbGl0dGVkPy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IGluaXRpYWxzID0gc3BsaXR0ZWQuc2hpZnQoKS5jaGFyQXQoMCkgKyBzcGxpdHRlZC5wb3AoKS5jaGFyQXQoMCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbHMgPSBpbml0aWFscy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0aWFscyA9IHRoaXMuZnVsbE5hbWUgPyB0aGlzLmZ1bGxOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpIDogdGhpcy5mdWxsTmFtZTtcclxuICAgIH1cclxuICB9O1xyXG4gIGluaXRpYWxzOiBzdHJpbmc7XHJcbiAgc2hvd01lbnUgPSBmYWxzZTtcclxuICBzaG93VXNlck1lbnUgPSBmYWxzZTtcclxuICBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uO1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIGV4cGFuZGVkTGluazogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBlbnZTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdHJhbnM6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmVudlNlcnZpY2UuZW52aXJvbm1lbnQucmVzb3VyY2VVcmw7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5odHRwQ2xpZW50LmdldDxOYXZpZ2F0aW9uPihiYXNlVXJsICsgJy9hc3NldHMvbGlua3MuanNvbicpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb24gPSByZXN1bHQ7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLmluaXRUcmFuc2xhdGlvbnMoYmFzZVVybCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUcmFuc2xhdGlvbnMoYmFzZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50cmFucy5zdG9yZS50cmFuc2xhdGlvbnNbdGhpcy50cmFucy5jdXJyZW50TGFuZ10pIHtcclxuICAgICAgdGhpcy5sb2FkVHJhbnNsYXRpb24oYmFzZVVybCwgdGhpcy50cmFucy5jdXJyZW50TGFuZyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy50cmFucy5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uRmluaXNoZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5sb2FkVHJhbnNsYXRpb24oYmFzZVVybCwgZXZlbnQubGFuZyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRUcmFuc2xhdGlvbihiYXNlVXJsOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgLy9UT0RPOiBQcmVwYXJlIGZvciBkaWZmZW50cyBsYW5nIHRoZW4gZW4gc3YgKGVuLUdCKSBvciBhZGQgbW9yZSBmaWxlcyBpbiBkZXZjb21wb25lbnRzZXJ2ZXIgOilcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmh0dHBDbGllbnQuZ2V0KGJhc2VVcmwgKyBgL2Fzc2V0cy9pMThuLyR7bGFuZ30uanNvbmApLnN1YnNjcmliZSh0cmFuc2xhdGlvbnMgPT4ge1xyXG4gICAgICB0aGlzLnRyYW5zLnNldFRyYW5zbGF0aW9uKGxhbmcsIHRyYW5zbGF0aW9ucywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRpb25GaW5pc2hlZCA9IHRydWU7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBzaG93TWVudURyb3Bkb3duKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3dNZW51ICE9PSBzaG93KSB7XHJcbiAgICAgIHRoaXMuc2hvd01lbnUgPSBzaG93O1xyXG4gICAgICB0aGlzLmRyb3BNZW51Q2hhbmdlLmVtaXQoc2hvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRMYW5ndWFnZShsYW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zLnVzZShsYW5nKTtcclxuICAgIHRoaXMuc2hvd01lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuZHJvcE1lbnVDaGFuZ2UuZW1pdChmYWxzZSk7XHJcbiAgICAvL1RPRE86IHNldCBsb2NhbHN0b3JhZ2UvY29va2llcyBvciBwcm9iYWx5IGV2ZW50IHRvIG1haW4gYXBwXHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZExpbmsoZXZlbnQ6IGFueSwgdHJhbnNJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkTGluayA9PT0gdHJhbnNJZCkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkTGluayA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRMaW5rID0gdHJhbnNJZDtcclxuICB9XHJcblxyXG4gIGxvZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2dpbkNsaWNrZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2dvdXRDbGlja2VkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgaW5pdEFsbFRyYW5zbGF0aW9ucyhiYXNlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAvLyAgIGNvbnN0IHRyYW5zJCA9IGZvcmtKb2luKFt0aGlzLmh0dHBDbGllbnQuZ2V0KGJhc2VVcmwgKyAnL2Fzc2V0cy9pMThuL2VuLmpzb24nKSwgdGhpcy5odHRwQ2xpZW50LmdldChiYXNlVXJsICsgJy9hc3NldHMvaTE4bi9zdi5qc29uJyldKVxyXG4gIC8vICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRyYW5zJC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAvLyAgICAgdGhpcy50cmFucy5zZXRUcmFuc2xhdGlvbignZW4nLCByZXN1bHRbMF0sIHRydWUpO1xyXG4gIC8vICAgICB0aGlzLnRyYW5zLnNldFRyYW5zbGF0aW9uKCdzdicsIHJlc3VsdFsxXSwgdHJ1ZSk7XHJcbiAgLy8gICB9KSk7XHJcbiAgLy8gfVxyXG59XHJcblxyXG4iLCI8aGVhZGVyIGlkPVwidG9wLWhlYWRlclwiIChjbGlja091dHNpZGUpPVwic2hvd1VzZXJNZW51PWZhbHNlO3Nob3dNZW51RHJvcGRvd24oZmFsc2UpO1wiPlxyXG4gICAgPG5hdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAgcHgtM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGp1c3RpZnktY29udGVudC1tZC1zdGFydFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nbyBkLW5vbmUgZC1tZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9sb2dvLnN2Z1wiIHN0eWxlPVwiaGVpZ2h0OiAzLjJyZW07XCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nbyBwcy0yIGQtc20tYmxvY2sgZC1tZC1ub25lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvbG9nb19zbV93aGl0ZS5wbmdcIiBzdHlsZT1cImhlaWdodDogMnJlbTtcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJiaWdnZXJcIj57eydBREJfSEVBREVSLlRJVExFJ3x0cmFuc2xhdGV9fTwvc3Ryb25nPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0cmFuc2xhdGlvbkZpbmlzaGVkXCIgY2xhc3M9XCJmbGV4LWdyb3ctMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWxnLWJldHdlZW4ganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5hdmlnYXRpb25cIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9XCJkLW5vbmUgYWxpZ24taXRlbXMtY2VudGVyIGQtbGctZmxleCBwZS00IGdhcC00XCIgKm5nSWY9XCJuYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGluayBvZiBuYXZpZ2F0aW9uLmxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2xpbmsudXJsfX0/bGFuZz17e3RyYW5zLmN1cnJlbnRMYW5nfX1cIiAqbmdJZj1cImxpbmsudG9wTGlua1wiIFtuZ0NsYXNzXT1cInsnZC1ub25lIGQteGwtYmxvY2snOmxpbmsudHJhbnNJZD09PSdBREJfSEVBREVSLk9CU0VSVkFUSU9OJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGluay50cmFuc0lkfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gcHktMSBweC0yIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInNob3dVc2VyTWVudSA9IGZhbHNlO3Nob3dNZW51RHJvcGRvd24oIXNob3dNZW51KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBREJfSEVBREVSLk1FTlknfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibXMtMSBmYXNcIiBbbmdDbGFzc109XCJzaG93TWVudT8nZmEtY2hldnJvbi11cCc6J2ZhLWNoZXZyb24tZG93bidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1ibG9jayBwcy00XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5pdGlhbHNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gaW5pdGlhbHNcIiAoY2xpY2spPVwic2hvd1VzZXJNZW51ID0gIXNob3dVc2VyTWVudTtzaG93TWVudURyb3Bkb3duKGZhbHNlKVwiPnt7aW5pdGlhbHN9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpbml0aWFsc1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2hvd1VzZXJNZW51ID0gIXNob3dVc2VyTWVudTtzaG93TWVudURyb3Bkb3duKGZhbHNlKVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snQURCX0hFQURFUi5MT0dJTid8dHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmF2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1lbnVcIiAqbmdJZj1cInNob3dVc2VyTWVudVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWJvZHkgYmctd2hpdGUgcC0zXCIgc3R5bGU9XCJ3aWR0aDoxNXJlbVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5pdGlhbHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHRleHQtZGFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5pdGlhbHNcIj57e2luaXRpYWxzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e2Z1bGxOYW1lfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXgtbjMgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9nb3V0KClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2lnbi1vdXQtYWx0IG1lLTFcIj48L2k+e3snQURCX0hFQURFUi5MT0dPVVQnfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5pdGlhbHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImxvZ2luKClcIiBpZD1cInN0YXJ0LWxvZ2luXCI+e3snQURCX0hFQURFUi5MT0dJTid8dHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJuYXZpZ2F0aW9uXCIgY2xhc3M9XCJkLWJsb2NrIG10LTNcIiBocmVmPVwie3tuYXZpZ2F0aW9uLmNyZWF0ZUFjY291bnRMaW5rfX0/bGFuZz17e3RyYW5zLmN1cnJlbnRMYW5nfX0mcmV0dXJuVXJsPXt7dXJsfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydBREJfSEVBREVSLkNSRUFURV9VU0VSJ3x0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1lbnVcIiAqbmdJZj1cInNob3dNZW51XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtYm9keVwiICpuZ0lmPVwibmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMyBwdC0zIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC13cmFwIGdhcC0yIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtbWQtbm9uZSBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIiAqbmdJZj1cImluaXRpYWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluaXRpYWxzIG1lLTJcIj57e2luaXRpYWxzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9nb3V0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FEQl9IRUFERVIuTE9HT1VUJ3x0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGQtbWQtbm9uZVwiICpuZ0lmPVwiIWluaXRpYWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibG9naW4oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgaWQ9XCJsb2dpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FEQl9IRUFERVIuTE9HSU4nfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e25hdmlnYXRpb24uY3JlYXRlQWNjb3VudExpbmt9fT9sYW5nPXt7dHJhbnMuY3VycmVudExhbmd9fSZyZXR1cm5Vcmw9e3t1cmx9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LXdoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQURCX0hFQURFUi5DUkVBVEVfVVNFUid8dHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJ0cmFucy5jdXJyZW50TGFuZz09PSdlbidcIiAoY2xpY2spPVwic2V0TGFuZ3VhZ2UoJ3N2JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBREJfSEVBREVSLklOX1NXRURJU0gnfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInRyYW5zLmN1cnJlbnRMYW5nPT09J3N2J1wiIChjbGljayk9XCJzZXRMYW5ndWFnZSgnZW4nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FEQl9IRUFERVIuSU5fRU5HTElTSCd8dHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHt7J0FEQl9IRUFERVIuU0VSVklDRVMnfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwic3BsYXNoXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMyBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIG1zLTAgbWItMCBwcy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTEgbGlzdC1ncm91cC1pdGVtIHAtMCByb3VuZGVkXCIgKm5nRm9yPVwibGV0IGxpbmsgb2YgbmF2aWdhdGlvbi5saW5rc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImxpbmsudHJhbnNJZD09PWV4cGFuZGVkTGluaz90cnVlOmZhbHNlXCIgcm9sZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tsaW5rLnVybH19P2xhbmc9e3t0cmFucy5jdXJyZW50TGFuZ319XCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtZ3Jvdy0xIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmYS1zdGFjayBtZS0xXCIgKm5nSWY9XCJsaW5rLmljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFzIGZhLWNpcmNsZSBmYS1zdGFjay0yeCB0ZXh0LXByaW1hcnlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhcyBmYS1zdGFjay0xeCBmYS1pbnZlcnNlXCIgW25nQ2xhc3NdPVwibGluay5pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xpbmsudHJhbnNJZHx0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1leHBhbmQgbWUtMlwiICpuZ0lmPVwibGluay5jaGlsZHJlbj8ubGVuZ3RoPjBcIiAoY2xpY2spPVwib25FeHBhbmRMaW5rKCRldmVudCxsaW5rLnRyYW5zSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tdXBcIiBbbmdDbGFzc109XCJsaW5rLnRyYW5zSWQ9PT1leHBhbmRlZExpbms/J2QtYmxvY2sgJzonZC1ub25lJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duXCIgW25nQ2xhc3NdPVwibGluay50cmFuc0lkIT09ZXhwYW5kZWRMaW5rPydkLWJsb2NrICc6J2Qtbm9uZSdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIiBbbmdDbGFzc109XCJsaW5rLnRyYW5zSWQ9PT1leHBhbmRlZExpbms/J2QtYmxvY2snOidkLW5vbmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicHktMSBtLTBcIiBbY2xhc3MucHQtMF09XCJmaXJzdFwiICpuZ0Zvcj1cImxldCBzdWJMaW5rIG9mIGxpbmsuY2hpbGRyZW47bGV0IGZpcnN0ID0gZmlyc3RcIiBzdHlsZT1cInBhZGRpbmctbGVmdDozcmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInctMTAwIGQtYmxvY2tcIiBocmVmPVwie3tzdWJMaW5rLnVybH19P2xhbmc9e3t0cmFucy5jdXJyZW50TGFuZ319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3N1YkxpbmsudHJhbnNJZHx0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmF2aWdhdGlvbi5hYm91dFwiIGNsYXNzPVwibXQtMiBtYi1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xXCI+e3snQURCX0hFQURFUi5DT05UQUNUJ3x0cmFuc2xhdGV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMSByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHAtMiByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZhLXN0YWNrXCIgKm5nSWY9XCJuYXZpZ2F0aW9uLmFib3V0Lmljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFzIGZhLWNpcmNsZSBmYS1zdGFjay0yeCB0ZXh0LXByaW1hcnlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhcyBmYS1zdGFjay0xeCBmYS1pbnZlcnNlIGZhLWVudmVsb3BlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJnLXdoaXRlIHAtMlwiIGhyZWY9XCJtYWlsdG86YXJ0ZmFrdGFAYXJ0ZGF0YWJhbmtlbi5zZVwiPmFydGZha3RhQGFydGRhdGFiYW5rZW4uc2U8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHAtMiByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZhLXN0YWNrXCIgKm5nSWY9XCJuYXZpZ2F0aW9uLmFib3V0Lmljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFzIGZhLWNpcmNsZSBmYS1zdGFjay0yeCB0ZXh0LXByaW1hcnlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhcyBmYS1zdGFjay0xeCBmYS1pbnZlcnNlXCIgW25nQ2xhc3NdPVwibmF2aWdhdGlvbi5hYm91dC5pY29uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCJuYXZpZ2F0aW9uLmFib3V0LnVybFwiPnt7bmF2aWdhdGlvbi5hYm91dC50cmFuc0lkfHRyYW5zbGF0ZX19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6MTByZW1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydBREJfSEVBREVSLkRFVkVMT1BFRF9CWSd8dHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3LmFydGRhdGFiYW5rZW4uc2UvXCIgY2xhc3M9XCJ0ZXh0LXdoaXRlXCI+PHU+e3snQURCX0hFQURFUi5BUlREQVRBQkFOS0VOJ3x0cmFuc2xhdGV9fTwvdT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9oZWFkZXI+XHJcbiJdfQ==
|
|
@@ -21,20 +21,20 @@ export class ADBHeaderModule {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
/** @nocollapse */ ADBHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
25
|
-
/** @nocollapse */ ADBHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
|
|
24
|
+
/** @nocollapse */ ADBHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ADBHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
25
|
+
/** @nocollapse */ ADBHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ADBHeaderModule, declarations: [ADBHeaderComponent], imports: [CommonModule,
|
|
26
26
|
HttpClientModule,
|
|
27
27
|
RouterModule,
|
|
28
28
|
TranslateModule,
|
|
29
29
|
DirectivesModule], exports: [ADBHeaderComponent] });
|
|
30
|
-
/** @nocollapse */ ADBHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
30
|
+
/** @nocollapse */ ADBHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ADBHeaderModule, imports: [[
|
|
31
31
|
CommonModule,
|
|
32
32
|
HttpClientModule,
|
|
33
33
|
RouterModule,
|
|
34
34
|
TranslateModule,
|
|
35
35
|
DirectivesModule
|
|
36
36
|
]] });
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ADBHeaderModule, decorators: [{
|
|
38
38
|
type: NgModule,
|
|
39
39
|
args: [{
|
|
40
40
|
declarations: [ADBHeaderComponent],
|
|
@@ -48,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
|
|
|
48
48
|
exports: [ADBHeaderComponent]
|
|
49
49
|
}]
|
|
50
50
|
}] });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLWhlYWRlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnRkYXRhLXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvYWRiLWhlYWRlci9hZGItaGVhZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFjdEUsTUFBTSxPQUFPLGVBQWU7SUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFnQjtRQUNwQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGVBQWU7WUFDekIsU0FBUyxFQUFFO2dCQUNULGtCQUFrQjtnQkFDbEI7b0JBQ0UsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLFdBQVc7aUJBQ3RCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7K0hBWlUsZUFBZTtnSUFBZixlQUFlLGlCQVZYLGtCQUFrQixhQUUvQixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLFlBQVk7UUFDWixlQUFlO1FBQ2YsZ0JBQWdCLGFBRVIsa0JBQWtCO2dJQUVqQixlQUFlLFlBVGpCO1lBQ1AsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osZUFBZTtZQUNmLGdCQUFnQjtTQUNqQjsyRkFHVSxlQUFlO2tCQVgzQixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO29CQUNsQyxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBREJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2FkYi1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRGlyZWN0aXZlc01vZHVsZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZGlyZWN0aXZlcy5tb2R1bGUnO1xyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbQURCSGVhZGVyQ29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgRGlyZWN0aXZlc01vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW0FEQkhlYWRlckNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFEQkhlYWRlck1vZHVsZSB7XHJcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KGVudmlyb25tZW50OiBhbnkpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFEQkhlYWRlck1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IEFEQkhlYWRlck1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6ICdlbnYnLCAvLyB5b3UgY2FuIGFsc28gdXNlIEluamVjdGlvblRva2VuXHJcbiAgICAgICAgICB1c2VWYWx1ZTogZW52aXJvbm1lbnRcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -5,12 +5,12 @@ export class EnvironmentService {
|
|
|
5
5
|
this.environment = environment;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
/** @nocollapse */ EnvironmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
9
|
-
/** @nocollapse */ EnvironmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
8
|
+
/** @nocollapse */ EnvironmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: EnvironmentService, deps: [{ token: 'env' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9
|
+
/** @nocollapse */ EnvironmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: EnvironmentService });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: EnvironmentService, decorators: [{
|
|
11
11
|
type: Injectable
|
|
12
12
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
13
13
|
type: Inject,
|
|
14
14
|
args: ['env']
|
|
15
15
|
}] }]; } });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FydGRhdGEtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9hZGItaGVhZGVyL2Vudmlyb25tZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR25ELE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFBa0MsV0FBVztRQUFYLGdCQUFXLEdBQVgsV0FBVyxDQUFBO0lBQzdDLENBQUM7O2tJQUZRLGtCQUFrQixrQkFDUCxLQUFLO3NJQURoQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTs7MEJBRU0sTUFBTTsyQkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50U2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KCdlbnYnKSBwdWJsaWMgZW52aXJvbm1lbnQpIHtcclxuICAgIH1cclxufSJdfQ==
|
|
File without changes
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { addDays, addMonths, addYears, eachDayOfInterval, eachWeekOfInterval, endOfDay, endOfMonth, getHours, getISOWeek, getMinutes, getMonth, isSameDay, isSameYear, isWithinInterval, startOfDay, startOfMonth, subMonths, subYears } from "date-fns";
|
|
3
|
+
import { Subscription } from "rxjs";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./adb-date-picker.service";
|
|
6
|
+
import * as i2 from "../../directives/click-outside.directive";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "../../pipes/date.pipe";
|
|
9
|
+
import * as i5 from "@ngx-translate/core";
|
|
10
|
+
export class AdbDatePickerComponent {
|
|
11
|
+
constructor(adbDatePickerService) {
|
|
12
|
+
this.adbDatePickerService = adbDatePickerService;
|
|
13
|
+
this.subscriptions = new Subscription();
|
|
14
|
+
this.currentdDate = new Date();
|
|
15
|
+
this.selectedDate = new Date();
|
|
16
|
+
this.weekDays = AdbDatePickerComponent.WEEK_DAYS;
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.subscriptions.add(this.adbDatePickerService.settings$.subscribe(settings => {
|
|
20
|
+
this.range = {
|
|
21
|
+
start: settings?.minDate ? startOfDay(settings.minDate) : null,
|
|
22
|
+
end: settings?.maxDate ? endOfDay(settings.maxDate) : null
|
|
23
|
+
};
|
|
24
|
+
this.createCalendar();
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
onShowYear() {
|
|
28
|
+
this.months = null;
|
|
29
|
+
this.loadYearsInterval();
|
|
30
|
+
}
|
|
31
|
+
onShowMonth() {
|
|
32
|
+
this.years = null;
|
|
33
|
+
this.loadMonths();
|
|
34
|
+
}
|
|
35
|
+
onSelectYear(inYear) {
|
|
36
|
+
this.selectedDate.setFullYear(inYear.getFullYear());
|
|
37
|
+
this.loadMonths();
|
|
38
|
+
this.years = null;
|
|
39
|
+
}
|
|
40
|
+
onSelectMonth(inMonth) {
|
|
41
|
+
this.selectedDate.setMonth(inMonth);
|
|
42
|
+
this.createCalendar();
|
|
43
|
+
this.years = null;
|
|
44
|
+
this.months = null;
|
|
45
|
+
}
|
|
46
|
+
onPrev() {
|
|
47
|
+
if (this.years) {
|
|
48
|
+
this.selectedDate = subYears(this.selectedDate, AdbDatePickerComponent.YEAR_INTERVALL);
|
|
49
|
+
this.loadYearsInterval();
|
|
50
|
+
}
|
|
51
|
+
else if (this.months) {
|
|
52
|
+
this.selectedDate = subYears(this.selectedDate, 1);
|
|
53
|
+
this.loadMonths();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.selectedDate = subMonths(this.selectedDate, 1);
|
|
57
|
+
this.createCalendar();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
onNext() {
|
|
61
|
+
if (this.years) {
|
|
62
|
+
this.selectedDate = addYears(this.selectedDate, AdbDatePickerComponent.YEAR_INTERVALL);
|
|
63
|
+
this.loadYearsInterval();
|
|
64
|
+
}
|
|
65
|
+
else if (this.months) {
|
|
66
|
+
this.selectedDate = addYears(this.selectedDate, 1);
|
|
67
|
+
this.loadMonths();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.selectedDate = addMonths(this.selectedDate, 1);
|
|
71
|
+
this.createCalendar();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
onHide(target) {
|
|
75
|
+
if (!target.hasAttribute('adbdatepicker')) {
|
|
76
|
+
this.adbDatePickerService.hide();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
ngOnDestroy() {
|
|
80
|
+
this.subscriptions.unsubscribe();
|
|
81
|
+
}
|
|
82
|
+
loadMonths() {
|
|
83
|
+
this.months = AdbDatePickerComponent.MONTHS.map(x => {
|
|
84
|
+
return {
|
|
85
|
+
value: x,
|
|
86
|
+
isThisMonth: getMonth(this.selectedDate) === x && isSameYear(this.currentdDate, this.selectedDate)
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
loadYearsInterval() {
|
|
91
|
+
let year = subYears(this.selectedDate, AdbDatePickerComponent.YEAR_INTERVALL);
|
|
92
|
+
const years = [];
|
|
93
|
+
for (let i = 0; i < 16; i++) {
|
|
94
|
+
years.push({
|
|
95
|
+
value: year,
|
|
96
|
+
title: year.getFullYear(),
|
|
97
|
+
isThisYear: isSameYear(year, this.currentdDate)
|
|
98
|
+
});
|
|
99
|
+
year = addYears(year, 1);
|
|
100
|
+
}
|
|
101
|
+
this.years = years;
|
|
102
|
+
}
|
|
103
|
+
onSelectDate(day) {
|
|
104
|
+
this.adbDatePickerService.selectDate(day.value);
|
|
105
|
+
}
|
|
106
|
+
createCalendar() {
|
|
107
|
+
const weeks = [];
|
|
108
|
+
const monthInterval = { start: startOfMonth(this.selectedDate), end: endOfMonth(this.selectedDate) };
|
|
109
|
+
var fnsWweeks = eachWeekOfInterval(monthInterval);
|
|
110
|
+
for (const fnsWeek of fnsWweeks) {
|
|
111
|
+
const week = { weekNumber: 0, days: [] };
|
|
112
|
+
week.weekNumber = getISOWeek(new Date(fnsWeek));
|
|
113
|
+
const weekInterval = { start: new Date(fnsWeek), end: addDays(new Date(fnsWeek), 6) };
|
|
114
|
+
week.days = eachDayOfInterval(weekInterval).map(day => {
|
|
115
|
+
day.setHours(getHours(new Date()));
|
|
116
|
+
day.setMinutes(getMinutes(new Date()));
|
|
117
|
+
return {
|
|
118
|
+
value: day,
|
|
119
|
+
isInRange: isWithinInterval(day, this.range),
|
|
120
|
+
isToday: isSameDay(day, this.currentdDate),
|
|
121
|
+
inMonth: monthInterval.start.getMonth() === day.getMonth()
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
weeks.push(week);
|
|
125
|
+
}
|
|
126
|
+
this.weeks = weeks;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
AdbDatePickerComponent.MONTHS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
|
130
|
+
AdbDatePickerComponent.WEEK_DAYS = ['1', '2', '3', '4', '5', '6', '7'];
|
|
131
|
+
AdbDatePickerComponent.YEAR_INTERVALL = 8;
|
|
132
|
+
/** @nocollapse */ AdbDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AdbDatePickerComponent, deps: [{ token: i1.AdbDatePickerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
+
/** @nocollapse */ AdbDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: AdbDatePickerComponent, selector: "adb-date-picker", ngImport: i0, template: "<nav class=\"bg-white shadow rounded\" style=\"width:350px\" (adbClickOutside)=\"onHide($event)\">\r\n <header class=\"bg-primary p-2 rounded-top d-flex justify-content-between align-items-center gap-1\">\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onPrev()\"><span class=\"fa fa-chevron-left\"></span></button>\r\n <ng-container *ngIf=\"!years&&!months\">\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onShowMonth()\">{{selectedDate|adbLocaleDate:'MMM'}}</button>\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onShowYear()\">{{selectedDate|date:'yyyy'}}</button>\r\n </ng-container>\r\n <button *ngIf=\"years\" class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"years=null\">{{years[0].title}} - {{years[years.length-1].title}}</button>\r\n <button *ngIf=\"months\" class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onShowYear()\">{{selectedDate|date:'yyyy'}}</button>\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onNext()\"><span class=\"fa fa-chevron-right\"></span></button>\r\n </header>\r\n <div class=\"p-0 border calendar\">\r\n <ul class=\"list-unstyled row\" *ngIf=\"years\">\r\n <li class=\"col-3 text-center px-2 py-3\" *ngFor=\"let year of years\">\r\n <button class=\"btn btn-sm btn-outline-secondary rounded-pill\" (click)=\"onSelectYear(year.value)\" [class.active]=\"year.hasObservation\" [ngClass]=\"{'border border-secondary':year.isThisYear}\">{{year.title}}</button>\r\n </li>\r\n </ul>\r\n <ul class=\"list-unstyled row\" *ngIf=\"months\">\r\n <li class=\"col-4 text-center px-2 py-3\" *ngFor=\"let month of months\">\r\n <button class=\"btn btn-sm btn-outline-secondary rounded-pill\" (click)=\"onSelectMonth(month.value)\" [class.active]=\"month.observation\" [ngClass]=\"{'border border-secondary':month.isThisMonth}\">\r\n {{'MONTHS.'+(month.value+1)|translate}}\r\n </button>\r\n </li>\r\n </ul>\r\n <div class=\"days\">\r\n <div class=\"text-center border-bottom py-2 text-muted\" *ngFor=\"let weekDay of weekDays\">{{'WEEK_DAYS.'+weekDay|translate}}</div>\r\n <ng-container *ngFor=\"let week of weeks\">\r\n <button class=\"btn rounded-circle p-0 m-2\" *ngFor=\"let day of week.days\" (click)=\"onSelectDate(day)\"\r\n [class.border]=\"day.isToday\" [ngClass]=\"{'pe-none text-muted opacity-50':!day.inMonth||!day.isInRange}\">\r\n <small>{{day.value|date:'d'}}</small>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</nav>", directives: [{ type: i2.ClickOutsideDirective, selector: "[adbClickOutside]", outputs: ["adbClickOutside"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "adbLocaleDate": i4.LocaleDatePipe, "date": i3.DatePipe, "translate": i5.TranslatePipe } });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AdbDatePickerComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ selector: 'adb-date-picker', template: "<nav class=\"bg-white shadow rounded\" style=\"width:350px\" (adbClickOutside)=\"onHide($event)\">\r\n <header class=\"bg-primary p-2 rounded-top d-flex justify-content-between align-items-center gap-1\">\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onPrev()\"><span class=\"fa fa-chevron-left\"></span></button>\r\n <ng-container *ngIf=\"!years&&!months\">\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onShowMonth()\">{{selectedDate|adbLocaleDate:'MMM'}}</button>\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onShowYear()\">{{selectedDate|date:'yyyy'}}</button>\r\n </ng-container>\r\n <button *ngIf=\"years\" class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"years=null\">{{years[0].title}} - {{years[years.length-1].title}}</button>\r\n <button *ngIf=\"months\" class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onShowYear()\">{{selectedDate|date:'yyyy'}}</button>\r\n <button class=\"btn btn-primary text-white rounded-pill\" type=\"button\" (click)=\"onNext()\"><span class=\"fa fa-chevron-right\"></span></button>\r\n </header>\r\n <div class=\"p-0 border calendar\">\r\n <ul class=\"list-unstyled row\" *ngIf=\"years\">\r\n <li class=\"col-3 text-center px-2 py-3\" *ngFor=\"let year of years\">\r\n <button class=\"btn btn-sm btn-outline-secondary rounded-pill\" (click)=\"onSelectYear(year.value)\" [class.active]=\"year.hasObservation\" [ngClass]=\"{'border border-secondary':year.isThisYear}\">{{year.title}}</button>\r\n </li>\r\n </ul>\r\n <ul class=\"list-unstyled row\" *ngIf=\"months\">\r\n <li class=\"col-4 text-center px-2 py-3\" *ngFor=\"let month of months\">\r\n <button class=\"btn btn-sm btn-outline-secondary rounded-pill\" (click)=\"onSelectMonth(month.value)\" [class.active]=\"month.observation\" [ngClass]=\"{'border border-secondary':month.isThisMonth}\">\r\n {{'MONTHS.'+(month.value+1)|translate}}\r\n </button>\r\n </li>\r\n </ul>\r\n <div class=\"days\">\r\n <div class=\"text-center border-bottom py-2 text-muted\" *ngFor=\"let weekDay of weekDays\">{{'WEEK_DAYS.'+weekDay|translate}}</div>\r\n <ng-container *ngFor=\"let week of weeks\">\r\n <button class=\"btn rounded-circle p-0 m-2\" *ngFor=\"let day of week.days\" (click)=\"onSelectDate(day)\"\r\n [class.border]=\"day.isToday\" [ngClass]=\"{'pe-none text-muted opacity-50':!day.inMonth||!day.isInRange}\">\r\n <small>{{day.value|date:'d'}}</small>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</nav>" }]
|
|
137
|
+
}], ctorParameters: function () { return [{ type: i1.AdbDatePickerService }]; } });
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FydGRhdGEtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9hZGItZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJ0ZGF0YS1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2FkYi1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDelAsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQU9wQyxNQUFNLE9BQU8sc0JBQXNCO0lBYS9CLFlBQW9CLG9CQUEwQztRQUExQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBWnRELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUkzQyxpQkFBWSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEMsaUJBQVksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBR2hDLGFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7SUFLNUMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJ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O29CQUMxQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsUUFBUSxFQUFFO2lCQUM3RCxDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQzs7QUFwSU0sNkJBQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEQsZ0NBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELHFDQUFjLEdBQUcsQ0FBQyxDQUFDO3NJQUpqQixzQkFBc0I7MEhBQXRCLHNCQUFzQix1RENUbkMsbzJGQWtDTTsyRkR6Qk8sc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNJLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGFkZERheXMsIGFkZE1vbnRocywgYWRkWWVhcnMsIGVhY2hEYXlPZkludGVydmFsLCBlYWNoV2Vla09mSW50ZXJ2YWwsIGVuZE9mRGF5LCBlbmRPZk1vbnRoLCBnZXRIb3VycywgZ2V0SVNPV2VlaywgZ2V0TWludXRlcywgZ2V0TW9udGgsIGlzU2FtZURheSwgaXNTYW1lWWVhciwgaXNXaXRoaW5JbnRlcnZhbCwgc3RhcnRPZkRheSwgc3RhcnRPZk1vbnRoLCBzdWJNb250aHMsIHN1YlllYXJzIH0gZnJvbSBcImRhdGUtZm5zXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFkYkRhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSBcIi4vYWRiLWRhdGUtcGlja2VyLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhZGItZGF0ZS1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FkYi1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkYkRhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICBzdGF0aWMgTU9OVEhTID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMV07XHJcbiAgICBzdGF0aWMgV0VFS19EQVlTID0gWycxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3J107XHJcbiAgICBzdGF0aWMgWUVBUl9JTlRFUlZBTEwgPSA4O1xyXG4gICAgY3VycmVudGREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB5ZWFyczogeyB2YWx1ZTogRGF0ZSwgdGl0bGU6IHN0cmluZywgaXNUaGlzWWVhcjogYm9vbGVhbiB9W107XHJcbiAgICBtb250aHM6IHsgdmFsdWU6IG51bWJlciwgaXNUaGlzTW9udGg6IGJvb2xlYW4gfVtdO1xyXG4gICAgd2Vla0RheXMgPSBBZGJEYXRlUGlja2VyQ29tcG9uZW50LldFRUtfREFZUztcclxuICAgIHdlZWtzOiBQaWNrZXJXZWVrW107XHJcbiAgICByYW5nZTogeyBzdGFydDogYW55OyBlbmQ6IGFueTsgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFkYkRhdGVQaWNrZXJTZXJ2aWNlOiBBZGJEYXRlUGlja2VyU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hZGJEYXRlUGlja2VyU2VydmljZS5zZXR0aW5ncyQuc3Vic2NyaWJlKHNldHRpbmdzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yYW5nZSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiBzZXR0aW5ncz8ubWluRGF0ZSA/IHN0YXJ0T2ZEYXkoc2V0dGluZ3MubWluRGF0ZSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgZW5kOiBzZXR0aW5ncz8ubWF4RGF0ZSA/IGVuZE9mRGF5KHNldHRpbmdzLm1heERhdGUpIDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNhbGVuZGFyKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2hvd1llYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb250aHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubG9hZFllYXJzSW50ZXJ2YWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNob3dNb250aCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnllYXJzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdFllYXIoaW5ZZWFyPzogRGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLnNldEZ1bGxZZWFyKGluWWVhci5nZXRGdWxsWWVhcigpKTtcclxuICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcclxuICAgICAgICB0aGlzLnllYXJzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdE1vbnRoKGluTW9udGg/OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5zZXRNb250aChpbk1vbnRoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUNhbGVuZGFyKCk7XHJcbiAgICAgICAgdGhpcy55ZWFycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb250aHMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUHJldigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy55ZWFycykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHN1YlllYXJzKHRoaXMuc2VsZWN0ZWREYXRlLCBBZGJEYXRlUGlja2VyQ29tcG9uZW50LllFQVJfSU5URVJWQUxMKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnNJbnRlcnZhbCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb250aHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBzdWJZZWFycyh0aGlzLnNlbGVjdGVkRGF0ZSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gc3ViTW9udGhzKHRoaXMuc2VsZWN0ZWREYXRlLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDYWxlbmRhcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk5leHQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMueWVhcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBhZGRZZWFycyh0aGlzLnNlbGVjdGVkRGF0ZSwgQWRiRGF0ZVBpY2tlckNvbXBvbmVudC5ZRUFSX0lOVEVSVkFMTCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFllYXJzSW50ZXJ2YWwoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9udGhzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gYWRkWWVhcnModGhpcy5zZWxlY3RlZERhdGUsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGFkZE1vbnRocyh0aGlzLnNlbGVjdGVkRGF0ZSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ2FsZW5kYXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG9uSGlkZSh0YXJnZXQ6IGFueSkge1xyXG4gICAgICAgIGlmICghdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnYWRiZGF0ZXBpY2tlcicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRiRGF0ZVBpY2tlclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRNb250aHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb250aHMgPSBBZGJEYXRlUGlja2VyQ29tcG9uZW50Lk1PTlRIUy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogeCxcclxuICAgICAgICAgICAgICAgIGlzVGhpc01vbnRoOiBnZXRNb250aCh0aGlzLnNlbGVjdGVkRGF0ZSkgPT09IHggJiYgaXNTYW1lWWVhcih0aGlzLmN1cnJlbnRkRGF0ZSwgdGhpcy5zZWxlY3RlZERhdGUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRZZWFyc0ludGVydmFsKCkge1xyXG4gICAgICAgIGxldCB5ZWFyID0gc3ViWWVhcnModGhpcy5zZWxlY3RlZERhdGUsIEFkYkRhdGVQaWNrZXJDb21wb25lbnQuWUVBUl9JTlRFUlZBTEwpO1xyXG4gICAgICAgIGNvbnN0IHllYXJzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHllYXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHllYXIsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogeWVhci5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgICAgICAgICAgaXNUaGlzWWVhcjogaXNTYW1lWWVhcih5ZWFyLCB0aGlzLmN1cnJlbnRkRGF0ZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHllYXIgPSBhZGRZZWFycyh5ZWFyLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy55ZWFycyA9IHllYXJzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0RGF0ZShkYXk6IFBpY2tlckRheSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWRiRGF0ZVBpY2tlclNlcnZpY2Uuc2VsZWN0RGF0ZShkYXkudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQ2FsZW5kYXIoKSB7XHJcbiAgICAgICAgY29uc3Qgd2Vla3MgPSBbXTtcclxuICAgICAgICBjb25zdCBtb250aEludGVydmFsID0geyBzdGFydDogc3RhcnRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlKSwgZW5kOiBlbmRPZk1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlKSB9O1xyXG4gICAgICAgIHZhciBmbnNXd2Vla3MgPSBlYWNoV2Vla09mSW50ZXJ2YWwobW9udGhJbnRlcnZhbCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmbnNXZWVrIG9mIGZuc1d3ZWVrcykge1xyXG4gICAgICAgICAgICBjb25zdCB3ZWVrID0geyB3ZWVrTnVtYmVyOiAwLCBkYXlzOiBbXSB9O1xyXG4gICAgICAgICAgICB3ZWVrLndlZWtOdW1iZXIgPSBnZXRJU09XZWVrKG5ldyBEYXRlKGZuc1dlZWspKTtcclxuICAgICAgICAgICAgY29uc3Qgd2Vla0ludGVydmFsID0geyBzdGFydDogbmV3IERhdGUoZm5zV2VlayksIGVuZDogYWRkRGF5cyhuZXcgRGF0ZShmbnNXZWVrKSwgNikgfTtcclxuICAgICAgICAgICAgd2Vlay5kYXlzID0gZWFjaERheU9mSW50ZXJ2YWwod2Vla0ludGVydmFsKS5tYXAoZGF5ID0+IHtcclxuICAgICAgICAgICAgICAgIGRheS5zZXRIb3VycyhnZXRIb3VycyhuZXcgRGF0ZSgpKSk7XHJcbiAgICAgICAgICAgICAgICBkYXkuc2V0TWludXRlcyhnZXRNaW51dGVzKG5ldyBEYXRlKCkpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRheSxcclxuICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2U6IGlzV2l0aGluSW50ZXJ2YWwoZGF5LCB0aGlzLnJhbmdlKSxcclxuICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiBpc1NhbWVEYXkoZGF5LCB0aGlzLmN1cnJlbnRkRGF0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgaW5Nb250aDogbW9udGhJbnRlcnZhbC5zdGFydC5nZXRNb250aCgpID09PSBkYXkuZ2V0TW9udGgoKVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdlZWtzLnB1c2god2Vlayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Vla3MgPSB3ZWVrcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJXZWVrIHtcclxuICAgIHdlZWtzOiB7XHJcbiAgICAgICAgd2Vla051bWJlcjogbnVtYmVyO1xyXG4gICAgICAgIGRheXM6IFBpY2tlckRheVtdXHJcbiAgICB9W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VyRGF5IHtcclxuICAgIHZhbHVlOiBEYXRlLFxyXG4gICAgaXNUb2RheTogYm9vbGVhblxyXG4gICAgaW5Nb250aDogYm9vbGVhblxyXG59IiwiPG5hdiBjbGFzcz1cImJnLXdoaXRlIHNoYWRvdyByb3VuZGVkXCIgc3R5bGU9XCJ3aWR0aDozNTBweFwiIChhZGJDbGlja091dHNpZGUpPVwib25IaWRlKCRldmVudClcIj5cclxuICAgIDxoZWFkZXIgY2xhc3M9XCJiZy1wcmltYXJ5IHAtMiByb3VuZGVkLXRvcCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LXdoaXRlICByb3VuZGVkLXBpbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uUHJldigpXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF5ZWFycyYmIW1vbnRoc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1waWxsXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNob3dNb250aCgpXCI+e3tzZWxlY3RlZERhdGV8YWRiTG9jYWxlRGF0ZTonTU1NJ319PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLXBpbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2hvd1llYXIoKVwiPnt7c2VsZWN0ZWREYXRlfGRhdGU6J3l5eXknfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwieWVhcnNcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LXdoaXRlIHJvdW5kZWQtcGlsbFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwieWVhcnM9bnVsbFwiPnt7eWVhcnNbMF0udGl0bGV9fSAtIHt7eWVhcnNbeWVhcnMubGVuZ3RoLTFdLnRpdGxlfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwibW9udGhzXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC13aGl0ZSByb3VuZGVkLXBpbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2hvd1llYXIoKVwiPnt7c2VsZWN0ZWREYXRlfGRhdGU6J3l5eXknfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtd2hpdGUgcm91bmRlZC1waWxsXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbk5leHQoKVwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodFwiPjwvc3Bhbj48L2J1dHRvbj5cclxuICAgIDwvaGVhZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtMCBib3JkZXIgY2FsZW5kYXJcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIHJvd1wiICpuZ0lmPVwieWVhcnNcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwiY29sLTMgdGV4dC1jZW50ZXIgcHgtMiBweS0zXCIgKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25TZWxlY3RZZWFyKHllYXIudmFsdWUpXCIgW2NsYXNzLmFjdGl2ZV09XCJ5ZWFyLmhhc09ic2VydmF0aW9uXCIgW25nQ2xhc3NdPVwieydib3JkZXIgYm9yZGVyLXNlY29uZGFyeSc6eWVhci5pc1RoaXNZZWFyfVwiPnt7eWVhci50aXRsZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIHJvd1wiICpuZ0lmPVwibW9udGhzXCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImNvbC00IHRleHQtY2VudGVyIHB4LTIgcHktM1wiICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwib25TZWxlY3RNb250aChtb250aC52YWx1ZSlcIiBbY2xhc3MuYWN0aXZlXT1cIm1vbnRoLm9ic2VydmF0aW9uXCIgW25nQ2xhc3NdPVwieydib3JkZXIgYm9yZGVyLXNlY29uZGFyeSc6bW9udGguaXNUaGlzTW9udGh9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snTU9OVEhTLicrKG1vbnRoLnZhbHVlKzEpfHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXlzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBib3JkZXItYm90dG9tIHB5LTIgdGV4dC1tdXRlZFwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzXCI+e3snV0VFS19EQVlTLicrd2Vla0RheXx0cmFuc2xhdGV9fTwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB3ZWVrIG9mIHdlZWtzXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHJvdW5kZWQtY2lyY2xlIHAtMCBtLTJcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWsuZGF5c1wiIChjbGljayk9XCJvblNlbGVjdERhdGUoZGF5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlcl09XCJkYXkuaXNUb2RheVwiIFtuZ0NsYXNzXT1cInsncGUtbm9uZSB0ZXh0LW11dGVkIG9wYWNpdHktNTAnOiFkYXkuaW5Nb250aHx8IWRheS5pc0luUmFuZ2V9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7ZGF5LnZhbHVlfGRhdGU6J2QnfX08L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmF2PiJdfQ==
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { formatDate } from "@angular/common";
|
|
2
|
+
import { Directive, forwardRef, HostListener, Input } from "@angular/core";
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
4
|
+
import { isValid, parseISO } from "date-fns";
|
|
5
|
+
import { Subscription } from "rxjs";
|
|
6
|
+
import { AdbDatePickerComponent } from "./adb-date-picker.component";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./adb-date-picker.service";
|
|
9
|
+
import * as i2 from "@ngx-translate/core";
|
|
10
|
+
export class AdbDatePickerDirective {
|
|
11
|
+
constructor(viewContainerRef, renderer, elementRef, adbDatePickerService, translate) {
|
|
12
|
+
this.viewContainerRef = viewContainerRef;
|
|
13
|
+
this.renderer = renderer;
|
|
14
|
+
this.elementRef = elementRef;
|
|
15
|
+
this.adbDatePickerService = adbDatePickerService;
|
|
16
|
+
this.translate = translate;
|
|
17
|
+
this.subscriptions = new Subscription();
|
|
18
|
+
this.format = 'yyyy-MM-dd';
|
|
19
|
+
//TODO: convert to getter if this would become dynamic from server
|
|
20
|
+
this.settings = null;
|
|
21
|
+
//ControlValueAccessor
|
|
22
|
+
this.onChange = () => { };
|
|
23
|
+
this.onTouched = () => { };
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.subscriptions.add(this.adbDatePickerService.date$.subscribe({
|
|
27
|
+
next: date => {
|
|
28
|
+
this.renderer.setProperty(this.elementRef.nativeElement, 'value', formatDate(date, this.format, this.translate.currentLang));
|
|
29
|
+
this.onChange(date);
|
|
30
|
+
this.onHide();
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
this.subscriptions.add(this.adbDatePickerService.hide$.subscribe({
|
|
34
|
+
next: () => {
|
|
35
|
+
this.onHide();
|
|
36
|
+
}
|
|
37
|
+
}));
|
|
38
|
+
if (this.settings?.maxDate || this.settings?.minDate) {
|
|
39
|
+
this.adbDatePickerService.setSetting({
|
|
40
|
+
minDate: AdbDatePickerDirective.parseDate(this.settings.minDate),
|
|
41
|
+
maxDate: AdbDatePickerDirective.parseDate(this.settings.maxDate)
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
onClick() {
|
|
46
|
+
if (!this.viewRef) {
|
|
47
|
+
this.viewRef = this.viewContainerRef.createComponent(AdbDatePickerComponent);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
onHide() {
|
|
51
|
+
this.viewRef = null;
|
|
52
|
+
this.viewContainerRef.detach();
|
|
53
|
+
this.viewContainerRef.clear();
|
|
54
|
+
}
|
|
55
|
+
ngOnDestroy() {
|
|
56
|
+
this.subscriptions.unsubscribe();
|
|
57
|
+
}
|
|
58
|
+
writeValue(value) {
|
|
59
|
+
if (value) {
|
|
60
|
+
let initialDate = AdbDatePickerDirective.parseDate(value);
|
|
61
|
+
if (initialDate) {
|
|
62
|
+
this.renderer.setProperty(this.elementRef.nativeElement, 'value', formatDate(initialDate, this.format, this.translate.currentLang));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
registerOnChange(fn) {
|
|
67
|
+
this.onChange = fn;
|
|
68
|
+
}
|
|
69
|
+
registerOnTouched(fn) {
|
|
70
|
+
this.onTouched = fn;
|
|
71
|
+
}
|
|
72
|
+
setDisabledState(isDisabled) {
|
|
73
|
+
this.viewContainerRef.clear();
|
|
74
|
+
}
|
|
75
|
+
static parseDate(value) {
|
|
76
|
+
if (typeof value === 'string') {
|
|
77
|
+
if (isValid(parseISO(value))) {
|
|
78
|
+
return parseISO(value);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else if (value instanceof Date) {
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** @nocollapse */ AdbDatePickerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AdbDatePickerDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.AdbDatePickerService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
93
|
+
/** @nocollapse */ AdbDatePickerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.8", type: AdbDatePickerDirective, selector: "input[adbDatepicker]", inputs: { format: "format", settings: "settings" }, host: { listeners: { "click": "onClick()", "keyup.esc": "onHide()" } }, providers: [{
|
|
94
|
+
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => AdbDatePickerDirective)),
|
|
95
|
+
multi: true
|
|
96
|
+
}], ngImport: i0 });
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: AdbDatePickerDirective, decorators: [{
|
|
98
|
+
type: Directive,
|
|
99
|
+
args: [{
|
|
100
|
+
selector: `input[adbDatepicker]`,
|
|
101
|
+
providers: [{
|
|
102
|
+
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => AdbDatePickerDirective)),
|
|
103
|
+
multi: true
|
|
104
|
+
}]
|
|
105
|
+
}]
|
|
106
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.AdbDatePickerService }, { type: i2.TranslateService }]; }, propDecorators: { format: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], settings: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], onClick: [{
|
|
111
|
+
type: HostListener,
|
|
112
|
+
args: ['click']
|
|
113
|
+
}], onHide: [{
|
|
114
|
+
type: HostListener,
|
|
115
|
+
args: ['keyup.esc']
|
|
116
|
+
}] } });
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRiLWRhdGUtcGlja2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FydGRhdGEtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9hZGItZGF0ZS1waWNrZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFjLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFVLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQVVyRSxNQUFNLE9BQU8sc0JBQXNCO0lBTy9CLFlBQ1ksZ0JBQWtDLEVBQ2xDLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLG9CQUEwQyxFQUMzQyxTQUEyQjtRQUoxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzNDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBWDlCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsWUFBWSxDQUFBO1FBQzlCLG1FQUFtRTtRQUMxRCxhQUFRLEdBQXVELElBQUksQ0FBQztRQW1EN0Usc0JBQXNCO1FBQ3RCLGFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFD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QUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzFCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjthQUFNLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtZQUM5QixPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUM7O3NJQTVGUSxzQkFBc0I7MEhBQXRCLHNCQUFzQiwyS0FMcEIsQ0FBQztZQUNSLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixFQUFDO1lBQ2pGLEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQzsyRkFFTyxzQkFBc0I7a0JBUGxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsU0FBUyxFQUFFLENBQUM7NEJBQ1IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxFQUFFLHVCQUF1QixFQUFDOzRCQUNqRixLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDO2lCQUNMOzBOQUdZLE1BQU07c0JBQWQsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQWtDTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTztnQkFRckIsTUFBTTtzQkFETCxZQUFZO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IGZvcm1hdCwgaXNWYWxpZCwgcGFyc2VJU08gfSBmcm9tIFwiZGF0ZS1mbnNcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQWRiRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gXCIuL2FkYi1kYXRlLXBpY2tlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQWRiRGF0ZVBpY2tlclNlcnZpY2UgfSBmcm9tIFwiLi9hZGItZGF0ZS1waWNrZXIuc2VydmljZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogYGlucHV0W2FkYkRhdGVwaWNrZXJdYCxcclxuICAgIHByb3ZpZGVyczogW3tcclxuICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWRiRGF0ZVBpY2tlckRpcmVjdGl2ZSksXHJcbiAgICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGJEYXRlUGlja2VyRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIEBJbnB1dCgpIGZvcm1hdCA9ICd5eXl5LU1NLWRkJ1xyXG4gICAgLy9UT0RPOiBjb252ZXJ0IHRvIGdldHRlciBpZiB0aGlzIHdvdWxkIGJlY29tZSBkeW5hbWljIGZyb20gc2VydmVyIFxyXG4gICAgQElucHV0KCkgc2V0dGluZ3M6IHsgbWF4RGF0ZTogRGF0ZSB8IHN0cmluZywgbWluRGF0ZTogRGF0ZSB8IHN0cmluZyB9ID0gbnVsbDtcclxuICAgIHZpZXdSZWY6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIGFkYkRhdGVQaWNrZXJTZXJ2aWNlOiBBZGJEYXRlUGlja2VyU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hZGJEYXRlUGlja2VyU2VydmljZS5kYXRlJC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiBkYXRlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIGZvcm1hdERhdGUoZGF0ZSwgdGhpcy5mb3JtYXQsIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWRiRGF0ZVBpY2tlclNlcnZpY2UuaGlkZSQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncz8ubWF4RGF0ZSB8fCB0aGlzLnNldHRpbmdzPy5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRiRGF0ZVBpY2tlclNlcnZpY2Uuc2V0U2V0dGluZyh7XHJcbiAgICAgICAgICAgICAgICBtaW5EYXRlOiBBZGJEYXRlUGlja2VyRGlyZWN0aXZlLnBhcnNlRGF0ZSh0aGlzLnNldHRpbmdzLm1pbkRhdGUpLFxyXG4gICAgICAgICAgICAgICAgbWF4RGF0ZTogQWRiRGF0ZVBpY2tlckRpcmVjdGl2ZS5wYXJzZURhdGUodGhpcy5zZXR0aW5ncy5tYXhEYXRlKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxyXG4gICAgb25DbGljaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMudmlld1JlZikge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KEFkYkRhdGVQaWNrZXJDb21wb25lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cC5lc2MnKVxyXG4gICAgb25IaWRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld1JlZiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmRldGFjaCgpO1xyXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICAgIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XHJcbiAgICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgfTtcclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGxldCBpbml0aWFsRGF0ZSA9IEFkYkRhdGVQaWNrZXJEaXJlY3RpdmUucGFyc2VEYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmb3JtYXREYXRlKGluaXRpYWxEYXRlLCB0aGlzLmZvcm1hdCwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHBhcnNlRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHBhcnNlSVNPKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUlTTyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|