@sunbird-cb/collection 1.0.45 → 1.0.46

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.
@@ -236,7 +236,7 @@ var CardContentComponent = (function (_super) {
236
236
  CardContentComponent.decorators = [
237
237
  { type: Component, args: [{
238
238
  selector: 'ws-widget-card-content',
239
- template: "<!-- -->\r\n<ng-container *ngIf=\"widgetData && (((widgetData?.deletedMode || 'none') === 'hide' && !!!isLiveOrMarkForDeletion)\r\n? false\r\n: !((widgetData?.intranetMode || 'none') === 'hide' && !!showIntranetContent))\"\r\n [ngSwitch]=\"( (widgetData && widgetData?.cardSubType) || 'cardStandard')\">\r\n <ng-container *ngSwitchCase=\"'minimal'\" [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'basic-info'\" [ngTemplateOutlet]=\"cardBasicInformation\"></ng-container>\r\n <!-- <ng-container *ngSwitchCase=\"'card-user-details'\" [ngTemplateOutlet]=\"cardWithUserDetails\"></ng-container> -->\r\n <ng-container *ngSwitchCase=\"'card-description-back'\" [ngTemplateOutlet]=\"cardDescriptionBack\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'basic-details'\" [ngTemplateOutlet]=\"cardBasicDetails\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'card-discussion'\" [ngTemplateOutlet]=\"cardDiscussion\"></ng-container>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardStandard\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #cardMinimal>\r\n <div [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-minimal-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" class=\"card-link\" role=\"link\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img [src]=\"widgetData.content.appIcon\" class=\"card-thumbnail ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <div class=\"card-overlay\">\r\n <h3 *ngIf=\"widgetData.content.name\" class=\"text-truncate card-title\">\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\">\r\n {{ widgetData.content.name }}\r\n </a>\r\n </h3>\r\n <div class=\"flex justify-between items-center\">\r\n <div>\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\" class=\"mr-4 font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n <span *ngIf=\"widgetData.content.duration\" i18n-title title=\"Duration\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </span>\r\n </div>\r\n <button mat-icon-button i18n-aria-label aria-label=\"action items\" [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<mat-menu #cardMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <div mat-menu-item>\r\n <ws-widget-btn-content-download [widgetData]=\"\r\n widgetData.content\r\n | pipePartialContent\r\n : [\r\n 'identifier',\r\n 'contentType',\r\n 'resourceType',\r\n 'mimeType',\r\n 'downloadUrl',\r\n 'isExternal',\r\n 'artifactUrl'\r\n ]\r\n \"></ws-widget-btn-content-download>\r\n <ws-widget-btn-content-like [widgetData]=\"widgetData.content | pipePartialContent: ['identifier']\">\r\n </ws-widget-btn-content-like>\r\n <ws-widget-btn-content-mail-me [widgetData]=\"widgetData.content\"></ws-widget-btn-content-mail-me>\r\n <ws-widget-btn-content-share [widgetData]=\"widgetData.content\"></ws-widget-btn-content-share>\r\n <ws-widget-btn-channel-analytics [widgetData]=\"widgetData.content\"></ws-widget-btn-channel-analytics>\r\n <ws-widget-btn-kb [contentId]=\"widgetData?.content?.identifier\" [forPreview]=\"false\"\r\n [contentName]=\"widgetData?.content?.name\" [contentType]=\"widgetData?.content?.contentType\">\r\n </ws-widget-btn-kb>\r\n <!-- <ws-widget-btn-follow [widgetData]=\"{\r\n targetId: widgetData?.content?.identifier,\r\n type: widgetData?.content?.contentType\r\n }\" *ngIf=\"isKnowledgeBoard\"></ws-widget-btn-follow> -->\r\n <ws-widget-btn-goals *ngIf=\"btnGoalsConfig\" [widgetData]=\"btnGoalsConfig\"></ws-widget-btn-goals>\r\n <ws-widget-btn-playlist *ngIf=\"btnPlaylistConfig\" [widgetData]=\"btnPlaylistConfig\">\r\n </ws-widget-btn-playlist>\r\n <ws-widget-btn-kb-analytics [widgetData]=\"\r\n widgetData.content\r\n | pipePartialContent\r\n : [\r\n 'identifier',\r\n 'contentType',\r\n 'resourceType',\r\n 'mimeType',\r\n 'downloadUrl',\r\n 'isExternal',\r\n 'artifactUrl'\r\n ]\r\n \"></ws-widget-btn-kb-analytics>\r\n </div>\r\n </ng-template>\r\n</mat-menu>\r\n\r\n<ng-template #cardSpaceSaving>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-space-saving-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <ng-container *ngIf=\"!isCardFlipped\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"card-header-meta\">\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\" class=\"ws-mat-primary-text font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n <span *ngIf=\"widgetData.content.duration\" class=\"text-gray-600\" i18n-title title=\"Duration\">\r\n &nbsp;&nbsp;|&nbsp;&nbsp;{{\r\n widgetData.content.duration | pipeDurationTransform: 'hms'\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title text-truncate title-text\" title=\"Title\" i18n-title>\r\n {{ widgetData.content.name }}\r\n </div>\r\n </a>\r\n <div class=\"mt-4 flex justify-between items-center flip-actions\">\r\n <div>\r\n <div *ngIf=\"widgetData.content.sourceName\" class=\"ws-mat-primary-text mat-subheading-1 source-name\"\r\n i18n-title title=\"Source\">\r\n {{ widgetData.content.sourceName }}\r\n </div>\r\n <div *ngIf=\"widgetData.content.complexityLevel\" i18n-title title=\"Complexity Level\" class=\"text-gray-600\">\r\n {{ widgetData.content.complexityLevel }}\r\n </div>\r\n </div>\r\n <div class=\"flex\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" (click)=\"isCardFlipped = !isCardFlipped\" mat-icon-button i18n-aria-label\r\n aria-label=\"action items\">\r\n <mat-icon>flip_to_back</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n <ng-container *ngIf=\"isCardFlipped\">\r\n <mat-card-content>\r\n <div class=\"card-header-meta\">\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\" class=\"ws-mat-primary-text font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n <span *ngIf=\"widgetData.content.duration\" class=\"text-gray-600\" i18n-title title=\"Duration\">\r\n &nbsp;&nbsp;|&nbsp;&nbsp;{{\r\n widgetData.content.duration | pipeDurationTransform: 'hms'\r\n }}\r\n </span>\r\n </div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" aria-label=\"Content\"\r\n i18n-aria-label=\"Content | Click to view\" class=\"ws-mat-primary-text mat-title text-truncate title-text\">\r\n {{ widgetData.content.name }}\r\n </a>\r\n <div *ngIf=\"widgetData?.content?.description\" class=\"mt-4 flip-desc-text ws-mat-text-block-fade-gradient\">\r\n {{ widgetData?.content?.description }}\r\n </div>\r\n <div class=\"mt-4 flex justify-between items-center flip-actions\">\r\n <div>\r\n <div *ngIf=\"widgetData.content.sourceName\" class=\"ws-mat-primary-text mat-subheading-1 source-name\"\r\n i18n-title title=\"Source\">\r\n {{ widgetData.content.sourceName }}\r\n </div>\r\n <div *ngIf=\"widgetData.content.complexityLevel\" i18n-title title=\"Complexity Level\" class=\"text-gray-600\">\r\n {{ widgetData.content.complexityLevel }}\r\n </div>\r\n </div>\r\n <div class=\"flex\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" (click)=\"isCardFlipped = !isCardFlipped\" mat-icon-button aria-label=\"action items\">\r\n <mat-icon>flip_to_front</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #rating>\r\n <div class=\"flex items-center mr-2\">\r\n <mat-icon class=\"mr-1\" *ngIf=\"widgetData?.content?.averageRating == 5\" color=\"accent\">star</mat-icon>\r\n <mat-icon class=\"mr-1\" *ngIf=\"widgetData?.content?.averageRating && widgetData.content.averageRating != 5\"\r\n color=\"accent\">star_half</mat-icon>\r\n <mat-icon class=\"mr-1\" *ngIf=\"!widgetData?.content?.averageRating\">star_border</mat-icon>\r\n <span>{{ widgetData?.content?.averageRating | number: '1.1-1' }}</span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #cardBasicInformation>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-basic-infomartion-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n </a>\r\n\r\n <mat-card-content class=\"m-small\">\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"ws-mat-primary-background text-truncate px-4 py-2 -mx-4 text-white\">\r\n <span *ngIf=\"widgetData.content?.complexityLevel\">{{\r\n widgetData.content?.complexityLevel\r\n }}</span>\r\n\r\n <span i18n *ngIf=\"widgetData.content?.subTitle\">\r\n |\r\n </span>\r\n <span matTooltipPosition=\"right\" [matTooltip]=\"widgetData.content?.subTitle\">\r\n {{ widgetData.content?.subTitle }}\r\n </span>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <div class=\"h-5\">\r\n <div *ngIf=\"showContentTag && widgetData.contentTags && widgetData.contentTags.tag\" i18n\r\n class=\"mode-tag px-2 ws-mat-primary-background\">\r\n {{ widgetData.contentTags.tag }}\r\n </div>\r\n </div>\r\n </a>\r\n </mat-card-content>\r\n <div class=\"flex justify-between items-center\">\r\n <img alt=\"source img\" [src]=\"widgetData.content.sourceIconUrl\" *ngIf=\"widgetData.content.sourceIconUrl\"\r\n class=\"source-image mr-1\" />\r\n <div *ngIf=\"widgetData.content.sourceName\" class=\"source-name w-64 text-truncate\" i18n-title title=\"Source\">\r\n {{ widgetData.content.sourceName }}\r\n </div>\r\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\" [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #cardDescriptionBack>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-Client-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <ng-container *ngIf=\"!isCardFlipped\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" class=\"rounded-t\" role=\"link\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <button class=\"detail-button ws-mat-primary-lite-background-op30\" mat-icon-button (click)=\"isCardFlipped = true\"\r\n aria-label=\"Details\" i18n-aria-label=\"Details | Click to see details\">\r\n <mat-icon>flip_to_back</mat-icon>\r\n </button>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"text-gray-600 complexity flex-middle\">\r\n <mat-icon matTooltip=\"{{ imageIcon[1] }}\">{{ imageIcon[0] }}</mat-icon>\r\n\r\n <div class=\"ws-mat-primary-text pl-2 text-lg title-text margin-bottom-xs margin-top-xs\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <!-- <mat-icon>check_circle_outline</mat-icon> -->\r\n </div>\r\n <div class=\"text-gray-600 duration flex-between flex-center pb-1\">\r\n <div *ngIf=\"widgetData.content.duration\" i18n-title title=\"Duration\" class=\"overflow-hidden\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n <div *ngIf=\"widgetData.content.viewCount && widgetData.content.viewCount.Client\" class=\"duration-time\"\r\n i18n-title title=\"View Count\">\r\n {{ widgetData.content.viewCount.Client | pipeCountTransform }} views\r\n </div>\r\n <div *ngIf=\"!widgetData.content.viewCount || !widgetData.content.viewCount.Client\" class=\"duration-time\"\r\n i18n-title title=\"View Count\">\r\n No views\r\n </div>\r\n <div *ngIf=\"widgetData.content.resourceType\" class=\"resource-type\" i18n-title title=\"resource Type\">\r\n {{ widgetData.content.resourceType }}\r\n </div>\r\n </div>\r\n\r\n <!-- <mat-chip-list>\r\n <mat-chip color=\"accent\" selected>\r\n OnBoarding\r\n </mat-chip>\r\n </mat-chip-list> -->\r\n </a>\r\n <mat-divider></mat-divider>\r\n <div class=\"flex flex-middle\">\r\n <ws-widget-btn-content-share [widgetData]=\"widgetData.content\"></ws-widget-btn-content-share>\r\n <ws-widget-btn-content-like [color]=\"'primary'\" class=\"flex items-center\"\r\n [widgetData]=\"widgetData.content | pipePartialContent: ['identifier']\" [likesCount]=\"widgetData.likes\">\r\n </ws-widget-btn-content-like>\r\n\r\n <ws-widget-btn-playlist *ngIf=\"btnPlaylistConfig\" [widgetData]=\"btnPlaylistConfig\">\r\n </ws-widget-btn-playlist>\r\n <ws-widget-btn-content-download [widgetData]=\"\r\n widgetData.content\r\n | pipePartialContent\r\n : [\r\n 'identifier',\r\n 'contentType',\r\n 'resourceType',\r\n 'mimeType',\r\n 'downloadUrl',\r\n 'isExternal',\r\n 'artifactUrl'\r\n ]\r\n \"></ws-widget-btn-content-download>\r\n\r\n <mat-icon class=\"px-2 cursor-pointer\" aria-label=\"Comment\" i18n-aria-label matTooltip=\"Comment\"\r\n i18n-matTooltip=\"Comment Button\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" [fragment]=\"'discussion-forum'\">\r\n comment</mat-icon>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n <ng-container *ngIf=\"isCardFlipped\">\r\n <div class=\"flex items-center\">\r\n <h2 class=\"mat-subheading-2 flex-1 min-w-0 margin-remove-bottom\" i18n>Description</h2>\r\n <button mat-icon-button (click)=\"isCardFlipped = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"text-description-trim mat-body-1\">\r\n {{ widgetData.content.description }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #cardBasicDetails>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-standard-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"text-gray-600 complexity flex-between flex-center\">\r\n <div *ngIf=\"widgetData.content.duration\" class=\"duration\" i18n-title title=\"Duration\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <div class=\"description-text ws-mat-text-block-fade-gradient mb-4\" i18n-title title=\"Description\">\r\n {{ widgetData.content.description | pipeHtmlTagRemoval }}\r\n </div>\r\n <div class=\"text-gray-600 complexity flex-end\">\r\n <div class=\"flex items-center\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\r\n [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </a>\r\n </mat-card-content>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n\r\n<ng-template #cardDiscussion>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-discussions-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <mat-card-content>\r\n\r\n <!-- <div class=\"text-gray-600 complexity flex-between flex-center\">\r\n <div *ngIf=\"widgetData.content.duration\" class=\"duration\" i18n-title title=\"Duration\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n </div> -->\r\n <!-- <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div> -->\r\n <div class=\"flex flex-1 flex-row\">\r\n <div class=\"flex-9 description-text mb-4\" i18n-title title=\"Description\">\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"['/app/discuss']\" class=\"flex flex-column\"\r\n [queryParams]=\"{'disid':'abc-bcdf-mnj-llk'}\" role=\"link\" aria-label=\"Content\" i18n-aria-label>\r\n <h2 class=\"ws-mat-primary-text mat-title title-text\"> {{ widgetData.content.name }}</h2>\r\n </a>\r\n </div>\r\n <div class=\"flex flex-1\">\r\n <div class=\"ws-mat-default-text\">\r\n <span>{{5}} hours ago</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-1 flex-row\">\r\n <div class=\"flex-9 description-text mb-4\" i18n-title title=\"Description\">\r\n Asked by <a (click)=\"raiseTelemetry()\" [routerLink]=\"['/app/person-profile']\"\r\n [queryParams]=\"{'emailId':'amit.sengar@tarento.com'}\" role=\"link\" aria-label=\"Content\" i18n-aria-label>\r\n <span class=\"ws-mat-default-text\">{{'Amit Kumar'}}</span>\r\n </a>\r\n </div>\r\n <div class=\"flex flex-1\">\r\n <div class=\"typeofc\">\r\n <span>Law</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <mat-accordion>\r\n <mat-expansion-panel class=\"no-box\" (opened)=\"panelOpenState = true\" (closed)=\"panelOpenState = false\">\r\n <mat-expansion-panel-header #panelH (click)=\"panelH._toggle()\">\r\n <mat-panel-title> -->\r\n <div class=\"flex flex-1 flex-row\">\r\n <div class=\"flex flex-1\">\r\n <div class=\"flex flex-1 flex-row\">\r\n <span>\r\n <mat-icon class=\"ws-mat-warn-text\">thumb_up_off_alt</mat-icon>\r\n </span>\r\n &nbsp;\r\n <h3 class=\"ws-mat-warn-text\">{{21}}</h3>\r\n &nbsp;\r\n &nbsp;\r\n <span>\r\n <mat-icon class=\"ws-mat-primary-text\">reply</mat-icon>\r\n </span>\r\n &nbsp;\r\n <h3 class=\"ws-mat-warn-text\">Reply</h3>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-1 center-right\">\r\n <span>view {{2}} replies\r\n <!-- <mat-icon>keyboard_arrow_up </mat-icon> -->\r\n </span>\r\n </div>\r\n </div>\r\n <!-- </mat-panel-title>\r\n <mat-panel-description>\r\n <span class=\"flex flex-1 center-right\" (click)=\"panelH._toggle()\">view {{2}} replies</span>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div>\r\n <p>I'm visible because I am open</p>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion> -->\r\n\r\n\r\n </mat-card-content>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #cardStandard>\r\n <mat-card class=\"card-standard-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <!-- <ws-widget-content-progress\r\n class=\"progress-bar\"\r\n *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\"\r\n ></ws-widget-content-progress> -->\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <ng-container *ngIf=\"!isCardFlipped\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <!-- <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" class=\"rounded-t\" role=\"link\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\"> -->\r\n <div style=\"position: relative; z-index: 1;\">\r\n <img mat-card-image style=\"position: absolute; z-index: 2;\" [src]=\"widgetData.content.appIcon\"\r\n class=\"card-img ws-mat-primary-lite-background\" [wsUtilsDefaultThumbnail]=\"defaultThumbnail\"\r\n [alt]=\"widgetData.content.name\" />\r\n <div class=\"source-div\">\r\n <!-- [src]=\"sourseIcon(widgetData.content.sourceName)\" -->\r\n <img [src]=\"widgetData.content.creatorLogo\" class=\"source-icon\" [wsUtilsDefaultThumbnail]=\"defaultSLogo\"\r\n [alt]=\"(widgetData.content.sourceName + '_' + widgetData.content.identifier)\" />\r\n <!-- [title]=\"widgetData.content.sourceName\" -->\r\n </div>\r\n </div>\r\n <!-- </a> -->\r\n <button *ngIf=\"showFlip\" class=\"detail-button ws-mat-primary-lite-background-op30\" mat-icon-button\r\n (click)=\"isCardFlipped = true\" aria-label=\"Details\" i18n-aria-label=\"Details | Click to see details\">\r\n <mat-icon>flip_to_back</mat-icon>\r\n </button>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" i18n-aria-label>\r\n\r\n <div class=\"text-gray-time complexity flex-between flex-center\">\r\n <!-- <div *ngIf=\"widgetData.content.complexityLevel\" i18n-title title=\"Complexity Level\">\r\n {{ widgetData.content.complexityLevel }}\r\n </div> -->\r\n <div *ngIf=\"showIsMode\" i18n i18n-title title=\"Newly Added\"\r\n class=\"mode-tag px-2 ws-mat-accent-background\">\r\n Newly Added\r\n </div>\r\n\r\n <div *ngIf=\"widgetData.content.duration\" class=\"duration\">\r\n <mat-icon>access_time</mat-icon>\r\n <span class=\"time-text\">{{ widgetData.content.duration | pipeDurationTransform: 'hms' }}</span>\r\n </div>\r\n </div>\r\n\r\n <div [id]=\"'m-c-'+ widgetData.content?.identifier\"\r\n class=\"mat-subheading-1 title-text ws-mat-text-block-fade-gradient\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <div class=\"mat-body-2 ws-mat-primary-text description-text ws-mat-text-block-fade-gradient mb-10\">\r\n {{ widgetData.content.description | pipeHtmlTagRemoval }}\r\n <!-- {{widgetData.content | json}} -->\r\n <!-- {{widgetData.content.sourceName}} -->\r\n </div>\r\n </a>\r\n <div class=\"mt-4 flex justify-between items-center absolute bottom-0 left-0 right-0 px-3 py-2\">\r\n <!-- <ws-widget-display-content-type\r\n i18n-title\r\n title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\"\r\n class=\"ws-mat-primary-text font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\"\r\n >\r\n </ws-widget-display-content-type> -->\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\" *ngIf=\"widgetData.content?.contentType\"\r\n class=\"ws-mat-primary-text font-normal\" [displayContentType]=\"widgetData.content?.contentType==='Collection'\r\n ?'Module'\r\n :(widgetData.content?.contentType==='Learning Path'?'Program':widgetData.content?.contentType)\">\r\n </ws-widget-display-content-type>\r\n <div class=\"flex items-center\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" mat-icon-button i18n-aria-label [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n <ng-container *ngIf=\"isCardFlipped\">\r\n <div class=\"flex items-center\">\r\n <h2 class=\"mat-subheading-2 flex-1 min-w-0 margin-remove-bottom\" i18n>Reason</h2>\r\n <button mat-icon-button (click)=\"isCardFlipped = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"text-justify mat-body-1\">\r\n {{ widgetData.content.reason }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n\r\n<!-- <ng-template #cardWithUserDetails>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData?.content?.name\"\r\n class=\"card-with-user-details-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <div *ngIf=\"\r\n widgetData?.content?.creatorDetails?.length ||\r\n widgetData?.content?.creatorContacts?.length\r\n \" class=\"flex flex-wrap items-center mb-4\">\r\n <ws-widget-user-image class=\"author-image\" [userName]=\"\r\n widgetData?.content?.creatorDetails && (widgetData.content?.creatorDetails)[0]?.name\r\n ? (widgetData?.content?.creatorDetails)[0]?.name\r\n : (widgetData?.content?.creatorContacts)[0]?.name\r\n \" [userId]=\"\r\n widgetData?.content?.creatorDetails && (widgetData.content?.creatorDetails)[0]?.id\r\n ? (widgetData?.content?.creatorDetails)[0]?.id\r\n : (widgetData?.content?.creatorContacts)[0]?.id\r\n \" [imageType]=\"'name-initial'\"></ws-widget-user-image>\r\n <div class=\"width-expand\">\r\n <div class=\"margin-remove font-semibold text-truncate\">\r\n {{\r\n widgetData.content?.creatorDetails && (widgetData.content?.creatorDetails)[0].name\r\n ? (widgetData.content?.creatorDetails)[0]?.name === 'null null'\r\n ? 'Not disclosed'\r\n : (widgetData.content?.creatorDetails)[0]?.name\r\n : (widgetData.content?.creatorContacts)[0]?.name === 'null null'\r\n ? 'Not disclosed'\r\n : (widgetData.content?.creatorContacts)[0]?.name\r\n }}\r\n {{ checkDisplayName }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <img mat-card-image [src]=\"widgetData?.content?.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [ngClass]=\"{ 'greyed-img': isGreyedImage }\" [wsUtilsDefaultThumbnail]=\"defaultThumbnail\"\r\n [alt]=\"widgetData?.content?.name\" [title]=\"widgetData.content.name\" />\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData?.content?.identifier\"\r\n [contentId]=\"widgetData?.content?.identifier\" [progress]=\"widgetData?.content?.progress\">\r\n </ws-widget-content-progress>\r\n </a>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData?.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData?.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div *ngIf=\"widgetData?.content?.resourceType || widgetData?.content?.contentType\"\r\n class=\"back-color px-4 py-2 -mx-4 text-white\">\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData?.content?.displayContentType\" class=\"font-normal text-xs\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n </a>\r\n </mat-card-content>\r\n <div class=\"flex items-center justify-between flex-row-reverse space-0 mb-0\">\r\n <ws-widget-btn-content-like [color]=\"'primary'\" class=\"flex items-center\"\r\n [widgetData]=\"widgetData?.content | pipePartialContent: ['identifier']\" [likesCount]=\"widgetData?.likes\">\r\n </ws-widget-btn-content-like>\r\n\r\n <div *ngIf=\"showContentTag || false\" i18n class=\"mode-tag px-2 ws-mat-primary-background\">\r\n {{ widgetData.contentTags.tag }}\r\n </div>\r\n </div>\r\n </div>\r\n </mat-card>\r\n</ng-template> -->",
239
+ template: "<!-- -->\r\n<ng-container *ngIf=\"widgetData && (((widgetData?.deletedMode || 'none') === 'hide' && !!!isLiveOrMarkForDeletion)\r\n? false\r\n: !((widgetData?.intranetMode || 'none') === 'hide' && !!showIntranetContent))\"\r\n [ngSwitch]=\"( (widgetData && widgetData?.cardSubType) || 'cardStandard')\">\r\n <ng-container *ngSwitchCase=\"'minimal'\" [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'basic-info'\" [ngTemplateOutlet]=\"cardBasicInformation\"></ng-container>\r\n <!-- <ng-container *ngSwitchCase=\"'card-user-details'\" [ngTemplateOutlet]=\"cardWithUserDetails\"></ng-container> -->\r\n <ng-container *ngSwitchCase=\"'card-description-back'\" [ngTemplateOutlet]=\"cardDescriptionBack\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'basic-details'\" [ngTemplateOutlet]=\"cardBasicDetails\"></ng-container>\r\n <ng-container *ngSwitchCase=\"'card-discussion'\" [ngTemplateOutlet]=\"cardDiscussion\"></ng-container>\r\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardStandard\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-template #cardMinimal>\r\n <div [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-minimal-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" class=\"card-link\" role=\"link\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img [src]=\"widgetData.content.appIcon\" class=\"card-thumbnail ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <div class=\"card-overlay\">\r\n <h3 *ngIf=\"widgetData.content.name\" class=\"text-truncate card-title\">\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\">\r\n {{ widgetData.content.name }}\r\n </a>\r\n </h3>\r\n <div class=\"flex justify-between items-center\">\r\n <div>\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\" class=\"mr-4 font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n <span *ngIf=\"widgetData.content.duration\" i18n-title title=\"Duration\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </span>\r\n </div>\r\n <button mat-icon-button i18n-aria-label aria-label=\"action items\" [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<mat-menu #cardMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <div mat-menu-item>\r\n <ws-widget-btn-content-download [widgetData]=\"\r\n widgetData.content\r\n | pipePartialContent\r\n : [\r\n 'identifier',\r\n 'contentType',\r\n 'resourceType',\r\n 'mimeType',\r\n 'downloadUrl',\r\n 'isExternal',\r\n 'artifactUrl'\r\n ]\r\n \"></ws-widget-btn-content-download>\r\n <ws-widget-btn-content-like [widgetData]=\"widgetData.content | pipePartialContent: ['identifier']\">\r\n </ws-widget-btn-content-like>\r\n <ws-widget-btn-content-mail-me [widgetData]=\"widgetData.content\"></ws-widget-btn-content-mail-me>\r\n <ws-widget-btn-content-share [widgetData]=\"widgetData.content\"></ws-widget-btn-content-share>\r\n <ws-widget-btn-channel-analytics [widgetData]=\"widgetData.content\"></ws-widget-btn-channel-analytics>\r\n <ws-widget-btn-kb [contentId]=\"widgetData?.content?.identifier\" [forPreview]=\"false\"\r\n [contentName]=\"widgetData?.content?.name\" [contentType]=\"widgetData?.content?.contentType\">\r\n </ws-widget-btn-kb>\r\n <!-- <ws-widget-btn-follow [widgetData]=\"{\r\n targetId: widgetData?.content?.identifier,\r\n type: widgetData?.content?.contentType\r\n }\" *ngIf=\"isKnowledgeBoard\"></ws-widget-btn-follow> -->\r\n <ws-widget-btn-goals *ngIf=\"btnGoalsConfig\" [widgetData]=\"btnGoalsConfig\"></ws-widget-btn-goals>\r\n <ws-widget-btn-playlist *ngIf=\"btnPlaylistConfig\" [widgetData]=\"btnPlaylistConfig\">\r\n </ws-widget-btn-playlist>\r\n <ws-widget-btn-kb-analytics [widgetData]=\"\r\n widgetData.content\r\n | pipePartialContent\r\n : [\r\n 'identifier',\r\n 'contentType',\r\n 'resourceType',\r\n 'mimeType',\r\n 'downloadUrl',\r\n 'isExternal',\r\n 'artifactUrl'\r\n ]\r\n \"></ws-widget-btn-kb-analytics>\r\n </div>\r\n </ng-template>\r\n</mat-menu>\r\n\r\n<ng-template #cardSpaceSaving>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-space-saving-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <ng-container *ngIf=\"!isCardFlipped\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"card-header-meta\">\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\" class=\"ws-mat-primary-text font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n <span *ngIf=\"widgetData.content.duration\" class=\"text-gray-600\" i18n-title title=\"Duration\">\r\n &nbsp;&nbsp;|&nbsp;&nbsp;{{\r\n widgetData.content.duration | pipeDurationTransform: 'hms'\r\n }}\r\n </span>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title text-truncate title-text\" title=\"Title\" i18n-title>\r\n {{ widgetData.content.name }}\r\n </div>\r\n </a>\r\n <div class=\"mt-4 flex justify-between items-center flip-actions\">\r\n <div>\r\n <div *ngIf=\"widgetData.content.sourceName\" class=\"ws-mat-primary-text mat-subheading-1 source-name\"\r\n i18n-title title=\"Source\">\r\n {{ widgetData.content.sourceName }}\r\n </div>\r\n <div *ngIf=\"widgetData.content.complexityLevel\" i18n-title title=\"Complexity Level\" class=\"text-gray-600\">\r\n {{ widgetData.content.complexityLevel }}\r\n </div>\r\n </div>\r\n <div class=\"flex\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" (click)=\"isCardFlipped = !isCardFlipped\" mat-icon-button i18n-aria-label\r\n aria-label=\"action items\">\r\n <mat-icon>flip_to_back</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n <ng-container *ngIf=\"isCardFlipped\">\r\n <mat-card-content>\r\n <div class=\"card-header-meta\">\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\" class=\"ws-mat-primary-text font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n <span *ngIf=\"widgetData.content.duration\" class=\"text-gray-600\" i18n-title title=\"Duration\">\r\n &nbsp;&nbsp;|&nbsp;&nbsp;{{\r\n widgetData.content.duration | pipeDurationTransform: 'hms'\r\n }}\r\n </span>\r\n </div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" aria-label=\"Content\"\r\n i18n-aria-label=\"Content | Click to view\" class=\"ws-mat-primary-text mat-title text-truncate title-text\">\r\n {{ widgetData.content.name }}\r\n </a>\r\n <div *ngIf=\"widgetData?.content?.description\" class=\"mt-4 flip-desc-text ws-mat-text-block-fade-gradient\">\r\n {{ widgetData?.content?.description }}\r\n </div>\r\n <div class=\"mt-4 flex justify-between items-center flip-actions\">\r\n <div>\r\n <div *ngIf=\"widgetData.content.sourceName\" class=\"ws-mat-primary-text mat-subheading-1 source-name\"\r\n i18n-title title=\"Source\">\r\n {{ widgetData.content.sourceName }}\r\n </div>\r\n <div *ngIf=\"widgetData.content.complexityLevel\" i18n-title title=\"Complexity Level\" class=\"text-gray-600\">\r\n {{ widgetData.content.complexityLevel }}\r\n </div>\r\n </div>\r\n <div class=\"flex\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" (click)=\"isCardFlipped = !isCardFlipped\" mat-icon-button aria-label=\"action items\">\r\n <mat-icon>flip_to_front</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #rating>\r\n <div class=\"flex items-center mr-2\">\r\n <mat-icon class=\"mr-1\" *ngIf=\"widgetData?.content?.averageRating == 5\" color=\"accent\">star</mat-icon>\r\n <mat-icon class=\"mr-1\" *ngIf=\"widgetData?.content?.averageRating && widgetData.content.averageRating != 5\"\r\n color=\"accent\">star_half</mat-icon>\r\n <mat-icon class=\"mr-1\" *ngIf=\"!widgetData?.content?.averageRating\">star_border</mat-icon>\r\n <span>{{ widgetData?.content?.averageRating | number: '1.1-1' }}</span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #cardBasicInformation>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-basic-infomartion-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n </a>\r\n\r\n <mat-card-content class=\"m-small\">\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"ws-mat-primary-background text-truncate px-4 py-2 -mx-4 text-white\">\r\n <span *ngIf=\"widgetData.content?.complexityLevel\">{{\r\n widgetData.content?.complexityLevel\r\n }}</span>\r\n\r\n <span i18n *ngIf=\"widgetData.content?.subTitle\">\r\n |\r\n </span>\r\n <span matTooltipPosition=\"right\" [matTooltip]=\"widgetData.content?.subTitle\">\r\n {{ widgetData.content?.subTitle }}\r\n </span>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <div class=\"h-5\">\r\n <div *ngIf=\"showContentTag && widgetData.contentTags && widgetData.contentTags.tag\" i18n\r\n class=\"mode-tag px-2 ws-mat-primary-background\">\r\n {{ widgetData.contentTags.tag }}\r\n </div>\r\n </div>\r\n </a>\r\n </mat-card-content>\r\n <div class=\"flex justify-between items-center\">\r\n <img alt=\"source img\" [src]=\"widgetData.content.sourceIconUrl\" *ngIf=\"widgetData.content.sourceIconUrl\"\r\n class=\"source-image mr-1\" />\r\n <div *ngIf=\"widgetData.content.sourceName\" class=\"source-name w-64 text-truncate\" i18n-title title=\"Source\">\r\n {{ widgetData.content.sourceName }}\r\n </div>\r\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\" [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #cardDescriptionBack>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-Client-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <ng-container *ngIf=\"!isCardFlipped\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" class=\"rounded-t\" role=\"link\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <button class=\"detail-button ws-mat-primary-lite-background-op30\" mat-icon-button (click)=\"isCardFlipped = true\"\r\n aria-label=\"Details\" i18n-aria-label=\"Details | Click to see details\">\r\n <mat-icon>flip_to_back</mat-icon>\r\n </button>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"text-gray-600 complexity flex-middle\">\r\n <mat-icon matTooltip=\"{{ imageIcon[1] }}\">{{ imageIcon[0] }}</mat-icon>\r\n\r\n <div class=\"ws-mat-primary-text pl-2 text-lg title-text margin-bottom-xs margin-top-xs\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <!-- <mat-icon>check_circle_outline</mat-icon> -->\r\n </div>\r\n <div class=\"text-gray-600 duration flex-between flex-center pb-1\">\r\n <div *ngIf=\"widgetData.content.duration\" i18n-title title=\"Duration\" class=\"overflow-hidden\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n <div *ngIf=\"widgetData.content.viewCount && widgetData.content.viewCount.Client\" class=\"duration-time\"\r\n i18n-title title=\"View Count\">\r\n {{ widgetData.content.viewCount.Client | pipeCountTransform }} views\r\n </div>\r\n <div *ngIf=\"!widgetData.content.viewCount || !widgetData.content.viewCount.Client\" class=\"duration-time\"\r\n i18n-title title=\"View Count\">\r\n No views\r\n </div>\r\n <div *ngIf=\"widgetData.content.resourceType\" class=\"resource-type\" i18n-title title=\"resource Type\">\r\n {{ widgetData.content.resourceType }}\r\n </div>\r\n </div>\r\n\r\n <!-- <mat-chip-list>\r\n <mat-chip color=\"accent\" selected>\r\n OnBoarding\r\n </mat-chip>\r\n </mat-chip-list> -->\r\n </a>\r\n <mat-divider></mat-divider>\r\n <div class=\"flex flex-middle\">\r\n <ws-widget-btn-content-share [widgetData]=\"widgetData.content\"></ws-widget-btn-content-share>\r\n <ws-widget-btn-content-like [color]=\"'primary'\" class=\"flex items-center\"\r\n [widgetData]=\"widgetData.content | pipePartialContent: ['identifier']\" [likesCount]=\"widgetData.likes\">\r\n </ws-widget-btn-content-like>\r\n\r\n <ws-widget-btn-playlist *ngIf=\"btnPlaylistConfig\" [widgetData]=\"btnPlaylistConfig\">\r\n </ws-widget-btn-playlist>\r\n <ws-widget-btn-content-download [widgetData]=\"\r\n widgetData.content\r\n | pipePartialContent\r\n : [\r\n 'identifier',\r\n 'contentType',\r\n 'resourceType',\r\n 'mimeType',\r\n 'downloadUrl',\r\n 'isExternal',\r\n 'artifactUrl'\r\n ]\r\n \"></ws-widget-btn-content-download>\r\n\r\n <mat-icon class=\"px-2 cursor-pointer\" aria-label=\"Comment\" i18n-aria-label matTooltip=\"Comment\"\r\n i18n-matTooltip=\"Comment Button\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" [fragment]=\"'discussion-forum'\">\r\n comment</mat-icon>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n <ng-container *ngIf=\"isCardFlipped\">\r\n <div class=\"flex items-center\">\r\n <h2 class=\"mat-subheading-2 flex-1 min-w-0 margin-remove-bottom\" i18n>Description</h2>\r\n <button mat-icon-button (click)=\"isCardFlipped = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"text-description-trim mat-body-1\">\r\n {{ widgetData.content.description }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #cardBasicDetails>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-standard-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <img mat-card-image [src]=\"widgetData.content.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [wsUtilsDefaultThumbnail]=\"defaultThumbnail\" [alt]=\"widgetData.content.name\"\r\n [title]=\"widgetData.content.name\" />\r\n </a>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div class=\"text-gray-600 complexity flex-between flex-center\">\r\n <div *ngIf=\"widgetData.content.duration\" class=\"duration\" i18n-title title=\"Duration\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <div class=\"description-text ws-mat-text-block-fade-gradient mb-4\" i18n-title title=\"Description\">\r\n {{ widgetData.content.description | pipeHtmlTagRemoval }}\r\n </div>\r\n <div class=\"text-gray-600 complexity flex-end\">\r\n <div class=\"flex items-center\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\r\n [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </a>\r\n </mat-card-content>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n\r\n<ng-template #cardDiscussion>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData.content.name\" class=\"card-discussions-container mr-6\"\r\n [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <mat-card-content>\r\n\r\n <!-- <div class=\"text-gray-600 complexity flex-between flex-center\">\r\n <div *ngIf=\"widgetData.content.duration\" class=\"duration\" i18n-title title=\"Duration\">\r\n {{ widgetData.content.duration | pipeDurationTransform: 'hms' }}\r\n </div>\r\n </div> -->\r\n <!-- <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div> -->\r\n <div class=\"flex flex-1 flex-row\">\r\n <div class=\"flex-9 description-text mb-4\" i18n-title title=\"Description\">\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"['/app/discuss']\" class=\"flex flex-column\"\r\n [queryParams]=\"{'disid':'abc-bcdf-mnj-llk'}\" role=\"link\" aria-label=\"Content\" i18n-aria-label>\r\n <h2 class=\"ws-mat-primary-text mat-title title-text\"> {{ widgetData.content.name }}</h2>\r\n </a>\r\n </div>\r\n <div class=\"flex flex-1\">\r\n <div class=\"ws-mat-default-text\">\r\n <span>{{5}} hours ago</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <mat-accordion>\r\n <mat-expansion-panel class=\"no-box\" (opened)=\"panelOpenState = true\" (closed)=\"panelOpenState = false\">\r\n <mat-expansion-panel-header #panelH (click)=\"panelH._toggle()\">\r\n <mat-panel-title> -->\r\n <div class=\"flex flex-1 flex-row\">\r\n <div class=\"flex flex-1\">\r\n <div class=\"flex flex-1 flex-row\">\r\n <span>\r\n <mat-icon class=\"ws-mat-warn-text\">thumb_up_off_alt</mat-icon>\r\n </span>\r\n &nbsp;\r\n <h3 class=\"ws-mat-warn-text\">{{21}}</h3>\r\n &nbsp;\r\n &nbsp;\r\n <span>\r\n <mat-icon class=\"ws-mat-primary-text\">reply</mat-icon>\r\n </span>\r\n &nbsp;\r\n <h3 class=\"ws-mat-warn-text\">Reply</h3>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-1 center-right\">\r\n <span>view {{2}} replies\r\n <!-- <mat-icon>keyboard_arrow_up </mat-icon> -->\r\n </span>\r\n </div>\r\n </div>\r\n <!-- </mat-panel-title>\r\n <mat-panel-description>\r\n <span class=\"flex flex-1 center-right\" (click)=\"panelH._toggle()\">view {{2}} replies</span>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n <div>\r\n <p>I'm visible because I am open</p>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion> -->\r\n\r\n\r\n </mat-card-content>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n<ng-template #cardStandard>\r\n <mat-card class=\"card-standard-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <!-- <ws-widget-content-progress\r\n class=\"progress-bar\"\r\n *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\"\r\n ></ws-widget-content-progress> -->\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <ng-container *ngIf=\"!isCardFlipped\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <!-- <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" class=\"rounded-t\" role=\"link\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\"> -->\r\n <div style=\"position: relative; z-index: 1;\">\r\n <img mat-card-image style=\"position: absolute; z-index: 2;\" [src]=\"widgetData.content.appIcon\"\r\n class=\"card-img ws-mat-primary-lite-background\" [wsUtilsDefaultThumbnail]=\"defaultThumbnail\"\r\n [alt]=\"widgetData.content.name\" />\r\n <div class=\"source-div\">\r\n <!-- [src]=\"sourseIcon(widgetData.content.sourceName)\" -->\r\n <img [src]=\"widgetData.content.creatorLogo\" class=\"source-icon\" [wsUtilsDefaultThumbnail]=\"defaultSLogo\"\r\n [alt]=\"(widgetData.content.sourceName + '_' + widgetData.content.identifier)\" />\r\n <!-- [title]=\"widgetData.content.sourceName\" -->\r\n </div>\r\n </div>\r\n <!-- </a> -->\r\n <button *ngIf=\"showFlip\" class=\"detail-button ws-mat-primary-lite-background-op30\" mat-icon-button\r\n (click)=\"isCardFlipped = true\" aria-label=\"Details\" i18n-aria-label=\"Details | Click to see details\">\r\n <mat-icon>flip_to_back</mat-icon>\r\n </button>\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData.content?.identifier\"\r\n [contentId]=\"widgetData.content?.identifier\" [progress]=\"widgetData.content?.progress\">\r\n </ws-widget-content-progress>\r\n\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" i18n-aria-label>\r\n\r\n <div class=\"text-gray-time complexity flex-between flex-center\">\r\n <!-- <div *ngIf=\"widgetData.content.complexityLevel\" i18n-title title=\"Complexity Level\">\r\n {{ widgetData.content.complexityLevel }}\r\n </div> -->\r\n <div *ngIf=\"showIsMode\" i18n i18n-title title=\"Newly Added\"\r\n class=\"mode-tag px-2 ws-mat-accent-background\">\r\n Newly Added\r\n </div>\r\n\r\n <div *ngIf=\"widgetData.content.duration\" class=\"duration\">\r\n <mat-icon>access_time</mat-icon>\r\n <span class=\"time-text\">{{ widgetData.content.duration | pipeDurationTransform: 'hms' }}</span>\r\n </div>\r\n </div>\r\n\r\n <div [id]=\"'m-c-'+ widgetData.content?.identifier\"\r\n class=\"mat-subheading-1 title-text ws-mat-text-block-fade-gradient\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n <div class=\"mat-body-2 ws-mat-primary-text description-text ws-mat-text-block-fade-gradient mb-10\">\r\n {{ widgetData.content.description | pipeHtmlTagRemoval }}\r\n <!-- {{widgetData.content | json}} -->\r\n <!-- {{widgetData.content.sourceName}} -->\r\n </div>\r\n </a>\r\n <div class=\"mt-4 flex justify-between items-center absolute bottom-0 left-0 right-0 px-3 py-2\">\r\n <!-- <ws-widget-display-content-type\r\n i18n-title\r\n title=\"Content Type\"\r\n *ngIf=\"widgetData.content?.displayContentType\"\r\n class=\"ws-mat-primary-text font-normal\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\"\r\n >\r\n </ws-widget-display-content-type> -->\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\" *ngIf=\"widgetData.content?.contentType\"\r\n class=\"ws-mat-primary-text font-normal\" [displayContentType]=\"widgetData.content?.contentType==='Collection'\r\n ?'Module'\r\n :(widgetData.content?.contentType==='Learning Path'?'Program':widgetData.content?.contentType)\">\r\n </ws-widget-display-content-type>\r\n <div class=\"flex items-center\">\r\n <ng-container [ngTemplateOutlet]=\"rating\"></ng-container>\r\n <button type=\"button\" mat-icon-button i18n-aria-label [matMenuTriggerFor]=\"cardMenu\">\r\n <mat-icon>more_vertical</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </ng-container>\r\n <ng-container *ngIf=\"isCardFlipped\">\r\n <div class=\"flex items-center\">\r\n <h2 class=\"mat-subheading-2 flex-1 min-w-0 margin-remove-bottom\" i18n>Reason</h2>\r\n <button mat-icon-button (click)=\"isCardFlipped = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"text-justify mat-body-1\">\r\n {{ widgetData.content.reason }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n </mat-card>\r\n</ng-template>\r\n\r\n<!-- <ng-template #cardWithUserDetails>\r\n <mat-card [attr.name]=\"'widget-card-content ' + widgetData?.content?.name\"\r\n class=\"card-with-user-details-container mr-6\" [ngClass]=\"{\r\n greyOut:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\" (click)=\"(showIntranetContent || !isLiveOrMarkForDeletion) && showSnackbar()\">\r\n <div class=\"display-contents\" [ngClass]=\"{\r\n disableClick:\r\n widgetData.deletedMode === 'greyOut' && !isLiveOrMarkForDeletion\r\n ? true\r\n : widgetData?.intranetMode === 'greyOut' && showIntranetContent\r\n }\">\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Content expired or deleted\" i18n-matTooltip\r\n matTooltip=\"Content may be expired or deleted\" *ngIf=\"!isLiveOrMarkForDeletion\"></div>\r\n <div class=\"status-danger\" role=\"note\" i18n-aria-label aria-label=\"Intranet content\" i18n-matTooltip\r\n matTooltip=\"Available only in Company's network\"\r\n *ngIf=\"widgetData?.intranetMode === 'greyOut' && showIntranetContent\"></div>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData.content | pipeContentRoute).queryParams\" role=\"link\" class=\"rounded-t\"\r\n aria-label=\"Content\" i18n-aria-label=\"Content | Click to view\">\r\n <div *ngIf=\"\r\n widgetData?.content?.creatorDetails?.length ||\r\n widgetData?.content?.creatorContacts?.length\r\n \" class=\"flex flex-wrap items-center mb-4\">\r\n <ws-widget-user-image class=\"author-image\" [userName]=\"\r\n widgetData?.content?.creatorDetails && (widgetData.content?.creatorDetails)[0]?.name\r\n ? (widgetData?.content?.creatorDetails)[0]?.name\r\n : (widgetData?.content?.creatorContacts)[0]?.name\r\n \" [userId]=\"\r\n widgetData?.content?.creatorDetails && (widgetData.content?.creatorDetails)[0]?.id\r\n ? (widgetData?.content?.creatorDetails)[0]?.id\r\n : (widgetData?.content?.creatorContacts)[0]?.id\r\n \" [imageType]=\"'name-initial'\"></ws-widget-user-image>\r\n <div class=\"width-expand\">\r\n <div class=\"margin-remove font-semibold text-truncate\">\r\n {{\r\n widgetData.content?.creatorDetails && (widgetData.content?.creatorDetails)[0].name\r\n ? (widgetData.content?.creatorDetails)[0]?.name === 'null null'\r\n ? 'Not disclosed'\r\n : (widgetData.content?.creatorDetails)[0]?.name\r\n : (widgetData.content?.creatorContacts)[0]?.name === 'null null'\r\n ? 'Not disclosed'\r\n : (widgetData.content?.creatorContacts)[0]?.name\r\n }}\r\n {{ checkDisplayName }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <img mat-card-image [src]=\"widgetData?.content?.appIcon\" class=\"card-img ws-mat-primary-lite-background\"\r\n [ngClass]=\"{ 'greyed-img': isGreyedImage }\" [wsUtilsDefaultThumbnail]=\"defaultThumbnail\"\r\n [alt]=\"widgetData?.content?.name\" [title]=\"widgetData.content.name\" />\r\n <ws-widget-content-progress class=\"progress-bar\" *ngIf=\"widgetData?.content?.identifier\"\r\n [contentId]=\"widgetData?.content?.identifier\" [progress]=\"widgetData?.content?.progress\">\r\n </ws-widget-content-progress>\r\n </a>\r\n <mat-card-content>\r\n <a (click)=\"raiseTelemetry()\" [routerLink]=\"(widgetData?.content | pipeContentRoute).url\"\r\n [queryParams]=\"(widgetData?.content | pipeContentRoute).queryParams\" role=\"link\" aria-label=\"Content\"\r\n i18n-aria-label>\r\n <div *ngIf=\"widgetData?.content?.resourceType || widgetData?.content?.contentType\"\r\n class=\"back-color px-4 py-2 -mx-4 text-white\">\r\n <ws-widget-display-content-type i18n-title title=\"Content Type\"\r\n *ngIf=\"widgetData?.content?.displayContentType\" class=\"font-normal text-xs\"\r\n [displayContentType]=\"widgetData.content?.displayContentType\">\r\n </ws-widget-display-content-type>\r\n </div>\r\n <div class=\"ws-mat-primary-text mat-title title-text title-truncate\">\r\n {{ widgetData.content.name }}\r\n </div>\r\n </a>\r\n </mat-card-content>\r\n <div class=\"flex items-center justify-between flex-row-reverse space-0 mb-0\">\r\n <ws-widget-btn-content-like [color]=\"'primary'\" class=\"flex items-center\"\r\n [widgetData]=\"widgetData?.content | pipePartialContent: ['identifier']\" [likesCount]=\"widgetData?.likes\">\r\n </ws-widget-btn-content-like>\r\n\r\n <div *ngIf=\"showContentTag || false\" i18n class=\"mode-tag px-2 ws-mat-primary-background\">\r\n {{ widgetData.contentTags.tag }}\r\n </div>\r\n </div>\r\n </div>\r\n </mat-card>\r\n</ng-template> -->",
240
240
  styles: [".card-minimal-container{position:relative}.card-minimal-container .card-link{width:265px;height:150px;display:block}.card-minimal-container .card-link .card-thumbnail{object-fit:contain;width:100%;height:100%}.card-minimal-container .card-overlay{position:absolute;bottom:4px;background-color:rgba(0,0,0,.55);color:#fff;padding:4px 12px;box-sizing:border-box;width:100%}.card-minimal-container .card-overlay .card-title{margin-bottom:-6px}.status-danger{width:16px;height:16px;position:absolute;border-radius:50%;top:16px;left:16px;pointer-events:auto;cursor:pointer;background:#ce3939}.card-space-saving-container{position:relative;width:265px;height:100%;box-sizing:border-box}.card-space-saving-container .progress-bar{display:block;width:calc(100% + 32px);margin-left:-16px;margin-top:-16px}.card-space-saving-container mat-card-content{margin:0 -4px;min-height:120px}.card-space-saving-container .card-img{height:150px;display:block}.card-space-saving-container .card-header-meta{margin-top:8px}.card-space-saving-container .title-text{display:block;margin:12px 0}.card-space-saving-container .flip-desc-text{position:relative;overflow:hidden;line-height:1.4em;height:5.6em;margin-bottom:36px}.card-space-saving-container .flip-actions{position:absolute;bottom:0;left:0;width:100%;padding:12px;box-sizing:border-box}.card-space-saving-container .flip-actions .source-name{margin-bottom:0;font-weight:400}.card-ford-container{padding:16px 16px 0;position:relative;width:220px;height:243px;overflow:hidden;box-sizing:border-box}.card-ford-container .progress-bar{display:block;width:calc(100% + 32px);margin-left:-16px;margin-top:-16px}.card-ford-container mat-card-content{margin:160px}.card-ford-container .card-img{height:125px;display:block;object-fit:contain}@media only screen and (max-width:599px){.card-ford-container{width:200px;height:240px}.card-ford-container .card-img{height:115px}}.card-ford-container .complexity{display:flex;font-size:14px}.card-ford-container .duration{height:1.6em;display:flex}.card-ford-container .duration .resource-type{order:3;margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-ford-container .duration .duration-time{order:2;margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-ford-container .title-text{margin:12px 0;position:relative;overflow:hidden;height:1.3em;line-height:1.3em;text-overflow:ellipsis;white-space:nowrap}.card-ford-container .mode-tag{border-radius:5px;color:#fff}.card-ford-container .description-text{position:relative;overflow:hidden;height:4.2em;line-height:1.4em}.card-ford-container .mat-chip-list-wrapper{padding:8px 0 16px!important}.card-ford-container .text-description-trim{overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:9;display:-webkit-box;-webkit-box-orient:vertical;text-align:justify}@media only screen and (max-width:599px){.card-ford-container .text-description-trim{-webkit-line-clamp:8}}.card-standard-container{position:relative;width:268px;height:100%;min-height:346px;border-radius:8px;box-sizing:border-box;box-shadow:0 10px 30px #99999933}.card-standard-container .progress-bar{display:block;width:calc(100% + 30px);margin-left:-15px;display:flex;margin-top:62px;background:bisque}.card-standard-container .source-div{position:relative;top:100px;background:#fff;z-index:3;border:1px solid #dedfe0;min-width:72px;min-height:72px;max-width:72px;max-height:72px;display:flex;border-radius:8px}.card-standard-container .source-div .source-icon{border-radius:8px;display:block;margin:auto;max-width:58px;max-height:-webkit-fill-available}.card-standard-container mat-card-content{margin:0 -4px}.card-standard-container .card-img{min-width:269px;max-width:269px;display:block;object-fit:contain;border-top-left-radius:8px;border-top-right-radius:8px}.card-standard-container .complexity{padding-top:7px;display:flex;font-size:14px;line-height:27px;padding-bottom:10px}.card-standard-container .complexity .mode-tag{border-radius:5px;order:2;margin-left:auto;color:#fff;font-size:10px}.card-standard-container .complexity .duration{display:flex;margin-left:auto;order:3}.card-standard-container .complexity .time-text{margin:0 5px 0 6px}.card-standard-container .basic{margin:auto 0}.card-standard-container .title-text{margin:12px 0;position:relative;overflow:hidden;height:48px}.card-standard-container .description-text{position:relative;overflow:hidden;height:63px}.card-discussions-container{flex:1;display:flex;position:relative;height:100%;min-height:140px;border-radius:8px;box-sizing:border-box;box-shadow:0 10px 30px #99999933}.card-discussions-container .progress-bar{display:block;width:calc(100% + 30px);margin-left:-15px;display:flex;margin-top:62px;background:bisque}.card-discussions-container .source-div{position:relative;top:100px;background:#fff;z-index:3;border:1px solid #dedfe0;min-width:72px;min-height:72px;max-width:72px;max-height:72px;display:flex;border-radius:8px}.card-discussions-container .source-div .source-icon{border-radius:8px;display:block;margin:auto;max-width:58px;max-height:-webkit-fill-available}.card-discussions-container mat-card-content{margin:0 -4px;flex:1}.card-discussions-container .card-img{min-width:269px;max-width:269px;display:block;object-fit:contain;border-top-left-radius:8px;border-top-right-radius:8px}.card-discussions-container .complexity{padding-top:7px;display:flex;font-size:14px;line-height:27px;padding-bottom:10px}.card-discussions-container .complexity .mode-tag{border-radius:5px;order:2;margin-left:auto;color:#fff;font-size:10px}.card-discussions-container .complexity .duration{display:flex;margin-left:auto;order:3}.card-discussions-container .complexity .time-text{margin:0 5px 0 6px}.card-discussions-container .basic{margin:auto 0}.card-discussions-container .title-text{overflow:hidden}.card-discussions-container .description-text{position:relative;overflow:hidden;height:auto;line-height:1.9em}.card-basic-infomartion-container{position:relative;width:265px;height:100%;box-sizing:border-box;min-height:300px}.card-basic-infomartion-container .card-img{height:150px;display:block;margin-bottom:0!important;object-fit:contain}.card-basic-infomartion-container .source-name{margin-bottom:0;font-weight:400;line-height:1.25rem!important}.card-basic-infomartion-container .title-text{margin:12px 0 0;position:relative;overflow:hidden;height:2.6em;line-height:1.3em}.card-basic-infomartion-container .source-image{object-fit:contain;height:35px;width:55px;overflow:auto}.card-with-user-details-container{position:relative;width:265px;height:100%;box-sizing:border-box;min-height:270px}.card-with-user-details-container .card-img{height:150px;display:block;margin-bottom:0!important;object-fit:contain}.card-with-user-details-container .source-name{margin-bottom:0;font-weight:400}.card-with-user-details-container .title-text{margin:12px 0 0;position:relative;overflow:hidden;height:2.6em;line-height:1.3em}.card-with-user-details-container .author-image{margin-right:12px;height:44px;width:44px}.card-with-user-details-container .back-color{background-color:#7e0a80}.card-with-user-details-container .space-0{margin-top:0!important;padding-top:0!important;margin-bottom:0!important}.detail-button{position:absolute;top:12px;right:12px;z-index:1}.greyOut{filter:grayscale(1);opacity:.7;cursor:auto!important}.disableClick{pointer-events:none}.display-contents{display:contents}.title-truncate{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.typeofc{width:101px;height:30px;border:1px solid;border-radius:8px;opacity:.4;align-items:center;justify-content:center;display:flex}.flex-9{flex:9}.center-right{align-items:center;justify-content:flex-end}.no-box{box-shadow:none!important}"]
241
241
  }] }
242
242
  ];
@@ -270,4 +270,4 @@ if (false) {
270
270
  CardContentComponent.prototype.utilitySvc;
271
271
  CardContentComponent.prototype.snackBar;
272
272
  }
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbGxlY3Rpb24vIiwic291cmNlcyI6WyJsaWIvY2FyZC1jb250ZW50L2NhcmQtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFBO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUkzRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXBEO0lBSzBDLGdEQUFtQjtJQWtCM0QsOEJBRVUsU0FBZ0MsRUFDaEMsVUFBMEIsRUFDMUIsUUFBcUI7UUFKL0IsWUFNRSxpQkFBTyxTQUNSO1FBTFMsZUFBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsZ0JBQVUsR0FBVixVQUFVLENBQWdCO1FBQzFCLGNBQVEsR0FBUixRQUFRLENBQWE7UUFsQnhCLFFBQUUsR0FBRyxhQUFXLElBQUksQ0FBQyxNQUFNLEVBQUksQ0FBQTtRQUN0QyxzQkFBZ0IsR0FBdUIsRUFBRSxDQUFBO1FBQ3pDLGtCQUFZLEdBQXVCLEVBQUUsQ0FBQTtRQUNyQyxjQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ2hCLG1CQUFhLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLGdCQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLG9CQUFjLEdBQUcsS0FBSyxDQUFBO1FBRXRCLHVCQUFpQixHQUFtQyxJQUFJLENBQUE7UUFDeEQsb0JBQWMsR0FBMkIsSUFBSSxDQUFBO1FB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LElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLEVBQ3REO2dCQUNBLE9BQU8sSUFBSSxDQUFBO2FBQ1o7WUFDRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7OztPQUFBO0lBRUQsMENBQVcsR0FBWCxjQUFnQixDQUFDOztnQkF6U2xCLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyx3cDNDQUE0Qzs7aUJBRTdDOzs7Z0JBWFEscUJBQXFCO2dCQUFFLGNBQWM7Z0JBRnJDLFdBQVc7Ozs2QkFnQmpCLEtBQUs7cUJBQ0wsV0FBVyxTQUFDLElBQUk7O0lBa1NuQiwyQkFBQztDQUFBLEFBMVNELENBSzBDLG1CQUFtQixHQXFTNUQ7U0FyU1ksb0JBQW9COztJQUUvQiwwQ0FBeUM7SUFDekMsa0NBQ3NDO0lBQ3RDLGdEQUF5QztJQUN6Qyw0Q0FBcUM7SUFDckMsd0NBQWdCO0lBQ2hCLDZDQUFxQjtJQUNyQiwwQ0FBa0I7SUFDbEIsOENBQXNCO0lBRXRCLGlEQUF3RDtJQUN4RCw4Q0FBNkM7SUFDN0Msc0RBQWtEO0lBQ2xELDJDQUF1RDtJQUV2RCx5REFBaUM7SUFHL0IseUNBQXdDO0lBQ3hDLDBDQUFrQztJQUNsQyx3Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJ1xyXG5pbXBvcnQgeyBOc1dpZGdldFJlc29sdmVyLCBXaWRnZXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvcmVzb2x2ZXInXHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIE5zSW5zdGFuY2VDb25maWcgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscydcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgTnNHb2FsIH0gZnJvbSAnLi4vYnRuLWdvYWxzL2J0bi1nb2Fscy5tb2RlbCdcclxuaW1wb3J0IHsgTnNQbGF5bGlzdCB9IGZyb20gJy4uL2J0bi1wbGF5bGlzdC9idG4tcGxheWxpc3QubW9kZWwnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcclxuaW1wb3J0IHsgTnNDYXJkQ29udGVudCB9IGZyb20gJy4vY2FyZC1jb250ZW50Lm1vZGVsJ1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtY2FyZC1jb250ZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jYXJkLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcmRDb250ZW50Q29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE5zV2lkZ2V0UmVzb2x2ZXIuSVdpZGdldERhdGE8TnNDYXJkQ29udGVudC5JQ2FyZD4ge1xyXG4gIEBJbnB1dCgpIHdpZGdldERhdGEhOiBOc0NhcmRDb250ZW50LklDYXJkXHJcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXHJcbiAgcHVibGljIGlkID0gYHdzLWNhcmRfJHtNYXRoLnJhbmRvbSgpfWBcclxuICBkZWZhdWx0VGh1bWJuYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJ1xyXG4gIGRlZmF1bHRTTG9nbzogc3RyaW5nIHwgdW5kZWZpbmVkID0gJydcclxuICBzaG93RmxpcCA9IGZhbHNlXHJcbiAgaXNDYXJkRmxpcHBlZCA9IGZhbHNlXHJcbiAgc2hvd0lzTW9kZSA9IGZhbHNlXHJcbiAgc2hvd0NvbnRlbnRUYWcgPSBmYWxzZVxyXG5cclxuICBidG5QbGF5bGlzdENvbmZpZzogTnNQbGF5bGlzdC5JQnRuUGxheWxpc3QgfCBudWxsID0gbnVsbFxyXG4gIGJ0bkdvYWxzQ29uZmlnOiBOc0dvYWwuSUJ0bkdvYWwgfCBudWxsID0gbnVsbFxyXG4gIHByZWZDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXHJcbiAgc291cmNlTG9nb3M6IE5zSW5zdGFuY2VDb25maWcuSVNvdXJjZUxvZ29bXSB8IHVuZGVmaW5lZFxyXG5cclxuICBpc0ludHJhbmV0QWxsb3dlZFNldHRpbmdzID0gZmFsc2VcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyB0aGlzLndpZGdldEluc3RhbmNlSWQ9aGlzLmlkXHJcbiAgICB0aGlzLmlzSW50cmFuZXRBbGxvd2VkU2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1N2Yy5pc0ludHJhbmV0QWxsb3dlZFxyXG4gICAgdGhpcy5wcmVmQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jb25maWdTdmMucHJlZkNoYW5nZU5vdGlmaWVyLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNJbnRyYW5ldEFsbG93ZWRTZXR0aW5ncyA9IHRoaXMuY29uZmlnU3ZjLmlzSW50cmFuZXRBbGxvd2VkXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgIGlmIChpbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICB0aGlzLmRlZmF1bHRUaHVtYm5haWwgPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0Q29udGVudFxyXG4gICAgICB0aGlzLnNvdXJjZUxvZ29zID0gaW5zdGFuY2VDb25maWcuc291cmNlc1xyXG4gICAgICB0aGlzLmRlZmF1bHRTTG9nbyA9IGluc3RhbmNlQ29uZmlnLmxvZ29zLmRlZmF1bHRTb3VyY2VMb2dvXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YSkge1xyXG4gICAgICB0aGlzLmJ0blBsYXlsaXN0Q29uZmlnID0ge1xyXG4gICAgICAgIGNvbnRlbnRJZDogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcixcclxuICAgICAgICBjb250ZW50TmFtZTogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQubmFtZSxcclxuICAgICAgICBjb250ZW50VHlwZTogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUsXHJcbiAgICAgICAgbW9kZTogJ2RpYWxvZycsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idG5Hb2Fsc0NvbmZpZyA9IHtcclxuICAgICAgICBjb250ZW50SWQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXIsXHJcbiAgICAgICAgY29udGVudE5hbWU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm5hbWUsXHJcbiAgICAgICAgY29udGVudFR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKClcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXF1aXJlZCBmb3Iga25vd2xlZGdlIGJvYXJkXHJcbiAgICAvLyBUT0RPOiBtYWtlIGl0IG1vcmUgZ2VuZXJpY1xyXG4gICAgdGhpcy5zaG93RmxpcCA9IEJvb2xlYW4odGhpcy53aWRnZXREYXRhLmNvbnRlbnQucmVhc29uKVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm1vZGUpIHtcclxuICAgICAgdGhpcy5zaG93SXNNb2RlID0gdGhpcy5pc0xhdGVzdCh0aGlzLmNvbnZlcnRUb0lTT0RhdGUodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYWRkZWRPbikpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRlbnRUYWcgPVxyXG4gICAgICAgIHRoaXMuY2hlY2tDcml0ZXJpYSgpICYmIHRoaXMuY2hlY2tDb250ZW50VHlwZUNyaXRlcmlhKCkgJiYgdGhpcy5jaGVja01pbWVUeXBlQ3JpdGVyaWEoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tDb250ZW50VHlwZUNyaXRlcmlhKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVDb250ZW50VHlwZSAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZXhjbHVkZUNvbnRlbnRUeXBlLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVDb250ZW50VHlwZS5pbmNsdWRlcyhcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGNoZWNrTWltZVR5cGVDcml0ZXJpYSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlTWltZVR5cGUgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVNaW1lVHlwZS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlTWltZVR5cGUuaW5jbHVkZXModGhpcy53aWRnZXREYXRhLmNvbnRlbnQubWltZVR5cGUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY2hlY2tDcml0ZXJpYSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5jcml0ZXJpYUZpZWxkICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5kYXlzU3BhblxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVPZmZzZXQgPSAyNCAqIDYwICogNjAgKiAxMDAwICogdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmRheXNTcGFuXHJcbiAgICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSgpXHJcbiAgICAgIGxhc3REYXkuc2V0VGltZShsYXN0RGF5LmdldFRpbWUoKSAtIGRhdGVPZmZzZXQpXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbnZlcnRUb0lTT0RhdGUoXHJcbiAgICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFt0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuY3JpdGVyaWFGaWVsZF0sXHJcbiAgICAgICAgKS5nZXRUaW1lKCkgPj0gbGFzdERheS5nZXRUaW1lKClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnByZWZDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5wcmVmQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIHRoaXMuYXNzaWduVGh1bWJuYWlsKClcclxuICB9XHJcblxyXG4gIGdldCBjaGVja0Rpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHMgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHNbMF0ubmFtZSB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzWzBdLm5hbWUgPT09ICcnIHx8XHJcbiAgICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHNbMF0ubmFtZSA9PT0gJ251bGwgbnVsbCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuICdOb3QgRGlzY2xvc2VkJ1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yRGV0YWlsc1swXS5uYW1lXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckNvbnRhY3RzICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0cy5sZW5ndGgpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZSB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0c1swXS5uYW1lID09PSAnJyB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0c1swXS5uYW1lID09PSAnbnVsbCBudWxsJ1xyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gJ05vdCBEaXNjbG9zZWQnXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0c1swXS5uYW1lXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIGdldCBpbWFnZUljb24oKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlID09PSBOc0NvbnRlbnQuRUNvbnRlbnRUeXBlcy5LTk9XTEVER0VfQVJUSUZBQ1QpIHtcclxuICAgICAgcmV0dXJuIFsnY2xhc3MnLCAnS25vd2xlZGdlIEFydGlmYWN0J11cclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSAhPT0gTnNDb250ZW50LkVDb250ZW50VHlwZXMuUkVTT1VSQ0UpIHtcclxuICAgICAgcmV0dXJuIFsnZm9sZGVyJywgJ0NvdXJzZSddXHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm1pbWVUeXBlKSB7XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSFRNTDpcclxuICAgICAgICByZXR1cm4gWydsaWJyYXJ5X2FkZCcsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDM6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0OlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk00QTpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NM1U4OlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlBMQVlMSVNUOlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLllPVVRVQkU6XHJcbiAgICAgICAgcmV0dXJuIFsnbGlicmFyeV9tdXNpYycsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QREY6XHJcbiAgICAgICAgcmV0dXJuIFsncGljdHVyZV9hc19wZGYnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUVVJWjpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5IQU5EU19PTjpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5SREJNU19IQU5EU19PTjpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5JQVA6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuQ0VSVElGSUNBVElPTjpcclxuICAgICAgICByZXR1cm4gWydhc3NpZ25tZW50X2luZCcsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gWydkZXNjcmlwdGlvbicsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudCAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nICYmXHJcbiAgICAgIHR5cGVvZiB0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nICE9PSAnbnVtYmVyJ1xyXG4gICAgKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdGVyLWNvbXB1dGVkLXByb3BlcnR5LXNwYWNpbmdcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyA9ICh0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nIGFzIGFueSlbXHJcbiAgICAgICAgdGhpcy5jb25maWdTdmMucm9vdE9yZyB8fCAnJ1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdGVyLWNvbXB1dGVkLXByb3BlcnR5LXNwYWNpbmdcclxuICAgICAgXVxyXG4gICAgfVxyXG4gICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyA9IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgfHwgMFxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBhc3NpZ25UaHVtYm5haWwoKSB7XHJcbiAgLy8gICBjb25zdCB0aHVtYm5haWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNhcmRfJHt0aGlzLndpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyfWApIGFzIEhUTUxJbWFnZUVsZW1lbnRcclxuICAvLyAgIGlmICh0aHVtYm5haWxFbGVtZW50KSB7XHJcbiAgLy8gICAgIHRyeSB7XHJcbiAgLy8gICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXHJcbiAgLy8gICAgICAgICBlbnRyaWVzID0+IHtcclxuICAvLyAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAvLyAgICAgICAgICAgICBjb25zdCB7IGlzSW50ZXJzZWN0aW5nIH0gPSBlbnRyeVxyXG4gIC8vICAgICAgICAgICAgIGlmIChpc0ludGVyc2VjdGluZykge1xyXG4gIC8vICAgICAgICAgICAgICAgdGh1bWJuYWlsRWxlbWVudC5zcmMgPSB0aGlzLndpZGdldERhdGEuY29udGVudC5hcHBJY29uXHJcbiAgLy8gICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pXHJcbiAgLy8gICAgICAgICB9LFxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRodW1ibmFpbEVsZW1lbnQpXHJcbiAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcclxuICAvLyAgICAgICB0aHVtYm5haWxFbGVtZW50LnNyYyA9IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmFwcEljb25cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IGlzS25vd2xlZGdlQm9hcmQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUpID09PVxyXG4gICAgICBOc0NvbnRlbnQuRUNvbnRlbnRUeXBlcy5LTk9XTEVER0VfQk9BUkRcclxuICAgIClcclxuICB9XHJcblxyXG4gIHJhaXNlVGVsZW1ldHJ5KCkge1xyXG4gICAgLy8gdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeSgnY2xpY2snLCBgJHt0aGlzLndpZGdldFR5cGV9LSR7dGhpcy53aWRnZXRTdWJUeXBlfWAsIHtcclxuICAgIC8vICAgY29udGVudElkOiB0aGlzLndpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyLFxyXG4gICAgLy8gICBjb250ZW50VHlwZTogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUsXHJcbiAgICAvLyAgIGNvbnRleHQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZXh0LFxyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIGdldCBpc0dyZXllZEltYWdlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuc3RhdHVzID09PSAnRGVsZXRlZCcpIHx8XHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ0V4cGlyZWQnXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvSVNPRGF0ZShkYXRlID0gJycpOiBEYXRlIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcclxuICAgICAgICBgJHtkYXRlLnN1YnN0cmluZygwLCA0KX0tJHtkYXRlLnN1YnN0cmluZyg0LCA2KX0tJHtkYXRlLnN1YnN0cmluZyg2LCA4KX0ke2RhdGUuc3Vic3RyaW5nKFxyXG4gICAgICAgICAgOCxcclxuICAgICAgICAgIDExLFxyXG4gICAgICAgICl9OiR7ZGF0ZS5zdWJzdHJpbmcoMTEsIDEzKX06JHtkYXRlLnN1YnN0cmluZygxMywgMTUpfS4wMDBaYCxcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0TW9udGgobmV3IERhdGUoKS5nZXRNb250aCgpIC0gMSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0xhdGVzdChhZGRlZE9uOiBEYXRlKSB7XHJcbiAgICBpZiAoYWRkZWRPbikge1xyXG4gICAgICBjb25zdCBkYXRlT2Zmc2V0ID0gMjQgKiA2MCAqIDYwICogMTAwMCAqIDdcclxuICAgICAgY29uc3QgbGFzdDdEYXkgPSBuZXcgRGF0ZSgpXHJcbiAgICAgIGxhc3Q3RGF5LnNldFRpbWUobGFzdDdEYXkuZ2V0VGltZSgpIC0gZGF0ZU9mZnNldClcclxuICAgICAgaWYgKGFkZGVkT24uZ2V0VGltZSgpID49IGxhc3Q3RGF5LmdldFRpbWUoKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dJbnRyYW5ldENvbnRlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaXNJbkludHJhbmV0ICYmIHRoaXMudXRpbGl0eVN2Yy5pc01vYmlsZSkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuaXNJbnRyYW5ldEFsbG93ZWRTZXR0aW5nc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBzaG93U25hY2tiYXIoKSB7XHJcbiAgICBpZiAodGhpcy5zaG93SW50cmFuZXRDb250ZW50KSB7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ29udGVudCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBpbnRyYW5ldCcsICdYJywgeyBkdXJhdGlvbjogMjAwMCB9KVxyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0xpdmVPck1hcmtGb3JEZWxldGlvbikge1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvbnRlbnQgbWF5IGJlIGV4cGlyZWQgb3IgZGVsZXRlZCcsICdYJywgeyBkdXJhdGlvbjogMjAwMCB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTGl2ZU9yTWFya0ZvckRlbGV0aW9uKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuc3RhdHVzIHx8XHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ0xpdmUnIHx8XHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ01hcmtlZEZvckRlbGV0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIG9wZW5Db21tZW50KCkgeyB9XHJcbn1cclxuIl19
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbGxlY3Rpb24vIiwic291cmNlcyI6WyJsaWIvY2FyZC1jb250ZW50L2NhcmQtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFBO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUkzRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXBEO0lBSzBDLGdEQUFtQjtJQWtCM0QsOEJBRVUsU0FBZ0MsRUFDaEMsVUFBMEIsRUFDMUIsUUFBcUI7UUFKL0IsWUFNRSxpQkFBTyxTQUNSO1FBTFMsZUFBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsZ0JBQVUsR0FBVixVQUFVLENBQWdCO1FBQzFCLGNBQVEsR0FBUixRQUFRLENBQWE7UUFsQnhCLFFBQUUsR0FBRyxhQUFXLElBQUksQ0FBQyxNQUFNLEVBQUksQ0FBQTtRQUN0QyxzQkFBZ0IsR0FBdUIsRUFBRSxDQUFBO1FBQ3pDLGtCQUFZLEdBQXVCLEVBQUUsQ0FBQTtRQUNyQyxjQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ2hCLG1CQUFhLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLGdCQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLG9CQUFjLEdBQUcsS0FBSyxDQUFBO1FBRXRCLHVCQUFpQixHQUFtQyxJQUFJLENBQUE7UUFDeEQsb0JBQWMsR0FBMkIsSUFBSSxDQUFBO1FB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LElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLEVBQ3REO2dCQUNBLE9BQU8sSUFBSSxDQUFBO2FBQ1o7WUFDRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7OztPQUFBO0lBRUQsMENBQVcsR0FBWCxjQUFnQixDQUFDOztnQkF6U2xCLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQywwZzJDQUE0Qzs7aUJBRTdDOzs7Z0JBWFEscUJBQXFCO2dCQUFFLGNBQWM7Z0JBRnJDLFdBQVc7Ozs2QkFnQmpCLEtBQUs7cUJBQ0wsV0FBVyxTQUFDLElBQUk7O0lBa1NuQiwyQkFBQztDQUFBLEFBMVNELENBSzBDLG1CQUFtQixHQXFTNUQ7U0FyU1ksb0JBQW9COztJQUUvQiwwQ0FBeUM7SUFDekMsa0NBQ3NDO0lBQ3RDLGdEQUF5QztJQUN6Qyw0Q0FBcUM7SUFDckMsd0NBQWdCO0lBQ2hCLDZDQUFxQjtJQUNyQiwwQ0FBa0I7SUFDbEIsOENBQXNCO0lBRXRCLGlEQUF3RDtJQUN4RCw4Q0FBNkM7SUFDN0Msc0RBQWtEO0lBQ2xELDJDQUF1RDtJQUV2RCx5REFBaUM7SUFHL0IseUNBQXdDO0lBQ3hDLDBDQUFrQztJQUNsQyx3Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJ1xyXG5pbXBvcnQgeyBOc1dpZGdldFJlc29sdmVyLCBXaWRnZXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvcmVzb2x2ZXInXHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIE5zSW5zdGFuY2VDb25maWcgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscydcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgTnNHb2FsIH0gZnJvbSAnLi4vYnRuLWdvYWxzL2J0bi1nb2Fscy5tb2RlbCdcclxuaW1wb3J0IHsgTnNQbGF5bGlzdCB9IGZyb20gJy4uL2J0bi1wbGF5bGlzdC9idG4tcGxheWxpc3QubW9kZWwnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcclxuaW1wb3J0IHsgTnNDYXJkQ29udGVudCB9IGZyb20gJy4vY2FyZC1jb250ZW50Lm1vZGVsJ1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtY2FyZC1jb250ZW50JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1jb250ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jYXJkLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENhcmRDb250ZW50Q29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE5zV2lkZ2V0UmVzb2x2ZXIuSVdpZGdldERhdGE8TnNDYXJkQ29udGVudC5JQ2FyZD4ge1xyXG4gIEBJbnB1dCgpIHdpZGdldERhdGEhOiBOc0NhcmRDb250ZW50LklDYXJkXHJcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXHJcbiAgcHVibGljIGlkID0gYHdzLWNhcmRfJHtNYXRoLnJhbmRvbSgpfWBcclxuICBkZWZhdWx0VGh1bWJuYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJ1xyXG4gIGRlZmF1bHRTTG9nbzogc3RyaW5nIHwgdW5kZWZpbmVkID0gJydcclxuICBzaG93RmxpcCA9IGZhbHNlXHJcbiAgaXNDYXJkRmxpcHBlZCA9IGZhbHNlXHJcbiAgc2hvd0lzTW9kZSA9IGZhbHNlXHJcbiAgc2hvd0NvbnRlbnRUYWcgPSBmYWxzZVxyXG5cclxuICBidG5QbGF5bGlzdENvbmZpZzogTnNQbGF5bGlzdC5JQnRuUGxheWxpc3QgfCBudWxsID0gbnVsbFxyXG4gIGJ0bkdvYWxzQ29uZmlnOiBOc0dvYWwuSUJ0bkdvYWwgfCBudWxsID0gbnVsbFxyXG4gIHByZWZDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXHJcbiAgc291cmNlTG9nb3M6IE5zSW5zdGFuY2VDb25maWcuSVNvdXJjZUxvZ29bXSB8IHVuZGVmaW5lZFxyXG5cclxuICBpc0ludHJhbmV0QWxsb3dlZFNldHRpbmdzID0gZmFsc2VcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyB0aGlzLndpZGdldEluc3RhbmNlSWQ9aGlzLmlkXHJcbiAgICB0aGlzLmlzSW50cmFuZXRBbGxvd2VkU2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1N2Yy5pc0ludHJhbmV0QWxsb3dlZFxyXG4gICAgdGhpcy5wcmVmQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jb25maWdTdmMucHJlZkNoYW5nZU5vdGlmaWVyLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNJbnRyYW5ldEFsbG93ZWRTZXR0aW5ncyA9IHRoaXMuY29uZmlnU3ZjLmlzSW50cmFuZXRBbGxvd2VkXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGluc3RhbmNlQ29uZmlnID0gdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWdcclxuICAgIGlmIChpbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICB0aGlzLmRlZmF1bHRUaHVtYm5haWwgPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0Q29udGVudFxyXG4gICAgICB0aGlzLnNvdXJjZUxvZ29zID0gaW5zdGFuY2VDb25maWcuc291cmNlc1xyXG4gICAgICB0aGlzLmRlZmF1bHRTTG9nbyA9IGluc3RhbmNlQ29uZmlnLmxvZ29zLmRlZmF1bHRTb3VyY2VMb2dvXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YSkge1xyXG4gICAgICB0aGlzLmJ0blBsYXlsaXN0Q29uZmlnID0ge1xyXG4gICAgICAgIGNvbnRlbnRJZDogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcixcclxuICAgICAgICBjb250ZW50TmFtZTogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQubmFtZSxcclxuICAgICAgICBjb250ZW50VHlwZTogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUsXHJcbiAgICAgICAgbW9kZTogJ2RpYWxvZycsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idG5Hb2Fsc0NvbmZpZyA9IHtcclxuICAgICAgICBjb250ZW50SWQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXIsXHJcbiAgICAgICAgY29udGVudE5hbWU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm5hbWUsXHJcbiAgICAgICAgY29udGVudFR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKClcclxuICAgIH1cclxuXHJcbiAgICAvLyByZXF1aXJlZCBmb3Iga25vd2xlZGdlIGJvYXJkXHJcbiAgICAvLyBUT0RPOiBtYWtlIGl0IG1vcmUgZ2VuZXJpY1xyXG4gICAgdGhpcy5zaG93RmxpcCA9IEJvb2xlYW4odGhpcy53aWRnZXREYXRhLmNvbnRlbnQucmVhc29uKVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm1vZGUpIHtcclxuICAgICAgdGhpcy5zaG93SXNNb2RlID0gdGhpcy5pc0xhdGVzdCh0aGlzLmNvbnZlcnRUb0lTT0RhdGUodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYWRkZWRPbikpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRlbnRUYWcgPVxyXG4gICAgICAgIHRoaXMuY2hlY2tDcml0ZXJpYSgpICYmIHRoaXMuY2hlY2tDb250ZW50VHlwZUNyaXRlcmlhKCkgJiYgdGhpcy5jaGVja01pbWVUeXBlQ3JpdGVyaWEoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tDb250ZW50VHlwZUNyaXRlcmlhKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVDb250ZW50VHlwZSAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZXhjbHVkZUNvbnRlbnRUeXBlLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVDb250ZW50VHlwZS5pbmNsdWRlcyhcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGNoZWNrTWltZVR5cGVDcml0ZXJpYSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlTWltZVR5cGUgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVNaW1lVHlwZS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlTWltZVR5cGUuaW5jbHVkZXModGhpcy53aWRnZXREYXRhLmNvbnRlbnQubWltZVR5cGUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY2hlY2tDcml0ZXJpYSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5jcml0ZXJpYUZpZWxkICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5kYXlzU3BhblxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVPZmZzZXQgPSAyNCAqIDYwICogNjAgKiAxMDAwICogdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmRheXNTcGFuXHJcbiAgICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSgpXHJcbiAgICAgIGxhc3REYXkuc2V0VGltZShsYXN0RGF5LmdldFRpbWUoKSAtIGRhdGVPZmZzZXQpXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNvbnZlcnRUb0lTT0RhdGUoXHJcbiAgICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFt0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuY3JpdGVyaWFGaWVsZF0sXHJcbiAgICAgICAgKS5nZXRUaW1lKCkgPj0gbGFzdERheS5nZXRUaW1lKClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnByZWZDaGFuZ2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5wcmVmQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIHRoaXMuYXNzaWduVGh1bWJuYWlsKClcclxuICB9XHJcblxyXG4gIGdldCBjaGVja0Rpc3BsYXlOYW1lKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHMgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHNbMF0ubmFtZSB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzWzBdLm5hbWUgPT09ICcnIHx8XHJcbiAgICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHNbMF0ubmFtZSA9PT0gJ251bGwgbnVsbCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuICdOb3QgRGlzY2xvc2VkJ1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yRGV0YWlsc1swXS5uYW1lXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckNvbnRhY3RzICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0cy5sZW5ndGgpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZSB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0c1swXS5uYW1lID09PSAnJyB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0c1swXS5uYW1lID09PSAnbnVsbCBudWxsJ1xyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gJ05vdCBEaXNjbG9zZWQnXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0c1swXS5uYW1lXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIGdldCBpbWFnZUljb24oKTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlID09PSBOc0NvbnRlbnQuRUNvbnRlbnRUeXBlcy5LTk9XTEVER0VfQVJUSUZBQ1QpIHtcclxuICAgICAgcmV0dXJuIFsnY2xhc3MnLCAnS25vd2xlZGdlIEFydGlmYWN0J11cclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSAhPT0gTnNDb250ZW50LkVDb250ZW50VHlwZXMuUkVTT1VSQ0UpIHtcclxuICAgICAgcmV0dXJuIFsnZm9sZGVyJywgJ0NvdXJzZSddXHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm1pbWVUeXBlKSB7XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSFRNTDpcclxuICAgICAgICByZXR1cm4gWydsaWJyYXJ5X2FkZCcsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDM6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0OlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk00QTpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NM1U4OlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlBMQVlMSVNUOlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLllPVVRVQkU6XHJcbiAgICAgICAgcmV0dXJuIFsnbGlicmFyeV9tdXNpYycsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QREY6XHJcbiAgICAgICAgcmV0dXJuIFsncGljdHVyZV9hc19wZGYnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUVVJWjpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5IQU5EU19PTjpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5SREJNU19IQU5EU19PTjpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5JQVA6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuQ0VSVElGSUNBVElPTjpcclxuICAgICAgICByZXR1cm4gWydhc3NpZ25tZW50X2luZCcsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gWydkZXNjcmlwdGlvbicsIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlc291cmNlVHlwZV1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudCAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nICYmXHJcbiAgICAgIHR5cGVvZiB0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nICE9PSAnbnVtYmVyJ1xyXG4gICAgKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdGVyLWNvbXB1dGVkLXByb3BlcnR5LXNwYWNpbmdcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyA9ICh0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nIGFzIGFueSlbXHJcbiAgICAgICAgdGhpcy5jb25maWdTdmMucm9vdE9yZyB8fCAnJ1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdGVyLWNvbXB1dGVkLXByb3BlcnR5LXNwYWNpbmdcclxuICAgICAgXVxyXG4gICAgfVxyXG4gICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyA9IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgfHwgMFxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBhc3NpZ25UaHVtYm5haWwoKSB7XHJcbiAgLy8gICBjb25zdCB0aHVtYm5haWxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNhcmRfJHt0aGlzLndpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyfWApIGFzIEhUTUxJbWFnZUVsZW1lbnRcclxuICAvLyAgIGlmICh0aHVtYm5haWxFbGVtZW50KSB7XHJcbiAgLy8gICAgIHRyeSB7XHJcbiAgLy8gICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXHJcbiAgLy8gICAgICAgICBlbnRyaWVzID0+IHtcclxuICAvLyAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAvLyAgICAgICAgICAgICBjb25zdCB7IGlzSW50ZXJzZWN0aW5nIH0gPSBlbnRyeVxyXG4gIC8vICAgICAgICAgICAgIGlmIChpc0ludGVyc2VjdGluZykge1xyXG4gIC8vICAgICAgICAgICAgICAgdGh1bWJuYWlsRWxlbWVudC5zcmMgPSB0aGlzLndpZGdldERhdGEuY29udGVudC5hcHBJY29uXHJcbiAgLy8gICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcclxuICAvLyAgICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIH0pXHJcbiAgLy8gICAgICAgICB9LFxyXG4gIC8vICAgICAgIClcclxuICAvLyAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRodW1ibmFpbEVsZW1lbnQpXHJcbiAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcclxuICAvLyAgICAgICB0aHVtYm5haWxFbGVtZW50LnNyYyA9IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmFwcEljb25cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0IGlzS25vd2xlZGdlQm9hcmQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUpID09PVxyXG4gICAgICBOc0NvbnRlbnQuRUNvbnRlbnRUeXBlcy5LTk9XTEVER0VfQk9BUkRcclxuICAgIClcclxuICB9XHJcblxyXG4gIHJhaXNlVGVsZW1ldHJ5KCkge1xyXG4gICAgLy8gdGhpcy5ldmVudHMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeSgnY2xpY2snLCBgJHt0aGlzLndpZGdldFR5cGV9LSR7dGhpcy53aWRnZXRTdWJUeXBlfWAsIHtcclxuICAgIC8vICAgY29udGVudElkOiB0aGlzLndpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyLFxyXG4gICAgLy8gICBjb250ZW50VHlwZTogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUsXHJcbiAgICAvLyAgIGNvbnRleHQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZXh0LFxyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gIGdldCBpc0dyZXllZEltYWdlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQgJiYgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuc3RhdHVzID09PSAnRGVsZXRlZCcpIHx8XHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ0V4cGlyZWQnXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvSVNPRGF0ZShkYXRlID0gJycpOiBEYXRlIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcclxuICAgICAgICBgJHtkYXRlLnN1YnN0cmluZygwLCA0KX0tJHtkYXRlLnN1YnN0cmluZyg0LCA2KX0tJHtkYXRlLnN1YnN0cmluZyg2LCA4KX0ke2RhdGUuc3Vic3RyaW5nKFxyXG4gICAgICAgICAgOCxcclxuICAgICAgICAgIDExLFxyXG4gICAgICAgICl9OiR7ZGF0ZS5zdWJzdHJpbmcoMTEsIDEzKX06JHtkYXRlLnN1YnN0cmluZygxMywgMTUpfS4wMDBaYCxcclxuICAgICAgKVxyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0TW9udGgobmV3IERhdGUoKS5nZXRNb250aCgpIC0gMSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0xhdGVzdChhZGRlZE9uOiBEYXRlKSB7XHJcbiAgICBpZiAoYWRkZWRPbikge1xyXG4gICAgICBjb25zdCBkYXRlT2Zmc2V0ID0gMjQgKiA2MCAqIDYwICogMTAwMCAqIDdcclxuICAgICAgY29uc3QgbGFzdDdEYXkgPSBuZXcgRGF0ZSgpXHJcbiAgICAgIGxhc3Q3RGF5LnNldFRpbWUobGFzdDdEYXkuZ2V0VGltZSgpIC0gZGF0ZU9mZnNldClcclxuICAgICAgaWYgKGFkZGVkT24uZ2V0VGltZSgpID49IGxhc3Q3RGF5LmdldFRpbWUoKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dJbnRyYW5ldENvbnRlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaXNJbkludHJhbmV0ICYmIHRoaXMudXRpbGl0eVN2Yy5pc01vYmlsZSkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuaXNJbnRyYW5ldEFsbG93ZWRTZXR0aW5nc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBzaG93U25hY2tiYXIoKSB7XHJcbiAgICBpZiAodGhpcy5zaG93SW50cmFuZXRDb250ZW50KSB7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ29udGVudCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBpbnRyYW5ldCcsICdYJywgeyBkdXJhdGlvbjogMjAwMCB9KVxyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pc0xpdmVPck1hcmtGb3JEZWxldGlvbikge1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvbnRlbnQgbWF5IGJlIGV4cGlyZWQgb3IgZGVsZXRlZCcsICdYJywgeyBkdXJhdGlvbjogMjAwMCB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTGl2ZU9yTWFya0ZvckRlbGV0aW9uKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuc3RhdHVzIHx8XHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ0xpdmUnIHx8XHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ01hcmtlZEZvckRlbGV0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIG9wZW5Db21tZW50KCkgeyB9XHJcbn1cclxuIl19