angular-slickgrid 3.1.0 → 3.3.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-slickgrid",
3
- "version": "3.1.0",
3
+ "version": "3.3.2",
4
4
  "description": "Slickgrid components made available in Angular",
5
5
  "keywords": [
6
6
  "angular",
@@ -11,27 +11,35 @@
11
11
  ],
12
12
  "license": "MIT",
13
13
  "author": "Ghislain B.",
14
+ "homepage": "https://ghiscoding.github.io/Angular-Slickgrid/",
15
+ "bugs": {
16
+ "url": "https://github.com/ghiscoding/Angular-Slickgrid/issues"
17
+ },
14
18
  "repository": {
15
19
  "type": "git",
16
20
  "url": "http://github.com/ghiscoding/angular-slickgrid"
17
21
  },
18
22
  "main": "bundles/angular-slickgrid.umd.js",
19
23
  "private": false,
24
+ "comments": {
25
+ "new-release": "1- build library (ng-packagr), 2- 'prepare-release' (npm script) & publish to npm, typically 'npm publish dist' works if it does not then run script 'pack-lib' and 'npm publish [tar file]'"
26
+ },
20
27
  "dependencies": {
21
- "@slickgrid-universal/common": "^0.17.0",
22
- "@slickgrid-universal/custom-footer-component": "^0.17.0",
23
- "@slickgrid-universal/empty-warning-component": "^0.17.0",
24
- "@slickgrid-universal/event-pub-sub": "^0.17.0",
25
- "@slickgrid-universal/rxjs-observable": "^0.17.0",
26
- "@types/dompurify": "^2.2.3",
27
- "@types/jquery": "^3.5.6",
28
+ "@slickgrid-universal/common": "^0.19.2",
29
+ "@slickgrid-universal/custom-footer-component": "^0.19.2",
30
+ "@slickgrid-universal/empty-warning-component": "^0.19.2",
31
+ "@slickgrid-universal/event-pub-sub": "^0.19.2",
32
+ "@slickgrid-universal/pagination-component": "^0.19.2",
33
+ "@slickgrid-universal/rxjs-observable": "^0.19.2",
34
+ "@types/dompurify": "^2.3.1",
35
+ "@types/jquery": "^3.5.8",
28
36
  "dequal": "^2.0.2",
29
- "dompurify": "^2.3.1",
37
+ "dompurify": "^2.3.3",
30
38
  "font-awesome": "^4.7.0",
31
39
  "jquery": "~3.5.1",
32
40
  "jquery-ui-dist": "^1.12.1",
33
41
  "moment-mini": "^2.24.0",
34
- "rxjs": "^7.3.0",
42
+ "rxjs": ">=7.0.0",
35
43
  "tslib": "^2.2.0"
36
44
  },
