@posiwise/admin-module 0.0.180 → 0.0.182
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/fesm2022/posiwise-admin-module.mjs +463 -441
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -1
- package/package.json +4 -6
- package/esm2022/index.mjs +0 -87
- package/esm2022/lib/admin-guard.service.mjs +0 -44
- package/esm2022/lib/admin-module.routing.mjs +0 -919
- package/esm2022/lib/admin.module.mjs +0 -485
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +0 -93
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +0 -98
- package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +0 -26
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +0 -75
- package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +0 -92
- package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +0 -24
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +0 -101
- package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +0 -25
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +0 -88
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +0 -79
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +0 -31
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +0 -92
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +0 -102
- package/esm2022/lib/components/domain-config/domain-config-details/base-domain-config.component.mjs +0 -88
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +0 -731
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +0 -123
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +0 -57
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +0 -91
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +0 -144
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +0 -31
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +0 -98
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +0 -25
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +0 -218
- package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +0 -204
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +0 -277
- package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +0 -25
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +0 -84
- package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +0 -98
- package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +0 -12
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +0 -127
- package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +0 -31
- package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +0 -152
- package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +0 -118
- package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +0 -111
- package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +0 -97
- package/esm2022/lib/components/mailer/mailer-details/mailer-details.component.mjs +0 -115
- package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +0 -113
- package/esm2022/lib/components/mailer/mailer-tabs/mailer-tabs.component.mjs +0 -24
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +0 -87
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +0 -284
- package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +0 -76
- package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +0 -53
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.mjs +0 -59
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +0 -179
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +0 -103
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +0 -38
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +0 -109
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +0 -87
- package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +0 -31
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +0 -140
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +0 -93
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +0 -370
- package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +0 -52
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +0 -144
- package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +0 -28
- package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +0 -55
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +0 -380
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +0 -33
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +0 -154
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +0 -54
- package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +0 -61
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +0 -120
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +0 -135
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +0 -210
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +0 -225
- package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +0 -66
- package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +0 -173
- package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +0 -215
- package/esm2022/lib/components/subscriptions/subscriptions-insight/base-subscription-insight.component.mjs +0 -47
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-churn/subscription-insight-churn.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +0 -103
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +0 -23
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +0 -232
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +0 -311
- package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +0 -35
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +0 -145
- package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +0 -32
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +0 -88
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +0 -49
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +0 -25
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +0 -216
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +0 -200
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +0 -198
- package/esm2022/lib/components/tracking/events/events.component.mjs +0 -198
- package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +0 -49
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +0 -208
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +0 -167
- package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +0 -53
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +0 -338
- package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +0 -32
- package/esm2022/lib/shared/interface/admin-module-shared.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/api-response.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/contact-us.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/credential.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/domain-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/feedback-question.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/global-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/login-notification.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/newsletter.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/permission.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/privacy-tos.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tip.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tracking.interface.mjs +0 -2
- package/esm2022/lib/shared/routers/routers.mjs +0 -40
- package/esm2022/posiwise-admin-module.mjs +0 -5
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { Component, Injector, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { AdminService, AppAdmin } from '@posiwise/admin-module-utils';
|
|
4
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
5
|
-
import { PermissionService, SubscriptionService, TagService } from '@posiwise/common-services';
|
|
6
|
-
import { ADMIN_ROUTERS, PAGE_SIZE, TAG_ENTITY } from '@posiwise/common-utilities';
|
|
7
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
8
|
-
import { QuillHelper, ValidateForm } from '@posiwise/utils';
|
|
9
|
-
import moment from 'moment';
|
|
10
|
-
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
13
|
-
import * as i2 from "@posiwise/admin-module-utils";
|
|
14
|
-
import * as i3 from "@posiwise/common-services";
|
|
15
|
-
import * as i4 from "primeng/api";
|
|
16
|
-
import * as i5 from "primeng/autocomplete";
|
|
17
|
-
import * as i6 from "primeng/dropdown";
|
|
18
|
-
import * as i7 from "primeng/calendar";
|
|
19
|
-
import * as i8 from "@angular/common";
|
|
20
|
-
import * as i9 from "@angular/forms";
|
|
21
|
-
import * as i10 from "ngx-ui-switch";
|
|
22
|
-
import * as i11 from "primeng/progressspinner";
|
|
23
|
-
import * as i12 from "@posiwise/utils";
|
|
24
|
-
import * as i13 from "@posiwise/shared-components";
|
|
25
|
-
import * as i14 from "@posiwise/directives";
|
|
26
|
-
import * as i15 from "ngx-quill";
|
|
27
|
-
import * as i16 from "@jsverse/transloco";
|
|
28
|
-
export class ResourceAdminDetailsComponent extends AppBaseComponent {
|
|
29
|
-
constructor(modalService, adminService, injector, tagService, subscriptionService) {
|
|
30
|
-
super(injector);
|
|
31
|
-
this.modalService = modalService;
|
|
32
|
-
this.adminService = adminService;
|
|
33
|
-
this.tagService = tagService;
|
|
34
|
-
this.subscriptionService = subscriptionService;
|
|
35
|
-
this.submitted = false;
|
|
36
|
-
this.blog = {
|
|
37
|
-
id: '',
|
|
38
|
-
author_id: null,
|
|
39
|
-
title: '',
|
|
40
|
-
body: '',
|
|
41
|
-
view: '',
|
|
42
|
-
slug: '',
|
|
43
|
-
published_at: '',
|
|
44
|
-
accepted_at: '',
|
|
45
|
-
picture: {
|
|
46
|
-
url: ''
|
|
47
|
-
},
|
|
48
|
-
post_comments: []
|
|
49
|
-
};
|
|
50
|
-
this.image = '';
|
|
51
|
-
this.rectangularImage = '';
|
|
52
|
-
this.aspectWidth = 3;
|
|
53
|
-
this.aspectHeight = 1;
|
|
54
|
-
this.freeAspect = false;
|
|
55
|
-
this.allTags = [];
|
|
56
|
-
this.tagsSuggestion = [];
|
|
57
|
-
this.selectedTags = [];
|
|
58
|
-
this.isLoading = true;
|
|
59
|
-
// Author dropdown properties
|
|
60
|
-
this.availableAuthors = [];
|
|
61
|
-
this.authorsLoading = false;
|
|
62
|
-
this.isSubscriptionSuperAdmin = false;
|
|
63
|
-
this.routers = ADMIN_ROUTERS;
|
|
64
|
-
QuillHelper.init();
|
|
65
|
-
this.editorConfig = QuillHelper.getEditorConfig();
|
|
66
|
-
this.form = AppAdmin.getResourcesForm();
|
|
67
|
-
}
|
|
68
|
-
ngAfterViewInit() {
|
|
69
|
-
HelperService.subscribeToEditorChanges(this.form, 'body');
|
|
70
|
-
}
|
|
71
|
-
ngOnInit() {
|
|
72
|
-
this.filterData = history.state;
|
|
73
|
-
this.isBlogAdmin = this.permissionService.evaluatePermissions(`${PermissionService.selectedProduct?.permission}.${PermissionService.selectedProduct?.feature_key}.Blog.Admin`);
|
|
74
|
-
this.isSubscriptionSuperAdmin = this.permissionService.isUserSubscriptionSuperAdmin();
|
|
75
|
-
if (!this.isSubscriptionSuperAdmin) {
|
|
76
|
-
this.form.get('author_id').disable();
|
|
77
|
-
}
|
|
78
|
-
if (!this.isBlogAdmin) {
|
|
79
|
-
this.form.get('accepted_at').disable();
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
this.form.get('accepted_at').enable();
|
|
83
|
-
}
|
|
84
|
-
this.route.params.subscribe(params => {
|
|
85
|
-
console.log(params['slug']);
|
|
86
|
-
this.slug = params['slug'] ?? '';
|
|
87
|
-
if (this.slug !== 'create') {
|
|
88
|
-
this.getBlogItem(this.slug);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
this.isLoading = false;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
this.subscriptionId = PermissionService.selectedSubscription.id;
|
|
95
|
-
this.form.get('subscription_id').setValue(this.subscriptionId);
|
|
96
|
-
this.getPostTags();
|
|
97
|
-
this.getAvailableAuthors();
|
|
98
|
-
}
|
|
99
|
-
get f() {
|
|
100
|
-
return this.form.controls;
|
|
101
|
-
}
|
|
102
|
-
getBlogItem(slug) {
|
|
103
|
-
this.adminService.getPostBySlug(slug).subscribe(response => {
|
|
104
|
-
this.isLoading = false;
|
|
105
|
-
this.id = response.id;
|
|
106
|
-
const when = response.when ? new Date(response.when) : null;
|
|
107
|
-
this.blog = { ...response, when };
|
|
108
|
-
this.image = response?.picture?.url;
|
|
109
|
-
this.rectangularImage = response?.rectangular_picture?.url;
|
|
110
|
-
this.form.patchValue(this.blog);
|
|
111
|
-
this.selectedTags = response?.tags?.length ? [...response.tags] : [];
|
|
112
|
-
// Set author_id if it exists in the response
|
|
113
|
-
if (response.author?.id) {
|
|
114
|
-
this.form.get('author_id').setValue(response.author.id);
|
|
115
|
-
this.blog.author_id = response.author.id;
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
fileChangeListener($event) {
|
|
120
|
-
[this.file] = $event.target.files;
|
|
121
|
-
}
|
|
122
|
-
openModal(content) {
|
|
123
|
-
this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });
|
|
124
|
-
}
|
|
125
|
-
openRectModal(content) {
|
|
126
|
-
this.modalService.open(content, { centered: true, windowClass: 'modal-holder' });
|
|
127
|
-
}
|
|
128
|
-
onClose() {
|
|
129
|
-
this.modalService.dismissAll();
|
|
130
|
-
}
|
|
131
|
-
handleImageError(event, fallbackPath) {
|
|
132
|
-
HelperService.handleImageFallbackPath(event, fallbackPath);
|
|
133
|
-
}
|
|
134
|
-
onImageSelection(event) {
|
|
135
|
-
this.image = event;
|
|
136
|
-
const blob = this.dataURLtoBlob(event);
|
|
137
|
-
const filename = `${Date.parse(new Date().toString())}.png`;
|
|
138
|
-
this.file = new File([blob], filename);
|
|
139
|
-
this.modalService.dismissAll();
|
|
140
|
-
}
|
|
141
|
-
onRectangularImageSelection(event) {
|
|
142
|
-
this.rectangularImage = event;
|
|
143
|
-
const blob = this.dataURLtoBlob(event);
|
|
144
|
-
const filename = `${Date.parse(new Date().toString())}.png`;
|
|
145
|
-
this.rectangularFile = new File([blob], filename);
|
|
146
|
-
this.modalService.dismissAll();
|
|
147
|
-
}
|
|
148
|
-
dataURLtoBlob(dataUrl) {
|
|
149
|
-
const arr = dataUrl.split(',');
|
|
150
|
-
const mime = /^[A-Z]*[a-z]*:(.*?);[A-Z]*/.exec(arr[0])?.[1];
|
|
151
|
-
const bStr = atob(arr[1]);
|
|
152
|
-
let n = bStr.length;
|
|
153
|
-
const u8arr = new Uint8Array(n);
|
|
154
|
-
while (n--) {
|
|
155
|
-
u8arr[n] = bStr.charCodeAt(n);
|
|
156
|
-
}
|
|
157
|
-
return new Blob([u8arr], { type: mime });
|
|
158
|
-
}
|
|
159
|
-
onSave() {
|
|
160
|
-
const rawHtml = HelperService.SaveRawHTML();
|
|
161
|
-
this.form.controls['body'].setValue(rawHtml);
|
|
162
|
-
this.submitted = true;
|
|
163
|
-
if (this.slug !== 'create') {
|
|
164
|
-
this.onUpdate();
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
167
|
-
this.onAdd();
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
onAdd() {
|
|
171
|
-
const data = { ...this.form.value };
|
|
172
|
-
if (data.accepted_at) {
|
|
173
|
-
data.accepted_at = moment().format('DD-MMM-YYYY');
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
data.accepted_at = '';
|
|
177
|
-
}
|
|
178
|
-
if (data.published_at) {
|
|
179
|
-
data.published_at = moment().format('DD-MMM-YYYY');
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
data.published_at = '';
|
|
183
|
-
}
|
|
184
|
-
if (this.file) {
|
|
185
|
-
data.picture = this.file;
|
|
186
|
-
}
|
|
187
|
-
if (this.rectangularFile) {
|
|
188
|
-
data.rectangular_picture = this.rectangularFile;
|
|
189
|
-
}
|
|
190
|
-
if (!data.picture) {
|
|
191
|
-
delete data.picture;
|
|
192
|
-
}
|
|
193
|
-
if (!data.rectangular_picture) {
|
|
194
|
-
delete data.rectangular_picture;
|
|
195
|
-
}
|
|
196
|
-
delete data.id;
|
|
197
|
-
this.adminService
|
|
198
|
-
.addPost(data)
|
|
199
|
-
.subscribe(response => {
|
|
200
|
-
this.toast.success(this.translation.translate('Resource.AddedMessage'));
|
|
201
|
-
this.back();
|
|
202
|
-
this.postTags(response.id);
|
|
203
|
-
})
|
|
204
|
-
.add(() => {
|
|
205
|
-
this.submitted = false;
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
getAspectRatio() {
|
|
209
|
-
return this.aspectWidth / this.aspectHeight;
|
|
210
|
-
}
|
|
211
|
-
onUpdate() {
|
|
212
|
-
const data = { ...this.form.value };
|
|
213
|
-
this.handleRectangularPicture(data);
|
|
214
|
-
this.handlePicture(data);
|
|
215
|
-
this.handlePublishedAt(data);
|
|
216
|
-
this.handleAcceptedAt(data);
|
|
217
|
-
this.handleOptionalFields(data);
|
|
218
|
-
this.handleRemovals(data);
|
|
219
|
-
this.updatePost(data);
|
|
220
|
-
}
|
|
221
|
-
handleRectangularPicture(data) {
|
|
222
|
-
if (this.rectangularFile) {
|
|
223
|
-
data.rectangular_picture = this.rectangularFile;
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
delete data.rectangular_picture;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
handlePicture(data) {
|
|
230
|
-
if (this.file) {
|
|
231
|
-
data.picture = this.file;
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
delete data.picture;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
handlePublishedAt(data) {
|
|
238
|
-
const control = this.form.get('published_at');
|
|
239
|
-
if (control?.dirty) {
|
|
240
|
-
data.published_at = control.value ? moment().format('DD-MMM-YYYY') : '';
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
delete data.published_at;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
handleAcceptedAt(data) {
|
|
247
|
-
const control = this.form.get('accepted_at');
|
|
248
|
-
if (control?.dirty) {
|
|
249
|
-
data.accepted_at = control.value ? moment().format('DD-MMM-YYYY') : '';
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
delete data.accepted_at;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
handleOptionalFields(data) {
|
|
256
|
-
if (!this.form.get('when')?.value) {
|
|
257
|
-
data.when = '';
|
|
258
|
-
}
|
|
259
|
-
if (!this.form.get('showcase')?.value) {
|
|
260
|
-
data.showcase = '';
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
handleRemovals(data) {
|
|
264
|
-
if (!this.file && !this.image) {
|
|
265
|
-
data.remove_picture = true;
|
|
266
|
-
}
|
|
267
|
-
if (!this.rectangularFile && !this.rectangularImage) {
|
|
268
|
-
data.remove_rectangular_picture = true;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
updatePost(data) {
|
|
272
|
-
this.postTags(this.blog.id);
|
|
273
|
-
this.adminService
|
|
274
|
-
.updatePost(data, this.id)
|
|
275
|
-
.subscribe(() => {
|
|
276
|
-
this.toast.success(this.translation.translate('Resource.UpdatedMessage'));
|
|
277
|
-
this.navigateToResourceList();
|
|
278
|
-
})
|
|
279
|
-
.add(() => {
|
|
280
|
-
this.submitted = false;
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
navigateToResourceList() {
|
|
284
|
-
this.router.navigate(['/' + this.routers.resourcesList], {
|
|
285
|
-
state: {
|
|
286
|
-
...this.filterData
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
}
|
|
290
|
-
deleteCoverImage() {
|
|
291
|
-
this.image = null;
|
|
292
|
-
this.file = null;
|
|
293
|
-
}
|
|
294
|
-
deleteRectangularImage() {
|
|
295
|
-
this.rectangularImage = null;
|
|
296
|
-
this.rectangularFile = null;
|
|
297
|
-
}
|
|
298
|
-
getPostTags() {
|
|
299
|
-
this.tagService
|
|
300
|
-
.getTagsByType('post_categories', {}, this.subscriptionId)
|
|
301
|
-
.subscribe(response => {
|
|
302
|
-
this.allTags = response.tags;
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
search(event) {
|
|
306
|
-
let values = [];
|
|
307
|
-
if (event.query) {
|
|
308
|
-
values = this.allTags.filter(x => x.name.toLowerCase().includes(event.query.toLowerCase()));
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
this.allTags.forEach(element => {
|
|
312
|
-
values.push(element);
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
this.tagsSuggestion = values;
|
|
316
|
-
}
|
|
317
|
-
postTags(id) {
|
|
318
|
-
if (this.selectedTags.length > 0) {
|
|
319
|
-
const data = {
|
|
320
|
-
entity_tags: this.selectedTags.map(item => {
|
|
321
|
-
const tag = {};
|
|
322
|
-
tag['tag_id'] = item.id;
|
|
323
|
-
return tag;
|
|
324
|
-
}),
|
|
325
|
-
slug: id,
|
|
326
|
-
tag_entity: TAG_ENTITY.POST
|
|
327
|
-
};
|
|
328
|
-
this.tagService.addTags(data).subscribe();
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Gets the list of members for the subscription to populate the Author dropdown
|
|
333
|
-
* Uses the same API and pattern as Enterprise/Members UI
|
|
334
|
-
*/
|
|
335
|
-
getAvailableAuthors() {
|
|
336
|
-
this.authorsLoading = true;
|
|
337
|
-
const paging = {
|
|
338
|
-
page: 1,
|
|
339
|
-
page_size: PAGE_SIZE,
|
|
340
|
-
search: '',
|
|
341
|
-
order_by: '',
|
|
342
|
-
order_direction: ''
|
|
343
|
-
};
|
|
344
|
-
this.subscriptionService.getEnrolledSubscription(this.subscriptionId, paging).subscribe(response => {
|
|
345
|
-
this.authorsLoading = false;
|
|
346
|
-
if (response?.members && response.members.length > 0) {
|
|
347
|
-
// Transform members data for dropdown
|
|
348
|
-
this.availableAuthors = response.members.map(member => ({
|
|
349
|
-
label: `${member.first_name ?? ''} ${member.last_name ?? ''}`.trim() ||
|
|
350
|
-
member.email,
|
|
351
|
-
value: member.id,
|
|
352
|
-
email: member.email
|
|
353
|
-
}));
|
|
354
|
-
// If we have an existing author_id from the blog data, set it now that options are loaded
|
|
355
|
-
if (this.blog?.author_id) {
|
|
356
|
-
this.form.get('author_id').setValue(this.blog.author_id);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
}, error => {
|
|
360
|
-
this.authorsLoading = false;
|
|
361
|
-
console.error('Error fetching authors:', error);
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
ngOnDestroy() {
|
|
365
|
-
super.ngOnDestroy();
|
|
366
|
-
}
|
|
367
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceAdminDetailsComponent, deps: [{ token: i1.NgbModal }, { token: i2.AdminService }, { token: i0.Injector }, { token: i3.TagService }, { token: i3.SubscriptionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
368
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceAdminDetailsComponent, selector: "pw-resources-details-index", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"navigateToResourceList()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n Add or edit resource\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Title -->\n <pw-input-container [label]=\"'Label.Title' | transloco\"\n class=\"col-12\"\n name=\"title\"\n [errorMsg]=\"'Resource.Posts.Validation.Title' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <!-- Blurb -->\n <pw-input-container [label]=\"'Resource.Posts.Blurb' | transloco\"\n class=\"col-12\"\n name=\"blurb\"\n class=\"blurb\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'The blurb is used for the metadata.description field'\">\n <textarea class=\"form-control\"\n rows=\"3\"\n formControlName=\"blurb\"\n placeholder=\"Short description for SEO meta description\"></textarea>\n </pw-input-container>\n\n\n <!-- Rich Text Editor -->\n <pw-input-container [label]=\"'Resource.Posts.Body' | transloco\"\n class=\"col-9 col-md-9 col-sm-12\"\n name=\"body\"\n [errorMsg]=\"'Resource.Posts.Validation.Body' | transloco\">\n <quill-editor [styles]=\"{ height: '500px' }\"\n class=\"quillEditor\" [modules]=\"editorConfig\"\n formControlName=\"body\"\n [ngClass]=\"{\n 'w-100': true,\n 'quill-container': true,\n 'is-invalid': submitted && f['body'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n <div class=\"col-12 col-md-3 col-sm-4 my-4\">\n <div class=\"text-center mb-4\">\n <label for=\"coverPicture\">{{ 'Resource.Posts.CoverPicture' | transloco }}</label>\n <div class=\"text-center text-center d-flex flex-column align-items-center\">\n <img [src]=\"(image !== null && !image?.includes('default-photo.jpg') )? image : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n class=\"image w-100\" alt=\"Modal\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openModal(content)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteCoverImage()\"\n (keydown.enter)=\"deleteCoverImage()\"\n *ngIf=\"image && !image.includes('default-photo.jpg')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Rectangular Picture -->\n <div class=\"text-center d-flex flex-column align-items-center\">\n <label for=\"rectangularPicture\">Rectangular Picture</label>\n <img\n [src]=\"(rectangularImage !== null && !rectangularImage?.includes('default-photo.jpg')) ? rectangularImage : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openRectModal(rectContent)\"\n (click)=\"openRectModal(rectContent)\"\n class=\"image rec-img\"\n [ngClass]=\"{ 'w-100': rectangularImage === null || rectangularImage?.includes('default-photo.jpg') }\"\n alt=\"Uploaded rectangular media preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openRectModal(rectContent)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteRectangularImage()\"\n (keydown.enter)=\"deleteRectangularImage()\"\n *ngIf=\"rectangularImage && !rectangularImage.includes('default-photo.jpg')\">\n </i>\n </div>\n\n </div>\n\n </div>\n <pw-input-container [label]=\"'Resource.Posts.CtaText' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\"\n name=\"cta_text\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"cta_text\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.ExternalUrl' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.ExternalUrl' | transloco\"\n name=\"external_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"external_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['external_url'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.Tags' | transloco \" class=\"ui-fluid skills-modal col-12 col-md-6 col-sm-12 tags\"\n [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\" name=\"cta_text\">\n <p-autoComplete [(ngModel)]=\"selectedTags\" class=\"body-bg\" [suggestions]=\"tagsSuggestion\" dataKey=\"id\" field=\"name\"\n (completeMethod)=\"search($event)\" styleClass=\"w-100\" [minLength]=\"1\" [maxlength]=\"10\" [dropdown]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\" placeholder=\"Tags\" [multiple]=\"true\">\n </p-autoComplete>\n </pw-input-container>\n\n <pw-input-container [label]=\"'Author' | transloco\"\n class=\"col-12 col-md-4 col-sm-6\"\n name=\"author_id\"\n [errorMsg]=\"'Please select an author' | transloco\">\n <p-dropdown\n formControlName=\"author_id\"\n [options]=\"availableAuthors\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"'Select Author' | transloco\"\n [loading]=\"authorsLoading\"\n [ngClass]=\"{ 'is-invalid': submitted && f['author_id'].errors }\"\n styleClass=\"w-100\">\n <ng-template pTemplate=\"item\" let-author>\n <div>\n <div>{{ author.label }}</div>\n </div>\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n\n\n <!-- WHEN and AUTHOR on same line -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Resource.Posts.When' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.When' | transloco\"\n name=\"when\">\n <div>\n <p-calendar formControlName=\"when\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [placeholder]=\"'Select Date'\"\n [ngClass]=\"{'is-invalid': submitted && f['when'].errors}\">\n </p-calendar>\n </div>\n </pw-input-container>\n </div>\n </div>\n\n <!-- Author Dropdown -->\n <!-- Three toggles on next line -->\n <div class=\"col-12\">\n <div class=\"row\">\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.ShowCase' | transloco\"\n [label]=\"'Resource.Posts.ShowCase' | transloco\" name=\"showcase\">\n <ui-switch class=\"d-block\" formControlName=\"showcase\" name=\"showcase\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Published At -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.Published' | transloco\"\n [label]=\"'Resource.Posts.Published' | transloco\"\n name=\"published_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"published_at\"\n name=\"published_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Accepted At -->\n <div class=\"col-12 col-md-2 col-sm-6 accept-icon\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.AcceptedByAdmin' | transloco\"\n [label]=\"'Resource.Posts.AcceptedByAdmin' | transloco\"\n name=\"accepted_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"accepted_at\"\n name=\"accepted_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"navigateToResourceList()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n\n<ng-template #rectContent let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n\n <div class=\"modal-body\">\n <small>\n You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)\n </small>\n\n\n <pw-image-cropper\n #profile\n [aspectRatio]=\"'dynamic'\"\n [dynamicData]=\"getAspectRatio()\"\n (imageSelectionEvent)=\"onRectangularImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".col-md-6.display-grid{display:grid}body .ui-autocomplete.ui-autocomplete-multiple .ui-autocomplete-multiple-container{width:100%}body .ui-inputtext{padding:0}.comment{border:1px solid rgb(238,238,238)}.is-invalid .ql-container.ql-snow,.is-invalid .ql-toolbar.ql-snow{border-color:#dc3545}.rec-img{max-width:100%;max-height:400px!important}.body-bg span .ui-autocomplete-multiple-container{background-color:#f5f7fa}.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token{color:var(--tabs_text)}.tags .info-circle .tooltiptext:after{left:25px!important}.tags .info-circle .tooltiptext{left:-30px!important}.blurb .info-circle .tooltiptext:after{left:50px!important}.blurb .info-circle .tooltiptext{left:-55px!important}.accept-icon .info-circle .tooltiptext:after{left:110px!important}.accept-icon .info-circle .tooltiptext{right:-85px!important}\n"], dependencies: [{ kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i7.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i11.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i12.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i13.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i14.LazyImgDirective, selector: "img" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i15.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
369
|
-
}
|
|
370
|
-
__decorate([
|
|
371
|
-
ValidateForm('form'),
|
|
372
|
-
__metadata("design:type", Function),
|
|
373
|
-
__metadata("design:paramtypes", []),
|
|
374
|
-
__metadata("design:returntype", void 0)
|
|
375
|
-
], ResourceAdminDetailsComponent.prototype, "onSave", null);
|
|
376
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceAdminDetailsComponent, decorators: [{
|
|
377
|
-
type: Component,
|
|
378
|
-
args: [{ selector: 'pw-resources-details-index', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"navigateToResourceList()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n Add or edit resource\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Title -->\n <pw-input-container [label]=\"'Label.Title' | transloco\"\n class=\"col-12\"\n name=\"title\"\n [errorMsg]=\"'Resource.Posts.Validation.Title' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <!-- Blurb -->\n <pw-input-container [label]=\"'Resource.Posts.Blurb' | transloco\"\n class=\"col-12\"\n name=\"blurb\"\n class=\"blurb\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'The blurb is used for the metadata.description field'\">\n <textarea class=\"form-control\"\n rows=\"3\"\n formControlName=\"blurb\"\n placeholder=\"Short description for SEO meta description\"></textarea>\n </pw-input-container>\n\n\n <!-- Rich Text Editor -->\n <pw-input-container [label]=\"'Resource.Posts.Body' | transloco\"\n class=\"col-9 col-md-9 col-sm-12\"\n name=\"body\"\n [errorMsg]=\"'Resource.Posts.Validation.Body' | transloco\">\n <quill-editor [styles]=\"{ height: '500px' }\"\n class=\"quillEditor\" [modules]=\"editorConfig\"\n formControlName=\"body\"\n [ngClass]=\"{\n 'w-100': true,\n 'quill-container': true,\n 'is-invalid': submitted && f['body'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n <div class=\"col-12 col-md-3 col-sm-4 my-4\">\n <div class=\"text-center mb-4\">\n <label for=\"coverPicture\">{{ 'Resource.Posts.CoverPicture' | transloco }}</label>\n <div class=\"text-center text-center d-flex flex-column align-items-center\">\n <img [src]=\"(image !== null && !image?.includes('default-photo.jpg') )? image : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n class=\"image w-100\" alt=\"Modal\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openModal(content)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteCoverImage()\"\n (keydown.enter)=\"deleteCoverImage()\"\n *ngIf=\"image && !image.includes('default-photo.jpg')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Rectangular Picture -->\n <div class=\"text-center d-flex flex-column align-items-center\">\n <label for=\"rectangularPicture\">Rectangular Picture</label>\n <img\n [src]=\"(rectangularImage !== null && !rectangularImage?.includes('default-photo.jpg')) ? rectangularImage : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openRectModal(rectContent)\"\n (click)=\"openRectModal(rectContent)\"\n class=\"image rec-img\"\n [ngClass]=\"{ 'w-100': rectangularImage === null || rectangularImage?.includes('default-photo.jpg') }\"\n alt=\"Uploaded rectangular media preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openRectModal(rectContent)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteRectangularImage()\"\n (keydown.enter)=\"deleteRectangularImage()\"\n *ngIf=\"rectangularImage && !rectangularImage.includes('default-photo.jpg')\">\n </i>\n </div>\n\n </div>\n\n </div>\n <pw-input-container [label]=\"'Resource.Posts.CtaText' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\"\n name=\"cta_text\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"cta_text\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.ExternalUrl' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.ExternalUrl' | transloco\"\n name=\"external_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"external_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['external_url'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.Tags' | transloco \" class=\"ui-fluid skills-modal col-12 col-md-6 col-sm-12 tags\"\n [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\" name=\"cta_text\">\n <p-autoComplete [(ngModel)]=\"selectedTags\" class=\"body-bg\" [suggestions]=\"tagsSuggestion\" dataKey=\"id\" field=\"name\"\n (completeMethod)=\"search($event)\" styleClass=\"w-100\" [minLength]=\"1\" [maxlength]=\"10\" [dropdown]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\" placeholder=\"Tags\" [multiple]=\"true\">\n </p-autoComplete>\n </pw-input-container>\n\n <pw-input-container [label]=\"'Author' | transloco\"\n class=\"col-12 col-md-4 col-sm-6\"\n name=\"author_id\"\n [errorMsg]=\"'Please select an author' | transloco\">\n <p-dropdown\n formControlName=\"author_id\"\n [options]=\"availableAuthors\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"'Select Author' | transloco\"\n [loading]=\"authorsLoading\"\n [ngClass]=\"{ 'is-invalid': submitted && f['author_id'].errors }\"\n styleClass=\"w-100\">\n <ng-template pTemplate=\"item\" let-author>\n <div>\n <div>{{ author.label }}</div>\n </div>\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n\n\n <!-- WHEN and AUTHOR on same line -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Resource.Posts.When' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.When' | transloco\"\n name=\"when\">\n <div>\n <p-calendar formControlName=\"when\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [placeholder]=\"'Select Date'\"\n [ngClass]=\"{'is-invalid': submitted && f['when'].errors}\">\n </p-calendar>\n </div>\n </pw-input-container>\n </div>\n </div>\n\n <!-- Author Dropdown -->\n <!-- Three toggles on next line -->\n <div class=\"col-12\">\n <div class=\"row\">\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.ShowCase' | transloco\"\n [label]=\"'Resource.Posts.ShowCase' | transloco\" name=\"showcase\">\n <ui-switch class=\"d-block\" formControlName=\"showcase\" name=\"showcase\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Published At -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.Published' | transloco\"\n [label]=\"'Resource.Posts.Published' | transloco\"\n name=\"published_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"published_at\"\n name=\"published_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Accepted At -->\n <div class=\"col-12 col-md-2 col-sm-6 accept-icon\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.AcceptedByAdmin' | transloco\"\n [label]=\"'Resource.Posts.AcceptedByAdmin' | transloco\"\n name=\"accepted_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"accepted_at\"\n name=\"accepted_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"navigateToResourceList()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n\n<ng-template #rectContent let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n\n <div class=\"modal-body\">\n <small>\n You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)\n </small>\n\n\n <pw-image-cropper\n #profile\n [aspectRatio]=\"'dynamic'\"\n [dynamicData]=\"getAspectRatio()\"\n (imageSelectionEvent)=\"onRectangularImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".col-md-6.display-grid{display:grid}body .ui-autocomplete.ui-autocomplete-multiple .ui-autocomplete-multiple-container{width:100%}body .ui-inputtext{padding:0}.comment{border:1px solid rgb(238,238,238)}.is-invalid .ql-container.ql-snow,.is-invalid .ql-toolbar.ql-snow{border-color:#dc3545}.rec-img{max-width:100%;max-height:400px!important}.body-bg span .ui-autocomplete-multiple-container{background-color:#f5f7fa}.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token{color:var(--tabs_text)}.tags .info-circle .tooltiptext:after{left:25px!important}.tags .info-circle .tooltiptext{left:-30px!important}.blurb .info-circle .tooltiptext:after{left:50px!important}.blurb .info-circle .tooltiptext{left:-55px!important}.accept-icon .info-circle .tooltiptext:after{left:110px!important}.accept-icon .info-circle .tooltiptext{right:-85px!important}\n"] }]
|
|
379
|
-
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.AdminService }, { type: i0.Injector }, { type: i3.TagService }, { type: i3.SubscriptionService }], propDecorators: { onSave: [] } });
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLWFkbWluLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3Jlc291cmNlcy9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcmVzb3VyY2VzL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFHUixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRELE1BQU0sT0FBTyw2QkFDVCxTQUFRLGdCQUFnQjtJQW9EeEIs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QUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2hCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztpQkFDdEIsQ0FBQyxDQUFDLENBQUM7Z0JBRUosMEZBQTBGO2dCQUMxRixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtZQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0F6WlEsNkJBQTZCO21HQUE3Qiw2QkFBNkIseUZDM0IxQywyaWFBNlNBOztBRHBHSTtJQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7MkRBVXBCOzRGQXZMUSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLGlCQUd2QixpQkFBaUIsQ0FBQyxJQUFJOzBMQWdMckMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSwgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlLCBTdWJzY3JpcHRpb25TZXJ2aWNlLCBUYWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBRE1JTl9ST1VURVJTLCBQQUdFX1NJWkUsIFBhZ2luZywgVEFHX0VOVElUWSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgUXVpbGxIZWxwZXIsIFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctcmVzb3VyY2VzLWRldGFpbHMtaW5kZXgnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmVzb3VyY2VzLWFkbWluLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlQWRtaW5EZXRhaWxzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgIGlkOiBudW1iZXI7XG4gICAgc2x1Zzogc3RyaW5nO1xuXG4gICAgYmxvZyA9IHtcbiAgICAgICAgaWQ6ICcnLFxuICAgICAgICBhdXRob3JfaWQ6IG51bGwgYXMgbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICBib2R5OiAnJyxcbiAgICAgICAgdmlldzogJycsXG4gICAgICAgIHNsdWc6ICcnLFxuICAgICAgICBwdWJsaXNoZWRfYXQ6ICcnLFxuICAgICAgICBhY2NlcHRlZF9hdDogJycsXG4gICAgICAgIHBpY3R1cmU6IHtcbiAgICAgICAgICAgIHVybDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdF9jb21tZW50czogW11cbiAgICB9O1xuXG4gICAgZmlsZTogRmlsZTtcbiAgICByZWN0YW5ndWxhckZpbGU6IEZpbGU7XG4gICAgaW1hZ2UgPSAnJztcbiAgICByZWN0YW5ndWxhckltYWdlID0gJyc7XG5cbiAgICBhc3BlY3RXaWR0aCA9IDM7XG4gICAgYXNwZWN0SGVpZ2h0ID0gMTtcbiAgICBmcmVlQXNwZWN0ID0gZmFsc2U7XG5cbiAgICBhbGxUYWdzOiB7IG5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICB0YWdzU3VnZ2VzdGlvbiA9IFtdO1xuICAgIHNlbGVjdGVkVGFncyA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGlzTG9hZGluZyA9IHRydWU7XG4gICAgaXNCbG9nQWRtaW46IGJvb2xlYW47XG5cbiAgICAvLyBBdXRob3IgZHJvcGRvd24gcHJvcGVydGllc1xuICAgIGF2YWlsYWJsZUF1dGhvcnMgPSBbXTtcbiAgICBhdXRob3JzTG9hZGluZyA9IGZhbHNlO1xuICAgIGlzU3Vic2NyaXB0aW9uU3VwZXJBZG1pbiA9IGZhbHNlO1xuXG4gICAgZWRpdG9yQ29uZmlnO1xuICAgIHJvdXRlcnMgPSBBRE1JTl9ST1VURVJTO1xuICAgIGZpbHRlckRhdGE6IHsgc291cmNlOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICBRdWlsbEhlbHBlci5pbml0KCk7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29uZmlnID0gUXVpbGxIZWxwZXIuZ2V0RWRpdG9yQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcEFkbWluLmdldFJlc291cmNlc0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIEhlbHBlclNlcnZpY2Uuc3Vic2NyaWJlVG9FZGl0b3JDaGFuZ2VzKHRoaXMuZm9ybSwgJ2JvZHknKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhID0gaGlzdG9yeS5zdGF0ZTtcbiAgICAgICAgdGhpcy5pc0Jsb2dBZG1pbiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuZXZhbHVhdGVQZXJtaXNzaW9ucyhcbiAgICAgICAgICAgIGAke1Blcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkUHJvZHVjdD8ucGVybWlzc2lvbn0uJHtQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFByb2R1Y3Q/LmZlYXR1cmVfa2V5fS5CbG9nLkFkbWluYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3Vic2NyaXB0aW9uU3VwZXJBZG1pbiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJBZG1pbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1N1YnNjcmlwdGlvblN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2F1dGhvcl9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0Jsb2dBZG1pbikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYWNjZXB0ZWRfYXQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdhY2NlcHRlZF9hdCcpLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGFyYW1zWydzbHVnJ10pO1xuICAgICAgICAgICAgdGhpcy5zbHVnID0gcGFyYW1zWydzbHVnJ10gPz8gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5zbHVnICE9PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QmxvZ0l0ZW0odGhpcy5zbHVnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbi5pZDtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnc3Vic2NyaXB0aW9uX2lkJykuc2V0VmFsdWUodGhpcy5zdWJzY3JpcHRpb25JZCk7XG4gICAgICAgIHRoaXMuZ2V0UG9zdFRhZ3MoKTtcbiAgICAgICAgdGhpcy5nZXRBdmFpbGFibGVBdXRob3JzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9nSXRlbShzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0UG9zdEJ5U2x1ZyhzbHVnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaWQgPSByZXNwb25zZS5pZDtcbiAgICAgICAgICAgIGNvbnN0IHdoZW4gPSByZXNwb25zZS53aGVuID8gbmV3IERhdGUocmVzcG9uc2Uud2hlbikgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy5ibG9nID0geyAuLi5yZXNwb25zZSwgd2hlbiB9O1xuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IHJlc3BvbnNlPy5waWN0dXJlPy51cmw7XG4gICAgICAgICAgICB0aGlzLnJlY3Rhbmd1bGFySW1hZ2UgPSByZXNwb25zZT8ucmVjdGFuZ3VsYXJfcGljdHVyZT8udXJsO1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5ibG9nKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gcmVzcG9uc2U/LnRhZ3M/Lmxlbmd0aCA/IFsuLi5yZXNwb25zZS50YWdzXSA6IFtdO1xuXG4gICAgICAgICAgICAvLyBTZXQgYXV0aG9yX2lkIGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hdXRob3I/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYXV0aG9yX2lkJykuc2V0VmFsdWUocmVzcG9uc2UuYXV0aG9yLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2cuYXV0aG9yX2lkID0gcmVzcG9uc2UuYXV0aG9yLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWxlQ2hhbmdlTGlzdGVuZXIoJGV2ZW50KSB7XG4gICAgICAgIFt0aGlzLmZpbGVdID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICB9XG5cbiAgICBvcGVuTW9kYWwoY29udGVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQsIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJyB9KTtcbiAgICB9XG5cbiAgICBvcGVuUmVjdE1vZGFsKGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihjb250ZW50LCB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcicgfSk7XG4gICAgfVxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUltYWdlRXJyb3IoZXZlbnQ6IEV2ZW50LCBmYWxsYmFja1BhdGgpOiB2b2lkIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5oYW5kbGVJbWFnZUZhbGxiYWNrUGF0aChldmVudCwgZmFsbGJhY2tQYXRoKTtcbiAgICB9XG5cbiAgICBvbkltYWdlU2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBldmVudDtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihldmVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7RGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpfS5wbmdgO1xuICAgICAgICB0aGlzLmZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIH1cblxuICAgIG9uUmVjdGFuZ3VsYXJJbWFnZVNlbGVjdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLnJlY3Rhbmd1bGFySW1hZ2UgPSBldmVudDtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihldmVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7RGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpfS5wbmdgO1xuICAgICAgICB0aGlzLnJlY3Rhbmd1bGFyRmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZW5hbWUpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgZGF0YVVSTHRvQmxvYihkYXRhVXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYXJyID0gZGF0YVVybC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBtaW1lID0gL15bQS1aXSpbYS16XSo6KC4qPyk7W0EtWl0qLy5leGVjKGFyclswXSk/LlsxXTtcbiAgICAgICAgY29uc3QgYlN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgICAgICAgbGV0IG4gPSBiU3RyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgICAgd2hpbGUgKG4tLSkge1xuICAgICAgICAgICAgdThhcnJbbl0gPSBiU3RyLmNoYXJDb2RlQXQobik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW3U4YXJyXSwgeyB0eXBlOiBtaW1lIH0pO1xuICAgIH1cblxuICAgIEBWYWxpZGF0ZUZvcm0oJ2Zvcm0nKVxuICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgY29uc3QgcmF3SHRtbCA9IEhlbHBlclNlcnZpY2UuU2F2ZVJhd0hUTUwoKTtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydib2R5J10uc2V0VmFsdWUocmF3SHRtbCk7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuc2x1ZyAhPT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUgfTtcblxuICAgICAgICBpZiAoZGF0YS5hY2NlcHRlZF9hdCkge1xuICAgICAgICAgICAgZGF0YS5hY2NlcHRlZF9hdCA9IG1vbWVudCgpLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuYWNjZXB0ZWRfYXQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnB1Ymxpc2hlZF9hdCkge1xuICAgICAgICAgICAgZGF0YS5wdWJsaXNoZWRfYXQgPSBtb21lbnQoKS5mb3JtYXQoJ0RELU1NTS1ZWVlZJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLnB1Ymxpc2hlZF9hdCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5waWN0dXJlID0gdGhpcy5maWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlY3Rhbmd1bGFyRmlsZSkge1xuICAgICAgICAgICAgZGF0YS5yZWN0YW5ndWxhcl9waWN0dXJlID0gdGhpcy5yZWN0YW5ndWxhckZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhLnBpY3R1cmUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBpY3R1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEucmVjdGFuZ3VsYXJfcGljdHVyZSkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEucmVjdGFuZ3VsYXJfcGljdHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBkYXRhLmlkO1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAuYWRkUG9zdChkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdSZXNvdXJjZS5BZGRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0VGFncyhyZXNwb25zZS5pZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFzcGVjdFJhdGlvKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFzcGVjdFdpZHRoIC8gdGhpcy5hc3BlY3RIZWlnaHQ7XG4gICAgfVxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZVJlY3Rhbmd1bGFyUGljdHVyZShkYXRhKTtcbiAgICAgICAgdGhpcy5oYW5kbGVQaWN0dXJlKGRhdGEpO1xuICAgICAgICB0aGlzLmhhbmRsZVB1Ymxpc2hlZEF0KGRhdGEpO1xuICAgICAgICB0aGlzLmhhbmRsZUFjY2VwdGVkQXQoZGF0YSk7XG4gICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uYWxGaWVsZHMoZGF0YSk7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVtb3ZhbHMoZGF0YSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3N0KGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUmVjdGFuZ3VsYXJQaWN0dXJlKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMucmVjdGFuZ3VsYXJGaWxlKSB7XG4gICAgICAgICAgICBkYXRhLnJlY3Rhbmd1bGFyX3BpY3R1cmUgPSB0aGlzLnJlY3Rhbmd1bGFyRmlsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnJlY3Rhbmd1bGFyX3BpY3R1cmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBpY3R1cmUoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBkYXRhLnBpY3R1cmUgPSB0aGlzLmZpbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5waWN0dXJlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQdWJsaXNoZWRBdChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdwdWJsaXNoZWRfYXQnKTtcbiAgICAgICAgaWYgKGNvbnRyb2w/LmRpcnR5KSB7XG4gICAgICAgICAgICBkYXRhLnB1Ymxpc2hlZF9hdCA9IGNvbnRyb2wudmFsdWUgPyBtb21lbnQoKS5mb3JtYXQoJ0RELU1NTS1ZWVlZJykgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnB1Ymxpc2hlZF9hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQWNjZXB0ZWRBdChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdhY2NlcHRlZF9hdCcpO1xuICAgICAgICBpZiAoY29udHJvbD8uZGlydHkpIHtcbiAgICAgICAgICAgIGRhdGEuYWNjZXB0ZWRfYXQgPSBjb250cm9sLnZhbHVlID8gbW9tZW50KCkuZm9ybWF0KCdERC1NTU0tWVlZWScpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5hY2NlcHRlZF9hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT3B0aW9uYWxGaWVsZHMoZGF0YSkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS5nZXQoJ3doZW4nKT8udmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGEud2hlbiA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5mb3JtLmdldCgnc2hvd2Nhc2UnKT8udmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGEuc2hvd2Nhc2UgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUmVtb3ZhbHMoZGF0YSkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZSAmJiAhdGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgZGF0YS5yZW1vdmVfcGljdHVyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnJlY3Rhbmd1bGFyRmlsZSAmJiAhdGhpcy5yZWN0YW5ndWxhckltYWdlKSB7XG4gICAgICAgICAgICBkYXRhLnJlbW92ZV9yZWN0YW5ndWxhcl9waWN0dXJlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBvc3QoZGF0YSkge1xuICAgICAgICB0aGlzLnBvc3RUYWdzKHRoaXMuYmxvZy5pZCk7XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVQb3N0KGRhdGEsIHRoaXMuaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ1Jlc291cmNlLlVwZGF0ZWRNZXNzYWdlJykpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUmVzb3VyY2VMaXN0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9SZXNvdXJjZUxpc3QoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLycgKyB0aGlzLnJvdXRlcnMucmVzb3VyY2VzTGlzdF0sIHtcbiAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5maWx0ZXJEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvdmVySW1hZ2UoKSB7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIGRlbGV0ZVJlY3Rhbmd1bGFySW1hZ2UoKSB7XG4gICAgICAgIHRoaXMucmVjdGFuZ3VsYXJJbWFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMucmVjdGFuZ3VsYXJGaWxlID0gbnVsbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRQb3N0VGFncygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VGFnc0J5VHlwZSgncG9zdF9jYXRlZ29yaWVzJywge30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFRhZ3MgPSByZXNwb25zZS50YWdzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKGV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmFsbFRhZ3MuZmlsdGVyKHggPT5cbiAgICAgICAgICAgICAgICB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxsVGFncy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdzU3VnZ2VzdGlvbiA9IHZhbHVlcztcbiAgICB9XG5cbiAgICBwb3N0VGFncyhpZDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIGVudGl0eV90YWdzOiB0aGlzLnNlbGVjdGVkVGFncy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0YWdbJ3RhZ19pZCddID0gaXRlbS5pZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNsdWc6IGlkLFxuICAgICAgICAgICAgICAgIHRhZ19lbnRpdHk6IFRBR19FTlRJVFkuUE9TVFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLmFkZFRhZ3MoZGF0YSkuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIHRoZSBzdWJzY3JpcHRpb24gdG8gcG9wdWxhdGUgdGhlIEF1dGhvciBkcm9wZG93blxuICAgICAqIFVzZXMgdGhlIHNhbWUgQVBJIGFuZCBwYXR0ZXJuIGFzIEVudGVycHJpc2UvTWVtYmVycyBVSVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmxlQXV0aG9ycygpIHtcbiAgICAgICAgdGhpcy5hdXRob3JzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhZ2luZzogUGFnaW5nID0ge1xuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgICAgIG9yZGVyX2J5OiAnJyxcbiAgICAgICAgICAgIG9yZGVyX2RpcmVjdGlvbjogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0RW5yb2xsZWRTdWJzY3JpcHRpb24odGhpcy5zdWJzY3JpcHRpb25JZCwgcGFnaW5nKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRob3JzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8ubWVtYmVycyAmJiByZXNwb25zZS5tZW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG1lbWJlcnMgZGF0YSBmb3IgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVBdXRob3JzID0gcmVzcG9uc2UubWVtYmVycy5tYXAobWVtYmVyID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHttZW1iZXIuZmlyc3RfbmFtZSA/PyAnJ30gJHttZW1iZXIubGFzdF9uYW1lID8/ICcnfWAudHJpbSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1lbWJlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiBtZW1iZXIuZW1haWxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhpc3RpbmcgYXV0aG9yX2lkIGZyb20gdGhlIGJsb2cgZGF0YSwgc2V0IGl0IG5vdyB0aGF0IG9wdGlvbnMgYXJlIGxvYWRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ibG9nPy5hdXRob3JfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2F1dGhvcl9pZCcpLnNldFZhbHVlKHRoaXMuYmxvZy5hdXRob3JfaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgYXV0aG9yczonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWJvZHlcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTYgbXQtNFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1Jlc291cmNlTGlzdCgpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICAgICAgIEFkZCBvciBlZGl0IHJlc291cmNlXG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgICAgICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8IS0tIFRpdGxlIC0tPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0xhYmVsLlRpdGxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidSZXNvdXJjZS5Qb3N0cy5WYWxpZGF0aW9uLlRpdGxlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIEJsdXJiIC0tPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkJsdXJiJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgICAgICAgbmFtZT1cImJsdXJiXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJibHVyYlwiXG4gICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidUaGUgYmx1cmIgaXMgdXNlZCBmb3IgdGhlIG1ldGFkYXRhLmRlc2NyaXB0aW9uIGZpZWxkJ1wiPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJibHVyYlwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTaG9ydCBkZXNjcmlwdGlvbiBmb3IgU0VPIG1ldGEgZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgPCEtLSBSaWNoIFRleHQgRWRpdG9yIC0tPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkJvZHknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtOSBjb2wtbWQtOSBjb2wtc20tMTJcIlxuICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInUmVzb3VyY2UuUG9zdHMuVmFsaWRhdGlvbi5Cb2R5JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICc1MDBweCcgfVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicXVpbGxFZGl0b3JcIiBbbW9kdWxlc109XCJlZGl0b3JDb25maWdcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJvZHlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICd3LTEwMCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAncXVpbGwtY29udGFpbmVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2JvZHknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0zIGNvbC1zbS00IG15LTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY292ZXJQaWN0dXJlXCI+e3sgJ1Jlc291cmNlLlBvc3RzLkNvdmVyUGljdHVyZScgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiKGltYWdlICE9PSBudWxsICYmICFpbWFnZT8uaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJykgKT8gaW1hZ2UgOiAnYXNzZXRzL2ltZy9yZXNvdXJjZS9ibG9nLnBuZydcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5Nb2RhbChjb250ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Nb2RhbChjb250ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZSB3LTEwMFwiIGFsdD1cIk1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQsICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNsdWcgIT09ICdjcmVhdGUnID8gJ0VkaXQnIDogJ0FkZCcgfX0gUGljdHVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb24gdGV4dC1kYW5nZXIgbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbW92ZSBJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ292ZXJJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRlbGV0ZUNvdmVySW1hZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImltYWdlICYmICFpbWFnZS5pbmNsdWRlcygnZGVmYXVsdC1waG90by5qcGcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIFJlY3Rhbmd1bGFyIFBpY3R1cmUgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlY3Rhbmd1bGFyUGljdHVyZVwiPlJlY3Rhbmd1bGFyIFBpY3R1cmU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiKHJlY3Rhbmd1bGFySW1hZ2UgIT09IG51bGwgJiYgIXJlY3Rhbmd1bGFySW1hZ2U/LmluY2x1ZGVzKCdkZWZhdWx0LXBob3RvLmpwZycpKSA/IHJlY3Rhbmd1bGFySW1hZ2UgOiAnYXNzZXRzL2ltZy9yZXNvdXJjZS9ibG9nLnBuZydcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlblJlY3RNb2RhbChyZWN0Q29udGVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SZWN0TW9kYWwocmVjdENvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2UgcmVjLWltZ1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd3LTEwMCc6IHJlY3Rhbmd1bGFySW1hZ2UgPT09IG51bGwgfHwgcmVjdGFuZ3VsYXJJbWFnZT8uaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJykgfVwiXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJVcGxvYWRlZCByZWN0YW5ndWxhciBtZWRpYSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVJbWFnZUVycm9yKCRldmVudCwgJ2Fzc2V0cy9pbWcvcmVzb3VyY2UvYmxvZy5wbmcnKVwiIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiAoY2xpY2spPVwib3BlblJlY3RNb2RhbChyZWN0Q29udGVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBzbHVnICE9PSAnY3JlYXRlJyA/ICdFZGl0JyA6ICdBZGQnIH19IFBpY3R1cmVcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb24gdGV4dC1kYW5nZXIgbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgSW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWN0YW5ndWxhckltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRlbGV0ZVJlY3Rhbmd1bGFySW1hZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZWN0YW5ndWxhckltYWdlICYmICFyZWN0YW5ndWxhckltYWdlLmluY2x1ZGVzKCdkZWZhdWx0LXBob3RvLmpwZycpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5DdGFUZXh0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCJcbiAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuQ3RhVGV4dCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBuYW1lPVwiY3RhX3RleHRcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3RhX3RleHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndGl0bGUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkV4dGVybmFsVXJsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCJcbiAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuRXh0ZXJuYWxVcmwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImV4dGVybmFsX3VybFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJleHRlcm5hbF91cmxcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZXh0ZXJuYWxfdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5UYWdzJyB8IHRyYW5zbG9jbyBcIiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtMTIgY29sLW1kLTYgY29sLXNtLTEyIHRhZ3NcIlxuICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInUmVzb3VyY2UuUG9zdHMuVG9vbHRpcC5DdGFUZXh0JyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJjdGFfdGV4dFwiPlxuICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRhZ3NcIiBjbGFzcz1cImJvZHktYmdcIiBbc3VnZ2VzdGlvbnNdPVwidGFnc1N1Z2dlc3Rpb25cIiBkYXRhS2V5PVwiaWRcIiBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJzZWFyY2goJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiIFttaW5MZW5ndGhdPVwiMVwiIFttYXhsZW5ndGhdPVwiMTBcIiBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgcGxhY2Vob2xkZXI9XCJUYWdzXCIgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQXV0aG9yJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1tZC00IGNvbC1zbS02XCJcbiAgICAgICAgICAgICAgbmFtZT1cImF1dGhvcl9pZFwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInUGxlYXNlIHNlbGVjdCBhbiBhdXRob3InIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXV0aG9yX2lkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVBdXRob3JzXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBBdXRob3InIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJhdXRob3JzTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydhdXRob3JfaWQnXS5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtYXV0aG9yPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBhdXRob3IubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgIDwhLS0gV0hFTiBhbmQgQVVUSE9SIG9uIHNhbWUgbGluZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTIgY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuV2hlbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLldoZW4nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ3aGVuXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBmb3JtQ29udHJvbE5hbWU9XCJ3aGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD1cImRkLU0teXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IERhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnd2hlbiddLmVycm9yc31cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQXV0aG9yIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPCEtLSBUaHJlZSB0b2dnbGVzIG9uIG5leHQgbGluZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTIgY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuU2hvd0Nhc2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLlNob3dDYXNlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJzaG93Y2FzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd2Nhc2VcIiBuYW1lPVwic2hvd2Nhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS1QdWJsaXNoZWQgQXQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLlB1Ymxpc2hlZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuUHVibGlzaGVkJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInB1Ymxpc2hlZF9hdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdWJsaXNoZWRfYXRcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwdWJsaXNoZWRfYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tQWNjZXB0ZWQgQXQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMiBjb2wtc20tNiBhY2NlcHQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLkFjY2VwdGVkQnlBZG1pbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuQWNjZXB0ZWRCeUFkbWluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFjY2VwdGVkX2F0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjY2VwdGVkX2F0XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWNjZXB0ZWRfYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHRleHQtZW5kIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvUmVzb3VyY2VMaXN0KClcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwic3VibWl0dGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRcbiAgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgUGljdHVyZTwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxuXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxzbWFsbD5Zb3UgY2FuIHVwbG9hZCBhIEpQRywgR0lGLCBvciBQTkcgZmlsZS4gKERvIG5vdCB1cGxvYWQgcGljdHVyZXMgY29udGFpbmluZyBjZWxlYnJpdGllcyxcbiAgICAgIG51ZGl0eSwgYXJ0d29yayBvciBjb3B5cmlnaHRlZCBpbWFnZXMuKTwvc21hbGw+XG4gICAgPHB3LWltYWdlLWNyb3BwZXIgI3Byb2ZpbGVcbiAgICAgIGFzcGVjdFJhdGlvPVwiYXV0b1wiXG4gICAgICAoaW1hZ2VTZWxlY3Rpb25FdmVudCk9XCJvbkltYWdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKGNsb3NlRXZlbnQpPVwib25DbG9zZSgpXCI+XG4gICAgPC9wdy1pbWFnZS1jcm9wcGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVjdENvbnRlbnQgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgUGljdHVyZTwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxzbWFsbD5cbiAgICAgIFlvdSBjYW4gdXBsb2FkIGEgSlBHLCBHSUYsIG9yIFBORyBmaWxlLiAoRG8gbm90IHVwbG9hZCBwaWN0dXJlcyBjb250YWluaW5nIGNlbGVicml0aWVzLFxuICAgICAgbnVkaXR5LCBhcnR3b3JrIG9yIGNvcHlyaWdodGVkIGltYWdlcy4pXG4gICAgPC9zbWFsbD5cblxuXG4gICAgPHB3LWltYWdlLWNyb3BwZXJcbiAgICAgICNwcm9maWxlXG4gICAgICBbYXNwZWN0UmF0aW9dPVwiJ2R5bmFtaWMnXCJcbiAgICAgIFtkeW5hbWljRGF0YV09XCJnZXRBc3BlY3RSYXRpbygpXCJcbiAgICAgIChpbWFnZVNlbGVjdGlvbkV2ZW50KT1cIm9uUmVjdGFuZ3VsYXJJbWFnZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2UoKVwiPlxuICAgIDwvcHctaW1hZ2UtY3JvcHBlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Component, Injector } from '@angular/core';
|
|
2
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@posiwise/shared-components";
|
|
5
|
-
export class ResourcesAdminIndexComponent extends AppBaseComponent {
|
|
6
|
-
constructor(injector) {
|
|
7
|
-
super(injector);
|
|
8
|
-
this.items = [
|
|
9
|
-
{
|
|
10
|
-
id: 'resources_index',
|
|
11
|
-
label: 'Resources',
|
|
12
|
-
icon: 'fa fa-fw fa-list',
|
|
13
|
-
routerLink: ['/admin/resources/list']
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
id: 'insight',
|
|
17
|
-
label: 'Insight',
|
|
18
|
-
icon: 'fa fa-fw fa-tag',
|
|
19
|
-
routerLink: ['/admin/resources/insight']
|
|
20
|
-
}
|
|
21
|
-
];
|
|
22
|
-
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourcesAdminIndexComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourcesAdminIndexComponent, selector: "pw-post-admin-tabs", usesInheritance: true, ngImport: i0, template: `<pw-tabs [items]="items"></pw-tabs>`, isInline: true, dependencies: [{ kind: "component", type: i1.PwTabsComponent, selector: "pw-tabs", inputs: ["items", "withSubscription"] }] }); }
|
|
25
|
-
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourcesAdminIndexComponent, decorators: [{
|
|
27
|
-
type: Component,
|
|
28
|
-
args: [{
|
|
29
|
-
selector: 'pw-post-admin-tabs',
|
|
30
|
-
template: `<pw-tabs [items]="items"></pw-tabs>`
|
|
31
|
-
}]
|
|
32
|
-
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLWFkbWluLXRhYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3Jlc291cmNlcy9yZXNvdXJjZXMtYWRtaW4tdGFicy9yZXNvdXJjZXMtYWRtaW4tdGFicy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVFoRSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsZ0JBQWdCO0lBQzlELFlBQVksUUFBa0I7UUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBCLFVBQUssR0FBZTtZQUNoQjtnQkFDSSxFQUFFLEVBQUUsaUJBQWlCO2dCQUNyQixLQUFLLEVBQUUsV0FBVztnQkFDbEIsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsVUFBVSxFQUFFLENBQUMsdUJBQXVCLENBQUM7YUFDeEM7WUFDRDtnQkFDSSxFQUFFLEVBQUUsU0FBUztnQkFDYixLQUFLLEVBQUUsU0FBUztnQkFDaEIsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsVUFBVSxFQUFFLENBQUMsMEJBQTBCLENBQUM7YUFDM0M7U0FDSixDQUFDO0lBZEYsQ0FBQzsrR0FIUSw0QkFBNEI7bUdBQTVCLDRCQUE0QixpRkFGM0IscUNBQXFDOzs0RkFFdEMsNEJBQTRCO2tCQUp4QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxxQ0FBcUM7aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXBvc3QtYWRtaW4tdGFicycsXG4gICAgdGVtcGxhdGU6IGA8cHctdGFicyBbaXRlbXNdPVwiaXRlbXNcIj48L3B3LXRhYnM+YFxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZXNBZG1pbkluZGV4Q29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG4gICAgaXRlbXM6IE1lbnVJdGVtW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAncmVzb3VyY2VzX2luZGV4JyxcbiAgICAgICAgICAgIGxhYmVsOiAnUmVzb3VyY2VzJyxcbiAgICAgICAgICAgIGljb246ICdmYSBmYS1mdyBmYS1saXN0JyxcbiAgICAgICAgICAgIHJvdXRlckxpbms6IFsnL2FkbWluL3Jlc291cmNlcy9saXN0J11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdpbnNpZ2h0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnSW5zaWdodCcsXG4gICAgICAgICAgICBpY29uOiAnZmEgZmEtZncgZmEtdGFnJyxcbiAgICAgICAgICAgIHJvdXRlckxpbms6IFsnL2FkbWluL3Jlc291cmNlcy9pbnNpZ2h0J11cbiAgICAgICAgfVxuICAgIF07XG59XG4iXX0=
|