diff --git a/dist/tui-time-picker.css b/dist/tui-time-picker.css index 4236364..10cbe6b 100644 --- a/dist/tui-time-picker.css +++ b/dist/tui-time-picker.css @@ -1,6 +1,6 @@ /*! * TOAST UI Time Picker - * @version 2.0.3 + * @version 2.1.0 * @author NHN FE Development Lab * @license MIT */ diff --git a/dist/tui-time-picker.js b/dist/tui-time-picker.js index 834ab22..8482226 100644 --- a/dist/tui-time-picker.js +++ b/dist/tui-time-picker.js @@ -1,6 +1,6 @@ /*! * TOAST UI Time Picker - * @version 2.0.3 + * @version 2.1.0 * @author NHN FE Development Lab * @license MIT */ @@ -113,7 +113,7 @@ return /******/ (function(modules) { // webpackBootstrap -var isArray = __webpack_require__(2); +var isArray = __webpack_require__(3); /** * @module array @@ -166,6 +166,56 @@ module.exports = inArray; /* 1 */ /***/ (function(module, exports, __webpack_require__) { +"use strict"; +/** + * @fileoverview Execute the provided callback once for each element present in the array(or Array-like object) in ascending order. + * @author NHN FE Development Lab + */ + + + +/** + * Execute the provided callback once for each element present + * in the array(or Array-like object) in ascending order. + * If the callback function returns false, the loop will be stopped. + * Callback function(iteratee) is invoked with three arguments: + * 1) The value of the element + * 2) The index of the element + * 3) The array(or Array-like object) being traversed + * @param {Array|Arguments|NodeList} arr The array(or Array-like object) that will be traversed + * @param {function} iteratee Callback function + * @param {Object} [context] Context(this) of callback function + * @memberof module:collection + * @example + * var forEachArray = require('tui-code-snippet/collection/forEachArray'); // node, commonjs + * + * var sum = 0; + * + * forEachArray([1,2,3], function(value){ + * sum += value; + * }); + * alert(sum); // 6 + */ +function forEachArray(arr, iteratee, context) { + var index = 0; + var len = arr.length; + + context = context || null; + + for (; index < len; index += 1) { + if (iteratee.call(context, arr[index], index, arr) === false) { + break; + } + } +} + +module.exports = forEachArray; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + "use strict"; /** * @fileoverview Extend the target object from other objects. @@ -205,7 +255,7 @@ module.exports = extend; /***/ }), -/* 2 */ +/* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -230,56 +280,6 @@ function isArray(obj) { module.exports = isArray; -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/** - * @fileoverview Execute the provided callback once for each element present in the array(or Array-like object) in ascending order. - * @author NHN FE Development Lab - */ - - - -/** - * Execute the provided callback once for each element present - * in the array(or Array-like object) in ascending order. - * If the callback function returns false, the loop will be stopped. - * Callback function(iteratee) is invoked with three arguments: - * 1) The value of the element - * 2) The index of the element - * 3) The array(or Array-like object) being traversed - * @param {Array|Arguments|NodeList} arr The array(or Array-like object) that will be traversed - * @param {function} iteratee Callback function - * @param {Object} [context] Context(this) of callback function - * @memberof module:collection - * @example - * var forEachArray = require('tui-code-snippet/collection/forEachArray'); // node, commonjs - * - * var sum = 0; - * - * forEachArray([1,2,3], function(value){ - * sum += value; - * }); - * alert(sum); // 6 - */ -function forEachArray(arr, iteratee, context) { - var index = 0; - var len = arr.length; - - context = context || null; - - for (; index < len; index += 1) { - if (iteratee.call(context, arr[index], index, arr) === false) { - break; - } - } -} - -module.exports = forEachArray; - - /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { @@ -292,8 +292,8 @@ module.exports = forEachArray; -var isArray = __webpack_require__(2); -var forEachArray = __webpack_require__(3); +var isArray = __webpack_require__(3); +var forEachArray = __webpack_require__(1); var forEachOwnProperties = __webpack_require__(16); /** @@ -405,9 +405,9 @@ module.exports = isString; var inArray = __webpack_require__(0); var forEach = __webpack_require__(4); -var isArray = __webpack_require__(2); +var isArray = __webpack_require__(3); var isString = __webpack_require__(6); -var extend = __webpack_require__(1); +var extend = __webpack_require__(2); // IE8 does not support capture groups. var EXPRESSION_REGEXP = /{{\s?|\s?}}/g; @@ -794,11 +794,11 @@ module.exports = template; -var extend = __webpack_require__(1); +var extend = __webpack_require__(2); var isExisty = __webpack_require__(23); var isString = __webpack_require__(6); var isObject = __webpack_require__(25); -var isArray = __webpack_require__(2); +var isArray = __webpack_require__(3); var isFunction = __webpack_require__(26); var forEach = __webpack_require__(4); @@ -1373,7 +1373,7 @@ module.exports = CustomEvents; var inherit = __webpack_require__(27); -var extend = __webpack_require__(1); +var extend = __webpack_require__(2); /** * @module defineClass @@ -1786,6 +1786,7 @@ module.exports = isHTMLNode; var inArray = __webpack_require__(0); +var forEachArray = __webpack_require__(1); var sendHostname = __webpack_require__(35); var uniqueId = 0; @@ -1863,11 +1864,35 @@ var utils = { return arr; }, + /** + * Returns array filled with selected value + * @param {number} start - Start index of array to fill + * @param {number} end - End index of array to fill + * @param {number} value - Value to be filled + * @param {Array} [target] - Array to fill + * @returns {Array} + */ + fill: function(start, end, value, target) { + var arr = target || []; + var replaceEnd = Math.min(arr.length - 1, end); + var i; + + for (i = start; i <= replaceEnd; i += 1) { + arr[i] = value; + } + + for (i = replaceEnd; i <= end; i += 1) { + arr.push(value); + } + + return arr; + }, + /** * Get a target element * @param {Event} ev Event object * @returns {HTMLElement} An event target element - */ + */ getTarget: function(ev) { return ev.target || ev.srcElement; }, @@ -1878,6 +1903,31 @@ var utils = { */ sendHostName: function() { sendHostname('time-picker', 'UA-129987462-1'); + }, + + /** + * Get disabled minute array + * @param {Array} enableRanges array of object which contains range + */ + getDisabledMinuteArr: function(enableRanges) { + var arr = this.fill(0, 60, false); + + function setDisabled(enableRange) { + arr = this.fill(enableRange.begin, enableRange.end, true, arr); + } + + forEachArray(enableRanges, setDisabled.bind(this)); + + return arr; + }, + + /** + * Set disabled on target element + * @param {HTMLInputElement} el target element + * @param {boolean} isDisabled target element + */ + setDisabled: function(el, isDisabled) { + el.disabled = isDisabled; } }; @@ -2021,7 +2071,7 @@ module.exports = getClass; -var isArray = __webpack_require__(2); +var isArray = __webpack_require__(3); var isUndefined = __webpack_require__(5); /** @@ -2083,10 +2133,10 @@ module.exports = __webpack_require__(22); var inArray = __webpack_require__(0); -var forEachArray = __webpack_require__(3); +var forEachArray = __webpack_require__(1); var CustomEvents = __webpack_require__(8); var defineClass = __webpack_require__(9); -var extend = __webpack_require__(1); +var extend = __webpack_require__(2); var on = __webpack_require__(10); var off = __webpack_require__(11); var addClass = __webpack_require__(29); @@ -2112,6 +2162,11 @@ var CLASS_NAME_CHECKED = 'tui-timepicker-meridiem-checked'; var INPUT_TYPE_SPINBOX = 'spinbox'; var INPUT_TYPE_SELECTBOX = 'selectbox'; +var START_NUMBER_OF_TIME = 0; +var END_NUMBER_OF_MINUTE = 59; +var END_NUMBER_OF_HOUR = 23; +var END_NUMBER_OF_HOUR_WITH_MERIDIEM = 12; + /** * Merge default options * @ignore @@ -2131,6 +2186,7 @@ var mergeDefaultOptions = function(options) { meridiemPosition: 'right', format: 'h:m', disabledHours: [], + disabledMinutes: {}, usageStatistics: true }, options @@ -2149,12 +2205,24 @@ var mergeDefaultOptions = function(options) { * @param {string} [options.format = 'h:m'] - hour, minute format for display * @param {boolean} [options.showMeridiem = true] - Show meridiem expression? * @param {Array} [options.disabledHours = []] - Registered Hours is disabled. + * @param {Object} [options.disabledMinutes = {}] - Registered Minutes of selected hours is disabled. + * @param {Object} [options.disabledMinutes.hour] - Key must be hour(number). + * Value is array which contains only true or false and must be 60 of length * @param {string} [options.meridiemPosition = 'right'] - Set location of the meridiem element. * If this option set 'left', the meridiem element is created in front of the hour element. * @param {string} [options.language = 'en'] Set locale texts * @param {Boolean} [options.usageStatistics=true|false] send hostname to google analytics [default value is true] * @example - * var timepicker = new tui.TimePicker('#timepicker-container', { + * // ES6 + * import TimePicker from 'tui-time-picker'; + * + * // CommonJS + * const TimePicker = require('tui-time-picker'); + * + * // Browser + * const TimePicker = tui.TimePicker; + * + * const timepicker = new TimePicker('#timepicker-container', { * initialHour: 15, * initialMinute: 13, * inputType: 'selectbox', @@ -2170,14 +2238,12 @@ var TimePicker = defineClass( * @memberof TimePicker * @static * @example - * var TimePicker = tui.TimePicker; // or require('tui-time-picker'); - * * TimePicker.localeTexts['customKey'] = { * am: 'a.m.', * pm: 'p.m.' * }; * - * var instance = new tui.TimePicker('#timepicker-container', { + * const instance = new TimePicker('#timepicker-container', { * language: 'customKey', * }); */ @@ -2190,13 +2256,13 @@ var TimePicker = defineClass( * @type {number} * @private */ - this._id = util.getUniqueId(); + this.id = util.getUniqueId(); /** * @type {HTMLElement} * @private */ - this._container = isHTMLNode(container) + this.container = isHTMLNode(container) ? container : document.querySelector(container); @@ -2204,104 +2270,110 @@ var TimePicker = defineClass( * @type {HTMLElement} * @private */ - this._element = null; + this.element = null; /** * @type {HTMLElement} * @private */ - this._meridiemElement = null; + this.meridiemElement = null; /** * @type {HTMLElement} * @private */ - this._amEl = null; + this.amEl = null; /** * @type {HTMLElement} * @private */ - this._pmEl = null; + this.pmEl = null; /** * @type {boolean} * @private */ - this._showMeridiem = options.showMeridiem; + this.showMeridiem = options.showMeridiem; /** * Meridiem postion * @type {'left'|'right'} * @private */ - this._meridiemPosition = options.meridiemPosition; + this.meridiemPosition = options.meridiemPosition; /** * @type {Spinbox|Selectbox} * @private */ - this._hourInput = null; + this.hourInput = null; /** * @type {Spinbox|Selectbox} * @private */ - this._minuteInput = null; + this.minuteInput = null; /** * @type {number} * @private */ - this._hour = options.initialHour; + this.hour = options.initialHour; /** * @type {number} * @private */ - this._minute = options.initialMinute; + this.minute = options.initialMinute; /** * @type {number} * @private */ - this._hourStep = options.hourStep; + this.hourStep = options.hourStep; /** * @type {number} * @private */ - this._minuteStep = options.minuteStep; + this.minuteStep = options.minuteStep; /** * @type {Array} * @private */ - this._disabledHours = options.disabledHours; + this.disabledHours = options.disabledHours; + + /** + * @type {Object} + * @private + */ + this.disabledMinutes = options.disabledMinutes; /** * TimePicker inputType * @type {'spinbox'|'selectbox'} * @private */ - this._inputType = options.inputType; + this.inputType = options.inputType; /** * Locale text for meridiem * @type {string} * @private */ - this._localeText = localeTexts[options.language]; + this.localeText = localeTexts[options.language]; /** * Time format for output * @type {string} * @private */ - this._format = this._getValidTimeFormat(options.format); + this.format = this.getValidTimeFormat(options.format); - this._render(); - this._setEvents(); + this.render(); + this.setEvents(); if (options.usageStatistics) { util.sendHostName(); @@ -2312,20 +2384,20 @@ var TimePicker = defineClass( * Set event handlers to selectors, container * @private */ - _setEvents: function() { - this._hourInput.on('change', this._onChangeTimeInput, this); - this._minuteInput.on('change', this._onChangeTimeInput, this); + setEvents: function() { + this.hourInput.on('change', this.onChangeTimeInput, this); + this.minuteInput.on('change', this.onChangeTimeInput, this); - if (this._showMeridiem) { - if (this._inputType === INPUT_TYPE_SELECTBOX) { + if (this.showMeridiem) { + if (this.inputType === INPUT_TYPE_SELECTBOX) { on( - this._meridiemElement.querySelector('select'), + this.meridiemElement.querySelector('select'), 'change', - this._onChangeMeridiem, + this.onChangeMeridiem, this ); - } else if (this._inputType === INPUT_TYPE_SPINBOX) { - on(this._meridiemElement, 'click', this._onChangeMeridiem, this); + } else if (this.inputType === INPUT_TYPE_SPINBOX) { + on(this.meridiemElement, 'click', this.onChangeMeridiem, this); } } }, @@ -2334,22 +2406,22 @@ var TimePicker = defineClass( * Remove events * @private */ - _removeEvents: function() { + removeEvents: function() { this.off(); - this._hourInput.destroy(); - this._minuteInput.destroy(); + this.hourInput.destroy(); + this.minuteInput.destroy(); - if (this._showMeridiem) { - if (this._inputType === INPUT_TYPE_SELECTBOX) { + if (this.showMeridiem) { + if (this.inputType === INPUT_TYPE_SELECTBOX) { off( - this._meridiemElement.querySelector('select'), + this.meridiemElement.querySelector('select'), 'change', - this._onChangeMeridiem, + this.onChangeMeridiem, this ); - } else if (this._inputType === INPUT_TYPE_SPINBOX) { - off(this._meridiemElement, 'click', this._onChangeMeridiem, this); + } else if (this.inputType === INPUT_TYPE_SPINBOX) { + off(this.meridiemElement, 'click', this.onChangeMeridiem, this); } } }, @@ -2358,28 +2430,28 @@ var TimePicker = defineClass( * Render element * @private */ - _render: function() { + render: function() { var context = { - showMeridiem: this._showMeridiem, - isSpinbox: this._inputType === 'spinbox' + showMeridiem: this.showMeridiem, + isSpinbox: this.inputType === 'spinbox' }; - if (this._showMeridiem) { + if (this.showMeridiem) { extend(context, { - meridiemElement: this._makeMeridiemHTML() + meridiemElement: this.makeMeridiemHTML() }); } - if (this._element) { - removeElement(this._element); + if (this.element) { + removeElement(this.element); } - this._container.innerHTML = tmpl(context); - this._element = this._container.firstChild; + this.container.innerHTML = tmpl(context); + this.element = this.container.firstChild; - this._renderTimeInputs(); + this.renderTimeInputs(); - if (this._showMeridiem) { - this._setMeridiemElement(); + if (this.showMeridiem) { + this.setMeridiemElement(); } }, @@ -2387,14 +2459,14 @@ var TimePicker = defineClass( * Set meridiem element on timepicker * @private */ - _setMeridiemElement: function() { - if (this._meridiemPosition === 'left') { - addClass(this._element, CLASS_NAME_LEFT_MERIDIEM); + setMeridiemElement: function() { + if (this.meridiemPosition === 'left') { + addClass(this.element, CLASS_NAME_LEFT_MERIDIEM); } - this._meridiemElement = this._element.querySelector(SELECTOR_MERIDIEM_ELEMENT); - this._amEl = this._meridiemElement.querySelector('[value="AM"]'); - this._pmEl = this._meridiemElement.querySelector('[value="PM"]'); - this._syncToMeridiemElements(); + this.meridiemElement = this.element.querySelector(SELECTOR_MERIDIEM_ELEMENT); + this.amEl = this.meridiemElement.querySelector('[value="AM"]'); + this.pmEl = this.meridiemElement.querySelector('[value="PM"]'); + this.syncToMeridiemElements(); }, /** @@ -2402,14 +2474,14 @@ var TimePicker = defineClass( * @returns {HTMLElement} Meridiem element * @private */ - _makeMeridiemHTML: function() { - var localeText = this._localeText; + makeMeridiemHTML: function() { + var localeText = this.localeText; return meridiemTmpl({ am: localeText.am, pm: localeText.pm, - radioId: this._id, - isSpinbox: this._inputType === 'spinbox' + radioId: this.id, + isSpinbox: this.inputType === 'spinbox' }); }, @@ -2417,39 +2489,39 @@ var TimePicker = defineClass( * Render time selectors * @private */ - _renderTimeInputs: function() { - var hour = this._hour; - var showMeridiem = this._showMeridiem; - var hourElement = this._element.querySelector(SELECTOR_HOUR_ELEMENT); - var minuteElement = this._element.querySelector(SELECTOR_MINUTE_ELEMENT); - var BoxComponent = this._inputType.toLowerCase() === 'selectbox' ? Selectbox : Spinbox; - var formatExplode = this._format.split(':'); - var hourItems = this._getHourItems(); + renderTimeInputs: function() { + var hour = this.hour; + var showMeridiem = this.showMeridiem; + var hourElement = this.element.querySelector(SELECTOR_HOUR_ELEMENT); + var minuteElement = this.element.querySelector(SELECTOR_MINUTE_ELEMENT); + var BoxComponent = this.inputType.toLowerCase() === 'selectbox' ? Selectbox : Spinbox; + var formatExplode = this.format.split(':'); + var hourItems = this.getHourItems(); if (showMeridiem) { hour = util.getMeridiemHour(hour); } - this._hourInput = new BoxComponent(hourElement, { + this.hourInput = new BoxComponent(hourElement, { initialValue: hour, items: hourItems, format: formatExplode[0], - disabledItems: this._makeDisabledStatItems(hourItems) + disabledItems: this.makeDisabledStatItems(hourItems) }); - this._minuteInput = new BoxComponent(minuteElement, { - initialValue: this._minute, - items: this._getMinuteItems(), + this.minuteInput = new BoxComponent(minuteElement, { + initialValue: this.minute, + items: this.getMinuteItems(), format: formatExplode[1] }); }, - _makeDisabledStatItems: function(hourItems) { + makeDisabledStatItems: function(hourItems) { var result = []; - var disabledHours = this._disabledHours.concat(); + var disabledHours = this.disabledHours.concat(); - if (this._showMeridiem) { - disabledHours = this._meridiemableTime(disabledHours); + if (this.showMeridiem) { + disabledHours = this.meridiemableTime(disabledHours); } forEachArray(hourItems, function(hour) { @@ -2459,13 +2531,13 @@ var TimePicker = defineClass( return result; }, - _meridiemableTime: function(disabledHours) { + meridiemableTime: function(disabledHours) { var diffHour = 0; var startHour = 0; var endHour = 11; var result = []; - if (this._hour >= 12) { + if (this.hour >= 12) { diffHour = 12; startHour = 12; endHour = 23; @@ -2486,7 +2558,7 @@ var TimePicker = defineClass( * @returns {string} * @private */ - _getValidTimeFormat: function(format) { + getValidTimeFormat: function(format) { if (!format.match(/^[h]{1,2}:[m]{1,2}$/i)) { return 'h:m'; } @@ -2498,9 +2570,9 @@ var TimePicker = defineClass( * Initialize meridiem elements * @private */ - _syncToMeridiemElements: function() { - var selectedEl = this._hour >= 12 ? this._pmEl : this._amEl; - var notSelectedEl = selectedEl === this._pmEl ? this._amEl : this._pmEl; + syncToMeridiemElements: function() { + var selectedEl = this.hour >= 12 ? this.pmEl : this.amEl; + var notSelectedEl = selectedEl === this.pmEl ? this.amEl : this.pmEl; selectedEl.setAttribute('selected', true); selectedEl.setAttribute('checked', true); @@ -2514,16 +2586,16 @@ var TimePicker = defineClass( * Set values in spinboxes from time * @private */ - _syncToInputs: function() { - var hour = this._hour; - var minute = this._minute; + syncToInputs: function() { + var hour = this.hour; + var minute = this.minute; - if (this._showMeridiem) { + if (this.showMeridiem) { hour = util.getMeridiemHour(hour); } - this._hourInput.setValue(hour); - this._minuteInput.setValue(minute); + this.hourInput.setValue(hour); + this.minuteInput.setValue(minute); }, /** @@ -2531,14 +2603,15 @@ var TimePicker = defineClass( * @param {Event} ev - Change event on meridiem element * @private */ - _onChangeMeridiem: function(ev) { - var hour = this._hour; + onChangeMeridiem: function(ev) { + var hour = this.hour; var target = util.getTarget(ev); if (target.value && closest(target, SELECTOR_MERIDIEM_ELEMENT)) { - hour = this._to24Hour(target.value === 'PM', hour); - this.setTime(hour, this._minute); - this._setDisabledHours(); + hour = this.to24Hour(target.value === 'PM', hour); + this.setTime(hour, this.minute); + this.setDisabledHours(); + this.setDisabledMinutes(hour); } }, @@ -2546,15 +2619,16 @@ var TimePicker = defineClass( * Time change event handler * @private */ - _onChangeTimeInput: function() { - var hour = this._hourInput.getValue(); - var minute = this._minuteInput.getValue(); - var isPM = this._hour >= 12; + onChangeTimeInput: function() { + var hour = this.hourInput.getValue(); + var minute = this.minuteInput.getValue(); + var isPM = this.hour >= 12; - if (this._showMeridiem) { - hour = this._to24Hour(isPM, hour); + if (this.showMeridiem) { + hour = this.to24Hour(isPM, hour); } this.setTime(hour, minute); + this.setDisabledMinutes(hour); }, /** @@ -2564,7 +2638,7 @@ var TimePicker = defineClass( * @returns {number} * @private */ - _to24Hour: function(isPM, hour) { + to24Hour: function(isPM, hour) { hour %= 12; if (isPM) { hour += 12; @@ -2573,11 +2647,18 @@ var TimePicker = defineClass( return hour; }, - _setDisabledHours: function() { - var hourItems = this._getHourItems(); - var disabledItems = this._makeDisabledStatItems(hourItems); + setDisabledHours: function() { + var hourItems = this.getHourItems(); + var disabledItems = this.makeDisabledStatItems(hourItems); + + this.hourInput.setDisabledItems(disabledItems); + }, + + setDisabledMinutes: function(hour) { + var disabledItems; + disabledItems = this.disabledMinutes[hour] || []; - this._hourInput.setDisabledItems(disabledItems); + this.minuteInput.setDisabledItems(disabledItems); }, /** @@ -2585,10 +2666,10 @@ var TimePicker = defineClass( * @returns {array} Hour item list * @private */ - _getHourItems: function() { - var step = this._hourStep; + getHourItems: function() { + var step = this.hourStep; - return this._showMeridiem ? util.getRangeArr(1, 12, step) : util.getRangeArr(0, 23, step); + return this.showMeridiem ? util.getRangeArr(1, 12, step) : util.getRangeArr(0, 23, step); }, /** @@ -2596,8 +2677,8 @@ var TimePicker = defineClass( * @returns {array} Minute item list * @private */ - _getMinuteItems: function() { - return util.getRangeArr(0, 59, this._minuteStep); + getMinuteItems: function() { + return util.getRangeArr(0, 59, this.minuteStep); }, /** @@ -2607,18 +2688,18 @@ var TimePicker = defineClass( * @returns {boolean} State * @private */ - _validItems: function(hour, minute) { + validItems: function(hour, minute) { if (!isNumber(hour) || !isNumber(minute)) { return false; } - if (this._showMeridiem) { + if (this.showMeridiem) { hour = util.getMeridiemHour(hour); } return ( - inArray(hour, this._getHourItems()) > -1 && - inArray(minute, this._getMinuteItems()) > -1 + inArray(hour, this.getHourItems()) > -1 && + inArray(minute, this.getMinuteItems()) > -1 ); }, @@ -2627,8 +2708,8 @@ var TimePicker = defineClass( * @param {array} step - Step to create items of hour */ setHourStep: function(step) { - this._hourStep = step; - this._hourInput.fire('changeItems', this._getHourItems()); + this.hourStep = step; + this.hourInput.fire('changeItems', this.getHourItems()); }, /** @@ -2636,7 +2717,7 @@ var TimePicker = defineClass( * @returns {number} Step of hour */ getHourStep: function() { - return this._hourStep; + return this.hourStep; }, /** @@ -2644,8 +2725,8 @@ var TimePicker = defineClass( * @param {array} step - Step to create items of minute */ setMinuteStep: function(step) { - this._minuteStep = step; - this._minuteInput.fire('changeItems', this._getMinuteItems()); + this.minuteStep = step; + this.minuteInput.fire('changeItems', this.getMinuteItems()); }, /** @@ -2653,21 +2734,21 @@ var TimePicker = defineClass( * @returns {number} Step of minute */ getMinuteStep: function() { - return this._minuteStep; + return this.minuteStep; }, /** * Show time picker element */ show: function() { - removeClass(this._element, CLASS_NAME_HIDDEN); + removeClass(this.element, CLASS_NAME_HIDDEN); }, /** * Hide time picker element */ hide: function() { - addClass(this._element, CLASS_NAME_HIDDEN); + addClass(this.element, CLASS_NAME_HIDDEN); }, /** @@ -2676,7 +2757,7 @@ var TimePicker = defineClass( * @returns {boolean} result of set time */ setHour: function(hour) { - return this.setTime(hour, this._minute); + return this.setTime(hour, this.minute); }, /** @@ -2685,7 +2766,7 @@ var TimePicker = defineClass( * @returns {boolean} result of set time */ setMinute: function(minute) { - return this.setTime(this._hour, minute); + return this.setTime(this.hour, minute); }, /** @@ -2694,16 +2775,16 @@ var TimePicker = defineClass( * @param {number} minute for time picker */ setTime: function(hour, minute) { - if (!this._validItems(hour, minute)) { + if (!this.validItems(hour, minute)) { return; } - this._hour = hour; - this._minute = minute; + this.hour = hour; + this.minute = minute; - this._syncToInputs(); - if (this._showMeridiem) { - this._syncToMeridiemElements(); + this.syncToInputs(); + if (this.showMeridiem) { + this.syncToMeridiemElements(); } /** @@ -2718,17 +2799,180 @@ var TimePicker = defineClass( * }); */ this.fire('change', { - hour: this._hour, - minute: this._minute + hour: this.hour, + minute: this.minute }); }, + /** + * Set selectable range + * @param {Object} begin - Contain begin hour and minute of range + * @param {number} begin.hour - begin hour of range + * @param {number} begin.minute - begin minute of range + * @param {Object} [end] - Contain end hour and minute of range + * @param {number} end.hour - end hour of range + * @param {number} end.minute - end minute of range + */ + setRange: function(begin, end) { + var beginHour = begin.hour; + var beginMin = begin.minute; + var endHour, endMin; + + if (!this.isValidRange(begin, end)) { + return; + } + + if (end) { + endHour = end.hour; + endMin = end.minute; + } + + this.setRangeHour(beginHour, endHour); + this.setRangeMinute(beginHour, beginMin, endHour, endMin); + + this.applyRange(beginHour, beginMin, endHour); + }, + + /** + * Set selectable range on hour + * @param {number} begin.hour - begin hour of range + * @param {number} [end.hour] - end hour of range + * @private + */ + setRangeHour: function(beginHour, endHour) { + var disabledHours = util.getRangeArr(START_NUMBER_OF_TIME, beginHour - 1); + + if (endHour) { + disabledHours = disabledHours.concat(util.getRangeArr(endHour + 1, END_NUMBER_OF_HOUR)); + } + + this.disabledHours = disabledHours.concat(); + }, + + /** + * Set selectable range on minute + * @param {number} begin.hour - begin hour of range + * @param {number} begin.minute - begin minute of range + * @param {number} [end.hour] - end hour of range + * @param {number} [end.minute] - end minute of range + * @private + */ + setRangeMinute: function(beginHour, beginMin, endHour, endMin) { + var disabledMinRanges = []; + disabledMinRanges.push({ + begin: START_NUMBER_OF_TIME, + end: beginMin + }); + + if (endMin) { + disabledMinRanges.push({ + begin: endMin, + end: END_NUMBER_OF_MINUTE + }); + } + + if (disabledMinRanges.length > 1 && beginHour === endHour) { + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr(disabledMinRanges).concat(); + } else { + this.disabledMinutes[beginHour] = util.getDisabledMinuteArr([disabledMinRanges[0]]).concat(); + this.disabledMinutes[endHour] = util.getDisabledMinuteArr([disabledMinRanges[1]]).concat(); + } + }, + + /** + * Apply range + * @param {number} begin.hour - begin hour of range + * @param {number} begin.minute - begin minute of range + * @param {number} [end.hour] - end hour of range + * @private + */ + applyRange: function(beginHour, beginMin, endHour) { + this.setTime(beginHour, beginMin); + this.setDisabledHours(); + + if (this.showMeridiem) { + this.syncToMeridiemElements(); + + util.setDisabled(this.amEl, beginHour >= END_NUMBER_OF_HOUR_WITH_MERIDIEM); + util.setDisabled(this.pmEl, endHour < END_NUMBER_OF_HOUR_WITH_MERIDIEM); + } + }, + + /** + * Whether the given range a valid range + * @param {Object} begin - Contain begin hour and minute of range + * @param {number} begin.hour - begin hour of range + * @param {number} begin.minute - begin minute of range + * @param {Object} [end] - Contain end hour and minute of range + * @param {number} end.hour - end hour of range + * @param {number} end.minute - end minute of range + * @returns {boolean} result of range validation + * @private + */ + isValidRange: function(begin, end) { + var beginHour = begin.hour; + var beginMin = begin.minute; + var endHour, endMin; + + if (!this.isValidTime(beginHour, beginMin)) { + return false; + } + + if (!end) { + return true; + } + + endHour = end.hour; + endMin = end.minute; + + return this.isValidTime(endHour, endMin) && this.compareTimes(begin, end) > 0; + }, + + /** + * Whether the given time a valid time + * @param {number} hour - hour for validation + * @param {number} minute - minute for validation + * @returns {boolean} result of time validation + * @private + */ + isValidTime: function(hour, minute) { + return hour >= START_NUMBER_OF_TIME && + hour <= END_NUMBER_OF_HOUR && + minute >= START_NUMBER_OF_TIME && + minute <= END_NUMBER_OF_MINUTE; + }, + + /** + * Compare two times + * it returns + * 0: when begin equals end + * positive: when end later than begin + * negative: when begin later than end + * @param {Object} begin - Contain begin hour and minute of range + * @param {number} begin.hour - begin hour of range + * @param {number} begin.minute - begin minute of range + * @param {Object} end - Contain end hour and minute of range + * @param {number} end.hour - end hour of range + * @param {number} end.minute - end minute of range + * @returns {boolean} result of range validation + * @private + */ + compareTimes: function(begin, end) { + var first = new Date(0); + var second = new Date(0); + + first.setHours(begin.hour, begin.minute); + second.setHours(end.hour, end.minute); + + return second.getTime() - first.getTime(); + }, + /** * Get hour * @returns {number} hour - (0~23) */ getHour: function() { - return this._hour; + return this.hour; }, /** @@ -2736,7 +2980,7 @@ var TimePicker = defineClass( * @returns {number} minute */ getMinute: function() { - return this._minute; + return this.minute; }, /** @@ -2744,28 +2988,28 @@ var TimePicker = defineClass( * @param {string} language - Language code */ changeLanguage: function(language) { - this._localeText = localeTexts[language]; - this._render(); + this.localeText = localeTexts[language]; + this.render(); }, /** * Destroy */ destroy: function() { - this._removeEvents(); - removeElement(this._element); - - this._container - = this._showMeridiem - = this._hourInput - = this._minuteInput - = this._hour - = this._minute - = this._inputType - = this._element - = this._meridiemElement - = this._amEl - = this._pmEl + this.removeEvents(); + removeElement(this.element); + + this.container + = this.showMeridiem + = this.hourInput + = this.minuteInput + = this.hour + = this.minute + = this.inputType + = this.element + = this.meridiemElement + = this.amEl + = this.pmEl = null; } } @@ -3091,7 +3335,7 @@ module.exports = matches; -var forEachArray = __webpack_require__(3); +var forEachArray = __webpack_require__(1); /** * Transform the Array-like object to Array. @@ -3143,7 +3387,7 @@ module.exports = toArray; -var forEachArray = __webpack_require__(3); +var forEachArray = __webpack_require__(1); var inArray = __webpack_require__(0); var getClass = __webpack_require__(18); var setClassName = __webpack_require__(19); @@ -3220,10 +3464,10 @@ module.exports = isNumber; var inArray = __webpack_require__(0); -var forEachArray = __webpack_require__(3); +var forEachArray = __webpack_require__(1); var CustomEvents = __webpack_require__(8); var defineClass = __webpack_require__(9); -var extend = __webpack_require__(1); +var extend = __webpack_require__(2); var on = __webpack_require__(10); var off = __webpack_require__(11); var closest = __webpack_require__(12); @@ -3698,7 +3942,7 @@ module.exports = function(context) { var inArray = __webpack_require__(0); var CustomEvents = __webpack_require__(8); var defineClass = __webpack_require__(9); -var extend = __webpack_require__(1); +var extend = __webpack_require__(2); var on = __webpack_require__(10); var off = __webpack_require__(11); var closest = __webpack_require__(12); diff --git a/dist/tui-time-picker.min.css b/dist/tui-time-picker.min.css index 2b69607..6edca33 100644 --- a/dist/tui-time-picker.min.css +++ b/dist/tui-time-picker.min.css @@ -1,6 +1,6 @@ /*! * TOAST UI Time Picker - * @version 2.0.3 + * @version 2.1.0 * @author NHN FE Development Lab * @license MIT */.tui-timepicker *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tui-timepicker button{border-radius:0}.tui-timepicker input,.tui-timepicker select{font-weight:400}.tui-ico-colon,.tui-ico-t-btn,.tui-ico-time,.tui-timepicker-input-radio{overflow:hidden;display:inline-block;width:1px;height:1px;line-height:300px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAA+CAYAAAC7rUKSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpERjdGMzkzODVEQkRFNjExQkVCMjlDOUFDNzZDM0E5NCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1ODVCRTc4NkM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1ODVCRTc4NUM2QkQxMUU2OTgzMzhGQjZFMjcyMTQ1RSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjFERENDMTc0QjlDNkU2MTE5OTc0QjIwOTY3QkQzNjZBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkRGN0YzOTM4NURCREU2MTFCRUIyOUM5QUM3NkMzQTk0Ii8+IDwvcmRmOkRlc2NyaXB0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) no-repeat}.tui-timepicker .tui-timepicker-select{-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;border-radius:0}.tui-timepicker .tui-timepicker-select::-ms-expand{display:none}.tui-calendar-select-content .tui-timepicker{border:0;margin:0 auto}.tui-timepicker input{font-size:16px;text-align:center;font-weight:400}.tui-timepicker{position:relative;top:-1px;padding:30px 20px;font-weight:700;border:1px solid #aaa;background:#fff;text-align:center}.tui-timepicker-row{width:100%;font-size:0}.tui-timepicker-column{display:inline-block;vertical-align:middle}.tui-timepicker-btn-area{position:relative;height:88px;padding:19px 0}.tui-timepicker-spinbox{width:52px}.tui-timepicker-selectbox+.tui-timepicker-selectbox{padding-left:5px}.tui-timepicker-btn-area .tui-timepicker-spinbox-input{width:100%;height:100%;line-height:46px;border:1px solid #ddd}.tui-timepicker-btn{position:absolute;left:0;width:100%;height:20px;background-color:transparent;border:1px solid #ddd;cursor:pointer}.tui-timepicker-btn:active,.tui-timepicker-btn:focus,.tui-timepicker-btn:hover{background-color:#f4f4f4}.tui-timepicker-btn-up{top:0}.tui-timepicker-btn-down{bottom:0}.tui-timepicker-btn .tui-ico-t-btn{width:13px;height:7px}.tui-timepicker-btn-up .tui-ico-t-btn{background-position:0 -12px}.tui-timepicker-btn-down .tui-ico-t-btn{background-position:0 -21px}.tui-timepicker-colon{width:22px}.tui-timepicker-body .tui-timepicker-colon,.tui-timepicker-footer .tui-timepicker-colon{width:18px}.tui-ico-colon{width:2px;height:7px;background-position:-17px -28px}.tui-timepicker-select{width:52px;height:28px;padding:5px 0 5px 9px;font-size:12px;border:1px solid #ddd;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAECAYAAACHtL/sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Mzk1NDA2RTVCREIxMTFFNjhENTJFMjdDNDQ3RDJCMTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mzk1NDA2RTZCREIxMTFFNjhENTJFMjdDNDQ3RDJCMTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozOTU0MDZFM0JEQjExMUU2OEQ1MkUyN0M0NDdEMkIxMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozOTU0MDZFNEJEQjExMUU2OEQ1MkUyN0M0NDdEMkIxMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpZ5HPgAAAAxSURBVHjaYjQ2Nv7PgBswgogzZ87gVMAEU4RLMyHABKUFyNGMbMBHJEOI1gwCAAEGAPSlBRrNcMApAAAAAElFTkSuQmCC) no-repeat;background-position:100% 50%;cursor:pointer}.tui-timepicker-check-lst{list-style:none;padding:0;margin:0}.tui-timepicker-check{margin-top:11px}.tui-timepicker-check:first-child{margin-top:0}.tui-timepicker-checkbox{padding-left:16px}.tui-timepicker-radio{overflow:hidden;position:relative;text-align:left}.tui-timepicker-radio input{position:absolute;left:-9999px;width:1px;height:1px}.tui-timepicker-radio-label{display:inline-block;padding-left:20px;font-size:12px;line-height:16px;vertical-align:top;color:#777;cursor:pointer}.tui-timepicker-input-radio{position:absolute;display:block;top:0;left:0;width:16px;height:16px;vertical-align:middle;background-position:-31px 0}.tui-timepicker-radio .tui-timepicker-meridiem-checked+.tui-timepicker-radio-label .tui-timepicker-input-radio{background-position:-31px -18px}.tui-timepicker-radio input:disabled+.tui-timepicker-radio-label .tui-timepicker-input-radio{background-position:-31px -36px}.tui-ico-time{width:12px;height:12px;background-position:0 -30px}.tui-time-input,.tui-timepicker-area{position:relative}.tui-time-input{display:inline-block;width:120px;height:28px;border:1px solid #ddd}.tui-time-input input{width:100%;height:100%;padding:0 27px 0 10px;font-size:12px;border:0;color:#333;box-sizing:border-box}.tui-time-input .tui-ico-time{position:absolute;top:50%;right:8px;margin:-6px 0 0}.tui-time-input.tui-has-focus{border-color:#aaa}.tui-time-input .tui-ico-time{background-position:0 -30px}.tui-time-input.tui-has-focus .tui-ico-time{background-position:0 -44px}.tui-has-left.tui-timepicker-body,.tui-has-left .tui-timepicker-row{position:relative}.tui-has-left .tui-timepicker-row:after{display:block;clear:both;content:""}.tui-has-left .tui-is-add-picker{float:left;padding:0 5px 0 0}.tui-has-left .tui-timepicker-checkbox{float:left;margin-top:23px;padding:0 16px 0 0}.tui-hidden{display:none} \ No newline at end of file diff --git a/dist/tui-time-picker.min.js b/dist/tui-time-picker.min.js index d08a215..24e380e 100644 --- a/dist/tui-time-picker.min.js +++ b/dist/tui-time-picker.min.js @@ -1,7 +1,7 @@ /*! * TOAST UI Time Picker - * @version 2.0.3 + * @version 2.1.0 * @author NHN FE Development Lab * @license MIT */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.TimePicker=e():(t.tui=t.tui||{},t.tui.TimePicker=e())}(window,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var s=e[n]={i:n,l:!1,exports:{}};return t[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)i.d(n,s,function(e){return t[e]}.bind(null,s));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="dist",i(i.s=20)}([function(t,e,i){"use strict";var n=i(2);t.exports=function(t,e,i){var s,r;if(i=i||0,!n(e))return-1;if(Array.prototype.indexOf)return Array.prototype.indexOf.call(e,t,i);for(r=e.length,s=i;i>=0&&s-1?e[i][1]+=1:e.push([t,1]))},l.prototype._forgetContext=function(t){var e,i;s(t)&&(e=this._safeContext(),(i=this._indexOfContext(t))>-1&&(e[i][1]-=1,e[i][1]<=0&&e.splice(i,1)))},l.prototype._bindEvent=function(t,e,i){var n=this._safeEvent(t);this._memorizeContext(i),n.push(this._getHandlerItem(e,i))},l.prototype.on=function(t,e,i){var n=this;r(t)?(t=t.split(h),a(t,(function(t){n._bindEvent(t,e,i)}))):o(t)&&(i=e,a(t,(function(t,e){n.on(e,t,i)})))},l.prototype.once=function(t,e,i){var n=this;if(o(t))return i=e,void a(t,(function(t,e){n.once(e,t,i)}));this.on(t,(function s(){e.apply(i,arguments),n.off(t,s,i)}),i)},l.prototype._spliceMatches=function(t,e){var i,n=0;if(u(t))for(i=t.length;n0},l.prototype.getListenerLength=function(t){return this._safeEvent(t).length},t.exports=l},function(t,e,i){"use strict";var n=i(27),s=i(1);t.exports=function(t,e){var i;return e||(e=t,t=null),i=e.init||function(){},t&&n(i,t),e.hasOwnProperty("static")&&(s(i,e.static),delete e.static),s(i.prototype,e),i}},function(t,e,i){"use strict";var n=i(6),s=i(4),r=i(17);function o(t,e,i,n){function o(e){i.call(n||t,e||window.event)}"addEventListener"in t?t.addEventListener(e,o):"attachEvent"in t&&t.attachEvent("on"+e,o),function(t,e,i,n){var o=r(t,e),u=!1;s(o,(function(t){return t.handler!==i||(u=!0,!1)})),u||o.push({handler:i,wrappedHandler:n})}(t,e,i,o)}t.exports=function(t,e,i,r){n(e)?s(e.split(/\s+/g),(function(e){o(t,e,i,r)})):s(e,(function(e,n){o(t,n,e,i)}))}},function(t,e,i){"use strict";var n=i(6),s=i(4),r=i(17);function o(t,e,i){var n,o=r(t,e);i?(s(o,(function(s,r){return i!==s.handler||(u(t,e,s.wrappedHandler),n=r,!1)})),o.splice(n,1)):(s(o,(function(i){u(t,e,i.wrappedHandler)})),o.splice(0,o.length))}function u(t,e,i){"removeEventListener"in t?t.removeEventListener(e,i):"detachEvent"in t&&t.detachEvent("on"+e,i)}t.exports=function(t,e,i){n(e)?s(e.split(/\s+/g),(function(e){o(t,e,i)})):s(e,(function(e,i){o(t,i,e)}))}},function(t,e,i){"use strict";var n=i(30);t.exports=function(t,e){var i=t.parentNode;if(n(t,e))return t;for(;i&&i!==document;){if(n(i,e))return i;i=i.parentNode}return null}},function(t,e,i){"use strict";t.exports=function(t){t&&t.parentNode&&t.parentNode.removeChild(t)}},function(t,e,i){"use strict";t.exports=function(t){return"object"==typeof HTMLElement?t&&(t instanceof HTMLElement||!!t.nodeType):!(!t||!t.nodeType)}},function(t,e,i){"use strict";var n=i(0),s=i(35),r=0,o={getUniqueId:function(){return r+=1},formatTime:function(t,e){return t=String(t),n(e,["hh","mm"])>=0&&1===t.length?"0"+t:t},getMeridiemHour:function(t){return 0===(t%=12)&&(t=12),t},getRangeArr:function(t,e,i){var n,s=[];if(i=i||1,t>e)for(n=e;n>=t;n-=i)s.push(n);else for(n=t;n<=e;n+=i)s.push(n);return s},getTarget:function(t){return t.target||t.srcElement},sendHostName:function(){s("time-picker","UA-129987462-1")}};t.exports=o},function(t,e,i){"use strict";t.exports=function(t,e,i){var n;for(n in i=i||null,t)if(t.hasOwnProperty(n)&&!1===e.call(i,t[n],n,t))break}},function(t,e,i){"use strict";var n="_feEventKey";t.exports=function(t,e){var i,s=t[n];return s||(s=t[n]={}),(i=s[e])||(i=s[e]=[]),i}},function(t,e,i){"use strict";var n=i(5);t.exports=function(t){return t&&t.className?n(t.className.baseVal)?t.className:t.className.baseVal:""}},function(t,e,i){"use strict";var n=i(2),s=i(5);t.exports=function(t,e){e=(e=n(e)?e.join(" "):e).replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),s(t.className.baseVal)?t.className=e:t.className.baseVal=e}},function(t,e,i){"use strict";i(21),t.exports=i(22)},function(t,e,i){},function(t,e,i){"use strict";var n=i(0),s=i(3),r=i(8),o=i(9),u=i(1),c=i(10),a=i(11),h=i(29),l=i(12),m=i(13),p=i(32),f=i(14),d=i(33),_=i(34),v=i(38),x=i(15),g=i(40),y=i(41),b=i(42),I=o({static:{localeTexts:g},init:function(t,e){e=function(t){return u({language:"en",initialHour:0,initialMinute:0,showMeridiem:!0,inputType:"selectbox",hourStep:1,minuteStep:1,meridiemPosition:"right",format:"h:m",disabledHours:[],usageStatistics:!0},t)}(e),this._id=x.getUniqueId(),this._container=f(t)?t:document.querySelector(t),this._element=null,this._meridiemElement=null,this._amEl=null,this._pmEl=null,this._showMeridiem=e.showMeridiem,this._meridiemPosition=e.meridiemPosition,this._hourInput=null,this._minuteInput=null,this._hour=e.initialHour,this._minute=e.initialMinute,this._hourStep=e.hourStep,this._minuteStep=e.minuteStep,this._disabledHours=e.disabledHours,this._inputType=e.inputType,this._localeText=g[e.language],this._format=this._getValidTimeFormat(e.format),this._render(),this._setEvents(),e.usageStatistics&&x.sendHostName()},_setEvents:function(){this._hourInput.on("change",this._onChangeTimeInput,this),this._minuteInput.on("change",this._onChangeTimeInput,this),this._showMeridiem&&("selectbox"===this._inputType?c(this._meridiemElement.querySelector("select"),"change",this._onChangeMeridiem,this):"spinbox"===this._inputType&&c(this._meridiemElement,"click",this._onChangeMeridiem,this))},_removeEvents:function(){this.off(),this._hourInput.destroy(),this._minuteInput.destroy(),this._showMeridiem&&("selectbox"===this._inputType?a(this._meridiemElement.querySelector("select"),"change",this._onChangeMeridiem,this):"spinbox"===this._inputType&&a(this._meridiemElement,"click",this._onChangeMeridiem,this))},_render:function(){var t={showMeridiem:this._showMeridiem,isSpinbox:"spinbox"===this._inputType};this._showMeridiem&&u(t,{meridiemElement:this._makeMeridiemHTML()}),this._element&&m(this._element),this._container.innerHTML=y(t),this._element=this._container.firstChild,this._renderTimeInputs(),this._showMeridiem&&this._setMeridiemElement()},_setMeridiemElement:function(){"left"===this._meridiemPosition&&h(this._element,"tui-has-left"),this._meridiemElement=this._element.querySelector(".tui-timepicker-meridiem"),this._amEl=this._meridiemElement.querySelector('[value="AM"]'),this._pmEl=this._meridiemElement.querySelector('[value="PM"]'),this._syncToMeridiemElements()},_makeMeridiemHTML:function(){var t=this._localeText;return b({am:t.am,pm:t.pm,radioId:this._id,isSpinbox:"spinbox"===this._inputType})},_renderTimeInputs:function(){var t=this._hour,e=this._showMeridiem,i=this._element.querySelector(".tui-timepicker-hour"),n=this._element.querySelector(".tui-timepicker-minute"),s="selectbox"===this._inputType.toLowerCase()?v:_,r=this._format.split(":"),o=this._getHourItems();e&&(t=x.getMeridiemHour(t)),this._hourInput=new s(i,{initialValue:t,items:o,format:r[0],disabledItems:this._makeDisabledStatItems(o)}),this._minuteInput=new s(n,{initialValue:this._minute,items:this._getMinuteItems(),format:r[1]})},_makeDisabledStatItems:function(t){var e=[],i=this._disabledHours.concat();return this._showMeridiem&&(i=this._meridiemableTime(i)),s(t,(function(t){e.push(n(t,i)>=0)})),e},_meridiemableTime:function(t){var e=0,i=0,n=11,r=[];return this._hour>=12&&(e=12,i=12,n=23),s(t,(function(t){t>=i&&t<=n&&r.push(t-e==0?12:t-e)})),r},_getValidTimeFormat:function(t){return t.match(/^[h]{1,2}:[m]{1,2}$/i)?t.toLowerCase():"h:m"},_syncToMeridiemElements:function(){var t=this._hour>=12?this._pmEl:this._amEl,e=t===this._pmEl?this._amEl:this._pmEl;t.setAttribute("selected",!0),t.setAttribute("checked",!0),h(t,"tui-timepicker-meridiem-checked"),e.removeAttribute("selected"),e.removeAttribute("checked"),p(e,"tui-timepicker-meridiem-checked")},_syncToInputs:function(){var t=this._hour,e=this._minute;this._showMeridiem&&(t=x.getMeridiemHour(t)),this._hourInput.setValue(t),this._minuteInput.setValue(e)},_onChangeMeridiem:function(t){var e=this._hour,i=x.getTarget(t);i.value&&l(i,".tui-timepicker-meridiem")&&(e=this._to24Hour("PM"===i.value,e),this.setTime(e,this._minute),this._setDisabledHours())},_onChangeTimeInput:function(){var t=this._hourInput.getValue(),e=this._minuteInput.getValue(),i=this._hour>=12;this._showMeridiem&&(t=this._to24Hour(i,t)),this.setTime(t,e)},_to24Hour:function(t,e){return e%=12,t&&(e+=12),e},_setDisabledHours:function(){var t=this._getHourItems(),e=this._makeDisabledStatItems(t);this._hourInput.setDisabledItems(e)},_getHourItems:function(){var t=this._hourStep;return this._showMeridiem?x.getRangeArr(1,12,t):x.getRangeArr(0,23,t)},_getMinuteItems:function(){return x.getRangeArr(0,59,this._minuteStep)},_validItems:function(t,e){return!(!d(t)||!d(e))&&(this._showMeridiem&&(t=x.getMeridiemHour(t)),n(t,this._getHourItems())>-1&&n(e,this._getMinuteItems())>-1)},setHourStep:function(t){this._hourStep=t,this._hourInput.fire("changeItems",this._getHourItems())},getHourStep:function(){return this._hourStep},setMinuteStep:function(t){this._minuteStep=t,this._minuteInput.fire("changeItems",this._getMinuteItems())},getMinuteStep:function(){return this._minuteStep},show:function(){p(this._element,"tui-hidden")},hide:function(){h(this._element,"tui-hidden")},setHour:function(t){return this.setTime(t,this._minute)},setMinute:function(t){return this.setTime(this._hour,t)},setTime:function(t,e){this._validItems(t,e)&&(this._hour=t,this._minute=e,this._syncToInputs(),this._showMeridiem&&this._syncToMeridiemElements(),this.fire("change",{hour:this._hour,minute:this._minute}))},getHour:function(){return this._hour},getMinute:function(){return this._minute},changeLanguage:function(t){this._localeText=g[t],this._render()},destroy:function(){this._removeEvents(),m(this._element),this._container=this._showMeridiem=this._hourInput=this._minuteInput=this._hour=this._minute=this._inputType=this._element=this._meridiemElement=this._amEl=this._pmEl=null}});r.mixin(I),t.exports=I},function(t,e,i){"use strict";var n=i(5),s=i(24);t.exports=function(t){return!n(t)&&!s(t)}},function(t,e,i){"use strict";t.exports=function(t){return null===t}},function(t,e,i){"use strict";t.exports=function(t){return t===Object(t)}},function(t,e,i){"use strict";t.exports=function(t){return t instanceof Function}},function(t,e,i){"use strict";var n=i(28);t.exports=function(t,e){var i=n(e.prototype);i.constructor=t,t.prototype=i}},function(t,e,i){"use strict";t.exports=function(t){function e(){}return e.prototype=t,new e}},function(t,e,i){"use strict";var n=i(4),s=i(0),r=i(18),o=i(19);t.exports=function(t){var e,i=Array.prototype.slice.call(arguments,1),u=t.classList,c=[];u?n(i,(function(e){t.classList.add(e)})):((e=r(t))&&(i=[].concat(e.split(/\s+/),i)),n(i,(function(t){s(t,c)<0&&c.push(t)})),o(t,c))}},function(t,e,i){"use strict";var n=i(0),s=i(31),r=Element.prototype,o=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(t){var e=this.document||this.ownerDocument;return n(this,s(e.querySelectorAll(t)))>-1};t.exports=function(t,e){return o.call(t,e)}},function(t,e,i){"use strict";var n=i(3);t.exports=function(t){var e;try{e=Array.prototype.slice.call(t)}catch(i){e=[],n(t,(function(t){e.push(t)}))}return e}},function(t,e,i){"use strict";var n=i(3),s=i(0),r=i(18),o=i(19);t.exports=function(t){var e,i,u=Array.prototype.slice.call(arguments,1),c=t.classList;c?n(u,(function(t){c.remove(t)})):(e=r(t).split(/\s+/),i=[],n(e,(function(t){s(t,u)<0&&i.push(t)})),o(t,i))}},function(t,e,i){"use strict";t.exports=function(t){return"number"==typeof t||t instanceof Number}},function(t,e,i){"use strict";var n=i(0),s=i(3),r=i(8),o=i(9),u=i(1),c=i(10),a=i(11),h=i(12),l=i(13),m=i(14),p=i(15),f=i(37),d=o({init:function(t,e){e=u({items:[]},e),this._container=m(t)?t:document.querySelector(t),this._element=null,this._inputElement=null,this._items=e.items,this._disabledItems=e.disabledItems||[],this._selectedIndex=Math.max(0,n(e.initialValue,this._items)),this._format=e.format,this._render(),this._setEvents()},_render:function(){var t,e=n(this.getValue(),this._items);this._disabledItems[e]&&(this._selectedIndex=this._findEnabledIndex()),t={maxLength:this._getMaxLength(),initialValue:this.getValue(),format:this._format,formatTime:p.formatTime},this._container.innerHTML=f(t),this._element=this._container.firstChild,this._inputElement=this._element.querySelector("input")},_findEnabledIndex:function(){return n(!1,this._disabledItems)},_getMaxLength:function(){var t=[];return s(this._items,(function(e){t.push(String(e).length)})),Math.max.apply(null,t)},setDisabledItems:function(t){this._disabledItems=t,this._changeToInputValue()},_setEvents:function(){c(this._container,"click",this._onClickHandler,this),c(this._inputElement,"keydown",this._onKeydownInputElement,this),c(this._inputElement,"change",this._onChangeHandler,this),this.on("changeItems",(function(t){this._items=t,this._render()}),this)},_removeEvents:function(){this.off(),a(this._container,"click",this._onClickHandler,this),a(this._inputElement,"keydown",this._onKeydownInputElement,this),a(this._inputElement,"change",this._onChangeHandler,this)},_onClickHandler:function(t){var e=p.getTarget(t);h(e,".tui-timepicker-btn-down")?this._setNextValue(!0):h(e,".tui-timepicker-btn-up")&&this._setNextValue(!1)},_setNextValue:function(t){var e=this._selectedIndex;e=t?e?e-1:this._items.length-1:er}(u)||(window.localStorage.setItem(o,(new Date).getTime()),setTimeout((function(){"interactive"!==document.readyState&&"complete"!==document.readyState||s("https://www.google-analytics.com/collect",{v:1,t:"event",tid:e,cid:i,dp:i,dh:t,el:t,ec:"use"})}),1e3)))}},function(t,e,i){"use strict";var n=i(16);t.exports=function(t,e){var i=document.createElement("img"),s="";return n(e,(function(t,e){s+="&"+e+"="+t})),s=s.substring(1),i.src=t+"?"+s,i.style.display="none",document.body.appendChild(i),document.body.removeChild(i),i}},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('
',t)}},function(t,e,i){"use strict";var n=i(0),s=i(8),r=i(9),o=i(1),u=i(10),c=i(11),a=i(12),h=i(13),l=i(14),m=i(15),p=i(39),f=r({init:function(t,e){e=o({items:[]},e),this._container=l(t)?t:document.querySelector(t),this._items=e.items||[],this._disabledItems=e.disabledItems||[],this._selectedIndex=Math.max(0,n(e.initialValue,this._items)),this._format=e.format,this._element=null,this._render(),this._setEvents()},_render:function(){var t;this._changeEnabledIndex(),t={items:this._items,format:this._format,initialValue:this.getValue(),disabledItems:this._disabledItems,formatTime:m.formatTime,equals:function(t,e){return t===e}},this._element&&this._removeElement(),this._container.innerHTML=p(t),this._element=this._container.firstChild,u(this._element,"change",this._onChangeHandler,this)},_changeEnabledIndex:function(){var t=n(this.getValue(),this._items);this._disabledItems[t]&&(this._selectedIndex=n(!1,this._disabledItems))},setDisabledItems:function(t){this._disabledItems=t,this._render()},_setEvents:function(){this.on("changeItems",(function(t){this._items=t,this._render()}),this)},_removeEvents:function(){this.off()},_removeElement:function(){c(this._element,"change",this._onChangeHandler,this),h(this._element)},_onChangeHandler:function(t){a(m.getTarget(t),"select")&&this._setNewValue()},_setNewValue:function(){var t=Number(this._element.value);this._selectedIndex=n(t,this._items),this.fire("change",{value:t})},getValue:function(){return this._items[this._selectedIndex]},setValue:function(t){var e=n(t,this._items);e>-1&&e!==this._selectedIndex&&(this._selectedIndex=e,this._element.value=t,this._setNewValue())},destroy:function(){this._removeEvents(),this._removeElement(),this._container=this._items=this._selectedIndex=this._element=null}});s.mixin(f),t.exports=f},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('',t)}},function(t,e,i){"use strict";t.exports={en:{am:"AM",pm:"PM"},ko:{am:"오전",pm:"오후"}}},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('
{{if isSpinbox}}
:
{{if showMeridiem}} {{meridiemElement}} {{/if}} {{else}}
:
{{if showMeridiem}} {{meridiemElement}} {{/if}} {{/if}}
',t)}},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('{{if isSpinbox}}
{{else}}
{{/if}}',t)}}])})); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.TimePicker=e():(t.tui=t.tui||{},t.tui.TimePicker=e())}(window,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var s=e[n]={i:n,l:!1,exports:{}};return t[n].call(s.exports,s,s.exports,i),s.l=!0,s.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)i.d(n,s,function(e){return t[e]}.bind(null,s));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="dist",i(i.s=20)}([function(t,e,i){"use strict";var n=i(3);t.exports=function(t,e,i){var s,r;if(i=i||0,!n(e))return-1;if(Array.prototype.indexOf)return Array.prototype.indexOf.call(e,t,i);for(r=e.length,s=i;i>=0&&s-1?e[i][1]+=1:e.push([t,1]))},l.prototype._forgetContext=function(t){var e,i;s(t)&&(e=this._safeContext(),(i=this._indexOfContext(t))>-1&&(e[i][1]-=1,e[i][1]<=0&&e.splice(i,1)))},l.prototype._bindEvent=function(t,e,i){var n=this._safeEvent(t);this._memorizeContext(i),n.push(this._getHandlerItem(e,i))},l.prototype.on=function(t,e,i){var n=this;r(t)?(t=t.split(h),c(t,(function(t){n._bindEvent(t,e,i)}))):o(t)&&(i=e,c(t,(function(t,e){n.on(e,t,i)})))},l.prototype.once=function(t,e,i){var n=this;if(o(t))return i=e,void c(t,(function(t,e){n.once(e,t,i)}));this.on(t,(function s(){e.apply(i,arguments),n.off(t,s,i)}),i)},l.prototype._spliceMatches=function(t,e){var i,n=0;if(u(t))for(i=t.length;n0},l.prototype.getListenerLength=function(t){return this._safeEvent(t).length},t.exports=l},function(t,e,i){"use strict";var n=i(27),s=i(2);t.exports=function(t,e){var i;return e||(e=t,t=null),i=e.init||function(){},t&&n(i,t),e.hasOwnProperty("static")&&(s(i,e.static),delete e.static),s(i.prototype,e),i}},function(t,e,i){"use strict";var n=i(6),s=i(4),r=i(17);function o(t,e,i,n){function o(e){i.call(n||t,e||window.event)}"addEventListener"in t?t.addEventListener(e,o):"attachEvent"in t&&t.attachEvent("on"+e,o),function(t,e,i,n){var o=r(t,e),u=!1;s(o,(function(t){return t.handler!==i||(u=!0,!1)})),u||o.push({handler:i,wrappedHandler:n})}(t,e,i,o)}t.exports=function(t,e,i,r){n(e)?s(e.split(/\s+/g),(function(e){o(t,e,i,r)})):s(e,(function(e,n){o(t,n,e,i)}))}},function(t,e,i){"use strict";var n=i(6),s=i(4),r=i(17);function o(t,e,i){var n,o=r(t,e);i?(s(o,(function(s,r){return i!==s.handler||(u(t,e,s.wrappedHandler),n=r,!1)})),o.splice(n,1)):(s(o,(function(i){u(t,e,i.wrappedHandler)})),o.splice(0,o.length))}function u(t,e,i){"removeEventListener"in t?t.removeEventListener(e,i):"detachEvent"in t&&t.detachEvent("on"+e,i)}t.exports=function(t,e,i){n(e)?s(e.split(/\s+/g),(function(e){o(t,e,i)})):s(e,(function(e,i){o(t,i,e)}))}},function(t,e,i){"use strict";var n=i(30);t.exports=function(t,e){var i=t.parentNode;if(n(t,e))return t;for(;i&&i!==document;){if(n(i,e))return i;i=i.parentNode}return null}},function(t,e,i){"use strict";t.exports=function(t){t&&t.parentNode&&t.parentNode.removeChild(t)}},function(t,e,i){"use strict";t.exports=function(t){return"object"==typeof HTMLElement?t&&(t instanceof HTMLElement||!!t.nodeType):!(!t||!t.nodeType)}},function(t,e,i){"use strict";var n=i(0),s=i(1),r=i(35),o=0,u={getUniqueId:function(){return o+=1},formatTime:function(t,e){return t=String(t),n(e,["hh","mm"])>=0&&1===t.length?"0"+t:t},getMeridiemHour:function(t){return 0===(t%=12)&&(t=12),t},getRangeArr:function(t,e,i){var n,s=[];if(i=i||1,t>e)for(n=e;n>=t;n-=i)s.push(n);else for(n=t;n<=e;n+=i)s.push(n);return s},fill:function(t,e,i,n){var s,r=n||[],o=Math.min(r.length-1,e);for(s=t;s<=o;s+=1)r[s]=i;for(s=o;s<=e;s+=1)r.push(i);return r},getTarget:function(t){return t.target||t.srcElement},sendHostName:function(){r("time-picker","UA-129987462-1")},getDisabledMinuteArr:function(t){var e=this.fill(0,60,!1);return s(t,function(t){e=this.fill(t.begin,t.end,!0,e)}.bind(this)),e},setDisabled:function(t,e){t.disabled=e}};t.exports=u},function(t,e,i){"use strict";t.exports=function(t,e,i){var n;for(n in i=i||null,t)if(t.hasOwnProperty(n)&&!1===e.call(i,t[n],n,t))break}},function(t,e,i){"use strict";t.exports=function(t,e){var i,n=t._feEventKey;return n||(n=t._feEventKey={}),(i=n[e])||(i=n[e]=[]),i}},function(t,e,i){"use strict";var n=i(5);t.exports=function(t){return t&&t.className?n(t.className.baseVal)?t.className:t.className.baseVal:""}},function(t,e,i){"use strict";var n=i(3),s=i(5);t.exports=function(t,e){e=(e=n(e)?e.join(" "):e).replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),s(t.className.baseVal)?t.className=e:t.className.baseVal=e}},function(t,e,i){"use strict";i(21),t.exports=i(22)},function(t,e,i){},function(t,e,i){"use strict";var n=i(0),s=i(1),r=i(8),o=i(9),u=i(2),a=i(10),c=i(11),h=i(29),l=i(12),m=i(13),p=i(32),f=i(14),d=i(33),v=i(34),_=i(38),g=i(15),x=i(40),b=i(41),y=i(42),I=o({static:{localeTexts:x},init:function(t,e){e=function(t){return u({language:"en",initialHour:0,initialMinute:0,showMeridiem:!0,inputType:"selectbox",hourStep:1,minuteStep:1,meridiemPosition:"right",format:"h:m",disabledHours:[],disabledMinutes:{},usageStatistics:!0},t)}(e),this.id=g.getUniqueId(),this.container=f(t)?t:document.querySelector(t),this.element=null,this.meridiemElement=null,this.amEl=null,this.pmEl=null,this.showMeridiem=e.showMeridiem,this.meridiemPosition=e.meridiemPosition,this.hourInput=null,this.minuteInput=null,this.hour=e.initialHour,this.minute=e.initialMinute,this.hourStep=e.hourStep,this.minuteStep=e.minuteStep,this.disabledHours=e.disabledHours,this.disabledMinutes=e.disabledMinutes,this.inputType=e.inputType,this.localeText=x[e.language],this.format=this.getValidTimeFormat(e.format),this.render(),this.setEvents(),e.usageStatistics&&g.sendHostName()},setEvents:function(){this.hourInput.on("change",this.onChangeTimeInput,this),this.minuteInput.on("change",this.onChangeTimeInput,this),this.showMeridiem&&("selectbox"===this.inputType?a(this.meridiemElement.querySelector("select"),"change",this.onChangeMeridiem,this):"spinbox"===this.inputType&&a(this.meridiemElement,"click",this.onChangeMeridiem,this))},removeEvents:function(){this.off(),this.hourInput.destroy(),this.minuteInput.destroy(),this.showMeridiem&&("selectbox"===this.inputType?c(this.meridiemElement.querySelector("select"),"change",this.onChangeMeridiem,this):"spinbox"===this.inputType&&c(this.meridiemElement,"click",this.onChangeMeridiem,this))},render:function(){var t={showMeridiem:this.showMeridiem,isSpinbox:"spinbox"===this.inputType};this.showMeridiem&&u(t,{meridiemElement:this.makeMeridiemHTML()}),this.element&&m(this.element),this.container.innerHTML=b(t),this.element=this.container.firstChild,this.renderTimeInputs(),this.showMeridiem&&this.setMeridiemElement()},setMeridiemElement:function(){"left"===this.meridiemPosition&&h(this.element,"tui-has-left"),this.meridiemElement=this.element.querySelector(".tui-timepicker-meridiem"),this.amEl=this.meridiemElement.querySelector('[value="AM"]'),this.pmEl=this.meridiemElement.querySelector('[value="PM"]'),this.syncToMeridiemElements()},makeMeridiemHTML:function(){var t=this.localeText;return y({am:t.am,pm:t.pm,radioId:this.id,isSpinbox:"spinbox"===this.inputType})},renderTimeInputs:function(){var t=this.hour,e=this.showMeridiem,i=this.element.querySelector(".tui-timepicker-hour"),n=this.element.querySelector(".tui-timepicker-minute"),s="selectbox"===this.inputType.toLowerCase()?_:v,r=this.format.split(":"),o=this.getHourItems();e&&(t=g.getMeridiemHour(t)),this.hourInput=new s(i,{initialValue:t,items:o,format:r[0],disabledItems:this.makeDisabledStatItems(o)}),this.minuteInput=new s(n,{initialValue:this.minute,items:this.getMinuteItems(),format:r[1]})},makeDisabledStatItems:function(t){var e=[],i=this.disabledHours.concat();return this.showMeridiem&&(i=this.meridiemableTime(i)),s(t,(function(t){e.push(n(t,i)>=0)})),e},meridiemableTime:function(t){var e=0,i=0,n=11,r=[];return this.hour>=12&&(e=12,i=12,n=23),s(t,(function(t){t>=i&&t<=n&&r.push(t-e==0?12:t-e)})),r},getValidTimeFormat:function(t){return t.match(/^[h]{1,2}:[m]{1,2}$/i)?t.toLowerCase():"h:m"},syncToMeridiemElements:function(){var t=this.hour>=12?this.pmEl:this.amEl,e=t===this.pmEl?this.amEl:this.pmEl;t.setAttribute("selected",!0),t.setAttribute("checked",!0),h(t,"tui-timepicker-meridiem-checked"),e.removeAttribute("selected"),e.removeAttribute("checked"),p(e,"tui-timepicker-meridiem-checked")},syncToInputs:function(){var t=this.hour,e=this.minute;this.showMeridiem&&(t=g.getMeridiemHour(t)),this.hourInput.setValue(t),this.minuteInput.setValue(e)},onChangeMeridiem:function(t){var e=this.hour,i=g.getTarget(t);i.value&&l(i,".tui-timepicker-meridiem")&&(e=this.to24Hour("PM"===i.value,e),this.setTime(e,this.minute),this.setDisabledHours(),this.setDisabledMinutes(e))},onChangeTimeInput:function(){var t=this.hourInput.getValue(),e=this.minuteInput.getValue(),i=this.hour>=12;this.showMeridiem&&(t=this.to24Hour(i,t)),this.setTime(t,e),this.setDisabledMinutes(t)},to24Hour:function(t,e){return e%=12,t&&(e+=12),e},setDisabledHours:function(){var t=this.getHourItems(),e=this.makeDisabledStatItems(t);this.hourInput.setDisabledItems(e)},setDisabledMinutes:function(t){var e;e=this.disabledMinutes[t]||[],this.minuteInput.setDisabledItems(e)},getHourItems:function(){var t=this.hourStep;return this.showMeridiem?g.getRangeArr(1,12,t):g.getRangeArr(0,23,t)},getMinuteItems:function(){return g.getRangeArr(0,59,this.minuteStep)},validItems:function(t,e){return!(!d(t)||!d(e))&&(this.showMeridiem&&(t=g.getMeridiemHour(t)),n(t,this.getHourItems())>-1&&n(e,this.getMinuteItems())>-1)},setHourStep:function(t){this.hourStep=t,this.hourInput.fire("changeItems",this.getHourItems())},getHourStep:function(){return this.hourStep},setMinuteStep:function(t){this.minuteStep=t,this.minuteInput.fire("changeItems",this.getMinuteItems())},getMinuteStep:function(){return this.minuteStep},show:function(){p(this.element,"tui-hidden")},hide:function(){h(this.element,"tui-hidden")},setHour:function(t){return this.setTime(t,this.minute)},setMinute:function(t){return this.setTime(this.hour,t)},setTime:function(t,e){this.validItems(t,e)&&(this.hour=t,this.minute=e,this.syncToInputs(),this.showMeridiem&&this.syncToMeridiemElements(),this.fire("change",{hour:this.hour,minute:this.minute}))},setRange:function(t,e){var i,n,s=t.hour,r=t.minute;this.isValidRange(t,e)&&(e&&(i=e.hour,n=e.minute),this.setRangeHour(s,i),this.setRangeMinute(s,r,i,n),this.applyRange(s,r,i))},setRangeHour:function(t,e){var i=g.getRangeArr(0,t-1);e&&(i=i.concat(g.getRangeArr(e+1,23))),this.disabledHours=i.concat()},setRangeMinute:function(t,e,i,n){var s=[];s.push({begin:0,end:e}),n&&s.push({begin:n,end:59}),s.length>1&&t===i?this.disabledMinutes[t]=g.getDisabledMinuteArr(s).concat():(this.disabledMinutes[t]=g.getDisabledMinuteArr([s[0]]).concat(),this.disabledMinutes[i]=g.getDisabledMinuteArr([s[1]]).concat())},applyRange:function(t,e,i){this.setTime(t,e),this.setDisabledHours(),this.showMeridiem&&(this.syncToMeridiemElements(),g.setDisabled(this.amEl,t>=12),g.setDisabled(this.pmEl,i<12))},isValidRange:function(t,e){var i,n,s=t.hour,r=t.minute;return!!this.isValidTime(s,r)&&(!e||(i=e.hour,n=e.minute,this.isValidTime(i,n)&&this.compareTimes(t,e)>0))},isValidTime:function(t,e){return t>=0&&t<=23&&e>=0&&e<=59},compareTimes:function(t,e){var i=new Date(0),n=new Date(0);return i.setHours(t.hour,t.minute),n.setHours(e.hour,e.minute),n.getTime()-i.getTime()},getHour:function(){return this.hour},getMinute:function(){return this.minute},changeLanguage:function(t){this.localeText=x[t],this.render()},destroy:function(){this.removeEvents(),m(this.element),this.container=this.showMeridiem=this.hourInput=this.minuteInput=this.hour=this.minute=this.inputType=this.element=this.meridiemElement=this.amEl=this.pmEl=null}});r.mixin(I),t.exports=I},function(t,e,i){"use strict";var n=i(5),s=i(24);t.exports=function(t){return!n(t)&&!s(t)}},function(t,e,i){"use strict";t.exports=function(t){return null===t}},function(t,e,i){"use strict";t.exports=function(t){return t===Object(t)}},function(t,e,i){"use strict";t.exports=function(t){return t instanceof Function}},function(t,e,i){"use strict";var n=i(28);t.exports=function(t,e){var i=n(e.prototype);i.constructor=t,t.prototype=i}},function(t,e,i){"use strict";t.exports=function(t){function e(){}return e.prototype=t,new e}},function(t,e,i){"use strict";var n=i(4),s=i(0),r=i(18),o=i(19);t.exports=function(t){var e,i=Array.prototype.slice.call(arguments,1),u=t.classList,a=[];u?n(i,(function(e){t.classList.add(e)})):((e=r(t))&&(i=[].concat(e.split(/\s+/),i)),n(i,(function(t){s(t,a)<0&&a.push(t)})),o(t,a))}},function(t,e,i){"use strict";var n=i(0),s=i(31),r=Element.prototype,o=r.matches||r.webkitMatchesSelector||r.mozMatchesSelector||r.msMatchesSelector||function(t){var e=this.document||this.ownerDocument;return n(this,s(e.querySelectorAll(t)))>-1};t.exports=function(t,e){return o.call(t,e)}},function(t,e,i){"use strict";var n=i(1);t.exports=function(t){var e;try{e=Array.prototype.slice.call(t)}catch(i){e=[],n(t,(function(t){e.push(t)}))}return e}},function(t,e,i){"use strict";var n=i(1),s=i(0),r=i(18),o=i(19);t.exports=function(t){var e,i,u=Array.prototype.slice.call(arguments,1),a=t.classList;a?n(u,(function(t){a.remove(t)})):(e=r(t).split(/\s+/),i=[],n(e,(function(t){s(t,u)<0&&i.push(t)})),o(t,i))}},function(t,e,i){"use strict";t.exports=function(t){return"number"==typeof t||t instanceof Number}},function(t,e,i){"use strict";var n=i(0),s=i(1),r=i(8),o=i(9),u=i(2),a=i(10),c=i(11),h=i(12),l=i(13),m=i(14),p=i(15),f=i(37),d=o({init:function(t,e){e=u({items:[]},e),this._container=m(t)?t:document.querySelector(t),this._element=null,this._inputElement=null,this._items=e.items,this._disabledItems=e.disabledItems||[],this._selectedIndex=Math.max(0,n(e.initialValue,this._items)),this._format=e.format,this._render(),this._setEvents()},_render:function(){var t,e=n(this.getValue(),this._items);this._disabledItems[e]&&(this._selectedIndex=this._findEnabledIndex()),t={maxLength:this._getMaxLength(),initialValue:this.getValue(),format:this._format,formatTime:p.formatTime},this._container.innerHTML=f(t),this._element=this._container.firstChild,this._inputElement=this._element.querySelector("input")},_findEnabledIndex:function(){return n(!1,this._disabledItems)},_getMaxLength:function(){var t=[];return s(this._items,(function(e){t.push(String(e).length)})),Math.max.apply(null,t)},setDisabledItems:function(t){this._disabledItems=t,this._changeToInputValue()},_setEvents:function(){a(this._container,"click",this._onClickHandler,this),a(this._inputElement,"keydown",this._onKeydownInputElement,this),a(this._inputElement,"change",this._onChangeHandler,this),this.on("changeItems",(function(t){this._items=t,this._render()}),this)},_removeEvents:function(){this.off(),c(this._container,"click",this._onClickHandler,this),c(this._inputElement,"keydown",this._onKeydownInputElement,this),c(this._inputElement,"change",this._onChangeHandler,this)},_onClickHandler:function(t){var e=p.getTarget(t);h(e,".tui-timepicker-btn-down")?this._setNextValue(!0):h(e,".tui-timepicker-btn-up")&&this._setNextValue(!1)},_setNextValue:function(t){var e=this._selectedIndex;e=t?e?e-1:this._items.length-1:e6048e5}(o)||(window.localStorage.setItem(r,(new Date).getTime()),setTimeout((function(){"interactive"!==document.readyState&&"complete"!==document.readyState||s("https://www.google-analytics.com/collect",{v:1,t:"event",tid:e,cid:i,dp:i,dh:t,el:t,ec:"use"})}),1e3)))}},function(t,e,i){"use strict";var n=i(16);t.exports=function(t,e){var i=document.createElement("img"),s="";return n(e,(function(t,e){s+="&"+e+"="+t})),s=s.substring(1),i.src=t+"?"+s,i.style.display="none",document.body.appendChild(i),document.body.removeChild(i),i}},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('
',t)}},function(t,e,i){"use strict";var n=i(0),s=i(8),r=i(9),o=i(2),u=i(10),a=i(11),c=i(12),h=i(13),l=i(14),m=i(15),p=i(39),f=r({init:function(t,e){e=o({items:[]},e),this._container=l(t)?t:document.querySelector(t),this._items=e.items||[],this._disabledItems=e.disabledItems||[],this._selectedIndex=Math.max(0,n(e.initialValue,this._items)),this._format=e.format,this._element=null,this._render(),this._setEvents()},_render:function(){var t;this._changeEnabledIndex(),t={items:this._items,format:this._format,initialValue:this.getValue(),disabledItems:this._disabledItems,formatTime:m.formatTime,equals:function(t,e){return t===e}},this._element&&this._removeElement(),this._container.innerHTML=p(t),this._element=this._container.firstChild,u(this._element,"change",this._onChangeHandler,this)},_changeEnabledIndex:function(){var t=n(this.getValue(),this._items);this._disabledItems[t]&&(this._selectedIndex=n(!1,this._disabledItems))},setDisabledItems:function(t){this._disabledItems=t,this._render()},_setEvents:function(){this.on("changeItems",(function(t){this._items=t,this._render()}),this)},_removeEvents:function(){this.off()},_removeElement:function(){a(this._element,"change",this._onChangeHandler,this),h(this._element)},_onChangeHandler:function(t){c(m.getTarget(t),"select")&&this._setNewValue()},_setNewValue:function(){var t=Number(this._element.value);this._selectedIndex=n(t,this._items),this.fire("change",{value:t})},getValue:function(){return this._items[this._selectedIndex]},setValue:function(t){var e=n(t,this._items);e>-1&&e!==this._selectedIndex&&(this._selectedIndex=e,this._element.value=t,this._setNewValue())},destroy:function(){this._removeEvents(),this._removeElement(),this._container=this._items=this._selectedIndex=this._element=null}});s.mixin(f),t.exports=f},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('',t)}},function(t,e,i){"use strict";t.exports={en:{am:"AM",pm:"PM"},ko:{am:"오전",pm:"오후"}}},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('
{{if isSpinbox}}
:
{{if showMeridiem}} {{meridiemElement}} {{/if}} {{else}}
:
{{if showMeridiem}} {{meridiemElement}} {{/if}} {{/if}}
',t)}},function(t,e,i){"use strict";var n=i(7);t.exports=function(t){return n('{{if isSpinbox}}
{{else}}
{{/if}}',t)}}])})); \ No newline at end of file