{"version":3,"file":"kendo.datepicker.min.js","sources":["kendo.datepicker.js"],"sourcesContent":["(function(f, define) {\n define('kendo.datepicker',[ \"kendo.calendar\", \"kendo.popup\", \"kendo.dateinput\", \"kendo.html.button\"], f);\n})(function() {\n\nvar __meta__ = {\n id: \"datepicker\",\n name: \"DatePicker\",\n category: \"web\",\n description: \"The DatePicker widget allows the user to select a date from a calendar or by direct input.\",\n depends: [ \"calendar\", \"popup\", \"html.button\" ]\n};\n\n(function($, undefined) {\n var kendo = window.kendo,\n ui = kendo.ui,\n html = kendo.html,\n Widget = ui.Widget,\n parse = kendo.parseDate,\n keys = kendo.keys,\n support = kendo.support,\n template = kendo.template,\n activeElement = kendo._activeElement,\n DIV = \"
\",\n SPAN = \"\",\n ns = \".kendoDatePicker\",\n CLICK = \"click\" + ns,\n UP = support.mouseAndTouchPresent ? kendo.applyEventMap(\"up\", ns.slice(1)) : CLICK,\n OPEN = \"open\",\n CLOSE = \"close\",\n CHANGE = \"change\",\n DISABLED = \"disabled\",\n READONLY = \"readonly\",\n FOCUSED = \"k-focus\",\n SELECTED = \"k-selected\",\n STATEDISABLED = \"k-disabled\",\n HOVER = \"k-hover\",\n HOVEREVENTS = \"mouseenter\" + ns + \" mouseleave\" + ns,\n MOUSEDOWN = \"mousedown\" + ns,\n NAVIGATE = \"navigate\",\n ID = \"id\",\n MIN = \"min\",\n MAX = \"max\",\n MONTH = \"month\",\n ARIA_DISABLED = \"aria-disabled\",\n ARIA_READONLY = \"aria-readonly\",\n ARIA_EXPANDED = \"aria-expanded\",\n ARIA_HIDDEN = \"aria-hidden\",\n ARIA_ACTIVEDESCENDANT = \"aria-activedescendant\",\n calendar = kendo.calendar,\n isInRange = calendar.isInRange,\n restrictValue = calendar.restrictValue,\n isEqualDatePart = calendar.isEqualDatePart,\n extend = $.extend,\n DATE = Date;\n\n function normalize(options) {\n var parseFormats = options.parseFormats,\n format = options.format;\n\n calendar.normalize(options);\n\n\n parseFormats = Array.isArray(parseFormats) ? parseFormats : [parseFormats];\n\n if (!parseFormats.length) {\n parseFormats.push(\"yyyy-MM-dd\");\n }\n\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n\n options.parseFormats = parseFormats;\n }\n\n function preventDefault(e) {\n e.preventDefault();\n }\n\n var DateView = function(options) {\n var that = this, id,\n body = document.body,\n div = $(DIV).attr(ARIA_HIDDEN, \"true\")\n .addClass(\"k-calendar-container\");\n\n that.options = options = options || {};\n id = options.id;\n\n if (!options.omitPopup) {\n div.appendTo(body);\n that.popup = new ui.Popup(div, extend(options.popup, options, { name: \"Popup\", isRtl: kendo.support.isRtl(options.anchor) }));\n } else {\n div = options.dateDiv;\n }\n if (id) {\n id += \"_dateview\";\n\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.div = div;\n\n that.value(options.value);\n };\n\n DateView.prototype = {\n _calendar: function() {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid())\n .appendTo(options.omitPopup ? options.dateDiv : that.popup.element)\n .on(MOUSEDOWN, preventDefault)\n .on(CLICK, \"td:has(.k-link)\", that._click.bind(that));\n\n that.calendar = calendar = new ui.Calendar(div, {\n componentType: options.componentType,\n size: options.size,\n messages: options.messages\n });\n that._setOptions(options);\n\n div.addClass(kendo.getValidCssClass(\"k-calendar-\", \"size\", options.size));\n\n calendar.navigate(that._value || that._current, options.start);\n\n that.value(that._value);\n }\n },\n\n _setOptions: function(options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n messages: options.messages,\n disableDates: options.disableDates\n });\n },\n\n setOptions: function(options) {\n var old = this.options;\n var disableDates = options.disableDates;\n\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n\n destroy: function() {\n if (this.popup) {\n this.popup.destroy();\n }\n },\n\n open: function() {\n var that = this;\n var popupHovered;\n\n that._calendar();\n\n // In some cases when the popup is opened resize is triggered which will cause it to close\n // Setting the below flag will prevent this from happening\n // Reference: https://github.com/telerik/kendo/pull/7553\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n\n that.popup.open();\n\n setTimeout(function() {\n that.popup._hovered = popupHovered;\n }, 1);\n },\n\n close: function() {\n if (this.popup) {\n this.popup.close();\n }\n },\n\n min: function(value) {\n this._option(MIN, value);\n },\n\n max: function(value) {\n this._option(MAX, value);\n },\n\n toggle: function() {\n var that = this;\n\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n\n move: function(e) {\n var that = this,\n key = e.keyCode,\n calendar = that.calendar,\n selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER,\n handled = false;\n\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n\n } else if (that.popup && that.popup.visible()) {\n\n if (key == keys.ESC || (selectIsClicked && calendar._cell.hasClass(SELECTED))) {\n that.close();\n e.preventDefault();\n return true;\n }\n //spacebar selects a date in the calendar\n if (key != keys.SPACEBAR) {\n that._current = calendar._move(e);\n }\n\n handled = true;\n }\n\n return handled;\n },\n\n current: function(date) {\n this._current = date;\n if (this.calendar) {\n this.calendar._focus(date);\n }\n },\n\n value: function(value) {\n var that = this,\n calendar = that.calendar,\n options = that.options,\n disabledDate = options.disableDates;\n\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n\n if (calendar) {\n calendar.value(value);\n }\n },\n\n _click: function(e) {\n\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.calendar.trigger(\"change\");\n this.close();\n }\n },\n\n _option: function(option, value) {\n var that = this;\n var calendar = that.calendar;\n\n that.options[option] = value;\n\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n\n DateView.normalize = normalize;\n\n kendo.DateView = DateView;\n\n var DatePicker = Widget.extend({\n init: function(element, options) {\n var that = this,\n initialValue,\n disabled,\n div;\n\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n\n options.min = parse(element.attr(\"min\")) || parse(options.min);\n options.max = parse(element.attr(\"max\")) || parse(options.max);\n\n normalize(options);\n\n that._initialOptions = extend({}, options);\n\n that._wrapper();\n\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function() {\n // calendar is the current scope\n that._change(this.value());\n that.close();\n },\n close: function(e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n\n setTimeout(function() {\n element.removeAttr(\"aria-activedescendant\");\n });\n }\n },\n open: function(e) {\n var options = that.options,\n date;\n\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n\n that.dateView[date ? \"current\" : \"value\"](date);\n }\n\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n\n that._updateARIA(date);\n\n }\n }\n }));\n\n div = that.dateView.div;\n\n that._icon();\n\n try {\n element[0].setAttribute(\"type\", \"text\");\n } catch (e) {\n element[0].type = \"text\";\n }\n\n element\n .addClass(\"k-input-inner\")\n .attr({\n role: \"combobox\",\n \"aria-expanded\": false,\n \"aria-haspopup\": \"grid\",\n \"aria-controls\": that.dateView._dateViewID,\n \"autocomplete\": \"off\"\n });\n that._reset();\n that._template();\n\n disabled = element.is(\"[disabled]\") || $(that.element).parents(\"fieldset\").is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is(\"[readonly]\"));\n }\n\n initialValue = parse(options.value || that.element.val(), options.parseFormats, options.culture);\n\n that._createDateInput(options);\n\n that._old = that._update(initialValue || that.element.val());\n that._oldText = element.val();\n that._applyCssClasses();\n\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE],\n options: {\n name: \"DatePicker\",\n value: null,\n footer: \"\",\n format: \"\",\n culture: \"\",\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n disableDates: null,\n ARIATemplate: 'Current focused #=data.valueType# is #=data.text#',\n dateInput: false,\n weekNumber: false,\n messages: {\n weekColumnHeader: \"\"\n },\n componentType: \"classic\",\n size: \"medium\",\n fillMode: \"solid\",\n rounded: \"medium\"\n },\n\n setOptions: function(options) {\n var that = this;\n var value = that._value;\n\n Widget.fn.setOptions.call(that, options);\n\n options = that.options;\n\n options.min = parse(options.min);\n options.max = parse(options.max);\n\n normalize(options);\n\n that._dateIcon.off(ns);\n that._dateIcon.remove();\n\n that.dateView.setOptions(options);\n that._icon();\n that._editable(options);\n that._createDateInput(options);\n\n if (!that._dateInput) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n\n if (value) {\n that._updateARIA(value);\n }\n },\n\n _editable: function(options) {\n var that = this,\n icon = that._dateIcon.off(ns),\n element = that.element.off(ns),\n wrapper = that.wrapper.off(ns),\n readonly = options.readonly,\n disable = options.disable;\n\n if (!readonly && !disable) {\n wrapper\n .removeClass(STATEDISABLED)\n .on(HOVEREVENTS, that._toggleHover);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n element.attr(ARIA_DISABLED, false)\n .attr(ARIA_READONLY, false)\n .on(\"keydown\" + ns, that._keydown.bind(that))\n .on(\"focusout\" + ns, that._blur.bind(that))\n .on(\"focus\" + ns, function() {\n that.wrapper.addClass(FOCUSED);\n });\n\n icon.on(UP, that._click.bind(that))\n .on(MOUSEDOWN, preventDefault);\n } else {\n wrapper\n .addClass(disable ? STATEDISABLED : \"\")\n .removeClass(disable ? \"\" : STATEDISABLED);\n\n element.attr(DISABLED, disable)\n .attr(READONLY, readonly)\n .attr(ARIA_DISABLED, disable)\n .attr(ARIA_READONLY, readonly);\n }\n },\n\n readonly: function(readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (this._dateInput) {\n this._dateInput._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n }\n },\n\n enable: function(enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (this._dateInput) {\n this._dateInput._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n }\n },\n\n destroy: function() {\n var that = this;\n\n Widget.fn.destroy.call(that);\n\n if (that.dateView.calendar && that._navigateCalendarHandler) {\n that.dateView.calendar.unbind(NAVIGATE, that._navigateCalendarHandler);\n that._navigateCalendarHandler = null;\n }\n\n that.dateView.destroy();\n\n that.element.off(ns);\n that._dateIcon.off(ns);\n\n if (that._form) {\n that._form.off(\"reset\", that._resetHandler);\n }\n },\n\n open: function() {\n this.dateView.open();\n this._navigateCalendar();\n },\n\n close: function() {\n this.dateView.close();\n },\n\n min: function(value) {\n return this._option(MIN, value);\n },\n\n max: function(value) {\n return this._option(MAX, value);\n },\n\n value: function(value) {\n var that = this;\n\n if (value === undefined) {\n return that._value;\n }\n\n that._old = that._update(value);\n\n if (that._old === null) {\n if (that._dateInput) {\n that._dateInput.value(that._old);\n } else {\n that.element.val(\"\");\n }\n }\n\n that._oldText = that.element.val();\n },\n\n _toggleHover: function(e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === \"mouseenter\");\n },\n\n _blur: function() {\n var that = this,\n value = that.element.val();\n\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n if (!value) {\n that.dateView.current(kendo.calendar.getToday());\n }\n }\n\n that.wrapper.removeClass(FOCUSED);\n },\n\n _click: function(e) {\n var that = this;\n\n that.dateView.toggle();\n that._navigateCalendar();\n that._focusElement(e.type);\n },\n\n _focusElement: function(eventType) {\n var element = this.element;\n\n if ((!support.touch || (support.mouseAndTouchPresent && !(eventType || \"\").match(/touch/i))) && element[0] !== activeElement()) {\n element.trigger(\"focus\");\n }\n },\n\n _change: function(value) {\n var that = this,\n oldValue = that.element.val(),\n dateChanged;\n\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n\n that.trigger(CHANGE);\n }\n\n that._typing = false;\n },\n\n _keydown: function(e) {\n var that = this,\n dateView = that.dateView,\n value = that.element.val(),\n handled = false;\n\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n\n _icon: function() {\n var that = this,\n element = that.element,\n options = that.options,\n icon;\n\n icon = element.next(\"button.k-input-button\");\n\n if (!icon[0]) {\n icon = $(html.renderButton('', {\n icon: \"calendar\",\n size: options.size,\n fillMode: options.fillMode,\n shape: \"none\",\n rounded: \"none\"\n })).insertAfter(element);\n }\n\n that._dateIcon = icon.attr({\n \"role\": \"button\"\n });\n },\n\n _setCalendarAttribute: function() {\n var that = this;\n setTimeout(function() {\n that.element.attr(ARIA_ACTIVEDESCENDANT, that.dateView.calendar._table.attr(ARIA_ACTIVEDESCENDANT));\n });\n },\n\n _navigateCalendar: function() {\n var that = this;\n\n if (!that._navigateCalendarHandler) {\n that._navigateCalendarHandler = that._setCalendarAttribute.bind(that);\n }\n\n if (!!that.dateView.calendar) {\n that.dateView.calendar.unbind(NAVIGATE, that._navigateCalendarHandler).bind(NAVIGATE, that._navigateCalendarHandler);\n }\n },\n\n _option: function(option, value) {\n var that = this,\n options = that.options;\n\n if (value === undefined) {\n return options[option];\n }\n\n value = parse(value, options.parseFormats, options.culture);\n\n if (!value) {\n return;\n }\n\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n\n _update: function(value) {\n var that = this,\n options = that.options,\n min = options.min,\n max = options.max,\n current = that._value,\n date = parse(value, options.parseFormats, options.culture),\n isSameType = (date === null && current === null) || (date instanceof Date && current instanceof Date),\n formattedValue;\n\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n\n if (formattedValue !== value && !(that._dateInput && !date)) {\n that.element.val(date === null ? value : formattedValue);\n }\n\n return date;\n }\n\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n\n that._value = date;\n that.dateView.value(date);\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n\n return date;\n },\n\n _wrapper: function() {\n var that = this,\n element = that.element,\n wrapper;\n\n wrapper = element.parents(\".k-datepicker\");\n\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent();\n }\n\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n height: element[0].style.height\n });\n\n that.wrapper = wrapper.addClass(\"k-datepicker k-input\")\n .addClass(element[0].className).removeClass('input-validation-error');\n },\n\n _reset: function() {\n var that = this,\n element = that.element,\n formId = element.attr(\"form\"),\n options = that.options,\n disabledDate = options.disableDates,\n parseFormats = options.parseFormats.length ? options.parseFormats : null,\n optionsValue = that._initialOptions.value,\n form = formId ? $(\"#\" + formId) : element.closest(\"form\"),\n initialValue = element[0].defaultValue;\n\n if (optionsValue && (disabledDate && disabledDate(optionsValue))) {\n optionsValue = null;\n }\n\n if ((!initialValue || !kendo.parseDate(initialValue, parseFormats, options.culture)) && optionsValue) {\n element.attr(\"value\", kendo.toString(optionsValue, options.format, options.culture));\n }\n\n if (form[0]) {\n that._resetHandler = function() {\n that.value(optionsValue || element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n\n that._form = form.on(\"reset\", that._resetHandler);\n }\n },\n\n _template: function() {\n this._ariaTemplate = template(this.options.ARIATemplate).bind(this);\n },\n\n _createDateInput: function(options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n\n if (options.dateInput ) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n size: options.size,\n fillMode: options.fillMode,\n rounded: options.rounded,\n min: options.min,\n max: options.max\n });\n }\n },\n\n _updateARIA: function(date) {\n var that = this;\n var calendar = that.dateView.calendar;\n\n if (that.element && that.element.length) {\n that.element[0].removeAttribute(ARIA_ACTIVEDESCENDANT);\n }\n\n if (calendar) {\n that.element.attr(ARIA_ACTIVEDESCENDANT, calendar._updateAria(that._ariaTemplate, date));\n }\n }\n });\n\n kendo.cssProperties.registerPrefix(\"DatePicker\", \"k-input-\");\n\n kendo.cssProperties.registerValues(\"DatePicker\", [{\n prop: \"rounded\",\n values: kendo.cssProperties.roundedValues.concat([['full', 'full']])\n }]);\n\n ui.plugin(DatePicker);\n\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(a1, a2, a3) { (a3 || a2)(); });\n\n"],"names":["define","__meta__","id","name","category","description","depends","$","window","kendo","jQuery","undefined","ui","html","Widget","parse","parseDate","keys","support","template","activeElement","_activeElement","DIV","SPAN","ns","CLICK","UP","mouseAndTouchPresent","applyEventMap","slice","OPEN","CLOSE","CHANGE","DISABLED","READONLY","FOCUSED","SELECTED","STATEDISABLED","HOVER","HOVEREVENTS","MOUSEDOWN","NAVIGATE","ID","MIN","MAX","MONTH","ARIA_DISABLED","ARIA_READONLY","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_ACTIVEDESCENDANT","calendar","isInRange","restrictValue","isEqualDatePart","extend","DATE","Date","normalize","options","parseFormats","format","Array","isArray","length","push","inArray","splice","preventDefault","e","DateView","that","this","body","document","div","attr","addClass","omitPopup","appendTo","popup","Popup","isRtl","anchor","dateDiv","_dateViewID","value","DatePicker","prototype","_calendar","guid","element","on","_click","bind","Calendar","componentType","size","messages","_setOptions","getValidCssClass","navigate","_value","_current","start","setOptions","focusOnNav","change","culture","dates","depth","footer","max","min","month","weekNumber","disableDates","old","disabled","close","open","destroy","popupHovered","_hovered","setTimeout","_option","toggle","visible","move","key","keyCode","selectIsClicked","ctrlKey","DOWN","ENTER","handled","altKey","ESC","_cell","hasClass","SPACEBAR","_move","current","date","_focus","disabledDate","currentTarget","className","indexOf","trigger","option","init","initialValue","fn","call","_initialOptions","_wrapper","dateView","wrapper","_change","removeAttr","val","_oldText","_updateARIA","_icon","setAttribute","type","role","aria-expanded","aria-haspopup","aria-controls","autocomplete","_reset","_template","is","parents","enable","readonly","_createDateInput","_old","_update","_applyCssClasses","notify","events","animation","ARIATemplate","dateInput","weekColumnHeader","fillMode","rounded","_dateIcon","off","remove","_editable","_dateInput","toString","icon","disable","removeClass","_toggleHover","removeAttribute","_keydown","_blur","_navigateCalendarHandler","unbind","_form","_resetHandler","_navigateCalendar","toggleClass","getToday","_focusElement","eventType","touch","match","oldValue","dateChanged","isEqualDate","valueUpdated","_typing","textFormatted","stopImmediatePropagation","next","renderButton","shape","insertAfter","_setCalendarAttribute","_table","isSameType","formattedValue","wrap","parent","style","cssText","css","height","formId","optionsValue","form","closest","defaultValue","_ariaTemplate","DateInput","_updateAria","cssProperties","registerPrefix","registerValues","prop","values","roundedValues","concat","plugin","amd","a1","a2","a3"],"mappings":"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"}