{"version":3,"file":"ngModelOptions.js.map","sources":["Scripts/ngModelOptions.js"],"sourcesContent":["/**\n* ngModelOptions v1.0.1: ngModelOptions for AngularJS 1.2\n*\n* @author Fergal Doyle\n* @url https://github.com/fergaldoyle/modelOptions\n* @license MIT\n*/\n\n(function (root, factory) {\n if (typeof module !== 'undefined' && module.exports) {\n // CommonJS\n module.exports = factory(require('angular'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD\n define(['angular'], factory);\n } else {\n // Global Variables\n factory(root.angular);\n }\n}(window, function (angular) {\n\n angular.module(\"modelOptions\", []).directive(\"ngModelOptions\", ['$timeout', function ($timeout) {\n return {\n priority: 1,\n restrict: \"A\",\n //require: \"ngModel\",\n require: ['ngModel'/*, '^?select'*/],\n link: function (scope, elm, attr, ctrls) {\n\n function apply() {\n\n var value;\n\n switch (tagType) {\n case \"inputradio\":\n if (attr.ngValue) {\n value = scope.$eval(attr.ngValue);\n } else {\n value = elm.val();\n }\n break;\n case \"inputcheckbox\":\n value = elm.prop(\"checked\");\n break;\n case \"select\":\n value = getSelectOption();\n break;\n default:\n value = elm.val();\n\n if (!attr.ngTrim || attr.ngTrim.toLowerCase() !== \"false\") {\n value = value.replace(/^\\s+|\\s+$/g, \"\");\n }\n\n }\n\n scope.$apply(function () {\n ctrls[0].$setViewValue(value);\n });\n }\n\n function getSelectOption() {\n\n if (!attr.ngOptions) {\n throw \"Must have ng-options\";\n }\n\n var match = attr.ngOptions.match(NG_OPTIONS_REGEXP),\n\t\t\t\t\t\ttrack = match[8],\n\t\t\t\t\t\tvaluesName = match[7],\n\t\t\t\t\t\tvalues = scope.$eval(valuesName),\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tval = elm.val();\n\n // if track by is specified\n // use the track by value as\n // a key to find the index\n if (track) {\n angular.forEach(values, function (item, i) {\n if (item[track.replace(/^.*?\\./, \"\")] == val) {\n index = i;\n }\n });\n } else {\n index = val;\n }\n\n // value is a property of an object\n if (/.*\\..*/.test(match[1])) {\n return scope.$eval(match[1].replace(/^.*?\\./, valuesName + \"[\" + index + \"].\"));\n } else { // value is an object\n return values[index];\n }\n }\n\n var timer,\n\t\t\t\t\tNG_OPTIONS_REGEXP = /^\\s*([\\s\\S]+?)(?:\\s+as\\s+([\\s\\S]+?))?(?:\\s+group\\s+by\\s+([\\s\\S]+?))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+([\\s\\S]+?)(?:\\s+track\\s+by\\s+([\\s\\S]+?))?$/,\n\t\t\t\t\ttagType = elm[0].nodeName.toLowerCase() + (attr.type || \"\"),\n\t\t\t\t\tdefaultEvents = [],\n\t\t\t\t\tdefaults = {\n\t\t\t\t\t debounce: 0,\n\t\t\t\t\t updateOn: \"default\"\n\t\t\t\t\t},\n\t\t\t\t\toptions = angular.extend(defaults, scope.$eval(attr.ngModelOptions)),\n\t\t\t\t\tmultiDebounce = typeof options.debounce === \"object\",\n\t\t\t\t\tupdateOnSplit = options.updateOn.split(\" \"),\n\t\t\t\t\tallowInvalid = options.allowInvalid;\n\n if (tagType === \"inputtext\" || tagType === \"textarea\") {\n defaultEvents = [\"keydown\", \"input\", \"change\"];\n } else if (tagType === \"inputradio\" || tagType === \"inputcheckbox\") {\n defaultEvents = [\"click\"];\n } else if (tagType === \"select\") {\n defaultEvents = [\"change\"];\n } else {\n defaultEvents = [\"keydown\", \"input\", \"change\"];\n }\n\n if (allowInvalid) {\n for (var i = 0; i < ctrls.length; i++) {\n var ctrl = ctrls[i];\n ctrl.$formatters.unshift(function (value) {\n if (ctrl.$invalid && angular.isUndefined(value)\n && typeof ctrl.$modelValue === 'string') {\n $timeout(function () {\n ctrl.$setValidity('invalid', true);\n apply();\n }, 300);\n return ctrl.$modelValue;\n } else {\n return value;\n }\n });\n }\n }\n \n // unbind default events to prevent automatic model updates\n angular.forEach(defaultEvents, function (event) {\n // ie8 does not support some events\n // use try catch to mask this\n try { elm.off(event); } catch (e) { }\n });\n\n // default events\n if (options.updateOn.match(/default/i)) {\n elm.on(defaultEvents.join(\" \"), function (e) {\n var delay = options.debounce[\"default\"] || options.debounce || 0;\n clearTimeout(timer);\n timer = setTimeout(function () {\n apply();\n }, delay);\n });\n }\n\n // the other events if specified\n angular.forEach(updateOnSplit, function (event) {\n if (event === \"default\") {\n return;\n }\n\n // debounce option can be number or object\n var deb;\n if (multiDebounce) {\n deb = options.debounce[event];\n } else {\n deb = options.debounce;\n }\n\n var delay = deb;\n if (typeof delay === \"undefined\") {\n delay = options.debounce[\"default\"] || 0;\n }\n\n elm.on(event, function (e) {\n clearTimeout(timer);\n timer = setTimeout(function () {\n apply();\n }, delay);\n });\n });\n\n }\n };\n }]);\n\n}));"],"names":["root","factory","module","exports","require","define","amd","angular","window","directive","$timeout","priority","restrict","link","scope","elm","attr","ctrls","apply","value","tagType","ngValue","$eval","val","prop","getSelectOption","ngOptions","index","match","NG_OPTIONS_REGEXP","track","valuesName","values","forEach","item","i","replace","test","ngTrim","toLowerCase","$apply","$setViewValue","timer","nodeName","type","defaultEvents","options","extend","debounce","updateOn","ngModelOptions","multiDebounce","updateOnSplit","split","allowInvalid","length","ctrl","$formatters","unshift","$invalid","isUndefined","$modelValue","$setValidity","event","off","e","on","join","delay","clearTimeout","setTimeout","deb"],"mappings":"AAQA,CAAC,SAAUA,KAAMC,SACS,aAAlB,OAAOC,QAA0BA,OAAOC,QAExCD,OAAOC,QAAUF,QAAQG,QAAQ,SAAS,CAAC,EAClB,YAAlB,OAAOC,QAAyBA,OAAOC,IAE9CD,OAAO,CAAC,WAAYJ,OAAO,EAG3BA,QAAQD,KAAKO,OAAO,CAE5B,EAAEC,OAAQ,SAAUD,SAEhBA,QAAQL,OAAO,eAAgB,EAAE,EAAEO,UAAU,iBAAkB,CAAC,WAAY,SAAUC,UAClF,MAAO,CACHC,SAAU,EACVC,SAAU,IAEVR,QAAS,CAAC,WACVS,KAAM,SAAUC,MAAOC,IAAKC,KAAMC,OAE9B,SAASC,QAEL,IAAIC,EAEJ,OAAQC,GACJ,IAAK,aAEGD,EADAH,KAAKK,QACGP,MAAMQ,MAAMN,KAAKK,OAAO,EAExBN,IAAIQ,IAAI,EAEpB,MACJ,IAAK,gBACDJ,EAAQJ,IAAIS,KAAK,SAAS,EAC1B,MACJ,IAAK,SACDL,EAgBZ,SAASM,kBAEL,GAAI,CAACT,KAAKU,UACN,KAAM,uBAGV,IAIdC,EAJkBC,EAAQZ,KAAKU,UAAUE,MAAMC,CAAiB,EAChEC,EAAQF,EAAM,GACdG,EAAaH,EAAM,GACnBI,EAASlB,MAAMQ,MAAMS,CAAU,EAE/BR,EAAMR,IAAIQ,IAAI,EAKIO,EACAvB,QAAQ0B,QAAQD,EAAQ,SAAUE,KAAMC,GAChCD,KAAKJ,EAAMM,QAAQ,SAAU,EAAE,IAAMb,IACrCI,EAAQQ,EAEhB,CAAC,EAEDR,EAAQJ,EAIZ,MAAI,SAASc,KAAKT,EAAM,EAAE,EACfd,MAAMQ,MAAMM,EAAM,GAAGQ,QAAQ,SAAUL,EAAa,IAAMJ,EAAQ,IAAI,CAAC,EAEvEK,EAAOL,EAEtB,EAhDoC,EACxB,MACJ,QACIR,EAAQJ,IAAIQ,IAAI,EAEXP,KAAKsB,QAAwC,UAA9BtB,KAAKsB,OAAOC,YAAY,IACxCpB,EAAQA,EAAMiB,QAAQ,aAAc,EAAE,EAGlD,CAEAtB,MAAM0B,OAAO,WACTvB,MAAM,GAAGwB,cAActB,CAAK,CAChC,CAAC,CACL,CAoCA,IAAIuB,EACfb,EAAoB,yMACpBT,EAAUL,IAAI,GAAG4B,SAASJ,YAAY,GAAKvB,KAAK4B,MAAQ,IACxDC,EAAgB,GAKhBC,EAAUvC,QAAQwC,OAJP,CACPC,SAAU,EACVC,SAAU,SACd,EACmCnC,MAAMQ,MAAMN,KAAKkC,cAAc,CAAC,EACnEC,EAA4C,UAA5B,OAAOL,EAAQE,SAC/BI,EAAgBN,EAAQG,SAASI,MAAM,GAAG,EAC1CC,EAAeR,EAAQQ,aAGRT,EADY,cAAZzB,GAAuC,aAAZA,EACX,CAAC,UAAW,QAAS,UAClB,eAAZA,GAAwC,kBAAZA,EACnB,CAAC,SACE,WAAZA,EACS,CAAC,UAED,CAAC,UAAW,QAAS,UAGzC,GAAIkC,EACA,IAAK,IAAInB,EAAI,EAAGA,EAAIlB,MAAMsC,OAAQpB,CAAC,GAAI,CACnC,IAAIqB,EAAOvC,MAAMkB,GACjBqB,EAAKC,YAAYC,QAAQ,SAAUvC,OAC/B,OAAIqC,EAAKG,UAAYpD,QAAQqD,YAAYzC,KAAK,GACP,UAA5B,OAAOqC,EAAKK,aACnBnD,SAAS,WACL8C,EAAKM,aAAa,UAAW,CAAA,CAAI,EACjC5C,MAAM,CACV,EAAG,GAAG,EACCsC,EAAKK,aAEL1C,KAEf,CAAC,CACL,CAIJZ,QAAQ0B,QAAQY,EAAe,SAAUkB,OAGrC,IAAMhD,IAAIiD,IAAID,KAAK,CAAiB,CAAZ,MAAOE,IACnC,CAAC,EAGGnB,EAAQG,SAASrB,MAAM,UAAU,GACjCb,IAAImD,GAAGrB,EAAcsB,KAAK,GAAG,EAAG,SAAUF,GACtC,IAAIG,EAAQtB,EAAQE,SAAkB,SAAKF,EAAQE,UAAY,EAC/DqB,aAAa3B,CAAK,EAClBA,EAAQ4B,WAAW,WACfpD,MAAM,CACV,EAAGkD,CAAK,CACZ,CAAC,EAIL7D,QAAQ0B,QAAQmB,EAAe,SAAUW,OACrC,IAOIQ,EAKAH,EAZU,YAAVL,QAOAQ,EADApB,EACML,EAAQE,SAASe,OAEjBjB,EAAQE,SAIG,KAAA,KADjBoB,EAAQG,KAERH,EAAQtB,EAAQE,SAAkB,SAAK,GAG3CjC,IAAImD,GAAGH,MAAO,SAAUE,GACpBI,aAAa3B,CAAK,EAClBA,EAAQ4B,WAAW,WACfpD,MAAM,CACV,EAAGkD,CAAK,CACZ,CAAC,EACL,CAAC,CAEL,CACJ,CACJ,EAAE,CAEN,CAAE"}