ngx-edu-sharing-ui 9.2.0 → 10.0.1
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/assets/scss/mixins.scss +4 -4
- package/assets/scss/variables-scss.scss +5 -1
- package/assets/scss/variables.scss +1 -3
- package/esm2022/lib/actionbar/actionbar.component.mjs +38 -20
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +8 -5
- package/esm2022/lib/directives/border-box-observer.directive.mjs +6 -6
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +5 -5
- package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +4 -4
- package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +4 -4
- package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +4 -4
- package/esm2022/lib/directives/focus-state.directive.mjs +4 -4
- package/esm2022/lib/directives/icon.directive.mjs +26 -9
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +4 -4
- package/esm2022/lib/dropdown/dropdown.component.mjs +25 -12
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +4 -4
- package/esm2022/lib/edu-sharing-ui.module.mjs +5 -5
- package/esm2022/lib/index.mjs +88 -0
- package/esm2022/lib/list-items/format-duration.pipe.mjs +4 -4
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +4 -4
- package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +4 -4
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +4 -4
- package/esm2022/lib/list-items/list-items.module.mjs +5 -5
- package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +4 -4
- package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +4 -4
- package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +5 -5
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +11 -11
- package/esm2022/lib/list-items/list-widget.mjs +4 -4
- package/esm2022/lib/list-items/node-row/node-row.component.mjs +4 -4
- package/esm2022/lib/list-items/node-source.pipe.mjs +4 -4
- package/esm2022/lib/mds/mds-helper.service.mjs +4 -4
- package/esm2022/lib/mds/mds.module.mjs +5 -5
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +5 -5
- package/esm2022/lib/node-entries/entries-model.mjs +1 -1
- package/esm2022/lib/node-entries/list-item-label.pipe.mjs +11 -8
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +9 -25
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +45 -38
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +7 -8
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +5 -5
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +4 -4
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +4 -4
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +51 -56
- package/esm2022/lib/node-entries/node-entries-templates.service.mjs +4 -4
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +60 -22
- package/esm2022/lib/node-entries/node-entries.component.mjs +5 -5
- package/esm2022/lib/node-entries/node-entries.module.mjs +5 -5
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +4 -4
- package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +4 -4
- package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +4 -4
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +11 -9
- package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +4 -4
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +5 -5
- package/esm2022/lib/node-url/node-url.component.mjs +4 -4
- package/esm2022/lib/pipes/file-size.pipe.mjs +9 -8
- package/esm2022/lib/pipes/format-date.pipe.mjs +4 -4
- package/esm2022/lib/pipes/node-icon.pipe.mjs +4 -4
- package/esm2022/lib/pipes/node-image-size.pipe.mjs +4 -4
- package/esm2022/lib/pipes/node-image.pipe.mjs +4 -4
- package/esm2022/lib/pipes/node-license.pipe.mjs +24 -0
- package/esm2022/lib/pipes/node-person-name.pipe.mjs +4 -4
- package/esm2022/lib/pipes/node-title.pipe.mjs +21 -6
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +6 -6
- package/esm2022/lib/pipes/property-slug.pipe.mjs +4 -4
- package/esm2022/lib/pipes/replace-chars.pipe.mjs +4 -4
- package/esm2022/lib/pipes/vcard-name.pipe.mjs +10 -4
- package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +4 -4
- package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
- package/esm2022/lib/services/accessibility.service.mjs +4 -4
- package/esm2022/lib/services/app-container.service.mjs +7 -4
- package/esm2022/lib/services/local-events.service.mjs +11 -4
- package/esm2022/lib/services/node-entries.service.mjs +31 -11
- package/esm2022/lib/services/node-helper.service.mjs +38 -6
- package/esm2022/lib/services/nodes-drag-drop.service.mjs +4 -4
- package/esm2022/lib/services/options-helper-data.service.mjs +7 -7
- package/esm2022/lib/services/render-helper.service.mjs +114 -0
- package/esm2022/lib/services/repo-url.service.mjs +4 -4
- package/esm2022/lib/services/search-helper.service.mjs +52 -0
- package/esm2022/lib/services/temporary-storage.service.mjs +4 -4
- package/esm2022/lib/services/ui.service.mjs +21 -6
- package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +8 -8
- package/esm2022/lib/spinner/spinner.component.mjs +4 -4
- package/esm2022/lib/translations/translation-loader.mjs +54 -16
- package/esm2022/lib/translations/translations.module.mjs +8 -6
- package/esm2022/lib/translations/translations.service.mjs +36 -10
- package/esm2022/lib/types/api-models.mjs +1 -1
- package/esm2022/lib/types/injection-tokens.mjs +10 -1
- package/esm2022/lib/types/list-item.mjs +1 -1
- package/esm2022/lib/types/option-item.mjs +23 -7
- package/esm2022/lib/util/VCard.mjs +2 -2
- package/esm2022/ngx-edu-sharing-ui.mjs +2 -2
- package/esm2022/public-api.mjs +2 -0
- package/fesm2022/ngx-edu-sharing-ui.mjs +1004 -577
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/lib/actionbar/actionbar.component.d.ts +15 -4
- package/lib/common/edu-sharing-ui-common.module.d.ts +17 -16
- package/lib/directives/icon.directive.d.ts +5 -3
- package/lib/dropdown/dropdown.component.d.ts +10 -6
- package/lib/index.d.ts +84 -0
- package/lib/list-items/list-text/list-text.component.d.ts +4 -5
- package/lib/node-entries/entries-model.d.ts +4 -1
- package/lib/node-entries/list-item-label.pipe.d.ts +3 -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 +4 -2
- package/lib/node-entries/node-entries-card-small/node-entries-card-small.component.d.ts +1 -3
- package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +3 -1
- package/lib/node-entries/node-entries-wrapper.component.d.ts +9 -2
- package/lib/node-entries/option-button/option-button.component.d.ts +2 -1
- package/lib/pipes/node-license.pipe.d.ts +14 -0
- package/lib/pipes/node-title.pipe.d.ts +4 -1
- package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
- package/lib/pipes/vcard-name.pipe.d.ts +1 -1
- package/lib/services/abstract/options-helper.service.d.ts +2 -2
- package/lib/services/app-container.service.d.ts +2 -1
- package/lib/services/local-events.service.d.ts +7 -0
- package/lib/services/node-entries.service.d.ts +10 -3
- package/lib/services/node-helper.service.d.ts +11 -2
- package/lib/services/options-helper-data.service.d.ts +7 -7
- package/lib/services/render-helper.service.d.ts +24 -0
- package/lib/services/search-helper.service.d.ts +21 -0
- package/lib/services/ui.service.d.ts +9 -2
- package/lib/sort-dropdown/sort-dropdown.component.d.ts +2 -2
- package/lib/translations/translation-loader.d.ts +3 -1
- package/lib/translations/translations.service.d.ts +6 -2
- package/lib/types/api-models.d.ts +9 -0
- package/lib/types/injection-tokens.d.ts +9 -0
- package/lib/types/list-item.d.ts +2 -2
- package/lib/types/option-item.d.ts +27 -10
- package/package.json +7 -7
- package/public-api.d.ts +1 -0
- package/esm2022/module.mjs +0 -84
- package/module.d.ts +0 -80
|
@@ -3,8 +3,8 @@ import * as i0 from '@angular/core';
|
|
|
3
3
|
import { Injectable, Directive, Optional, Input, Pipe, Component, ViewChild, EventEmitter, Output, HostListener, InjectionToken, Inject, HostBinding, NgModule, ContentChild, signal, ChangeDetectionStrategy, effect, ElementRef, ViewChildren, SkipSelf } from '@angular/core';
|
|
4
4
|
import { isArray as isArray$1 } from 'lodash';
|
|
5
5
|
import * as rxjs from 'rxjs';
|
|
6
|
-
import { BehaviorSubject, combineLatest as combineLatest$1, Observable, ReplaySubject, Subject, merge, from, of, fromEvent, concat } from 'rxjs';
|
|
7
|
-
import { map, distinctUntilChanged, filter, take, switchMap, pairwise, takeUntil, first, delay as delay$1,
|
|
6
|
+
import { BehaviorSubject, combineLatest as combineLatest$1, Observable, ReplaySubject, Subject, merge, from, of, fromEvent, interval, firstValueFrom, forkJoin, concat } from 'rxjs';
|
|
7
|
+
import { map, distinctUntilChanged, filter, take, switchMap, pairwise, takeUntil, first, tap, startWith, delay as delay$1, debounceTime, shareReplay, catchError, reduce } from 'rxjs/operators';
|
|
8
8
|
import * as i1 from '@ngx-translate/core';
|
|
9
9
|
import { TranslateModule, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core';
|
|
10
10
|
import * as i3 from '@angular/common';
|
|
@@ -18,15 +18,15 @@ 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, HOME_REPOSITORY, PROPERTY_FILTER_ALL, 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';
|
|
25
25
|
import { RouterModule } from '@angular/router';
|
|
26
26
|
import * as i2$2 from '@angular/platform-browser';
|
|
27
|
-
import * as
|
|
27
|
+
import * as i8 from '@angular/cdk/drag-drop';
|
|
28
28
|
import { moveItemInArray, CdkDropList, DragDropModule } from '@angular/cdk/drag-drop';
|
|
29
|
-
import * as
|
|
29
|
+
import * as i9 from '@angular/cdk/a11y';
|
|
30
30
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
31
31
|
import * as i2$4 from '@angular/cdk/overlay';
|
|
32
32
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
@@ -38,13 +38,14 @@ import * as i5$2 from '@angular/material/checkbox';
|
|
|
38
38
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
39
39
|
import * as i8$1 from '@angular/material/paginator';
|
|
40
40
|
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
41
|
-
import * as i7
|
|
41
|
+
import * as i7 from '@angular/material/slide-toggle';
|
|
42
42
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
43
|
-
import * as
|
|
43
|
+
import * as i24 from '@angular/material/sort';
|
|
44
44
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
45
|
-
import * as
|
|
45
|
+
import * as i22 from '@angular/material/table';
|
|
46
46
|
import { MatTableModule } from '@angular/material/table';
|
|
47
47
|
import { DataSource, SelectionModel } from '@angular/cdk/collections';
|
|
48
|
+
import { RSApiConfiguration } from 'ngx-rendering-service-api';
|
|
48
49
|
import { HttpClient } from '@angular/common/http';
|
|
49
50
|
|
|
50
51
|
class UIAnimation {
|
|
@@ -387,10 +388,25 @@ class UIService {
|
|
|
387
388
|
}
|
|
388
389
|
return optionsFiltered;
|
|
389
390
|
}
|
|
390
|
-
|
|
391
|
+
/**
|
|
392
|
+
* helper that updates the "isEnabled" flag on all options for the given, selected node
|
|
393
|
+
* can be used by dropdown or action menus to update the state for the current element
|
|
394
|
+
* @param options
|
|
395
|
+
*/
|
|
396
|
+
async updateOptionEnabledState(options, objects = null) {
|
|
397
|
+
options.value?.forEach((o) => {
|
|
398
|
+
o.isEnabled = !o.customEnabledCallback;
|
|
399
|
+
void o.enabledCallback(objects).then((result) => {
|
|
400
|
+
o.isEnabled = result;
|
|
401
|
+
options.next(options.value);
|
|
402
|
+
});
|
|
403
|
+
});
|
|
404
|
+
options.next(options.value);
|
|
405
|
+
}
|
|
406
|
+
filterToggleOptions(options, toggle, togglePosition = 'after') {
|
|
391
407
|
let result = [];
|
|
392
408
|
for (let option of options) {
|
|
393
|
-
if (option.isToggle
|
|
409
|
+
if (option.isToggle === toggle && (!toggle || togglePosition === option.togglePosition))
|
|
394
410
|
result.push(option);
|
|
395
411
|
}
|
|
396
412
|
return result;
|
|
@@ -440,10 +456,10 @@ class UIService {
|
|
|
440
456
|
}, delay);
|
|
441
457
|
return component;
|
|
442
458
|
}
|
|
443
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
444
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
459
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UIService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
460
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UIService, providedIn: 'root' }); }
|
|
445
461
|
}
|
|
446
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
462
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UIService, decorators: [{
|
|
447
463
|
type: Injectable,
|
|
448
464
|
args: [{ providedIn: 'root' }]
|
|
449
465
|
}], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.NgZone }] });
|
|
@@ -500,9 +516,10 @@ class IconDirective {
|
|
|
500
516
|
set esIcon(id) {
|
|
501
517
|
this.originalId$.next(id);
|
|
502
518
|
}
|
|
503
|
-
constructor(element, translate, config) {
|
|
519
|
+
constructor(element, translate, renderer, config) {
|
|
504
520
|
this.element = element;
|
|
505
521
|
this.translate = translate;
|
|
522
|
+
this.renderer = renderer;
|
|
506
523
|
this.config = config;
|
|
507
524
|
this.originalId$ = new BehaviorSubject(null);
|
|
508
525
|
this.isReady = false;
|
|
@@ -526,6 +543,19 @@ class IconDirective {
|
|
|
526
543
|
setIcon(id, iconsConfig) {
|
|
527
544
|
if (this._id) {
|
|
528
545
|
this.element.nativeElement.classList.remove('edu-icons', 'custom-icons', 'material-icons');
|
|
546
|
+
if (this.svg) {
|
|
547
|
+
this.renderer.removeChild(this.element.nativeElement, this.svg);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
if (id.startsWith('svg-')) {
|
|
551
|
+
this.svg = document.createElement('img');
|
|
552
|
+
this.svg.classList.add('svg-icons');
|
|
553
|
+
this.svg.src = 'assets/images/icons/' + id.substring(4);
|
|
554
|
+
this.renderer.appendChild(this.element.nativeElement, this.svg);
|
|
555
|
+
if (this._aria) {
|
|
556
|
+
this.updateAria();
|
|
557
|
+
}
|
|
558
|
+
return;
|
|
529
559
|
}
|
|
530
560
|
let customClass = null;
|
|
531
561
|
const mapping = iconsConfig?.filter((i) => i.original === id);
|
|
@@ -540,11 +570,11 @@ class IconDirective {
|
|
|
540
570
|
let cssClass;
|
|
541
571
|
if (id?.startsWith('edu-') && !customClass) {
|
|
542
572
|
cssClass = 'edu-icons';
|
|
543
|
-
id = id.
|
|
573
|
+
id = id.substring(4);
|
|
544
574
|
}
|
|
545
575
|
else if (id?.startsWith('custom-') || customClass) {
|
|
546
576
|
cssClass = 'custom-icons';
|
|
547
|
-
id = id.
|
|
577
|
+
id = id.substring(7);
|
|
548
578
|
}
|
|
549
579
|
else {
|
|
550
580
|
cssClass = 'material-icons';
|
|
@@ -568,6 +598,9 @@ class IconDirective {
|
|
|
568
598
|
}
|
|
569
599
|
}
|
|
570
600
|
setAltText(altText) {
|
|
601
|
+
if (this.svg) {
|
|
602
|
+
this.svg.alt = altText;
|
|
603
|
+
}
|
|
571
604
|
if (altText && !this.altTextSpan) {
|
|
572
605
|
this.insertAltTextSpan();
|
|
573
606
|
}
|
|
@@ -580,15 +613,15 @@ class IconDirective {
|
|
|
580
613
|
this.altTextSpan.classList.add('cdk-visually-hidden');
|
|
581
614
|
this.element.nativeElement.insertAdjacentElement('afterend', this.altTextSpan);
|
|
582
615
|
}
|
|
583
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
584
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
616
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IconDirective, deps: [{ token: i0.ElementRef }, { token: i1.TranslateService }, { token: i0.Renderer2 }, { token: i2.ConfigService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
617
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: { altText: "altText", aria: "aria", esIcon: "esIcon" }, ngImport: i0 }); }
|
|
585
618
|
}
|
|
586
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
619
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IconDirective, decorators: [{
|
|
587
620
|
type: Directive,
|
|
588
621
|
args: [{
|
|
589
622
|
selector: 'i[esIcon], i.material-icons',
|
|
590
623
|
}]
|
|
591
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TranslateService }, { type: i2.ConfigService, decorators: [{
|
|
624
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.TranslateService }, { type: i0.Renderer2 }, { type: i2.ConfigService, decorators: [{
|
|
592
625
|
type: Optional
|
|
593
626
|
}] }], propDecorators: { altText: [{
|
|
594
627
|
type: Input
|
|
@@ -602,8 +635,8 @@ class OptionTooltipPipe {
|
|
|
602
635
|
constructor(translate) {
|
|
603
636
|
this.translate = translate;
|
|
604
637
|
}
|
|
605
|
-
transform(option, args = null) {
|
|
606
|
-
return (this.translate.
|
|
638
|
+
async transform(option, args = null) {
|
|
639
|
+
return ((await this.translate.get(option.name).toPromise()) +
|
|
607
640
|
(option.keyboardShortcut ? ' (' + this.getKeyInfo(option) + ')' : ''));
|
|
608
641
|
}
|
|
609
642
|
getKeyInfo(option) {
|
|
@@ -620,10 +653,10 @@ class OptionTooltipPipe {
|
|
|
620
653
|
return ((modifiers.length ? modifiers.join(' + ') + ' + ' : '') +
|
|
621
654
|
option.keyboardShortcut.keyCode.replace('Key', ''));
|
|
622
655
|
}
|
|
623
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
624
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
656
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionTooltipPipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
657
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: OptionTooltipPipe, name: "optionTooltip" }); }
|
|
625
658
|
}
|
|
626
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
659
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionTooltipPipe, decorators: [{
|
|
627
660
|
type: Pipe,
|
|
628
661
|
args: [{ name: 'optionTooltip' }]
|
|
629
662
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
@@ -646,10 +679,10 @@ class ReplaceCharsPipe {
|
|
|
646
679
|
constructor(translate) {
|
|
647
680
|
this.translate = translate;
|
|
648
681
|
}
|
|
649
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
650
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
682
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ReplaceCharsPipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
683
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ReplaceCharsPipe, name: "replaceChars" }); }
|
|
651
684
|
}
|
|
652
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ReplaceCharsPipe, decorators: [{
|
|
653
686
|
type: Pipe,
|
|
654
687
|
args: [{ name: 'replaceChars' }]
|
|
655
688
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
@@ -659,26 +692,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
659
692
|
* but can also be used standalone.
|
|
660
693
|
*/
|
|
661
694
|
class DropdownComponent {
|
|
662
|
-
set options(options) {
|
|
663
|
-
this._options = this.ui.filterValidOptions(Helper.deepCopyArray(options));
|
|
664
|
-
}
|
|
665
695
|
constructor(ui) {
|
|
666
696
|
this.ui = ui;
|
|
667
697
|
this.position = 'left';
|
|
698
|
+
this.options$ = new BehaviorSubject([]);
|
|
699
|
+
/**
|
|
700
|
+
* The objects that should be returned via the option's callback.
|
|
701
|
+
*
|
|
702
|
+
* Can be null
|
|
703
|
+
*/
|
|
704
|
+
this.callbackObjects = undefined;
|
|
668
705
|
/**
|
|
669
706
|
* Should disabled ("greyed out") options be shown or hidden?
|
|
670
707
|
*/
|
|
671
708
|
this.showDisabled = true;
|
|
672
709
|
}
|
|
710
|
+
ngOnChanges(changes) {
|
|
711
|
+
if (changes == null || changes?.options || changes?.callbackObjects) {
|
|
712
|
+
this.options$.next(this.ui.filterValidOptions(Helper.deepCopyArray(this.options)));
|
|
713
|
+
if (this.callbackObjects !== undefined) {
|
|
714
|
+
void this.ui.updateOptionEnabledState(this.options$, this.callbackObjects);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
}
|
|
673
718
|
click(option) {
|
|
674
719
|
if (!option.isEnabled) {
|
|
675
720
|
return;
|
|
676
721
|
}
|
|
677
|
-
setTimeout(() => option.callback(this.
|
|
722
|
+
setTimeout(() => option.callback(null, this.callbackObjects));
|
|
678
723
|
}
|
|
679
724
|
isNewGroup(i) {
|
|
680
725
|
if (i > 0) {
|
|
681
|
-
return this.
|
|
726
|
+
return this.options$.value[i].group !== this.options$.value[i - 1].group;
|
|
682
727
|
}
|
|
683
728
|
return false;
|
|
684
729
|
}
|
|
@@ -687,14 +732,14 @@ class DropdownComponent {
|
|
|
687
732
|
// We can only open the dropdown menu, when there is at least one enabled option. Even when
|
|
688
733
|
// there are options with `showDisabled: true`, showing a menu with no selectable option
|
|
689
734
|
// causes a11y issues.
|
|
690
|
-
return this.
|
|
735
|
+
return this.options$.value?.some((o) => o.isEnabled);
|
|
691
736
|
}
|
|
692
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
693
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
737
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DropdownComponent, deps: [{ token: UIService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
738
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: DropdownComponent, selector: "es-dropdown", inputs: { position: "position", options: "options", callbackObjects: "callbackObjects", 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: 600px){::ng-deep .mat-dropdown-menu.cdk-overlay-backdrop{background:#000c}::ng-deep .mat-dropdown-menu.mat-mdc-menu-panel{position:fixed;bottom:0;left:0;max-width:100%;width:100%;border-radius:0;max-height:calc(100vh - 150px);overflow-y:auto}}\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
739
|
}
|
|
695
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
740
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DropdownComponent, decorators: [{
|
|
696
741
|
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
|
|
742
|
+
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: 600px){::ng-deep .mat-dropdown-menu.cdk-overlay-backdrop{background:#000c}::ng-deep .mat-dropdown-menu.mat-mdc-menu-panel{position:fixed;bottom:0;left:0;max-width:100%;width:100%;border-radius:0;max-height:calc(100vh - 150px);overflow-y:auto}}\n"] }]
|
|
698
743
|
}], ctorParameters: () => [{ type: UIService }], propDecorators: { menu: [{
|
|
699
744
|
type: ViewChild,
|
|
700
745
|
args: ['dropdown', { static: true }]
|
|
@@ -705,7 +750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
705
750
|
type: Input
|
|
706
751
|
}], options: [{
|
|
707
752
|
type: Input
|
|
708
|
-
}],
|
|
753
|
+
}], callbackObjects: [{
|
|
709
754
|
type: Input
|
|
710
755
|
}], showDisabled: [{
|
|
711
756
|
type: Input
|
|
@@ -768,26 +813,38 @@ class ActionbarComponent {
|
|
|
768
813
|
* Should disabled ("greyed out") options be shown or hidden?
|
|
769
814
|
*/
|
|
770
815
|
this.showDisabled = true;
|
|
816
|
+
/**
|
|
817
|
+
* the position of the mat tooltips
|
|
818
|
+
*/
|
|
819
|
+
this.tooltipPosition = 'below';
|
|
820
|
+
/**
|
|
821
|
+
* breakpoint width at which point the mobile display count is used
|
|
822
|
+
*/
|
|
823
|
+
this.mobileBreakpoint = UIConstants.MOBILE_WIDTH;
|
|
771
824
|
this.optionsIn = [];
|
|
772
|
-
this.optionsAlways = [];
|
|
773
|
-
this.optionsMenu = [];
|
|
774
|
-
this.
|
|
825
|
+
this.optionsAlways$ = new BehaviorSubject([]);
|
|
826
|
+
this.optionsMenu$ = new BehaviorSubject([]);
|
|
827
|
+
this.optionsToggleBefore = [];
|
|
828
|
+
this.optionsToggleAfter = [];
|
|
775
829
|
}
|
|
776
830
|
prepareOptions(options) {
|
|
777
831
|
options = this.uiService.filterValidOptions(Helper.deepCopyArray(options));
|
|
778
832
|
if (options == null) {
|
|
779
|
-
this.optionsAlways
|
|
780
|
-
this.optionsMenu
|
|
833
|
+
this.optionsAlways$.next([]);
|
|
834
|
+
this.optionsMenu$.next([]);
|
|
781
835
|
return;
|
|
782
836
|
}
|
|
783
|
-
this.
|
|
784
|
-
this.
|
|
785
|
-
|
|
786
|
-
|
|
837
|
+
this.optionsToggleBefore = this.uiService.filterToggleOptions(options, true, 'before');
|
|
838
|
+
this.optionsToggleAfter = this.uiService.filterToggleOptions(options, true, 'after');
|
|
839
|
+
this.optionsAlways$.next(this.getActionOptions(this.uiService.filterToggleOptions(options, false)).slice(0, this.getNumberOptions()));
|
|
840
|
+
if (!this.optionsAlways$.value.length) {
|
|
841
|
+
this.optionsAlways$.next(this.uiService
|
|
787
842
|
.filterToggleOptions(options, false)
|
|
788
|
-
.slice(0, this.getNumberOptions());
|
|
843
|
+
.slice(0, this.getNumberOptions()));
|
|
789
844
|
}
|
|
790
|
-
this.optionsMenu
|
|
845
|
+
this.optionsMenu$.next(this.hideActionOptions(this.uiService.filterToggleOptions(options, false), this.optionsAlways$.value));
|
|
846
|
+
void this.uiService.updateOptionEnabledState(this.optionsAlways$);
|
|
847
|
+
void this.uiService.updateOptionEnabledState(this.optionsMenu$);
|
|
791
848
|
// may causes weird looking
|
|
792
849
|
/*if(this.optionsMenu.length<2) {
|
|
793
850
|
this.optionsAlways = this.optionsAlways.concat(this.optionsMenu);
|
|
@@ -795,7 +852,7 @@ class ActionbarComponent {
|
|
|
795
852
|
}*/
|
|
796
853
|
}
|
|
797
854
|
getNumberOptions() {
|
|
798
|
-
if (window.innerWidth <
|
|
855
|
+
if (window.innerWidth < this.mobileBreakpoint) {
|
|
799
856
|
return this.numberOfAlwaysVisibleOptionsMobile;
|
|
800
857
|
}
|
|
801
858
|
return this.numberOfAlwaysVisibleOptions;
|
|
@@ -842,17 +899,17 @@ class ActionbarComponent {
|
|
|
842
899
|
return filtered;
|
|
843
900
|
}
|
|
844
901
|
canShowDropdown() {
|
|
845
|
-
if (!this.optionsMenu.length) {
|
|
902
|
+
if (!this.optionsMenu$.value.length) {
|
|
846
903
|
return false;
|
|
847
904
|
}
|
|
848
|
-
return this.optionsMenu.filter((o) => o.isEnabled).length > 0;
|
|
905
|
+
return this.optionsMenu$.value.filter((o) => o.isEnabled).length > 0;
|
|
849
906
|
}
|
|
850
907
|
shouldHighlight(optionIndex, option) {
|
|
851
908
|
switch (this.highlight) {
|
|
852
909
|
case 'first':
|
|
853
910
|
return optionIndex === 0;
|
|
854
911
|
case 'last':
|
|
855
|
-
return optionIndex === this.optionsAlways.length - 1;
|
|
912
|
+
return optionIndex === this.optionsAlways$.value.length - 1;
|
|
856
913
|
case 'manual':
|
|
857
914
|
return option.isPrimary;
|
|
858
915
|
}
|
|
@@ -860,12 +917,12 @@ class ActionbarComponent {
|
|
|
860
917
|
ngOnChanges(changes) {
|
|
861
918
|
this.invalidate();
|
|
862
919
|
}
|
|
863
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
864
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
920
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionbarComponent, deps: [{ token: UIService }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
921
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", 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 <div\n *ngIf=\"optionsToggleBefore.length\"\n class=\"actionToggle before\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleBefore }\"\n ></ng-container>\n </div>\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=\"optionsToggleAfter.length\"\n class=\"actionToggle after\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleAfter }\"\n ></ng-container>\n </div>\n</div>\n<ng-template #toggle let-optionsToggle=\"optionsToggle\">\n <ng-container *ngFor=\"let option of optionsToggle\">\n <button\n *ngIf=\"option.isToggleVisible\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </ng-container>\n</ng-template>\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}.actionToggle.after.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.actionToggle.before.actionToggleDivider{padding-right:10px;margin-right:10px;border-right: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: 1100px){.action-always-caption{display:none}.action-always{padding:0 1rem}::ng-deep .action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button ::ng-deep .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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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", "callbackObjects", "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" }, { kind: "pipe", type: ReplaceCharsPipe, name: "replaceChars" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
|
|
865
922
|
}
|
|
866
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
923
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionbarComponent, decorators: [{
|
|
867
924
|
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=\"
|
|
925
|
+
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 <div\n *ngIf=\"optionsToggleBefore.length\"\n class=\"actionToggle before\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleBefore }\"\n ></ng-container>\n </div>\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=\"optionsToggleAfter.length\"\n class=\"actionToggle after\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleAfter }\"\n ></ng-container>\n </div>\n</div>\n<ng-template #toggle let-optionsToggle=\"optionsToggle\">\n <ng-container *ngFor=\"let option of optionsToggle\">\n <button\n *ngIf=\"option.isToggleVisible\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </ng-container>\n</ng-template>\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}.actionToggle.after.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.actionToggle.before.actionToggleDivider{padding-right:10px;margin-right:10px;border-right: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: 1100px){.action-always-caption{display:none}.action-always{padding:0 1rem}::ng-deep .action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button ::ng-deep .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"] }]
|
|
869
926
|
}], ctorParameters: () => [{ type: UIService }, { type: i1.TranslateService }], propDecorators: { numberOfAlwaysVisibleOptions: [{
|
|
870
927
|
type: Input
|
|
871
928
|
}], numberOfAlwaysVisibleOptionsMobile: [{
|
|
@@ -882,8 +939,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
882
939
|
type: Input
|
|
883
940
|
}], showDisabled: [{
|
|
884
941
|
type: Input
|
|
942
|
+
}], tooltipPosition: [{
|
|
943
|
+
type: Input
|
|
885
944
|
}], options: [{
|
|
886
945
|
type: Input
|
|
946
|
+
}], mobileBreakpoint: [{
|
|
947
|
+
type: Input
|
|
887
948
|
}] } });
|
|
888
949
|
|
|
889
950
|
/**
|
|
@@ -912,7 +973,7 @@ class BorderBoxObserverDirective {
|
|
|
912
973
|
this.registerEventEmitter();
|
|
913
974
|
this.registerObserver();
|
|
914
975
|
// Can cause changed-after-checked errors if done synchronously.
|
|
915
|
-
Promise.resolve().then(() => this.setInitialValue());
|
|
976
|
+
void Promise.resolve().then(() => this.setInitialValue());
|
|
916
977
|
}
|
|
917
978
|
ngOnDestroy() {
|
|
918
979
|
this.observer.disconnect();
|
|
@@ -939,10 +1000,10 @@ class BorderBoxObserverDirective {
|
|
|
939
1000
|
height: boundingClientRect.height,
|
|
940
1001
|
});
|
|
941
1002
|
}
|
|
942
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
943
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
1003
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BorderBoxObserverDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1004
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: BorderBoxObserverDirective, selector: "[esBorderBoxObserver]", outputs: { borderBoxEmitter: "esBorderBoxObserver" }, exportAs: ["borderBoxObserver"], ngImport: i0 }); }
|
|
944
1005
|
}
|
|
945
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1006
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BorderBoxObserverDirective, decorators: [{
|
|
946
1007
|
type: Directive,
|
|
947
1008
|
args: [{
|
|
948
1009
|
selector: '[esBorderBoxObserver]',
|
|
@@ -990,10 +1051,10 @@ class CheckTextOverflowDirective {
|
|
|
990
1051
|
return this.elementRef.nativeElement;
|
|
991
1052
|
}
|
|
992
1053
|
}
|
|
993
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
994
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
1054
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CheckTextOverflowDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1055
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: CheckTextOverflowDirective, selector: "[esCheckTextOverflow]", inputs: { selector: ["esCheckTextOverflow", "selector"] }, exportAs: ["esCheckTextOverflow"], ngImport: i0 }); }
|
|
995
1056
|
}
|
|
996
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1057
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: CheckTextOverflowDirective, decorators: [{
|
|
997
1058
|
type: Directive,
|
|
998
1059
|
args: [{
|
|
999
1060
|
selector: '[esCheckTextOverflow]',
|
|
@@ -1012,7 +1073,7 @@ function delay(f) {
|
|
|
1012
1073
|
const newValue = f.apply(this);
|
|
1013
1074
|
if (newValue !== previousValue) {
|
|
1014
1075
|
updating = true;
|
|
1015
|
-
Promise.resolve().then(() => {
|
|
1076
|
+
void Promise.resolve().then(() => {
|
|
1016
1077
|
previousValue = newValue;
|
|
1017
1078
|
updating = false;
|
|
1018
1079
|
});
|
|
@@ -1041,10 +1102,10 @@ class FocusStateDirective {
|
|
|
1041
1102
|
onMouseOut() {
|
|
1042
1103
|
this.hovering = false;
|
|
1043
1104
|
}
|
|
1044
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1045
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
1105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FocusStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1106
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: FocusStateDirective, selector: "[esFocusState]", host: { listeners: { "focusin": "onFocusIn()", "focusout": "onFocusOut()", "mouseenter": "onMouseOver()", "mouseleave": "onMouseOut()" } }, exportAs: ["esFocusState"], ngImport: i0 }); }
|
|
1046
1107
|
}
|
|
1047
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FocusStateDirective, decorators: [{
|
|
1048
1109
|
type: Directive,
|
|
1049
1110
|
args: [{
|
|
1050
1111
|
selector: '[esFocusState]',
|
|
@@ -1073,6 +1134,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
1073
1134
|
class AppContainerService {
|
|
1074
1135
|
constructor(ngZone) {
|
|
1075
1136
|
this.ngZone = ngZone;
|
|
1137
|
+
this.scrollContainerChange = new Subject();
|
|
1076
1138
|
}
|
|
1077
1139
|
init(appElement) {
|
|
1078
1140
|
this.registerScrollContainer(appElement);
|
|
@@ -1106,6 +1168,7 @@ class AppContainerService {
|
|
|
1106
1168
|
}
|
|
1107
1169
|
registerScrollContainer(appElement) {
|
|
1108
1170
|
this.scrollContainer = this.getNearestScrollingAncestor(appElement);
|
|
1171
|
+
this.scrollContainerChange.next(this.scrollContainer);
|
|
1109
1172
|
}
|
|
1110
1173
|
getNearestScrollingAncestor(element) {
|
|
1111
1174
|
while (element.parentElement) {
|
|
@@ -1117,10 +1180,10 @@ class AppContainerService {
|
|
|
1117
1180
|
}
|
|
1118
1181
|
return null;
|
|
1119
1182
|
}
|
|
1120
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1121
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
1183
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AppContainerService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1184
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AppContainerService, providedIn: 'root' }); }
|
|
1122
1185
|
}
|
|
1123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AppContainerService, decorators: [{
|
|
1124
1187
|
type: Injectable,
|
|
1125
1188
|
args: [{
|
|
1126
1189
|
providedIn: 'root',
|
|
@@ -1190,10 +1253,10 @@ class InfiniteScrollDirective {
|
|
|
1190
1253
|
emitScrolled() {
|
|
1191
1254
|
this.zone.run(() => this.scrolled.emit());
|
|
1192
1255
|
}
|
|
1193
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1194
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
1256
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: InfiniteScrollDirective, deps: [{ token: AppContainerService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1257
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: InfiniteScrollDirective, selector: "[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: { infiniteScrollDistance: "infiniteScrollDistance", infiniteScrollThrottle: "infiniteScrollThrottle", scrollWindow: "scrollWindow" }, outputs: { scrolled: "scrolled" }, ngImport: i0 }); }
|
|
1195
1258
|
}
|
|
1196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: InfiniteScrollDirective, decorators: [{
|
|
1197
1260
|
type: Directive,
|
|
1198
1261
|
args: [{
|
|
1199
1262
|
selector: '[esInfiniteScroll], [infinite-scroll], [data-infinite-scroll]',
|
|
@@ -1240,6 +1303,15 @@ const WORKFLOW_STATUS_CHECKED = {
|
|
|
1240
1303
|
* is the case when it is embedded as a web component into another website.
|
|
1241
1304
|
*/
|
|
1242
1305
|
const ASSETS_BASE_PATH = new InjectionToken('ASSETS_BASE_PATH');
|
|
1306
|
+
/**
|
|
1307
|
+
* custom additional uris to fetch language files from
|
|
1308
|
+
*
|
|
1309
|
+
* Might be used if additional angular modules require language data
|
|
1310
|
+
*
|
|
1311
|
+
* Example
|
|
1312
|
+
*{provide: ADDITIONAL_I18N_PROVIDER, useValue: (lang: string) => { return ['/edu-sharing/assets/i18n/myI18n/' + lang + '.json']}},
|
|
1313
|
+
*/
|
|
1314
|
+
const ADDITIONAL_I18N_PROVIDER = new InjectionToken('ADDITIONAL_I18N_PROVIDER');
|
|
1243
1315
|
|
|
1244
1316
|
const EDU_SHARING_UI_CONFIG = new InjectionToken('EDU_SHARING_API_CONFIG');
|
|
1245
1317
|
class EduSharingUiConfiguration {
|
|
@@ -1253,10 +1325,10 @@ class EduSharingUiConfiguration {
|
|
|
1253
1325
|
static create(params = {}) {
|
|
1254
1326
|
return { ...new EduSharingUiConfiguration(), ...params };
|
|
1255
1327
|
}
|
|
1256
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1257
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
1328
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiConfiguration, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1329
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiConfiguration, providedIn: 'root' }); }
|
|
1258
1330
|
}
|
|
1259
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1331
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiConfiguration, decorators: [{
|
|
1260
1332
|
type: Injectable,
|
|
1261
1333
|
args: [{
|
|
1262
1334
|
providedIn: 'root',
|
|
@@ -1322,10 +1394,10 @@ class RepoUrlService {
|
|
|
1322
1394
|
urlObject.protocol = window.location.protocol;
|
|
1323
1395
|
return urlObject.href;
|
|
1324
1396
|
}
|
|
1325
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1326
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
1397
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepoUrlService, deps: [{ token: i2.NetworkService }, { token: EduSharingUiConfiguration }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1398
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepoUrlService, providedIn: 'root' }); }
|
|
1327
1399
|
}
|
|
1328
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1400
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepoUrlService, decorators: [{
|
|
1329
1401
|
type: Injectable,
|
|
1330
1402
|
args: [{
|
|
1331
1403
|
providedIn: 'root',
|
|
@@ -1412,7 +1484,7 @@ class NodeHelperService {
|
|
|
1412
1484
|
if (icon == 'none' && !useNoneAsFallback)
|
|
1413
1485
|
return null;
|
|
1414
1486
|
const result = this.apiHelpersService.getServerUrl() + '/../ccimages/licenses/' + icon + '.svg';
|
|
1415
|
-
return
|
|
1487
|
+
return result;
|
|
1416
1488
|
}
|
|
1417
1489
|
/**
|
|
1418
1490
|
* Return a translated name of a license name for a node
|
|
@@ -1509,6 +1581,11 @@ class NodeHelperService {
|
|
|
1509
1581
|
target.properties = source.properties;
|
|
1510
1582
|
target.name = source.name;
|
|
1511
1583
|
target.title = source.title;
|
|
1584
|
+
target.iconURL = source.iconURL;
|
|
1585
|
+
target.preview = source.preview;
|
|
1586
|
+
target.authorityName = source.authorityName;
|
|
1587
|
+
target.profile = source.profile;
|
|
1588
|
+
target.status = source.status;
|
|
1512
1589
|
}
|
|
1513
1590
|
isNodeCollection(node) {
|
|
1514
1591
|
return node.aspects?.includes(RestConstants.CCM_ASPECT_COLLECTION) || !!node.collection;
|
|
@@ -1522,9 +1599,23 @@ class NodeHelperService {
|
|
|
1522
1599
|
}
|
|
1523
1600
|
let data = null;
|
|
1524
1601
|
if (this.isNodeCollection(node)) {
|
|
1602
|
+
const scope = node.collection?.scope;
|
|
1603
|
+
const type = node.collection?.type;
|
|
1604
|
+
const queryParams = {
|
|
1605
|
+
id: node.ref.id,
|
|
1606
|
+
};
|
|
1607
|
+
if (type === RestConstants.COLLECTIONTYPE_EDITORIAL) {
|
|
1608
|
+
queryParams.scope = RestConstants.COLLECTIONSCOPE_TYPE_EDITORIAL;
|
|
1609
|
+
}
|
|
1610
|
+
else if (type === RestConstants.COLLECTIONTYPE_MEDIA_CENTER) {
|
|
1611
|
+
queryParams.scope = RestConstants.COLLECTIONSCOPE_TYPE_MEDIA_CENTER;
|
|
1612
|
+
}
|
|
1613
|
+
else if (scope === RestConstants.COLLECTIONSCOPE_CUSTOM_PUBLIC) {
|
|
1614
|
+
queryParams.scope = RestConstants.COLLECTIONSCOPE_ALL;
|
|
1615
|
+
}
|
|
1525
1616
|
data = {
|
|
1526
1617
|
routerLink: UIConstants.ROUTER_PREFIX + 'collections',
|
|
1527
|
-
queryParams
|
|
1618
|
+
queryParams,
|
|
1528
1619
|
};
|
|
1529
1620
|
}
|
|
1530
1621
|
else {
|
|
@@ -1564,10 +1655,23 @@ class NodeHelperService {
|
|
|
1564
1655
|
data.queryParams.redirectFromSSO = null;
|
|
1565
1656
|
return data.queryParams;
|
|
1566
1657
|
}
|
|
1567
|
-
|
|
1568
|
-
|
|
1658
|
+
/**
|
|
1659
|
+
* Returns true if this node is a copy of another node, just used as a publish target.
|
|
1660
|
+
*/
|
|
1661
|
+
isNodePublishedCopy(o) {
|
|
1662
|
+
return !!o.properties?.[RestConstants.CCM_PROP_PUBLISHED_ORIGINAL]?.[0];
|
|
1663
|
+
}
|
|
1664
|
+
/**
|
|
1665
|
+
* returns true if this is a revoked node
|
|
1666
|
+
* (published copy that has been revoked)
|
|
1667
|
+
*/
|
|
1668
|
+
isNodeRevoked(node) {
|
|
1669
|
+
return node?.aspects?.includes(RestConstants.CCM_ASPECT_REVOKED);
|
|
1670
|
+
}
|
|
1671
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeHelperService, deps: [{ token: i1.TranslateService }, { token: i2.ApiHelpersService }, { token: i2.NetworkService }, { token: i2.ConfigService }, { token: RepoUrlService }, { token: ASSETS_BASE_PATH, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1672
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeHelperService, providedIn: 'root' }); }
|
|
1569
1673
|
}
|
|
1570
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1674
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeHelperService, decorators: [{
|
|
1571
1675
|
type: Injectable,
|
|
1572
1676
|
args: [{
|
|
1573
1677
|
providedIn: 'root',
|
|
@@ -1648,10 +1752,10 @@ class NodeUrlComponent {
|
|
|
1648
1752
|
}
|
|
1649
1753
|
return false;
|
|
1650
1754
|
}
|
|
1651
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1652
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
1755
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeUrlComponent, deps: [{ token: NodeHelperService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1756
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeUrlComponent, selector: "es-node-url", inputs: { node: "node", nodes: "nodes", target: "target", scope: "scope", queryParams: "queryParams", mode: "mode", disabled: "disabled", alwaysRipple: "alwaysRipple", ariaDescribedby: ["aria-describedby", "ariaDescribedby"], ariaLabel: ["aria-label", "ariaLabel"] }, outputs: { buttonClick: "buttonClick" }, viewQueries: [{ propertyName: "link", first: true, predicate: ["link"], descendants: true }], ngImport: i0, template: "<ng-template #content><ng-content></ng-content></ng-template>\n<ng-container *ngIf=\"mode === 'link'\">\n <a\n *ngIf=\"!disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"isNested\"\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [target]=\"target\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n cdkMonitorElementFocus\n [attr.aria-label]=\"ariaLabel ? node.name : null\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </a>\n <!-- We use `div`s instead of `span`s here because the legacy `ListTable` component will insert\n `div` elements into this component's content. However, this will lead to invalid HTML for \"button\"\n mode. So really, users of this component should only insert flow content. -->\n <div *ngIf=\"disabled && !alwaysRipple\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <div *ngIf=\"disabled && alwaysRipple\" matRipple matRippleColor=\"primary\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"mode === 'wrapper'\">\n <div\n class=\"node-url-wrapper\"\n #wrapper\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"clickWrapper($event)\"\n (auxclick)=\"clickWrapper($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <!-- An invisible link that will by clicked programmatically by `clickWrapper()`. -->\n <a\n #link\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"cdk-visually-hidden\"\n ></a>\n</ng-container>\n<ng-container *ngIf=\"mode === 'button'\">\n <button\n [disabled]=\"disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"buttonClick.emit($event)\"\n cdkMonitorElementFocus\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </button>\n</ng-container>\n", styles: [":host{position:relative;display:flex}:host>*{flex-grow:1}:host>a{text-decoration:none}.cdk-keyboard-focused{outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}button{background-color:unset;border:unset;padding:unset;text-align:unset}div.node-url-wrapper{cursor:pointer}\n"], dependencies: [{ 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: i3$2.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: i2$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
1653
1757
|
}
|
|
1654
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1758
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeUrlComponent, decorators: [{
|
|
1655
1759
|
type: Component,
|
|
1656
1760
|
args: [{ selector: NODE_URL_TAG_NAME, template: "<ng-template #content><ng-content></ng-content></ng-template>\n<ng-container *ngIf=\"mode === 'link'\">\n <a\n *ngIf=\"!disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"isNested\"\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [target]=\"target\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n cdkMonitorElementFocus\n [attr.aria-label]=\"ariaLabel ? node.name : null\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </a>\n <!-- We use `div`s instead of `span`s here because the legacy `ListTable` component will insert\n `div` elements into this component's content. However, this will lead to invalid HTML for \"button\"\n mode. So really, users of this component should only insert flow content. -->\n <div *ngIf=\"disabled && !alwaysRipple\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <div *ngIf=\"disabled && alwaysRipple\" matRipple matRippleColor=\"primary\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"mode === 'wrapper'\">\n <div\n class=\"node-url-wrapper\"\n #wrapper\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"clickWrapper($event)\"\n (auxclick)=\"clickWrapper($event)\"\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <!-- An invisible link that will by clicked programmatically by `clickWrapper()`. -->\n <a\n #link\n [routerLink]=\"get('routerLink')\"\n [state]=\"getState()\"\n [queryParams]=\"get('queryParams')\"\n queryParamsHandling=\"merge\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n class=\"cdk-visually-hidden\"\n ></a>\n</ng-container>\n<ng-container *ngIf=\"mode === 'button'\">\n <button\n [disabled]=\"disabled\"\n #link\n matRipple\n matRippleColor=\"primary\"\n [matRippleDisabled]=\"disabled && !alwaysRipple\"\n (click)=\"buttonClick.emit($event)\"\n cdkMonitorElementFocus\n >\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </button>\n</ng-container>\n", styles: [":host{position:relative;display:flex}:host>*{flex-grow:1}:host>a{text-decoration:none}.cdk-keyboard-focused{outline:none;outline:var(--focusWidth) solid var(--palette-primary-300);outline-offset:2px}button{background-color:unset;border:unset;padding:unset;text-align:unset}div.node-url-wrapper{cursor:pointer}\n"] }]
|
|
1657
1761
|
}], ctorParameters: () => [{ type: NodeHelperService }, { type: i0.ElementRef }], propDecorators: { link: [{
|
|
@@ -1720,15 +1824,16 @@ class FormatSizePipe {
|
|
|
1720
1824
|
value /= 1024;
|
|
1721
1825
|
i++;
|
|
1722
1826
|
}
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1827
|
+
let options = {
|
|
1828
|
+
maximumFractionDigits: i > 1 ? 1 : 0,
|
|
1829
|
+
};
|
|
1830
|
+
let numberFormat = new Intl.NumberFormat([], options);
|
|
1831
|
+
return numberFormat.format(value) + ' ' + names[i];
|
|
1727
1832
|
}
|
|
1728
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1729
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
1833
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatSizePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
1834
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: FormatSizePipe, name: "formatSize" }); }
|
|
1730
1835
|
}
|
|
1731
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
1836
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatSizePipe, decorators: [{
|
|
1732
1837
|
type: Pipe,
|
|
1733
1838
|
args: [{ name: 'formatSize' }]
|
|
1734
1839
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
@@ -1956,10 +2061,10 @@ class FormatDatePipe {
|
|
|
1956
2061
|
return DateHelper.formatDate(this.translate, value, options);
|
|
1957
2062
|
}
|
|
1958
2063
|
}
|
|
1959
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1960
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2064
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatDatePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2065
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: FormatDatePipe, name: "formatDate" }); }
|
|
1961
2066
|
}
|
|
1962
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2067
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatDatePipe, decorators: [{
|
|
1963
2068
|
type: Pipe,
|
|
1964
2069
|
args: [{ name: 'formatDate' }]
|
|
1965
2070
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
@@ -1971,10 +2076,10 @@ class NodeIconPipe {
|
|
|
1971
2076
|
transform(node) {
|
|
1972
2077
|
return this.repoUrlService.getRepoUrl(node.iconURL, node);
|
|
1973
2078
|
}
|
|
1974
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1975
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2079
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeIconPipe, deps: [{ token: RepoUrlService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2080
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeIconPipe, name: "esNodeIcon" }); }
|
|
1976
2081
|
}
|
|
1977
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2082
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeIconPipe, decorators: [{
|
|
1978
2083
|
type: Pipe,
|
|
1979
2084
|
args: [{ name: 'esNodeIcon' }]
|
|
1980
2085
|
}], ctorParameters: () => [{ type: RepoUrlService }] });
|
|
@@ -1992,10 +2097,10 @@ class NodeImageSizePipe {
|
|
|
1992
2097
|
}
|
|
1993
2098
|
return '';
|
|
1994
2099
|
}
|
|
1995
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
1996
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2100
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeImageSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2101
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeImageSizePipe, name: "NodeImageSize" }); }
|
|
1997
2102
|
}
|
|
1998
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeImageSizePipe, decorators: [{
|
|
1999
2104
|
type: Pipe,
|
|
2000
2105
|
args: [{ name: 'NodeImageSize' }]
|
|
2001
2106
|
}] });
|
|
@@ -2038,10 +2143,10 @@ class NodeImagePipe {
|
|
|
2038
2143
|
.pipe(map(([isFromHomeRepository, repository]) => isFromHomeRepository ||
|
|
2039
2144
|
repository?.repositoryType === RestConstants.REPOSITORY_TYPE_ALFRESCO));
|
|
2040
2145
|
}
|
|
2041
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2042
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2146
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeImagePipe, deps: [{ token: NodeHelperService }, { token: i2$2.DomSanitizer }, { token: RepoUrlService }, { token: i2.NetworkService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2147
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeImagePipe, name: "esNodeImage" }); }
|
|
2043
2148
|
}
|
|
2044
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeImagePipe, decorators: [{
|
|
2045
2150
|
type: Pipe,
|
|
2046
2151
|
args: [{ name: 'esNodeImage' }]
|
|
2047
2152
|
}], ctorParameters: () => [{ type: NodeHelperService }, { type: i2$2.DomSanitizer }, { type: RepoUrlService }, { type: i2.NetworkService }] });
|
|
@@ -2085,10 +2190,10 @@ class NodePersonNamePipe {
|
|
|
2085
2190
|
}
|
|
2086
2191
|
return person[field];
|
|
2087
2192
|
}
|
|
2088
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2089
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2193
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodePersonNamePipe, deps: [{ token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2194
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodePersonNamePipe, name: "nodePersonName" }); }
|
|
2090
2195
|
}
|
|
2091
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodePersonNamePipe, decorators: [{
|
|
2092
2197
|
type: Pipe,
|
|
2093
2198
|
args: [{ name: 'nodePersonName' }]
|
|
2094
2199
|
}], ctorParameters: () => [{ type: i2.ConfigService }] });
|
|
@@ -2126,16 +2231,30 @@ class RestHelper {
|
|
|
2126
2231
|
}
|
|
2127
2232
|
|
|
2128
2233
|
class NodeTitlePipe {
|
|
2129
|
-
transform(node, args
|
|
2130
|
-
|
|
2234
|
+
transform(node, args) {
|
|
2235
|
+
if (!node?.name) {
|
|
2236
|
+
if (node === 'HOME') {
|
|
2237
|
+
return this.translate.instant('WORKSPACE.' + node);
|
|
2238
|
+
}
|
|
2239
|
+
return this.translate.instant('WORKSPACE.' + node);
|
|
2240
|
+
}
|
|
2241
|
+
const value = args?.type === 'name'
|
|
2242
|
+
? RestHelper.getName(node)
|
|
2243
|
+
: RestHelper.getTitle(node);
|
|
2244
|
+
if (node?.properties?.[RestConstants.CCM_PROP_MAPTYPE]) {
|
|
2245
|
+
return this.translate.instant('MAPTYPE.' + node?.properties?.[RestConstants.CCM_PROP_MAPTYPE][0], {
|
|
2246
|
+
fallback: value,
|
|
2247
|
+
});
|
|
2248
|
+
}
|
|
2249
|
+
return value;
|
|
2131
2250
|
}
|
|
2132
2251
|
constructor(translate) {
|
|
2133
2252
|
this.translate = translate;
|
|
2134
2253
|
}
|
|
2135
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2136
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2254
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeTitlePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2255
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeTitlePipe, name: "nodeTitle" }); }
|
|
2137
2256
|
}
|
|
2138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2257
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeTitlePipe, decorators: [{
|
|
2139
2258
|
type: Pipe,
|
|
2140
2259
|
args: [{ name: 'nodeTitle' }]
|
|
2141
2260
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
@@ -2307,7 +2426,7 @@ class VCard {
|
|
|
2307
2426
|
getDisplayName() {
|
|
2308
2427
|
const string = (this.title ?? '') + ' ' + (this.givenname ?? '') + ' ' + (this.surname ?? '');
|
|
2309
2428
|
if (string.trim() === '') {
|
|
2310
|
-
return this.org || '';
|
|
2429
|
+
return this.org || this.get('FN') || '';
|
|
2311
2430
|
}
|
|
2312
2431
|
return string;
|
|
2313
2432
|
}
|
|
@@ -2423,19 +2542,25 @@ class VCardNamePipe {
|
|
|
2423
2542
|
this.translate = translate;
|
|
2424
2543
|
}
|
|
2425
2544
|
transform(authority, args = null) {
|
|
2545
|
+
if (Array.isArray(authority)) {
|
|
2546
|
+
return authority
|
|
2547
|
+
.map((a) => (a ? new VCard(a).getDisplayName() : ''))
|
|
2548
|
+
.filter((s) => !!s)
|
|
2549
|
+
.join(', ');
|
|
2550
|
+
}
|
|
2426
2551
|
return authority ? new VCard(authority).getDisplayName() : '';
|
|
2427
2552
|
}
|
|
2428
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2429
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2553
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: VCardNamePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2554
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: VCardNamePipe, name: "vcardName" }); }
|
|
2430
2555
|
}
|
|
2431
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: VCardNamePipe, decorators: [{
|
|
2432
2557
|
type: Pipe,
|
|
2433
2558
|
args: [{ name: 'vcardName' }]
|
|
2434
2559
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
2435
2560
|
|
|
2436
2561
|
class SortDropdownComponent {
|
|
2437
2562
|
constructor() {
|
|
2438
|
-
this.
|
|
2563
|
+
this.sort = new EventEmitter();
|
|
2439
2564
|
}
|
|
2440
2565
|
setSort(item) {
|
|
2441
2566
|
let ascending = this.sortAscending;
|
|
@@ -2454,14 +2579,14 @@ class SortDropdownComponent {
|
|
|
2454
2579
|
ascending = itemAscending;
|
|
2455
2580
|
}
|
|
2456
2581
|
item.ascending = ascending;
|
|
2457
|
-
this.
|
|
2582
|
+
this.sort.emit(item);
|
|
2458
2583
|
}
|
|
2459
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2460
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
2584
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SortDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2585
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SortDropdownComponent, selector: "es-sort-dropdown", inputs: { columns: "columns", sortBy: "sortBy", sortAscending: "sortAscending" }, outputs: { sort: "sort" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy === item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy === item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n", styles: ["::ng-deep .sort-dropdown-menu{width:240px}.collection-item-title{color:var(--textLight);font-size:80%;font-weight:700;padding:5px 16px}.collection-item{display:flex;color:var(--primary);text-align:left;border:none;width:100%}.collection-item ::ng-deep .mat-mdc-menu-item-text{flex-grow:1;display:flex;align-items:center}.collection-item.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}.collection-item.active{--mat-menu-item-label-text-weight: bold}.collection-item.active:after{content:\"\";position:absolute;left:0;width:100%;height:100%;background:linear-gradient(to right,var(--primary) 0,var(--primary) 5px,transparent 5px,transparent 5%)}.collection-item .title{flex-grow:1}\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: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
|
|
2461
2586
|
}
|
|
2462
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2587
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SortDropdownComponent, decorators: [{
|
|
2463
2588
|
type: Component,
|
|
2464
|
-
args: [{ selector: 'es-sort-dropdown', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy
|
|
2589
|
+
args: [{ selector: 'es-sort-dropdown', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy === item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy === item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n", styles: ["::ng-deep .sort-dropdown-menu{width:240px}.collection-item-title{color:var(--textLight);font-size:80%;font-weight:700;padding:5px 16px}.collection-item{display:flex;color:var(--primary);text-align:left;border:none;width:100%}.collection-item ::ng-deep .mat-mdc-menu-item-text{flex-grow:1;display:flex;align-items:center}.collection-item.cdk-keyboard-focused{outline:none;border:var(--focusWidth) solid var(--palette-primary-300)}.collection-item.active{--mat-menu-item-label-text-weight: bold}.collection-item.active:after{content:\"\";position:absolute;left:0;width:100%;height:100%;background:linear-gradient(to right,var(--primary) 0,var(--primary) 5px,transparent 5px,transparent 5%)}.collection-item .title{flex-grow:1}\n"] }]
|
|
2465
2590
|
}], ctorParameters: () => [], propDecorators: { menu: [{
|
|
2466
2591
|
type: ViewChild,
|
|
2467
2592
|
args: ['menu', { static: true }]
|
|
@@ -2471,7 +2596,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
2471
2596
|
type: Input
|
|
2472
2597
|
}], sortAscending: [{
|
|
2473
2598
|
type: Input
|
|
2474
|
-
}],
|
|
2599
|
+
}], sort: [{
|
|
2475
2600
|
type: Output
|
|
2476
2601
|
}] } });
|
|
2477
2602
|
|
|
@@ -2479,10 +2604,10 @@ class SpinnerComponent {
|
|
|
2479
2604
|
constructor() {
|
|
2480
2605
|
this.dataTest = 'loading-spinner';
|
|
2481
2606
|
}
|
|
2482
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2483
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
2607
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2608
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SpinnerComponent, isStandalone: true, selector: "es-spinner", host: { properties: { "attr.data-test": "this.dataTest" } }, ngImport: i0, template: "<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n", styles: [".spinner{margin:0 auto}.spinnercontainer{margin:20px auto auto;height:54px;color:#0000;text-align:center;float:left;width:100%}.inner{width:30px;height:50px;display:inline-block}.spinner1{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjYzFjNmUzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.1s;-moz-animation-delay:.1s;animation-delay:.1s}.spinner2{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjN2Y5MWMzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.25s;-moz-animation-delay:.25s;animation-delay:.25s}.spinner3{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjMzE2MmE3IiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.5s;-moz-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-moz-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-ms-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-o-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5) rotate(90deg)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
2484
2609
|
}
|
|
2485
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerComponent, decorators: [{
|
|
2486
2611
|
type: Component,
|
|
2487
2612
|
args: [{ selector: 'es-spinner', standalone: true, imports: [TranslateModule], template: "<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n", styles: [".spinner{margin:0 auto}.spinnercontainer{margin:20px auto auto;height:54px;color:#0000;text-align:center;float:left;width:100%}.inner{width:30px;height:50px;display:inline-block}.spinner1{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjYzFjNmUzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.1s;-moz-animation-delay:.1s;animation-delay:.1s}.spinner2{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjN2Y5MWMzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.25s;-moz-animation-delay:.25s;animation-delay:.25s}.spinner3{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjMzE2MmE3IiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.5s;-moz-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-moz-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-ms-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-o-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5) rotate(90deg)}to{transform:scale(1)}}\n"] }]
|
|
2488
2613
|
}], ctorParameters: () => [], propDecorators: { dataTest: [{
|
|
@@ -2494,19 +2619,39 @@ class PropertySlugPipe {
|
|
|
2494
2619
|
transform(value) {
|
|
2495
2620
|
return value?.replace(/[:.]/, '_');
|
|
2496
2621
|
}
|
|
2497
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2498
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
2622
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PropertySlugPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2623
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: PropertySlugPipe, name: "propertySlug" }); }
|
|
2499
2624
|
}
|
|
2500
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2625
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PropertySlugPipe, decorators: [{
|
|
2501
2626
|
type: Pipe,
|
|
2502
2627
|
args: [{
|
|
2503
2628
|
name: 'propertySlug',
|
|
2504
2629
|
}]
|
|
2505
2630
|
}] });
|
|
2506
2631
|
|
|
2632
|
+
class NodeLicensePipe {
|
|
2633
|
+
constructor(translate) {
|
|
2634
|
+
this.translate = translate;
|
|
2635
|
+
}
|
|
2636
|
+
transform(node, args) {
|
|
2637
|
+
if (node.properties[RestConstants.CCM_PROP_LICENSE]?.[0]) {
|
|
2638
|
+
if (args?.type === 'name') {
|
|
2639
|
+
return this.translate.get('LICENSE.NAMES.' + node.properties[RestConstants.CCM_PROP_LICENSE]?.[0]);
|
|
2640
|
+
}
|
|
2641
|
+
}
|
|
2642
|
+
return null;
|
|
2643
|
+
}
|
|
2644
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeLicensePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
2645
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeLicensePipe, name: "esNodeLicense" }); }
|
|
2646
|
+
}
|
|
2647
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeLicensePipe, decorators: [{
|
|
2648
|
+
type: Pipe,
|
|
2649
|
+
args: [{ name: 'esNodeLicense' }]
|
|
2650
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
2651
|
+
|
|
2507
2652
|
class EduSharingUiCommonModule {
|
|
2508
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2509
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
2653
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2654
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, declarations: [ActionbarComponent,
|
|
2510
2655
|
BorderBoxObserverDirective,
|
|
2511
2656
|
CheckTextOverflowDirective,
|
|
2512
2657
|
DropdownComponent,
|
|
@@ -2519,6 +2664,7 @@ class EduSharingUiCommonModule {
|
|
|
2519
2664
|
NodeIconPipe,
|
|
2520
2665
|
NodeImagePipe,
|
|
2521
2666
|
NodeImageSizePipe,
|
|
2667
|
+
NodeLicensePipe,
|
|
2522
2668
|
NodePersonNamePipe,
|
|
2523
2669
|
NodeTitlePipe,
|
|
2524
2670
|
NodeUrlComponent,
|
|
@@ -2551,7 +2697,7 @@ class EduSharingUiCommonModule {
|
|
|
2551
2697
|
SortDropdownComponent,
|
|
2552
2698
|
SpinnerComponent,
|
|
2553
2699
|
VCardNamePipe] }); }
|
|
2554
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
2700
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, imports: [CommonModule,
|
|
2555
2701
|
MatMenuModule,
|
|
2556
2702
|
SpinnerComponent,
|
|
2557
2703
|
MatButtonModule,
|
|
@@ -2560,7 +2706,7 @@ class EduSharingUiCommonModule {
|
|
|
2560
2706
|
TranslateModule,
|
|
2561
2707
|
RouterModule] }); }
|
|
2562
2708
|
}
|
|
2563
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2709
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, decorators: [{
|
|
2564
2710
|
type: NgModule,
|
|
2565
2711
|
args: [{
|
|
2566
2712
|
declarations: [
|
|
@@ -2577,6 +2723,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
2577
2723
|
NodeIconPipe,
|
|
2578
2724
|
NodeImagePipe,
|
|
2579
2725
|
NodeImageSizePipe,
|
|
2726
|
+
NodeLicensePipe,
|
|
2580
2727
|
NodePersonNamePipe,
|
|
2581
2728
|
NodeTitlePipe,
|
|
2582
2729
|
NodeUrlComponent,
|
|
@@ -2815,19 +2962,19 @@ class MdsHelperService {
|
|
|
2815
2962
|
}
|
|
2816
2963
|
return used;
|
|
2817
2964
|
}
|
|
2818
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2819
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
2965
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsHelperService, deps: [{ token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2966
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsHelperService }); }
|
|
2820
2967
|
}
|
|
2821
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2968
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsHelperService, decorators: [{
|
|
2822
2969
|
type: Injectable
|
|
2823
2970
|
}], ctorParameters: () => [{ type: i2.AuthenticationService }] });
|
|
2824
2971
|
|
|
2825
2972
|
class MdsModule {
|
|
2826
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2827
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
2828
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
2973
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2974
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: MdsModule }); }
|
|
2975
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsModule, providers: [MdsHelperService] }); }
|
|
2829
2976
|
}
|
|
2830
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
2977
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MdsModule, decorators: [{
|
|
2831
2978
|
type: NgModule,
|
|
2832
2979
|
args: [{
|
|
2833
2980
|
declarations: [],
|
|
@@ -2902,10 +3049,10 @@ class NodesDragSourceDirective {
|
|
|
2902
3049
|
this.nodesDragEnd.emit(event);
|
|
2903
3050
|
clearDraggedNodes();
|
|
2904
3051
|
}
|
|
2905
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
2906
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
3052
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragSourceDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
3053
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: NodesDragSourceDirective, selector: "[esNodesDragSource]", inputs: { nodes: ["esNodesDragSource", "nodes"] }, outputs: { nodesDragStart: "nodesDragStart", nodesDragEnd: "nodesDragEnd" }, host: { listeners: { "dragstart": "onDragStart($event)", "dragend": "onDragEnd($event)" } }, usesOnChanges: true, ngImport: i0 }); }
|
|
2907
3054
|
}
|
|
2908
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3055
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragSourceDirective, decorators: [{
|
|
2909
3056
|
type: Directive,
|
|
2910
3057
|
args: [{
|
|
2911
3058
|
selector: '[esNodesDragSource]',
|
|
@@ -3066,10 +3213,10 @@ class NodesDragDropService {
|
|
|
3066
3213
|
return 'grabbing';
|
|
3067
3214
|
}
|
|
3068
3215
|
}
|
|
3069
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3070
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
3216
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDropService, deps: [{ token: i0.NgZone }, { token: Toast }, { token: UIService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3217
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDropService, providedIn: 'root' }); }
|
|
3071
3218
|
}
|
|
3072
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3219
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDropService, decorators: [{
|
|
3073
3220
|
type: Injectable,
|
|
3074
3221
|
args: [{
|
|
3075
3222
|
providedIn: 'root',
|
|
@@ -3111,15 +3258,15 @@ class NodesDragDirective {
|
|
|
3111
3258
|
document.body.removeChild(style);
|
|
3112
3259
|
});
|
|
3113
3260
|
}
|
|
3114
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3115
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
3261
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDirective, deps: [{ token: i8.CdkDrag }, { token: NodesDragDropService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
3262
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: NodesDragDirective, selector: "[esNodesDrag]", ngImport: i0 }); }
|
|
3116
3263
|
}
|
|
3117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3264
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDirective, decorators: [{
|
|
3118
3265
|
type: Directive,
|
|
3119
3266
|
args: [{
|
|
3120
3267
|
selector: '[esNodesDrag]',
|
|
3121
3268
|
}]
|
|
3122
|
-
}], ctorParameters: () => [{ type:
|
|
3269
|
+
}], ctorParameters: () => [{ type: i8.CdkDrag }, { type: NodesDragDropService }] });
|
|
3123
3270
|
|
|
3124
3271
|
const ACTIVE_DROP_TARGET_ACCEPT_CLASS = 'es-nodes-active-drop-target-accept';
|
|
3125
3272
|
const ACTIVE_DROP_TARGET_DENY_CLASS = 'es-nodes-active-drop-target-deny';
|
|
@@ -3172,10 +3319,10 @@ class NodesDropTargetDirective {
|
|
|
3172
3319
|
}
|
|
3173
3320
|
});
|
|
3174
3321
|
}
|
|
3175
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3176
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
3322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDropTargetDirective, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: NodesDragDropService }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
3323
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: NodesDropTargetDirective, selector: "[esNodesDropTarget]", inputs: { target: ["esNodesDropTarget", "target"], canDropNodes: "canDropNodes" }, outputs: { nodeDropped: "nodeDropped" }, exportAs: ["esNodesDropTarget"], ngImport: i0 }); }
|
|
3177
3324
|
}
|
|
3178
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3325
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDropTargetDirective, decorators: [{
|
|
3179
3326
|
type: Directive,
|
|
3180
3327
|
args: [{
|
|
3181
3328
|
selector: '[esNodesDropTarget]',
|
|
@@ -3329,10 +3476,10 @@ class FormatDurationPipe {
|
|
|
3329
3476
|
}) {
|
|
3330
3477
|
return DurationHelper.getDurationFormatted(value, args.format);
|
|
3331
3478
|
}
|
|
3332
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3333
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
3479
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatDurationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3480
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: FormatDurationPipe, name: "formatDuration" }); }
|
|
3334
3481
|
}
|
|
3335
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3482
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormatDurationPipe, decorators: [{
|
|
3336
3483
|
type: Pipe,
|
|
3337
3484
|
args: [{
|
|
3338
3485
|
name: 'formatDuration',
|
|
@@ -3372,10 +3519,10 @@ class ListWidget {
|
|
|
3372
3519
|
this.itemSubject = new BehaviorSubject(null);
|
|
3373
3520
|
this.provideLabelSubject = new BehaviorSubject(false);
|
|
3374
3521
|
}
|
|
3375
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3376
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.
|
|
3522
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListWidget, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
3523
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ListWidget, inputs: { node: "node", item: "item", provideLabel: "provideLabel" }, ngImport: i0 }); }
|
|
3377
3524
|
}
|
|
3378
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3525
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListWidget, decorators: [{
|
|
3379
3526
|
type: Directive
|
|
3380
3527
|
}], ctorParameters: () => [], propDecorators: { node: [{
|
|
3381
3528
|
type: Input
|
|
@@ -3448,10 +3595,10 @@ class AccessibilityService {
|
|
|
3448
3595
|
observeAll() {
|
|
3449
3596
|
return this.observeMultiple(Object.keys(new AccessibilitySettings()));
|
|
3450
3597
|
}
|
|
3451
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3452
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
3598
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AccessibilityService, deps: [{ token: i2.SessionStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3599
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AccessibilityService, providedIn: 'root' }); }
|
|
3453
3600
|
}
|
|
3454
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3601
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AccessibilityService, decorators: [{
|
|
3455
3602
|
type: Injectable,
|
|
3456
3603
|
args: [{
|
|
3457
3604
|
providedIn: 'root',
|
|
@@ -3482,10 +3629,10 @@ class ListCollectionInfoComponent extends ListWidget {
|
|
|
3482
3629
|
this.nodeHelper = nodeHelper;
|
|
3483
3630
|
this.indicatorIcons$ = this.accessibility.observe('indicatorIcons');
|
|
3484
3631
|
}
|
|
3485
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3486
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
3632
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListCollectionInfoComponent, deps: [{ token: AccessibilityService }, { token: NodeHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3633
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListCollectionInfoComponent, selector: "es-list-collection-info", usesInheritance: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"item.name\">\n <ng-container *ngSwitchCase=\"'info'\">\n <ng-container *ngIf=\"indicatorIcons$ | async; else textRepresentation\">\n <i\n esIcon=\"layers\"\n [altText]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n [matTooltip]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n ></i>\n {{ $any(node).collection?.childCollectionsCount }}\n <i\n esIcon=\"insert_drive_file\"\n [altText]=\"'collections_content' | translate\"\n [matTooltip]=\"'collections_content' | translate\"\n ></i>\n {{ $any(node).collection?.childReferencesCount }}\n </ng-container>\n <ng-template #textRepresentation>\n <div class=\"rows\">\n <p>\n {{ 'COLLECTION.INFO_REFERENCES_MULTI' | translate }}:\n {{ $any(node).collection?.childCollectionsCount }}\n </p>\n <p>\n {{ 'collections_content' | translate }}:\n {{ $any(node).collection?.childReferencesCount }}\n </p>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'scope'\">\n <i\n *ngIf=\"indicatorIcons$ | async; else textRepresentation\"\n class=\"collectionScope\"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n ></i>\n <ng-template #textRepresentation>\n {{\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n }}\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".rows{display:flex;flex-direction:column;text-align:start}.rows p{margin:0}\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: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
3487
3634
|
}
|
|
3488
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3635
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListCollectionInfoComponent, decorators: [{
|
|
3489
3636
|
type: Component,
|
|
3490
3637
|
args: [{ selector: 'es-list-collection-info', template: "<ng-container [ngSwitch]=\"item.name\">\n <ng-container *ngSwitchCase=\"'info'\">\n <ng-container *ngIf=\"indicatorIcons$ | async; else textRepresentation\">\n <i\n esIcon=\"layers\"\n [altText]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n [matTooltip]=\"'COLLECTION.INFO_REFERENCES_MULTI' | translate\"\n ></i>\n {{ $any(node).collection?.childCollectionsCount }}\n <i\n esIcon=\"insert_drive_file\"\n [altText]=\"'collections_content' | translate\"\n [matTooltip]=\"'collections_content' | translate\"\n ></i>\n {{ $any(node).collection?.childReferencesCount }}\n </ng-container>\n <ng-template #textRepresentation>\n <div class=\"rows\">\n <p>\n {{ 'COLLECTION.INFO_REFERENCES_MULTI' | translate }}:\n {{ $any(node).collection?.childCollectionsCount }}\n </p>\n <p>\n {{ 'collections_content' | translate }}:\n {{ $any(node).collection?.childReferencesCount }}\n </p>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'scope'\">\n <i\n *ngIf=\"indicatorIcons$ | async; else textRepresentation\"\n class=\"collectionScope\"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n ></i>\n <ng-template #textRepresentation>\n {{\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n }}\n </ng-template>\n </ng-container>\n</ng-container>\n", styles: [".rows{display:flex;flex-direction:column;text-align:start}.rows p{margin:0}\n"] }]
|
|
3491
3638
|
}], ctorParameters: () => [{ type: AccessibilityService }, { type: NodeHelperService }] });
|
|
@@ -3534,10 +3681,10 @@ class ListCountsComponent extends ListWidget {
|
|
|
3534
3681
|
getCount() {
|
|
3535
3682
|
return ListCountsComponent.getCount(this.node, this.getId());
|
|
3536
3683
|
}
|
|
3537
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3538
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
3684
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListCountsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3685
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListCountsComponent, selector: "es-list-counts", usesInheritance: true, ngImport: i0, template: "{{ getCount() }}\n", styles: [":host{white-space:pre-line}\n"] }); }
|
|
3539
3686
|
}
|
|
3540
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3687
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListCountsComponent, decorators: [{
|
|
3541
3688
|
type: Component,
|
|
3542
3689
|
args: [{ selector: 'es-list-counts', template: "{{ getCount() }}\n", styles: [":host{white-space:pre-line}\n"] }]
|
|
3543
3690
|
}] });
|
|
@@ -3563,10 +3710,10 @@ class ListNodeLicenseComponent extends ListWidget {
|
|
|
3563
3710
|
}));
|
|
3564
3711
|
this.indicatorIcons$ = this.accessibility.observe('indicatorIcons');
|
|
3565
3712
|
}
|
|
3566
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3567
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
3713
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListNodeLicenseComponent, deps: [{ token: AccessibilityService }, { token: NodeHelperService }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3714
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListNodeLicenseComponent, selector: "es-list-node-license", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"licenseIcon$ | async as licenseIcon\">\n <span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\"\n ><img [alt]=\"tooltip$ | async\" [src]=\"licenseIcon\"\n /></span>\n <ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
|
|
3568
3715
|
}
|
|
3569
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3716
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListNodeLicenseComponent, decorators: [{
|
|
3570
3717
|
type: Component,
|
|
3571
3718
|
args: [{ selector: 'es-list-node-license', template: "<ng-container *ngIf=\"licenseIcon$ | async as licenseIcon\">\n <span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\"\n ><img [alt]=\"tooltip$ | async\" [src]=\"licenseIcon\"\n /></span>\n <ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n </ng-template>\n</ng-container>\n" }]
|
|
3572
3719
|
}], ctorParameters: () => [{ type: AccessibilityService }, { type: NodeHelperService }, { type: i1.TranslateService }] });
|
|
@@ -3608,10 +3755,10 @@ class NodeSourcePipe {
|
|
|
3608
3755
|
src = src.replace(/\//g, '_');
|
|
3609
3756
|
return src;
|
|
3610
3757
|
}
|
|
3611
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3612
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
3758
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeSourcePipe, deps: [{ token: NodeHelperService }, { token: i2.NetworkService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
3759
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeSourcePipe, name: "appNodeSource" }); }
|
|
3613
3760
|
}
|
|
3614
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3761
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeSourcePipe, decorators: [{
|
|
3615
3762
|
type: Pipe,
|
|
3616
3763
|
args: [{ name: 'appNodeSource' }]
|
|
3617
3764
|
}], ctorParameters: () => [{ type: NodeHelperService }, { type: i2.NetworkService }] });
|
|
@@ -3641,10 +3788,10 @@ class ListNodeReplicationSourceComponent extends ListWidget {
|
|
|
3641
3788
|
}));
|
|
3642
3789
|
this.indicatorIcons$ = this.accessibility.observe('indicatorIcons');
|
|
3643
3790
|
}
|
|
3644
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3645
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
3791
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListNodeReplicationSourceComponent, deps: [{ token: AccessibilityService }, { token: NodeSourcePipe }, { token: i1.TranslateService }, { token: i2.NetworkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3792
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListNodeReplicationSourceComponent, selector: "es-list-node-replication-source", providers: [NodeSourcePipe], usesInheritance: true, ngImport: i0, template: "<span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\">\n <img\n [src]=\"replicationSource$ | async | appNodeSource : { mode: 'url' }\"\n (error)=\"$any($event.target).style.display = 'none'\"\n [alt]=\"tooltip$ | async\"\n />\n</span>\n\n<ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeSourcePipe, name: "appNodeSource" }] }); }
|
|
3646
3793
|
}
|
|
3647
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3794
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListNodeReplicationSourceComponent, decorators: [{
|
|
3648
3795
|
type: Component,
|
|
3649
3796
|
args: [{ selector: 'es-list-node-replication-source', providers: [NodeSourcePipe], template: "<span *ngIf=\"indicatorIcons$ | async; else textRepresentation\" [matTooltip]=\"tooltip$ | async\">\n <img\n [src]=\"replicationSource$ | async | appNodeSource : { mode: 'url' }\"\n (error)=\"$any($event.target).style.display = 'none'\"\n [alt]=\"tooltip$ | async\"\n />\n</span>\n\n<ng-template #textRepresentation>\n <span>{{ tooltip$ | async }}</span>\n</ng-template>\n" }]
|
|
3650
3797
|
}], ctorParameters: () => [{ type: AccessibilityService }, { type: NodeSourcePipe }, { type: i1.TranslateService }, { type: i2.NetworkService }] });
|
|
@@ -3658,12 +3805,12 @@ class ListNodeWorkflowComponent extends ListWidget {
|
|
|
3658
3805
|
getWorkflowStatus() {
|
|
3659
3806
|
return this.nodeHelper.getWorkflowStatus(this.node).current;
|
|
3660
3807
|
}
|
|
3661
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3662
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
3808
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListNodeWorkflowComponent, deps: [{ token: NodeHelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3809
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListNodeWorkflowComponent, selector: "es-list-node-workflow", usesInheritance: true, ngImport: i0, template: "<div class=\"workflowStatus\" [style.background-color]=\"getWorkflowStatus()?.color\">\n {{ 'WORKFLOW.' + getWorkflowStatus()?.id | translate }}\n</div>\n", dependencies: [{ kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
3663
3810
|
}
|
|
3664
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3811
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListNodeWorkflowComponent, decorators: [{
|
|
3665
3812
|
type: Component,
|
|
3666
|
-
args: [{ selector: 'es-list-node-workflow', template: "<div class=\"workflowStatus\" [style.background-color]=\"getWorkflowStatus()
|
|
3813
|
+
args: [{ selector: 'es-list-node-workflow', template: "<div class=\"workflowStatus\" [style.background-color]=\"getWorkflowStatus()?.color\">\n {{ 'WORKFLOW.' + getWorkflowStatus()?.id | translate }}\n</div>\n" }]
|
|
3667
3814
|
}], ctorParameters: () => [{ type: NodeHelperService }] });
|
|
3668
3815
|
|
|
3669
3816
|
class ListTextComponent extends ListWidget {
|
|
@@ -3684,7 +3831,6 @@ class ListTextComponent extends ListWidget {
|
|
|
3684
3831
|
this.VCARD_FIELDS = RestConstants.getAllVCardFields();
|
|
3685
3832
|
this.displayName$ = new BehaviorSubject(null);
|
|
3686
3833
|
}
|
|
3687
|
-
async ngOnChanges(changes) { }
|
|
3688
3834
|
async ngOnInit() {
|
|
3689
3835
|
merge([this.nodeSubject, this.itemSubject])
|
|
3690
3836
|
.pipe(switchMap(() => this.updateDisplayname()))
|
|
@@ -3741,12 +3887,12 @@ class ListTextComponent extends ListWidget {
|
|
|
3741
3887
|
}
|
|
3742
3888
|
}
|
|
3743
3889
|
}
|
|
3744
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
3745
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
3890
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListTextComponent, deps: [{ token: NodeHelperService }, { token: i2.MdsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3891
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListTextComponent, selector: "es-list-text", usesInheritance: 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()) | nodeTitle }}\n </ng-container>\n <ng-container *ngIf=\"['name', 'cm:name'].includes(item.name)\">\n {{ $any(getNode()) | nodeTitle : { type: 'name' } }}\n </ng-container>\n <ng-container\n *ngIf=\"!['name', 'cm:name', 'title', 'cm:title', 'cclom:title'].includes(item.name)\"\n >\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 + '_LONG']?.[0] || $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] | 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: NodeTitlePipe, name: "nodeTitle" }, { 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
3892
|
}
|
|
3747
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
3893
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListTextComponent, decorators: [{
|
|
3748
3894
|
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()).
|
|
3895
|
+
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()) | nodeTitle }}\n </ng-container>\n <ng-container *ngIf=\"['name', 'cm:name'].includes(item.name)\">\n {{ $any(getNode()) | nodeTitle : { type: 'name' } }}\n </ng-container>\n <ng-container\n *ngIf=\"!['name', 'cm:name', 'title', 'cm:title', 'cclom:title'].includes(item.name)\"\n >\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 + '_LONG']?.[0] || $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] | 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
3896
|
}], ctorParameters: () => [{ type: NodeHelperService }, { type: i2.MdsService }, { type: i0.ChangeDetectorRef }] });
|
|
3751
3897
|
|
|
3752
3898
|
var ListWidgetType;
|
|
@@ -3807,6 +3953,15 @@ class OptionItem {
|
|
|
3807
3953
|
* @type {boolean}
|
|
3808
3954
|
*/
|
|
3809
3955
|
this.isToggle = false;
|
|
3956
|
+
/**
|
|
3957
|
+
* Only when @isToggle. is the toggle currently visible
|
|
3958
|
+
*/
|
|
3959
|
+
this.isToggleVisible = true;
|
|
3960
|
+
/**
|
|
3961
|
+
* Only when @isToggle. Where to place the toggle, before or after all other actions
|
|
3962
|
+
* @type {boolean}
|
|
3963
|
+
*/
|
|
3964
|
+
this.togglePosition = 'after';
|
|
3810
3965
|
/**
|
|
3811
3966
|
* If true, shows a line at the top.
|
|
3812
3967
|
*
|
|
@@ -3826,6 +3981,11 @@ class OptionItem {
|
|
|
3826
3981
|
* @type {boolean}
|
|
3827
3982
|
*/
|
|
3828
3983
|
this.onlyMobile = false;
|
|
3984
|
+
/**
|
|
3985
|
+
* custom aria-label
|
|
3986
|
+
* @type {string}
|
|
3987
|
+
*/
|
|
3988
|
+
this.ariaLabel = '';
|
|
3829
3989
|
/**
|
|
3830
3990
|
* If true, only displayed on a desktop device (based on the navigator agent)
|
|
3831
3991
|
* @type {boolean}
|
|
@@ -3881,6 +4041,7 @@ var Scope;
|
|
|
3881
4041
|
Scope["CreateMenu"] = "CreateMenu";
|
|
3882
4042
|
Scope["MediacenterNodesList"] = "MediacenterNodesList";
|
|
3883
4043
|
Scope["Admin"] = "Admin";
|
|
4044
|
+
Scope["DebugShowAll"] = "DebugShowAll";
|
|
3884
4045
|
})(Scope || (Scope = {}));
|
|
3885
4046
|
var ElementType;
|
|
3886
4047
|
(function (ElementType) {
|
|
@@ -3888,12 +4049,13 @@ var ElementType;
|
|
|
3888
4049
|
ElementType[ElementType["NodeChild"] = 1] = "NodeChild";
|
|
3889
4050
|
ElementType[ElementType["MapRef"] = 2] = "MapRef";
|
|
3890
4051
|
ElementType[ElementType["NodePublishedCopy"] = 3] = "NodePublishedCopy";
|
|
3891
|
-
ElementType[ElementType["
|
|
3892
|
-
ElementType[ElementType["
|
|
3893
|
-
ElementType[ElementType["
|
|
3894
|
-
ElementType[ElementType["
|
|
3895
|
-
ElementType[ElementType["
|
|
3896
|
-
ElementType[ElementType["
|
|
4052
|
+
ElementType[ElementType["NodeRevoked"] = 4] = "NodeRevoked";
|
|
4053
|
+
ElementType[ElementType["NodeBlockedImport"] = 5] = "NodeBlockedImport";
|
|
4054
|
+
ElementType[ElementType["NodeProposal"] = 6] = "NodeProposal";
|
|
4055
|
+
ElementType[ElementType["Person"] = 7] = "Person";
|
|
4056
|
+
ElementType[ElementType["Group"] = 8] = "Group";
|
|
4057
|
+
ElementType[ElementType["SavedSearch"] = 9] = "SavedSearch";
|
|
4058
|
+
ElementType[ElementType["Unknown"] = 10] = "Unknown";
|
|
3897
4059
|
})(ElementType || (ElementType = {}));
|
|
3898
4060
|
class OptionGroup {
|
|
3899
4061
|
/**
|
|
@@ -4003,10 +4165,10 @@ class NodeEntriesGlobalService {
|
|
|
4003
4165
|
registerCustomFieldRendering(customFieldInfo) {
|
|
4004
4166
|
this.customFields.push(customFieldInfo);
|
|
4005
4167
|
}
|
|
4006
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4007
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
4168
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesGlobalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4169
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesGlobalService, providedIn: 'root' }); }
|
|
4008
4170
|
}
|
|
4009
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4171
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesGlobalService, decorators: [{
|
|
4010
4172
|
type: Injectable,
|
|
4011
4173
|
args: [{
|
|
4012
4174
|
providedIn: 'root',
|
|
@@ -4037,10 +4199,10 @@ class ListBaseComponent extends ListWidget {
|
|
|
4037
4199
|
}
|
|
4038
4200
|
}
|
|
4039
4201
|
}
|
|
4040
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4041
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
4202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListBaseComponent, deps: [{ token: NodeEntriesGlobalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4203
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ListBaseComponent, selector: "es-list-base", inputs: { forceText: "forceText" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container [ngSwitch]=\"widgetType\">\n <ng-container *ngSwitchCase=\"'Custom'\">\n <ng-container\n *ngTemplateOutlet=\"\n customTemplate;\n context: {\n item: this.item,\n node: this.node,\n provideLabel: this.provideLabel,\n forceText: this.forceText\n }\n \"\n >\n </ng-container>\n </ng-container>\n <es-list-collection-info\n *ngSwitchCase=\"'CollectionInfo'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-collection-info>\n <es-list-text\n *ngSwitchCase=\"'Text'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-text>\n <es-list-counts\n *ngSwitchCase=\"'NodeCounts'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-counts>\n <es-list-node-license\n *ngSwitchCase=\"'NodeLicense'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-license>\n <es-list-node-replication-source\n *ngSwitchCase=\"'NodeReplicationSource'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-replication-source>\n <es-list-node-workflow\n *ngSwitchCase=\"'NodeWorkflow'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-workflow>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ListCollectionInfoComponent, selector: "es-list-collection-info" }, { kind: "component", type: ListNodeLicenseComponent, selector: "es-list-node-license" }, { kind: "component", type: ListNodeReplicationSourceComponent, selector: "es-list-node-replication-source" }, { kind: "component", type: ListNodeWorkflowComponent, selector: "es-list-node-workflow" }, { kind: "component", type: ListTextComponent, selector: "es-list-text" }, { kind: "component", type: ListCountsComponent, selector: "es-list-counts" }] }); }
|
|
4042
4204
|
}
|
|
4043
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListBaseComponent, decorators: [{
|
|
4044
4206
|
type: Component,
|
|
4045
4207
|
args: [{ selector: 'es-list-base', template: "<ng-container [ngSwitch]=\"widgetType\">\n <ng-container *ngSwitchCase=\"'Custom'\">\n <ng-container\n *ngTemplateOutlet=\"\n customTemplate;\n context: {\n item: this.item,\n node: this.node,\n provideLabel: this.provideLabel,\n forceText: this.forceText\n }\n \"\n >\n </ng-container>\n </ng-container>\n <es-list-collection-info\n *ngSwitchCase=\"'CollectionInfo'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-collection-info>\n <es-list-text\n *ngSwitchCase=\"'Text'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-text>\n <es-list-counts\n *ngSwitchCase=\"'NodeCounts'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-counts>\n <es-list-node-license\n *ngSwitchCase=\"'NodeLicense'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-license>\n <es-list-node-replication-source\n *ngSwitchCase=\"'NodeReplicationSource'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-replication-source>\n <es-list-node-workflow\n *ngSwitchCase=\"'NodeWorkflow'\"\n [item]=\"item\"\n [node]=\"node\"\n [provideLabel]=\"provideLabel\"\n ></es-list-node-workflow>\n</ng-container>\n" }]
|
|
4046
4208
|
}], ctorParameters: () => [{ type: NodeEntriesGlobalService }], propDecorators: { forceText: [{
|
|
@@ -4049,10 +4211,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4049
4211
|
|
|
4050
4212
|
class NodeRowComponent {
|
|
4051
4213
|
constructor() { }
|
|
4052
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4053
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
4214
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4215
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeRowComponent, selector: "es-node-row", inputs: { node: "node", columns: "columns" }, queries: [{ propertyName: "customMetadataRef", first: true, predicate: ["customMetadata"], descendants: true }], ngImport: i0, template: "<div class=\"node-row\" *ngIf=\"node\">\n <div class=\"icon-bg\">\n <img\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 />\n </div>\n <div class=\"node-data\">\n <div class=\"node-data-primary\">\n <es-list-text [node]=\"node\" [item]=\"columns[0]\"> </es-list-text>\n </div>\n <div class=\"node-data-secondary\">\n <es-list-text\n *ngFor=\"let column of columns.slice(1)\"\n [node]=\"node\"\n [item]=\"column\"\n [provideLabel]=\"true\"\n ></es-list-text>\n <ng-container *ngTemplateOutlet=\"customMetadataRef; context: { node: node }\"></ng-container>\n </div>\n </div>\n</div>\n", styles: [".node-row{width:100%;display:grid;grid-template-columns:var(--tableIconSize) auto;grid-gap:10px;align-items:center;padding:10px;white-space:normal}.node-row .node-data{flex-grow:1;display:flex;flex-direction:column}.node-row .node-data .node-data-primary{font-weight:700;padding-bottom:5px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.25em;max-height:1.25em;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node-row .node-data .node-data-secondary{color:var(--textLight);display:flex;justify-content:space-between}.node-row .icon-bg{background-color:rgb(var(--palette-foreground-text-dark));border-radius:50%;width:var(--tableIconSize);height:var(--tableIconSize)!important;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.node-row .icon-bg img,.node-row .icon-bg i{width:50%;z-index:0}.node-row .icon-bg i{color:rgb(var(--palette-foreground-text));font-size:20px}\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: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ListTextComponent, selector: "es-list-text" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeIconPipe, name: "esNodeIcon" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
4054
4216
|
}
|
|
4055
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4217
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeRowComponent, decorators: [{
|
|
4056
4218
|
type: Component,
|
|
4057
4219
|
args: [{ selector: 'es-node-row', template: "<div class=\"node-row\" *ngIf=\"node\">\n <div class=\"icon-bg\">\n <img\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 />\n </div>\n <div class=\"node-data\">\n <div class=\"node-data-primary\">\n <es-list-text [node]=\"node\" [item]=\"columns[0]\"> </es-list-text>\n </div>\n <div class=\"node-data-secondary\">\n <es-list-text\n *ngFor=\"let column of columns.slice(1)\"\n [node]=\"node\"\n [item]=\"column\"\n [provideLabel]=\"true\"\n ></es-list-text>\n <ng-container *ngTemplateOutlet=\"customMetadataRef; context: { node: node }\"></ng-container>\n </div>\n </div>\n</div>\n", styles: [".node-row{width:100%;display:grid;grid-template-columns:var(--tableIconSize) auto;grid-gap:10px;align-items:center;padding:10px;white-space:normal}.node-row .node-data{flex-grow:1;display:flex;flex-direction:column}.node-row .node-data .node-data-primary{font-weight:700;padding-bottom:5px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.25em;max-height:1.25em;-webkit-line-clamp:1;-webkit-box-orient:vertical}.node-row .node-data .node-data-secondary{color:var(--textLight);display:flex;justify-content:space-between}.node-row .icon-bg{background-color:rgb(var(--palette-foreground-text-dark));border-radius:50%;width:var(--tableIconSize);height:var(--tableIconSize)!important;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 3px #0000001a}.node-row .icon-bg img,.node-row .icon-bg i{width:50%;z-index:0}.node-row .icon-bg i{color:rgb(var(--palette-foreground-text));font-size:20px}\n"] }]
|
|
4058
4220
|
}], ctorParameters: () => [], propDecorators: { customMetadataRef: [{
|
|
@@ -4065,8 +4227,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4065
4227
|
}] } });
|
|
4066
4228
|
|
|
4067
4229
|
class ListItemsModule {
|
|
4068
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4069
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
4230
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
4231
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ListItemsModule, declarations: [ListBaseComponent,
|
|
4070
4232
|
ListCollectionInfoComponent,
|
|
4071
4233
|
ListNodeLicenseComponent,
|
|
4072
4234
|
ListNodeReplicationSourceComponent,
|
|
@@ -4076,9 +4238,9 @@ class ListItemsModule {
|
|
|
4076
4238
|
NodeSourcePipe,
|
|
4077
4239
|
FormatDurationPipe,
|
|
4078
4240
|
NodeRowComponent], imports: [CommonModule, EduSharingUiCommonModule, MatTooltipModule, TranslateModule], exports: [ListBaseComponent, ListTextComponent, FormatDurationPipe, NodeRowComponent] }); }
|
|
4079
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
4241
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemsModule, imports: [CommonModule, EduSharingUiCommonModule, MatTooltipModule, TranslateModule] }); }
|
|
4080
4242
|
}
|
|
4081
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4243
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemsModule, decorators: [{
|
|
4082
4244
|
type: NgModule,
|
|
4083
4245
|
args: [{
|
|
4084
4246
|
declarations: [
|
|
@@ -4099,12 +4261,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4099
4261
|
}] });
|
|
4100
4262
|
|
|
4101
4263
|
class DragPreviewComponent {
|
|
4102
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4103
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
4264
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DragPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4265
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", 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
4266
|
}
|
|
4105
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4267
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DragPreviewComponent, decorators: [{
|
|
4106
4268
|
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"] }]
|
|
4269
|
+
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
4270
|
}], propDecorators: { node: [{
|
|
4109
4271
|
type: Input
|
|
4110
4272
|
}], selected: [{
|
|
@@ -4113,9 +4275,209 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4113
4275
|
type: Input
|
|
4114
4276
|
}] } });
|
|
4115
4277
|
|
|
4278
|
+
class AppService {
|
|
4279
|
+
}
|
|
4280
|
+
|
|
4281
|
+
// 'none' means that only labels should be shown (for dev)
|
|
4282
|
+
const DEFAULT_SUPPORTED_LANGUAGES = [
|
|
4283
|
+
'de',
|
|
4284
|
+
'de-informal',
|
|
4285
|
+
'de-no-binnen-i',
|
|
4286
|
+
'en',
|
|
4287
|
+
'fr',
|
|
4288
|
+
'it',
|
|
4289
|
+
'none',
|
|
4290
|
+
];
|
|
4291
|
+
class TranslationsService {
|
|
4292
|
+
constructor(config, route, storage, translate, sessionStorage, ref, appService) {
|
|
4293
|
+
this.config = config;
|
|
4294
|
+
this.route = route;
|
|
4295
|
+
this.storage = storage;
|
|
4296
|
+
this.translate = translate;
|
|
4297
|
+
this.sessionStorage = sessionStorage;
|
|
4298
|
+
this.ref = ref;
|
|
4299
|
+
this.appService = appService;
|
|
4300
|
+
this.languageLoaded = new BehaviorSubject(false);
|
|
4301
|
+
this.sessionStorage?.observe('language').subscribe((lang) => {
|
|
4302
|
+
// language has changed, i.e. user has different preference
|
|
4303
|
+
if (this.translate.currentLang && this.translate.currentLang !== lang) {
|
|
4304
|
+
this.initialize().subscribe(() => {
|
|
4305
|
+
this.ref.tick();
|
|
4306
|
+
});
|
|
4307
|
+
}
|
|
4308
|
+
});
|
|
4309
|
+
}
|
|
4310
|
+
/**
|
|
4311
|
+
* Determines and configures the language to use and triggers loading of translations with
|
|
4312
|
+
* ngx-translate.
|
|
4313
|
+
*
|
|
4314
|
+
* Call this once in the app component.
|
|
4315
|
+
*/
|
|
4316
|
+
initialize() {
|
|
4317
|
+
const supportedLanguages$ = from(this.config.get('supportedLanguages', DEFAULT_SUPPORTED_LANGUAGES));
|
|
4318
|
+
if (this.appService?.isRunningApp()) {
|
|
4319
|
+
return supportedLanguages$.pipe(switchMap((supportedLanguages) => this.initializeCordova(supportedLanguages)), map(() => void 0));
|
|
4320
|
+
}
|
|
4321
|
+
supportedLanguages$
|
|
4322
|
+
.pipe(tap((supportedLanguages) => {
|
|
4323
|
+
if (!supportedLanguages.includes('none')) {
|
|
4324
|
+
supportedLanguages.push('none');
|
|
4325
|
+
}
|
|
4326
|
+
}), tap((supportedLanguages) => this.translate.addLangs(supportedLanguages)),
|
|
4327
|
+
// Select queryParams.locale if set meaningfully
|
|
4328
|
+
switchMap((supportedLanguages) => this.route.queryParams.pipe(first(), map((params) => {
|
|
4329
|
+
let selectedLanguage = null;
|
|
4330
|
+
if (supportedLanguages.indexOf(params.locale) !== -1) {
|
|
4331
|
+
selectedLanguage = params.locale;
|
|
4332
|
+
}
|
|
4333
|
+
else if (params.locale) {
|
|
4334
|
+
if (params.locale === 'de') {
|
|
4335
|
+
const deVariants = supportedLanguages.filter((l) => l.startsWith('de-'));
|
|
4336
|
+
if (deVariants?.length === 1) {
|
|
4337
|
+
selectedLanguage = deVariants[0];
|
|
4338
|
+
}
|
|
4339
|
+
else {
|
|
4340
|
+
console.warn(`Url requested language ${params.locale}, ` +
|
|
4341
|
+
'but ambiguous variants are present: ' +
|
|
4342
|
+
supportedLanguages);
|
|
4343
|
+
}
|
|
4344
|
+
}
|
|
4345
|
+
else {
|
|
4346
|
+
console.warn(`Url requested language ${params.locale}, ` +
|
|
4347
|
+
'but it was not found or is not configured in the allowed languages: ' +
|
|
4348
|
+
supportedLanguages);
|
|
4349
|
+
}
|
|
4350
|
+
}
|
|
4351
|
+
return {
|
|
4352
|
+
supportedLanguages,
|
|
4353
|
+
selectedLanguage,
|
|
4354
|
+
};
|
|
4355
|
+
}))),
|
|
4356
|
+
// Select storage.get('language') if set meaningfully
|
|
4357
|
+
switchMap(({ supportedLanguages, selectedLanguage }) => {
|
|
4358
|
+
if (selectedLanguage) {
|
|
4359
|
+
return of({
|
|
4360
|
+
supportedLanguages,
|
|
4361
|
+
selectedLanguage,
|
|
4362
|
+
useStored: false,
|
|
4363
|
+
});
|
|
4364
|
+
}
|
|
4365
|
+
else {
|
|
4366
|
+
return this.storage.get('language').pipe(map((storageLanguage) => {
|
|
4367
|
+
let useStored = false;
|
|
4368
|
+
if (supportedLanguages.indexOf(storageLanguage) !== -1) {
|
|
4369
|
+
selectedLanguage = storageLanguage;
|
|
4370
|
+
useStored = true;
|
|
4371
|
+
}
|
|
4372
|
+
return {
|
|
4373
|
+
supportedLanguages,
|
|
4374
|
+
selectedLanguage,
|
|
4375
|
+
useStored,
|
|
4376
|
+
};
|
|
4377
|
+
}));
|
|
4378
|
+
}
|
|
4379
|
+
}),
|
|
4380
|
+
// Use browser language if available, otherwise fall back to the first supported
|
|
4381
|
+
// language.
|
|
4382
|
+
map(({ supportedLanguages, selectedLanguage, useStored }) => {
|
|
4383
|
+
if (selectedLanguage) {
|
|
4384
|
+
return {
|
|
4385
|
+
supportedLanguages,
|
|
4386
|
+
selectedLanguage,
|
|
4387
|
+
useStored,
|
|
4388
|
+
};
|
|
4389
|
+
}
|
|
4390
|
+
else if (
|
|
4391
|
+
// Select browser language if set meaningfully
|
|
4392
|
+
supportedLanguages.indexOf(this.translate.getBrowserLang()) !== -1) {
|
|
4393
|
+
return {
|
|
4394
|
+
supportedLanguages,
|
|
4395
|
+
selectedLanguage: this.translate.getBrowserLang(),
|
|
4396
|
+
useStored,
|
|
4397
|
+
};
|
|
4398
|
+
}
|
|
4399
|
+
else {
|
|
4400
|
+
// Select first supported language
|
|
4401
|
+
return {
|
|
4402
|
+
supportedLanguages,
|
|
4403
|
+
selectedLanguage: supportedLanguages[0],
|
|
4404
|
+
useStored,
|
|
4405
|
+
};
|
|
4406
|
+
}
|
|
4407
|
+
}),
|
|
4408
|
+
// Set fallback language
|
|
4409
|
+
tap(({ supportedLanguages, selectedLanguage, useStored }) => {
|
|
4410
|
+
if (!useStored) {
|
|
4411
|
+
void this.storage.set('language', selectedLanguage);
|
|
4412
|
+
}
|
|
4413
|
+
if (selectedLanguage === 'none') {
|
|
4414
|
+
this.translate.setDefaultLang('none');
|
|
4415
|
+
}
|
|
4416
|
+
else if (selectedLanguage?.startsWith('de-')) {
|
|
4417
|
+
this.translate.setDefaultLang('de');
|
|
4418
|
+
}
|
|
4419
|
+
else {
|
|
4420
|
+
this.translate.setDefaultLang(supportedLanguages[0]);
|
|
4421
|
+
}
|
|
4422
|
+
}),
|
|
4423
|
+
// Configure `ngx-translate` to use the determined language and trigger loading of
|
|
4424
|
+
// translations.
|
|
4425
|
+
switchMap(({ selectedLanguage }) => {
|
|
4426
|
+
// console.log('language used: ' + selectedLanguage);
|
|
4427
|
+
this.language = selectedLanguage;
|
|
4428
|
+
return this.translate.use(selectedLanguage).pipe(map(() => void 0));
|
|
4429
|
+
}))
|
|
4430
|
+
.subscribe(() => {
|
|
4431
|
+
// Notify anyone waiting for translations to be loaded.
|
|
4432
|
+
this.languageLoaded.next(true);
|
|
4433
|
+
});
|
|
4434
|
+
return this.waitForInit();
|
|
4435
|
+
}
|
|
4436
|
+
async initializeCordova(supportedLanguages = DEFAULT_SUPPORTED_LANGUAGES) {
|
|
4437
|
+
this.translate.addLangs(supportedLanguages);
|
|
4438
|
+
let language = supportedLanguages[0];
|
|
4439
|
+
this.translate.setDefaultLang(language);
|
|
4440
|
+
this.translate.use(language);
|
|
4441
|
+
this.language = language;
|
|
4442
|
+
const data = await this.appService.getLanguage();
|
|
4443
|
+
if (supportedLanguages.indexOf(data) != -1) {
|
|
4444
|
+
language = data;
|
|
4445
|
+
}
|
|
4446
|
+
this.language = language;
|
|
4447
|
+
this.translate.use(language).subscribe(() => {
|
|
4448
|
+
this.languageLoaded.next(true);
|
|
4449
|
+
});
|
|
4450
|
+
// this.translate.getTranslation(language).subscribe(() => {
|
|
4451
|
+
// });
|
|
4452
|
+
return this.waitForInit();
|
|
4453
|
+
}
|
|
4454
|
+
waitForInit() {
|
|
4455
|
+
return this.languageLoaded.pipe(first((languageLoaded) => languageLoaded), map(() => void 0));
|
|
4456
|
+
}
|
|
4457
|
+
/** Same as `translate.currentLang`. */
|
|
4458
|
+
getLanguage() {
|
|
4459
|
+
return this.language;
|
|
4460
|
+
}
|
|
4461
|
+
getISOLanguage() {
|
|
4462
|
+
return LANGUAGES[this.language];
|
|
4463
|
+
}
|
|
4464
|
+
getLocale() {
|
|
4465
|
+
return this.getISOLanguage().replace('_', '-');
|
|
4466
|
+
}
|
|
4467
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", 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 }); }
|
|
4468
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsService, providedIn: 'root' }); }
|
|
4469
|
+
}
|
|
4470
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsService, decorators: [{
|
|
4471
|
+
type: Injectable,
|
|
4472
|
+
args: [{ providedIn: 'root' }]
|
|
4473
|
+
}], ctorParameters: () => [{ type: i2.ConfigService }, { type: i2$1.ActivatedRoute }, { type: i2.SessionStorageService }, { type: i1.TranslateService }, { type: i2.SessionStorageService }, { type: i0.ApplicationRef }, { type: AppService, decorators: [{
|
|
4474
|
+
type: Optional
|
|
4475
|
+
}] }] });
|
|
4476
|
+
|
|
4116
4477
|
class ListItemLabelPipe {
|
|
4117
|
-
constructor(translate) {
|
|
4478
|
+
constructor(translate, translations) {
|
|
4118
4479
|
this.translate = translate;
|
|
4480
|
+
this.translations = translations;
|
|
4119
4481
|
}
|
|
4120
4482
|
transform(item, args = { fallback: item.name }) {
|
|
4121
4483
|
const mapping = {
|
|
@@ -4130,18 +4492,18 @@ class ListItemLabelPipe {
|
|
|
4130
4492
|
return rxjs.of(item.label);
|
|
4131
4493
|
}
|
|
4132
4494
|
else {
|
|
4133
|
-
return this.translate.get(mapping[item.type] + '.' + item.name, {
|
|
4495
|
+
return this.translations.waitForInit().pipe(startWith(null), delay$1(1), switchMap(() => this.translate.get(mapping[item.type] + '.' + item.name, {
|
|
4134
4496
|
fallback: args.fallback,
|
|
4135
|
-
});
|
|
4497
|
+
})));
|
|
4136
4498
|
}
|
|
4137
4499
|
}
|
|
4138
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4139
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.
|
|
4500
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemLabelPipe, deps: [{ token: i1.TranslateService }, { token: TranslationsService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
4501
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ListItemLabelPipe, name: "esListItemLabel" }); }
|
|
4140
4502
|
}
|
|
4141
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4503
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemLabelPipe, decorators: [{
|
|
4142
4504
|
type: Pipe,
|
|
4143
4505
|
args: [{ name: 'esListItemLabel' }]
|
|
4144
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
4506
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: TranslationsService }] });
|
|
4145
4507
|
|
|
4146
4508
|
var NodeEntriesDisplayType;
|
|
4147
4509
|
(function (NodeEntriesDisplayType) {
|
|
@@ -4222,12 +4584,12 @@ class SortSelectPanelComponent {
|
|
|
4222
4584
|
direction: event.ascending ? 'asc' : 'desc',
|
|
4223
4585
|
});
|
|
4224
4586
|
}
|
|
4225
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4226
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
4587
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SortSelectPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4588
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SortSelectPanelComponent, selector: "es-sort-select-panel", inputs: { active: "active", direction: "direction", columns: "columns", customSortingInProgress: "customSortingInProgress" }, outputs: { sortChange: "sortChange", customSortingInProgressChange: "customSortingInProgressChange" }, ngImport: i0, template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{ 'NODE.' + active | translate }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (sort)=\"onSort($event)\"\n ></es-sort-dropdown>\n</ng-container>\n", styles: [":host{display:flex;justify-content:flex-end;align-items:center}mat-slide-toggle{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: SortDropdownComponent, selector: "es-sort-dropdown", inputs: ["columns", "sortBy", "sortAscending"], outputs: ["sort"] }, { 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: "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: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
4227
4589
|
}
|
|
4228
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4590
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SortSelectPanelComponent, decorators: [{
|
|
4229
4591
|
type: Component,
|
|
4230
|
-
args: [{ selector: 'es-sort-select-panel', template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{ 'NODE.' + active | translate }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (
|
|
4592
|
+
args: [{ selector: 'es-sort-select-panel', template: "<mat-slide-toggle\n *ngIf=\"active === 'ccm:collection_ordered_position'\"\n [(ngModel)]=\"customSortingInProgress\"\n (ngModelChange)=\"customSortingInProgressChange.emit($event)\"\n>\n {{ 'COLLECTIONS.SORT_SLIDER' | translate }}\n</mat-slide-toggle>\n<ng-container *ngIf=\"columns?.length\">\n <button\n *ngIf=\"sortDropdown.menu\"\n [matMenuTriggerFor]=\"sortDropdown.menu\"\n mat-button\n color=\"primary\"\n >\n <span *ngIf=\"active\">{{ 'NODE.' + active | translate }}</span>\n <span *ngIf=\"!active\">{{ 'SORT_BY' | translate }}</span>\n <i\n *ngIf=\"active && active !== 'ccm:collection_ordered_position'\"\n [esIcon]=\"'arrow_' + (direction === 'asc' ? 'upward' : 'downward')\"\n ></i>\n </button>\n\n <es-sort-dropdown\n #sortDropdown\n [columns]=\"columns\"\n [sortBy]=\"active\"\n [sortAscending]=\"direction === 'asc'\"\n (sort)=\"onSort($event)\"\n ></es-sort-dropdown>\n</ng-container>\n", styles: [":host{display:flex;justify-content:flex-end;align-items:center}mat-slide-toggle{margin-right:10px}\n"] }]
|
|
4231
4593
|
}], ctorParameters: () => [], propDecorators: { active: [{
|
|
4232
4594
|
type: Input
|
|
4233
4595
|
}], direction: [{
|
|
@@ -4414,10 +4776,10 @@ class NodeEntriesService {
|
|
|
4414
4776
|
return this.entriesGlobal.getPaginationStrategy(this.scope);
|
|
4415
4777
|
}
|
|
4416
4778
|
get columns() {
|
|
4417
|
-
return this.columnsSubject.value;
|
|
4779
|
+
return this.columnsSubject.value?.columns;
|
|
4418
4780
|
}
|
|
4419
|
-
set columns(
|
|
4420
|
-
this.columnsSubject.next(
|
|
4781
|
+
set columns(columns) {
|
|
4782
|
+
this.columnsSubject.next({ columns, fromUser: true });
|
|
4421
4783
|
}
|
|
4422
4784
|
get options() {
|
|
4423
4785
|
return this.options$.value;
|
|
@@ -4440,8 +4802,9 @@ class NodeEntriesService {
|
|
|
4440
4802
|
set gridConfig(value) {
|
|
4441
4803
|
this.gridConfig$.next(value);
|
|
4442
4804
|
}
|
|
4443
|
-
constructor(uiService, entriesGlobal) {
|
|
4805
|
+
constructor(uiService, toast, entriesGlobal) {
|
|
4444
4806
|
this.uiService = uiService;
|
|
4807
|
+
this.toast = toast;
|
|
4445
4808
|
this.entriesGlobal = entriesGlobal;
|
|
4446
4809
|
this.dataSource$ = new BehaviorSubject(null);
|
|
4447
4810
|
/**
|
|
@@ -4469,7 +4832,6 @@ class NodeEntriesService {
|
|
|
4469
4832
|
}
|
|
4470
4833
|
}
|
|
4471
4834
|
onCheckboxChanged(node, checked) {
|
|
4472
|
-
console.log(node, checked, this.uiService.shiftKeyPressed);
|
|
4473
4835
|
if (this.uiService.shiftKeyPressed) {
|
|
4474
4836
|
this.expandSelectionTo(node);
|
|
4475
4837
|
}
|
|
@@ -4531,23 +4893,42 @@ class NodeEntriesService {
|
|
|
4531
4893
|
}
|
|
4532
4894
|
}
|
|
4533
4895
|
}
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4537
|
-
|
|
4538
|
-
|
|
4539
|
-
|
|
4540
|
-
|
|
4541
|
-
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4896
|
+
openDropdown(dropdown, node, onDone = null) {
|
|
4897
|
+
if (!this.selection.selected.includes(node)) {
|
|
4898
|
+
this.selection.clear();
|
|
4899
|
+
this.selection.select(node);
|
|
4900
|
+
}
|
|
4901
|
+
// Wait for the menu to reflect changed options.
|
|
4902
|
+
setTimeout(() => {
|
|
4903
|
+
dropdown.callbackObjects = this.selection.selected;
|
|
4904
|
+
dropdown.ngOnChanges();
|
|
4905
|
+
if (dropdown.canShowDropdown()) {
|
|
4906
|
+
if (onDone) {
|
|
4907
|
+
onDone();
|
|
4908
|
+
}
|
|
4909
|
+
}
|
|
4910
|
+
else {
|
|
4911
|
+
this.toast.toast('NO_AVAILABLE_OPTIONS');
|
|
4912
|
+
}
|
|
4913
|
+
});
|
|
4914
|
+
}
|
|
4915
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesService, deps: [{ token: UIService }, { token: Toast }, { token: NodeEntriesGlobalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4916
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesService }); }
|
|
4917
|
+
}
|
|
4918
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesService, decorators: [{
|
|
4919
|
+
type: Injectable
|
|
4920
|
+
}], ctorParameters: () => [{ type: UIService }, { type: Toast }, { type: NodeEntriesGlobalService }] });
|
|
4921
|
+
|
|
4922
|
+
class NodeEntriesTemplatesService {
|
|
4923
|
+
constructor() { }
|
|
4924
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesTemplatesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4925
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesTemplatesService }); }
|
|
4926
|
+
}
|
|
4927
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesTemplatesService, decorators: [{
|
|
4928
|
+
type: Injectable
|
|
4929
|
+
}], ctorParameters: () => [] });
|
|
4930
|
+
|
|
4931
|
+
class ColumnChooserComponent {
|
|
4551
4932
|
constructor() {
|
|
4552
4933
|
this.columnChooserVisible = false;
|
|
4553
4934
|
this.columnChooserVisibleChange = new EventEmitter();
|
|
@@ -4562,10 +4943,10 @@ class ColumnChooserComponent {
|
|
|
4562
4943
|
column.visible = !column.visible;
|
|
4563
4944
|
this.columnsChange.emit(this.columns);
|
|
4564
4945
|
}
|
|
4565
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4566
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
4946
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColumnChooserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4947
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ColumnChooserComponent, selector: "es-column-chooser", inputs: { origin: "origin", columnChooserVisible: "columnChooserVisible", columns: "columns" }, outputs: { columnChooserVisibleChange: "columnChooserVisibleChange", columnsChange: "columnsChange" }, ngImport: i0, template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"columnChooserVisible\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"5\"\n (backdropClick)=\"columnChooserVisibleChange.emit(false)\"\n cdkConnectedOverlayBackdropClass=\"column-chooser-backdrop\"\n>\n <div\n cdkDropList\n class=\"column-chooser mat-elevation-z2\"\n (cdkDropListDropped)=\"columnChooserDrop($event)\"\n >\n <div class=\"column-chooser-item\" *ngFor=\"let column of columns; index as index\" cdkDrag>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"columnChooserToggle(index)\"\n color=\"primary\"\n >\n {{ column | esListItemLabel | async }}\n </mat-checkbox>\n <div class=\"drag-handle\" cdkDragHandle>\n <i esIcon=\"drag_handle\"></i>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".column-chooser{max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:auto}.column-chooser-item{border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;background:#fff;font-size:14px;justify-content:space-between}.column-chooser-item mat-checkbox{margin:0 12px}.column-chooser-item .drag-handle{color:#00000080;cursor:move;padding:20px}.column-chooser-backdrop{background:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$4.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: ListItemLabelPipe, name: "esListItemLabel" }] }); }
|
|
4567
4948
|
}
|
|
4568
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
4949
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
|
|
4569
4950
|
type: Component,
|
|
4570
4951
|
args: [{ selector: 'es-column-chooser', template: "<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"columnChooserVisible\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"5\"\n (backdropClick)=\"columnChooserVisibleChange.emit(false)\"\n cdkConnectedOverlayBackdropClass=\"column-chooser-backdrop\"\n>\n <div\n cdkDropList\n class=\"column-chooser mat-elevation-z2\"\n (cdkDropListDropped)=\"columnChooserDrop($event)\"\n >\n <div class=\"column-chooser-item\" *ngFor=\"let column of columns; index as index\" cdkDrag>\n <mat-checkbox\n [checked]=\"column.visible\"\n (change)=\"columnChooserToggle(index)\"\n color=\"primary\"\n >\n {{ column | esListItemLabel | async }}\n </mat-checkbox>\n <div class=\"drag-handle\" cdkDragHandle>\n <i esIcon=\"drag_handle\"></i>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".column-chooser{max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:auto}.column-chooser-item{border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;background:#fff;font-size:14px;justify-content:space-between}.column-chooser-item mat-checkbox{margin:0 12px}.column-chooser-item .drag-handle{color:#00000080;cursor:move;padding:20px}.column-chooser-backdrop{background:none}\n"] }]
|
|
4571
4952
|
}], ctorParameters: () => [], propDecorators: { origin: [{
|
|
@@ -4807,10 +5188,10 @@ class NodeRatingComponent {
|
|
|
4807
5188
|
isFromHomeRepo(node) {
|
|
4808
5189
|
return this.networkApi.isFromHomeRepository(node);
|
|
4809
5190
|
}
|
|
4810
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4811
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5191
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeRatingComponent, deps: [{ token: Toast }, { token: i2.ConfigService }, { token: i2.NetworkService }, { token: i2.AuthenticationService }, { token: i0.ChangeDetectorRef }, { token: i2.RatingV1Service }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5192
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeRatingComponent, selector: "es-node-rating", inputs: { node: "node" }, ngImport: i0, template: "<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n", styles: [".stars{display:flex;align-items:center}.stars span{padding-left:8px}.likes{display:flex;align-items:center}.mdc-icon-button.mat-primary{color:var(--textLight);display:flex;align-items:center;padding:0}.mdc-icon-button.mat-primary.star,.mdc-icon-button.mat-primary.delete{min-width:unset;width:18px;height:18px}.mdc-icon-button.mat-primary.star i,.mdc-icon-button.mat-primary.delete i{font-size:17px;line-height:1}.mdc-icon-button.mat-primary.star ::ng-deep .mat-mdc-button-touch-target,.mdc-icon-button.mat-primary.delete ::ng-deep .mat-mdc-button-touch-target{display:none}.mdc-icon-button.mat-primary.star.star-hover,.mdc-icon-button.mat-primary.delete.star-hover{color:var(--colorStarActive)}\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: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { 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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
4812
5193
|
}
|
|
4813
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5194
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeRatingComponent, decorators: [{
|
|
4814
5195
|
type: Component,
|
|
4815
5196
|
args: [{ selector: 'es-node-rating', template: "<ng-container *ngIf=\"hasPermission && node.type === 'ccm:io' && isFromHomeRepo(node)\">\n <div *ngIf=\"mode === 'likes'\" class=\"likes\">\n <button\n (click)=\"toogleLike()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n mat-icon-button\n color=\"primary\"\n matTooltip=\"{{ 'RATING.LIKES' | translate }}\"\n >\n <i [esIcon]=\"'edu-thumb_up' + (!node.rating?.user ? '_off' : '')\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_LIKES' | translate }}\">{{\n node.rating?.overall.count\n }}</span>\n </div>\n <div *ngIf=\"mode === 'stars'\" class=\"stars\" mat-icon-button color=\"primary\">\n <button\n *ngFor=\"let rating of [1, 2, 3, 4, 5]\"\n mat-icon-button\n color=\"primary\"\n class=\"star\"\n (click)=\"setRating(rating)\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n (focus)=\"hoverStar = rating\"\n (mouseenter)=\"hoverStar = rating\"\n (mouseleave)=\"hoverStar = 0\"\n (blur)=\"hoverStar = 0\"\n [class.star-hover]=\"hoverStar >= rating\"\n >\n <i\n [esIcon]=\"\n 'star' +\n ((hoverStar ? hoverStar >= rating : getPrimaryRating() >= rating) ? '' : '_border')\n \"\n matTooltip=\"{{ 'RATING.STARS_RATE' | translate : { rating: rating } }}\"\n ></i>\n </button>\n <button\n *ngIf=\"!!node.rating?.user\"\n mat-icon-button\n color=\"primary\"\n class=\"delete\"\n matTooltip=\"{{ 'RATING.DELETE_RATING' | translate }}\"\n (click)=\"deleteRating()\"\n [disabled]=\"(this.authenticationService.observeLoginInfo() | async)?.isGuest\"\n >\n <i esIcon=\"clear\"></i>\n </button>\n <span matTooltip=\"{{ 'RATING.COUNT_RATINGS' | translate }}\"\n >({{ node.rating?.overall.count }})</span\n >\n </div>\n</ng-container>\n", styles: [".stars{display:flex;align-items:center}.stars span{padding-left:8px}.likes{display:flex;align-items:center}.mdc-icon-button.mat-primary{color:var(--textLight);display:flex;align-items:center;padding:0}.mdc-icon-button.mat-primary.star,.mdc-icon-button.mat-primary.delete{min-width:unset;width:18px;height:18px}.mdc-icon-button.mat-primary.star i,.mdc-icon-button.mat-primary.delete i{font-size:17px;line-height:1}.mdc-icon-button.mat-primary.star ::ng-deep .mat-mdc-button-touch-target,.mdc-icon-button.mat-primary.delete ::ng-deep .mat-mdc-button-touch-target{display:none}.mdc-icon-button.mat-primary.star.star-hover,.mdc-icon-button.mat-primary.delete.star-hover{color:var(--colorStarActive)}\n"] }]
|
|
4816
5197
|
}], ctorParameters: () => [{ type: Toast }, { type: i2.ConfigService }, { type: i2.NetworkService }, { type: i2.AuthenticationService }, { type: i0.ChangeDetectorRef }, { type: i2.RatingV1Service }], propDecorators: { node: [{
|
|
@@ -4848,10 +5229,10 @@ class PreviewImageComponent {
|
|
|
4848
5229
|
canvas.height = height;
|
|
4849
5230
|
canvas.getContext('2d').drawImage(image, 0, 0, width, height);
|
|
4850
5231
|
}
|
|
4851
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4852
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5232
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PreviewImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5233
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: PreviewImageComponent, selector: "es-preview-image", inputs: { node: "node", playAnimation: "playAnimation" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["image"], descendants: true }, { propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true }], ngImport: i0, template: "<div class=\"card-image-backdrop\">\n <!-- The blur filter does not work with canvas as it does with img on Chrome, so we go for a black\n background for now. -->\n <!-- <canvas *ngIf=\"showCanvas\" #backdropCanvas role=\"presentation\" aria-hidden=\"true\"></canvas> -->\n <img\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n *ngIf=\"!replacedWithStatic\"\n />\n</div>\n\n<canvas *ngIf=\"showCanvas\" #canvas role=\"presentation\" aria-hidden=\"true\"></canvas>\n<img\n (load)=\"onImageLoad($event)\"\n #image\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n [class.display-none]=\"replacedWithStatic && !playAnimation\"\n/>\n", styles: [":host{position:relative;overflow:hidden}.card-image-backdrop{position:absolute;width:100%;height:100%;background-color:#000}.card-image-backdrop img,.card-image-backdrop canvas{position:absolute;left:-30px;top:-30px;width:calc(100% + 60px);height:calc(100% + 60px);z-index:0;overflow:hidden;filter:blur(15px);object-fit:cover;opacity:.7;opacity:1}:host>img,:host>canvas{width:100%;height:100%;object-fit:contain;position:absolute}.display-none{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeImagePipe, name: "esNodeImage" }] }); }
|
|
4853
5234
|
}
|
|
4854
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5235
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PreviewImageComponent, decorators: [{
|
|
4855
5236
|
type: Component,
|
|
4856
5237
|
args: [{ selector: 'es-preview-image', template: "<div class=\"card-image-backdrop\">\n <!-- The blur filter does not work with canvas as it does with img on Chrome, so we go for a black\n background for now. -->\n <!-- <canvas *ngIf=\"showCanvas\" #backdropCanvas role=\"presentation\" aria-hidden=\"true\"></canvas> -->\n <img\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n *ngIf=\"!replacedWithStatic\"\n />\n</div>\n\n<canvas *ngIf=\"showCanvas\" #canvas role=\"presentation\" aria-hidden=\"true\"></canvas>\n<img\n (load)=\"onImageLoad($event)\"\n #image\n [src]=\"node | esNodeImage : { maxWidth: 300, maxHeight: 300, crop: true } | async\"\n alt=\"\"\n [class.display-none]=\"replacedWithStatic && !playAnimation\"\n/>\n", styles: [":host{position:relative;overflow:hidden}.card-image-backdrop{position:absolute;width:100%;height:100%;background-color:#000}.card-image-backdrop img,.card-image-backdrop canvas{position:absolute;left:-30px;top:-30px;width:calc(100% + 60px);height:calc(100% + 60px);z-index:0;overflow:hidden;filter:blur(15px);object-fit:cover;opacity:.7;opacity:1}:host>img,:host>canvas{width:100%;height:100%;object-fit:contain;position:absolute}.display-none{display:none}\n"] }]
|
|
4857
5238
|
}], ctorParameters: () => [], propDecorators: { node: [{
|
|
@@ -4882,10 +5263,10 @@ class NodeTypeBadgeComponent {
|
|
|
4882
5263
|
getCustomTemplate() {
|
|
4883
5264
|
return this.nodeEntriesGlobalService.getCustomFieldTemplate({ type: 'NODE', name: CustomFieldSpecialType.type }, this.node);
|
|
4884
5265
|
}
|
|
4885
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4886
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5266
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeTypeBadgeComponent, deps: [{ token: NodeHelperService }, { token: NodeEntriesGlobalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5267
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: { node: "node" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isCollection\">\n <i\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n ></i>\n</ng-container>\n<ng-container *ngIf=\"!isCollection\">\n <ng-container *ngIf=\"getCustomTemplate() as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getCustomTemplate()\">\n <img\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 />\n </ng-container>\n</ng-container>\n", styles: [":host{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}:host i{font-size:18px;color:#333}:host img{width:18px;height:18px}\n"], dependencies: [{ 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: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: NodeIconPipe, name: "esNodeIcon" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
4887
5268
|
}
|
|
4888
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5269
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeTypeBadgeComponent, decorators: [{
|
|
4889
5270
|
type: Component,
|
|
4890
5271
|
args: [{ selector: 'es-node-type-badge', template: "<ng-container *ngIf=\"isCollection\">\n <i\n [matTooltip]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [altText]=\"\n 'COLLECTION.SCOPE.' + nodeHelper.getCollectionScopeInfo($any(node)).scopeName | translate\n \"\n [esIcon]=\"nodeHelper.getCollectionScopeInfo($any(node)).icon\"\n ></i>\n</ng-container>\n<ng-container *ngIf=\"!isCollection\">\n <ng-container *ngIf=\"getCustomTemplate() as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getCustomTemplate()\">\n <img\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 />\n </ng-container>\n</ng-container>\n", styles: [":host{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}:host i{font-size:18px;color:#333}:host img{width:18px;height:18px}\n"] }]
|
|
4891
5272
|
}], ctorParameters: () => [{ type: NodeHelperService }, { type: NodeEntriesGlobalService }], propDecorators: { node: [{
|
|
@@ -4899,19 +5280,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4899
5280
|
class OptionButtonComponent {
|
|
4900
5281
|
constructor() {
|
|
4901
5282
|
this.isShown = false;
|
|
5283
|
+
this.isEnabled = false;
|
|
4902
5284
|
}
|
|
4903
5285
|
async ngOnChanges(changes) {
|
|
5286
|
+
this.isEnabled = await this.optionIsValid(this.option, this.node);
|
|
4904
5287
|
this.isShown = await this.optionIsShown(this.option, this.node);
|
|
4905
5288
|
}
|
|
4906
|
-
optionIsValid(optionItem, node) {
|
|
5289
|
+
async optionIsValid(optionItem, node) {
|
|
4907
5290
|
if (optionItem.enabledCallback) {
|
|
4908
|
-
return optionItem.enabledCallback(node);
|
|
5291
|
+
return await optionItem.enabledCallback([node]);
|
|
4909
5292
|
}
|
|
4910
5293
|
return optionItem.isEnabled;
|
|
4911
5294
|
}
|
|
4912
5295
|
async optionIsShown(optionItem, node) {
|
|
4913
5296
|
if (optionItem.showCallback) {
|
|
4914
|
-
return optionItem.showCallback(node);
|
|
5297
|
+
return optionItem.showCallback([node]);
|
|
4915
5298
|
}
|
|
4916
5299
|
return true;
|
|
4917
5300
|
}
|
|
@@ -4920,14 +5303,14 @@ class OptionButtonComponent {
|
|
|
4920
5303
|
option.callback(node);
|
|
4921
5304
|
}
|
|
4922
5305
|
}
|
|
4923
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4924
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5306
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5307
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: OptionButtonComponent, selector: "es-option-button", inputs: { option: "option", node: "node" }, usesOnChanges: true, ngImport: i0, template: `
|
|
4925
5308
|
<button
|
|
4926
5309
|
mat-icon-button
|
|
4927
5310
|
color="primary"
|
|
4928
5311
|
matTooltip="{{ option.name | translate }}"
|
|
4929
5312
|
[class.display-none]="!isShown"
|
|
4930
|
-
[disabled]="!
|
|
5313
|
+
[disabled]="!isEnabled"
|
|
4931
5314
|
(click)="click(option, node)"
|
|
4932
5315
|
attr.data-test="option-button-{{ option.name }}"
|
|
4933
5316
|
>
|
|
@@ -4935,7 +5318,7 @@ class OptionButtonComponent {
|
|
|
4935
5318
|
</button>
|
|
4936
5319
|
`, isInline: true, dependencies: [{ kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { 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: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
4937
5320
|
}
|
|
4938
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5321
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionButtonComponent, decorators: [{
|
|
4939
5322
|
type: Component,
|
|
4940
5323
|
args: [{
|
|
4941
5324
|
selector: 'es-option-button',
|
|
@@ -4945,7 +5328,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
4945
5328
|
color="primary"
|
|
4946
5329
|
matTooltip="{{ option.name | translate }}"
|
|
4947
5330
|
[class.display-none]="!isShown"
|
|
4948
|
-
[disabled]="!
|
|
5331
|
+
[disabled]="!isEnabled"
|
|
4949
5332
|
(click)="click(option, node)"
|
|
4950
5333
|
attr.data-test="option-button-{{ option.name }}"
|
|
4951
5334
|
>
|
|
@@ -4982,10 +5365,10 @@ class NodeStatsBadgesComponent {
|
|
|
4982
5365
|
return 0;
|
|
4983
5366
|
}
|
|
4984
5367
|
}
|
|
4985
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
4986
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5368
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeStatsBadgesComponent, deps: [{ token: NodeEntriesService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5369
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: { node: "node", backgroundStyle: "backgroundStyle" }, host: { properties: { "attr.backgroundStyle": "this.backgroundStyle" } }, ngImport: i0, template: "<!--\n <div\n *ngIf=\"node.aspects?.includes('ccm:published')\"\n class=\"card-top-bar-published-copy\"\n >\n <div class=\"node-published-copy\">\n <i\n esIcon=\"content_copy\"\n [matTooltip]=\"'PUBLISHED_COPY_TOOLTIP' | translate\"\n ></i>\n </div>\n </div>\n -->\n<div class=\"card-top-bar-comments\">\n <div\n class=\"node-comments\"\n *ngIf=\"node.type === 'ccm:io'\"\n (click)=\"\n entriesService?.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Comments\n })\n \"\n [matTooltip]=\"('COMMENTS_MULTIPLE' | translate) + ': ' + node.commentCount\"\n >\n <i esIcon=\"comment\"></i>\n <span>{{ node.commentCount }}</span>\n </div>\n</div>\n<div class=\"card-top-bar-childobjects\" *ngIf=\"childObjectCount > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{ 'CHILDOBJECT_COUNT' | translate : { count: childObjectCount + 1 } }}\"\n >\n <span>{{ childObjectCount + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n</div>\n", styles: [":host{display:flex;gap:15px}.card-top-bar-comments>div,.card-top-bar-published-copy>div,.card-top-bar-childobjects>div{border-radius:15px;display:inline-flex;align-items:center;min-width:35px;min-height:22px;justify-content:center;cursor:default;-webkit-user-select:none;user-select:none;padding:2px 8px}:host[backgroundStyle=lighten] .card-top-bar-comments>div,:host[backgroundStyle=lighten] .card-top-bar-published-copy>div,:host[backgroundStyle=lighten] .card-top-bar-childobjects>div{background-color:#ffffffbf}:host[backgroundStyle=darken] .card-top-bar-comments>div,:host[backgroundStyle=darken] .card-top-bar-published-copy>div,:host[backgroundStyle=darken] .card-top-bar-childobjects>div{background-color:#0003}.card-top-bar-comments>div.childobject-count>i,.card-top-bar-published-copy>div.childobject-count>i,.card-top-bar-childobjects>div.childobject-count>i{font-size:13px;margin-left:4px}.card-top-bar-comments>div.node-published-copy,.card-top-bar-published-copy>div.node-published-copy,.card-top-bar-childobjects>div.node-published-copy{min-width:auto}.card-top-bar-comments>div.node-published-copy>i,.card-top-bar-published-copy>div.node-published-copy>i,.card-top-bar-childobjects>div.node-published-copy>i{font-size:13px}.card-top-bar-comments>div.node-comments>i,.card-top-bar-published-copy>div.node-comments>i,.card-top-bar-childobjects>div.node-comments>i{font-size:13px;margin-right:4px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
4987
5370
|
}
|
|
4988
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5371
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeStatsBadgesComponent, decorators: [{
|
|
4989
5372
|
type: Component,
|
|
4990
5373
|
args: [{ selector: 'es-node-stats-badges', template: "<!--\n <div\n *ngIf=\"node.aspects?.includes('ccm:published')\"\n class=\"card-top-bar-published-copy\"\n >\n <div class=\"node-published-copy\">\n <i\n esIcon=\"content_copy\"\n [matTooltip]=\"'PUBLISHED_COPY_TOOLTIP' | translate\"\n ></i>\n </div>\n </div>\n -->\n<div class=\"card-top-bar-comments\">\n <div\n class=\"node-comments\"\n *ngIf=\"node.type === 'ccm:io'\"\n (click)=\"\n entriesService?.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Comments\n })\n \"\n [matTooltip]=\"('COMMENTS_MULTIPLE' | translate) + ': ' + node.commentCount\"\n >\n <i esIcon=\"comment\"></i>\n <span>{{ node.commentCount }}</span>\n </div>\n</div>\n<div class=\"card-top-bar-childobjects\" *ngIf=\"childObjectCount > 0\">\n <div\n class=\"childobject-count\"\n matTooltip=\"{{ 'CHILDOBJECT_COUNT' | translate : { count: childObjectCount + 1 } }}\"\n >\n <span>{{ childObjectCount + 1 }}</span\n ><i esIcon=\"filter_none\"></i>\n </div>\n</div>\n", styles: [":host{display:flex;gap:15px}.card-top-bar-comments>div,.card-top-bar-published-copy>div,.card-top-bar-childobjects>div{border-radius:15px;display:inline-flex;align-items:center;min-width:35px;min-height:22px;justify-content:center;cursor:default;-webkit-user-select:none;user-select:none;padding:2px 8px}:host[backgroundStyle=lighten] .card-top-bar-comments>div,:host[backgroundStyle=lighten] .card-top-bar-published-copy>div,:host[backgroundStyle=lighten] .card-top-bar-childobjects>div{background-color:#ffffffbf}:host[backgroundStyle=darken] .card-top-bar-comments>div,:host[backgroundStyle=darken] .card-top-bar-published-copy>div,:host[backgroundStyle=darken] .card-top-bar-childobjects>div{background-color:#0003}.card-top-bar-comments>div.childobject-count>i,.card-top-bar-published-copy>div.childobject-count>i,.card-top-bar-childobjects>div.childobject-count>i{font-size:13px;margin-left:4px}.card-top-bar-comments>div.node-published-copy,.card-top-bar-published-copy>div.node-published-copy,.card-top-bar-childobjects>div.node-published-copy{min-width:auto}.card-top-bar-comments>div.node-published-copy>i,.card-top-bar-published-copy>div.node-published-copy>i,.card-top-bar-childobjects>div.node-published-copy>i{font-size:13px}.card-top-bar-comments>div.node-comments>i,.card-top-bar-published-copy>div.node-comments>i,.card-top-bar-childobjects>div.node-comments>i{font-size:13px;margin-right:4px}\n"] }]
|
|
4991
5374
|
}], ctorParameters: () => [{ type: NodeEntriesService, decorators: [{
|
|
@@ -5026,14 +5409,14 @@ class NodeEntriesCardComponent {
|
|
|
5026
5409
|
optionsOnCard() {
|
|
5027
5410
|
const options = this.entriesService.options?.[Target.List];
|
|
5028
5411
|
const always = options?.filter((o) => o.showAlways);
|
|
5029
|
-
if (always?.some((o) => o.showCallback(this.node))) {
|
|
5412
|
+
if (always?.some((o) => o.showCallback([this.node]))) {
|
|
5030
5413
|
return always;
|
|
5031
5414
|
}
|
|
5032
5415
|
// we do NOT show any additional actions
|
|
5033
5416
|
return [];
|
|
5034
5417
|
// return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
|
|
5035
5418
|
}
|
|
5036
|
-
openContextmenu(event) {
|
|
5419
|
+
openContextmenu(event, node) {
|
|
5037
5420
|
event.stopPropagation();
|
|
5038
5421
|
event.preventDefault();
|
|
5039
5422
|
if (!this.dropdown) {
|
|
@@ -5047,29 +5430,13 @@ class NodeEntriesCardComponent {
|
|
|
5047
5430
|
else {
|
|
5048
5431
|
({ x: this.dropdownLeft, y: this.dropdownTop } = event.target.getBoundingClientRect());
|
|
5049
5432
|
}
|
|
5050
|
-
|
|
5051
|
-
this.entriesService.selection.clear();
|
|
5052
|
-
this.entriesService.selection.select(this.node);
|
|
5053
|
-
}
|
|
5054
|
-
// Wait for the menu to reflect changed options.
|
|
5055
|
-
setTimeout(() => {
|
|
5056
|
-
if (this.dropdown.canShowDropdown()) {
|
|
5057
|
-
this.menuTrigger.openMenu();
|
|
5058
|
-
}
|
|
5059
|
-
else {
|
|
5060
|
-
this.toast.toast('NO_AVAILABLE_OPTIONS');
|
|
5061
|
-
}
|
|
5062
|
-
});
|
|
5433
|
+
this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());
|
|
5063
5434
|
}
|
|
5064
5435
|
getVisibleColumns() {
|
|
5065
5436
|
return this.entriesService.columns?.filter((c) => c.visible);
|
|
5066
5437
|
}
|
|
5067
5438
|
async openMenu(node) {
|
|
5068
|
-
this.entriesService.
|
|
5069
|
-
this.entriesService.selection.select(node);
|
|
5070
|
-
this.entriesService.selection.clickSource = ClickSource.Dropdown;
|
|
5071
|
-
await this.applicationRef.tick();
|
|
5072
|
-
this.dropdown.menu.focusFirstItem();
|
|
5439
|
+
this.entriesService.openDropdown(this.dropdown, node);
|
|
5073
5440
|
}
|
|
5074
5441
|
async ngOnInit() {
|
|
5075
5442
|
await this.configService.observeConfig().pipe(take(1)).toPromise();
|
|
@@ -5082,12 +5449,12 @@ class NodeEntriesCardComponent {
|
|
|
5082
5449
|
name,
|
|
5083
5450
|
}, this.node);
|
|
5084
5451
|
}
|
|
5085
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
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" }] }); }
|
|
5452
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", 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 }); }
|
|
5453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", 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", "disabledInteractive", "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
5454
|
}
|
|
5088
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5455
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
|
|
5089
5456
|
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"] }]
|
|
5457
|
+
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
5458
|
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeHelperService }, { type: i0.ApplicationRef }, { type: i2.ConfigService }, { type: i2.AuthenticationService }, { type: NodeEntriesTemplatesService }, { type: NodeEntriesGlobalService }, { type: Toast, decorators: [{
|
|
5092
5459
|
type: Optional
|
|
5093
5460
|
}] }], propDecorators: { dropdown: [{
|
|
@@ -5108,25 +5475,24 @@ class NodeEntriesCardSmallComponent {
|
|
|
5108
5475
|
this.InteractionType = InteractionType;
|
|
5109
5476
|
this.Target = Target;
|
|
5110
5477
|
}
|
|
5111
|
-
ngOnChanges(changes) { }
|
|
5112
5478
|
optionsOnCard() {
|
|
5113
5479
|
const options = this.entriesService.options[Target.List];
|
|
5114
5480
|
const always = options.filter((o) => o.showAlways);
|
|
5115
|
-
if (always.some((o) => o.showCallback(this.node))) {
|
|
5481
|
+
if (always.some((o) => o.showCallback([this.node]))) {
|
|
5116
5482
|
return always;
|
|
5117
5483
|
}
|
|
5118
|
-
return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
|
|
5484
|
+
return options.filter((o) => o.showAsAction && o.showCallback([this.node])).slice(0, 3);
|
|
5119
5485
|
}
|
|
5120
5486
|
openContextmenu(event) {
|
|
5121
5487
|
event.preventDefault();
|
|
5122
5488
|
event.stopPropagation();
|
|
5123
5489
|
}
|
|
5124
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
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"] }] }); }
|
|
5490
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardSmallComponent, deps: [{ token: NodeEntriesService }, { token: NodeHelperService }, { token: NodeEntriesTemplatesService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5491
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeEntriesCardSmallComponent, selector: "es-node-entries-card-small", inputs: { node: "node" }, 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 ($any(node).virtual ? ' grid-card-virtual' : '') +\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
5492
|
}
|
|
5127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5493
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardSmallComponent, decorators: [{
|
|
5128
5494
|
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"] }]
|
|
5495
|
+
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 ($any(node).virtual ? ' grid-card-virtual' : '') +\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
5496
|
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeHelperService }, { type: NodeEntriesTemplatesService }], propDecorators: { node: [{
|
|
5131
5497
|
type: Input
|
|
5132
5498
|
}] } });
|
|
@@ -5139,12 +5505,12 @@ class NodeEntriesGlobalOptionsComponent {
|
|
|
5139
5505
|
getEnabledOptions() {
|
|
5140
5506
|
return this.entriesService.globalOptionsSubject.pipe(map((options) => options.filter((e) => e.isEnabled)));
|
|
5141
5507
|
}
|
|
5142
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
5143
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
5508
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesGlobalOptionsComponent, deps: [{ token: NodeEntriesService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5509
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeEntriesGlobalOptionsComponent, selector: "es-node-entries-global-options", inputs: { displayType: "displayType" }, ngImport: i0, template: "<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--itemSelectedTextColor: var(--palette-primary-700);--listItemSelectedBackground: var(--palette-primary-50);--listItemSelectedBackgroundEffect: linear-gradient( to right, var(--primary) 0, var(--primary) 5px, var(--palette-primary-50) 5px, var(--palette-primary-50) 5px ) no-repeat}.global-options{display:grid;grid-template-columns:auto;grid-template-rows:repeat(auto-fit,minmax(70px,1fr));grid-row-gap:20px;height:100%;min-height:250px}.global-options.global-options-small{min-height:130px}.global-options.global-options-table{min-height:100px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-column-gap:20px}.global-options .global-option-btn{display:flex;height:100%;padding:0}.global-options .global-option{cursor:pointer;display:flex;box-shadow:0 0 5px #0000004d;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;border:3px dashed var(--primary);color:var(--primary)}.global-options .global-option>i{font-size:32px;margin-bottom:5px}.global-options .global-option>.label{cursor:pointer;font-weight:700}.global-options .global-option:hover,.global-options .global-option:focus{background-color:rgb(var(--palette-primary-50))}:host ::ng-deep .global-options .global-option-btn .mdc-button__label{width:100%;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: IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { 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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
5144
5510
|
}
|
|
5145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5511
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesGlobalOptionsComponent, decorators: [{
|
|
5146
5512
|
type: Component,
|
|
5147
|
-
args: [{ selector: 'es-node-entries-global-options', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--
|
|
5513
|
+
args: [{ selector: 'es-node-entries-global-options', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"(getEnabledOptions() | async)?.length\"\n role=\"listitem\"\n class=\"global-options\"\n [class.global-options-small]=\"displayType === NodeEntriesDisplayType.SmallGrid\"\n [class.global-options-table]=\"displayType === NodeEntriesDisplayType.Table\"\n>\n <button\n mat-button\n *ngFor=\"let option of getEnabledOptions() | async\"\n (click)=\"option.callback()\"\n class=\"global-option-btn\"\n attr.data-test=\"card-button-{{ option.name }}\"\n >\n <ng-container *ngTemplateOutlet=\"globalOption; context: { option: this.option }\"></ng-container>\n </button>\n</div>\n<ng-template #globalOption let-option=\"option\">\n <span class=\"global-option\">\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"label\">{{ option.name | translate }}</span>\n </span>\n</ng-template>\n", styles: [":root{--primary: var(--palette-primary-500);--warning: #cd2457;--tableIconSize: 38px;--textLight: #585858;--textMediumLight: #888;--textMain: #383838;--cardWidth: 240px;--colorStatusPositive: #40bf8e;--colorStatusNegative: var(--warning);--colorStarActive: #ba7c00;--nodeVirtualColor: #42ca8d;--nodeVirtualColorLight: #b8fcdd;--transitionNormal: .2s;--focusWidth: 2px;--fontSizeXSmall: 85%;--itemSelectedTextColor: var(--palette-primary-700);--listItemSelectedBackground: var(--palette-primary-50);--listItemSelectedBackgroundEffect: linear-gradient( to right, var(--primary) 0, var(--primary) 5px, var(--palette-primary-50) 5px, var(--palette-primary-50) 5px ) no-repeat}.global-options{display:grid;grid-template-columns:auto;grid-template-rows:repeat(auto-fit,minmax(70px,1fr));grid-row-gap:20px;height:100%;min-height:250px}.global-options.global-options-small{min-height:130px}.global-options.global-options-table{min-height:100px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-column-gap:20px}.global-options .global-option-btn{display:flex;height:100%;padding:0}.global-options .global-option{cursor:pointer;display:flex;box-shadow:0 0 5px #0000004d;width:100%;height:100%;flex-direction:column;align-items:center;justify-content:center;border:3px dashed var(--primary);color:var(--primary)}.global-options .global-option>i{font-size:32px;margin-bottom:5px}.global-options .global-option>.label{cursor:pointer;font-weight:700}.global-options .global-option:hover,.global-options .global-option:focus{background-color:rgb(var(--palette-primary-50))}:host ::ng-deep .global-options .global-option-btn .mdc-button__label{width:100%;height:100%}\n"] }]
|
|
5148
5514
|
}], ctorParameters: () => [{ type: NodeEntriesService }], propDecorators: { displayType: [{
|
|
5149
5515
|
type: Input
|
|
5150
5516
|
}] } });
|
|
@@ -5161,10 +5527,11 @@ class NodeEntriesCardGridComponent {
|
|
|
5161
5527
|
});
|
|
5162
5528
|
// }
|
|
5163
5529
|
}
|
|
5164
|
-
constructor(entriesService, entriesGlobalService, templatesService, ui, ngZone) {
|
|
5530
|
+
constructor(entriesService, entriesGlobalService, templatesService, nodeHelperService, ui, ngZone) {
|
|
5165
5531
|
this.entriesService = entriesService;
|
|
5166
5532
|
this.entriesGlobalService = entriesGlobalService;
|
|
5167
5533
|
this.templatesService = templatesService;
|
|
5534
|
+
this.nodeHelperService = nodeHelperService;
|
|
5168
5535
|
this.ui = ui;
|
|
5169
5536
|
this.ngZone = ngZone;
|
|
5170
5537
|
this.NodeEntriesDisplayType = NodeEntriesDisplayType;
|
|
@@ -5324,14 +5691,17 @@ class NodeEntriesCardGridComponent {
|
|
|
5324
5691
|
.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
5692
|
.some((c2) => c.type === c2.type && c2.name === c.name);
|
|
5326
5693
|
if (!result && !this.entriesService.configureColumns) {
|
|
5327
|
-
|
|
5328
|
-
|
|
5329
|
-
|
|
5330
|
-
|
|
5331
|
-
|
|
5332
|
-
|
|
5333
|
-
|
|
5334
|
-
|
|
5694
|
+
return this.entriesService.sort?.columns;
|
|
5695
|
+
/*
|
|
5696
|
+
const warning =
|
|
5697
|
+
'Sort field ' +
|
|
5698
|
+
c.name +
|
|
5699
|
+
' was specified but is not present as a column. ' +
|
|
5700
|
+
'It will be ignored. Please also configure this field in the <lists> section';
|
|
5701
|
+
if (!displayedWarnings.includes(warning)) {
|
|
5702
|
+
console.warn(warning);
|
|
5703
|
+
displayedWarnings.push(warning);
|
|
5704
|
+
}*/
|
|
5335
5705
|
}
|
|
5336
5706
|
return result;
|
|
5337
5707
|
});
|
|
@@ -5398,19 +5768,21 @@ class NodeEntriesCardGridComponent {
|
|
|
5398
5768
|
behavior: 'smooth',
|
|
5399
5769
|
});
|
|
5400
5770
|
}
|
|
5401
|
-
isCustomTemplate() {
|
|
5402
|
-
return this.entriesService.dataSource instanceof CustomTemplatesDataSource
|
|
5771
|
+
isCustomTemplate(node) {
|
|
5772
|
+
return (this.entriesService.dataSource instanceof CustomTemplatesDataSource ||
|
|
5773
|
+
node.elementRef);
|
|
5403
5774
|
}
|
|
5404
5775
|
isBlocked(node) {
|
|
5405
|
-
return node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true'
|
|
5776
|
+
return (node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true' ||
|
|
5777
|
+
this.nodeHelperService.isNodeRevoked(node));
|
|
5406
5778
|
}
|
|
5407
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
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 }); }
|
|
5779
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardGridComponent, deps: [{ token: NodeEntriesService }, { token: NodeEntriesGlobalService }, { token: NodeEntriesTemplatesService }, { token: NodeHelperService }, { token: UIService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5780
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", 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) === false\"\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) === false\"\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: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.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", "callbackObjects", "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
5781
|
}
|
|
5410
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
5782
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardGridComponent, decorators: [{
|
|
5411
5783
|
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"] }]
|
|
5413
|
-
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeEntriesGlobalService }, { type: NodeEntriesTemplatesService }, { type: UIService }, { type: i0.NgZone }], propDecorators: { columnChooserTrigger: [{
|
|
5784
|
+
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) === false\"\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) === false\"\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"] }]
|
|
5785
|
+
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeEntriesGlobalService }, { type: NodeEntriesTemplatesService }, { type: NodeHelperService }, { type: UIService }, { type: i0.NgZone }], propDecorators: { columnChooserTrigger: [{
|
|
5414
5786
|
type: ViewChild,
|
|
5415
5787
|
args: ['columnChooserTrigger']
|
|
5416
5788
|
}], gridTop: [{
|
|
@@ -5435,186 +5807,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
5435
5807
|
args: ['style.--scroll-gradient-color']
|
|
5436
5808
|
}] } });
|
|
5437
5809
|
|
|
5438
|
-
class AppService {
|
|
5439
|
-
}
|
|
5440
|
-
|
|
5441
|
-
// 'none' means that only labels should be shown (for dev)
|
|
5442
|
-
const DEFAULT_SUPPORTED_LANGUAGES = [
|
|
5443
|
-
'de',
|
|
5444
|
-
'de-informal',
|
|
5445
|
-
'de-no-binnen-i',
|
|
5446
|
-
'en',
|
|
5447
|
-
'fr',
|
|
5448
|
-
'it',
|
|
5449
|
-
'none',
|
|
5450
|
-
];
|
|
5451
|
-
class TranslationsService {
|
|
5452
|
-
constructor(config, route, storage, translate, appService) {
|
|
5453
|
-
this.config = config;
|
|
5454
|
-
this.route = route;
|
|
5455
|
-
this.storage = storage;
|
|
5456
|
-
this.translate = translate;
|
|
5457
|
-
this.appService = appService;
|
|
5458
|
-
this.languageLoaded = new BehaviorSubject(false);
|
|
5459
|
-
}
|
|
5460
|
-
/**
|
|
5461
|
-
* Determines and configures the language to use and triggers loading of translations with
|
|
5462
|
-
* ngx-translate.
|
|
5463
|
-
*
|
|
5464
|
-
* Call this once in the app component.
|
|
5465
|
-
*/
|
|
5466
|
-
initialize() {
|
|
5467
|
-
const supportedLanguages$ = from(this.config.get('supportedLanguages', DEFAULT_SUPPORTED_LANGUAGES));
|
|
5468
|
-
if (this.appService?.isRunningApp()) {
|
|
5469
|
-
return supportedLanguages$.pipe(switchMap((supportedLanguages) => this.initializeCordova(supportedLanguages)), map(() => void 0));
|
|
5470
|
-
}
|
|
5471
|
-
supportedLanguages$
|
|
5472
|
-
.pipe(tap((supportedLanguages) => {
|
|
5473
|
-
if (!supportedLanguages.includes('none')) {
|
|
5474
|
-
supportedLanguages.push('none');
|
|
5475
|
-
}
|
|
5476
|
-
}), tap((supportedLanguages) => this.translate.addLangs(supportedLanguages)),
|
|
5477
|
-
// Select queryParams.locale if set meaningfully
|
|
5478
|
-
switchMap((supportedLanguages) => this.route.queryParams.pipe(first(), map((params) => {
|
|
5479
|
-
let selectedLanguage = null;
|
|
5480
|
-
if (supportedLanguages.indexOf(params.locale) !== -1) {
|
|
5481
|
-
selectedLanguage = params.locale;
|
|
5482
|
-
}
|
|
5483
|
-
else if (params.locale) {
|
|
5484
|
-
console.warn(`Url requested language ${params.locale}, ` +
|
|
5485
|
-
'but it was not found or is not configured in the allowed languages: ' +
|
|
5486
|
-
supportedLanguages);
|
|
5487
|
-
}
|
|
5488
|
-
return {
|
|
5489
|
-
supportedLanguages,
|
|
5490
|
-
selectedLanguage,
|
|
5491
|
-
};
|
|
5492
|
-
}))),
|
|
5493
|
-
// Select storage.get('language') if set meaningfully
|
|
5494
|
-
switchMap(({ supportedLanguages, selectedLanguage }) => {
|
|
5495
|
-
if (selectedLanguage) {
|
|
5496
|
-
return of({
|
|
5497
|
-
supportedLanguages,
|
|
5498
|
-
selectedLanguage,
|
|
5499
|
-
useStored: false,
|
|
5500
|
-
});
|
|
5501
|
-
}
|
|
5502
|
-
else {
|
|
5503
|
-
return this.storage.get('language').pipe(map((storageLanguage) => {
|
|
5504
|
-
let useStored = false;
|
|
5505
|
-
if (supportedLanguages.indexOf(storageLanguage) !== -1) {
|
|
5506
|
-
selectedLanguage = storageLanguage;
|
|
5507
|
-
useStored = true;
|
|
5508
|
-
}
|
|
5509
|
-
return {
|
|
5510
|
-
supportedLanguages,
|
|
5511
|
-
selectedLanguage,
|
|
5512
|
-
useStored,
|
|
5513
|
-
};
|
|
5514
|
-
}));
|
|
5515
|
-
}
|
|
5516
|
-
}),
|
|
5517
|
-
// Use browser language if available, otherwise fall back to the first supported
|
|
5518
|
-
// language.
|
|
5519
|
-
map(({ supportedLanguages, selectedLanguage, useStored }) => {
|
|
5520
|
-
if (selectedLanguage) {
|
|
5521
|
-
return {
|
|
5522
|
-
supportedLanguages,
|
|
5523
|
-
selectedLanguage,
|
|
5524
|
-
useStored,
|
|
5525
|
-
};
|
|
5526
|
-
}
|
|
5527
|
-
else if (
|
|
5528
|
-
// Select browser language if set meaningfully
|
|
5529
|
-
supportedLanguages.indexOf(this.translate.getBrowserLang()) !== -1) {
|
|
5530
|
-
return {
|
|
5531
|
-
supportedLanguages,
|
|
5532
|
-
selectedLanguage: this.translate.getBrowserLang(),
|
|
5533
|
-
useStored,
|
|
5534
|
-
};
|
|
5535
|
-
}
|
|
5536
|
-
else {
|
|
5537
|
-
// Select first supported language
|
|
5538
|
-
return {
|
|
5539
|
-
supportedLanguages,
|
|
5540
|
-
selectedLanguage: supportedLanguages[0],
|
|
5541
|
-
useStored,
|
|
5542
|
-
};
|
|
5543
|
-
}
|
|
5544
|
-
}),
|
|
5545
|
-
// Set fallback language
|
|
5546
|
-
tap(({ supportedLanguages, selectedLanguage, useStored }) => {
|
|
5547
|
-
if (!useStored) {
|
|
5548
|
-
this.storage.set('language', selectedLanguage);
|
|
5549
|
-
}
|
|
5550
|
-
if (selectedLanguage === 'none') {
|
|
5551
|
-
this.translate.setDefaultLang('none');
|
|
5552
|
-
}
|
|
5553
|
-
else if (selectedLanguage?.startsWith('de-')) {
|
|
5554
|
-
this.translate.setDefaultLang('de');
|
|
5555
|
-
}
|
|
5556
|
-
else {
|
|
5557
|
-
this.translate.setDefaultLang(supportedLanguages[0]);
|
|
5558
|
-
}
|
|
5559
|
-
}),
|
|
5560
|
-
// Configure `ngx-translate` to use the determined language and trigger loading of
|
|
5561
|
-
// translations.
|
|
5562
|
-
switchMap(({ selectedLanguage }) => {
|
|
5563
|
-
// console.log('language used: ' + selectedLanguage);
|
|
5564
|
-
this.language = selectedLanguage;
|
|
5565
|
-
return this.translate.use(selectedLanguage).pipe(map(() => void 0));
|
|
5566
|
-
}))
|
|
5567
|
-
.subscribe(() => {
|
|
5568
|
-
// Notify anyone waiting for translations to be loaded.
|
|
5569
|
-
this.languageLoaded.next(true);
|
|
5570
|
-
});
|
|
5571
|
-
return this.waitForInit();
|
|
5572
|
-
}
|
|
5573
|
-
async initializeCordova(supportedLanguages = DEFAULT_SUPPORTED_LANGUAGES) {
|
|
5574
|
-
this.translate.addLangs(supportedLanguages);
|
|
5575
|
-
let language = supportedLanguages[0];
|
|
5576
|
-
this.translate.setDefaultLang(language);
|
|
5577
|
-
this.translate.use(language);
|
|
5578
|
-
this.language = language;
|
|
5579
|
-
const data = await this.appService.getLanguage();
|
|
5580
|
-
if (supportedLanguages.indexOf(data) != -1) {
|
|
5581
|
-
language = data;
|
|
5582
|
-
}
|
|
5583
|
-
this.language = language;
|
|
5584
|
-
this.translate.use(language).subscribe(() => {
|
|
5585
|
-
this.languageLoaded.next(true);
|
|
5586
|
-
});
|
|
5587
|
-
// this.translate.getTranslation(language).subscribe(() => {
|
|
5588
|
-
// });
|
|
5589
|
-
return this.waitForInit();
|
|
5590
|
-
}
|
|
5591
|
-
waitForInit() {
|
|
5592
|
-
return this.languageLoaded.pipe(first((languageLoaded) => languageLoaded), map(() => void 0));
|
|
5593
|
-
}
|
|
5594
|
-
/** Same as `translate.currentLang`. */
|
|
5595
|
-
getLanguage() {
|
|
5596
|
-
return this.language;
|
|
5597
|
-
}
|
|
5598
|
-
getISOLanguage() {
|
|
5599
|
-
return LANGUAGES[this.language];
|
|
5600
|
-
}
|
|
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 }); }
|
|
5602
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TranslationsService, providedIn: 'root' }); }
|
|
5603
|
-
}
|
|
5604
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: TranslationsService, decorators: [{
|
|
5605
|
-
type: Injectable,
|
|
5606
|
-
args: [{ providedIn: 'root' }]
|
|
5607
|
-
}], ctorParameters: () => [{ type: i2.ConfigService }, { type: i2$1.ActivatedRoute }, { type: i2.SessionStorageService }, { type: i1.TranslateService }, { type: AppService, decorators: [{
|
|
5608
|
-
type: Optional
|
|
5609
|
-
}] }] });
|
|
5610
|
-
|
|
5611
5810
|
class NodeEntriesTableComponent {
|
|
5612
|
-
constructor(entriesService, entriesGlobalService, applicationRef, toast, translations, changeDetectorRef, ui, ngZone, elementRef) {
|
|
5811
|
+
constructor(entriesService, entriesGlobalService, applicationRef, toast, translations, nodeHelperService, changeDetectorRef, ui, ngZone, elementRef) {
|
|
5613
5812
|
this.entriesService = entriesService;
|
|
5614
5813
|
this.entriesGlobalService = entriesGlobalService;
|
|
5615
5814
|
this.applicationRef = applicationRef;
|
|
5616
5815
|
this.toast = toast;
|
|
5617
5816
|
this.translations = translations;
|
|
5817
|
+
this.nodeHelperService = nodeHelperService;
|
|
5618
5818
|
this.changeDetectorRef = changeDetectorRef;
|
|
5619
5819
|
this.ui = ui;
|
|
5620
5820
|
this.ngZone = ngZone;
|
|
@@ -5671,27 +5871,20 @@ class NodeEntriesTableComponent {
|
|
|
5671
5871
|
this.destroyed.complete();
|
|
5672
5872
|
}
|
|
5673
5873
|
onRowContextMenu({ event, node }) {
|
|
5674
|
-
if (!this.entriesService.selection.selected.includes(node)) {
|
|
5675
|
-
this.entriesService.selection.clear();
|
|
5676
|
-
this.entriesService.selection.select(node);
|
|
5677
|
-
}
|
|
5678
5874
|
event.stopPropagation();
|
|
5679
5875
|
event.preventDefault();
|
|
5876
|
+
if (!this.dropdown) {
|
|
5877
|
+
// Call `preventDefault()` even when there is no menu, so we can use `cdkDrag` with a
|
|
5878
|
+
// start delay without being interrupted by the standard long-tap action.
|
|
5879
|
+
return;
|
|
5880
|
+
}
|
|
5680
5881
|
if (event instanceof MouseEvent) {
|
|
5681
5882
|
({ clientX: this.dropdownLeft, clientY: this.dropdownTop } = event);
|
|
5682
5883
|
}
|
|
5683
5884
|
else {
|
|
5684
5885
|
({ x: this.dropdownLeft, y: this.dropdownTop } = event.target.getBoundingClientRect());
|
|
5685
5886
|
}
|
|
5686
|
-
|
|
5687
|
-
setTimeout(() => {
|
|
5688
|
-
if (this.dropdown.canShowDropdown()) {
|
|
5689
|
-
this.menuTrigger.openMenu();
|
|
5690
|
-
}
|
|
5691
|
-
else {
|
|
5692
|
-
this.toast.toast('NO_AVAILABLE_OPTIONS');
|
|
5693
|
-
}
|
|
5694
|
-
});
|
|
5887
|
+
this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());
|
|
5695
5888
|
}
|
|
5696
5889
|
updateSort() {
|
|
5697
5890
|
this.sort.sort({
|
|
@@ -5740,7 +5933,10 @@ class NodeEntriesTableComponent {
|
|
|
5740
5933
|
}
|
|
5741
5934
|
getVisibleDataColumns() {
|
|
5742
5935
|
return rxjs
|
|
5743
|
-
.combineLatest([
|
|
5936
|
+
.combineLatest([
|
|
5937
|
+
this.maximumColumnsNumber$,
|
|
5938
|
+
this.entriesService.columnsSubject.pipe(map((c) => c?.columns)),
|
|
5939
|
+
])
|
|
5744
5940
|
.pipe(map(([maximumColumnsNumber, columns]) => {
|
|
5745
5941
|
return (columns ?? [])
|
|
5746
5942
|
.filter((column) => column.visible)
|
|
@@ -5829,22 +6025,19 @@ class NodeEntriesTableComponent {
|
|
|
5829
6025
|
this.entriesService.loadMore(source);
|
|
5830
6026
|
}
|
|
5831
6027
|
async openMenu(node) {
|
|
5832
|
-
this.entriesService.
|
|
5833
|
-
this.entriesService.selection.select(node);
|
|
5834
|
-
this.entriesService.selection.clickSource = ClickSource.Dropdown;
|
|
5835
|
-
await this.applicationRef.tick();
|
|
5836
|
-
this.dropdown.menu.focusFirstItem();
|
|
6028
|
+
this.entriesService.openDropdown(this.dropdown, node);
|
|
5837
6029
|
}
|
|
5838
6030
|
isBlocked(node) {
|
|
5839
|
-
return node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true'
|
|
6031
|
+
return (node.properties?.[RestConstants.CCM_PROP_IMPORT_BLOCKED]?.[0] === 'true' ||
|
|
6032
|
+
this.nodeHelperService.isNodeRevoked(node));
|
|
5840
6033
|
}
|
|
5841
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
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 }); }
|
|
6034
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesTableComponent, deps: [{ token: NodeEntriesService }, { token: NodeEntriesGlobalService }, { token: i0.ApplicationRef }, { token: Toast }, { token: TranslationsService }, { token: NodeHelperService }, { token: i0.ChangeDetectorRef }, { token: UIService }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6035
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", 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: i9.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: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.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", "callbackObjects", "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", "disabledInteractive", "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: i22.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i22.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i22.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i22.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i22.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i22.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i22.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i22.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i22.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i22.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: i24.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i24.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
6036
|
}
|
|
5844
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6037
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesTableComponent, decorators: [{
|
|
5845
6038
|
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"] }]
|
|
5847
|
-
}], 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: [{
|
|
6039
|
+
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"] }]
|
|
6040
|
+
}], ctorParameters: () => [{ type: NodeEntriesService }, { type: NodeEntriesGlobalService }, { type: i0.ApplicationRef }, { type: Toast }, { type: TranslationsService }, { type: NodeHelperService }, { type: i0.ChangeDetectorRef }, { type: UIService }, { type: i0.NgZone }, { type: i0.ElementRef }], propDecorators: { sort: [{
|
|
5848
6041
|
type: ViewChild,
|
|
5849
6042
|
args: [MatSort]
|
|
5850
6043
|
}], paginator: [{
|
|
@@ -5899,10 +6092,10 @@ class TemporaryStorageService {
|
|
|
5899
6092
|
remove(name) {
|
|
5900
6093
|
this.data[name] = null;
|
|
5901
6094
|
}
|
|
5902
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
5903
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
6095
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TemporaryStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6096
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TemporaryStorageService, providedIn: 'root' }); }
|
|
5904
6097
|
}
|
|
5905
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6098
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TemporaryStorageService, decorators: [{
|
|
5906
6099
|
type: Injectable,
|
|
5907
6100
|
args: [{ providedIn: 'root' }]
|
|
5908
6101
|
}], ctorParameters: () => [] });
|
|
@@ -5923,6 +6116,13 @@ function matchesModifiers(event, modifiers = []) {
|
|
|
5923
6116
|
*/
|
|
5924
6117
|
class LocalEventsService {
|
|
5925
6118
|
constructor() {
|
|
6119
|
+
/**
|
|
6120
|
+
* One or more nodes have been created
|
|
6121
|
+
*
|
|
6122
|
+
* Triggers when the full creation process is done, i.e. the metadata/edit dialog after uploading
|
|
6123
|
+
* is closed
|
|
6124
|
+
*/
|
|
6125
|
+
this.nodesCreated = new EventEmitter();
|
|
5926
6126
|
/**
|
|
5927
6127
|
* The metadata of one or more nodes have been updated.
|
|
5928
6128
|
*
|
|
@@ -5942,10 +6142,10 @@ class LocalEventsService {
|
|
|
5942
6142
|
// include a node and lists that the node was moved to.
|
|
5943
6143
|
this.nodesDeleted = new EventEmitter();
|
|
5944
6144
|
}
|
|
5945
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
5946
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
6145
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalEventsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6146
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalEventsService, providedIn: 'root' }); }
|
|
5947
6147
|
}
|
|
5948
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalEventsService, decorators: [{
|
|
5949
6149
|
type: Injectable,
|
|
5950
6150
|
args: [{
|
|
5951
6151
|
providedIn: 'root',
|
|
@@ -5953,10 +6153,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
5953
6153
|
}] });
|
|
5954
6154
|
|
|
5955
6155
|
class KeyboardShortcutsService {
|
|
5956
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
5957
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
6156
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: KeyboardShortcutsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
6157
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: KeyboardShortcutsService }); }
|
|
5958
6158
|
}
|
|
5959
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: KeyboardShortcutsService, decorators: [{
|
|
5960
6160
|
type: Injectable
|
|
5961
6161
|
}] });
|
|
5962
6162
|
|
|
@@ -6009,7 +6209,7 @@ class OptionsHelperDataService {
|
|
|
6009
6209
|
setData(data) {
|
|
6010
6210
|
this.data = this.optionsHelperService.wrapOptionCallbacks(data);
|
|
6011
6211
|
}
|
|
6012
|
-
async refreshComponents(
|
|
6212
|
+
async refreshComponents() {
|
|
6013
6213
|
if (this.data == null) {
|
|
6014
6214
|
console.warn('options helper refresh called but no data previously bound');
|
|
6015
6215
|
return;
|
|
@@ -6019,7 +6219,7 @@ class OptionsHelperDataService {
|
|
|
6019
6219
|
return;
|
|
6020
6220
|
}
|
|
6021
6221
|
this.globalOptions = await this.getAvailableOptions(Target.Actionbar);
|
|
6022
|
-
await this.optionsHelperService?.refreshComponents(this.components, this.data
|
|
6222
|
+
await this.optionsHelperService?.refreshComponents(this.components, this.data);
|
|
6023
6223
|
}
|
|
6024
6224
|
getAvailableOptions(target, objects = null) {
|
|
6025
6225
|
return this.optionsHelperService?.getAvailableOptions(target, objects, this.components, this.data);
|
|
@@ -6072,12 +6272,12 @@ class OptionsHelperDataService {
|
|
|
6072
6272
|
}
|
|
6073
6273
|
}
|
|
6074
6274
|
pasteNode(nodes = []) {
|
|
6075
|
-
this.optionsHelperService.pasteNode(this.components, this.data, nodes);
|
|
6275
|
+
this.optionsHelperService.pasteNode(this.components, this.data, true, nodes);
|
|
6076
6276
|
}
|
|
6077
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
6078
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.
|
|
6277
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", 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 }); }
|
|
6278
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionsHelperDataService }); }
|
|
6079
6279
|
}
|
|
6080
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6280
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionsHelperDataService, decorators: [{
|
|
6081
6281
|
type: Injectable
|
|
6082
6282
|
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i2$1.ActivatedRoute }, { type: LocalEventsService }, { type: i2.AuthenticationService }, { type: i2.UserService }, { type: i2.NetworkService }, { type: KeyboardShortcutsService, decorators: [{
|
|
6083
6283
|
type: Optional
|
|
@@ -6113,7 +6313,7 @@ class NodeEntriesComponent {
|
|
|
6113
6313
|
}
|
|
6114
6314
|
ngAfterViewInit() {
|
|
6115
6315
|
if (this.paginator) {
|
|
6116
|
-
this.initPaginator(this.paginator);
|
|
6316
|
+
void this.initPaginator(this.paginator);
|
|
6117
6317
|
this.changeDetectorRef.detectChanges();
|
|
6118
6318
|
}
|
|
6119
6319
|
}
|
|
@@ -6186,10 +6386,10 @@ class NodeEntriesComponent {
|
|
|
6186
6386
|
reset: true,
|
|
6187
6387
|
});
|
|
6188
6388
|
}
|
|
6189
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
6190
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
6389
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: NodeEntriesGlobalService }, { token: NodeEntriesService }, { token: NodeEntriesTemplatesService }, { token: KeyboardShortcutsService, optional: true }, { token: i2$1.ActivatedRoute }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6390
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeEntriesComponent, selector: "es-node-entries", viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 10px;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i8$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: NodeEntriesCardGridComponent, selector: "es-node-entries-card-grid", inputs: ["displayType"] }, { kind: "component", type: NodeEntriesTableComponent, selector: "es-node-entries-table" }] }); }
|
|
6191
6391
|
}
|
|
6192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6392
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesComponent, decorators: [{
|
|
6193
6393
|
type: Component,
|
|
6194
6394
|
args: [{ selector: 'es-node-entries', template: "<div class=\"top-matter\">\n <div class=\"title\">\n <ng-container *ngTemplateOutlet=\"templatesService.title\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"templatesService.entriesTopMatter\"></ng-container>\n</div>\n<ng-container *ngIf=\"entriesService.dataSource\">\n <ng-container *ngIf=\"entriesService.displayType === NodeEntriesDisplayType.Table\">\n <es-node-entries-table></es-node-entries-table>\n </ng-container>\n <ng-container\n *ngIf=\"\n entriesService.displayType === NodeEntriesDisplayType.SmallGrid ||\n entriesService.displayType === NodeEntriesDisplayType.Grid\n \"\n >\n <es-node-entries-card-grid [displayType]=\"entriesService.displayType\">\n </es-node-entries-card-grid>\n </ng-container>\n <ng-container *ngIf=\"entriesService.dataSource.isEmpty() && !entriesService.dataSource.isLoading\">\n <ng-container *ngTemplateOutlet=\"templatesService.empty\"></ng-container>\n </ng-container>\n</ng-container>\n<mat-paginator\n #paginator\n [pageSizeOptions]=\"entriesGlobalService.getPaginatorSizeOptions(entriesService.scope)\"\n *ngIf=\"entriesService.paginationStrategy === 'paginator'\"\n [class.display-none]=\"\n (entriesService.dataSource.isLoading && entriesService.dataSource.isLoading !== 'page') ||\n entriesService.dataSource.isEmpty()\n \"\n (page)=\"openPage($event)\"\n></mat-paginator>\n", styles: [".top-matter{display:flex;align-items:center;flex-wrap:wrap;gap:12px 10px;position:relative;z-index:1}.top-matter .title{display:flex;flex-grow:1}\n"] }]
|
|
6195
6395
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: NodeEntriesGlobalService }, { type: NodeEntriesService }, { type: NodeEntriesTemplatesService }, { type: KeyboardShortcutsService, decorators: [{
|
|
@@ -6200,7 +6400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
6200
6400
|
}] } });
|
|
6201
6401
|
|
|
6202
6402
|
class NodeEntriesWrapperComponent {
|
|
6203
|
-
constructor(viewContainerRef, temporaryStorageService, ngZone, entriesService, optionsHelper, nodeHelperService, uiService,
|
|
6403
|
+
constructor(viewContainerRef, temporaryStorageService, ngZone, entriesService, nodeService, optionsHelper, nodeHelperService, uiService,
|
|
6204
6404
|
// @TODO
|
|
6205
6405
|
// private mainNav: MainNavService,
|
|
6206
6406
|
templatesService, changeDetectorRef, elementRef) {
|
|
@@ -6208,6 +6408,7 @@ class NodeEntriesWrapperComponent {
|
|
|
6208
6408
|
this.temporaryStorageService = temporaryStorageService;
|
|
6209
6409
|
this.ngZone = ngZone;
|
|
6210
6410
|
this.entriesService = entriesService;
|
|
6411
|
+
this.nodeService = nodeService;
|
|
6211
6412
|
this.optionsHelper = optionsHelper;
|
|
6212
6413
|
this.nodeHelperService = nodeHelperService;
|
|
6213
6414
|
this.uiService = uiService;
|
|
@@ -6215,6 +6416,10 @@ class NodeEntriesWrapperComponent {
|
|
|
6215
6416
|
this.changeDetectorRef = changeDetectorRef;
|
|
6216
6417
|
this.elementRef = elementRef;
|
|
6217
6418
|
this.checkbox = true;
|
|
6419
|
+
/**
|
|
6420
|
+
* emits when the user re-configures the columns
|
|
6421
|
+
* should be used in order to save the new configuration
|
|
6422
|
+
*/
|
|
6218
6423
|
this.columnsChange = new EventEmitter();
|
|
6219
6424
|
this.displayType = NodeEntriesDisplayType.Grid;
|
|
6220
6425
|
this.displayTypeChange = new EventEmitter();
|
|
@@ -6264,13 +6469,16 @@ class NodeEntriesWrapperComponent {
|
|
|
6264
6469
|
else {
|
|
6265
6470
|
console.warn('optionsHelper is not initalized correctly; data is empty');
|
|
6266
6471
|
}
|
|
6267
|
-
this.optionsHelper.refreshComponents();
|
|
6472
|
+
void this.optionsHelper.refreshComponents();
|
|
6268
6473
|
});
|
|
6269
6474
|
}
|
|
6270
6475
|
ngOnInit() {
|
|
6271
6476
|
if (this.primaryInstance) {
|
|
6272
6477
|
this.optionsHelper.registerGlobalKeyboardShortcuts();
|
|
6273
6478
|
}
|
|
6479
|
+
this.entriesService.columnsSubject
|
|
6480
|
+
.pipe(takeUntil(this.destroyed), filter((c) => c?.fromUser))
|
|
6481
|
+
.subscribe((c) => this.columnsChange.emit(c.columns));
|
|
6274
6482
|
}
|
|
6275
6483
|
ngOnChanges(changes = {}) {
|
|
6276
6484
|
if (!this.componentRef) {
|
|
@@ -6279,7 +6487,12 @@ class NodeEntriesWrapperComponent {
|
|
|
6279
6487
|
this.entriesService.list = this;
|
|
6280
6488
|
this.entriesService.dataSource = this.dataSource;
|
|
6281
6489
|
this.entriesService.scope = this.scope;
|
|
6282
|
-
|
|
6490
|
+
if (changes.columns) {
|
|
6491
|
+
this.entriesService.columnsSubject.next({
|
|
6492
|
+
columns: this.columns,
|
|
6493
|
+
fromUser: false,
|
|
6494
|
+
});
|
|
6495
|
+
}
|
|
6283
6496
|
this.entriesService.configureColumns = this.configureColumns;
|
|
6284
6497
|
this.entriesService.checkbox = this.checkbox;
|
|
6285
6498
|
this.entriesService.displayType = this.displayType;
|
|
@@ -6298,7 +6511,7 @@ class NodeEntriesWrapperComponent {
|
|
|
6298
6511
|
this.entriesService.disableInfiniteScroll = this.disableInfiniteScroll;
|
|
6299
6512
|
this.entriesService.scrollGradientColor.set(this.scrollGradientColor);
|
|
6300
6513
|
if (changes['initConfig']) {
|
|
6301
|
-
this.initOptionsGenerator(this.initConfig);
|
|
6514
|
+
void this.initOptionsGenerator(this.initConfig);
|
|
6302
6515
|
}
|
|
6303
6516
|
if (this.componentRef) {
|
|
6304
6517
|
this.componentRef.instance.changeDetectorRef?.detectChanges();
|
|
@@ -6338,6 +6551,9 @@ class NodeEntriesWrapperComponent {
|
|
|
6338
6551
|
getDisplayType() {
|
|
6339
6552
|
return this.displayType;
|
|
6340
6553
|
}
|
|
6554
|
+
onDisplayTypeChange() {
|
|
6555
|
+
return this.displayTypeChange.asObservable();
|
|
6556
|
+
}
|
|
6341
6557
|
setDisplayType(displayType) {
|
|
6342
6558
|
this.displayType = displayType;
|
|
6343
6559
|
this.entriesService.displayType = displayType;
|
|
@@ -6349,10 +6565,14 @@ class NodeEntriesWrapperComponent {
|
|
|
6349
6565
|
return;
|
|
6350
6566
|
}
|
|
6351
6567
|
this.dataSource.getData().forEach((d) => {
|
|
6352
|
-
let hits = nodes.filter((n) => n
|
|
6568
|
+
let hits = nodes.filter((n) => n?.ref
|
|
6569
|
+
? n?.ref.id === d?.ref.id
|
|
6570
|
+
: n?.authorityName ===
|
|
6571
|
+
d?.authorityName);
|
|
6353
6572
|
if (hits.length === 0) {
|
|
6354
6573
|
// handle if the original has changed (for collection refs)
|
|
6355
|
-
hits = nodes.filter((n) => n
|
|
6574
|
+
hits = nodes.filter((n) => n?.ref &&
|
|
6575
|
+
n?.ref?.id === d?.originalId);
|
|
6356
6576
|
}
|
|
6357
6577
|
if (hits.length === 1) {
|
|
6358
6578
|
this.nodeHelperService.copyDataToNode(d, hits[0]);
|
|
@@ -6380,11 +6600,23 @@ class NodeEntriesWrapperComponent {
|
|
|
6380
6600
|
? d.ref?.id === v.ref?.id
|
|
6381
6601
|
: d.authorityName === v.authorityName);
|
|
6382
6602
|
if (contains) {
|
|
6383
|
-
|
|
6603
|
+
if (v.override !== false) {
|
|
6604
|
+
this.updateNodes([v]);
|
|
6605
|
+
}
|
|
6384
6606
|
}
|
|
6385
6607
|
else {
|
|
6386
6608
|
this.dataSource.appendData([v], 'before');
|
|
6387
6609
|
}
|
|
6610
|
+
if (v.observe) {
|
|
6611
|
+
interval(2000)
|
|
6612
|
+
.pipe(take(10), takeUntil(this.destroyed), switchMap(() => this.nodeService.getNode(v.ref.id, {
|
|
6613
|
+
repository: v.ref.repo,
|
|
6614
|
+
})))
|
|
6615
|
+
.subscribe((node) => {
|
|
6616
|
+
node.virtual = true;
|
|
6617
|
+
this.updateNodes([node]);
|
|
6618
|
+
});
|
|
6619
|
+
}
|
|
6388
6620
|
});
|
|
6389
6621
|
this.entriesService.selection.clear();
|
|
6390
6622
|
this.entriesService.selection.select(...virtual);
|
|
@@ -6395,6 +6627,9 @@ class NodeEntriesWrapperComponent {
|
|
|
6395
6627
|
this.options = options;
|
|
6396
6628
|
this.ngOnChanges();
|
|
6397
6629
|
}
|
|
6630
|
+
selectAll() {
|
|
6631
|
+
this.entriesService.selection.select(...this.entriesService.dataSource.getData());
|
|
6632
|
+
}
|
|
6398
6633
|
getSelection() {
|
|
6399
6634
|
return this.entriesService.selection;
|
|
6400
6635
|
}
|
|
@@ -6408,11 +6643,11 @@ class NodeEntriesWrapperComponent {
|
|
|
6408
6643
|
parent: config.parent,
|
|
6409
6644
|
customOptions: config.customOptions,
|
|
6410
6645
|
});
|
|
6411
|
-
this.optionsHelper.refreshComponents();
|
|
6646
|
+
void this.optionsHelper.refreshComponents();
|
|
6412
6647
|
}
|
|
6413
6648
|
ngAfterViewInit() {
|
|
6414
6649
|
// Prevent changed-after-checked error
|
|
6415
|
-
Promise.resolve().then(() => this.updateTemplates());
|
|
6650
|
+
void Promise.resolve().then(() => this.updateTemplates());
|
|
6416
6651
|
}
|
|
6417
6652
|
updateTemplates() {
|
|
6418
6653
|
this.templatesService.title = this.titleRef;
|
|
@@ -6431,13 +6666,13 @@ class NodeEntriesWrapperComponent {
|
|
|
6431
6666
|
this.dataSource.removeData(objects);
|
|
6432
6667
|
this.getSelection().clear();
|
|
6433
6668
|
}
|
|
6434
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
6435
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.
|
|
6669
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesWrapperComponent, deps: [{ token: i0.ViewContainerRef }, { token: TemporaryStorageService }, { token: i0.NgZone }, { token: NodeEntriesService }, { token: i2.NodeService }, { token: OptionsHelperDataService }, { token: NodeHelperService }, { token: UIService }, { token: NodeEntriesTemplatesService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6670
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeEntriesWrapperComponent, selector: "es-node-entries-wrapper", inputs: { dataSource: "dataSource", scope: "scope", columns: "columns", configureColumns: "configureColumns", checkbox: "checkbox", globalOptions: "globalOptions", displayType: "displayType", elementInteractionType: "elementInteractionType", sort: "sort", dragDrop: "dragDrop", gridConfig: "gridConfig", scrollGradientColor: "scrollGradientColor", initConfig: "initConfig", primaryInstance: "primaryInstance", singleClickHint: "singleClickHint", disableInfiniteScroll: "disableInfiniteScroll" }, outputs: { columnsChange: "columnsChange", displayTypeChange: "displayTypeChange", fetchData: "fetchData", clickItem: "clickItem", dblClickItem: "dblClickItem", sortChange: "sortChange", virtualNodesAdded: "virtualNodesAdded", displayTypeChanged: "displayTypeChanged" }, providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService], queries: [{ propertyName: "titleRef", first: true, predicate: ["title"], descendants: true }, { propertyName: "emptyRef", first: true, predicate: ["empty"], descendants: true }, { propertyName: "actionAreaRef", first: true, predicate: ["actionArea"], descendants: true }, { propertyName: "overlayRef", first: true, predicate: ["overlay"], descendants: true }], viewQueries: [{ propertyName: "nodeEntriesComponentRef", first: true, predicate: ["nodeEntriesComponent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `<es-node-entries
|
|
6436
6671
|
#nodeEntriesComponent
|
|
6437
6672
|
*ngIf="!customNodeListComponent"
|
|
6438
6673
|
></es-node-entries>`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NodeEntriesComponent, selector: "es-node-entries" }] }); }
|
|
6439
6674
|
}
|
|
6440
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6675
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesWrapperComponent, decorators: [{
|
|
6441
6676
|
type: Component,
|
|
6442
6677
|
args: [{
|
|
6443
6678
|
selector: 'es-node-entries-wrapper',
|
|
@@ -6447,7 +6682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
6447
6682
|
></es-node-entries>`,
|
|
6448
6683
|
providers: [NodeEntriesService, OptionsHelperDataService, NodeEntriesTemplatesService],
|
|
6449
6684
|
}]
|
|
6450
|
-
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: TemporaryStorageService }, { type: i0.NgZone }, { type: NodeEntriesService }, { type: OptionsHelperDataService }, { type: NodeHelperService }, { type: UIService }, { type: NodeEntriesTemplatesService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { titleRef: [{
|
|
6685
|
+
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: TemporaryStorageService }, { type: i0.NgZone }, { type: NodeEntriesService }, { type: i2.NodeService }, { type: OptionsHelperDataService }, { type: NodeHelperService }, { type: UIService }, { type: NodeEntriesTemplatesService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { titleRef: [{
|
|
6451
6686
|
type: ContentChild,
|
|
6452
6687
|
args: ['title']
|
|
6453
6688
|
}], emptyRef: [{
|
|
@@ -6513,8 +6748,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
6513
6748
|
}] } });
|
|
6514
6749
|
|
|
6515
6750
|
class NodeEntriesModule {
|
|
6516
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
6517
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
6751
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6752
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesModule, declarations: [ColumnChooserComponent,
|
|
6518
6753
|
DragPreviewComponent,
|
|
6519
6754
|
ListItemLabelPipe,
|
|
6520
6755
|
NodeEntriesCardComponent,
|
|
@@ -6557,7 +6792,7 @@ class NodeEntriesModule {
|
|
|
6557
6792
|
NodesDragSourceDirective,
|
|
6558
6793
|
NodesDropTargetDirective,
|
|
6559
6794
|
ListItemLabelPipe] }); }
|
|
6560
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
6795
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesModule, imports: [CommonModule,
|
|
6561
6796
|
FormsModule,
|
|
6562
6797
|
A11yModule,
|
|
6563
6798
|
OverlayModule,
|
|
@@ -6577,7 +6812,7 @@ class NodeEntriesModule {
|
|
|
6577
6812
|
MatTooltipModule,
|
|
6578
6813
|
TranslateModule] }); }
|
|
6579
6814
|
}
|
|
6580
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6815
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesModule, decorators: [{
|
|
6581
6816
|
type: NgModule,
|
|
6582
6817
|
args: [{
|
|
6583
6818
|
declarations: [
|
|
@@ -6641,8 +6876,8 @@ class EduSharingUiModule {
|
|
|
6641
6876
|
providers: [getConfigProvider(config)],
|
|
6642
6877
|
};
|
|
6643
6878
|
}
|
|
6644
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
6645
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
6879
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6880
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiModule, imports: [CommonModule,
|
|
6646
6881
|
TranslateModule,
|
|
6647
6882
|
EduSharingUiCommonModule,
|
|
6648
6883
|
ListItemsModule,
|
|
@@ -6658,7 +6893,7 @@ class EduSharingUiModule {
|
|
|
6658
6893
|
ListItemsModule,
|
|
6659
6894
|
ListItemLabelPipe,
|
|
6660
6895
|
SortDropdownComponent] }); }
|
|
6661
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
6896
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiModule, imports: [CommonModule,
|
|
6662
6897
|
TranslateModule,
|
|
6663
6898
|
EduSharingUiCommonModule,
|
|
6664
6899
|
ListItemsModule,
|
|
@@ -6671,7 +6906,7 @@ class EduSharingUiModule {
|
|
|
6671
6906
|
NodeEntriesModule,
|
|
6672
6907
|
ListItemsModule] }); }
|
|
6673
6908
|
}
|
|
6674
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
6909
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiModule, decorators: [{
|
|
6675
6910
|
type: NgModule,
|
|
6676
6911
|
args: [{
|
|
6677
6912
|
declarations: [],
|
|
@@ -6813,6 +7048,110 @@ class NodeCache {
|
|
|
6813
7048
|
}
|
|
6814
7049
|
}
|
|
6815
7050
|
|
|
7051
|
+
class RenderHelperService {
|
|
7052
|
+
constructor(injector, aboutService, nodeApiUnwrapped, configuration, userService, optionsHelperDataService) {
|
|
7053
|
+
this.injector = injector;
|
|
7054
|
+
this.aboutService = aboutService;
|
|
7055
|
+
this.nodeApiUnwrapped = nodeApiUnwrapped;
|
|
7056
|
+
this.configuration = configuration;
|
|
7057
|
+
this.userService = userService;
|
|
7058
|
+
this.optionsHelperDataService = optionsHelperDataService;
|
|
7059
|
+
}
|
|
7060
|
+
async getRenderData(nodeId, version = null) {
|
|
7061
|
+
const about = await firstValueFrom(this.aboutService.getAbout());
|
|
7062
|
+
const securedNode = await firstValueFrom(this.nodeApiUnwrapped.getMetadataSigned({
|
|
7063
|
+
repository: HOME_REPOSITORY,
|
|
7064
|
+
node: nodeId,
|
|
7065
|
+
propertyFilter: [PROPERTY_FILTER_ALL],
|
|
7066
|
+
}));
|
|
7067
|
+
const node = securedNode.node;
|
|
7068
|
+
const user = await firstValueFrom(this.userService.observeCurrentUserInfo());
|
|
7069
|
+
console.info(this.injector.get(OptionsHelperDataService));
|
|
7070
|
+
this.optionsHelperDataService?.setData({
|
|
7071
|
+
scope: Scope.Render,
|
|
7072
|
+
activeObjects: [node],
|
|
7073
|
+
parent: {
|
|
7074
|
+
ref: {
|
|
7075
|
+
id: node.parent.id,
|
|
7076
|
+
},
|
|
7077
|
+
},
|
|
7078
|
+
customOptions: {
|
|
7079
|
+
useDefaultOptions: true,
|
|
7080
|
+
},
|
|
7081
|
+
postPrepareOptions: (options, objects) => {
|
|
7082
|
+
if (version && version !== RestConstants.NODE_VERSION_CURRENT) {
|
|
7083
|
+
options.filter((o) => o.name === 'OPTIONS.OPEN')[0].isEnabled = false;
|
|
7084
|
+
}
|
|
7085
|
+
},
|
|
7086
|
+
});
|
|
7087
|
+
await this.optionsHelperDataService?.refreshComponents();
|
|
7088
|
+
if (!about.renderingService2) {
|
|
7089
|
+
console.error('no rendering service 2 url was configured. Will not continue.');
|
|
7090
|
+
return {
|
|
7091
|
+
node,
|
|
7092
|
+
error: 'RENDERING.ERROR.RS2_NOT_CONFIGURED',
|
|
7093
|
+
};
|
|
7094
|
+
}
|
|
7095
|
+
console.info(about.renderingService2?.url);
|
|
7096
|
+
if (this.configuration.production) {
|
|
7097
|
+
this.injector.get(RSApiConfiguration).rootUrl = about.renderingService2.url.replace(/\/$/g, '');
|
|
7098
|
+
}
|
|
7099
|
+
else {
|
|
7100
|
+
this.injector.get(RSApiConfiguration).rootUrl = '/rendering2';
|
|
7101
|
+
}
|
|
7102
|
+
console.info(this.injector.get(RSApiConfiguration));
|
|
7103
|
+
const token = securedNode.jwt;
|
|
7104
|
+
console.info(token, node);
|
|
7105
|
+
const request = {
|
|
7106
|
+
nodeId: node.ref.id,
|
|
7107
|
+
repoId: node.ref.repo,
|
|
7108
|
+
securedNode: securedNode.signedNode,
|
|
7109
|
+
signature: securedNode.signature,
|
|
7110
|
+
token: token,
|
|
7111
|
+
userData: {
|
|
7112
|
+
authorityName: user.user.person.authorityName,
|
|
7113
|
+
firstName: user.user.person.profile.firstName,
|
|
7114
|
+
surName: user.user.person.profile.lastName,
|
|
7115
|
+
userEMail: user.user.person.profile.email,
|
|
7116
|
+
},
|
|
7117
|
+
};
|
|
7118
|
+
return {
|
|
7119
|
+
node,
|
|
7120
|
+
request,
|
|
7121
|
+
};
|
|
7122
|
+
}
|
|
7123
|
+
async getRenderDataForLms(encodedNode, signature, jwt, renderUrl, encodedUser) {
|
|
7124
|
+
this.injector.get(RSApiConfiguration).rootUrl = renderUrl;
|
|
7125
|
+
const decodedNodeString = atob(encodedNode);
|
|
7126
|
+
const node = JSON.parse(decodedNodeString);
|
|
7127
|
+
const userData = JSON.parse(atob(encodedUser));
|
|
7128
|
+
const request = {
|
|
7129
|
+
nodeId: node.ref.id,
|
|
7130
|
+
repoId: node.ref.repo,
|
|
7131
|
+
securedNode: encodedNode,
|
|
7132
|
+
signature: signature,
|
|
7133
|
+
token: jwt,
|
|
7134
|
+
userData: {
|
|
7135
|
+
authorityName: userData.authorityName ?? '',
|
|
7136
|
+
firstName: userData.firstName ?? '',
|
|
7137
|
+
surName: userData.lastName ?? '',
|
|
7138
|
+
userEMail: userData.email ?? '',
|
|
7139
|
+
},
|
|
7140
|
+
};
|
|
7141
|
+
return {
|
|
7142
|
+
node,
|
|
7143
|
+
request,
|
|
7144
|
+
};
|
|
7145
|
+
}
|
|
7146
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RenderHelperService, deps: [{ token: i0.Injector }, { token: i2.AboutService }, { token: i2.NodeServiceUnwrapped }, { token: EduSharingUiConfiguration }, { token: i2.UserService }, { token: OptionsHelperDataService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7147
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RenderHelperService }); }
|
|
7148
|
+
}
|
|
7149
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RenderHelperService, decorators: [{
|
|
7150
|
+
type: Injectable
|
|
7151
|
+
}], ctorParameters: () => [{ type: i0.Injector }, { type: i2.AboutService }, { type: i2.NodeServiceUnwrapped }, { type: EduSharingUiConfiguration }, { type: i2.UserService }, { type: OptionsHelperDataService, decorators: [{
|
|
7152
|
+
type: Optional
|
|
7153
|
+
}] }] });
|
|
7154
|
+
|
|
6816
7155
|
class FallbackTranslationHandler {
|
|
6817
7156
|
handle(params) {
|
|
6818
7157
|
return params.interpolateParams?.fallback ?? params.key;
|
|
@@ -6858,11 +7197,12 @@ const TRANSLATION_LIST = [
|
|
|
6858
7197
|
'override',
|
|
6859
7198
|
];
|
|
6860
7199
|
let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
6861
|
-
static create(http, configService, configuration, assetsBasePath) {
|
|
6862
|
-
return new TranslationLoader_1(assetsBasePath, http, configService, configuration);
|
|
7200
|
+
static create(http, configService, configuration, assetsBasePath, additionalI18nProvider) {
|
|
7201
|
+
return new TranslationLoader_1(assetsBasePath, additionalI18nProvider, http, configService, configuration);
|
|
6863
7202
|
}
|
|
6864
|
-
constructor(assetsBasePath, http, configService, configuration, prefix = (assetsBasePath ?? '') + 'assets/i18n', suffix = '.json') {
|
|
7203
|
+
constructor(assetsBasePath, additionalI18nProvider, http, configService, configuration, prefix = (assetsBasePath ?? '') + 'assets/i18n', suffix = '.json') {
|
|
6865
7204
|
this.assetsBasePath = assetsBasePath;
|
|
7205
|
+
this.additionalI18nProvider = additionalI18nProvider;
|
|
6866
7206
|
this.http = http;
|
|
6867
7207
|
this.configService = configService;
|
|
6868
7208
|
this.configuration = configuration;
|
|
@@ -6877,12 +7217,15 @@ let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
|
6877
7217
|
*/
|
|
6878
7218
|
getTranslation(lang) {
|
|
6879
7219
|
if (lang === 'none') {
|
|
7220
|
+
this.configService.setLocale(LANGUAGES[lang], lang);
|
|
6880
7221
|
return of({});
|
|
6881
7222
|
}
|
|
6882
|
-
|
|
6883
|
-
|
|
7223
|
+
// backend can not handle sub-languages
|
|
7224
|
+
const langBackend = lang.startsWith('de-') ? 'de' : lang;
|
|
7225
|
+
if (!LANGUAGES[langBackend]) {
|
|
7226
|
+
console.error('unknown locale for language ' + lang + ' / ' + langBackend);
|
|
6884
7227
|
}
|
|
6885
|
-
this.configService.setLocale(LANGUAGES[lang
|
|
7228
|
+
this.configService.setLocale(LANGUAGES[langBackend], lang);
|
|
6886
7229
|
return rxjs
|
|
6887
7230
|
.forkJoin({
|
|
6888
7231
|
originalTranslations: this.getOriginalTranslations(lang).pipe(
|
|
@@ -6892,9 +7235,25 @@ let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
|
6892
7235
|
.observeTranslationOverrides()
|
|
6893
7236
|
.pipe(first()),
|
|
6894
7237
|
})
|
|
6895
|
-
.pipe(map(({ originalTranslations, translationOverrides }) =>
|
|
6896
|
-
|
|
6897
|
-
|
|
7238
|
+
.pipe(map(({ originalTranslations, translationOverrides }) => {
|
|
7239
|
+
// FIXME: This will alter the object returned by `getOriginalTranslations`.
|
|
7240
|
+
return this.applyOverrides(originalTranslations, translationOverrides);
|
|
7241
|
+
}), switchMap((translations) => {
|
|
7242
|
+
if (!this.additionalI18nProvider) {
|
|
7243
|
+
return of(translations);
|
|
7244
|
+
}
|
|
7245
|
+
const files = this.additionalI18nProvider(lang);
|
|
7246
|
+
console.info('additional i18n provided', files);
|
|
7247
|
+
return forkJoin(files.map((f) => this.http.get(f))).pipe(map((value) => {
|
|
7248
|
+
for (let dictionary of value) {
|
|
7249
|
+
translations = this.overrideWithObject(translations, dictionary);
|
|
7250
|
+
}
|
|
7251
|
+
return translations;
|
|
7252
|
+
}), catchError((e) => {
|
|
7253
|
+
console.error('Error loading custom languages', e);
|
|
7254
|
+
return of(translations);
|
|
7255
|
+
}));
|
|
7256
|
+
}), map((translations) => this.replaceGenderCharacter(translations)), catchError((error, obs) => {
|
|
6898
7257
|
console.error(error);
|
|
6899
7258
|
return of(error);
|
|
6900
7259
|
}));
|
|
@@ -6902,7 +7261,7 @@ let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
|
6902
7261
|
getOriginalTranslations(lang) {
|
|
6903
7262
|
switch (this.getSource()) {
|
|
6904
7263
|
case 'repository':
|
|
6905
|
-
return this.configService.observeDefaultTranslations().pipe(first());
|
|
7264
|
+
return this.configService.observeDefaultTranslations().pipe(filter((arg) => !arg?.locale || arg.language === lang), switchMap((arg) => arg?.dict?.pipe(first()) || of(null)), first());
|
|
6906
7265
|
case 'local':
|
|
6907
7266
|
return this.mergeTranslations(this.fetchTranslations(lang));
|
|
6908
7267
|
}
|
|
@@ -6993,14 +7352,32 @@ let TranslationLoader = TranslationLoader_1 = class TranslationLoader {
|
|
|
6993
7352
|
}
|
|
6994
7353
|
return translations;
|
|
6995
7354
|
}
|
|
7355
|
+
overrideWithObject(source, override) {
|
|
7356
|
+
if (!source) {
|
|
7357
|
+
source = {};
|
|
7358
|
+
}
|
|
7359
|
+
for (let key of Object.keys(override)) {
|
|
7360
|
+
if (typeof override[key] === 'object') {
|
|
7361
|
+
source[key] = this.overrideWithObject(source[key], override[key]);
|
|
7362
|
+
}
|
|
7363
|
+
else {
|
|
7364
|
+
source[key] = override[key];
|
|
7365
|
+
}
|
|
7366
|
+
}
|
|
7367
|
+
return source;
|
|
7368
|
+
}
|
|
6996
7369
|
};
|
|
6997
7370
|
__decorate([
|
|
6998
7371
|
__param(3, Optional()),
|
|
6999
|
-
__param(3, Inject(ASSETS_BASE_PATH))
|
|
7372
|
+
__param(3, Inject(ASSETS_BASE_PATH)),
|
|
7373
|
+
__param(4, Optional()),
|
|
7374
|
+
__param(4, Inject(ADDITIONAL_I18N_PROVIDER))
|
|
7000
7375
|
], TranslationLoader, "create", null);
|
|
7001
7376
|
TranslationLoader = TranslationLoader_1 = __decorate([
|
|
7002
7377
|
__param(0, Optional()),
|
|
7003
|
-
__param(0, Inject(ASSETS_BASE_PATH))
|
|
7378
|
+
__param(0, Inject(ASSETS_BASE_PATH)),
|
|
7379
|
+
__param(1, Optional()),
|
|
7380
|
+
__param(1, Inject(ADDITIONAL_I18N_PROVIDER))
|
|
7004
7381
|
], TranslationLoader);
|
|
7005
7382
|
|
|
7006
7383
|
/**
|
|
@@ -7023,9 +7400,9 @@ class TranslationsModule {
|
|
|
7023
7400
|
);*/
|
|
7024
7401
|
}
|
|
7025
7402
|
}
|
|
7026
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
7027
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.
|
|
7028
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.
|
|
7403
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsModule, deps: [{ token: TranslationsModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7404
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: TranslationsModule, imports: [i1.TranslateModule] }); }
|
|
7405
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsModule, imports: [TranslateModule.forRoot({
|
|
7029
7406
|
loader: {
|
|
7030
7407
|
provide: TranslateLoader,
|
|
7031
7408
|
useFactory: TranslationLoader.create,
|
|
@@ -7034,6 +7411,7 @@ class TranslationsModule {
|
|
|
7034
7411
|
ConfigService,
|
|
7035
7412
|
EduSharingUiConfiguration,
|
|
7036
7413
|
[new Optional(), ASSETS_BASE_PATH],
|
|
7414
|
+
[new Optional(), ADDITIONAL_I18N_PROVIDER],
|
|
7037
7415
|
],
|
|
7038
7416
|
},
|
|
7039
7417
|
missingTranslationHandler: {
|
|
@@ -7042,7 +7420,7 @@ class TranslationsModule {
|
|
|
7042
7420
|
},
|
|
7043
7421
|
})] }); }
|
|
7044
7422
|
}
|
|
7045
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
7423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TranslationsModule, decorators: [{
|
|
7046
7424
|
type: NgModule,
|
|
7047
7425
|
args: [{
|
|
7048
7426
|
declarations: [],
|
|
@@ -7056,6 +7434,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
7056
7434
|
ConfigService,
|
|
7057
7435
|
EduSharingUiConfiguration,
|
|
7058
7436
|
[new Optional(), ASSETS_BASE_PATH],
|
|
7437
|
+
[new Optional(), ADDITIONAL_I18N_PROVIDER],
|
|
7059
7438
|
],
|
|
7060
7439
|
},
|
|
7061
7440
|
missingTranslationHandler: {
|
|
@@ -7071,6 +7450,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
7071
7450
|
type: SkipSelf
|
|
7072
7451
|
}] }] });
|
|
7073
7452
|
|
|
7453
|
+
class SearchHelperService {
|
|
7454
|
+
static { this.MAX_QUERY_CONCAT_PARAMS = 400; }
|
|
7455
|
+
constructor() { }
|
|
7456
|
+
/**
|
|
7457
|
+
* converts given filter criteria and converts them for a body to be used for a search request
|
|
7458
|
+
* @param properties
|
|
7459
|
+
* @param mdsWidgets
|
|
7460
|
+
* @param unfoldTrees
|
|
7461
|
+
*/
|
|
7462
|
+
convertCritieria(properties, mdsWidgets, unfoldTrees = true) {
|
|
7463
|
+
const criteria = [];
|
|
7464
|
+
// deep copy
|
|
7465
|
+
properties = JSON.parse(JSON.stringify(properties));
|
|
7466
|
+
for (const property in properties) {
|
|
7467
|
+
let widget = MdsHelperService.getWidget(property, undefined, mdsWidgets);
|
|
7468
|
+
if (widget && widget.type == 'multivalueTree' && unfoldTrees) {
|
|
7469
|
+
let attach = MdsService.unfoldTreeChilds(properties[property], widget);
|
|
7470
|
+
if (attach) {
|
|
7471
|
+
if (attach.length > SearchHelperService.MAX_QUERY_CONCAT_PARAMS) {
|
|
7472
|
+
console.info('param ' +
|
|
7473
|
+
property +
|
|
7474
|
+
' has too many unfold childs (' +
|
|
7475
|
+
attach.length +
|
|
7476
|
+
'), falling back to basic prefix-based search');
|
|
7477
|
+
}
|
|
7478
|
+
else {
|
|
7479
|
+
properties[property] = properties[property].concat(attach);
|
|
7480
|
+
}
|
|
7481
|
+
}
|
|
7482
|
+
}
|
|
7483
|
+
if (properties[property]?.length && properties[property].every((p) => p != null && !!p))
|
|
7484
|
+
criteria.push({
|
|
7485
|
+
property: property,
|
|
7486
|
+
values: properties[property],
|
|
7487
|
+
});
|
|
7488
|
+
}
|
|
7489
|
+
return criteria;
|
|
7490
|
+
}
|
|
7491
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SearchHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
7492
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SearchHelperService, providedIn: 'root' }); }
|
|
7493
|
+
}
|
|
7494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SearchHelperService, decorators: [{
|
|
7495
|
+
type: Injectable,
|
|
7496
|
+
args: [{
|
|
7497
|
+
providedIn: 'root',
|
|
7498
|
+
}]
|
|
7499
|
+
}], ctorParameters: () => [] });
|
|
7500
|
+
|
|
7074
7501
|
/*
|
|
7075
7502
|
* Public API Surface of edu-sharing-ui
|
|
7076
7503
|
*/
|
|
@@ -7079,5 +7506,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
|
7079
7506
|
* Generated bundle index. Do not edit.
|
|
7080
7507
|
*/
|
|
7081
7508
|
|
|
7082
|
-
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 };
|
|
7509
|
+
export { ADDITIONAL_I18N_PROVIDER, ASSETS_BASE_PATH, AccessibilityService, AccessibilitySettings, ActionbarComponent, AppContainerService, AppService, BorderBoxObserverDirective, CheckTextOverflowDirective, ClickSource, ColorHelper, CombinedDataSource, Constrain, CustomFieldSpecialType, CustomOptions, CustomSelectionModel, 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, NodeEntriesService, NodeEntriesWrapperComponent, NodeHelperService, NodeIconPipe, NodeImagePipe, NodeImageSizePipe, NodeLicensePipe, NodePersonNamePipe, NodeRowComponent, NodeTitlePipe, NodeUrlComponent, NodesDragDirective, NodesDragDropService, NodesDragSourceDirective, NodesDropTargetDirective, NodesRightMode, OPEN_URL_MODE, OptionGroup, OptionItem, OptionsHelperDataService, OptionsHelperService, PreferredColor, PropertySlugPipe, RelativeMode, RenderHelperService, 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 };
|
|
7083
7510
|
//# sourceMappingURL=ngx-edu-sharing-ui.mjs.map
|