@sunbird-cb/toc 0.0.7 → 0.0.9
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/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +248 -225
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1148 -1030
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
- package/esm2022/lib/_collection-api.mjs +57 -57
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
- package/esm2022/lib/_models/common.model.mjs +2 -2
- package/esm2022/lib/_models/error.model.mjs +2 -2
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
- package/esm2022/lib/_services/rating.service.mjs +89 -89
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
- package/esm2022/lib/_services/widget-content.model.mjs +247 -247
- package/esm2022/lib/_services/widget-content.service.mjs +594 -594
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
- package/esm2022/lib/app-toc-lib.module.mjs +499 -499
- package/esm2022/lib/collection.config.mjs +161 -161
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2907 -2905
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
- package/esm2022/lib/models/app-toc.model.mjs +38 -38
- package/esm2022/lib/models/auto-complete.model.mjs +2 -2
- package/esm2022/lib/models/card-content.model.mjs +13 -13
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
- package/esm2022/lib/models/goal.model.mjs +2 -2
- package/esm2022/lib/models/meta-tag.model.mjs +8 -8
- package/esm2022/lib/models/playlist.model.mjs +2 -2
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
- package/esm2022/lib/models/rating.model.mjs +2 -2
- package/esm2022/lib/models/user-profile.model.mjs +21 -21
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
- package/esm2022/lib/services/access-control.service.mjs +56 -56
- package/esm2022/lib/services/action.service.mjs +23 -23
- package/esm2022/lib/services/app-toc-v2.service.mjs +313 -243
- package/esm2022/lib/services/app-toc.service.mjs +1613 -1387
- package/esm2022/lib/services/certificate.service.mjs +69 -69
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
- package/esm2022/lib/services/editor.service.mjs +34 -34
- package/esm2022/lib/services/load-check.service.mjs +21 -21
- package/esm2022/lib/services/loader.service.mjs +33 -33
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
- package/esm2022/lib/services/netcore.service.mjs +56 -56
- package/esm2022/lib/services/nps-grid.service.mjs +31 -31
- package/esm2022/lib/services/otp.service.mjs +43 -43
- package/esm2022/lib/services/profile-v2.service.mjs +43 -43
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
- package/esm2022/lib/services/timer.service.mjs +23 -23
- package/esm2022/lib/services/title-tag.service.mjs +71 -71
- package/esm2022/lib/services/user-profile.service.mjs +55 -55
- package/esm2022/lib/services/viewer-data.service.mjs +64 -64
- package/esm2022/lib/services/viewer-util.service.mjs +590 -500
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
- package/esm2022/public-api.mjs +71 -70
- package/esm2022/sunbird-cb-toc.mjs +4 -4
- package/fesm2022/sunbird-cb-toc.mjs +24777 -24250
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -16
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -31
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -15
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -20
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -22
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -15
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +22 -22
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +22 -22
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -9
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -11
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -18
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -14
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -11
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -17
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -14
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -199
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -16
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -10
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -38
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -19
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -11
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +183 -183
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -41
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -54
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -47
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -48
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +171 -154
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -8
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -16
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -40
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -21
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -45
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -10
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -10
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +128 -128
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +51 -51
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +29 -29
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -9
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -7
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -7
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -28
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -24
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -14
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -9
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -12
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -10
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -22
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -8
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -18
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -8
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -15
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -35
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -19
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -14
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -13
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -11
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -11
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -15
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -10
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -16
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -11
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -34
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -17
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -15
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -15
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -21
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -12
- package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -21
- package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -9
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -47
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -14
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -22
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -19
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -15
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +25 -25
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -21
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -18
- package/lib/_collection-api.d.ts +34 -34
- package/lib/_constants/widget-content.constants.d.ts +7 -7
- package/lib/_directives/tooltip.directive.d.ts +17 -17
- package/lib/_models/common.model.d.ts +3 -3
- package/lib/_models/error.model.d.ts +5 -5
- package/lib/_pipes/highlight.pipe.d.ts +10 -10
- package/lib/_services/rating.service.d.ts +18 -18
- package/lib/_services/samuhik-charcha.service.d.ts +13 -13
- package/lib/_services/viewer-route-util.d.ts +8 -8
- package/lib/_services/widget-content.model.d.ts +515 -515
- package/lib/_services/widget-content.service.d.ts +101 -101
- package/lib/_shared/translate-loader.factory.d.ts +7 -7
- package/lib/app-toc-lib.module.d.ts +88 -88
- package/lib/collection.config.d.ts +159 -159
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -17
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -225
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +78 -78
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -22
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -31
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -47
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -14
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -21
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +314 -314
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +408 -408
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -47
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -22
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -14
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -149
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -42
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -27
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -15
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +195 -195
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -44
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -54
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -18
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +43 -43
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -20
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -13
- package/lib/models/app-toc-analytics.model.d.ts +152 -152
- package/lib/models/app-toc.model.d.ts +84 -84
- package/lib/models/auto-complete.model.d.ts +27 -27
- package/lib/models/card-content.model.d.ts +19 -19
- package/lib/models/content-strip-with-tabs.model.d.ts +44 -44
- package/lib/models/discussion-forum.model.d.ts +40 -40
- package/lib/models/goal.model.d.ts +22 -22
- package/lib/models/meta-tag.model.d.ts +6 -6
- package/lib/models/playlist.model.d.ts +23 -23
- package/lib/models/profile-revamp.model.d.ts +14 -14
- package/lib/models/rating.model.d.ts +17 -17
- package/lib/models/user-profile.model.d.ts +37 -37
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -16
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-resolver.service.d.ts +16 -16
- package/lib/resolvers/config-resolver.service.d.ts +11 -11
- package/lib/resolvers/profile-resolver.service.d.ts +11 -11
- package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -11
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -19
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -8
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -8
- package/lib/services/access-control.service.d.ts +29 -29
- package/lib/services/action.service.d.ts +9 -9
- package/lib/services/app-toc-v2.service.d.ts +16 -14
- package/lib/services/app-toc.service.d.ts +235 -177
- package/lib/services/certificate.service.d.ts +42 -42
- package/lib/services/discuss-utils.service.d.ts +33 -33
- package/lib/services/editor.service.d.ts +17 -17
- package/lib/services/load-check.service.d.ts +8 -8
- package/lib/services/loader.service.d.ts +16 -16
- package/lib/services/mobile-apps.service.d.ts +38 -38
- package/lib/services/netcore.service.d.ts +33 -33
- package/lib/services/nps-grid.service.d.ts +15 -15
- package/lib/services/otp.service.d.ts +20 -20
- package/lib/services/profile-v2.service.d.ts +20 -20
- package/lib/services/reset-ratings.service.d.ts +8 -8
- package/lib/services/resource-download-helper.service.d.ts +29 -29
- package/lib/services/timer.service.d.ts +9 -9
- package/lib/services/title-tag.service.d.ts +21 -21
- package/lib/services/user-profile.service.d.ts +24 -24
- package/lib/services/viewer-data.service.d.ts +58 -58
- package/lib/services/viewer-util.service.d.ts +76 -62
- package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -56
- package/lib/share-toc/share-toc.module.d.ts +32 -32
- package/package.json +1 -1
- package/public-api.d.ts +56 -55
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { NsCohorts } from '../../models/app-toc.model';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../../services/app-toc.service";
|
|
5
|
-
import * as i2 from "@sunbird-cb/utils-v2";
|
|
6
|
-
import * as i3 from "@angular/router";
|
|
7
|
-
import * as i4 from "@angular/common";
|
|
8
|
-
import * as i5 from "@angular/material/legacy-progress-spinner";
|
|
9
|
-
import * as i6 from "@angular/material/expansion";
|
|
10
|
-
import * as i7 from "../../_collection/_common/user-image/user-image.component";
|
|
11
|
-
export class AppTocCohortsComponent {
|
|
12
|
-
constructor(tocSvc, configSvc, router) {
|
|
13
|
-
this.tocSvc = tocSvc;
|
|
14
|
-
this.configSvc = configSvc;
|
|
15
|
-
this.router = router;
|
|
16
|
-
this.cohortResults = {};
|
|
17
|
-
this.cohortTypesEnum = NsCohorts.ECohortTypes;
|
|
18
|
-
this.forPreview = false;
|
|
19
|
-
}
|
|
20
|
-
ngOnInit() { }
|
|
21
|
-
get enableFeature() {
|
|
22
|
-
if (this.configSvc.restrictedFeatures) {
|
|
23
|
-
return !this.configSvc.restrictedFeatures.has('cohorts');
|
|
24
|
-
}
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
get enablePeopleSearch() {
|
|
28
|
-
if (this.configSvc.restrictedFeatures) {
|
|
29
|
-
return !this.configSvc.restrictedFeatures.has('peopleSearch');
|
|
30
|
-
}
|
|
31
|
-
return false;
|
|
32
|
-
}
|
|
33
|
-
goToUserProfile(user) {
|
|
34
|
-
if (this.enablePeopleSearch) {
|
|
35
|
-
this.router.navigate(['/app/person-profile', user.wid]);
|
|
36
|
-
// this.router.navigate(['/app/person-profile'], { queryParams: { emailId: user.email } })
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
getUserFullName(user) {
|
|
40
|
-
if (user && user.first_name && user.last_name) {
|
|
41
|
-
return `${user.first_name.trim()} ${user.last_name.trim()}`;
|
|
42
|
-
}
|
|
43
|
-
return '';
|
|
44
|
-
}
|
|
45
|
-
fetchCohorts(cohortType) {
|
|
46
|
-
if (!this.cohortResults[cohortType] && !this.forPreview) {
|
|
47
|
-
this.tocSvc.fetchContentCohorts(cohortType, this.content.identifier).subscribe(data => {
|
|
48
|
-
this.cohortResults[cohortType] = {
|
|
49
|
-
contents: data || [],
|
|
50
|
-
hasError: false,
|
|
51
|
-
};
|
|
52
|
-
}, () => {
|
|
53
|
-
this.cohortResults[cohortType] = {
|
|
54
|
-
contents: [],
|
|
55
|
-
hasError: true,
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
else if (this.cohortResults[cohortType] && !this.forPreview) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
this.cohortResults[cohortType] = {
|
|
64
|
-
contents: [],
|
|
65
|
-
hasError: false,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCohortsComponent, deps: [{ token: i1.AppTocService }, { token: i2.ConfigurationsService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCohortsComponent, selector: "ws-app-toc-cohorts", inputs: { content: "content", forPreview: "forPreview" }, ngImport: i0, template: "<section *ngIf=\"enableFeature\">\n <h2 class=\"mat-toolbar cohorts-head shadow\">Cohorts</h2>\n <mat-accordion [multi]=\"false\">\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.ACTIVE_USERS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Learner</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch active users\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError &&\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <!-- <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\n [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div> -->\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\">\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.ACTIVE_USERS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.TOP_PERFORMERS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Top performers</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch top performers\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError &&\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents\"\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.TOP_PERFORMERS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.COMMON_GOALS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Shares same goal</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS]\">\n <h3\n *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS].hasError\"\n class=\"mat-error text-center\"\n i18n\n >\n Failed to fetch users with same goals\n </h3>\n <h3\n *ngIf=\"\n !cohortResults[cohortTypesEnum.COMMON_GOALS].hasError &&\n !cohortResults[cohortTypesEnum.COMMON_GOALS].contents.length\n \"\n class=\"text-center\"\n i18n\n >\n None\n </h3>\n <div\n *ngFor=\"let cohort of cohortResults[cohortTypesEnum.COMMON_GOALS].contents\"\n [ngTemplateOutlet]=\"unitCohort\"\n [ngTemplateOutletContext]=\"{ user: cohort }\"\n ></div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.COMMON_GOALS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel> -->\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.AUTHORS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Curators</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch curators\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.AUTHORS].hasError &&\n !cohortResults[cohortTypesEnum.AUTHORS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.AUTHORS].contents\"\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.AUTHORS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.EDUCATORS)\">\n <mat-expansion-panel-header>\n <mat-panel-title>Educators</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch educators\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.EDUCATORS].hasError &&\n !cohortResults[cohortTypesEnum.EDUCATORS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.EDUCATORS].contents\" [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.EDUCATORS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel> -->\n </mat-accordion>\n\n <ng-template #unitCohort let-user=\"user\">\n <div class=\"unit-cohort\">\n <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image>\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\n class=\"width-expand padding-left-xs\">\n <div class=\"mat-body-strong cohorts-name\">\n {{\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\n | pipeNameTransform\n }}\n </div>\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\n </div>\n <div class=\"width-auto\">\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email] }\"></ws-widget-btn-mail-user>\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\n userName:\n {\n firstName: user.first_name,\n lastName: user.last_name,\n email: user.email\n } | pipeNameTransform,\n userPhone: user.phone_No\n }\"></ws-widget-btn-call>\n </div>\n </div>\n </ng-template>\n\n <ng-template #unitCohortNew let-user=\"user\">\n <div class=\"unit-cohort sm:pr-8 md:pr-10\">\n <!-- <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image> -->\n\n <ws-widget-user-image class=\"user-image\" [imageType]=\"'user-photo'\" [userName]=\"getUserFullName(user)\"\n [imageSize]=\"'small'\" [email]=\"user.email\" [imageUrl]=\"user.photo || ''\"></ws-widget-user-image>\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\n class=\"width-expand padding-left-xs\">\n <div class=\"mat-body-strong cohorts-name\">\n {{\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\n | pipeNameTransform\n }}\n </div>\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\n </div>\n <div class=\"width-auto user-action-container\">\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email], user: user }\">\n </ws-widget-btn-mail-user>\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\n userName:\n {\n firstName: user.first_name,\n lastName: user.last_name,\n email: user.email\n } | pipeNameTransform,\n userPhone: user.phone_No\n }\"></ws-widget-btn-call>\n </div>\n </div>\n <!-- </div> -->\n\n </ng-template>\n</section>\n", styles: [".cohorts-head{padding:8px 24px;margin:0;background:#fff!important;border-radius:8px 8px 0 0;color:#222!important}.unit-cohort{display:inline-flex;margin-bottom:24px}.unit-cohort .cohort-image{width:32px;height:32px;font-size:32px}.cohorts-name{letter-spacing:0px;color:#5f5f5f;font-size:.9rem;font-weight:400}.cohortSection{margin:50px auto;width:70%}.flex{display:flex}.chorotsBlock{background:#fff}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.user-action-container{color:#adadae}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatLegacyProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i6.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { kind: "component", type: i7.UserImageComponent, selector: "ws-widget-user-image", inputs: ["email", "userId", "userName", "imageType", "imageUrl", "imageSize"] }, { kind: "pipe", type: i2.PipeNameTransformPipe, name: "pipeNameTransform" }] }); }
|
|
71
|
-
}
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCohortsComponent, decorators: [{
|
|
73
|
-
type: Component,
|
|
74
|
-
args: [{ selector: 'ws-app-toc-cohorts', template: "<section *ngIf=\"enableFeature\">\n <h2 class=\"mat-toolbar cohorts-head shadow\">Cohorts</h2>\n <mat-accordion [multi]=\"false\">\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.ACTIVE_USERS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Learner</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch active users\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError &&\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <!-- <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\n [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div> -->\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\">\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.ACTIVE_USERS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.TOP_PERFORMERS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Top performers</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch top performers\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError &&\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents\"\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.TOP_PERFORMERS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.COMMON_GOALS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Shares same goal</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS]\">\n <h3\n *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS].hasError\"\n class=\"mat-error text-center\"\n i18n\n >\n Failed to fetch users with same goals\n </h3>\n <h3\n *ngIf=\"\n !cohortResults[cohortTypesEnum.COMMON_GOALS].hasError &&\n !cohortResults[cohortTypesEnum.COMMON_GOALS].contents.length\n \"\n class=\"text-center\"\n i18n\n >\n None\n </h3>\n <div\n *ngFor=\"let cohort of cohortResults[cohortTypesEnum.COMMON_GOALS].contents\"\n [ngTemplateOutlet]=\"unitCohort\"\n [ngTemplateOutletContext]=\"{ user: cohort }\"\n ></div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.COMMON_GOALS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel> -->\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.AUTHORS)\">\n <mat-expansion-panel-header>\n <mat-panel-title >Curators</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch curators\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.AUTHORS].hasError &&\n !cohortResults[cohortTypesEnum.AUTHORS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.AUTHORS].contents\"\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\n </div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.AUTHORS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel>\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.EDUCATORS)\">\n <mat-expansion-panel-header>\n <mat-panel-title>Educators</mat-panel-title>\n </mat-expansion-panel-header>\n <ng-template matExpansionPanelContent>\n <div *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS]\">\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS].hasError\" class=\"mat-error text-center\" >\n Failed to fetch educators\n </h3>\n <h3 *ngIf=\"\n !cohortResults[cohortTypesEnum.EDUCATORS].hasError &&\n !cohortResults[cohortTypesEnum.EDUCATORS].contents.length\n \" class=\"text-center\" >\n None\n </h3>\n <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.EDUCATORS].contents\" [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div>\n </div>\n <div *ngIf=\"!cohortResults[cohortTypesEnum.EDUCATORS]\" class=\"text-center\">\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\n </div>\n </ng-template>\n </mat-expansion-panel> -->\n </mat-accordion>\n\n <ng-template #unitCohort let-user=\"user\">\n <div class=\"unit-cohort\">\n <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image>\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\n class=\"width-expand padding-left-xs\">\n <div class=\"mat-body-strong cohorts-name\">\n {{\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\n | pipeNameTransform\n }}\n </div>\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\n </div>\n <div class=\"width-auto\">\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email] }\"></ws-widget-btn-mail-user>\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\n userName:\n {\n firstName: user.first_name,\n lastName: user.last_name,\n email: user.email\n } | pipeNameTransform,\n userPhone: user.phone_No\n }\"></ws-widget-btn-call>\n </div>\n </div>\n </ng-template>\n\n <ng-template #unitCohortNew let-user=\"user\">\n <div class=\"unit-cohort sm:pr-8 md:pr-10\">\n <!-- <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image> -->\n\n <ws-widget-user-image class=\"user-image\" [imageType]=\"'user-photo'\" [userName]=\"getUserFullName(user)\"\n [imageSize]=\"'small'\" [email]=\"user.email\" [imageUrl]=\"user.photo || ''\"></ws-widget-user-image>\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\n class=\"width-expand padding-left-xs\">\n <div class=\"mat-body-strong cohorts-name\">\n {{\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\n | pipeNameTransform\n }}\n </div>\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\n </div>\n <div class=\"width-auto user-action-container\">\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email], user: user }\">\n </ws-widget-btn-mail-user>\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\n userName:\n {\n firstName: user.first_name,\n lastName: user.last_name,\n email: user.email\n } | pipeNameTransform,\n userPhone: user.phone_No\n }\"></ws-widget-btn-call>\n </div>\n </div>\n <!-- </div> -->\n\n </ng-template>\n</section>\n", styles: [".cohorts-head{padding:8px 24px;margin:0;background:#fff!important;border-radius:8px 8px 0 0;color:#222!important}.unit-cohort{display:inline-flex;margin-bottom:24px}.unit-cohort .cohort-image{width:32px;height:32px;font-size:32px}.cohorts-name{letter-spacing:0px;color:#5f5f5f;font-size:.9rem;font-weight:400}.cohortSection{margin:50px auto;width:70%}.flex{display:flex}.chorotsBlock{background:#fff}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.user-action-container{color:#adadae}\n"] }]
|
|
75
|
-
}], ctorParameters: function () { return [{ type: i1.AppTocService }, { type: i2.ConfigurationsService }, { type: i3.Router }]; }, propDecorators: { content: [{
|
|
76
|
-
type: Input
|
|
77
|
-
}], forPreview: [{
|
|
78
|
-
type: Input
|
|
79
|
-
}] } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1jb2hvcnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9jb21wb25lbnRzL2FwcC10b2MtY29ob3J0cy9hcHAtdG9jLWNvaG9ydHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jb2hvcnRzL2FwcC10b2MtY29ob3J0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUl4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7Ozs7Ozs7OztBQVN0RCxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQ1UsTUFBcUIsRUFDckIsU0FBZ0MsRUFDaEMsTUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVR4QixrQkFBYSxHQUVULEVBQUUsQ0FBQTtRQUNOLG9CQUFlLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQTtRQUMvQixlQUFVLEdBQUcsS0FBSyxDQUFBO0lBTXZCLENBQUM7SUFFTCxRQUFRLEtBQUssQ0FBQztJQUVkLElBQVcsYUFBYTtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQ3pEO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtTQUM5RDtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFzQztRQUNwRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ3ZELDBGQUEwRjtTQUMzRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFBO1NBQzVEO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQWtDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDNUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDL0IsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNwQixRQUFRLEVBQUUsS0FBSztpQkFDaEIsQ0FBQTtZQUNILENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDL0IsUUFBUSxFQUFFLEVBQUU7b0JBQ1osUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQTtZQUNILENBQUMsQ0FDRixDQUFBO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdELE9BQU07U0FDUDthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRztnQkFDL0IsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQTtTQUNGO0lBQ0gsQ0FBQzsrR0FwRVUsc0JBQXNCO21HQUF0QixzQkFBc0Isb0hDYm5DLDJuVEF5TUE7OzRGRDVMYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9COzZKQUtyQixPQUFPO3NCQUFmLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXG5pbXBvcnQgeyBOc0F1dG9Db21wbGV0ZSB9IGZyb20gJy4uLy4uL19jb2xsZWN0aW9uL19jb21tb24vdXNlci1hdXRvY29tcGxldGUvdXNlci1hdXRvY29tcGxldGUubW9kZWwnXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcbmltcG9ydCB7IE5zQ29ob3J0cyB9IGZyb20gJy4uLy4uL21vZGVscy9hcHAtdG9jLm1vZGVsJ1xuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLXRvYy1jb2hvcnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC10b2MtY29ob3J0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC10b2MtY29ob3J0cy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBUb2NDb2hvcnRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29udGVudCE6IE5zQ29udGVudC5JQ29udGVudFxuICBjb2hvcnRSZXN1bHRzOiB7XG4gICAgW2tleTogc3RyaW5nXTogeyBoYXNFcnJvcjogYm9vbGVhbjsgY29udGVudHM6IE5zQ29ob3J0cy5JQ29ob3J0c0NvbnRlbnRbXSB9XG4gIH0gPSB7fVxuICBjb2hvcnRUeXBlc0VudW0gPSBOc0NvaG9ydHMuRUNvaG9ydFR5cGVzXG4gIEBJbnB1dCgpIGZvclByZXZpZXcgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHsgfVxuXG4gIHB1YmxpYyBnZXQgZW5hYmxlRmVhdHVyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzKSB7XG4gICAgICByZXR1cm4gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoJ2NvaG9ydHMnKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW5hYmxlUGVvcGxlU2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMpIHtcbiAgICAgIHJldHVybiAhdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygncGVvcGxlU2VhcmNoJylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnb1RvVXNlclByb2ZpbGUodXNlcjogTnNBdXRvQ29tcGxldGUuSVVzZXJBdXRvQ29tcGxldGUpIHtcbiAgICBpZiAodGhpcy5lbmFibGVQZW9wbGVTZWFyY2gpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcC9wZXJzb24tcHJvZmlsZScsIHVzZXIud2lkXSlcbiAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcC9wZXJzb24tcHJvZmlsZSddLCB7IHF1ZXJ5UGFyYW1zOiB7IGVtYWlsSWQ6IHVzZXIuZW1haWwgfSB9KVxuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJGdWxsTmFtZSh1c2VyOiBhbnkpIHtcbiAgICBpZiAodXNlciAmJiB1c2VyLmZpcnN0X25hbWUgJiYgdXNlci5sYXN0X25hbWUpIHtcbiAgICAgIHJldHVybiBgJHt1c2VyLmZpcnN0X25hbWUudHJpbSgpfSAke3VzZXIubGFzdF9uYW1lLnRyaW0oKX1gXG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgZmV0Y2hDb2hvcnRzKGNvaG9ydFR5cGU6IE5zQ29ob3J0cy5FQ29ob3J0VHlwZXMpIHtcbiAgICBpZiAoIXRoaXMuY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlXSAmJiAhdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICB0aGlzLnRvY1N2Yy5mZXRjaENvbnRlbnRDb2hvcnRzKGNvaG9ydFR5cGUsIHRoaXMuY29udGVudC5pZGVudGlmaWVyKS5zdWJzY3JpYmUoXG4gICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgIHRoaXMuY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlXSA9IHtcbiAgICAgICAgICAgIGNvbnRlbnRzOiBkYXRhIHx8IFtdLFxuICAgICAgICAgICAgaGFzRXJyb3I6IGZhbHNlLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlXSA9IHtcbiAgICAgICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgICAgIGhhc0Vycm9yOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlXSAmJiAhdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICByZXR1cm5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVdID0ge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIGhhc0Vycm9yOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxzZWN0aW9uICpuZ0lmPVwiZW5hYmxlRmVhdHVyZVwiPlxuICA8aDIgY2xhc3M9XCJtYXQtdG9vbGJhciBjb2hvcnRzLWhlYWQgc2hhZG93XCI+Q29ob3J0czwvaDI+XG4gIDxtYXQtYWNjb3JkaW9uIFttdWx0aV09XCJmYWxzZVwiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16XCIgKG9wZW5lZCk9XCJmZXRjaENvaG9ydHMoY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSUylcIj5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZSA+TGVhcm5lcjwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdXCI+XG4gICAgICAgICAgPGgzICpuZ0lmPVwiY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQUNUSVZFX1VTRVJTXS5oYXNFcnJvclwiIGNsYXNzPVwibWF0LWVycm9yIHRleHQtY2VudGVyXCIgPlxuICAgICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSB1c2Vyc1xuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPGgzICpuZ0lmPVwiXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdLmhhc0Vycm9yICYmXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdLmNvbnRlbnRzLmxlbmd0aFxuICAgICAgICAgICAgXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiID5cbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgY29ob3J0IG9mIGNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSU10uY29udGVudHNcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVzZXI6IGNvaG9ydCB9XCI+PC9kaXY+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGNvbC1nYXAtNFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29ob3J0IG9mIGNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSU10uY29udGVudHNcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ1bml0Q29ob3J0TmV3XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdXNlcjogY29ob3J0IH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbc3Ryb2tlV2lkdGhdPVwiM1wiIFtkaWFtZXRlcl09XCI0MFwiIGNsYXNzPVwiZGlzcGxheS1pbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16XCIgKG9wZW5lZCk9XCJmZXRjaENvaG9ydHMoY29ob3J0VHlwZXNFbnVtLlRPUF9QRVJGT1JNRVJTKVwiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlID5Ub3AgcGVyZm9ybWVyczwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5UT1BfUEVSRk9STUVSU11cIj5cbiAgICAgICAgICA8aDMgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5UT1BfUEVSRk9STUVSU10uaGFzRXJyb3JcIiBjbGFzcz1cIm1hdC1lcnJvciB0ZXh0LWNlbnRlclwiID5cbiAgICAgICAgICAgIEZhaWxlZCB0byBmZXRjaCB0b3AgcGVyZm9ybWVyc1xuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPGgzICpuZ0lmPVwiXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5UT1BfUEVSRk9STUVSU10uaGFzRXJyb3IgJiZcbiAgICAgICAgICAgICAgIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLlRPUF9QRVJGT1JNRVJTXS5jb250ZW50cy5sZW5ndGhcbiAgICAgICAgICAgIFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIiA+XG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBtZDpncmlkLWNvbHMtMyBjb2wtZ2FwLTRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvaG9ydCBvZiBjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5UT1BfUEVSRk9STUVSU10uY29udGVudHNcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ1bml0Q29ob3J0TmV3XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdXNlcjogY29ob3J0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uVE9QX1BFUkZPUk1FUlNdXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbc3Ryb2tlV2lkdGhdPVwiM1wiIFtkaWFtZXRlcl09XCI0MFwiIGNsYXNzPVwiZGlzcGxheS1pbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgIDwhLS0gPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXpcIiAob3BlbmVkKT1cImZldGNoQ29ob3J0cyhjb2hvcnRUeXBlc0VudW0uQ09NTU9OX0dPQUxTKVwiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlID5TaGFyZXMgc2FtZSBnb2FsPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdEV4cGFuc2lvblBhbmVsQ29udGVudD5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkNPTU1PTl9HT0FMU11cIj5cbiAgICAgICAgICA8aDNcbiAgICAgICAgICAgICpuZ0lmPVwiY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQ09NTU9OX0dPQUxTXS5oYXNFcnJvclwiXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvciB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICBpMThuXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRmFpbGVkIHRvIGZldGNoIHVzZXJzIHdpdGggc2FtZSBnb2Fsc1xuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPGgzXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQ09NTU9OX0dPQUxTXS5oYXNFcnJvciAmJlxuICAgICAgICAgICAgICAhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQ09NTU9OX0dPQUxTXS5jb250ZW50cy5sZW5ndGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICA+XG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgPC9oMz5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29ob3J0IG9mIGNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkNPTU1PTl9HT0FMU10uY29udGVudHNcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB1c2VyOiBjb2hvcnQgfVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5DT01NT05fR09BTFNdXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbc3Ryb2tlV2lkdGhdPVwiM1wiIFtkaWFtZXRlcl09XCI0MFwiIGNsYXNzPVwiZGlzcGxheS1pbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPiAtLT5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz1cIm1hdC1lbGV2YXRpb24telwiIChvcGVuZWQpPVwiZmV0Y2hDb2hvcnRzKGNvaG9ydFR5cGVzRW51bS5BVVRIT1JTKVwiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlID5DdXJhdG9yczwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BVVRIT1JTXVwiPlxuICAgICAgICAgIDxoMyAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFVVEhPUlNdLmhhc0Vycm9yXCIgY2xhc3M9XCJtYXQtZXJyb3IgdGV4dC1jZW50ZXJcIiA+XG4gICAgICAgICAgICBGYWlsZWQgdG8gZmV0Y2ggY3VyYXRvcnNcbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDxoMyAqbmdJZj1cIlxuICAgICAgICAgICAgICAhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQVVUSE9SU10uaGFzRXJyb3IgJiZcbiAgICAgICAgICAgICAgIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFVVEhPUlNdLmNvbnRlbnRzLmxlbmd0aFxuICAgICAgICAgICAgXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiID5cbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGNvbC1nYXAtNFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29ob3J0IG9mIGNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFVVEhPUlNdLmNvbnRlbnRzXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydE5ld1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVzZXI6IGNvaG9ydCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFVVEhPUlNdXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbc3Ryb2tlV2lkdGhdPVwiM1wiIFtkaWFtZXRlcl09XCI0MFwiIGNsYXNzPVwiZGlzcGxheS1pbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgIDwhLS0gPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXpcIiAob3BlbmVkKT1cImZldGNoQ29ob3J0cyhjb2hvcnRUeXBlc0VudW0uRURVQ0FUT1JTKVwiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPkVkdWNhdG9yczwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5FRFVDQVRPUlNdXCI+XG4gICAgICAgICAgPGgzICpuZ0lmPVwiY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uRURVQ0FUT1JTXS5oYXNFcnJvclwiIGNsYXNzPVwibWF0LWVycm9yIHRleHQtY2VudGVyXCIgPlxuICAgICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGVkdWNhdG9yc1xuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPGgzICpuZ0lmPVwiXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5FRFVDQVRPUlNdLmhhc0Vycm9yICYmXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5FRFVDQVRPUlNdLmNvbnRlbnRzLmxlbmd0aFxuICAgICAgICAgICAgXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiID5cbiAgICAgICAgICAgIE5vbmVcbiAgICAgICAgICA8L2gzPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvaG9ydCBvZiBjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5FRFVDQVRPUlNdLmNvbnRlbnRzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVzZXI6IGNvaG9ydCB9XCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkVEVUNBVE9SU11cIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPG1hdC1zcGlubmVyIFtzdHJva2VXaWR0aF09XCIzXCIgW2RpYW1ldGVyXT1cIjQwXCIgY2xhc3M9XCJkaXNwbGF5LWlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+IC0tPlxuICA8L21hdC1hY2NvcmRpb24+XG5cbiAgPG5nLXRlbXBsYXRlICN1bml0Q29ob3J0IGxldC11c2VyPVwidXNlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1bml0LWNvaG9ydFwiPlxuICAgICAgPHdzLXdpZGdldC11c2VyLWltYWdlIGNsYXNzPVwiY29ob3J0LWltYWdlXCIgW2VtYWlsXT1cInVzZXIuZW1haWxcIj48L3dzLXdpZGdldC11c2VyLWltYWdlPlxuICAgICAgPGRpdiAoY2xpY2spPVwiZ29Ub1VzZXJQcm9maWxlKHVzZXIpXCIgW25nQ2xhc3NdPVwieydjdXJzb3ItcG9pbnRlcic6IGVuYWJsZVBlb3BsZVNlYXJjaH1cIlxuICAgICAgICBjbGFzcz1cIndpZHRoLWV4cGFuZCBwYWRkaW5nLWxlZnQteHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1ib2R5LXN0cm9uZyBjb2hvcnRzLW5hbWVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgeyBmaXJzdE5hbWU6IHVzZXIuZmlyc3RfbmFtZSwgbGFzdE5hbWU6IHVzZXIubGFzdF9uYW1lLCBlbWFpbDogdXNlci5lbWFpbCB9XG4gICAgICAgICAgICAgIHwgcGlwZU5hbWVUcmFuc2Zvcm1cbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1jYXB0aW9uIGNvaG9ydHMtZGVzY1wiPnt7IHVzZXIuZGVzYyB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwid2lkdGgtYXV0b1wiPlxuICAgICAgICA8d3Mtd2lkZ2V0LWJ0bi1tYWlsLXVzZXIgW3dpZGdldERhdGFdPVwieyBjb250ZW50OiBjb250ZW50LCBlbWFpbHM6IFt1c2VyLmVtYWlsXSB9XCI+PC93cy13aWRnZXQtYnRuLW1haWwtdXNlcj5cbiAgICAgICAgPHdzLXdpZGdldC1idG4tY2FsbCAqbmdJZj1cInVzZXIucGhvbmVfTm8gIT09ICcwJ1wiIFt3aWRnZXREYXRhXT1cIntcbiAgICAgICAgICAgIHVzZXJOYW1lOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB1c2VyLmZpcnN0X25hbWUsXG4gICAgICAgICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdF9uYW1lLFxuICAgICAgICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsXG4gICAgICAgICAgICAgIH0gfCBwaXBlTmFtZVRyYW5zZm9ybSxcbiAgICAgICAgICAgIHVzZXJQaG9uZTogdXNlci5waG9uZV9Ob1xuICAgICAgICAgIH1cIj48L3dzLXdpZGdldC1idG4tY2FsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjdW5pdENvaG9ydE5ldyBsZXQtdXNlcj1cInVzZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwidW5pdC1jb2hvcnQgc206cHItOCBtZDpwci0xMFwiPlxuICAgICAgPCEtLSA8d3Mtd2lkZ2V0LXVzZXItaW1hZ2UgY2xhc3M9XCJjb2hvcnQtaW1hZ2VcIiBbZW1haWxdPVwidXNlci5lbWFpbFwiPjwvd3Mtd2lkZ2V0LXVzZXItaW1hZ2U+IC0tPlxuXG4gICAgICA8d3Mtd2lkZ2V0LXVzZXItaW1hZ2UgY2xhc3M9XCJ1c2VyLWltYWdlXCIgW2ltYWdlVHlwZV09XCIndXNlci1waG90bydcIiBbdXNlck5hbWVdPVwiZ2V0VXNlckZ1bGxOYW1lKHVzZXIpXCJcbiAgICAgICAgW2ltYWdlU2l6ZV09XCInc21hbGwnXCIgW2VtYWlsXT1cInVzZXIuZW1haWxcIiBbaW1hZ2VVcmxdPVwidXNlci5waG90byB8fCAnJ1wiPjwvd3Mtd2lkZ2V0LXVzZXItaW1hZ2U+XG4gICAgICA8ZGl2IChjbGljayk9XCJnb1RvVXNlclByb2ZpbGUodXNlcilcIiBbbmdDbGFzc109XCJ7J2N1cnNvci1wb2ludGVyJzogZW5hYmxlUGVvcGxlU2VhcmNofVwiXG4gICAgICAgIGNsYXNzPVwid2lkdGgtZXhwYW5kIHBhZGRpbmctbGVmdC14c1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHktc3Ryb25nIGNvaG9ydHMtbmFtZVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHsgZmlyc3ROYW1lOiB1c2VyLmZpcnN0X25hbWUsIGxhc3ROYW1lOiB1c2VyLmxhc3RfbmFtZSwgZW1haWw6IHVzZXIuZW1haWwgfVxuICAgICAgICAgICAgICAgIHwgcGlwZU5hbWVUcmFuc2Zvcm1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWNhcHRpb24gY29ob3J0cy1kZXNjXCI+e3sgdXNlci5kZXNjIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3aWR0aC1hdXRvIHVzZXItYWN0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICA8d3Mtd2lkZ2V0LWJ0bi1tYWlsLXVzZXIgW3dpZGdldERhdGFdPVwieyBjb250ZW50OiBjb250ZW50LCBlbWFpbHM6IFt1c2VyLmVtYWlsXSwgdXNlcjogdXNlciB9XCI+XG4gICAgICAgIDwvd3Mtd2lkZ2V0LWJ0bi1tYWlsLXVzZXI+XG4gICAgICAgIDx3cy13aWRnZXQtYnRuLWNhbGwgKm5nSWY9XCJ1c2VyLnBob25lX05vICE9PSAnMCdcIiBbd2lkZ2V0RGF0YV09XCJ7XG4gICAgICAgICAgICAgIHVzZXJOYW1lOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogdXNlci5maXJzdF9uYW1lLFxuICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdF9uYW1lLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHVzZXIuZW1haWxcbiAgICAgICAgICAgICAgICB9IHwgcGlwZU5hbWVUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgIHVzZXJQaG9uZTogdXNlci5waG9uZV9Ob1xuICAgICAgICAgICAgfVwiPjwvd3Mtd2lkZ2V0LWJ0bi1jYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8L2Rpdj4gLS0+XG5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvc2VjdGlvbj5cbiJdfQ==
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { NsCohorts } from '../../models/app-toc.model';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/app-toc.service";
|
|
5
|
+
import * as i2 from "@sunbird-cb/utils-v2";
|
|
6
|
+
import * as i3 from "@angular/router";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "@angular/material/legacy-progress-spinner";
|
|
9
|
+
import * as i6 from "@angular/material/expansion";
|
|
10
|
+
import * as i7 from "../../_collection/_common/user-image/user-image.component";
|
|
11
|
+
export class AppTocCohortsComponent {
|
|
12
|
+
constructor(tocSvc, configSvc, router) {
|
|
13
|
+
this.tocSvc = tocSvc;
|
|
14
|
+
this.configSvc = configSvc;
|
|
15
|
+
this.router = router;
|
|
16
|
+
this.cohortResults = {};
|
|
17
|
+
this.cohortTypesEnum = NsCohorts.ECohortTypes;
|
|
18
|
+
this.forPreview = false;
|
|
19
|
+
}
|
|
20
|
+
ngOnInit() { }
|
|
21
|
+
get enableFeature() {
|
|
22
|
+
if (this.configSvc.restrictedFeatures) {
|
|
23
|
+
return !this.configSvc.restrictedFeatures.has('cohorts');
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
get enablePeopleSearch() {
|
|
28
|
+
if (this.configSvc.restrictedFeatures) {
|
|
29
|
+
return !this.configSvc.restrictedFeatures.has('peopleSearch');
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
goToUserProfile(user) {
|
|
34
|
+
if (this.enablePeopleSearch) {
|
|
35
|
+
this.router.navigate(['/app/person-profile', user.wid]);
|
|
36
|
+
// this.router.navigate(['/app/person-profile'], { queryParams: { emailId: user.email } })
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
getUserFullName(user) {
|
|
40
|
+
if (user && user.first_name && user.last_name) {
|
|
41
|
+
return `${user.first_name.trim()} ${user.last_name.trim()}`;
|
|
42
|
+
}
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
fetchCohorts(cohortType) {
|
|
46
|
+
if (!this.cohortResults[cohortType] && !this.forPreview) {
|
|
47
|
+
this.tocSvc.fetchContentCohorts(cohortType, this.content.identifier).subscribe(data => {
|
|
48
|
+
this.cohortResults[cohortType] = {
|
|
49
|
+
contents: data || [],
|
|
50
|
+
hasError: false,
|
|
51
|
+
};
|
|
52
|
+
}, () => {
|
|
53
|
+
this.cohortResults[cohortType] = {
|
|
54
|
+
contents: [],
|
|
55
|
+
hasError: true,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else if (this.cohortResults[cohortType] && !this.forPreview) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.cohortResults[cohortType] = {
|
|
64
|
+
contents: [],
|
|
65
|
+
hasError: false,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCohortsComponent, deps: [{ token: i1.AppTocService }, { token: i2.ConfigurationsService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCohortsComponent, selector: "ws-app-toc-cohorts", inputs: { content: "content", forPreview: "forPreview" }, ngImport: i0, template: "<section *ngIf=\"enableFeature\">\r\n <h2 class=\"mat-toolbar cohorts-head shadow\">Cohorts</h2>\r\n <mat-accordion [multi]=\"false\">\r\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.ACTIVE_USERS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Learner</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch active users\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError &&\r\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <!-- <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\r\n [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div> -->\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\r\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\r\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.ACTIVE_USERS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.TOP_PERFORMERS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Top performers</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch top performers\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError &&\r\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\r\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents\"\r\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.TOP_PERFORMERS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.COMMON_GOALS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Shares same goal</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS]\">\r\n <h3\r\n *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS].hasError\"\r\n class=\"mat-error text-center\"\r\n i18n\r\n >\r\n Failed to fetch users with same goals\r\n </h3>\r\n <h3\r\n *ngIf=\"\r\n !cohortResults[cohortTypesEnum.COMMON_GOALS].hasError &&\r\n !cohortResults[cohortTypesEnum.COMMON_GOALS].contents.length\r\n \"\r\n class=\"text-center\"\r\n i18n\r\n >\r\n None\r\n </h3>\r\n <div\r\n *ngFor=\"let cohort of cohortResults[cohortTypesEnum.COMMON_GOALS].contents\"\r\n [ngTemplateOutlet]=\"unitCohort\"\r\n [ngTemplateOutletContext]=\"{ user: cohort }\"\r\n ></div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.COMMON_GOALS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel> -->\r\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.AUTHORS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Curators</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch curators\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.AUTHORS].hasError &&\r\n !cohortResults[cohortTypesEnum.AUTHORS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\r\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.AUTHORS].contents\"\r\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.AUTHORS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.EDUCATORS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Educators</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch educators\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.EDUCATORS].hasError &&\r\n !cohortResults[cohortTypesEnum.EDUCATORS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.EDUCATORS].contents\" [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.EDUCATORS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel> -->\r\n </mat-accordion>\r\n\r\n <ng-template #unitCohort let-user=\"user\">\r\n <div class=\"unit-cohort\">\r\n <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image>\r\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\r\n class=\"width-expand padding-left-xs\">\r\n <div class=\"mat-body-strong cohorts-name\">\r\n {{\r\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\r\n | pipeNameTransform\r\n }}\r\n </div>\r\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\r\n </div>\r\n <div class=\"width-auto\">\r\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email] }\"></ws-widget-btn-mail-user>\r\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\r\n userName:\r\n {\r\n firstName: user.first_name,\r\n lastName: user.last_name,\r\n email: user.email\r\n } | pipeNameTransform,\r\n userPhone: user.phone_No\r\n }\"></ws-widget-btn-call>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #unitCohortNew let-user=\"user\">\r\n <div class=\"unit-cohort sm:pr-8 md:pr-10\">\r\n <!-- <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image> -->\r\n\r\n <ws-widget-user-image class=\"user-image\" [imageType]=\"'user-photo'\" [userName]=\"getUserFullName(user)\"\r\n [imageSize]=\"'small'\" [email]=\"user.email\" [imageUrl]=\"user.photo || ''\"></ws-widget-user-image>\r\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\r\n class=\"width-expand padding-left-xs\">\r\n <div class=\"mat-body-strong cohorts-name\">\r\n {{\r\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\r\n | pipeNameTransform\r\n }}\r\n </div>\r\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\r\n </div>\r\n <div class=\"width-auto user-action-container\">\r\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email], user: user }\">\r\n </ws-widget-btn-mail-user>\r\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\r\n userName:\r\n {\r\n firstName: user.first_name,\r\n lastName: user.last_name,\r\n email: user.email\r\n } | pipeNameTransform,\r\n userPhone: user.phone_No\r\n }\"></ws-widget-btn-call>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n\r\n </ng-template>\r\n</section>\r\n", styles: [".cohorts-head{padding:8px 24px;margin:0;background:#fff!important;border-radius:8px 8px 0 0;color:#222!important}.unit-cohort{display:inline-flex;margin-bottom:24px}.unit-cohort .cohort-image{width:32px;height:32px;font-size:32px}.cohorts-name{letter-spacing:0px;color:#5f5f5f;font-size:.9rem;font-weight:400}.cohortSection{margin:50px auto;width:70%}.flex{display:flex}.chorotsBlock{background:#fff}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.user-action-container{color:#adadae}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatLegacyProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i6.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i6.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i6.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { kind: "component", type: i7.UserImageComponent, selector: "ws-widget-user-image", inputs: ["email", "userId", "userName", "imageType", "imageUrl", "imageSize"] }, { kind: "pipe", type: i2.PipeNameTransformPipe, name: "pipeNameTransform" }] }); }
|
|
71
|
+
}
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCohortsComponent, decorators: [{
|
|
73
|
+
type: Component,
|
|
74
|
+
args: [{ selector: 'ws-app-toc-cohorts', template: "<section *ngIf=\"enableFeature\">\r\n <h2 class=\"mat-toolbar cohorts-head shadow\">Cohorts</h2>\r\n <mat-accordion [multi]=\"false\">\r\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.ACTIVE_USERS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Learner</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch active users\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].hasError &&\r\n !cohortResults[cohortTypesEnum.ACTIVE_USERS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <!-- <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\r\n [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div> -->\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\r\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.ACTIVE_USERS].contents\"\r\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.ACTIVE_USERS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.TOP_PERFORMERS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Top performers</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch top performers\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].hasError &&\r\n !cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\r\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.TOP_PERFORMERS].contents\"\r\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.TOP_PERFORMERS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.COMMON_GOALS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Shares same goal</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS]\">\r\n <h3\r\n *ngIf=\"cohortResults[cohortTypesEnum.COMMON_GOALS].hasError\"\r\n class=\"mat-error text-center\"\r\n i18n\r\n >\r\n Failed to fetch users with same goals\r\n </h3>\r\n <h3\r\n *ngIf=\"\r\n !cohortResults[cohortTypesEnum.COMMON_GOALS].hasError &&\r\n !cohortResults[cohortTypesEnum.COMMON_GOALS].contents.length\r\n \"\r\n class=\"text-center\"\r\n i18n\r\n >\r\n None\r\n </h3>\r\n <div\r\n *ngFor=\"let cohort of cohortResults[cohortTypesEnum.COMMON_GOALS].contents\"\r\n [ngTemplateOutlet]=\"unitCohort\"\r\n [ngTemplateOutletContext]=\"{ user: cohort }\"\r\n ></div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.COMMON_GOALS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel> -->\r\n <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.AUTHORS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title >Curators</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.AUTHORS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch curators\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.AUTHORS].hasError &&\r\n !cohortResults[cohortTypesEnum.AUTHORS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <div class=\"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 col-gap-4\">\r\n <ng-container *ngFor=\"let cohort of cohortResults[cohortTypesEnum.AUTHORS].contents\"\r\n [ngTemplateOutlet]=\"unitCohortNew\" [ngTemplateOutletContext]=\"{ user: cohort }\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.AUTHORS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n <!-- <mat-expansion-panel class=\"mat-elevation-z\" (opened)=\"fetchCohorts(cohortTypesEnum.EDUCATORS)\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Educators</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-template matExpansionPanelContent>\r\n <div *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS]\">\r\n <h3 *ngIf=\"cohortResults[cohortTypesEnum.EDUCATORS].hasError\" class=\"mat-error text-center\" >\r\n Failed to fetch educators\r\n </h3>\r\n <h3 *ngIf=\"\r\n !cohortResults[cohortTypesEnum.EDUCATORS].hasError &&\r\n !cohortResults[cohortTypesEnum.EDUCATORS].contents.length\r\n \" class=\"text-center\" >\r\n None\r\n </h3>\r\n <div *ngFor=\"let cohort of cohortResults[cohortTypesEnum.EDUCATORS].contents\" [ngTemplateOutlet]=\"unitCohort\" [ngTemplateOutletContext]=\"{ user: cohort }\"></div>\r\n </div>\r\n <div *ngIf=\"!cohortResults[cohortTypesEnum.EDUCATORS]\" class=\"text-center\">\r\n <mat-spinner [strokeWidth]=\"3\" [diameter]=\"40\" class=\"display-inline-block\"></mat-spinner>\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel> -->\r\n </mat-accordion>\r\n\r\n <ng-template #unitCohort let-user=\"user\">\r\n <div class=\"unit-cohort\">\r\n <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image>\r\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\r\n class=\"width-expand padding-left-xs\">\r\n <div class=\"mat-body-strong cohorts-name\">\r\n {{\r\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\r\n | pipeNameTransform\r\n }}\r\n </div>\r\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\r\n </div>\r\n <div class=\"width-auto\">\r\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email] }\"></ws-widget-btn-mail-user>\r\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\r\n userName:\r\n {\r\n firstName: user.first_name,\r\n lastName: user.last_name,\r\n email: user.email\r\n } | pipeNameTransform,\r\n userPhone: user.phone_No\r\n }\"></ws-widget-btn-call>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #unitCohortNew let-user=\"user\">\r\n <div class=\"unit-cohort sm:pr-8 md:pr-10\">\r\n <!-- <ws-widget-user-image class=\"cohort-image\" [email]=\"user.email\"></ws-widget-user-image> -->\r\n\r\n <ws-widget-user-image class=\"user-image\" [imageType]=\"'user-photo'\" [userName]=\"getUserFullName(user)\"\r\n [imageSize]=\"'small'\" [email]=\"user.email\" [imageUrl]=\"user.photo || ''\"></ws-widget-user-image>\r\n <div (click)=\"goToUserProfile(user)\" [ngClass]=\"{'cursor-pointer': enablePeopleSearch}\"\r\n class=\"width-expand padding-left-xs\">\r\n <div class=\"mat-body-strong cohorts-name\">\r\n {{\r\n { firstName: user.first_name, lastName: user.last_name, email: user.email }\r\n | pipeNameTransform\r\n }}\r\n </div>\r\n <div class=\"mat-caption cohorts-desc\">{{ user.desc }}</div>\r\n </div>\r\n <div class=\"width-auto user-action-container\">\r\n <ws-widget-btn-mail-user [widgetData]=\"{ content: content, emails: [user.email], user: user }\">\r\n </ws-widget-btn-mail-user>\r\n <ws-widget-btn-call *ngIf=\"user.phone_No !== '0'\" [widgetData]=\"{\r\n userName:\r\n {\r\n firstName: user.first_name,\r\n lastName: user.last_name,\r\n email: user.email\r\n } | pipeNameTransform,\r\n userPhone: user.phone_No\r\n }\"></ws-widget-btn-call>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n\r\n </ng-template>\r\n</section>\r\n", styles: [".cohorts-head{padding:8px 24px;margin:0;background:#fff!important;border-radius:8px 8px 0 0;color:#222!important}.unit-cohort{display:inline-flex;margin-bottom:24px}.unit-cohort .cohort-image{width:32px;height:32px;font-size:32px}.cohorts-name{letter-spacing:0px;color:#5f5f5f;font-size:.9rem;font-weight:400}.cohortSection{margin:50px auto;width:70%}.flex{display:flex}.chorotsBlock{background:#fff}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:8px;border-bottom-left-radius:8px}.user-action-container{color:#adadae}\n"] }]
|
|
75
|
+
}], ctorParameters: function () { return [{ type: i1.AppTocService }, { type: i2.ConfigurationsService }, { type: i3.Router }]; }, propDecorators: { content: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], forPreview: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}] } });
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1jb2hvcnRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9jb21wb25lbnRzL2FwcC10b2MtY29ob3J0cy9hcHAtdG9jLWNvaG9ydHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jb2hvcnRzL2FwcC10b2MtY29ob3J0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQTtBQUl4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7Ozs7Ozs7OztBQVN0RCxNQUFNLE9BQU8sc0JBQXNCO0lBUWpDLFlBQ1UsTUFBcUIsRUFDckIsU0FBZ0MsRUFDaEMsTUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVR4QixrQkFBYSxHQUVULEVBQUUsQ0FBQTtRQUNOLG9CQUFlLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQTtRQUMvQixlQUFVLEdBQUcsS0FBSyxDQUFBO0lBTXZCLENBQUM7SUFFTCxRQUFRLEtBQUssQ0FBQztJQUVkLElBQVcsYUFBYTtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQ3pEO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtTQUM5RDtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFzQztRQUNwRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ3ZELDBGQUEwRjtTQUMzRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFBO1NBQzVEO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQWtDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDNUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDL0IsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNwQixRQUFRLEVBQUUsS0FBSztpQkFDaEIsQ0FBQTtZQUNILENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDL0IsUUFBUSxFQUFFLEVBQUU7b0JBQ1osUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQTtZQUNILENBQUMsQ0FDRixDQUFBO1NBQ0Y7YUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdELE9BQU07U0FDUDthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRztnQkFDL0IsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQTtTQUNGO0lBQ0gsQ0FBQzsrR0FwRVUsc0JBQXNCO21HQUF0QixzQkFBc0Isb0hDYm5DLDZnVUF5TUE7OzRGRDVMYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usb0JBQW9COzZKQUtyQixPQUFPO3NCQUFmLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcclxuaW1wb3J0IHsgTnNBdXRvQ29tcGxldGUgfSBmcm9tICcuLi8uLi9fY29sbGVjdGlvbi9fY29tbW9uL3VzZXItYXV0b2NvbXBsZXRlL3VzZXItYXV0b2NvbXBsZXRlLm1vZGVsJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcclxuaW1wb3J0IHsgTnNDb2hvcnRzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcC10b2MubW9kZWwnXHJcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtdG9jLnNlcnZpY2UnXHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3MtYXBwLXRvYy1jb2hvcnRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1jb2hvcnRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hcHAtdG9jLWNvaG9ydHMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwcFRvY0NvaG9ydHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBOc0NvbnRlbnQuSUNvbnRlbnRcclxuICBjb2hvcnRSZXN1bHRzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7IGhhc0Vycm9yOiBib29sZWFuOyBjb250ZW50czogTnNDb2hvcnRzLklDb2hvcnRzQ29udGVudFtdIH1cclxuICB9ID0ge31cclxuICBjb2hvcnRUeXBlc0VudW0gPSBOc0NvaG9ydHMuRUNvaG9ydFR5cGVzXHJcbiAgQElucHV0KCkgZm9yUHJldmlldyA9IGZhbHNlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZUZlYXR1cmUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygnY29ob3J0cycpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZW5hYmxlUGVvcGxlU2VhcmNoKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcykge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoJ3Blb3BsZVNlYXJjaCcpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGdvVG9Vc2VyUHJvZmlsZSh1c2VyOiBOc0F1dG9Db21wbGV0ZS5JVXNlckF1dG9Db21wbGV0ZSkge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlUGVvcGxlU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcC9wZXJzb24tcHJvZmlsZScsIHVzZXIud2lkXSlcclxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXBwL3BlcnNvbi1wcm9maWxlJ10sIHsgcXVlcnlQYXJhbXM6IHsgZW1haWxJZDogdXNlci5lbWFpbCB9IH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRnVsbE5hbWUodXNlcjogYW55KSB7XHJcbiAgICBpZiAodXNlciAmJiB1c2VyLmZpcnN0X25hbWUgJiYgdXNlci5sYXN0X25hbWUpIHtcclxuICAgICAgcmV0dXJuIGAke3VzZXIuZmlyc3RfbmFtZS50cmltKCl9ICR7dXNlci5sYXN0X25hbWUudHJpbSgpfWBcclxuICAgIH1cclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hDb2hvcnRzKGNvaG9ydFR5cGU6IE5zQ29ob3J0cy5FQ29ob3J0VHlwZXMpIHtcclxuICAgIGlmICghdGhpcy5jb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVdICYmICF0aGlzLmZvclByZXZpZXcpIHtcclxuICAgICAgdGhpcy50b2NTdmMuZmV0Y2hDb250ZW50Q29ob3J0cyhjb2hvcnRUeXBlLCB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcikuc3Vic2NyaWJlKFxyXG4gICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVdID0ge1xyXG4gICAgICAgICAgICBjb250ZW50czogZGF0YSB8fCBbXSxcclxuICAgICAgICAgICAgaGFzRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVdID0ge1xyXG4gICAgICAgICAgICBjb250ZW50czogW10sXHJcbiAgICAgICAgICAgIGhhc0Vycm9yOiB0cnVlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVdICYmICF0aGlzLmZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZV0gPSB7XHJcbiAgICAgICAgY29udGVudHM6IFtdLFxyXG4gICAgICAgIGhhc0Vycm9yOiBmYWxzZSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiAqbmdJZj1cImVuYWJsZUZlYXR1cmVcIj5cclxuICA8aDIgY2xhc3M9XCJtYXQtdG9vbGJhciBjb2hvcnRzLWhlYWQgc2hhZG93XCI+Q29ob3J0czwvaDI+XHJcbiAgPG1hdC1hY2NvcmRpb24gW211bHRpXT1cImZhbHNlXCI+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz1cIm1hdC1lbGV2YXRpb24telwiIChvcGVuZWQpPVwiZmV0Y2hDb2hvcnRzKGNvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlMpXCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlID5MZWFybmVyPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSU11cIj5cclxuICAgICAgICAgIDxoMyAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSU10uaGFzRXJyb3JcIiBjbGFzcz1cIm1hdC1lcnJvciB0ZXh0LWNlbnRlclwiID5cclxuICAgICAgICAgICAgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSB1c2Vyc1xyXG4gICAgICAgICAgPC9oMz5cclxuICAgICAgICAgIDxoMyAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdLmhhc0Vycm9yICYmXHJcbiAgICAgICAgICAgICAgIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSU10uY29udGVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgIE5vbmVcclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8IS0tIDxkaXYgKm5nRm9yPVwibGV0IGNvaG9ydCBvZiBjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdLmNvbnRlbnRzXCJcclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVzZXI6IGNvaG9ydCB9XCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTMgY29sLWdhcC00XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvaG9ydCBvZiBjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BQ1RJVkVfVVNFUlNdLmNvbnRlbnRzXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ1bml0Q29ob3J0TmV3XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdXNlcjogY29ob3J0IH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFDVElWRV9VU0VSU11cIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXNwaW5uZXIgW3N0cm9rZVdpZHRoXT1cIjNcIiBbZGlhbWV0ZXJdPVwiNDBcIiBjbGFzcz1cImRpc3BsYXktaW5saW5lLWJsb2NrXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16XCIgKG9wZW5lZCk9XCJmZXRjaENvaG9ydHMoY29ob3J0VHlwZXNFbnVtLlRPUF9QRVJGT1JNRVJTKVwiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZSA+VG9wIHBlcmZvcm1lcnM8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdEV4cGFuc2lvblBhbmVsQ29udGVudD5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uVE9QX1BFUkZPUk1FUlNdXCI+XHJcbiAgICAgICAgICA8aDMgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5UT1BfUEVSRk9STUVSU10uaGFzRXJyb3JcIiBjbGFzcz1cIm1hdC1lcnJvciB0ZXh0LWNlbnRlclwiID5cclxuICAgICAgICAgICAgRmFpbGVkIHRvIGZldGNoIHRvcCBwZXJmb3JtZXJzXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPGgzICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLlRPUF9QRVJGT1JNRVJTXS5oYXNFcnJvciAmJlxyXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5UT1BfUEVSRk9STUVSU10uY29udGVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgIE5vbmVcclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBtZDpncmlkLWNvbHMtMyBjb2wtZ2FwLTRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29ob3J0IG9mIGNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLlRPUF9QRVJGT1JNRVJTXS5jb250ZW50c1wiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydE5ld1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVzZXI6IGNvaG9ydCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLlRPUF9QRVJGT1JNRVJTXVwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgIDxtYXQtc3Bpbm5lciBbc3Ryb2tlV2lkdGhdPVwiM1wiIFtkaWFtZXRlcl09XCI0MFwiIGNsYXNzPVwiZGlzcGxheS1pbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgPCEtLSA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz1cIm1hdC1lbGV2YXRpb24telwiIChvcGVuZWQpPVwiZmV0Y2hDb2hvcnRzKGNvaG9ydFR5cGVzRW51bS5DT01NT05fR09BTFMpXCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlID5TaGFyZXMgc2FtZSBnb2FsPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkNPTU1PTl9HT0FMU11cIj5cclxuICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkNPTU1PTl9HT0FMU10uaGFzRXJyb3JcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvciB0ZXh0LWNlbnRlclwiXHJcbiAgICAgICAgICAgIGkxOG5cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgRmFpbGVkIHRvIGZldGNoIHVzZXJzIHdpdGggc2FtZSBnb2Fsc1xyXG4gICAgICAgICAgPC9oMz5cclxuICAgICAgICAgIDxoM1xyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5DT01NT05fR09BTFNdLmhhc0Vycm9yICYmXHJcbiAgICAgICAgICAgICAgIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkNPTU1PTl9HT0FMU10uY29udGVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXJcIlxyXG4gICAgICAgICAgICBpMThuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIE5vbmVcclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2hvcnQgb2YgY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQ09NTU9OX0dPQUxTXS5jb250ZW50c1wiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVuaXRDb2hvcnRcIlxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB1c2VyOiBjb2hvcnQgfVwiXHJcbiAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5DT01NT05fR09BTFNdXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgPG1hdC1zcGlubmVyIFtzdHJva2VXaWR0aF09XCIzXCIgW2RpYW1ldGVyXT1cIjQwXCIgY2xhc3M9XCJkaXNwbGF5LWlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+IC0tPlxyXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXpcIiAob3BlbmVkKT1cImZldGNoQ29ob3J0cyhjb2hvcnRUeXBlc0VudW0uQVVUSE9SUylcIj5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgPkN1cmF0b3JzPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFVVEhPUlNdXCI+XHJcbiAgICAgICAgICA8aDMgKm5nSWY9XCJjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5BVVRIT1JTXS5oYXNFcnJvclwiIGNsYXNzPVwibWF0LWVycm9yIHRleHQtY2VudGVyXCIgPlxyXG4gICAgICAgICAgICBGYWlsZWQgdG8gZmV0Y2ggY3VyYXRvcnNcclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8aDMgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQVVUSE9SU10uaGFzRXJyb3IgJiZcclxuICAgICAgICAgICAgICAhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQVVUSE9SU10uY29udGVudHMubGVuZ3RoXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgIE5vbmVcclxuICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBtZDpncmlkLWNvbHMtMyBjb2wtZ2FwLTRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29ob3J0IG9mIGNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkFVVEhPUlNdLmNvbnRlbnRzXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ1bml0Q29ob3J0TmV3XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdXNlcjogY29ob3J0IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uQVVUSE9SU11cIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXNwaW5uZXIgW3N0cm9rZVdpZHRoXT1cIjNcIiBbZGlhbWV0ZXJdPVwiNDBcIiBjbGFzcz1cImRpc3BsYXktaW5saW5lLWJsb2NrXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgIDwhLS0gPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXpcIiAob3BlbmVkKT1cImZldGNoQ29ob3J0cyhjb2hvcnRUeXBlc0VudW0uRURVQ0FUT1JTKVwiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5FZHVjYXRvcnM8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPG5nLXRlbXBsYXRlIG1hdEV4cGFuc2lvblBhbmVsQ29udGVudD5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uRURVQ0FUT1JTXVwiPlxyXG4gICAgICAgICAgPGgzICpuZ0lmPVwiY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uRURVQ0FUT1JTXS5oYXNFcnJvclwiIGNsYXNzPVwibWF0LWVycm9yIHRleHQtY2VudGVyXCIgPlxyXG4gICAgICAgICAgICBGYWlsZWQgdG8gZmV0Y2ggZWR1Y2F0b3JzXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPGgzICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgIWNvaG9ydFJlc3VsdHNbY29ob3J0VHlwZXNFbnVtLkVEVUNBVE9SU10uaGFzRXJyb3IgJiZcclxuICAgICAgICAgICAgICAhY29ob3J0UmVzdWx0c1tjb2hvcnRUeXBlc0VudW0uRURVQ0FUT1JTXS5jb250ZW50cy5sZW5ndGhcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiID5cclxuICAgICAgICAgICAgTm9uZVxyXG4gICAgICAgICAgPC9oMz5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvaG9ydCBvZiBjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5FRFVDQVRPUlNdLmNvbnRlbnRzXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidW5pdENvaG9ydFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHVzZXI6IGNvaG9ydCB9XCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2hvcnRSZXN1bHRzW2NvaG9ydFR5cGVzRW51bS5FRFVDQVRPUlNdXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgPG1hdC1zcGlubmVyIFtzdHJva2VXaWR0aF09XCIzXCIgW2RpYW1ldGVyXT1cIjQwXCIgY2xhc3M9XCJkaXNwbGF5LWlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+IC0tPlxyXG4gIDwvbWF0LWFjY29yZGlvbj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICN1bml0Q29ob3J0IGxldC11c2VyPVwidXNlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVuaXQtY29ob3J0XCI+XHJcbiAgICAgIDx3cy13aWRnZXQtdXNlci1pbWFnZSBjbGFzcz1cImNvaG9ydC1pbWFnZVwiIFtlbWFpbF09XCJ1c2VyLmVtYWlsXCI+PC93cy13aWRnZXQtdXNlci1pbWFnZT5cclxuICAgICAgPGRpdiAoY2xpY2spPVwiZ29Ub1VzZXJQcm9maWxlKHVzZXIpXCIgW25nQ2xhc3NdPVwieydjdXJzb3ItcG9pbnRlcic6IGVuYWJsZVBlb3BsZVNlYXJjaH1cIlxyXG4gICAgICAgIGNsYXNzPVwid2lkdGgtZXhwYW5kIHBhZGRpbmctbGVmdC14c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keS1zdHJvbmcgY29ob3J0cy1uYW1lXCI+XHJcbiAgICAgICAgICB7e1xyXG4gICAgICAgICAgICB7IGZpcnN0TmFtZTogdXNlci5maXJzdF9uYW1lLCBsYXN0TmFtZTogdXNlci5sYXN0X25hbWUsIGVtYWlsOiB1c2VyLmVtYWlsIH1cclxuICAgICAgICAgICAgICB8IHBpcGVOYW1lVHJhbnNmb3JtXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtY2FwdGlvbiBjb2hvcnRzLWRlc2NcIj57eyB1c2VyLmRlc2MgfX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3aWR0aC1hdXRvXCI+XHJcbiAgICAgICAgPHdzLXdpZGdldC1idG4tbWFpbC11c2VyIFt3aWRnZXREYXRhXT1cInsgY29udGVudDogY29udGVudCwgZW1haWxzOiBbdXNlci5lbWFpbF0gfVwiPjwvd3Mtd2lkZ2V0LWJ0bi1tYWlsLXVzZXI+XHJcbiAgICAgICAgPHdzLXdpZGdldC1idG4tY2FsbCAqbmdJZj1cInVzZXIucGhvbmVfTm8gIT09ICcwJ1wiIFt3aWRnZXREYXRhXT1cIntcclxuICAgICAgICAgICAgdXNlck5hbWU6XHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB1c2VyLmZpcnN0X25hbWUsXHJcbiAgICAgICAgICAgICAgICBsYXN0TmFtZTogdXNlci5sYXN0X25hbWUsXHJcbiAgICAgICAgICAgICAgICBlbWFpbDogdXNlci5lbWFpbFxyXG4gICAgICAgICAgICAgIH0gfCBwaXBlTmFtZVRyYW5zZm9ybSxcclxuICAgICAgICAgICAgdXNlclBob25lOiB1c2VyLnBob25lX05vXHJcbiAgICAgICAgICB9XCI+PC93cy13aWRnZXQtYnRuLWNhbGw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICN1bml0Q29ob3J0TmV3IGxldC11c2VyPVwidXNlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVuaXQtY29ob3J0IHNtOnByLTggbWQ6cHItMTBcIj5cclxuICAgICAgPCEtLSA8d3Mtd2lkZ2V0LXVzZXItaW1hZ2UgY2xhc3M9XCJjb2hvcnQtaW1hZ2VcIiBbZW1haWxdPVwidXNlci5lbWFpbFwiPjwvd3Mtd2lkZ2V0LXVzZXItaW1hZ2U+IC0tPlxyXG5cclxuICAgICAgPHdzLXdpZGdldC11c2VyLWltYWdlIGNsYXNzPVwidXNlci1pbWFnZVwiIFtpbWFnZVR5cGVdPVwiJ3VzZXItcGhvdG8nXCIgW3VzZXJOYW1lXT1cImdldFVzZXJGdWxsTmFtZSh1c2VyKVwiXHJcbiAgICAgICAgW2ltYWdlU2l6ZV09XCInc21hbGwnXCIgW2VtYWlsXT1cInVzZXIuZW1haWxcIiBbaW1hZ2VVcmxdPVwidXNlci5waG90byB8fCAnJ1wiPjwvd3Mtd2lkZ2V0LXVzZXItaW1hZ2U+XHJcbiAgICAgIDxkaXYgKGNsaWNrKT1cImdvVG9Vc2VyUHJvZmlsZSh1c2VyKVwiIFtuZ0NsYXNzXT1cInsnY3Vyc29yLXBvaW50ZXInOiBlbmFibGVQZW9wbGVTZWFyY2h9XCJcclxuICAgICAgICBjbGFzcz1cIndpZHRoLWV4cGFuZCBwYWRkaW5nLWxlZnQteHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHktc3Ryb25nIGNvaG9ydHMtbmFtZVwiPlxyXG4gICAgICAgICAge3tcclxuICAgICAgICAgICAgICB7IGZpcnN0TmFtZTogdXNlci5maXJzdF9uYW1lLCBsYXN0TmFtZTogdXNlci5sYXN0X25hbWUsIGVtYWlsOiB1c2VyLmVtYWlsIH1cclxuICAgICAgICAgICAgICAgIHwgcGlwZU5hbWVUcmFuc2Zvcm1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWNhcHRpb24gY29ob3J0cy1kZXNjXCI+e3sgdXNlci5kZXNjIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2lkdGgtYXV0byB1c2VyLWFjdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgICA8d3Mtd2lkZ2V0LWJ0bi1tYWlsLXVzZXIgW3dpZGdldERhdGFdPVwieyBjb250ZW50OiBjb250ZW50LCBlbWFpbHM6IFt1c2VyLmVtYWlsXSwgdXNlcjogdXNlciB9XCI+XHJcbiAgICAgICAgPC93cy13aWRnZXQtYnRuLW1haWwtdXNlcj5cclxuICAgICAgICA8d3Mtd2lkZ2V0LWJ0bi1jYWxsICpuZ0lmPVwidXNlci5waG9uZV9ObyAhPT0gJzAnXCIgW3dpZGdldERhdGFdPVwie1xyXG4gICAgICAgICAgICAgIHVzZXJOYW1lOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHVzZXIuZmlyc3RfbmFtZSxcclxuICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdF9uYW1lLFxyXG4gICAgICAgICAgICAgICAgICBlbWFpbDogdXNlci5lbWFpbFxyXG4gICAgICAgICAgICAgICAgfSB8IHBpcGVOYW1lVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgIHVzZXJQaG9uZTogdXNlci5waG9uZV9Ob1xyXG4gICAgICAgICAgICB9XCI+PC93cy13aWRnZXQtYnRuLWNhbGw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDwvZGl2PiAtLT5cclxuXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9zZWN0aW9uPlxyXG4iXX0=
|