@sunbird-cb/toc 0.0.9 → 0.0.10
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 +261 -248
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1177 -1148
- 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 +2938 -2907
- 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 +332 -313
- package/esm2022/lib/services/app-toc.service.mjs +1647 -1613
- 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 +599 -590
- 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 +73 -71
- package/esm2022/sunbird-cb-toc.mjs +4 -4
- package/fesm2022/sunbird-cb-toc.mjs +24901 -24766
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/index.d.ts +6 -5
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +17 -16
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +32 -31
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +16 -15
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +21 -20
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +1 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +23 -22
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +1 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +16 -15
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +23 -22
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -22
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +10 -9
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +1 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +12 -11
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +13 -12
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +19 -18
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +15 -14
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +12 -11
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +18 -17
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +15 -14
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +200 -199
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +1 -0
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +17 -16
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +11 -10
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +39 -38
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +20 -19
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +12 -11
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +184 -183
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +42 -41
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +55 -54
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +48 -47
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +51 -49
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +175 -171
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +9 -8
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +17 -16
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +41 -40
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +22 -21
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +46 -45
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +11 -10
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +11 -10
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +129 -128
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -51
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +30 -29
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +10 -9
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +8 -7
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +8 -7
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +29 -28
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +25 -24
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +15 -14
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +10 -9
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +13 -12
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +11 -10
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +23 -22
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +9 -8
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +19 -18
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +1 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +9 -8
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +1 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +16 -15
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +36 -35
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +1 -0
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +20 -19
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +1 -0
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +15 -14
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +1 -0
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +14 -13
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +1 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +12 -11
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +12 -11
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +1 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +16 -15
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +11 -10
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +1 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +17 -16
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +1 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +12 -11
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +35 -34
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +18 -17
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +16 -15
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +16 -15
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +1 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +22 -21
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +13 -12
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-image/user-image.component.d.ts +22 -21
- package/lib/_collection/_common/user-image/user-image.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-image/user-image.module.d.ts +10 -9
- package/lib/_collection/_common/user-image/user-image.module.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +48 -47
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +15 -14
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +23 -22
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +1 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +20 -19
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +1 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +16 -15
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -25
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +22 -21
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +19 -18
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +1 -0
- package/lib/_collection-api.d.ts +35 -34
- package/lib/_collection-api.d.ts.map +1 -0
- package/lib/_constants/widget-content.constants.d.ts +8 -7
- package/lib/_constants/widget-content.constants.d.ts.map +1 -0
- package/lib/_directives/tooltip.directive.d.ts +18 -17
- package/lib/_directives/tooltip.directive.d.ts.map +1 -0
- package/lib/_models/common.model.d.ts +4 -3
- package/lib/_models/common.model.d.ts.map +1 -0
- package/lib/_models/error.model.d.ts +6 -5
- package/lib/_models/error.model.d.ts.map +1 -0
- package/lib/_pipes/highlight.pipe.d.ts +11 -10
- package/lib/_pipes/highlight.pipe.d.ts.map +1 -0
- package/lib/_services/rating.service.d.ts +19 -18
- package/lib/_services/rating.service.d.ts.map +1 -0
- package/lib/_services/samuhik-charcha.service.d.ts +14 -13
- package/lib/_services/samuhik-charcha.service.d.ts.map +1 -0
- package/lib/_services/viewer-route-util.d.ts +9 -8
- package/lib/_services/viewer-route-util.d.ts.map +1 -0
- package/lib/_services/widget-content.model.d.ts +516 -515
- package/lib/_services/widget-content.model.d.ts.map +1 -0
- package/lib/_services/widget-content.service.d.ts +102 -101
- package/lib/_services/widget-content.service.d.ts.map +1 -0
- package/lib/_shared/translate-loader.factory.d.ts +8 -7
- package/lib/_shared/translate-loader.factory.d.ts.map +1 -0
- package/lib/app-toc-lib.module.d.ts +89 -88
- package/lib/app-toc-lib.module.d.ts.map +1 -0
- package/lib/collection.config.d.ts +160 -159
- package/lib/collection.config.d.ts.map +1 -0
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +18 -17
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +1 -0
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +226 -225
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +1 -0
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +79 -78
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -0
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +23 -22
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +1 -0
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +32 -31
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +1 -0
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +48 -47
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +1 -0
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +15 -14
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +1 -0
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +22 -21
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +1 -0
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -314
- package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +1 -0
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +415 -408
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -0
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +48 -47
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +1 -0
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +23 -22
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +1 -0
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +15 -14
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +1 -0
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +150 -149
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +1 -0
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +43 -42
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +1 -0
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +28 -27
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +1 -0
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +16 -15
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +1 -0
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +196 -195
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -0
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +45 -44
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +1 -0
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +55 -54
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +1 -0
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +19 -18
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +1 -0
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -43
- package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +1 -0
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +21 -20
- package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +1 -0
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +14 -13
- package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +1 -0
- package/lib/models/app-toc-analytics.model.d.ts +153 -152
- package/lib/models/app-toc-analytics.model.d.ts.map +1 -0
- package/lib/models/app-toc.model.d.ts +85 -84
- package/lib/models/app-toc.model.d.ts.map +1 -0
- package/lib/models/auto-complete.model.d.ts +28 -27
- package/lib/models/auto-complete.model.d.ts.map +1 -0
- package/lib/models/card-content.model.d.ts +20 -19
- package/lib/models/card-content.model.d.ts.map +1 -0
- package/lib/models/content-strip-with-tabs.model.d.ts +45 -44
- package/lib/models/content-strip-with-tabs.model.d.ts.map +1 -0
- package/lib/models/discussion-forum.model.d.ts +41 -40
- package/lib/models/discussion-forum.model.d.ts.map +1 -0
- package/lib/models/goal.model.d.ts +23 -22
- package/lib/models/goal.model.d.ts.map +1 -0
- package/lib/models/meta-tag.model.d.ts +7 -6
- package/lib/models/meta-tag.model.d.ts.map +1 -0
- package/lib/models/playlist.model.d.ts +24 -23
- package/lib/models/playlist.model.d.ts.map +1 -0
- package/lib/models/profile-revamp.model.d.ts +15 -14
- package/lib/models/profile-revamp.model.d.ts.map +1 -0
- package/lib/models/rating.model.d.ts +18 -17
- package/lib/models/rating.model.d.ts.map +1 -0
- package/lib/models/user-profile.model.d.ts +38 -37
- package/lib/models/user-profile.model.d.ts.map +1 -0
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +13 -12
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +13 -12
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +17 -16
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +13 -12
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-resolver.service.d.ts +17 -16
- package/lib/resolvers/app-toc-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/config-resolver.service.d.ts +12 -11
- package/lib/resolvers/config-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/profile-resolver.service.d.ts +12 -11
- package/lib/resolvers/profile-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/restricted-features-resolver.service.d.ts +12 -11
- package/lib/resolvers/restricted-features-resolver.service.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +20 -19
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +9 -8
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +9 -8
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +1 -0
- package/lib/services/access-control.service.d.ts +30 -29
- package/lib/services/access-control.service.d.ts.map +1 -0
- package/lib/services/action.service.d.ts +10 -9
- package/lib/services/action.service.d.ts.map +1 -0
- package/lib/services/app-toc-v2.service.d.ts +17 -16
- package/lib/services/app-toc-v2.service.d.ts.map +1 -0
- package/lib/services/app-toc.service.d.ts +241 -235
- package/lib/services/app-toc.service.d.ts.map +1 -0
- package/lib/services/certificate.service.d.ts +43 -42
- package/lib/services/certificate.service.d.ts.map +1 -0
- package/lib/services/discuss-utils.service.d.ts +34 -33
- package/lib/services/discuss-utils.service.d.ts.map +1 -0
- package/lib/services/editor.service.d.ts +18 -17
- package/lib/services/editor.service.d.ts.map +1 -0
- package/lib/services/load-check.service.d.ts +9 -8
- package/lib/services/load-check.service.d.ts.map +1 -0
- package/lib/services/loader.service.d.ts +17 -16
- package/lib/services/loader.service.d.ts.map +1 -0
- package/lib/services/mobile-apps.service.d.ts +39 -38
- package/lib/services/mobile-apps.service.d.ts.map +1 -0
- package/lib/services/netcore.service.d.ts +34 -33
- package/lib/services/netcore.service.d.ts.map +1 -0
- package/lib/services/nps-grid.service.d.ts +16 -15
- package/lib/services/nps-grid.service.d.ts.map +1 -0
- package/lib/services/otp.service.d.ts +21 -20
- package/lib/services/otp.service.d.ts.map +1 -0
- package/lib/services/profile-v2.service.d.ts +21 -20
- package/lib/services/profile-v2.service.d.ts.map +1 -0
- package/lib/services/reset-ratings.service.d.ts +9 -8
- package/lib/services/reset-ratings.service.d.ts.map +1 -0
- package/lib/services/resource-download-helper.service.d.ts +30 -29
- package/lib/services/resource-download-helper.service.d.ts.map +1 -0
- package/lib/services/timer.service.d.ts +10 -9
- package/lib/services/timer.service.d.ts.map +1 -0
- package/lib/services/title-tag.service.d.ts +22 -21
- package/lib/services/title-tag.service.d.ts.map +1 -0
- package/lib/services/user-profile.service.d.ts +25 -24
- package/lib/services/user-profile.service.d.ts.map +1 -0
- package/lib/services/viewer-data.service.d.ts +59 -58
- package/lib/services/viewer-data.service.d.ts.map +1 -0
- package/lib/services/viewer-util.service.d.ts +77 -76
- package/lib/services/viewer-util.service.d.ts.map +1 -0
- package/lib/share-toc/share-toc/share-toc.component.d.ts +57 -56
- package/lib/share-toc/share-toc/share-toc.component.d.ts.map +1 -0
- package/lib/share-toc/share-toc.module.d.ts +33 -32
- package/lib/share-toc/share-toc.module.d.ts.map +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +59 -56
- package/public-api.d.ts.map +1 -0
- package/sunbird-cb-toc.d.ts.map +1 -0
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { VIEWER_ROUTE_FROM_MIME } from '../../../../_services/viewer-route-util';
|
|
3
|
-
import { NsContent, WsEvents } from '@sunbird-cb/utils-v2';
|
|
4
|
-
import * as fileSaver from 'file-saver';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/router";
|
|
7
|
-
import * as i2 from "@sunbird-cb/utils-v2";
|
|
8
|
-
import * as i3 from "@angular/common";
|
|
9
|
-
import * as i4 from "@angular/material/icon";
|
|
10
|
-
import * as i5 from "@angular/material/progress-spinner";
|
|
11
|
-
import * as i6 from "@ngx-translate/core";
|
|
12
|
-
export class AppTocTeachersNotesComponent {
|
|
13
|
-
constructor(router, eventSvc) {
|
|
14
|
-
this.router = router;
|
|
15
|
-
this.eventSvc = eventSvc;
|
|
16
|
-
this.primaryCategory = NsContent.EPrimaryCategory;
|
|
17
|
-
this.downloadInProgress = {};
|
|
18
|
-
this.isDownloadingAll = false;
|
|
19
|
-
this.forPreview = false;
|
|
20
|
-
this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
21
|
-
}
|
|
22
|
-
ngOnInit() { }
|
|
23
|
-
raiseDownloadAllTelemetry(subType) {
|
|
24
|
-
const event = {
|
|
25
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
26
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
27
|
-
data: {
|
|
28
|
-
edata: {
|
|
29
|
-
type: "click",
|
|
30
|
-
id: this.notesDisplayType == 'Reference Resource' ? "teachers-note" : "reference-note",
|
|
31
|
-
pageid: `/app/toc/${this.content?.identifier}`,
|
|
32
|
-
subType: subType,
|
|
33
|
-
},
|
|
34
|
-
object: {
|
|
35
|
-
id: this.content?.identifier,
|
|
36
|
-
type: this.content?.courseCategory,
|
|
37
|
-
},
|
|
38
|
-
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
39
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
40
|
-
mode: 'view',
|
|
41
|
-
},
|
|
42
|
-
pageContext: {
|
|
43
|
-
pageId: `/app/toc/${this.content?.identifier}`,
|
|
44
|
-
module: this.notesDisplayType == 'Reference Resource' ? 'Amrit Gyaan Kosh' : 'Learn'
|
|
45
|
-
},
|
|
46
|
-
from: '',
|
|
47
|
-
to: 'Telemetry',
|
|
48
|
-
};
|
|
49
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
50
|
-
}
|
|
51
|
-
downloadPDF(contentData) {
|
|
52
|
-
if (!contentData?.artifactUrl) {
|
|
53
|
-
console.error('No artifact URL provided');
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
this.downloadInProgress[contentData.identifier] = true;
|
|
57
|
-
this.downloadFile(contentData.artifactUrl, contentData.name || 'download', contentData.identifier);
|
|
58
|
-
this.raiseDownloadAllTelemetry('download');
|
|
59
|
-
}
|
|
60
|
-
previewContent(contentData) {
|
|
61
|
-
this.router.navigate([`/app/amrit-gyaan-kosh/player/${VIEWER_ROUTE_FROM_MIME(contentData.mimeType)}/${contentData.identifier}`], {
|
|
62
|
-
queryParams: {
|
|
63
|
-
primaryCategory: this.primaryCategory.RESOURCE,
|
|
64
|
-
playerPreview: true,
|
|
65
|
-
collectionId: this.content.identifier,
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
downloadAllContent() {
|
|
70
|
-
if (!this.content?.referenceNodes?.length) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const teacherResources = this.content.referenceNodes.filter((ele) => ele?.resourceCategory === this.notesDisplayType && ele.artifactUrl);
|
|
74
|
-
if (teacherResources.length === 0) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
this.isDownloadingAll = true;
|
|
78
|
-
let completedCount = 0;
|
|
79
|
-
teacherResources.forEach((ele) => {
|
|
80
|
-
this.downloadInProgress[ele.identifier] = true;
|
|
81
|
-
this.downloadFile(ele.artifactUrl, ele.name || 'download', ele.identifier)
|
|
82
|
-
.finally(() => {
|
|
83
|
-
completedCount++;
|
|
84
|
-
if (completedCount === teacherResources.length) {
|
|
85
|
-
this.isDownloadingAll = false;
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
this.raiseDownloadAllTelemetry('download-all');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Check if any download is currently in progress
|
|
93
|
-
*/
|
|
94
|
-
hasActiveDownloads() {
|
|
95
|
-
return this.isDownloadingAll || Object.values(this.downloadInProgress).some(status => status);
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Check if content has any teacher resources
|
|
99
|
-
*/
|
|
100
|
-
hasTeacherResources() {
|
|
101
|
-
return this.content?.referenceNodes?.some((node) => node?.resourceCategory === this.notesDisplayType) || false;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Download file using multiple methods to ensure compatibility across browsers
|
|
105
|
-
* @returns Promise that resolves when download completes or fails
|
|
106
|
-
*/
|
|
107
|
-
downloadFile(url, fileName, identifier) {
|
|
108
|
-
// Add file extension if missing
|
|
109
|
-
const fileExtension = this.getFileExtension(url);
|
|
110
|
-
if (fileExtension && !fileName.toLowerCase().endsWith(fileExtension.toLowerCase())) {
|
|
111
|
-
fileName = `${fileName}.${fileExtension}`;
|
|
112
|
-
}
|
|
113
|
-
// Return a promise to track completion
|
|
114
|
-
return new Promise((resolve) => {
|
|
115
|
-
// Use fetch API instead of HttpClient for better control over the download
|
|
116
|
-
this.downloadInProgress[identifier] = true;
|
|
117
|
-
fetch(url, {
|
|
118
|
-
method: 'GET',
|
|
119
|
-
mode: 'cors',
|
|
120
|
-
})
|
|
121
|
-
.then(response => {
|
|
122
|
-
if (!response.ok) {
|
|
123
|
-
throw new Error('Network response was not ok');
|
|
124
|
-
}
|
|
125
|
-
return response.blob();
|
|
126
|
-
})
|
|
127
|
-
.then(blob => {
|
|
128
|
-
// Create a new blob with the correct MIME type if needed
|
|
129
|
-
const contentType = this.getMimeTypeFromUrl(url);
|
|
130
|
-
const newBlob = new Blob([blob], { type: contentType });
|
|
131
|
-
// Try to save the blob
|
|
132
|
-
this.saveBlob(newBlob, fileName);
|
|
133
|
-
resolve();
|
|
134
|
-
})
|
|
135
|
-
.catch(error => {
|
|
136
|
-
console.error('Fetch download failed:', error);
|
|
137
|
-
// Fallback to XHR which sometimes handles CORS better
|
|
138
|
-
this.downloadWithXHR(url, fileName).finally(resolve);
|
|
139
|
-
})
|
|
140
|
-
.finally(() => {
|
|
141
|
-
this.downloadInProgress[identifier] = false;
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Attempt download using XMLHttpRequest as a fallback
|
|
147
|
-
*/
|
|
148
|
-
downloadWithXHR(url, fileName) {
|
|
149
|
-
return new Promise((resolve) => {
|
|
150
|
-
const xhr = new XMLHttpRequest();
|
|
151
|
-
xhr.open('GET', url, true);
|
|
152
|
-
xhr.responseType = 'blob';
|
|
153
|
-
xhr.onload = () => {
|
|
154
|
-
if (xhr.status === 200) {
|
|
155
|
-
const contentType = xhr.getResponseHeader('Content-Type') || this.getMimeTypeFromUrl(url);
|
|
156
|
-
const blob = new Blob([xhr.response], { type: contentType });
|
|
157
|
-
this.saveBlob(blob, fileName);
|
|
158
|
-
resolve();
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
console.error('XHR download failed, trying direct iframe method');
|
|
162
|
-
this.tryDirectDownload(url, fileName);
|
|
163
|
-
resolve();
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
xhr.onerror = () => {
|
|
167
|
-
console.error('XHR download failed, trying direct iframe method');
|
|
168
|
-
this.tryDirectDownload(url, fileName);
|
|
169
|
-
resolve();
|
|
170
|
-
};
|
|
171
|
-
xhr.send();
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
getFileExtension(url) {
|
|
175
|
-
if (!url)
|
|
176
|
-
return '';
|
|
177
|
-
const urlParts = url.split('.');
|
|
178
|
-
if (urlParts.length > 1) {
|
|
179
|
-
return urlParts[urlParts.length - 1].split(/[?#]/)[0].toLowerCase();
|
|
180
|
-
}
|
|
181
|
-
return '';
|
|
182
|
-
}
|
|
183
|
-
getMimeTypeFromUrl(url) {
|
|
184
|
-
const extension = this.getFileExtension(url);
|
|
185
|
-
switch (extension) {
|
|
186
|
-
case 'pdf':
|
|
187
|
-
return 'application/pdf';
|
|
188
|
-
case 'mp4':
|
|
189
|
-
return 'video/mp4';
|
|
190
|
-
case 'doc':
|
|
191
|
-
case 'docx':
|
|
192
|
-
return 'application/msword';
|
|
193
|
-
case 'xls':
|
|
194
|
-
case 'xlsx':
|
|
195
|
-
return 'application/vnd.ms-excel';
|
|
196
|
-
case 'ppt':
|
|
197
|
-
case 'pptx':
|
|
198
|
-
return 'application/vnd.ms-powerpoint';
|
|
199
|
-
case 'jpg':
|
|
200
|
-
case 'jpeg':
|
|
201
|
-
return 'image/jpeg';
|
|
202
|
-
case 'png':
|
|
203
|
-
return 'image/png';
|
|
204
|
-
default:
|
|
205
|
-
return 'application/octet-stream'; // Default binary mime type
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
saveBlob(blob, fileName) {
|
|
209
|
-
try {
|
|
210
|
-
// For modern browsers using FileSaver
|
|
211
|
-
fileSaver.saveAs(blob, fileName);
|
|
212
|
-
}
|
|
213
|
-
catch (e) {
|
|
214
|
-
console.error('FileSaver failed, trying manual download', e);
|
|
215
|
-
// Manual download fallback
|
|
216
|
-
const url = window.URL.createObjectURL(blob);
|
|
217
|
-
const a = document.createElement('a');
|
|
218
|
-
a.style.display = 'none';
|
|
219
|
-
a.href = url;
|
|
220
|
-
a.download = fileName;
|
|
221
|
-
document.body.appendChild(a);
|
|
222
|
-
a.click();
|
|
223
|
-
window.URL.revokeObjectURL(url);
|
|
224
|
-
document.body.removeChild(a);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
tryDirectDownload(url, fileName) {
|
|
228
|
-
// Use iframe for potentially bypassing CORS issues
|
|
229
|
-
const iframe = document.createElement('iframe');
|
|
230
|
-
iframe.style.display = 'none';
|
|
231
|
-
document.body.appendChild(iframe);
|
|
232
|
-
try {
|
|
233
|
-
// Construct a download URL
|
|
234
|
-
const downloadUrl = url + (url.indexOf('?') === -1 ? '?' : '&') + 'download=true';
|
|
235
|
-
// Create a link inside the iframe and click it
|
|
236
|
-
const doc = iframe.contentDocument || iframe.contentWindow?.document;
|
|
237
|
-
if (doc) {
|
|
238
|
-
const a = doc.createElement('a');
|
|
239
|
-
a.href = downloadUrl;
|
|
240
|
-
a.download = fileName;
|
|
241
|
-
a.style.display = 'none';
|
|
242
|
-
doc.body.appendChild(a);
|
|
243
|
-
a.click();
|
|
244
|
-
doc.body.removeChild(a);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
catch (e) {
|
|
248
|
-
console.error('Iframe download approach failed:', e);
|
|
249
|
-
// Last resort - try download attribute on anchor tag
|
|
250
|
-
const a = document.createElement('a');
|
|
251
|
-
a.href = url;
|
|
252
|
-
a.download = fileName;
|
|
253
|
-
a.target = '_self'; // Important: use _self instead of _blank
|
|
254
|
-
document.body.appendChild(a);
|
|
255
|
-
a.click();
|
|
256
|
-
document.body.removeChild(a);
|
|
257
|
-
}
|
|
258
|
-
finally {
|
|
259
|
-
// Clean up the iframe
|
|
260
|
-
setTimeout(() => {
|
|
261
|
-
if (document.body.contains(iframe)) {
|
|
262
|
-
document.body.removeChild(iframe);
|
|
263
|
-
}
|
|
264
|
-
}, 1000);
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocTeachersNotesComponent, deps: [{ token: i1.Router }, { token: i2.EventService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
268
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: { content: "content", notesDisplayType: "notesDisplayType" }, ngImport: i0, template: "<div class=\"flex justify-between items-center\">\
|
|
269
|
-
}
|
|
270
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocTeachersNotesComponent, decorators: [{
|
|
271
|
-
type: Component,
|
|
272
|
-
args: [{ selector: 'ws-widget-app-toc-teachers-notes', template: "<div class=\"flex justify-between items-center\">\
|
|
273
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.EventService }]; }, propDecorators: { content: [{
|
|
274
|
-
type: Input
|
|
275
|
-
}], notesDisplayType: [{
|
|
276
|
-
type: Input
|
|
277
|
-
}] } });
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzL2FwcC10b2MtdGVhY2hlcnMtbm90ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFBO0FBRXhELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3hFLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFBOzs7Ozs7OztBQVF2QyxNQUFNLE9BQU8sNEJBQTRCO0lBU3ZDLFlBQW1CLE1BQWMsRUFDeEIsUUFBc0I7UUFEWixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFOL0Isb0JBQWUsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUE7UUFDNUMsdUJBQWtCLEdBQStCLEVBQUUsQ0FBQTtRQUNuRCxxQkFBZ0IsR0FBRyxLQUFLLENBQUE7UUFDeEIsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUtoQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFV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QUUsQ0FBQyxDQUFDLENBQUE7WUFFcEQscURBQXFEO1lBQ3JELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDckMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7WUFDWixDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtZQUNyQixDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQSxDQUFDLHlDQUF5QztZQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM1QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDVCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUM3QjtnQkFBUztZQUNSLHNCQUFzQjtZQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2lCQUNsQztZQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtTQUNUO0lBQ0gsQ0FBQzsrR0E5UlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsOElDWnpDLCt1RUFpRE07OzRGRHJDTyw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0Usa0NBQWtDO3dIQU9uQyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBWSUVXRVJfUk9VVEVfRlJPTV9NSU1FIH0gZnJvbSAnLi4vLi4vLi4vLi4vX3NlcnZpY2VzL3ZpZXdlci1yb3V0ZS11dGlsJ1xyXG5pbXBvcnQgeyBFdmVudFNlcnZpY2UsIE5zQ29udGVudCwgV3NFdmVudHMgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcclxuaW1wb3J0ICogYXMgZmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFwcFRvY1RlYWNoZXJzTm90ZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBjb250ZW50ITogTnNDb250ZW50LklDb250ZW50XHJcbiAgQElucHV0KCkgbm90ZXNEaXNwbGF5VHlwZSE6IHN0cmluZ1xyXG4gIHByaW1hcnlDYXRlZ29yeSA9IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5XHJcbiAgZG93bmxvYWRJblByb2dyZXNzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcbiAgaXNEb3dubG9hZGluZ0FsbCA9IGZhbHNlXHJcbiAgZm9yUHJldmlldyA9IGZhbHNlXHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHB1YmxpYyBldmVudFN2YzogRXZlbnRTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5mb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7IH1cclxuXHJcbiAgcmFpc2VEb3dubG9hZEFsbFRlbGVtZXRyeShzdWJUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogXCJjbGlja1wiLFxyXG4gICAgICAgICAgaWQ6IHRoaXMubm90ZXNEaXNwbGF5VHlwZSA9PSAnUmVmZXJlbmNlIFJlc291cmNlJyA/IFwidGVhY2hlcnMtbm90ZVwiIDogXCJyZWZlcmVuY2Utbm90ZVwiLFxyXG4gICAgICAgICAgcGFnZWlkOiBgL2FwcC90b2MvJHt0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXJ9YCxcclxuICAgICAgICAgIHN1YlR5cGU6IHN1YlR5cGUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvYmplY3Q6IHtcclxuICAgICAgICAgIGlkOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxyXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcclxuICAgICAgICBtb2RlOiAndmlldycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhZ2VDb250ZXh0OiB7XHJcbiAgICAgICAgcGFnZUlkOiBgL2FwcC90b2MvJHt0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXJ9YCxcclxuICAgICAgICBtb2R1bGU6IHRoaXMubm90ZXNEaXNwbGF5VHlwZSA9PSAnUmVmZXJlbmNlIFJlc291cmNlJyA/ICdBbXJpdCBHeWFhbiBLb3NoJyA6ICdMZWFybidcclxuICAgICAgfSxcclxuICAgICAgZnJvbTogJycsXHJcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFBERihjb250ZW50RGF0YTogYW55KSB7XHJcbiAgICBpZiAoIWNvbnRlbnREYXRhPy5hcnRpZmFjdFVybCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBhcnRpZmFjdCBVUkwgcHJvdmlkZWQnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvd25sb2FkSW5Qcm9ncmVzc1tjb250ZW50RGF0YS5pZGVudGlmaWVyXSA9IHRydWVcclxuICAgIHRoaXMuZG93bmxvYWRGaWxlKGNvbnRlbnREYXRhLmFydGlmYWN0VXJsLCBjb250ZW50RGF0YS5uYW1lIHx8ICdkb3dubG9hZCcsIGNvbnRlbnREYXRhLmlkZW50aWZpZXIpXHJcbiAgICB0aGlzLnJhaXNlRG93bmxvYWRBbGxUZWxlbWV0cnkoJ2Rvd25sb2FkJylcclxuICB9XHJcblxyXG4gIHByZXZpZXdDb250ZW50KGNvbnRlbnREYXRhOiBhbnkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2FwcC9hbXJpdC1neWFhbi1rb3NoL3BsYXllci8ke1ZJRVdFUl9ST1VURV9GUk9NX01JTUUoY29udGVudERhdGEubWltZVR5cGUpfS8ke2NvbnRlbnREYXRhLmlkZW50aWZpZXJ9YF0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IHRoaXMucHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFLFxyXG4gICAgICAgIHBsYXllclByZXZpZXc6IHRydWUsXHJcbiAgICAgICAgY29sbGVjdGlvbklkOiB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcixcclxuICAgICAgfSxcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEFsbENvbnRlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29udGVudD8ucmVmZXJlbmNlTm9kZXM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ZWFjaGVyUmVzb3VyY2VzID0gdGhpcy5jb250ZW50LnJlZmVyZW5jZU5vZGVzLmZpbHRlcihcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGU/LnJlc291cmNlQ2F0ZWdvcnkgPT09IHRoaXMubm90ZXNEaXNwbGF5VHlwZSAmJiBlbGUuYXJ0aWZhY3RVcmxcclxuICAgIClcclxuXHJcbiAgICBpZiAodGVhY2hlclJlc291cmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0Rvd25sb2FkaW5nQWxsID0gdHJ1ZVxyXG4gICAgbGV0IGNvbXBsZXRlZENvdW50ID0gMFxyXG5cclxuICAgIHRlYWNoZXJSZXNvdXJjZXMuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3NbZWxlLmlkZW50aWZpZXJdID0gdHJ1ZVxyXG4gICAgICB0aGlzLmRvd25sb2FkRmlsZShlbGUuYXJ0aWZhY3RVcmwsIGVsZS5uYW1lIHx8ICdkb3dubG9hZCcsIGVsZS5pZGVudGlmaWVyKVxyXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICAgIGNvbXBsZXRlZENvdW50KytcclxuICAgICAgICAgIGlmIChjb21wbGV0ZWRDb3VudCA9PT0gdGVhY2hlclJlc291cmNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rvd25sb2FkaW5nQWxsID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICAgIHRoaXMucmFpc2VEb3dubG9hZEFsbFRlbGVtZXRyeSgnZG93bmxvYWQtYWxsJylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGFueSBkb3dubG9hZCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3NcclxuICAgKi9cclxuICBoYXNBY3RpdmVEb3dubG9hZHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0Rvd25sb2FkaW5nQWxsIHx8IE9iamVjdC52YWx1ZXModGhpcy5kb3dubG9hZEluUHJvZ3Jlc3MpLnNvbWUoc3RhdHVzID0+IHN0YXR1cylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGNvbnRlbnQgaGFzIGFueSB0ZWFjaGVyIHJlc291cmNlc1xyXG4gICAqL1xyXG4gIGhhc1RlYWNoZXJSZXNvdXJjZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50Py5yZWZlcmVuY2VOb2Rlcz8uc29tZSgobm9kZTogYW55KSA9PiBub2RlPy5yZXNvdXJjZUNhdGVnb3J5ID09PSB0aGlzLm5vdGVzRGlzcGxheVR5cGUpIHx8IGZhbHNlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCBmaWxlIHVzaW5nIG11bHRpcGxlIG1ldGhvZHMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIGJyb3dzZXJzXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZG93bmxvYWQgY29tcGxldGVzIG9yIGZhaWxzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gQWRkIGZpbGUgZXh0ZW5zaW9uIGlmIG1pc3NpbmdcclxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24odXJsKVxyXG4gICAgaWYgKGZpbGVFeHRlbnNpb24gJiYgIWZpbGVOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZmlsZUV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICBmaWxlTmFtZSA9IGAke2ZpbGVOYW1lfS4ke2ZpbGVFeHRlbnNpb259YFxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybiBhIHByb21pc2UgdG8gdHJhY2sgY29tcGxldGlvblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIC8vIFVzZSBmZXRjaCBBUEkgaW5zdGVhZCBvZiBIdHRwQ2xpZW50IGZvciBiZXR0ZXIgY29udHJvbCBvdmVyIHRoZSBkb3dubG9hZFxyXG4gICAgICB0aGlzLmRvd25sb2FkSW5Qcm9ncmVzc1tpZGVudGlmaWVyXSA9IHRydWVcclxuXHJcbiAgICAgIGZldGNoKHVybCwge1xyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgbW9kZTogJ2NvcnMnLFxyXG4gICAgICB9KVxyXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRoZW4oYmxvYiA9PiB7XHJcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYmxvYiB3aXRoIHRoZSBjb3JyZWN0IE1JTUUgdHlwZSBpZiBuZWVkZWRcclxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5nZXRNaW1lVHlwZUZyb21VcmwodXJsKVxyXG4gICAgICAgICAgY29uc3QgbmV3QmxvYiA9IG5ldyBCbG9iKFtibG9iXSwgeyB0eXBlOiBjb250ZW50VHlwZSB9KVxyXG5cclxuICAgICAgICAgIC8vIFRyeSB0byBzYXZlIHRoZSBibG9iXHJcbiAgICAgICAgICB0aGlzLnNhdmVCbG9iKG5ld0Jsb2IsIGZpbGVOYW1lKVxyXG4gICAgICAgICAgcmVzb2x2ZSgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmV0Y2ggZG93bmxvYWQgZmFpbGVkOicsIGVycm9yKVxyXG5cclxuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIFhIUiB3aGljaCBzb21ldGltZXMgaGFuZGxlcyBDT1JTIGJldHRlclxyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZFdpdGhYSFIodXJsLCBmaWxlTmFtZSkuZmluYWxseShyZXNvbHZlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3NbaWRlbnRpZmllcl0gPSBmYWxzZVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXR0ZW1wdCBkb3dubG9hZCB1c2luZyBYTUxIdHRwUmVxdWVzdCBhcyBhIGZhbGxiYWNrXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkb3dubG9hZFdpdGhYSFIodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxyXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKVxyXG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXHJcblxyXG4gICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LVR5cGUnKSB8fCB0aGlzLmdldE1pbWVUeXBlRnJvbVVybCh1cmwpXHJcbiAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3hoci5yZXNwb25zZV0sIHsgdHlwZTogY29udGVudFR5cGUgfSlcclxuICAgICAgICAgIHRoaXMuc2F2ZUJsb2IoYmxvYiwgZmlsZU5hbWUpXHJcbiAgICAgICAgICByZXNvbHZlKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignWEhSIGRvd25sb2FkIGZhaWxlZCwgdHJ5aW5nIGRpcmVjdCBpZnJhbWUgbWV0aG9kJylcclxuICAgICAgICAgIHRoaXMudHJ5RGlyZWN0RG93bmxvYWQodXJsLCBmaWxlTmFtZSlcclxuICAgICAgICAgIHJlc29sdmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignWEhSIGRvd25sb2FkIGZhaWxlZCwgdHJ5aW5nIGRpcmVjdCBpZnJhbWUgbWV0aG9kJylcclxuICAgICAgICB0aGlzLnRyeURpcmVjdERvd25sb2FkKHVybCwgZmlsZU5hbWUpXHJcbiAgICAgICAgcmVzb2x2ZSgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhoci5zZW5kKClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbGVFeHRlbnNpb24odXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF1cmwpIHJldHVybiAnJ1xyXG5cclxuICAgIGNvbnN0IHVybFBhcnRzID0gdXJsLnNwbGl0KCcuJylcclxuICAgIGlmICh1cmxQYXJ0cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHJldHVybiB1cmxQYXJ0c1t1cmxQYXJ0cy5sZW5ndGggLSAxXS5zcGxpdCgvWz8jXS8pWzBdLnRvTG93ZXJDYXNlKClcclxuICAgIH1cclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW1lVHlwZUZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKHVybClcclxuXHJcbiAgICBzd2l0Y2ggKGV4dGVuc2lvbikge1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vcGRmJ1xyXG4gICAgICBjYXNlICdtcDQnOlxyXG4gICAgICAgIHJldHVybiAndmlkZW8vbXA0J1xyXG4gICAgICBjYXNlICdkb2MnOlxyXG4gICAgICBjYXNlICdkb2N4JzpcclxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL21zd29yZCdcclxuICAgICAgY2FzZSAneGxzJzpcclxuICAgICAgY2FzZSAneGxzeCc6XHJcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnXHJcbiAgICAgIGNhc2UgJ3BwdCc6XHJcbiAgICAgIGNhc2UgJ3BwdHgnOlxyXG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnXHJcbiAgICAgIGNhc2UgJ2pwZyc6XHJcbiAgICAgIGNhc2UgJ2pwZWcnOlxyXG4gICAgICAgIHJldHVybiAnaW1hZ2UvanBlZydcclxuICAgICAgY2FzZSAncG5nJzpcclxuICAgICAgICByZXR1cm4gJ2ltYWdlL3BuZydcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgLy8gRGVmYXVsdCBiaW5hcnkgbWltZSB0eXBlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVCbG9iKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIEZvciBtb2Rlcm4gYnJvd3NlcnMgdXNpbmcgRmlsZVNhdmVyXHJcbiAgICAgIGZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGVTYXZlciBmYWlsZWQsIHRyeWluZyBtYW51YWwgZG93bmxvYWQnLCBlKVxyXG5cclxuICAgICAgLy8gTWFudWFsIGRvd25sb2FkIGZhbGxiYWNrXHJcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXHJcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcclxuICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXHJcbiAgICAgIGEuaHJlZiA9IHVybFxyXG4gICAgICBhLmRvd25sb2FkID0gZmlsZU5hbWVcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKVxyXG4gICAgICBhLmNsaWNrKClcclxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyeURpcmVjdERvd25sb2FkKHVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBVc2UgaWZyYW1lIGZvciBwb3RlbnRpYWxseSBieXBhc3NpbmcgQ09SUyBpc3N1ZXNcclxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpXHJcbiAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ29uc3RydWN0IGEgZG93bmxvYWQgVVJMXHJcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArICdkb3dubG9hZD10cnVlJ1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIGEgbGluayBpbnNpZGUgdGhlIGlmcmFtZSBhbmQgY2xpY2sgaXRcclxuICAgICAgY29uc3QgZG9jID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCBpZnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnRcclxuICAgICAgaWYgKGRvYykge1xyXG4gICAgICAgIGNvbnN0IGEgPSBkb2MuY3JlYXRlRWxlbWVudCgnYScpXHJcbiAgICAgICAgYS5ocmVmID0gZG93bmxvYWRVcmxcclxuICAgICAgICBhLmRvd25sb2FkID0gZmlsZU5hbWVcclxuICAgICAgICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcclxuICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChhKVxyXG4gICAgICAgIGEuY2xpY2soKVxyXG4gICAgICAgIGRvYy5ib2R5LnJlbW92ZUNoaWxkKGEpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignSWZyYW1lIGRvd25sb2FkIGFwcHJvYWNoIGZhaWxlZDonLCBlKVxyXG5cclxuICAgICAgLy8gTGFzdCByZXNvcnQgLSB0cnkgZG93bmxvYWQgYXR0cmlidXRlIG9uIGFuY2hvciB0YWdcclxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxyXG4gICAgICBhLmhyZWYgPSB1cmxcclxuICAgICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lXHJcbiAgICAgIGEudGFyZ2V0ID0gJ19zZWxmJyAvLyBJbXBvcnRhbnQ6IHVzZSBfc2VsZiBpbnN0ZWFkIG9mIF9ibGFua1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpXHJcbiAgICAgIGEuY2xpY2soKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpXHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAvLyBDbGVhbiB1cCB0aGUgaWZyYW1lXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGlmcmFtZSkpIHtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMClcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0ZWFjaGVycy1ub3RlLWhlYWRlclwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLnRlYWNoZXJzTm90ZUhlYWRpbmcnIHwgdHJhbnNsYXRlIH19PC9kaXY+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImhhc0FjdGl2ZURvd25sb2FkcygpXCIgKGNsaWNrKT1cImRvd25sb2FkQWxsQ29udGVudCgpXCIgY2xhc3M9XCJkb3dubG9hZC1hbGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhaXNEb3dubG9hZGluZ0FsbFwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLmRvd25hbG9hZEFsbFBkZnMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cImlzRG93bmxvYWRpbmdBbGxcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiMTZcIiBjbGFzcz1cIm1yLTJcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIERvd25sb2FkaW5nXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJndWlkZS1jb250YWluZXJcIiAqbmdJZj1cImNvbnRlbnQ/LnJlZmVyZW5jZU5vZGVzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbm90ZSBvZiBjb250ZW50Py5yZWZlcmVuY2VOb2Rlc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImd1aWRlLWNhcmQgZmxleCBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIiAqbmdJZj1cIm5vdGU/LnJlc291cmNlQ2F0ZWdvcnkgPT09IG5vdGVzRGlzcGxheVR5cGVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZS10aXRsZVwiPnt7bm90ZT8ubmFtZX19PC9kaXY+XHJcbiAgICAgICAgPCEtLSBUbyByZW1vdmUgdmlldyBvcHRpb24gaW4gY2FzZSBvZiBwdWJsaWMgcHJldmlldyBvZiB0b2MgIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlld1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgcHQtMlwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgdmlzaWJpbGl0eVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG5cclxuICAgICAgICAgICAgPGEgKGNsaWNrKT1cInByZXZpZXdDb250ZW50KG5vdGUpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aWV3LXBkZlwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLnZpZXdQREYnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkLWluZFwiPlxyXG4gICAgICAgICAgPGEgKGNsaWNrKT1cImRvd25sb2FkUERGKG5vdGUpXCIgY2xhc3M9XCJkb3dubG9hZC1saW5rIGZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWRvd25sb2FkSW5Qcm9ncmVzc1tub3RlLmlkZW50aWZpZXJdXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2UuZG93bmxvYWRQZGYnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRvd25sb2FkSW5Qcm9ncmVzc1tub3RlLmlkZW50aWZpZXJdXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjE2XCIgY2xhc3M9XCJtci0yXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgICBEb3dubG9hZGluZ1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBObyB0ZWFjaGVycyByZXNvdXJjZXMgbWVzc2FnZSAtLT5cclxuPGRpdiAqbmdJZj1cIiFoYXNUZWFjaGVyUmVzb3VyY2VzKClcIiBjbGFzcz1cIm5vLXJlc291cmNlcy1tZXNzYWdlIG10LTRcIj5cclxuICB7eyAnYXBwdG9jc2luZ2xlcGFnZS5ub1RlYWNoZXJzUmVzb3VyY2VzJyB8IHRyYW5zbGF0ZSB9fVxyXG48L2Rpdj4iXX0=
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { VIEWER_ROUTE_FROM_MIME } from '../../../../_services/viewer-route-util';
|
|
3
|
+
import { NsContent, WsEvents } from '@sunbird-cb/utils-v2';
|
|
4
|
+
import * as fileSaver from 'file-saver';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "@sunbird-cb/utils-v2";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@angular/material/icon";
|
|
10
|
+
import * as i5 from "@angular/material/progress-spinner";
|
|
11
|
+
import * as i6 from "@ngx-translate/core";
|
|
12
|
+
export class AppTocTeachersNotesComponent {
|
|
13
|
+
constructor(router, eventSvc) {
|
|
14
|
+
this.router = router;
|
|
15
|
+
this.eventSvc = eventSvc;
|
|
16
|
+
this.primaryCategory = NsContent.EPrimaryCategory;
|
|
17
|
+
this.downloadInProgress = {};
|
|
18
|
+
this.isDownloadingAll = false;
|
|
19
|
+
this.forPreview = false;
|
|
20
|
+
this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() { }
|
|
23
|
+
raiseDownloadAllTelemetry(subType) {
|
|
24
|
+
const event = {
|
|
25
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
26
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
27
|
+
data: {
|
|
28
|
+
edata: {
|
|
29
|
+
type: "click",
|
|
30
|
+
id: this.notesDisplayType == 'Reference Resource' ? "teachers-note" : "reference-note",
|
|
31
|
+
pageid: `/app/toc/${this.content?.identifier}`,
|
|
32
|
+
subType: subType,
|
|
33
|
+
},
|
|
34
|
+
object: {
|
|
35
|
+
id: this.content?.identifier,
|
|
36
|
+
type: this.content?.courseCategory,
|
|
37
|
+
},
|
|
38
|
+
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
39
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
40
|
+
mode: 'view',
|
|
41
|
+
},
|
|
42
|
+
pageContext: {
|
|
43
|
+
pageId: `/app/toc/${this.content?.identifier}`,
|
|
44
|
+
module: this.notesDisplayType == 'Reference Resource' ? 'Amrit Gyaan Kosh' : 'Learn'
|
|
45
|
+
},
|
|
46
|
+
from: '',
|
|
47
|
+
to: 'Telemetry',
|
|
48
|
+
};
|
|
49
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
50
|
+
}
|
|
51
|
+
downloadPDF(contentData) {
|
|
52
|
+
if (!contentData?.artifactUrl) {
|
|
53
|
+
console.error('No artifact URL provided');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.downloadInProgress[contentData.identifier] = true;
|
|
57
|
+
this.downloadFile(contentData.artifactUrl, contentData.name || 'download', contentData.identifier);
|
|
58
|
+
this.raiseDownloadAllTelemetry('download');
|
|
59
|
+
}
|
|
60
|
+
previewContent(contentData) {
|
|
61
|
+
this.router.navigate([`/app/amrit-gyaan-kosh/player/${VIEWER_ROUTE_FROM_MIME(contentData.mimeType)}/${contentData.identifier}`], {
|
|
62
|
+
queryParams: {
|
|
63
|
+
primaryCategory: this.primaryCategory.RESOURCE,
|
|
64
|
+
playerPreview: true,
|
|
65
|
+
collectionId: this.content.identifier,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
downloadAllContent() {
|
|
70
|
+
if (!this.content?.referenceNodes?.length) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const teacherResources = this.content.referenceNodes.filter((ele) => ele?.resourceCategory === this.notesDisplayType && ele.artifactUrl);
|
|
74
|
+
if (teacherResources.length === 0) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.isDownloadingAll = true;
|
|
78
|
+
let completedCount = 0;
|
|
79
|
+
teacherResources.forEach((ele) => {
|
|
80
|
+
this.downloadInProgress[ele.identifier] = true;
|
|
81
|
+
this.downloadFile(ele.artifactUrl, ele.name || 'download', ele.identifier)
|
|
82
|
+
.finally(() => {
|
|
83
|
+
completedCount++;
|
|
84
|
+
if (completedCount === teacherResources.length) {
|
|
85
|
+
this.isDownloadingAll = false;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
this.raiseDownloadAllTelemetry('download-all');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if any download is currently in progress
|
|
93
|
+
*/
|
|
94
|
+
hasActiveDownloads() {
|
|
95
|
+
return this.isDownloadingAll || Object.values(this.downloadInProgress).some(status => status);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if content has any teacher resources
|
|
99
|
+
*/
|
|
100
|
+
hasTeacherResources() {
|
|
101
|
+
return this.content?.referenceNodes?.some((node) => node?.resourceCategory === this.notesDisplayType) || false;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Download file using multiple methods to ensure compatibility across browsers
|
|
105
|
+
* @returns Promise that resolves when download completes or fails
|
|
106
|
+
*/
|
|
107
|
+
downloadFile(url, fileName, identifier) {
|
|
108
|
+
// Add file extension if missing
|
|
109
|
+
const fileExtension = this.getFileExtension(url);
|
|
110
|
+
if (fileExtension && !fileName.toLowerCase().endsWith(fileExtension.toLowerCase())) {
|
|
111
|
+
fileName = `${fileName}.${fileExtension}`;
|
|
112
|
+
}
|
|
113
|
+
// Return a promise to track completion
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
// Use fetch API instead of HttpClient for better control over the download
|
|
116
|
+
this.downloadInProgress[identifier] = true;
|
|
117
|
+
fetch(url, {
|
|
118
|
+
method: 'GET',
|
|
119
|
+
mode: 'cors',
|
|
120
|
+
})
|
|
121
|
+
.then(response => {
|
|
122
|
+
if (!response.ok) {
|
|
123
|
+
throw new Error('Network response was not ok');
|
|
124
|
+
}
|
|
125
|
+
return response.blob();
|
|
126
|
+
})
|
|
127
|
+
.then(blob => {
|
|
128
|
+
// Create a new blob with the correct MIME type if needed
|
|
129
|
+
const contentType = this.getMimeTypeFromUrl(url);
|
|
130
|
+
const newBlob = new Blob([blob], { type: contentType });
|
|
131
|
+
// Try to save the blob
|
|
132
|
+
this.saveBlob(newBlob, fileName);
|
|
133
|
+
resolve();
|
|
134
|
+
})
|
|
135
|
+
.catch(error => {
|
|
136
|
+
console.error('Fetch download failed:', error);
|
|
137
|
+
// Fallback to XHR which sometimes handles CORS better
|
|
138
|
+
this.downloadWithXHR(url, fileName).finally(resolve);
|
|
139
|
+
})
|
|
140
|
+
.finally(() => {
|
|
141
|
+
this.downloadInProgress[identifier] = false;
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Attempt download using XMLHttpRequest as a fallback
|
|
147
|
+
*/
|
|
148
|
+
downloadWithXHR(url, fileName) {
|
|
149
|
+
return new Promise((resolve) => {
|
|
150
|
+
const xhr = new XMLHttpRequest();
|
|
151
|
+
xhr.open('GET', url, true);
|
|
152
|
+
xhr.responseType = 'blob';
|
|
153
|
+
xhr.onload = () => {
|
|
154
|
+
if (xhr.status === 200) {
|
|
155
|
+
const contentType = xhr.getResponseHeader('Content-Type') || this.getMimeTypeFromUrl(url);
|
|
156
|
+
const blob = new Blob([xhr.response], { type: contentType });
|
|
157
|
+
this.saveBlob(blob, fileName);
|
|
158
|
+
resolve();
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
console.error('XHR download failed, trying direct iframe method');
|
|
162
|
+
this.tryDirectDownload(url, fileName);
|
|
163
|
+
resolve();
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
xhr.onerror = () => {
|
|
167
|
+
console.error('XHR download failed, trying direct iframe method');
|
|
168
|
+
this.tryDirectDownload(url, fileName);
|
|
169
|
+
resolve();
|
|
170
|
+
};
|
|
171
|
+
xhr.send();
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
getFileExtension(url) {
|
|
175
|
+
if (!url)
|
|
176
|
+
return '';
|
|
177
|
+
const urlParts = url.split('.');
|
|
178
|
+
if (urlParts.length > 1) {
|
|
179
|
+
return urlParts[urlParts.length - 1].split(/[?#]/)[0].toLowerCase();
|
|
180
|
+
}
|
|
181
|
+
return '';
|
|
182
|
+
}
|
|
183
|
+
getMimeTypeFromUrl(url) {
|
|
184
|
+
const extension = this.getFileExtension(url);
|
|
185
|
+
switch (extension) {
|
|
186
|
+
case 'pdf':
|
|
187
|
+
return 'application/pdf';
|
|
188
|
+
case 'mp4':
|
|
189
|
+
return 'video/mp4';
|
|
190
|
+
case 'doc':
|
|
191
|
+
case 'docx':
|
|
192
|
+
return 'application/msword';
|
|
193
|
+
case 'xls':
|
|
194
|
+
case 'xlsx':
|
|
195
|
+
return 'application/vnd.ms-excel';
|
|
196
|
+
case 'ppt':
|
|
197
|
+
case 'pptx':
|
|
198
|
+
return 'application/vnd.ms-powerpoint';
|
|
199
|
+
case 'jpg':
|
|
200
|
+
case 'jpeg':
|
|
201
|
+
return 'image/jpeg';
|
|
202
|
+
case 'png':
|
|
203
|
+
return 'image/png';
|
|
204
|
+
default:
|
|
205
|
+
return 'application/octet-stream'; // Default binary mime type
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
saveBlob(blob, fileName) {
|
|
209
|
+
try {
|
|
210
|
+
// For modern browsers using FileSaver
|
|
211
|
+
fileSaver.saveAs(blob, fileName);
|
|
212
|
+
}
|
|
213
|
+
catch (e) {
|
|
214
|
+
console.error('FileSaver failed, trying manual download', e);
|
|
215
|
+
// Manual download fallback
|
|
216
|
+
const url = window.URL.createObjectURL(blob);
|
|
217
|
+
const a = document.createElement('a');
|
|
218
|
+
a.style.display = 'none';
|
|
219
|
+
a.href = url;
|
|
220
|
+
a.download = fileName;
|
|
221
|
+
document.body.appendChild(a);
|
|
222
|
+
a.click();
|
|
223
|
+
window.URL.revokeObjectURL(url);
|
|
224
|
+
document.body.removeChild(a);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
tryDirectDownload(url, fileName) {
|
|
228
|
+
// Use iframe for potentially bypassing CORS issues
|
|
229
|
+
const iframe = document.createElement('iframe');
|
|
230
|
+
iframe.style.display = 'none';
|
|
231
|
+
document.body.appendChild(iframe);
|
|
232
|
+
try {
|
|
233
|
+
// Construct a download URL
|
|
234
|
+
const downloadUrl = url + (url.indexOf('?') === -1 ? '?' : '&') + 'download=true';
|
|
235
|
+
// Create a link inside the iframe and click it
|
|
236
|
+
const doc = iframe.contentDocument || iframe.contentWindow?.document;
|
|
237
|
+
if (doc) {
|
|
238
|
+
const a = doc.createElement('a');
|
|
239
|
+
a.href = downloadUrl;
|
|
240
|
+
a.download = fileName;
|
|
241
|
+
a.style.display = 'none';
|
|
242
|
+
doc.body.appendChild(a);
|
|
243
|
+
a.click();
|
|
244
|
+
doc.body.removeChild(a);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (e) {
|
|
248
|
+
console.error('Iframe download approach failed:', e);
|
|
249
|
+
// Last resort - try download attribute on anchor tag
|
|
250
|
+
const a = document.createElement('a');
|
|
251
|
+
a.href = url;
|
|
252
|
+
a.download = fileName;
|
|
253
|
+
a.target = '_self'; // Important: use _self instead of _blank
|
|
254
|
+
document.body.appendChild(a);
|
|
255
|
+
a.click();
|
|
256
|
+
document.body.removeChild(a);
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
// Clean up the iframe
|
|
260
|
+
setTimeout(() => {
|
|
261
|
+
if (document.body.contains(iframe)) {
|
|
262
|
+
document.body.removeChild(iframe);
|
|
263
|
+
}
|
|
264
|
+
}, 1000);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocTeachersNotesComponent, deps: [{ token: i1.Router }, { token: i2.EventService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
268
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: { content: "content", notesDisplayType: "notesDisplayType" }, ngImport: i0, template: "<div class=\"flex justify-between items-center\">\n <div class=\"teachers-note-header\">{{ 'apptocsinglepage.teachersNoteHeading' | translate }}</div>\n <div>\n <button [disabled]=\"hasActiveDownloads()\" (click)=\"downloadAllContent()\" class=\"download-all flex items-center\">\n <span *ngIf=\"!isDownloadingAll\">{{ 'apptocsinglepage.downaloadAllPdfs' | translate }}</span>\n <span *ngIf=\"isDownloadingAll\" class=\"flex items-center\">\n <mat-spinner diameter=\"16\" class=\"mr-2\"></mat-spinner>\n Downloading\n </span>\n </button>\n </div>\n</div>\n\n<div class=\"guide-container\" *ngIf=\"content?.referenceNodes\">\n <ng-container *ngFor=\"let note of content?.referenceNodes\">\n <div class=\"guide-card flex gap-4 justify-between\" *ngIf=\"note?.resourceCategory === notesDisplayType\">\n <div class=\"flex flex-col justify-center\">\n <div class=\"note-title\">{{note?.name}}</div>\n <!-- To remove view option in case of public preview of toc -->\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex gap-2 pt-2\">\n <mat-icon class=\"material-symbols-outlined\">\n visibility\n </mat-icon>\n\n <a (click)=\"previewContent(note)\">\n <span class=\"view-pdf\">{{ 'apptocsinglepage.viewPDF' | translate }}</span>\n </a>\n </div>\n </ng-container>\n </div>\n <div>\n <div class=\"download-ind\">\n <a (click)=\"downloadPDF(note)\" class=\"download-link flex items-center\">\n <span *ngIf=\"!downloadInProgress[note.identifier]\">{{ 'apptocsinglepage.downloadPdf' | translate }}</span>\n <span *ngIf=\"downloadInProgress[note.identifier]\" class=\"flex items-center\">\n <mat-spinner diameter=\"16\" class=\"mr-2\"></mat-spinner>\n Downloading\n </span>\n </a>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n\n<!-- No teachers resources message -->\n<div *ngIf=\"!hasTeacherResources()\" class=\"no-resources-message mt-4\">\n {{ 'apptocsinglepage.noTeachersResources' | translate }}\n</div>", styles: [".teachers-note-header{font-family:Lato;font-size:14px;font-weight:400;line-height:16.8px;text-align:left;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}.download-all{padding:0 16px;font-family:Lato;font-size:14px;font-weight:700;line-height:16.8px;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;color:#1b4ca1;cursor:pointer;background:transparent;border:none}.guide-container .view-pdf{font-size:14px;cursor:pointer;opacity:.8;color:#000}.guide-container .note-title{font-family:Lato;font-size:16px;font-weight:700;line-height:24px;text-align:left;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;color:#1b4ca1}.guide-container .guide-card{border-radius:8px;background-color:#fff;padding:16px;margin:16px 0}.guide-container .download-ind{padding:12px 16px;font-family:Lato;font-size:14px;font-weight:700;line-height:16.8px;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;color:#1b4ca1;cursor:pointer;border-radius:40px;border-color:1px solid #c3c3c3}.download-btn,.download-link{cursor:pointer;transition:opacity .2s ease}.download-btn:disabled,.download-link:disabled{opacity:.6;cursor:not-allowed}.download-link{display:inline-flex;align-items:center}.no-resources-message{color:#666;font-style:italic;padding:1rem 0}mat-spinner{display:inline-block;vertical-align:middle;margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
|
|
269
|
+
}
|
|
270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocTeachersNotesComponent, decorators: [{
|
|
271
|
+
type: Component,
|
|
272
|
+
args: [{ selector: 'ws-widget-app-toc-teachers-notes', template: "<div class=\"flex justify-between items-center\">\n <div class=\"teachers-note-header\">{{ 'apptocsinglepage.teachersNoteHeading' | translate }}</div>\n <div>\n <button [disabled]=\"hasActiveDownloads()\" (click)=\"downloadAllContent()\" class=\"download-all flex items-center\">\n <span *ngIf=\"!isDownloadingAll\">{{ 'apptocsinglepage.downaloadAllPdfs' | translate }}</span>\n <span *ngIf=\"isDownloadingAll\" class=\"flex items-center\">\n <mat-spinner diameter=\"16\" class=\"mr-2\"></mat-spinner>\n Downloading\n </span>\n </button>\n </div>\n</div>\n\n<div class=\"guide-container\" *ngIf=\"content?.referenceNodes\">\n <ng-container *ngFor=\"let note of content?.referenceNodes\">\n <div class=\"guide-card flex gap-4 justify-between\" *ngIf=\"note?.resourceCategory === notesDisplayType\">\n <div class=\"flex flex-col justify-center\">\n <div class=\"note-title\">{{note?.name}}</div>\n <!-- To remove view option in case of public preview of toc -->\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex gap-2 pt-2\">\n <mat-icon class=\"material-symbols-outlined\">\n visibility\n </mat-icon>\n\n <a (click)=\"previewContent(note)\">\n <span class=\"view-pdf\">{{ 'apptocsinglepage.viewPDF' | translate }}</span>\n </a>\n </div>\n </ng-container>\n </div>\n <div>\n <div class=\"download-ind\">\n <a (click)=\"downloadPDF(note)\" class=\"download-link flex items-center\">\n <span *ngIf=\"!downloadInProgress[note.identifier]\">{{ 'apptocsinglepage.downloadPdf' | translate }}</span>\n <span *ngIf=\"downloadInProgress[note.identifier]\" class=\"flex items-center\">\n <mat-spinner diameter=\"16\" class=\"mr-2\"></mat-spinner>\n Downloading\n </span>\n </a>\n </div>\n </div>\n </div>\n </ng-container>\n</div>\n\n<!-- No teachers resources message -->\n<div *ngIf=\"!hasTeacherResources()\" class=\"no-resources-message mt-4\">\n {{ 'apptocsinglepage.noTeachersResources' | translate }}\n</div>", styles: [".teachers-note-header{font-family:Lato;font-size:14px;font-weight:400;line-height:16.8px;text-align:left;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}.download-all{padding:0 16px;font-family:Lato;font-size:14px;font-weight:700;line-height:16.8px;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;color:#1b4ca1;cursor:pointer;background:transparent;border:none}.guide-container .view-pdf{font-size:14px;cursor:pointer;opacity:.8;color:#000}.guide-container .note-title{font-family:Lato;font-size:16px;font-weight:700;line-height:24px;text-align:left;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;color:#1b4ca1}.guide-container .guide-card{border-radius:8px;background-color:#fff;padding:16px;margin:16px 0}.guide-container .download-ind{padding:12px 16px;font-family:Lato;font-size:14px;font-weight:700;line-height:16.8px;text-underline-position:from-font;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;color:#1b4ca1;cursor:pointer;border-radius:40px;border-color:1px solid #c3c3c3}.download-btn,.download-link{cursor:pointer;transition:opacity .2s ease}.download-btn:disabled,.download-link:disabled{opacity:.6;cursor:not-allowed}.download-link{display:inline-flex;align-items:center}.no-resources-message{color:#666;font-style:italic;padding:1rem 0}mat-spinner{display:inline-block;vertical-align:middle;margin-right:8px}\n"] }]
|
|
273
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.EventService }]; }, propDecorators: { content: [{
|
|
274
|
+
type: Input
|
|
275
|
+
}], notesDisplayType: [{
|
|
276
|
+
type: Input
|
|
277
|
+
}] } });
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzL2FwcC10b2MtdGVhY2hlcnMtbm90ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFBO0FBRXhELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ2hGLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3hFLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFBOzs7Ozs7OztBQVF2QyxNQUFNLE9BQU8sNEJBQTRCO0lBU3ZDLFlBQW1CLE1BQWMsRUFDeEIsUUFBc0I7UUFEWixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFOL0Isb0JBQWUsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUE7UUFDNUMsdUJBQWtCLEdBQStCLEVBQUUsQ0FBQTtRQUNuRCxxQkFBZ0IsR0FBRyxLQUFLLENBQUE7UUFDeEIsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUtoQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFV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QUUsQ0FBQyxDQUFDLENBQUE7WUFFcEQscURBQXFEO1lBQ3JELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDckMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7WUFDWixDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtZQUNyQixDQUFDLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQSxDQUFDLHlDQUF5QztZQUM1RCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUM1QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDVCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUM3QjtnQkFBUztZQUNSLHNCQUFzQjtZQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2lCQUNsQztZQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtTQUNUO0lBQ0gsQ0FBQzsrR0E5UlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsOElDWnpDLDZvRUFpRE07OzRGRHJDTyw0QkFBNEI7a0JBTnhDLFNBQVM7K0JBQ0Usa0NBQWtDO3dIQU9uQyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7IFZJRVdFUl9ST1VURV9GUk9NX01JTUUgfSBmcm9tICcuLi8uLi8uLi8uLi9fc2VydmljZXMvdmlld2VyLXJvdXRlLXV0aWwnXG5pbXBvcnQgeyBFdmVudFNlcnZpY2UsIE5zQ29udGVudCwgV3NFdmVudHMgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcbmltcG9ydCAqIGFzIGZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtYXBwLXRvYy10ZWFjaGVycy1ub3RlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy5jb21wb25lbnQuc2NzcyddLFxufSlcblxuZXhwb3J0IGNsYXNzIEFwcFRvY1RlYWNoZXJzTm90ZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBOc0NvbnRlbnQuSUNvbnRlbnRcbiAgQElucHV0KCkgbm90ZXNEaXNwbGF5VHlwZSE6IHN0cmluZ1xuICBwcmltYXJ5Q2F0ZWdvcnkgPSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeVxuICBkb3dubG9hZEluUHJvZ3Jlc3M6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cbiAgaXNEb3dubG9hZGluZ0FsbCA9IGZhbHNlXG4gIGZvclByZXZpZXcgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5mb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7IH1cblxuICByYWlzZURvd25sb2FkQWxsVGVsZW1ldHJ5KHN1YlR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImNsaWNrXCIsXG4gICAgICAgICAgaWQ6IHRoaXMubm90ZXNEaXNwbGF5VHlwZSA9PSAnUmVmZXJlbmNlIFJlc291cmNlJyA/IFwidGVhY2hlcnMtbm90ZVwiIDogXCJyZWZlcmVuY2Utbm90ZVwiLFxuICAgICAgICAgIHBhZ2VpZDogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAsXG4gICAgICAgICAgc3ViVHlwZTogc3ViVHlwZSxcbiAgICAgICAgfSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgaWQ6IHRoaXMuY29udGVudD8uaWRlbnRpZmllcixcbiAgICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5LFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7XG4gICAgICAgIHBhZ2VJZDogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAsXG4gICAgICAgIG1vZHVsZTogdGhpcy5ub3Rlc0Rpc3BsYXlUeXBlID09ICdSZWZlcmVuY2UgUmVzb3VyY2UnID8gJ0Ftcml0IEd5YWFuIEtvc2gnIDogJ0xlYXJuJ1xuICAgICAgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgZG93bmxvYWRQREYoY29udGVudERhdGE6IGFueSkge1xuICAgIGlmICghY29udGVudERhdGE/LmFydGlmYWN0VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBhcnRpZmFjdCBVUkwgcHJvdmlkZWQnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3NbY29udGVudERhdGEuaWRlbnRpZmllcl0gPSB0cnVlXG4gICAgdGhpcy5kb3dubG9hZEZpbGUoY29udGVudERhdGEuYXJ0aWZhY3RVcmwsIGNvbnRlbnREYXRhLm5hbWUgfHwgJ2Rvd25sb2FkJywgY29udGVudERhdGEuaWRlbnRpZmllcilcbiAgICB0aGlzLnJhaXNlRG93bmxvYWRBbGxUZWxlbWV0cnkoJ2Rvd25sb2FkJylcbiAgfVxuXG4gIHByZXZpZXdDb250ZW50KGNvbnRlbnREYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9hcHAvYW1yaXQtZ3lhYW4ta29zaC9wbGF5ZXIvJHtWSUVXRVJfUk9VVEVfRlJPTV9NSU1FKGNvbnRlbnREYXRhLm1pbWVUeXBlKX0vJHtjb250ZW50RGF0YS5pZGVudGlmaWVyfWBdLCB7XG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IHRoaXMucHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFLFxuICAgICAgICBwbGF5ZXJQcmV2aWV3OiB0cnVlLFxuICAgICAgICBjb2xsZWN0aW9uSWQ6IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgZG93bmxvYWRBbGxDb250ZW50KCkge1xuICAgIGlmICghdGhpcy5jb250ZW50Py5yZWZlcmVuY2VOb2Rlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0ZWFjaGVyUmVzb3VyY2VzID0gdGhpcy5jb250ZW50LnJlZmVyZW5jZU5vZGVzLmZpbHRlcihcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5yZXNvdXJjZUNhdGVnb3J5ID09PSB0aGlzLm5vdGVzRGlzcGxheVR5cGUgJiYgZWxlLmFydGlmYWN0VXJsXG4gICAgKVxuXG4gICAgaWYgKHRlYWNoZXJSZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmlzRG93bmxvYWRpbmdBbGwgPSB0cnVlXG4gICAgbGV0IGNvbXBsZXRlZENvdW50ID0gMFxuXG4gICAgdGVhY2hlclJlc291cmNlcy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3NbZWxlLmlkZW50aWZpZXJdID0gdHJ1ZVxuICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZWxlLmFydGlmYWN0VXJsLCBlbGUubmFtZSB8fCAnZG93bmxvYWQnLCBlbGUuaWRlbnRpZmllcilcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGNvbXBsZXRlZENvdW50KytcbiAgICAgICAgICBpZiAoY29tcGxldGVkQ291bnQgPT09IHRlYWNoZXJSZXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzRG93bmxvYWRpbmdBbGwgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9KVxuICAgIHRoaXMucmFpc2VEb3dubG9hZEFsbFRlbGVtZXRyeSgnZG93bmxvYWQtYWxsJylcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbnkgZG93bmxvYWQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzXG4gICAqL1xuICBoYXNBY3RpdmVEb3dubG9hZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEb3dubG9hZGluZ0FsbCB8fCBPYmplY3QudmFsdWVzKHRoaXMuZG93bmxvYWRJblByb2dyZXNzKS5zb21lKHN0YXR1cyA9PiBzdGF0dXMpXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY29udGVudCBoYXMgYW55IHRlYWNoZXIgcmVzb3VyY2VzXG4gICAqL1xuICBoYXNUZWFjaGVyUmVzb3VyY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ/LnJlZmVyZW5jZU5vZGVzPy5zb21lKChub2RlOiBhbnkpID0+IG5vZGU/LnJlc291cmNlQ2F0ZWdvcnkgPT09IHRoaXMubm90ZXNEaXNwbGF5VHlwZSkgfHwgZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBmaWxlIHVzaW5nIG11bHRpcGxlIG1ldGhvZHMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgYWNyb3NzIGJyb3dzZXJzXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGRvd25sb2FkIGNvbXBsZXRlcyBvciBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEFkZCBmaWxlIGV4dGVuc2lvbiBpZiBtaXNzaW5nXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IHRoaXMuZ2V0RmlsZUV4dGVuc2lvbih1cmwpXG4gICAgaWYgKGZpbGVFeHRlbnNpb24gJiYgIWZpbGVOYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZmlsZUV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgZmlsZU5hbWUgPSBgJHtmaWxlTmFtZX0uJHtmaWxlRXh0ZW5zaW9ufWBcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBwcm9taXNlIHRvIHRyYWNrIGNvbXBsZXRpb25cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIFVzZSBmZXRjaCBBUEkgaW5zdGVhZCBvZiBIdHRwQ2xpZW50IGZvciBiZXR0ZXIgY29udHJvbCBvdmVyIHRoZSBkb3dubG9hZFxuICAgICAgdGhpcy5kb3dubG9hZEluUHJvZ3Jlc3NbaWRlbnRpZmllcl0gPSB0cnVlXG5cbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBtb2RlOiAnY29ycycsXG4gICAgICB9KVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2snKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYmxvYigpXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibG9iIHdpdGggdGhlIGNvcnJlY3QgTUlNRSB0eXBlIGlmIG5lZWRlZFxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5nZXRNaW1lVHlwZUZyb21VcmwodXJsKVxuICAgICAgICAgIGNvbnN0IG5ld0Jsb2IgPSBuZXcgQmxvYihbYmxvYl0sIHsgdHlwZTogY29udGVudFR5cGUgfSlcblxuICAgICAgICAgIC8vIFRyeSB0byBzYXZlIHRoZSBibG9iXG4gICAgICAgICAgdGhpcy5zYXZlQmxvYihuZXdCbG9iLCBmaWxlTmFtZSlcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGZXRjaCBkb3dubG9hZCBmYWlsZWQ6JywgZXJyb3IpXG5cbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBYSFIgd2hpY2ggc29tZXRpbWVzIGhhbmRsZXMgQ09SUyBiZXR0ZXJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkV2l0aFhIUih1cmwsIGZpbGVOYW1lKS5maW5hbGx5KHJlc29sdmUpXG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRvd25sb2FkSW5Qcm9ncmVzc1tpZGVudGlmaWVyXSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IGRvd25sb2FkIHVzaW5nIFhNTEh0dHBSZXF1ZXN0IGFzIGEgZmFsbGJhY2tcbiAgICovXG4gIHByaXZhdGUgZG93bmxvYWRXaXRoWEhSKHVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSlcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcblxuICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LVR5cGUnKSB8fCB0aGlzLmdldE1pbWVUeXBlRnJvbVVybCh1cmwpXG4gICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt4aHIucmVzcG9uc2VdLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pXG4gICAgICAgICAgdGhpcy5zYXZlQmxvYihibG9iLCBmaWxlTmFtZSlcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdYSFIgZG93bmxvYWQgZmFpbGVkLCB0cnlpbmcgZGlyZWN0IGlmcmFtZSBtZXRob2QnKVxuICAgICAgICAgIHRoaXMudHJ5RGlyZWN0RG93bmxvYWQodXJsLCBmaWxlTmFtZSlcbiAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB4aHIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignWEhSIGRvd25sb2FkIGZhaWxlZCwgdHJ5aW5nIGRpcmVjdCBpZnJhbWUgbWV0aG9kJylcbiAgICAgICAgdGhpcy50cnlEaXJlY3REb3dubG9hZCh1cmwsIGZpbGVOYW1lKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQoKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVFeHRlbnNpb24odXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdXJsKSByZXR1cm4gJydcblxuICAgIGNvbnN0IHVybFBhcnRzID0gdXJsLnNwbGl0KCcuJylcbiAgICBpZiAodXJsUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIHVybFBhcnRzW3VybFBhcnRzLmxlbmd0aCAtIDFdLnNwbGl0KC9bPyNdLylbMF0udG9Mb3dlckNhc2UoKVxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWltZVR5cGVGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSB0aGlzLmdldEZpbGVFeHRlbnNpb24odXJsKVxuXG4gICAgc3dpdGNoIChleHRlbnNpb24pIHtcbiAgICAgIGNhc2UgJ3BkZic6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vcGRmJ1xuICAgICAgY2FzZSAnbXA0JzpcbiAgICAgICAgcmV0dXJuICd2aWRlby9tcDQnXG4gICAgICBjYXNlICdkb2MnOlxuICAgICAgY2FzZSAnZG9jeCc6XG4gICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vbXN3b3JkJ1xuICAgICAgY2FzZSAneGxzJzpcbiAgICAgIGNhc2UgJ3hsc3gnOlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCdcbiAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICBjYXNlICdwcHR4JzpcbiAgICAgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCdcbiAgICAgIGNhc2UgJ2pwZyc6XG4gICAgICBjYXNlICdqcGVnJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS9qcGVnJ1xuICAgICAgY2FzZSAncG5nJzpcbiAgICAgICAgcmV0dXJuICdpbWFnZS9wbmcnXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgLy8gRGVmYXVsdCBiaW5hcnkgbWltZSB0eXBlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlQmxvYihibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvciBtb2Rlcm4gYnJvd3NlcnMgdXNpbmcgRmlsZVNhdmVyXG4gICAgICBmaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGVTYXZlciBmYWlsZWQsIHRyeWluZyBtYW51YWwgZG93bmxvYWQnLCBlKVxuXG4gICAgICAvLyBNYW51YWwgZG93bmxvYWQgZmFsbGJhY2tcbiAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGEuaHJlZiA9IHVybFxuICAgICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyeURpcmVjdERvd25sb2FkKHVybDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVXNlIGlmcmFtZSBmb3IgcG90ZW50aWFsbHkgYnlwYXNzaW5nIENPUlMgaXNzdWVzXG4gICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJylcbiAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnN0cnVjdCBhIGRvd25sb2FkIFVSTFxuICAgICAgY29uc3QgZG93bmxvYWRVcmwgPSB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgJ2Rvd25sb2FkPXRydWUnXG5cbiAgICAgIC8vIENyZWF0ZSBhIGxpbmsgaW5zaWRlIHRoZSBpZnJhbWUgYW5kIGNsaWNrIGl0XG4gICAgICBjb25zdCBkb2MgPSBpZnJhbWUuY29udGVudERvY3VtZW50IHx8IGlmcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudFxuICAgICAgaWYgKGRvYykge1xuICAgICAgICBjb25zdCBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgICBhLmhyZWYgPSBkb3dubG9hZFVybFxuICAgICAgICBhLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICAgIGEuY2xpY2soKVxuICAgICAgICBkb2MuYm9keS5yZW1vdmVDaGlsZChhKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lmcmFtZSBkb3dubG9hZCBhcHByb2FjaCBmYWlsZWQ6JywgZSlcblxuICAgICAgLy8gTGFzdCByZXNvcnQgLSB0cnkgZG93bmxvYWQgYXR0cmlidXRlIG9uIGFuY2hvciB0YWdcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IHVybFxuICAgICAgYS5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBhLnRhcmdldCA9ICdfc2VsZicgLy8gSW1wb3J0YW50OiB1c2UgX3NlbGYgaW5zdGVhZCBvZiBfYmxhbmtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhbiB1cCB0aGUgaWZyYW1lXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoaWZyYW1lKSkge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1lKVxuICAgICAgICB9XG4gICAgICB9LCAxMDAwKVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICA8ZGl2IGNsYXNzPVwidGVhY2hlcnMtbm90ZS1oZWFkZXJcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS50ZWFjaGVyc05vdGVIZWFkaW5nJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImhhc0FjdGl2ZURvd25sb2FkcygpXCIgKGNsaWNrKT1cImRvd25sb2FkQWxsQ29udGVudCgpXCIgY2xhc3M9XCJkb3dubG9hZC1hbGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiIWlzRG93bmxvYWRpbmdBbGxcIj57eyAnYXBwdG9jc2luZ2xlcGFnZS5kb3duYWxvYWRBbGxQZGZzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXNEb3dubG9hZGluZ0FsbFwiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiMTZcIiBjbGFzcz1cIm1yLTJcIj48L21hdC1zcGlubmVyPlxuICAgICAgICBEb3dubG9hZGluZ1xuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZ3VpZGUtY29udGFpbmVyXCIgKm5nSWY9XCJjb250ZW50Py5yZWZlcmVuY2VOb2Rlc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub3RlIG9mIGNvbnRlbnQ/LnJlZmVyZW5jZU5vZGVzXCI+XG4gICAgPGRpdiBjbGFzcz1cImd1aWRlLWNhcmQgZmxleCBnYXAtNCBqdXN0aWZ5LWJldHdlZW5cIiAqbmdJZj1cIm5vdGU/LnJlc291cmNlQ2F0ZWdvcnkgPT09IG5vdGVzRGlzcGxheVR5cGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RlLXRpdGxlXCI+e3tub3RlPy5uYW1lfX08L2Rpdj5cbiAgICAgICAgPCEtLSBUbyByZW1vdmUgdmlldyBvcHRpb24gaW4gY2FzZSBvZiBwdWJsaWMgcHJldmlldyBvZiB0b2MgIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvclByZXZpZXdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBwdC0yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgIHZpc2liaWxpdHlcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICAgIDxhIChjbGljayk9XCJwcmV2aWV3Q29udGVudChub3RlKVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpZXctcGRmXCI+e3sgJ2FwcHRvY3NpbmdsZXBhZ2Uudmlld1BERicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bmxvYWQtaW5kXCI+XG4gICAgICAgICAgPGEgKGNsaWNrKT1cImRvd25sb2FkUERGKG5vdGUpXCIgY2xhc3M9XCJkb3dubG9hZC1saW5rIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFkb3dubG9hZEluUHJvZ3Jlc3Nbbm90ZS5pZGVudGlmaWVyXVwiPnt7ICdhcHB0b2NzaW5nbGVwYWdlLmRvd25sb2FkUGRmJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZG93bmxvYWRJblByb2dyZXNzW25vdGUuaWRlbnRpZmllcl1cIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjE2XCIgY2xhc3M9XCJtci0yXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgRG93bmxvYWRpbmdcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjwhLS0gTm8gdGVhY2hlcnMgcmVzb3VyY2VzIG1lc3NhZ2UgLS0+XG48ZGl2ICpuZ0lmPVwiIWhhc1RlYWNoZXJSZXNvdXJjZXMoKVwiIGNsYXNzPVwibm8tcmVzb3VyY2VzLW1lc3NhZ2UgbXQtNFwiPlxuICB7eyAnYXBwdG9jc2luZ2xlcGFnZS5ub1RlYWNoZXJzUmVzb3VyY2VzJyB8IHRyYW5zbGF0ZSB9fVxuPC9kaXY+Il19
|