37
45
  "peerDependencies": {
@@ -1,42 +0,0 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
2
- import { TranslateService } from '@ngx-translate/core';
3
- import { PaginationService } from '@slickgrid-universal/common';
4
- import { GridOption } from './../models/index';
5
- export declare class SlickPaginationComponent implements OnDestroy, OnInit {
6
- private readonly translate;
7
- gridOptions: GridOption;
8
- paginationService: PaginationService;
9
- private subscriptions;
10
- private _enableTranslate;
11
- private _gridOptions;
12
- private _locales;
13
- textItemsPerPage: string;
14
- textItems: string;
15
- textOf: string;
16
- textPage: string;
17
- /** Constructor */
18
- constructor(translate: TranslateService);
19
- get availablePageSizes(): number[];
20
- get dataFrom(): number;
21
- get dataTo(): number;
22
- /** is the left side pagination disabled? */
23
- get isLeftPaginationDisabled(): boolean;
24
- /** is the right side pagination disabled? */
25
- get isRightPaginationDisabled(): boolean;
26
- get itemsPerPage(): number;
27
- get pageCount(): number;
28
- get pageNumber(): number;
29
- set pageNumber(page: number);
30
- get totalItems(): number;
31
- ngOnDestroy(): void;
32
- ngOnInit(): void;
33
- changeToFirstPage(event: MouseEvent): void;
34
- changeToLastPage(event: MouseEvent): void;
35
- changeToNextPage(event: MouseEvent): void;
36
- changeToPreviousPage(event: MouseEvent): void;
37
- changeToCurrentPage(event: any): void;
38
- changeItemPerPage(event: any): void;
39
- dispose(): void;
40
- /** Translate all the texts shown in the UI, use ngx-translate service when available or custom locales when service is null */
41
- private translateAllUiTexts;
42
- }
@@ -1,137 +0,0 @@
1
- import { Component, Input, Optional } from '@angular/core';
2
- import { TranslateService } from '@ngx-translate/core';
3
- import { getTranslationPrefix } from '@slickgrid-universal/common';
4
- import { Constants } from '../constants';
5
- import { unsubscribeAllObservables } from '../services/utilities';
6
- export class SlickPaginationComponent {
7
- /** Constructor */
8
- constructor(translate) {
9
- this.translate = translate;
10
- this.subscriptions = [];
11
- this._enableTranslate = false;
12
- // text translations (handled by ngx-translate or by custom locale)
13
- this.textItemsPerPage = 'items per page';
14
- this.textItems = 'items';
15
- this.textOf = 'of';
16
- this.textPage = 'Page';
17
- }
18
- get availablePageSizes() {
19
- return this.paginationService.availablePageSizes;
20
- }
21
- get dataFrom() {
22
- return this.paginationService.dataFrom;
23
- }
24
- get dataTo() {
25
- return this.paginationService.dataTo;
26
- }
27
- /** is the left side pagination disabled? */
28
- get isLeftPaginationDisabled() {
29
- return this.pageNumber === 1 || this.totalItems === 0;
30
- }
31
- /** is the right side pagination disabled? */
32
- get isRightPaginationDisabled() {
33
- return this.pageNumber === this.pageCount || this.totalItems === 0;
34
- }
35
- get itemsPerPage() {
36
- return this.paginationService.itemsPerPage;
37
- }
38
- get pageCount() {
39
- return this.paginationService.pageCount;
40
- }
41
- get pageNumber() {
42
- return this.paginationService.pageNumber;
43
- }
44
- set pageNumber(page) {
45
- // the setter has to be declared but we won't use it, instead we will use the "changeToCurrentPage()" to only update the value after ENTER keydown event
46
- }
47
- get totalItems() {
48
- return this.paginationService.totalItems;
49
- }
50
- ngOnDestroy() {
51
- this.dispose();
52
- }
53
- ngOnInit() {
54
- this._gridOptions = this.gridOptions || {};
55
- this._enableTranslate = this._gridOptions && this._gridOptions.enableTranslate || false;
56
- this._locales = this._gridOptions && this._gridOptions.locales || Constants.locales;
57
- if (this._enableTranslate && !this.translate) {
58
- throw new Error('[Angular-Slickgrid] requires "ngx-translate" to be installed and configured when the grid option "enableTranslate" is enabled.');
59
- }
60
- this.translateAllUiTexts(this._locales);
61
- // translate all the text using ngx-translate or custom locales
62
- if (this._enableTranslate && this.translate && this.translate.onLangChange) {
63
- this.subscriptions.push(this.translate.onLangChange.subscribe(() => this.translateAllUiTexts(this._locales)));
64
- }
65
- }
66
- changeToFirstPage(event) {
67
- if (!this.isLeftPaginationDisabled) {
68
- this.paginationService.goToFirstPage(event);
69
- }
70
- }
71
- changeToLastPage(event) {
72
- if (!this.isRightPaginationDisabled) {
73
- this.paginationService.goToLastPage(event);
74
- }
75
- }
76
- changeToNextPage(event) {
77
- if (!this.isRightPaginationDisabled) {
78
- this.paginationService.goToNextPage(event);
79
- }
80
- }
81
- changeToPreviousPage(event) {
82
- if (!this.isLeftPaginationDisabled) {
83
- this.paginationService.goToPreviousPage(event);
84
- }
85
- }
86
- changeToCurrentPage(event) {
87
- let pageNumber = 1;
88
- if (event && event.currentTarget && event.currentTarget.value) {
89
- pageNumber = +(event.currentTarget.value);
90
- }
91
- this.paginationService.goToPageNumber(pageNumber, event);
92
- }
93
- changeItemPerPage(event) {
94
- let itemsPerPage = 1;
95
- if (event && event.currentTarget && event.currentTarget.value) {
96
- itemsPerPage = +(event.currentTarget.value);
97
- }
98
- this.paginationService.changeItemPerPage(itemsPerPage, event);
99
- }
100
- dispose() {
101
- // also unsubscribe all Angular Subscriptions
102
- this.subscriptions = unsubscribeAllObservables(this.subscriptions);
103
- }
104
- // --
105
- // private functions
106
- // --------------------
107
- /** Translate all the texts shown in the UI, use ngx-translate service when available or custom locales when service is null */
108
- translateAllUiTexts(locales) {
109
- if (this._enableTranslate && this.translate && this.translate.instant && this.translate.currentLang) {
110
- const translationPrefix = getTranslationPrefix(this._gridOptions);
111
- this.textItemsPerPage = this.translate.instant(`${translationPrefix}ITEMS_PER_PAGE`);
112
- this.textItems = this.translate.instant(`${translationPrefix}ITEMS`);
113
- this.textOf = this.translate.instant(`${translationPrefix}OF`);
114
- this.textPage = this.translate.instant(`${translationPrefix}PAGE`);
115
- }
116
- else if (locales) {
117
- this.textItemsPerPage = locales.TEXT_ITEMS_PER_PAGE || 'TEXT_ITEMS_PER_PAGE';
118
- this.textItems = locales.TEXT_ITEMS || 'TEXT_ITEMS';
119
- this.textOf = locales.TEXT_OF || 'TEXT_OF';
120
- this.textPage = locales.TEXT_PAGE || 'TEXT_PAGE';
121
- }
122
- }
123
- }
124
- SlickPaginationComponent.decorators = [
125
- { type: Component, args: [{
126
- selector: 'slick-pagination',
127
- template: "<div class=\"slick-pagination\">\r\n <div class=\"slick-pagination-nav\">\r\n <nav aria-label=\"Page navigation\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item\" [ngClass]=\"isLeftPaginationDisabled ? 'disabled' : ''\">\r\n <a class=\"page-link icon-seek-first fa fa-angle-double-left\" aria-label=\"First\"\r\n (click)=\"changeToFirstPage($event)\">\r\n </a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"isLeftPaginationDisabled ? 'disabled' : ''\">\r\n <a class=\"page-link icon-seek-prev fa fa-angle-left\" aria-label=\"Previous\"\r\n (click)=\"changeToPreviousPage($event)\">\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n\r\n <div class=\"slick-page-number\">\r\n <span>{{textPage}}</span>\r\n <input type=\"text\" class=\"form-control\" data-test=\"page-number-input\" [value]=\"pageNumber\" size=\"1\"\r\n [readOnly]=\"totalItems === 0\" (change)=\"changeToCurrentPage($event)\">\r\n <span>{{textOf}}</span><span data-test=\"page-count\"> {{pageCount}}</span>\r\n </div>\r\n\r\n <nav aria-label=\"Page navigation\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item\" [ngClass]=\"isRightPaginationDisabled ? 'disabled' : ''\">\r\n <a class=\"page-link icon-seek-next text-center fa fa-lg fa-angle-right\" aria-label=\"Next\"\r\n (click)=\"changeToNextPage($event)\">\r\n </a>\r\n </li>\r\n <li class=\"page-item\" [ngClass]=\"isRightPaginationDisabled ? 'disabled' : ''\">\r\n <a class=\"page-link icon-seek-end fa fa-lg fa-angle-double-right\" aria-label=\"Last\"\r\n (click)=\"changeToLastPage($event)\">\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </div>\r\n <span class=\"slick-pagination-settings\">\r\n <select id=\"items-per-page-label\" (change)=\"changeItemPerPage($event)\">\r\n <option value=\"{{pageSize}}\" [selected]=\"pageSize === itemsPerPage\" *ngFor=\"let pageSize of availablePageSizes\">{{pageSize}}</option>\r\n </select>\r\n <span>{{textItemsPerPage}}</span>,\r\n <span class=\"slick-pagination-count\">\r\n <span *ngIf=\"totalItems\">\r\n <span class=\"page-info-from-to\">\r\n <span data-test=\"item-from\">{{dataFrom}}</span>-<span data-test=\"item-to\">{{dataTo}}</span>\r\n {{textOf}}\r\n </span>\r\n </span>\r\n <span class=\"page-info-total-items\">\r\n <span data-test=\"total-items\">{{totalItems}}</span> {{textItems}}\r\n </span>\r\n </span>\r\n </span>\r\n</div>\r\n"
128
- },] }
129
- ];
130
- SlickPaginationComponent.ctorParameters = () => [
131
- { type: TranslateService, decorators: [{ type: Optional }] }
132
- ];
133
- SlickPaginationComponent.propDecorators = {
134
- gridOptions: [{ type: Input }],
135
- paginationService: [{ type: Input }]
136
- };
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2stcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYW5ndWxhci1zbGlja2dyaWQvY29tcG9uZW50cy9zbGljay1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBNkIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBTWxFLE1BQU0sT0FBTyx3QkFBd0I7SUFlbkMsa0JBQWtCO0lBQ2xCLFlBQXlDLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBWjVELGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFJakMsbUVBQW1FO1FBQ25FLHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLGFBQVEsR0FBRyxNQUFNLENBQUM7SUFHc0QsQ0FBQztJQUV6RSxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztJQUNuRCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENB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Z0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxpQkFBaUIsT0FBTyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixJQUFJLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsaUJBQWlCLE1BQU0sQ0FBQyxDQUFDO1NBQ3BFO2FBQU0sSUFBSSxPQUFPLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxxQkFBcUIsQ0FBQztZQUM3RSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDO1lBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQztTQUNsRDtJQUNILENBQUM7OztZQW5KRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsc21GQUFnRDthQUNqRDs7O1lBWFEsZ0JBQWdCLHVCQTRCVixRQUFROzs7MEJBZnBCLEtBQUs7Z0NBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IGdldFRyYW5zbGF0aW9uUHJlZml4LCBMb2NhbGUsIFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnQHNsaWNrZ3JpZC11bml2ZXJzYWwvY29tbW9uJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBHcmlkT3B0aW9uLCB9IGZyb20gJy4vLi4vbW9kZWxzL2luZGV4JztcclxuaW1wb3J0IHsgdW5zdWJzY3JpYmVBbGxPYnNlcnZhYmxlcyB9IGZyb20gJy4uL3NlcnZpY2VzL3V0aWxpdGllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NsaWNrLXBhZ2luYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGljay1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpY2tQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGdyaWRPcHRpb25zITogR3JpZE9wdGlvbjtcclxuICBASW5wdXQoKSBwYWdpbmF0aW9uU2VydmljZSE6IFBhZ2luYXRpb25TZXJ2aWNlO1xyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfZW5hYmxlVHJhbnNsYXRlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZ3JpZE9wdGlvbnMhOiBHcmlkT3B0aW9uO1xyXG4gIHByaXZhdGUgX2xvY2FsZXMhOiBMb2NhbGU7XHJcblxyXG4gIC8vIHRleHQgdHJhbnNsYXRpb25zIChoYW5kbGVkIGJ5IG5neC10cmFuc2xhdGUgb3IgYnkgY3VzdG9tIGxvY2FsZSlcclxuICB0ZXh0SXRlbXNQZXJQYWdlID0gJ2l0ZW1zIHBlciBwYWdlJztcclxuICB0ZXh0SXRlbXMgPSAnaXRlbXMnO1xyXG4gIHRleHRPZiA9ICdvZic7XHJcbiAgdGV4dFBhZ2UgPSAnUGFnZSc7XHJcblxyXG4gIC8qKiBDb25zdHJ1Y3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgZ2V0IGF2YWlsYWJsZVBhZ2VTaXplcygpOiBudW1iZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5hdmFpbGFibGVQYWdlU2l6ZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgZGF0YUZyb20oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmRhdGFGcm9tO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGFUbygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZGF0YVRvO1xyXG4gIH1cclxuXHJcbiAgLyoqIGlzIHRoZSBsZWZ0IHNpZGUgcGFnaW5hdGlvbiBkaXNhYmxlZD8gKi9cclxuICBnZXQgaXNMZWZ0UGFnaW5hdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZU51bWJlciA9PT0gMSB8fCB0aGlzLnRvdGFsSXRlbXMgPT09IDA7XHJcbiAgfVxyXG5cclxuICAvKiogaXMgdGhlIHJpZ2h0IHNpZGUgcGFnaW5hdGlvbiBkaXNhYmxlZD8gKi9cclxuICBnZXQgaXNSaWdodFBhZ2luYXRpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2VOdW1iZXIgPT09IHRoaXMucGFnZUNvdW50IHx8IHRoaXMudG90YWxJdGVtcyA9PT0gMDtcclxuICB9XHJcblxyXG4gIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLml0ZW1zUGVyUGFnZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnBhZ2VDb3VudDtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5wYWdlTnVtYmVyO1xyXG4gIH1cclxuICBzZXQgcGFnZU51bWJlcihwYWdlOiBudW1iZXIpIHtcclxuICAgIC8vIHRoZSBzZXR0ZXIgaGFzIHRvIGJlIGRlY2xhcmVkIGJ1dCB3ZSB3b24ndCB1c2UgaXQsIGluc3RlYWQgd2Ugd2lsbCB1c2UgdGhlIFwiY2hhbmdlVG9DdXJyZW50UGFnZSgpXCIgdG8gb25seSB1cGRhdGUgdGhlIHZhbHVlIGFmdGVyIEVOVEVSIGtleWRvd24gZXZlbnRcclxuICB9XHJcblxyXG4gIGdldCB0b3RhbEl0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblNlcnZpY2UudG90YWxJdGVtcztcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuX2dyaWRPcHRpb25zID0gdGhpcy5ncmlkT3B0aW9ucyB8fCB7fTtcclxuICAgIHRoaXMuX2VuYWJsZVRyYW5zbGF0ZSA9IHRoaXMuX2dyaWRPcHRpb25zICYmIHRoaXMuX2dyaWRPcHRpb25zLmVuYWJsZVRyYW5zbGF0ZSB8fCBmYWxzZTtcclxuICAgIHRoaXMuX2xvY2FsZXMgPSB0aGlzLl9ncmlkT3B0aW9ucyAmJiB0aGlzLl9ncmlkT3B0aW9ucy5sb2NhbGVzIHx8IENvbnN0YW50cy5sb2NhbGVzO1xyXG5cclxuICAgIGlmICh0aGlzLl9lbmFibGVUcmFuc2xhdGUgJiYgIXRoaXMudHJhbnNsYXRlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignW0FuZ3VsYXItU2xpY2tncmlkXSByZXF1aXJlcyBcIm5neC10cmFuc2xhdGVcIiB0byBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgd2hlbiB0aGUgZ3JpZCBvcHRpb24gXCJlbmFibGVUcmFuc2xhdGVcIiBpcyBlbmFibGVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNsYXRlQWxsVWlUZXh0cyh0aGlzLl9sb2NhbGVzKTtcclxuXHJcbiAgICAvLyB0cmFuc2xhdGUgYWxsIHRoZSB0ZXh0IHVzaW5nIG5neC10cmFuc2xhdGUgb3IgY3VzdG9tIGxvY2FsZXNcclxuICAgIGlmICh0aGlzLl9lbmFibGVUcmFuc2xhdGUgJiYgdGhpcy50cmFuc2xhdGUgJiYgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50cmFuc2xhdGVBbGxVaVRleHRzKHRoaXMuX2xvY2FsZXMpKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUb0ZpcnN0UGFnZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzTGVmdFBhZ2luYXRpb25EaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdvVG9GaXJzdFBhZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVG9MYXN0UGFnZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzUmlnaHRQYWdpbmF0aW9uRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nb1RvTGFzdFBhZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVG9OZXh0UGFnZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmlzUmlnaHRQYWdpbmF0aW9uRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nb1RvTmV4dFBhZ2UoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlVG9QcmV2aW91c1BhZ2UoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc0xlZnRQYWdpbmF0aW9uRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nb1RvUHJldmlvdXNQYWdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVRvQ3VycmVudFBhZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmN1cnJlbnRUYXJnZXQgJiYgZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSkge1xyXG4gICAgICBwYWdlTnVtYmVyID0gKyhldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ29Ub1BhZ2VOdW1iZXIocGFnZU51bWJlciwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlSXRlbVBlclBhZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IGl0ZW1zUGVyUGFnZSA9IDE7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQuY3VycmVudFRhcmdldCAmJiBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgIGl0ZW1zUGVyUGFnZSA9ICsoZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNoYW5nZUl0ZW1QZXJQYWdlKGl0ZW1zUGVyUGFnZSwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIC8vIGFsc28gdW5zdWJzY3JpYmUgYWxsIEFuZ3VsYXIgU3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gdW5zdWJzY3JpYmVBbGxPYnNlcnZhYmxlcyh0aGlzLnN1YnNjcmlwdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8gLS1cclxuICAvLyBwcml2YXRlIGZ1bmN0aW9uc1xyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8qKiBUcmFuc2xhdGUgYWxsIHRoZSB0ZXh0cyBzaG93biBpbiB0aGUgVUksIHVzZSBuZ3gtdHJhbnNsYXRlIHNlcnZpY2Ugd2hlbiBhdmFpbGFibGUgb3IgY3VzdG9tIGxvY2FsZXMgd2hlbiBzZXJ2aWNlIGlzIG51bGwgKi9cclxuICBwcml2YXRlIHRyYW5zbGF0ZUFsbFVpVGV4dHMobG9jYWxlczogTG9jYWxlKSB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlVHJhbnNsYXRlICYmIHRoaXMudHJhbnNsYXRlICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQgJiYgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpIHtcclxuICAgICAgY29uc3QgdHJhbnNsYXRpb25QcmVmaXggPSBnZXRUcmFuc2xhdGlvblByZWZpeCh0aGlzLl9ncmlkT3B0aW9ucyk7XHJcbiAgICAgIHRoaXMudGV4dEl0ZW1zUGVyUGFnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoYCR7dHJhbnNsYXRpb25QcmVmaXh9SVRFTVNfUEVSX1BBR0VgKTtcclxuICAgICAgdGhpcy50ZXh0SXRlbXMgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGAke3RyYW5zbGF0aW9uUHJlZml4fUlURU1TYCk7XHJcbiAgICAgIHRoaXMudGV4dE9mID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0cmFuc2xhdGlvblByZWZpeH1PRmApO1xyXG4gICAgICB0aGlzLnRleHRQYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgJHt0cmFuc2xhdGlvblByZWZpeH1QQUdFYCk7XHJcbiAgICB9IGVsc2UgaWYgKGxvY2FsZXMpIHtcclxuICAgICAgdGhpcy50ZXh0SXRlbXNQZXJQYWdlID0gbG9jYWxlcy5URVhUX0lURU1TX1BFUl9QQUdFIHx8ICdURVhUX0lURU1TX1BFUl9QQUdFJztcclxuICAgICAgdGhpcy50ZXh0SXRlbXMgPSBsb2NhbGVzLlRFWFRfSVRFTVMgfHwgJ1RFWFRfSVRFTVMnO1xyXG4gICAgICB0aGlzLnRleHRPZiA9IGxvY2FsZXMuVEVYVF9PRiB8fCAnVEVYVF9PRic7XHJcbiAgICAgIHRoaXMudGV4dFBhZ2UgPSBsb2NhbGVzLlRFWFRfUEFHRSB8fCAnVEVYVF9QQUdFJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19