{"version":3,"sources":["webpack:///angular-dateparser.js","webpack:///webpack/bootstrap 66c82a30f9abdb63cba5","webpack:///external \"angular\"","webpack:///./src/DateParser.ts","webpack:///./src/DateParserDirective.ts","webpack:///./src/index.ts"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","angular","__webpack_exports__","__WEBPACK_IMPORTED_MODULE_0_angular__","DateParser","_this","this","$get","$filter","$locale","$rootScope","$dateFilter","updateFromLocale","_watchLocale","$watchCollection","parse","val","format","length","Date","datetimeFormats","now","i_val","i_format","format_token","year","week","month","date","hh","mm","ss","sss","ampm","z","parsedZ","getFullYear","getMonth","charAt","token","minLength","maxLength","getInteger","Math","max","toString","monthNames","month_name","substring","toLowerCase","j","dayNames","day_name","tzStr","parseInt","substr","localDate","getDate","dateFromISOWeek","getDateOfISOWeek","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getTime","getTimezoneOffset","e","console","info","cache","$inject","DATETIME_FORMATS","MONTH","concat","SHORTMONTH","DAY","SHORTDAY","watchLocale","watch","input","startPoint","key","matcher","RegExp","match","exec","Number","simple","dow","getDay","ISOweekStart","isoWeekDate","DateParserDirective","dateFilter","$dateParser","restrict","require","scope","ngModel","link","$scope","element","attrs","dateFormat","$observe","$render","oldValue","$parsers","unshift","viewValue","$setValidity","modelValueExists","$modelValue","undefined","$formatters","push","modelValue","factory","directive","__WEBPACK_IMPORTED_MODULE_1__DateParser__","__WEBPACK_IMPORTED_MODULE_2__DateParserDirective__","provider"],"mappings":"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","file":"angular-dateparser.js","sourcesContent":["/*!\n * The MIT License (MIT)\r\n * \r\n * Copyright (c) 2017 Dzulqarnain Nasir\r\n * \r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n * \r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n * \r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n * \n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = angular;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_angular__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DateParser; });\n\r\nvar DateParser = (function () {\r\n function DateParser() {\r\n var _this = this;\r\n this.$get = function ($filter, $locale, $rootScope) {\r\n _this.$locale = $locale;\r\n _this.$dateFilter = $filter('date');\r\n _this.updateFromLocale();\r\n if (_this._watchLocale) {\r\n $rootScope.$watchCollection(function () { return $locale; }, function () {\r\n _this.updateFromLocale();\r\n });\r\n }\r\n return _this.parse;\r\n };\r\n this.parse = function (val, format) {\r\n // if it's a Date object, return as-is\r\n if (__WEBPACK_IMPORTED_MODULE_0_angular__[\"isDate\"](val)) {\r\n return val;\r\n }\r\n // if it's anything other than a string, reject it\r\n if (!__WEBPACK_IMPORTED_MODULE_0_angular__[\"isString\"](val)) {\r\n return undefined;\r\n }\r\n try {\r\n // If no format is provided, just pass it to the Date constructor\r\n if (!format.length) {\r\n return new Date(val);\r\n }\r\n // Check if format exists in the format collection\r\n if (_this.datetimeFormats != null && _this.datetimeFormats[format]) {\r\n format = _this.datetimeFormats[format];\r\n }\r\n // Initial values\r\n var now = new Date(), i_val = 0, i_format = 0, format_token = '', year = null, week = null, month = null, date = null, hh = 0, mm = 0, ss = 0, sss = 0, ampm = 'am', z = 0, parsedZ = false;\r\n // FIX: don't take the current date, it could have a day of the month that is higher than the parsed date\r\n // example: parse \"February 2013\" with the current date of \"30 April 2013\"\r\n now = new Date(now.getFullYear(), now.getMonth(), 1);\r\n // TODO: Extract this into a helper function perhaps?\r\n while (i_format < format.length) {\r\n // Get next token from format string\r\n format_token = format.charAt(i_format);\r\n var token = '';\r\n // TODO: Handle double single quotes\r\n // Handle quote marks for strings within format string\r\n if (format.charAt(i_format) === \"'\") {\r\n var _i_format = i_format;\r\n while ((format.charAt(++i_format) !== \"'\") && (i_format < format.length)) {\r\n token += format.charAt(i_format);\r\n }\r\n if (val.substring(i_val, i_val + token.length) !== token) {\r\n throw 'Pattern value mismatch';\r\n }\r\n i_val += token.length;\r\n i_format++;\r\n continue;\r\n }\r\n while ((format.charAt(i_format) === format_token) && (i_format < format.length)) {\r\n token += format.charAt(i_format++);\r\n }\r\n // Extract contents of value based on format token\r\n if (token === 'yyyy' || token === 'yy' || token === 'y') {\r\n var minLength, maxLength;\r\n if (token === 'yyyy') {\r\n minLength = 4;\r\n maxLength = 4;\r\n }\r\n if (token === 'yy') {\r\n minLength = 2;\r\n maxLength = 2;\r\n }\r\n if (token === 'y') {\r\n minLength = 2;\r\n maxLength = 4;\r\n }\r\n year = _this.getInteger(val, i_val, minLength, maxLength);\r\n if (year === null) {\r\n throw 'Invalid year';\r\n }\r\n i_val += Math.max(year.toString().length, token.length);\r\n if (year.toString().length === 2) {\r\n if (year > 70) {\r\n year = 1900 + (year - 0);\r\n }\r\n else {\r\n year = 2000 + (year - 0);\r\n }\r\n }\r\n }\r\n else if (token === 'ww' || token === 'w') {\r\n week = _this.getInteger(val, i_val, token.length, 2);\r\n i_val += Math.max(week.toString().length, token.length);\r\n }\r\n else if (token === 'MMMM' || token === 'MMM') {\r\n month = 0;\r\n for (var i = 0; i < _this.monthNames.length; i++) {\r\n var month_name = _this.monthNames[i];\r\n if (val.substring(i_val, i_val + month_name.length).toLowerCase() === month_name.toLowerCase()) {\r\n month = i + 1;\r\n if (month > 12) {\r\n month -= 12;\r\n }\r\n i_val += month_name.length;\r\n break;\r\n }\r\n }\r\n if ((month < 1) || (month > 12)) {\r\n throw 'Invalid month';\r\n }\r\n }\r\n else if (token === 'EEEE' || token === 'EEE') {\r\n for (var j = 0; j < _this.dayNames.length; j++) {\r\n var day_name = _this.dayNames[j];\r\n if (val.substring(i_val, i_val + day_name.length).toLowerCase() === day_name.toLowerCase()) {\r\n i_val += day_name.length;\r\n break;\r\n }\r\n }\r\n }\r\n else if (token === 'MM' || token === 'M') {\r\n month = _this.getInteger(val, i_val, token.length, 2);\r\n if (month === null || (month < 1) || (month > 12)) {\r\n throw 'Invalid month';\r\n }\r\n i_val += Math.max(month.toString().length, token.length);\r\n }\r\n else if (token === 'dd' || token === 'd') {\r\n date = _this.getInteger(val, i_val, token.length, 2);\r\n if (date === null || (date < 1) || (date > 31)) {\r\n throw 'Invalid date';\r\n }\r\n i_val += Math.max(date.toString().length, token.length);\r\n }\r\n else if (token === 'HH' || token === 'H') {\r\n hh = _this.getInteger(val, i_val, token.length, 2);\r\n if (hh === null || (hh < 0) || (hh > 23)) {\r\n throw 'Invalid hours';\r\n }\r\n i_val += Math.max(hh.toString().length, token.length);\r\n }\r\n else if (token === 'hh' || token === 'h') {\r\n hh = _this.getInteger(val, i_val, token.length, 2);\r\n if (hh === null || (hh < 1) || (hh > 12)) {\r\n throw 'Invalid hours';\r\n }\r\n i_val += Math.max(hh.toString().length, token.length);\r\n }\r\n else if (token === 'mm' || token === 'm') {\r\n mm = _this.getInteger(val, i_val, token.length, 2);\r\n if (mm === null || (mm < 0) || (mm > 59)) {\r\n throw 'Invalid minutes';\r\n }\r\n i_val += Math.max(mm.toString().length, token.length);\r\n }\r\n else if (token === 'ss' || token === 's') {\r\n ss = _this.getInteger(val, i_val, token.length, 2);\r\n if (ss === null || (ss < 0) || (ss > 59)) {\r\n throw 'Invalid seconds';\r\n }\r\n i_val += Math.max(ss.toString().length, token.length);\r\n }\r\n else if (token === 'sss') {\r\n sss = _this.getInteger(val, i_val, 3, 3);\r\n if (sss === null || (sss < 0) || (sss > 999)) {\r\n throw 'Invalid milliseconds';\r\n }\r\n i_val += 3;\r\n }\r\n else if (token === 'a') {\r\n if (val.substring(i_val, i_val + 2).toLowerCase() === 'am') {\r\n ampm = 'AM';\r\n }\r\n else if (val.substring(i_val, i_val + 2).toLowerCase() === 'pm') {\r\n ampm = 'PM';\r\n }\r\n else {\r\n throw 'Invalid AM/PM';\r\n }\r\n i_val += 2;\r\n }\r\n else if (token === 'Z') {\r\n parsedZ = true;\r\n if (val[i_val] === 'Z') {\r\n z = 0;\r\n i_val += 1;\r\n }\r\n else {\r\n if (val[i_val + 3] === ':') {\r\n var tzStr = val.substring(i_val, i_val + 6);\r\n z = (parseInt(tzStr.substr(0, 3), 10) * 60) + parseInt(tzStr.substr(4, 2), 10);\r\n i_val += 6;\r\n }\r\n else {\r\n var tzStr = val.substring(i_val, i_val + 5);\r\n z = (parseInt(tzStr.substr(0, 3), 10) * 60) + parseInt(tzStr.substr(3, 2), 10);\r\n i_val += 5;\r\n }\r\n }\r\n if (z > 720 || z < -720) {\r\n throw 'Invalid timezone';\r\n }\r\n }\r\n else {\r\n if (val.substring(i_val, i_val + token.length) !== token) {\r\n throw 'Pattern value mismatch';\r\n }\r\n else {\r\n i_val += token.length;\r\n }\r\n }\r\n }\r\n // If there are any trailing characters left in the value, it doesn't match\r\n if (i_val !== val.length) {\r\n throw 'Pattern value mismatch';\r\n }\r\n // Is date valid for month?\r\n if (month === 2) {\r\n // Check for leap year\r\n if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) {\r\n if (date > 29) {\r\n throw 'Invalid date';\r\n }\r\n }\r\n else {\r\n if (date > 28) {\r\n throw 'Invalid date';\r\n }\r\n }\r\n }\r\n if ((month === 4) || (month === 6) || (month === 9) || (month === 11)) {\r\n if (date > 30) {\r\n throw 'Invalid date';\r\n }\r\n }\r\n // Correct hours value\r\n if (hh < 12 && ampm === 'PM') {\r\n hh += 12;\r\n }\r\n else if (hh > 11 && ampm === 'AM') {\r\n hh -= 12;\r\n }\r\n var localDate = new Date(year || now.getFullYear(), (month !== null ? month - 1 : now.getMonth()), date || now.getDate(), hh, mm, ss, sss);\r\n if (week !== null) {\r\n var dateFromISOWeek = _this.getDateOfISOWeek(week, year || now.getFullYear(), month, date);\r\n if (dateFromISOWeek) {\r\n if (month !== null) {\r\n dateFromISOWeek.setMonth(month - 1);\r\n }\r\n if (date !== null) {\r\n dateFromISOWeek.setDate(date);\r\n }\r\n dateFromISOWeek.setHours(hh);\r\n dateFromISOWeek.setMinutes(mm);\r\n dateFromISOWeek.setSeconds(ss);\r\n dateFromISOWeek.setMilliseconds(sss);\r\n localDate = dateFromISOWeek;\r\n }\r\n else {\r\n throw 'Invalid week number or week number/date mismatch';\r\n }\r\n }\r\n if (parsedZ) {\r\n return new Date(localDate.getTime() - (z + localDate.getTimezoneOffset()) * 60000);\r\n }\r\n return localDate;\r\n }\r\n catch (e) {\r\n console.info(e);\r\n return undefined;\r\n }\r\n };\r\n // Regex pattern cache\r\n this.cache = [];\r\n this._watchLocale = false;\r\n this.$get.$inject = ['$filter', '$locale', '$rootScope'];\r\n }\r\n DateParser.prototype.updateFromLocale = function () {\r\n this.datetimeFormats = this.$locale.DATETIME_FORMATS;\r\n this.monthNames = this.datetimeFormats.MONTH.concat(this.datetimeFormats.SHORTMONTH);\r\n this.dayNames = this.datetimeFormats.DAY.concat(this.datetimeFormats.SHORTDAY);\r\n };\r\n DateParser.prototype.watchLocale = function (watch) {\r\n if (__WEBPACK_IMPORTED_MODULE_0_angular__[\"isDefined\"](watch)) {\r\n this._watchLocale = watch;\r\n }\r\n else {\r\n return this._watchLocale;\r\n }\r\n };\r\n DateParser.prototype.getInteger = function (input, startPoint, minLength, maxLength) {\r\n var val = input.substring(startPoint);\r\n var key = minLength + \"_\" + maxLength;\r\n var matcher = this.cache[key];\r\n if (!matcher) {\r\n matcher = new RegExp(\"^(\\\\d{\" + minLength + \",\" + maxLength + \"})\");\r\n this.cache[key] = matcher;\r\n }\r\n var match = matcher.exec(val);\r\n if (match) {\r\n return Number(match[1]);\r\n }\r\n return null;\r\n };\r\n DateParser.prototype.getDateOfISOWeek = function (week, year, month, date) {\r\n if (week < 1)\r\n return undefined;\r\n var simple = new Date(year, 0, 1 + (week - 1) * 7);\r\n var dow = simple.getDay();\r\n var ISOweekStart = simple;\r\n if (dow <= 4) {\r\n ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);\r\n }\r\n else {\r\n ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());\r\n }\r\n if (ISOweekStart.getFullYear() !== year) {\r\n return undefined;\r\n }\r\n if (month !== null) {\r\n if (ISOweekStart.getMonth() !== month - 1) {\r\n return undefined;\r\n }\r\n }\r\n if (date !== null) {\r\n var isoWeekDate = ISOweekStart.getDate();\r\n if (date < isoWeekDate && date > isoWeekDate + 6) {\r\n return undefined;\r\n }\r\n }\r\n return ISOweekStart;\r\n };\r\n return DateParser;\r\n}());\r\n\r\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_angular__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DateParserDirective; });\n\r\nvar DateParserDirective = (function () {\r\n function DateParserDirective(dateFilter, $dateParser, $locale) {\r\n var _this = this;\r\n this.dateFilter = dateFilter;\r\n this.$dateParser = $dateParser;\r\n this.$locale = $locale;\r\n this.restrict = 'A';\r\n this.require = 'ngModel';\r\n this.scope = {\r\n ngModel: '='\r\n };\r\n this.link = function ($scope, element, attrs, ngModel) {\r\n var dateFormat;\r\n attrs.$observe('dateParser', function (value) {\r\n dateFormat = value;\r\n ngModel.$render();\r\n });\r\n $scope.$watchCollection(function () { return _this.$locale; }, function (value, oldValue) {\r\n if (!__WEBPACK_IMPORTED_MODULE_0_angular__[\"equals\"](value, oldValue)) {\r\n ngModel.$render();\r\n }\r\n });\r\n ngModel.$parsers.unshift(function (viewValue) {\r\n var date = _this.$dateParser(viewValue, dateFormat);\r\n // Set validity when view value changes\r\n ngModel.$setValidity('date', !viewValue || __WEBPACK_IMPORTED_MODULE_0_angular__[\"isDate\"](date));\r\n return date;\r\n });\r\n ngModel.$render = function () {\r\n var modelValueExists = ngModel.$modelValue === '' || ngModel.$modelValue === null || ngModel.$modelValue;\r\n element.val(modelValueExists ? _this.dateFilter(ngModel.$modelValue, dateFormat) : undefined);\r\n _this.scope.ngModel = ngModel.$modelValue;\r\n };\r\n // Format the new model value before it is displayed\r\n ngModel.$formatters.push(function (modelValue) {\r\n // Set validity when model value changes\r\n ngModel.$setValidity('date', !modelValue || __WEBPACK_IMPORTED_MODULE_0_angular__[\"isDate\"](modelValue));\r\n return __WEBPACK_IMPORTED_MODULE_0_angular__[\"isDate\"](modelValue) ? _this.dateFilter(modelValue, dateFormat) : '';\r\n });\r\n };\r\n }\r\n DateParserDirective.factory = function () {\r\n var directive = function (dateFilter, $dateParser, $locale) { return new DateParserDirective(dateFilter, $dateParser, $locale); };\r\n directive.$inject = ['dateFilter', '$dateParser', '$locale'];\r\n return directive;\r\n };\r\n return DateParserDirective;\r\n}());\r\n\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_angular___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_angular__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__DateParser__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__DateParserDirective__ = __webpack_require__(2);\n\r\n\r\n\r\n__WEBPACK_IMPORTED_MODULE_0_angular__[\"module\"]('dateParser', [])\r\n .provider('$dateParser', __WEBPACK_IMPORTED_MODULE_1__DateParser__[\"a\" /* DateParser */])\r\n .directive('dateParser', __WEBPACK_IMPORTED_MODULE_2__DateParserDirective__[\"a\" /* DateParserDirective */].factory());\r\n\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// angular-dateparser.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 66c82a30f9abdb63cba5","module.exports = angular;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"angular\"\n// module id = 0\n// module chunks = 0","import * as angular from 'angular';\r\n\r\nexport interface IDateParser {\r\n (val: any, format?: string): Date;\r\n}\r\n\r\nexport class DateParser implements angular.IServiceProvider {\r\n private $dateFilter: angular.IFilterDate;\r\n private $locale: angular.ILocaleService;\r\n private datetimeFormats: angular.ILocaleDateTimeFormatDescriptor;\r\n private monthNames: string[];\r\n private dayNames: string[];\r\n private cache: string[];\r\n private _watchLocale: boolean;\r\n\r\n constructor() {\r\n // Regex pattern cache\r\n this.cache = [];\r\n this._watchLocale = false;\r\n this.$get.$inject = ['$filter', '$locale', '$rootScope'];\r\n }\r\n\r\n updateFromLocale() {\r\n this.datetimeFormats = this.$locale.DATETIME_FORMATS;\r\n this.monthNames = this.datetimeFormats.MONTH.concat(this.datetimeFormats.SHORTMONTH);\r\n this.dayNames = this.datetimeFormats.DAY.concat(this.datetimeFormats.SHORTDAY);\r\n }\r\n\r\n watchLocale(watch?: boolean) {\r\n if (angular.isDefined(watch)) {\r\n this._watchLocale = watch;\r\n } else {\r\n return this._watchLocale;\r\n }\r\n }\r\n\r\n $get = ($filter: angular.IFilterService, $locale: angular.ILocaleService, $rootScope: angular.IRootScopeService) => {\r\n this.$locale = $locale;\r\n this.$dateFilter = $filter('date');\r\n\r\n this.updateFromLocale();\r\n\r\n if (this._watchLocale) {\r\n $rootScope.$watchCollection(() => $locale, () => {\r\n this.updateFromLocale();\r\n });\r\n }\r\n\r\n return this.parse;\r\n }\r\n\r\n private parse: IDateParser = (val: any, format?: string): Date => {\r\n // if it's a Date object, return as-is\r\n if (angular.isDate(val)) {\r\n return val;\r\n }\r\n\r\n // if it's anything other than a string, reject it\r\n if (!angular.isString(val)) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n // If no format is provided, just pass it to the Date constructor\r\n if (!format.length) {\r\n return new Date(val);\r\n }\r\n\r\n // Check if format exists in the format collection\r\n if (this.datetimeFormats != null && this.datetimeFormats[format]) {\r\n format = this.datetimeFormats[format];\r\n }\r\n\r\n // Initial values\r\n var now = new Date(),\r\n i_val = 0,\r\n i_format = 0,\r\n format_token = '',\r\n year = null,\r\n week = null,\r\n month = null,\r\n date = null,\r\n hh = 0,\r\n mm = 0,\r\n ss = 0,\r\n sss = 0,\r\n ampm = 'am',\r\n z = 0,\r\n parsedZ = false;\r\n\r\n // FIX: don't take the current date, it could have a day of the month that is higher than the parsed date\r\n // example: parse \"February 2013\" with the current date of \"30 April 2013\"\r\n now = new Date(now.getFullYear(), now.getMonth(), 1);\r\n\r\n // TODO: Extract this into a helper function perhaps?\r\n while (i_format < format.length) {\r\n // Get next token from format string\r\n format_token = format.charAt(i_format);\r\n\r\n var token = '';\r\n\r\n // TODO: Handle double single quotes\r\n // Handle quote marks for strings within format string\r\n if (format.charAt(i_format) === \"'\") {\r\n var _i_format = i_format;\r\n\r\n while ((format.charAt(++i_format) !== \"'\") && (i_format < format.length)) {\r\n token += format.charAt(i_format);\r\n }\r\n\r\n if (val.substring(i_val, i_val + token.length) !== token) {\r\n throw 'Pattern value mismatch';\r\n }\r\n\r\n i_val += token.length;\r\n i_format++;\r\n\r\n continue;\r\n }\r\n\r\n while ((format.charAt(i_format) === format_token) && (i_format < format.length)) {\r\n token += format.charAt(i_format++);\r\n }\r\n\r\n // Extract contents of value based on format token\r\n if (token === 'yyyy' || token === 'yy' || token === 'y') {\r\n var minLength, maxLength;\r\n\r\n if (token === 'yyyy') {\r\n minLength = 4;\r\n maxLength = 4;\r\n }\r\n\r\n if (token === 'yy') {\r\n minLength = 2;\r\n maxLength = 2;\r\n }\r\n\r\n if (token === 'y') {\r\n minLength = 2;\r\n maxLength = 4;\r\n }\r\n\r\n year = this.getInteger(val, i_val, minLength, maxLength);\r\n\r\n if (year === null) {\r\n throw 'Invalid year';\r\n }\r\n\r\n i_val += Math.max(year.toString().length, token.length);\r\n\r\n if (year.toString().length === 2) {\r\n if (year > 70) {\r\n year = 1900 + (year - 0);\r\n } else {\r\n year = 2000 + (year - 0);\r\n }\r\n }\r\n } else if (token === 'ww' || token === 'w') {\r\n week = this.getInteger(val, i_val, token.length, 2);\r\n\r\n i_val += Math.max(week.toString().length, token.length);\r\n } else if (token === 'MMMM' || token === 'MMM') {\r\n month = 0;\r\n\r\n for (var i = 0; i < this.monthNames.length; i++) {\r\n var month_name = this.monthNames[i];\r\n\r\n if (val.substring(i_val, i_val + month_name.length).toLowerCase() === month_name.toLowerCase()) {\r\n month = i + 1;\r\n if (month > 12) {\r\n month -= 12;\r\n }\r\n\r\n i_val += month_name.length;\r\n\r\n break;\r\n }\r\n }\r\n\r\n if ((month < 1) || (month > 12)) {\r\n throw 'Invalid month';\r\n }\r\n } else if (token === 'EEEE' || token === 'EEE') {\r\n for (var j = 0; j < this.dayNames.length; j++) {\r\n var day_name = this.dayNames[j];\r\n\r\n if (val.substring(i_val, i_val + day_name.length).toLowerCase() === day_name.toLowerCase()) {\r\n i_val += day_name.length;\r\n break;\r\n }\r\n }\r\n } else if (token === 'MM' || token === 'M') {\r\n month = this.getInteger(val, i_val, token.length, 2);\r\n\r\n if (month === null || (month < 1) || (month > 12)) {\r\n throw 'Invalid month';\r\n }\r\n\r\n i_val += Math.max(month.toString().length, token.length);\r\n } else if (token === 'dd' || token === 'd') {\r\n date = this.getInteger(val, i_val, token.length, 2);\r\n\r\n if (date === null || (date < 1) || (date > 31)) {\r\n throw 'Invalid date';\r\n }\r\n\r\n i_val += Math.max(date.toString().length, token.length);\r\n } else if (token === 'HH' || token === 'H') {\r\n hh = this.getInteger(val, i_val, token.length, 2);\r\n\r\n if (hh === null || (hh < 0) || (hh > 23)) {\r\n throw 'Invalid hours';\r\n }\r\n\r\n i_val += Math.max(hh.toString().length, token.length);\r\n } else if (token === 'hh' || token === 'h') {\r\n hh = this.getInteger(val, i_val, token.length, 2);\r\n\r\n if (hh === null || (hh < 1) || (hh > 12)) {\r\n throw 'Invalid hours';\r\n }\r\n\r\n i_val += Math.max(hh.toString().length, token.length);\r\n } else if (token === 'mm' || token === 'm') {\r\n mm = this.getInteger(val, i_val, token.length, 2);\r\n\r\n if (mm === null || (mm < 0) || (mm > 59)) {\r\n throw 'Invalid minutes';\r\n }\r\n\r\n i_val += Math.max(mm.toString().length, token.length);\r\n } else if (token === 'ss' || token === 's') {\r\n ss = this.getInteger(val, i_val, token.length, 2);\r\n\r\n if (ss === null || (ss < 0) || (ss > 59)) {\r\n throw 'Invalid seconds';\r\n }\r\n\r\n i_val += Math.max(ss.toString().length, token.length);\r\n } else if (token === 'sss') {\r\n sss = this.getInteger(val, i_val, 3, 3);\r\n\r\n if (sss === null || (sss < 0) || (sss > 999)) {\r\n throw 'Invalid milliseconds';\r\n }\r\n\r\n i_val += 3;\r\n } else if (token === 'a') {\r\n if (val.substring(i_val, i_val + 2).toLowerCase() === 'am') {\r\n ampm = 'AM';\r\n } else if (val.substring(i_val, i_val + 2).toLowerCase() === 'pm') {\r\n ampm = 'PM';\r\n } else {\r\n throw 'Invalid AM/PM';\r\n }\r\n\r\n i_val += 2;\r\n } else if (token === 'Z') {\r\n parsedZ = true;\r\n\r\n if (val[i_val] === 'Z') {\r\n z = 0;\r\n\r\n i_val += 1;\r\n } else {\r\n if (val[i_val + 3] === ':') {\r\n var tzStr = val.substring(i_val, i_val + 6);\r\n\r\n z = (parseInt(tzStr.substr(0, 3), 10) * 60) + parseInt(tzStr.substr(4, 2), 10);\r\n\r\n i_val += 6;\r\n } else {\r\n var tzStr = val.substring(i_val, i_val + 5);\r\n\r\n z = (parseInt(tzStr.substr(0, 3), 10) * 60) + parseInt(tzStr.substr(3, 2), 10);\r\n\r\n i_val += 5;\r\n }\r\n }\r\n\r\n if (z > 720 || z < -720) {\r\n throw 'Invalid timezone';\r\n }\r\n } else {\r\n if (val.substring(i_val, i_val + token.length) !== token) {\r\n throw 'Pattern value mismatch';\r\n } else {\r\n i_val += token.length;\r\n }\r\n }\r\n }\r\n\r\n // If there are any trailing characters left in the value, it doesn't match\r\n if (i_val !== val.length) {\r\n throw 'Pattern value mismatch';\r\n }\r\n\r\n // Is date valid for month?\r\n if (month === 2) {\r\n // Check for leap year\r\n if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) { // leap year\r\n if (date > 29) {\r\n throw 'Invalid date';\r\n }\r\n } else {\r\n if (date > 28) {\r\n throw 'Invalid date';\r\n }\r\n }\r\n }\r\n\r\n if ((month === 4) || (month === 6) || (month === 9) || (month === 11)) {\r\n if (date > 30) {\r\n throw 'Invalid date';\r\n }\r\n }\r\n\r\n // Correct hours value\r\n if (hh < 12 && ampm === 'PM') {\r\n hh += 12;\r\n } else if (hh > 11 && ampm === 'AM') {\r\n hh -= 12;\r\n }\r\n\r\n var localDate = new Date(year || now.getFullYear(), (month !== null ? month - 1 : now.getMonth()), date || now.getDate(), hh, mm, ss, sss);\r\n if (week !== null) {\r\n var dateFromISOWeek = this.getDateOfISOWeek(week, year || now.getFullYear(), month, date);\r\n if (dateFromISOWeek) {\r\n if (month !== null) {\r\n dateFromISOWeek.setMonth(month - 1);\r\n }\r\n if (date !== null) {\r\n dateFromISOWeek.setDate(date);\r\n }\r\n\r\n dateFromISOWeek.setHours(hh);\r\n dateFromISOWeek.setMinutes(mm);\r\n dateFromISOWeek.setSeconds(ss);\r\n dateFromISOWeek.setMilliseconds(sss);\r\n\r\n localDate = dateFromISOWeek;\r\n } else {\r\n throw 'Invalid week number or week number/date mismatch';\r\n }\r\n }\r\n\r\n if (parsedZ) {\r\n return new Date(localDate.getTime() - (z + localDate.getTimezoneOffset()) * 60000);\r\n }\r\n\r\n return localDate;\r\n } catch (e) {\r\n console.info(e);\r\n return undefined;\r\n }\r\n }\r\n\r\n private getInteger(input: string, startPoint: number, minLength: number, maxLength: number): number {\r\n var val = input.substring(startPoint);\r\n var key = `${minLength}_${maxLength}`;\r\n var matcher = this.cache[key];\r\n if (!matcher) {\r\n matcher = new RegExp(`^(\\\\d{${minLength},${maxLength}})`);\r\n this.cache[key] = matcher;\r\n }\r\n\r\n var match = matcher.exec(val);\r\n if (match) {\r\n return Number(match[1]);\r\n }\r\n return null;\r\n }\r\n\r\n private getDateOfISOWeek(week: number, year: number, month?: number, date?: number): Date {\r\n if (week < 1) return undefined;\r\n\r\n var simple = new Date(year, 0, 1 + (week - 1) * 7);\r\n var dow = simple.getDay();\r\n var ISOweekStart = simple;\r\n\r\n if (dow <= 4) {\r\n ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);\r\n } else {\r\n ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());\r\n }\r\n\r\n if (ISOweekStart.getFullYear() !== year) {\r\n return undefined;\r\n }\r\n\r\n if (month !== null) {\r\n if (ISOweekStart.getMonth() !== month - 1) {\r\n return undefined;\r\n }\r\n }\r\n\r\n if (date !== null) {\r\n var isoWeekDate = ISOweekStart.getDate();\r\n if (date < isoWeekDate && date > isoWeekDate + 6) {\r\n return undefined;\r\n }\r\n }\r\n\r\n return ISOweekStart;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/DateParser.ts","import * as angular from 'angular';\r\nimport { IDateParser } from './DateParser';\r\n\r\nexport class DateParserDirective implements angular.IDirective {\r\n restrict = 'A';\r\n require = 'ngModel';\r\n scope = {\r\n ngModel: '='\r\n };\r\n\r\n constructor(private dateFilter, private $dateParser: IDateParser, private $locale: angular.ILocaleService) { }\r\n\r\n link: angular.IDirectiveLinkFn = ($scope: angular.IScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes, ngModel: any) => {\r\n let dateFormat: string;\r\n\r\n attrs.$observe('dateParser', (value: string) => {\r\n dateFormat = value;\r\n ngModel.$render();\r\n });\r\n\r\n $scope.$watchCollection(() => this.$locale, (value, oldValue) => {\r\n if (!angular.equals(value, oldValue)) {\r\n ngModel.$render();\r\n }\r\n });\r\n\r\n ngModel.$parsers.unshift((viewValue) => {\r\n let date = this.$dateParser(viewValue, dateFormat);\r\n\r\n // Set validity when view value changes\r\n ngModel.$setValidity('date', !viewValue || angular.isDate(date));\r\n\r\n return date;\r\n });\r\n\r\n ngModel.$render = () => {\r\n let modelValueExists = ngModel.$modelValue === '' || ngModel.$modelValue === null || ngModel.$modelValue;\r\n element.val(modelValueExists ? this.dateFilter(ngModel.$modelValue, dateFormat) : undefined);\r\n this.scope.ngModel = ngModel.$modelValue;\r\n };\r\n\r\n // Format the new model value before it is displayed\r\n ngModel.$formatters.push((modelValue) => {\r\n // Set validity when model value changes\r\n ngModel.$setValidity('date', !modelValue || angular.isDate(modelValue));\r\n\r\n return angular.isDate(modelValue) ? this.dateFilter(modelValue, dateFormat) : '';\r\n });\r\n }\r\n\r\n static factory(): angular.IDirectiveFactory {\r\n let directive: angular.IDirectiveFactory = (dateFilter, $dateParser, $locale) => new DateParserDirective(dateFilter, $dateParser, $locale);\r\n directive.$inject = ['dateFilter', '$dateParser', '$locale'];\r\n return directive;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/DateParserDirective.ts","import * as ng from 'angular';\r\nimport { DateParser } from './DateParser';\r\nimport { DateParserDirective } from './DateParserDirective';\r\n\r\nng.module('dateParser', [])\r\n .provider('$dateParser', DateParser)\r\n .directive('dateParser', DateParserDirective.factory());\n\n\n// WEBPACK FOOTER //\n// ./src/index.ts"],"sourceRoot":""}