ngx-edu-sharing-ui 9999.0.2 → 9999.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/actionbar/actionbar.component.mjs +31 -16
- package/esm2022/lib/directives/icon.directive.mjs +24 -7
- package/esm2022/lib/dropdown/dropdown.component.mjs +15 -8
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +3 -3
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
- package/esm2022/lib/node-entries/entries-model.mjs +1 -1
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +6 -4
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +16 -13
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +2 -2
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +5 -3
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +8 -3
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +7 -5
- package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
- package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
- package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
- package/esm2022/lib/services/node-entries.service.mjs +1 -1
- package/esm2022/lib/services/node-helper.service.mjs +5 -2
- package/esm2022/lib/services/options-helper-data.service.mjs +2 -2
- package/esm2022/lib/services/search-helper.service.mjs +52 -0
- package/esm2022/lib/services/ui.service.mjs +16 -1
- package/esm2022/lib/translations/translation-loader.mjs +7 -6
- package/esm2022/lib/translations/translations.service.mjs +14 -4
- package/esm2022/lib/types/option-item.mjs +6 -1
- package/esm2022/module.mjs +2 -1
- package/fesm2022/ngx-edu-sharing-ui.mjs +214 -74
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/actionbar/actionbar.component.d.ts +13 -3
- package/lib/directives/icon.directive.d.ts +5 -3
- package/lib/dropdown/dropdown.component.d.ts +6 -3
- package/lib/list-items/list-text/list-text.component.d.ts +3 -3
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/node-entries/entries-model.d.ts +1 -1
- package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +1 -1
- package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +1 -1
- package/lib/node-entries/option-button/option-button.component.d.ts +2 -1
- package/lib/pipes/node-title.pipe.d.ts +2 -1
- package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
- package/lib/services/abstract/options-helper.service.d.ts +1 -1
- package/lib/services/node-helper.service.d.ts +2 -2
- package/lib/services/options-helper-data.service.d.ts +3 -3
- package/lib/services/search-helper.service.d.ts +21 -0
- package/lib/services/ui.service.d.ts +7 -1
- package/lib/translations/translations.service.d.ts +5 -2
- package/lib/types/option-item.d.ts +7 -2
- package/module.d.ts +1 -0
- package/package.json +1 -1
|
@@ -18,7 +18,7 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
|
|
18
18
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
19
19
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
20
20
|
import * as i2 from 'ngx-edu-sharing-api';
|
|
21
|
-
import { RestConstants, LANGUAGES, ME, ConfigService } from 'ngx-edu-sharing-api';
|
|
21
|
+
import { RestConstants, LANGUAGES, ME, ConfigService, MdsService } from 'ngx-edu-sharing-api';
|
|
22
22
|
import * as i3$2 from '@angular/material/core';
|
|
23
23
|
import { MatRippleModule } from '@angular/material/core';
|
|
24
24
|
import * as i2$1 from '@angular/router';
|
|
@@ -387,6 +387,21 @@ class UIService {
|
|
|
387
387
|
}
|
|
388
388
|
return optionsFiltered;
|
|
389
389
|
}
|
|
390
|
+
/**
|
|
391
|
+
* helper that updates the "isEnabled" flag on all options for the given, selected node
|
|
392
|
+
* can be used by dropdown or action menus to update the state for the current element
|
|
393
|
+
* @param options
|
|
394
|
+
*/
|
|
395
|
+
async updateOptionEnabledState(options, object = null) {
|
|
396
|
+
options.value.forEach((o) => {
|
|
397
|
+
o.isEnabled = !o.customEnabledCallback;
|
|
398
|
+
o.enabledCallback(object).then((result) => {
|
|
399
|
+
o.isEnabled = result;
|
|
400
|
+
options.next(options.value);
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
options.next(options.value);
|
|
404
|
+
}
|
|
390
405
|
filterToggleOptions(options, toggle) {
|
|
391
406
|
let result = [];
|
|
392
407
|
for (let option of options) {
|
|
@@ -500,9 +515,10 @@ class IconDirective {
|
|
|
500
515
|
set esIcon(id) {
|
|
501
516
|
this.originalId$.next(id);
|
|
502
517
|
}
|
|
503
|
-
constructor(element, translate, config) {
|
|
518
|
+
constructor(element, translate, renderer, config) {
|
|
504
519
|
this.element = element;
|
|
505
520
|
this.translate = translate;
|
|
521
|
+
this.renderer = renderer;
|
|
506
522
|
this.config = config;
|
|
507
523
|
this.originalId$ = new BehaviorSubject(null);
|
|
508
524
|
this.isReady = false;
|
|
@@ -526,6 +542,19 @@ class IconDirective {
|
|
|
526
542
|
setIcon(id, iconsConfig) {
|
|
527
543
|
if (this._id) {
|
|
528
544
|
this.element.nativeElement.classList.remove('edu-icons', 'custom-icons', 'material-icons');
|
|
545
|
+
if (this.svg) {
|
|
546
|
+
this.renderer.removeChild(this.element.nativeElement, this.svg);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
if (id.startsWith('svg-')) {
|
|
550
|
+
this.svg = document.createElement('img');
|
|
551
|
+
this.svg.classList.add('svg-icons');
|
|
552
|
+
this.svg.src = 'assets/images/icons/' + id.substring(4);
|
|
553
|
+
this.renderer.appendChild(this.element.nativeElement, this.svg);
|
|
554
|
+
if (this._aria) {
|
|
555
|
+
this.updateAria();
|
|
556
|
+
}
|
|
557
|
+
return;
|
|
529
558
|
}
|
|
530
559
|
let customClass = null;
|
|
531
560
|
const mapping = iconsConfig?.filter((i) => i.original === id);
|
|
@@ -540,11 +569,11 @@ class IconDirective {
|
|
|
540
569
|
let cssClass;
|
|
541
570
|
if (id?.startsWith('edu-') && !customClass) {
|
|
542
571
|
cssClass = 'edu-icons';
|
|
543
|
-
id = id.
|
|
572
|
+
id = id.substring(4);
|
|
544
573
|
}
|
|
545
574
|
else if (id?.startsWith('custom-') || customClass) {
|
|
546
575
|
cssClass = 'custom-icons';
|
|
547
|
-
id = id.
|
|
576
|
+
id = id.substring(7);
|
|
548
577
|
}
|
|
549
578
|
else {
|
|
550
579
|
cssClass = 'material-icons';
|
|
@@ -568,6 +597,9 @@ class IconDirective {
|
|
|
568
597
|
}
|
|
569
598
|
}
|
|
570
599
|
setAltText(altText) {
|
|
600
|
+
if (this.svg) {
|
|
601
|
+
this.svg.alt = altText;
|
|
602
|
+
}
|
|
571
603
|
if (altText && !this.altTextSpan) {
|
|
572
604
|
this.insertAltTextSpan();
|
|
573
605
|
}
|
|
@@ -580,7 +612,7 @@ class IconDirective {
|
|
|
580
612
|
this.altTextSpan.classList.add('cdk-visually-hidden');
|
|
581
613
|
this.element.nativeElement.insertAdjacentElement('afterend', this.altTextSpan);
|
|
582
614
|
}
|
|
583
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: IconDirective, deps: [{ token: i0.ElementRef }, { token: i1.TranslateService }, { token: i2.ConfigService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
615
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: IconDirective, deps: [{ token: i0.ElementRef }, { token: i1.TranslateService }, { token: i0.Renderer2 }, { token: i2.ConfigService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
584
616
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.2", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: { altText: "altText", aria: "aria", esIcon: "esIcon" }, ngImport: i0 }); }
|
|
585
617
|
}
|
|
586
618
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: IconDirective, decorators: [{
|
|
@@ -588,7 +620,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
588
620
|
args: [{
|
|
589
621
|
selector: 'i[esIcon], i.material-icons',
|
|
590
622
|
}]
|
|
591
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TranslateService }, { type: i2.ConfigService, decorators: [{
|
|
623
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TranslateService }, { type: i0.Renderer2 }, { type: i2.ConfigService, decorators: [{
|
|
592
624
|
type: Optional
|
|
593
625
|
}] }], propDecorators: { altText: [{
|
|
594
626
|
type: Input
|
|
@@ -602,8 +634,8 @@ class OptionTooltipPipe {
|
|
|
602
634
|
constructor(translate) {
|
|
603
635
|
this.translate = translate;
|
|
604
636
|
}
|
|
605
|
-
transform(option, args = null) {
|
|
606
|
-
return (this.translate.
|
|
637
|
+
async transform(option, args = null) {
|
|
638
|
+
return ((await this.translate.get(option.name).toPromise()) +
|
|
607
639
|
(option.keyboardShortcut ? ' (' + this.getKeyInfo(option) + ')' : ''));
|
|
608
640
|
}
|
|
609
641
|
getKeyInfo(option) {
|
|
@@ -659,17 +691,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
659
691
|
* but can also be used standalone.
|
|
660
692
|
*/
|
|
661
693
|
class DropdownComponent {
|
|
662
|
-
set options(options) {
|
|
663
|
-
this._options = this.ui.filterValidOptions(Helper.deepCopyArray(options));
|
|
664
|
-
}
|
|
665
694
|
constructor(ui) {
|
|
666
695
|
this.ui = ui;
|
|
667
696
|
this.position = 'left';
|
|
697
|
+
this.options$ = new BehaviorSubject([]);
|
|
668
698
|
/**
|
|
669
699
|
* Should disabled ("greyed out") options be shown or hidden?
|
|
670
700
|
*/
|
|
671
701
|
this.showDisabled = true;
|
|
672
702
|
}
|
|
703
|
+
ngOnChanges(changes) {
|
|
704
|
+
if (changes == null || changes?.options || changes?.callbackObject) {
|
|
705
|
+
this.options$.next(this.ui.filterValidOptions(Helper.deepCopyArray(this.options)));
|
|
706
|
+
if (this.callbackObject) {
|
|
707
|
+
this.ui.updateOptionEnabledState(this.options$, this.callbackObject);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}
|
|
673
711
|
click(option) {
|
|
674
712
|
if (!option.isEnabled) {
|
|
675
713
|
return;
|
|
@@ -678,7 +716,7 @@ class DropdownComponent {
|
|
|
678
716
|
}
|
|
679
717
|
isNewGroup(i) {
|
|
680
718
|
if (i > 0) {
|
|
681
|
-
return this.
|
|
719
|
+
return this.options$.value[i].group !== this.options$.value[i - 1].group;
|
|
682
720
|
}
|
|
683
721
|
return false;
|
|
684
722
|
}
|
|
@@ -687,14 +725,14 @@ class DropdownComponent {
|
|
|
687
725
|
// We can only open the dropdown menu, when there is at least one enabled option. Even when
|
|
688
726
|
// there are options with `showDisabled: true`, showing a menu with no selectable option
|
|
689
727
|
// causes a11y issues.
|
|
690
|
-
return this.
|
|
728
|
+
return this.options$.value?.some((o) => o.isEnabled);
|
|
691
729
|
}
|
|
692
730
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DropdownComponent, deps: [{ token: UIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
693
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: DropdownComponent, selector: "es-dropdown", inputs: { position: "position", options: "options", callbackObject: "callbackObject", showDisabled: "showDisabled", menuClass: "menuClass" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["dropdown"], descendants: true, static: true }, { propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], ngImport: i0, template: "<mat-menu\n #dropdown=\"matMenu\"\n class=\"mat-dropdown-menu\"\n [class]=\"menuClass\"\n backdropClass=\"mat-dropdown-menu\"\n [xPosition]=\"position === 'right' ? 'after' : 'before'\"\n>\n <!-- MatMenu has role=\"menu\", so the only meaningful role of descendants is \"menuitem\" -->\n <ul role=\"none\">\n <ng-container *ngFor=\"let option of
|
|
731
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: DropdownComponent, selector: "es-dropdown", inputs: { position: "position", options: "options", callbackObject: "callbackObject", showDisabled: "showDisabled", menuClass: "menuClass" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["dropdown"], descendants: true, static: true }, { propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-menu\n #dropdown=\"matMenu\"\n class=\"mat-dropdown-menu\"\n [class]=\"menuClass\"\n backdropClass=\"mat-dropdown-menu\"\n [xPosition]=\"position === 'right' ? 'after' : 'before'\"\n>\n <!-- MatMenu has role=\"menu\", so the only meaningful role of descendants is \"menuitem\" -->\n <ul role=\"none\">\n <ng-container *ngFor=\"let option of options$ | async; let i = index\">\n <li *ngIf=\"option.isEnabled || showDisabled\" role=\"none\">\n <button\n mat-menu-item\n class=\"mat-menu-item collection-item-{{\n option.name | replaceChars : { search: '.', replace: '-' }\n }}\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n matTooltipPosition=\"right\"\n matTooltipTouchGestures=\"off\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n [class.mat-menu-item-separate]=\"option.isSeparate || isNewGroup(i)\"\n [class.mat-menu-item-selected]=\"option.isSelected\"\n [disabled]=\"!option.isEnabled\"\n (click)=\"click(option)\"\n attr.data-test=\"menu-item-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\"></i> {{ option.name | translate }}\n </button>\n </li>\n </ng-container>\n </ul>\n</mat-menu>\n<div #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"display-none\"></div>\n", styles: ["::ng-deep .mat-dropdown-menu .mat-mdc-menu-content{min-width:200px}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content>ul>li>button{display:flex;align-items:center}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content>ul>li>button:not(:disabled)>span{color:var(--primary)}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content>ul>li>button>i{width:35px}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content:not(:empty){padding:0!important}::ng-deep .mat-dropdown-menu ul{margin:0;list-style:none;padding-left:0}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item .mat-mdc-menu-item-text{display:flex;align-items:center}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item .mat-mdc-menu-item-text i{margin-right:10px}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item:hover:not([disabled]),::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item.cdk-focused{color:var(--itemSelectedTextColor);background-color:var(--listItemSelectedBackground)}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}::ng-deep .mat-dropdown-menu ul li .mat-menu-item-separate{border-top:1px solid #ccc}@media screen and (max-width: calc(var(--mobileWidth) - var(--mobileStage) * 1)){::ng-deep .mat-dropdown-menu ul li.cdk-overlay-backdrop{background:#000c}::ng-deep .mat-dropdown-menu ul li.mat-menu-panel{position:fixed;bottom:0;left:0;max-width:100%;width:100%;border-radius:0}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: OptionTooltipPipe, name: "optionTooltip" }, { kind: "pipe", type: ReplaceCharsPipe, name: "replaceChars" }] }); }
|
|
694
732
|
}
|
|
695
733
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
696
734
|
type: Component,
|
|
697
|
-
args: [{ selector: 'es-dropdown', template: "<mat-menu\n #dropdown=\"matMenu\"\n class=\"mat-dropdown-menu\"\n [class]=\"menuClass\"\n backdropClass=\"mat-dropdown-menu\"\n [xPosition]=\"position === 'right' ? 'after' : 'before'\"\n>\n <!-- MatMenu has role=\"menu\", so the only meaningful role of descendants is \"menuitem\" -->\n <ul role=\"none\">\n <ng-container *ngFor=\"let option of
|
|
735
|
+
args: [{ selector: 'es-dropdown', template: "<mat-menu\n #dropdown=\"matMenu\"\n class=\"mat-dropdown-menu\"\n [class]=\"menuClass\"\n backdropClass=\"mat-dropdown-menu\"\n [xPosition]=\"position === 'right' ? 'after' : 'before'\"\n>\n <!-- MatMenu has role=\"menu\", so the only meaningful role of descendants is \"menuitem\" -->\n <ul role=\"none\">\n <ng-container *ngFor=\"let option of options$ | async; let i = index\">\n <li *ngIf=\"option.isEnabled || showDisabled\" role=\"none\">\n <button\n mat-menu-item\n class=\"mat-menu-item collection-item-{{\n option.name | replaceChars : { search: '.', replace: '-' }\n }}\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n matTooltipPosition=\"right\"\n matTooltipTouchGestures=\"off\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n [class.mat-menu-item-separate]=\"option.isSeparate || isNewGroup(i)\"\n [class.mat-menu-item-selected]=\"option.isSelected\"\n [disabled]=\"!option.isEnabled\"\n (click)=\"click(option)\"\n attr.data-test=\"menu-item-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\"></i> {{ option.name | translate }}\n </button>\n </li>\n </ng-container>\n </ul>\n</mat-menu>\n<div #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"display-none\"></div>\n", styles: ["::ng-deep .mat-dropdown-menu .mat-mdc-menu-content{min-width:200px}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content>ul>li>button{display:flex;align-items:center}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content>ul>li>button:not(:disabled)>span{color:var(--primary)}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content>ul>li>button>i{width:35px}::ng-deep .mat-dropdown-menu .mat-mdc-menu-content:not(:empty){padding:0!important}::ng-deep .mat-dropdown-menu ul{margin:0;list-style:none;padding-left:0}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item .mat-mdc-menu-item-text{display:flex;align-items:center}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item .mat-mdc-menu-item-text i{margin-right:10px}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item:hover:not([disabled]),::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item.cdk-focused{color:var(--itemSelectedTextColor);background-color:var(--listItemSelectedBackground)}::ng-deep .mat-dropdown-menu ul li .mat-mdc-menu-item.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}::ng-deep .mat-dropdown-menu ul li .mat-menu-item-separate{border-top:1px solid #ccc}@media screen and (max-width: calc(var(--mobileWidth) - var(--mobileStage) * 1)){::ng-deep .mat-dropdown-menu ul li.cdk-overlay-backdrop{background:#000c}::ng-deep .mat-dropdown-menu ul li.mat-menu-panel{position:fixed;bottom:0;left:0;max-width:100%;width:100%;border-radius:0}}\n"] }]
|
|
698
736
|
}], ctorParameters: () => [{ type: UIService }], propDecorators: { menu: [{
|
|
699
737
|
type: ViewChild,
|
|
700
738
|
args: ['dropdown', { static: true }]
|
|
@@ -768,26 +806,36 @@ class ActionbarComponent {
|
|
|
768
806
|
* Should disabled ("greyed out") options be shown or hidden?
|
|
769
807
|
*/
|
|
770
808
|
this.showDisabled = true;
|
|
809
|
+
/**
|
|
810
|
+
* the position of the mat tooltips
|
|
811
|
+
*/
|
|
812
|
+
this.tooltipPosition = 'below';
|
|
813
|
+
/**
|
|
814
|
+
* breakpoint width at which point the mobile display count is used
|
|
815
|
+
*/
|
|
816
|
+
this.mobileBreakpoint = UIConstants.MOBILE_WIDTH;
|
|
771
817
|
this.optionsIn = [];
|
|
772
|
-
this.optionsAlways = [];
|
|
773
|
-
this.optionsMenu = [];
|
|
818
|
+
this.optionsAlways$ = new BehaviorSubject([]);
|
|
819
|
+
this.optionsMenu$ = new BehaviorSubject([]);
|
|
774
820
|
this.optionsToggle = [];
|
|
775
821
|
}
|
|
776
822
|
prepareOptions(options) {
|
|
777
823
|
options = this.uiService.filterValidOptions(Helper.deepCopyArray(options));
|
|
778
824
|
if (options == null) {
|
|
779
|
-
this.optionsAlways
|
|
780
|
-
this.optionsMenu
|
|
825
|
+
this.optionsAlways$.next([]);
|
|
826
|
+
this.optionsMenu$.next([]);
|
|
781
827
|
return;
|
|
782
828
|
}
|
|
783
829
|
this.optionsToggle = this.uiService.filterToggleOptions(options, true);
|
|
784
|
-
this.optionsAlways
|
|
785
|
-
if (!this.optionsAlways.length) {
|
|
786
|
-
this.optionsAlways
|
|
830
|
+
this.optionsAlways$.next(this.getActionOptions(this.uiService.filterToggleOptions(options, false)).slice(0, this.getNumberOptions()));
|
|
831
|
+
if (!this.optionsAlways$.value.length) {
|
|
832
|
+
this.optionsAlways$.next(this.uiService
|
|
787
833
|
.filterToggleOptions(options, false)
|
|
788
|
-
.slice(0, this.getNumberOptions());
|
|
834
|
+
.slice(0, this.getNumberOptions()));
|
|
789
835
|
}
|
|
790
|
-
this.optionsMenu
|
|
836
|
+
this.optionsMenu$.next(this.hideActionOptions(this.uiService.filterToggleOptions(options, false), this.optionsAlways$.value));
|
|
837
|
+
this.uiService.updateOptionEnabledState(this.optionsAlways$);
|
|
838
|
+
this.uiService.updateOptionEnabledState(this.optionsMenu$);
|
|
791
839
|
// may causes weird looking
|
|
792
840
|
/*if(this.optionsMenu.length<2) {
|
|
793
841
|
this.optionsAlways = this.optionsAlways.concat(this.optionsMenu);
|
|
@@ -795,7 +843,7 @@ class ActionbarComponent {
|
|
|
795
843
|
}*/
|
|
796
844
|
}
|
|
797
845
|
getNumberOptions() {
|
|
798
|
-
if (window.innerWidth <
|
|
846
|
+
if (window.innerWidth < this.mobileBreakpoint) {
|
|
799
847
|
return this.numberOfAlwaysVisibleOptionsMobile;
|
|
800
848
|
}
|
|
801
849
|
return this.numberOfAlwaysVisibleOptions;
|
|
@@ -842,17 +890,17 @@ class ActionbarComponent {
|
|
|
842
890
|
return filtered;
|
|
843
891
|
}
|
|
844
892
|
canShowDropdown() {
|
|
845
|
-
if (!this.optionsMenu.length) {
|
|
893
|
+
if (!this.optionsMenu$.value.length) {
|
|
846
894
|
return false;
|
|
847
895
|
}
|
|
848
|
-
return this.optionsMenu.filter((o) => o.isEnabled).length > 0;
|
|
896
|
+
return this.optionsMenu$.value.filter((o) => o.isEnabled).length > 0;
|
|
849
897
|
}
|
|
850
898
|
shouldHighlight(optionIndex, option) {
|
|
851
899
|
switch (this.highlight) {
|
|
852
900
|
case 'first':
|
|
853
901
|
return optionIndex === 0;
|
|
854
902
|
case 'last':
|
|
855
|
-
return optionIndex === this.optionsAlways.length - 1;
|
|
903
|
+
return optionIndex === this.optionsAlways$.value.length - 1;
|
|
856
904
|
case 'manual':
|
|
857
905
|
return option.isPrimary;
|
|
858
906
|
}
|
|
@@ -861,11 +909,11 @@ class ActionbarComponent {
|
|
|
861
909
|
this.invalidate();
|
|
862
910
|
}
|
|
863
911
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ActionbarComponent, deps: [{ token: UIService }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
864
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ActionbarComponent, selector: "es-actionbar", inputs: { numberOfAlwaysVisibleOptions: "numberOfAlwaysVisibleOptions", numberOfAlwaysVisibleOptionsMobile: "numberOfAlwaysVisibleOptionsMobile", appearance: "appearance", dropdownPosition: "dropdownPosition", backgroundType: "backgroundType", style: "style", highlight: "highlight", showDisabled: "showDisabled", options: "options" }, usesOnChanges: true, ngImport: i0, template: "<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <ng-container *ngFor=\"let option of optionsAlways; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip }}\"\n [attr.aria-label]=\"option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip }}\"\n [attr.aria-label]=\"option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggle.length\"\n class=\"actionToggle\"\n [class.actionToggleDivider]=\"optionsAlways.length\"\n >\n <button\n *ngFor=\"let option of optionsToggle\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.name | translate\"\n (click)=\"click(option)\"\n [class.disabled]=\"!option.isEnabled\"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </div>\n</div>\n", styles: [".actionbar{display:flex;align-items:center;gap:10px}.actionToggle>button{color:var(--textLight)}button{min-width:unset}.light{color:#fff;background:transparent}.disabled{pointer-events:all}.light a{color:#fff}.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.more{color:var(--primary);background-color:transparent}.actionbar-background-dark .mat-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-dark .mat-button:disabled{color:rgba(var(--palette-foreground-text-dark),.75)}.actionbar-background-primary .mdc-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-primary .mat-mdc-unelevated-button{background-color:#fff;color:var(--primary)}.actionbar-background-primary .mat-mdc-unelevated-button:disabled{color:#00000080;background-color:#eee}.actionbar-round button{width:45px;height:45px;justify-content:center}.actionbar-round button{border-radius:50%;box-shadow:0 0 5px #0000004d}.actionbar-round.actionbar-background-primary .mat-button{background-color:#fff;color:var(--primary)}.actionbar-round.actionbar-all-flat button{background:#fff;color:var(--primary)!important}.actionbar-round.actionbar-all-flat button:disabled{color:var(--textLight)!important}.actionbar-round .more,.actionbar-round .actionAlways{background:#fff;color:var(--primary);display:flex;width:45px;height:45px;line-height:45px;text-align:center;align-items:center}.actionbar-round .more .edu-icons,.actionbar-round .more .material-icons,.actionbar-round .actionAlways .edu-icons,.actionbar-round .actionAlways .material-icons{position:relative;font-size:24px}.actionbar-round .more span,.actionbar-round .actionAlways span{display:none}.actionbar-round .action-always .edu-icons,.actionbar-round .action-always .material-icons{right:4px!important}@media screen and (max-width: calc(var(--mobileWidth) + var(--mobileStage) * 4)){.action-always{padding:0 1rem}.action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: OptionTooltipPipe, name: "optionTooltip" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
|
|
912
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ActionbarComponent, selector: "es-actionbar", inputs: { numberOfAlwaysVisibleOptions: "numberOfAlwaysVisibleOptions", numberOfAlwaysVisibleOptionsMobile: "numberOfAlwaysVisibleOptionsMobile", appearance: "appearance", dropdownPosition: "dropdownPosition", backgroundType: "backgroundType", style: "style", highlight: "highlight", showDisabled: "showDisabled", tooltipPosition: "tooltipPosition", options: "options", mobileBreakpoint: "mobileBreakpoint" }, usesOnChanges: true, ngImport: i0, template: "<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu$ | async\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <ng-container *ngFor=\"let option of optionsAlways$ | async; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggle.length\"\n class=\"actionToggle\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <button\n *ngFor=\"let option of optionsToggle\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class.disabled]=\"!option.isEnabled\"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </div>\n</div>\n", styles: [".actionbar{display:flex;align-items:center;gap:10px}.actionToggle>button{color:var(--textLight)}button{min-width:unset}.light{color:#fff;background:transparent}.disabled{pointer-events:all}.light a{color:#fff}.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.more{color:var(--primary);background-color:transparent}.actionbar-background-dark .mat-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-dark .mat-button:disabled{color:rgba(var(--palette-foreground-text-dark),.75)}.actionbar-background-primary .mdc-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-primary .mat-mdc-unelevated-button{background-color:#fff;color:var(--primary)}.actionbar-background-primary .mat-mdc-unelevated-button:disabled{color:#00000080;background-color:#eee}.actionbar-round button{width:45px;height:45px;justify-content:center}.actionbar-round button{border-radius:50%;box-shadow:0 0 5px #0000004d}.actionbar-round.actionbar-background-primary .mat-button{background-color:#fff;color:var(--primary)}.actionbar-round.actionbar-all-flat button{background:#fff;color:var(--primary)!important}.actionbar-round.actionbar-all-flat button:disabled{color:var(--textLight)!important}.actionbar-round .more,.actionbar-round .actionAlways{background:#fff;color:var(--primary);display:flex;width:45px;height:45px;line-height:45px;text-align:center;align-items:center}.actionbar-round .more .edu-icons,.actionbar-round .more .material-icons,.actionbar-round .actionAlways .edu-icons,.actionbar-round .actionAlways .material-icons{position:relative;font-size:24px}.actionbar-round .more span,.actionbar-round .actionAlways span{display:none}.actionbar-round .action-always .edu-icons,.actionbar-round .action-always .material-icons{right:4px!important}@media screen and (max-width: calc(var(--mobileWidth) + var(--mobileStage) * 4)){.action-always{padding:0 1rem}.action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: OptionTooltipPipe, name: "optionTooltip" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
|
|
865
913
|
}
|
|
866
914
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ActionbarComponent, decorators: [{
|
|
867
915
|
type: Component,
|
|
868
|
-
args: [{ selector: 'es-actionbar', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <ng-container *ngFor=\"let option of optionsAlways; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip }}\"\n [attr.aria-label]=\"option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip }}\"\n [attr.aria-label]=\"option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggle.length\"\n class=\"actionToggle\"\n [class.actionToggleDivider]=\"optionsAlways.length\"\n >\n <button\n *ngFor=\"let option of optionsToggle\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.name | translate\"\n (click)=\"click(option)\"\n [class.disabled]=\"!option.isEnabled\"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </div>\n</div>\n", styles: [".actionbar{display:flex;align-items:center;gap:10px}.actionToggle>button{color:var(--textLight)}button{min-width:unset}.light{color:#fff;background:transparent}.disabled{pointer-events:all}.light a{color:#fff}.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.more{color:var(--primary);background-color:transparent}.actionbar-background-dark .mat-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-dark .mat-button:disabled{color:rgba(var(--palette-foreground-text-dark),.75)}.actionbar-background-primary .mdc-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-primary .mat-mdc-unelevated-button{background-color:#fff;color:var(--primary)}.actionbar-background-primary .mat-mdc-unelevated-button:disabled{color:#00000080;background-color:#eee}.actionbar-round button{width:45px;height:45px;justify-content:center}.actionbar-round button{border-radius:50%;box-shadow:0 0 5px #0000004d}.actionbar-round.actionbar-background-primary .mat-button{background-color:#fff;color:var(--primary)}.actionbar-round.actionbar-all-flat button{background:#fff;color:var(--primary)!important}.actionbar-round.actionbar-all-flat button:disabled{color:var(--textLight)!important}.actionbar-round .more,.actionbar-round .actionAlways{background:#fff;color:var(--primary);display:flex;width:45px;height:45px;line-height:45px;text-align:center;align-items:center}.actionbar-round .more .edu-icons,.actionbar-round .more .material-icons,.actionbar-round .actionAlways .edu-icons,.actionbar-round .actionAlways .material-icons{position:relative;font-size:24px}.actionbar-round .more span,.actionbar-round .actionAlways span{display:none}.actionbar-round .action-always .edu-icons,.actionbar-round .action-always .material-icons{right:4px!important}@media screen and (max-width: calc(var(--mobileWidth) + var(--mobileStage) * 4)){.action-always{padding:0 1rem}.action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"] }]
|
|
916
|
+
args: [{ selector: 'es-actionbar', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu$ | async\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <ng-container *ngFor=\"let option of optionsAlways$ | async; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggle.length\"\n class=\"actionToggle\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <button\n *ngFor=\"let option of optionsToggle\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class.disabled]=\"!option.isEnabled\"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </div>\n</div>\n", styles: [".actionbar{display:flex;align-items:center;gap:10px}.actionToggle>button{color:var(--textLight)}button{min-width:unset}.light{color:#fff;background:transparent}.disabled{pointer-events:all}.light a{color:#fff}.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.more{color:var(--primary);background-color:transparent}.actionbar-background-dark .mat-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-dark .mat-button:disabled{color:rgba(var(--palette-foreground-text-dark),.75)}.actionbar-background-primary .mdc-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-primary .mat-mdc-unelevated-button{background-color:#fff;color:var(--primary)}.actionbar-background-primary .mat-mdc-unelevated-button:disabled{color:#00000080;background-color:#eee}.actionbar-round button{width:45px;height:45px;justify-content:center}.actionbar-round button{border-radius:50%;box-shadow:0 0 5px #0000004d}.actionbar-round.actionbar-background-primary .mat-button{background-color:#fff;color:var(--primary)}.actionbar-round.actionbar-all-flat button{background:#fff;color:var(--primary)!important}.actionbar-round.actionbar-all-flat button:disabled{color:var(--textLight)!important}.actionbar-round .more,.actionbar-round .actionAlways{background:#fff;color:var(--primary);display:flex;width:45px;height:45px;line-height:45px;text-align:center;align-items:center}.actionbar-round .more .edu-icons,.actionbar-round .more .material-icons,.actionbar-round .actionAlways .edu-icons,.actionbar-round .actionAlways .material-icons{position:relative;font-size:24px}.actionbar-round .more span,.actionbar-round .actionAlways span{display:none}.actionbar-round .action-always .edu-icons,.actionbar-round .action-always .material-icons{right:4px!important}@media screen and (max-width: calc(var(--mobileWidth) + var(--mobileStage) * 4)){.action-always{padding:0 1rem}.action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"] }]
|
|
869
917
|
}], ctorParameters: () => [{ type: UIService }, { type: i1.TranslateService }], propDecorators: { numberOfAlwaysVisibleOptions: [{
|
|
870
918
|
type: Input
|
|
871
919
|
}], numberOfAlwaysVisibleOptionsMobile: [{
|
|
@@ -882,8 +930,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
882
930
|
type: Input
|
|
883
931
|
}], showDisabled: [{
|
|
884
932
|
type: Input
|
|
933
|
+
}], tooltipPosition: [{
|
|
934
|
+
type: Input
|
|
885
935
|
}], options: [{
|
|
886
936
|
type: Input
|
|
937
|
+
}], mobileBreakpoint: [{
|
|
938
|
+
type: Input
|
|
887
939
|
}] } });
|
|
888
940
|
|
|
889
941
|
/**
|
|
@@ -1412,7 +1464,7 @@ class NodeHelperService {
|
|
|
1412
1464
|
if (icon == 'none' && !useNoneAsFallback)
|
|
1413
1465
|
return null;
|
|
1414
1466
|
const result = this.apiHelpersService.getServerUrl() + '/../ccimages/licenses/' + icon + '.svg';
|
|
1415
|
-
return
|
|
1467
|
+
return result;
|
|
1416
1468
|
}
|
|
1417
1469
|
/**
|
|
1418
1470
|
* Return a translated name of a license name for a node
|
|
@@ -1509,6 +1561,9 @@ class NodeHelperService {
|
|
|
1509
1561
|
target.properties = source.properties;
|
|
1510
1562
|
target.name = source.name;
|
|
1511
1563
|
target.title = source.title;
|
|
1564
|
+
target.authorityName = source.authorityName;
|
|
1565
|
+
target.profile = source.profile;
|
|
1566
|
+
target.status = source.status;
|
|
1512
1567
|
}
|
|
1513
1568
|
isNodeCollection(node) {
|
|
1514
1569
|
return node.aspects?.includes(RestConstants.CCM_ASPECT_COLLECTION) || !!node.collection;
|
|
@@ -1720,10 +1775,11 @@ class FormatSizePipe {
|
|
|
1720
1775
|
value /= 1024;
|
|
1721
1776
|
i++;
|
|
1722
1777
|
}
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1778
|
+
let options = {
|
|
1779
|
+
maximumFractionDigits: i > 1 ? 1 : 0,
|
|
1780
|
+
};
|
|
1781
|
+
let numberFormat = new Intl.NumberFormat([], options);
|
|
1782
|
+
return numberFormat.format(value) + ' ' + names[i];
|
|
1727
1783
|
}
|
|
1728
1784
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: FormatSizePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
1729
1785
|
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.2", ngImport: i0, type: FormatSizePipe, name: "formatSize" }); }
|
|
@@ -2127,6 +2183,12 @@ class RestHelper {
|
|
|
2127
2183
|
|
|
2128
2184
|
class NodeTitlePipe {
|
|
2129
2185
|
transform(node, args = null) {
|
|
2186
|
+
if (!node.name) {
|
|
2187
|
+
if (node === 'HOME') {
|
|
2188
|
+
return this.translate.instant('WORKSPACE.' + node);
|
|
2189
|
+
}
|
|
2190
|
+
return this.translate.instant('WORKSPACE.' + node);
|
|
2191
|
+
}
|
|
2130
2192
|
return RestHelper.getTitle(node);
|
|
2131
2193
|
}
|
|
2132
2194
|
constructor(translate) {
|
|
@@ -3742,11 +3804,11 @@ class ListTextComponent extends ListWidget {
|
|
|
3742
3804
|
}
|
|
3743
3805
|
}
|
|
3744
3806
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ListTextComponent, deps: [{ token: NodeHelperService }, { token: i2.MdsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3745
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ListTextComponent, selector: "es-list-text", usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource: { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate: { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{\n 'PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]\n | translate: { fallback: '' }\n }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()).title || $any(getNode()).name }}\n </ng-container>\n <ng-container *ngIf=\"!['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]?.[0]\n | formatDate: { async: true, time: true, relative: true }\n | async\n }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}span{display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: CheckTextOverflowDirective, selector: "[esCheckTextOverflow]", inputs: ["esCheckTextOverflow"], exportAs: ["esCheckTextOverflow"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ListNodeWorkflowComponent, selector: "es-list-node-workflow" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: FormatDatePipe, name: "formatDate" }, { kind: "pipe", type: FormatSizePipe, name: "formatSize" }, { kind: "pipe", type: NodeImageSizePipe, name: "NodeImageSize" }, { kind: "pipe", type: NodePersonNamePipe, name: "nodePersonName" }, { kind: "pipe", type: VCardNamePipe, name: "vcardName" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: NodeSourcePipe, name: "appNodeSource" }, { kind: "pipe", type: FormatDurationPipe, name: "formatDuration" }] }); }
|
|
3807
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: ListTextComponent, selector: "es-list-text", usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{\n 'PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]\n | translate: { fallback: '' }\n }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()).title || $any(getNode()).name }}\n </ng-container>\n <ng-container *ngIf=\"!['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]?.[0]\n | formatDate: { async: true, time: true, relative: true }\n | async\n }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}span{display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: CheckTextOverflowDirective, selector: "[esCheckTextOverflow]", inputs: ["esCheckTextOverflow"], exportAs: ["esCheckTextOverflow"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ListNodeWorkflowComponent, selector: "es-list-node-workflow" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: FormatDatePipe, name: "formatDate" }, { kind: "pipe", type: FormatSizePipe, name: "formatSize" }, { kind: "pipe", type: NodeImageSizePipe, name: "NodeImageSize" }, { kind: "pipe", type: NodePersonNamePipe, name: "nodePersonName" }, { kind: "pipe", type: VCardNamePipe, name: "vcardName" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: NodeSourcePipe, name: "appNodeSource" }, { kind: "pipe", type: FormatDurationPipe, name: "formatDuration" }] }); }
|
|
3746
3808
|
}
|
|
3747
3809
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: ListTextComponent, decorators: [{
|
|
3748
3810
|
type: Component,
|
|
3749
|
-
args: [{ selector: 'es-list-text', template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource: { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate: { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{\n 'PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]\n | translate: { fallback: '' }\n }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()).title || $any(getNode()).name }}\n </ng-container>\n <ng-container *ngIf=\"!['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]?.[0]\n | formatDate: { async: true, time: true, relative: true }\n | async\n }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}span{display:block}\n"] }]
|
|
3811
|
+
args: [{ selector: 'es-list-text', template: "<label *ngIf=\"item.config?.showLabel\">\n {{ getI18n(item) | translate }}\n</label>\n<ng-container *ngIf=\"item.type === 'ORG' || item.type === 'GROUP'\">\n <ng-container [ngSwitch]=\"item.name\">\n <span *ngSwitchCase=\"'displayName'\" [class.type-danger]=\"isDangerousGroup()\">\n {{ $any(getNode()).profile?.displayName || $any(getNode()).authorityName }}\n </span>\n <span *ngSwitchCase=\"'groupType'\">\n {{ 'PERMISSIONS.GROUP_TYPE.' + $any(getNode()).profile?.groupType | translate }}\n </span>\n <span *ngSwitchDefault>\n {{ $any(getNode())[item.name] }}\n </span>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"item.type === 'USER'\">\n <span *ngIf=\"isUserProfileAttribute(item.name)\">\n {{ $any(getNode()).profile?.[item.name] }}\n </span>\n <span *ngIf=\"item.name === 'status'\">\n {{ 'PERMISSIONS.USER_STATUS.' + $any(getNode()).status.status | translate }}\n </span>\n <span *ngIf=\"!isUserProfileAttribute(item.name) && item.name !== 'status'\">\n {{ $any(getNode())[item.name] }}\n </span>\n</ng-container>\n<ng-container\n [ngSwitch]=\"item.name\"\n *ngIf=\"item.type === 'NODE' || item.type === 'NODE_PROPOSAL' || item.type === 'COLLECTION'\"\n>\n <span *ngSwitchCase=\"'name'\">\n {{ $any(getNode()).name }}\n </span>\n <span\n *ngSwitchCase=\"'mediatype'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'MEDIATYPE.' + $any(getNode()).mediatype | translate }}\n </span>\n <span *ngSwitchCase=\"'size'\" [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\">\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).size | formatSize }}\n </span>\n <span\n *ngSwitchCase=\"'dimensions'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()) | NodeImageSize }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:wf_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <es-list-node-workflow\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"false\"\n ></es-list-node-workflow>\n <!--<span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ 'WORKFLOW.' + getWorkflowStatus().id | translate }}-->\n </span>\n <span\n *ngSwitchCase=\"'cm:creator'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n {{ $any(getNode()).createdBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'cm:modifier'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cm:modifier' | translate }}:</span\n >\n {{ $any(getNode()).modifiedBy | nodePersonName }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:replicationsource'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:replicationsource' | translate }}:</span\n >\n {{ $any(getNode()).properties['ccm:replicationsource'] | appNodeSource : { mode: 'text' } }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:commonlicense_key'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:commonlicense_key' | translate }}:</span\n >\n <ng-container *ngIf=\"$any(getNode()).properties['ccm:commonlicense_key'] as license\">\n {{\n license[0] === 'CUSTOM'\n ? $any(getNode()).properties['cclom:rights_description']\n : ('LICENSE.NAMES.' + $any(getNode()).properties['ccm:commonlicense_key']\n | translate : { fallback: $any(getNode()).properties['ccm:commonlicense_key'] })\n }}\n </ng-container>\n <ng-container *ngIf=\"!$any(getNode()).properties['ccm:commonlicense_key']\">\n {{ 'LICENSE.NAMES.NONE' | translate }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'ccm:educationaltypicalagerange'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:educationaltypicalagerange' | translate }}:</span\n >\n <ng-container\n *ngIf=\"\n $any(getNode()).properties['ccm:educationaltypicalagerange_from'] ||\n $any(getNode()).properties['ccm:educationaltypicalagerange_to']\n \"\n >\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_from'] }} -\n {{ $any(getNode()).properties['ccm:educationaltypicalagerange_to'] }}\n </ng-container>\n </span>\n <span\n *ngSwitchCase=\"'cclom:duration'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.cclom:duration' | translate }}:</span\n >\n {{ $any(getNode()).properties['cclom:duration']?.[0] | formatDuration }}\n </span>\n <span\n *ngSwitchCase=\"'ccm:collection_proposal_status'\"\n [matTooltip]=\"provideLabel ? (getI18n(item) | translate) : null\"\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\"\n >{{ 'NODE.ccm:collection_proposal_status' | translate }}:</span\n >\n <!-- use node instead of getNode() to access the raw proposal data! -->\n {{\n 'PROPOSAL_STATUS.' + $any(node).properties['ccm:collection_proposal_status']?.[0]\n | translate: { fallback: '' }\n }}\n </span>\n <span\n *ngSwitchDefault\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"\n provideLabel ? (getI18n(item) | translate) : text.hasTextOverflow() ? content.innerText : null\n \"\n #content\n >\n <span *ngIf=\"provideLabel\" class=\"cdk-visually-hidden\">{{ getI18n(item) | translate }}:</span>\n <ng-container *ngIf=\"['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n {{ $any(getNode()).title || $any(getNode()).name }}\n </ng-container>\n <ng-container *ngIf=\"!['title', 'cm:title', 'cclom:title'].includes(item.name)\">\n <ng-container\n *ngIf=\"DATE_FIELDS.indexOf(item.name) === -1 && VCARD_FIELDS.indexOf(item.name) === -1\"\n >\n {{ displayName$ | async }}\n </ng-container>\n <ng-container *ngIf=\"DATE_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]?.[0]\n | formatDate: { async: true, time: true, relative: true }\n | async\n }}\n </ng-container>\n <ng-container *ngIf=\"VCARD_FIELDS.includes(item.name)\">\n {{\n $any(getNode()).properties[item.name]\n ? ($any(getNode()).properties[item.name][0] | vcardName)\n : ''\n }}\n </ng-container>\n </ng-container>\n </span>\n</ng-container>\n", styles: [".type-danger{color:var(--warning)}span{display:block}\n"] }]
|
|
3750
3812
|
}], ctorParameters: () => [{ type: NodeHelperService }, { type: i2.MdsService }, { type: i0.ChangeDetectorRef }] });
|
|
3751
3813
|
|
|
3752
3814
|
var ListWidgetType;
|
|
@@ -3826,6 +3888,11 @@ class OptionItem {
|
|
|
3826
3888
|
* @type {boolean}
|
|
3827
3889
|
*/
|
|
3828
3890
|
this.onlyMobile = false;
|
|
3891
|
+
/**
|
|
3892
|
+
* custom aria-label
|
|
3893
|
+
* @type {string}
|
|
3894
|
+
*/
|
|
3895
|
+
this.ariaLabel = '';
|
|
3829
3896
|
/**
|
|
3830
3897
|
* If true, only displayed on a desktop device (based on the navigator agent)
|
|
3831
3898
|
* @type {boolean}
|
|
@@ -4100,11 +4167,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4100
4167
|
|
|
4101
4168
|
class DragPreviewComponent {
|
|
4102
4169
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DragPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: DragPreviewComponent, selector: "es-drag-preview", inputs: { node: "node", selected: "selected", item: "item" }, ngImport: i0, template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListTextComponent, selector: "es-list-text" }, { kind: "directive", type: i3$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: NodeIconPipe, name: "esNodeIcon" }] }); }
|
|
4170
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: DragPreviewComponent, selector: "es-drag-preview", inputs: { node: "node", selected: "selected", item: "item" }, ngImport: i0, template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon | async\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListTextComponent, selector: "es-list-text" }, { kind: "directive", type: i3$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeIconPipe, name: "esNodeIcon" }] }); }
|
|
4104
4171
|
}
|
|
4105
4172
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: DragPreviewComponent, decorators: [{
|
|
4106
4173
|
type: Component,
|
|
4107
|
-
args: [{ selector: 'es-drag-preview', template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
4174
|
+
args: [{ selector: 'es-drag-preview', template: "<div class=\"drag-preview\" [matBadge]=\"selected.length > 1 ? selected.length : null\">\n <div class=\"drag-preview-icon\">\n <img *ngIf=\"node.iconURL\" [src]=\"node | esNodeIcon | async\" />\n </div>\n <es-list-text class=\"drag-preview-text\" [node]=\"node\" [item]=\"item\"></es-list-text>\n</div>\n", styles: [".drag-preview{display:flex;align-items:center;gap:16px;height:48px;padding:0 12px;background-color:var(--palette-primary-50)}.drag-preview-icon{width:30px;height:30px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.drag-preview-icon>img{width:18px;height:auto}.drag-preview-text{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
4108
4175
|
}], propDecorators: { node: [{
|
|
4109
4176
|
type: Input
|
|
4110
4177
|
}], selected: [{
|
|
@@ -4899,13 +4966,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4899
4966
|
class OptionButtonComponent {
|
|
4900
4967
|
constructor() {
|
|
4901
4968
|
this.isShown = false;
|
|
4969
|
+
this.isEnabled = false;
|
|
4902
4970
|
}
|
|
4903
4971
|
async ngOnChanges(changes) {
|
|
4972
|
+
this.isEnabled = await this.optionIsValid(this.option, this.node);
|
|
4904
4973
|
this.isShown = await this.optionIsShown(this.option, this.node);
|
|
4905
4974
|
}
|
|
4906
|
-
optionIsValid(optionItem, node) {
|
|
4975
|
+
async optionIsValid(optionItem, node) {
|
|
4907
4976
|
if (optionItem.enabledCallback) {
|
|
4908
|
-
return optionItem.enabledCallback(node);
|
|
4977
|
+
return await optionItem.enabledCallback(node);
|
|
4909
4978
|
}
|
|
4910
4979
|
return optionItem.isEnabled;
|
|
4911
4980
|
}
|
|
@@ -4927,7 +4996,7 @@ class OptionButtonComponent {
|
|
|
4927
4996
|
color="primary"
|
|
4928
4997
|
matTooltip="{{ option.name | translate }}"
|
|
4929
4998
|
[class.display-none]="!isShown"
|
|
4930
|
-
[disabled]="!
|
|
4999
|
+
[disabled]="!isEnabled"
|
|
4931
5000
|
(click)="click(option, node)"
|
|
4932
5001
|
attr.data-test="option-button-{{ option.name }}"
|
|
4933
5002
|
>
|
|
@@ -4945,7 +5014,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4945
5014
|
color="primary"
|
|
4946
5015
|
matTooltip="{{ option.name | translate }}"
|
|
4947
5016
|
[class.display-none]="!isShown"
|
|
4948
|
-
[disabled]="!
|
|
5017
|
+
[disabled]="!isEnabled"
|
|
4949
5018
|
(click)="click(option, node)"
|
|
4950
5019
|
attr.data-test="option-button-{{ option.name }}"
|
|
4951
5020
|
>
|
|
@@ -5033,7 +5102,7 @@ class NodeEntriesCardComponent {
|
|
|
5033
5102
|
return [];
|
|
5034
5103
|
// return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
|
|
5035
5104
|
}
|
|
5036
|
-
openContextmenu(event) {
|
|
5105
|
+
openContextmenu(event, node) {
|
|
5037
5106
|
event.stopPropagation();
|
|
5038
5107
|
event.preventDefault();
|
|
5039
5108
|
if (!this.dropdown) {
|
|
@@ -5053,6 +5122,8 @@ class NodeEntriesCardComponent {
|
|
|
5053
5122
|
}
|
|
5054
5123
|
// Wait for the menu to reflect changed options.
|
|
5055
5124
|
setTimeout(() => {
|
|
5125
|
+
this.dropdown.callbackObject = node;
|
|
5126
|
+
this.dropdown.ngOnChanges();
|
|
5056
5127
|
if (this.dropdown.canShowDropdown()) {
|
|
5057
5128
|
this.menuTrigger.openMenu();
|
|
5058
5129
|
}
|
|
@@ -5083,11 +5154,11 @@ class NodeEntriesCardComponent {
|
|
|
5083
5154
|
}, this.node);
|
|
5084
5155
|
}
|
|
5085
5156
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardComponent, deps: [{ token: NodeEntriesService }, { token: NodeHelperService }, { token: i0.ApplicationRef }, { token: i2.ConfigService }, { token: i2.AuthenticationService }, { token: NodeEntriesTemplatesService }, { token: NodeEntriesGlobalService }, { token: Toast, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5086
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate: { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate: { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: ListItemLabelPipe, name: "esListItemLabel" }] }); }
|
|
5157
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: ListItemLabelPipe, name: "esListItemLabel" }] }); }
|
|
5087
5158
|
}
|
|
5088
5159
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
|
|
5089
5160
|
type: Component,
|
|
5090
|
-
args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate: { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate: { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
|
|
5161
|
+
args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
|
|
5091
5162
|
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeHelperService }, { type: i0.ApplicationRef }, { type: i2.ConfigService }, { type: i2.AuthenticationService }, { type: NodeEntriesTemplatesService }, { type: NodeEntriesGlobalService }, { type: Toast, decorators: [{
|
|
5092
5163
|
type: Optional
|
|
5093
5164
|
}] }], propDecorators: { dropdown: [{
|
|
@@ -5122,11 +5193,11 @@ class NodeEntriesCardSmallComponent {
|
|
|
5122
5193
|
event.stopPropagation();
|
|
5123
5194
|
}
|
|
5124
5195
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardSmallComponent, deps: [{ token: NodeEntriesService }, { token: NodeHelperService }, { token: NodeEntriesTemplatesService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5125
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }] }); }
|
|
5196
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }] }); }
|
|
5126
5197
|
}
|
|
5127
5198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardSmallComponent, decorators: [{
|
|
5128
5199
|
type: Component,
|
|
5129
|
-
args: [{ selector: 'es-node-entries-card-small', template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"] }]
|
|
5200
|
+
args: [{ selector: 'es-node-entries-card-small', template: "<div\n [class]=\"\n 'grid-card' +\n (nodeHelper.isNodeCollection(node)\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n (entriesService.singleClickHint === 'dynamic' ? ' dynamic-single-click' : '')\n \"\n [style.background-color]=\"nodeHelper.isNodeCollection(node) ? node.collection.color : null\"\n (contextmenu)=\"openContextmenu($event)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <ng-container *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <ng-container *ngTemplateOutlet=\"image\"></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </ng-container>\n</div>\n<ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Preview,\n })\n \"\n >\n <div *ngIf=\"nodeHelper.isNodeCollection(node) && node.collection.pinned\" class=\"collection-pin\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <es-preview-image\n *ngIf=\"!(nodeHelper.isNodeCollection(node) && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div\n *ngIf=\"nodeHelper.isNodeCollection(node) && node.preview.isIcon\"\n class=\"card-collection-image\"\n >\n <i esIcon=\"layers\"></i>\n </div>\n </div>\n</ng-template>\n<ng-template #meta>\n <div\n class=\"card-meta\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n >\n <div\n *ngFor=\"let displayPart of entriesService.columns; let first = first\"\n class=\"card-meta-row\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n <ng-container\n *ngTemplateOutlet=\"templatesService.actionArea; context: { element: node }\"\n ></ng-container>\n</ng-template>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 15px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:var(--focusWidth) solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:100px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:25px;font-size:25px;border-radius:50%}.grid-card .card-meta{padding:8px 15px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.collection-pin{background:#ffffff80;border-radius:50px;position:absolute;z-index:1;right:10px;top:10px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.collection-pin>i{font-size:12px}.grid-card .card-meta-row ::ng-deep es-node-url a.cdk-keyboard-focused{outline-color:var(--palette-primary-400)}.grid-card{cursor:pointer}.grid-card.grid-card-collection{background-color:rgb(var(--palette-primary-200))}.grid-card .card-meta{background-color:#fffc;padding-bottom:8px}.grid-card .card-meta .card-meta-row:nth-child(1){grid-column:1/3}.grid-card .card-meta .card-meta-row:nth-child(2){justify-self:flex-start}.grid-card .card-meta .card-meta-row:nth-child(2),.grid-card .card-meta .card-meta-row:nth-child(3){grid-row:2;font-size:var(--fontSizeXSmall)}\n"] }]
|
|
5130
5201
|
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeHelperService }, { type: NodeEntriesTemplatesService }], propDecorators: { node: [{
|
|
5131
5202
|
type: Input
|
|
5132
5203
|
}] } });
|
|
@@ -5324,14 +5395,17 @@ class NodeEntriesCardGridComponent {
|
|
|
5324
5395
|
.concat(new ListItemSort('NODE', 'score'), new ListItemSort('NODE', RestConstants.CCM_PROP_COLLECTION_ORDERED_POSITION), new ListItemSort('NODE', RestConstants.CM_PROP_TITLE), new ListItemSort('NODE', RestConstants.CM_NAME), new ListItemSort('NODE', RestConstants.CM_PROP_C_CREATED), new ListItemSort('NODE', RestConstants.CM_MODIFIED_DATE), new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONMODIFIED), new ListItemSort('NODE', RestConstants.CCM_PROP_REPLICATIONSOURCETIMESTAMP))
|
|
5325
5396
|
.some((c2) => c.type === c2.type && c2.name === c.name);
|
|
5326
5397
|
if (!result && !this.entriesService.configureColumns) {
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5398
|
+
return this.entriesService.sort?.columns;
|
|
5399
|
+
/*
|
|
5400
|
+
const warning =
|
|
5401
|
+
'Sort field ' +
|
|
5402
|
+
c.name +
|
|
5403
|
+
' was specified but is not present as a column. ' +
|
|
5404
|
+
'It will be ignored. Please also configure this field in the <lists> section';
|
|
5405
|
+
if (!displayedWarnings.includes(warning)) {
|
|
5406
|
+
console.warn(warning);
|
|
5407
|
+
displayedWarnings.push(warning);
|
|
5408
|
+
}*/
|
|
5335
5409
|
}
|
|
5336
5410
|
return result;
|
|
5337
5411
|
});
|
|
@@ -5398,18 +5472,18 @@ class NodeEntriesCardGridComponent {
|
|
|
5398
5472
|
behavior: 'smooth',
|
|
5399
5473
|
});
|
|
5400
5474
|
}
|
|
5401
|
-
isCustomTemplate() {
|
|
5402
|
-
return this.entriesService.dataSource instanceof CustomTemplatesDataSource;
|
|
5475
|
+
isCustomTemplate(node) {
|
|
5476
|
+
return this.entriesService.dataSource instanceof CustomTemplatesDataSource || (node.elementRef);
|
|
5403
5477
|
}
|
|
5404
5478
|
isBlocked(node) {
|
|
5405
5479
|
return node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true';
|
|
5406
5480
|
}
|
|
5407
5481
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardGridComponent, deps: [{ token: NodeEntriesService }, { token: NodeEntriesGlobalService }, { token: NodeEntriesTemplatesService }, { token: UIService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5408
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: { displayType: "displayType" }, host: { properties: { "style.--scroll-gradient-color": "this.scrollGradientColor" } }, viewQueries: [{ propertyName: "columnChooserTrigger", first: true, predicate: ["columnChooserTrigger"], descendants: true }, { propertyName: "gridTop", first: true, predicate: ["gridTop"], descendants: true, static: true }, { propertyName: "sortPanel", first: true, predicate: SortSelectPanelComponent, descendants: true }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "dropListsQuery", predicate: CdkDropList, descendants: true }, { propertyName: "itemRefs", predicate: ["item"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate()\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}:host{--scroll-gradient-color: white}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 25px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:20px;grid-row-gap:20px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid .card-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,#fff0 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: ["esBorderBoxObserver"], exportAs: ["borderBoxObserver"] }, { kind: "component", type: DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollThrottle", "scrollWindow"], outputs: ["scrolled"] }, { kind: "component", type: SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ColumnChooserComponent, selector: "es-column-chooser", inputs: ["origin", "columnChooserVisible", "columns"], outputs: ["columnChooserVisibleChange", "columnsChange"] }, { kind: "component", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: ["dropdown", "node"] }, { kind: "component", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: ["node"] }, { kind: "component", type: SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: ["active", "direction", "columns", "customSortingInProgress"], outputs: ["sortChange", "customSortingInProgressChange"] }, { kind: "directive", type: NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5482
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: { displayType: "displayType" }, host: { properties: { "style.--scroll-gradient-color": "this.scrollGradientColor" } }, viewQueries: [{ propertyName: "columnChooserTrigger", first: true, predicate: ["columnChooserTrigger"], descendants: true }, { propertyName: "gridTop", first: true, predicate: ["gridTop"], descendants: true, static: true }, { propertyName: "sortPanel", first: true, predicate: SortSelectPanelComponent, descendants: true }, { propertyName: "gridRef", first: true, predicate: ["grid"], descendants: true }, { propertyName: "dropListsQuery", predicate: CdkDropList, descendants: true }, { propertyName: "itemRefs", predicate: ["item"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate(node)\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate(node)\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}:host{--scroll-gradient-color: white}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 25px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:20px;grid-row-gap:20px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid .card-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,#fff0 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: ["esBorderBoxObserver"], exportAs: ["borderBoxObserver"] }, { kind: "component", type: DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollThrottle", "scrollWindow"], outputs: ["scrolled"] }, { kind: "component", type: SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3$3.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ColumnChooserComponent, selector: "es-column-chooser", inputs: ["origin", "columnChooserVisible", "columns"], outputs: ["columnChooserVisibleChange", "columnsChange"] }, { kind: "component", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: ["dropdown", "node"] }, { kind: "component", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: ["node"] }, { kind: "component", type: SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: ["active", "direction", "columns", "customSortingInProgress"], outputs: ["sortChange", "customSortingInProgressChange"] }, { kind: "directive", type: NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5409
5483
|
}
|
|
5410
5484
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesCardGridComponent, decorators: [{
|
|
5411
5485
|
type: Component,
|
|
5412
|
-
args: [{ selector: 'es-node-entries-card-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate()\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}:host{--scroll-gradient-color: white}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 25px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:20px;grid-row-gap:20px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid .card-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,#fff0 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"] }]
|
|
5486
|
+
args: [{ selector: 'es-node-entries-card-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #gridTop>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible$.next(!columnChooserVisible$.value)\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n <es-sort-select-panel\n *ngIf=\"entriesService.sort?.allowed\"\n class=\"order-panel\"\n [active]=\"entriesService.sort.active\"\n [direction]=\"entriesService.sort.direction\"\n [columns]=\"getSortColumns()\"\n (sortChange)=\"onSortChange($event)\"\n [(customSortingInProgress)]=\"entriesService.sort.customSortingInProgress\"\n (customSortingInProgressChange)=\"onCustomSortingInProgressChange()\"\n ></es-sort-select-panel>\n</ng-template>\n<es-column-chooser\n *ngIf=\"entriesService.configureColumns\"\n [(columns)]=\"entriesService.columns\"\n [columnChooserVisible]=\"columnChooserVisible$ | async\"\n [origin]=\"columnChooserTrigger\"\n (columnChooserVisibleChange)=\"columnChooserVisible$.next($event)\"\n></es-column-chooser>\n<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n\n<!-- Do not render the list element (`role=\"list\"` or `li`) when there are no list items. -->\n<ng-container\n *ngIf=\"(nodes$ | async)?.length > 0 || (entriesService.globalOptionsSubject | async)?.length > 0\"\n>\n <!-- FIXME: Ideally, we would use native `ul` and `li` elements, but these have a strict model,\n that only allows `li` elements as direct children of `ul` elements. So we would need to use the\n native elements at all places without any elements between `ul` and `li`. -->\n <div\n *ngIf=\"entriesService.sort?.customSortingInProgress\"\n role=\"list\"\n class=\"card-grid card-grid-reorder\"\n cdkDropListGroup\n >\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-order-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n cdkDropList\n [cdkDropListConnectedTo]=\"dropLists\"\n [cdkDropListData]=\"i\"\n >\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragData]=\"i\"\n [cdkDragStartDelay]=\"getDragStartDelay()\"\n cdkDragPreviewClass=\"es-card-grid-rearrange-drag-preview\"\n (cdkDragEntered)=\"onRearrangeDragEntered($event)\"\n (cdkDragStarted)=\"onRearrangeDragStarted()\"\n (cdkDragEnded)=\"onRearrangeDragEnded()\"\n ></es-node-entries-card-small>\n </div>\n </ng-container>\n </div>\n <div class=\"card-grid-wrapper\" *ngIf=\"!entriesService.sort?.customSortingInProgress\">\n <ng-container *ngTemplateOutlet=\"scrollHelper\"></ng-container>\n <div\n role=\"list\"\n class=\"card-grid card-grid-layout-{{ layout }}\"\n #grid\n (esBorderBoxObserver)=\"onGridSizeChanges()\"\n esInfiniteScroll\n (scroll)=\"updateScrollState()\"\n (scrolled)=\"!visibleItemsLimited && loadData('scroll')\"\n >\n <es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"displayType\"\n >\n </es-node-entries-global-options>\n <ng-container *ngIf=\"nodes$ | async as nodes\">\n <div\n class=\"card-grid-drag-wrapper\"\n *ngFor=\"let node of nodes; let i = index\"\n role=\"none\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDropNodes\"\n (nodeDropped)=\"onNodesDropped($event)\"\n #dropTarget=\"esNodesDropTarget\"\n >\n <ng-container *ngIf=\"isCustomTemplate(node)\">\n <ng-container *ngTemplateOutlet=\"$any(node)\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!isCustomTemplate(node)\">\n <es-node-entries-card\n *ngIf=\"displayType === NodeEntriesDisplayType.Grid\"\n #item\n [node]=\"node\"\n [dropdown]=\"dropdown\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"getDragData(node)\"\n esNodesDrag\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [class.card-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"\n isDragging && entriesService.selection.isSelected(node)\n \"\n >\n <ng-container *ngIf=\"entriesService.selection.selected.length > 1\">\n <es-node-entries-card\n *cdkDragPreview\n [node]=\"node\"\n [matBadge]=\"\n entriesService.selection.selected.length > 1\n ? entriesService.selection.selected.length\n : null\n \"\n class=\"card-drag-preview\"\n ></es-node-entries-card>\n </ng-container>\n </es-node-entries-card>\n <es-node-entries-card-small\n *ngIf=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n #item\n [node]=\"node\"\n role=\"listitem\"\n cdkDrag\n [cdkDragDisabled]=\"!(getDragEnabled() | async)\"\n [cdkDragData]=\"[node]\"\n esNodesDrag\n >\n </es-node-entries-card-small>\n </ng-container>\n <div\n *ngIf=\"dropTarget.active?.canDrop?.denyExplicit\"\n class=\"card-grid-drop-blocked-container\"\n >\n <i esIcon=\"cancel\"></i>\n </div>\n <div *ngIf=\"dropTarget.active?.canDrop?.accept\" class=\"card-grid-drop-allowed-container\">\n <i\n [esIcon]=\"dropTarget.active.action === 'copy' ? 'add_circle_outline' : 'archive'\"\n ></i>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n !entriesService.dataSource.isLoading &&\n entriesService.dataSource.hasMore() &&\n !visibleItemsLimited &&\n entriesService.paginationStrategy === 'infinite-scroll' &&\n layout !== 'scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container\n *ngIf=\"\n entriesService.dataSource.isLoading === true ||\n entriesService.dataSource.isLoading === 'initial' ||\n (entriesService.dataSource.isLoading === 'page' &&\n entriesService.paginationStrategy === 'infinite-scroll')\n \"\n>\n <ng-container *ngTemplateOutlet=\"loading\"></ng-container>\n</ng-container>\n\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #scrollHelper>\n <ng-container *ngIf=\"layout === 'scroll'\">\n <div\n class=\"scroll-helper-left\"\n role=\"presentation\"\n (click)=\"doScroll('left')\"\n *ngIf=\"scroll.left\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('left')\">\n <i esIcon=\"keyboard_arrow_left\" [aria]=\"true\"></i>\n </button>\n </div>\n <div\n class=\"scroll-helper-right\"\n role=\"presentation\"\n (click)=\"doScroll('right')\"\n *ngIf=\"scroll.right\"\n >\n <button mat-icon-button color=\"primary\" (click)=\"$event.stopPropagation(); doScroll('right')\">\n <i esIcon=\"keyboard_arrow_right\" [aria]=\"true\"></i>\n </button>\n </div>\n </ng-container>\n</ng-template>\n", styles: ["@keyframes OrderAnimationCards{0%{transform:rotate(-.25deg)}50%{transform:rotate(.25deg)}to{transform:rotate(-.25deg)}}:host{--scroll-gradient-color: white}.order-panel{margin-left:auto}.load-more{display:flex;justify-content:center}.card-grid-wrapper{position:relative;z-index:0}.card-grid-wrapper .scroll-helper-left,.card-grid-wrapper .scroll-helper-right{position:absolute;width:15%;min-width:60px;max-width:calc(var(--cardWidth) * .4);display:flex;align-items:center;height:calc(100% - 10px);z-index:5;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.card-grid-wrapper .scroll-helper-left>button,.card-grid-wrapper .scroll-helper-right>button{background-color:#fff;color:var(--primary);box-shadow:0 0 25px #00000040}.card-grid-wrapper .scroll-helper-left{left:-1.5em;justify-content:flex-start;background:linear-gradient(to left,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-left>button{margin-left:calc(1.5em - 8px)}.card-grid-wrapper .scroll-helper-right{right:-1.5em;justify-content:flex-end;background:linear-gradient(to right,transparent 0,var(--scroll-gradient-color) calc(100% - 1.5em))}.card-grid-wrapper .scroll-helper-right>button{margin-right:calc(1.5em - 8px)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--cardWidth),1fr));grid-column-gap:20px;grid-row-gap:20px;grid-template-rows:auto;padding-block-start:1em;padding-block-end:1em}.card-grid.card-grid-layout-scroll{position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;grid-auto-flow:column;grid-template-columns:repeat(auto-fit,var(--cardWidth));grid-auto-columns:minmax(var(--cardWidth),1fr);padding:1.5em;margin:-.5em -1.5em 0}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{margin:0 1.5em}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.1);border-radius:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar{height:10px;background-color:transparent}.card-grid.card-grid-layout-scroll::-webkit-scrollbar-thumb{max-width:20px;border-radius:10px;background-color:var(--primary)}.card-grid.card-grid-layout-scroll>.card-grid-drag-wrapper{scroll-snap-align:center;scroll-snap-stop:always}.card-grid .card-import-blocked ::ng-deep .card-meta{opacity:.75;text-decoration:line-through}.card-grid>.card-grid-drag-wrapper{position:relative}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{position:absolute;z-index:1;inset:0;display:flex;justify-content:center;align-items:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i,.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{background:radial-gradient(circle,#fff 30%,#fff0 70%);width:200px;height:200px;font-size:80px;display:flex;align-items:center;justify-content:center}.card-grid>.card-grid-drag-wrapper .card-grid-drop-allowed-container>i{color:var(--colorStatusPositive)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.card-grid>.card-grid-drag-wrapper .card-grid-drop-blocked-container>i{color:var(--colorStatusNegative)}.card-grid>.card-grid-drag-wrapper .selected-when-dragging{opacity:.5}.card-grid>.card-grid-drag-wrapper.cdk-drop-list-dragging>*:first-child{display:none}.card-grid.card-grid-reorder>.card-grid-order-wrapper{animation-iteration-count:infinite;animation-duration:.5s;animation-name:OrderAnimationCards}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(2n){animation-delay:0s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(odd){animation-delay:-.25s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(3n){animation-delay:-.125s}.card-grid.card-grid-reorder>.card-grid-order-wrapper:nth-of-type(5n){animation-delay:-.0625s}.card-grid.card-grid-reorder>.card-grid-order-wrapper .cdk-drag-placeholder{display:none}.card-drag-preview{width:250px}::ng-deep .es-card-grid-rearrange-drag-preview.cdk-drag-animating{transition:none}\n"] }]
|
|
5413
5487
|
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeEntriesGlobalService }, { type: NodeEntriesTemplatesService }, { type: UIService }, { type: i0.NgZone }], propDecorators: { columnChooserTrigger: [{
|
|
5414
5488
|
type: ViewChild,
|
|
5415
5489
|
args: ['columnChooserTrigger']
|
|
@@ -5449,13 +5523,23 @@ const DEFAULT_SUPPORTED_LANGUAGES = [
|
|
|
5449
5523
|
'none',
|
|
5450
5524
|
];
|
|
5451
5525
|
class TranslationsService {
|
|
5452
|
-
constructor(config, route, storage, translate, appService) {
|
|
5526
|
+
constructor(config, route, storage, translate, sessionStorage, ref, appService) {
|
|
5453
5527
|
this.config = config;
|
|
5454
5528
|
this.route = route;
|
|
5455
5529
|
this.storage = storage;
|
|
5456
5530
|
this.translate = translate;
|
|
5531
|
+
this.sessionStorage = sessionStorage;
|
|
5532
|
+
this.ref = ref;
|
|
5457
5533
|
this.appService = appService;
|
|
5458
5534
|
this.languageLoaded = new BehaviorSubject(false);
|
|
5535
|
+
this.sessionStorage?.observe('language').subscribe((lang) => {
|
|
5536
|
+
// language has changed, i.e. user has different preference
|
|
5537
|
+
if (this.translate.currentLang && this.translate.currentLang !== lang) {
|
|
5538
|
+
this.initialize().subscribe(() => {
|
|
5539
|
+
this.ref.tick();
|
|
5540
|
+
});
|
|
5541
|
+
}
|
|
5542
|
+
});
|
|
5459
5543
|
}
|
|
5460
5544
|
/**
|
|
5461
5545
|
* Determines and configures the language to use and triggers loading of translations with
|
|
@@ -5598,13 +5682,13 @@ class TranslationsService {
|
|
|
5598
5682
|
getISOLanguage() {
|
|
5599
5683
|
return LANGUAGES[this.language];
|
|
5600
5684
|
}
|
|
5601
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TranslationsService, deps: [{ token: i2.ConfigService }, { token: i2$1.ActivatedRoute }, { token: i2.SessionStorageService }, { token: i1.TranslateService }, { token: AppService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5685
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TranslationsService, deps: [{ token: i2.ConfigService }, { token: i2$1.ActivatedRoute }, { token: i2.SessionStorageService }, { token: i1.TranslateService }, { token: i2.SessionStorageService }, { token: i0.ApplicationRef }, { token: AppService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
5602
5686
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TranslationsService, providedIn: 'root' }); }
|
|
5603
5687
|
}
|
|
5604
5688
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TranslationsService, decorators: [{
|
|
5605
5689
|
type: Injectable,
|
|
5606
5690
|
args: [{ providedIn: 'root' }]
|
|
5607
|
-
}], ctorParameters: () => [{ type: i2.ConfigService }, { type: i2$1.ActivatedRoute }, { type: i2.SessionStorageService }, { type: i1.TranslateService }, { type: AppService, decorators: [{
|
|
5691
|
+
}], ctorParameters: () => [{ type: i2.ConfigService }, { type: i2$1.ActivatedRoute }, { type: i2.SessionStorageService }, { type: i1.TranslateService }, { type: i2.SessionStorageService }, { type: i0.ApplicationRef }, { type: AppService, decorators: [{
|
|
5608
5692
|
type: Optional
|
|
5609
5693
|
}] }] });
|
|
5610
5694
|
|
|
@@ -5685,6 +5769,8 @@ class NodeEntriesTableComponent {
|
|
|
5685
5769
|
}
|
|
5686
5770
|
// Wait for the menu to reflect changed options.
|
|
5687
5771
|
setTimeout(() => {
|
|
5772
|
+
this.dropdown.callbackObject = node;
|
|
5773
|
+
this.dropdown.ngOnChanges();
|
|
5688
5774
|
if (this.dropdown.canShowDropdown()) {
|
|
5689
5775
|
this.menuTrigger.openMenu();
|
|
5690
5776
|
}
|
|
@@ -5839,11 +5925,11 @@ class NodeEntriesTableComponent {
|
|
|
5839
5925
|
return node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true';
|
|
5840
5926
|
}
|
|
5841
5927
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesTableComponent, deps: [{ token: NodeEntriesService }, { token: NodeEntriesGlobalService }, { token: i0.ApplicationRef }, { token: Toast }, { token: TranslationsService }, { token: i0.ChangeDetectorRef }, { token: UIService }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5842
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesTableComponent, selector: "es-node-entries-table", viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "columnChooserTrigger", first: true, predicate: ["columnChooserTrigger"], descendants: true }, { propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true }, { propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n<button\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n></button>\n<es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"NodeEntriesDisplayType.Table\"\n>\n</es-node-entries-global-options>\n<mat-table\n [dataSource]=\"entriesService.dataSource\"\n matSort\n [matSortDisableClear]=\"true\"\n [matSortActive]=\"entriesService.sort?.active\"\n [matSortDirection]=\"entriesService.sort?.direction\"\n esInfiniteScroll\n (scrolled)=\"loadData('scroll')\"\n>\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [ngModel]=\"entriesService.selection.selected.length > 0\"\n [indeterminate]=\"\n entriesService.selection.selected.length > 0 &&\n entriesService.selection.selected.length !== entriesService.dataSource.getData().length\n \"\n (ngModelChange)=\"toggleAll($event)\"\n color=\"primary\"\n aria-label=\"{{ 'LIST_TABLE.TOGGLE_ALL' | translate }}\"\n ></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n aria-label=\"{{ 'SELECT' | translate: { element: (node | nodeTitle) } }}\"\n color=\"primary\"\n ></mat-checkbox>\n </mat-cell>\n </ng-container>\n <div matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef class=\"cell-icon cell-count\">\n ({{ entriesService.selection.selected.length\n }}<ng-container *ngIf=\"entriesService.dataSource?.getTotal() !== undefined\">\n / {{ entriesService.dataSource?.getTotal() }}</ng-container\n >)\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\" class=\"cell-icon\">\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <ng-container *ngTemplateOutlet=\"icon; context: { node: this.node }\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n >\n <ng-container\n *ngTemplateOutlet=\"icon; context: { node: this.node }\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n ></ng-container>\n </div>\n </mat-cell>\n </div>\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible = !columnChooserVisible\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <button\n mat-icon-button\n *ngIf=\"entriesService.options?.[Target.List]?.length\"\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n >\n <i esIcon=\"more_vert\" [aria]=\"true\"></i>\n </button>\n </mat-cell>\n </ng-container>\n <!-- Data Columns -->\n <ng-container\n *ngFor=\"let column of visibleDataColumns$ | async; let first = first\"\n [matColumnDef]=\"column.name\"\n >\n <ng-container>\n <mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [disabled]=\"!(entriesService.sort?.allowed && isSortable(column))\"\n [class.mat-column-primary]=\"first\"\n >{{ column | esListItemLabel | async }}</mat-header-cell\n >\n </ng-container>\n <mat-cell\n *matCellDef=\"let node\"\n #cell\n [class.mat-column-primary]=\"first\"\n attr.data-test=\"table-cell-{{ column.name }}\"\n >\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <es-node-url cdkMonitorSubtreeFocus [node]=\"node\" [mode]=\"first ? 'link' : 'wrapper'\">\n <es-list-base\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n </es-node-url>\n </ng-container>\n <es-list-base\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n <ng-container *ngIf=\"first\">\n <div class=\"childobjects\" *ngIf=\"node.properties?.['virtual:childobjectcount'] > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{\n 'CHILDOBJECT_COUNT'\n | translate: { count: node.properties['virtual:childobjectcount'] * 1 + 1 }\n }}\"\n >\n <span>{{ node.properties['virtual:childobjectcount'] * 1 + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n </div>\n </ng-container>\n </mat-cell>\n </ng-container>\n <mat-header-row mat-header-row *matHeaderRowDef=\"visibleColumnNames$ | async\"></mat-header-row>\n <mat-row\n mat-row\n matRipple\n cdkDrag\n esNodesDrag\n [cdkDragDisabled]=\"!entriesService.dragDrop?.dragAllowed || (ui.isTouchSubject | async)\"\n [cdkDragData]=\"getDragData(node)\"\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDrop\"\n (nodeDropped)=\"drop($event)\"\n class=\"mat-row\"\n [class.mat-row-selected]=\"entriesService.selection.isSelected(node)\"\n [class.mat-row-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"isDragging && entriesService.selection.isSelected(node)\"\n [class.mat-row-virtual]=\"node.virtual\"\n [class.mat-row-virtual-first]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i - 1])?.virtual\n \"\n [class.mat-row-virtual-last]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i + 1])?.virtual\n \"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n *matRowDef=\"let node; let i = index; let last = last; columns: visibleColumnNames$ | async\"\n (contextmenu)=\"onRowContextMenu({ event: $event, node: node })\"\n (keydown.ContextMenu)=\"onRowContextMenu({ event: $event, node: node })\"\n >\n <es-drag-preview\n *cdkDragPreview\n [node]=\"node\"\n [selected]=\"entriesService.selection.selected\"\n [item]=\"(visibleDataColumns$ | async)[0]\"\n ></es-drag-preview>\n </mat-row>\n</mat-table>\n<ng-container\n *ngIf=\"\n (entriesService.dataSource.isLoadingSubject | async) === false &&\n entriesService.dataSource.hasMore() &&\n entriesService.paginationStrategy === 'infinite-scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container *ngIf=\"entriesService.dataSource.isLoadingSubject | async\">\n <ng-container *ngTemplateOutlet=\"loading\"> </ng-container>\n</ng-container>\n<!--\n<mat-paginator #paginator [pageSizeOptions]=\"pageSizeOptions\"></mat-paginator>\n-->\n\n<!-- Wait for ready state to avoid changed-after-checked error when `columnChooserTrigger` becomes\navailable. -->\n<es-column-chooser\n *ngIf=\"columnChooserTriggerReady\"\n [(columns)]=\"entriesService.columns\"\n [(columnChooserVisible)]=\"columnChooserVisible\"\n [origin]=\"columnChooserTrigger\"\n></es-column-chooser>\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #icon let-node=\"node\">\n <div class=\"icon-bg\">\n <img\n *ngIf=\"node.iconURL\"\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n matTooltipTouchGestures=\"off\"\n />\n <i\n *ngIf=\"!node.iconURL\"\n [esIcon]=\"node.authorityType ? (node.authorityType === 'GROUP' ? 'group' : 'person') : null\"\n ></i>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host ::ng-deep mat-header-cell{color:var(--textMediumLight)}:host ::ng-deep mat-cell,:host ::ng-deep mat-header-cell{margin:0!important}:host ::ng-deep mat-cell es-node-url{width:100%}:host ::ng-deep mat-cell es-node-url a{color:#000}:host ::ng-deep mat-cell es-node-url.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}:host ::ng-deep es-list-base{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline;width:100%;padding:20.3px 0;align-items:center}:host ::ng-deep es-list-base>div{display:inline}:host ::ng-deep es-list-base>div>div{display:inline}mat-header-cell,mat-cell{margin:0 3px}mat-header-cell:not(.mat-column-primary),mat-cell:not(.mat-column-primary){flex:0 145px}mat-header-cell.mat-column-primary,mat-cell.mat-column-primary{min-width:30%}mat-header-cell.mat-column-select,mat-cell.mat-column-select{flex:0 58px;min-width:58px;padding-left:14px}mat-header-cell.mat-column-icon,mat-cell.mat-column-icon{flex:0 85px;min-width:85px;justify-content:center}mat-header-cell.mat-column-actions,mat-cell.mat-column-actions{flex:0 58px;min-width:58px;display:flex;justify-content:flex-end;padding-right:5px}.mat-row{background:unset}.mat-row.dynamic-single-click{cursor:pointer}.mat-row.dynamic-single-click:hover{background-color:rgb(var(--palette-primary-50))}.mat-row.mat-row-import-blocked{opacity:.75;text-decoration:line-through}.mat-row.mat-row-selected{background:var(--listItemSelectedBackgroundEffect)}.mat-row.mat-row-selected .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual{background:linear-gradient(to right,var(--nodeVirtualColor) 5px,transparent 5px) no-repeat;border-right:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual.mat-row-selected{background:linear-gradient(to right,var(--nodeVirtualColor) 0,var(--nodeVirtualColor) 5px,var(--listItemSelectedBackground) 5px,var(--listItemSelectedBackground) 5px)}.mat-row.mat-row-virtual-first{border-top:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual-last{border-bottom:2px dashed var(--nodeVirtualColorLight)}.mat-row.selected-when-dragging{opacity:.5}.dropdown-dummy{position:fixed}.childobjects{background-color:#0000000d;border-radius:15px;display:inline-flex;align-items:center;min-width:51px;min-height:26px;justify-content:center;cursor:default;-webkit-user-select:none;user-select:none;padding:2px 8px;margin-left:5px}.childobjects>.childobject-count{display:inline-flex;align-items:center}.childobjects>.childobject-count>i{font-size:13px;margin-left:4px}.cell-icon .icon-bg{width:36px;height:36px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.cell-icon .icon-bg>img{width:18px;height:auto}.cell-icon .icon-bg>i{color:#666;font-size:18px}.mat-column-link{flex:0 60px}.mat-column-link a,.load-more{display:flex;justify-content:center}es-node-entries-global-options{padding:20px 0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i2$4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: CheckTextOverflowDirective, selector: "[esCheckTextOverflow]", inputs: ["esCheckTextOverflow"], exportAs: ["esCheckTextOverflow"] }, { kind: "component", type: DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollThrottle", "scrollWindow"], outputs: ["scrolled"] }, { kind: "component", type: NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i21.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i21.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i21.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i21.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i21.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i21.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i21.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i21.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i21.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i21.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i23.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i23.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ColumnChooserComponent, selector: "es-column-chooser", inputs: ["origin", "columnChooserVisible", "columns"], outputs: ["columnChooserVisibleChange", "columnsChange"] }, { kind: "component", type: DragPreviewComponent, selector: "es-drag-preview", inputs: ["node", "selected", "item"] }, { kind: "directive", type: NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeIconPipe, name: "esNodeIcon" }, { kind: "pipe", type: NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: ListItemLabelPipe, name: "esListItemLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5928
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.2", type: NodeEntriesTableComponent, selector: "es-node-entries-table", viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "columnChooserTrigger", first: true, predicate: ["columnChooserTrigger"], descendants: true }, { propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true }, { propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n<button\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n></button>\n<es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"NodeEntriesDisplayType.Table\"\n>\n</es-node-entries-global-options>\n<mat-table\n [dataSource]=\"entriesService.dataSource\"\n matSort\n [matSortDisableClear]=\"true\"\n [matSortActive]=\"entriesService.sort?.active\"\n [matSortDirection]=\"entriesService.sort?.direction\"\n esInfiniteScroll\n (scrolled)=\"loadData('scroll')\"\n>\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [ngModel]=\"entriesService.selection.selected.length > 0\"\n [indeterminate]=\"\n entriesService.selection.selected.length > 0 &&\n entriesService.selection.selected.length !== entriesService.dataSource.getData().length\n \"\n (ngModelChange)=\"toggleAll($event)\"\n color=\"primary\"\n aria-label=\"{{ 'LIST_TABLE.TOGGLE_ALL' | translate }}\"\n ></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n color=\"primary\"\n ></mat-checkbox>\n </mat-cell>\n </ng-container>\n <div matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef class=\"cell-icon cell-count\">\n ({{ entriesService.selection.selected.length\n }}<ng-container *ngIf=\"entriesService.dataSource?.getTotal() !== undefined\">\n / {{ entriesService.dataSource?.getTotal() }}</ng-container\n >)\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\" class=\"cell-icon\">\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <ng-container *ngTemplateOutlet=\"icon; context: { node: this.node }\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n >\n <ng-container\n *ngTemplateOutlet=\"icon; context: { node: this.node }\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n ></ng-container>\n </div>\n </mat-cell>\n </div>\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible = !columnChooserVisible\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <button\n mat-icon-button\n *ngIf=\"entriesService.options?.[Target.List]?.length\"\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n >\n <i esIcon=\"more_vert\" [aria]=\"true\"></i>\n </button>\n </mat-cell>\n </ng-container>\n <!-- Data Columns -->\n <ng-container\n *ngFor=\"let column of visibleDataColumns$ | async; let first = first\"\n [matColumnDef]=\"column.name\"\n >\n <ng-container>\n <mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [disabled]=\"!(entriesService.sort?.allowed && isSortable(column))\"\n [class.mat-column-primary]=\"first\"\n >{{ column | esListItemLabel | async }}</mat-header-cell\n >\n </ng-container>\n <mat-cell\n *matCellDef=\"let node\"\n #cell\n [class.mat-column-primary]=\"first\"\n attr.data-test=\"table-cell-{{ column.name }}\"\n >\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <es-node-url cdkMonitorSubtreeFocus [node]=\"node\" [mode]=\"first ? 'link' : 'wrapper'\">\n <es-list-base\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n </es-node-url>\n </ng-container>\n <es-list-base\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n ></es-list-base>\n <ng-container *ngIf=\"first\">\n <div class=\"childobjects\" *ngIf=\"node.properties?.['virtual:childobjectcount'] > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{\n 'CHILDOBJECT_COUNT'\n | translate : { count: node.properties['virtual:childobjectcount'] * 1 + 1 }\n }}\"\n >\n <span>{{ node.properties['virtual:childobjectcount'] * 1 + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n </div>\n </ng-container>\n </mat-cell>\n </ng-container>\n <mat-header-row mat-header-row *matHeaderRowDef=\"visibleColumnNames$ | async\"></mat-header-row>\n <mat-row\n mat-row\n matRipple\n cdkDrag\n esNodesDrag\n [cdkDragDisabled]=\"!entriesService.dragDrop?.dragAllowed || (ui.isTouchSubject | async)\"\n [cdkDragData]=\"getDragData(node)\"\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDrop\"\n (nodeDropped)=\"drop($event)\"\n class=\"mat-row\"\n [class.mat-row-selected]=\"entriesService.selection.isSelected(node)\"\n [class.mat-row-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"isDragging && entriesService.selection.isSelected(node)\"\n [class.mat-row-virtual]=\"node.virtual\"\n [class.mat-row-virtual-first]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i - 1])?.virtual\n \"\n [class.mat-row-virtual-last]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i + 1])?.virtual\n \"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n *matRowDef=\"let node; let i = index; let last = last; columns: visibleColumnNames$ | async\"\n (contextmenu)=\"onRowContextMenu({ event: $event, node: node })\"\n (keydown.ContextMenu)=\"onRowContextMenu({ event: $event, node: node })\"\n >\n <es-drag-preview\n *cdkDragPreview\n [node]=\"node\"\n [selected]=\"entriesService.selection.selected\"\n [item]=\"(visibleDataColumns$ | async)[0]\"\n ></es-drag-preview>\n </mat-row>\n</mat-table>\n<ng-container\n *ngIf=\"\n (entriesService.dataSource.isLoadingSubject | async) === false &&\n entriesService.dataSource.hasMore() &&\n entriesService.paginationStrategy === 'infinite-scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container *ngIf=\"entriesService.dataSource.isLoadingSubject | async\">\n <ng-container *ngTemplateOutlet=\"loading\"> </ng-container>\n</ng-container>\n<!--\n<mat-paginator #paginator [pageSizeOptions]=\"pageSizeOptions\"></mat-paginator>\n-->\n\n<!-- Wait for ready state to avoid changed-after-checked error when `columnChooserTrigger` becomes\navailable. -->\n<es-column-chooser\n *ngIf=\"columnChooserTriggerReady\"\n [(columns)]=\"entriesService.columns\"\n [(columnChooserVisible)]=\"columnChooserVisible\"\n [origin]=\"columnChooserTrigger\"\n></es-column-chooser>\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #icon let-node=\"node\">\n <div class=\"icon-bg\">\n <img\n *ngIf=\"node.iconURL\"\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n matTooltipTouchGestures=\"off\"\n />\n <i\n *ngIf=\"!node.iconURL\"\n [esIcon]=\"node.authorityType ? (node.authorityType === 'GROUP' ? 'group' : 'person') : null\"\n ></i>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host ::ng-deep mat-header-cell{color:var(--textMediumLight)}:host ::ng-deep mat-cell,:host ::ng-deep mat-header-cell{margin:0!important}:host ::ng-deep mat-cell es-node-url{width:100%}:host ::ng-deep mat-cell es-node-url a{color:#000}:host ::ng-deep mat-cell es-node-url.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}:host ::ng-deep es-list-base{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline;width:100%;padding:20.3px 0;align-items:center}:host ::ng-deep es-list-base>div{display:inline}:host ::ng-deep es-list-base>div>div{display:inline}mat-header-cell,mat-cell{margin:0 3px}mat-header-cell:not(.mat-column-primary),mat-cell:not(.mat-column-primary){flex:0 145px}mat-header-cell.mat-column-primary,mat-cell.mat-column-primary{min-width:30%}mat-header-cell.mat-column-select,mat-cell.mat-column-select{flex:0 58px;min-width:58px;padding-left:14px}mat-header-cell.mat-column-icon,mat-cell.mat-column-icon{flex:0 85px;min-width:85px;justify-content:center}mat-header-cell.mat-column-actions,mat-cell.mat-column-actions{flex:0 58px;min-width:58px;display:flex;justify-content:flex-end;padding-right:5px}.mat-row{background:unset}.mat-row.dynamic-single-click{cursor:pointer}.mat-row.dynamic-single-click:hover{background-color:rgb(var(--palette-primary-50))}.mat-row.mat-row-import-blocked{opacity:.75;text-decoration:line-through}.mat-row.mat-row-selected{background:var(--listItemSelectedBackgroundEffect)}.mat-row.mat-row-selected .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual{background:linear-gradient(to right,var(--nodeVirtualColor) 5px,transparent 5px) no-repeat;border-right:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual.mat-row-selected{background:linear-gradient(to right,var(--nodeVirtualColor) 0,var(--nodeVirtualColor) 5px,var(--listItemSelectedBackground) 5px,var(--listItemSelectedBackground) 5px)}.mat-row.mat-row-virtual-first{border-top:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual-last{border-bottom:2px dashed var(--nodeVirtualColorLight)}.mat-row.selected-when-dragging{opacity:.5}.dropdown-dummy{position:fixed}.childobjects{background-color:#0000000d;border-radius:15px;display:inline-flex;align-items:center;min-width:51px;min-height:26px;justify-content:center;cursor:default;-webkit-user-select:none;user-select:none;padding:2px 8px;margin-left:5px}.childobjects>.childobject-count{display:inline-flex;align-items:center}.childobjects>.childobject-count>i{font-size:13px;margin-left:4px}.cell-icon .icon-bg{width:36px;height:36px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.cell-icon .icon-bg>img{width:18px;height:auto}.cell-icon .icon-bg>i{color:#666;font-size:18px}.mat-column-link{flex:0 60px}.mat-column-link a,.load-more{display:flex;justify-content:center}es-node-entries-global-options{padding:20px 0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i2$4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: CheckTextOverflowDirective, selector: "[esCheckTextOverflow]", inputs: ["esCheckTextOverflow"], exportAs: ["esCheckTextOverflow"] }, { kind: "component", type: DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObject", "showDisabled", "menuClass"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollThrottle", "scrollWindow"], outputs: ["scrolled"] }, { kind: "component", type: NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: SpinnerComponent, selector: "es-spinner" }, { kind: "component", type: ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i21.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i21.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i21.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i21.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i21.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i21.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i21.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i21.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i21.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i21.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i23.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i23.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ColumnChooserComponent, selector: "es-column-chooser", inputs: ["origin", "columnChooserVisible", "columns"], outputs: ["columnChooserVisibleChange", "columnsChange"] }, { kind: "component", type: DragPreviewComponent, selector: "es-drag-preview", inputs: ["node", "selected", "item"] }, { kind: "directive", type: NodesDragDirective, selector: "[esNodesDrag]" }, { kind: "directive", type: NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: ["esNodesDropTarget", "canDropNodes"], outputs: ["nodeDropped"], exportAs: ["esNodesDropTarget"] }, { kind: "component", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: ["displayType"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeIconPipe, name: "esNodeIcon" }, { kind: "pipe", type: NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: ListItemLabelPipe, name: "esListItemLabel" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5843
5929
|
}
|
|
5844
5930
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: NodeEntriesTableComponent, decorators: [{
|
|
5845
5931
|
type: Component,
|
|
5846
|
-
args: [{ selector: 'es-node-entries-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n<button\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n></button>\n<es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"NodeEntriesDisplayType.Table\"\n>\n</es-node-entries-global-options>\n<mat-table\n [dataSource]=\"entriesService.dataSource\"\n matSort\n [matSortDisableClear]=\"true\"\n [matSortActive]=\"entriesService.sort?.active\"\n [matSortDirection]=\"entriesService.sort?.direction\"\n esInfiniteScroll\n (scrolled)=\"loadData('scroll')\"\n>\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [ngModel]=\"entriesService.selection.selected.length > 0\"\n [indeterminate]=\"\n entriesService.selection.selected.length > 0 &&\n entriesService.selection.selected.length !== entriesService.dataSource.getData().length\n \"\n (ngModelChange)=\"toggleAll($event)\"\n color=\"primary\"\n aria-label=\"{{ 'LIST_TABLE.TOGGLE_ALL' | translate }}\"\n ></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n aria-label=\"{{ 'SELECT' | translate: { element: (node | nodeTitle) } }}\"\n color=\"primary\"\n ></mat-checkbox>\n </mat-cell>\n </ng-container>\n <div matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef class=\"cell-icon cell-count\">\n ({{ entriesService.selection.selected.length\n }}<ng-container *ngIf=\"entriesService.dataSource?.getTotal() !== undefined\">\n / {{ entriesService.dataSource?.getTotal() }}</ng-container\n >)\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\" class=\"cell-icon\">\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <ng-container *ngTemplateOutlet=\"icon; context: { node: this.node }\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n >\n <ng-container\n *ngTemplateOutlet=\"icon; context: { node: this.node }\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n ></ng-container>\n </div>\n </mat-cell>\n </div>\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible = !columnChooserVisible\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <button\n mat-icon-button\n *ngIf=\"entriesService.options?.[Target.List]?.length\"\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n >\n <i esIcon=\"more_vert\" [aria]=\"true\"></i>\n </button>\n </mat-cell>\n </ng-container>\n <!-- Data Columns -->\n <ng-container\n *ngFor=\"let column of visibleDataColumns$ | async; let first = first\"\n [matColumnDef]=\"column.name\"\n >\n <ng-container>\n <mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [disabled]=\"!(entriesService.sort?.allowed && isSortable(column))\"\n [class.mat-column-primary]=\"first\"\n >{{ column | esListItemLabel | async }}</mat-header-cell\n >\n </ng-container>\n <mat-cell\n *matCellDef=\"let node\"\n #cell\n [class.mat-column-primary]=\"first\"\n attr.data-test=\"table-cell-{{ column.name }}\"\n >\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <es-node-url cdkMonitorSubtreeFocus [node]=\"node\" [mode]=\"first ? 'link' : 'wrapper'\">\n <es-list-base\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n </es-node-url>\n </ng-container>\n <es-list-base\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n <ng-container *ngIf=\"first\">\n <div class=\"childobjects\" *ngIf=\"node.properties?.['virtual:childobjectcount'] > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{\n 'CHILDOBJECT_COUNT'\n | translate: { count: node.properties['virtual:childobjectcount'] * 1 + 1 }\n }}\"\n >\n <span>{{ node.properties['virtual:childobjectcount'] * 1 + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n </div>\n </ng-container>\n </mat-cell>\n </ng-container>\n <mat-header-row mat-header-row *matHeaderRowDef=\"visibleColumnNames$ | async\"></mat-header-row>\n <mat-row\n mat-row\n matRipple\n cdkDrag\n esNodesDrag\n [cdkDragDisabled]=\"!entriesService.dragDrop?.dragAllowed || (ui.isTouchSubject | async)\"\n [cdkDragData]=\"getDragData(node)\"\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDrop\"\n (nodeDropped)=\"drop($event)\"\n class=\"mat-row\"\n [class.mat-row-selected]=\"entriesService.selection.isSelected(node)\"\n [class.mat-row-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"isDragging && entriesService.selection.isSelected(node)\"\n [class.mat-row-virtual]=\"node.virtual\"\n [class.mat-row-virtual-first]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i - 1])?.virtual\n \"\n [class.mat-row-virtual-last]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i + 1])?.virtual\n \"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n *matRowDef=\"let node; let i = index; let last = last; columns: visibleColumnNames$ | async\"\n (contextmenu)=\"onRowContextMenu({ event: $event, node: node })\"\n (keydown.ContextMenu)=\"onRowContextMenu({ event: $event, node: node })\"\n >\n <es-drag-preview\n *cdkDragPreview\n [node]=\"node\"\n [selected]=\"entriesService.selection.selected\"\n [item]=\"(visibleDataColumns$ | async)[0]\"\n ></es-drag-preview>\n </mat-row>\n</mat-table>\n<ng-container\n *ngIf=\"\n (entriesService.dataSource.isLoadingSubject | async) === false &&\n entriesService.dataSource.hasMore() &&\n entriesService.paginationStrategy === 'infinite-scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container *ngIf=\"entriesService.dataSource.isLoadingSubject | async\">\n <ng-container *ngTemplateOutlet=\"loading\"> </ng-container>\n</ng-container>\n<!--\n<mat-paginator #paginator [pageSizeOptions]=\"pageSizeOptions\"></mat-paginator>\n-->\n\n<!-- Wait for ready state to avoid changed-after-checked error when `columnChooserTrigger` becomes\navailable. -->\n<es-column-chooser\n *ngIf=\"columnChooserTriggerReady\"\n [(columns)]=\"entriesService.columns\"\n [(columnChooserVisible)]=\"columnChooserVisible\"\n [origin]=\"columnChooserTrigger\"\n></es-column-chooser>\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #icon let-node=\"node\">\n <div class=\"icon-bg\">\n <img\n *ngIf=\"node.iconURL\"\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n matTooltipTouchGestures=\"off\"\n />\n <i\n *ngIf=\"!node.iconURL\"\n [esIcon]=\"node.authorityType ? (node.authorityType === 'GROUP' ? 'group' : 'person') : null\"\n ></i>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host ::ng-deep mat-header-cell{color:var(--textMediumLight)}:host ::ng-deep mat-cell,:host ::ng-deep mat-header-cell{margin:0!important}:host ::ng-deep mat-cell es-node-url{width:100%}:host ::ng-deep mat-cell es-node-url a{color:#000}:host ::ng-deep mat-cell es-node-url.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}:host ::ng-deep es-list-base{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline;width:100%;padding:20.3px 0;align-items:center}:host ::ng-deep es-list-base>div{display:inline}:host ::ng-deep es-list-base>div>div{display:inline}mat-header-cell,mat-cell{margin:0 3px}mat-header-cell:not(.mat-column-primary),mat-cell:not(.mat-column-primary){flex:0 145px}mat-header-cell.mat-column-primary,mat-cell.mat-column-primary{min-width:30%}mat-header-cell.mat-column-select,mat-cell.mat-column-select{flex:0 58px;min-width:58px;padding-left:14px}mat-header-cell.mat-column-icon,mat-cell.mat-column-icon{flex:0 85px;min-width:85px;justify-content:center}mat-header-cell.mat-column-actions,mat-cell.mat-column-actions{flex:0 58px;min-width:58px;display:flex;justify-content:flex-end;padding-right:5px}.mat-row{background:unset}.mat-row.dynamic-single-click{cursor:pointer}.mat-row.dynamic-single-click:hover{background-color:rgb(var(--palette-primary-50))}.mat-row.mat-row-import-blocked{opacity:.75;text-decoration:line-through}.mat-row.mat-row-selected{background:var(--listItemSelectedBackgroundEffect)}.mat-row.mat-row-selected .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual{background:linear-gradient(to right,var(--nodeVirtualColor) 5px,transparent 5px) no-repeat;border-right:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual.mat-row-selected{background:linear-gradient(to right,var(--nodeVirtualColor) 0,var(--nodeVirtualColor) 5px,var(--listItemSelectedBackground) 5px,var(--listItemSelectedBackground) 5px)}.mat-row.mat-row-virtual-first{border-top:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual-last{border-bottom:2px dashed var(--nodeVirtualColorLight)}.mat-row.selected-when-dragging{opacity:.5}.dropdown-dummy{position:fixed}.childobjects{background-color:#0000000d;border-radius:15px;display:inline-flex;align-items:center;min-width:51px;min-height:26px;justify-content:center;cursor:default;-webkit-user-select:none;user-select:none;padding:2px 8px;margin-left:5px}.childobjects>.childobject-count{display:inline-flex;align-items:center}.childobjects>.childobject-count>i{font-size:13px;margin-left:4px}.cell-icon .icon-bg{width:36px;height:36px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.cell-icon .icon-bg>img{width:18px;height:auto}.cell-icon .icon-bg>i{color:#666;font-size:18px}.mat-column-link{flex:0 60px}.mat-column-link a,.load-more{display:flex;justify-content:center}es-node-entries-global-options{padding:20px 0}\n"] }]
|
|
5932
|
+
args: [{ selector: 'es-node-entries-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<es-dropdown #dropdown [options]=\"entriesService.options?.[Target.ListDropdown]\"></es-dropdown>\n<button\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n></button>\n<es-node-entries-global-options\n *ngIf=\"(entriesService.globalOptionsSubject | async)?.length\"\n [displayType]=\"NodeEntriesDisplayType.Table\"\n>\n</es-node-entries-global-options>\n<mat-table\n [dataSource]=\"entriesService.dataSource\"\n matSort\n [matSortDisableClear]=\"true\"\n [matSortActive]=\"entriesService.sort?.active\"\n [matSortDirection]=\"entriesService.sort?.direction\"\n esInfiniteScroll\n (scrolled)=\"loadData('scroll')\"\n>\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef>\n <mat-checkbox\n [ngModel]=\"entriesService.selection.selected.length > 0\"\n [indeterminate]=\"\n entriesService.selection.selected.length > 0 &&\n entriesService.selection.selected.length !== entriesService.dataSource.getData().length\n \"\n (ngModelChange)=\"toggleAll($event)\"\n color=\"primary\"\n aria-label=\"{{ 'LIST_TABLE.TOGGLE_ALL' | translate }}\"\n ></mat-checkbox>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n color=\"primary\"\n ></mat-checkbox>\n </mat-cell>\n </ng-container>\n <div matColumnDef=\"icon\">\n <mat-header-cell *matHeaderCellDef class=\"cell-icon cell-count\">\n ({{ entriesService.selection.selected.length\n }}<ng-container *ngIf=\"entriesService.dataSource?.getTotal() !== undefined\">\n / {{ entriesService.dataSource?.getTotal() }}</ng-container\n >)\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\" class=\"cell-icon\">\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <ng-container *ngTemplateOutlet=\"icon; context: { node: this.node }\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n >\n <ng-container\n *ngTemplateOutlet=\"icon; context: { node: this.node }\"\n (click)=\"\n entriesService.onClicked({ event: $event, element: node, source: ClickSource.Icon })\n \"\n (dblclick)=\"entriesService.dblClickItem.emit({ element: node, source: ClickSource.Icon })\"\n ></ng-container>\n </div>\n </mat-cell>\n </div>\n <ng-container matColumnDef=\"actions\">\n <mat-header-cell *matHeaderCellDef>\n <button\n *ngIf=\"entriesService.configureColumns\"\n mat-icon-button\n (click)=\"columnChooserVisible = !columnChooserVisible\"\n cdkOverlayOrigin\n #columnChooserTrigger=\"cdkOverlayOrigin\"\n [matTooltip]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n [attr.aria-label]=\"'LIST_TABLE.CONFIGURE_COLUMNS' | translate\"\n >\n <i esIcon=\"settings\"></i>\n </button>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let node\">\n <button\n mat-icon-button\n *ngIf=\"entriesService.options?.[Target.List]?.length\"\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n >\n <i esIcon=\"more_vert\" [aria]=\"true\"></i>\n </button>\n </mat-cell>\n </ng-container>\n <!-- Data Columns -->\n <ng-container\n *ngFor=\"let column of visibleDataColumns$ | async; let first = first\"\n [matColumnDef]=\"column.name\"\n >\n <ng-container>\n <mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n [disabled]=\"!(entriesService.sort?.allowed && isSortable(column))\"\n [class.mat-column-primary]=\"first\"\n >{{ column | esListItemLabel | async }}</mat-header-cell\n >\n </ng-container>\n <mat-cell\n *matCellDef=\"let node\"\n #cell\n [class.mat-column-primary]=\"first\"\n attr.data-test=\"table-cell-{{ column.name }}\"\n >\n <ng-container\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n >\n <es-node-url cdkMonitorSubtreeFocus [node]=\"node\" [mode]=\"first ? 'link' : 'wrapper'\">\n <es-list-base\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n esCheckTextOverflow\n #text=\"esCheckTextOverflow\"\n [matTooltip]=\"text.hasTextOverflow() ? cell.innerText : null\"\n matTooltipTouchGestures=\"off\"\n ></es-list-base>\n </es-node-url>\n </ng-container>\n <es-list-base\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n [forceText]=\"true\"\n [node]=\"node\"\n [item]=\"column\"\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n attribute: column,\n })\n \"\n ></es-list-base>\n <ng-container *ngIf=\"first\">\n <div class=\"childobjects\" *ngIf=\"node.properties?.['virtual:childobjectcount'] > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{\n 'CHILDOBJECT_COUNT'\n | translate : { count: node.properties['virtual:childobjectcount'] * 1 + 1 }\n }}\"\n >\n <span>{{ node.properties['virtual:childobjectcount'] * 1 + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n </div>\n </ng-container>\n </mat-cell>\n </ng-container>\n <mat-header-row mat-header-row *matHeaderRowDef=\"visibleColumnNames$ | async\"></mat-header-row>\n <mat-row\n mat-row\n matRipple\n cdkDrag\n esNodesDrag\n [cdkDragDisabled]=\"!entriesService.dragDrop?.dragAllowed || (ui.isTouchSubject | async)\"\n [cdkDragData]=\"getDragData(node)\"\n (cdkDragStarted)=\"onDragStarted(node)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [esNodesDropTarget]=\"node\"\n [canDropNodes]=\"canDrop\"\n (nodeDropped)=\"drop($event)\"\n class=\"mat-row\"\n [class.mat-row-selected]=\"entriesService.selection.isSelected(node)\"\n [class.mat-row-import-blocked]=\"isBlocked(node)\"\n [class.selected-when-dragging]=\"isDragging && entriesService.selection.isSelected(node)\"\n [class.mat-row-virtual]=\"node.virtual\"\n [class.mat-row-virtual-first]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i - 1])?.virtual\n \"\n [class.mat-row-virtual-last]=\"\n node.virtual && !$any(entriesService.dataSource.getData()[i + 1])?.virtual\n \"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n *matRowDef=\"let node; let i = index; let last = last; columns: visibleColumnNames$ | async\"\n (contextmenu)=\"onRowContextMenu({ event: $event, node: node })\"\n (keydown.ContextMenu)=\"onRowContextMenu({ event: $event, node: node })\"\n >\n <es-drag-preview\n *cdkDragPreview\n [node]=\"node\"\n [selected]=\"entriesService.selection.selected\"\n [item]=\"(visibleDataColumns$ | async)[0]\"\n ></es-drag-preview>\n </mat-row>\n</mat-table>\n<ng-container\n *ngIf=\"\n (entriesService.dataSource.isLoadingSubject | async) === false &&\n entriesService.dataSource.hasMore() &&\n entriesService.paginationStrategy === 'infinite-scroll'\n \"\n>\n <div class=\"load-more\">\n <button mat-button color=\"primary\" (click)=\"loadData('button')\">\n <i esIcon=\"refresh\"></i>\n <span>{{ 'LOAD_MORE' | translate }}</span>\n </button>\n </div>\n</ng-container>\n<ng-container *ngIf=\"entriesService.dataSource.isLoadingSubject | async\">\n <ng-container *ngTemplateOutlet=\"loading\"> </ng-container>\n</ng-container>\n<!--\n<mat-paginator #paginator [pageSizeOptions]=\"pageSizeOptions\"></mat-paginator>\n-->\n\n<!-- Wait for ready state to avoid changed-after-checked error when `columnChooserTrigger` becomes\navailable. -->\n<es-column-chooser\n *ngIf=\"columnChooserTriggerReady\"\n [(columns)]=\"entriesService.columns\"\n [(columnChooserVisible)]=\"columnChooserVisible\"\n [origin]=\"columnChooserTrigger\"\n></es-column-chooser>\n<ng-template #loading>\n <es-spinner></es-spinner>\n</ng-template>\n<ng-template #icon let-node=\"node\">\n <div class=\"icon-bg\">\n <img\n *ngIf=\"node.iconURL\"\n [src]=\"node | esNodeIcon | async\"\n [alt]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n [matTooltip]=\"\n node.mediatype\n ? ('NODE.mediatype' | translate) + ': ' + ('MEDIATYPE.' + node.mediatype | translate)\n : ''\n \"\n matTooltipTouchGestures=\"off\"\n />\n <i\n *ngIf=\"!node.iconURL\"\n [esIcon]=\"node.authorityType ? (node.authorityType === 'GROUP' ? 'group' : 'person') : null\"\n ></i>\n </div>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:column}:host ::ng-deep mat-header-cell{color:var(--textMediumLight)}:host ::ng-deep mat-cell,:host ::ng-deep mat-header-cell{margin:0!important}:host ::ng-deep mat-cell es-node-url{width:100%}:host ::ng-deep mat-cell es-node-url a{color:#000}:host ::ng-deep mat-cell es-node-url.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}:host ::ng-deep es-list-base{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:inline;width:100%;padding:20.3px 0;align-items:center}:host ::ng-deep es-list-base>div{display:inline}:host ::ng-deep es-list-base>div>div{display:inline}mat-header-cell,mat-cell{margin:0 3px}mat-header-cell:not(.mat-column-primary),mat-cell:not(.mat-column-primary){flex:0 145px}mat-header-cell.mat-column-primary,mat-cell.mat-column-primary{min-width:30%}mat-header-cell.mat-column-select,mat-cell.mat-column-select{flex:0 58px;min-width:58px;padding-left:14px}mat-header-cell.mat-column-icon,mat-cell.mat-column-icon{flex:0 85px;min-width:85px;justify-content:center}mat-header-cell.mat-column-actions,mat-cell.mat-column-actions{flex:0 58px;min-width:58px;display:flex;justify-content:flex-end;padding-right:5px}.mat-row{background:unset}.mat-row.dynamic-single-click{cursor:pointer}.mat-row.dynamic-single-click:hover{background-color:rgb(var(--palette-primary-50))}.mat-row.mat-row-import-blocked{opacity:.75;text-decoration:line-through}.mat-row.mat-row-selected{background:var(--listItemSelectedBackgroundEffect)}.mat-row.mat-row-selected .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual{background:linear-gradient(to right,var(--nodeVirtualColor) 5px,transparent 5px) no-repeat;border-right:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual .mat-mdc-cell{background:transparent}.mat-row.mat-row-virtual.mat-row-selected{background:linear-gradient(to right,var(--nodeVirtualColor) 0,var(--nodeVirtualColor) 5px,var(--listItemSelectedBackground) 5px,var(--listItemSelectedBackground) 5px)}.mat-row.mat-row-virtual-first{border-top:2px dashed var(--nodeVirtualColorLight)}.mat-row.mat-row-virtual-last{border-bottom:2px dashed var(--nodeVirtualColorLight)}.mat-row.selected-when-dragging{opacity:.5}.dropdown-dummy{position:fixed}.childobjects{background-color:#0000000d;border-radius:15px;display:inline-flex;align-items:center;min-width:51px;min-height:26px;justify-content:center;cursor:default;-webkit-user-select:none;user-select:none;padding:2px 8px;margin-left:5px}.childobjects>.childobject-count{display:inline-flex;align-items:center}.childobjects>.childobject-count>i{font-size:13px;margin-left:4px}.cell-icon .icon-bg{width:36px;height:36px;padding:3px;margin:1px 0;background-color:#fff;border-radius:50%;display:flex;justify-content:center;align-items:center;box-shadow:0 0 3px #0000004d}.cell-icon .icon-bg>img{width:18px;height:auto}.cell-icon .icon-bg>i{color:#666;font-size:18px}.mat-column-link{flex:0 60px}.mat-column-link a,.load-more{display:flex;justify-content:center}es-node-entries-global-options{padding:20px 0}\n"] }]
|
|
5847
5933
|
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeEntriesGlobalService }, { type: i0.ApplicationRef }, { type: Toast }, { type: TranslationsService }, { type: i0.ChangeDetectorRef }, { type: UIService }, { type: i0.NgZone }, { type: i0.ElementRef }], propDecorators: { sort: [{
|
|
5848
5934
|
type: ViewChild,
|
|
5849
5935
|
args: [MatSort]
|
|
@@ -6072,7 +6158,7 @@ class OptionsHelperDataService {
|
|
|
6072
6158
|
}
|
|
6073
6159
|
}
|
|
6074
6160
|
pasteNode(nodes = []) {
|
|
6075
|
-
this.optionsHelperService.pasteNode(this.components, this.data, nodes);
|
|
6161
|
+
this.optionsHelperService.pasteNode(this.components, this.data, true, nodes);
|
|
6076
6162
|
}
|
|
6077
6163
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: OptionsHelperDataService, deps: [{ token: i0.NgZone }, { token: i2$1.ActivatedRoute }, { token: LocalEventsService }, { token: i2.AuthenticationService }, { token: i2.UserService }, { token: i2.NetworkService }, { token: KeyboardShortcutsService, optional: true }, { token: OptionsHelperService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6078
6164
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: OptionsHelperDataService }); }
|
|
@@ -6349,12 +6435,17 @@ class NodeEntriesWrapperComponent {
|
|
|
6349
6435
|
return;
|
|
6350
6436
|
}
|
|
6351
6437
|
this.dataSource.getData().forEach((d) => {
|
|
6352
|
-
let hits = nodes.filter((n) => n
|
|
6438
|
+
let hits = nodes.filter((n) => n?.ref
|
|
6439
|
+
? n?.ref.id === d?.ref.id
|
|
6440
|
+
: n?.authorityName ===
|
|
6441
|
+
d?.authorityName);
|
|
6353
6442
|
if (hits.length === 0) {
|
|
6354
6443
|
// handle if the original has changed (for collection refs)
|
|
6355
|
-
hits = nodes.filter((n) => n
|
|
6444
|
+
hits = nodes.filter((n) => n?.ref &&
|
|
6445
|
+
n?.ref?.id === d?.originalId);
|
|
6356
6446
|
}
|
|
6357
6447
|
if (hits.length === 1) {
|
|
6448
|
+
console.log('copy', d, hits);
|
|
6358
6449
|
this.nodeHelperService.copyDataToNode(d, hits[0]);
|
|
6359
6450
|
}
|
|
6360
6451
|
});
|
|
@@ -6879,11 +6970,12 @@ let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
|
6879
6970
|
if (lang === 'none') {
|
|
6880
6971
|
return of({});
|
|
6881
6972
|
}
|
|
6882
|
-
|
|
6883
|
-
|
|
6973
|
+
// backend can not handle sub-languages
|
|
6974
|
+
const langBackend = lang.startsWith('de-') ? 'de' : lang;
|
|
6975
|
+
if (!LANGUAGES[langBackend]) {
|
|
6976
|
+
console.error('unknown locale for language ' + lang + ' / ' + langBackend);
|
|
6884
6977
|
}
|
|
6885
|
-
|
|
6886
|
-
this.configService.setLocale(LANGUAGES[lang]);
|
|
6978
|
+
this.configService.setLocale(LANGUAGES[langBackend], lang);
|
|
6887
6979
|
return rxjs
|
|
6888
6980
|
.forkJoin({
|
|
6889
6981
|
originalTranslations: this.getOriginalTranslations(lang).pipe(
|
|
@@ -6904,7 +6996,7 @@ let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
|
6904
6996
|
getOriginalTranslations(lang) {
|
|
6905
6997
|
switch (this.getSource()) {
|
|
6906
6998
|
case 'repository':
|
|
6907
|
-
return this.configService.observeDefaultTranslations().pipe(filter((arg) => !arg || arg.
|
|
6999
|
+
return this.configService.observeDefaultTranslations().pipe(filter((arg) => !arg?.locale || arg.language === lang), switchMap((arg) => arg?.dict?.pipe(first()) || of(null)), first());
|
|
6908
7000
|
case 'local':
|
|
6909
7001
|
return this.mergeTranslations(this.fetchTranslations(lang));
|
|
6910
7002
|
}
|
|
@@ -7073,6 +7165,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
7073
7165
|
type: SkipSelf
|
|
7074
7166
|
}] }] });
|
|
7075
7167
|
|
|
7168
|
+
class SearchHelperService {
|
|
7169
|
+
static { this.MAX_QUERY_CONCAT_PARAMS = 400; }
|
|
7170
|
+
constructor() { }
|
|
7171
|
+
/**
|
|
7172
|
+
* converts given filter criteria and converts them for a body to be used for a search request
|
|
7173
|
+
* @param properties
|
|
7174
|
+
* @param mdsWidgets
|
|
7175
|
+
* @param unfoldTrees
|
|
7176
|
+
*/
|
|
7177
|
+
convertCritieria(properties, mdsWidgets, unfoldTrees = true) {
|
|
7178
|
+
const criteria = [];
|
|
7179
|
+
// deep copy
|
|
7180
|
+
properties = JSON.parse(JSON.stringify(properties));
|
|
7181
|
+
for (const property in properties) {
|
|
7182
|
+
let widget = MdsHelperService.getWidget(property, undefined, mdsWidgets);
|
|
7183
|
+
if (widget && widget.type == 'multivalueTree' && unfoldTrees) {
|
|
7184
|
+
let attach = MdsService.unfoldTreeChilds(properties[property], widget);
|
|
7185
|
+
if (attach) {
|
|
7186
|
+
if (attach.length > SearchHelperService.MAX_QUERY_CONCAT_PARAMS) {
|
|
7187
|
+
console.info('param ' +
|
|
7188
|
+
property +
|
|
7189
|
+
' has too many unfold childs (' +
|
|
7190
|
+
attach.length +
|
|
7191
|
+
'), falling back to basic prefix-based search');
|
|
7192
|
+
}
|
|
7193
|
+
else {
|
|
7194
|
+
properties[property] = properties[property].concat(attach);
|
|
7195
|
+
}
|
|
7196
|
+
}
|
|
7197
|
+
}
|
|
7198
|
+
if (properties[property]?.length && properties[property].every((p) => p != null && !!p))
|
|
7199
|
+
criteria.push({
|
|
7200
|
+
property: property,
|
|
7201
|
+
values: properties[property],
|
|
7202
|
+
});
|
|
7203
|
+
}
|
|
7204
|
+
return criteria;
|
|
7205
|
+
}
|
|
7206
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SearchHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7207
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SearchHelperService, providedIn: 'root' }); }
|
|
7208
|
+
}
|
|
7209
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: SearchHelperService, decorators: [{
|
|
7210
|
+
type: Injectable,
|
|
7211
|
+
args: [{
|
|
7212
|
+
providedIn: 'root',
|
|
7213
|
+
}]
|
|
7214
|
+
}], ctorParameters: () => [] });
|
|
7215
|
+
|
|
7076
7216
|
/*
|
|
7077
7217
|
* Public API Surface of edu-sharing-ui
|
|
7078
7218
|
*/
|
|
@@ -7081,5 +7221,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
7081
7221
|
* Generated bundle index. Do not edit.
|
|
7082
7222
|
*/
|
|
7083
7223
|
|
|
7084
|
-
export { ASSETS_BASE_PATH, AccessibilityService, AccessibilitySettings, ActionbarComponent, AppContainerService, AppService, BorderBoxObserverDirective, CheckTextOverflowDirective, ClickSource, ColorHelper, CombinedDataSource, Constrain, CustomFieldSpecialType, CustomOptions, CustomTemplatesDataSource, DateHelper, DefaultGroups, DropdownComponent, DurationFormat, DurationHelper, EDU_SHARING_UI_CONFIG, EduSharingUiCommonModule, EduSharingUiConfiguration, EduSharingUiModule, ElementType, FallbackTranslationHandler, FocusStateDirective, FormatDatePipe, FormatDurationPipe, FormatOptions, FormatSizePipe, Helper, HideMode, IconDirective, InfiniteScrollDirective, InteractionType, ItemsCap, KeyboardShortcutsService, ListBaseComponent, ListCountsComponent, ListItem, ListItemLabelPipe, ListItemSort, ListItemsModule, ListTextComponent, LocalEventsService, MdsHelperService, MdsModule, NodeCache, NodeDataSource, NodeDataSourceRemote, NodeEntriesDisplayType, NodeEntriesGlobalService, NodeEntriesModule, NodeEntriesWrapperComponent, NodeHelperService, NodeIconPipe, NodeImagePipe, NodeImageSizePipe, NodePersonNamePipe, NodeRowComponent, NodeTitlePipe, NodeUrlComponent, NodesDragDirective, NodesDragDropService, NodesDragSourceDirective, NodesDropTargetDirective, NodesRightMode, OPEN_URL_MODE, OptionGroup, OptionItem, OptionsHelperDataService, OptionsHelperService, PreferredColor, PropertySlugPipe, RelativeMode, RepoUrlService, RestHelper, Scope, SortDropdownComponent, SortEvent, SpinnerComponent, TRANSLATION_LIST, Target, TemporaryStorageService, Toast, ToastDuration, TranslationLoader, TranslationsModule, TranslationsService, UIAnimation, UIConstants, UIService, VCard, VCardNamePipe, WORKFLOW_STATUS_CHECKED, WORKFLOW_STATUS_HASFLAWS, WORKFLOW_STATUS_TO_CHECK, WORKFLOW_STATUS_UNCHECKED, clearDraggedNodes, dragNodesTransferType, getConfigProvider, isNumeric, isTrue, macroTick, matchesShortcutCondition, microTick, notNull, readDraggedNodes, saveDraggedNodes };
|
|
7224
|
+
export { ASSETS_BASE_PATH, AccessibilityService, AccessibilitySettings, ActionbarComponent, AppContainerService, AppService, BorderBoxObserverDirective, CheckTextOverflowDirective, ClickSource, ColorHelper, CombinedDataSource, Constrain, CustomFieldSpecialType, CustomOptions, CustomTemplatesDataSource, DateHelper, DefaultGroups, DropdownComponent, DurationFormat, DurationHelper, EDU_SHARING_UI_CONFIG, EduSharingUiCommonModule, EduSharingUiConfiguration, EduSharingUiModule, ElementType, FallbackTranslationHandler, FocusStateDirective, FormatDatePipe, FormatDurationPipe, FormatOptions, FormatSizePipe, Helper, HideMode, IconDirective, InfiniteScrollDirective, InteractionType, ItemsCap, KeyboardShortcutsService, ListBaseComponent, ListCountsComponent, ListItem, ListItemLabelPipe, ListItemSort, ListItemsModule, ListTextComponent, LocalEventsService, MdsHelperService, MdsModule, NodeCache, NodeDataSource, NodeDataSourceRemote, NodeEntriesDisplayType, NodeEntriesGlobalService, NodeEntriesModule, NodeEntriesWrapperComponent, NodeHelperService, NodeIconPipe, NodeImagePipe, NodeImageSizePipe, NodePersonNamePipe, NodeRowComponent, NodeTitlePipe, NodeUrlComponent, NodesDragDirective, NodesDragDropService, NodesDragSourceDirective, NodesDropTargetDirective, NodesRightMode, OPEN_URL_MODE, OptionGroup, OptionItem, OptionsHelperDataService, OptionsHelperService, PreferredColor, PropertySlugPipe, RelativeMode, RepoUrlService, RestHelper, Scope, SearchHelperService, SortDropdownComponent, SortEvent, SpinnerComponent, TRANSLATION_LIST, Target, TemporaryStorageService, Toast, ToastDuration, TranslationLoader, TranslationsModule, TranslationsService, UIAnimation, UIConstants, UIService, VCard, VCardNamePipe, WORKFLOW_STATUS_CHECKED, WORKFLOW_STATUS_HASFLAWS, WORKFLOW_STATUS_TO_CHECK, WORKFLOW_STATUS_UNCHECKED, clearDraggedNodes, dragNodesTransferType, getConfigProvider, isNumeric, isTrue, macroTick, matchesShortcutCondition, microTick, notNull, readDraggedNodes, saveDraggedNodes };
|
|
7085
7225
|
//# sourceMappingURL=ngx-edu-sharing-ui.mjs.map
|