{"version":3,"sources":["kendo.maskedtextbox.js"],"names":["f","define","$","undefined","kendo","window","caret","keys","ui","Widget","ns","proxy","INPUT_EVENT_NAME","support","propertyChangeEvent","STATEDISABLED","DISABLED","READONLY","CHANGE","MaskedTextBox","extend","init","element","options","DOMElement","disabled","that","this","fn","call","_rules","rules","wrapper","_tokenize","_form","addClass","attr","on","value","_togglePrompt","_old","_emptyMask","_oldValue","_timeoutId","setTimeout","_maskLength","val","clearTimeout","_change","is","parents","enable","readonly","notify","name","clearPromptChar","unmaskOnPost","promptChar","culture","mask","events","0","9","#","L","?","&","C","A","a","setOptions","_unbindInput","_bindInput","destroy","off","_formElement","_resetHandler","_submitHandler","raw","unmasked","_unmask","replace","RegExp","emptyMask","_mask","_activeElement","show","_editable","disable","_keydown","_keypress","_paste","_propertyChange","toggleClass","removeAttr","removeClass","trigger","start","_pasting","substring","e","target","position","end","pasted","formId","form","closest","placeholder","key","keyCode","selection","backward","BACKSPACE","DELETE","_find","preventDefault","ENTER","character","which","metaKey","ctrlKey","String","fromCharCode","idx","step","charAt","tokens","valueLength","chr","current","empty","chrIdx","length","split","join","token","tokenIdx","tokensLength","result","test","isFunction","rule","i","l","maskChars","numberFormat","getCulture","currency","symbol","plugin","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.maskedtextbox.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.maskedtextbox', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'maskedtextbox',\n name: 'MaskedTextBox',\n category: 'web',\n description: 'The MaskedTextBox widget allows to specify a mask type on an input field.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo;\n var caret = kendo.caret;\n var keys = kendo.keys;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var ns = '.kendoMaskedTextBox';\n var proxy = $.proxy;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var MaskedTextBox = Widget.extend({\n init: function (element, options) {\n var that = this;\n var DOMElement;\n Widget.fn.init.call(that, element, options);\n that._rules = $.extend({}, that.rules, that.options.rules);\n element = that.element;\n DOMElement = element[0];\n that.wrapper = element;\n that._tokenize();\n that._form();\n that.element.addClass('k-textbox').attr('autocomplete', 'off').on('focus' + ns, function () {\n var value = DOMElement.value;\n if (!value) {\n DOMElement.value = that._old = that._emptyMask;\n } else {\n that._togglePrompt(true);\n }\n that._oldValue = value;\n that._timeoutId = setTimeout(function () {\n caret(element, 0, value ? that._maskLength : 0);\n });\n }).on('focusout' + ns, function () {\n var value = element.val();\n clearTimeout(that._timeoutId);\n DOMElement.value = that._old = '';\n if (value !== that._emptyMask) {\n DOMElement.value = that._old = value;\n }\n that._change();\n that._togglePrompt();\n });\n var 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 that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'MaskedTextBox',\n clearPromptChar: false,\n unmaskOnPost: false,\n promptChar: '_',\n culture: '',\n rules: {},\n value: '',\n mask: ''\n },\n events: [CHANGE],\n rules: {\n '0': /\\d/,\n '9': /\\d|\\s/,\n '#': /\\d|\\s|\\+|\\-/,\n 'L': /[a-zA-Z]/,\n '?': /[a-zA-Z]|\\s/,\n '&': /\\S/,\n 'C': /./,\n 'A': /[a-zA-Z0-9]/,\n 'a': /[a-zA-Z0-9]|\\s/\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._rules = $.extend({}, that.rules, that.options.rules);\n that._tokenize();\n this._unbindInput();\n this._bindInput();\n that.value(that.element.val());\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n that._formElement.off('submit', that._submitHandler);\n }\n Widget.fn.destroy.call(that);\n },\n raw: function () {\n var unmasked = this._unmask(this.element.val(), 0);\n return unmasked.replace(new RegExp(this.options.promptChar, 'g'), '');\n },\n value: function (value) {\n var element = this.element;\n var emptyMask = this._emptyMask;\n if (value === undefined) {\n return this.element.val();\n }\n if (value === null) {\n value = '';\n }\n if (!emptyMask) {\n element.val(value);\n return;\n }\n value = this._unmask(value + '');\n element.val(value ? emptyMask : '');\n this._mask(0, this._maskLength, value);\n value = element.val();\n this._oldValue = value;\n if (kendo._activeElement() !== element) {\n if (value === emptyMask) {\n element.val('');\n } else {\n this._togglePrompt();\n }\n }\n },\n _togglePrompt: function (show) {\n var DOMElement = this.element[0];\n var value = DOMElement.value;\n if (this.options.clearPromptChar) {\n if (!show) {\n value = value.replace(new RegExp(this.options.promptChar, 'g'), ' ');\n } else {\n value = this._oldValue;\n }\n DOMElement.value = this._old = value;\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n if (that._maskLength) {\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('paste' + ns, proxy(that._paste, that)).on(INPUT_EVENT_NAME, proxy(that._propertyChange, that));\n }\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('keypress' + ns).off('paste' + ns).off(INPUT_EVENT_NAME);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n that._unbindInput();\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY).removeClass(STATEDISABLED);\n that._bindInput();\n } else {\n element.attr(DISABLED, disable).attr(READONLY, readonly).toggleClass(STATEDISABLED, disable);\n }\n },\n _change: function () {\n var that = this;\n var value = that.value();\n if (value !== that._oldValue) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _propertyChange: function () {\n var that = this;\n var element = that.element[0];\n var value = element.value;\n var unmasked;\n var start;\n if (kendo._activeElement() !== element) {\n return;\n }\n if (value !== that._old && !that._pasting) {\n start = caret(element)[0];\n unmasked = that._unmask(value.substring(start), start);\n element.value = that._old = value.substring(0, start) + that._emptyMask.substring(start);\n that._mask(start, start, unmasked);\n caret(element, start);\n }\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var position = caret(element);\n var start = position[0];\n var end = position[1];\n var unmasked = that._unmask(element.value.substring(end), end);\n that._pasting = true;\n setTimeout(function () {\n var value = element.value;\n var pasted = value.substring(start, caret(element)[0]);\n element.value = that._old = value.substring(0, start) + that._emptyMask.substring(start);\n that._mask(start, start, pasted);\n start = caret(element)[0];\n that._mask(start, start, unmasked);\n caret(element, start);\n that._pasting = false;\n });\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._submitHandler = function () {\n that.element[0].value = that._old = that.raw();\n };\n if (that.options.unmaskOnPost) {\n form.on('submit', that._submitHandler);\n }\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var element = this.element[0];\n var selection = caret(element);\n var start = selection[0];\n var end = selection[1];\n var placeholder;\n var backward = key === keys.BACKSPACE;\n if (backward || key === keys.DELETE) {\n if (start === end) {\n if (backward) {\n start -= 1;\n } else {\n end += 1;\n }\n placeholder = this._find(start, backward);\n }\n if (placeholder !== undefined && placeholder !== start) {\n if (backward) {\n placeholder += 1;\n }\n caret(element, placeholder);\n } else if (start > -1) {\n this._mask(start, end, '', backward);\n }\n e.preventDefault();\n } else if (key === keys.ENTER) {\n this._change();\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.which);\n var selection = caret(this.element);\n this._mask(selection[0], selection[1], character);\n if (e.keyCode === keys.BACKSPACE || character) {\n e.preventDefault();\n }\n },\n _find: function (idx, backward) {\n var value = this.element.val() || this._emptyMask;\n var step = 1;\n if (backward === true) {\n step = -1;\n }\n while (idx > -1 || idx <= this._maskLength) {\n if (value.charAt(idx) !== this.tokens[idx]) {\n return idx;\n }\n idx += step;\n }\n return -1;\n },\n _mask: function (start, end, value, backward) {\n var element = this.element[0];\n var current = element.value || this._emptyMask;\n var empty = this.options.promptChar;\n var valueLength;\n var chrIdx = 0;\n var unmasked;\n var chr;\n var idx;\n start = this._find(start, backward);\n if (start > end) {\n end = start;\n }\n unmasked = this._unmask(current.substring(end), end);\n value = this._unmask(value, start);\n valueLength = value.length;\n if (value) {\n unmasked = unmasked.replace(new RegExp('^_{0,' + valueLength + '}'), '');\n }\n value += unmasked;\n current = current.split('');\n chr = value.charAt(chrIdx);\n while (start < this._maskLength) {\n current[start] = chr || empty;\n chr = value.charAt(++chrIdx);\n if (idx === undefined && chrIdx > valueLength) {\n idx = start;\n }\n start = this._find(start + 1);\n }\n element.value = this._old = current.join('');\n if (kendo._activeElement() === element) {\n if (idx === undefined) {\n idx = this._maskLength;\n }\n caret(element, idx);\n }\n },\n _unmask: function (value, idx) {\n if (!value) {\n return '';\n }\n value = (value + '').split('');\n var chr;\n var token;\n var chrIdx = 0;\n var tokenIdx = idx || 0;\n var empty = this.options.promptChar;\n var valueLength = value.length;\n var tokensLength = this.tokens.length;\n var result = '';\n while (tokenIdx < tokensLength) {\n chr = value[chrIdx];\n token = this.tokens[tokenIdx];\n if (chr === token || chr === empty) {\n result += chr === empty ? empty : '';\n chrIdx += 1;\n tokenIdx += 1;\n } else if (typeof token !== 'string') {\n if (token.test && token.test(chr) || $.isFunction(token) && token(chr)) {\n result += chr;\n tokenIdx += 1;\n }\n chrIdx += 1;\n } else {\n tokenIdx += 1;\n }\n if (chrIdx >= valueLength) {\n break;\n }\n }\n return result;\n },\n _tokenize: function () {\n var tokens = [];\n var tokenIdx = 0;\n var mask = this.options.mask || '';\n var maskChars = mask.split('');\n var length = maskChars.length;\n var idx = 0;\n var chr;\n var rule;\n var emptyMask = '';\n var promptChar = this.options.promptChar;\n var numberFormat = kendo.getCulture(this.options.culture).numberFormat;\n var rules = this._rules;\n for (; idx < length; idx++) {\n chr = maskChars[idx];\n rule = rules[chr];\n if (rule) {\n tokens[tokenIdx] = rule;\n emptyMask += promptChar;\n tokenIdx += 1;\n } else {\n if (chr === '.' || chr === ',') {\n chr = numberFormat[chr];\n } else if (chr === '$') {\n chr = numberFormat.currency.symbol;\n } else if (chr === '\\\\') {\n idx += 1;\n chr = maskChars[idx];\n }\n chr = chr.split('');\n for (var i = 0, l = chr.length; i < l; i++) {\n tokens[tokenIdx] = chr[i];\n emptyMask += chr[i];\n tokenIdx += 1;\n }\n }\n }\n this.tokens = tokens;\n this._emptyMask = emptyMask;\n this._maskLength = emptyMask.length;\n }\n });\n ui.plugin(MaskedTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"],"sourceRoot":"/source/"}