UNPKG

@blueprintjs/core

Version:
107 lines (105 loc) 16.4 kB
/* * Copyright 2016 Palantir Technologies, Inc. All rights reserved. * Licensed under the BSD-3 License as modified (the “License”); you may obtain a copy * of the license at https://github.com/palantir/blueprint/blob/master/LICENSE * and https://github.com/palantir/blueprint/blob/master/PATENTS */ "use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var classNames = require("classnames"); var React = require("react"); var Classes = require("../../common/classes"); var Errors = require("../../common/errors"); var utils_1 = require("../../common/utils"); var coreSlider_1 = require("./coreSlider"); var handle_1 = require("./handle"); var RangeEnd; (function (RangeEnd) { RangeEnd[RangeEnd["LEFT"] = 0] = "LEFT"; RangeEnd[RangeEnd["RIGHT"] = 1] = "RIGHT"; })(RangeEnd || (RangeEnd = {})); var RangeSlider = (function (_super) { __extends(RangeSlider, _super); function RangeSlider() { var _this = this; _super.apply(this, arguments); this.displayName = "Blueprint.RangeSlider"; this.className = classNames(Classes.SLIDER, Classes.RANGE_SLIDER); this.handles = []; this.addHandleRef = function (ref) { if (ref != null) { _this.handles.push(ref); } }; this.getHandlerForIndex = function (index, callback) { return function (newValue) { if (utils_1.isFunction(callback)) { var _a = _this.props.value, leftValue = _a[0], rightValue = _a[1]; if (index === RangeEnd.LEFT) { callback([Math.min(newValue, rightValue), rightValue]); } else { callback([leftValue, Math.max(newValue, leftValue)]); } } }; }; this.handleChange = function (newValue) { var _a = _this.props.value, leftValue = _a[0], rightValue = _a[1]; var newLeftValue = newValue[0], newRightValue = newValue[1]; if ((leftValue !== newLeftValue || rightValue !== newRightValue) && utils_1.isFunction(_this.props.onChange)) { _this.props.onChange(newValue); } }; } RangeSlider.prototype.renderFill = function () { var _a = this.props.value, leftValue = _a[0], rightValue = _a[1]; if (leftValue === rightValue) { return undefined; } // expand by 1px in each direction so it sits under the handle border var left = Math.round((leftValue - this.props.min) * this.state.tickSize) - 1; var width = Math.round((rightValue - leftValue) * this.state.tickSize) + 2; if (width < 0) { left += width; width = Math.abs(width); } return React.createElement("div", {className: Classes.SLIDER + "-progress", style: { left: left, width: width }}); }; RangeSlider.prototype.renderHandles = function () { var _this = this; var _a = this.props, disabled = _a.disabled, max = _a.max, min = _a.min, onRelease = _a.onRelease, stepSize = _a.stepSize, value = _a.value; return value.map(function (val, index) { return (React.createElement(handle_1.Handle, {disabled: disabled, key: index, label: _this.formatLabel(val), max: max, min: min, onChange: _this.getHandlerForIndex(index, _this.handleChange), onRelease: _this.getHandlerForIndex(index, onRelease), ref: _this.addHandleRef, stepSize: stepSize, tickSize: _this.state.tickSize, value: val})); }); }; RangeSlider.prototype.handleTrackClick = function (event) { this.handles.reduce(function (min, handle) { // find closest handle to the mouse position var value = handle.clientToValue(event.clientX); if (Math.abs(value - handle.props.value) < Math.abs(value - min.props.value)) { return handle; } return min; }).beginHandleMovement(event); }; RangeSlider.prototype.validateProps = function (props) { var value = props.value; if (value == null || value[RangeEnd.LEFT] == null || value[RangeEnd.RIGHT] == null) { throw new Error(Errors.RANGESLIDER_NULL_VALUE); } }; RangeSlider.defaultProps = { disabled: false, labelStepSize: 1, max: 10, min: 0, showTrackFill: true, stepSize: 1, value: [0, 10], }; return RangeSlider; }(coreSlider_1.CoreSlider)); exports.RangeSlider = RangeSlider; exports.RangeSliderFactory = React.createFactory(RangeSlider); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9yYW5nZVNsaWRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7Ozs7Ozs7QUFFSCxJQUFZLFVBQVUsV0FBTSxZQUFZLENBQUMsQ0FBQTtBQUN6QyxJQUFZLEtBQUssV0FBTSxPQUFPLENBQUMsQ0FBQTtBQUUvQixJQUFZLE9BQU8sV0FBTSxzQkFBc0IsQ0FBQyxDQUFBO0FBQ2hELElBQVksTUFBTSxXQUFNLHFCQUFxQixDQUFDLENBQUE7QUFDOUMsc0JBQTJCLG9CQUFvQixDQUFDLENBQUE7QUFDaEQsMkJBQTZDLGNBQWMsQ0FBQyxDQUFBO0FBQzVELHVCQUF1QixVQUFVLENBQUMsQ0FBQTtBQUlsQyxJQUFLLFFBR0o7QUFIRCxXQUFLLFFBQVE7SUFDVCx1Q0FBUSxDQUFBO0lBQ1IseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFISSxRQUFRLEtBQVIsUUFBUSxRQUdaO0FBZ0JEO0lBQWlDLCtCQUE2QjtJQUE5RDtRQUFBLGlCQTBGQztRQTFGZ0MsOEJBQTZCO1FBV25ELGdCQUFXLEdBQUcsdUJBQXVCLENBQUM7UUFDdEMsY0FBUyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1RCxZQUFPLEdBQWEsRUFBRSxDQUFDO1FBb0R2QixpQkFBWSxHQUFHLFVBQUMsR0FBVztZQUMvQixFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDZCxLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQyxDQUFBO1FBRU8sdUJBQWtCLEdBQUcsVUFBQyxLQUFlLEVBQUUsUUFBcUMsSUFBSyxPQUFBLFVBQUMsUUFBZ0I7WUFDdEcsRUFBRSxDQUFDLENBQUMsa0JBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUEsc0JBQWdELEVBQXpDLGlCQUFTLEVBQUUsa0JBQVUsQ0FBcUI7Z0JBQ2pELEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDMUIsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztnQkFBQyxJQUFJLENBQUMsQ0FBQztvQkFDSixRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsRUFUd0YsQ0FTeEYsQ0FBQTtRQUVPLGlCQUFZLEdBQUcsVUFBQyxRQUFxQjtZQUN6QyxJQUFBLHNCQUFnRCxFQUF6QyxpQkFBUyxFQUFFLGtCQUFVLENBQXFCO1lBQzFDLDhCQUFZLEVBQUUsMkJBQWEsQ0FBYTtZQUMvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxZQUFZLElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxJQUFJLGtCQUFVLENBQUMsS0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xHLEtBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDTCxDQUFDLENBQUE7SUFDTCxDQUFDO0lBMUVhLGdDQUFVLEdBQXBCO1FBQ0ksSUFBQSxxQkFBZ0QsRUFBekMsaUJBQVMsRUFBRSxrQkFBVSxDQUFxQjtRQUNqRCxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztZQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFBQyxDQUFDO1FBQ25ELHFFQUFxRTtRQUNyRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLElBQUksSUFBSSxLQUFLLENBQUM7WUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsTUFBTSxDQUFDLHFCQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUssT0FBTyxDQUFDLE1BQU0sY0FBWSxFQUFDLEtBQUssRUFBRSxFQUFFLFVBQUksRUFBRSxZQUFLLEVBQUcsRUFBRyxDQUFDO0lBQ3BGLENBQUM7SUFFUyxtQ0FBYSxHQUF2QjtRQUFBLGlCQWlCQztRQWhCRyxJQUFBLGVBQXFFLEVBQTdELHNCQUFRLEVBQUUsWUFBRyxFQUFFLFlBQUcsRUFBRSx3QkFBUyxFQUFFLHNCQUFRLEVBQUUsZ0JBQUssQ0FBZ0I7UUFDdEUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQyxHQUFHLEVBQUUsS0FBSyxJQUFLLE9BQUEsQ0FDN0Isb0JBQUMsZUFBTSxHQUNILFFBQVEsRUFBRSxRQUFTLEVBQ25CLEdBQUcsRUFBRSxLQUFNLEVBQ1gsS0FBSyxFQUFFLEtBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFFLEVBQzdCLEdBQUcsRUFBRSxHQUFJLEVBQ1QsR0FBRyxFQUFFLEdBQUksRUFDVCxRQUFRLEVBQUUsS0FBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFJLENBQUMsWUFBWSxDQUFFLEVBQzVELFNBQVMsRUFBRSxLQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBRSxFQUNyRCxHQUFHLEVBQUUsS0FBSSxDQUFDLFlBQWEsRUFDdkIsUUFBUSxFQUFFLFFBQVMsRUFDbkIsUUFBUSxFQUFFLEtBQUksQ0FBQyxLQUFLLENBQUMsUUFBUyxFQUM5QixLQUFLLEVBQUUsR0FBSSxFQUNiLENBQ0wsRUFkZ0MsQ0FjaEMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLHNDQUFnQixHQUExQixVQUEyQixLQUFpRDtRQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsRUFBRSxNQUFNO1lBQzVCLDRDQUE0QztZQUM1QyxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2xCLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLG1DQUFhLEdBQXZCLFVBQXdCLEtBQXdCO1FBQ3BDLHVCQUFLLENBQVc7UUFDeEIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakYsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQztJQS9EYSx3QkFBWSxHQUFzQjtRQUM1QyxRQUFRLEVBQUUsS0FBSztRQUNmLGFBQWEsRUFBRSxDQUFDO1FBQ2hCLEdBQUcsRUFBRSxFQUFFO1FBQ1AsR0FBRyxFQUFFLENBQUM7UUFDTixhQUFhLEVBQUUsSUFBSTtRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7S0FDakIsQ0FBQztJQWlGTixrQkFBQztBQUFELENBMUZBLEFBMEZDLENBMUZnQyx1QkFBVSxHQTBGMUM7QUExRlksbUJBQVcsY0EwRnZCLENBQUE7QUFFWSwwQkFBa0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvc2xpZGVyL3JhbmdlU2xpZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE2IFBhbGFudGlyIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRC0zIExpY2Vuc2UgYXMgbW9kaWZpZWQgKHRoZSDigJxMaWNlbnNl4oCdKTsgeW91IG1heSBvYnRhaW4gYSBjb3B5XG4gKiBvZiB0aGUgbGljZW5zZSBhdCBodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvYmx1ZXByaW50L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvYmx1ZXByaW50L2Jsb2IvbWFzdGVyL1BBVEVOVFNcbiAqL1xuXG5pbXBvcnQgKiBhcyBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0ICogYXMgQ2xhc3NlcyBmcm9tIFwiLi4vLi4vY29tbW9uL2NsYXNzZXNcIjtcbmltcG9ydCAqIGFzIEVycm9ycyBmcm9tIFwiLi4vLi4vY29tbW9uL2Vycm9yc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi9jb21tb24vdXRpbHNcIjtcbmltcG9ydCB7IENvcmVTbGlkZXIsIElDb3JlU2xpZGVyUHJvcHMgfSBmcm9tIFwiLi9jb3JlU2xpZGVyXCI7XG5pbXBvcnQgeyBIYW5kbGUgfSBmcm9tIFwiLi9oYW5kbGVcIjtcblxuZXhwb3J0IHR5cGUgTnVtYmVyUmFuZ2UgPSBbbnVtYmVyLCBudW1iZXJdO1xuXG5lbnVtIFJhbmdlRW5kIHtcbiAgICBMRUZUID0gMCxcbiAgICBSSUdIVCA9IDEsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJhbmdlU2xpZGVyUHJvcHMgZXh0ZW5kcyBJQ29yZVNsaWRlclByb3BzIHtcbiAgICAvKipcbiAgICAgKiBSYW5nZSB2YWx1ZSBvZiBzbGlkZXIuIEhhbmRsZXMgd2lsbCBiZSByZW5kZXJlZCBhdCBlYWNoIHBvc2l0aW9uIGluIHRoZSByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCBbMCwgMTBdXG4gICAgICovXG4gICAgdmFsdWU/OiBOdW1iZXJSYW5nZTtcblxuICAgIC8qKiBDYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJhbmdlIHZhbHVlIGNoYW5nZXMuICovXG4gICAgb25DaGFuZ2U/KHZhbHVlOiBOdW1iZXJSYW5nZSk6IHZvaWQ7XG5cbiAgICAvKiogQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGEgaGFuZGxlIGlzIHJlbGVhc2VkLiAqL1xuICAgIG9uUmVsZWFzZT8odmFsdWU6IE51bWJlclJhbmdlKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFJhbmdlU2xpZGVyIGV4dGVuZHMgQ29yZVNsaWRlcjxJUmFuZ2VTbGlkZXJQcm9wcz4ge1xuICAgIHB1YmxpYyBzdGF0aWMgZGVmYXVsdFByb3BzOiBJUmFuZ2VTbGlkZXJQcm9wcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICBsYWJlbFN0ZXBTaXplOiAxLFxuICAgICAgICBtYXg6IDEwLFxuICAgICAgICBtaW46IDAsXG4gICAgICAgIHNob3dUcmFja0ZpbGw6IHRydWUsXG4gICAgICAgIHN0ZXBTaXplOiAxLFxuICAgICAgICB2YWx1ZTogWzAsIDEwXSxcbiAgICB9O1xuXG4gICAgcHVibGljIGRpc3BsYXlOYW1lID0gXCJCbHVlcHJpbnQuUmFuZ2VTbGlkZXJcIjtcbiAgICBwdWJsaWMgY2xhc3NOYW1lID0gY2xhc3NOYW1lcyhDbGFzc2VzLlNMSURFUiwgQ2xhc3Nlcy5SQU5HRV9TTElERVIpO1xuXG4gICAgcHJpdmF0ZSBoYW5kbGVzOiBIYW5kbGVbXSA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIHJlbmRlckZpbGwoKSB7XG4gICAgICAgIGNvbnN0IFtsZWZ0VmFsdWUsIHJpZ2h0VmFsdWVdID0gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgICAgaWYgKGxlZnRWYWx1ZSA9PT0gcmlnaHRWYWx1ZSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgICAgIC8vIGV4cGFuZCBieSAxcHggaW4gZWFjaCBkaXJlY3Rpb24gc28gaXQgc2l0cyB1bmRlciB0aGUgaGFuZGxlIGJvcmRlclxuICAgICAgICBsZXQgbGVmdCA9IE1hdGgucm91bmQoKGxlZnRWYWx1ZSAtIHRoaXMucHJvcHMubWluKSAqIHRoaXMuc3RhdGUudGlja1NpemUpIC0gMTtcbiAgICAgICAgbGV0IHdpZHRoID0gTWF0aC5yb3VuZCgocmlnaHRWYWx1ZSAtIGxlZnRWYWx1ZSkgKiB0aGlzLnN0YXRlLnRpY2tTaXplKSArIDI7XG4gICAgICAgIGlmICh3aWR0aCA8IDApIHtcbiAgICAgICAgICAgIGxlZnQgKz0gd2lkdGg7XG4gICAgICAgICAgICB3aWR0aCA9IE1hdGguYWJzKHdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Ake0NsYXNzZXMuU0xJREVSfS1wcm9ncmVzc2B9IHN0eWxlPXt7IGxlZnQsIHdpZHRoIH19IC8+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW5kZXJIYW5kbGVzKCkge1xuICAgICAgICBjb25zdCB7IGRpc2FibGVkLCBtYXgsIG1pbiwgb25SZWxlYXNlLCBzdGVwU2l6ZSwgdmFsdWUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoKHZhbCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxIYW5kbGVcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBsYWJlbD17dGhpcy5mb3JtYXRMYWJlbCh2YWwpfVxuICAgICAgICAgICAgICAgIG1heD17bWF4fVxuICAgICAgICAgICAgICAgIG1pbj17bWlufVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmdldEhhbmRsZXJGb3JJbmRleChpbmRleCwgdGhpcy5oYW5kbGVDaGFuZ2UpfVxuICAgICAgICAgICAgICAgIG9uUmVsZWFzZT17dGhpcy5nZXRIYW5kbGVyRm9ySW5kZXgoaW5kZXgsIG9uUmVsZWFzZSl9XG4gICAgICAgICAgICAgICAgcmVmPXt0aGlzLmFkZEhhbmRsZVJlZn1cbiAgICAgICAgICAgICAgICBzdGVwU2l6ZT17c3RlcFNpemV9XG4gICAgICAgICAgICAgICAgdGlja1NpemU9e3RoaXMuc3RhdGUudGlja1NpemV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3ZhbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVUcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50IHwgUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4pIHtcbiAgICAgICAgdGhpcy5oYW5kbGVzLnJlZHVjZSgobWluLCBoYW5kbGUpID0+IHtcbiAgICAgICAgICAgIC8vIGZpbmQgY2xvc2VzdCBoYW5kbGUgdG8gdGhlIG1vdXNlIHBvc2l0aW9uXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhhbmRsZS5jbGllbnRUb1ZhbHVlKGV2ZW50LmNsaWVudFgpO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHZhbHVlIC0gaGFuZGxlLnByb3BzLnZhbHVlKSA8IE1hdGguYWJzKHZhbHVlIC0gbWluLnByb3BzLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWluO1xuICAgICAgICB9KS5iZWdpbkhhbmRsZU1vdmVtZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wcyhwcm9wczogSVJhbmdlU2xpZGVyUHJvcHMpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gcHJvcHM7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlW1JhbmdlRW5kLkxFRlRdID09IG51bGwgfHwgdmFsdWVbUmFuZ2VFbmQuUklHSFRdID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvcnMuUkFOR0VTTElERVJfTlVMTF9WQUxVRSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEhhbmRsZVJlZiA9IChyZWY6IEhhbmRsZSkgPT4ge1xuICAgICAgICBpZiAocmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcy5wdXNoKHJlZik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhhbmRsZXJGb3JJbmRleCA9IChpbmRleDogUmFuZ2VFbmQsIGNhbGxiYWNrOiAodmFsdWU6IE51bWJlclJhbmdlKSA9PiBhbnkpID0+IChuZXdWYWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgY29uc3QgW2xlZnRWYWx1ZSwgcmlnaHRWYWx1ZV0gPSB0aGlzLnByb3BzLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBSYW5nZUVuZC5MRUZUKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soW01hdGgubWluKG5ld1ZhbHVlLCByaWdodFZhbHVlKSwgcmlnaHRWYWx1ZV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhbbGVmdFZhbHVlLCBNYXRoLm1heChuZXdWYWx1ZSwgbGVmdFZhbHVlKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2UgPSAobmV3VmFsdWU6IE51bWJlclJhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IFtsZWZ0VmFsdWUsIHJpZ2h0VmFsdWVdID0gdGhpcy5wcm9wcy52YWx1ZTtcbiAgICAgICAgY29uc3QgW25ld0xlZnRWYWx1ZSwgbmV3UmlnaHRWYWx1ZV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKChsZWZ0VmFsdWUgIT09IG5ld0xlZnRWYWx1ZSB8fCByaWdodFZhbHVlICE9PSBuZXdSaWdodFZhbHVlKSAmJiBpc0Z1bmN0aW9uKHRoaXMucHJvcHMub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJhbmdlU2xpZGVyRmFjdG9yeSA9IFJlYWN0LmNyZWF0ZUZhY3RvcnkoUmFuZ2VTbGlkZXIpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9