@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.
@@ -208,7 +208,7 @@ export class CardContentComponent extends WidgetBaseComponent {
208
208
  CardContentComponent.decorators = [
209
209
  { type: Component, args: [{
210
210
  selector: 'ws-widget-card-content',
211
- 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> -->",
211
+ 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> -->",
212
212
  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}"]
213
213
  }] }
214
214
  ];
@@ -239,4 +239,4 @@ if (false) {
239
239
  CardContentComponent.prototype.utilitySvc;
240
240
  CardContentComponent.prototype.snackBar;
241
241
  }
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbGxlY3Rpb24vIiwic291cmNlcyI6WyJsaWIvY2FyZC1jb250ZW50L2NhcmQtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUE7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBb0IsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFvQixNQUFNLG1CQUFtQixDQUFBO0FBSTNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFPcEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQWtCM0QsWUFFVSxTQUFnQyxFQUNoQyxVQUEwQixFQUMxQixRQUFxQjtRQUU3QixLQUFLLEVBQUUsQ0FBQTtRQUpDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFsQnhCLE9BQUUsR0FBRyxXQUFXLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFBO1FBQ3RDLHFCQUFnQixHQUF1QixFQUFFLENBQUE7UUFDekMsaUJBQVksR0FBdUIsRUFBRSxDQUFBO1FBQ3JDLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUE7UUFDckIsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUNsQixtQkFBYyxHQUFHLEtBQUssQ0FBQTtRQUV0QixzQkFBaUIsR0FBbUMsSUFBSSxDQUFBO1FBQ3hELG1CQUFjLEdB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O0lBRUQsV0FBVyxLQUFLLENBQUM7OztZQXpTbEIsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLHdwM0NBQTRDOzthQUU3Qzs7O1lBWFEscUJBQXFCO1lBQUUsY0FBYztZQUZyQyxXQUFXOzs7eUJBZ0JqQixLQUFLO2lCQUNMLFdBQVcsU0FBQyxJQUFJOzs7SUFEakIsMENBQXlDO0lBQ3pDLGtDQUNzQztJQUN0QyxnREFBeUM7SUFDekMsNENBQXFDO0lBQ3JDLHdDQUFnQjtJQUNoQiw2Q0FBcUI7SUFDckIsMENBQWtCO0lBQ2xCLDhDQUFzQjtJQUV0QixpREFBd0Q7SUFDeEQsOENBQTZDO0lBQzdDLHNEQUFrRDtJQUNsRCwyQ0FBdUQ7SUFFdkQseURBQWlDO0lBRy9CLHlDQUF3QztJQUN4QywwQ0FBa0M7SUFDbEMsd0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCdcclxuaW1wb3J0IHsgTnNXaWRnZXRSZXNvbHZlciwgV2lkZ2V0QmFzZUNvbXBvbmVudCB9IGZyb20gJ0BzdW5iaXJkLWNiL3Jlc29sdmVyJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMnXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IE5zR29hbCB9IGZyb20gJy4uL2J0bi1nb2Fscy9idG4tZ29hbHMubW9kZWwnXHJcbmltcG9ydCB7IE5zUGxheWxpc3QgfSBmcm9tICcuLi9idG4tcGxheWxpc3QvYnRuLXBsYXlsaXN0Lm1vZGVsJ1xyXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuL2NhcmQtY29udGVudC5tb2RlbCdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3Mtd2lkZ2V0LWNhcmQtY29udGVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtY29udGVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1jb250ZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJkQ29udGVudENvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBOc1dpZGdldFJlc29sdmVyLklXaWRnZXREYXRhPE5zQ2FyZENvbnRlbnQuSUNhcmQ+IHtcclxuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDYXJkQ29udGVudC5JQ2FyZFxyXG4gIEBIb3N0QmluZGluZygnaWQnKVxyXG4gIHB1YmxpYyBpZCA9IGB3cy1jYXJkXyR7TWF0aC5yYW5kb20oKX1gXHJcbiAgZGVmYXVsdFRodW1ibmFpbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJydcclxuICBkZWZhdWx0U0xvZ286IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnXHJcbiAgc2hvd0ZsaXAgPSBmYWxzZVxyXG4gIGlzQ2FyZEZsaXBwZWQgPSBmYWxzZVxyXG4gIHNob3dJc01vZGUgPSBmYWxzZVxyXG4gIHNob3dDb250ZW50VGFnID0gZmFsc2VcclxuXHJcbiAgYnRuUGxheWxpc3RDb25maWc6IE5zUGxheWxpc3QuSUJ0blBsYXlsaXN0IHwgbnVsbCA9IG51bGxcclxuICBidG5Hb2Fsc0NvbmZpZzogTnNHb2FsLklCdG5Hb2FsIHwgbnVsbCA9IG51bGxcclxuICBwcmVmQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxyXG4gIHNvdXJjZUxvZ29zOiBOc0luc3RhbmNlQ29uZmlnLklTb3VyY2VMb2dvW10gfCB1bmRlZmluZWRcclxuXHJcbiAgaXNJbnRyYW5ldEFsbG93ZWRTZXR0aW5ncyA9IGZhbHNlXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gdGhpcy53aWRnZXRJbnN0YW5jZUlkPWhpcy5pZFxyXG4gICAgdGhpcy5pc0ludHJhbmV0QWxsb3dlZFNldHRpbmdzID0gdGhpcy5jb25maWdTdmMuaXNJbnRyYW5ldEFsbG93ZWRcclxuICAgIHRoaXMucHJlZkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnU3ZjLnByZWZDaGFuZ2VOb3RpZmllci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzSW50cmFuZXRBbGxvd2VkU2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1N2Yy5pc0ludHJhbmV0QWxsb3dlZFxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnXHJcbiAgICBpZiAoaW5zdGFuY2VDb25maWcpIHtcclxuICAgICAgdGhpcy5kZWZhdWx0VGh1bWJuYWlsID0gaW5zdGFuY2VDb25maWcubG9nb3MuZGVmYXVsdENvbnRlbnRcclxuICAgICAgdGhpcy5zb3VyY2VMb2dvcyA9IGluc3RhbmNlQ29uZmlnLnNvdXJjZXNcclxuICAgICAgdGhpcy5kZWZhdWx0U0xvZ28gPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0U291cmNlTG9nb1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpZGdldERhdGEpIHtcclxuICAgICAgdGhpcy5idG5QbGF5bGlzdENvbmZpZyA9IHtcclxuICAgICAgICBjb250ZW50SWQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXIsXHJcbiAgICAgICAgY29udGVudE5hbWU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm5hbWUsXHJcbiAgICAgICAgY29udGVudFR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlLFxyXG4gICAgICAgIG1vZGU6ICdkaWFsb2cnLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnRuR29hbHNDb25maWcgPSB7XHJcbiAgICAgICAgY29udGVudElkOiB0aGlzLndpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyLFxyXG4gICAgICAgIGNvbnRlbnROYW1lOiB0aGlzLndpZGdldERhdGEuY29udGVudC5uYW1lLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGlmeVNlbnNpYmxlQ29udGVudFJhdGluZygpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVxdWlyZWQgZm9yIGtub3dsZWRnZSBib2FyZFxyXG4gICAgLy8gVE9ETzogbWFrZSBpdCBtb3JlIGdlbmVyaWNcclxuICAgIHRoaXMuc2hvd0ZsaXAgPSBCb29sZWFuKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlYXNvbilcclxuICAgIGlmICh0aGlzLndpZGdldERhdGEuY29udGVudC5tb2RlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0lzTW9kZSA9IHRoaXMuaXNMYXRlc3QodGhpcy5jb252ZXJ0VG9JU09EYXRlKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmFkZGVkT24pKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncykge1xyXG4gICAgICB0aGlzLnNob3dDb250ZW50VGFnID1cclxuICAgICAgICB0aGlzLmNoZWNrQ3JpdGVyaWEoKSAmJiB0aGlzLmNoZWNrQ29udGVudFR5cGVDcml0ZXJpYSgpICYmIHRoaXMuY2hlY2tNaW1lVHlwZUNyaXRlcmlhKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrQ29udGVudFR5cGVDcml0ZXJpYSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlQ29udGVudFR5cGUgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVDb250ZW50VHlwZS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlQ29udGVudFR5cGUuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUsXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBjaGVja01pbWVUeXBlQ3JpdGVyaWEoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncyAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZXhjbHVkZU1pbWVUeXBlICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlTWltZVR5cGUubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICF0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZXhjbHVkZU1pbWVUeXBlLmluY2x1ZGVzKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm1pbWVUeXBlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGNoZWNrQ3JpdGVyaWEoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncyAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuY3JpdGVyaWFGaWVsZCAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZGF5c1NwYW5cclxuICAgICkge1xyXG4gICAgICBjb25zdCBkYXRlT2Zmc2V0ID0gMjQgKiA2MCAqIDYwICogMTAwMCAqIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5kYXlzU3BhblxyXG4gICAgICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoKVxyXG4gICAgICBsYXN0RGF5LnNldFRpbWUobGFzdERheS5nZXRUaW1lKCkgLSBkYXRlT2Zmc2V0KVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb252ZXJ0VG9JU09EYXRlKFxyXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRbdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmNyaXRlcmlhRmllbGRdLFxyXG4gICAgICAgICkuZ2V0VGltZSgpID49IGxhc3REYXkuZ2V0VGltZSgpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5wcmVmQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucHJlZkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyB0aGlzLmFzc2lnblRodW1ibmFpbCgpXHJcbiAgfVxyXG5cclxuICBnZXQgY2hlY2tEaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzWzBdLm5hbWUgfHxcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yRGV0YWlsc1swXS5uYW1lID09PSAnJyB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzWzBdLm5hbWUgPT09ICdudWxsIG51bGwnXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiAnTm90IERpc2Nsb3NlZCdcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHNbMF0ubmFtZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0cyAmJiB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckNvbnRhY3RzWzBdLm5hbWUgfHxcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZSA9PT0gJycgfHxcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZSA9PT0gJ251bGwgbnVsbCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuICdOb3QgRGlzY2xvc2VkJ1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG5cclxuICBnZXQgaW1hZ2VJY29uKCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSA9PT0gTnNDb250ZW50LkVDb250ZW50VHlwZXMuS05PV0xFREdFX0FSVElGQUNUKSB7XHJcbiAgICAgIHJldHVybiBbJ2NsYXNzJywgJ0tub3dsZWRnZSBBcnRpZmFjdCddXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUgIT09IE5zQ29udGVudC5FQ29udGVudFR5cGVzLlJFU09VUkNFKSB7XHJcbiAgICAgIHJldHVybiBbJ2ZvbGRlcicsICdDb3Vyc2UnXVxyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLndpZGdldERhdGEuY29udGVudC5taW1lVHlwZSkge1xyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLkhUTUw6XHJcbiAgICAgICAgcmV0dXJuIFsnbGlicmFyeV9hZGQnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTVAzOlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk1QNDpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NNEE6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTTNVODpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QTEFZTElTVDpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5ZT1VUVUJFOlxyXG4gICAgICAgIHJldHVybiBbJ2xpYnJhcnlfbXVzaWMnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUERGOlxyXG4gICAgICAgIHJldHVybiBbJ3BpY3R1cmVfYXNfcGRmJywgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQucmVzb3VyY2VUeXBlXVxyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlFVSVo6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSEFORFNfT046XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUkRCTVNfSEFORFNfT046XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSUFQOlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLkNFUlRJRklDQVRJT046XHJcbiAgICAgICAgcmV0dXJuIFsnYXNzaWdubWVudF9pbmQnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFsnZGVzY3JpcHRpb24nLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vZGlmeVNlbnNpYmxlQ29udGVudFJhdGluZygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAmJlxyXG4gICAgICB0eXBlb2YgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAhPT0gJ251bWJlcidcclxuICAgICkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRlci1jb21wdXRlZC1wcm9wZXJ0eS1zcGFjaW5nXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgPSAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyBhcyBhbnkpW1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ZjLnJvb3RPcmcgfHwgJydcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRlci1jb21wdXRlZC1wcm9wZXJ0eS1zcGFjaW5nXHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgPSB0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nIHx8IDBcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgYXNzaWduVGh1bWJuYWlsKCkge1xyXG4gIC8vICAgY29uc3QgdGh1bWJuYWlsRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjYXJkXyR7dGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcn1gKSBhcyBIVE1MSW1hZ2VFbGVtZW50XHJcbiAgLy8gICBpZiAodGh1bWJuYWlsRWxlbWVudCkge1xyXG4gIC8vICAgICB0cnkge1xyXG4gIC8vICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxyXG4gIC8vICAgICAgICAgZW50cmllcyA9PiB7XHJcbiAgLy8gICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgeyBpc0ludGVyc2VjdGluZyB9ID0gZW50cnlcclxuICAvLyAgICAgICAgICAgICBpZiAoaXNJbnRlcnNlY3RpbmcpIHtcclxuICAvLyAgICAgICAgICAgICAgIHRodW1ibmFpbEVsZW1lbnQuc3JjID0gdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXBwSWNvblxyXG4gIC8vICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICApXHJcbiAgLy8gICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aHVtYm5haWxFbGVtZW50KVxyXG4gIC8vICAgICB9IGNhdGNoIChlKSB7XHJcbiAgLy8gICAgICAgdGh1bWJuYWlsRWxlbWVudC5zcmMgPSB0aGlzLndpZGdldERhdGEuY29udGVudC5hcHBJY29uXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCBpc0tub3dsZWRnZUJvYXJkKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50ICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlKSA9PT1cclxuICAgICAgTnNDb250ZW50LkVDb250ZW50VHlwZXMuS05PV0xFREdFX0JPQVJEXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICByYWlzZVRlbGVtZXRyeSgpIHtcclxuICAgIC8vIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoJ2NsaWNrJywgYCR7dGhpcy53aWRnZXRUeXBlfS0ke3RoaXMud2lkZ2V0U3ViVHlwZX1gLCB7XHJcbiAgICAvLyAgIGNvbnRlbnRJZDogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcixcclxuICAgIC8vICAgY29udGVudFR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlLFxyXG4gICAgLy8gICBjb250ZXh0OiB0aGlzLndpZGdldERhdGEuY29udGV4dCxcclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNHcmV5ZWRJbWFnZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50ICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ0RlbGV0ZWQnKSB8fFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5zdGF0dXMgPT09ICdFeHBpcmVkJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0lTT0RhdGUoZGF0ZSA9ICcnKTogRGF0ZSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUoXHJcbiAgICAgICAgYCR7ZGF0ZS5zdWJzdHJpbmcoMCwgNCl9LSR7ZGF0ZS5zdWJzdHJpbmcoNCwgNil9LSR7ZGF0ZS5zdWJzdHJpbmcoNiwgOCl9JHtkYXRlLnN1YnN0cmluZyhcclxuICAgICAgICAgIDgsXHJcbiAgICAgICAgICAxMSxcclxuICAgICAgICApfToke2RhdGUuc3Vic3RyaW5nKDExLCAxMyl9OiR7ZGF0ZS5zdWJzdHJpbmcoMTMsIDE1KX0uMDAwWmAsXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldE1vbnRoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAtIDEpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNMYXRlc3QoYWRkZWRPbjogRGF0ZSkge1xyXG4gICAgaWYgKGFkZGVkT24pIHtcclxuICAgICAgY29uc3QgZGF0ZU9mZnNldCA9IDI0ICogNjAgKiA2MCAqIDEwMDAgKiA3XHJcbiAgICAgIGNvbnN0IGxhc3Q3RGF5ID0gbmV3IERhdGUoKVxyXG4gICAgICBsYXN0N0RheS5zZXRUaW1lKGxhc3Q3RGF5LmdldFRpbWUoKSAtIGRhdGVPZmZzZXQpXHJcbiAgICAgIGlmIChhZGRlZE9uLmdldFRpbWUoKSA+PSBsYXN0N0RheS5nZXRUaW1lKCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGdldCBzaG93SW50cmFuZXRDb250ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlzSW5JbnRyYW5ldCAmJiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmlzSW50cmFuZXRBbGxvd2VkU2V0dGluZ3NcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgc2hvd1NuYWNrYmFyKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ludHJhbmV0Q29udGVudCkge1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgaW4gaW50cmFuZXQnLCAnWCcsIHsgZHVyYXRpb246IDIwMDAgfSlcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMaXZlT3JNYXJrRm9yRGVsZXRpb24pIHtcclxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb250ZW50IG1heSBiZSBleHBpcmVkIG9yIGRlbGV0ZWQnLCAnWCcsIHsgZHVyYXRpb246IDIwMDAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc0xpdmVPck1hcmtGb3JEZWxldGlvbigpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyB8fFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5zdGF0dXMgPT09ICdMaXZlJyB8fFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5zdGF0dXMgPT09ICdNYXJrZWRGb3JEZWxldGlvbidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBvcGVuQ29tbWVudCgpIHsgfVxyXG59XHJcbiJdfQ==
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbGxlY3Rpb24vIiwic291cmNlcyI6WyJsaWIvY2FyZC1jb250ZW50L2NhcmQtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUE7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBb0IsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFvQixNQUFNLG1CQUFtQixDQUFBO0FBSTNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFPcEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLG1CQUFtQjtJQWtCM0QsWUFFVSxTQUFnQyxFQUNoQyxVQUEwQixFQUMxQixRQUFxQjtRQUU3QixLQUFLLEVBQUUsQ0FBQTtRQUpDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGVBQVUsR0FBVixVQUFVLENBQWdCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFsQnhCLE9BQUUsR0FBRyxXQUFXLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFBO1FBQ3RDLHFCQUFnQixHQUF1QixFQUFFLENBQUE7UUFDekMsaUJBQVksR0FBdUIsRUFBRSxDQUFBO1FBQ3JDLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUE7UUFDckIsZUFBVSxHQUFHLEtBQUssQ0FBQTtRQUNsQixtQkFBYyxHQUFHLEtBQUssQ0FBQTtRQUV0QixzQkFBaUIsR0FBbUMsSUFBSSxDQUFBO1FBQ3hELG1CQUFjLEdB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O0lBRUQsV0FBVyxLQUFLLENBQUM7OztZQXpTbEIsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLDBnMkNBQTRDOzthQUU3Qzs7O1lBWFEscUJBQXFCO1lBQUUsY0FBYztZQUZyQyxXQUFXOzs7eUJBZ0JqQixLQUFLO2lCQUNMLFdBQVcsU0FBQyxJQUFJOzs7SUFEakIsMENBQXlDO0lBQ3pDLGtDQUNzQztJQUN0QyxnREFBeUM7SUFDekMsNENBQXFDO0lBQ3JDLHdDQUFnQjtJQUNoQiw2Q0FBcUI7SUFDckIsMENBQWtCO0lBQ2xCLDhDQUFzQjtJQUV0QixpREFBd0Q7SUFDeEQsOENBQTZDO0lBQzdDLHNEQUFrRDtJQUNsRCwyQ0FBdUQ7SUFFdkQseURBQWlDO0lBRy9CLHlDQUF3QztJQUN4QywwQ0FBa0M7SUFDbEMsd0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCdcclxuaW1wb3J0IHsgTnNXaWRnZXRSZXNvbHZlciwgV2lkZ2V0QmFzZUNvbXBvbmVudCB9IGZyb20gJ0BzdW5iaXJkLWNiL3Jlc29sdmVyJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBOc0luc3RhbmNlQ29uZmlnIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMnXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IE5zR29hbCB9IGZyb20gJy4uL2J0bi1nb2Fscy9idG4tZ29hbHMubW9kZWwnXHJcbmltcG9ydCB7IE5zUGxheWxpc3QgfSBmcm9tICcuLi9idG4tcGxheWxpc3QvYnRuLXBsYXlsaXN0Lm1vZGVsJ1xyXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuL2NhcmQtY29udGVudC5tb2RlbCdcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3Mtd2lkZ2V0LWNhcmQtY29udGVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhcmQtY29udGVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZC1jb250ZW50LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJkQ29udGVudENvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBOc1dpZGdldFJlc29sdmVyLklXaWRnZXREYXRhPE5zQ2FyZENvbnRlbnQuSUNhcmQ+IHtcclxuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDYXJkQ29udGVudC5JQ2FyZFxyXG4gIEBIb3N0QmluZGluZygnaWQnKVxyXG4gIHB1YmxpYyBpZCA9IGB3cy1jYXJkXyR7TWF0aC5yYW5kb20oKX1gXHJcbiAgZGVmYXVsdFRodW1ibmFpbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJydcclxuICBkZWZhdWx0U0xvZ286IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnXHJcbiAgc2hvd0ZsaXAgPSBmYWxzZVxyXG4gIGlzQ2FyZEZsaXBwZWQgPSBmYWxzZVxyXG4gIHNob3dJc01vZGUgPSBmYWxzZVxyXG4gIHNob3dDb250ZW50VGFnID0gZmFsc2VcclxuXHJcbiAgYnRuUGxheWxpc3RDb25maWc6IE5zUGxheWxpc3QuSUJ0blBsYXlsaXN0IHwgbnVsbCA9IG51bGxcclxuICBidG5Hb2Fsc0NvbmZpZzogTnNHb2FsLklCdG5Hb2FsIHwgbnVsbCA9IG51bGxcclxuICBwcmVmQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxyXG4gIHNvdXJjZUxvZ29zOiBOc0luc3RhbmNlQ29uZmlnLklTb3VyY2VMb2dvW10gfCB1bmRlZmluZWRcclxuXHJcbiAgaXNJbnRyYW5ldEFsbG93ZWRTZXR0aW5ncyA9IGZhbHNlXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gdGhpcy53aWRnZXRJbnN0YW5jZUlkPWhpcy5pZFxyXG4gICAgdGhpcy5pc0ludHJhbmV0QWxsb3dlZFNldHRpbmdzID0gdGhpcy5jb25maWdTdmMuaXNJbnRyYW5ldEFsbG93ZWRcclxuICAgIHRoaXMucHJlZkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnU3ZjLnByZWZDaGFuZ2VOb3RpZmllci5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzSW50cmFuZXRBbGxvd2VkU2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1N2Yy5pc0ludHJhbmV0QWxsb3dlZFxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnXHJcbiAgICBpZiAoaW5zdGFuY2VDb25maWcpIHtcclxuICAgICAgdGhpcy5kZWZhdWx0VGh1bWJuYWlsID0gaW5zdGFuY2VDb25maWcubG9nb3MuZGVmYXVsdENvbnRlbnRcclxuICAgICAgdGhpcy5zb3VyY2VMb2dvcyA9IGluc3RhbmNlQ29uZmlnLnNvdXJjZXNcclxuICAgICAgdGhpcy5kZWZhdWx0U0xvZ28gPSBpbnN0YW5jZUNvbmZpZy5sb2dvcy5kZWZhdWx0U291cmNlTG9nb1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpZGdldERhdGEpIHtcclxuICAgICAgdGhpcy5idG5QbGF5bGlzdENvbmZpZyA9IHtcclxuICAgICAgICBjb250ZW50SWQ6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXIsXHJcbiAgICAgICAgY29udGVudE5hbWU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm5hbWUsXHJcbiAgICAgICAgY29udGVudFR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlLFxyXG4gICAgICAgIG1vZGU6ICdkaWFsb2cnLFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnRuR29hbHNDb25maWcgPSB7XHJcbiAgICAgICAgY29udGVudElkOiB0aGlzLndpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyLFxyXG4gICAgICAgIGNvbnRlbnROYW1lOiB0aGlzLndpZGdldERhdGEuY29udGVudC5uYW1lLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGlmeVNlbnNpYmxlQ29udGVudFJhdGluZygpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVxdWlyZWQgZm9yIGtub3dsZWRnZSBib2FyZFxyXG4gICAgLy8gVE9ETzogbWFrZSBpdCBtb3JlIGdlbmVyaWNcclxuICAgIHRoaXMuc2hvd0ZsaXAgPSBCb29sZWFuKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnJlYXNvbilcclxuICAgIGlmICh0aGlzLndpZGdldERhdGEuY29udGVudC5tb2RlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0lzTW9kZSA9IHRoaXMuaXNMYXRlc3QodGhpcy5jb252ZXJ0VG9JU09EYXRlKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmFkZGVkT24pKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncykge1xyXG4gICAgICB0aGlzLnNob3dDb250ZW50VGFnID1cclxuICAgICAgICB0aGlzLmNoZWNrQ3JpdGVyaWEoKSAmJiB0aGlzLmNoZWNrQ29udGVudFR5cGVDcml0ZXJpYSgpICYmIHRoaXMuY2hlY2tNaW1lVHlwZUNyaXRlcmlhKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrQ29udGVudFR5cGVDcml0ZXJpYSgpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlQ29udGVudFR5cGUgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmV4Y2x1ZGVDb250ZW50VHlwZS5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlQ29udGVudFR5cGUuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUsXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBjaGVja01pbWVUeXBlQ3JpdGVyaWEoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncyAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZXhjbHVkZU1pbWVUeXBlICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5leGNsdWRlTWltZVR5cGUubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICF0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZXhjbHVkZU1pbWVUeXBlLmluY2x1ZGVzKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50Lm1pbWVUeXBlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGNoZWNrQ3JpdGVyaWEoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncyAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuY3JpdGVyaWFGaWVsZCAmJlxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudFRhZ3MuZGF5c1NwYW5cclxuICAgICkge1xyXG4gICAgICBjb25zdCBkYXRlT2Zmc2V0ID0gMjQgKiA2MCAqIDYwICogMTAwMCAqIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50VGFncy5kYXlzU3BhblxyXG4gICAgICBjb25zdCBsYXN0RGF5ID0gbmV3IERhdGUoKVxyXG4gICAgICBsYXN0RGF5LnNldFRpbWUobGFzdERheS5nZXRUaW1lKCkgLSBkYXRlT2Zmc2V0KVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jb252ZXJ0VG9JU09EYXRlKFxyXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnRbdGhpcy53aWRnZXREYXRhLmNvbnRlbnRUYWdzLmNyaXRlcmlhRmllbGRdLFxyXG4gICAgICAgICkuZ2V0VGltZSgpID49IGxhc3REYXkuZ2V0VGltZSgpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5wcmVmQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucHJlZkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyB0aGlzLmFzc2lnblRodW1ibmFpbCgpXHJcbiAgfVxyXG5cclxuICBnZXQgY2hlY2tEaXNwbGF5TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzLmxlbmd0aCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzWzBdLm5hbWUgfHxcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yRGV0YWlsc1swXS5uYW1lID09PSAnJyB8fFxyXG4gICAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JEZXRhaWxzWzBdLm5hbWUgPT09ICdudWxsIG51bGwnXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiAnTm90IERpc2Nsb3NlZCdcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckRldGFpbHNbMF0ubmFtZVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNyZWF0b3JDb250YWN0cyAmJiB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY3JlYXRvckNvbnRhY3RzWzBdLm5hbWUgfHxcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZSA9PT0gJycgfHxcclxuICAgICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZSA9PT0gJ251bGwgbnVsbCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuICdOb3QgRGlzY2xvc2VkJ1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLndpZGdldERhdGEuY29udGVudC5jcmVhdG9yQ29udGFjdHNbMF0ubmFtZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnXHJcbiAgfVxyXG5cclxuICBnZXQgaW1hZ2VJY29uKCk6IHN0cmluZ1tdIHtcclxuICAgIGlmICh0aGlzLndpZGdldERhdGEuY29udGVudC5jb250ZW50VHlwZSA9PT0gTnNDb250ZW50LkVDb250ZW50VHlwZXMuS05PV0xFREdFX0FSVElGQUNUKSB7XHJcbiAgICAgIHJldHVybiBbJ2NsYXNzJywgJ0tub3dsZWRnZSBBcnRpZmFjdCddXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuY29udGVudFR5cGUgIT09IE5zQ29udGVudC5FQ29udGVudFR5cGVzLlJFU09VUkNFKSB7XHJcbiAgICAgIHJldHVybiBbJ2ZvbGRlcicsICdDb3Vyc2UnXVxyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLndpZGdldERhdGEuY29udGVudC5taW1lVHlwZSkge1xyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLkhUTUw6XHJcbiAgICAgICAgcmV0dXJuIFsnbGlicmFyeV9hZGQnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTVAzOlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLk1QNDpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NNEE6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuTTNVODpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QTEFZTElTVDpcclxuICAgICAgY2FzZSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5ZT1VUVUJFOlxyXG4gICAgICAgIHJldHVybiBbJ2xpYnJhcnlfbXVzaWMnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUERGOlxyXG4gICAgICAgIHJldHVybiBbJ3BpY3R1cmVfYXNfcGRmJywgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQucmVzb3VyY2VUeXBlXVxyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLlFVSVo6XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSEFORFNfT046XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuUkRCTVNfSEFORFNfT046XHJcbiAgICAgIGNhc2UgTnNDb250ZW50LkVNaW1lVHlwZXMuSUFQOlxyXG4gICAgICBjYXNlIE5zQ29udGVudC5FTWltZVR5cGVzLkNFUlRJRklDQVRJT046XHJcbiAgICAgICAgcmV0dXJuIFsnYXNzaWdubWVudF9pbmQnLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFsnZGVzY3JpcHRpb24nLCB0aGlzLndpZGdldERhdGEuY29udGVudC5yZXNvdXJjZVR5cGVdXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1vZGlmeVNlbnNpYmxlQ29udGVudFJhdGluZygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQgJiZcclxuICAgICAgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAmJlxyXG4gICAgICB0eXBlb2YgdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAhPT0gJ251bWJlcidcclxuICAgICkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRlci1jb21wdXRlZC1wcm9wZXJ0eS1zcGFjaW5nXHJcbiAgICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgPSAodGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXZlcmFnZVJhdGluZyBhcyBhbnkpW1xyXG4gICAgICAgIHRoaXMuY29uZmlnU3ZjLnJvb3RPcmcgfHwgJydcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRlci1jb21wdXRlZC1wcm9wZXJ0eS1zcGFjaW5nXHJcbiAgICAgIF1cclxuICAgIH1cclxuICAgIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgPSB0aGlzLndpZGdldERhdGEuY29udGVudC5hdmVyYWdlUmF0aW5nIHx8IDBcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgYXNzaWduVGh1bWJuYWlsKCkge1xyXG4gIC8vICAgY29uc3QgdGh1bWJuYWlsRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjYXJkXyR7dGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcn1gKSBhcyBIVE1MSW1hZ2VFbGVtZW50XHJcbiAgLy8gICBpZiAodGh1bWJuYWlsRWxlbWVudCkge1xyXG4gIC8vICAgICB0cnkge1xyXG4gIC8vICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxyXG4gIC8vICAgICAgICAgZW50cmllcyA9PiB7XHJcbiAgLy8gICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgeyBpc0ludGVyc2VjdGluZyB9ID0gZW50cnlcclxuICAvLyAgICAgICAgICAgICBpZiAoaXNJbnRlcnNlY3RpbmcpIHtcclxuICAvLyAgICAgICAgICAgICAgIHRodW1ibmFpbEVsZW1lbnQuc3JjID0gdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuYXBwSWNvblxyXG4gIC8vICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXHJcbiAgLy8gICAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICB9KVxyXG4gIC8vICAgICAgICAgfSxcclxuICAvLyAgICAgICApXHJcbiAgLy8gICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aHVtYm5haWxFbGVtZW50KVxyXG4gIC8vICAgICB9IGNhdGNoIChlKSB7XHJcbiAgLy8gICAgICAgdGh1bWJuYWlsRWxlbWVudC5zcmMgPSB0aGlzLndpZGdldERhdGEuY29udGVudC5hcHBJY29uXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGdldCBpc0tub3dsZWRnZUJvYXJkKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50ICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlKSA9PT1cclxuICAgICAgTnNDb250ZW50LkVDb250ZW50VHlwZXMuS05PV0xFREdFX0JPQVJEXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICByYWlzZVRlbGVtZXRyeSgpIHtcclxuICAgIC8vIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoJ2NsaWNrJywgYCR7dGhpcy53aWRnZXRUeXBlfS0ke3RoaXMud2lkZ2V0U3ViVHlwZX1gLCB7XHJcbiAgICAvLyAgIGNvbnRlbnRJZDogdGhpcy53aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcixcclxuICAgIC8vICAgY29udGVudFR5cGU6IHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmNvbnRlbnRUeXBlLFxyXG4gICAgLy8gICBjb250ZXh0OiB0aGlzLndpZGdldERhdGEuY29udGV4dCxcclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgaXNHcmV5ZWRJbWFnZSgpIHtcclxuICAgIGlmIChcclxuICAgICAgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50ICYmIHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyA9PT0gJ0RlbGV0ZWQnKSB8fFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5zdGF0dXMgPT09ICdFeHBpcmVkJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0lTT0RhdGUoZGF0ZSA9ICcnKTogRGF0ZSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUoXHJcbiAgICAgICAgYCR7ZGF0ZS5zdWJzdHJpbmcoMCwgNCl9LSR7ZGF0ZS5zdWJzdHJpbmcoNCwgNil9LSR7ZGF0ZS5zdWJzdHJpbmcoNiwgOCl9JHtkYXRlLnN1YnN0cmluZyhcclxuICAgICAgICAgIDgsXHJcbiAgICAgICAgICAxMSxcclxuICAgICAgICApfToke2RhdGUuc3Vic3RyaW5nKDExLCAxMyl9OiR7ZGF0ZS5zdWJzdHJpbmcoMTMsIDE1KX0uMDAwWmAsXHJcbiAgICAgIClcclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldE1vbnRoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAtIDEpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNMYXRlc3QoYWRkZWRPbjogRGF0ZSkge1xyXG4gICAgaWYgKGFkZGVkT24pIHtcclxuICAgICAgY29uc3QgZGF0ZU9mZnNldCA9IDI0ICogNjAgKiA2MCAqIDEwMDAgKiA3XHJcbiAgICAgIGNvbnN0IGxhc3Q3RGF5ID0gbmV3IERhdGUoKVxyXG4gICAgICBsYXN0N0RheS5zZXRUaW1lKGxhc3Q3RGF5LmdldFRpbWUoKSAtIGRhdGVPZmZzZXQpXHJcbiAgICAgIGlmIChhZGRlZE9uLmdldFRpbWUoKSA+PSBsYXN0N0RheS5nZXRUaW1lKCkpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGdldCBzaG93SW50cmFuZXRDb250ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5jb250ZW50LmlzSW5JbnRyYW5ldCAmJiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUpIHtcclxuICAgICAgcmV0dXJuICF0aGlzLmlzSW50cmFuZXRBbGxvd2VkU2V0dGluZ3NcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgc2hvd1NuYWNrYmFyKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0ludHJhbmV0Q29udGVudCkge1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgaW4gaW50cmFuZXQnLCAnWCcsIHsgZHVyYXRpb246IDIwMDAgfSlcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNMaXZlT3JNYXJrRm9yRGVsZXRpb24pIHtcclxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb250ZW50IG1heSBiZSBleHBpcmVkIG9yIGRlbGV0ZWQnLCAnWCcsIHsgZHVyYXRpb246IDIwMDAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc0xpdmVPck1hcmtGb3JEZWxldGlvbigpIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMud2lkZ2V0RGF0YS5jb250ZW50LnN0YXR1cyB8fFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5zdGF0dXMgPT09ICdMaXZlJyB8fFxyXG4gICAgICB0aGlzLndpZGdldERhdGEuY29udGVudC5zdGF0dXMgPT09ICdNYXJrZWRGb3JEZWxldGlvbidcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBvcGVuQ29tbWVudCgpIHsgfVxyXG59XHJcbiJdfQ==