UNPKG

ngx-pluto

Version:
272 lines 24.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, ViewChild } from '@angular/core'; import { ViewportRuler } from '@angular/cdk/overlay'; import { CdkDropListGroup, CdkDropList, moveItemInArray } from '../drag-drop/index'; import { Utils } from '../utils'; /** * 可拖拽图片组件 - 上传多张图片时展示多图并可拖拽改变排列顺序 * * <example-url>https://stackblitz.com/edit/np-draggable-pics-sample?embed=1&file=src/app/app.component.html</example-url> */ var NpDraggablePics = /** @class */ (function () { function NpDraggablePics(viewportRuler) { var _this = this; this.viewportRuler = viewportRuler; /** * 包含图片url的图片列表,可选值id(unique) */ this.items = []; this.dropListEnterPredicate = (/** * @param {?} drag * @param {?} drop * @return {?} */ function (drag, drop) { if (drop == _this.placeholder) return true; if (drop != _this.activeContainer) return false; /** @type {?} */ var phElement = _this.placeholder.element.nativeElement; /** @type {?} */ var sourceElement = drag.dropContainer.element.nativeElement; /** @type {?} */ var dropElement = drop.element.nativeElement; /** @type {?} */ var dragIndex = __indexOf(dropElement.parentElement.children, (_this.source ? phElement : sourceElement)); /** @type {?} */ var dropIndex = __indexOf(dropElement.parentElement.children, dropElement); if (!_this.source) { _this.sourceIndex = dragIndex; _this.source = drag.dropContainer; phElement.style.width = sourceElement.clientWidth + 'px'; phElement.style.height = sourceElement.clientHeight + 'px'; sourceElement.parentElement.removeChild(sourceElement); } _this.targetIndex = dropIndex; _this.target = drop; phElement.style.display = ''; dropElement.parentElement.insertBefore(phElement, (dropIndex > dragIndex ? dropElement.nextSibling : dropElement)); _this.placeholder.enter(drag, drag.element.nativeElement.offsetLeft, drag.element.nativeElement.offsetTop); return false; }); this.target = null; this.source = null; } /** * @return {?} */ NpDraggablePics.prototype.ngOnInit = /** * @return {?} */ function () { this.items.forEach((/** * @param {?} item * @return {?} */ function (item) { if (!item.id) { item.id = Utils.ID(); } })); }; /** * @return {?} */ NpDraggablePics.prototype.ngAfterViewInit = /** * @return {?} */ function () { /** @type {?} */ var phElement = this.placeholder.element.nativeElement; phElement.style.display = 'none'; phElement.parentElement.removeChild(phElement); }; /** * @param {?} e * @return {?} */ NpDraggablePics.prototype.dragMoved = /** * @param {?} e * @return {?} */ function (e) { var _this = this; if (this.isDisabled) { return; } /** @type {?} */ var point = this.getPointerPositionOnPage(e.event); this.listGroup._items.forEach((/** * @param {?} dropList * @return {?} */ function (dropList) { if (__isInsideDropListClientRect(dropList, point.x, point.y)) { _this.activeContainer = dropList; return; } })); }; /** * @return {?} */ NpDraggablePics.prototype.dropListDropped = /** * @return {?} */ function () { if (!this.target) return; /** @type {?} */ var phElement = this.placeholder.element.nativeElement; /** @type {?} */ var parent = phElement.parentElement; phElement.style.display = 'none'; parent.removeChild(phElement); parent.appendChild(phElement); parent.insertBefore(this.source.element.nativeElement, parent.children[this.sourceIndex]); this.target = null; this.source = null; if (this.sourceIndex != this.targetIndex) moveItemInArray(this.items, this.sourceIndex, this.targetIndex); }; /** Determines the point of the page that was touched by the user. */ /** * Determines the point of the page that was touched by the user. * @param {?} event * @return {?} */ NpDraggablePics.prototype.getPointerPositionOnPage = /** * Determines the point of the page that was touched by the user. * @param {?} event * @return {?} */ function (event) { // `touches` will be empty for start/end events so we have to fall back to `changedTouches`. /** @type {?} */ var point = __isTouchEvent(event) ? (event.touches[0] || event.changedTouches[0]) : event; /** @type {?} */ var scrollPosition = this.viewportRuler.getViewportScrollPosition(); return { x: point.pageX - scrollPosition.left, y: point.pageY - scrollPosition.top }; }; /** * @param {?} item * @return {?} */ NpDraggablePics.prototype.onRemove = /** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var index = this.items.indexOf(item); if (index > -1) { this.items.splice(index, 1); } }; NpDraggablePics.decorators = [ { type: Component, args: [{ selector: "np-draggable-pics", template: "<div class=\"np-draggable-pics-wrapper item-container\" cdkDropListGroup>\r\n <div cdkDropList [cdkDropListEnterPredicate]=\"dropListEnterPredicate\" (cdkDropListDropped)=\"dropListDropped()\">\r\n </div>\r\n <div cdkDropList *ngFor=\"let item of items\" [cdkDropListEnterPredicate]=\"dropListEnterPredicate\"\r\n (cdkDropListDropped)=\"dropListDropped()\">\r\n <div cdkDrag class=\"item-box\" (cdkDragMoved)=\"dragMoved($event);\" [style.width.px]=\"itemWidth\"\r\n [style.height.px]=\"itemHeight\">\r\n <i class=\"fas fa-times-circle\" *ngIf=\"!isDisabled\" (click)=\"onRemove(item)\"></i>\r\n <img [src]=\"item.url\" [style.width.px]=\"itemWidth\" [style.height.px]=\"itemHeight\">\r\n </div>\r\n </div>\r\n</div>\r\n", host: { 'class': 'host-inline-block' }, encapsulation: ViewEncapsulation.None, styles: [".host-inline-block{display:inline-block}.np-draggable-pics-wrapper.item-container{display:flex;flex-wrap:wrap;min-width:600px;padding:10px}.np-draggable-pics-wrapper.item-container .item-box{height:auto;font-size:30pt;cursor:move;display:flex;justify-content:center;align-items:center;text-align:center;border-radius:4px;position:relative;z-index:1;transition:box-shadow .2s cubic-bezier(0,0,.2,1)}.np-draggable-pics-wrapper.item-container .item-box>.fas.fa-times-circle{position:absolute;top:-6px;right:-6px;font-size:16px;cursor:pointer;border-radius:50%}.cdk-drop-list{display:flex;box-sizing:border-box!important;padding-right:10px;padding-bottom:10px}.cdk-drag-preview{border-radius:4px;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);display:flex;justify-content:center;align-items:center;text-align:center;font-size:30pt;opacity:.8;padding:3px;border:2px dotted gray!important;background-color:transparent!important}.cdk-drag-placeholder{box-sizing:border-box!important;opacity:.2;border:2px dotted gray!important;background-color:#ddd!important}.cdk-drag-animating{transition:transform 250ms cubic-bezier(0,0,.2,1)}"] }] } ]; /** @nocollapse */ NpDraggablePics.ctorParameters = function () { return [ { type: ViewportRuler } ]; }; NpDraggablePics.propDecorators = { listGroup: [{ type: ViewChild, args: [CdkDropListGroup,] }], placeholder: [{ type: ViewChild, args: [CdkDropList,] }], items: [{ type: Input }], itemWidth: [{ type: Input }], itemHeight: [{ type: Input }], isDisabled: [{ type: Input }] }; return NpDraggablePics; }()); export { NpDraggablePics }; if (false) { /** @type {?} */ NpDraggablePics.prototype.listGroup; /** @type {?} */ NpDraggablePics.prototype.placeholder; /** * 包含图片url的图片列表,可选值id(unique) * @type {?} */ NpDraggablePics.prototype.items; /** * 图片展示宽度 * @type {?} */ NpDraggablePics.prototype.itemWidth; /** * 图片展示高度 * @type {?} */ NpDraggablePics.prototype.itemHeight; /** * 是否禁用图片可拖拽删除 * @type {?} */ NpDraggablePics.prototype.isDisabled; /** @type {?} */ NpDraggablePics.prototype.target; /** @type {?} */ NpDraggablePics.prototype.targetIndex; /** @type {?} */ NpDraggablePics.prototype.source; /** @type {?} */ NpDraggablePics.prototype.sourceIndex; /** @type {?} */ NpDraggablePics.prototype.dragIndex; /** @type {?} */ NpDraggablePics.prototype.activeContainer; /** @type {?} */ NpDraggablePics.prototype.dropListEnterPredicate; /** * @type {?} * @private */ NpDraggablePics.prototype.viewportRuler; } /** * @param {?} collection * @param {?} node * @return {?} */ function __indexOf(collection, node) { return Array.prototype.indexOf.call(collection, node); } ; /** * Determines whether an event is a touch event. * @param {?} event * @return {?} */ function __isTouchEvent(event) { return event.type.startsWith('touch'); } /** * @param {?} dropList * @param {?} x * @param {?} y * @return {?} */ function __isInsideDropListClientRect(dropList, x, y) { var _a = dropList.element.nativeElement.getBoundingClientRect(), top = _a.top, bottom = _a.bottom, left = _a.left, right = _a.right; return y >= top && y <= bottom && x >= left && x <= right; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXBpY3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtcGx1dG8vIiwic291cmNlcyI6WyJsaWIvZHJhZ2dhYmxlLXBpY3MvZHJhZ2dhYmxlLXBpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQVUsS0FBSyxFQUF3QixTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDekgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQWUsZUFBZSxFQUFXLE1BQU0sb0JBQW9CLENBQUM7QUFDMUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7O0FBT2pDO0lBaUNFLHlCQUFvQixhQUE0QjtRQUFoRCxpQkFHQztRQUhtQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTs7OztRQWxCdkMsVUFBSyxHQUF3QyxFQUFFLENBQUM7UUF3RXpELDJCQUFzQjs7Ozs7UUFBRyxVQUFDLElBQWEsRUFBRSxJQUFpQjtZQUN4RCxJQUFJLElBQUksSUFBSSxLQUFJLENBQUMsV0FBVztnQkFDMUIsT0FBTyxJQUFJLENBQUM7WUFFZCxJQUFJLElBQUksSUFBSSxLQUFJLENBQUMsZUFBZTtnQkFDOUIsT0FBTyxLQUFLLENBQUM7O2dCQUVYLFNBQVMsR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhOztnQkFDbEQsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWE7O2dCQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhOztnQkFFeEMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFD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LEVBQUUsQ0FBUztJQUN6RSxJQUFBLDJEQUFxRixFQUFuRixZQUFHLEVBQUUsa0JBQU0sRUFBRSxjQUFJLEVBQUUsZ0JBQWdFO0lBQzNGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDZGtEcm9wTGlzdEdyb3VwLCBDZGtEcm9wTGlzdCwgQ2RrRHJhZ01vdmUsIG1vdmVJdGVtSW5BcnJheSwgQ2RrRHJhZyB9IGZyb20gJy4uL2RyYWctZHJvcC9pbmRleCc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuLyoqXHJcbiAqIOWPr+aLluaLveWbvueJh+e7hOS7tiAtIOS4iuS8oOWkmuW8oOWbvueJh+aXtuWxleekuuWkmuWbvuW5tuWPr+aLluaLveaUueWPmOaOkuWIl+mhuuW6j1xyXG4gKiBcclxuICogPGV4YW1wbGUtdXJsPmh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC9ucC1kcmFnZ2FibGUtcGljcy1zYW1wbGU/ZW1iZWQ9MSZmaWxlPXNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sPC9leGFtcGxlLXVybD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgbnAtZHJhZ2dhYmxlLXBpY3NgLFxyXG4gIHRlbXBsYXRlVXJsOiAnZHJhZ2dhYmxlLXBpY3MuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2RyYWdnYWJsZS1waWNzLnNjc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnY2xhc3MnOiAnaG9zdC1pbmxpbmUtYmxvY2snXHJcbiAgfSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOcERyYWdnYWJsZVBpY3MgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBAVmlld0NoaWxkKENka0Ryb3BMaXN0R3JvdXApIGxpc3RHcm91cDogQ2RrRHJvcExpc3RHcm91cDxDZGtEcm9wTGlzdD47XHJcbiAgQFZpZXdDaGlsZChDZGtEcm9wTGlzdCkgcGxhY2Vob2xkZXI6IENka0Ryb3BMaXN0O1xyXG5cclxuICAvKirljIXlkKvlm77niYd1cmznmoTlm77niYfliJfooajvvIzlj6/pgInlgLxpZO+8iHVuaXF1Ze+8iSAqL1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBBcnJheTx7IHVybDogc3RyaW5nLCBpZD86IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAvKirlm77niYflsZXnpLrlrr3luqYgKi9cclxuICBASW5wdXQoKSBpdGVtV2lkdGg6IG51bWJlcjtcclxuXHJcbiAgLyoq5Zu+54mH5bGV56S66auY5bqmICovXHJcbiAgQElucHV0KCkgaXRlbUhlaWdodDogbnVtYmVyO1xyXG5cclxuICAvKirmmK/lkKbnpoHnlKjlm77niYflj6/mi5bmi73liKDpmaQgKi9cclxuICBASW5wdXQoKSBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICB0YXJnZXQ6IENka0Ryb3BMaXN0O1xyXG4gIHRhcmdldEluZGV4OiBudW1iZXI7XHJcbiAgc291cmNlOiBDZGtEcm9wTGlzdDtcclxuICBzb3VyY2VJbmRleDogbnVtYmVyO1xyXG4gIGRyYWdJbmRleDogbnVtYmVyO1xyXG4gIGFjdGl2ZUNvbnRhaW5lcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyKSB7XHJcbiAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB0aGlzLnNvdXJjZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKCFpdGVtLmlkKSB7XHJcbiAgICAgICAgaXRlbS5pZCA9IFV0aWxzLklEKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgbGV0IHBoRWxlbWVudCA9IHRoaXMucGxhY2Vob2xkZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIHBoRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgcGhFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQocGhFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGRyYWdNb3ZlZChlOiBDZGtEcmFnTW92ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcG9pbnQgPSB0aGlzLmdldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShlLmV2ZW50KTtcclxuXHJcbiAgICB0aGlzLmxpc3RHcm91cC5faXRlbXMuZm9yRWFjaChkcm9wTGlzdCA9PiB7XHJcbiAgICAgIGlmIChfX2lzSW5zaWRlRHJvcExpc3RDbGllbnRSZWN0KGRyb3BMaXN0LCBwb2ludC54LCBwb2ludC55KSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlQ29udGFpbmVyID0gZHJvcExpc3Q7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRyb3BMaXN0RHJvcHBlZCgpIHtcclxuICAgIGlmICghdGhpcy50YXJnZXQpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgcGhFbGVtZW50ID0gdGhpcy5wbGFjZWhvbGRlci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBsZXQgcGFyZW50ID0gcGhFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcblxyXG4gICAgcGhFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHBoRWxlbWVudCk7XHJcbiAgICBwYXJlbnQuYXBwZW5kQ2hpbGQocGhFbGVtZW50KTtcclxuICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGhpcy5zb3VyY2UuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBwYXJlbnQuY2hpbGRyZW5bdGhpcy5zb3VyY2VJbmRleF0pO1xyXG5cclxuICAgIHRoaXMudGFyZ2V0ID0gbnVsbDtcclxuICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5zb3VyY2VJbmRleCAhPSB0aGlzLnRhcmdldEluZGV4KVxyXG4gICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5pdGVtcywgdGhpcy5zb3VyY2VJbmRleCwgdGhpcy50YXJnZXRJbmRleCk7XHJcbiAgfVxyXG5cclxuICBkcm9wTGlzdEVudGVyUHJlZGljYXRlID0gKGRyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KSA9PiB7XHJcbiAgICBpZiAoZHJvcCA9PSB0aGlzLnBsYWNlaG9sZGVyKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBpZiAoZHJvcCAhPSB0aGlzLmFjdGl2ZUNvbnRhaW5lcilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBwaEVsZW1lbnQgPSB0aGlzLnBsYWNlaG9sZGVyLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIGxldCBzb3VyY2VFbGVtZW50ID0gZHJhZy5kcm9wQ29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIGxldCBkcm9wRWxlbWVudCA9IGRyb3AuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGxldCBkcmFnSW5kZXggPSBfX2luZGV4T2YoZHJvcEVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbiwgKHRoaXMuc291cmNlID8gcGhFbGVtZW50IDogc291cmNlRWxlbWVudCkpO1xyXG4gICAgbGV0IGRyb3BJbmRleCA9IF9faW5kZXhPZihkcm9wRWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuLCBkcm9wRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnNvdXJjZSkge1xyXG4gICAgICB0aGlzLnNvdXJjZUluZGV4ID0gZHJhZ0luZGV4O1xyXG4gICAgICB0aGlzLnNvdXJjZSA9IGRyYWcuZHJvcENvbnRhaW5lcjtcclxuXHJcbiAgICAgIHBoRWxlbWVudC5zdHlsZS53aWR0aCA9IHNvdXJjZUVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnO1xyXG4gICAgICBwaEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc291cmNlRWxlbWVudC5jbGllbnRIZWlnaHQgKyAncHgnO1xyXG5cclxuICAgICAgc291cmNlRWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHNvdXJjZUVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFyZ2V0SW5kZXggPSBkcm9wSW5kZXg7XHJcbiAgICB0aGlzLnRhcmdldCA9IGRyb3A7XHJcblxyXG4gICAgcGhFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcclxuICAgIGRyb3BFbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHBoRWxlbWVudCwgKGRyb3BJbmRleCA+IGRyYWdJbmRleFxyXG4gICAgICA/IGRyb3BFbGVtZW50Lm5leHRTaWJsaW5nIDogZHJvcEVsZW1lbnQpKTtcclxuXHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyLmVudGVyKGRyYWcsIGRyYWcuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQsIGRyYWcuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKiogRGV0ZXJtaW5lcyB0aGUgcG9pbnQgb2YgdGhlIHBhZ2UgdGhhdCB3YXMgdG91Y2hlZCBieSB0aGUgdXNlci4gKi9cclxuICBnZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSB7XHJcbiAgICAvLyBgdG91Y2hlc2Agd2lsbCBiZSBlbXB0eSBmb3Igc3RhcnQvZW5kIGV2ZW50cyBzbyB3ZSBoYXZlIHRvIGZhbGwgYmFjayB0byBgY2hhbmdlZFRvdWNoZXNgLlxyXG4gICAgY29uc3QgcG9pbnQgPSBfX2lzVG91Y2hFdmVudChldmVudCkgPyAoZXZlbnQudG91Y2hlc1swXSB8fCBldmVudC5jaGFuZ2VkVG91Y2hlc1swXSkgOiBldmVudDtcclxuICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gdGhpcy52aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiBwb2ludC5wYWdlWCAtIHNjcm9sbFBvc2l0aW9uLmxlZnQsXHJcbiAgICAgIHk6IHBvaW50LnBhZ2VZIC0gc2Nyb2xsUG9zaXRpb24udG9wXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgb25SZW1vdmUoaXRlbTogeyB1cmw6IHN0cmluZywgaWQ/OiBzdHJpbmcgfSkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19pbmRleE9mKGNvbGxlY3Rpb24sIG5vZGUpIHtcclxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChjb2xsZWN0aW9uLCBub2RlKTtcclxufTtcclxuXHJcbi8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgYW4gZXZlbnQgaXMgYSB0b3VjaCBldmVudC4gKi9cclxuZnVuY3Rpb24gX19pc1RvdWNoRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogZXZlbnQgaXMgVG91Y2hFdmVudCB7XHJcbiAgcmV0dXJuIGV2ZW50LnR5cGUuc3RhcnRzV2l0aCgndG91Y2gnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19pc0luc2lkZURyb3BMaXN0Q2xpZW50UmVjdChkcm9wTGlzdDogQ2RrRHJvcExpc3QsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgY29uc3QgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSA9IGRyb3BMaXN0LmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICByZXR1cm4geSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQ7XHJcbn1cclxuXHJcblxyXG4iXX0=