@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
270 lines • 22.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: directives/batch-draggable.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, Input, Self, Output, EventEmitter } from '@angular/core';
import { DragDropService } from '../services/drag-drop.service';
import { DraggableDirective } from './draggable.directive';
export class BatchDraggableDirective {
/**
* @param {?} draggable
* @param {?} dragDropService
*/
constructor(draggable, dragDropService) {
this.draggable = draggable;
this.dragDropService = dragDropService;
this.batchDragGroup = 'default';
this.batchDragActive = false;
this.batchDragLastOneAutoActiveEventKeys = ['ctrlKey'];
this.batchDragActiveEvent = new EventEmitter();
this.needToRestore = false;
this.batchDragStyle = ['badge', 'stack'];
this.draggable.batchDraggable = this;
}
/**
* @return {?}
*/
ngOnInit() {
this.initDragDataByIdentity();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.draggable.batchDraggable = undefined;
if (this.dragData) {
if (this.dragData.draggable === this.draggable) {
this.dragData.draggable = undefined;
if (!this.dragData.identity) {
this.removeFromBatchGroup();
}
}
}
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes['batchDragActive']) {
if (!this.initDragDataByIdentity()) {
if (this.batchDragActive) {
if (!this.dragData && this.allowAddToBatchGroup()) {
this.addToBatchGroup();
}
}
else {
this.removeFromBatchGroup();
}
}
}
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this.needToRestore) {
this.restoreDragDataViewAfterViewInit();
this.needToRestore = false;
}
}
/**
* @return {?}
*/
initDragDataByIdentity() {
/** @type {?} */
const dragData = this.findInBatchDragDataByIdentities();
if (dragData) {
if (this.batchDragActive) {
if (!this.dragData) {
this.addToBatchGroup(dragData);
this.registerRestoreDragDataViewAfterViewInitWhiteDragging();
}
}
else {
this.removeFromBatchGroup(dragData);
}
}
return dragData;
}
/**
* @return {?}
*/
registerRestoreDragDataViewAfterViewInitWhiteDragging() {
if (this.dragDropService.draggedEl && this.dragDropService.draggedElIdentity &&
this.dragDropService.draggedEl !== this.draggable.el.nativeElement) {
this.needToRestore = true;
}
}
/**
* @return {?}
*/
restoreDragDataViewAfterViewInit() {
/** @type {?} */
const draggable = this.draggable;
if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) {
draggable.insertOriginPlaceholder(true, false);
}
draggable.el.nativeElement.style.display = 'none';
}
/**
* @return {?}
*/
allowAddToBatchGroup() {
if (!this.dragDropService.batchDragGroup) {
return true;
}
else {
return this.batchDragGroup === this.dragDropService.batchDragGroup;
}
}
/**
* @param {?=} dragData
* @return {?}
*/
addToBatchGroup(dragData) {
this.dragDropService.batchDragGroup = this.dragDropService.batchDragGroup || this.batchDragGroup;
if (dragData) {
dragData.draggable = this.draggable;
dragData.dragData = this.draggable.dragData;
this.dragData = dragData;
}
else {
this.dragData = this.dragData || {
identity: this.draggable.dragIdentity || undefined,
draggable: this.draggable,
dragData: this.draggable.dragData
};
this.dragDropService.batchDragData = this.addToArrayIfNotExist(this.dragDropService.batchDragData, this.dragData);
}
}
/**
* @param {?=} dragData
* @return {?}
*/
removeFromBatchGroup(dragData) {
this.deleteFromArrayIfExist(this.dragDropService.batchDragData, dragData || this.dragData);
this.dragData = undefined;
if (!(this.dragDropService.batchDragData && this.dragDropService.batchDragData.length)) {
this.dragDropService.batchDragGroup = undefined;
}
}
/**
* @private
* @param {?} array
* @param {?} target
* @return {?}
*/
addToArrayIfNotExist(array, target) {
array = array || [];
if (array.indexOf(target) === -1) {
array.push(target);
}
return array;
}
/**
* @private
* @param {?} array
* @param {?} target
* @return {?}
*/
deleteFromArrayIfExist(array, target) {
if (!array) {
return;
}
if (array.length > 0) {
/** @type {?} */
const index = array.indexOf(target);
if (index > -1) {
array.splice(index, 1);
}
}
return array;
}
/**
* @private
* @return {?}
*/
findInBatchDragDataByIdentities() {
if (!this.draggable.dragIdentity) {
return null;
}
else if (!this.dragDropService.batchDragData) {
return undefined;
}
else {
return this.dragDropService.batchDragData.filter((/**
* @param {?} dragData
* @return {?}
*/
dragData => dragData.identity === this.draggable.dragIdentity)).pop();
}
}
/**
* @return {?}
*/
active() {
this.batchDragActiveEvent.emit({ el: this.draggable.el.nativeElement, data: this.draggable.dragData });
}
/**
* @return {?}
*/
updateDragData() {
// 选中状态才更新
if (!this.dragData) {
return;
}
// 需要维持内存地址不变
Object.assign(this.dragData, {
identity: this.draggable.dragIdentity || undefined,
draggable: this.draggable,
dragData: this.draggable.dragData
});
}
}
BatchDraggableDirective.decorators = [
{ type: Directive, args: [{
selector: '[dDraggable][batchDrag]',
exportAs: 'dBatchDraggable'
},] }
];
/** @nocollapse */
BatchDraggableDirective.ctorParameters = () => [
{ type: DraggableDirective, decorators: [{ type: Self }] },
{ type: DragDropService }
];
BatchDraggableDirective.propDecorators = {
batchDragGroup: [{ type: Input }],
batchDragActive: [{ type: Input }],
batchDragLastOneAutoActiveEventKeys: [{ type: Input }],
batchDragActiveEvent: [{ type: Output }],
batchDragStyle: [{ type: Input }]
};
if (false) {
/** @type {?} */
BatchDraggableDirective.prototype.batchDragGroup;
/** @type {?} */
BatchDraggableDirective.prototype.batchDragActive;
/** @type {?} */
BatchDraggableDirective.prototype.batchDragLastOneAutoActiveEventKeys;
/** @type {?} */
BatchDraggableDirective.prototype.batchDragActiveEvent;
/** @type {?} */
BatchDraggableDirective.prototype.dragData;
/** @type {?} */
BatchDraggableDirective.prototype.needToRestore;
/** @type {?} */
BatchDraggableDirective.prototype.batchDragStyle;
/**
* @type {?}
* @private
*/
BatchDraggableDirective.prototype.draggable;
/**
* @type {?}
* @private
*/
BatchDraggableDirective.prototype.dragDropService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2RyYWdkcm9wLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9iYXRjaC1kcmFnZ2FibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLElBQUksRUFBb0MsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPM0QsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7SUFTbEMsWUFBNEIsU0FBNkIsRUFBVyxlQUFnQztRQUF4RSxjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUFXLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQVIzRixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4Qix3Q0FBbUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDYixtQkFBYyxHQUEwQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUdsRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQzs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7aUJBQzdCO2FBQ0Y7U0FDRjtJQUVILENBQUM7Ozs7O0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUc7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO3dCQUNsRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7cUJBQ3ZCO2lCQUNEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2lCQUM3QjthQUNIO1NBQ0Y7SUFDSCxDQUFDOzs7O0lBQ0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUM1QjtJQUNILENBQUM7Ozs7SUFDRCxzQkFBc0I7O2NBQ2QsUUFBUSxHQUFHLElBQUksQ0FBQywrQkFBK0IsRUFBRTtRQUN2RCxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxxREFBcUQsRUFBRSxDQUFDO2lCQUM5RDthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNyQztTQUNGO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7OztJQUVELHFEQUFxRDtRQUNuRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCO1lBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRTtZQUNwRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUMzQjtJQUNILENBQUM7Ozs7SUFDRCxnQ0FBZ0M7O2NBQ3hCLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztRQUNoQyxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUMzRSxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDcEQsQ0FBQzs7OztJQUdELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQzs7Ozs7SUFDRCxlQUFlLENBQUMsUUFBUztRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2pHLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3BDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSTtnQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVM7Z0JBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTthQUNsQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNuSDtJQUNILENBQUM7Ozs7O0lBQ0Qsb0JBQW9CLENBQUMsUUFBUztRQUM1QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0RixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7U0FDakQ7SUFDSCxDQUFDOzs7Ozs7O0lBRU8sb0JBQW9CLENBQUMsS0FBWSxFQUFFLE1BQVc7UUFDcEQsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Ozs7Ozs7SUFHTyxzQkFBc0IsQ0FBQyxLQUFZLEVBQUUsTUFBVztRQUN0RCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3ZCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7O2tCQUNkLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDZCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7OztJQUVPLCtCQUErQjtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRTtZQUM5QyxPQUFPLFNBQVMsQ0FBQztTQUNsQjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNOzs7O1lBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDdkg7SUFDSCxDQUFDOzs7O0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQzs7OztJQUVNLGNBQWM7UUFDbkIsVUFBVTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUMsT0FBTztTQUFFO1FBQzlCLGFBQWE7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVM7WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBN0pGLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyxRQUFRLEVBQUUsaUJBQWlCO2FBQzlCOzs7O1lBTFEsa0JBQWtCLHVCQWdCWixJQUFJO1lBakJWLGVBQWU7Ozs2QkFTckIsS0FBSzs4QkFDTCxLQUFLO2tEQUNMLEtBQUs7bUNBQ0wsTUFBTTs2QkFHTixLQUFLOzs7O0lBTk4saURBQW9DOztJQUNwQyxrREFBaUM7O0lBQ2pDLHNFQUEyRDs7SUFDM0QsdURBQW9EOztJQUNwRCwyQ0FBUzs7SUFDVCxnREFBc0I7O0lBQ3RCLGlEQUFvRTs7Ozs7SUFFeEQsNENBQTZDOzs7OztJQUFHLGtEQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgU2VsZiwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERyYWdEcm9wU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RyYWctZHJvcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJhZ2dhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnZ2FibGUuZGlyZWN0aXZlJztcclxuZXhwb3J0IHR5cGUgQmF0Y2hEcmFnU3R5bGUgPSAnYmFkZ2UnIHwgJ3N0YWNrJyB8IHN0cmluZztcclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tkRHJhZ2dhYmxlXVtiYXRjaERyYWddJyxcclxuICAgIGV4cG9ydEFzOiAnZEJhdGNoRHJhZ2dhYmxlJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoRHJhZ2dhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgYmF0Y2hEcmFnR3JvdXAgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgYmF0Y2hEcmFnQWN0aXZlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYmF0Y2hEcmFnTGFzdE9uZUF1dG9BY3RpdmVFdmVudEtleXMgPSBbJ2N0cmxLZXknXTtcclxuICBAT3V0cHV0KCkgYmF0Y2hEcmFnQWN0aXZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgZHJhZ0RhdGE7XHJcbiAgbmVlZFRvUmVzdG9yZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGJhdGNoRHJhZ1N0eWxlOiBBcnJheTxCYXRjaERyYWdTdHlsZT4gPSBbJ2JhZGdlJywgJ3N0YWNrJ107XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBTZWxmKCkgcHJpdmF0ZSBkcmFnZ2FibGU6IERyYWdnYWJsZURpcmVjdGl2ZSwgIHByaXZhdGUgZHJhZ0Ryb3BTZXJ2aWNlOiBEcmFnRHJvcFNlcnZpY2UpIHtcclxuICAgIHRoaXMuZHJhZ2dhYmxlLmJhdGNoRHJhZ2dhYmxlID0gdGhpcztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0RHJhZ0RhdGFCeUlkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZHJhZ2dhYmxlLmJhdGNoRHJhZ2dhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuZHJhZ0RhdGEpIHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ0RhdGEuZHJhZ2dhYmxlID09PSB0aGlzLmRyYWdnYWJsZSkge1xyXG4gICAgICAgIHRoaXMuZHJhZ0RhdGEuZHJhZ2dhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICghdGhpcy5kcmFnRGF0YS5pZGVudGl0eSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tQmF0Y2hHcm91cCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydiYXRjaERyYWdBY3RpdmUnXSkgIHtcclxuICAgICAgaWYgKCF0aGlzLmluaXREcmFnRGF0YUJ5SWRlbnRpdHkoKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmJhdGNoRHJhZ0FjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmRyYWdEYXRhICYmIHRoaXMuYWxsb3dBZGRUb0JhdGNoR3JvdXAoKSkge1xyXG4gICAgICAgICAgIHRoaXMuYWRkVG9CYXRjaEdyb3VwKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tQmF0Y2hHcm91cCgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMubmVlZFRvUmVzdG9yZSkge1xyXG4gICAgICB0aGlzLnJlc3RvcmVEcmFnRGF0YVZpZXdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgIHRoaXMubmVlZFRvUmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0RHJhZ0RhdGFCeUlkZW50aXR5KCkge1xyXG4gICAgY29uc3QgZHJhZ0RhdGEgPSB0aGlzLmZpbmRJbkJhdGNoRHJhZ0RhdGFCeUlkZW50aXRpZXMoKTtcclxuICAgIGlmIChkcmFnRGF0YSkge1xyXG4gICAgICBpZiAodGhpcy5iYXRjaERyYWdBY3RpdmUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZHJhZ0RhdGEpIHtcclxuICAgICAgICAgIHRoaXMuYWRkVG9CYXRjaEdyb3VwKGRyYWdEYXRhKTtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZXN0b3JlRHJhZ0RhdGFWaWV3QWZ0ZXJWaWV3SW5pdFdoaXRlRHJhZ2dpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tQmF0Y2hHcm91cChkcmFnRGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcmFnRGF0YTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUmVzdG9yZURyYWdEYXRhVmlld0FmdGVyVmlld0luaXRXaGl0ZURyYWdnaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmRyYWdnZWRFbCAmJiB0aGlzLmRyYWdEcm9wU2VydmljZS5kcmFnZ2VkRWxJZGVudGl0eSAmJlxyXG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5kcmFnZ2VkRWwgIT09IHRoaXMuZHJhZ2dhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5uZWVkVG9SZXN0b3JlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmVzdG9yZURyYWdEYXRhVmlld0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBjb25zdCBkcmFnZ2FibGUgPSB0aGlzLmRyYWdnYWJsZTtcclxuICAgIGlmIChkcmFnZ2FibGUub3JpZ2luUGxhY2Vob2xkZXIgJiYgZHJhZ2dhYmxlLm9yaWdpblBsYWNlaG9sZGVyLnNob3cgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgZHJhZ2dhYmxlLmluc2VydE9yaWdpblBsYWNlaG9sZGVyKHRydWUsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGRyYWdnYWJsZS5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWxsb3dBZGRUb0JhdGNoR3JvdXAoKSB7XHJcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0dyb3VwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hEcmFnR3JvdXAgPT09IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0dyb3VwO1xyXG4gICAgfVxyXG4gIH1cclxuICBhZGRUb0JhdGNoR3JvdXAoZHJhZ0RhdGE/KSB7XHJcbiAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdHcm91cCA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0dyb3VwIHx8IHRoaXMuYmF0Y2hEcmFnR3JvdXA7XHJcbiAgICBpZiAoZHJhZ0RhdGEpIHtcclxuICAgICAgZHJhZ0RhdGEuZHJhZ2dhYmxlID0gdGhpcy5kcmFnZ2FibGU7XHJcbiAgICAgIGRyYWdEYXRhLmRyYWdEYXRhID0gdGhpcy5kcmFnZ2FibGUuZHJhZ0RhdGE7XHJcbiAgICAgIHRoaXMuZHJhZ0RhdGEgPSBkcmFnRGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHJhZ0RhdGEgPSB0aGlzLmRyYWdEYXRhIHx844CAe1xyXG4gICAgICAgIGlkZW50aXR5OiB0aGlzLmRyYWdnYWJsZS5kcmFnSWRlbnRpdHkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGRyYWdnYWJsZTogdGhpcy5kcmFnZ2FibGUsXHJcbiAgICAgICAgZHJhZ0RhdGE6IHRoaXMuZHJhZ2dhYmxlLmRyYWdEYXRhXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEgPSB0aGlzLmFkZFRvQXJyYXlJZk5vdEV4aXN0KHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEsIHRoaXMuZHJhZ0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZW1vdmVGcm9tQmF0Y2hHcm91cChkcmFnRGF0YT8pIHtcclxuICAgIHRoaXMuZGVsZXRlRnJvbUFycmF5SWZFeGlzdCh0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdEYXRhLCBkcmFnRGF0YSB8fCB0aGlzLmRyYWdEYXRhKTtcclxuICAgIHRoaXMuZHJhZ0RhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAoISh0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdEYXRhICYmIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEubGVuZ3RoKSkge1xyXG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9BcnJheUlmTm90RXhpc3QoYXJyYXk6IGFueVtdLCB0YXJnZXQ6IGFueSkge1xyXG4gICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcclxuICAgIGlmIChhcnJheS5pbmRleE9mKHRhcmdldCkgPT09IC0xKSB7XHJcbiAgICAgIGFycmF5LnB1c2godGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGRlbGV0ZUZyb21BcnJheUlmRXhpc3QoYXJyYXk6IGFueVtdLCB0YXJnZXQ6IGFueSkge1xyXG4gICAgaWYgKCFhcnJheSkgeyByZXR1cm47IH1cclxuICAgIGlmIChhcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZih0YXJnZXQpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZEluQmF0Y2hEcmFnRGF0YUJ5SWRlbnRpdGllcygpIHtcclxuICAgIGlmICghdGhpcy5kcmFnZ2FibGUuZHJhZ0lkZW50aXR5KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5kcmFnRHJvcFNlcnZpY2UuYmF0Y2hEcmFnRGF0YSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEuZmlsdGVyKGRyYWdEYXRhID0+IGRyYWdEYXRhLmlkZW50aXR5ID09PSB0aGlzLmRyYWdnYWJsZS5kcmFnSWRlbnRpdHkpLnBvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZlKCkge1xyXG4gICAgdGhpcy5iYXRjaERyYWdBY3RpdmVFdmVudC5lbWl0KHtlbDogdGhpcy5kcmFnZ2FibGUuZWwubmF0aXZlRWxlbWVudCwgZGF0YTogdGhpcy5kcmFnZ2FibGUuZHJhZ0RhdGF9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVEcmFnRGF0YSgpIHtcclxuICAgIC8vIOmAieS4reeKtuaAgeaJjeabtOaWsFxyXG4gICAgaWYgKCF0aGlzLmRyYWdEYXRhKSB7cmV0dXJuOyB9XHJcbiAgICAvLyDpnIDopoHnu7TmjIHlhoXlrZjlnLDlnYDkuI3lj5hcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5kcmFnRGF0YSwge1xyXG4gICAgICBpZGVudGl0eTogdGhpcy5kcmFnZ2FibGUuZHJhZ0lkZW50aXR5IHx8IHVuZGVmaW5lZCxcclxuICAgICAgZHJhZ2dhYmxlOiB0aGlzLmRyYWdnYWJsZSxcclxuICAgICAgZHJhZ0RhdGE6IHRoaXMuZHJhZ2dhYmxlLmRyYWdEYXRhXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19