123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- "use strict";
- var __assign = undefined && undefined.__assign || function () {
- __assign = Object.assign || function (t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) {
- if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- var component_1 = require('./../common/component.js');
- var utils_1 = require('./../common/utils.js');
- var shared_1 = require('./../picker/shared.js');
- var currentYear = new Date().getFullYear();
- function isValidDate(date) {
- return utils_1.isDef(date) && !isNaN(new Date(date).getTime());
- }
- function range(num, min, max) {
- return Math.min(Math.max(num, min), max);
- }
- function padZero(val) {
- return ("00" + val).slice(-2);
- }
- function times(n, iteratee) {
- var index = -1;
- var result = Array(n < 0 ? 0 : n);
- while (++index < n) {
- result[index] = iteratee(index);
- }
- return result;
- }
- function getTrueValue(formattedValue) {
- if (!formattedValue) return;
- while (isNaN(parseInt(formattedValue, 10))) {
- formattedValue = formattedValue.slice(1);
- }
- return parseInt(formattedValue, 10);
- }
- function getMonthEndDay(year, month) {
- return 32 - new Date(year, month - 1, 32).getDate();
- }
- var defaultFormatter = function defaultFormatter(_, value) {
- return value;
- };
- component_1.VantComponent({
- classes: ['active-class', 'toolbar-class', 'column-class'],
- props: __assign({}, shared_1.pickerProps, { formatter: {
- type: Function,
- value: defaultFormatter
- }, value: null, type: {
- type: String,
- value: 'datetime'
- }, showToolbar: {
- type: Boolean,
- value: true
- }, minDate: {
- type: Number,
- value: new Date(currentYear - 10, 0, 1).getTime()
- }, maxDate: {
- type: Number,
- value: new Date(currentYear + 10, 11, 31).getTime()
- }, minHour: {
- type: Number,
- value: 0
- }, maxHour: {
- type: Number,
- value: 23
- }, minMinute: {
- type: Number,
- value: 0
- }, maxMinute: {
- type: Number,
- value: 59
- } }),
- data: {
- innerValue: Date.now(),
- columns: []
- },
- watch: {
- value: 'updateValue',
- type: 'updateValue',
- minDate: 'updateValue',
- maxDate: 'updateValue',
- minHour: 'updateValue',
- maxHour: 'updateValue',
- minMinute: 'updateValue',
- maxMinute: 'updateValue'
- },
- methods: {
- updateValue: function updateValue() {
- var _this = this;
- var data = this.data;
- var val = this.correctValue(this.data.value);
- var isEqual = val === data.innerValue;
- if (!isEqual) {
- this.updateColumnValue(val).then(function () {
- _this.$emit('input', val);
- });
- } else {
- this.updateColumns();
- }
- },
- getPicker: function getPicker() {
- if (this.picker == null) {
- this.picker = this.selectComponent('.van-datetime-picker');
- var picker_1 = this.picker;
- var setColumnValues_1 = picker_1.setColumnValues;
- picker_1.setColumnValues = function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- return setColumnValues_1.apply(picker_1, args.concat([false]));
- };
- }
- return this.picker;
- },
- updateColumns: function updateColumns() {
- var _a = this.data.formatter,
- formatter = _a === void 0 ? defaultFormatter : _a;
- var results = this.getRanges().map(function (_a) {
- var type = _a.type,
- range = _a.range;
- var values = times(range[1] - range[0] + 1, function (index) {
- var value = range[0] + index;
- value = type === 'year' ? "" + value : padZero(value);
- return formatter(type, value);
- });
- return { values: values };
- });
- return this.set({ columns: results });
- },
- getRanges: function getRanges() {
- var data = this.data;
- if (data.type === 'time') {
- return [{
- type: 'hour',
- range: [data.minHour, data.maxHour]
- }, {
- type: 'minute',
- range: [data.minMinute, data.maxMinute]
- }];
- }
- var _a = this.getBoundary('max', data.innerValue),
- maxYear = _a.maxYear,
- maxDate = _a.maxDate,
- maxMonth = _a.maxMonth,
- maxHour = _a.maxHour,
- maxMinute = _a.maxMinute;
- var _b = this.getBoundary('min', data.innerValue),
- minYear = _b.minYear,
- minDate = _b.minDate,
- minMonth = _b.minMonth,
- minHour = _b.minHour,
- minMinute = _b.minMinute;
- var result = [{
- type: 'year',
- range: [minYear, maxYear]
- }, {
- type: 'month',
- range: [minMonth, maxMonth]
- }, {
- type: 'day',
- range: [minDate, maxDate]
- }, {
- type: 'hour',
- range: [minHour, maxHour]
- }, {
- type: 'minute',
- range: [minMinute, maxMinute]
- }];
- if (data.type === 'date') result.splice(3, 2);
- if (data.type === 'year-month') result.splice(2, 3);
- return result;
- },
- correctValue: function correctValue(value) {
- var data = this.data;
- // validate value
- var isDateType = data.type !== 'time';
- if (isDateType && !isValidDate(value)) {
- value = data.minDate;
- } else if (!isDateType && !value) {
- var minHour = data.minHour;
- value = padZero(minHour) + ":00";
- }
- // time type
- if (!isDateType) {
- var _a = value.split(':'),
- hour = _a[0],
- minute = _a[1];
- hour = padZero(range(hour, data.minHour, data.maxHour));
- minute = padZero(range(minute, data.minMinute, data.maxMinute));
- return hour + ":" + minute;
- }
- // date type
- value = Math.max(value, data.minDate);
- value = Math.min(value, data.maxDate);
- return value;
- },
- getBoundary: function getBoundary(type, innerValue) {
- var _a;
- var value = new Date(innerValue);
- var boundary = new Date(this.data[type + "Date"]);
- var year = boundary.getFullYear();
- var month = 1;
- var date = 1;
- var hour = 0;
- var minute = 0;
- if (type === 'max') {
- month = 12;
- date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
- hour = 23;
- minute = 59;
- }
- if (value.getFullYear() === year) {
- month = boundary.getMonth() + 1;
- if (value.getMonth() + 1 === month) {
- date = boundary.getDate();
- if (value.getDate() === date) {
- hour = boundary.getHours();
- if (value.getHours() === hour) {
- minute = boundary.getMinutes();
- }
- }
- }
- }
- return _a = {}, _a[type + "Year"] = year, _a[type + "Month"] = month, _a[type + "Date"] = date, _a[type + "Hour"] = hour, _a[type + "Minute"] = minute, _a;
- },
- onCancel: function onCancel() {
- this.$emit('cancel');
- },
- onConfirm: function onConfirm() {
- this.$emit('confirm', this.data.innerValue);
- },
- onChange: function onChange() {
- var _this = this;
- var data = this.data;
- var value;
- var picker = this.getPicker();
- if (data.type === 'time') {
- var indexes = picker.getIndexes();
- value = indexes[0] + data.minHour + ":" + (indexes[1] + data.minMinute);
- } else {
- var values = picker.getValues();
- var year = getTrueValue(values[0]);
- var month = getTrueValue(values[1]);
- var maxDate = getMonthEndDay(year, month);
- var date = getTrueValue(values[2]);
- if (data.type === 'year-month') {
- date = 1;
- }
- date = date > maxDate ? maxDate : date;
- var hour = 0;
- var minute = 0;
- if (data.type === 'datetime') {
- hour = getTrueValue(values[3]);
- minute = getTrueValue(values[4]);
- }
- value = new Date(year, month - 1, date, hour, minute);
- }
- value = this.correctValue(value);
- this.updateColumnValue(value).then(function () {
- _this.$emit('input', value);
- _this.$emit('change', picker);
- });
- },
- updateColumnValue: function updateColumnValue(value) {
- var _this = this;
- var values = [];
- var _a = this.data,
- type = _a.type,
- _b = _a.formatter,
- formatter = _b === void 0 ? defaultFormatter : _b;
- var picker = this.getPicker();
- if (type === 'time') {
- var pair = value.split(':');
- values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
- } else {
- var date = new Date(value);
- values = [formatter('year', "" + date.getFullYear()), formatter('month', padZero(date.getMonth() + 1))];
- if (type === 'date') {
- values.push(formatter('day', padZero(date.getDate())));
- }
- if (type === 'datetime') {
- values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes())));
- }
- }
- return this.set({ innerValue: value }).then(function () {
- return _this.updateColumns();
- }).then(function () {
- return picker.setValues(values);
- });
- }
- },
- created: function created() {
- var _this = this;
- var innerValue = this.correctValue(this.data.value);
- this.updateColumnValue(innerValue).then(function () {
- _this.$emit('input', innerValue);
- });
- }
- });
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIl9fYXNzaWduIiwiT2JqZWN0IiwiaSIsIm4iLCJhcmd1bWVudHMiLCJzIiwidCIsInZhbHVlIiwiY29tcG9uZW50XzEiLCJyZXF1aXJlIiwidXRpbHNfMSIsInNoYXJlZF8xIiwiY3VycmVudFllYXIiLCJpc05hTiIsIk1hdGgiLCJpbmRleCIsInJlc3VsdCIsIkFycmF5IiwiaXRlcmF0ZWUiLCJwYXJzZUludCIsImZvcm1hdHRlZFZhbHVlIiwibW9udGgiLCJkZWZhdWx0Rm9ybWF0dGVyIiwiY2xhc3NlcyIsInByb3BzIiwiZm9ybWF0dGVyIiwidHlwZSIsInNob3dUb29sYmFyIiwibWluRGF0ZSIsIm1heERhdGUiLCJtaW5Ib3VyIiwibWF4SG91ciIsIm1pbk1pbnV0ZSIsIm1heE1pbnV0ZSIsImRhdGEiLCJpbm5lclZhbHVlIiwiRGF0ZSIsImNvbHVtbnMiLCJ3YXRjaCIsIm1ldGhvZHMiLCJ1cGRhdGVWYWx1ZSIsIl90aGlzIiwidmFsIiwiaXNFcXVhbCIsImdldFBpY2tlciIsInBpY2tlcl8xIiwic2V0Q29sdW1uVmFsdWVzXzEiLCJhcmdzIiwiX2kiLCJ1cGRhdGVDb2x1bW5zIiwiX2EiLCJyZXN1bHRzIiwicmFuZ2UiLCJ2YWx1ZXMiLCJwYWRaZXJvIiwiZ2V0UmFuZ2VzIiwibWF4WWVhciIsIm1heE1vbnRoIiwiX2IiLCJtaW5ZZWFyIiwibWluTW9udGgiLCJjb3JyZWN0VmFsdWUiLCJpc0RhdGVUeXBlIiwiaXNWYWxpZERhdGUiLCJob3VyIiwibWludXRlIiwiZ2V0Qm91bmRhcnkiLCJib3VuZGFyeSIsInllYXIiLCJkYXRlIiwiZ2V0TW9udGhFbmREYXkiLCJvbkNhbmNlbCIsIm9uQ29uZmlybSIsIm9uQ2hhbmdlIiwicGlja2VyIiwiaW5kZXhlcyIsImdldFRydWVWYWx1ZSIsInVwZGF0ZUNvbHVtblZhbHVlIiwicGFpciIsImNyZWF0ZWQiXSwibWFwcGluZ3MiOiI7O0FBQ0EsSUFBSUEsV0FBWSxhQUFR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QXBOSSxLQTVDYTtBQWtRdEJLLGFBQVMsU0FBQSxPQUFBLEdBQVk7QUFDakIsWUFBSXRDLFFBQUosSUFBQTtBQUNBLFlBQUlOLGFBQWEsS0FBQSxZQUFBLENBQWtCLEtBQUEsSUFBQSxDQUFuQyxLQUFpQixDQUFqQjtBQUNBLGFBQUEsaUJBQUEsQ0FBQSxVQUFBLEVBQUEsSUFBQSxDQUF3QyxZQUFZO0FBQ2hETSxrQkFBQUEsS0FBQUEsQ0FBQUEsT0FBQUEsRUFBQUEsVUFBQUE7QUFESixTQUFBO0FBR0g7QUF4UXFCLENBQTFCakMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgY29tcG9uZW50XzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL2NvbXBvbmVudFwiKTtcbnZhciB1dGlsc18xID0gcmVxdWlyZShcIi4uL2NvbW1vbi91dGlsc1wiKTtcbnZhciBzaGFyZWRfMSA9IHJlcXVpcmUoXCIuLi9waWNrZXIvc2hhcmVkXCIpO1xudmFyIGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuZnVuY3Rpb24gaXNWYWxpZERhdGUoZGF0ZSkge1xuICAgIHJldHVybiB1dGlsc18xLmlzRGVmKGRhdGUpICYmICFpc05hTihuZXcgRGF0ZShkYXRlKS5nZXRUaW1lKCkpO1xufVxuZnVuY3Rpb24gcmFuZ2UobnVtLCBtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChudW0sIG1pbiksIG1heCk7XG59XG5mdW5jdGlvbiBwYWRaZXJvKHZhbCkge1xuICAgIHJldHVybiAoXCIwMFwiICsgdmFsKS5zbGljZSgtMik7XG59XG5mdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSkge1xuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIHZhciByZXN1bHQgPSBBcnJheShuIDwgMCA/IDAgOiBuKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFRydWVWYWx1ZShmb3JtYXR0ZWRWYWx1ZSkge1xuICAgIGlmICghZm9ybWF0dGVkVmFsdWUpXG4gICAgICAgIHJldHVybjtcbiAgICB3aGlsZSAoaXNOYU4ocGFyc2VJbnQoZm9ybWF0dGVkVmFsdWUsIDEwKSkpIHtcbiAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZWRWYWx1ZS5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KGZvcm1hdHRlZFZhbHVlLCAxMCk7XG59XG5mdW5jdGlvbiBnZXRNb250aEVuZERheSh5ZWFyLCBtb250aCkge1xuICAgIHJldHVybiAzMiAtIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgMzIpLmdldERhdGUoKTtcbn1cbnZhciBkZWZhdWx0Rm9ybWF0dGVyID0gZnVuY3Rpb24gKF8sIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcbmNvbXBvbmVudF8xLlZhbnRDb21wb25lbnQoe1xuICAgIGNsYXNzZXM6IFsnYWN0aXZlLWNsYXNzJywgJ3Rvb2xiYXItY2xhc3MnLCAnY29sdW1uLWNsYXNzJ10sXG4gICAgcHJvcHM6IF9fYXNzaWduKHt9LCBzaGFyZWRfMS5waWNrZXJQcm9wcywgeyBmb3JtYXR0ZXI6IHtcbiAgICAgICAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgICAgICAgdmFsdWU6IGRlZmF1bHRGb3JtYXR0ZXJcbiAgICAgICAgfSwgdmFsdWU6IG51bGwsIHR5cGU6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIHZhbHVlOiAnZGF0ZXRpbWUnXG4gICAgICAgIH0sIHNob3dUb29sYmFyOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgfSwgbWluRGF0ZToge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlKGN1cnJlbnRZZWFyIC0gMTAsIDAsIDEpLmdldFRpbWUoKVxuICAgICAgICB9LCBtYXhEYXRlOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IERhdGUoY3VycmVudFllYXIgKyAxMCwgMTEsIDMxKS5nZXRUaW1lKClcbiAgICAgICAgfSwgbWluSG91cjoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSwgbWF4SG91cjoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgdmFsdWU6IDIzXG4gICAgICAgIH0sIG1pbk1pbnV0ZToge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSwgbWF4TWludXRlOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICB2YWx1ZTogNTlcbiAgICAgICAgfSB9KSxcbiAgICBkYXRhOiB7XG4gICAgICAgIGlubmVyVmFsdWU6IERhdGUubm93KCksXG4gICAgICAgIGNvbHVtbnM6IFtdXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICB2YWx1ZTogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgdHlwZTogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgbWluRGF0ZTogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgbWF4RGF0ZTogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgbWluSG91cjogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgbWF4SG91cjogJ3VwZGF0ZVZhbHVlJyxcbiAgICAgICAgbWluTWludXRlOiAndXBkYXRlVmFsdWUnLFxuICAgICAgICBtYXhNaW51dGU6ICd1cGRhdGVWYWx1ZSdcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgdXBkYXRlVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLmNvcnJlY3RWYWx1ZSh0aGlzLmRhdGEudmFsdWUpO1xuICAgICAgICAgICAgdmFyIGlzRXF1YWwgPSB2YWwgPT09IGRhdGEuaW5uZXJWYWx1ZTtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uVmFsdWUodmFsKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRQaWNrZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpY2tlciA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXIgPSB0aGlzLnNlbGVjdENvbXBvbmVudCgnLnZhbi1kYXRldGltZS1waWNrZXInKTtcbiAgICAgICAgICAgICAgICB2YXIgcGlja2VyXzEgPSB0aGlzLnBpY2tlcjtcbiAgICAgICAgICAgICAgICB2YXIgc2V0Q29sdW1uVmFsdWVzXzEgPSBwaWNrZXJfMS5zZXRDb2x1bW5WYWx1ZXM7XG4gICAgICAgICAgICAgICAgcGlja2VyXzEuc2V0Q29sdW1uVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRDb2x1bW5WYWx1ZXNfMS5hcHBseShwaWNrZXJfMSwgYXJncy5jb25jYXQoW2ZhbHNlXSkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5waWNrZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUNvbHVtbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMuZGF0YS5mb3JtYXR0ZXIsIGZvcm1hdHRlciA9IF9hID09PSB2b2lkIDAgPyBkZWZhdWx0Rm9ybWF0dGVyIDogX2E7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHRoaXMuZ2V0UmFuZ2VzKCkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gX2EudHlwZSwgcmFuZ2UgPSBfYS5yYW5nZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gdGltZXMocmFuZ2VbMV0gLSByYW5nZVswXSArIDEsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByYW5nZVswXSArIGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGUgPT09ICd5ZWFyJyA/IFwiXCIgKyB2YWx1ZSA6IHBhZFplcm8odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZXM6IHZhbHVlcyB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXQoeyBjb2x1bW5zOiByZXN1bHRzIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSYW5nZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2hvdXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtkYXRhLm1pbkhvdXIsIGRhdGEubWF4SG91cl1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogW2RhdGEubWluTWludXRlLCBkYXRhLm1heE1pbnV0ZV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLmdldEJvdW5kYXJ5KCdtYXgnLCBkYXRhLmlubmVyVmFsdWUpLCBtYXhZZWFyID0gX2EubWF4WWVhciwgbWF4RGF0ZSA9IF9hLm1heERhdGUsIG1heE1vbnRoID0gX2EubWF4TW9udGgsIG1heEhvdXIgPSBfYS5tYXhIb3VyLCBtYXhNaW51dGUgPSBfYS5tYXhNaW51dGU7XG4gICAgICAgICAgICB2YXIgX2IgPSB0aGlzLmdldEJvdW5kYXJ5KCdtaW4nLCBkYXRhLmlubmVyVmFsdWUpLCBtaW5ZZWFyID0gX2IubWluWWVhciwgbWluRGF0ZSA9IF9iLm1pbkRhdGUsIG1pbk1vbnRoID0gX2IubWluTW9udGgsIG1pbkhvdXIgPSBfYi5taW5Ib3VyLCBtaW5NaW51dGUgPSBfYi5taW5NaW51dGU7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3llYXInLFxuICAgICAgICAgICAgICAgICAgICByYW5nZTogW21pblllYXIsIG1heFllYXJdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdtb250aCcsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbbWluTW9udGgsIG1heE1vbnRoXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGF5JyxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFttaW5EYXRlLCBtYXhEYXRlXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaG91cicsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbbWluSG91ciwgbWF4SG91cl1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbbWluTWludXRlLCBtYXhNaW51dGVdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKDMsIDIpO1xuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3llYXItbW9udGgnKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMiwgMyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICAvLyB2YWxpZGF0ZSB2YWx1ZVxuICAgICAgICAgICAgdmFyIGlzRGF0ZVR5cGUgPSBkYXRhLnR5cGUgIT09ICd0aW1lJztcbiAgICAgICAgICAgIGlmIChpc0RhdGVUeXBlICYmICFpc1ZhbGlkRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGEubWluRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc0RhdGVUeXBlICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBtaW5Ib3VyID0gZGF0YS5taW5Ib3VyO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFkWmVybyhtaW5Ib3VyKSArIFwiOjAwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aW1lIHR5cGVcbiAgICAgICAgICAgIGlmICghaXNEYXRlVHlwZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IHZhbHVlLnNwbGl0KCc6JyksIGhvdXIgPSBfYVswXSwgbWludXRlID0gX2FbMV07XG4gICAgICAgICAgICAgICAgaG91ciA9IHBhZFplcm8ocmFuZ2UoaG91ciwgZGF0YS5taW5Ib3VyLCBkYXRhLm1heEhvdXIpKTtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYWRaZXJvKHJhbmdlKG1pbnV0ZSwgZGF0YS5taW5NaW51dGUsIGRhdGEubWF4TWludXRlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyBcIjpcIiArIG1pbnV0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRhdGUgdHlwZVxuICAgICAgICAgICAgdmFsdWUgPSBNYXRoLm1heCh2YWx1ZSwgZGF0YS5taW5EYXRlKTtcbiAgICAgICAgICAgIHZhbHVlID0gTWF0aC5taW4odmFsdWUsIGRhdGEubWF4RGF0ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEJvdW5kYXJ5OiBmdW5jdGlvbiAodHlwZSwgaW5uZXJWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gbmV3IERhdGUoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICB2YXIgYm91bmRhcnkgPSBuZXcgRGF0ZSh0aGlzLmRhdGFbdHlwZSArIFwiRGF0ZVwiXSk7XG4gICAgICAgICAgICB2YXIgeWVhciA9IGJvdW5kYXJ5LmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB2YXIgbW9udGggPSAxO1xuICAgICAgICAgICAgdmFyIGRhdGUgPSAxO1xuICAgICAgICAgICAgdmFyIGhvdXIgPSAwO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ21heCcpIHtcbiAgICAgICAgICAgICAgICBtb250aCA9IDEyO1xuICAgICAgICAgICAgICAgIGRhdGUgPSBnZXRNb250aEVuZERheSh2YWx1ZS5nZXRGdWxsWWVhcigpLCB2YWx1ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICAgICAgaG91ciA9IDIzO1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDU5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIpIHtcbiAgICAgICAgICAgICAgICBtb250aCA9IGJvdW5kYXJ5LmdldE1vbnRoKCkgKyAxO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5nZXRNb250aCgpICsgMSA9PT0gbW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGJvdW5kYXJ5LmdldERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmdldERhdGUoKSA9PT0gZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaG91ciA9IGJvdW5kYXJ5LmdldEhvdXJzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0SG91cnMoKSA9PT0gaG91cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IGJvdW5kYXJ5LmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYSA9IHt9LFxuICAgICAgICAgICAgICAgIF9hW3R5cGUgKyBcIlllYXJcIl0gPSB5ZWFyLFxuICAgICAgICAgICAgICAgIF9hW3R5cGUgKyBcIk1vbnRoXCJdID0gbW9udGgsXG4gICAgICAgICAgICAgICAgX2FbdHlwZSArIFwiRGF0ZVwiXSA9IGRhdGUsXG4gICAgICAgICAgICAgICAgX2FbdHlwZSArIFwiSG91clwiXSA9IGhvdXIsXG4gICAgICAgICAgICAgICAgX2FbdHlwZSArIFwiTWludXRlXCJdID0gbWludXRlLFxuICAgICAgICAgICAgICAgIF9hO1xuICAgICAgICB9LFxuICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2FuY2VsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29uZmlybTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY29uZmlybScsIHRoaXMuZGF0YS5pbm5lclZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIHZhciBwaWNrZXIgPSB0aGlzLmdldFBpY2tlcigpO1xuICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ZXMgPSBwaWNrZXIuZ2V0SW5kZXhlcygpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaW5kZXhlc1swXSArIGRhdGEubWluSG91ciArIFwiOlwiICsgKGluZGV4ZXNbMV0gKyBkYXRhLm1pbk1pbnV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gcGlja2VyLmdldFZhbHVlcygpO1xuICAgICAgICAgICAgICAgIHZhciB5ZWFyID0gZ2V0VHJ1ZVZhbHVlKHZhbHVlc1swXSk7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gZ2V0VHJ1ZVZhbHVlKHZhbHVlc1sxXSk7XG4gICAgICAgICAgICAgICAgdmFyIG1heERhdGUgPSBnZXRNb250aEVuZERheSh5ZWFyLCBtb250aCk7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBnZXRUcnVlVmFsdWUodmFsdWVzWzJdKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAneWVhci1tb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlID4gbWF4RGF0ZSA/IG1heERhdGUgOiBkYXRlO1xuICAgICAgICAgICAgICAgIHZhciBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB2YXIgbWludXRlID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSBnZXRUcnVlVmFsdWUodmFsdWVzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gZ2V0VHJ1ZVZhbHVlKHZhbHVlc1s0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXRlLCBob3VyLCBtaW51dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtblZhbHVlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgX3RoaXMuJGVtaXQoJ2NoYW5nZScsIHBpY2tlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlQ29sdW1uVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMuZGF0YSwgdHlwZSA9IF9hLnR5cGUsIF9iID0gX2EuZm9ybWF0dGVyLCBmb3JtYXR0ZXIgPSBfYiA9PT0gdm9pZCAwID8gZGVmYXVsdEZvcm1hdHRlciA6IF9iO1xuICAgICAgICAgICAgdmFyIHBpY2tlciA9IHRoaXMuZ2V0UGlja2VyKCk7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhaXIgPSB2YWx1ZS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyKCdob3VyJywgcGFpclswXSksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcignbWludXRlJywgcGFpclsxXSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIoJ3llYXInLCBcIlwiICsgZGF0ZS5nZXRGdWxsWWVhcigpKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyKCdtb250aCcsIHBhZFplcm8oZGF0ZS5nZXRNb250aCgpICsgMSkpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGZvcm1hdHRlcignZGF5JywgcGFkWmVybyhkYXRlLmdldERhdGUoKSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goZm9ybWF0dGVyKCdkYXknLCBwYWRaZXJvKGRhdGUuZ2V0RGF0ZSgpKSksIGZvcm1hdHRlcignaG91cicsIHBhZFplcm8oZGF0ZS5nZXRIb3VycygpKSksIGZvcm1hdHRlcignbWludXRlJywgcGFkWmVybyhkYXRlLmdldE1pbnV0ZXMoKSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXQoeyBpbm5lclZhbHVlOiB2YWx1ZSB9KVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVwZGF0ZUNvbHVtbnMoKTsgfSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiBwaWNrZXIuc2V0VmFsdWVzKHZhbHVlcyk7IH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBpbm5lclZhbHVlID0gdGhpcy5jb3JyZWN0VmFsdWUodGhpcy5kYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5WYWx1ZShpbm5lclZhbHVlKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLiRlbWl0KCdpbnB1dCcsIGlubmVyVmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbiJdLCJmaWxlIjoiaW5kZXguanMifQ==
|