@sunbird-cb/toc 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +248 -225
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1148 -1030
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
- package/esm2022/lib/_collection-api.mjs +57 -57
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
- package/esm2022/lib/_models/common.model.mjs +2 -2
- package/esm2022/lib/_models/error.model.mjs +2 -2
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
- package/esm2022/lib/_services/rating.service.mjs +89 -89
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
- package/esm2022/lib/_services/widget-content.model.mjs +247 -247
- package/esm2022/lib/_services/widget-content.service.mjs +594 -594
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
- package/esm2022/lib/app-toc-lib.module.mjs +499 -499
- package/esm2022/lib/collection.config.mjs +161 -161
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2907 -2905
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
- package/esm2022/lib/models/app-toc.model.mjs +38 -38
- package/esm2022/lib/models/auto-complete.model.mjs +2 -2
- package/esm2022/lib/models/card-content.model.mjs +13 -13
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
- package/esm2022/lib/models/goal.model.mjs +2 -2
- package/esm2022/lib/models/meta-tag.model.mjs +8 -8
- package/esm2022/lib/models/playlist.model.mjs +2 -2
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
- package/esm2022/lib/models/rating.model.mjs +2 -2
- package/esm2022/lib/models/user-profile.model.mjs +21 -21
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
- package/esm2022/lib/services/access-control.service.mjs +56 -56
- package/esm2022/lib/services/action.service.mjs +23 -23
- package/esm2022/lib/services/app-toc-v2.service.mjs +313 -243
- package/esm2022/lib/services/app-toc.service.mjs +1613 -1387
- package/esm2022/lib/services/certificate.service.mjs +69 -69
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
- package/esm2022/lib/services/editor.service.mjs +34 -34
- package/esm2022/lib/services/load-check.service.mjs +21 -21
- package/esm2022/lib/services/loader.service.mjs +33 -33
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
- package/esm2022/lib/services/netcore.service.mjs +56 -56
- package/esm2022/lib/services/nps-grid.service.mjs +31 -31
- package/esm2022/lib/services/otp.service.mjs +43 -43
- package/esm2022/lib/services/profile-v2.service.mjs +43 -43
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
- package/esm2022/lib/services/timer.service.mjs +23 -23
- package/esm2022/lib/services/title-tag.service.mjs +71 -71
- package/esm2022/lib/services/user-profile.service.mjs +55 -55
- package/esm2022/lib/services/viewer-data.service.mjs +64 -64
- package/esm2022/lib/services/viewer-util.service.mjs +590 -500
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
- package/esm2022/public-api.mjs +71 -70
- package/esm2022/sunbird-cb-toc.mjs +4 -4
- package/fesm2022/sunbird-cb-toc.mjs +24777 -24250
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -16
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -31
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -15
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -20
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -22
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -15
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +22 -22
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +22 -22
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -9
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -11
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -12
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -18
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -14
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -11
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -17
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -14
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -199
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -16
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -10
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -38
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -19
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -11
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +183 -183
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -41
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -54
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -47
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -48
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +171 -154
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -8
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -16
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -40
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -21
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -45
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -10
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -10
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +128 -128
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +51 -51
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +29 -29
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -9
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -7
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -7
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -28
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -24
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -14
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -9
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -12
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -10
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -22
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -8
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -18
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -8
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -15
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -35
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -19
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -14
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -13
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -11
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -11
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -15
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -10
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -16
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -11
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -34
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -17
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -15
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -15
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -21
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -12
- package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -21
- package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -9
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -47
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -14
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -22
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -19
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -15
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +25 -25
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -21
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -18
- package/lib/_collection-api.d.ts +34 -34
- package/lib/_constants/widget-content.constants.d.ts +7 -7
- package/lib/_directives/tooltip.directive.d.ts +17 -17
- package/lib/_models/common.model.d.ts +3 -3
- package/lib/_models/error.model.d.ts +5 -5
- package/lib/_pipes/highlight.pipe.d.ts +10 -10
- package/lib/_services/rating.service.d.ts +18 -18
- package/lib/_services/samuhik-charcha.service.d.ts +13 -13
- package/lib/_services/viewer-route-util.d.ts +8 -8
- package/lib/_services/widget-content.model.d.ts +515 -515
- package/lib/_services/widget-content.service.d.ts +101 -101
- package/lib/_shared/translate-loader.factory.d.ts +7 -7
- package/lib/app-toc-lib.module.d.ts +88 -88
- package/lib/collection.config.d.ts +159 -159
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -17
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -225
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +78 -78
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -22
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -31
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -47
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -14
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -21
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +314 -314
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +408 -408
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -47
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -22
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -14
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -149
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -42
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -27
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -15
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +195 -195
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -44
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -54
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -18
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +43 -43
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -20
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -13
- package/lib/models/app-toc-analytics.model.d.ts +152 -152
- package/lib/models/app-toc.model.d.ts +84 -84
- package/lib/models/auto-complete.model.d.ts +27 -27
- package/lib/models/card-content.model.d.ts +19 -19
- package/lib/models/content-strip-with-tabs.model.d.ts +44 -44
- package/lib/models/discussion-forum.model.d.ts +40 -40
- package/lib/models/goal.model.d.ts +22 -22
- package/lib/models/meta-tag.model.d.ts +6 -6
- package/lib/models/playlist.model.d.ts +23 -23
- package/lib/models/profile-revamp.model.d.ts +14 -14
- package/lib/models/rating.model.d.ts +17 -17
- package/lib/models/user-profile.model.d.ts +37 -37
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -16
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -12
- package/lib/resolvers/app-toc-resolver.service.d.ts +16 -16
- package/lib/resolvers/config-resolver.service.d.ts +11 -11
- package/lib/resolvers/profile-resolver.service.d.ts +11 -11
- package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -11
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -19
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -8
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -8
- package/lib/services/access-control.service.d.ts +29 -29
- package/lib/services/action.service.d.ts +9 -9
- package/lib/services/app-toc-v2.service.d.ts +16 -14
- package/lib/services/app-toc.service.d.ts +235 -177
- package/lib/services/certificate.service.d.ts +42 -42
- package/lib/services/discuss-utils.service.d.ts +33 -33
- package/lib/services/editor.service.d.ts +17 -17
- package/lib/services/load-check.service.d.ts +8 -8
- package/lib/services/loader.service.d.ts +16 -16
- package/lib/services/mobile-apps.service.d.ts +38 -38
- package/lib/services/netcore.service.d.ts +33 -33
- package/lib/services/nps-grid.service.d.ts +15 -15
- package/lib/services/otp.service.d.ts +20 -20
- package/lib/services/profile-v2.service.d.ts +20 -20
- package/lib/services/reset-ratings.service.d.ts +8 -8
- package/lib/services/resource-download-helper.service.d.ts +29 -29
- package/lib/services/timer.service.d.ts +9 -9
- package/lib/services/title-tag.service.d.ts +21 -21
- package/lib/services/user-profile.service.d.ts +24 -24
- package/lib/services/viewer-data.service.d.ts +58 -58
- package/lib/services/viewer-util.service.d.ts +76 -62
- package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -56
- package/lib/share-toc/share-toc.module.d.ts +32 -32
- package/package.json +1 -1
- package/public-api.d.ts +56 -55
|
@@ -1,327 +1,327 @@
|
|
|
1
|
-
// app-toc-assignment-viewerV2.component.ts
|
|
2
|
-
import { Component, Inject } from '@angular/core';
|
|
3
|
-
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
-
import { ConfirmationDialogComponent } from '@sunbird-cb/consumption';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/router";
|
|
7
|
-
import * as i2 from "../../../../services/app-toc.service";
|
|
8
|
-
import * as i3 from "@sunbird-cb/utils-v2";
|
|
9
|
-
import * as i4 from "@angular/platform-browser";
|
|
10
|
-
import * as i5 from "@angular/material/dialog";
|
|
11
|
-
import * as i6 from "@angular/material/legacy-dialog";
|
|
12
|
-
import * as i7 from "@angular/material/legacy-snack-bar";
|
|
13
|
-
import * as i8 from "@angular/common";
|
|
14
|
-
import * as i9 from "@angular/material/icon";
|
|
15
|
-
import * as i10 from "@angular/material/progress-spinner";
|
|
16
|
-
import * as i11 from "@ngx-translate/core";
|
|
17
|
-
export class AssignmentViewerV2Component {
|
|
18
|
-
constructor(router, tocSvc, configSvc, sanitizer, dialogRef, data, dialogLegacy, snackBar) {
|
|
19
|
-
this.router = router;
|
|
20
|
-
this.tocSvc = tocSvc;
|
|
21
|
-
this.configSvc = configSvc;
|
|
22
|
-
this.sanitizer = sanitizer;
|
|
23
|
-
this.dialogRef = dialogRef;
|
|
24
|
-
this.data = data;
|
|
25
|
-
this.dialogLegacy = dialogLegacy;
|
|
26
|
-
this.snackBar = snackBar;
|
|
27
|
-
// Properties for file preview
|
|
28
|
-
this.safeSrc = null;
|
|
29
|
-
this.fileBlob = null;
|
|
30
|
-
this.fileUrl = '';
|
|
31
|
-
this.fileType = '';
|
|
32
|
-
this.fileName = '';
|
|
33
|
-
this.isLoading = false;
|
|
34
|
-
this.error = false;
|
|
35
|
-
this.errorMessage = '';
|
|
36
|
-
this.showPdfViewer = false;
|
|
37
|
-
this.showDownloadOption = false;
|
|
38
|
-
this.documentNotSupported = false;
|
|
39
|
-
}
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
if (this.data.url) {
|
|
42
|
-
const urlParts = this.data.url.split('/');
|
|
43
|
-
this.fileName = urlParts[urlParts.length - 1];
|
|
44
|
-
this.fileName = this.fileName.split('?')[0];
|
|
45
|
-
this.fileName = decodeURIComponent(this.fileName);
|
|
46
|
-
this.fileType = this.getFileType(this.fileName);
|
|
47
|
-
this.readFile();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
readFile() {
|
|
51
|
-
if (!this.data.contentId) {
|
|
52
|
-
this.handleError('Content ID is missing');
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
if (!this.data.batchId) {
|
|
56
|
-
this.handleError('Batch ID is missing');
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
if (!this.data.assessment?.id) {
|
|
60
|
-
this.handleError('Assignment ID is missing');
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (!this.fileName) {
|
|
64
|
-
this.handleError('File name is missing');
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
this.isLoading = true;
|
|
68
|
-
this.error = false;
|
|
69
|
-
this.tocSvc.readAssignmentFile(this.data.contentId, this.data.batchId, this.data.assessment.formId, this.fileName).subscribe({
|
|
70
|
-
next: (res) => {
|
|
71
|
-
if (res) {
|
|
72
|
-
this.processFileData(res);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
this.handleError('No file data received');
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
error: (error) => {
|
|
79
|
-
this.handleError(`Failed to load file: ${error.message || 'Unknown error'}`);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
handleSubmitAssignment() {
|
|
84
|
-
const dialgoData = {
|
|
85
|
-
description: 'Are you sure you want to submit your assignment? Once submitted, you won’t be able to make any changes',
|
|
86
|
-
iconName: 'info_circle',
|
|
87
|
-
type: 'warning',
|
|
88
|
-
buttonsPositionClass: 'justify-center items-center',
|
|
89
|
-
buttons: [
|
|
90
|
-
{
|
|
91
|
-
classes: 'btn-out-line',
|
|
92
|
-
text: 'Discard',
|
|
93
|
-
response: false
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
classes: 'succes-button',
|
|
97
|
-
text: 'Submit',
|
|
98
|
-
response: true
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
};
|
|
102
|
-
const dialogRef = this.dialogLegacy.open(ConfirmationDialogComponent, {
|
|
103
|
-
data: dialgoData,
|
|
104
|
-
disableClose: true,
|
|
105
|
-
width: '400px',
|
|
106
|
-
maxWidth: '90vw'
|
|
107
|
-
});
|
|
108
|
-
dialogRef.afterClosed().subscribe((result) => {
|
|
109
|
-
if (result) {
|
|
110
|
-
this.submitAssignment();
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
this.dialogRef.close();
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
submitAssignment() {
|
|
118
|
-
const payload = {
|
|
119
|
-
submitUrl: this.data.url,
|
|
120
|
-
formId: this.data.assessment.formId,
|
|
121
|
-
};
|
|
122
|
-
this.tocSvc.submitAssignment(payload).subscribe((res) => {
|
|
123
|
-
if (res && res.responseCode && res.responseCode === 'OK') {
|
|
124
|
-
this.openSnackbar('Assignment Submitted Successfully');
|
|
125
|
-
this.dialogRef.close();
|
|
126
|
-
this.notifyAssignmentSubmission();
|
|
127
|
-
}
|
|
128
|
-
}, error => {
|
|
129
|
-
this.dialogRef.close();
|
|
130
|
-
console.error('Error submitting assignment', error);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
async notifyAssignmentSubmission() {
|
|
134
|
-
const payload = {
|
|
135
|
-
courseId: this.data.contentId,
|
|
136
|
-
batchId: this.data.batchId,
|
|
137
|
-
assignmentTitle: this.data.assessment.title,
|
|
138
|
-
instructorId: this.data.assessment.createdBy,
|
|
139
|
-
};
|
|
140
|
-
this.tocSvc.notifyAssignmentSubmission(payload).subscribe((res) => {
|
|
141
|
-
if (res && res.responseCode && res.responseCode === 'OK') {
|
|
142
|
-
console.log('Notified assignment submission');
|
|
143
|
-
}
|
|
144
|
-
}, error => {
|
|
145
|
-
console.error('Error notifying assignment submission', error);
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
processFileData(fileData) {
|
|
149
|
-
try {
|
|
150
|
-
let blobData;
|
|
151
|
-
if (fileData instanceof Blob) {
|
|
152
|
-
const correctMimeType = this.getMimeType();
|
|
153
|
-
if (fileData.type !== correctMimeType && fileData.type.includes('multipart/form-data')) {
|
|
154
|
-
blobData = new Blob([fileData], { type: correctMimeType });
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
blobData = fileData;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else if (fileData instanceof ArrayBuffer) {
|
|
161
|
-
blobData = new Blob([fileData], { type: this.getMimeType() });
|
|
162
|
-
}
|
|
163
|
-
else if (typeof fileData === 'string') {
|
|
164
|
-
// Check if it's base64
|
|
165
|
-
if (fileData.startsWith('data:')) {
|
|
166
|
-
// Data URL format
|
|
167
|
-
const response = fetch(fileData);
|
|
168
|
-
response.then(res => res.blob()).then(blob => {
|
|
169
|
-
this.fileBlob = blob;
|
|
170
|
-
this.createFileUrl();
|
|
171
|
-
this.setupViewer();
|
|
172
|
-
});
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
// Plain base64
|
|
177
|
-
const byteCharacters = atob(fileData);
|
|
178
|
-
const byteNumbers = new Array(byteCharacters.length);
|
|
179
|
-
for (let i = 0; i < byteCharacters.length; i++) {
|
|
180
|
-
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
|
181
|
-
}
|
|
182
|
-
const byteArray = new Uint8Array(byteNumbers);
|
|
183
|
-
blobData = new Blob([byteArray], { type: this.getMimeType() });
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
blobData = new Blob([JSON.stringify(fileData)], { type: this.getMimeType() });
|
|
188
|
-
}
|
|
189
|
-
if (blobData.size === 0) {
|
|
190
|
-
throw new Error('Blob is empty (size: 0)');
|
|
191
|
-
}
|
|
192
|
-
this.fileBlob = blobData;
|
|
193
|
-
this.createFileUrl();
|
|
194
|
-
this.setupViewer();
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
this.handleError(`Failed to process file data: ${error}`);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
createFileUrl() {
|
|
201
|
-
if (this.fileBlob) {
|
|
202
|
-
// Clean up previous URL
|
|
203
|
-
if (this.fileUrl) {
|
|
204
|
-
URL.revokeObjectURL(this.fileUrl);
|
|
205
|
-
}
|
|
206
|
-
// Create new object URL
|
|
207
|
-
this.fileUrl = URL.createObjectURL(this.fileBlob);
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
console.log('No file blob available to create URL');
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
setupViewer() {
|
|
214
|
-
this.isLoading = false;
|
|
215
|
-
if (!this.fileUrl) {
|
|
216
|
-
this.handleError('No file URL available');
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
if (this.fileType === 'pdf') {
|
|
220
|
-
this.setupPdfViewer();
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
this.documentNotSupported = true;
|
|
224
|
-
this.showDownloadOption = true;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
setupPdfViewer() {
|
|
228
|
-
try {
|
|
229
|
-
// Try direct PDF viewer first
|
|
230
|
-
const pdfUrlWithParams = this.fileUrl + '#toolbar=0&navpanes=0&scrollbar=0';
|
|
231
|
-
this.safeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(pdfUrlWithParams);
|
|
232
|
-
this.showPdfViewer = true;
|
|
233
|
-
}
|
|
234
|
-
catch (error) {
|
|
235
|
-
console.error('Error setting up PDF viewer:', error);
|
|
236
|
-
this.handleError('Failed to setup PDF viewer');
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
getFileType(fileName) {
|
|
240
|
-
const extension = fileName.split('.').pop()?.toLowerCase();
|
|
241
|
-
if (extension === 'pdf') {
|
|
242
|
-
return 'pdf';
|
|
243
|
-
}
|
|
244
|
-
return 'unknown';
|
|
245
|
-
}
|
|
246
|
-
getMimeType() {
|
|
247
|
-
if (this.fileType === 'pdf') {
|
|
248
|
-
return 'application/pdf';
|
|
249
|
-
}
|
|
250
|
-
return 'application/octet-stream';
|
|
251
|
-
}
|
|
252
|
-
handleError(message) {
|
|
253
|
-
this.isLoading = false;
|
|
254
|
-
this.error = true;
|
|
255
|
-
this.errorMessage = message;
|
|
256
|
-
this.snackBar.open(message, 'Close', { duration: 5000 });
|
|
257
|
-
}
|
|
258
|
-
// Public methods for template
|
|
259
|
-
downloadFile() {
|
|
260
|
-
if (this.fileBlob) {
|
|
261
|
-
const url = URL.createObjectURL(this.fileBlob);
|
|
262
|
-
const a = document.createElement('a');
|
|
263
|
-
a.href = url;
|
|
264
|
-
a.download = this.fileName;
|
|
265
|
-
document.body.appendChild(a);
|
|
266
|
-
a.click();
|
|
267
|
-
document.body.removeChild(a);
|
|
268
|
-
URL.revokeObjectURL(url);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
onIframeLoad() {
|
|
272
|
-
console.log('Iframe loaded successfully');
|
|
273
|
-
}
|
|
274
|
-
onIframeError() {
|
|
275
|
-
console.error('Iframe failed to load');
|
|
276
|
-
this.handleError('Failed to load document in viewer');
|
|
277
|
-
}
|
|
278
|
-
handleClose() {
|
|
279
|
-
this.submitAssignmentAsDraft();
|
|
280
|
-
}
|
|
281
|
-
openSnackbar(primaryMsg, duration = 5000) {
|
|
282
|
-
this.snackBar.open(primaryMsg, 'X', {
|
|
283
|
-
duration,
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
submitAssignmentAsDraft() {
|
|
287
|
-
const payload = {
|
|
288
|
-
submitUrl: this.data.url,
|
|
289
|
-
formId: this.data.assessment.formId,
|
|
290
|
-
};
|
|
291
|
-
this.tocSvc.submitDraftAssignment(payload).subscribe((res) => {
|
|
292
|
-
if (res && res.responseCode && res.responseCode === 'OK') {
|
|
293
|
-
this.openSnackbar('Assignment saved as a draft');
|
|
294
|
-
this.dialogRef.close();
|
|
295
|
-
}
|
|
296
|
-
}, error => {
|
|
297
|
-
this.dialogRef.close();
|
|
298
|
-
console.error('Error submitting assignment', error);
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
closeDialog() {
|
|
302
|
-
if (this.fileUrl) {
|
|
303
|
-
URL.revokeObjectURL(this.fileUrl);
|
|
304
|
-
}
|
|
305
|
-
this.dialogRef.close();
|
|
306
|
-
}
|
|
307
|
-
retryLoad() {
|
|
308
|
-
this.error = false;
|
|
309
|
-
this.errorMessage = '';
|
|
310
|
-
this.readFile();
|
|
311
|
-
}
|
|
312
|
-
ngOnDestroy() {
|
|
313
|
-
if (this.fileUrl) {
|
|
314
|
-
URL.revokeObjectURL(this.fileUrl);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerV2Component, deps: [{ token: i1.Router }, { token: i2.AppTocService }, { token: i3.ConfigurationsService }, { token: i4.DomSanitizer }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.MatLegacyDialog }, { token: i7.MatLegacySnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
318
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AssignmentViewerV2Component, selector: "ws-widget-app-assignment-viewerV2", ngImport: i0, template: "<div class=\"document-viewer-container\">\n <div *ngIf=\"isLoading\" class=\"loading-container\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"loading-text\">Loading document...</p>\n </div>\n <div *ngIf=\"error\" class=\"error-container\">\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <p class=\"error-message\">{{ errorMessage }}</p>\n </div>\n <div class=\"flex\">\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\n <div>Post Assignment Preview</div>\n <div class=\"flex gap-4\">\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\n {{ 'userAssignments.discard' | translate }}\n </button>\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\n {{ 'userAssignments.submit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"loaders\" *ngIf=\"isLoading\">\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\n </div>\n <div *ngIf=\"showPdfViewer && !isLoading && !error\" class=\"iframe-container pl-4\">\n <iframe title=\"PDF Document Viewer\" [src]=\"safeSrc\" height=\"600px\" style=\"border: none;\" (load)=\"onIframeLoad()\"\n (error)=\"onIframeError()\">\n </iframe>\n </div>\n </div>\n </div>\n</div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:16px}.error-container .error-details{font-size:14px;color:#0009;text-align:left;margin-bottom:16px;background-color:#f5f5f5;padding:12px;border-radius:4px;border-left:4px solid #f44336}.error-container .error-details p{margin:4px 0;word-break:break-all}.error-container .error-details strong{color:#000000de}.error-container .retry-btn{margin-top:8px}.iframe-container{width:735px;height:740px}.iframe-container iframe{border:none;width:735px;height:100%}.unsupported-container{display:flex;align-items:center;justify-content:center;height:600px;width:100%}.unsupported-container .unsupported-message{text-align:center;padding:32px;max-width:500px}.unsupported-container .unsupported-message .file-icon{font-size:64px;height:64px;width:64px;color:#1b4ca1;margin-bottom:16px}.unsupported-container .unsupported-message h3{font-size:24px;color:#000000de;margin-bottom:16px;font-weight:500}.unsupported-container .unsupported-message p{font-size:16px;color:#0009;margin-bottom:8px;line-height:1.5}.unsupported-container .unsupported-message .action-buttons{margin-top:24px}.unsupported-container .unsupported-message .action-buttons .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.unsupported-container .unsupported-message .action-buttons .download-btn mat-icon{margin-right:8px}.unsupported-container .unsupported-message .info-note{margin-top:24px;padding:16px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:8px}.unsupported-container .unsupported-message .info-note .info-icon{color:#1b4ca1;font-size:18px;height:18px;width:18px}.unsupported-container .unsupported-message .info-note small{color:#0009;font-size:14px;line-height:1.4}.download-container{display:flex;align-items:center;justify-content:center;height:100px;width:100%}.download-container .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.download-container .download-btn mat-icon{margin-right:8px}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
|
|
319
|
-
}
|
|
320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerV2Component, decorators: [{
|
|
321
|
-
type: Component,
|
|
322
|
-
args: [{ selector: 'ws-widget-app-assignment-viewerV2', template: "<div class=\"document-viewer-container\">\n <div *ngIf=\"isLoading\" class=\"loading-container\">\n <mat-spinner diameter=\"40\"></mat-spinner>\n <p class=\"loading-text\">Loading document...</p>\n </div>\n <div *ngIf=\"error\" class=\"error-container\">\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <p class=\"error-message\">{{ errorMessage }}</p>\n </div>\n <div class=\"flex\">\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\n <div>Post Assignment Preview</div>\n <div class=\"flex gap-4\">\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\n {{ 'userAssignments.discard' | translate }}\n </button>\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\n {{ 'userAssignments.submit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"loaders\" *ngIf=\"isLoading\">\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\n </div>\n <div *ngIf=\"showPdfViewer && !isLoading && !error\" class=\"iframe-container pl-4\">\n <iframe title=\"PDF Document Viewer\" [src]=\"safeSrc\" height=\"600px\" style=\"border: none;\" (load)=\"onIframeLoad()\"\n (error)=\"onIframeError()\">\n </iframe>\n </div>\n </div>\n </div>\n</div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:16px}.error-container .error-details{font-size:14px;color:#0009;text-align:left;margin-bottom:16px;background-color:#f5f5f5;padding:12px;border-radius:4px;border-left:4px solid #f44336}.error-container .error-details p{margin:4px 0;word-break:break-all}.error-container .error-details strong{color:#000000de}.error-container .retry-btn{margin-top:8px}.iframe-container{width:735px;height:740px}.iframe-container iframe{border:none;width:735px;height:100%}.unsupported-container{display:flex;align-items:center;justify-content:center;height:600px;width:100%}.unsupported-container .unsupported-message{text-align:center;padding:32px;max-width:500px}.unsupported-container .unsupported-message .file-icon{font-size:64px;height:64px;width:64px;color:#1b4ca1;margin-bottom:16px}.unsupported-container .unsupported-message h3{font-size:24px;color:#000000de;margin-bottom:16px;font-weight:500}.unsupported-container .unsupported-message p{font-size:16px;color:#0009;margin-bottom:8px;line-height:1.5}.unsupported-container .unsupported-message .action-buttons{margin-top:24px}.unsupported-container .unsupported-message .action-buttons .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.unsupported-container .unsupported-message .action-buttons .download-btn mat-icon{margin-right:8px}.unsupported-container .unsupported-message .info-note{margin-top:24px;padding:16px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:8px}.unsupported-container .unsupported-message .info-note .info-icon{color:#1b4ca1;font-size:18px;height:18px;width:18px}.unsupported-container .unsupported-message .info-note small{color:#0009;font-size:14px;line-height:1.4}.download-container{display:flex;align-items:center;justify-content:center;height:100px;width:100%}.download-container .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.download-container .download-btn mat-icon{margin-right:8px}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"] }]
|
|
323
|
-
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AppTocService }, { type: i3.ConfigurationsService }, { type: i4.DomSanitizer }, { type: i5.MatDialogRef }, { type: undefined, decorators: [{
|
|
324
|
-
type: Inject,
|
|
325
|
-
args: [MAT_DIALOG_DATA]
|
|
326
|
-
}] }, { type: i6.MatLegacyDialog }, { type: i7.MatLegacySnackBar }]; } });
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXJWMi9hcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXJWMi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUE7QUFPeEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUE7Ozs7Ozs7Ozs7Ozs7QUFNckUsTUFBTSxPQUFPLDJCQUEyQjtJQWV0QyxZQUNTLE1BQWMsRUFDZCxNQUFxQixFQUNyQixTQUFnQyxFQUMvQixTQUF1QixFQUN4QixTQUFvRCxFQUMzQixJQUFTLEVBQ2pDLFlBQTZCLEVBQzdCLFFBQTJCO1FBUDVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxpQkFBWSxHQUFaLFlB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QUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3JELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQzsrR0F2VVUsMkJBQTJCLGtLQXFCNUIsZUFBZTttR0FyQmQsMkJBQTJCLHlFQ2Z4QywrK0NBZ0NNOzs0RkRqQk8sMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLG1DQUFtQzs7MEJBeUIxQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnRzXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJ1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtYXBwLWFzc2lnbm1lbnQtdmlld2VyVjInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRWaWV3ZXJWMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvLyBQcm9wZXJ0aWVzIGZvciBmaWxlIHByZXZpZXdcbiAgc2FmZVNyYzogU2FmZVJlc291cmNlVXJsIHwgbnVsbCA9IG51bGw7XG4gIGZpbGVCbG9iOiBCbG9iIHwgbnVsbCA9IG51bGw7XG4gIGZpbGVVcmw6IHN0cmluZyA9ICcnO1xuICBmaWxlVHlwZTogc3RyaW5nID0gJyc7XG4gIGZpbGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHNob3dQZGZWaWV3ZXIgPSBmYWxzZTtcbiAgc2hvd0Rvd25sb2FkT3B0aW9uID0gZmFsc2U7XG4gIGRvY3VtZW50Tm90U3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHVibGljIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFzc2lnbm1lbnRWaWV3ZXJWMkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBkaWFsb2dMZWdhY3k6IE1hdExlZ2FjeURpYWxvZyxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRMZWdhY3lTbmFja0JhcixcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5kYXRhLnVybCkge1xuICAgICAgY29uc3QgdXJsUGFydHMgPSB0aGlzLmRhdGEudXJsLnNwbGl0KCcvJyk7XG4gICAgICB0aGlzLmZpbGVOYW1lID0gdXJsUGFydHNbdXJsUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZS5zcGxpdCgnPycpWzBdO1xuICAgICAgdGhpcy5maWxlTmFtZSA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmZpbGVOYW1lKTtcbiAgICAgIHRoaXMuZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKHRoaXMuZmlsZU5hbWUpXG4gICAgICB0aGlzLnJlYWRGaWxlKClcbiAgICB9XG4gIH1cblxuICByZWFkRmlsZSgpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5jb250ZW50SWQpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0NvbnRlbnQgSUQgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGF0YS5iYXRjaElkKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdCYXRjaCBJRCBpcyBtaXNzaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhLmFzc2Vzc21lbnQ/LmlkKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdBc3NpZ25tZW50IElEIGlzIG1pc3NpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpbGVOYW1lKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdGaWxlIG5hbWUgaXMgbWlzc2luZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG5cbiAgICB0aGlzLnRvY1N2Yy5yZWFkQXNzaWdubWVudEZpbGUoXG4gICAgICB0aGlzLmRhdGEuY29udGVudElkLFxuICAgICAgdGhpcy5kYXRhLmJhdGNoSWQsXG4gICAgICB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgICB0aGlzLmZpbGVOYW1lXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlRGF0YShyZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ05vIGZpbGUgZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGBGYWlsZWQgdG8gbG9hZCBmaWxlOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBkaWFsZ29EYXRhID0ge1xuICAgICAgZGVzY3JpcHRpb246ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc3VibWl0IHlvdXIgYXNzaWdubWVudD8gT25jZSBzdWJtaXR0ZWQsIHlvdSB3b27igJl0IGJlIGFibGUgdG8gbWFrZSBhbnkgY2hhbmdlcycsXG4gICAgICBpY29uTmFtZTogJ2luZm9fY2lyY2xlJyxcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgIGJ1dHRvbnNQb3NpdGlvbkNsYXNzOiAnanVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdidG4tb3V0LWxpbmUnLFxuICAgICAgICAgIHRleHQ6ICdEaXNjYXJkJyxcbiAgICAgICAgICByZXNwb25zZTogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzZXM6ICdzdWNjZXMtYnV0dG9uJyxcbiAgICAgICAgICB0ZXh0OiAnU3VibWl0JyxcbiAgICAgICAgICByZXNwb25zZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nTGVnYWN5Lm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkaWFsZ29EYXRhLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgd2lkdGg6ICc0MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzkwdncnXG4gICAgfSlcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc3VibWl0QXNzaWdubWVudCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgc3VibWl0VXJsOiB0aGlzLmRhdGEudXJsLFxuICAgICAgZm9ybUlkOiB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLnN1Ym1pdEFzc2lnbm1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzcG9uc2VDb2RlICYmIHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Fzc2lnbm1lbnQgU3VibWl0dGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgdGhpcy5ub3RpZnlBc3NpZ25tZW50U3VibWlzc2lvbigpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3VibWl0dGluZyBhc3NpZ25tZW50JywgZXJyb3IpXG4gICAgfSlcbiAgfVxuICBhc3luYyBub3RpZnlBc3NpZ25tZW50U3VibWlzc2lvbigpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY291cnNlSWQ6IHRoaXMuZGF0YS5jb250ZW50SWQsXG4gICAgICBiYXRjaElkOiB0aGlzLmRhdGEuYmF0Y2hJZCxcbiAgICAgIGFzc2lnbm1lbnRUaXRsZTogdGhpcy5kYXRhLmFzc2Vzc21lbnQudGl0bGUsXG4gICAgICBpbnN0cnVjdG9ySWQ6IHRoaXMuZGF0YS5hc3Nlc3NtZW50LmNyZWF0ZWRCeSxcbiAgICB9XG4gICAgdGhpcy50b2NTdmMubm90aWZ5QXNzaWdubWVudFN1Ym1pc3Npb24ocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcyAmJiByZXMucmVzcG9uc2VDb2RlICYmIHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ05vdGlmaWVkIGFzc2lnbm1lbnQgc3VibWlzc2lvbicpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igbm90aWZ5aW5nIGFzc2lnbm1lbnQgc3VibWlzc2lvbicsIGVycm9yKVxuICAgIH0pXG4gIH1cblxuXG4gIHByaXZhdGUgcHJvY2Vzc0ZpbGVEYXRhKGZpbGVEYXRhOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JEYXRhOiBCbG9iO1xuXG4gICAgICBpZiAoZmlsZURhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGNvbnN0IGNvcnJlY3RNaW1lVHlwZSA9IHRoaXMuZ2V0TWltZVR5cGUoKTtcbiAgICAgICAgaWYgKGZpbGVEYXRhLnR5cGUgIT09IGNvcnJlY3RNaW1lVHlwZSAmJiBmaWxlRGF0YS50eXBlLmluY2x1ZGVzKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpIHtcbiAgICAgICAgICBibG9iRGF0YSA9IG5ldyBCbG9iKFtmaWxlRGF0YV0sIHsgdHlwZTogY29ycmVjdE1pbWVUeXBlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJsb2JEYXRhID0gZmlsZURhdGE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmlsZURhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBibG9iRGF0YSA9IG5ldyBCbG9iKFtmaWxlRGF0YV0sIHsgdHlwZTogdGhpcy5nZXRNaW1lVHlwZSgpIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsZURhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYmFzZTY0XG4gICAgICAgIGlmIChmaWxlRGF0YS5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG5cbiAgICAgICAgICAvLyBEYXRhIFVSTCBmb3JtYXRcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGZldGNoKGZpbGVEYXRhKTtcbiAgICAgICAgICByZXNwb25zZS50aGVuKHJlcyA9PiByZXMuYmxvYigpKS50aGVuKGJsb2IgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWxlQmxvYiA9IGJsb2I7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGVVcmwoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBWaWV3ZXIoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUGxhaW4gYmFzZTY0XG4gICAgICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGZpbGVEYXRhKTtcbiAgICAgICAgICBjb25zdCBieXRlTnVtYmVycyA9IG5ldyBBcnJheShieXRlQ2hhcmFjdGVycy5sZW5ndGgpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgICAgIGJsb2JEYXRhID0gbmV3IEJsb2IoW2J5dGVBcnJheV0sIHsgdHlwZTogdGhpcy5nZXRNaW1lVHlwZSgpIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBibG9iRGF0YSA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShmaWxlRGF0YSldLCB7IHR5cGU6IHRoaXMuZ2V0TWltZVR5cGUoKSB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChibG9iRGF0YS5zaXplID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQmxvYiBpcyBlbXB0eSAoc2l6ZTogMCknKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxlQmxvYiA9IGJsb2JEYXRhO1xuICAgICAgdGhpcy5jcmVhdGVGaWxlVXJsKCk7XG4gICAgICB0aGlzLnNldHVwVmlld2VyKCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBkYXRhOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmlsZVVybCgpIHtcbiAgICBpZiAodGhpcy5maWxlQmxvYikge1xuICAgICAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgVVJMXG4gICAgICBpZiAodGhpcy5maWxlVXJsKSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5maWxlVXJsKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIG5ldyBvYmplY3QgVVJMXG4gICAgICB0aGlzLmZpbGVVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUJsb2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gZmlsZSBibG9iIGF2YWlsYWJsZSB0byBjcmVhdGUgVVJMJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFZpZXdlcigpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLmZpbGVVcmwpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ05vIGZpbGUgVVJMIGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbGVUeXBlID09PSAncGRmJykge1xuICAgICAgdGhpcy5zZXR1cFBkZlZpZXdlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvY3VtZW50Tm90U3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkT3B0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwUGRmVmlld2VyKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgZGlyZWN0IFBERiB2aWV3ZXIgZmlyc3RcbiAgICAgIGNvbnN0IHBkZlVybFdpdGhQYXJhbXMgPSB0aGlzLmZpbGVVcmwgKyAnI3Rvb2xiYXI9MCZuYXZwYW5lcz0wJnNjcm9sbGJhcj0wJ1xuICAgICAgdGhpcy5zYWZlU3JjID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHBkZlVybFdpdGhQYXJhbXMpO1xuICAgICAgdGhpcy5zaG93UGRmVmlld2VyID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2V0dGluZyB1cCBQREYgdmlld2VyOicsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBzZXR1cCBQREYgdmlld2VyJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlVHlwZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gJ3BkZicpIHtcbiAgICAgIHJldHVybiAncGRmJztcbiAgICB9XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5maWxlVHlwZSA9PT0gJ3BkZicpIHtcbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vcGRmJztcbiAgICB9XG4gICAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ0Nsb3NlJywgeyBkdXJhdGlvbjogNTAwMCB9KTtcbiAgfVxuXG4gIC8vIFB1YmxpYyBtZXRob2RzIGZvciB0ZW1wbGF0ZVxuICBkb3dubG9hZEZpbGUoKSB7XG4gICAgaWYgKHRoaXMuZmlsZUJsb2IpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5maWxlQmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgYS5kb3dubG9hZCA9IHRoaXMuZmlsZU5hbWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgYS5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICB9XG4gIH1cblxuICBvbklmcmFtZUxvYWQoKSB7XG4gICAgY29uc29sZS5sb2coJ0lmcmFtZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIH1cblxuICBvbklmcmFtZUVycm9yKCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0lmcmFtZSBmYWlsZWQgdG8gbG9hZCcpO1xuICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGRvY3VtZW50IGluIHZpZXdlcicpO1xuICB9XG5cbiAgaGFuZGxlQ2xvc2UoKSB7XG4gICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50QXNEcmFmdCgpXG4gIH1cblxuICBvcGVuU25hY2tiYXIocHJpbWFyeU1zZzogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyID0gNTAwMCkge1xuICAgIHRoaXMuc25hY2tCYXIub3BlbihwcmltYXJ5TXNnLCAnWCcsIHtcbiAgICAgIGR1cmF0aW9uLFxuICAgIH0pXG4gIH1cblxuICBzdWJtaXRBc3NpZ25tZW50QXNEcmFmdCgpIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgc3VibWl0VXJsOiB0aGlzLmRhdGEudXJsLFxuICAgICAgZm9ybUlkOiB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXG4gICAgfVxuICAgIHRoaXMudG9jU3ZjLnN1Ym1pdERyYWZ0QXNzaWdubWVudChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5yZXNwb25zZUNvZGUgJiYgcmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xuICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignQXNzaWdubWVudCBzYXZlZCBhcyBhIGRyYWZ0JylcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgfVxuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgYXNzaWdubWVudCcsIGVycm9yKVxuICAgIH0pXG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICBpZiAodGhpcy5maWxlVXJsKSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZmlsZVVybCk7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICByZXRyeUxvYWQoKSB7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5yZWFkRmlsZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZmlsZVVybCkge1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLmZpbGVVcmwpO1xuICAgIH1cbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJkb2N1bWVudC12aWV3ZXItY29udGFpbmVyXCI+XG4gIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+XG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNDBcIj48L21hdC1zcGlubmVyPlxuICAgIDxwIGNsYXNzPVwibG9hZGluZy10ZXh0XCI+TG9hZGluZyBkb2N1bWVudC4uLjwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiZXJyb3ItY29udGFpbmVyXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwiZXJyb3ItaWNvblwiPmVycm9yX291dGxpbmU8L21hdC1pY29uPlxuICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnQtZGl2XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTA3cHgpO1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnQtdGl0bGUgZm9udC1ib2xkIHAtNSBtYi01IGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxkaXY+UG9zdCBBc3NpZ25tZW50IFByZXZpZXc8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTRcIj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJkaXNjYXJkLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVDbG9zZSgpXCI+XG4gICAgICAgICAgICB7eyAndXNlckFzc2lnbm1lbnRzLmRpc2NhcmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3VibWl0LWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVTdWJtaXRBc3NpZ25tZW50KClcIj5cbiAgICAgICAgICAgIHt7ICd1c2VyQXNzaWdubWVudHMuc3VibWl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRlcnNcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI0MFwiIGNsYXNzPVwiYmx1ZS1zcGlubmVyIG0tYXV0b1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGRmVmlld2VyICYmICFpc0xvYWRpbmcgJiYgIWVycm9yXCIgY2xhc3M9XCJpZnJhbWUtY29udGFpbmVyIHBsLTRcIj5cbiAgICAgICAgPGlmcmFtZSB0aXRsZT1cIlBERiBEb2N1bWVudCBWaWV3ZXJcIiBbc3JjXT1cInNhZmVTcmNcIiBoZWlnaHQ9XCI2MDBweFwiIHN0eWxlPVwiYm9yZGVyOiBub25lO1wiIChsb2FkKT1cIm9uSWZyYW1lTG9hZCgpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JZnJhbWVFcnJvcigpXCI+XG4gICAgICAgIDwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
1
|
+
// app-toc-assignment-viewerV2.component.ts
|
|
2
|
+
import { Component, Inject } from '@angular/core';
|
|
3
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
4
|
+
import { ConfirmationDialogComponent } from '@sunbird-cb/consumption';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "../../../../services/app-toc.service";
|
|
8
|
+
import * as i3 from "@sunbird-cb/utils-v2";
|
|
9
|
+
import * as i4 from "@angular/platform-browser";
|
|
10
|
+
import * as i5 from "@angular/material/dialog";
|
|
11
|
+
import * as i6 from "@angular/material/legacy-dialog";
|
|
12
|
+
import * as i7 from "@angular/material/legacy-snack-bar";
|
|
13
|
+
import * as i8 from "@angular/common";
|
|
14
|
+
import * as i9 from "@angular/material/icon";
|
|
15
|
+
import * as i10 from "@angular/material/progress-spinner";
|
|
16
|
+
import * as i11 from "@ngx-translate/core";
|
|
17
|
+
export class AssignmentViewerV2Component {
|
|
18
|
+
constructor(router, tocSvc, configSvc, sanitizer, dialogRef, data, dialogLegacy, snackBar) {
|
|
19
|
+
this.router = router;
|
|
20
|
+
this.tocSvc = tocSvc;
|
|
21
|
+
this.configSvc = configSvc;
|
|
22
|
+
this.sanitizer = sanitizer;
|
|
23
|
+
this.dialogRef = dialogRef;
|
|
24
|
+
this.data = data;
|
|
25
|
+
this.dialogLegacy = dialogLegacy;
|
|
26
|
+
this.snackBar = snackBar;
|
|
27
|
+
// Properties for file preview
|
|
28
|
+
this.safeSrc = null;
|
|
29
|
+
this.fileBlob = null;
|
|
30
|
+
this.fileUrl = '';
|
|
31
|
+
this.fileType = '';
|
|
32
|
+
this.fileName = '';
|
|
33
|
+
this.isLoading = false;
|
|
34
|
+
this.error = false;
|
|
35
|
+
this.errorMessage = '';
|
|
36
|
+
this.showPdfViewer = false;
|
|
37
|
+
this.showDownloadOption = false;
|
|
38
|
+
this.documentNotSupported = false;
|
|
39
|
+
}
|
|
40
|
+
ngOnInit() {
|
|
41
|
+
if (this.data.url) {
|
|
42
|
+
const urlParts = this.data.url.split('/');
|
|
43
|
+
this.fileName = urlParts[urlParts.length - 1];
|
|
44
|
+
this.fileName = this.fileName.split('?')[0];
|
|
45
|
+
this.fileName = decodeURIComponent(this.fileName);
|
|
46
|
+
this.fileType = this.getFileType(this.fileName);
|
|
47
|
+
this.readFile();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
readFile() {
|
|
51
|
+
if (!this.data.contentId) {
|
|
52
|
+
this.handleError('Content ID is missing');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!this.data.batchId) {
|
|
56
|
+
this.handleError('Batch ID is missing');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (!this.data.assessment?.id) {
|
|
60
|
+
this.handleError('Assignment ID is missing');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!this.fileName) {
|
|
64
|
+
this.handleError('File name is missing');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.isLoading = true;
|
|
68
|
+
this.error = false;
|
|
69
|
+
this.tocSvc.readAssignmentFile(this.data.contentId, this.data.batchId, this.data.assessment.formId, this.fileName).subscribe({
|
|
70
|
+
next: (res) => {
|
|
71
|
+
if (res) {
|
|
72
|
+
this.processFileData(res);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.handleError('No file data received');
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
error: (error) => {
|
|
79
|
+
this.handleError(`Failed to load file: ${error.message || 'Unknown error'}`);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
handleSubmitAssignment() {
|
|
84
|
+
const dialgoData = {
|
|
85
|
+
description: 'Are you sure you want to submit your assignment? Once submitted, you won’t be able to make any changes',
|
|
86
|
+
iconName: 'info_circle',
|
|
87
|
+
type: 'warning',
|
|
88
|
+
buttonsPositionClass: 'justify-center items-center',
|
|
89
|
+
buttons: [
|
|
90
|
+
{
|
|
91
|
+
classes: 'btn-out-line',
|
|
92
|
+
text: 'Discard',
|
|
93
|
+
response: false
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
classes: 'succes-button',
|
|
97
|
+
text: 'Submit',
|
|
98
|
+
response: true
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
};
|
|
102
|
+
const dialogRef = this.dialogLegacy.open(ConfirmationDialogComponent, {
|
|
103
|
+
data: dialgoData,
|
|
104
|
+
disableClose: true,
|
|
105
|
+
width: '400px',
|
|
106
|
+
maxWidth: '90vw'
|
|
107
|
+
});
|
|
108
|
+
dialogRef.afterClosed().subscribe((result) => {
|
|
109
|
+
if (result) {
|
|
110
|
+
this.submitAssignment();
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.dialogRef.close();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
submitAssignment() {
|
|
118
|
+
const payload = {
|
|
119
|
+
submitUrl: this.data.url,
|
|
120
|
+
formId: this.data.assessment.formId,
|
|
121
|
+
};
|
|
122
|
+
this.tocSvc.submitAssignment(payload).subscribe((res) => {
|
|
123
|
+
if (res && res.responseCode && res.responseCode === 'OK') {
|
|
124
|
+
this.openSnackbar('Assignment Submitted Successfully');
|
|
125
|
+
this.dialogRef.close();
|
|
126
|
+
this.notifyAssignmentSubmission();
|
|
127
|
+
}
|
|
128
|
+
}, error => {
|
|
129
|
+
this.dialogRef.close();
|
|
130
|
+
console.error('Error submitting assignment', error);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async notifyAssignmentSubmission() {
|
|
134
|
+
const payload = {
|
|
135
|
+
courseId: this.data.contentId,
|
|
136
|
+
batchId: this.data.batchId,
|
|
137
|
+
assignmentTitle: this.data.assessment.title,
|
|
138
|
+
instructorId: this.data.assessment.createdBy,
|
|
139
|
+
};
|
|
140
|
+
this.tocSvc.notifyAssignmentSubmission(payload).subscribe((res) => {
|
|
141
|
+
if (res && res.responseCode && res.responseCode === 'OK') {
|
|
142
|
+
console.log('Notified assignment submission');
|
|
143
|
+
}
|
|
144
|
+
}, error => {
|
|
145
|
+
console.error('Error notifying assignment submission', error);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
processFileData(fileData) {
|
|
149
|
+
try {
|
|
150
|
+
let blobData;
|
|
151
|
+
if (fileData instanceof Blob) {
|
|
152
|
+
const correctMimeType = this.getMimeType();
|
|
153
|
+
if (fileData.type !== correctMimeType && fileData.type.includes('multipart/form-data')) {
|
|
154
|
+
blobData = new Blob([fileData], { type: correctMimeType });
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
blobData = fileData;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (fileData instanceof ArrayBuffer) {
|
|
161
|
+
blobData = new Blob([fileData], { type: this.getMimeType() });
|
|
162
|
+
}
|
|
163
|
+
else if (typeof fileData === 'string') {
|
|
164
|
+
// Check if it's base64
|
|
165
|
+
if (fileData.startsWith('data:')) {
|
|
166
|
+
// Data URL format
|
|
167
|
+
const response = fetch(fileData);
|
|
168
|
+
response.then(res => res.blob()).then(blob => {
|
|
169
|
+
this.fileBlob = blob;
|
|
170
|
+
this.createFileUrl();
|
|
171
|
+
this.setupViewer();
|
|
172
|
+
});
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// Plain base64
|
|
177
|
+
const byteCharacters = atob(fileData);
|
|
178
|
+
const byteNumbers = new Array(byteCharacters.length);
|
|
179
|
+
for (let i = 0; i < byteCharacters.length; i++) {
|
|
180
|
+
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
|
181
|
+
}
|
|
182
|
+
const byteArray = new Uint8Array(byteNumbers);
|
|
183
|
+
blobData = new Blob([byteArray], { type: this.getMimeType() });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
blobData = new Blob([JSON.stringify(fileData)], { type: this.getMimeType() });
|
|
188
|
+
}
|
|
189
|
+
if (blobData.size === 0) {
|
|
190
|
+
throw new Error('Blob is empty (size: 0)');
|
|
191
|
+
}
|
|
192
|
+
this.fileBlob = blobData;
|
|
193
|
+
this.createFileUrl();
|
|
194
|
+
this.setupViewer();
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
this.handleError(`Failed to process file data: ${error}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
createFileUrl() {
|
|
201
|
+
if (this.fileBlob) {
|
|
202
|
+
// Clean up previous URL
|
|
203
|
+
if (this.fileUrl) {
|
|
204
|
+
URL.revokeObjectURL(this.fileUrl);
|
|
205
|
+
}
|
|
206
|
+
// Create new object URL
|
|
207
|
+
this.fileUrl = URL.createObjectURL(this.fileBlob);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
console.log('No file blob available to create URL');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
setupViewer() {
|
|
214
|
+
this.isLoading = false;
|
|
215
|
+
if (!this.fileUrl) {
|
|
216
|
+
this.handleError('No file URL available');
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (this.fileType === 'pdf') {
|
|
220
|
+
this.setupPdfViewer();
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
this.documentNotSupported = true;
|
|
224
|
+
this.showDownloadOption = true;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
setupPdfViewer() {
|
|
228
|
+
try {
|
|
229
|
+
// Try direct PDF viewer first
|
|
230
|
+
const pdfUrlWithParams = this.fileUrl + '#toolbar=0&navpanes=0&scrollbar=0';
|
|
231
|
+
this.safeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(pdfUrlWithParams);
|
|
232
|
+
this.showPdfViewer = true;
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
console.error('Error setting up PDF viewer:', error);
|
|
236
|
+
this.handleError('Failed to setup PDF viewer');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
getFileType(fileName) {
|
|
240
|
+
const extension = fileName.split('.').pop()?.toLowerCase();
|
|
241
|
+
if (extension === 'pdf') {
|
|
242
|
+
return 'pdf';
|
|
243
|
+
}
|
|
244
|
+
return 'unknown';
|
|
245
|
+
}
|
|
246
|
+
getMimeType() {
|
|
247
|
+
if (this.fileType === 'pdf') {
|
|
248
|
+
return 'application/pdf';
|
|
249
|
+
}
|
|
250
|
+
return 'application/octet-stream';
|
|
251
|
+
}
|
|
252
|
+
handleError(message) {
|
|
253
|
+
this.isLoading = false;
|
|
254
|
+
this.error = true;
|
|
255
|
+
this.errorMessage = message;
|
|
256
|
+
this.snackBar.open(message, 'Close', { duration: 5000 });
|
|
257
|
+
}
|
|
258
|
+
// Public methods for template
|
|
259
|
+
downloadFile() {
|
|
260
|
+
if (this.fileBlob) {
|
|
261
|
+
const url = URL.createObjectURL(this.fileBlob);
|
|
262
|
+
const a = document.createElement('a');
|
|
263
|
+
a.href = url;
|
|
264
|
+
a.download = this.fileName;
|
|
265
|
+
document.body.appendChild(a);
|
|
266
|
+
a.click();
|
|
267
|
+
document.body.removeChild(a);
|
|
268
|
+
URL.revokeObjectURL(url);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
onIframeLoad() {
|
|
272
|
+
console.log('Iframe loaded successfully');
|
|
273
|
+
}
|
|
274
|
+
onIframeError() {
|
|
275
|
+
console.error('Iframe failed to load');
|
|
276
|
+
this.handleError('Failed to load document in viewer');
|
|
277
|
+
}
|
|
278
|
+
handleClose() {
|
|
279
|
+
this.submitAssignmentAsDraft();
|
|
280
|
+
}
|
|
281
|
+
openSnackbar(primaryMsg, duration = 5000) {
|
|
282
|
+
this.snackBar.open(primaryMsg, 'X', {
|
|
283
|
+
duration,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
submitAssignmentAsDraft() {
|
|
287
|
+
const payload = {
|
|
288
|
+
submitUrl: this.data.url,
|
|
289
|
+
formId: this.data.assessment.formId,
|
|
290
|
+
};
|
|
291
|
+
this.tocSvc.submitDraftAssignment(payload).subscribe((res) => {
|
|
292
|
+
if (res && res.responseCode && res.responseCode === 'OK') {
|
|
293
|
+
this.openSnackbar('Assignment saved as a draft');
|
|
294
|
+
this.dialogRef.close();
|
|
295
|
+
}
|
|
296
|
+
}, error => {
|
|
297
|
+
this.dialogRef.close();
|
|
298
|
+
console.error('Error submitting assignment', error);
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
closeDialog() {
|
|
302
|
+
if (this.fileUrl) {
|
|
303
|
+
URL.revokeObjectURL(this.fileUrl);
|
|
304
|
+
}
|
|
305
|
+
this.dialogRef.close();
|
|
306
|
+
}
|
|
307
|
+
retryLoad() {
|
|
308
|
+
this.error = false;
|
|
309
|
+
this.errorMessage = '';
|
|
310
|
+
this.readFile();
|
|
311
|
+
}
|
|
312
|
+
ngOnDestroy() {
|
|
313
|
+
if (this.fileUrl) {
|
|
314
|
+
URL.revokeObjectURL(this.fileUrl);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerV2Component, deps: [{ token: i1.Router }, { token: i2.AppTocService }, { token: i3.ConfigurationsService }, { token: i4.DomSanitizer }, { token: i5.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i6.MatLegacyDialog }, { token: i7.MatLegacySnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
318
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AssignmentViewerV2Component, selector: "ws-widget-app-assignment-viewerV2", ngImport: i0, template: "<div class=\"document-viewer-container\">\r\n <div *ngIf=\"isLoading\" class=\"loading-container\">\r\n <mat-spinner diameter=\"40\"></mat-spinner>\r\n <p class=\"loading-text\">Loading document...</p>\r\n </div>\r\n <div *ngIf=\"error\" class=\"error-container\">\r\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\r\n <p class=\"error-message\">{{ errorMessage }}</p>\r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\r\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\r\n <div>Post Assignment Preview</div>\r\n <div class=\"flex gap-4\">\r\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\r\n {{ 'userAssignments.discard' | translate }}\r\n </button>\r\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\r\n {{ 'userAssignments.submit' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"loaders\" *ngIf=\"isLoading\">\r\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\r\n </div>\r\n <div *ngIf=\"showPdfViewer && !isLoading && !error\" class=\"iframe-container pl-4\">\r\n <iframe title=\"PDF Document Viewer\" [src]=\"safeSrc\" height=\"600px\" style=\"border: none;\" (load)=\"onIframeLoad()\"\r\n (error)=\"onIframeError()\">\r\n </iframe>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:16px}.error-container .error-details{font-size:14px;color:#0009;text-align:left;margin-bottom:16px;background-color:#f5f5f5;padding:12px;border-radius:4px;border-left:4px solid #f44336}.error-container .error-details p{margin:4px 0;word-break:break-all}.error-container .error-details strong{color:#000000de}.error-container .retry-btn{margin-top:8px}.iframe-container{width:735px;height:740px}.iframe-container iframe{border:none;width:735px;height:100%}.unsupported-container{display:flex;align-items:center;justify-content:center;height:600px;width:100%}.unsupported-container .unsupported-message{text-align:center;padding:32px;max-width:500px}.unsupported-container .unsupported-message .file-icon{font-size:64px;height:64px;width:64px;color:#1b4ca1;margin-bottom:16px}.unsupported-container .unsupported-message h3{font-size:24px;color:#000000de;margin-bottom:16px;font-weight:500}.unsupported-container .unsupported-message p{font-size:16px;color:#0009;margin-bottom:8px;line-height:1.5}.unsupported-container .unsupported-message .action-buttons{margin-top:24px}.unsupported-container .unsupported-message .action-buttons .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.unsupported-container .unsupported-message .action-buttons .download-btn mat-icon{margin-right:8px}.unsupported-container .unsupported-message .info-note{margin-top:24px;padding:16px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:8px}.unsupported-container .unsupported-message .info-note .info-icon{color:#1b4ca1;font-size:18px;height:18px;width:18px}.unsupported-container .unsupported-message .info-note small{color:#0009;font-size:14px;line-height:1.4}.download-container{display:flex;align-items:center;justify-content:center;height:100px;width:100%}.download-container .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.download-container .download-btn mat-icon{margin-right:8px}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
|
|
319
|
+
}
|
|
320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AssignmentViewerV2Component, decorators: [{
|
|
321
|
+
type: Component,
|
|
322
|
+
args: [{ selector: 'ws-widget-app-assignment-viewerV2', template: "<div class=\"document-viewer-container\">\r\n <div *ngIf=\"isLoading\" class=\"loading-container\">\r\n <mat-spinner diameter=\"40\"></mat-spinner>\r\n <p class=\"loading-text\">Loading document...</p>\r\n </div>\r\n <div *ngIf=\"error\" class=\"error-container\">\r\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\r\n <p class=\"error-message\">{{ errorMessage }}</p>\r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"left-div\" style=\"width: 100%; height: calc(100vh - 107px);\">\r\n <div class=\"left-title font-bold p-5 mb-5 flex flex-row justify-between\">\r\n <div>Post Assignment Preview</div>\r\n <div class=\"flex gap-4\">\r\n <button mat-button class=\"discard-btn cursor-pointer\" (click)=\"handleClose()\">\r\n {{ 'userAssignments.discard' | translate }}\r\n </button>\r\n <button mat-button class=\"submit-btn cursor-pointer\" (click)=\"handleSubmitAssignment()\">\r\n {{ 'userAssignments.submit' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"loaders\" *ngIf=\"isLoading\">\r\n <mat-spinner diameter=\"40\" class=\"blue-spinner m-auto\"></mat-spinner>\r\n </div>\r\n <div *ngIf=\"showPdfViewer && !isLoading && !error\" class=\"iframe-container pl-4\">\r\n <iframe title=\"PDF Document Viewer\" [src]=\"safeSrc\" height=\"600px\" style=\"border: none;\" (load)=\"onIframeLoad()\"\r\n (error)=\"onIframeError()\">\r\n </iframe>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-viewer-container{position:relative;background-color:transparent;border-radius:4px}.loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:200px;z-index:99999}.loading-container .loading-text{margin-top:16px;color:#0009}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:32px;text-align:center;min-height:200px}.error-container .error-icon{font-size:48px;height:48px;width:48px;color:#f44336;margin-bottom:16px}.error-container .error-message{font-size:18px;color:#000000de;margin-bottom:16px}.error-container .error-details{font-size:14px;color:#0009;text-align:left;margin-bottom:16px;background-color:#f5f5f5;padding:12px;border-radius:4px;border-left:4px solid #f44336}.error-container .error-details p{margin:4px 0;word-break:break-all}.error-container .error-details strong{color:#000000de}.error-container .retry-btn{margin-top:8px}.iframe-container{width:735px;height:740px}.iframe-container iframe{border:none;width:735px;height:100%}.unsupported-container{display:flex;align-items:center;justify-content:center;height:600px;width:100%}.unsupported-container .unsupported-message{text-align:center;padding:32px;max-width:500px}.unsupported-container .unsupported-message .file-icon{font-size:64px;height:64px;width:64px;color:#1b4ca1;margin-bottom:16px}.unsupported-container .unsupported-message h3{font-size:24px;color:#000000de;margin-bottom:16px;font-weight:500}.unsupported-container .unsupported-message p{font-size:16px;color:#0009;margin-bottom:8px;line-height:1.5}.unsupported-container .unsupported-message .action-buttons{margin-top:24px}.unsupported-container .unsupported-message .action-buttons .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.unsupported-container .unsupported-message .action-buttons .download-btn mat-icon{margin-right:8px}.unsupported-container .unsupported-message .info-note{margin-top:24px;padding:16px;background-color:#f5f5f5;border-radius:8px;display:flex;align-items:center;gap:8px}.unsupported-container .unsupported-message .info-note .info-icon{color:#1b4ca1;font-size:18px;height:18px;width:18px}.unsupported-container .unsupported-message .info-note small{color:#0009;font-size:14px;line-height:1.4}.download-container{display:flex;align-items:center;justify-content:center;height:100px;width:100%}.download-container .download-btn{padding:12px 24px;font-size:16px;font-weight:500}.download-container .download-btn mat-icon{margin-right:8px}.title-div{font-size:24px;font-weight:500;font-family:Lato;border-bottom:2px solid #c3c3c3}.left-title{border-bottom:1px solid #c3c3c3}.discard-btn{background-color:#fff;border:1px solid #1B4CA1!important;border-radius:16px;padding:6px 16px;color:#1b4ca1;font-weight:600;font-size:14px;font-family:Lato}.submit-btn{background-color:#1b4ca1;border-radius:16px;padding:6px 16px;color:#fff;font-size:14px;font-weight:600;border:none!important;font-family:Lato}.loaders{position:absolute;top:50%;left:50%}.loaders .blue-spinner{transform:translate(-50%,-50%);z-index:1000}.loaders .blue-spinner ::ng-deep .mat-progress-spinner circle,.loaders .blue-spinner ::ng-deep .mat-spinner circle{stroke:#1b4ca1!important}\n"] }]
|
|
323
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AppTocService }, { type: i3.ConfigurationsService }, { type: i4.DomSanitizer }, { type: i5.MatDialogRef }, { type: undefined, decorators: [{
|
|
324
|
+
type: Inject,
|
|
325
|
+
args: [MAT_DIALOG_DATA]
|
|
326
|
+
}] }, { type: i6.MatLegacyDialog }, { type: i7.MatLegacySnackBar }]; } });
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXJWMi9hcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyL2FwcC10b2MtYXNzaWdubWVudC12aWV3ZXJWMi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUE7QUFPeEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUE7Ozs7Ozs7Ozs7Ozs7QUFNckUsTUFBTSxPQUFPLDJCQUEyQjtJQWV0QyxZQUNTLE1BQWMsRUFDZCxNQUFxQixFQUNyQixTQUFnQyxFQUMvQixTQUF1QixFQUN4QixTQUFvRCxFQUMzQixJQUFTLEVBQ2pDLFlBQTZCLEVBQzdCLFFBQTJCO1FBUDVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxpQkFBWSxHQUFaLFlB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QUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3JELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQzsrR0F2VVUsMkJBQTJCLGtLQXFCNUIsZUFBZTttR0FyQmQsMkJBQTJCLHlFQ2Z4QywraURBZ0NNOzs0RkRqQk8sMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLG1DQUFtQzs7MEJBeUIxQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJ1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lEaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xyXG5pbXBvcnQgeyBNYXRMZWdhY3lTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1zbmFjay1iYXInXHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlcidcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcclxuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3Mtd2lkZ2V0LWFwcC1hc3NpZ25tZW50LXZpZXdlclYyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1hc3NpZ25tZW50LXZpZXdlclYyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hcHAtdG9jLWFzc2lnbm1lbnQtdmlld2VyVjIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRWaWV3ZXJWMkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgLy8gUHJvcGVydGllcyBmb3IgZmlsZSBwcmV2aWV3XHJcbiAgc2FmZVNyYzogU2FmZVJlc291cmNlVXJsIHwgbnVsbCA9IG51bGw7XHJcbiAgZmlsZUJsb2I6IEJsb2IgfCBudWxsID0gbnVsbDtcclxuICBmaWxlVXJsOiBzdHJpbmcgPSAnJztcclxuICBmaWxlVHlwZTogc3RyaW5nID0gJyc7XHJcbiAgZmlsZU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBzaG93UGRmVmlld2VyID0gZmFsc2U7XHJcbiAgc2hvd0Rvd25sb2FkT3B0aW9uID0gZmFsc2U7XHJcbiAgZG9jdW1lbnROb3RTdXBwb3J0ZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwdWJsaWMgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlLFxyXG4gICAgcHVibGljIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBc3NpZ25tZW50Vmlld2VyVjJDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXHJcbiAgICBwcml2YXRlIGRpYWxvZ0xlZ2FjeTogTWF0TGVnYWN5RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0TGVnYWN5U25hY2tCYXIsXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLnVybCkge1xyXG4gICAgICBjb25zdCB1cmxQYXJ0cyA9IHRoaXMuZGF0YS51cmwuc3BsaXQoJy8nKTtcclxuICAgICAgdGhpcy5maWxlTmFtZSA9IHVybFBhcnRzW3VybFBhcnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy5maWxlTmFtZS5zcGxpdCgnPycpWzBdO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZmlsZU5hbWUpO1xyXG4gICAgICB0aGlzLmZpbGVUeXBlID0gdGhpcy5nZXRGaWxlVHlwZSh0aGlzLmZpbGVOYW1lKVxyXG4gICAgICB0aGlzLnJlYWRGaWxlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlYWRGaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmRhdGEuY29udGVudElkKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0NvbnRlbnQgSUQgaXMgbWlzc2luZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5iYXRjaElkKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0JhdGNoIElEIGlzIG1pc3NpbmcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRhdGEuYXNzZXNzbWVudD8uaWQpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcignQXNzaWdubWVudCBJRCBpcyBtaXNzaW5nJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5maWxlTmFtZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdGaWxlIG5hbWUgaXMgbWlzc2luZycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudG9jU3ZjLnJlYWRBc3NpZ25tZW50RmlsZShcclxuICAgICAgdGhpcy5kYXRhLmNvbnRlbnRJZCxcclxuICAgICAgdGhpcy5kYXRhLmJhdGNoSWQsXHJcbiAgICAgIHRoaXMuZGF0YS5hc3Nlc3NtZW50LmZvcm1JZCxcclxuICAgICAgdGhpcy5maWxlTmFtZVxyXG4gICAgKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NGaWxlRGF0YShyZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKCdObyBmaWxlIGRhdGEgcmVjZWl2ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGBGYWlsZWQgdG8gbG9hZCBmaWxlOiAke2Vycm9yLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InfWApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVN1Ym1pdEFzc2lnbm1lbnQoKSB7XHJcbiAgICBjb25zdCBkaWFsZ29EYXRhID0ge1xyXG4gICAgICBkZXNjcmlwdGlvbjogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzdWJtaXQgeW91ciBhc3NpZ25tZW50PyBPbmNlIHN1Ym1pdHRlZCwgeW91IHdvbuKAmXQgYmUgYWJsZSB0byBtYWtlIGFueSBjaGFuZ2VzJyxcclxuICAgICAgaWNvbk5hbWU6ICdpbmZvX2NpcmNsZScsXHJcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgYnV0dG9uc1Bvc2l0aW9uQ2xhc3M6ICdqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXInLFxyXG4gICAgICBidXR0b25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xhc3NlczogJ2J0bi1vdXQtbGluZScsXHJcbiAgICAgICAgICB0ZXh0OiAnRGlzY2FyZCcsXHJcbiAgICAgICAgICByZXNwb25zZTogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsYXNzZXM6ICdzdWNjZXMtYnV0dG9uJyxcclxuICAgICAgICAgIHRleHQ6ICdTdWJtaXQnLFxyXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nTGVnYWN5Lm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IGRpYWxnb0RhdGEsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6ICc0MDBweCcsXHJcbiAgICAgIG1heFdpZHRoOiAnOTB2dydcclxuICAgIH0pXHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50KClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdWJtaXRBc3NpZ25tZW50KCkge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgc3VibWl0VXJsOiB0aGlzLmRhdGEudXJsLFxyXG4gICAgICBmb3JtSWQ6IHRoaXMuZGF0YS5hc3Nlc3NtZW50LmZvcm1JZCxcclxuICAgIH1cclxuICAgIHRoaXMudG9jU3ZjLnN1Ym1pdEFzc2lnbm1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5yZXNwb25zZUNvZGUgJiYgcmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdBc3NpZ25tZW50IFN1Ym1pdHRlZCBTdWNjZXNzZnVsbHknKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgICB0aGlzLm5vdGlmeUFzc2lnbm1lbnRTdWJtaXNzaW9uKClcclxuICAgICAgfVxyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgYXNzaWdubWVudCcsIGVycm9yKVxyXG4gICAgfSlcclxuICB9XHJcbiAgYXN5bmMgbm90aWZ5QXNzaWdubWVudFN1Ym1pc3Npb24oKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjb3Vyc2VJZDogdGhpcy5kYXRhLmNvbnRlbnRJZCxcclxuICAgICAgYmF0Y2hJZDogdGhpcy5kYXRhLmJhdGNoSWQsXHJcbiAgICAgIGFzc2lnbm1lbnRUaXRsZTogdGhpcy5kYXRhLmFzc2Vzc21lbnQudGl0bGUsXHJcbiAgICAgIGluc3RydWN0b3JJZDogdGhpcy5kYXRhLmFzc2Vzc21lbnQuY3JlYXRlZEJ5LFxyXG4gICAgfVxyXG4gICAgdGhpcy50b2NTdmMubm90aWZ5QXNzaWdubWVudFN1Ym1pc3Npb24ocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5yZXNwb25zZUNvZGUgJiYgcmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdOb3RpZmllZCBhc3NpZ25tZW50IHN1Ym1pc3Npb24nKVxyXG4gICAgICB9XHJcbiAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG5vdGlmeWluZyBhc3NpZ25tZW50IHN1Ym1pc3Npb24nLCBlcnJvcilcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzRmlsZURhdGEoZmlsZURhdGE6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGJsb2JEYXRhOiBCbG9iO1xyXG5cclxuICAgICAgaWYgKGZpbGVEYXRhIGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgIGNvbnN0IGNvcnJlY3RNaW1lVHlwZSA9IHRoaXMuZ2V0TWltZVR5cGUoKTtcclxuICAgICAgICBpZiAoZmlsZURhdGEudHlwZSAhPT0gY29ycmVjdE1pbWVUeXBlICYmIGZpbGVEYXRhLnR5cGUuaW5jbHVkZXMoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkge1xyXG4gICAgICAgICAgYmxvYkRhdGEgPSBuZXcgQmxvYihbZmlsZURhdGFdLCB7IHR5cGU6IGNvcnJlY3RNaW1lVHlwZSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYmxvYkRhdGEgPSBmaWxlRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsZURhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xyXG4gICAgICAgIGJsb2JEYXRhID0gbmV3IEJsb2IoW2ZpbGVEYXRhXSwgeyB0eXBlOiB0aGlzLmdldE1pbWVUeXBlKCkgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbGVEYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3MgYmFzZTY0XHJcbiAgICAgICAgaWYgKGZpbGVEYXRhLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcclxuXHJcbiAgICAgICAgICAvLyBEYXRhIFVSTCBmb3JtYXRcclxuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZmV0Y2goZmlsZURhdGEpO1xyXG4gICAgICAgICAgcmVzcG9uc2UudGhlbihyZXMgPT4gcmVzLmJsb2IoKSkudGhlbihibG9iID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWxlQmxvYiA9IGJsb2I7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZVVybCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldHVwVmlld2VyKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gUGxhaW4gYmFzZTY0XHJcbiAgICAgICAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoZmlsZURhdGEpO1xyXG4gICAgICAgICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgICAgICAgYmxvYkRhdGEgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiB0aGlzLmdldE1pbWVUeXBlKCkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJsb2JEYXRhID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGZpbGVEYXRhKV0sIHsgdHlwZTogdGhpcy5nZXRNaW1lVHlwZSgpIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChibG9iRGF0YS5zaXplID09PSAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCbG9iIGlzIGVtcHR5IChzaXplOiAwKScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZpbGVCbG9iID0gYmxvYkRhdGE7XHJcbiAgICAgIHRoaXMuY3JlYXRlRmlsZVVybCgpO1xyXG4gICAgICB0aGlzLnNldHVwVmlld2VyKCk7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgZmlsZSBkYXRhOiAke2Vycm9yfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWxlVXJsKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsZUJsb2IpIHtcclxuICAgICAgLy8gQ2xlYW4gdXAgcHJldmlvdXMgVVJMXHJcbiAgICAgIGlmICh0aGlzLmZpbGVVcmwpIHtcclxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZmlsZVVybCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENyZWF0ZSBuZXcgb2JqZWN0IFVSTFxyXG4gICAgICB0aGlzLmZpbGVVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUJsb2IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ05vIGZpbGUgYmxvYiBhdmFpbGFibGUgdG8gY3JlYXRlIFVSTCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFZpZXdlcigpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLmZpbGVVcmwpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvcignTm8gZmlsZSBVUkwgYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maWxlVHlwZSA9PT0gJ3BkZicpIHtcclxuICAgICAgdGhpcy5zZXR1cFBkZlZpZXdlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kb2N1bWVudE5vdFN1cHBvcnRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkT3B0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBQZGZWaWV3ZXIoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBUcnkgZGlyZWN0IFBERiB2aWV3ZXIgZmlyc3RcclxuICAgICAgY29uc3QgcGRmVXJsV2l0aFBhcmFtcyA9IHRoaXMuZmlsZVVybCArICcjdG9vbGJhcj0wJm5hdnBhbmVzPTAmc2Nyb2xsYmFyPTAnXHJcbiAgICAgIHRoaXMuc2FmZVNyYyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChwZGZVcmxXaXRoUGFyYW1zKTtcclxuICAgICAgdGhpcy5zaG93UGRmVmlld2VyID0gdHJ1ZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNldHRpbmcgdXAgUERGIHZpZXdlcjonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBzZXR1cCBQREYgdmlld2VyJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbGVUeXBlKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZU5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSAncGRmJykge1xyXG4gICAgICByZXR1cm4gJ3BkZic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3Vua25vd24nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW1lVHlwZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZmlsZVR5cGUgPT09ICdwZGYnKSB7XHJcbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vcGRmJztcclxuICAgIH1cclxuICAgIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5lcnJvciA9IHRydWU7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ0Nsb3NlJywgeyBkdXJhdGlvbjogNTAwMCB9KTtcclxuICB9XHJcblxyXG4gIC8vIFB1YmxpYyBtZXRob2RzIGZvciB0ZW1wbGF0ZVxyXG4gIGRvd25sb2FkRmlsZSgpIHtcclxuICAgIGlmICh0aGlzLmZpbGVCbG9iKSB7XHJcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5maWxlQmxvYik7XHJcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGEuaHJlZiA9IHVybDtcclxuICAgICAgYS5kb3dubG9hZCA9IHRoaXMuZmlsZU5hbWU7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICAgIGEuY2xpY2soKTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcclxuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JZnJhbWVMb2FkKCkge1xyXG4gICAgY29uc29sZS5sb2coJ0lmcmFtZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgfVxyXG5cclxuICBvbklmcmFtZUVycm9yKCkge1xyXG4gICAgY29uc29sZS5lcnJvcignSWZyYW1lIGZhaWxlZCB0byBsb2FkJyk7XHJcbiAgICB0aGlzLmhhbmRsZUVycm9yKCdGYWlsZWQgdG8gbG9hZCBkb2N1bWVudCBpbiB2aWV3ZXInKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNsb3NlKCkge1xyXG4gICAgdGhpcy5zdWJtaXRBc3NpZ25tZW50QXNEcmFmdCgpXHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tiYXIocHJpbWFyeU1zZzogc3RyaW5nLCBkdXJhdGlvbjogbnVtYmVyID0gNTAwMCkge1xyXG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKHByaW1hcnlNc2csICdYJywge1xyXG4gICAgICBkdXJhdGlvbixcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdWJtaXRBc3NpZ25tZW50QXNEcmFmdCgpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHN1Ym1pdFVybDogdGhpcy5kYXRhLnVybCxcclxuICAgICAgZm9ybUlkOiB0aGlzLmRhdGEuYXNzZXNzbWVudC5mb3JtSWQsXHJcbiAgICB9XHJcbiAgICB0aGlzLnRvY1N2Yy5zdWJtaXREcmFmdEFzc2lnbm1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzICYmIHJlcy5yZXNwb25zZUNvZGUgJiYgcmVzLnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xyXG4gICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdBc3NpZ25tZW50IHNhdmVkIGFzIGEgZHJhZnQnKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgfVxyXG4gICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgYXNzaWdubWVudCcsIGVycm9yKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCkge1xyXG4gICAgaWYgKHRoaXMuZmlsZVVybCkge1xyXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZmlsZVVybCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcmV0cnlMb2FkKCkge1xyXG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcclxuICAgIHRoaXMucmVhZEZpbGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZmlsZVVybCkge1xyXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuZmlsZVVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImRvY3VtZW50LXZpZXdlci1jb250YWluZXJcIj5cclxuICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNDBcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPHAgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIGRvY3VtZW50Li4uPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiZXJyb3ItY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJlcnJvci1pY29uXCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj57eyBlcnJvck1lc3NhZ2UgfX08L3A+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWRpdlwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogY2FsYygxMDB2aCAtIDEwN3B4KTtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnQtdGl0bGUgZm9udC1ib2xkIHAtNSBtYi01IGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdj5Qb3N0IEFzc2lnbm1lbnQgUHJldmlldzwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJkaXNjYXJkLWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVDbG9zZSgpXCI+XHJcbiAgICAgICAgICAgIHt7ICd1c2VyQXNzaWdubWVudHMuZGlzY2FyZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPVwic3VibWl0LWJ0biBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVTdWJtaXRBc3NpZ25tZW50KClcIj5cclxuICAgICAgICAgICAge3sgJ3VzZXJBc3NpZ25tZW50cy5zdWJtaXQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJzXCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI0MFwiIGNsYXNzPVwiYmx1ZS1zcGlubmVyIG0tYXV0b1wiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd1BkZlZpZXdlciAmJiAhaXNMb2FkaW5nICYmICFlcnJvclwiIGNsYXNzPVwiaWZyYW1lLWNvbnRhaW5lciBwbC00XCI+XHJcbiAgICAgICAgPGlmcmFtZSB0aXRsZT1cIlBERiBEb2N1bWVudCBWaWV3ZXJcIiBbc3JjXT1cInNhZmVTcmNcIiBoZWlnaHQ9XCI2MDBweFwiIHN0eWxlPVwiYm9yZGVyOiBub25lO1wiIChsb2FkKT1cIm9uSWZyYW1lTG9hZCgpXCJcclxuICAgICAgICAgIChlcnJvcik9XCJvbklmcmFtZUVycm9yKClcIj5cclxuICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|