UNPKG

@stratio/egeo

Version:
387 lines 26.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/st-table/st-table.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; /* * © 2017 Stratio Big Data Inc., Sucursal en España. * * This software is licensed under the Apache License, Version 2.0. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the terms of the License for more details. * * SPDX-License-Identifier: Apache-2.0. */ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; import { StEgeo, StRequired } from '../decorators/require-decorators'; import { Order, ORDER_TYPE } from './shared/order'; /** * \@description {Component} [Table] * * The table component has been designed to display any content like images, text, graphs, etc. * * \@example * * {html} * * ``` * <st-table [fields]="fields" [sortable]="true" (changeOrder)="yourFunctionToOrder($event)"> * <tr st-table-row *ngFor="let userData of data"> * <td st-table-cell st-table-row-content> * <label >{{userData.id}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.name}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.lastName}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.phone}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.company}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.completedProfile}}</label> * </td> * <td st-table-row-hover> * <i class="icon icon-arrow2_right"></i> * </td> * </tr> * </st-table> * ``` * */ var StTableComponent = /** @class */ (function () { function StTableComponent() { /** * \@Input {boolean} [header=true] Boolean to show or hide the header */ this.header = true; /** * \@Input {boolean} [sortable=true] Boolean to make sortable the table, To enable sorting of columns use * the new "sortable" field inside stTableHeader model */ this.sortable = true; /** * \@Input {boolean} [selectableAll=false] Boolean to show or hide a checkbox in the header to select or * deselect all rows */ this.selectableAll = false; /** * \@Input {boolean} [fixedHeader=false] Boolean to fix the table header */ this.fixedHeader = false; /** * \@Output {Order} [changeOrder=''] Event emitted with the new order which has to be applied to the table rows */ this.changeOrder = new EventEmitter(); /** * \@Output {boolean} [selectAll=''] Event emitted when user interacts with the checkbox to select or deselect * all rows */ this.selectAll = new EventEmitter(); this.orderTypes = ORDER_TYPE; this._hasHoverMenu = false; } Object.defineProperty(StTableComponent.prototype, "selectedAll", { /** @Input {boolean} [selectedAll=false] It specifies if all rows are selected */ get: /** * \@Input {boolean} [selectedAll=false] It specifies if all rows are selected * @return {?} */ function () { return this._selectedAll; }, set: /** * @param {?} newValue * @return {?} */ function (newValue) { this._selectedAll = newValue; }, enumerable: true, configurable: true }); Object.defineProperty(StTableComponent.prototype, "hasHoverMenu", { /** @Input {boolean} [hasHoverMenu=false] It specifies if a menu has to be displayed when user puts the mouse over * the rows. Remember to add a cell with the selector st-table-row-hover for adding content to the menu */ get: /** * \@Input {boolean} [hasHoverMenu=false] It specifies if a menu has to be displayed when user puts the mouse over * the rows. Remember to add a cell with the selector st-table-row-hover for adding content to the menu * @return {?} */ function () { return this._hasHoverMenu; }, set: /** * @param {?} newValue * @return {?} */ function (newValue) { this._hasHoverMenu = newValue; }, enumerable: true, configurable: true }); /** * @return {?} */ StTableComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.tableClass = this.getClasses(); }; /** * @param {?} field * @return {?} */ StTableComponent.prototype.onChangeOrder = /** * @param {?} field * @return {?} */ function (field) { if (field && this.isSortable(field)) { if (this.currentOrder && this.currentOrder.orderBy === field.id) { this.changeOrderDirection(); } else { this.currentOrder = new Order(field.id, ORDER_TYPE.ASC); } this.changeOrder.emit(this.currentOrder); } }; /** * @return {?} */ StTableComponent.prototype.getClasses = /** * @return {?} */ function () { /** @type {?} */ var classes = {}; if (this.fixedHeader) { classes['st-table--fixed-header'] = true; } classes[this.customClasses] = this.customClasses; return classes; }; /** * @param {?} field * @return {?} */ StTableComponent.prototype.isSortable = /** * @param {?} field * @return {?} */ function (field) { return field && field.sortable !== undefined ? field.sortable : this.sortable; }; /** * @param {?} event * @return {?} */ StTableComponent.prototype.onSelectAll = /** * @param {?} event * @return {?} */ function (event) { this.selectAll.emit(event.checked); }; /** * @param {?} field * @return {?} */ StTableComponent.prototype.getHeaderItemClass = /** * @param {?} field * @return {?} */ function (field) { /** @type {?} */ var isOrderAsc = this.isSortedByFieldAndDirection(field, this.orderTypes.ASC); return isOrderAsc ? 'icon-arrow-up' : 'icon-arrow-down'; }; /** * @param {?} field * @return {?} */ StTableComponent.prototype.isSortedByField = /** * @param {?} field * @return {?} */ function (field) { return this.currentOrder && this.currentOrder.orderBy === field.id; }; /** * @private * @param {?} field * @param {?} orderType * @return {?} */ StTableComponent.prototype.isSortedByFieldAndDirection = /** * @private * @param {?} field * @param {?} orderType * @return {?} */ function (field, orderType) { return this.isSortedByField(field) && this.currentOrder.type === orderType; }; /** * @private * @return {?} */ StTableComponent.prototype.changeOrderDirection = /** * @private * @return {?} */ function () { /** @type {?} */ var newDirection = this.currentOrder.type === ORDER_TYPE.ASC ? ORDER_TYPE.DESC : ORDER_TYPE.ASC; this.currentOrder = new Order(this.currentOrder.orderBy, newDirection); }; StTableComponent.decorators = [ { type: Component, args: [{ selector: 'st-table', template: "<!--\n\n \u00A9 2017 Stratio Big Data Inc., Sucursal en Espa\u00F1a.\n\n This software is licensed under the Apache License, Version 2.0.\n This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n See the terms of the License for more details.\n\n SPDX-License-Identifier: Apache-2.0.\n\n-->\n<table class='st-table' [ngClass]=\"tableClass\" [attr.id]='qaTag'>\n <thead>\n <tr *ngIf=\"header\" class='st-table__header'>\n\n <th *ngFor='let field of fields; let i = index'\n class='st-table__header-item'\n [ngClass]=\"{'st-table__header-item--selected': isSortedByField(field), 'st-table__header-item--sortable': isSortable(field)}\"\n >\n <st-checkbox *ngIf=\"i == 0 && selectableAll\" qaTag=\"select-all-checkbox\" class=\"st-table__checkbox\"\n name=\"selectAll\" [checked]=\"selectedAll\" (change)=\"onSelectAll($event)\">\n </st-checkbox>\n <label class='st-table__header-text' (click)=\"onChangeOrder(field)\">\n <i *ngIf=\"isSortedByField(field)\" class='st-table__order-arrow'\n [ngClass]=\"getHeaderItemClass(field)\">\n </i>\n {{field.label}}\n </label>\n </th>\n\n <th *ngIf=\"hasHoverMenu\"></th> <!-- For hover cell -->\n </tr>\n </thead>\n <ng-content></ng-content>\n</table>\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@charset \"UTF-8\";.st-table{width:100%}.st-table__header-item{text-transform:capitalize;position:relative;vertical-align:bottom}.st-table__header-text{position:relative;height:100%;display:inline-flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:flex-start;cursor:inherit}.st-table--fixed-header{display:flex;flex-flow:column}.st-table--fixed-header thead{display:block}.st-table--fixed-header thead>tr{display:flex}.st-table--fixed-header thead>tr>th{flex:1;display:inline-flex}"] }] } ]; StTableComponent.propDecorators = { fields: [{ type: Input }], qaTag: [{ type: Input }], header: [{ type: Input }], sortable: [{ type: Input }], selectableAll: [{ type: Input }], currentOrder: [{ type: Input }], customClasses: [{ type: Input }], fixedHeader: [{ type: Input }], selectedAll: [{ type: Input }], hasHoverMenu: [{ type: Input }], changeOrder: [{ type: Output }], selectAll: [{ type: Output }] }; tslib_1.__decorate([ StRequired(), tslib_1.__metadata("design:type", Array) ], StTableComponent.prototype, "fields", void 0); /** * \@description {Component} [Table] * * The table component has been designed to display any content like images, text, graphs, etc. * * \@example * * {html} * * ``` * <st-table [fields]="fields" [sortable]="true" (changeOrder)="yourFunctionToOrder($event)"> * <tr st-table-row *ngFor="let userData of data"> * <td st-table-cell st-table-row-content> * <label >{{userData.id}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.name}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.lastName}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.phone}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.company}}</label> * </td> * <td st-table-cell st-table-row-content> * <label >{{userData.completedProfile}}</label> * </td> * <td st-table-row-hover> * <i class="icon icon-arrow2_right"></i> * </td> * </tr> * </st-table> * ``` * */ StTableComponent = tslib_1.__decorate([ StEgeo() ], StTableComponent); return StTableComponent; }()); export { StTableComponent }; if (false) { /** * \@Input {StTableHeader[]} [fields=''] List of field displayed in the header * @type {?} */ StTableComponent.prototype.fields; /** * \@Input {string} [qaTag=''] Prefix used to generate the id values for qa tests * @type {?} */ StTableComponent.prototype.qaTag; /** * \@Input {boolean} [header=true] Boolean to show or hide the header * @type {?} */ StTableComponent.prototype.header; /** * \@Input {boolean} [sortable=true] Boolean to make sortable the table, To enable sorting of columns use * the new "sortable" field inside stTableHeader model * @type {?} */ StTableComponent.prototype.sortable; /** * \@Input {boolean} [selectableAll=false] Boolean to show or hide a checkbox in the header to select or * deselect all rows * @type {?} */ StTableComponent.prototype.selectableAll; /** * \@Input {Order} [currentOrder=''] It specifies what is the current order applied to the table * @type {?} */ StTableComponent.prototype.currentOrder; /** * \@Input {string} [customClasses=] Classes for adding styles to table tag from outside. These can be: separated-rows * @type {?} */ StTableComponent.prototype.customClasses; /** * \@Input {boolean} [fixedHeader=false] Boolean to fix the table header * @type {?} */ StTableComponent.prototype.fixedHeader; /** * \@Output {Order} [changeOrder=''] Event emitted with the new order which has to be applied to the table rows * @type {?} */ StTableComponent.prototype.changeOrder; /** * \@Output {boolean} [selectAll=''] Event emitted when user interacts with the checkbox to select or deselect * all rows * @type {?} */ StTableComponent.prototype.selectAll; /** @type {?} */ StTableComponent.prototype.tableClass; /** @type {?} */ StTableComponent.prototype.orderTypes; /** * @type {?} * @private */ StTableComponent.prototype._selectedAll; /** * @type {?} * @private */ StTableComponent.prototype._hasHoverMenu; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHN0cmF0aW8vZWdlby8iLCJzb3VyY2VzIjpbImxpYi9zdC10YWJsZS9zdC10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBeUNuRDs7OztRQWNZLFdBQU0sR0FBWSxJQUFJLENBQUM7Ozs7O1FBTXZCLGFBQVEsR0FBWSxJQUFJLENBQUM7Ozs7O1FBS3pCLGtCQUFhLEdBQVksS0FBSyxDQUFDOzs7O1FBUS9CLGdCQUFXLEdBQVksS0FBSyxDQUFDOzs7O1FBd0I1QixnQkFBVyxHQUF3QixJQUFJLFlBQVksRUFBRSxDQUFDOzs7OztRQUl0RCxjQUFTLEdBQTBCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHekQsZUFBVSxHQUFRLFVBQVUsQ0FBQztRQUc1QixrQkFBYSxHQUFZLEtBQUssQ0FBQztJQXFEMUMsQ0FBQztJQXBGRSxzQkFDSSx5Q0FBVztRQUZmLGlGQUFpRjs7Ozs7UUFDakY7WUFFRyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDNUIsQ0FBQzs7Ozs7UUFFRCxVQUFnQixRQUFpQjtZQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUNoQyxDQUFDOzs7T0FKQTtJQVNELHNCQUNJLDBDQUFZO1FBSmhCOztXQUVHOzs7Ozs7UUFDSDtZQUVHLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM3QixD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ZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2lCQUNqRDs7O3lCQUlHLEtBQUs7d0JBRUwsS0FBSzt5QkFFTCxLQUFLOzJCQU1MLEtBQUs7Z0NBS0wsS0FBSzsrQkFFTCxLQUFLO2dDQUdMLEtBQUs7OEJBR0wsS0FBSzs4QkFHTCxLQUFLOytCQVlMLEtBQUs7OEJBU0wsTUFBTTs0QkFJTixNQUFNOztJQW5EZ0I7UUFBYixVQUFVLEVBQUU7O29EQUF5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRnJDLGdCQUFnQjtRQVI1QixNQUFNLEVBQUU7T0FRSSxnQkFBZ0IsQ0FnSDVCO0lBQUQsdUJBQUM7Q0FBQSxJQUFBO1NBaEhZLGdCQUFnQjs7Ozs7O0lBRTFCLGtDQUErQzs7Ozs7SUFFL0MsaUNBQXVCOzs7OztJQUV2QixrQ0FBZ0M7Ozs7OztJQU1oQyxvQ0FBa0M7Ozs7OztJQUtsQyx5Q0FBd0M7Ozs7O0lBRXhDLHdDQUE2Qjs7Ozs7SUFHN0IseUNBQStCOzs7OztJQUcvQix1Q0FBc0M7Ozs7O0lBd0J0Qyx1Q0FBZ0U7Ozs7OztJQUloRSxxQ0FBZ0U7O0lBRWhFLHNDQUF1Qjs7SUFDdkIsc0NBQW9DOzs7OztJQUVwQyx3Q0FBOEI7Ozs7O0lBQzlCLHlDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiDCqSAyMDE3IFN0cmF0aW8gQmlnIERhdGEgSW5jLiwgU3VjdXJzYWwgZW4gRXNwYcOxYS5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZO1xuICogd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiAqIFNlZSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMC5cbiAqL1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3RFZ2VvLCBTdFJlcXVpcmVkIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9yZXF1aXJlLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgT3JkZXIsIE9SREVSX1RZUEUgfSBmcm9tICcuL3NoYXJlZC9vcmRlcic7XG5pbXBvcnQgeyBTdFRhYmxlSGVhZGVyIH0gZnJvbSAnLi9zaGFyZWQvdGFibGUtaGVhZGVyLmludGVyZmFjZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIHtDb21wb25lbnR9IFtUYWJsZV1cbiAqXG4gKiBUaGUgdGFibGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc2lnbmVkIHRvIGRpc3BsYXkgYW55IGNvbnRlbnQgbGlrZSBpbWFnZXMsIHRleHQsIGdyYXBocywgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICoge2h0bWx9XG4gKlxuICogYGBgXG4gKiA8c3QtdGFibGUgW2ZpZWxkc109XCJmaWVsZHNcIiBbc29ydGFibGVdPVwidHJ1ZVwiIChjaGFuZ2VPcmRlcik9XCJ5b3VyRnVuY3Rpb25Ub09yZGVyKCRldmVudClcIj5cbiAqIDx0ciBzdC10YWJsZS1yb3cgKm5nRm9yPVwibGV0IHVzZXJEYXRhIG9mIGRhdGFcIj5cbiAqIDx0ZCBzdC10YWJsZS1jZWxsIHN0LXRhYmxlLXJvdy1jb250ZW50PlxuICogICAgPGxhYmVsID57e3VzZXJEYXRhLmlkfX08L2xhYmVsPlxuICogPC90ZD5cbiAqIDx0ZCBzdC10YWJsZS1jZWxsIHN0LXRhYmxlLXJvdy1jb250ZW50PlxuICogICAgPGxhYmVsID57e3VzZXJEYXRhLm5hbWV9fTwvbGFiZWw+XG4gKiA8L3RkPlxuICogPHRkIHN0LXRhYmxlLWNlbGwgc3QtdGFibGUtcm93LWNvbnRlbnQ+XG4gKiAgICA8bGFiZWwgPnt7dXNlckRhdGEubGFzdE5hbWV9fTwvbGFiZWw+XG4gKiA8L3RkPlxuICogPHRkIHN0LXRhYmxlLWNlbGwgc3QtdGFibGUtcm93LWNvbnRlbnQ+XG4gKiAgICA8bGFiZWwgPnt7dXNlckRhdGEucGhvbmV9fTwvbGFiZWw+XG4gKiA8L3RkPlxuICogPHRkIHN0LXRhYmxlLWNlbGwgc3QtdGFibGUtcm93LWNvbnRlbnQ+XG4gKiAgICA8bGFiZWwgPnt7dXNlckRhdGEuY29tcGFueX19PC9sYWJlbD5cbiAqIDwvdGQ+XG4gKiA8dGQgc3QtdGFibGUtY2VsbCBzdC10YWJsZS1yb3ctY29udGVudD5cbiAqICAgIDxsYWJlbCA+e3t1c2VyRGF0YS5jb21wbGV0ZWRQcm9maWxlfX08L2xhYmVsPlxuICogPC90ZD5cbiAqIDx0ZCBzdC10YWJsZS1yb3ctaG92ZXI+XG4gKiAgICA8aSBjbGFzcz1cImljb24gaWNvbi1hcnJvdzJfcmlnaHRcIj48L2k+XG4gKiA8L3RkPlxuICogPC90cj5cbiAqIDwvc3QtdGFibGU+XG4gKiBgYGBcbiAqXG4gKi9cbkBTdEVnZW8oKVxuQENvbXBvbmVudCh7XG4gICBzZWxlY3RvcjogJ3N0LXRhYmxlJyxcbiAgIHRlbXBsYXRlVXJsOiAnLi9zdC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICBzdHlsZVVybHM6IFsnLi9zdC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5cbmV4cG9ydCBjbGFzcyBTdFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgIC8qKiBASW5wdXQge1N0VGFibGVIZWFkZXJbXX0gW2ZpZWxkcz0nJ10gTGlzdCBvZiBmaWVsZCBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlciAqL1xuICAgQElucHV0KCkgQFN0UmVxdWlyZWQoKSBmaWVsZHM6IFN0VGFibGVIZWFkZXJbXTtcbiAgIC8qKiBASW5wdXQge3N0cmluZ30gW3FhVGFnPScnXSBQcmVmaXggdXNlZCB0byBnZW5lcmF0ZSB0aGUgaWQgdmFsdWVzIGZvciBxYSB0ZXN0cyAqL1xuICAgQElucHV0KCkgcWFUYWc6IHN0cmluZztcbiAgIC8qKiBASW5wdXQge2Jvb2xlYW59IFtoZWFkZXI9dHJ1ZV0gQm9vbGVhbiB0byBzaG93IG9yIGhpZGUgdGhlIGhlYWRlciAqL1xuICAgQElucHV0KCkgaGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgLyoqXG4gICAgKiBASW5wdXQge2Jvb2xlYW59IFtzb3J0YWJsZT10cnVlXSBCb29sZWFuIHRvIG1ha2Ugc29ydGFibGUgdGhlIHRhYmxlLCBUbyBlbmFibGUgc29ydGluZyBvZiBjb2x1bW5zIHVzZVxuICAgICogdGhlIG5ldyBcInNvcnRhYmxlXCIgZmllbGQgaW5zaWRlIHN0VGFibGVIZWFkZXIgbW9kZWxcbiAgICAqL1xuICAgQElucHV0KCkgc29ydGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgLyoqXG4gICAgKiBASW5wdXQge2Jvb2xlYW59IFtzZWxlY3RhYmxlQWxsPWZhbHNlXSBCb29sZWFuIHRvIHNob3cgb3IgaGlkZSBhIGNoZWNrYm94IGluIHRoZSBoZWFkZXIgdG8gc2VsZWN0IG9yXG4gICAgKiAgZGVzZWxlY3QgYWxsIHJvd3NcbiAgICAqL1xuICAgQElucHV0KCkgc2VsZWN0YWJsZUFsbDogYm9vbGVhbiA9IGZhbHNlO1xuICAgLyoqIEBJbnB1dCB7T3JkZXJ9IFtjdXJyZW50T3JkZXI9JyddIEl0IHNwZWNpZmllcyB3aGF0IGlzIHRoZSBjdXJyZW50IG9yZGVyIGFwcGxpZWQgdG8gdGhlIHRhYmxlICovXG4gICBASW5wdXQoKSBjdXJyZW50T3JkZXI6IE9yZGVyO1xuXG4gICAvKiogQElucHV0IHtzdHJpbmd9IFtjdXN0b21DbGFzc2VzPV0gQ2xhc3NlcyBmb3IgYWRkaW5nIHN0eWxlcyB0byB0YWJsZSB0YWcgZnJvbSBvdXRzaWRlLiBUaGVzZSBjYW4gYmU6IHNlcGFyYXRlZC1yb3dzICovXG4gICBASW5wdXQoKSBjdXN0b21DbGFzc2VzOiBzdHJpbmc7XG5cbiAgIC8qKiBASW5wdXQge2Jvb2xlYW59IFtmaXhlZEhlYWRlcj1mYWxzZV0gQm9vbGVhbiB0byBmaXggdGhlIHRhYmxlIGhlYWRlciAqL1xuICAgQElucHV0KCkgZml4ZWRIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgLyoqIEBJbnB1dCB7Ym9vbGVhbn0gW3NlbGVjdGVkQWxsPWZhbHNlXSBJdCBzcGVjaWZpZXMgaWYgYWxsIHJvd3MgYXJlIHNlbGVjdGVkICovXG4gICBASW5wdXQoKVxuICAgZ2V0IHNlbGVjdGVkQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQWxsO1xuICAgfVxuXG4gICBzZXQgc2VsZWN0ZWRBbGwobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkQWxsID0gbmV3VmFsdWU7XG4gICB9XG5cbiAgIC8qKiBASW5wdXQge2Jvb2xlYW59IFtoYXNIb3Zlck1lbnU9ZmFsc2VdIEl0IHNwZWNpZmllcyBpZiBhIG1lbnUgaGFzIHRvIGJlIGRpc3BsYXllZCB3aGVuIHVzZXIgcHV0cyB0aGUgbW91c2Ugb3ZlclxuICAgICogdGhlIHJvd3MuIFJlbWVtYmVyIHRvIGFkZCBhIGNlbGwgd2l0aCB0aGUgc2VsZWN0b3Igc3QtdGFibGUtcm93LWhvdmVyIGZvciBhZGRpbmcgY29udGVudCB0byB0aGUgbWVudVxuICAgICovXG4gICBASW5wdXQoKVxuICAgZ2V0IGhhc0hvdmVyTWVudSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYXNIb3Zlck1lbnU7XG4gICB9XG5cbiAgIHNldCBoYXNIb3Zlck1lbnUobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuX2hhc0hvdmVyTWVudSA9IG5ld1ZhbHVlO1xuICAgfVxuICAgLyoqIEBPdXRwdXQge09yZGVyfSBbY2hhbmdlT3JkZXI9JyddIEV2ZW50IGVtaXR0ZWQgd2l0aCB0aGUgbmV3IG9yZGVyIHdoaWNoIGhhcyB0byBiZSBhcHBsaWVkIHRvIHRoZSB0YWJsZSByb3dzICovXG4gICBAT3V0cHV0KCkgY2hhbmdlT3JkZXI6IEV2ZW50RW1pdHRlcjxPcmRlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAvKiogQE91dHB1dCB7Ym9vbGVhbn0gW3NlbGVjdEFsbD0nJ10gRXZlbnQgZW1pdHRlZCAgd2hlbiB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBjaGVja2JveCB0byBzZWxlY3Qgb3IgZGVzZWxlY3RcbiAgICAqIGFsbCByb3dzXG4gICAgKi9cbiAgIEBPdXRwdXQoKSBzZWxlY3RBbGw6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgcHVibGljIHRhYmxlQ2xhc3M6IGFueTtcbiAgIHB1YmxpYyBvcmRlclR5cGVzOiBhbnkgPSBPUkRFUl9UWVBFO1xuXG4gICBwcml2YXRlIF9zZWxlY3RlZEFsbDogYm9vbGVhbjtcbiAgIHByaXZhdGUgX2hhc0hvdmVyTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgdGhpcy50YWJsZUNsYXNzID0gdGhpcy5nZXRDbGFzc2VzKCk7XG4gICB9XG5cbiAgIHB1YmxpYyBvbkNoYW5nZU9yZGVyKGZpZWxkOiBTdFRhYmxlSGVhZGVyKTogdm9pZCB7XG4gICAgICBpZiAoZmllbGQgJiYgdGhpcy5pc1NvcnRhYmxlKGZpZWxkKSkge1xuICAgICAgICAgaWYgKHRoaXMuY3VycmVudE9yZGVyICYmIHRoaXMuY3VycmVudE9yZGVyLm9yZGVyQnkgPT09IGZpZWxkLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZU9yZGVyRGlyZWN0aW9uKCk7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50T3JkZXIgPSBuZXcgT3JkZXIoZmllbGQuaWQsIE9SREVSX1RZUEUuQVNDKTtcbiAgICAgICAgIH1cbiAgICAgICAgIHRoaXMuY2hhbmdlT3JkZXIuZW1pdCh0aGlzLmN1cnJlbnRPcmRlcik7XG4gICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBnZXRDbGFzc2VzKCk6IGFueSB7XG4gICAgICBsZXQgY2xhc3NlczogYW55ID0ge307XG4gICAgICBpZiAoIHRoaXMuZml4ZWRIZWFkZXIpIHtcbiAgICAgICAgIGNsYXNzZXNbJ3N0LXRhYmxlLS1maXhlZC1oZWFkZXInXSA9IHRydWU7XG4gICAgICB9XG4gICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3Nlc10gPSB0aGlzLmN1c3RvbUNsYXNzZXM7XG5cbiAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgfVxuXG4gICBwdWJsaWMgaXNTb3J0YWJsZShmaWVsZDogU3RUYWJsZUhlYWRlcik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGZpZWxkICYmIGZpZWxkLnNvcnRhYmxlICE9PSB1bmRlZmluZWQgPyBmaWVsZC5zb3J0YWJsZSA6IHRoaXMuc29ydGFibGU7XG4gICB9XG5cbiAgIHB1YmxpYyBvblNlbGVjdEFsbChldmVudDogYW55KTogdm9pZCB7XG4gICAgICB0aGlzLnNlbGVjdEFsbC5lbWl0KGV2ZW50LmNoZWNrZWQpO1xuICAgfVxuXG4gICBwdWJsaWMgZ2V0SGVhZGVySXRlbUNsYXNzKGZpZWxkOiBTdFRhYmxlSGVhZGVyKTogc3RyaW5nIHtcbiAgICAgIGxldCBpc09yZGVyQXNjID0gdGhpcy5pc1NvcnRlZEJ5RmllbGRBbmREaXJlY3Rpb24oZmllbGQsIHRoaXMub3JkZXJUeXBlcy5BU0MpO1xuICAgICAgcmV0dXJuIGlzT3JkZXJBc2MgPyAnaWNvbi1hcnJvdy11cCcgOiAnaWNvbi1hcnJvdy1kb3duJztcbiAgIH1cblxuICAgcHVibGljIGlzU29ydGVkQnlGaWVsZChmaWVsZDogU3RUYWJsZUhlYWRlcik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE9yZGVyICYmIHRoaXMuY3VycmVudE9yZGVyLm9yZGVyQnkgPT09IGZpZWxkLmlkO1xuICAgfVxuXG4gICBwcml2YXRlIGlzU29ydGVkQnlGaWVsZEFuZERpcmVjdGlvbihmaWVsZDogU3RUYWJsZUhlYWRlciwgb3JkZXJUeXBlOiBPUkRFUl9UWVBFKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1NvcnRlZEJ5RmllbGQoZmllbGQpICYmIHRoaXMuY3VycmVudE9yZGVyLnR5cGUgPT09IG9yZGVyVHlwZTtcbiAgIH1cblxuICAgcHJpdmF0ZSBjaGFuZ2VPcmRlckRpcmVjdGlvbigpOiB2b2lkIHtcbiAgICAgIGxldCBuZXdEaXJlY3Rpb24gPSB0aGlzLmN1cnJlbnRPcmRlci50eXBlID09PSBPUkRFUl9UWVBFLkFTQyA/IE9SREVSX1RZUEUuREVTQyA6IE9SREVSX1RZUEUuQVNDO1xuICAgICAgdGhpcy5jdXJyZW50T3JkZXIgPSBuZXcgT3JkZXIodGhpcy5jdXJyZW50T3JkZXIub3JkZXJCeSwgbmV3RGlyZWN0aW9uKTtcbiAgIH1cbn1cbiJdfQ==