{"version":3,"sources":["webpack:///./node_modules/air-datepicker/src/js/timepicker.js","webpack:///./node_modules/air-datepicker/src/js/air-datepicker.js","webpack:///./node_modules/air-datepicker/src/js/body.js","webpack:///./node_modules/air-datepicker/src/js/datepicker.js","webpack:///./node_modules/air-datepicker/src/js/navigation.js"],"names":["template","datepicker","$","fn","dp","Constructor","Timepicker","inst","opts","this","d","init","prototype","input","_setTime","date","_buildHTML","navigator","userAgent","match","$el","on","_onSelectDate","bind","$ranges","_onChangeRange","_onMouseUpRange","_onMouseEnterRange","_onMouseOutRange","_date","getParsedDate","_handleDate","hours","minHours","minutes","minMinutes","_setMinTimeFromDate","getHours","getMinutes","lastSelectedDate","_setMaxTimeFromDate","maxHours","maxMinutes","_setDefaultMinMaxTime","_validateHoursMinutes","lz","getLeadingZeroNum","data","hourMin","hourMax","hourStep","hoursStep","hourValue","hourVisible","displayHours","minMin","minMax","minStep","minutesStep","minValue","_template","$timepicker","appendTo","$datepicker","$hours","$minutes","$hoursText","$minutesText","ampm","$ampm","html","dayPeriod","addClass","_updateCurrentTime","h","m","_updateRanges","attr","min","max","val","isSame","minDate","maxDate","update","_getValidHoursFromDate","Date","_ampm","_hours","e","$target","target","name","timepickerIsActive","_trigger","inFocus","removeClass","templates","days","months","years","Body","type","onlyTimepicker","_buildBaseHtml","_render","_bindEvents","proxy","_onClickCell","$content","$names","$cells","_getDayNamesHtml","firstDay","curDay","i","undefined","isWeekend","loc","daysMin","_getCellContents","classes","currentDate","parent","minRange","resetTime","maxRange","render","day","month","parsedDate","selectOtherMonths","showOtherMonths","monthsField","decade","curDecade","year","selectOtherYears","showOtherYears","onRenderCell","range","selectedDates","length","focused","bigger","less","_isSelected","_isInRange","disabled","_getDaysHtml","totalMonthDays","getDaysCount","firstMonthDay","getFullYear","getMonth","getDay","lastMonthDay","daysFromPevMonth","daysFromNextMonth","y","startDayIndex","_getDayHtml","content","getDate","_getMonthsHtml","_getMonthHtml","_getYearsHtml","getDecade","firstYear","_getYearHtml","_renderTypes","dayNames","_update","$cell","_this","each","cell","_getDateFromCell","cellType","show","acitve","hide","active","_handleClick","el","view","minView","selectedDate","alreadySelected","_handleAlreadySelectedDates","down","closest","hasClass","$body","$datepickersContainer","VERSION","pluginName","autoInitSelector","containerBuilt","baseTemplate","defaults","inline","language","startDate","weekends","dateFormat","altField","altFieldDateFormat","toggleSelected","keyboardNav","position","offset","moveToOtherMonthsOnSelect","moveToOtherYearsOnSelect","disableNavWhenOutOfRange","multipleDates","multipleDatesSeparator","todayButton","clearButton","showEvent","autoClose","prevHtml","nextHtml","navTitles","timepicker","dateTimeSeparator","timeFormat","onSelect","onShow","onHide","onChangeMonth","onChangeYear","onChangeDecade","onChangeView","hotKeys","Datepicker","options","extend","nodeName","elIsInput","$altField","inited","visible","silent","currentView","_createShortCuts","views","keys","_prevOnSelectValue","viewIndexes","_buildDatepickersContainer","_defineLocale","_syncWithMinMaxDates","_setPositionClasses","_bindKeyboardEvents","_onMouseDownDatepicker","_onMouseUpDatepicker","_bindTimepickerEvents","nav","Navigation","_onMouseEnterCell","_onMouseLeaveCell","_onShowEvent","_onMouseUpEl","_onBlur","_onKeyUpGeneral","window","_onResize","_onMouseUpBody","_onKeyDown","_onKeyUp","_onHotKey","_onTimeChange","indexOf","lang","console","warn","ru","join","boundary","_getWordBoundaryRegExp","append","$appendTarget","$inline","insertAfter","$nav","_triggerOnChange","formattedDates","parsedSelected","dates","map","formatDate","next","o","prev","string","validHours","result","locale","leadingZero","fullHours","replacer","_replacer","test","replace","getTime","toUpperCase","fullDate","daysShort","fullMonth","monthsShort","fullMinutes","toString","slice","str","reg","p1","p2","p3","sign","symbols","RegExp","selectDate","len","newDate","Array","isArray","forEach","setHours","setMinutes","push","_setInputValue","removeDate","selected","some","curDate","splice","today","clear","param","value","arguments","_addButtonsIfNeed","setPosition","curTime","minTime","maxTime","checkDate","res","altValues","format","altFormat","time","dMinTime","dMaxTime","types","_getDimensions","width","outerWidth","height","outerHeight","left","top","pos","split","main","sec","removeAttr","dims","selfDims","secondary","css","_bindVisionEvents","blur","_changeView","up","event","off","one","dir","nextView","viewIndex","_handleHotKey","key","focusedParsed","totalDaysInNextMonth","_getFocusedDate","monthChanged","yearChanged","decadeChanged","_registerKey","exists","curKey","_unRegisterKey","index","_isHotKeyPressed","currentHotKey","found","pressedKeys","sort","hotKey","every","args","trigger","_focusNextCell","keyCode","nd","_getCell","selector","find","destroy","remove","originalEvent","timepickerFocus","focus","setTimeout","code","which","preventDefault","_focused","prevView","substring","Math","floor","source","date1","date2","d1","d2","_type","conditions","dateCompareTo","num","parseInt","buttonsContainerTemplate","button","$buttonsContainer","_onClickNavButton","_onClickNavTitle","_addButton","title","_getTitle","setNavStatus","_addButtonsContainer","action","label","_disableNav","_activateNav"],"mappings":"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","file":"js/chunk-d5de0228.6474bb1d.js","sourcesContent":[";(function () {\r\n var template = '
' +\r\n '
' +\r\n ' #{hourVisible}' +\r\n ' :' +\r\n ' #{minValue}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
',\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Timepicker = function (inst, opts) {\r\n this.d = inst;\r\n this.opts = opts;\r\n\r\n this.init();\r\n };\r\n\r\n datepicker.Timepicker.prototype = {\r\n init: function () {\r\n var input = 'input';\r\n this._setTime(this.d.date);\r\n this._buildHTML();\r\n\r\n if (navigator.userAgent.match(/trident/gi)) {\r\n input = 'change';\r\n }\r\n\r\n this.d.$el.on('selectDate', this._onSelectDate.bind(this));\r\n this.$ranges.on(input, this._onChangeRange.bind(this));\r\n this.$ranges.on('mouseup', this._onMouseUpRange.bind(this));\r\n this.$ranges.on('mousemove focus ', this._onMouseEnterRange.bind(this));\r\n this.$ranges.on('mouseout blur', this._onMouseOutRange.bind(this));\r\n },\r\n\r\n _setTime: function (date) {\r\n var _date = dp.getParsedDate(date);\r\n\r\n this._handleDate(date);\r\n this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;\r\n this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;\r\n },\r\n\r\n /**\r\n * Sets minHours and minMinutes from date (usually it's a minDate)\r\n * Also changes minMinutes if current hours are bigger then @date hours\r\n * @param date {Date}\r\n * @private\r\n */\r\n _setMinTimeFromDate: function (date) {\r\n this.minHours = date.getHours();\r\n this.minMinutes = date.getMinutes();\r\n\r\n // If, for example, min hours are 10, and current hours are 12,\r\n // update minMinutes to default value, to be able to choose whole range of values\r\n if (this.d.lastSelectedDate) {\r\n if (this.d.lastSelectedDate.getHours() > date.getHours()) {\r\n this.minMinutes = this.opts.minMinutes;\r\n }\r\n }\r\n },\r\n\r\n _setMaxTimeFromDate: function (date) {\r\n this.maxHours = date.getHours();\r\n this.maxMinutes = date.getMinutes();\r\n\r\n if (this.d.lastSelectedDate) {\r\n if (this.d.lastSelectedDate.getHours() < date.getHours()) {\r\n this.maxMinutes = this.opts.maxMinutes;\r\n }\r\n }\r\n },\r\n\r\n _setDefaultMinMaxTime: function () {\r\n var maxHours = 23,\r\n maxMinutes = 59,\r\n opts = this.opts;\r\n\r\n this.minHours = opts.minHours < 0 || opts.minHours > maxHours ? 0 : opts.minHours;\r\n this.minMinutes = opts.minMinutes < 0 || opts.minMinutes > maxMinutes ? 0 : opts.minMinutes;\r\n this.maxHours = opts.maxHours < 0 || opts.maxHours > maxHours ? maxHours : opts.maxHours;\r\n this.maxMinutes = opts.maxMinutes < 0 || opts.maxMinutes > maxMinutes ? maxMinutes : opts.maxMinutes;\r\n },\r\n\r\n /**\r\n * Looks for min/max hours/minutes and if current values\r\n * are out of range sets valid values.\r\n * @private\r\n */\r\n _validateHoursMinutes: function (date) {\r\n if (this.hours < this.minHours) {\r\n this.hours = this.minHours;\r\n } else if (this.hours > this.maxHours) {\r\n this.hours = this.maxHours;\r\n }\r\n\r\n if (this.minutes < this.minMinutes) {\r\n this.minutes = this.minMinutes;\r\n } else if (this.minutes > this.maxMinutes) {\r\n this.minutes = this.maxMinutes;\r\n }\r\n },\r\n\r\n _buildHTML: function () {\r\n var lz = dp.getLeadingZeroNum,\r\n data = {\r\n hourMin: this.minHours,\r\n hourMax: lz(this.maxHours),\r\n hourStep: this.opts.hoursStep,\r\n hourValue: this.hours,\r\n hourVisible: lz(this.displayHours),\r\n minMin: this.minMinutes,\r\n minMax: lz(this.maxMinutes),\r\n minStep: this.opts.minutesStep,\r\n minValue: lz(this.minutes)\r\n },\r\n _template = dp.template(template, data);\r\n\r\n this.$timepicker = $(_template).appendTo(this.d.$datepicker);\r\n this.$ranges = $('[type=\"range\"]', this.$timepicker);\r\n this.$hours = $('[name=\"hours\"]', this.$timepicker);\r\n this.$minutes = $('[name=\"minutes\"]', this.$timepicker);\r\n this.$hoursText = $('.datepicker--time-current-hours', this.$timepicker);\r\n this.$minutesText = $('.datepicker--time-current-minutes', this.$timepicker);\r\n\r\n if (this.d.ampm) {\r\n this.$ampm = $('')\r\n .appendTo($('.datepicker--time-current', this.$timepicker))\r\n .html(this.dayPeriod);\r\n\r\n this.$timepicker.addClass('-am-pm-');\r\n }\r\n },\r\n\r\n _updateCurrentTime: function () {\r\n var h = dp.getLeadingZeroNum(this.displayHours),\r\n m = dp.getLeadingZeroNum(this.minutes);\r\n\r\n this.$hoursText.html(h);\r\n this.$minutesText.html(m);\r\n\r\n if (this.d.ampm) {\r\n this.$ampm.html(this.dayPeriod);\r\n }\r\n },\r\n\r\n _updateRanges: function () {\r\n this.$hours.attr({\r\n min: this.minHours,\r\n max: this.maxHours\r\n }).val(this.hours);\r\n\r\n this.$minutes.attr({\r\n min: this.minMinutes,\r\n max: this.maxMinutes\r\n }).val(this.minutes)\r\n },\r\n\r\n /**\r\n * Sets minHours, minMinutes etc. from date. If date is not passed, than sets\r\n * values from options\r\n * @param [date] {object} - Date object, to get values from\r\n * @private\r\n */\r\n _handleDate: function (date) {\r\n this._setDefaultMinMaxTime();\r\n if (date) {\r\n if (dp.isSame(date, this.d.opts.minDate)) {\r\n this._setMinTimeFromDate(this.d.opts.minDate);\r\n } else if (dp.isSame(date, this.d.opts.maxDate)) {\r\n this._setMaxTimeFromDate(this.d.opts.maxDate);\r\n }\r\n }\r\n\r\n this._validateHoursMinutes(date);\r\n },\r\n\r\n update: function () {\r\n this._updateRanges();\r\n this._updateCurrentTime();\r\n },\r\n\r\n /**\r\n * Calculates valid hour value to display in text input and datepicker's body.\r\n * @param date {Date|Number} - date or hours\r\n * @param [ampm] {Boolean} - 12 hours mode\r\n * @returns {{hours: *, dayPeriod: string}}\r\n * @private\r\n */\r\n _getValidHoursFromDate: function (date, ampm) {\r\n var d = date,\r\n hours = date;\r\n\r\n if (date instanceof Date) {\r\n d = dp.getParsedDate(date);\r\n hours = d.hours;\r\n }\r\n\r\n var _ampm = ampm || this.d.ampm,\r\n dayPeriod = 'am';\r\n\r\n if (_ampm) {\r\n switch(true) {\r\n case hours == 0:\r\n hours = 12;\r\n break;\r\n case hours == 12:\r\n dayPeriod = 'pm';\r\n break;\r\n case hours > 11:\r\n hours = hours - 12;\r\n dayPeriod = 'pm';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n hours: hours,\r\n dayPeriod: dayPeriod\r\n }\r\n },\r\n\r\n set hours (val) {\r\n this._hours = val;\r\n\r\n var displayHours = this._getValidHoursFromDate(val);\r\n\r\n this.displayHours = displayHours.hours;\r\n this.dayPeriod = displayHours.dayPeriod;\r\n },\r\n\r\n get hours() {\r\n return this._hours;\r\n },\r\n\r\n // Events\r\n // -------------------------------------------------\r\n\r\n _onChangeRange: function (e) {\r\n var $target = $(e.target),\r\n name = $target.attr('name');\r\n \r\n this.d.timepickerIsActive = true;\r\n\r\n this[name] = $target.val();\r\n this._updateCurrentTime();\r\n this.d._trigger('timeChange', [this.hours, this.minutes]);\r\n\r\n this._handleDate(this.d.lastSelectedDate);\r\n this.update()\r\n },\r\n\r\n _onSelectDate: function (e, data) {\r\n this._handleDate(data);\r\n this.update();\r\n },\r\n\r\n _onMouseEnterRange: function (e) {\r\n var name = $(e.target).attr('name');\r\n $('.datepicker--time-current-' + name, this.$timepicker).addClass('-focus-');\r\n },\r\n\r\n _onMouseOutRange: function (e) {\r\n var name = $(e.target).attr('name');\r\n if (this.d.inFocus) return; // Prevent removing focus when mouse out of range slider\r\n $('.datepicker--time-current-' + name, this.$timepicker).removeClass('-focus-');\r\n },\r\n\r\n _onMouseUpRange: function (e) {\r\n this.d.timepickerIsActive = false;\r\n }\r\n };\r\n})();\r\n","require('./datepicker');\r\nrequire('./body');\r\nrequire('./navigation');\r\nrequire('./timepicker');",";(function () {\r\n var templates = {\r\n days:'' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n months: '' +\r\n '
' +\r\n '
' +\r\n '
',\r\n years: '' +\r\n '
' +\r\n '
' +\r\n '
'\r\n },\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Body = function (d, type, opts) {\r\n this.d = d;\r\n this.type = type;\r\n this.opts = opts;\r\n this.$el = $('');\r\n\r\n if (this.opts.onlyTimepicker) return;\r\n this.init();\r\n };\r\n\r\n datepicker.Body.prototype = {\r\n init: function () {\r\n this._buildBaseHtml();\r\n this._render();\r\n\r\n this._bindEvents();\r\n },\r\n\r\n _bindEvents: function () {\r\n this.$el.on('click', '.datepicker--cell', $.proxy(this._onClickCell, this));\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n this.$el = $(templates[this.type]).appendTo(this.d.$content);\r\n this.$names = $('.datepicker--days-names', this.$el);\r\n this.$cells = $('.datepicker--cells', this.$el);\r\n },\r\n\r\n _getDayNamesHtml: function (firstDay, curDay, html, i) {\r\n curDay = curDay != undefined ? curDay : firstDay;\r\n html = html ? html : '';\r\n i = i != undefined ? i : 0;\r\n\r\n if (i > 7) return html;\r\n if (curDay == 7) return this._getDayNamesHtml(firstDay, 0, html, ++i);\r\n\r\n html += '
' + this.d.loc.daysMin[curDay] + '
';\r\n\r\n return this._getDayNamesHtml(firstDay, ++curDay, html, ++i);\r\n },\r\n\r\n _getCellContents: function (date, type) {\r\n var classes = \"datepicker--cell datepicker--cell-\" + type,\r\n currentDate = new Date(),\r\n parent = this.d,\r\n minRange = dp.resetTime(parent.minRange),\r\n maxRange = dp.resetTime(parent.maxRange),\r\n opts = parent.opts,\r\n d = dp.getParsedDate(date),\r\n render = {},\r\n html = d.date;\r\n\r\n switch (type) {\r\n case 'day':\r\n if (parent.isWeekend(d.day)) classes += \" -weekend-\";\r\n if (d.month != this.d.parsedDate.month) {\r\n classes += \" -other-month-\";\r\n if (!opts.selectOtherMonths) {\r\n classes += \" -disabled-\";\r\n }\r\n if (!opts.showOtherMonths) html = '';\r\n }\r\n break;\r\n case 'month':\r\n html = parent.loc[parent.opts.monthsField][d.month];\r\n break;\r\n case 'year':\r\n var decade = parent.curDecade;\r\n html = d.year;\r\n if (d.year < decade[0] || d.year > decade[1]) {\r\n classes += ' -other-decade-';\r\n if (!opts.selectOtherYears) {\r\n classes += \" -disabled-\";\r\n }\r\n if (!opts.showOtherYears) html = '';\r\n }\r\n break;\r\n }\r\n\r\n if (opts.onRenderCell) {\r\n render = opts.onRenderCell(date, type) || {};\r\n html = render.html ? render.html : html;\r\n classes += render.classes ? ' ' + render.classes : '';\r\n }\r\n\r\n if (opts.range) {\r\n if (dp.isSame(minRange, date, type)) classes += ' -range-from-';\r\n if (dp.isSame(maxRange, date, type)) classes += ' -range-to-';\r\n\r\n if (parent.selectedDates.length == 1 && parent.focused) {\r\n if (\r\n (dp.bigger(minRange, date) && dp.less(parent.focused, date)) ||\r\n (dp.less(maxRange, date) && dp.bigger(parent.focused, date)))\r\n {\r\n classes += ' -in-range-'\r\n }\r\n\r\n if (dp.less(maxRange, date) && dp.isSame(parent.focused, date)) {\r\n classes += ' -range-from-'\r\n }\r\n if (dp.bigger(minRange, date) && dp.isSame(parent.focused, date)) {\r\n classes += ' -range-to-'\r\n }\r\n\r\n } else if (parent.selectedDates.length == 2) {\r\n if (dp.bigger(minRange, date) && dp.less(maxRange, date)) {\r\n classes += ' -in-range-'\r\n }\r\n }\r\n }\r\n\r\n\r\n if (dp.isSame(currentDate, date, type)) classes += ' -current-';\r\n if (parent.focused && dp.isSame(date, parent.focused, type)) classes += ' -focus-';\r\n if (parent._isSelected(date, type)) classes += ' -selected-';\r\n if (!parent._isInRange(date, type) || render.disabled) classes += ' -disabled-';\r\n\r\n return {\r\n html: html,\r\n classes: classes\r\n }\r\n },\r\n\r\n /**\r\n * Calculates days number to render. Generates days html and returns it.\r\n * @param {object} date - Date object\r\n * @returns {string}\r\n * @private\r\n */\r\n _getDaysHtml: function (date) {\r\n var totalMonthDays = dp.getDaysCount(date),\r\n firstMonthDay = new Date(date.getFullYear(), date.getMonth(), 1).getDay(),\r\n lastMonthDay = new Date(date.getFullYear(), date.getMonth(), totalMonthDays).getDay(),\r\n daysFromPevMonth = firstMonthDay - this.d.loc.firstDay,\r\n daysFromNextMonth = 6 - lastMonthDay + this.d.loc.firstDay;\r\n\r\n daysFromPevMonth = daysFromPevMonth < 0 ? daysFromPevMonth + 7 : daysFromPevMonth;\r\n daysFromNextMonth = daysFromNextMonth > 6 ? daysFromNextMonth - 7 : daysFromNextMonth;\r\n\r\n var startDayIndex = -daysFromPevMonth + 1,\r\n m, y,\r\n html = '';\r\n\r\n for (var i = startDayIndex, max = totalMonthDays + daysFromNextMonth; i <= max; i++) {\r\n y = date.getFullYear();\r\n m = date.getMonth();\r\n\r\n html += this._getDayHtml(new Date(y, m, i))\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getDayHtml: function (date) {\r\n var content = this._getCellContents(date, 'day');\r\n\r\n return '
' + content.html + '
';\r\n },\r\n\r\n /**\r\n * Generates months html\r\n * @param {object} date - date instance\r\n * @returns {string}\r\n * @private\r\n */\r\n _getMonthsHtml: function (date) {\r\n var html = '',\r\n d = dp.getParsedDate(date),\r\n i = 0;\r\n\r\n while(i < 12) {\r\n html += this._getMonthHtml(new Date(d.year, i));\r\n i++\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getMonthHtml: function (date) {\r\n var content = this._getCellContents(date, 'month');\r\n\r\n return '
' + content.html + '
'\r\n },\r\n\r\n _getYearsHtml: function (date) {\r\n var d = dp.getParsedDate(date),\r\n decade = dp.getDecade(date),\r\n firstYear = decade[0] - 1,\r\n html = '',\r\n i = firstYear;\r\n\r\n for (i; i <= decade[1] + 1; i++) {\r\n html += this._getYearHtml(new Date(i , 0));\r\n }\r\n\r\n return html;\r\n },\r\n\r\n _getYearHtml: function (date) {\r\n var content = this._getCellContents(date, 'year');\r\n\r\n return '
' + content.html + '
'\r\n },\r\n\r\n _renderTypes: {\r\n days: function () {\r\n var dayNames = this._getDayNamesHtml(this.d.loc.firstDay),\r\n days = this._getDaysHtml(this.d.currentDate);\r\n\r\n this.$cells.html(days);\r\n this.$names.html(dayNames)\r\n },\r\n months: function () {\r\n var html = this._getMonthsHtml(this.d.currentDate);\r\n\r\n this.$cells.html(html)\r\n },\r\n years: function () {\r\n var html = this._getYearsHtml(this.d.currentDate);\r\n\r\n this.$cells.html(html)\r\n }\r\n },\r\n\r\n _render: function () {\r\n if (this.opts.onlyTimepicker) return;\r\n this._renderTypes[this.type].bind(this)();\r\n },\r\n\r\n _update: function () {\r\n var $cells = $('.datepicker--cell', this.$cells),\r\n _this = this,\r\n classes,\r\n $cell,\r\n date;\r\n $cells.each(function (cell, i) {\r\n $cell = $(this);\r\n date = _this.d._getDateFromCell($(this));\r\n classes = _this._getCellContents(date, _this.d.cellType);\r\n $cell.attr('class',classes.classes)\r\n });\r\n },\r\n\r\n show: function () {\r\n if (this.opts.onlyTimepicker) return;\r\n this.$el.addClass('active');\r\n this.acitve = true;\r\n },\r\n\r\n hide: function () {\r\n this.$el.removeClass('active');\r\n this.active = false;\r\n },\r\n\r\n // Events\r\n // -------------------------------------------------\r\n\r\n _handleClick: function (el) {\r\n var date = el.data('date') || 1,\r\n month = el.data('month') || 0,\r\n year = el.data('year') || this.d.parsedDate.year,\r\n dp = this.d;\r\n // Change view if min view does not reach yet\r\n if (dp.view != this.opts.minView) {\r\n dp.down(new Date(year, month, date));\r\n return;\r\n }\r\n // Select date if min view is reached\r\n var selectedDate = new Date(year, month, date),\r\n alreadySelected = this.d._isSelected(selectedDate, this.d.cellType);\r\n\r\n if (!alreadySelected) {\r\n dp._trigger('clickCell', selectedDate);\r\n return;\r\n }\r\n\r\n dp._handleAlreadySelectedDates.bind(dp, alreadySelected, selectedDate)();\r\n\r\n },\r\n\r\n _onClickCell: function (e) {\r\n var $el = $(e.target).closest('.datepicker--cell');\r\n\r\n if ($el.hasClass('-disabled-')) return;\r\n\r\n this._handleClick.bind(this)($el);\r\n }\r\n };\r\n})();\r\n",";(function () {\r\n var VERSION = '2.2.3',\r\n pluginName = 'datepicker',\r\n autoInitSelector = '.datepicker-here',\r\n $body, $datepickersContainer,\r\n containerBuilt = false,\r\n baseTemplate = '' +\r\n '
' +\r\n '' +\r\n '' +\r\n '
' +\r\n '
',\r\n defaults = {\r\n classes: '',\r\n inline: false,\r\n language: 'ru',\r\n startDate: new Date(),\r\n firstDay: '',\r\n weekends: [6, 0],\r\n dateFormat: '',\r\n altField: '',\r\n altFieldDateFormat: '@',\r\n toggleSelected: true,\r\n keyboardNav: true,\r\n\r\n position: 'bottom left',\r\n offset: 12,\r\n\r\n view: 'days',\r\n minView: 'days',\r\n\r\n showOtherMonths: true,\r\n selectOtherMonths: true,\r\n moveToOtherMonthsOnSelect: true,\r\n\r\n showOtherYears: true,\r\n selectOtherYears: true,\r\n moveToOtherYearsOnSelect: true,\r\n\r\n minDate: '',\r\n maxDate: '',\r\n disableNavWhenOutOfRange: true,\r\n\r\n multipleDates: false, // Boolean or Number\r\n multipleDatesSeparator: ',',\r\n range: false,\r\n\r\n todayButton: false,\r\n clearButton: false,\r\n\r\n showEvent: 'focus',\r\n autoClose: false,\r\n\r\n // navigation\r\n monthsField: 'monthsShort',\r\n prevHtml: '',\r\n nextHtml: '',\r\n navTitles: {\r\n days: 'MM, yyyy',\r\n months: 'yyyy',\r\n years: 'yyyy1 - yyyy2'\r\n },\r\n\r\n // timepicker\r\n timepicker: false,\r\n onlyTimepicker: false,\r\n dateTimeSeparator: ' ',\r\n timeFormat: '',\r\n minHours: 0,\r\n maxHours: 24,\r\n minMinutes: 0,\r\n maxMinutes: 59,\r\n hoursStep: 1,\r\n minutesStep: 1,\r\n\r\n // events\r\n onSelect: '',\r\n onShow: '',\r\n onHide: '',\r\n onChangeMonth: '',\r\n onChangeYear: '',\r\n onChangeDecade: '',\r\n onChangeView: '',\r\n onRenderCell: ''\r\n },\r\n hotKeys = {\r\n 'ctrlRight': [17, 39],\r\n 'ctrlUp': [17, 38],\r\n 'ctrlLeft': [17, 37],\r\n 'ctrlDown': [17, 40],\r\n 'shiftRight': [16, 39],\r\n 'shiftUp': [16, 38],\r\n 'shiftLeft': [16, 37],\r\n 'shiftDown': [16, 40],\r\n 'altUp': [18, 38],\r\n 'altRight': [18, 39],\r\n 'altLeft': [18, 37],\r\n 'altDown': [18, 40],\r\n 'ctrlShiftUp': [16, 17, 38]\r\n },\r\n datepicker;\r\n\r\n var Datepicker = function (el, options) {\r\n this.el = el;\r\n this.$el = $(el);\r\n\r\n this.opts = $.extend(true, {}, defaults, options, this.$el.data());\r\n\r\n if ($body == undefined) {\r\n $body = $('body');\r\n }\r\n\r\n if (!this.opts.startDate) {\r\n this.opts.startDate = new Date();\r\n }\r\n\r\n if (this.el.nodeName == 'INPUT') {\r\n this.elIsInput = true;\r\n }\r\n\r\n if (this.opts.altField) {\r\n this.$altField = typeof this.opts.altField == 'string' ? $(this.opts.altField) : this.opts.altField;\r\n }\r\n\r\n this.inited = false;\r\n this.visible = false;\r\n this.silent = false; // Need to prevent unnecessary rendering\r\n\r\n this.currentDate = this.opts.startDate;\r\n this.currentView = this.opts.view;\r\n this._createShortCuts();\r\n this.selectedDates = [];\r\n this.views = {};\r\n this.keys = [];\r\n this.minRange = '';\r\n this.maxRange = '';\r\n this._prevOnSelectValue = '';\r\n\r\n this.init()\r\n };\r\n\r\n datepicker = Datepicker;\r\n\r\n datepicker.prototype = {\r\n VERSION: VERSION,\r\n viewIndexes: ['days', 'months', 'years'],\r\n\r\n init: function () {\r\n if (!containerBuilt && !this.opts.inline && this.elIsInput) {\r\n this._buildDatepickersContainer();\r\n }\r\n this._buildBaseHtml();\r\n this._defineLocale(this.opts.language);\r\n this._syncWithMinMaxDates();\r\n\r\n if (this.elIsInput) {\r\n if (!this.opts.inline) {\r\n // Set extra classes for proper transitions\r\n this._setPositionClasses(this.opts.position);\r\n this._bindEvents()\r\n }\r\n if (this.opts.keyboardNav && !this.opts.onlyTimepicker) {\r\n this._bindKeyboardEvents();\r\n }\r\n this.$datepicker.on('mousedown', this._onMouseDownDatepicker.bind(this));\r\n this.$datepicker.on('mouseup', this._onMouseUpDatepicker.bind(this));\r\n }\r\n\r\n if (this.opts.classes) {\r\n this.$datepicker.addClass(this.opts.classes)\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n this.timepicker = new $.fn.datepicker.Timepicker(this, this.opts);\r\n this._bindTimepickerEvents();\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.$datepicker.addClass('-only-timepicker-');\r\n }\r\n\r\n this.views[this.currentView] = new $.fn.datepicker.Body(this, this.currentView, this.opts);\r\n this.views[this.currentView].show();\r\n this.nav = new $.fn.datepicker.Navigation(this, this.opts);\r\n this.view = this.currentView;\r\n\r\n this.$el.on('clickCell.adp', this._onClickCell.bind(this));\r\n this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));\r\n this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));\r\n\r\n this.inited = true;\r\n },\r\n\r\n _createShortCuts: function () {\r\n this.minDate = this.opts.minDate ? this.opts.minDate : new Date(-8639999913600000);\r\n this.maxDate = this.opts.maxDate ? this.opts.maxDate : new Date(8639999913600000);\r\n },\r\n\r\n _bindEvents : function () {\r\n this.$el.on(this.opts.showEvent + '.adp', this._onShowEvent.bind(this));\r\n this.$el.on('mouseup.adp', this._onMouseUpEl.bind(this));\r\n this.$el.on('blur.adp', this._onBlur.bind(this));\r\n this.$el.on('keyup.adp', this._onKeyUpGeneral.bind(this));\r\n $(window).on('resize.adp', this._onResize.bind(this));\r\n $('body').on('mouseup.adp', this._onMouseUpBody.bind(this));\r\n },\r\n\r\n _bindKeyboardEvents: function () {\r\n this.$el.on('keydown.adp', this._onKeyDown.bind(this));\r\n this.$el.on('keyup.adp', this._onKeyUp.bind(this));\r\n this.$el.on('hotKey.adp', this._onHotKey.bind(this));\r\n },\r\n\r\n _bindTimepickerEvents: function () {\r\n this.$el.on('timeChange.adp', this._onTimeChange.bind(this));\r\n },\r\n\r\n isWeekend: function (day) {\r\n return this.opts.weekends.indexOf(day) !== -1;\r\n },\r\n\r\n _defineLocale: function (lang) {\r\n if (typeof lang == 'string') {\r\n this.loc = $.fn.datepicker.language[lang];\r\n if (!this.loc) {\r\n console.warn('Can\\'t find language \"' + lang + '\" in Datepicker.language, will use \"ru\" instead');\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru)\r\n }\r\n\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, $.fn.datepicker.language[lang])\r\n } else {\r\n this.loc = $.extend(true, {}, $.fn.datepicker.language.ru, lang)\r\n }\r\n\r\n if (this.opts.dateFormat) {\r\n this.loc.dateFormat = this.opts.dateFormat\r\n }\r\n\r\n if (this.opts.timeFormat) {\r\n this.loc.timeFormat = this.opts.timeFormat\r\n }\r\n\r\n if (this.opts.firstDay !== '') {\r\n this.loc.firstDay = this.opts.firstDay\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n this.loc.dateFormat = [this.loc.dateFormat, this.loc.timeFormat].join(this.opts.dateTimeSeparator);\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.loc.dateFormat = this.loc.timeFormat;\r\n }\r\n\r\n var boundary = this._getWordBoundaryRegExp;\r\n if (this.loc.timeFormat.match(boundary('aa')) ||\r\n this.loc.timeFormat.match(boundary('AA'))\r\n ) {\r\n this.ampm = true;\r\n }\r\n },\r\n\r\n _buildDatepickersContainer: function () {\r\n containerBuilt = true;\r\n $body.append('
');\r\n $datepickersContainer = $('#datepickers-container');\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n var $appendTarget,\r\n $inline = $('
');\r\n\r\n if(this.el.nodeName == 'INPUT') {\r\n if (!this.opts.inline) {\r\n $appendTarget = $datepickersContainer;\r\n } else {\r\n $appendTarget = $inline.insertAfter(this.$el)\r\n }\r\n } else {\r\n $appendTarget = $inline.appendTo(this.$el)\r\n }\r\n\r\n this.$datepicker = $(baseTemplate).appendTo($appendTarget);\r\n this.$content = $('.datepicker--content', this.$datepicker);\r\n this.$nav = $('.datepicker--nav', this.$datepicker);\r\n },\r\n\r\n _triggerOnChange: function () {\r\n if (!this.selectedDates.length) {\r\n // Prevent from triggering multiple onSelect callback with same argument (empty string) in IE10-11\r\n if (this._prevOnSelectValue === '') return;\r\n this._prevOnSelectValue = '';\r\n return this.opts.onSelect('', '', this);\r\n }\r\n\r\n var selectedDates = this.selectedDates,\r\n parsedSelected = datepicker.getParsedDate(selectedDates[0]),\r\n formattedDates,\r\n _this = this,\r\n dates = new Date(\r\n parsedSelected.year,\r\n parsedSelected.month,\r\n parsedSelected.date,\r\n parsedSelected.hours,\r\n parsedSelected.minutes\r\n );\r\n\r\n formattedDates = selectedDates.map(function (date) {\r\n return _this.formatDate(_this.loc.dateFormat, date)\r\n }).join(this.opts.multipleDatesSeparator);\r\n\r\n // Create new dates array, to separate it from original selectedDates\r\n if (this.opts.multipleDates || this.opts.range) {\r\n dates = selectedDates.map(function(date) {\r\n var parsedDate = datepicker.getParsedDate(date);\r\n return new Date(\r\n parsedDate.year,\r\n parsedDate.month,\r\n parsedDate.date,\r\n parsedDate.hours,\r\n parsedDate.minutes\r\n );\r\n })\r\n }\r\n\r\n this._prevOnSelectValue = formattedDates;\r\n this.opts.onSelect(formattedDates, dates, this);\r\n },\r\n\r\n next: function () {\r\n var d = this.parsedDate,\r\n o = this.opts;\r\n switch (this.view) {\r\n case 'days':\r\n this.date = new Date(d.year, d.month + 1, 1);\r\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n break;\r\n case 'months':\r\n this.date = new Date(d.year + 1, d.month, 1);\r\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n break;\r\n case 'years':\r\n this.date = new Date(d.year + 10, 0, 1);\r\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n break;\r\n }\r\n },\r\n\r\n prev: function () {\r\n var d = this.parsedDate,\r\n o = this.opts;\r\n switch (this.view) {\r\n case 'days':\r\n this.date = new Date(d.year, d.month - 1, 1);\r\n if (o.onChangeMonth) o.onChangeMonth(this.parsedDate.month, this.parsedDate.year);\r\n break;\r\n case 'months':\r\n this.date = new Date(d.year - 1, d.month, 1);\r\n if (o.onChangeYear) o.onChangeYear(this.parsedDate.year);\r\n break;\r\n case 'years':\r\n this.date = new Date(d.year - 10, 0, 1);\r\n if (o.onChangeDecade) o.onChangeDecade(this.curDecade);\r\n break;\r\n }\r\n },\r\n\r\n formatDate: function (string, date) {\r\n date = date || this.date;\r\n var result = string,\r\n boundary = this._getWordBoundaryRegExp,\r\n locale = this.loc,\r\n leadingZero = datepicker.getLeadingZeroNum,\r\n decade = datepicker.getDecade(date),\r\n d = datepicker.getParsedDate(date),\r\n fullHours = d.fullHours,\r\n hours = d.hours,\r\n ampm = string.match(boundary('aa')) || string.match(boundary('AA')),\r\n dayPeriod = 'am',\r\n replacer = this._replacer,\r\n validHours;\r\n\r\n if (this.opts.timepicker && this.timepicker && ampm) {\r\n validHours = this.timepicker._getValidHoursFromDate(date, ampm);\r\n fullHours = leadingZero(validHours.hours);\r\n hours = validHours.hours;\r\n dayPeriod = validHours.dayPeriod;\r\n }\r\n\r\n switch (true) {\r\n case /@/.test(result):\r\n result = result.replace(/@/, date.getTime());\r\n case /aa/.test(result):\r\n result = replacer(result, boundary('aa'), dayPeriod);\r\n case /AA/.test(result):\r\n result = replacer(result, boundary('AA'), dayPeriod.toUpperCase());\r\n case /dd/.test(result):\r\n result = replacer(result, boundary('dd'), d.fullDate);\r\n case /d/.test(result):\r\n result = replacer(result, boundary('d'), d.date);\r\n case /DD/.test(result):\r\n result = replacer(result, boundary('DD'), locale.days[d.day]);\r\n case /D/.test(result):\r\n result = replacer(result, boundary('D'), locale.daysShort[d.day]);\r\n case /mm/.test(result):\r\n result = replacer(result, boundary('mm'), d.fullMonth);\r\n case /m/.test(result):\r\n result = replacer(result, boundary('m'), d.month + 1);\r\n case /MM/.test(result):\r\n result = replacer(result, boundary('MM'), this.loc.months[d.month]);\r\n case /M/.test(result):\r\n result = replacer(result, boundary('M'), locale.monthsShort[d.month]);\r\n case /ii/.test(result):\r\n result = replacer(result, boundary('ii'), d.fullMinutes);\r\n case /i/.test(result):\r\n result = replacer(result, boundary('i'), d.minutes);\r\n case /hh/.test(result):\r\n result = replacer(result, boundary('hh'), fullHours);\r\n case /h/.test(result):\r\n result = replacer(result, boundary('h'), hours);\r\n case /yyyy/.test(result):\r\n result = replacer(result, boundary('yyyy'), d.year);\r\n case /yyyy1/.test(result):\r\n result = replacer(result, boundary('yyyy1'), decade[0]);\r\n case /yyyy2/.test(result):\r\n result = replacer(result, boundary('yyyy2'), decade[1]);\r\n case /yy/.test(result):\r\n result = replacer(result, boundary('yy'), d.year.toString().slice(-2));\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _replacer: function (str, reg, data) {\r\n return str.replace(reg, function (match, p1,p2,p3) {\r\n return p1 + data + p3;\r\n })\r\n },\r\n\r\n _getWordBoundaryRegExp: function (sign) {\r\n var symbols = '\\\\s|\\\\.|-|/|\\\\\\\\|,|\\\\$|\\\\!|\\\\?|:|;';\r\n\r\n return new RegExp('(^|>|' + symbols + ')(' + sign + ')($|<|' + symbols + ')', 'g');\r\n },\r\n\r\n\r\n selectDate: function (date) {\r\n var _this = this,\r\n opts = _this.opts,\r\n d = _this.parsedDate,\r\n selectedDates = _this.selectedDates,\r\n len = selectedDates.length,\r\n newDate = '';\r\n\r\n if (Array.isArray(date)) {\r\n date.forEach(function (d) {\r\n _this.selectDate(d)\r\n });\r\n return;\r\n }\r\n\r\n if (!(date instanceof Date)) return;\r\n\r\n this.lastSelectedDate = date;\r\n\r\n // Set new time values from Date\r\n if (this.timepicker) {\r\n this.timepicker._setTime(date);\r\n }\r\n\r\n // On this step timepicker will set valid values in it's instance\r\n _this._trigger('selectDate', date);\r\n\r\n // Set correct time values after timepicker's validation\r\n // Prevent from setting hours or minutes which values are lesser then `min` value or\r\n // greater then `max` value\r\n if (this.timepicker) {\r\n date.setHours(this.timepicker.hours);\r\n date.setMinutes(this.timepicker.minutes)\r\n }\r\n\r\n if (_this.view == 'days') {\r\n if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {\r\n newDate = new Date(date.getFullYear(), date.getMonth(), 1);\r\n }\r\n }\r\n\r\n if (_this.view == 'years') {\r\n if (date.getFullYear() != d.year && opts.moveToOtherYearsOnSelect) {\r\n newDate = new Date(date.getFullYear(), 0, 1);\r\n }\r\n }\r\n\r\n if (newDate) {\r\n _this.silent = true;\r\n _this.date = newDate;\r\n _this.silent = false;\r\n _this.nav._render()\r\n }\r\n\r\n if (opts.multipleDates && !opts.range) { // Set priority to range functionality\r\n if (len === opts.multipleDates) return;\r\n if (!_this._isSelected(date)) {\r\n _this.selectedDates.push(date);\r\n }\r\n } else if (opts.range) {\r\n if (len == 2) {\r\n _this.selectedDates = [date];\r\n _this.minRange = date;\r\n _this.maxRange = '';\r\n } else if (len == 1) {\r\n _this.selectedDates.push(date);\r\n if (!_this.maxRange){\r\n _this.maxRange = date;\r\n } else {\r\n _this.minRange = date;\r\n }\r\n // Swap dates if they were selected via dp.selectDate() and second date was smaller then first\r\n if (datepicker.bigger(_this.maxRange, _this.minRange)) {\r\n _this.maxRange = _this.minRange;\r\n _this.minRange = date;\r\n }\r\n _this.selectedDates = [_this.minRange, _this.maxRange]\r\n\r\n } else {\r\n _this.selectedDates = [date];\r\n _this.minRange = date;\r\n }\r\n } else {\r\n _this.selectedDates = [date];\r\n }\r\n\r\n _this._setInputValue();\r\n\r\n if (opts.onSelect) {\r\n _this._triggerOnChange();\r\n }\r\n\r\n if (opts.autoClose && !this.timepickerIsActive) {\r\n if (!opts.multipleDates && !opts.range) {\r\n _this.hide();\r\n } else if (opts.range && _this.selectedDates.length == 2) {\r\n _this.hide();\r\n }\r\n }\r\n\r\n _this.views[this.currentView]._render()\r\n },\r\n\r\n removeDate: function (date) {\r\n var selected = this.selectedDates,\r\n _this = this;\r\n\r\n if (!(date instanceof Date)) return;\r\n\r\n return selected.some(function (curDate, i) {\r\n if (datepicker.isSame(curDate, date)) {\r\n selected.splice(i, 1);\r\n\r\n if (!_this.selectedDates.length) {\r\n _this.minRange = '';\r\n _this.maxRange = '';\r\n _this.lastSelectedDate = '';\r\n } else {\r\n _this.lastSelectedDate = _this.selectedDates[_this.selectedDates.length - 1];\r\n }\r\n\r\n _this.views[_this.currentView]._render();\r\n _this._setInputValue();\r\n\r\n if (_this.opts.onSelect) {\r\n _this._triggerOnChange();\r\n }\r\n\r\n return true\r\n }\r\n })\r\n },\r\n\r\n today: function () {\r\n this.silent = true;\r\n this.view = this.opts.minView;\r\n this.silent = false;\r\n this.date = new Date();\r\n\r\n if (this.opts.todayButton instanceof Date) {\r\n this.selectDate(this.opts.todayButton)\r\n }\r\n },\r\n\r\n clear: function () {\r\n this.selectedDates = [];\r\n this.minRange = '';\r\n this.maxRange = '';\r\n this.views[this.currentView]._render();\r\n this._setInputValue();\r\n if (this.opts.onSelect) {\r\n this._triggerOnChange()\r\n }\r\n },\r\n\r\n /**\r\n * Updates datepicker options\r\n * @param {String|Object} param - parameter's name to update. If object then it will extend current options\r\n * @param {String|Number|Object} [value] - new param value\r\n */\r\n update: function (param, value) {\r\n var len = arguments.length,\r\n lastSelectedDate = this.lastSelectedDate;\r\n\r\n if (len == 2) {\r\n this.opts[param] = value;\r\n } else if (len == 1 && typeof param == 'object') {\r\n this.opts = $.extend(true, this.opts, param)\r\n }\r\n\r\n this._createShortCuts();\r\n this._syncWithMinMaxDates();\r\n this._defineLocale(this.opts.language);\r\n this.nav._addButtonsIfNeed();\r\n if (!this.opts.onlyTimepicker) this.nav._render();\r\n this.views[this.currentView]._render();\r\n\r\n if (this.elIsInput && !this.opts.inline) {\r\n this._setPositionClasses(this.opts.position);\r\n if (this.visible) {\r\n this.setPosition(this.opts.position)\r\n }\r\n }\r\n\r\n if (this.opts.classes) {\r\n this.$datepicker.addClass(this.opts.classes)\r\n }\r\n\r\n if (this.opts.onlyTimepicker) {\r\n this.$datepicker.addClass('-only-timepicker-');\r\n }\r\n\r\n if (this.opts.timepicker) {\r\n if (lastSelectedDate) this.timepicker._handleDate(lastSelectedDate);\r\n this.timepicker._updateRanges();\r\n this.timepicker._updateCurrentTime();\r\n // Change hours and minutes if it's values have been changed through min/max hours/minutes\r\n if (lastSelectedDate) {\r\n lastSelectedDate.setHours(this.timepicker.hours);\r\n lastSelectedDate.setMinutes(this.timepicker.minutes);\r\n }\r\n }\r\n\r\n this._setInputValue();\r\n\r\n return this;\r\n },\r\n\r\n _syncWithMinMaxDates: function () {\r\n var curTime = this.date.getTime();\r\n this.silent = true;\r\n if (this.minTime > curTime) {\r\n this.date = this.minDate;\r\n }\r\n\r\n if (this.maxTime < curTime) {\r\n this.date = this.maxDate;\r\n }\r\n this.silent = false;\r\n },\r\n\r\n _isSelected: function (checkDate, cellType) {\r\n var res = false;\r\n this.selectedDates.some(function (date) {\r\n if (datepicker.isSame(date, checkDate, cellType)) {\r\n res = date;\r\n return true;\r\n }\r\n });\r\n return res;\r\n },\r\n\r\n _setInputValue: function () {\r\n var _this = this,\r\n opts = _this.opts,\r\n format = _this.loc.dateFormat,\r\n altFormat = opts.altFieldDateFormat,\r\n value = _this.selectedDates.map(function (date) {\r\n return _this.formatDate(format, date)\r\n }),\r\n altValues;\r\n\r\n if (opts.altField && _this.$altField.length) {\r\n altValues = this.selectedDates.map(function (date) {\r\n return _this.formatDate(altFormat, date)\r\n });\r\n altValues = altValues.join(this.opts.multipleDatesSeparator);\r\n this.$altField.val(altValues);\r\n }\r\n\r\n value = value.join(this.opts.multipleDatesSeparator);\r\n\r\n this.$el.val(value)\r\n },\r\n\r\n /**\r\n * Check if date is between minDate and maxDate\r\n * @param date {object} - date object\r\n * @param type {string} - cell type\r\n * @returns {boolean}\r\n * @private\r\n */\r\n _isInRange: function (date, type) {\r\n var time = date.getTime(),\r\n d = datepicker.getParsedDate(date),\r\n min = datepicker.getParsedDate(this.minDate),\r\n max = datepicker.getParsedDate(this.maxDate),\r\n dMinTime = new Date(d.year, d.month, min.date).getTime(),\r\n dMaxTime = new Date(d.year, d.month, max.date).getTime(),\r\n types = {\r\n day: time >= this.minTime && time <= this.maxTime,\r\n month: dMinTime >= this.minTime && dMaxTime <= this.maxTime,\r\n year: d.year >= min.year && d.year <= max.year\r\n };\r\n return type ? types[type] : types.day\r\n },\r\n\r\n _getDimensions: function ($el) {\r\n var offset = $el.offset();\r\n\r\n return {\r\n width: $el.outerWidth(),\r\n height: $el.outerHeight(),\r\n left: offset.left,\r\n top: offset.top\r\n }\r\n },\r\n\r\n _getDateFromCell: function (cell) {\r\n var curDate = this.parsedDate,\r\n year = cell.data('year') || curDate.year,\r\n month = cell.data('month') == undefined ? curDate.month : cell.data('month'),\r\n date = cell.data('date') || 1;\r\n\r\n return new Date(year, month, date);\r\n },\r\n\r\n _setPositionClasses: function (pos) {\r\n pos = pos.split(' ');\r\n var main = pos[0],\r\n sec = pos[1],\r\n classes = 'datepicker -' + main + '-' + sec + '- -from-' + main + '-';\r\n\r\n if (this.visible) classes += ' active';\r\n\r\n this.$datepicker\r\n .removeAttr('class')\r\n .addClass(classes);\r\n },\r\n\r\n setPosition: function (position) {\r\n position = position || this.opts.position;\r\n\r\n var dims = this._getDimensions(this.$el),\r\n selfDims = this._getDimensions(this.$datepicker),\r\n pos = position.split(' '),\r\n top, left,\r\n offset = this.opts.offset,\r\n main = pos[0],\r\n secondary = pos[1];\r\n\r\n switch (main) {\r\n case 'top':\r\n top = dims.top - selfDims.height - offset;\r\n break;\r\n case 'right':\r\n left = dims.left + dims.width + offset;\r\n break;\r\n case 'bottom':\r\n top = dims.top + dims.height + offset;\r\n break;\r\n case 'left':\r\n left = dims.left - selfDims.width - offset;\r\n break;\r\n }\r\n\r\n switch(secondary) {\r\n case 'top':\r\n top = dims.top;\r\n break;\r\n case 'right':\r\n left = dims.left + dims.width - selfDims.width;\r\n break;\r\n case 'bottom':\r\n top = dims.top + dims.height - selfDims.height;\r\n break;\r\n case 'left':\r\n left = dims.left;\r\n break;\r\n case 'center':\r\n if (/left|right/.test(main)) {\r\n top = dims.top + dims.height/2 - selfDims.height/2;\r\n } else {\r\n left = dims.left + dims.width/2 - selfDims.width/2;\r\n }\r\n }\r\n\r\n this.$datepicker\r\n .css({\r\n left: left,\r\n top: top\r\n })\r\n },\r\n\r\n show: function () {\r\n var onShow = this.opts.onShow;\r\n\r\n this.setPosition(this.opts.position);\r\n this.$datepicker.addClass('active');\r\n this.visible = true;\r\n\r\n if (onShow) {\r\n this._bindVisionEvents(onShow)\r\n }\r\n },\r\n\r\n hide: function () {\r\n var onHide = this.opts.onHide;\r\n\r\n this.$datepicker\r\n .removeClass('active')\r\n .css({\r\n left: '-100000px'\r\n });\r\n\r\n this.focused = '';\r\n this.keys = [];\r\n\r\n this.inFocus = false;\r\n this.visible = false;\r\n this.$el.blur();\r\n\r\n if (onHide) {\r\n this._bindVisionEvents(onHide)\r\n }\r\n },\r\n\r\n down: function (date) {\r\n this._changeView(date, 'down');\r\n },\r\n\r\n up: function (date) {\r\n this._changeView(date, 'up');\r\n },\r\n\r\n _bindVisionEvents: function (event) {\r\n this.$datepicker.off('transitionend.dp');\r\n event(this, false);\r\n this.$datepicker.one('transitionend.dp', event.bind(this, this, true))\r\n },\r\n\r\n _changeView: function (date, dir) {\r\n date = date || this.focused || this.date;\r\n\r\n var nextView = dir == 'up' ? this.viewIndex + 1 : this.viewIndex - 1;\r\n if (nextView > 2) nextView = 2;\r\n if (nextView < 0) nextView = 0;\r\n\r\n this.silent = true;\r\n this.date = new Date(date.getFullYear(), date.getMonth(), 1);\r\n this.silent = false;\r\n this.view = this.viewIndexes[nextView];\r\n\r\n },\r\n\r\n _handleHotKey: function (key) {\r\n var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n focusedParsed,\r\n o = this.opts,\r\n newDate,\r\n totalDaysInNextMonth,\r\n monthChanged = false,\r\n yearChanged = false,\r\n decadeChanged = false,\r\n y = date.year,\r\n m = date.month,\r\n d = date.date;\r\n\r\n switch (key) {\r\n case 'ctrlRight':\r\n case 'ctrlUp':\r\n m += 1;\r\n monthChanged = true;\r\n break;\r\n case 'ctrlLeft':\r\n case 'ctrlDown':\r\n m -= 1;\r\n monthChanged = true;\r\n break;\r\n case 'shiftRight':\r\n case 'shiftUp':\r\n yearChanged = true;\r\n y += 1;\r\n break;\r\n case 'shiftLeft':\r\n case 'shiftDown':\r\n yearChanged = true;\r\n y -= 1;\r\n break;\r\n case 'altRight':\r\n case 'altUp':\r\n decadeChanged = true;\r\n y += 10;\r\n break;\r\n case 'altLeft':\r\n case 'altDown':\r\n decadeChanged = true;\r\n y -= 10;\r\n break;\r\n case 'ctrlShiftUp':\r\n this.up();\r\n break;\r\n }\r\n\r\n totalDaysInNextMonth = datepicker.getDaysCount(new Date(y,m));\r\n newDate = new Date(y,m,d);\r\n\r\n // If next month has less days than current, set date to total days in that month\r\n if (totalDaysInNextMonth < d) d = totalDaysInNextMonth;\r\n\r\n // Check if newDate is in valid range\r\n if (newDate.getTime() < this.minTime) {\r\n newDate = this.minDate;\r\n } else if (newDate.getTime() > this.maxTime) {\r\n newDate = this.maxDate;\r\n }\r\n\r\n this.focused = newDate;\r\n\r\n focusedParsed = datepicker.getParsedDate(newDate);\r\n if (monthChanged && o.onChangeMonth) {\r\n o.onChangeMonth(focusedParsed.month, focusedParsed.year)\r\n }\r\n if (yearChanged && o.onChangeYear) {\r\n o.onChangeYear(focusedParsed.year)\r\n }\r\n if (decadeChanged && o.onChangeDecade) {\r\n o.onChangeDecade(this.curDecade)\r\n }\r\n },\r\n\r\n _registerKey: function (key) {\r\n var exists = this.keys.some(function (curKey) {\r\n return curKey == key;\r\n });\r\n\r\n if (!exists) {\r\n this.keys.push(key)\r\n }\r\n },\r\n\r\n _unRegisterKey: function (key) {\r\n var index = this.keys.indexOf(key);\r\n\r\n this.keys.splice(index, 1);\r\n },\r\n\r\n _isHotKeyPressed: function () {\r\n var currentHotKey,\r\n found = false,\r\n _this = this,\r\n pressedKeys = this.keys.sort();\r\n\r\n for (var hotKey in hotKeys) {\r\n currentHotKey = hotKeys[hotKey];\r\n if (pressedKeys.length != currentHotKey.length) continue;\r\n\r\n if (currentHotKey.every(function (key, i) { return key == pressedKeys[i]})) {\r\n _this._trigger('hotKey', hotKey);\r\n found = true;\r\n }\r\n }\r\n\r\n return found;\r\n },\r\n\r\n _trigger: function (event, args) {\r\n this.$el.trigger(event, args)\r\n },\r\n\r\n _focusNextCell: function (keyCode, type) {\r\n type = type || this.cellType;\r\n\r\n var date = datepicker.getParsedDate(this._getFocusedDate()),\r\n y = date.year,\r\n m = date.month,\r\n d = date.date;\r\n\r\n if (this._isHotKeyPressed()){\r\n return;\r\n }\r\n\r\n switch(keyCode) {\r\n case 37: // left\r\n type == 'day' ? (d -= 1) : '';\r\n type == 'month' ? (m -= 1) : '';\r\n type == 'year' ? (y -= 1) : '';\r\n break;\r\n case 38: // up\r\n type == 'day' ? (d -= 7) : '';\r\n type == 'month' ? (m -= 3) : '';\r\n type == 'year' ? (y -= 4) : '';\r\n break;\r\n case 39: // right\r\n type == 'day' ? (d += 1) : '';\r\n type == 'month' ? (m += 1) : '';\r\n type == 'year' ? (y += 1) : '';\r\n break;\r\n case 40: // down\r\n type == 'day' ? (d += 7) : '';\r\n type == 'month' ? (m += 3) : '';\r\n type == 'year' ? (y += 4) : '';\r\n break;\r\n }\r\n\r\n var nd = new Date(y,m,d);\r\n if (nd.getTime() < this.minTime) {\r\n nd = this.minDate;\r\n } else if (nd.getTime() > this.maxTime) {\r\n nd = this.maxDate;\r\n }\r\n\r\n this.focused = nd;\r\n\r\n },\r\n\r\n _getFocusedDate: function () {\r\n var focused = this.focused || this.selectedDates[this.selectedDates.length - 1],\r\n d = this.parsedDate;\r\n\r\n if (!focused) {\r\n switch (this.view) {\r\n case 'days':\r\n focused = new Date(d.year, d.month, new Date().getDate());\r\n break;\r\n case 'months':\r\n focused = new Date(d.year, d.month, 1);\r\n break;\r\n case 'years':\r\n focused = new Date(d.year, 0, 1);\r\n break;\r\n }\r\n }\r\n\r\n return focused;\r\n },\r\n\r\n _getCell: function (date, type) {\r\n type = type || this.cellType;\r\n\r\n var d = datepicker.getParsedDate(date),\r\n selector = '.datepicker--cell[data-year=\"' + d.year + '\"]',\r\n $cell;\r\n\r\n switch (type) {\r\n case 'month':\r\n selector = '[data-month=\"' + d.month + '\"]';\r\n break;\r\n case 'day':\r\n selector += '[data-month=\"' + d.month + '\"][data-date=\"' + d.date + '\"]';\r\n break;\r\n }\r\n $cell = this.views[this.currentView].$el.find(selector);\r\n\r\n return $cell.length ? $cell : $('');\r\n },\r\n\r\n destroy: function () {\r\n var _this = this;\r\n _this.$el\r\n .off('.adp')\r\n .data('datepicker', '');\r\n\r\n _this.selectedDates = [];\r\n _this.focused = '';\r\n _this.views = {};\r\n _this.keys = [];\r\n _this.minRange = '';\r\n _this.maxRange = '';\r\n\r\n if (_this.opts.inline || !_this.elIsInput) {\r\n _this.$datepicker.closest('.datepicker-inline').remove();\r\n } else {\r\n _this.$datepicker.remove();\r\n }\r\n },\r\n\r\n _handleAlreadySelectedDates: function (alreadySelected, selectedDate) {\r\n if (this.opts.range) {\r\n if (!this.opts.toggleSelected) {\r\n // Add possibility to select same date when range is true\r\n if (this.selectedDates.length != 2) {\r\n this._trigger('clickCell', selectedDate);\r\n }\r\n } else {\r\n this.removeDate(selectedDate);\r\n }\r\n } else if (this.opts.toggleSelected){\r\n this.removeDate(selectedDate);\r\n }\r\n\r\n // Change last selected date to be able to change time when clicking on this cell\r\n if (!this.opts.toggleSelected) {\r\n this.lastSelectedDate = alreadySelected;\r\n if (this.opts.timepicker) {\r\n this.timepicker._setTime(alreadySelected);\r\n this.timepicker.update();\r\n }\r\n }\r\n },\r\n\r\n _onShowEvent: function (e) {\r\n if (!this.visible) {\r\n this.show();\r\n }\r\n },\r\n\r\n _onBlur: function () {\r\n if (!this.inFocus && this.visible) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onMouseDownDatepicker: function (e) {\r\n this.inFocus = true;\r\n },\r\n\r\n _onMouseUpDatepicker: function (e) {\r\n this.inFocus = false;\r\n e.originalEvent.inFocus = true;\r\n if (!e.originalEvent.timepickerFocus) this.$el.focus();\r\n },\r\n\r\n _onKeyUpGeneral: function (e) {\r\n var val = this.$el.val();\r\n\r\n if (!val) {\r\n this.clear();\r\n }\r\n },\r\n\r\n _onResize: function () {\r\n if (this.visible) {\r\n this.setPosition();\r\n }\r\n },\r\n\r\n _onMouseUpBody: function (e) {\r\n if (e.originalEvent.inFocus) return;\r\n\r\n if (this.visible && !this.inFocus) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onMouseUpEl: function (e) {\r\n e.originalEvent.inFocus = true;\r\n setTimeout(this._onKeyUpGeneral.bind(this),4);\r\n },\r\n\r\n _onKeyDown: function (e) {\r\n var code = e.which;\r\n this._registerKey(code);\r\n\r\n // Arrows\r\n if (code >= 37 && code <= 40) {\r\n e.preventDefault();\r\n this._focusNextCell(code);\r\n }\r\n\r\n // Enter\r\n if (code == 13) {\r\n if (this.focused) {\r\n if (this._getCell(this.focused).hasClass('-disabled-')) return;\r\n if (this.view != this.opts.minView) {\r\n this.down()\r\n } else {\r\n var alreadySelected = this._isSelected(this.focused, this.cellType);\r\n\r\n if (!alreadySelected) {\r\n if (this.timepicker) {\r\n this.focused.setHours(this.timepicker.hours);\r\n this.focused.setMinutes(this.timepicker.minutes);\r\n }\r\n this.selectDate(this.focused);\r\n return;\r\n }\r\n this._handleAlreadySelectedDates(alreadySelected, this.focused)\r\n }\r\n }\r\n }\r\n\r\n // Esc\r\n if (code == 27) {\r\n this.hide();\r\n }\r\n },\r\n\r\n _onKeyUp: function (e) {\r\n var code = e.which;\r\n this._unRegisterKey(code);\r\n },\r\n\r\n _onHotKey: function (e, hotKey) {\r\n this._handleHotKey(hotKey);\r\n },\r\n\r\n _onMouseEnterCell: function (e) {\r\n var $cell = $(e.target).closest('.datepicker--cell'),\r\n date = this._getDateFromCell($cell);\r\n\r\n // Prevent from unnecessary rendering and setting new currentDate\r\n this.silent = true;\r\n\r\n if (this.focused) {\r\n this.focused = ''\r\n }\r\n\r\n $cell.addClass('-focus-');\r\n\r\n this.focused = date;\r\n this.silent = false;\r\n\r\n if (this.opts.range && this.selectedDates.length == 1) {\r\n this.minRange = this.selectedDates[0];\r\n this.maxRange = '';\r\n if (datepicker.less(this.minRange, this.focused)) {\r\n this.maxRange = this.minRange;\r\n this.minRange = '';\r\n }\r\n this.views[this.currentView]._update();\r\n }\r\n },\r\n\r\n _onMouseLeaveCell: function (e) {\r\n var $cell = $(e.target).closest('.datepicker--cell');\r\n\r\n $cell.removeClass('-focus-');\r\n\r\n this.silent = true;\r\n this.focused = '';\r\n this.silent = false;\r\n },\r\n\r\n _onTimeChange: function (e, h, m) {\r\n var date = new Date(),\r\n selectedDates = this.selectedDates,\r\n selected = false;\r\n\r\n if (selectedDates.length) {\r\n selected = true;\r\n date = this.lastSelectedDate;\r\n }\r\n\r\n date.setHours(h);\r\n date.setMinutes(m);\r\n\r\n if (!selected && !this._getCell(date).hasClass('-disabled-')) {\r\n this.selectDate(date);\r\n } else {\r\n this._setInputValue();\r\n if (this.opts.onSelect) {\r\n this._triggerOnChange();\r\n }\r\n }\r\n },\r\n\r\n _onClickCell: function (e, date) {\r\n if (this.timepicker) {\r\n date.setHours(this.timepicker.hours);\r\n date.setMinutes(this.timepicker.minutes);\r\n }\r\n this.selectDate(date);\r\n },\r\n\r\n set focused(val) {\r\n if (!val && this.focused) {\r\n var $cell = this._getCell(this.focused);\r\n\r\n if ($cell.length) {\r\n $cell.removeClass('-focus-')\r\n }\r\n }\r\n this._focused = val;\r\n if (this.opts.range && this.selectedDates.length == 1) {\r\n this.minRange = this.selectedDates[0];\r\n this.maxRange = '';\r\n if (datepicker.less(this.minRange, this._focused)) {\r\n this.maxRange = this.minRange;\r\n this.minRange = '';\r\n }\r\n }\r\n if (this.silent) return;\r\n this.date = val;\r\n },\r\n\r\n get focused() {\r\n return this._focused;\r\n },\r\n\r\n get parsedDate() {\r\n return datepicker.getParsedDate(this.date);\r\n },\r\n\r\n set date (val) {\r\n if (!(val instanceof Date)) return;\r\n\r\n this.currentDate = val;\r\n\r\n if (this.inited && !this.silent) {\r\n this.views[this.view]._render();\r\n this.nav._render();\r\n if (this.visible && this.elIsInput) {\r\n this.setPosition();\r\n }\r\n }\r\n return val;\r\n },\r\n\r\n get date () {\r\n return this.currentDate\r\n },\r\n\r\n set view (val) {\r\n this.viewIndex = this.viewIndexes.indexOf(val);\r\n\r\n if (this.viewIndex < 0) {\r\n return;\r\n }\r\n\r\n this.prevView = this.currentView;\r\n this.currentView = val;\r\n\r\n if (this.inited) {\r\n if (!this.views[val]) {\r\n this.views[val] = new $.fn.datepicker.Body(this, val, this.opts)\r\n } else {\r\n this.views[val]._render();\r\n }\r\n\r\n this.views[this.prevView].hide();\r\n this.views[val].show();\r\n this.nav._render();\r\n\r\n if (this.opts.onChangeView) {\r\n this.opts.onChangeView(val)\r\n }\r\n if (this.elIsInput && this.visible) this.setPosition();\r\n }\r\n\r\n return val\r\n },\r\n\r\n get view() {\r\n return this.currentView;\r\n },\r\n\r\n get cellType() {\r\n return this.view.substring(0, this.view.length - 1)\r\n },\r\n\r\n get minTime() {\r\n var min = datepicker.getParsedDate(this.minDate);\r\n return new Date(min.year, min.month, min.date).getTime()\r\n },\r\n\r\n get maxTime() {\r\n var max = datepicker.getParsedDate(this.maxDate);\r\n return new Date(max.year, max.month, max.date).getTime()\r\n },\r\n\r\n get curDecade() {\r\n return datepicker.getDecade(this.date)\r\n }\r\n };\r\n\r\n // Utils\r\n // -------------------------------------------------\r\n\r\n datepicker.getDaysCount = function (date) {\r\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n };\r\n\r\n datepicker.getParsedDate = function (date) {\r\n return {\r\n year: date.getFullYear(),\r\n month: date.getMonth(),\r\n fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based\r\n date: date.getDate(),\r\n fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),\r\n day: date.getDay(),\r\n hours: date.getHours(),\r\n fullHours: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() ,\r\n minutes: date.getMinutes(),\r\n fullMinutes: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()\r\n }\r\n };\r\n\r\n datepicker.getDecade = function (date) {\r\n var firstYear = Math.floor(date.getFullYear() / 10) * 10;\r\n\r\n return [firstYear, firstYear + 9];\r\n };\r\n\r\n datepicker.template = function (str, data) {\r\n return str.replace(/#\\{([\\w]+)\\}/g, function (source, match) {\r\n if (data[match] || data[match] === 0) {\r\n return data[match]\r\n }\r\n });\r\n };\r\n\r\n datepicker.isSame = function (date1, date2, type) {\r\n if (!date1 || !date2) return false;\r\n var d1 = datepicker.getParsedDate(date1),\r\n d2 = datepicker.getParsedDate(date2),\r\n _type = type ? type : 'day',\r\n\r\n conditions = {\r\n day: d1.date == d2.date && d1.month == d2.month && d1.year == d2.year,\r\n month: d1.month == d2.month && d1.year == d2.year,\r\n year: d1.year == d2.year\r\n };\r\n\r\n return conditions[_type];\r\n };\r\n\r\n datepicker.less = function (dateCompareTo, date, type) {\r\n if (!dateCompareTo || !date) return false;\r\n return date.getTime() < dateCompareTo.getTime();\r\n };\r\n\r\n datepicker.bigger = function (dateCompareTo, date, type) {\r\n if (!dateCompareTo || !date) return false;\r\n return date.getTime() > dateCompareTo.getTime();\r\n };\r\n\r\n datepicker.getLeadingZeroNum = function (num) {\r\n return parseInt(num) < 10 ? '0' + num : num;\r\n };\r\n\r\n /**\r\n * Returns copy of date with hours and minutes equals to 0\r\n * @param date {Date}\r\n */\r\n datepicker.resetTime = function (date) {\r\n if (typeof date != 'object') return;\r\n date = datepicker.getParsedDate(date);\r\n return new Date(date.year, date.month, date.date)\r\n };\r\n\r\n $.fn.datepicker = function ( options ) {\r\n return this.each(function () {\r\n if (!$.data(this, pluginName)) {\r\n $.data(this, pluginName,\r\n new Datepicker( this, options ));\r\n } else {\r\n var _this = $.data(this, pluginName);\r\n\r\n _this.opts = $.extend(true, _this.opts, options);\r\n _this.update();\r\n }\r\n });\r\n };\r\n\r\n $.fn.datepicker.Constructor = Datepicker;\r\n\r\n $.fn.datepicker.language = {\r\n ru: {\r\n days: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\r\n daysShort: ['Вос','Пон','Вто','Сре','Чет','Пят','Суб'],\r\n daysMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],\r\n months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\r\n monthsShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],\r\n today: 'Сегодня',\r\n clear: 'Очистить',\r\n dateFormat: 'dd.mm.yyyy',\r\n timeFormat: 'hh:ii',\r\n firstDay: 1\r\n }\r\n };\r\n\r\n $(function () {\r\n $(autoInitSelector).datepicker();\r\n })\r\n\r\n})();\r\n",";(function () {\r\n var template = '' +\r\n '
#{prevHtml}
' +\r\n '
#{title}
' +\r\n '
#{nextHtml}
',\r\n buttonsContainerTemplate = '
',\r\n button = '#{label}',\r\n datepicker = $.fn.datepicker,\r\n dp = datepicker.Constructor;\r\n\r\n datepicker.Navigation = function (d, opts) {\r\n this.d = d;\r\n this.opts = opts;\r\n\r\n this.$buttonsContainer = '';\r\n\r\n this.init();\r\n };\r\n\r\n datepicker.Navigation.prototype = {\r\n init: function () {\r\n this._buildBaseHtml();\r\n this._bindEvents();\r\n },\r\n\r\n _bindEvents: function () {\r\n this.d.$nav.on('click', '.datepicker--nav-action', $.proxy(this._onClickNavButton, this));\r\n this.d.$nav.on('click', '.datepicker--nav-title', $.proxy(this._onClickNavTitle, this));\r\n this.d.$datepicker.on('click', '.datepicker--button', $.proxy(this._onClickNavButton, this));\r\n },\r\n\r\n _buildBaseHtml: function () {\r\n if (!this.opts.onlyTimepicker) {\r\n this._render();\r\n }\r\n this._addButtonsIfNeed();\r\n },\r\n\r\n _addButtonsIfNeed: function () {\r\n if (this.opts.todayButton) {\r\n this._addButton('today')\r\n }\r\n if (this.opts.clearButton) {\r\n this._addButton('clear')\r\n }\r\n },\r\n\r\n _render: function () {\r\n var title = this._getTitle(this.d.currentDate),\r\n html = dp.template(template, $.extend({title: title}, this.opts));\r\n this.d.$nav.html(html);\r\n if (this.d.view == 'years') {\r\n $('.datepicker--nav-title', this.d.$nav).addClass('-disabled-');\r\n }\r\n this.setNavStatus();\r\n },\r\n\r\n _getTitle: function (date) {\r\n return this.d.formatDate(this.opts.navTitles[this.d.view], date)\r\n },\r\n\r\n _addButton: function (type) {\r\n if (!this.$buttonsContainer.length) {\r\n this._addButtonsContainer();\r\n }\r\n\r\n var data = {\r\n action: type,\r\n label: this.d.loc[type]\r\n },\r\n html = dp.template(button, data);\r\n\r\n if ($('[data-action=' + type + ']', this.$buttonsContainer).length) return;\r\n this.$buttonsContainer.append(html);\r\n },\r\n\r\n _addButtonsContainer: function () {\r\n this.d.$datepicker.append(buttonsContainerTemplate);\r\n this.$buttonsContainer = $('.datepicker--buttons', this.d.$datepicker);\r\n },\r\n\r\n setNavStatus: function () {\r\n if (!(this.opts.minDate || this.opts.maxDate) || !this.opts.disableNavWhenOutOfRange) return;\r\n\r\n var date = this.d.parsedDate,\r\n m = date.month,\r\n y = date.year,\r\n d = date.date;\r\n\r\n switch (this.d.view) {\r\n case 'days':\r\n if (!this.d._isInRange(new Date(y, m-1, 1), 'month')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(y, m+1, 1), 'month')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n case 'months':\r\n if (!this.d._isInRange(new Date(y-1, m, d), 'year')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(y+1, m, d), 'year')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n case 'years':\r\n var decade = dp.getDecade(this.d.date);\r\n if (!this.d._isInRange(new Date(decade[0] - 1, 0, 1), 'year')) {\r\n this._disableNav('prev')\r\n }\r\n if (!this.d._isInRange(new Date(decade[1] + 1, 0, 1), 'year')) {\r\n this._disableNav('next')\r\n }\r\n break;\r\n }\r\n },\r\n\r\n _disableNav: function (nav) {\r\n $('[data-action=\"' + nav + '\"]', this.d.$nav).addClass('-disabled-')\r\n },\r\n\r\n _activateNav: function (nav) {\r\n $('[data-action=\"' + nav + '\"]', this.d.$nav).removeClass('-disabled-')\r\n },\r\n\r\n _onClickNavButton: function (e) {\r\n var $el = $(e.target).closest('[data-action]'),\r\n action = $el.data('action');\r\n\r\n this.d[action]();\r\n },\r\n\r\n _onClickNavTitle: function (e) {\r\n if ($(e.target).hasClass('-disabled-')) return;\r\n\r\n if (this.d.view == 'days') {\r\n return this.d.view = 'months'\r\n }\r\n\r\n this.d.view = 'years';\r\n }\r\n }\r\n\r\n})();\r\n"],"sourceRoot":""}