@c8y/ngx-components 1011.0.33 → 1011.0.35
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/bundles/c8y-ngx-components-sub-assets.umd.js +4 -5
- package/bundles/c8y-ngx-components-sub-assets.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-upgrade.umd.js +6 -5
- package/bundles/c8y-ngx-components-upgrade.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-upgrade.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-upgrade.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.js +62 -20
- package/bundles/c8y-ngx-components.umd.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.min.js +1 -1
- package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
- package/c8y-ngx-components.metadata.json +1 -1
- package/core/action-bar/action-bar.component.d.ts +22 -6
- package/core/common/outlet.directive.d.ts +7 -0
- package/core/data-grid/data-grid.component.d.ts +3 -0
- package/esm2015/core/action-bar/action-bar.component.js +41 -15
- package/esm2015/core/bootstrap/bootstrap.component.js +2 -2
- package/esm2015/core/common/outlet.directive.js +19 -2
- package/esm2015/core/data-grid/data-grid.component.js +6 -2
- package/esm2015/sub-assets/sub-assets-grid.component.js +6 -7
- package/esm2015/upgrade/action-bar.factory.js +6 -2
- package/esm2015/upgrade/bridge.service.js +2 -5
- package/fesm2015/c8y-ngx-components-sub-assets.js +4 -5
- package/fesm2015/c8y-ngx-components-sub-assets.js.map +1 -1
- package/fesm2015/c8y-ngx-components-upgrade.js +5 -5
- package/fesm2015/c8y-ngx-components-upgrade.js.map +1 -1
- package/fesm2015/c8y-ngx-components.js +62 -17
- package/fesm2015/c8y-ngx-components.js.map +1 -1
- package/package.json +2 -2
- package/sub-assets/c8y-ngx-components-sub-assets.metadata.json +1 -1
- package/sub-assets/sub-assets-grid.component.d.ts +3 -3
- package/upgrade/action-bar.factory.d.ts +1 -0
- package/upgrade/c8y-ngx-components-upgrade.metadata.json +1 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
1
2
|
import { ActionBarItem } from './action-bar.model';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
2
4
|
/**
|
|
3
5
|
* This component is used as the outlet to show the action bars.
|
|
4
6
|
* In a c8ycli app it is by default placed on the bootstrap component.
|
|
5
7
|
*/
|
|
6
|
-
export declare class ActionBarComponent {
|
|
8
|
+
export declare class ActionBarComponent implements OnInit, OnDestroy {
|
|
7
9
|
/**
|
|
8
10
|
* Identifies if the navigator is opened. If yes, the action-bar
|
|
9
11
|
* needs to move to the right.
|
|
@@ -30,15 +32,29 @@ export declare class ActionBarComponent {
|
|
|
30
32
|
/**
|
|
31
33
|
* The current items to display in the ActionBar.
|
|
32
34
|
*/
|
|
33
|
-
items
|
|
35
|
+
items$: Observable<ActionBarItem[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Provides observable for right action items.
|
|
38
|
+
*/
|
|
39
|
+
right$: Observable<ActionBarItem[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Provides observable for left action items.
|
|
42
|
+
*/
|
|
43
|
+
left$: Observable<ActionBarItem[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Provides observable for more action items.
|
|
46
|
+
*/
|
|
47
|
+
more$: Observable<ActionBarItem[]>;
|
|
34
48
|
/**
|
|
35
49
|
* Returns true if no items are present and hides the action bar.
|
|
36
50
|
*/
|
|
37
|
-
|
|
51
|
+
hidden$: Observable<boolean>;
|
|
38
52
|
/**
|
|
39
|
-
*
|
|
40
|
-
* @param {placement} Which placement should be returned sorted.
|
|
53
|
+
* Binds hidden property to this component's native element
|
|
41
54
|
*/
|
|
42
|
-
|
|
55
|
+
hidden: boolean;
|
|
56
|
+
private destroy$;
|
|
57
|
+
ngOnInit(): void;
|
|
58
|
+
ngOnDestroy(): void;
|
|
43
59
|
private byPriority;
|
|
44
60
|
}
|
|
@@ -5,6 +5,13 @@ import { ComponentFactoryResolver, ElementRef, Renderer2, TemplateRef, Type, Vie
|
|
|
5
5
|
* <div *c8yOutlet="template"></div>
|
|
6
6
|
* <div *c8yOutlet="DeviceStatusComponent; properties: { node }"></div>
|
|
7
7
|
* <div *c8yOutlet="nodes"></div>
|
|
8
|
+
*
|
|
9
|
+
*
|
|
10
|
+
* note: If template is instance of HTMLElement (for example, node compiled by angularJS) then there can be
|
|
11
|
+
* only single instance rendered, as only one instance of HTMLElement can exist in DOM.
|
|
12
|
+
* If there is need for displaying same element multiple times, please make sure to inject into
|
|
13
|
+
* this element createCopy function, which should return another instance of given element.
|
|
14
|
+
*
|
|
8
15
|
*/
|
|
9
16
|
export declare class OutletDirective {
|
|
10
17
|
private viewContainer;
|
|
@@ -52,6 +52,9 @@ export declare class DataGridComponent implements DataGrid, OnChanges, AfterView
|
|
|
52
52
|
bulkActionControls: BulkActionControl[];
|
|
53
53
|
set _bulkActionControls(bulkActionControls: any);
|
|
54
54
|
searchText: string;
|
|
55
|
+
/** Shows the warning for the sub-assets counter */
|
|
56
|
+
showCounterWarning: boolean;
|
|
57
|
+
/** Emits an event when mouse is over a row. */
|
|
55
58
|
rowMouseOver: EventEmitter<object>;
|
|
56
59
|
rowMouseLeave: EventEmitter<object>;
|
|
57
60
|
rowClick: EventEmitter<object>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Component, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import { of, Subject } from 'rxjs';
|
|
3
|
+
import { map, takeUntil } from 'rxjs/operators';
|
|
2
4
|
import { filter, sortBy } from 'lodash-es';
|
|
3
5
|
/**
|
|
4
6
|
* This component is used as the outlet to show the action bars.
|
|
@@ -32,20 +34,44 @@ export class ActionBarComponent {
|
|
|
32
34
|
/**
|
|
33
35
|
* The current items to display in the ActionBar.
|
|
34
36
|
*/
|
|
35
|
-
this.items = [];
|
|
37
|
+
this.items$ = of([]);
|
|
38
|
+
/**
|
|
39
|
+
* Provides observable for right action items.
|
|
40
|
+
*/
|
|
41
|
+
this.right$ = of([]);
|
|
42
|
+
/**
|
|
43
|
+
* Provides observable for left action items.
|
|
44
|
+
*/
|
|
45
|
+
this.left$ = of([]);
|
|
46
|
+
/**
|
|
47
|
+
* Provides observable for more action items.
|
|
48
|
+
*/
|
|
49
|
+
this.more$ = of([]);
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if no items are present and hides the action bar.
|
|
52
|
+
*/
|
|
53
|
+
this.hidden$ = of(true);
|
|
54
|
+
/**
|
|
55
|
+
* Binds hidden property to this component's native element
|
|
56
|
+
*/
|
|
57
|
+
this.hidden = true;
|
|
58
|
+
this.destroy$ = new Subject();
|
|
36
59
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
60
|
+
ngOnInit() {
|
|
61
|
+
this.right$ = this.items$.pipe(map(items => filter(items, { placement: 'right' })), map(items => sortBy(items, this.byPriority)));
|
|
62
|
+
this.left$ = this.items$.pipe(map(items => filter(items, { placement: 'left' })), map(items => sortBy(items, this.byPriority)));
|
|
63
|
+
this.more$ = this.items$.pipe(map(items => filter(items, { placement: 'more' })), map(items => sortBy(items, this.byPriority)));
|
|
64
|
+
this.hidden$ = this.items$.pipe(map(items => {
|
|
65
|
+
return !(items && items.length);
|
|
66
|
+
}));
|
|
67
|
+
this.hidden$
|
|
68
|
+
.pipe(takeUntil(this.destroy$)).subscribe(hidden => {
|
|
69
|
+
this.hidden = hidden;
|
|
70
|
+
});
|
|
42
71
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
*/
|
|
47
|
-
getSortedItems(placement) {
|
|
48
|
-
return sortBy(filter(this.items, { placement }), this.byPriority);
|
|
72
|
+
ngOnDestroy() {
|
|
73
|
+
this.destroy$.next();
|
|
74
|
+
this.destroy$.complete();
|
|
49
75
|
}
|
|
50
76
|
byPriority(item) {
|
|
51
77
|
return -item.priority;
|
|
@@ -54,7 +80,7 @@ export class ActionBarComponent {
|
|
|
54
80
|
ActionBarComponent.decorators = [
|
|
55
81
|
{ type: Component, args: [{
|
|
56
82
|
selector: 'c8y-action-bar',
|
|
57
|
-
template: "<div class=\"navbar-header\">\n <p class=\"text-label-small p-l-16 p-t-8 p-b-8 visible-xs\">\n <span class=\"text-primary\">{{'Action bar' | translate}}</span>\n </p>\n</div>\n\n<div id=\"page-toolbar\" class=\"navbar-collapse\"
|
|
83
|
+
template: "<div class=\"navbar-header\">\n <p class=\"text-label-small p-l-16 p-t-8 p-b-8 visible-xs\">\n <span class=\"text-primary\">{{ 'Action bar' | translate }}</span>\n </p>\n</div>\n\n<div id=\"page-toolbar\" class=\"navbar-collapse\">\n <ul class=\"nav navbar-nav navbar-left\">\n <ng-container *ngFor=\"let item of left$ | async\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </ng-container>\n </ul>\n <ul class=\"nav navbar-nav navbar-right\">\n <ng-container *ngFor=\"let item of right$ | async\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </ng-container>\n <li class=\"no-remove more-wrapper\" *ngIf=\"(more$ | async).length > 0\">\n <div class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'More' | translate }}\u2026\"\n class=\"dropdown-toggle c8y-dropdown d-flex\"\n dropdownToggle\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n >\n <span class=\"text-truncate\" translate>More\u2026</span>\n <i [c8yIcon]=\"'caret-down'\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right hidden-xs\" *dropdownMenu>\n <ng-container *ngFor=\"let item of more$ | async\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </ng-container>\n </ul>\n <ul class=\"dropdown-menu visible-xs\">\n <ng-container *ngFor=\"let item of more$ | async\">\n <ng-container *c8yOutlet=\"item.template\"></ng-container>\n </ng-container>\n </ul>\n </div>\n </li>\n </ul>\n</div>\n",
|
|
58
84
|
host: { class: 'c8y-ui-action-bar' }
|
|
59
85
|
},] }
|
|
60
86
|
];
|
|
@@ -63,7 +89,7 @@ ActionBarComponent.propDecorators = {
|
|
|
63
89
|
hasTabs: [{ type: Input }, { type: HostBinding, args: ['class.has-tabs',] }],
|
|
64
90
|
isTabsHorizontal: [{ type: Input }, { type: HostBinding, args: ['class.horizontal-tabs',] }],
|
|
65
91
|
uiActionBar: [{ type: HostBinding, args: ['class.c8y-ui-action-bar',] }],
|
|
66
|
-
items
|
|
92
|
+
items$: [{ type: Input }],
|
|
67
93
|
hidden: [{ type: HostBinding }]
|
|
68
94
|
};
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2FjdGlvbi1iYXIvYWN0aW9uLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVqRixPQUFPLEVBQWMsRUFBRSxFQUFHLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNDOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxrQkFBa0I7SUFML0I7UUFNRTs7O1dBR0c7UUFDMkMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFcEU7OztXQUdHO1FBQ3FDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFeEQ7OztXQUdHO1FBQzRDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV4RTs7V0FFRztRQUNILDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUU5Qjs7V0FFRztRQUNxQyxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUUzRDs7V0FFRztRQUNNLFdBQU0sR0FBZ0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXREOztXQUVHO1FBQ0gsV0FBTSxHQUFnQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0M7O1dBRUc7UUFDSCxVQUFLLEdBQWdDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1Qzs7V0FFRztRQUNILFVBQUssR0FBZ0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVDOztXQUVHO1FBQ0gsWUFBTyxHQUF3QixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEM7O1dBRUc7UUFFSCxXQUFNLEdBQVksSUFBSSxDQUFDO1FBRWYsYUFBUSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBeUNqRCxDQUFDO0lBdkNDLFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM1QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDN0MsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDM0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQ2xELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzdDLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsT0FBTzthQUNULElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QixDQUFDLFNBQVMsQ0FDVCxNQUFNLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFJO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3hCLENBQUM7OztZQXpHRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIscW5EQUEwQztnQkFDMUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO2FBQ3JDOzs7NEJBTUUsS0FBSyxZQUFJLFdBQVcsU0FBQyxzQkFBc0I7c0JBTTNDLEtBQUssWUFBSSxXQUFXLFNBQUMsZ0JBQWdCOytCQU1yQyxLQUFLLFlBQUksV0FBVyxTQUFDLHVCQUF1QjswQkFVNUMsV0FBVyxTQUFDLHlCQUF5QjtxQkFLckMsS0FBSztxQkF5QkwsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uQmFySXRlbSB9IGZyb20gJy4vYWN0aW9uLWJhci5tb2RlbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiAsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgYXMgdGhlIG91dGxldCB0byBzaG93IHRoZSBhY3Rpb24gYmFycy5cbiAqIEluIGEgYzh5Y2xpIGFwcCBpdCBpcyBieSBkZWZhdWx0IHBsYWNlZCBvbiB0aGUgYm9vdHN0cmFwIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFjdGlvbi1iYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjOHktdWktYWN0aW9uLWJhcicgfVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIGlmIHRoZSBuYXZpZ2F0b3IgaXMgb3BlbmVkLiBJZiB5ZXMsIHRoZSBhY3Rpb24tYmFyXG4gICAqIG5lZWRzIHRvIG1vdmUgdG8gdGhlIHJpZ2h0LlxuICAgKi9cbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5uYXZpZ2F0b3Itb3BlbicpIG5hdmlnYXRvck9wZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSWRlbnRpZmllcyBpZiB0aGUgY3VycmVudCB2aWV3IGhhcyB0YWJzLiBJZiB5ZXMsIHRoZSBhY3Rpb24gYmFyIG5lZWRzXG4gICAqIHRvIG1vdmUgZG93bi5cbiAgICovXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLXRhYnMnKSBoYXNUYWJzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXMgaWYgdGhlIHRhYnMgYXJlIGFsaWduZWQgaG9yaXpvbnRhbGx5LiBJZiB5ZXMsIHRoZSB0YWJzIGRvbid0XG4gICAqIG5lZWQgdG8gbW92ZSB0byB0aGUgbGVmdC5cbiAgICovXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MuaG9yaXpvbnRhbC10YWJzJykgaXNUYWJzSG9yaXpvbnRhbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIGlmIGluIGEgbW9iaWxlIHZpZXcgdGhlIHRvb2xiYXIgaXMgZXhwYW5kZWQgb3Igbm90LlxuICAgKi9cbiAgaXNQYWdlVG9vbGJhckV4cGFuZGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGRlZmF1bHQgYGM4eS11aS1hY3Rpb24tYmFyYCBjbGFzcy5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYzh5LXVpLWFjdGlvbi1iYXInKSB1aUFjdGlvbkJhciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIEFjdGlvbkJhci5cbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1zJDogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtW10+ID0gb2YoW10pO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBvYnNlcnZhYmxlIGZvciByaWdodCBhY3Rpb24gaXRlbXMuXG4gICAqL1xuICByaWdodCQ6IE9ic2VydmFibGU8QWN0aW9uQmFySXRlbVtdPiA9IG9mKFtdKTtcblxuICAvKipcbiAgICogUHJvdmlkZXMgb2JzZXJ2YWJsZSBmb3IgbGVmdCBhY3Rpb24gaXRlbXMuXG4gICAqL1xuICBsZWZ0JDogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtW10+ID0gb2YoW10pO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBvYnNlcnZhYmxlIGZvciBtb3JlIGFjdGlvbiBpdGVtcy5cbiAgICovXG4gIG1vcmUkOiBPYnNlcnZhYmxlPEFjdGlvbkJhckl0ZW1bXT4gPSBvZihbXSk7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBubyBpdGVtcyBhcmUgcHJlc2VudCBhbmQgaGlkZXMgdGhlIGFjdGlvbiBiYXIuXG4gICAqL1xuICBoaWRkZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YodHJ1ZSk7XG5cbiAgLyoqXG4gICAqIEJpbmRzIGhpZGRlbiBwcm9wZXJ0eSB0byB0aGlzIGNvbXBvbmVudCdzIG5hdGl2ZSBlbGVtZW50XG4gICAqL1xuICBASG9zdEJpbmRpbmcoKVxuICBoaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yaWdodCQgPSB0aGlzLml0ZW1zJC5waXBlKFxuICAgICAgbWFwKGl0ZW1zID0+IGZpbHRlcihpdGVtcywgeyBwbGFjZW1lbnQ6ICdyaWdodCcgfSkpLFxuICAgICAgbWFwKGl0ZW1zID0+IHNvcnRCeShpdGVtcywgdGhpcy5ieVByaW9yaXR5KSlcbiAgICApO1xuXG4gICAgdGhpcy5sZWZ0JCA9IHRoaXMuaXRlbXMkLnBpcGUoXG4gICAgICBtYXAoaXRlbXMgPT4gZmlsdGVyKGl0ZW1zLCB7IHBsYWNlbWVudDogJ2xlZnQnIH0pKSxcbiAgICAgIG1hcChpdGVtcyA9PiBzb3J0QnkoaXRlbXMsIHRoaXMuYnlQcmlvcml0eSkpXG4gICAgKTtcblxuICAgIHRoaXMubW9yZSQgPSB0aGlzLml0ZW1zJC5waXBlKFxuICAgICAgbWFwKGl0ZW1zID0+IGZpbHRlcihpdGVtcywgeyBwbGFjZW1lbnQ6ICdtb3JlJyB9KSksXG4gICAgICBtYXAoaXRlbXMgPT4gc29ydEJ5KGl0ZW1zLCB0aGlzLmJ5UHJpb3JpdHkpKVxuICAgICk7XG5cbiAgICB0aGlzLmhpZGRlbiQgPSB0aGlzLml0ZW1zJC5waXBlKFxuICAgICAgbWFwKGl0ZW1zID0+IHtcbiAgICAgICAgcmV0dXJuICEoaXRlbXMgJiYgaXRlbXMubGVuZ3RoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuaGlkZGVuJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKS5zdWJzY3JpYmUoXG4gICAgICAgIGhpZGRlbiA9PiB7XG4gICAgICAgICAgdGhpcy5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBieVByaW9yaXR5KGl0ZW0pIHtcbiAgICByZXR1cm4gLWl0ZW0ucHJpb3JpdHk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -29,7 +29,7 @@ export class BootstrapComponent {
|
|
|
29
29
|
BootstrapComponent.decorators = [
|
|
30
30
|
{ type: Component, args: [{
|
|
31
31
|
selector: 'c8y-bootstrap',
|
|
32
|
-
template: "<c8y-login *ngIf=\"!(ui.currentUser | async)\"></c8y-login>\n\n<div *ngIf=\"ui.currentUser | async\" [class.head-open]=\"headerService.headerOpen\">\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-navigator-outlet\n [nodes]=\"navigator.items$ | async\"\n [open]=\"headerService.navigatorOpen$ | async\"\n >\n <header class=\"title navigator-slot-top\">\n <div class=\"tenant-brand\"></div>\n <c8y-app-icon\n [name]=\"(ui.state$ | async).app.name\"\n [contextPath]=\"(ui.state$ | async).app.contextPath\"\n ></c8y-app-icon>\n <span>{{ (ui.state$ | async).app | humanizeAppName | async }}</span>\n </header>\n <div class=\"powered-by navigator-slot-bottom\" *ngIf=\"showPoweredBy\">\n <p translate>powered by Cumulocity</p>\n </div>\n </c8y-navigator-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n >\n </c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent.isHorizontal\"\n [items]=\"actionBar.items
|
|
32
|
+
template: "<c8y-login *ngIf=\"!(ui.currentUser | async)\"></c8y-login>\n\n<div *ngIf=\"ui.currentUser | async\" [class.head-open]=\"headerService.headerOpen\">\n <c8y-header-bar #header></c8y-header-bar>\n <c8y-navigator-outlet\n [nodes]=\"navigator.items$ | async\"\n [open]=\"headerService.navigatorOpen$ | async\"\n >\n <header class=\"title navigator-slot-top\">\n <div class=\"tenant-brand\"></div>\n <c8y-app-icon\n [name]=\"(ui.state$ | async).app.name\"\n [contextPath]=\"(ui.state$ | async).app.contextPath\"\n ></c8y-app-icon>\n <span>{{ (ui.state$ | async).app | humanizeAppName | async }}</span>\n </header>\n <div class=\"powered-by navigator-slot-bottom\" *ngIf=\"showPoweredBy\">\n <p translate>powered by Cumulocity</p>\n </div>\n </c8y-navigator-outlet>\n\n <div class=\"alerts\">\n <c8y-alert-outlet></c8y-alert-outlet>\n </div>\n <c8y-tabs-outlet\n #tabsComponent\n [tabs]=\"tabs.items$ | async\"\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [orientation]=\"tabs.orientation$ | async\"\n >\n </c8y-tabs-outlet>\n <c8y-action-bar\n #actionBarComponent\n [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n [hasTabs]=\"tabsComponent.hasTabs\"\n [isTabsHorizontal]=\"tabsComponent.isHorizontal\"\n [items$]=\"actionBar.items$\"\n >\n </c8y-action-bar>\n\n <div\n class=\"mcontainer\"\n [ngClass]=\"{\n open: headerService.navigatorOpen$ | async,\n 'no-apps-margin': noAppsMargin$ | async,\n 'horizontal-tabs': tabsComponent.isHorizontal,\n 'vertical-tabs': !tabsComponent.isHorizontal,\n 'has-tabs': tabsComponent.hasTabs,\n 'has-action-bar': !actionBarComponent.hidden\n }\"\n >\n <div class=\"container-fluid\">\n <router-outlet></router-outlet>\n <ng-content select=\"#c8y-legacy-view\"></ng-content>\n <!-- legacy ng-view, will not be migrated atm -->\n </div>\n </div>\n</div>\n<c8y-cookie-banner></c8y-cookie-banner>\n"
|
|
33
33
|
},] }
|
|
34
34
|
];
|
|
35
35
|
BootstrapComponent.ctorParameters = () => [
|
|
@@ -40,4 +40,4 @@ BootstrapComponent.ctorParameters = () => [
|
|
|
40
40
|
{ type: OptionsService },
|
|
41
41
|
{ type: HeaderService }
|
|
42
42
|
];
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYm9vdHN0cmFwL2Jvb3RzdHJhcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNbkQsTUFBTSxPQUFPLGtCQUFrQjtJQU03QixZQUNTLElBQWlCLEVBQ2pCLEVBQW1CLEVBQ25CLFNBQTJCLEVBQzNCLFNBQTJCLEVBQzFCLE9BQXVCLEVBQ3hCLGFBQTRCO1FBTDVCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBaUI7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFSckMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFVNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDL0UsSUFBSSxDQUFDLEVBQUU7YUFDSixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7YUFDdkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7O1lBM0JGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsMCtEQUF3QzthQUN6Qzs7O1lBTFEsV0FBVztZQUhYLGVBQWU7WUFFZixnQkFBZ0I7WUFKaEIsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFFZCxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjdGlvbkJhclNlcnZpY2UgfSBmcm9tICcuLi9hY3Rpb24tYmFyL2FjdGlvbi1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vdGFicy90YWJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYm9vdHN0cmFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb3RzdHJhcC50ZW1wbGF0ZS5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBCb290c3RyYXBDb21wb25lbnQge1xuICBuYXZpZ2F0b3JPcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbm9BcHBzTWFyZ2luJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdGFic09yaWVudGF0aW9uOiBzdHJpbmc7XG4gIHNob3dQb3dlcmVkQnk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwdWJsaWMgdWk6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHB1YmxpYyBhY3Rpb25CYXI6IEFjdGlvbkJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgaGVhZGVyU2VydmljZTogSGVhZGVyU2VydmljZVxuICApIHtcbiAgICB0aGlzLm5vQXBwc01hcmdpbiQgPSB0aGlzLmhlYWRlclNlcnZpY2UubWFwKCh7IG5hdiB9KSA9PiAhbmF2Lm9wZW4gJiYgbmF2LmhpZGRlbk9uU3RhcnR1cCk7XG4gICAgdGhpcy50YWJzT3JpZW50YXRpb24gPSB0aGlzLm9wdGlvbnMudGFic0hvcml6b250YWwgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnO1xuICAgIHRoaXMudWlcbiAgICAgIC5tYXAoKHsgbGFuZyB9KSA9PiBsYW5nKVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFjdGlvbkJhci5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLnNob3dQb3dlcmVkQnkgPSAhdGhpcy5vcHRpb25zLmdldCgnaGlkZVBvd2VyZWQnKTtcbiAgfVxufVxuIl19
|
|
@@ -6,6 +6,13 @@ import { ComponentFactoryResolver, Directive, ElementRef, Input, Renderer2, Temp
|
|
|
6
6
|
* <div *c8yOutlet="template"></div>
|
|
7
7
|
* <div *c8yOutlet="DeviceStatusComponent; properties: { node }"></div>
|
|
8
8
|
* <div *c8yOutlet="nodes"></div>
|
|
9
|
+
*
|
|
10
|
+
*
|
|
11
|
+
* note: If template is instance of HTMLElement (for example, node compiled by angularJS) then there can be
|
|
12
|
+
* only single instance rendered, as only one instance of HTMLElement can exist in DOM.
|
|
13
|
+
* If there is need for displaying same element multiple times, please make sure to inject into
|
|
14
|
+
* this element createCopy function, which should return another instance of given element.
|
|
15
|
+
*
|
|
9
16
|
*/
|
|
10
17
|
export class OutletDirective {
|
|
11
18
|
constructor(viewContainer, resolver, renderer, el) {
|
|
@@ -38,7 +45,17 @@ export class OutletDirective {
|
|
|
38
45
|
else if (template instanceof Element) {
|
|
39
46
|
const parent = this.renderer.parentNode(this.el.nativeElement);
|
|
40
47
|
this.destroy();
|
|
41
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Because compiled element can be used only once, we need to create copy of it
|
|
50
|
+
* in order to display it in multiple locations.
|
|
51
|
+
* For example standard "More" menu, and its RWD version.
|
|
52
|
+
*/
|
|
53
|
+
if (template.createCopy) {
|
|
54
|
+
this._element = template.createCopy();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this._element = template;
|
|
58
|
+
}
|
|
42
59
|
this.renderer.insertBefore(parent, this._element, this.el.nativeElement);
|
|
43
60
|
// case Component -> <div *c8yOutlet="DeviceStatusComponent; properties: { node }"></div>
|
|
44
61
|
}
|
|
@@ -76,4 +93,4 @@ OutletDirective.propDecorators = {
|
|
|
76
93
|
c8yOutlet: [{ type: Input }],
|
|
77
94
|
c8yOutletProperties: [{ type: Input }]
|
|
78
95
|
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0bGV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL291dGxldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBRVgsZ0JBQWdCLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFekI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ1UsYUFBK0IsRUFDL0IsUUFBa0MsRUFDbEMsUUFBbUIsRUFDbkIsRUFBYztRQUhkLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFQaEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztJQVFwQixDQUFDO0lBRUw7Ozs7OztPQU1HO0lBQ0gsSUFBYSxTQUFTLENBQUMsUUFBZ0Q7UUFDckUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSxPQUFPLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUzQix3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLFlBQVksV0FBVyxFQUFFO1lBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbEQscURBQXFEO1NBQ3BEO2FBQU0sSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWY7Ozs7ZUFJRztZQUNILElBQUssUUFBZ0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNoRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzthQUMxQjtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFM0UseUZBQXlGO1NBQ3hGO2FBQU07WUFDTCxNQUFNLE9BQU8sR0FBMEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQsSUFBYSxtQkFBbUIsQ0FBQyxLQUFLO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxPQUFPO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQzs7O1lBekVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsYUFBYTthQUN4Qjs7O1lBbkJDLGdCQUFnQjtZQVBoQix3QkFBd0I7WUFJeEIsU0FBUztZQUZULFVBQVU7Ozt3QkEyQ1QsS0FBSztrQ0F1Q0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2lnbiB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFJlbmRlcmVyMixcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWZcbiAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gc2V0IGEgRE9NIG5vZGUsIGEgVGVtcGxhdGVSZWYgb3IgYW55IENvbXBvbmVudCB0byBhIGNvbnRhaW5lciBvciBhbnkgbm9kZS5cbiAqIEBleGFtcGxlXG4gKiA8ZGl2ICpjOHlPdXRsZXQ9XCJ0ZW1wbGF0ZVwiPjwvZGl2PlxuICogPGRpdiAqYzh5T3V0bGV0PVwiRGV2aWNlU3RhdHVzQ29tcG9uZW50OyBwcm9wZXJ0aWVzOiB7IG5vZGUgfVwiPjwvZGl2PlxuICogPGRpdiAqYzh5T3V0bGV0PVwibm9kZXNcIj48L2Rpdj5cbiAqXG4gKlxuICogbm90ZTogSWYgdGVtcGxhdGUgaXMgaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgKGZvciBleGFtcGxlLCBub2RlIGNvbXBpbGVkIGJ5IGFuZ3VsYXJKUykgdGhlbiB0aGVyZSBjYW4gYmVcbiAqIG9ubHkgc2luZ2xlIGluc3RhbmNlIHJlbmRlcmVkLCBhcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBjYW4gZXhpc3QgaW4gRE9NLlxuICogSWYgdGhlcmUgaXMgbmVlZCBmb3IgZGlzcGxheWluZyBzYW1lIGVsZW1lbnQgbXVsdGlwbGUgdGltZXMsIHBsZWFzZSBtYWtlIHN1cmUgdG8gaW5qZWN0IGludG9cbiAqIHRoaXMgZWxlbWVudCBjcmVhdGVDb3B5IGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgcmV0dXJuIGFub3RoZXIgaW5zdGFuY2Ugb2YgZ2l2ZW4gZWxlbWVudC5cbiAqXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjOHlPdXRsZXRdJyxcbn0pXG5leHBvcnQgY2xhc3MgT3V0bGV0RGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzID0ge307XG4gIHByaXZhdGUgX2VsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3RpdmUgdG8gc2V0IGEgRE9NIG5vZGUsIGEgVGVtcGxhdGVSZWYgb3IgYW55IENvbXBvbmVudCB0byBhIGNvbnRhaW5lciBvciBhbnkgbm9kZS5cbiAgICogQGV4YW1wbGVcbiAgICogPGRpdiAqYzh5T3V0bGV0PVwidGVtcGxhdGVcIj48L2Rpdj5cbiAgICogPGRpdiAqYzh5T3V0bGV0PVwiRGV2aWNlU3RhdHVzQ29tcG9uZW50OyBwcm9wZXJ0aWVzOiB7IG5vZGUgfVwiPjwvZGl2PlxuICAgKiA8ZGl2ICpjOHlPdXRsZXQ9XCJub2Rlc1wiPjwvZGl2PlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGM4eU91dGxldCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IFR5cGU8YW55PiB8IEVsZW1lbnQpIHtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9lbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQsICB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cbiAgICAvLyBjYXNlIFRlbXBsYXRlUmVmIC0+IDxkaXYgKmM4eU91dGxldD1cInRlbXBsYXRlXCI+PC9kaXY+XG4gICAgaWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUpO1xuXG4gICAgLy8gY2FzZSBET00gRWxlbWVudCAtPiA8ZGl2ICpjOHlPdXRsZXQ9XCJub2Rlc1wiPjwvZGl2PlxuICAgIH0gZWxzZSBpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuXG4gICAgICAvKipcbiAgICAgICAqIEJlY2F1c2UgY29tcGlsZWQgZWxlbWVudCBjYW4gYmUgdXNlZCBvbmx5IG9uY2UsIHdlIG5lZWQgdG8gY3JlYXRlIGNvcHkgb2YgaXRcbiAgICAgICAqIGluIG9yZGVyIHRvIGRpc3BsYXkgaXQgaW4gbXVsdGlwbGUgbG9jYXRpb25zLlxuICAgICAgICogRm9yIGV4YW1wbGUgc3RhbmRhcmQgXCJNb3JlXCIgbWVudSwgYW5kIGl0cyBSV0QgdmVyc2lvbi5cbiAgICAgICAqL1xuICAgICAgaWYgKCh0ZW1wbGF0ZSBhcyBhbnkpLmNyZWF0ZUNvcHkpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudCA9ICh0ZW1wbGF0ZSBhcyBhbnkpLmNyZWF0ZUNvcHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSB0ZW1wbGF0ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUocGFyZW50LCB0aGlzLl9lbGVtZW50LCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgLy8gY2FzZSBDb21wb25lbnQgLT4gPGRpdiAqYzh5T3V0bGV0PVwiRGV2aWNlU3RhdHVzQ29tcG9uZW50OyBwcm9wZXJ0aWVzOiB7IG5vZGUgfVwiPjwvZGl2PlxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRlbXBsYXRlKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XG4gICAgICBhc3NpZ24oY29tcG9uZW50Lmluc3RhbmNlLCB0aGlzLnByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjOHlPdXRsZXRQcm9wZXJ0aWVzKHZhbHVlKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gdmFsdWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgY29uc3QgX3BhcmVudCA9IHRoaXMucmVuZGVyZXIucGFyZW50Tm9kZSh0aGlzLl9lbGVtZW50KTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoX3BhcmVudCwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|