@sunbird-cb/consumption 0.0.43 → 0.0.44

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.
Files changed (60) hide show
  1. package/bundles/sunbird-cb-consumption.umd.js +1244 -165
  2. package/bundles/sunbird-cb-consumption.umd.js.map +1 -1
  3. package/bundles/sunbird-cb-consumption.umd.min.js +2 -2
  4. package/bundles/sunbird-cb-consumption.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +175 -0
  6. package/esm2015/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +261 -0
  7. package/esm2015/lib/_common/cards/cards.component.js +24 -25
  8. package/esm2015/lib/_common/cards/cards.module.js +28 -3
  9. package/esm2015/lib/_common/content-progress/content-progress.component.js +89 -0
  10. package/esm2015/lib/_common/content-progress/content-progress.module.js +22 -0
  11. package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +43 -2
  12. package/esm2015/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.js +225 -0
  13. package/esm2015/lib/_common/dialog-components/dialog-components.module.js +43 -0
  14. package/esm2015/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.js +2 -4
  15. package/esm2015/lib/_pipes/object-to-array/object-to-array.pipe.js +28 -0
  16. package/esm2015/lib/_pipes/object-to-array/object-to-array.pipe.module.js +19 -0
  17. package/esm2015/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +2 -2
  18. package/esm2015/lib/_services/certificate.service.js +63 -0
  19. package/esm2015/lib/_services/multilingual-translations.service.js +27 -24
  20. package/esm2015/lib/consumption.module.js +1 -1
  21. package/esm2015/public-api.js +2 -1
  22. package/esm2015/sunbird-cb-consumption.js +34 -26
  23. package/esm5/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +202 -0
  24. package/esm5/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +278 -0
  25. package/esm5/lib/_common/cards/cards.component.js +28 -17
  26. package/esm5/lib/_common/cards/cards.module.js +28 -3
  27. package/esm5/lib/_common/content-progress/content-progress.component.js +94 -0
  28. package/esm5/lib/_common/content-progress/content-progress.module.js +26 -0
  29. package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +58 -8
  30. package/esm5/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.js +248 -0
  31. package/esm5/lib/_common/dialog-components/dialog-components.module.js +47 -0
  32. package/esm5/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.js +2 -4
  33. package/esm5/lib/_pipes/object-to-array/object-to-array.pipe.js +57 -0
  34. package/esm5/lib/_pipes/object-to-array/object-to-array.pipe.module.js +23 -0
  35. package/esm5/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +3 -3
  36. package/esm5/lib/_services/certificate.service.js +70 -0
  37. package/esm5/lib/_services/multilingual-translations.service.js +27 -24
  38. package/esm5/lib/consumption.module.js +1 -1
  39. package/esm5/public-api.js +2 -1
  40. package/esm5/sunbird-cb-consumption.js +34 -26
  41. package/fesm2015/sunbird-cb-consumption.js +1075 -136
  42. package/fesm2015/sunbird-cb-consumption.js.map +1 -1
  43. package/fesm5/sunbird-cb-consumption.js +1211 -140
  44. package/fesm5/sunbird-cb-consumption.js.map +1 -1
  45. package/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.d.ts +28 -0
  46. package/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.d.ts +41 -0
  47. package/lib/_common/cards/cards.component.d.ts +5 -3
  48. package/lib/_common/content-progress/content-progress.component.d.ts +13 -0
  49. package/lib/_common/content-progress/content-progress.module.d.ts +2 -0
  50. package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.d.ts +2 -0
  51. package/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.d.ts +22 -0
  52. package/lib/_common/dialog-components/dialog-components.module.d.ts +2 -0
  53. package/lib/_pipes/object-to-array/object-to-array.pipe.d.ts +4 -0
  54. package/lib/_pipes/object-to-array/object-to-array.pipe.module.d.ts +2 -0
  55. package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +1 -1
  56. package/lib/_services/certificate.service.d.ts +8 -0
  57. package/package.json +1 -1
  58. package/public-api.d.ts +1 -0
  59. package/sunbird-cb-consumption.d.ts +32 -24
  60. package/sunbird-cb-consumption.metadata.json +1 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
