@deeksha2309/sunbird-collection-editor 8.0.7
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/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash-es';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/helper/helper.service";
|
|
5
|
+
import * as i2 from "../../services/toaster/toaster.service";
|
|
6
|
+
import * as i3 from "../../services/config/config.service";
|
|
7
|
+
import * as i4 from "../../services/editor/editor.service";
|
|
8
|
+
import * as i5 from "../../services/telemetry/telemetry.service";
|
|
9
|
+
import * as i6 from "@angular/common";
|
|
10
|
+
import * as i7 from "@angular/forms";
|
|
11
|
+
import * as i8 from "@project-sunbird/ng2-semantic-ui";
|
|
12
|
+
import * as i9 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
13
|
+
export class ManageCollaboratorComponent {
|
|
14
|
+
constructor(helperService, toasterService, configService, editorService, telemetryService) {
|
|
15
|
+
this.helperService = helperService;
|
|
16
|
+
this.toasterService = toasterService;
|
|
17
|
+
this.configService = configService;
|
|
18
|
+
this.editorService = editorService;
|
|
19
|
+
this.telemetryService = telemetryService;
|
|
20
|
+
this.modalDismissEmitter = new EventEmitter();
|
|
21
|
+
this.selectedUsers = [];
|
|
22
|
+
this.selectedcollaborators = [];
|
|
23
|
+
this.users = [];
|
|
24
|
+
this.collaborators = [];
|
|
25
|
+
this.manageCollaboratorTabVisit = 0;
|
|
26
|
+
this.updatedCollaborators = [];
|
|
27
|
+
this.searchKeyword = '';
|
|
28
|
+
this.searchRes = { count: 0, content: [], isEmptyResponse: false, errorMessage: '', searchStatus: 'start' };
|
|
29
|
+
this.userSearchBody = {
|
|
30
|
+
request: {
|
|
31
|
+
query: '',
|
|
32
|
+
filters: {
|
|
33
|
+
'organisations.roles': 'CONTENT_CREATOR',
|
|
34
|
+
rootOrgId: ''
|
|
35
|
+
},
|
|
36
|
+
fields: ['email', 'firstName', 'identifier', 'lastName', 'organisations', 'rootOrgName', 'phone'],
|
|
37
|
+
offset: 0,
|
|
38
|
+
limit: 200
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
this.isContentOwner = false;
|
|
42
|
+
this.allUsersCount = 0;
|
|
43
|
+
}
|
|
44
|
+
ngOnInit() {
|
|
45
|
+
this.currentUser = _.get(this.editorService.editorConfig, 'context.user');
|
|
46
|
+
this.isRootOrgAdmin = _.has(this.currentUser, 'isRootOrgAdmin') ? this.currentUser.isRootOrgAdmin : false;
|
|
47
|
+
if (_.has(this.currentUser, 'orgIds')) {
|
|
48
|
+
this.userSearchBody.request.filters.rootOrgId = this.currentUser.orgIds;
|
|
49
|
+
}
|
|
50
|
+
this.setCreatorAndCollaborators();
|
|
51
|
+
}
|
|
52
|
+
setCreatorAndCollaborators() {
|
|
53
|
+
this.editorService.fetchContentDetails(this.collectionId).subscribe(res => {
|
|
54
|
+
this.contentCollaborators = _.get(res.result.content, 'collaborators', []);
|
|
55
|
+
this.contentOwner = [_.get(res.result.content, 'createdBy')];
|
|
56
|
+
this.creatorAndCollaboratorsIds = [...this.contentCollaborators, ...this.contentOwner];
|
|
57
|
+
this.checkUserRole();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
checkUserRole() {
|
|
61
|
+
if (this.contentOwner && (this.contentOwner[0] === this.currentUser.id)) {
|
|
62
|
+
this.isContentOwner = true;
|
|
63
|
+
}
|
|
64
|
+
if (this.isContentOwner || this.isRootOrgAdmin) {
|
|
65
|
+
this.isAddCollaboratorTab = true;
|
|
66
|
+
this.getAllUserList();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.getCollaborators();
|
|
70
|
+
}
|
|
71
|
+
this.showCollaborationPopup = this.addCollaborator;
|
|
72
|
+
}
|
|
73
|
+
dismissCollaborationPopup() {
|
|
74
|
+
this.showCollaborationPopup = false;
|
|
75
|
+
this.modalDismissEmitter.emit({});
|
|
76
|
+
}
|
|
77
|
+
getAllUserList() {
|
|
78
|
+
this.helperService.getAllUser(this.userSearchBody).subscribe((response) => {
|
|
79
|
+
this.users = [];
|
|
80
|
+
if (_.has(response, 'result.response.content')) {
|
|
81
|
+
const allUsers = _.get(response, 'result.response.content');
|
|
82
|
+
this.allUsersCount = allUsers.length - 1;
|
|
83
|
+
this.users = this.excludeCreatorAndCollaborators(allUsers);
|
|
84
|
+
}
|
|
85
|
+
}, (error) => {
|
|
86
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
87
|
+
console.log(error);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
excludeCreatorAndCollaborators(allUsers) {
|
|
91
|
+
return _.filter(allUsers, user => {
|
|
92
|
+
return !_.includes(this.creatorAndCollaboratorsIds, user.identifier);
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
toggleSelectionUser(userIdentifier) {
|
|
96
|
+
_.forEach(this.users, user => {
|
|
97
|
+
if (user.identifier === userIdentifier) {
|
|
98
|
+
if (_.has(user, 'isSelected') && user.isSelected === true) {
|
|
99
|
+
user.isSelected = false;
|
|
100
|
+
const index = this.selectedUsers.indexOf(userIdentifier);
|
|
101
|
+
if (index > -1) {
|
|
102
|
+
this.selectedUsers.splice(index, 1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
user.isSelected = true;
|
|
107
|
+
this.selectedUsers.push(userIdentifier);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
toggleSelectionCollaborator(userIdentifier) {
|
|
113
|
+
_.forEach(this.collaborators, user => {
|
|
114
|
+
if (user.identifier === userIdentifier) {
|
|
115
|
+
if (_.has(user, 'isSelected') && user.isSelected === true) {
|
|
116
|
+
user.isSelected = false;
|
|
117
|
+
const index = this.selectedcollaborators.indexOf(userIdentifier);
|
|
118
|
+
if (index > -1) {
|
|
119
|
+
this.selectedcollaborators.splice(index, 1);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
user.isSelected = true;
|
|
124
|
+
this.selectedcollaborators.push(userIdentifier);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
addRemoveCollaboratorToCourse(modal) {
|
|
130
|
+
this.updatedCollaborators = this.contentCollaborators;
|
|
131
|
+
this.updatedCollaborators = _.concat(this.updatedCollaborators, this.selectedUsers);
|
|
132
|
+
this.updatedCollaborators = _.difference(this.updatedCollaborators, this.selectedcollaborators);
|
|
133
|
+
this.helperService.updateCollaborator(this.collectionId, this.updatedCollaborators).subscribe((response) => {
|
|
134
|
+
if (response.params.status === 'successful') {
|
|
135
|
+
this.toasterService.success(_.get(this.configService, 'labelConfig.messages.success.012'));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
139
|
+
}
|
|
140
|
+
}, (error) => {
|
|
141
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
142
|
+
console.log(error);
|
|
143
|
+
});
|
|
144
|
+
modal.deny();
|
|
145
|
+
}
|
|
146
|
+
/* to be called when user change tab to add collaborator */
|
|
147
|
+
getAllusers() {
|
|
148
|
+
this.isAddCollaboratorTab = true;
|
|
149
|
+
}
|
|
150
|
+
/* to be called when user change tab to manage collaborator */
|
|
151
|
+
getCollaborators() {
|
|
152
|
+
this.isAddCollaboratorTab = false;
|
|
153
|
+
this.manageCollaboratorTabVisit += 1;
|
|
154
|
+
if (this.manageCollaboratorTabVisit <= 1) {
|
|
155
|
+
// tslint:disable-next-line:no-string-literal
|
|
156
|
+
this.userSearchBody.request.filters['userId'] = this.contentCollaborators;
|
|
157
|
+
if (!_.isEmpty(this.contentCollaborators)) {
|
|
158
|
+
this.helperService.getAllUser(this.userSearchBody).subscribe((response) => {
|
|
159
|
+
this.collaborators = [];
|
|
160
|
+
if (_.has(response, 'result.response.content')) {
|
|
161
|
+
this.collaborators = _.get(response, 'result.response.content');
|
|
162
|
+
}
|
|
163
|
+
}, (error) => {
|
|
164
|
+
this.collaborators = [];
|
|
165
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
166
|
+
console.log(error);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
sortUsersList(value) {
|
|
172
|
+
if (value === 'firstName') {
|
|
173
|
+
this.users = _.orderBy(this.users, [user => user[value].toLowerCase()]);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.users = _.orderBy(this.users, [user => user.organisations[0].orgName ? user.organisations[0].orgName.toLowerCase() : '']);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
searchByKeyword() {
|
|
180
|
+
const searchRequest = this.userSearchBody;
|
|
181
|
+
if (this.validateEmail(this.searchKeyword)) {
|
|
182
|
+
// tslint:disable-next-line:no-string-literal
|
|
183
|
+
searchRequest.request.filters['email'] = this.searchKeyword;
|
|
184
|
+
}
|
|
185
|
+
else if (/^\d+$/.test(this.searchKeyword)) {
|
|
186
|
+
// tslint:disable-next-line:no-string-literal
|
|
187
|
+
searchRequest.request.filters['phone'] = this.searchKeyword;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
searchRequest.request.query = this.searchKeyword;
|
|
191
|
+
}
|
|
192
|
+
this.helperService.getAllUser(searchRequest).subscribe((response) => {
|
|
193
|
+
this.searchRes.searchStatus = 'end';
|
|
194
|
+
if (_.has(response, 'result.response.content')) {
|
|
195
|
+
this.searchRes.content = this.excludeCreatorAndCollaborators(_.get(response, 'result.response.content'));
|
|
196
|
+
if (this.searchRes.content.length) {
|
|
197
|
+
this.searchRes.isEmptyResponse = false;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.searchRes.isEmptyResponse = true;
|
|
201
|
+
this.searchRes.content = [];
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}, (error) => {
|
|
205
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
206
|
+
console.log(error);
|
|
207
|
+
this.searchRes.content = [];
|
|
208
|
+
this.searchRes.isEmptyResponse = true;
|
|
209
|
+
this.searchRes.errorMessage = _.get(this.configService, 'labelConfig.messages.error.001');
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
resetSearch() {
|
|
213
|
+
this.searchRes.content = [];
|
|
214
|
+
this.searchRes.isEmptyResponse = false;
|
|
215
|
+
}
|
|
216
|
+
refreshSearch() {
|
|
217
|
+
this.searchKeyword = '';
|
|
218
|
+
this.searchByKeyword();
|
|
219
|
+
}
|
|
220
|
+
validateEmail(email) {
|
|
221
|
+
// tslint:disable-next-line:max-line-length
|
|
222
|
+
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
223
|
+
return re.test(String(email).toLowerCase());
|
|
224
|
+
}
|
|
225
|
+
selectUser(user) {
|
|
226
|
+
user.isSelected = true;
|
|
227
|
+
let index = _.findIndex(this.users, (element) => { return element.identifier === user.identifier; });
|
|
228
|
+
if (index > -1) {
|
|
229
|
+
this.users.splice(index, 1);
|
|
230
|
+
this.users.unshift(user);
|
|
231
|
+
}
|
|
232
|
+
const selectedIndex = this.selectedUsers.indexOf(user.identifier);
|
|
233
|
+
if (selectedIndex === -1) {
|
|
234
|
+
this.selectedUsers.push(user.identifier);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
viewAllResults() {
|
|
238
|
+
this.users = this.searchRes.content;
|
|
239
|
+
}
|
|
240
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ManageCollaboratorComponent, deps: [{ token: i1.HelperService }, { token: i2.ToasterService }, { token: i3.ConfigService }, { token: i4.EditorService }, { token: i5.EditorTelemetryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
241
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ManageCollaboratorComponent, selector: "lib-manage-collaborator", inputs: { addCollaborator: "addCollaborator", collectionId: "collectionId" }, outputs: { modalDismissEmitter: "modalDismissEmitter" }, viewQueries: [{ propertyName: "modal", first: true, predicate: ["modal"], descendants: true }], ngImport: i0, template: "<sui-modal *ngIf=\"showCollaborationPopup\" [mustScroll]=\"true\" [isClosable]=\"true\" [transitionDuration]=\"0\"\n [size]=\"'fullscreen'\" class=\"sb-modal sb-modal-fullscreen showCollaborator\" appBodyScroll \n (dismissed)=\"dismissCollaborationPopup()\" #modal>\n <div class=\"sb-modal-header\">\n </div>\n <div class=\"sb-modal-content sb-bg-color-primary-100 pt-0\">\n <div class=\"d-flex flex-jc-space-between py-10 flex-align-item-center h-70 sb-bg-color-white\">\n <div class=\"fs-1 font-weight-bold\">{{configService.labelConfig?.lbl?.collaborators}}</div>\n <div>\n <div class=\"sb-search-box small no-btn mr-10\" *ngIf=\"isAddCollaboratorTab\">\n <div class=\"input-div relative\">\n <i class=\"search icon\" aria-hidden=\"true\"></i>\n <input (keyup)=\"searchKeyword.length >= 3 ? searchByKeyword() : resetSearch()\" class=\"sb-search-input\" [(ngModel)]=\"searchKeyword\"\n type=\"text\" placeholder={{configService.labelConfig?.lbl?.searchPlaceholder}} />\n <i class=\"close icon\" aria-hidden=\"true\" (click)=\"refreshSearch()\" [hidden]=\"!(searchRes.searchStatus == 'end' && searchKeyword.length >= 3 )\"></i>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.button_labels?.search_btn_label}}</button>\n </div>\n <div class=\"ui right floated header searcher\" *ngIf=\"isAddCollaboratorTab\">\n <ul *ngIf=\"searchKeyword.length >= 3 && searchRes.content.length\">\n <li class=\"searchResult\" *ngFor=\"let user of searchRes.content\">\n <p (click)=\"selectUser(user)\">{{user.firstName}}</p>\n </li>\n <li class=\"searchResult font-weight-bold\" id=\"view-all-results\" *ngIf=\"searchRes.content.length >= 5\" (click)=\"viewAllResults()\"><span>View All Results</span></li>\n </ul>\n <ul *ngIf=\"searchKeyword.length >= 3 && searchRes.isEmptyResponse\">\n <li class=\"searchResultMsg\"><strong>{{configService.labelConfig?.err?.resultNotFound}}</strong></li>\n </ul>\n <ul *ngIf=\"searchRes.errorMessage.length && (searchKeyword.length >= 3)\">\n <strong class=\"searchResultMsg\">{{searchRes.errorMessage}}</strong>\n </ul>\n </div>\n </div>\n </div>\n <sui-tabset>\n <div class=\"ui pointing secondary menu\">\n <a class=\"item\" *ngIf=\"(isContentOwner || isRootOrgAdmin)\" (activate)=\"getAllusers()\" suiTabHeader=\"1\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_collaborators','click','launch', telemetryService.telemetryPageId)\"\n >{{configService.labelConfig?.lbl?.addCollaborators}}</a>\n <a class=\"item\" (activate)=\"getCollaborators()\" suiTabHeader=\"2\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('manage_collaborators','click','launch', telemetryService.telemetryPageId)\"\n >{{configService.labelConfig?.lbl?.manageCollaborators}}</a>\n </div>\n <div class=\"ui segment px-0 py-15 mt-1 sb-bg-color-primary-100\" suiTabContent=\"1\">\n <div *ngIf=\"!users?.length\" class=\"font-weight-bold sb-bg-color-white p-10\">\n {{configService.labelConfig?.err?.userNotFound}}\n </div>\n <div class=\"d-flex py-10\">\n <div *ngIf=\"users?.length\" class=\"w-100 pt-10 font-weight-bold\">Showing {{users.length}} out of {{allUsersCount}}</div>\n <select class=\"search dropdown py-5 sb-bg-color-white mb-10 font-weight-bold\" *ngIf=\"users?.length\"\n (change)=\"sortUsersList($event.target.value)\">\n <option value=\"\">Sort By</option>\n <option value=\"firstName\">Name</option>\n <option value=\"organisations\">Organisation</option>\n </select>\n </div>\n <div class=\"masonry-grid\" *ngIf=\"users?.length\">\n <div *ngFor=\"let user of users\" class=\"sb-card\">\n <div class=\"sb-card-body\">\n <div class=\"sb-card-metas\">\n <div class=\"sb-card-image mr-16 font-weight-bold\">\n {{(user.firstName).charAt(0)}}\n </div>\n <div class=\"sb-card-meta course\">\n <div class=\"sb-card-meta-item mb-16 font-weight-bold\">\n {{user.firstName}} {{user.lastName}}\n </div>\n <div class=\"sb-color-gray-400 fs-0-92\">\n {{user.organisations[0].orgName}}\n </div>\n </div>\n <div class=\"d-flex flex-align-self-end sb-custom-toggle\">\n <a class=\"sb-color-primary d-flex fs-0-785 font-weight-bold flex-ai-end\" \n *ngIf=\"!user.isSelected\" (click)=\"toggleSelectionUser(user.identifier)\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_user','click','select', telemetryService.telemetryPageId, {identifier: user.identifier})\">\n <i class=\"icon plus\" aria-hidden=\"true\"></i>\n {{configService.labelConfig?.button_labels?.add_btn_label}}\n </a>\n <div class=\"ui right floated compact segment\" *ngIf=\"user.isSelected\" (click)=\"toggleSelectionUser(user.identifier)\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('remove_user','click','select', telemetryService.telemetryPageId, {identifier: user.identifier})\">\n <div class=\"ui mini fitted toggle checkbox\">\n <input type=\"checkbox\" checked><label></label>\n </div>\n </div>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n <div class=\"ui segment px-0 py-15 mt-1 sb-bg-color-primary-100\" suiTabContent=\"2\">\n <div *ngIf=\"!collaborators?.length\" class=\"p-10 font-weight-bold sb-bg-color-white\">\n {{configService.labelConfig?.err?.collaboratorsNotFound}}\n </div>\n <div *ngIf=\"collaborators?.length\" class=\"w-100 pt-10 font-weight-bold\">{{collaborators.length}} collaborators exists</div>\n <div class=\"masonry-grid mt-20\" *ngIf=\"collaborators?.length\">\n <div *ngFor=\"let collaborator of collaborators\" class=\"sb-card\">\n <div class=\"sb-card-body\">\n <div class=\"sb-card-metas\">\n <div class=\"sb-card-image mr-16\">\n {{(collaborator.firstName).charAt(0)}}\n </div>\n <div class=\"sb-card-meta course\">\n <div class=\"sb-card-meta-item mb-16 font-weight-bold\">\n {{collaborator.firstName}} {{collaborator.lastName}}\n </div>\n <div class=\"sb-color-gray-400 fs-0-92\">\n {{collaborator.organisations[0].orgName}}\n </div>\n </div>\n <div class=\"d-flex flex-align-self-end sb-custom-toggle\">\n <a class=\"sb-color-error d-flex fs-0-785 font-weight-bold flex-ai-end\" \n *ngIf=\"!collaborator.isSelected && (isContentOwner || isRootOrgAdmin)\" (click)=\"toggleSelectionCollaborator(collaborator.identifier)\"\n libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('remove_collaborator','click','select',\n telemetryService.telemetryPageId, {identifier: collaborator.identifier})\">\n {{configService.labelConfig?.button_labels?.remove_btn_label}}\n </a>\n <div class=\"ui right floated compact segment\" *ngIf=\"collaborator.isSelected && (isContentOwner || isRootOrgAdmin)\" (click)=\"toggleSelectionCollaborator(collaborator.identifier)\"\n libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_collaborator','click','select',\n telemetryService.telemetryPageId, {identifier: collaborator.identifier})\">\n <div class=\"ui mini fitted toggle checkbox\">\n <input type=\"checkbox\" checked><label></label>\n </div>\n </div>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </sui-tabset>\n </div>\n <div class=\"sb-modal-actions\">\n <button class=\"sb-btn sb-btn-normal sb-btn-primary\"\n [ngClass]=\"{'sb-btn-disabled': (selectedUsers.length === 0 && selectedcollaborators.length === 0)}\"\n [disabled]=\"(selectedUsers.length === 0 && selectedcollaborators.length === 0)\"\n (click)=\"addRemoveCollaboratorToCourse(modal)\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('done','click','submit',\n telemetryService?.telemetryPageId)\">\n {{configService.labelConfig?.button_labels?.done_btn_label}}\n </button>\n </div>\n</sui-modal>\n", styles: [".sb-custom-toggle{height:20px;width:42px}.sb-custom-toggle .compact{padding:0!important;margin:0!important;border:0!important}.sb-custom-toggle .checkbox{transform:scale(.7)}.searcher{border-radius:.28571429rem!important;box-shadow:0 2px 4px #2224261f,0 2px 10px #22242626!important;padding:0;background:#fff;margin:0!important;font-size:.785rem!important;width:206px;z-index:9;position:absolute;cursor:pointer}.searcher ul{padding:10px 0 0!important;background:#fff}.searcher ul li{margin-bottom:5px!important;padding-left:34px}.searcher ul li:hover{background:#d8dee2}.flex-align-item-center{align-items:center}.h-70{height:70px}.mt-50{margin-top:50px}.sb-card{background-color:var(--white);border:.0625rem solid #dedede;border-radius:.25rem;cursor:pointer;overflow:hidden;position:relative;transition:box-shadow .3s ease-out,transform .3s ease-out,opacity .2s ease-out;transition-delay:.1s;margin:.1875rem .6rem .6rem 0}.sb-card:hover{transform:translateY(-.1875rem);box-shadow:0 .125rem .4375rem #cac5c5}.sb-card .sb-card-body{height:5.75rem;padding:1rem 1rem .5rem;overflow:hidden}.sb-card .sb-card-metas{display:flex;align-items:flex-start}.sb-card .sb-card-image{width:3.75rem;height:3.75rem;border:.0625rem solid var(--gray-100);background-color:#34495e;color:#fff;border-radius:100%;margin:0 1rem 0 0;font-size:2rem;text-align:center;line-height:3.5rem}.sb-card .sb-card-image img{width:4.375rem;height:5.75rem;object-fit:cover}.sb-card .sb-card-meta{height:3.75rem;width:9rem;display:flex;flex-wrap:wrap;flex-direction:column;overflow:hidden}.masonry-grid{display:flex;flex-wrap:wrap}.flex-align-self-end{align-self:flex-end}.masonry-grid .ui.toggle.checkbox input:checked~.box:after{left:2rem!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.SuiDropdownMenuItem, selector: ".item" }, { kind: "component", type: i8.SuiModal, selector: "sui-modal", inputs: ["isClosable", "closeResult", "size", "isCentered", "isFullScreen", "isBasic", "mustScroll", "isInverted", "transition", "transitionDuration"], outputs: ["approved", "denied", "dismissed"] }, { kind: "component", type: i8.SuiTabset, selector: "sui-tabset" }, { kind: "directive", type: i8.SuiTabHeader, selector: "[suiTabHeader]", inputs: ["suiTabHeader", "isActive", "isDisabled"], outputs: ["isActiveChange", "activate", "deactivate"] }, { kind: "directive", type: i8.SuiTabContent, selector: "[suiTabContent]", inputs: ["suiTabContent"] }, { kind: "directive", type: i9.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }] }); }
|
|
242
|
+
}
|
|
243
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ManageCollaboratorComponent, decorators: [{
|
|
244
|
+
type: Component,
|
|
245
|
+
args: [{ selector: 'lib-manage-collaborator', template: "<sui-modal *ngIf=\"showCollaborationPopup\" [mustScroll]=\"true\" [isClosable]=\"true\" [transitionDuration]=\"0\"\n [size]=\"'fullscreen'\" class=\"sb-modal sb-modal-fullscreen showCollaborator\" appBodyScroll \n (dismissed)=\"dismissCollaborationPopup()\" #modal>\n <div class=\"sb-modal-header\">\n </div>\n <div class=\"sb-modal-content sb-bg-color-primary-100 pt-0\">\n <div class=\"d-flex flex-jc-space-between py-10 flex-align-item-center h-70 sb-bg-color-white\">\n <div class=\"fs-1 font-weight-bold\">{{configService.labelConfig?.lbl?.collaborators}}</div>\n <div>\n <div class=\"sb-search-box small no-btn mr-10\" *ngIf=\"isAddCollaboratorTab\">\n <div class=\"input-div relative\">\n <i class=\"search icon\" aria-hidden=\"true\"></i>\n <input (keyup)=\"searchKeyword.length >= 3 ? searchByKeyword() : resetSearch()\" class=\"sb-search-input\" [(ngModel)]=\"searchKeyword\"\n type=\"text\" placeholder={{configService.labelConfig?.lbl?.searchPlaceholder}} />\n <i class=\"close icon\" aria-hidden=\"true\" (click)=\"refreshSearch()\" [hidden]=\"!(searchRes.searchStatus == 'end' && searchKeyword.length >= 3 )\"></i>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.button_labels?.search_btn_label}}</button>\n </div>\n <div class=\"ui right floated header searcher\" *ngIf=\"isAddCollaboratorTab\">\n <ul *ngIf=\"searchKeyword.length >= 3 && searchRes.content.length\">\n <li class=\"searchResult\" *ngFor=\"let user of searchRes.content\">\n <p (click)=\"selectUser(user)\">{{user.firstName}}</p>\n </li>\n <li class=\"searchResult font-weight-bold\" id=\"view-all-results\" *ngIf=\"searchRes.content.length >= 5\" (click)=\"viewAllResults()\"><span>View All Results</span></li>\n </ul>\n <ul *ngIf=\"searchKeyword.length >= 3 && searchRes.isEmptyResponse\">\n <li class=\"searchResultMsg\"><strong>{{configService.labelConfig?.err?.resultNotFound}}</strong></li>\n </ul>\n <ul *ngIf=\"searchRes.errorMessage.length && (searchKeyword.length >= 3)\">\n <strong class=\"searchResultMsg\">{{searchRes.errorMessage}}</strong>\n </ul>\n </div>\n </div>\n </div>\n <sui-tabset>\n <div class=\"ui pointing secondary menu\">\n <a class=\"item\" *ngIf=\"(isContentOwner || isRootOrgAdmin)\" (activate)=\"getAllusers()\" suiTabHeader=\"1\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_collaborators','click','launch', telemetryService.telemetryPageId)\"\n >{{configService.labelConfig?.lbl?.addCollaborators}}</a>\n <a class=\"item\" (activate)=\"getCollaborators()\" suiTabHeader=\"2\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('manage_collaborators','click','launch', telemetryService.telemetryPageId)\"\n >{{configService.labelConfig?.lbl?.manageCollaborators}}</a>\n </div>\n <div class=\"ui segment px-0 py-15 mt-1 sb-bg-color-primary-100\" suiTabContent=\"1\">\n <div *ngIf=\"!users?.length\" class=\"font-weight-bold sb-bg-color-white p-10\">\n {{configService.labelConfig?.err?.userNotFound}}\n </div>\n <div class=\"d-flex py-10\">\n <div *ngIf=\"users?.length\" class=\"w-100 pt-10 font-weight-bold\">Showing {{users.length}} out of {{allUsersCount}}</div>\n <select class=\"search dropdown py-5 sb-bg-color-white mb-10 font-weight-bold\" *ngIf=\"users?.length\"\n (change)=\"sortUsersList($event.target.value)\">\n <option value=\"\">Sort By</option>\n <option value=\"firstName\">Name</option>\n <option value=\"organisations\">Organisation</option>\n </select>\n </div>\n <div class=\"masonry-grid\" *ngIf=\"users?.length\">\n <div *ngFor=\"let user of users\" class=\"sb-card\">\n <div class=\"sb-card-body\">\n <div class=\"sb-card-metas\">\n <div class=\"sb-card-image mr-16 font-weight-bold\">\n {{(user.firstName).charAt(0)}}\n </div>\n <div class=\"sb-card-meta course\">\n <div class=\"sb-card-meta-item mb-16 font-weight-bold\">\n {{user.firstName}} {{user.lastName}}\n </div>\n <div class=\"sb-color-gray-400 fs-0-92\">\n {{user.organisations[0].orgName}}\n </div>\n </div>\n <div class=\"d-flex flex-align-self-end sb-custom-toggle\">\n <a class=\"sb-color-primary d-flex fs-0-785 font-weight-bold flex-ai-end\" \n *ngIf=\"!user.isSelected\" (click)=\"toggleSelectionUser(user.identifier)\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_user','click','select', telemetryService.telemetryPageId, {identifier: user.identifier})\">\n <i class=\"icon plus\" aria-hidden=\"true\"></i>\n {{configService.labelConfig?.button_labels?.add_btn_label}}\n </a>\n <div class=\"ui right floated compact segment\" *ngIf=\"user.isSelected\" (click)=\"toggleSelectionUser(user.identifier)\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('remove_user','click','select', telemetryService.telemetryPageId, {identifier: user.identifier})\">\n <div class=\"ui mini fitted toggle checkbox\">\n <input type=\"checkbox\" checked><label></label>\n </div>\n </div>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n <div class=\"ui segment px-0 py-15 mt-1 sb-bg-color-primary-100\" suiTabContent=\"2\">\n <div *ngIf=\"!collaborators?.length\" class=\"p-10 font-weight-bold sb-bg-color-white\">\n {{configService.labelConfig?.err?.collaboratorsNotFound}}\n </div>\n <div *ngIf=\"collaborators?.length\" class=\"w-100 pt-10 font-weight-bold\">{{collaborators.length}} collaborators exists</div>\n <div class=\"masonry-grid mt-20\" *ngIf=\"collaborators?.length\">\n <div *ngFor=\"let collaborator of collaborators\" class=\"sb-card\">\n <div class=\"sb-card-body\">\n <div class=\"sb-card-metas\">\n <div class=\"sb-card-image mr-16\">\n {{(collaborator.firstName).charAt(0)}}\n </div>\n <div class=\"sb-card-meta course\">\n <div class=\"sb-card-meta-item mb-16 font-weight-bold\">\n {{collaborator.firstName}} {{collaborator.lastName}}\n </div>\n <div class=\"sb-color-gray-400 fs-0-92\">\n {{collaborator.organisations[0].orgName}}\n </div>\n </div>\n <div class=\"d-flex flex-align-self-end sb-custom-toggle\">\n <a class=\"sb-color-error d-flex fs-0-785 font-weight-bold flex-ai-end\" \n *ngIf=\"!collaborator.isSelected && (isContentOwner || isRootOrgAdmin)\" (click)=\"toggleSelectionCollaborator(collaborator.identifier)\"\n libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('remove_collaborator','click','select',\n telemetryService.telemetryPageId, {identifier: collaborator.identifier})\">\n {{configService.labelConfig?.button_labels?.remove_btn_label}}\n </a>\n <div class=\"ui right floated compact segment\" *ngIf=\"collaborator.isSelected && (isContentOwner || isRootOrgAdmin)\" (click)=\"toggleSelectionCollaborator(collaborator.identifier)\"\n libTelemetryInteract [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('add_collaborator','click','select',\n telemetryService.telemetryPageId, {identifier: collaborator.identifier})\">\n <div class=\"ui mini fitted toggle checkbox\">\n <input type=\"checkbox\" checked><label></label>\n </div>\n </div>\n </div>\n </div>\n </div> \n </div>\n </div>\n </div>\n </sui-tabset>\n </div>\n <div class=\"sb-modal-actions\">\n <button class=\"sb-btn sb-btn-normal sb-btn-primary\"\n [ngClass]=\"{'sb-btn-disabled': (selectedUsers.length === 0 && selectedcollaborators.length === 0)}\"\n [disabled]=\"(selectedUsers.length === 0 && selectedcollaborators.length === 0)\"\n (click)=\"addRemoveCollaboratorToCourse(modal)\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('done','click','submit',\n telemetryService?.telemetryPageId)\">\n {{configService.labelConfig?.button_labels?.done_btn_label}}\n </button>\n </div>\n</sui-modal>\n", styles: [".sb-custom-toggle{height:20px;width:42px}.sb-custom-toggle .compact{padding:0!important;margin:0!important;border:0!important}.sb-custom-toggle .checkbox{transform:scale(.7)}.searcher{border-radius:.28571429rem!important;box-shadow:0 2px 4px #2224261f,0 2px 10px #22242626!important;padding:0;background:#fff;margin:0!important;font-size:.785rem!important;width:206px;z-index:9;position:absolute;cursor:pointer}.searcher ul{padding:10px 0 0!important;background:#fff}.searcher ul li{margin-bottom:5px!important;padding-left:34px}.searcher ul li:hover{background:#d8dee2}.flex-align-item-center{align-items:center}.h-70{height:70px}.mt-50{margin-top:50px}.sb-card{background-color:var(--white);border:.0625rem solid #dedede;border-radius:.25rem;cursor:pointer;overflow:hidden;position:relative;transition:box-shadow .3s ease-out,transform .3s ease-out,opacity .2s ease-out;transition-delay:.1s;margin:.1875rem .6rem .6rem 0}.sb-card:hover{transform:translateY(-.1875rem);box-shadow:0 .125rem .4375rem #cac5c5}.sb-card .sb-card-body{height:5.75rem;padding:1rem 1rem .5rem;overflow:hidden}.sb-card .sb-card-metas{display:flex;align-items:flex-start}.sb-card .sb-card-image{width:3.75rem;height:3.75rem;border:.0625rem solid var(--gray-100);background-color:#34495e;color:#fff;border-radius:100%;margin:0 1rem 0 0;font-size:2rem;text-align:center;line-height:3.5rem}.sb-card .sb-card-image img{width:4.375rem;height:5.75rem;object-fit:cover}.sb-card .sb-card-meta{height:3.75rem;width:9rem;display:flex;flex-wrap:wrap;flex-direction:column;overflow:hidden}.masonry-grid{display:flex;flex-wrap:wrap}.flex-align-self-end{align-self:flex-end}.masonry-grid .ui.toggle.checkbox input:checked~.box:after{left:2rem!important}\n"] }]
|
|
246
|
+
}], ctorParameters: function () { return [{ type: i1.HelperService }, { type: i2.ToasterService }, { type: i3.ConfigService }, { type: i4.EditorService }, { type: i5.EditorTelemetryService }]; }, propDecorators: { modalDismissEmitter: [{
|
|
247
|
+
type: Output
|
|
248
|
+
}], modal: [{
|
|
249
|
+
type: ViewChild,
|
|
250
|
+
args: ['modal']
|
|
251
|
+
}], addCollaborator: [{
|
|
252
|
+
type: Input
|
|
253
|
+
}], collectionId: [{
|
|
254
|
+
type: Input
|
|
255
|
+
}] } });
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNvbGxhYm9yYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2UtY29sbGFib3JhdG9yL21hbmFnZS1jb2xsYWJvcmF0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLWNvbGxhYm9yYXRvci9tYW5hZ2UtY29sbGFib3JhdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzFGLE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7OztBQU0vQixNQUFNLE9BQU8sMkJBQTJCO0lBbUN0QyxZQUNTLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLGdCQUF3QztRQUp4QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQXZDdkMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQVFqRCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQiwwQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLCtCQUEwQixHQUFHLENBQUMsQ0FBQztRQUMvQix5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QUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ3RDLENBQUM7K0dBNVBVLDJCQUEyQjttR0FBM0IsMkJBQTJCLHNTQ2J4QywweVVBK0lBOzs0RkRsSWEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHlCQUF5Qjs4TkFLekIsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNxQixLQUFLO3NCQUFoQyxTQUFTO3VCQUFDLE9BQU87Z0JBQ1QsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVsZW1ldHJ5L3RlbGVtZXRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3Rlci90b2FzdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXRvci9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGVscGVyL2hlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItbWFuYWdlLWNvbGxhYm9yYXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtY29sbGFib3JhdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFuYWdlLWNvbGxhYm9yYXRvci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1hbmFnZUNvbGxhYm9yYXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBtb2RhbERpc21pc3NFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgcHJpdmF0ZSBtb2RhbDtcbiAgQElucHV0KCkgYWRkQ29sbGFib3JhdG9yO1xuICBASW5wdXQoKSBjb2xsZWN0aW9uSWQ7XG4gIHB1YmxpYyBzaG93Q29sbGFib3JhdGlvblBvcHVwOiBib29sZWFuO1xuICBwdWJsaWMgY29udGVudENvbGxhYm9yYXRvcnM6IGFueTtcbiAgcHVibGljIGNvbnRlbnRPd25lcjtcbiAgcHVibGljIGNyZWF0b3JBbmRDb2xsYWJvcmF0b3JzSWRzO1xuICBwdWJsaWMgc2VsZWN0ZWRVc2VycyA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRjb2xsYWJvcmF0b3JzID0gW107XG4gIHB1YmxpYyB1c2VycyA9IFtdO1xuICBwdWJsaWMgY29sbGFib3JhdG9ycyA9IFtdO1xuICBwdWJsaWMgbWFuYWdlQ29sbGFib3JhdG9yVGFiVmlzaXQgPSAwO1xuICBwdWJsaWMgdXBkYXRlZENvbGxhYm9yYXRvcnMgPSBbXTtcbiAgcHVibGljIGlzQWRkQ29sbGFib3JhdG9yVGFiOiBib29sZWFuO1xuICBwdWJsaWMgc2VhcmNoS2V5d29yZCA9ICcnO1xuICBwdWJsaWMgc2VhcmNoUmVzID0geyBjb3VudDogMCwgY29udGVudDogW10sIGlzRW1wdHlSZXNwb25zZTogZmFsc2UsIGVycm9yTWVzc2FnZTogJycsIHNlYXJjaFN0YXR1czogJ3N0YXJ0JyB9O1xuICBwdWJsaWMgdXNlclNlYXJjaEJvZHkgPSB7XG4gICAgcmVxdWVzdDoge1xuICAgICAgICBxdWVyeTogJycsXG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICdvcmdhbmlzYXRpb25zLnJvbGVzJzogJ0NPTlRFTlRfQ1JFQVRPUicsXG4gICAgICAgICAgICByb290T3JnSWQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkczogWydlbWFpbCcsICdmaXJzdE5hbWUnLCAnaWRlbnRpZmllcicsICdsYXN0TmFtZScsICdvcmdhbmlzYXRpb25zJywgJ3Jvb3RPcmdOYW1lJywgJ3Bob25lJ10sXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgbGltaXQ6IDIwMFxuICAgIH1cbiAgfTtcbiAgcHVibGljIGlzQ29udGVudE93bmVyID0gZmFsc2U7XG4gIHB1YmxpYyBpc1Jvb3RPcmdBZG1pbjogYm9vbGVhbjtcbiAgcHVibGljIGN1cnJlbnRVc2VyOiBhbnk7XG4gIHB1YmxpYyBhbGxVc2Vyc0NvdW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaGVscGVyU2VydmljZTogSGVscGVyU2VydmljZSxcbiAgICBwdWJsaWMgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHB1YmxpYyBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgIHB1YmxpYyB0ZWxlbWV0cnlTZXJ2aWNlOiBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlXG4gICAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQudXNlcicpO1xuICAgIHRoaXMuaXNSb290T3JnQWRtaW4gPSBfLmhhcyh0aGlzLmN1cnJlbnRVc2VyLCAnaXNSb290T3JnQWRtaW4nKSA/IHRoaXMuY3VycmVudFVzZXIuaXNSb290T3JnQWRtaW4gOiBmYWxzZTtcbiAgICBpZiAoXy5oYXModGhpcy5jdXJyZW50VXNlciwgJ29yZ0lkcycpKSB7XG4gICAgICB0aGlzLnVzZXJTZWFyY2hCb2R5LnJlcXVlc3QuZmlsdGVycy5yb290T3JnSWQgPSB0aGlzLmN1cnJlbnRVc2VyLm9yZ0lkcztcbiAgICB9XG4gICAgdGhpcy5zZXRDcmVhdG9yQW5kQ29sbGFib3JhdG9ycygpO1xuICB9XG5cbiAgc2V0Q3JlYXRvckFuZENvbGxhYm9yYXRvcnMoKSB7XG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmZldGNoQ29udGVudERldGFpbHModGhpcy5jb2xsZWN0aW9uSWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5jb250ZW50Q29sbGFib3JhdG9ycyA9IF8uZ2V0KHJlcy5yZXN1bHQuY29udGVudCwgJ2NvbGxhYm9yYXRvcnMnLCBbXSk7XG4gICAgICB0aGlzLmNvbnRlbnRPd25lciA9IFtfLmdldChyZXMucmVzdWx0LmNvbnRlbnQsICdjcmVhdGVkQnknKV07XG4gICAgICB0aGlzLmNyZWF0b3JBbmRDb2xsYWJvcmF0b3JzSWRzID0gWy4uLnRoaXMuY29udGVudENvbGxhYm9yYXRvcnMsIC4uLnRoaXMuY29udGVudE93bmVyXTtcbiAgICAgIHRoaXMuY2hlY2tVc2VyUm9sZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hlY2tVc2VyUm9sZSgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50T3duZXIgJiYgKHRoaXMuY29udGVudE93bmVyWzBdID09PSB0aGlzLmN1cnJlbnRVc2VyLmlkKSkge1xuICAgICAgdGhpcy5pc0NvbnRlbnRPd25lciA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29udGVudE93bmVyIHx8IHRoaXMuaXNSb290T3JnQWRtaW4pIHtcbiAgICAgIHRoaXMuaXNBZGRDb2xsYWJvcmF0b3JUYWIgPSB0cnVlO1xuICAgICAgdGhpcy5nZXRBbGxVc2VyTGlzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldENvbGxhYm9yYXRvcnMoKTtcbiAgICB9XG4gICAgdGhpcy5zaG93Q29sbGFib3JhdGlvblBvcHVwID0gIHRoaXMuYWRkQ29sbGFib3JhdG9yO1xuICB9XG5cbiAgZGlzbWlzc0NvbGxhYm9yYXRpb25Qb3B1cCgpIHtcbiAgICB0aGlzLnNob3dDb2xsYWJvcmF0aW9uUG9wdXAgPSBmYWxzZTtcbiAgICB0aGlzLm1vZGFsRGlzbWlzc0VtaXR0ZXIuZW1pdCh7fSk7XG4gIH1cblxuICBnZXRBbGxVc2VyTGlzdCgpIHtcbiAgICB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0QWxsVXNlcih0aGlzLnVzZXJTZWFyY2hCb2R5KS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXNlcnMgPSBbXTtcbiAgICAgIGlmIChfLmhhcyhyZXNwb25zZSwgJ3Jlc3VsdC5yZXNwb25zZS5jb250ZW50JykpIHtcbiAgICAgICAgY29uc3QgYWxsVXNlcnMgPSBfLmdldChyZXNwb25zZSwgJ3Jlc3VsdC5yZXNwb25zZS5jb250ZW50Jyk7XG4gICAgICAgIHRoaXMuYWxsVXNlcnNDb3VudCA9IGFsbFVzZXJzLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMudXNlcnMgPSB0aGlzLmV4Y2x1ZGVDcmVhdG9yQW5kQ29sbGFib3JhdG9ycyhhbGxVc2Vycyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDAxJykpO1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgZXhjbHVkZUNyZWF0b3JBbmRDb2xsYWJvcmF0b3JzKGFsbFVzZXJzKSB7XG4gICAgcmV0dXJuIF8uZmlsdGVyKGFsbFVzZXJzLCB1c2VyID0+IHtcbiAgICAgIHJldHVybiAhXy5pbmNsdWRlcyh0aGlzLmNyZWF0b3JBbmRDb2xsYWJvcmF0b3JzSWRzLCB1c2VyLmlkZW50aWZpZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0aW9uVXNlcih1c2VySWRlbnRpZmllcikge1xuICAgIF8uZm9yRWFjaCh0aGlzLnVzZXJzLCB1c2VyID0+IHtcbiAgICAgIGlmICh1c2VyLmlkZW50aWZpZXIgPT09IHVzZXJJZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChfLmhhcyh1c2VyLCAnaXNTZWxlY3RlZCcpICYmIHVzZXIuaXNTZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHVzZXIuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFVzZXJzLmluZGV4T2YodXNlcklkZW50aWZpZXIpO1xuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlci5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMucHVzaCh1c2VySWRlbnRpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGlvbkNvbGxhYm9yYXRvcih1c2VySWRlbnRpZmllcikge1xuICAgIF8uZm9yRWFjaCh0aGlzLmNvbGxhYm9yYXRvcnMsIHVzZXIgPT4ge1xuICAgICAgaWYgKHVzZXIuaWRlbnRpZmllciA9PT0gdXNlcklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKF8uaGFzKHVzZXIsICdpc1NlbGVjdGVkJykgJiYgdXNlci5pc1NlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgdXNlci5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkY29sbGFib3JhdG9ycy5pbmRleE9mKHVzZXJJZGVudGlmaWVyKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZGNvbGxhYm9yYXRvcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlci5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkY29sbGFib3JhdG9ycy5wdXNoKHVzZXJJZGVudGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkUmVtb3ZlQ29sbGFib3JhdG9yVG9Db3Vyc2UobW9kYWwpIHtcbiAgICB0aGlzLnVwZGF0ZWRDb2xsYWJvcmF0b3JzID0gdGhpcy5jb250ZW50Q29sbGFib3JhdG9ycztcbiAgICB0aGlzLnVwZGF0ZWRDb2xsYWJvcmF0b3JzID0gXy5jb25jYXQodGhpcy51cGRhdGVkQ29sbGFib3JhdG9ycywgdGhpcy5zZWxlY3RlZFVzZXJzKTtcbiAgICB0aGlzLnVwZGF0ZWRDb2xsYWJvcmF0b3JzID0gXy5kaWZmZXJlbmNlKHRoaXMudXBkYXRlZENvbGxhYm9yYXRvcnMsIHRoaXMuc2VsZWN0ZWRjb2xsYWJvcmF0b3JzKTtcbiAgICB0aGlzLmhlbHBlclNlcnZpY2UudXBkYXRlQ29sbGFib3JhdG9yKHRoaXMuY29sbGVjdGlvbklkLCB0aGlzLnVwZGF0ZWRDb2xsYWJvcmF0b3JzKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5wYXJhbXMuc3RhdHVzID09PSAnc3VjY2Vzc2Z1bCcpIHtcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5zdWNjZXNzKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLnN1Y2Nlc3MuMDEyJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMDEnKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDAxJykpO1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH0pO1xuICAgIG1vZGFsLmRlbnkoKTtcbiAgfVxuXG4gIC8qIHRvIGJlIGNhbGxlZCB3aGVuIHVzZXIgY2hhbmdlIHRhYiB0byBhZGQgY29sbGFib3JhdG9yICovXG4gIGdldEFsbHVzZXJzKCkge1xuICAgIHRoaXMuaXNBZGRDb2xsYWJvcmF0b3JUYWIgPSB0cnVlO1xuICB9XG5cbiAgLyogdG8gYmUgY2FsbGVkIHdoZW4gdXNlciBjaGFuZ2UgdGFiIHRvIG1hbmFnZSBjb2xsYWJvcmF0b3IgKi9cbiAgZ2V0Q29sbGFib3JhdG9ycygpIHtcbiAgICB0aGlzLmlzQWRkQ29sbGFib3JhdG9yVGFiID0gZmFsc2U7XG4gICAgdGhpcy5tYW5hZ2VDb2xsYWJvcmF0b3JUYWJWaXNpdCArPSAxO1xuICAgIGlmICh0aGlzLm1hbmFnZUNvbGxhYm9yYXRvclRhYlZpc2l0IDw9IDEpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgdGhpcy51c2VyU2VhcmNoQm9keS5yZXF1ZXN0LmZpbHRlcnNbJ3VzZXJJZCddID0gdGhpcy5jb250ZW50Q29sbGFib3JhdG9ycztcbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGVudENvbGxhYm9yYXRvcnMpKSB7XG4gICAgICAgIHRoaXMuaGVscGVyU2VydmljZS5nZXRBbGxVc2VyKHRoaXMudXNlclNlYXJjaEJvZHkpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuY29sbGFib3JhdG9ycyA9IFtdO1xuICAgICAgICAgIGlmIChfLmhhcyhyZXNwb25zZSwgJ3Jlc3VsdC5yZXNwb25zZS5jb250ZW50JykpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFib3JhdG9ycyA9IF8uZ2V0KHJlc3BvbnNlLCAncmVzdWx0LnJlc3BvbnNlLmNvbnRlbnQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuY29sbGFib3JhdG9ycyA9IFtdO1xuICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDAxJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc29ydFVzZXJzTGlzdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ2ZpcnN0TmFtZScpIHtcbiAgICAgIHRoaXMudXNlcnMgPSBfLm9yZGVyQnkodGhpcy51c2VycywgW3VzZXIgPT4gdXNlclt2YWx1ZV0udG9Mb3dlckNhc2UoKV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVzZXJzID0gXy5vcmRlckJ5KHRoaXMudXNlcnMsIFt1c2VyID0+IHVzZXIub3JnYW5pc2F0aW9uc1swXS5vcmdOYW1lID8gdXNlci5vcmdhbmlzYXRpb25zWzBdLm9yZ05hbWUudG9Mb3dlckNhc2UoKSA6ICcnXSk7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoQnlLZXl3b3JkKCkge1xuICAgIGNvbnN0IHNlYXJjaFJlcXVlc3QgPSB0aGlzLnVzZXJTZWFyY2hCb2R5O1xuICAgIGlmICh0aGlzLnZhbGlkYXRlRW1haWwodGhpcy5zZWFyY2hLZXl3b3JkKSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgICBzZWFyY2hSZXF1ZXN0LnJlcXVlc3QuZmlsdGVyc1snZW1haWwnXSA9IHRoaXMuc2VhcmNoS2V5d29yZDtcbiAgICB9IGVsc2UgaWYgKC9eXFxkKyQvLnRlc3QodGhpcy5zZWFyY2hLZXl3b3JkKSkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICAgICAgc2VhcmNoUmVxdWVzdC5yZXF1ZXN0LmZpbHRlcnNbJ3Bob25lJ10gPSB0aGlzLnNlYXJjaEtleXdvcmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoUmVxdWVzdC5yZXF1ZXN0LnF1ZXJ5ID0gdGhpcy5zZWFyY2hLZXl3b3JkO1xuICAgIH1cblxuICAgIHRoaXMuaGVscGVyU2VydmljZS5nZXRBbGxVc2VyKHNlYXJjaFJlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFJlcy5zZWFyY2hTdGF0dXMgPSAnZW5kJztcbiAgICAgICAgaWYgKF8uaGFzKHJlc3BvbnNlLCAncmVzdWx0LnJlc3BvbnNlLmNvbnRlbnQnKSkge1xuICAgICAgICAgIHRoaXMuc2VhcmNoUmVzLmNvbnRlbnQgPSB0aGlzLmV4Y2x1ZGVDcmVhdG9yQW5kQ29sbGFib3JhdG9ycyhfLmdldChyZXNwb25zZSwgJ3Jlc3VsdC5yZXNwb25zZS5jb250ZW50JykpO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFJlcy5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXMuaXNFbXB0eVJlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoUmVzLmlzRW1wdHlSZXNwb25zZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJlcy5jb250ZW50ID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubWVzc2FnZXMuZXJyb3IuMDAxJykpO1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgdGhpcy5zZWFyY2hSZXMuY29udGVudCA9IFtdO1xuICAgICAgdGhpcy5zZWFyY2hSZXMuaXNFbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzLmVycm9yTWVzc2FnZSA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAwMScpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRTZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hSZXMuY29udGVudCA9IFtdO1xuICAgIHRoaXMuc2VhcmNoUmVzLmlzRW1wdHlSZXNwb25zZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVmcmVzaFNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaEtleXdvcmQgPSAnJztcbiAgICB0aGlzLnNlYXJjaEJ5S2V5d29yZCgpO1xuICB9XG5cbiAgdmFsaWRhdGVFbWFpbChlbWFpbCkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCByZSA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKGVtYWlsKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHNlbGVjdFVzZXIodXNlcikge1xuICAgIHVzZXIuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgbGV0IGluZGV4ID0gXy5maW5kSW5kZXgodGhpcy51c2VycywgKGVsZW1lbnQpID0+IHsgcmV0dXJuIGVsZW1lbnQuaWRlbnRpZmllciA9PT0gdXNlci5pZGVudGlmaWVyOyB9KTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy51c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy51c2Vycy51bnNoaWZ0KHVzZXIpO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZFVzZXJzLmluZGV4T2YodXNlci5pZGVudGlmaWVyKTtcbiAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5wdXNoKHVzZXIuaWRlbnRpZmllcik7XG4gICAgfVxuICB9XG5cbiAgdmlld0FsbFJlc3VsdHMoKSB7XG4gICAgdGhpcy51c2VycyA9IHRoaXMuc2VhcmNoUmVzLmNvbnRlbnQ7XG4gIH1cbn1cbiIsIjxzdWktbW9kYWwgKm5nSWY9XCJzaG93Q29sbGFib3JhdGlvblBvcHVwXCIgW211c3RTY3JvbGxdPVwidHJ1ZVwiIFtpc0Nsb3NhYmxlXT1cInRydWVcIiBbdHJhbnNpdGlvbkR1cmF0aW9uXT1cIjBcIlxuICAgIFtzaXplXT1cIidmdWxsc2NyZWVuJ1wiIGNsYXNzPVwic2ItbW9kYWwgc2ItbW9kYWwtZnVsbHNjcmVlbiBzaG93Q29sbGFib3JhdG9yXCIgYXBwQm9keVNjcm9sbCBcbiAgICAoZGlzbWlzc2VkKT1cImRpc21pc3NDb2xsYWJvcmF0aW9uUG9wdXAoKVwiICNtb2RhbD5cbiAgICA8ZGl2IGNsYXNzPVwic2ItbW9kYWwtaGVhZGVyXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNiLW1vZGFsLWNvbnRlbnQgc2ItYmctY29sb3ItcHJpbWFyeS0xMDAgcHQtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtamMtc3BhY2UtYmV0d2VlbiBweS0xMCBmbGV4LWFsaWduLWl0ZW0tY2VudGVyIGgtNzAgc2ItYmctY29sb3Itd2hpdGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy0xIGZvbnQtd2VpZ2h0LWJvbGRcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uY29sbGFib3JhdG9yc319PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiLXNlYXJjaC1ib3ggc21hbGwgbm8tYnRuIG1yLTEwXCIgKm5nSWY9XCJpc0FkZENvbGxhYm9yYXRvclRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWRpdiByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwic2VhcmNoIGljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IChrZXl1cCk9XCJzZWFyY2hLZXl3b3JkLmxlbmd0aCA+PSAzID8gc2VhcmNoQnlLZXl3b3JkKCkgOiByZXNldFNlYXJjaCgpXCIgY2xhc3M9XCJzYi1zZWFyY2gtaW5wdXRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaEtleXdvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LnNlYXJjaFBsYWNlaG9sZGVyfX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNsb3NlIGljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAoY2xpY2spPVwicmVmcmVzaFNlYXJjaCgpXCIgW2hpZGRlbl09XCIhKHNlYXJjaFJlcy5zZWFyY2hTdGF0dXMgPT0gJ2VuZCcgJiYgc2VhcmNoS2V5d29yZC5sZW5ndGggPj0gMyApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWxcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LnNlYXJjaF9idG5fbGFiZWx9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpIHJpZ2h0IGZsb2F0ZWQgaGVhZGVyIHNlYXJjaGVyXCIgKm5nSWY9XCJpc0FkZENvbGxhYm9yYXRvclRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwic2VhcmNoS2V5d29yZC5sZW5ndGggPj0gMyAmJiBzZWFyY2hSZXMuY29udGVudC5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJzZWFyY2hSZXN1bHRcIiAqbmdGb3I9XCJsZXQgdXNlciBvZiBzZWFyY2hSZXMuY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwic2VsZWN0VXNlcih1c2VyKVwiPnt7dXNlci5maXJzdE5hbWV9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInNlYXJjaFJlc3VsdCBmb250LXdlaWdodC1ib2xkXCIgaWQ9XCJ2aWV3LWFsbC1yZXN1bHRzXCIgKm5nSWY9XCJzZWFyY2hSZXMuY29udGVudC5sZW5ndGggPj0gNVwiIChjbGljayk9XCJ2aWV3QWxsUmVzdWx0cygpXCI+PHNwYW4+VmlldyBBbGwgUmVzdWx0czwvc3Bhbj48L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cInNlYXJjaEtleXdvcmQubGVuZ3RoID49IDMgJiYgc2VhcmNoUmVzLmlzRW1wdHlSZXNwb25zZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInNlYXJjaFJlc3VsdE1zZ1wiPjxzdHJvbmc+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5lcnI/LnJlc3VsdE5vdEZvdW5kfX08L3N0cm9uZz48L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cInNlYXJjaFJlcy5lcnJvck1lc3NhZ2UubGVuZ3RoICAmJiAoc2VhcmNoS2V5d29yZC5sZW5ndGggPj0gMylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwic2VhcmNoUmVzdWx0TXNnXCI+e3tzZWFyY2hSZXMuZXJyb3JNZXNzYWdlfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHN1aS10YWJzZXQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aSBwb2ludGluZyBzZWNvbmRhcnkgbWVudVwiPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJpdGVtXCIgKm5nSWY9XCIoaXNDb250ZW50T3duZXIgfHwgaXNSb290T3JnQWRtaW4pXCIgKGFjdGl2YXRlKT1cImdldEFsbHVzZXJzKClcIiBzdWlUYWJIZWFkZXI9XCIxXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnYWRkX2NvbGxhYm9yYXRvcnMnLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiXG4gICAgICAgICAgICA+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LmFkZENvbGxhYm9yYXRvcnN9fTwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiaXRlbVwiIChhY3RpdmF0ZSk9XCJnZXRDb2xsYWJvcmF0b3JzKClcIiBzdWlUYWJIZWFkZXI9XCIyXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnbWFuYWdlX2NvbGxhYm9yYXRvcnMnLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkKVwiXG4gICAgICAgICAgICA+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/Lm1hbmFnZUNvbGxhYm9yYXRvcnN9fTwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aSBzZWdtZW50IHB4LTAgcHktMTUgbXQtMSBzYi1iZy1jb2xvci1wcmltYXJ5LTEwMFwiIHN1aVRhYkNvbnRlbnQ9XCIxXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXVzZXJzPy5sZW5ndGhcIiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgc2ItYmctY29sb3Itd2hpdGUgcC0xMFwiPlxuICAgICAgICAgICAgICAgIHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uZXJyPy51c2VyTm90Rm91bmR9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHB5LTEwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVzZXJzPy5sZW5ndGhcIiBjbGFzcz1cInctMTAwIHB0LTEwIGZvbnQtd2VpZ2h0LWJvbGRcIj5TaG93aW5nIHt7dXNlcnMubGVuZ3RofX0gb3V0IG9mIHt7YWxsVXNlcnNDb3VudH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInNlYXJjaCBkcm9wZG93biBweS01IHNiLWJnLWNvbG9yLXdoaXRlIG1iLTEwIGZvbnQtd2VpZ2h0LWJvbGRcIiAqbmdJZj1cInVzZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic29ydFVzZXJzTGlzdCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U29ydCBCeTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZmlyc3ROYW1lXCI+TmFtZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3JnYW5pc2F0aW9uc1wiPk9yZ2FuaXNhdGlvbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFzb25yeS1ncmlkXCIgKm5nSWY9XCJ1c2Vycz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdXNlciBvZiB1c2Vyc1wiIGNsYXNzPVwic2ItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItY2FyZC1tZXRhc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYi1jYXJkLWltYWdlIG1yLTE2IGZvbnQtd2VpZ2h0LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyh1c2VyLmZpcnN0TmFtZSkuY2hhckF0KDApfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItY2FyZC1tZXRhIGNvdXJzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYi1jYXJkLW1ldGEtaXRlbSBtYi0xNiBmb250LXdlaWdodC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXNlci5maXJzdE5hbWV9fSB7e3VzZXIubGFzdE5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYi1jb2xvci1ncmF5LTQwMCBmcy0wLTkyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXNlci5vcmdhbmlzYXRpb25zWzBdLm9yZ05hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1hbGlnbi1zZWxmLWVuZCBzYi1jdXN0b20tdG9nZ2xlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwic2ItY29sb3ItcHJpbWFyeSBkLWZsZXggZnMtMC03ODUgZm9udC13ZWlnaHQtYm9sZCBmbGV4LWFpLWVuZFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiF1c2VyLmlzU2VsZWN0ZWRcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uVXNlcih1c2VyLmlkZW50aWZpZXIpXCIgbGliVGVsZW1ldHJ5SW50ZXJhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbGVtZXRyeUludGVyYWN0RWRhdGFdPVwidGVsZW1ldHJ5U2VydmljZS5nZXRUZWxlbWV0cnlJbnRlcmFjdEVkYXRhKCdhZGRfdXNlcicsJ2NsaWNrJywnc2VsZWN0JywgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQsIHtpZGVudGlmaWVyOiB1c2VyLmlkZW50aWZpZXJ9KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIHBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LmFkZF9idG5fbGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aSByaWdodCBmbG9hdGVkIGNvbXBhY3Qgc2VnbWVudFwiICpuZ0lmPVwidXNlci5pc1NlbGVjdGVkXCIgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvblVzZXIodXNlci5pZGVudGlmaWVyKVwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgncmVtb3ZlX3VzZXInLCdjbGljaycsJ3NlbGVjdCcsIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLCB7aWRlbnRpZmllcjogdXNlci5pZGVudGlmaWVyfSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aSBtaW5pIGZpdHRlZCB0b2dnbGUgY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2hlY2tlZD48bGFiZWw+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1aSBzZWdtZW50ICBweC0wIHB5LTE1IG10LTEgc2ItYmctY29sb3ItcHJpbWFyeS0xMDBcIiBzdWlUYWJDb250ZW50PVwiMlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2xsYWJvcmF0b3JzPy5sZW5ndGhcIiBjbGFzcz1cInAtMTAgZm9udC13ZWlnaHQtYm9sZCBzYi1iZy1jb2xvci13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uZXJyPy5jb2xsYWJvcmF0b3JzTm90Rm91bmR9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sbGFib3JhdG9ycz8ubGVuZ3RoXCIgY2xhc3M9XCJ3LTEwMCBwdC0xMCBmb250LXdlaWdodC1ib2xkXCI+e3tjb2xsYWJvcmF0b3JzLmxlbmd0aH19IGNvbGxhYm9yYXRvcnMgZXhpc3RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFzb25yeS1ncmlkIG10LTIwXCIgKm5nSWY9XCJjb2xsYWJvcmF0b3JzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2xsYWJvcmF0b3Igb2YgY29sbGFib3JhdG9yc1wiIGNsYXNzPVwic2ItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItY2FyZC1tZXRhc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYi1jYXJkLWltYWdlIG1yLTE2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGNvbGxhYm9yYXRvci5maXJzdE5hbWUpLmNoYXJBdCgwKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiLWNhcmQtbWV0YSBjb3Vyc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ItY2FyZC1tZXRhLWl0ZW0gbWItMTYgZm9udC13ZWlnaHQtYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbGxhYm9yYXRvci5maXJzdE5hbWV9fSB7e2NvbGxhYm9yYXRvci5sYXN0TmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiLWNvbG9yLWdyYXktNDAwIGZzLTAtOTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb2xsYWJvcmF0b3Iub3JnYW5pc2F0aW9uc1swXS5vcmdOYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtYWxpZ24tc2VsZi1lbmQgc2ItY3VzdG9tLXRvZ2dsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInNiLWNvbG9yLWVycm9yIGQtZmxleCBmcy0wLTc4NSBmb250LXdlaWdodC1ib2xkIGZsZXgtYWktZW5kXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbGxhYm9yYXRvci5pc1NlbGVjdGVkICYmIChpc0NvbnRlbnRPd25lciB8fCBpc1Jvb3RPcmdBZG1pbilcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uQ29sbGFib3JhdG9yKGNvbGxhYm9yYXRvci5pZGVudGlmaWVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYlRlbGVtZXRyeUludGVyYWN0IFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgncmVtb3ZlX2NvbGxhYm9yYXRvcicsJ2NsaWNrJywnc2VsZWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQsIHtpZGVudGlmaWVyOiBjb2xsYWJvcmF0b3IuaWRlbnRpZmllcn0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8ucmVtb3ZlX2J0bl9sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpIHJpZ2h0IGZsb2F0ZWQgY29tcGFjdCBzZWdtZW50XCIgKm5nSWY9XCJjb2xsYWJvcmF0b3IuaXNTZWxlY3RlZCAmJiAoaXNDb250ZW50T3duZXIgfHwgaXNSb290T3JnQWRtaW4pXCIgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbkNvbGxhYm9yYXRvcihjb2xsYWJvcmF0b3IuaWRlbnRpZmllcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdCBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FkZF9jb2xsYWJvcmF0b3InLCdjbGljaycsJ3NlbGVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbGVtZXRyeVNlcnZpY2UudGVsZW1ldHJ5UGFnZUlkLCB7aWRlbnRpZmllcjogY29sbGFib3JhdG9yLmlkZW50aWZpZXJ9KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpIG1pbmkgZml0dGVkIHRvZ2dsZSBjaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjaGVja2VkPjxsYWJlbD48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3N1aS10YWJzZXQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInNiLW1vZGFsLWFjdGlvbnNcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXByaW1hcnlcIlxuICAgIFtuZ0NsYXNzXT1cInsnc2ItYnRuLWRpc2FibGVkJzogKHNlbGVjdGVkVXNlcnMubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkY29sbGFib3JhdG9ycy5sZW5ndGggPT09IDApfVwiXG4gICAgW2Rpc2FibGVkXT1cIihzZWxlY3RlZFVzZXJzLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZGNvbGxhYm9yYXRvcnMubGVuZ3RoID09PSAwKVwiXG4gICAgIChjbGljayk9XCJhZGRSZW1vdmVDb2xsYWJvcmF0b3JUb0NvdXJzZShtb2RhbClcIiBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2RvbmUnLCdjbGljaycsJ3N1Ym1pdCcsXG4gICAgIHRlbGVtZXRyeVNlcnZpY2U/LnRlbGVtZXRyeVBhZ2VJZClcIj5cbiAgICAge3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5idXR0b25fbGFiZWxzPy5kb25lX2J0bl9sYWJlbH19XG4gICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L3N1aS1tb2RhbD5cbiJdfQ==
|