ngx-edu-sharing-ui 10.0.20 → 10.0.22
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/material-theme.scss +3 -3
- package/assets/scss/mixins.scss +1 -1
- package/assets/scss/variables-root.scss +2 -0
- package/assets/scss/variables-scss.scss +3 -4
- package/assets/scss/variables.scss +1 -1
- package/fesm2022/ngx-edu-sharing-ui.mjs +376 -319
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +14 -0
- package/lib/mds-viewer/widget/mds-widget.component.d.ts +6 -4
- package/package.json +8 -9
- package/esm2022/lib/actionbar/actionbar.component.mjs +0 -206
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +0 -170
- package/esm2022/lib/directives/border-box-observer.directive.mjs +0 -71
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +0 -71
- package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +0 -14
- package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +0 -79
- package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +0 -49
- package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +0 -105
- package/esm2022/lib/directives/focus-state.directive.mjs +0 -44
- package/esm2022/lib/directives/icon.directive.mjs +0 -184
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -85
- package/esm2022/lib/dropdown/dropdown.component.mjs +0 -83
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +0 -48
- package/esm2022/lib/edu-sharing-ui.module.mjs +0 -82
- package/esm2022/lib/index.mjs +0 -96
- package/esm2022/lib/list-items/available-widgets.mjs +0 -27
- package/esm2022/lib/list-items/format-duration.pipe.mjs +0 -20
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +0 -46
- package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +0 -29
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +0 -56
- package/esm2022/lib/list-items/list-items.module.mjs +0 -50
- package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +0 -41
- package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +0 -47
- package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +0 -24
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +0 -106
- package/esm2022/lib/list-items/list-widget.mjs +0 -49
- package/esm2022/lib/list-items/node-row/node-row.component.mjs +0 -24
- package/esm2022/lib/list-items/node-source.pipe.mjs +0 -49
- package/esm2022/lib/mds/mds-helper.service.mjs +0 -167
- package/esm2022/lib/mds/mds.module.mjs +0 -16
- package/esm2022/lib/mds-viewer/mds-viewer.component.mjs +0 -170
- package/esm2022/lib/mds-viewer/mds-viewer.service.mjs +0 -18
- package/esm2022/lib/mds-viewer/replace-element-with-div.mjs +0 -47
- package/esm2022/lib/mds-viewer/view-instance.service.mjs +0 -27
- package/esm2022/lib/mds-viewer/widget/mds-widget.component.mjs +0 -379
- package/esm2022/lib/node-entries/combined-data-source.mjs +0 -41
- package/esm2022/lib/node-entries/custom-templates-data-source.mjs +0 -7
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +0 -21
- package/esm2022/lib/node-entries/entries-model.mjs +0 -24
- package/esm2022/lib/node-entries/items-cap.mjs +0 -47
- package/esm2022/lib/node-entries/list-item-label.pipe.mjs +0 -37
- package/esm2022/lib/node-entries/node-cache.mjs +0 -73
- package/esm2022/lib/node-entries/node-data-source-remote.mjs +0 -4
- package/esm2022/lib/node-entries/node-data-source.mjs +0 -117
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +0 -117
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +0 -329
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +0 -44
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +0 -27
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +0 -71
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +0 -42
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +0 -294
- package/esm2022/lib/node-entries/node-entries-templates.service.mjs +0 -11
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +0 -369
- package/esm2022/lib/node-entries/node-entries.component.mjs +0 -132
- package/esm2022/lib/node-entries/node-entries.module.mjs +0 -161
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +0 -125
- package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +0 -48
- package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +0 -36
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +0 -75
- package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +0 -53
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +0 -41
- package/esm2022/lib/node-url/node-url.component.mjs +0 -132
- package/esm2022/lib/pipes/file-size.pipe.mjs +0 -32
- package/esm2022/lib/pipes/format-date.pipe.mjs +0 -38
- package/esm2022/lib/pipes/mds-duration.pipe.mjs +0 -25
- package/esm2022/lib/pipes/node-icon.pipe.mjs +0 -18
- package/esm2022/lib/pipes/node-image-size.pipe.mjs +0 -24
- package/esm2022/lib/pipes/node-image.pipe.mjs +0 -55
- package/esm2022/lib/pipes/node-license.pipe.mjs +0 -24
- package/esm2022/lib/pipes/node-person-name.pipe.mjs +0 -50
- package/esm2022/lib/pipes/node-title.pipe.mjs +0 -35
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +0 -33
- package/esm2022/lib/pipes/property-slug.pipe.mjs +0 -16
- package/esm2022/lib/pipes/replace-chars.pipe.mjs +0 -29
- package/esm2022/lib/pipes/vcard-name.pipe.mjs +0 -25
- package/esm2022/lib/services/abstract/app.service.mjs +0 -3
- package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +0 -10
- package/esm2022/lib/services/abstract/options-helper.service.mjs +0 -3
- package/esm2022/lib/services/abstract/toast.service.mjs +0 -3
- package/esm2022/lib/services/accessibility.service.mjs +0 -73
- package/esm2022/lib/services/app-container.service.mjs +0 -69
- package/esm2022/lib/services/local-events.service.mjs +0 -43
- package/esm2022/lib/services/node-entries.service.mjs +0 -201
- package/esm2022/lib/services/node-helper.service.mjs +0 -330
- package/esm2022/lib/services/nodes-drag-drop.service.mjs +0 -155
- package/esm2022/lib/services/options-helper-data.service.mjs +0 -142
- package/esm2022/lib/services/render-helper.service.mjs +0 -114
- package/esm2022/lib/services/repo-url.service.mjs +0 -50
- package/esm2022/lib/services/search-helper.service.mjs +0 -52
- package/esm2022/lib/services/temporary-storage.service.mjs +0 -48
- package/esm2022/lib/services/ui.service.mjs +0 -327
- package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +0 -50
- package/esm2022/lib/spinner/spinner.component.mjs +0 -19
- package/esm2022/lib/spinner-small/spinner-small.component.mjs +0 -18
- package/esm2022/lib/translations/fallback-translation-handler.mjs +0 -6
- package/esm2022/lib/translations/translation-loader.mjs +0 -219
- package/esm2022/lib/translations/translation-source.mjs +0 -11
- package/esm2022/lib/translations/translations.module.mjs +0 -82
- package/esm2022/lib/translations/translations.service.mjs +0 -238
- package/esm2022/lib/types/accessibillity.mjs +0 -19
- package/esm2022/lib/types/api-models.mjs +0 -2
- package/esm2022/lib/types/drag-drop.mjs +0 -2
- package/esm2022/lib/types/injection-tokens.mjs +0 -31
- package/esm2022/lib/types/keyboard-shortcuts.mjs +0 -11
- package/esm2022/lib/types/list-item.mjs +0 -41
- package/esm2022/lib/types/option-item.mjs +0 -192
- package/esm2022/lib/types/workflow.mjs +0 -25
- package/esm2022/lib/util/DateHelper.mjs +0 -200
- package/esm2022/lib/util/VCard.mjs +0 -278
- package/esm2022/lib/util/color-helper.mjs +0 -124
- package/esm2022/lib/util/duration-helper.mjs +0 -102
- package/esm2022/lib/util/functions.mjs +0 -13
- package/esm2022/lib/util/helper.mjs +0 -64
- package/esm2022/lib/util/isNumeric.mjs +0 -11
- package/esm2022/lib/util/rest-helper.mjs +0 -42
- package/esm2022/lib/util/ui-animation.mjs +0 -146
- package/esm2022/lib/util/ui-constants.mjs +0 -21
- package/esm2022/ngx-edu-sharing-ui.mjs +0 -5
- package/esm2022/public-api.mjs +0 -2
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as rxjs from 'rxjs';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { distinctUntilChanged, map, pairwise } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./abstract/toast.service";
|
|
7
|
-
import * as i2 from "./ui.service";
|
|
8
|
-
export class NodesDragDropService {
|
|
9
|
-
set draggedNodes(nodes) {
|
|
10
|
-
this.draggedNodesSubject.next(nodes);
|
|
11
|
-
}
|
|
12
|
-
get canDrop() {
|
|
13
|
-
return this.canDropSubject.value;
|
|
14
|
-
}
|
|
15
|
-
constructor(ngZone, toast, uiService) {
|
|
16
|
-
this.ngZone = ngZone;
|
|
17
|
-
this.toast = toast;
|
|
18
|
-
this.uiService = uiService;
|
|
19
|
-
/** The node(s) currently being dragged. */
|
|
20
|
-
this.draggedNodesSubject = new BehaviorSubject(null);
|
|
21
|
-
/** The drop target that something is currently dragged above. */
|
|
22
|
-
this.dropTargetSubject = new BehaviorSubject(null);
|
|
23
|
-
/** Whether the current drop target allows dropping the dragged node(s). */
|
|
24
|
-
this.canDropSubject = new BehaviorSubject(null);
|
|
25
|
-
/** A target being hovered with the cursor. Does not mean anything is dragged yet. */
|
|
26
|
-
this.hoveredTargetSubject = new BehaviorSubject(null);
|
|
27
|
-
/** Current drop action based on pressed modifier keys. */
|
|
28
|
-
this.dropActionSubject = new BehaviorSubject('move');
|
|
29
|
-
/** The current cursor style. */
|
|
30
|
-
this.curserSubject = new BehaviorSubject(null);
|
|
31
|
-
this.registerDropTarget();
|
|
32
|
-
this.registerCanDrop();
|
|
33
|
-
this.registerDropActionSubject();
|
|
34
|
-
this.registerCursor();
|
|
35
|
-
this.registerActiveDropTargetStyle();
|
|
36
|
-
// this.draggedNodesSubject.subscribe((draggedNodes) =>
|
|
37
|
-
// console.log('draggedNodes', draggedNodes),
|
|
38
|
-
// );
|
|
39
|
-
// this.dropTargetSubject.subscribe((dropTarget) => console.log('dropTarget', dropTarget));
|
|
40
|
-
// this.canDropSubject.subscribe((canDrop) => console.log('canDrop', canDrop));
|
|
41
|
-
}
|
|
42
|
-
/** Call when the cursor enters a possible drop target. Runs outside ngZone. */
|
|
43
|
-
onMouseEnter(target) {
|
|
44
|
-
this.hoveredTargetSubject.next(target);
|
|
45
|
-
}
|
|
46
|
-
/** Call when the cursor leaves a possible drop target. Runs outside ngZone. */
|
|
47
|
-
onMouseLeave(target) {
|
|
48
|
-
if (this.hoveredTargetSubject.value === target) {
|
|
49
|
-
this.hoveredTargetSubject.next(null);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
onDropped(nodes) {
|
|
53
|
-
if (this.canDrop?.accept) {
|
|
54
|
-
this.dropTargetSubject.value?.nodeDropped.emit({
|
|
55
|
-
draggedNodes: nodes,
|
|
56
|
-
action: this.dropActionSubject.value,
|
|
57
|
-
target: this.dropTargetSubject.value.target,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
else if (this.canDrop?.denyReason) {
|
|
61
|
-
this.toast.error(null, this.canDrop.denyReason);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
registerDropTarget() {
|
|
65
|
-
rxjs.combineLatest([this.draggedNodesSubject, this.hoveredTargetSubject])
|
|
66
|
-
.pipe(map(([draggedNodes, hoveredNode]) => draggedNodes && hoveredNode), distinctUntilChanged())
|
|
67
|
-
.subscribe((target) => {
|
|
68
|
-
this.ngZone.run(() => {
|
|
69
|
-
this.dropTargetSubject.next(target);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
registerCanDrop() {
|
|
74
|
-
rxjs.combineLatest([this.dropTargetSubject, this.dropActionSubject])
|
|
75
|
-
.pipe(map(([dropTarget, dropAction]) => dropTarget?.canDropNodes({
|
|
76
|
-
draggedNodes: this.draggedNodesSubject.value,
|
|
77
|
-
action: dropAction,
|
|
78
|
-
target: dropTarget.target,
|
|
79
|
-
})),
|
|
80
|
-
// FIXME: this won't filter equal objects
|
|
81
|
-
distinctUntilChanged())
|
|
82
|
-
.subscribe((canDrop) => {
|
|
83
|
-
this.ngZone.run(() => this.canDropSubject.next(canDrop));
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
registerCursor() {
|
|
87
|
-
rxjs.combineLatest([
|
|
88
|
-
this.draggedNodesSubject,
|
|
89
|
-
this.canDropSubject,
|
|
90
|
-
this.dropActionSubject,
|
|
91
|
-
]).subscribe(([draggedNodes, canDrop, dropAction]) => {
|
|
92
|
-
this.curserSubject.next(this.getCursor(draggedNodes, canDrop, dropAction));
|
|
93
|
-
});
|
|
94
|
-
let style;
|
|
95
|
-
this.curserSubject.subscribe((cursor) => {
|
|
96
|
-
if (cursor && !style) {
|
|
97
|
-
style = document.createElement('style');
|
|
98
|
-
document.body.appendChild(style);
|
|
99
|
-
}
|
|
100
|
-
else if (style && !cursor) {
|
|
101
|
-
document.body.removeChild(style);
|
|
102
|
-
style = null;
|
|
103
|
-
}
|
|
104
|
-
if (cursor) {
|
|
105
|
-
style.innerHTML = `* {cursor: ${cursor} !important; }`;
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
registerActiveDropTargetStyle() {
|
|
110
|
-
rxjs.combineLatest([this.dropTargetSubject, this.canDropSubject, this.dropActionSubject])
|
|
111
|
-
.pipe(pairwise())
|
|
112
|
-
.subscribe(([[previous], [current, canDrop, action]]) => {
|
|
113
|
-
// console.log('can drop', canDrop);
|
|
114
|
-
previous?._setActiveDropTarget(null);
|
|
115
|
-
current?._setActiveDropTarget({ canDrop, action });
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
registerDropActionSubject() {
|
|
119
|
-
this.uiService
|
|
120
|
-
.observeCtrlOrCmdKeyPressedOutsideZone()
|
|
121
|
-
.pipe(map((ctrlOrCmdPressed) => this.getDropAction(ctrlOrCmdPressed)))
|
|
122
|
-
.subscribe((dropAction) => this.ngZone.run(() => this.dropActionSubject.next(dropAction)));
|
|
123
|
-
}
|
|
124
|
-
getDropAction(ctrlOrCmdPressed) {
|
|
125
|
-
if (ctrlOrCmdPressed) {
|
|
126
|
-
return 'copy';
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
return 'move';
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
getCursor(draggedNodes, canDrop, dropAction) {
|
|
133
|
-
if (!draggedNodes) {
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
else if (canDrop?.denyExplicit) {
|
|
137
|
-
return 'no-drop';
|
|
138
|
-
}
|
|
139
|
-
else if (dropAction === 'copy') {
|
|
140
|
-
return 'copy';
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
return 'grabbing';
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDropService, deps: [{ token: i0.NgZone }, { token: i1.Toast }, { token: i2.UIService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
147
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDropService, providedIn: 'root' }); }
|
|
148
|
-
}
|
|
149
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodesDragDropService, decorators: [{
|
|
150
|
-
type: Injectable,
|
|
151
|
-
args: [{
|
|
152
|
-
providedIn: 'root',
|
|
153
|
-
}]
|
|
154
|
-
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.Toast }, { type: i2.UIService }] });
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZXMtZHJhZy1kcm9wLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NlcnZpY2VzL25vZGVzLWRyYWctZHJvcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBVXJFLE1BQU0sT0FBTyxvQkFBb0I7SUFjN0IsSUFBSSxZQUFZLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxZQUFvQixNQUFjLEVBQVUsS0FBWSxFQUFVLFNBQW9CO1FBQWxFLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXJCdEYsMkNBQTJDO1FBQ25DLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2hFLGlFQUFpRTtRQUN6RCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBMkIsSUFBSSxDQUFDLENBQUM7UUFDaEYsMkVBQTJFO1FBQ25FLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxDQUFDO1FBQ25FLHFGQUFxRjtRQUM3RSx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBMkIsSUFBSSxD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QUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQy9CLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMvQixPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7SUFDTCxDQUFDOytHQXRKUSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQUZqQixNQUFNOzs0RkFFVCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBwYWlyd2lzZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENhbkRyb3AsIERyb3BBY3Rpb24gfSBmcm9tICcuLi90eXBlcy9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgTm9kZXNEcm9wVGFyZ2V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcmFnLW5vZGVzL25vZGVzLWRyb3AtdGFyZ2V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBUb2FzdCB9IGZyb20gJy4vYWJzdHJhY3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICcuL3VpLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOb2Rlc0RyYWdEcm9wU2VydmljZSB7XG4gICAgLyoqIFRoZSBub2RlKHMpIGN1cnJlbnRseSBiZWluZyBkcmFnZ2VkLiAqL1xuICAgIHByaXZhdGUgZHJhZ2dlZE5vZGVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tm9kZVtdPihudWxsKTtcbiAgICAvKiogVGhlIGRyb3AgdGFyZ2V0IHRoYXQgc29tZXRoaW5nIGlzIGN1cnJlbnRseSBkcmFnZ2VkIGFib3ZlLiAqL1xuICAgIHByaXZhdGUgZHJvcFRhcmdldFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE5vZGVzRHJvcFRhcmdldERpcmVjdGl2ZT4obnVsbCk7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGN1cnJlbnQgZHJvcCB0YXJnZXQgYWxsb3dzIGRyb3BwaW5nIHRoZSBkcmFnZ2VkIG5vZGUocykuICovXG4gICAgcHJpdmF0ZSBjYW5Ecm9wU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FuRHJvcCB8IG51bGw+KG51bGwpO1xuICAgIC8qKiBBIHRhcmdldCBiZWluZyBob3ZlcmVkIHdpdGggdGhlIGN1cnNvci4gRG9lcyBub3QgbWVhbiBhbnl0aGluZyBpcyBkcmFnZ2VkIHlldC4gKi9cbiAgICBwcml2YXRlIGhvdmVyZWRUYXJnZXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOb2Rlc0Ryb3BUYXJnZXREaXJlY3RpdmU+KG51bGwpO1xuICAgIC8qKiBDdXJyZW50IGRyb3AgYWN0aW9uIGJhc2VkIG9uIHByZXNzZWQgbW9kaWZpZXIga2V5cy4gKi9cbiAgICBwcml2YXRlIGRyb3BBY3Rpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEcm9wQWN0aW9uPignbW92ZScpO1xuICAgIC8qKiBUaGUgY3VycmVudCBjdXJzb3Igc3R5bGUuICovXG4gICAgcHJpdmF0ZSBjdXJzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KG51bGwpO1xuXG4gICAgc2V0IGRyYWdnZWROb2Rlcyhub2RlczogTm9kZVtdKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dlZE5vZGVzU3ViamVjdC5uZXh0KG5vZGVzKTtcbiAgICB9XG5cbiAgICBnZXQgY2FuRHJvcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuRHJvcFN1YmplY3QudmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSB0b2FzdDogVG9hc3QsIHByaXZhdGUgdWlTZXJ2aWNlOiBVSVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRyb3BUYXJnZXQoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckNhbkRyb3AoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRyb3BBY3Rpb25TdWJqZWN0KCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckFjdGl2ZURyb3BUYXJnZXRTdHlsZSgpO1xuICAgICAgICAvLyB0aGlzLmRyYWdnZWROb2Rlc1N1YmplY3Quc3Vic2NyaWJlKChkcmFnZ2VkTm9kZXMpID0+XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZygnZHJhZ2dlZE5vZGVzJywgZHJhZ2dlZE5vZGVzKSxcbiAgICAgICAgLy8gKTtcbiAgICAgICAgLy8gdGhpcy5kcm9wVGFyZ2V0U3ViamVjdC5zdWJzY3JpYmUoKGRyb3BUYXJnZXQpID0+IGNvbnNvbGUubG9nKCdkcm9wVGFyZ2V0JywgZHJvcFRhcmdldCkpO1xuICAgICAgICAvLyB0aGlzLmNhbkRyb3BTdWJqZWN0LnN1YnNjcmliZSgoY2FuRHJvcCkgPT4gY29uc29sZS5sb2coJ2NhbkRyb3AnLCBjYW5Ecm9wKSk7XG4gICAgfVxuXG4gICAgLyoqIENhbGwgd2hlbiB0aGUgY3Vyc29yIGVudGVycyBhIHBvc3NpYmxlIGRyb3AgdGFyZ2V0LiBSdW5zIG91dHNpZGUgbmdab25lLiAqL1xuICAgIG9uTW91c2VFbnRlcih0YXJnZXQ6IE5vZGVzRHJvcFRhcmdldERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLmhvdmVyZWRUYXJnZXRTdWJqZWN0Lm5leHQodGFyZ2V0KTtcbiAgICB9XG5cbiAgICAvKiogQ2FsbCB3aGVuIHRoZSBjdXJzb3IgbGVhdmVzIGEgcG9zc2libGUgZHJvcCB0YXJnZXQuIFJ1bnMgb3V0c2lkZSBuZ1pvbmUuICovXG4gICAgb25Nb3VzZUxlYXZlKHRhcmdldDogTm9kZXNEcm9wVGFyZ2V0RGlyZWN0aXZlKSB7XG4gICAgICAgIGlmICh0aGlzLmhvdmVyZWRUYXJnZXRTdWJqZWN0LnZhbHVlID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZFRhcmdldFN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJvcHBlZChub2RlczogTm9kZVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbkRyb3A/LmFjY2VwdCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wVGFyZ2V0U3ViamVjdC52YWx1ZT8ubm9kZURyb3BwZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dlZE5vZGVzOiBub2RlcyxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHRoaXMuZHJvcEFjdGlvblN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLmRyb3BUYXJnZXRTdWJqZWN0LnZhbHVlLnRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FuRHJvcD8uZGVueVJlYXNvbikge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5lcnJvcihudWxsLCB0aGlzLmNhbkRyb3AuZGVueVJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRHJvcFRhcmdldCgpIHtcbiAgICAgICAgcnhqcy5jb21iaW5lTGF0ZXN0KFt0aGlzLmRyYWdnZWROb2Rlc1N1YmplY3QsIHRoaXMuaG92ZXJlZFRhcmdldFN1YmplY3RdKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbZHJhZ2dlZE5vZGVzLCBob3ZlcmVkTm9kZV0pID0+IGRyYWdnZWROb2RlcyAmJiBob3ZlcmVkTm9kZSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFRhcmdldFN1YmplY3QubmV4dCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckNhbkRyb3AoKSB7XG4gICAgICAgIHJ4anMuY29tYmluZUxhdGVzdChbdGhpcy5kcm9wVGFyZ2V0U3ViamVjdCwgdGhpcy5kcm9wQWN0aW9uU3ViamVjdF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtkcm9wVGFyZ2V0LCBkcm9wQWN0aW9uXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZHJvcFRhcmdldD8uY2FuRHJvcE5vZGVzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnZWROb2RlczogdGhpcy5kcmFnZ2VkTm9kZXNTdWJqZWN0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBkcm9wQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBkcm9wVGFyZ2V0LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyB3b24ndCBmaWx0ZXIgZXF1YWwgb2JqZWN0c1xuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjYW5Ecm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2FuRHJvcFN1YmplY3QubmV4dChjYW5Ecm9wKSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyQ3Vyc29yKCkge1xuICAgICAgICByeGpzLmNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZXNTdWJqZWN0LFxuICAgICAgICAgICAgdGhpcy5jYW5Ecm9wU3ViamVjdCxcbiAgICAgICAgICAgIHRoaXMuZHJvcEFjdGlvblN1YmplY3QsXG4gICAgICAgIF0pLnN1YnNjcmliZSgoW2RyYWdnZWROb2RlcywgY2FuRHJvcCwgZHJvcEFjdGlvbl0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc2VyU3ViamVjdC5uZXh0KHRoaXMuZ2V0Q3Vyc29yKGRyYWdnZWROb2RlcywgY2FuRHJvcCwgZHJvcEFjdGlvbikpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHN0eWxlOiBIVE1MU3R5bGVFbGVtZW50O1xuICAgICAgICB0aGlzLmN1cnNlclN1YmplY3Quc3Vic2NyaWJlKChjdXJzb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJzb3IgJiYgIXN0eWxlKSB7XG4gICAgICAgICAgICAgICAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSAmJiAhY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzdHlsZSk7XG4gICAgICAgICAgICAgICAgc3R5bGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnNvcikge1xuICAgICAgICAgICAgICAgIHN0eWxlLmlubmVySFRNTCA9IGAqIHtjdXJzb3I6ICR7Y3Vyc29yfSAhaW1wb3J0YW50OyB9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckFjdGl2ZURyb3BUYXJnZXRTdHlsZSgpIHtcbiAgICAgICAgcnhqcy5jb21iaW5lTGF0ZXN0KFt0aGlzLmRyb3BUYXJnZXRTdWJqZWN0LCB0aGlzLmNhbkRyb3BTdWJqZWN0LCB0aGlzLmRyb3BBY3Rpb25TdWJqZWN0XSlcbiAgICAgICAgICAgIC5waXBlKHBhaXJ3aXNlKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbW3ByZXZpb3VzXSwgW2N1cnJlbnQsIGNhbkRyb3AsIGFjdGlvbl1dKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbiBkcm9wJywgY2FuRHJvcCk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXM/Ll9zZXRBY3RpdmVEcm9wVGFyZ2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQ/Ll9zZXRBY3RpdmVEcm9wVGFyZ2V0KHsgY2FuRHJvcCwgYWN0aW9uIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWdpc3RlckRyb3BBY3Rpb25TdWJqZWN0KCkge1xuICAgICAgICB0aGlzLnVpU2VydmljZVxuICAgICAgICAgICAgLm9ic2VydmVDdHJsT3JDbWRLZXlQcmVzc2VkT3V0c2lkZVpvbmUoKVxuICAgICAgICAgICAgLnBpcGUobWFwKChjdHJsT3JDbWRQcmVzc2VkKSA9PiB0aGlzLmdldERyb3BBY3Rpb24oY3RybE9yQ21kUHJlc3NlZCkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZHJvcEFjdGlvbikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5kcm9wQWN0aW9uU3ViamVjdC5uZXh0KGRyb3BBY3Rpb24pKSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcm9wQWN0aW9uKGN0cmxPckNtZFByZXNzZWQ6IGJvb2xlYW4pOiBEcm9wQWN0aW9uIHtcbiAgICAgICAgaWYgKGN0cmxPckNtZFByZXNzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnY29weSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vdmUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJzb3IoZHJhZ2dlZE5vZGVzOiBOb2RlW10sIGNhbkRyb3A6IENhbkRyb3AsIGRyb3BBY3Rpb246IERyb3BBY3Rpb24pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWRyYWdnZWROb2Rlcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FuRHJvcD8uZGVueUV4cGxpY2l0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ25vLWRyb3AnO1xuICAgICAgICB9IGVsc2UgaWYgKGRyb3BBY3Rpb24gPT09ICdjb3B5Jykge1xuICAgICAgICAgICAgcmV0dXJuICdjb3B5JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnZ3JhYmJpbmcnO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { ME } from 'ngx-edu-sharing-api';
|
|
3
|
-
import { take, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { Target } from '../types/option-item';
|
|
5
|
-
import { fromEvent, Subject } from 'rxjs';
|
|
6
|
-
import { matchesShortcutCondition } from '../types/keyboard-shortcuts';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/router";
|
|
9
|
-
import * as i2 from "./local-events.service";
|
|
10
|
-
import * as i3 from "ngx-edu-sharing-api";
|
|
11
|
-
import * as i4 from "./abstract/toast.service";
|
|
12
|
-
import * as i5 from "./abstract/keyboard-shortcuts.service";
|
|
13
|
-
import * as i6 from "./abstract/options-helper.service";
|
|
14
|
-
export class OptionsHelperDataService {
|
|
15
|
-
constructor(ngZone, route, localEvents, authenticationService, toast, userService, networkService, keyboardShortcutsService, optionsHelperService) {
|
|
16
|
-
this.ngZone = ngZone;
|
|
17
|
-
this.route = route;
|
|
18
|
-
this.localEvents = localEvents;
|
|
19
|
-
this.authenticationService = authenticationService;
|
|
20
|
-
this.toast = toast;
|
|
21
|
-
this.userService = userService;
|
|
22
|
-
this.networkService = networkService;
|
|
23
|
-
this.keyboardShortcutsService = keyboardShortcutsService;
|
|
24
|
-
this.optionsHelperService = optionsHelperService;
|
|
25
|
-
this.destroyed = new Subject();
|
|
26
|
-
this.virtualNodesAdded = new EventEmitter();
|
|
27
|
-
this.nodesChanged = new EventEmitter();
|
|
28
|
-
this.nodesDeleted = new EventEmitter();
|
|
29
|
-
this.displayTypeChanged = new EventEmitter();
|
|
30
|
-
this.registerStaticSubscriptions();
|
|
31
|
-
}
|
|
32
|
-
/** Performs subscriptions that don't have to be refreshed. */
|
|
33
|
-
registerStaticSubscriptions() {
|
|
34
|
-
this.localEvents.nodesDeleted
|
|
35
|
-
.pipe(takeUntil(this.destroyed))
|
|
36
|
-
.subscribe((nodes) => this.components?.list?.deleteNodes(nodes));
|
|
37
|
-
this.localEvents.nodesChanged
|
|
38
|
-
.pipe(takeUntil(this.destroyed))
|
|
39
|
-
.subscribe((nodes) => this.components?.list?.updateNodes(nodes));
|
|
40
|
-
}
|
|
41
|
-
ngOnDestroy() {
|
|
42
|
-
this.destroyed.next();
|
|
43
|
-
this.destroyed.complete();
|
|
44
|
-
}
|
|
45
|
-
async initComponents(actionbar = null, list = null, dropdown = null) {
|
|
46
|
-
this.components = {
|
|
47
|
-
actionbar,
|
|
48
|
-
list,
|
|
49
|
-
dropdown,
|
|
50
|
-
};
|
|
51
|
-
if ((await this.userService.getUser(ME).pipe(take(1)).toPromise())?.person?.authorityName) {
|
|
52
|
-
await this.networkService.getRepositories().pipe(take(1)).toPromise();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
getData() {
|
|
56
|
-
return this.data;
|
|
57
|
-
}
|
|
58
|
-
setData(data) {
|
|
59
|
-
this.data = this.optionsHelperService.wrapOptionCallbacks(data);
|
|
60
|
-
}
|
|
61
|
-
async refreshComponents() {
|
|
62
|
-
if (this.data == null) {
|
|
63
|
-
console.warn('options helper refresh called but no data previously bound');
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (this.optionsHelperService == null) {
|
|
67
|
-
console.warn('optionsHelperService not provided. No default actions will be generated');
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
this.globalOptions = await this.getAvailableOptions(Target.Actionbar);
|
|
71
|
-
await this.optionsHelperService?.refreshComponents(this.components, this.data);
|
|
72
|
-
}
|
|
73
|
-
getAvailableOptions(target, objects = null) {
|
|
74
|
-
return this.optionsHelperService?.getAvailableOptions(target, objects, this.components, this.data);
|
|
75
|
-
}
|
|
76
|
-
addVirtualObjects(objects) {
|
|
77
|
-
objects = objects.map((o) => {
|
|
78
|
-
o.virtual = true;
|
|
79
|
-
return o;
|
|
80
|
-
});
|
|
81
|
-
this.virtualNodesAdded.emit(objects);
|
|
82
|
-
if (this.components?.list) {
|
|
83
|
-
this.components?.list.addVirtualNodes(objects);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
registerGlobalKeyboardShortcuts() {
|
|
87
|
-
this.ngZone.runOutsideAngular(() => {
|
|
88
|
-
if (!this.keyboardShortcutsSubscription) {
|
|
89
|
-
this.keyboardShortcutsSubscription = fromEvent(document, 'keydown')
|
|
90
|
-
.pipe(takeUntil(this.destroyed))
|
|
91
|
-
.subscribe((event) => this.handleKeyboardEvent(event));
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
async handleKeyboardEvent(event) {
|
|
96
|
-
if (this.globalOptions && !this.keyboardShortcutsService?.shouldIgnoreShortcut(event)) {
|
|
97
|
-
for (const option of this.globalOptions) {
|
|
98
|
-
if (option.keyboardShortcut &&
|
|
99
|
-
matchesShortcutCondition(event, option.keyboardShortcut)) {
|
|
100
|
-
event.preventDefault();
|
|
101
|
-
event.stopPropagation();
|
|
102
|
-
if (await option.enabledCallback()) {
|
|
103
|
-
this.ngZone.run(() => option.callback(null));
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
this.toast.error(null, 'TOAST.OPTION_DISABLED_OR_UNAVAILABLE');
|
|
107
|
-
}
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
filterOptions(options, target, objects = null) {
|
|
114
|
-
return this.optionsHelperService.filterOptions(options, target, this.data, objects);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* shortcut to simply disable all options on the given compoennts
|
|
118
|
-
* @param actionbar
|
|
119
|
-
* @param list
|
|
120
|
-
*/
|
|
121
|
-
clearComponents(actionbar, list = null) {
|
|
122
|
-
if (list) {
|
|
123
|
-
list.setOptions(null);
|
|
124
|
-
}
|
|
125
|
-
if (actionbar) {
|
|
126
|
-
actionbar.options = [];
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
pasteNode(nodes = []) {
|
|
130
|
-
this.optionsHelperService.pasteNode(this.components, this.data, true, nodes);
|
|
131
|
-
}
|
|
132
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionsHelperDataService, deps: [{ token: i0.NgZone }, { token: i1.ActivatedRoute }, { token: i2.LocalEventsService }, { token: i3.AuthenticationService }, { token: i4.Toast }, { token: i3.UserService }, { token: i3.NetworkService }, { token: i5.KeyboardShortcutsService, optional: true }, { token: i6.OptionsHelperService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
133
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionsHelperDataService }); }
|
|
134
|
-
}
|
|
135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OptionsHelperDataService, decorators: [{
|
|
136
|
-
type: Injectable
|
|
137
|
-
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.ActivatedRoute }, { type: i2.LocalEventsService }, { type: i3.AuthenticationService }, { type: i4.Toast }, { type: i3.UserService }, { type: i3.NetworkService }, { type: i5.KeyboardShortcutsService, decorators: [{
|
|
138
|
-
type: Optional
|
|
139
|
-
}] }, { type: i6.OptionsHelperService, decorators: [{
|
|
140
|
-
type: Optional
|
|
141
|
-
}] }] });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy1oZWxwZXItZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9zZXJ2aWNlcy9vcHRpb25zLWhlbHBlci1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQXFCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQXlCLEVBQUUsRUFBcUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBb0MsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7OztBQThCdkUsTUFBTSxPQUFPLHdCQUF3QjtJQVlqQyxZQUNZLE1BQWMsRUFDZCxLQUFxQixFQUNyQixXQUErQixFQUMvQixxQkFBNEMsRUFDNUMsS0FBWSxFQUNaLFdBQXdCLEVBQ3hCLGNBQThCLEVBQ2xCLHdCQUFrRCxFQUNsRCxvQkFBMEM7UUFSdEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDbEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBaEIxRCxj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LENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pGLENBQUM7K0dBL0lRLHdCQUF3QjttSEFBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVOzswQkFxQkYsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25iYXJDb21wb25lbnQgfSBmcm9tICcuLi9hY3Rpb25iYXIvYWN0aW9uYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTGlzdEV2ZW50SW50ZXJmYWNlLFxuICAgIE5vZGVFbnRyaWVzRGF0YVR5cGUsXG4gICAgTm9kZUVudHJpZXNEaXNwbGF5VHlwZSxcbn0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBOZ1pvbmUsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgTUUsIE5ldHdvcmtTZXJ2aWNlLCBOb2RlLCBVc2VyU2VydmljZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3VzdG9tT3B0aW9ucywgT3B0aW9uSXRlbSwgU2NvcGUsIFRhcmdldCB9IGZyb20gJy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbmltcG9ydCB7IE9wdGlvbnNIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi9hYnN0cmFjdC9vcHRpb25zLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXRjaGVzU2hvcnRjdXRDb25kaXRpb24gfSBmcm9tICcuLi90eXBlcy9rZXlib2FyZC1zaG9ydGN1dHMnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlIH0gZnJvbSAnLi9hYnN0cmFjdC9rZXlib2FyZC1zaG9ydGN1dHMuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMb2NhbEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuL2xvY2FsLWV2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi9hYnN0cmFjdC90b2FzdC5zZXJ2aWNlJztcblxudHlwZSBEZWxldGVFdmVudCA9IHtcbiAgICBvYmplY3RzOiBOb2RlW10gfCBhbnk7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBlcnJvcjogYm9vbGVhbjtcbn07XG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnNIZWxwZXJDb21wb25lbnRzIHtcbiAgICBhY3Rpb25iYXI/OiBBY3Rpb25iYXJDb21wb25lbnQ7XG4gICAgZHJvcGRvd24/OiBEcm9wZG93bkNvbXBvbmVudDtcbiAgICBsaXN0PzogTGlzdEV2ZW50SW50ZXJmYWNlPE5vZGVFbnRyaWVzRGF0YVR5cGU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbkRhdGEge1xuICAgIHNjb3BlOiBTY29wZTtcbiAgICBhY3RpdmVPYmplY3RzPzogTm9kZVtdIHwgYW55W107XG4gICAgc2VsZWN0ZWRPYmplY3RzPzogTm9kZVtdIHwgYW55W107XG4gICAgYWxsT2JqZWN0cz86IE5vZGVbXSB8IGFueVtdO1xuICAgIHBhcmVudD86IE5vZGUgfCBhbnk7XG4gICAgY3VzdG9tT3B0aW9ucz86IEN1c3RvbU9wdGlvbnM7XG4gICAgLyoqXG4gICAgICogY3VzdG9tIGludGVyY2VwdG9yIHRvIG1vZGlmeSB0aGUgZGVmYXVsdCBvcHRpb25zIGFycmF5XG4gICAgICovXG4gICAgcG9zdFByZXBhcmVPcHRpb25zPzogKG9wdGlvbnM6IE9wdGlvbkl0ZW1bXSwgb2JqZWN0czogTm9kZVtdKSA9PiB2b2lkO1xufVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9wdGlvbnNIZWxwZXJEYXRhU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBjb21wb25lbnRzOiBPcHRpb25zSGVscGVyQ29tcG9uZW50cztcbiAgICBwcml2YXRlIGRhdGE6IE9wdGlvbkRhdGE7XG4gICAgcHJpdmF0ZSBrZXlib2FyZFNob3J0Y3V0c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZ2xvYmFsT3B0aW9uczogT3B0aW9uSXRlbVtdO1xuICAgIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHJlYWRvbmx5IHZpcnR1YWxOb2Rlc0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlW10+KCk7XG4gICAgcmVhZG9ubHkgbm9kZXNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlW10gfCB2b2lkPigpO1xuICAgIHJlYWRvbmx5IG5vZGVzRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGVsZXRlRXZlbnQ+KCk7XG4gICAgcmVhZG9ubHkgZGlzcGxheVR5cGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50cmllc0Rpc3BsYXlUeXBlPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIGxvY2FsRXZlbnRzOiBMb2NhbEV2ZW50c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0LFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUga2V5Ym9hcmRTaG9ydGN1dHNTZXJ2aWNlOiBLZXlib2FyZFNob3J0Y3V0c1NlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgb3B0aW9uc0hlbHBlclNlcnZpY2U6IE9wdGlvbnNIZWxwZXJTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3RhdGljU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cbiAgICAvKiogUGVyZm9ybXMgc3Vic2NyaXB0aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gYmUgcmVmcmVzaGVkLiAqL1xuICAgIHByaXZhdGUgcmVnaXN0ZXJTdGF0aWNTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvY2FsRXZlbnRzLm5vZGVzRGVsZXRlZFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG5vZGVzKSA9PiB0aGlzLmNvbXBvbmVudHM/Lmxpc3Q/LmRlbGV0ZU5vZGVzKG5vZGVzKSk7XG4gICAgICAgIHRoaXMubG9jYWxFdmVudHMubm9kZXNDaGFuZ2VkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobm9kZXMpID0+IHRoaXMuY29tcG9uZW50cz8ubGlzdD8udXBkYXRlTm9kZXMobm9kZXMpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0Q29tcG9uZW50cyhcbiAgICAgICAgYWN0aW9uYmFyOiBBY3Rpb25iYXJDb21wb25lbnQgPSBudWxsLFxuICAgICAgICBsaXN0OiBMaXN0RXZlbnRJbnRlcmZhY2U8Tm9kZUVudHJpZXNEYXRhVHlwZT4gPSBudWxsLFxuICAgICAgICBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQgPSBudWxsLFxuICAgICkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMgPSB7XG4gICAgICAgICAgICBhY3Rpb25iYXIsXG4gICAgICAgICAgICBsaXN0LFxuICAgICAgICAgICAgZHJvcGRvd24sXG4gICAgICAgIH07XG4gICAgICAgIGlmICgoYXdhaXQgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyKE1FKS5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpKT8ucGVyc29uPy5hdXRob3JpdHlOYW1lKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm5ldHdvcmtTZXJ2aWNlLmdldFJlcG9zaXRvcmllcygpLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIHNldERhdGEoZGF0YTogT3B0aW9uRGF0YSkge1xuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLm9wdGlvbnNIZWxwZXJTZXJ2aWNlLndyYXBPcHRpb25DYWxsYmFja3MoZGF0YSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVmcmVzaENvbXBvbmVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdvcHRpb25zIGhlbHBlciByZWZyZXNoIGNhbGxlZCBidXQgbm8gZGF0YSBwcmV2aW91c2x5IGJvdW5kJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc0hlbHBlclNlcnZpY2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdvcHRpb25zSGVscGVyU2VydmljZSBub3QgcHJvdmlkZWQuIE5vIGRlZmF1bHQgYWN0aW9ucyB3aWxsIGJlIGdlbmVyYXRlZCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0QXZhaWxhYmxlT3B0aW9ucyhUYXJnZXQuQWN0aW9uYmFyKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vcHRpb25zSGVscGVyU2VydmljZT8ucmVmcmVzaENvbXBvbmVudHModGhpcy5jb21wb25lbnRzLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZU9wdGlvbnModGFyZ2V0OiBUYXJnZXQsIG9iamVjdHM6IE5vZGVbXSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc0hlbHBlclNlcnZpY2U/LmdldEF2YWlsYWJsZU9wdGlvbnMoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBvYmplY3RzLFxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLFxuICAgICAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkVmlydHVhbE9iamVjdHMob2JqZWN0czogYW55W10pIHtcbiAgICAgICAgb2JqZWN0cyA9IG9iamVjdHMubWFwKChvOiBhbnkpID0+IHtcbiAgICAgICAgICAgIG8udmlydHVhbCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudmlydHVhbE5vZGVzQWRkZWQuZW1pdChvYmplY3RzKTtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50cz8ubGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzPy5saXN0LmFkZFZpcnR1YWxOb2RlcyhvYmplY3RzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyR2xvYmFsS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5rZXlib2FyZFNob3J0Y3V0c1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRTaG9ydGN1dHNTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsT3B0aW9ucyAmJiAhdGhpcy5rZXlib2FyZFNob3J0Y3V0c1NlcnZpY2U/LnNob3VsZElnbm9yZVNob3J0Y3V0KGV2ZW50KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdGhpcy5nbG9iYWxPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBvcHRpb24ua2V5Ym9hcmRTaG9ydGN1dCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzU2hvcnRjdXRDb25kaXRpb24oZXZlbnQsIG9wdGlvbi5rZXlib2FyZFNob3J0Y3V0KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IG9wdGlvbi5lbmFibGVkQ2FsbGJhY2soKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IG9wdGlvbi5jYWxsYmFjayhudWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LmVycm9yKG51bGwsICdUT0FTVC5PUFRJT05fRElTQUJMRURfT1JfVU5BVkFJTEFCTEUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBPcHRpb25JdGVtW10sIHRhcmdldDogVGFyZ2V0LCBvYmplY3RzOiBOb2RlW10gfCBhbnkgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNIZWxwZXJTZXJ2aWNlLmZpbHRlck9wdGlvbnMob3B0aW9ucywgdGFyZ2V0LCB0aGlzLmRhdGEsIG9iamVjdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzaG9ydGN1dCB0byBzaW1wbHkgZGlzYWJsZSBhbGwgb3B0aW9ucyBvbiB0aGUgZ2l2ZW4gY29tcG9lbm50c1xuICAgICAqIEBwYXJhbSBhY3Rpb25iYXJcbiAgICAgKiBAcGFyYW0gbGlzdFxuICAgICAqL1xuICAgIGNsZWFyQ29tcG9uZW50cyhhY3Rpb25iYXI6IEFjdGlvbmJhckNvbXBvbmVudCwgbGlzdDogTGlzdEV2ZW50SW50ZXJmYWNlPE5vZGU+ID0gbnVsbCkge1xuICAgICAgICBpZiAobGlzdCkge1xuICAgICAgICAgICAgbGlzdC5zZXRPcHRpb25zKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb25iYXIpIHtcbiAgICAgICAgICAgIGFjdGlvbmJhci5vcHRpb25zID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXN0ZU5vZGUobm9kZXM6IE5vZGVbXSA9IFtdKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0hlbHBlclNlcnZpY2UucGFzdGVOb2RlKHRoaXMuY29tcG9uZW50cywgdGhpcy5kYXRhLCB0cnVlLCBub2Rlcyk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { firstValueFrom } from 'rxjs';
|
|
3
|
-
import { RSApiConfiguration } from 'ngx-rendering-service-api';
|
|
4
|
-
import { RestConstants, PROPERTY_FILTER_ALL, HOME_REPOSITORY, } from 'ngx-edu-sharing-api';
|
|
5
|
-
import { OptionsHelperDataService } from './options-helper-data.service';
|
|
6
|
-
import { Scope } from '../types/option-item';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "ngx-edu-sharing-api";
|
|
9
|
-
import * as i2 from "../edu-sharing-ui-configuration";
|
|
10
|
-
import * as i3 from "./options-helper-data.service";
|
|
11
|
-
export class RenderHelperService {
|
|
12
|
-
constructor(injector, aboutService, nodeApiUnwrapped, configuration, userService, optionsHelperDataService) {
|
|
13
|
-
this.injector = injector;
|
|
14
|
-
this.aboutService = aboutService;
|
|
15
|
-
this.nodeApiUnwrapped = nodeApiUnwrapped;
|
|
16
|
-
this.configuration = configuration;
|
|
17
|
-
this.userService = userService;
|
|
18
|
-
this.optionsHelperDataService = optionsHelperDataService;
|
|
19
|
-
}
|
|
20
|
-
async getRenderData(nodeId, version = null) {
|
|
21
|
-
const about = await firstValueFrom(this.aboutService.getAbout());
|
|
22
|
-
const securedNode = await firstValueFrom(this.nodeApiUnwrapped.getMetadataSigned({
|
|
23
|
-
repository: HOME_REPOSITORY,
|
|
24
|
-
node: nodeId,
|
|
25
|
-
propertyFilter: [PROPERTY_FILTER_ALL],
|
|
26
|
-
}));
|
|
27
|
-
const node = securedNode.node;
|
|
28
|
-
const user = await firstValueFrom(this.userService.observeCurrentUserInfo());
|
|
29
|
-
console.info(this.injector.get(OptionsHelperDataService));
|
|
30
|
-
this.optionsHelperDataService?.setData({
|
|
31
|
-
scope: Scope.Render,
|
|
32
|
-
activeObjects: [node],
|
|
33
|
-
parent: {
|
|
34
|
-
ref: {
|
|
35
|
-
id: node.parent.id,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
customOptions: {
|
|
39
|
-
useDefaultOptions: true,
|
|
40
|
-
},
|
|
41
|
-
postPrepareOptions: (options, objects) => {
|
|
42
|
-
if (version && version !== RestConstants.NODE_VERSION_CURRENT) {
|
|
43
|
-
options.filter((o) => o.name === 'OPTIONS.OPEN')[0].isEnabled = false;
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
await this.optionsHelperDataService?.refreshComponents();
|
|
48
|
-
if (!about.renderingService2) {
|
|
49
|
-
console.error('no rendering service 2 url was configured. Will not continue.');
|
|
50
|
-
return {
|
|
51
|
-
node,
|
|
52
|
-
error: 'RENDERING.ERROR.RS2_NOT_CONFIGURED',
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
console.info(about.renderingService2?.url);
|
|
56
|
-
if (this.configuration.production) {
|
|
57
|
-
this.injector.get(RSApiConfiguration).rootUrl = about.renderingService2.url.replace(/\/$/g, '');
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
this.injector.get(RSApiConfiguration).rootUrl = '/rendering2';
|
|
61
|
-
}
|
|
62
|
-
console.info(this.injector.get(RSApiConfiguration));
|
|
63
|
-
const token = securedNode.jwt;
|
|
64
|
-
console.info(token, node);
|
|
65
|
-
const request = {
|
|
66
|
-
nodeId: node.ref.id,
|
|
67
|
-
repoId: node.ref.repo,
|
|
68
|
-
securedNode: securedNode.signedNode,
|
|
69
|
-
signature: securedNode.signature,
|
|
70
|
-
token: token,
|
|
71
|
-
userData: {
|
|
72
|
-
authorityName: user.user.person.authorityName,
|
|
73
|
-
firstName: user.user.person.profile.firstName,
|
|
74
|
-
surName: user.user.person.profile.lastName,
|
|
75
|
-
userEMail: user.user.person.profile.email,
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
return {
|
|
79
|
-
node,
|
|
80
|
-
request,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
async getRenderDataForLms(encodedNode, signature, jwt, renderUrl, encodedUser) {
|
|
84
|
-
this.injector.get(RSApiConfiguration).rootUrl = renderUrl;
|
|
85
|
-
const decodedNodeString = atob(encodedNode);
|
|
86
|
-
const node = JSON.parse(decodedNodeString);
|
|
87
|
-
const userData = JSON.parse(atob(encodedUser));
|
|
88
|
-
const request = {
|
|
89
|
-
nodeId: node.ref.id,
|
|
90
|
-
repoId: node.ref.repo,
|
|
91
|
-
securedNode: encodedNode,
|
|
92
|
-
signature: signature,
|
|
93
|
-
token: jwt,
|
|
94
|
-
userData: {
|
|
95
|
-
authorityName: userData.authorityName ?? '',
|
|
96
|
-
firstName: userData.firstName ?? '',
|
|
97
|
-
surName: userData.lastName ?? '',
|
|
98
|
-
userEMail: userData.email ?? '',
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
return {
|
|
102
|
-
node,
|
|
103
|
-
request,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RenderHelperService, deps: [{ token: i0.Injector }, { token: i1.AboutService }, { token: i1.NodeServiceUnwrapped }, { token: i2.EduSharingUiConfiguration }, { token: i1.UserService }, { token: i3.OptionsHelperDataService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
107
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RenderHelperService }); }
|
|
108
|
-
}
|
|
109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RenderHelperService, decorators: [{
|
|
110
|
-
type: Injectable
|
|
111
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AboutService }, { type: i1.NodeServiceUnwrapped }, { type: i2.EduSharingUiConfiguration }, { type: i1.UserService }, { type: i3.OptionsHelperDataService, decorators: [{
|
|
112
|
-
type: Optional
|
|
113
|
-
}] }] });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZW5kZXItaGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQThCLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0YsT0FBTyxFQUlILGFBQWEsRUFFYixtQkFBbUIsRUFDbkIsZUFBZSxHQUNsQixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFRN0MsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixZQUNZLFFBQWtCLEVBQ2xCLFlBQTBCLEVBQzFCLGdCQUFzQyxFQUN0QyxhQUF3QyxFQUN4QyxXQUF3QixFQUNaLHdCQUFrRDtRQUw5RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQTJCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ1osNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtJQUN2RSxDQUFDO0lBRUosS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsSUFBSTtRQUN0RCxNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakUsTUFBTSxXQUFXLEdB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UyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRTthQUNsQztTQUMwQixDQUFDO1FBRWhDLE9BQU87WUFDSCxJQUFJO1lBQ0osT0FBTztTQUNWLENBQUM7SUFDTixDQUFDOytHQTVHUSxtQkFBbUI7bUhBQW5CLG1CQUFtQjs7NEZBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVTs7MEJBUUYsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuLCBSU0FwaUNvbmZpZ3VyYXRpb24gfSBmcm9tICduZ3gtcmVuZGVyaW5nLXNlcnZpY2UtYXBpJztcbmltcG9ydCB7XG4gICAgQWJvdXRTZXJ2aWNlLFxuICAgIE5vZGUsXG4gICAgTm9kZVNlcnZpY2VVbndyYXBwZWQsXG4gICAgUmVzdENvbnN0YW50cyxcbiAgICBVc2VyU2VydmljZSxcbiAgICBQUk9QRVJUWV9GSUxURVJfQUxMLFxuICAgIEhPTUVfUkVQT1NJVE9SWSxcbn0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBFZHVTaGFyaW5nVWlDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZWR1LXNoYXJpbmctdWktY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBPcHRpb25zSGVscGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuL29wdGlvbnMtaGVscGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJy4uL3R5cGVzL29wdGlvbi1pdGVtJztcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRSZW5kZXJEYXRhID0ge1xuICAgIG5vZGU6IE5vZGU7XG4gICAgcmVxdWVzdD86IFJlbmRlckRhdGFSZXF1ZXN0V2l0aFRva2VuO1xuICAgIGVycm9yPzogc3RyaW5nO1xufTtcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZW5kZXJIZWxwZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgYWJvdXRTZXJ2aWNlOiBBYm91dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZUFwaVVud3JhcHBlZDogTm9kZVNlcnZpY2VVbndyYXBwZWQsXG4gICAgICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogRWR1U2hhcmluZ1VpQ29uZmlndXJhdGlvbixcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgb3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlOiBPcHRpb25zSGVscGVyRGF0YVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgZ2V0UmVuZGVyRGF0YShub2RlSWQ6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nID0gbnVsbCk6IFByb21pc2U8Q29tYmluZWRSZW5kZXJEYXRhPiB7XG4gICAgICAgIGNvbnN0IGFib3V0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hYm91dFNlcnZpY2UuZ2V0QWJvdXQoKSk7XG4gICAgICAgIGNvbnN0IHNlY3VyZWROb2RlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLm5vZGVBcGlVbndyYXBwZWQuZ2V0TWV0YWRhdGFTaWduZWQoe1xuICAgICAgICAgICAgICAgIHJlcG9zaXRvcnk6IEhPTUVfUkVQT1NJVE9SWSxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlSWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlGaWx0ZXI6IFtQUk9QRVJUWV9GSUxURVJfQUxMXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBub2RlID0gc2VjdXJlZE5vZGUubm9kZTtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMudXNlclNlcnZpY2Uub2JzZXJ2ZUN1cnJlbnRVc2VySW5mbygpKTtcbiAgICAgICAgY29uc29sZS5pbmZvKHRoaXMuaW5qZWN0b3IuZ2V0KE9wdGlvbnNIZWxwZXJEYXRhU2VydmljZSkpO1xuICAgICAgICB0aGlzLm9wdGlvbnNIZWxwZXJEYXRhU2VydmljZT8uc2V0RGF0YSh7XG4gICAgICAgICAgICBzY29wZTogU2NvcGUuUmVuZGVyLFxuICAgICAgICAgICAgYWN0aXZlT2JqZWN0czogW25vZGVdLFxuICAgICAgICAgICAgcGFyZW50OiB7XG4gICAgICAgICAgICAgICAgcmVmOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBub2RlLnBhcmVudC5pZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGN1c3RvbU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB1c2VEZWZhdWx0T3B0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwb3N0UHJlcGFyZU9wdGlvbnM6IChvcHRpb25zLCBvYmplY3RzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gJiYgdmVyc2lvbiAhPT0gUmVzdENvbnN0YW50cy5OT0RFX1ZFUlNJT05fQ1VSUkVOVCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbHRlcigobykgPT4gby5uYW1lID09PSAnT1BUSU9OUy5PUEVOJylbMF0uaXNFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMub3B0aW9uc0hlbHBlckRhdGFTZXJ2aWNlPy5yZWZyZXNoQ29tcG9uZW50cygpO1xuICAgICAgICBpZiAoIWFib3V0LnJlbmRlcmluZ1NlcnZpY2UyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdubyByZW5kZXJpbmcgc2VydmljZSAyIHVybCB3YXMgY29uZmlndXJlZC4gV2lsbCBub3QgY29udGludWUuJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdSRU5ERVJJTkcuRVJST1IuUlMyX05PVF9DT05GSUdVUkVEJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5pbmZvKGFib3V0LnJlbmRlcmluZ1NlcnZpY2UyPy51cmwpO1xuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLnByb2R1Y3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KFJTQXBpQ29uZmlndXJhdGlvbikucm9vdFVybCA9IGFib3V0LnJlbmRlcmluZ1NlcnZpY2UyLnVybC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIC9cXC8kL2csXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoUlNBcGlDb25maWd1cmF0aW9uKS5yb290VXJsID0gJy9yZW5kZXJpbmcyJztcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmluZm8odGhpcy5pbmplY3Rvci5nZXQoUlNBcGlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gc2VjdXJlZE5vZGUuand0O1xuICAgICAgICBjb25zb2xlLmluZm8odG9rZW4sIG5vZGUpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgbm9kZUlkOiBub2RlLnJlZi5pZCxcbiAgICAgICAgICAgIHJlcG9JZDogbm9kZS5yZWYucmVwbyxcbiAgICAgICAgICAgIHNlY3VyZWROb2RlOiBzZWN1cmVkTm9kZS5zaWduZWROb2RlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBzZWN1cmVkTm9kZS5zaWduYXR1cmUsXG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICB1c2VyRGF0YToge1xuICAgICAgICAgICAgICAgIGF1dGhvcml0eU5hbWU6IHVzZXIudXNlci5wZXJzb24uYXV0aG9yaXR5TmFtZSxcbiAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHVzZXIudXNlci5wZXJzb24ucHJvZmlsZS5maXJzdE5hbWUsXG4gICAgICAgICAgICAgICAgc3VyTmFtZTogdXNlci51c2VyLnBlcnNvbi5wcm9maWxlLmxhc3ROYW1lLFxuICAgICAgICAgICAgICAgIHVzZXJFTWFpbDogdXNlci51c2VyLnBlcnNvbi5wcm9maWxlLmVtYWlsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBSZW5kZXJEYXRhUmVxdWVzdFdpdGhUb2tlbjtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmVuZGVyRGF0YUZvckxtcyhcbiAgICAgICAgZW5jb2RlZE5vZGU6IHN0cmluZyxcbiAgICAgICAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gICAgICAgIGp3dDogc3RyaW5nLFxuICAgICAgICByZW5kZXJVcmw6IHN0cmluZyxcbiAgICAgICAgZW5jb2RlZFVzZXI6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPENvbWJpbmVkUmVuZGVyRGF0YT4ge1xuICAgICAgICB0aGlzLmluamVjdG9yLmdldChSU0FwaUNvbmZpZ3VyYXRpb24pLnJvb3RVcmwgPSByZW5kZXJVcmw7XG4gICAgICAgIGNvbnN0IGRlY29kZWROb2RlU3RyaW5nID0gYXRvYihlbmNvZGVkTm9kZSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBKU09OLnBhcnNlKGRlY29kZWROb2RlU3RyaW5nKSBhcyBOb2RlO1xuICAgICAgICBjb25zdCB1c2VyRGF0YSA9IEpTT04ucGFyc2UoYXRvYihlbmNvZGVkVXNlcikpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgbm9kZUlkOiBub2RlLnJlZi5pZCxcbiAgICAgICAgICAgIHJlcG9JZDogbm9kZS5yZWYucmVwbyxcbiAgICAgICAgICAgIHNlY3VyZWROb2RlOiBlbmNvZGVkTm9kZSxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLFxuICAgICAgICAgICAgdG9rZW46IGp3dCxcbiAgICAgICAgICAgIHVzZXJEYXRhOiB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXR5TmFtZTogdXNlckRhdGEuYXV0aG9yaXR5TmFtZSA/PyAnJyxcbiAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHVzZXJEYXRhLmZpcnN0TmFtZSA/PyAnJyxcbiAgICAgICAgICAgICAgICBzdXJOYW1lOiB1c2VyRGF0YS5sYXN0TmFtZSA/PyAnJyxcbiAgICAgICAgICAgICAgICB1c2VyRU1haWw6IHVzZXJEYXRhLmVtYWlsID8/ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBSZW5kZXJEYXRhUmVxdWVzdFdpdGhUb2tlbjtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { take } from 'rxjs/operators';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "ngx-edu-sharing-api";
|
|
5
|
-
import * as i2 from "../edu-sharing-ui-configuration";
|
|
6
|
-
/**
|
|
7
|
-
* Replaces absolute backend URLs with proxied URLs when in dev environment.
|
|
8
|
-
*
|
|
9
|
-
* This is needed for content that requires authentication, so the browser provides the required
|
|
10
|
-
* session cookie with the request, or when accessing the dev server from another device.
|
|
11
|
-
*/
|
|
12
|
-
export class RepoUrlService {
|
|
13
|
-
constructor(networkService, configuration) {
|
|
14
|
-
this.networkService = networkService;
|
|
15
|
-
this.configuration = configuration;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Replaces the given URL if the given node belongs to the home repository.
|
|
19
|
-
*/
|
|
20
|
-
async getRepoUrl(url, node) {
|
|
21
|
-
if (!this.configuration.production &&
|
|
22
|
-
!this.configuration.isEmbedded &&
|
|
23
|
-
(await this.networkService.isFromHomeRepository(node).pipe(take(1)).toPromise())) {
|
|
24
|
-
return this.withCurrentOrigin(url);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
return url;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Replaces the given URL.
|
|
32
|
-
*
|
|
33
|
-
* The caller needs to make sure that the given URL belongs to the home repository.
|
|
34
|
-
*/
|
|
35
|
-
withCurrentOrigin(url) {
|
|
36
|
-
const urlObject = new URL(url);
|
|
37
|
-
urlObject.host = window.location.host;
|
|
38
|
-
urlObject.protocol = window.location.protocol;
|
|
39
|
-
return urlObject.href;
|
|
40
|
-
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepoUrlService, deps: [{ token: i1.NetworkService }, { token: i2.EduSharingUiConfiguration }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
42
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepoUrlService, providedIn: 'root' }); }
|
|
43
|
-
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepoUrlService, decorators: [{
|
|
45
|
-
type: Injectable,
|
|
46
|
-
args: [{
|
|
47
|
-
providedIn: 'root',
|
|
48
|
-
}]
|
|
49
|
-
}], ctorParameters: () => [{ type: i1.NetworkService }, { type: i2.EduSharingUiConfiguration }] });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwby11cmwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvc2VydmljZXMvcmVwby11cmwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUd0Qzs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLFlBQ1ksY0FBOEIsRUFDOUIsYUFBd0M7UUFEeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUEyQjtJQUNqRCxDQUFDO0lBRUo7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQVcsRUFBRSxJQUFVO1FBQ3BDLElBQ0ksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDOUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDOUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQ2xGLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsR0FBVztRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixTQUFTLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDOUMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7K0dBL0JRLGNBQWM7bUhBQWQsY0FBYyxjQUZYLE1BQU07OzRGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UsIE5vZGUgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZHVTaGFyaW5nVWlDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZWR1LXNoYXJpbmctdWktY29uZmlndXJhdGlvbic7XG5cbi8qKlxuICogUmVwbGFjZXMgYWJzb2x1dGUgYmFja2VuZCBVUkxzIHdpdGggcHJveGllZCBVUkxzIHdoZW4gaW4gZGV2IGVudmlyb25tZW50LlxuICpcbiAqIFRoaXMgaXMgbmVlZGVkIGZvciBjb250ZW50IHRoYXQgcmVxdWlyZXMgYXV0aGVudGljYXRpb24sIHNvIHRoZSBicm93c2VyIHByb3ZpZGVzIHRoZSByZXF1aXJlZFxuICogc2Vzc2lvbiBjb29raWUgd2l0aCB0aGUgcmVxdWVzdCwgb3Igd2hlbiBhY2Nlc3NpbmcgdGhlIGRldiBzZXJ2ZXIgZnJvbSBhbm90aGVyIGRldmljZS5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb1VybFNlcnZpY2Uge1xuICAgIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb246IEVkdVNoYXJpbmdVaUNvbmZpZ3VyYXRpb24sXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgdGhlIGdpdmVuIFVSTCBpZiB0aGUgZ2l2ZW4gbm9kZSBiZWxvbmdzIHRvIHRoZSBob21lIHJlcG9zaXRvcnkuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0UmVwb1VybCh1cmw6IHN0cmluZywgbm9kZTogTm9kZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jb25maWd1cmF0aW9uLnByb2R1Y3Rpb24gJiZcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZ3VyYXRpb24uaXNFbWJlZGRlZCAmJlxuICAgICAgICAgICAgKGF3YWl0IHRoaXMubmV0d29ya1NlcnZpY2UuaXNGcm9tSG9tZVJlcG9zaXRvcnkobm9kZSkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53aXRoQ3VycmVudE9yaWdpbih1cmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIHRoZSBnaXZlbiBVUkwuXG4gICAgICpcbiAgICAgKiBUaGUgY2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiBVUkwgYmVsb25ncyB0byB0aGUgaG9tZSByZXBvc2l0b3J5LlxuICAgICAqL1xuICAgIHdpdGhDdXJyZW50T3JpZ2luKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gbmV3IFVSTCh1cmwpO1xuICAgICAgICB1cmxPYmplY3QuaG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XG4gICAgICAgIHJldHVybiB1cmxPYmplY3QuaHJlZjtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { MdsHelperService } from '../mds/mds-helper.service';
|
|
3
|
-
import { MdsService } from 'ngx-edu-sharing-api';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class SearchHelperService {
|
|
6
|
-
static { this.MAX_QUERY_CONCAT_PARAMS = 400; }
|
|
7
|
-
constructor() { }
|
|
8
|
-
/**
|
|
9
|
-
* converts given filter criteria and converts them for a body to be used for a search request
|
|
10
|
-
* @param properties
|
|
11
|
-
* @param mdsWidgets
|
|
12
|
-
* @param unfoldTrees
|
|
13
|
-
*/
|
|
14
|
-
convertCritieria(properties, mdsWidgets, unfoldTrees = true) {
|
|
15
|
-
const criteria = [];
|
|
16
|
-
// deep copy
|
|
17
|
-
properties = JSON.parse(JSON.stringify(properties));
|
|
18
|
-
for (const property in properties) {
|
|
19
|
-
let widget = MdsHelperService.getWidget(property, undefined, mdsWidgets);
|
|
20
|
-
if (widget && widget.type == 'multivalueTree' && unfoldTrees) {
|
|
21
|
-
let attach = MdsService.unfoldTreeChilds(properties[property], widget);
|
|
22
|
-
if (attach) {
|
|
23
|
-
if (attach.length > SearchHelperService.MAX_QUERY_CONCAT_PARAMS) {
|
|
24
|
-
console.info('param ' +
|
|
25
|
-
property +
|
|
26
|
-
' has too many unfold childs (' +
|
|
27
|
-
attach.length +
|
|
28
|
-
'), falling back to basic prefix-based search');
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
properties[property] = properties[property].concat(attach);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (properties[property]?.length && properties[property].every((p) => p != null && !!p))
|
|
36
|
-
criteria.push({
|
|
37
|
-
property: property,
|
|
38
|
-
values: properties[property],
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return criteria;
|
|
42
|
-
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SearchHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SearchHelperService, providedIn: 'root' }); }
|
|
45
|
-
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SearchHelperService, decorators: [{
|
|
47
|
-
type: Injectable,
|
|
48
|
-
args: [{
|
|
49
|
-
providedIn: 'root',
|
|
50
|
-
}]
|
|
51
|
-
}], ctorParameters: () => [] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9zZXJ2aWNlcy9zZWFyY2gtaGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0scUJBQXFCLENBQUM7O0FBTzVELE1BQU0sT0FBTyxtQkFBbUI7YUFDWiw0QkFBdUIsR0FBRyxHQUFHLEFBQU4sQ0FBTztJQUU5QyxnQkFBZSxDQUFDO0lBRWhCOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxVQUF1QixFQUFFLFdBQVcsR0FBRyxJQUFJO1FBQzVFLE1BQU0sUUFBUSxHQUdSLEVBQUUsQ0FBQztRQUNULFlBQVk7UUFDWixVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxJQUFJLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN6RSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGdCQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUMzRCxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNULElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO3dCQUM5RCxPQUFPLENBQUMsSUFBSSxDQUNSLFFBQVE7NEJBQ0osUUFBUTs0QkFDUiwrQkFBK0I7NEJBQy9CLE1BQU0sQ0FBQyxNQUFNOzRCQUNiLDhDQUE4QyxDQUNyRCxDQUFDO29CQUNOLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDL0QsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25GLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ1YsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2lCQUMvQixDQUFDLENBQUM7UUFDWCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0EzQ1EsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1kc0hlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9tZHMvbWRzLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1kc1NlcnZpY2UsIE1kc1dpZGdldCB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuXG5leHBvcnQgdHlwZSBWYWx1ZXMgPSB7IFtwOiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hIZWxwZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgTUFYX1FVRVJZX0NPTkNBVF9QQVJBTVMgPSA0MDA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBnaXZlbiBmaWx0ZXIgY3JpdGVyaWEgYW5kIGNvbnZlcnRzIHRoZW0gZm9yIGEgYm9keSB0byBiZSB1c2VkIGZvciBhIHNlYXJjaCByZXF1ZXN0XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXNcbiAgICAgKiBAcGFyYW0gbWRzV2lkZ2V0c1xuICAgICAqIEBwYXJhbSB1bmZvbGRUcmVlc1xuICAgICAqL1xuICAgIGNvbnZlcnRDcml0aWVyaWEocHJvcGVydGllczogVmFsdWVzLCBtZHNXaWRnZXRzOiBNZHNXaWRnZXRbXSwgdW5mb2xkVHJlZXMgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGNyaXRlcmlhOiB7XG4gICAgICAgICAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgICAgICAgICAgdmFsdWVzOiBzdHJpbmdbXTtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIC8vIGRlZXAgY29weVxuICAgICAgICBwcm9wZXJ0aWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgbGV0IHdpZGdldCA9IE1kc0hlbHBlclNlcnZpY2UuZ2V0V2lkZ2V0KHByb3BlcnR5LCB1bmRlZmluZWQsIG1kc1dpZGdldHMpO1xuICAgICAgICAgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQudHlwZSA9PSAnbXVsdGl2YWx1ZVRyZWUnICYmIHVuZm9sZFRyZWVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF0dGFjaCA9IE1kc1NlcnZpY2UudW5mb2xkVHJlZUNoaWxkcyhwcm9wZXJ0aWVzW3Byb3BlcnR5XSwgd2lkZ2V0KTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2gubGVuZ3RoID4gU2VhcmNoSGVscGVyU2VydmljZS5NQVhfUVVFUllfQ09OQ0FUX1BBUkFNUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJhbSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGhhcyB0b28gbWFueSB1bmZvbGQgY2hpbGRzICgnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoLmxlbmd0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcpLCBmYWxsaW5nIGJhY2sgdG8gYmFzaWMgcHJlZml4LWJhc2VkIHNlYXJjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1twcm9wZXJ0eV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5XS5jb25jYXQoYXR0YWNoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW3Byb3BlcnR5XT8ubGVuZ3RoICYmIHByb3BlcnRpZXNbcHJvcGVydHldLmV2ZXJ5KChwKSA9PiBwICE9IG51bGwgJiYgISFwKSlcbiAgICAgICAgICAgICAgICBjcml0ZXJpYS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHByb3BlcnRpZXNbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcml0ZXJpYTtcbiAgICB9XG59XG4iXX0=
|