6
+ // import { WidgetUserService } from '../../../../_services/widget-user.service';
7
+ import { ConfigurationsService, NsContent } from '@sunbird-cb/utils-v2';
8
+ import { WidgetContentService } from '../../../../_services/widget-content.service';
9
+ // @Directive({
10
+ // selector: '[callFunctionOnInit]'
11
+ // })
12
+ export class CardAssessmentComponent {
13
+ /**
14
+ * @param {?} configSvc
15
+ * @param {?} contSvc
16
+ */
17
+ constructor(configSvc, contSvc) {
18
+ this.configSvc = configSvc;
19
+ this.contSvc = contSvc;
20
+ this.contentData = new EventEmitter();
21
+ this.isCardLoading = false;
22
+ this.stripData = [];
23
+ this.enrollList = [];
24
+ this.activeResource = [];
25
+ this.daysRemaining = 0;
26
+ this.daysPending = false;
27
+ }
28
+ /**
29
+ * @return {?}
30
+ */
31
+ ngOnInit() {
32
+ /** @type {?} */
33
+ const instanceConfig = this.configSvc.instanceConfig;
34
+ if (instanceConfig) {
35
+ this.defaultThumbnail = instanceConfig.logos.defaultContent || '';
36
+ this.defaultSLogo = instanceConfig.logos.defaultSourceLogo || '/assets/instances/eagle/app_logos/KarmayogiBharat_Logo.svg';
37
+ }
38
+ else {
39
+ this.defaultThumbnail = '/assets/instances/eagle/app_logos/default.png';
40
+ this.defaultSLogo = '/assets/instances/eagle/app_logos/KarmayogiBharat_Logo.svg';
41
+ }
42
+ }
43
+ /**
44
+ * @param {?} startDate
45
+ * @return {?}
46
+ */
47
+ updateStartDate(startDate) {
48
+ this.startDate = startDate;
49
+ this.startCountdown(this.startDate);
50
+ }
51
+ /**
52
+ * @param {?} date
53
+ * @return {?}
54
+ */
55
+ startCountdown(date) {
56
+ // Update the countdown immediately on start
57
+ this.updateCountdown(date);
58
+ // Update the countdown every second
59
+ this.intervalId = setInterval((/**
60
+ * @return {?}
61
+ */
62
+ () => {
63
+ this.updateCountdown(date);
64
+ }), 1000);
65
+ }
66
+ // Method to update the countdown values
67
+ /**
68
+ * @param {?} targetDate
69
+ * @return {?}
70
+ */
71
+ updateCountdown(targetDate) {
72
+ /** @type {?} */
73
+ const now = new Date().getTime();
74
+ // Current time in milliseconds
75
+ /** @type {?} */
76
+ const targetTime = new Date(targetDate).getTime();
77
+ /** @type {?} */
78
+ const distance = targetTime - now;
79
+ if (distance > 0) {
80
+ this.daysRemaining = Math.ceil(distance / (1000 * 60 * 60 * 24));
81
+ this.daysPending = true;
82
+ }
83
+ else {
84
+ this.daysRemaining = 0;
85
+ this.daysPending = false;
86
+ this.clearTimer();
87
+ }
88
+ }
89
+ // Method to clear the interval
90
+ /**
91
+ * @return {?}
92
+ */
93
+ clearTimer() {
94
+ clearInterval(this.intervalId);
95
+ }
96
+ /**
97
+ * @return {?}
98
+ */
99
+ ngOnDestroy() {
100
+ this.clearTimer();
101
+ }
102
+ /**
103
+ * @param {?} contentData
104
+ * @return {?}
105
+ */
106
+ getRedirectUrlData(contentData) {
107
+ // for telemetry
108
+ if (this.widgetData && this.widgetData.context && this.widgetData.context.pageSection) {
109
+ contentData['typeOfTelemetry'] = this.widgetData.context.pageSection;
110
+ }
111
+ this.contSvc.changeTelemetryData(contentData);
112
+ // for redirection
113
+ this.contentData.emit(contentData);
114
+ }
115
+ }
116
+ CardAssessmentComponent.decorators = [
117
+ { type: Component, args: [{
118
+ selector: 'sb-uic-card-assessment',
119
+ template: "<ng-container *ngIf=\"!isCardLoading\">\n<ng-container >\n\t<mat-card class=\"card-assessment card-scheduled-assessment card-users-container padding-remove cursor-pointer mr-4\">\n\t<a (click)=\"getRedirectUrlData(widgetData?.content); $event.stopPropagation()\">\n\t\t<div class=\"display-contents\">\n\t\t\t<ng-container *ngIf=\"widgetData\">\n\t\t\t\t<mat-card-content>\n\t\t\t\t\t<div class=\"flex flex-col h-full\">\n\t\t\t\t\t\t<div class=\"flex flex-1 flex-row padding-s\">\n\t\t\t\t\t\t\t<div class=\"flex image-container\">\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"widgetData?.content?.posterImage\">\n\t\t\t\t\t\t\t\t\t<img mat-card-image class=\"margin-remove assess-img\" [src]=\"widgetData?.content?.posterImage | pipePublicURL\"\n\t\t\t\t\t\t\t\t\t\t[alt]=\"widgetData?.content?.name\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!widgetData?.content?.posterImage\">\n\t\t\t\t\t\t\t\t\t<ng-template #defaultImg>\n\t\t\t\t\t\t\t\t\t\t<img mat-card-image [src]=\"defaultThumbnail\" loading=\"lazy\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"card-wide-img ws-mat-primary-lite-background margin-remove assess-img\"\n\t\t\t\t\t\t\t\t\t\t\t[alt]=\"widgetData?.content?.name\" />\n\t\t\t\t\t\t\t\t\t</ng-template>\n\t\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex title-container flex-col\">\n\t\t\t\t\t\t\t\t<div class=\"flex title-text mat-subheading-1\">\n\t\t\t\t\t\t\t\t\t{{ widgetData?.content?.name }}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"flex margin-remove margin-top-s font-normal mat-caption sub-title-text\">\n\t\t\t\t\t\t\t\t\t<div class=\"course_logo_box\">\n\t\t\t\t\t\t\t\t\t\t<img [src]=\"widgetData?.content?.creatorLogo | pipePublicURL \" class=\"source-icon\"\n\t\t\t\t\t\t\t\t\t\t\t[wsUtilsDefaultThumbnail]=\"defaultSLogo\"\n\t\t\t\t\t\t\t\t\t\t\t[alt]=\"(widgetData?.content?.sourceName + '_' + widgetData?.content?.identifier)\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<span class=\"sub-title-text\">\n\t\t\t\t\t\t\t\t\t\t{{ (widgetData?.content?.organisation && widgetData?.content?.organisation[0]) ?\n\t\t\t\t\t\t\t\t\t\twidgetData?.content?.organisation[0] : 'Karmayogi Bharat' }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span class=\"start-span\">Assessment starts in </span>\n\t\t\t\t\t\t<mat-card-footer class=\"assessment-card-footer padding-m\">\n\t\t\t\t\t\t\t<div class=\"flex flex-1 items-center justify-center col-row margin-top-m\">\n\t\t\t\t\t\t\t\t<div class=\"flex margin-right-m\">\n\t\t\t\t\t\t\t\t\t<span *ngIf=\"daysPending\"> {{ startCountdown(widgetData?.content?.batch?.startDate) }}<div id=\"demo\"></div> </span>\n\t\t\t\t\t\t\t\t\t<span *ngIf=\"!daysPending\" class=\"start-btn\"> Start Assessment\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"flex\">\n\t\t\t\t\t\t\t\t\t<span class=\"time-span flex items-center justify-center\">{{widgetData?.content?.batch?.startDate | date: 'd MMM, y' }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</mat-card-footer>\n\t\t\t\t\t</div>\n\t\t\t\t</mat-card-content>\n\t\t\t</ng-container>\n\t\t</div>\n\t</a>\n</mat-card>\n</ng-container>\n</ng-container>\n\n\n\n<ng-container *ngIf=\"isCardLoading\">\n\t<ng-container [ngTemplateOutlet]=\"skeltonLoader\"></ng-container>\n</ng-container>\n\n<ng-template #skeltonLoader>\n\n\t<mat-card class=\"card-assessment card-scheduled-assessment card-users-container padding-remove cursor-pointer mr-4\">\n\t\t<a>\n\t\t\t<div class=\"display-contents\">\n\t\t\t\t<ng-container>\n\t\t\t\t\t<mat-card-content>\n\t\t\t\t\t\t<div class=\"flex flex-col h-full\">\n\t\t\t\t\t\t\t<div class=\"flex flex-1 flex-row padding-s\">\n\t\t\t\t\t\t\t\t<div class=\"flex image-container\">\n\t\t\t\t\t\t\t\t\t<ng-container>\n\t\t\t\t\t\t\t\t\t\t<sb-uic-skeleton-loader [width]=\"'300px'\" [height]=\"'155px'\"\n\t\t\t\t\t\t\t\t\t\t\t></sb-uic-skeleton-loader>\n\t\t\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"flex title-container flex-col\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex\">\n\t\t\t\t\t\t\t\t\t\t<sb-uic-skeleton-loader [width]=\"'100px'\" [height]=\"'16px'\"\n\t\t\t\t\t\t\t\t\t\t\t[bindingClass]=\"'flex rounded br-8'\"></sb-uic-skeleton-loader>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"flex margin-remove margin-top-l font-normal\">\n\t\t\t\t\t\t\t\t\t\t<sb-uic-skeleton-loader [width]=\"'100px'\" [height]=\"'16px'\"\n\t\t\t\t\t\t\t\t\t\t\t[bindingClass]=\"'flex rounded br-8'\"></sb-uic-skeleton-loader>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<!-- <span class=\"text-center\"><sb-uic-skeleton-loader [width]=\"'90px'\" [height]=\"'16px'\"\n\t\t\t\t\t\t\t\t\t[bindingClass]=\"'flex rounded br-8'\"></sb-uic-skeleton-loader> </span> -->\n\t\t\t\t\t\t\t<mat-card-footer\n\t\t\t\t\t\t\t\tclass=\"assessment-card-footer col-row padding-l\">\n\t\t\t\t\t\t\t\t<div class=\"flex flex-1 items-center justify-center col-row margin-top-m\">\n\t\t\t\t\t\t\t\t<div class=\"flex margin-right-m\">\n\t\t\t\t\t\t\t\t\t<sb-uic-skeleton-loader [width]=\"'100px'\" [height]=\"'16px'\"\n\t\t\t\t\t\t\t\t\t\t[bindingClass]=\"'flex rounded br-8'\"></sb-uic-skeleton-loader>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"flex\">\n\t\t\t\t\t\t\t\t\t<sb-uic-skeleton-loader [width]=\"'100px'\" [height]=\"'16px'\"\n\t\t\t\t\t\t\t\t\t\t[bindingClass]=\"'flex rounded br-8'\"></sb-uic-skeleton-loader>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</mat-card-footer>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</mat-card-content>\n\t\t\t\t</ng-container>\n\t\t\t</div>\n\t\t</a>\n\t</mat-card>\n</ng-template>",
120
+ styles: [".card-assessment{width:100%;min-height:190px;box-sizing:border-box;min-width:335px;margin-top:16px}.image-container{width:155px;height:120px;border-radius:8px;overflow:hidden;border:1px solid rgba(0,0,0,.08)}.title-container{margin-left:12px}.title-text{word-break:break-word;white-space:initial;margin:8px 0;position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;max-height:48px;font:600 14px/24px Montserrat}.sub-title-text{width:75%;word-break:break-word;white-space:initial;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.course_logo_box{width:38px;height:38px;background:#fff;border-radius:8px;box-sizing:border-box;margin-right:4px;box-shadow:0 2px 1px -1px rgb(0 0 0 / 20%),0 1px 1px 0 rgb(0 0 0 / 14%),0 1px 3px 0 rgb(0 0 0 / 12%)}.course_logo_box img.source-icon{height:28px;width:28px;padding:5px;display:inline-block}.mat-card-footer{margin:0!important}.time-span{padding:2px 8px;color:#fff;border-radius:4px;text-align:center;font-size:12px;background-color:green}span.start-span{border-radius:50px;border:2px solid rgba(0,0,0,.08);font-size:12px;text-align:center;position:absolute;bottom:0;width:140px;left:50%;margin-left:-70px;background-color:#fff;margin-bottom:62px;margin-right:8px}.assessment-card-footer{background:rgba(239,149,30,.16)!important;text-align:center;box-sizing:border-box}.start-btn{background:#1b4ca1!important;color:#fff;font-size:14px;font-weight:600;border-radius:25px;text-align:center;padding:4px 12px}.dots-container{display:none}"]
121
+ }] }
122
+ ];
123
+ /** @nocollapse */
124
+ CardAssessmentComponent.ctorParameters = () => [
125
+ { type: ConfigurationsService },
126
+ { type: WidgetContentService }
127
+ ];
128
+ CardAssessmentComponent.propDecorators = {
129
+ widgetData: [{ type: Input }],
130
+ enrollmentMapData: [{ type: Input }],
131
+ contentData: [{ type: Output }],
132
+ isCardLoading: [{ type: Input }]
133
+ };
134
+ if (false) {
135
+ /** @type {?} */
136
+ CardAssessmentComponent.prototype.widgetData;
137
+ /** @type {?} */
138
+ CardAssessmentComponent.prototype.enrollmentMapData;
139
+ /** @type {?} */
140
+ CardAssessmentComponent.prototype.contentData;
141
+ /** @type {?} */
142
+ CardAssessmentComponent.prototype.isCardLoading;
143
+ /** @type {?} */
144
+ CardAssessmentComponent.prototype.stripData;
145
+ /** @type {?} */
146
+ CardAssessmentComponent.prototype.enrollList;
147
+ /** @type {?} */
148
+ CardAssessmentComponent.prototype.activeResource;
149
+ /** @type {?} */
150
+ CardAssessmentComponent.prototype.defaultThumbnail;
151
+ /** @type {?} */
152
+ CardAssessmentComponent.prototype.defaultSLogo;
153
+ /** @type {?} */
154
+ CardAssessmentComponent.prototype.daysRemaining;
155
+ /** @type {?} */
156
+ CardAssessmentComponent.prototype.startDate;
157
+ /** @type {?} */
158
+ CardAssessmentComponent.prototype.daysPending;
159
+ /**
160
+ * @type {?}
161
+ * @private
162
+ */
163
+ CardAssessmentComponent.prototype.intervalId;
164
+ /**
165
+ * @type {?}
166
+ * @private
167
+ */
168
+ CardAssessmentComponent.prototype.configSvc;
169
+ /**
170
+ * @type {?}
171
+ * @private
172
+ */
173
+ CardAssessmentComponent.prototype.contSvc;
174
+ }
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1hc3Nlc3NtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY2FyZHMvY2FyZC1hc3Nlc3NtZW50L2NhcmQtYXNzZXNzbWVudC9jYXJkLWFzc2Vzc21lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFRcEYsZUFBZTtBQUNmLHFDQUFxQztBQUNyQyxLQUFLO0FBQ0wsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7SUFjbEMsWUFBb0IsU0FBZ0MsRUFBVSxPQUE2QjtRQUF2RSxjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBWGpGLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUN0QyxrQkFBYSxHQUFZLEtBQUssQ0FBQTtRQUN2QyxjQUFTLEdBQVEsRUFBRSxDQUFBO1FBQ25CLGVBQVUsR0FBUSxFQUFFLENBQUE7UUFDcEIsbUJBQWMsR0FBTyxFQUFFLENBQUE7UUFHdkIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFMUIsZ0JBQVcsR0FBVyxLQUFLLENBQUE7SUFFcUUsQ0FBQzs7OztJQUVqRyxRQUFROztjQUNBLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWM7UUFDcEQsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQTtZQUNqRSxJQUFJLENBQUMsWUFB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dGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4vLyBpbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgTnNDb250ZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLXVpYy1jYXJkLWFzc2Vzc21lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1hc3Nlc3NtZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1hc3Nlc3NtZW50LmNvbXBvbmVudC5jc3MnXVxufSlcblxuLy8gQERpcmVjdGl2ZSh7XG4vLyAgIHNlbGVjdG9yOiAnW2NhbGxGdW5jdGlvbk9uSW5pdF0nXG4vLyB9KVxuZXhwb3J0IGNsYXNzIENhcmRBc3Nlc3NtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgd2lkZ2V0RGF0YSE6IE5zQ29udGVudC5JQ29udGVudDtcbiAgQElucHV0KCkgZW5yb2xsbWVudE1hcERhdGE6IGFueVxuICBAT3V0cHV0KCkgY29udGVudERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBASW5wdXQoKSBpc0NhcmRMb2FkaW5nOiBib29sZWFuID0gZmFsc2VcbiAgc3RyaXBEYXRhOiBhbnkgPSBbXVxuICBlbnJvbGxMaXN0OiBhbnkgPSBbXVxuICBhY3RpdmVSZXNvdXJjZTogYW55ID1bXVxuICBkZWZhdWx0VGh1bWJuYWlsOiBhbnlcbiAgZGVmYXVsdFNMb2dvOiBhbnlcbiAgZGF5c1JlbWFpbmluZzogbnVtYmVyID0gMDtcbiAgc3RhcnREYXRlOmFueVxuICBkYXlzUGVuZGluZzpib29sZWFuID0gZmFsc2VcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsIHByaXZhdGUgY29udFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnXG4gICAgaWYgKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRUaHVtYm5haWwgPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0Q29udGVudCB8fCAnJ1xuICAgICAgdGhpcy5kZWZhdWx0U0xvZ28gPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0U291cmNlTG9nbyB8fCAnL2Fzc2V0cy9pbnN0YW5jZXMvZWFnbGUvYXBwX2xvZ29zL0thcm1heW9naUJoYXJhdF9Mb2dvLnN2ZydcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0VGh1bWJuYWlsID0gJy9hc3NldHMvaW5zdGFuY2VzL2VhZ2xlL2FwcF9sb2dvcy9kZWZhdWx0LnBuZydcbiAgICAgIHRoaXMuZGVmYXVsdFNMb2dvID0gICcvYXNzZXRzL2luc3RhbmNlcy9lYWdsZS9hcHBfbG9nb3MvS2FybWF5b2dpQmhhcmF0X0xvZ28uc3ZnJ1xuICAgIH1cblxuICB9XG5cbiAgdXBkYXRlU3RhcnREYXRlKHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCk6dm9pZCB7XG4gICAgdGhpcy5zdGFydERhdGUgPSBzdGFydERhdGU7ICAgICBcbiAgICB0aGlzLnN0YXJ0Q291bnRkb3duKHRoaXMuc3RhcnREYXRlKVxuICB9XG5cbiAgIHN0YXJ0Q291bnRkb3duKGRhdGU6YW55KTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIHRoZSBjb3VudGRvd24gaW1tZWRpYXRlbHkgb24gc3RhcnRcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZG93bihkYXRlKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgY291bnRkb3duIGV2ZXJ5IHNlY29uZFxuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlQ291bnRkb3duKGRhdGUpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIHVwZGF0ZSB0aGUgY291bnRkb3duIHZhbHVlc1xuICAgdXBkYXRlQ291bnRkb3duKHRhcmdldERhdGU6YW55KTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7IC8vIEN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCB0YXJnZXRUaW1lID0gbmV3IERhdGUodGFyZ2V0RGF0ZSkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gdGFyZ2V0VGltZSAtIG5vdzsgLy8gRGlzdGFuY2UgaW4gbWlsbGlzZWNvbmRzXG4gICAgaWYgKGRpc3RhbmNlID4gMCkge1xuICAgICAgdGhpcy5kYXlzUmVtYWluaW5nID0gTWF0aC5jZWlsKGRpc3RhbmNlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbiAgICAgIHRoaXMuZGF5c1BlbmRpbmcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF5c1JlbWFpbmluZyA9IDA7XG4gICAgICB0aGlzLmRheXNQZW5kaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJUaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBjbGVhciB0aGUgaW50ZXJ2YWxcbiAgY2xlYXJUaW1lcigpOiB2b2lkIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgfVxuXG4gIGdldFJlZGlyZWN0VXJsRGF0YShjb250ZW50RGF0YTogYW55KXtcbiAgICAvLyBmb3IgdGVsZW1ldHJ5XG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YSAmJiB0aGlzLndpZGdldERhdGEuY29udGV4dCAmJiB0aGlzLndpZGdldERhdGEuY29udGV4dC5wYWdlU2VjdGlvbikge1xuICAgICAgY29udGVudERhdGFbJ3R5cGVPZlRlbGVtZXRyeSddID0gdGhpcy53aWRnZXREYXRhLmNvbnRleHQucGFnZVNlY3Rpb25cbiAgICB9XG4gICAgdGhpcy5jb250U3ZjLmNoYW5nZVRlbGVtZXRyeURhdGEoY29udGVudERhdGEpXG4gICAgLy8gZm9yIHJlZGlyZWN0aW9uXG4gICAgdGhpcy5jb250ZW50RGF0YS5lbWl0KGNvbnRlbnREYXRhKVxuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,261 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
6
+ import { NsCardContent } from '../../../_models/card-content.model';
7
+ import { MatDialog, MatSnackBar } from '@angular/material';
8
+ import { TranslateService } from '@ngx-translate/core';
9
+ import { MultilingualTranslationsService } from '../../../_services/multilingual-translations.service';
10
+ import { WidgetContentService } from '../../../_services/widget-content.service';
11
+ import { ConfigurationsService, EventService, WsEvents } from '@sunbird-cb/utils-v2';
12
+ import * as _ from "lodash";
13
+ import { CertificateService } from '../../../_services/certificate.service';
14
+ import { CertificateDialogComponent } from '../../dialog-components/certificate-dialog/certificate-dialog.component';
15
+ export class CardProgressPortraitLibComponent {
16
+ /**
17
+ * @param {?} snackBar
18
+ * @param {?} translate
19
+ * @param {?} events
20
+ * @param {?} langtranslations
21
+ * @param {?} configSvc
22
+ * @param {?} contSvc
23
+ * @param {?} certificateService
24
+ * @param {?} dialog
25
+ */
26
+ constructor(snackBar, translate, events, langtranslations, configSvc, contSvc, certificateService, dialog) {
27
+ this.snackBar = snackBar;
28
+ this.translate = translate;
29
+ this.events = events;
30
+ this.langtranslations = langtranslations;
31
+ this.configSvc = configSvc;
32
+ this.contSvc = contSvc;
33
+ this.certificateService = certificateService;
34
+ this.dialog = dialog;
35
+ this.isCardLoading = false;
36
+ this.contentData = new EventEmitter();
37
+ this.isCardFlipped = false;
38
+ this.acbpConstants = NsCardContent.ACBPConst;
39
+ this.showFlip = false;
40
+ this.widgetType = 'df';
41
+ this.widgetSubType = 'sdf';
42
+ this.downloadCertificateLoading = false;
43
+ this.langtranslations.languageSelectedObservable.subscribe((/**
44
+ * @return {?}
45
+ */
46
+ () => {
47
+ if (localStorage.getItem('websiteLanguage')) {
48
+ this.translate.setDefaultLang('en');
49
+ /** @type {?} */
50
+ const lang = (/** @type {?} */ (localStorage.getItem('websiteLanguage')));
51
+ this.translate.use(lang);
52
+ }
53
+ }));
54
+ }
55
+ /**
56
+ * @return {?}
57
+ */
58
+ ngOnInit() {
59
+ /** @type {?} */
60
+ const instanceConfig = this.configSvc.instanceConfig;
61
+ if (instanceConfig) {
62
+ this.defaultThumbnail = instanceConfig.logos.defaultContent || '';
63
+ this.sourceLogos = instanceConfig.sources;
64
+ this.defaultSLogo = instanceConfig.logos.defaultSourceLogo || '';
65
+ }
66
+ else {
67
+ this.defaultThumbnail = '/assets/instances/eagle/app_logos/default.png';
68
+ this.defaultSLogo = '/assets/instances/eagle/app_logos/KarmayogiBharat_Logo.svg';
69
+ }
70
+ }
71
+ /**
72
+ * @return {?}
73
+ */
74
+ showSnackbar() {
75
+ if (this.showIntranetContent) {
76
+ this.snackBar.open('Content is only available in intranet', 'X', { duration: 2000 });
77
+ }
78
+ else if (!this.isLiveOrMarkForDeletion) {
79
+ this.snackBar.open('Content may be expired or deleted', 'X', { duration: 2000 });
80
+ }
81
+ }
82
+ /**
83
+ * @param {?} contentData
84
+ * @return {?}
85
+ */
86
+ getRedirectUrlData(contentData) {
87
+ // for telemetry
88
+ if (this.widgetData && this.widgetData.context && this.widgetData.context.pageSection) {
89
+ contentData['typeOfTelemetry'] = this.widgetData.context.pageSection;
90
+ }
91
+ this.contSvc.changeTelemetryData(contentData);
92
+ // for redirection
93
+ this.contentData.emit(contentData);
94
+ }
95
+ /**
96
+ * @param {?} label
97
+ * @param {?} type
98
+ * @param {?=} subtype
99
+ * @return {?}
100
+ */
101
+ translateLabels(label, type, subtype) {
102
+ return this.langtranslations.translateLabelWithoutspace(label, type, subtype);
103
+ }
104
+ /**
105
+ * @return {?}
106
+ */
107
+ raiseTelemetry() {
108
+ this.events.raiseInteractTelemetry({
109
+ type: 'click',
110
+ subType: `${this.widgetType}-${this.widgetSubType}`,
111
+ id: `${_.camelCase(this.widgetData.content.primaryCategory)}-card`,
112
+ }, {
113
+ id: this.widgetData.content.identifier,
114
+ type: this.widgetData.content.primaryCategory,
115
+ //context: this.widgetData.context,
116
+ rollup: {},
117
+ ver: `${this.widgetData.content.version}${''}`,
118
+ }, {
119
+ pageIdExt: `${_.camelCase(this.widgetData.content.primaryCategory)}-card`,
120
+ module: _.camelCase(this.widgetData.content.primaryCategory),
121
+ });
122
+ }
123
+ /**
124
+ * @param {?} certificateData
125
+ * @return {?}
126
+ */
127
+ downloadCertificate(certificateData) {
128
+ this.events.raiseInteractTelemetry({
129
+ type: WsEvents.EnumInteractTypes.CLICK,
130
+ id: 'view-certificate',
131
+ subType: WsEvents.EnumInteractSubTypes.CERTIFICATE,
132
+ }, {
133
+ id: certificateData.issuedCertificates[0].identifier,
134
+ // id of the certificate
135
+ type: WsEvents.EnumInteractSubTypes.CERTIFICATE,
136
+ });
137
+ if (certificateData.issuedCertificates.length > 0) {
138
+ this.downloadCertificateLoading = true;
139
+ /** @type {?} */
140
+ let certData = certificateData.issuedCertificates[0];
141
+ this.certificateService.downloadCertificate_v2(certData.identifier).subscribe((/**
142
+ * @param {?} res
143
+ * @return {?}
144
+ */
145
+ (res) => {
146
+ this.downloadCertificateLoading = false;
147
+ /** @type {?} */
148
+ const cet = res.result.printUri;
149
+ this.dialog.open(CertificateDialogComponent, {
150
+ width: '1300px',
151
+ data: { cet, certId: certData.identifier },
152
+ });
153
+ }));
154
+ }
155
+ else {
156
+ this.downloadCertificateLoading = false;
157
+ }
158
+ }
159
+ }
160
+ CardProgressPortraitLibComponent.decorators = [
161
+ { type: Component, args: [{
162
+ selector: 'sb-uic-card-progress-portrait-lib',
163
+ template: "<ng-container *ngIf=\"!isCardLoading\">\n <mat-card class=\"card-portrait card-progress-portrait-lib cursor-pointer\" [ngClass]=\"widgetData?.cardCustomeClass ? widgetData?.cardCustomeClass : ''\" (click)=\"raiseTelemetry();getRedirectUrlData(widgetData?.content); $event.stopPropagation()\" >\n <div class=\"course_widget portrait_widget flex margin-bottom-xs\">\n <div class=\"flex flex-end flex-middle course_port\">\n <mat-icon class=\"mat-icon main_icon ws-mat-default-text margin-right-xs\">video_library</mat-icon>\n <sb-uic-display-content-type i18n-title title=\"Content Type\" *ngIf=\"widgetData?.content?.primaryCategory\"\n class=\"ws-mat-black60-text font-normal mat-caption \" [displayContentType]=\"widgetData?.content?.primaryCategory==='Course Unit'\n ?'Module'\n :widgetData?.content?.primaryCategory\">\n </sb-uic-display-content-type>\n </div>\n </div>\n <div class=\"flex\">\n <div class=\"margin-right-s\">\n <ng-container *ngIf=\"widgetData?.content?.posterImage\">\n <div class=\" img-block-portrait position-relative\">\n <img mat-card-image [src]=\"widgetData?.content?.posterImage | pipePublicURL\" loading=\"lazy\"\n class=\"card-image ws-mat-primary-lite-background margin-remove\" [wsUtilsDefaultThumbnail]=\"defaultThumbnail\"\n [alt]=\"widgetData?.content?.name\" />\n <div class=\"duration-box right-corner-portrait\" *ngIf=\"widgetData?.content?.duration > 0\">\n <mat-icon class=\"mat-icon main_icon mr-1\">access_time</mat-icon>\n <span class=\" ws-mat-white-text duration\">\n {{ (widgetData?.content?.duration || 120)| pipeDurationTransform: 'hms' }}\n </span>\n </div>\n <div class=\"duration-box right-corner-portrait\" *ngIf=\"widgetData?.content?.programDuration > 0\">\n <mat-icon class=\"mat-icon main_icon mr-1\">access_time</mat-icon>\n <span class=\" ws-mat-white-text duration\">\n {{widgetData?.content?.programDuration}} {{widgetData?.content?.programDuration === 1 ? 'day' : 'days'}}\n </span>\n </div>\n <ng-container *ngIf=\"cbPlanMapData && cbPlanMapData[widgetData?.content?.identifier]\">\n <ng-container [ngTemplateOutlet]=\"cbpPlan\" [ngTemplateOutletContext]=\"{data: {\n cbpData: cbPlanMapData[widgetData?.content?.identifier]\n }}\"></ng-container>\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!widgetData?.content?.posterImage\">\n <ng-container *ngIf=\"widgetData?.content?.appIcon; else defaultImg\">\n <img mat-card-image [src]=\"widgetData?.content?.appIcon | pipePublicURL\" loading=\"lazy\"\n class=\"card-image ws-mat-primary-lite-background margin-remove\" [wsUtilsDefaultThumbnail]=\"defaultThumbnail\"\n [alt]=\"widgetData?.content?.name\" />\n </ng-container>\n <ng-template #defaultImg>\n <img mat-card-image [src]=\"defaultThumbnail\" loading=\"lazy\"\n class=\"card-image ws-mat-primary-lite-background margin-remove\"\n [alt]=\"widgetData?.content?.name\" />\n </ng-template>\n </ng-container>\n </div>\n <div class=\"width-1-1\">\n <div [id]=\"'m-c-'+ widgetData?.content?.identifier\"\n class=\"portrait-subheading mat-subheading-2 title-text\">\n {{ widgetData?.content?.name }}\n </div>\n <div class=\"flex w-full flex-middle\">\n <div class=\"portrait_course_logo_box margin-right-xs\">\n <img [src]=\"widgetData?.content?.creatorLogo | pipePublicURL \" class=\"source-icon\" loading=\"lazy\" [wsUtilsDefaultThumbnail]=\"defaultSLogo\"\n [alt]=\"(widgetData?.content?.sourceName + '_' + widgetData?.content?.identifier)\" />\n </div>\n <span class=\"portrait-org-name font-normal mat-caption\">{{'cardcontentv2.by' | translate}} {{ (widgetData?.content?.organisation && widgetData?.content?.organisation[0]) ? widgetData?.content?.organisation[0] : 'Karmayogi Bharat' }}</span>\n </div>\n\n </div>\n </div>\n <ng-container *ngIf=\"widgetData?.content?.completionPercentage < 100\">\n <div class=\"flex flex-align-end progress-wrapper flex-between\" >\n <div class=\"progress-block\" >\n <div class=\"completed-time\">\n <mat-icon class=\"mat-icon schedule margin-right-xs\">schedule</mat-icon>\n <span>{{widgetData?.content?.completionPercentage}}%</span>\n </div>\n <div>\n <ng-container *ngIf=\"widgetData?.content?.completionStatus < 2\">\n <sb-uic-content-progress class=\"progress-bar-new\" [customClassName]=\"'course-progress-bar'\" *ngIf=\"widgetData?.content?.identifier\"\n [contentId]=\"widgetData?.content?.identifier\" [progress]=\"widgetData?.content?.completionPercentage\"\n [progressType]=\"'percentage'\">\n </sb-uic-content-progress>\n </ng-container>\n </div>\n </div>\n <div class=\"progress-btn\">\n <button class=\"resume-btn flex flex-middle flex-between\" [routerLink]=\"['/app/toc/',widgetData?.content?.identifier,'overview']\"\n [queryParams]=\"{primaryCategory: widgetData?.content?.primaryCategory}\" [state]=\"widgetData?.stateData\" \n [matTooltipPosition]=\"'below'\"\n [matTooltipDisabled]=\"(!widgetData?.content?.completionPercentage ? translateLabels('start', 'cardcontentv2') : translateLabels('resume', 'cardcontentv2')).length < 11\"\n matTooltip=\"{{!widgetData?.content?.completionPercentage ? translateLabels('start', 'cardcontentv2') : translateLabels('resume', 'cardcontentv2')}}\">\n <span class=\"textwrap margin-right-xs\">\n {{!widgetData?.content?.completionPercentage ? translateLabels('start', 'cardcontentv2') : translateLabels('resume', 'cardcontentv2')}}</span>\n <img class=\"stats-icon\" height=\"20\" width=\"20\" src=\"/assets/icons/home/play.svg\">\n </button>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"widgetData?.content?.completionPercentage === 100\">\n <div class=\"flex flex-align-end progress-wrapper flex-end mt-1\">\n <div class=\"progress-btn\">\n <button class=\"resume-btn flex flex-middle flex-between view-btn\" [ngClass]=\"{'disable-btn': downloadCertificateLoading || widgetData?.content?.issuedCertificates?.length === 0}\" (click)=\"!downloadCertificateLoading && downloadCertificate(widgetData?.content);$event.stopPropagation()\" \n [matTooltipPosition]=\"'below'\"\n [matTooltipDisabled]=\"(translateLabels('viewCertificate', 'cardcontentv2')).length < 11\"\n matTooltip=\"{{'cardcontentv2.viewCertificate' | translate }}\">\n <span class=\"margin-right-xs textwrap\">{{'cardcontentv2.viewCertificate' | translate }}</span>\n <img class=\"stats-icon\" *ngIf=\"!downloadCertificateLoading\" height=\"20\" width=\"20\" src=\"/assets/icons/home/eye-white.svg\">\n <div class=\"center flex flex-middle\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'red'\" class=\"white-spinner\" [diameter]=\"16\"></mat-spinner>\n </div>\n </button>\n </div>\n </div>\n </ng-container>\n </mat-card>\n</ng-container>\n\n\n<ng-template #cbpPlan let-data=\"data\">\n <div class=\"cbp-mark left-0 border-top-radius\">\n <p *ngIf=\"data.cbpData.planDuration === acbpConstants?.UPCOMING\" class=\"cbp-warning\">{{data.cbpData.endDate | date: 'd MMM, y'}}</p>\n <p *ngIf=\"data.cbpData.planDuration === acbpConstants?.SUCCESS\" class=\"cbp-success\">{{data.cbpData.endDate | date: 'd MMM, y'}}</p>\n <p *ngIf=\"data.cbpData.planDuration === acbpConstants?.OVERDUE\" class=\"cbp-danger\">{{'OverDue' }}</p>\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"isCardLoading\">\n <mat-card class=\"card-portrait\" [ngClass]=\"widgetData.cardCustomeClass ? widgetData.cardCustomeClass : ''\">\n <div class=\"margin-bottom-xs\">\n <ng-container>\n <sb-uic-skeleton-loader [width]=\"'147px'\" [height]=\"'26px'\" [bindingClass]=\"'flex rounded'\"></sb-uic-skeleton-loader>\n </ng-container>\n </div>\n <div class=\"flex\">\n <div class=\"margin-right-s\">\n <ng-container>\n <sb-uic-skeleton-loader [width]=\"'147px'\" [height]=\"'98px'\" [bindingClass]=\"'flex rounded'\"></sb-uic-skeleton-loader>\n </ng-container>\n </div>\n <div class=\"width-1-1\">\n <div class=\"portrait-subheading title-text\">\n <sb-uic-skeleton-loader [bindingClass]=\"'flex rounded width-1-1'\"></sb-uic-skeleton-loader>\n </div>\n <div class=\"flex w-full flex-wrap flex-middle\">\n <div class=\" margin-right-xs\">\n <sb-uic-skeleton-loader [width]=\"'24px'\" [height]=\"'24px'\" [bindingClass]=\"'flex rounded'\"></sb-uic-skeleton-loader>\n </div>\n <span class=\"\"><sb-uic-skeleton-loader [width]=\"'133px'\" [height]=\"'12px'\" [bindingClass]=\"'flex rounded'\"></sb-uic-skeleton-loader></span>\n </div>\n <div class=\"portrait_widget flex margin-top-xs\">\n <div class=\"flex flex-end flex-middle\">\n <sb-uic-skeleton-loader [width]=\"'65px'\" [height]=\"'12px'\" [bindingClass]=\"'flex rounded'\"></sb-uic-skeleton-loader>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-align-end progress-wrapper flex-between\">\n <div class=\"progress-block\">\n <div class=\"completed-time\">\n <sb-uic-skeleton-loader [width]=\"'211px'\" [height]=\"'16px'\" [bindingClass]=\"'flex rounded margin-top-xs md:w-211'\"></sb-uic-skeleton-loader>\n </div>\n </div>\n <div class=\"progress-btn\">\n <sb-uic-skeleton-loader [width]=\"'117px'\" [height]=\"'32px'\" [bindingClass]=\"'flex rounded margin-top-xs'\"></sb-uic-skeleton-loader>\n </div>\n </div>\n </mat-card>\n</ng-container>",
164
+ styles: [".card-portrait{border-radius:12px;border:1px solid rgba(0,0,0,.08);opacity:1;width:318px;min-height:154px;padding:16px}.card-portrait .img-block-portrait{line-height:10px}.card-portrait .card-image{border-radius:8px;opacity:1;background-size:100%;width:147px;height:100px}.card-portrait .portrait-subheading{opacity:1;color:rgba(0,0,0,.87);font-weight:700;font-style:normal;letter-spacing:.25px;text-align:left;word-break:break-word;white-space:initial;margin:0 0 8px;position:relative;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:40px}.card-portrait .portrait_course_logo_box img{padding:3px;display:inline-block;width:24px;height:24px;border:1px solid #d6d6d6;border-radius:4px;box-sizing:border-box}.card-portrait span.portrait-org-name{width:75%;word-break:break-all;white-space:initial;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.card-portrait .portrait_widget{align-items:center;margin-top:0}.card-portrait .portrait_widget .course_port{border:1px solid #ef951e;padding:4px 8px;align-items:center;border-radius:16px}.card-portrait .portrait_widget .video-icon{opacity:1;color:#ef951e;width:15px;height:15px;font-size:15px}.card-portrait .portrait_widget .portrait-category{color:rgba(0,0,0,.6)!important;font-size:.75rem;opacity:1;font-family:Lato-Regular;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:20px}.card-portrait .progress-wrapper .progress-block{width:60%}.card-portrait .progress-wrapper .progress-block .completed-time{color:#ef951e;display:flex;padding:8px 0}.card-portrait .progress-wrapper .progress-block .completed-time mat-icon{width:1rem;height:1rem;font-size:1rem}.card-portrait .progress-wrapper .progress-block .completed-time span{opacity:1;color:rgba(0,0,0,.87);font-family:Lato-Regular;font-size:.75rem;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.card-portrait .progress-wrapper .progress-btn .resume-btn{opacity:1;color:#fff;font-family:Lato-Bold;font-size:14px;font-weight:700;font-style:normal;letter-spacing:.5px;text-align:left;line-height:20px;background:#1a4ca1;border-radius:63px;padding:6px 16px;border:none;width:100%;cursor:pointer}.card-portrait .progress-wrapper .progress-btn .resume-btn .textwrap{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:82px}.card-portrait .progress-wrapper .progress-btn .resume-btn:hover{background-color:#253379}.card-portrait .progress-bar-new{color:#ef951e!important;height:10px;border-radius:5px}.card-portrait .rating-session mat-icon{font-size:20px;height:20px;width:20px;color:#ef951e}.card-portrait .rating-session .rating-number{font-size:14px}.card-portrait .rating-session .most-enrolled-text{font-size:10px;font-weight:400;padding:4px;background:#ffea9e;border-radius:4px;line-height:12px}.card-portrait .right-corner-portrait{right:8px;bottom:8px}.course_widget{margin-top:10px}.course_widget .mat-icon{vertical-align:middle;color:#ef951e!important}.course_widget .course_v2{border:1px solid #ef951e;padding:4px 8px;align-items:end;border-radius:16px}.course_widget .main_icon{font-size:16px;width:16px;height:16px}.rating-session mat-icon{font-size:16px;height:16px;width:12px;padding-right:3px;color:#ef951e}.rating-session span{font-size:11px}.rating-session .most-enrolled-text{padding:0 8px;background:#ffea9e;border-radius:4px}.duration-box{background:#000;position:absolute;border:none;display:flex;align-items:center;padding:4px;border-radius:4px}.duration-box.right-corner{right:4px;bottom:4px}.duration-box .mat-icon{vertical-align:middle;color:#fff!important;height:14px!important;width:14px!important;font-size:14px}.duration-box .duration{font:700 12px/16px Lato;display:inline-block;margin:0;padding:0}"]
165
+ }] }
166
+ ];
167
+ /** @nocollapse */
168
+ CardProgressPortraitLibComponent.ctorParameters = () => [
169
+ { type: MatSnackBar },
170
+ { type: TranslateService },
171
+ { type: EventService },
172
+ { type: MultilingualTranslationsService },
173
+ { type: ConfigurationsService },
174
+ { type: WidgetContentService },
175
+ { type: CertificateService },
176
+ { type: MatDialog }
177
+ ];
178
+ CardProgressPortraitLibComponent.propDecorators = {
179
+ widgetData: [{ type: Input }],
180
+ isLiveOrMarkForDeletion: [{ type: Input }],
181
+ showIntranetContent: [{ type: Input }],
182
+ isIntranetAllowedSettings: [{ type: Input }],
183
+ isCardLoading: [{ type: Input }],
184
+ contentData: [{ type: Output }],
185
+ cbPlanMapData: [{ type: Input }]
186
+ };
187
+ if (false) {
188
+ /** @type {?} */
189
+ CardProgressPortraitLibComponent.prototype.widgetData;
190
+ /** @type {?} */
191
+ CardProgressPortraitLibComponent.prototype.isLiveOrMarkForDeletion;
192
+ /** @type {?} */
193
+ CardProgressPortraitLibComponent.prototype.showIntranetContent;
194
+ /** @type {?} */
195
+ CardProgressPortraitLibComponent.prototype.isIntranetAllowedSettings;
196
+ /** @type {?} */
197
+ CardProgressPortraitLibComponent.prototype.isCardLoading;
198
+ /** @type {?} */
199
+ CardProgressPortraitLibComponent.prototype.contentData;
200
+ /** @type {?} */
201
+ CardProgressPortraitLibComponent.prototype.cbPlanMapData;
202
+ /** @type {?} */
203
+ CardProgressPortraitLibComponent.prototype.isCardFlipped;
204
+ /** @type {?} */
205
+ CardProgressPortraitLibComponent.prototype.acbpConstants;
206
+ /** @type {?} */
207
+ CardProgressPortraitLibComponent.prototype.defaultThumbnail;
208
+ /** @type {?} */
209
+ CardProgressPortraitLibComponent.prototype.sourceLogos;
210
+ /** @type {?} */
211
+ CardProgressPortraitLibComponent.prototype.defaultSLogo;
212
+ /** @type {?} */
213
+ CardProgressPortraitLibComponent.prototype.showFlip;
214
+ /** @type {?} */
215
+ CardProgressPortraitLibComponent.prototype.widgetType;
216
+ /** @type {?} */
217
+ CardProgressPortraitLibComponent.prototype.widgetSubType;
218
+ /** @type {?} */
219
+ CardProgressPortraitLibComponent.prototype.downloadCertificateLoading;
220
+ /**
221
+ * @type {?}
222
+ * @private
223
+ */
224
+ CardProgressPortraitLibComponent.prototype.snackBar;
225
+ /**
226
+ * @type {?}
227
+ * @private
228
+ */
229
+ CardProgressPortraitLibComponent.prototype.translate;
230
+ /**
231
+ * @type {?}
232
+ * @private
233
+ */
234
+ CardProgressPortraitLibComponent.prototype.events;
235
+ /**
236
+ * @type {?}
237
+ * @private
238
+ */
239
+ CardProgressPortraitLibComponent.prototype.langtranslations;
240
+ /**
241
+ * @type {?}
242
+ * @private
243
+ */
244
+ CardProgressPortraitLibComponent.prototype.configSvc;
245
+ /**
246
+ * @type {?}
247
+ * @private
248
+ */
249
+ CardProgressPortraitLibComponent.prototype.contSvc;
250
+ /**
251
+ * @type {?}
252
+ * @private
253
+ */
254
+ CardProgressPortraitLibComponent.prototype.certificateService;
255
+ /**
256
+ * @type {?}
257
+ * @private
258
+ */
259
+ CardProgressPortraitLibComponent.prototype.dialog;
260
+ }
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1wcm9ncmVzcy1wb3J0cmFpdC1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN1bmJpcmQtY2IvY29uc3VtcHRpb24vIiwic291cmNlcyI6WyJsaWIvX2NvbW1vbi9jYXJkcy9jYXJkLXByb2dyZXNzLXBvcnRyYWl0LWxpYi9jYXJkLXByb2dyZXNzLXBvcnRyYWl0LWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDdkcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQU9ySCxNQUFNLE9BQU8sZ0NBQWdDOzs7Ozs7Ozs7OztJQW1CM0MsWUFDVSxRQUFxQixFQUNyQixTQUEyQixFQUMzQixNQUFvQixFQUNwQixnQkFBaUQsRUFDakQsU0FBZ0MsRUFDaEMsT0FBNkIsRUFDN0Isa0JBQXNDLEVBQ3RDLE1BQWlCO1FBUGpCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsY0FBUyxH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QUMxQyxtRUFBcUM7O0lBQ3JDLCtEQUFpQzs7SUFDakMscUVBQXVDOztJQUN2Qyx5REFBdUM7O0lBQ3ZDLHVEQUErQzs7SUFDL0MseURBQTRCOztJQUM1Qix5REFBNkI7O0lBQzdCLHlEQUF1Qzs7SUFDdkMsNERBQXFCOztJQUNyQix1REFBZ0I7O0lBQ2hCLHdEQUFpQjs7SUFDakIsb0RBQWdCOztJQUNoQixzREFBc0I7O0lBQ3RCLHlEQUF5Qjs7SUFDekIsc0VBQTJDOzs7OztJQUd6QyxvREFBNkI7Ozs7O0lBQzdCLHFEQUFtQzs7Ozs7SUFDbkMsa0RBQTRCOzs7OztJQUM1Qiw0REFBeUQ7Ozs7O0lBQ3pELHFEQUF3Qzs7Ozs7SUFDeEMsbURBQXFDOzs7OztJQUNyQyw4REFBOEM7Ozs7O0lBQzlDLGtEQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi8uLi9fbW9kZWxzL2NhcmQtY29udGVudC5tb2RlbCc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL211bHRpbGluZ3VhbC10cmFuc2xhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgRXZlbnRTZXJ2aWNlLCBXc0V2ZW50cyB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJztcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL2NlcnRpZmljYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2ctY29tcG9uZW50cy9jZXJ0aWZpY2F0ZS1kaWFsb2cvY2VydGlmaWNhdGUtZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLXVpYy1jYXJkLXByb2dyZXNzLXBvcnRyYWl0LWxpYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkLXByb2dyZXNzLXBvcnRyYWl0LWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhcmQtcHJvZ3Jlc3MtcG9ydHJhaXQtbGliLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FyZFByb2dyZXNzUG9ydHJhaXRMaWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHdpZGdldERhdGEhOiBOc0NhcmRDb250ZW50LklDYXJkO1xuICBASW5wdXQoKSBpc0xpdmVPck1hcmtGb3JEZWxldGlvbjogYW55XG4gIEBJbnB1dCgpIHNob3dJbnRyYW5ldENvbnRlbnQ6IGFueVxuICBASW5wdXQoKSBpc0ludHJhbmV0QWxsb3dlZFNldHRpbmdzOiBhbnlcbiAgQElucHV0KCkgaXNDYXJkTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBPdXRwdXQoKSBjb250ZW50RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBJbnB1dCgpICBjYlBsYW5NYXBEYXRhOiBhbnlcbiAgaXNDYXJkRmxpcHBlZDpib29sZWFuID0gZmFsc2VcbiAgYWNicENvbnN0YW50cyA9IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0XG4gIGRlZmF1bHRUaHVtYm5haWw6IGFueVxuICBzb3VyY2VMb2dvczogYW55XG4gIGRlZmF1bHRTTG9nbzogYW55XG4gIHNob3dGbGlwID0gZmFsc2VcbiAgd2lkZ2V0VHlwZTogYW55ID0gJ2RmJ1xuICB3aWRnZXRTdWJUeXBlOiBhbnkgPSdzZGYnXG4gIGRvd25sb2FkQ2VydGlmaWNhdGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3RyYW5zbGF0aW9uczogTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZXJ0aWZpY2F0ZVNlcnZpY2U6IENlcnRpZmljYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgICkgeyBcbiAgICAgIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy5sYW5ndWFnZVNlbGVjdGVkT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJylcbiAgICAgICAgICBjb25zdCBsYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnXG4gICAgaWYgKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgICB0aGlzLmRlZmF1bHRUaHVtYm5haWwgPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0Q29udGVudCB8fCAnJ1xuICAgICAgdGhpcy5zb3VyY2VMb2dvcyA9IGluc3RhbmNlQ29uZmlnLnNvdXJjZXNcbiAgICAgIHRoaXMuZGVmYXVsdFNMb2dvID0gaW5zdGFuY2VDb25maWcubG9nb3MuZGVmYXVsdFNvdXJjZUxvZ28gfHwgJydcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0VGh1bWJuYWlsID0gJy9hc3NldHMvaW5zdGFuY2VzL2VhZ2xlL2FwcF9sb2dvcy9kZWZhdWx0LnBuZydcbiAgICAgIHRoaXMuZGVmYXVsdFNMb2dvID0gICcvYXNzZXRzL2luc3RhbmNlcy9lYWdsZS9hcHBfbG9nb3MvS2FybWF5b2dpQmhhcmF0X0xvZ28uc3ZnJ1xuICAgIH1cbiAgfVxuXG4gIHNob3dTbmFja2JhcigpIHtcbiAgICBpZiAodGhpcy5zaG93SW50cmFuZXRDb250ZW50KSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgaW4gaW50cmFuZXQnLCAnWCcsIHsgZHVyYXRpb246IDIwMDAgfSlcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTGl2ZU9yTWFya0ZvckRlbGV0aW9uKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvbnRlbnQgbWF5IGJlIGV4cGlyZWQgb3IgZGVsZXRlZCcsICdYJywgeyBkdXJhdGlvbjogMjAwMCB9KVxuICAgIH1cbiAgfVxuICBnZXRSZWRpcmVjdFVybERhdGEoY29udGVudERhdGE6IGFueSl7XG4gICAgLy8gZm9yIHRlbGVtZXRyeVxuICAgIGlmICh0aGlzLndpZGdldERhdGEgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRleHQgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRleHQucGFnZVNlY3Rpb24pIHtcbiAgICAgIGNvbnRlbnREYXRhWyd0eXBlT2ZUZWxlbWV0cnknXSA9IHRoaXMud2lkZ2V0RGF0YS5jb250ZXh0LnBhZ2VTZWN0aW9uXG4gICAgfVxuICAgIHRoaXMuY29udFN2Yy5jaGFuZ2VUZWxlbWV0cnlEYXRhKGNvbnRlbnREYXRhKVxuICAgIC8vIGZvciByZWRpcmVjdGlvblxuICAgIHRoaXMuY29udGVudERhdGEuZW1pdChjb250ZW50RGF0YSlcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnksIHN1YnR5cGU/OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsV2l0aG91dHNwYWNlKGxhYmVsLCB0eXBlLCBzdWJ0eXBlKVxuICB9XG4gIHJhaXNlVGVsZW1ldHJ5KCkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGU6IGAke3RoaXMud2lkZ2V0VHlwZX0tJHt0aGlzLndpZGdldFN1YlR5cGV9YCxcbiAgICAgICAgaWQ6IGAke18uY2FtZWxDYXNlKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSl9LWNhcmRgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXIsXG4gICAgICAgIHR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgLy9jb250ZXh0OiB0aGlzLndpZGdldERhdGEuY29udGV4dCxcbiAgICAgICAgcm9sbHVwOiB7fSxcbiAgICAgICAgdmVyOiBgJHt0aGlzLndpZGdldERhdGEuY29udGVudC52ZXJzaW9ufSR7Jyd9YCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhZ2VJZEV4dDogYCR7Xy5jYW1lbENhc2UodGhpcy53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5KX0tY2FyZGAsXG4gICAgICAgIG1vZHVsZTogXy5jYW1lbENhc2UodGhpcy53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5KSxcbiAgICAgIH0pXG4gIH1cblxuICBkb3dubG9hZENlcnRpZmljYXRlKGNlcnRpZmljYXRlRGF0YTogYW55KSB7XG4gICAgdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0VHlwZXMuQ0xJQ0ssXG4gICAgICAgIGlkOiAndmlldy1jZXJ0aWZpY2F0ZScsXG4gICAgICAgIHN1YlR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFN1YlR5cGVzLkNFUlRJRklDQVRFLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IGNlcnRpZmljYXRlRGF0YS5pc3N1ZWRDZXJ0aWZpY2F0ZXNbMF0uaWRlbnRpZmllciwgICAvLyBpZCBvZiB0aGUgY2VydGlmaWNhdGVcbiAgICAgICAgdHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuQ0VSVElGSUNBVEUsXG4gICAgICB9KVxuICAgIGlmKGNlcnRpZmljYXRlRGF0YS5pc3N1ZWRDZXJ0aWZpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kb3dubG9hZENlcnRpZmljYXRlTG9hZGluZyA9IHRydWVcbiAgICAgIGxldCBjZXJ0RGF0YTogYW55ID0gY2VydGlmaWNhdGVEYXRhLmlzc3VlZENlcnRpZmljYXRlc1swXVxuICAgICAgdGhpcy5jZXJ0aWZpY2F0ZVNlcnZpY2UuZG93bmxvYWRDZXJ0aWZpY2F0ZV92MihjZXJ0RGF0YS5pZGVudGlmaWVyKS5zdWJzY3JpYmUoKHJlczogYW55KT0+e1xuICAgICAgICB0aGlzLmRvd25sb2FkQ2VydGlmaWNhdGVMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc3QgY2V0ID0gcmVzLnJlc3VsdC5wcmludFVyaVxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKENlcnRpZmljYXRlRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgd2lkdGg6ICcxMzAwcHgnLFxuICAgICAgICAgIGRhdGE6IHsgY2V0LCBjZXJ0SWQ6IGNlcnREYXRhLmlkZW50aWZpZXIgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG59XG4iXX0=