{"version":3,"file":"app.6de88ff9.js","sources":["../../../node_modules/jsuites/dist/jsuites.js","../../../node_modules/filepond/dist/filepond.esm.js","../../../node_modules/filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type.esm.js","../../../node_modules/filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size.esm.js","../../../resources/js/app.js"],"sourcesContent":["\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.jSuites = factory();\n}(this, (function () {\n\nvar jSuites;\n/******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 195:\n/***/ (function(module) {\n\n/**\r\n * (c) jSuites Javascript Plugins and Web Components (v4)\r\n *\r\n * Website: https://jsuites.net\r\n * Description: Create amazing web based applications.\r\n * Plugin: Organogram\r\n *\r\n * MIT License\r\n */\r\n\r\n;(function (global, factory) {\r\n true ? module.exports = factory() :\r\n 0;\r\n}(this, (function () {\r\n\r\n return (function(str) {\r\n function int64(msint_32, lsint_32) {\r\n this.highOrder = msint_32;\r\n this.lowOrder = lsint_32;\r\n }\r\n\r\n var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),\r\n new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),\r\n new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),\r\n new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];\r\n\r\n var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),\r\n new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),\r\n new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),\r\n new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),\r\n new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),\r\n new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),\r\n new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),\r\n new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),\r\n new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),\r\n new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),\r\n new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),\r\n new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),\r\n new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),\r\n new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),\r\n new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),\r\n new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),\r\n new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),\r\n new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),\r\n new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),\r\n new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),\r\n new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),\r\n new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),\r\n new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),\r\n new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),\r\n new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),\r\n new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),\r\n new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),\r\n new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),\r\n new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),\r\n new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),\r\n new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),\r\n new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),\r\n new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),\r\n new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),\r\n new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),\r\n new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),\r\n new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),\r\n new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),\r\n new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),\r\n new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];\r\n\r\n var W = new Array(64);\r\n var a, b, c, d, e, f, g, h, i, j;\r\n var T1, T2;\r\n var charsize = 8;\r\n\r\n function utf8_encode(str) {\r\n return unescape(encodeURIComponent(str));\r\n }\r\n\r\n function str2binb(str) {\r\n var bin = [];\r\n var mask = (1 << charsize) - 1;\r\n var len = str.length * charsize;\r\n\r\n for (var i = 0; i < len; i += charsize) {\r\n bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));\r\n }\r\n\r\n return bin;\r\n }\r\n\r\n function binb2hex(binarray) {\r\n var hex_tab = \"0123456789abcdef\";\r\n var str = \"\";\r\n var length = binarray.length * 4;\r\n var srcByte;\r\n\r\n for (var i = 0; i < length; i += 1) {\r\n srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);\r\n str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n function safe_add_2(x, y) {\r\n var lsw, msw, lowOrder, highOrder;\r\n\r\n lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);\r\n msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);\r\n lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\r\n\r\n lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);\r\n msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);\r\n highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\r\n\r\n return new int64(highOrder, lowOrder);\r\n }\r\n\r\n function safe_add_4(a, b, c, d) {\r\n var lsw, msw, lowOrder, highOrder;\r\n\r\n lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);\r\n msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);\r\n lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\r\n\r\n lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);\r\n msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);\r\n highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\r\n\r\n return new int64(highOrder, lowOrder);\r\n }\r\n\r\n function safe_add_5(a, b, c, d, e) {\r\n var lsw, msw, lowOrder, highOrder;\r\n\r\n lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);\r\n msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);\r\n lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\r\n\r\n lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);\r\n msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);\r\n highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);\r\n\r\n return new int64(highOrder, lowOrder);\r\n }\r\n\r\n function maj(x, y, z) {\r\n return new int64(\r\n (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),\r\n (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)\r\n );\r\n }\r\n\r\n function ch(x, y, z) {\r\n return new int64(\r\n (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),\r\n (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)\r\n );\r\n }\r\n\r\n function rotr(x, n) {\r\n if (n <= 32) {\r\n return new int64(\r\n (x.highOrder >>> n) | (x.lowOrder << (32 - n)),\r\n (x.lowOrder >>> n) | (x.highOrder << (32 - n))\r\n );\r\n } else {\r\n return new int64(\r\n (x.lowOrder >>> n) | (x.highOrder << (32 - n)),\r\n (x.highOrder >>> n) | (x.lowOrder << (32 - n))\r\n );\r\n }\r\n }\r\n\r\n function sigma0(x) {\r\n var rotr28 = rotr(x, 28);\r\n var rotr34 = rotr(x, 34);\r\n var rotr39 = rotr(x, 39);\r\n\r\n return new int64(\r\n rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,\r\n rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder\r\n );\r\n }\r\n\r\n function sigma1(x) {\r\n var rotr14 = rotr(x, 14);\r\n var rotr18 = rotr(x, 18);\r\n var rotr41 = rotr(x, 41);\r\n\r\n return new int64(\r\n rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,\r\n rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder\r\n );\r\n }\r\n\r\n function gamma0(x) {\r\n var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);\r\n\r\n return new int64(\r\n rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,\r\n rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder\r\n );\r\n }\r\n\r\n function gamma1(x) {\r\n var rotr19 = rotr(x, 19);\r\n var rotr61 = rotr(x, 61);\r\n var shr6 = shr(x, 6);\r\n\r\n return new int64(\r\n rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,\r\n rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder\r\n );\r\n }\r\n\r\n function shr(x, n) {\r\n if (n <= 32) {\r\n return new int64(\r\n x.highOrder >>> n,\r\n x.lowOrder >>> n | (x.highOrder << (32 - n))\r\n );\r\n } else {\r\n return new int64(\r\n 0,\r\n x.highOrder << (32 - n)\r\n );\r\n }\r\n }\r\n\r\n var str = utf8_encode(str);\r\n var strlen = str.length*charsize;\r\n str = str2binb(str);\r\n\r\n str[strlen >> 5] |= 0x80 << (24 - strlen % 32);\r\n str[(((strlen + 128) >> 10) << 5) + 31] = strlen;\r\n\r\n for (var i = 0; i < str.length; i += 32) {\r\n a = H[0];\r\n b = H[1];\r\n c = H[2];\r\n d = H[3];\r\n e = H[4];\r\n f = H[5];\r\n g = H[6];\r\n h = H[7];\r\n\r\n for (var j = 0; j < 80; j++) {\r\n if (j < 16) {\r\n W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);\r\n } else {\r\n W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);\r\n }\r\n\r\n T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);\r\n T2 = safe_add_2(sigma0(a), maj(a, b, c));\r\n h = g;\r\n g = f;\r\n f = e;\r\n e = safe_add_2(d, T1);\r\n d = c;\r\n c = b;\r\n b = a;\r\n a = safe_add_2(T1, T2);\r\n }\r\n\r\n H[0] = safe_add_2(a, H[0]);\r\n H[1] = safe_add_2(b, H[1]);\r\n H[2] = safe_add_2(c, H[2]);\r\n H[3] = safe_add_2(d, H[3]);\r\n H[4] = safe_add_2(e, H[4]);\r\n H[5] = safe_add_2(f, H[5]);\r\n H[6] = safe_add_2(g, H[6]);\r\n H[7] = safe_add_2(h, H[7]);\r\n }\r\n\r\n var binarray = [];\r\n for (var i = 0; i < H.length; i++) {\r\n binarray.push(H[i].highOrder);\r\n binarray.push(H[i].lowOrder);\r\n }\r\n\r\n return binb2hex(binarray);\r\n });\r\n\r\n})));\r\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n!function() {\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ jsuites; }\n});\n\n;// CONCATENATED MODULE: ./src/utils/helpers.js\nvar Helpers = {};\r\n\r\n// Two digits\r\nHelpers.two = function(value) {\r\n value = '' + value;\r\n if (value.length == 1) {\r\n value = '0' + value;\r\n }\r\n return value;\r\n}\r\n\r\nHelpers.focus = function(el) {\r\n if (el.innerText.length) {\r\n var range = document.createRange();\r\n var sel = window.getSelection();\r\n var node = el.childNodes[el.childNodes.length-1];\r\n range.setStart(node, node.length)\r\n range.collapse(true)\r\n sel.removeAllRanges()\r\n sel.addRange(range)\r\n el.scrollLeft = el.scrollWidth;\r\n }\r\n}\r\n\r\nHelpers.isNumeric = (function (num) {\r\n if (typeof(num) === 'string') {\r\n num = num.trim();\r\n }\r\n return !isNaN(num) && num !== null && num !== '';\r\n});\r\n\r\nHelpers.guid = function() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nHelpers.getNode = function() {\r\n var node = document.getSelection().anchorNode;\r\n if (node) {\r\n return (node.nodeType == 3 ? node.parentNode : node);\r\n } else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Generate hash from a string\r\n */\r\nHelpers.hash = function(str) {\r\n var hash = 0, i, chr;\r\n\r\n if (str.length === 0) {\r\n return hash;\r\n } else {\r\n for (i = 0; i < str.length; i++) {\r\n chr = str.charCodeAt(i);\r\n if (chr > 32) {\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0;\r\n }\r\n }\r\n }\r\n return hash;\r\n}\r\n\r\n/**\r\n * Generate a random color\r\n */\r\nHelpers.randomColor = function(h) {\r\n var lum = -0.25;\r\n var hex = String('#' + Math.random().toString(16).slice(2, 8).toUpperCase()).replace(/[^0-9a-f]/gi, '');\r\n if (hex.length < 6) {\r\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\r\n }\r\n var rgb = [], c, i;\r\n for (i = 0; i < 3; i++) {\r\n c = parseInt(hex.substr(i * 2, 2), 16);\r\n c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\r\n rgb.push((\"00\" + c).substr(c.length));\r\n }\r\n\r\n // Return hex\r\n if (h == true) {\r\n return '#' + Helpers.two(rgb[0].toString(16)) + Helpers.two(rgb[1].toString(16)) + Helpers.two(rgb[2].toString(16));\r\n }\r\n\r\n return rgb;\r\n}\r\n\r\nHelpers.getWindowWidth = function() {\r\n var w = window,\r\n d = document,\r\n e = d.documentElement,\r\n g = d.getElementsByTagName('body')[0],\r\n x = w.innerWidth || e.clientWidth || g.clientWidth;\r\n return x;\r\n}\r\n\r\nHelpers.getWindowHeight = function() {\r\n var w = window,\r\n d = document,\r\n e = d.documentElement,\r\n g = d.getElementsByTagName('body')[0],\r\n y = w.innerHeight|| e.clientHeight|| g.clientHeight;\r\n return y;\r\n}\r\n\r\nHelpers.getPosition = function(e) {\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].pageX;\r\n var y = e.changedTouches[0].pageY;\r\n } else {\r\n var x = (window.Event) ? e.pageX : e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);\r\n var y = (window.Event) ? e.pageY : e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);\r\n }\r\n\r\n return [ x, y ];\r\n}\r\n\r\nHelpers.click = function(el) {\r\n if (el.click) {\r\n el.click();\r\n } else {\r\n var evt = new MouseEvent('click', {\r\n bubbles: true,\r\n cancelable: true,\r\n view: window\r\n });\r\n el.dispatchEvent(evt);\r\n }\r\n}\r\n\r\nHelpers.findElement = function(element, condition) {\r\n var foundElement = false;\r\n\r\n function path (element) {\r\n if (element && ! foundElement) {\r\n if (typeof(condition) == 'function') {\r\n foundElement = condition(element)\r\n } else if (typeof(condition) == 'string') {\r\n if (element.classList && element.classList.contains(condition)) {\r\n foundElement = element;\r\n }\r\n }\r\n }\r\n\r\n if (element.parentNode && ! foundElement) {\r\n path(element.parentNode);\r\n }\r\n }\r\n\r\n path(element);\r\n\r\n return foundElement;\r\n}\r\n\r\n/* harmony default export */ var helpers = (Helpers);\n;// CONCATENATED MODULE: ./src/utils/helpers.date.js\n\r\n\r\nfunction HelpersDate() {\r\n var Component = {};\r\n\r\n Component.now = function (date, dateOnly) {\r\n var y = null;\r\n var m = null;\r\n var d = null;\r\n var h = null;\r\n var i = null;\r\n var s = null;\r\n\r\n if (Array.isArray(date)) {\r\n y = date[0];\r\n m = date[1];\r\n d = date[2];\r\n h = date[3];\r\n i = date[4];\r\n s = date[5];\r\n } else {\r\n if (! date) {\r\n date = new Date();\r\n }\r\n y = date.getFullYear();\r\n m = date.getMonth() + 1;\r\n d = date.getDate();\r\n h = date.getHours();\r\n i = date.getMinutes();\r\n s = date.getSeconds();\r\n }\r\n\r\n if (dateOnly == true) {\r\n return helpers.two(y) + '-' + helpers.two(m) + '-' + helpers.two(d);\r\n } else {\r\n return helpers.two(y) + '-' + helpers.two(m) + '-' + helpers.two(d) + ' ' + helpers.two(h) + ':' + helpers.two(i) + ':' + helpers.two(s);\r\n }\r\n }\r\n\r\n Component.toArray = function (value) {\r\n var date = value.split(((value.indexOf('T') !== -1) ? 'T' : ' '));\r\n var time = date[1];\r\n var date = date[0].split('-');\r\n var y = parseInt(date[0]);\r\n var m = parseInt(date[1]);\r\n var d = parseInt(date[2]);\r\n var h = 0;\r\n var i = 0;\r\n\r\n if (time) {\r\n time = time.split(':');\r\n h = parseInt(time[0]);\r\n i = parseInt(time[1]);\r\n }\r\n return [y, m, d, h, i, 0];\r\n }\r\n\r\n var excelInitialTime = Date.UTC(1900, 0, 0);\r\n var excelLeapYearBug = Date.UTC(1900, 1, 29);\r\n var millisecondsPerDay = 86400000;\r\n\r\n /**\r\n * Date to number\r\n */\r\n Component.dateToNum = function (jsDate) {\r\n if (typeof (jsDate) === 'string') {\r\n jsDate = new Date(jsDate + ' GMT+0');\r\n }\r\n var jsDateInMilliseconds = jsDate.getTime();\r\n if (jsDateInMilliseconds >= excelLeapYearBug) {\r\n jsDateInMilliseconds += millisecondsPerDay;\r\n }\r\n jsDateInMilliseconds -= excelInitialTime;\r\n\r\n return jsDateInMilliseconds / millisecondsPerDay;\r\n }\r\n\r\n /**\r\n * Number to date\r\n *\r\n * IMPORTANT: Excel incorrectly considers 1900 to be a leap year\r\n */\r\n Component.numToDate = function (excelSerialNumber) {\r\n var jsDateInMilliseconds = excelInitialTime + excelSerialNumber * millisecondsPerDay;\r\n if (jsDateInMilliseconds >= excelLeapYearBug) {\r\n jsDateInMilliseconds -= millisecondsPerDay;\r\n }\r\n\r\n const d = new Date(jsDateInMilliseconds);\r\n\r\n var date = [\r\n d.getUTCFullYear(),\r\n d.getUTCMonth() + 1,\r\n d.getUTCDate(),\r\n d.getUTCHours(),\r\n d.getUTCMinutes(),\r\n d.getUTCSeconds(),\r\n ];\r\n\r\n return Component.now(date);\r\n }\r\n\r\n // Jsuites calendar labels\r\n Component.weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n Component.months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n Component.weekdaysShort = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n Component.monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var helpers_date = (HelpersDate());\n;// CONCATENATED MODULE: ./src/utils/dictionary.js\n\r\n\r\n// Update dictionary\r\nvar setDictionary = function(d) {\r\n if (! document.dictionary) {\r\n document.dictionary = {}\r\n }\r\n // Replace the key into the dictionary and append the new ones\r\n var t = null;\r\n var i = null;\r\n var k = Object.keys(d);\r\n for (i = 0; i < k.length; i++) {\r\n document.dictionary[k[i]] = d[k[i]];\r\n }\r\n\r\n // Translations\r\n for (i = 0; i < helpers_date.weekdays.length; i++) {\r\n t = translate(helpers_date.weekdays[i]);\r\n if (helpers_date.weekdays[i]) {\r\n helpers_date.weekdays[i] = t;\r\n helpers_date.weekdaysShort[i] = t.substr(0,3);\r\n }\r\n }\r\n for (i = 0; i < helpers_date.months.length; i++) {\r\n t = translate(helpers_date.months[i]);\r\n if (t) {\r\n helpers_date.months[i] = t;\r\n helpers_date.monthsShort[i] = t.substr(0,3);\r\n }\r\n }\r\n}\r\n\r\n// Translate\r\nvar translate = function(t) {\r\n if (typeof(document) !== \"undefined\" && document.dictionary) {\r\n return document.dictionary[t] || t;\r\n } else {\r\n return t;\r\n }\r\n}\r\n\r\n\r\n/* harmony default export */ var dictionary = ({ setDictionary, translate });\n;// CONCATENATED MODULE: ./src/utils/tracking.js\n const Tracking = function(component, state) {\r\n if (state === true) {\r\n Tracking.state = Tracking.state.filter(function(v) {\r\n return v !== null;\r\n });\r\n\r\n // Start after all events\r\n setTimeout(function() {\r\n Tracking.state.push(component);\r\n }, 0);\r\n\r\n } else {\r\n var index = Tracking.state.indexOf(component);\r\n if (index >= 0) {\r\n Tracking.state.splice(index, 1);\r\n }\r\n }\r\n}\r\n\r\n/* harmony default export */ var tracking = (Tracking);\n;// CONCATENATED MODULE: ./src/utils/path.js\nfunction Path(str, val, remove) {\r\n str = str.split('.');\r\n if (str.length) {\r\n let o = this;\r\n let p = null;\r\n while (str.length > 1) {\r\n // Get the property\r\n p = str.shift();\r\n // Check if the property exists\r\n if (o.hasOwnProperty(p)) {\r\n o = o[p];\r\n } else {\r\n // Property does not exists\r\n if (typeof(val) === 'undefined') {\r\n return undefined;\r\n } else {\r\n // Create the property\r\n o[p] = {};\r\n // Next property\r\n o = o[p];\r\n }\r\n }\r\n }\r\n // Get the property\r\n p = str.shift();\r\n // Set or get the value\r\n if (typeof(val) !== 'undefined') {\r\n if (remove === true) {\r\n delete o[p];\r\n } else {\r\n o[p] = val;\r\n }\r\n // Success\r\n return true;\r\n } else {\r\n // Return the value\r\n if (o) {\r\n return o[p];\r\n }\r\n }\r\n }\r\n // Something went wrong\r\n return false;\r\n}\n;// CONCATENATED MODULE: ./src/utils/sorting.js\nfunction Sorting(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n var defaults = {\r\n pointer: null,\r\n direction: null,\r\n ondragstart: null,\r\n ondragend: null,\r\n ondrop: null,\r\n }\r\n\r\n var dragElement = null;\r\n\r\n // Loop through the initial configuration\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n el.classList.add('jsorting');\r\n\r\n el.addEventListener('dragstart', function(e) {\r\n let target = e.target;\r\n if (target.nodeType === 3) {\r\n if (target.parentNode.getAttribute('draggable') === 'true') {\r\n target = target.parentNode;\r\n } else {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return;\r\n }\r\n }\r\n\r\n if (target.getAttribute('draggable') === 'true') {\r\n let position = Array.prototype.indexOf.call(target.parentNode.children, target);\r\n dragElement = {\r\n element: target,\r\n o: position,\r\n d: position\r\n }\r\n target.style.opacity = '0.25';\r\n\r\n if (typeof (obj.options.ondragstart) == 'function') {\r\n obj.options.ondragstart(el, target, e);\r\n }\r\n\r\n e.dataTransfer.setDragImage(target,0,0);\r\n }\r\n });\r\n\r\n el.addEventListener('dragover', function(e) {\r\n e.preventDefault();\r\n\r\n if (dragElement) {\r\n if (getElement(e.target)) {\r\n if (e.target.getAttribute('draggable') == 'true' && dragElement.element != e.target) {\r\n if (!obj.options.direction) {\r\n var condition = e.target.clientHeight / 2 > e.offsetY;\r\n } else {\r\n var condition = e.target.clientWidth / 2 > e.offsetX;\r\n }\r\n\r\n if (condition) {\r\n e.target.parentNode.insertBefore(dragElement.element, e.target);\r\n } else {\r\n e.target.parentNode.insertBefore(dragElement.element, e.target.nextSibling);\r\n }\r\n\r\n dragElement.d = Array.prototype.indexOf.call(e.target.parentNode.children, dragElement.element);\r\n }\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener('dragleave', function(e) {\r\n e.preventDefault();\r\n });\r\n\r\n el.addEventListener('dragend', function(e) {\r\n e.preventDefault();\r\n\r\n if (dragElement) {\r\n if (typeof(obj.options.ondragend) == 'function') {\r\n obj.options.ondragend(el, dragElement.element, e);\r\n }\r\n\r\n // Cancelled put element to the original position\r\n if (dragElement.o < dragElement.d) {\r\n e.target.parentNode.insertBefore(dragElement.element, e.target.parentNode.children[dragElement.o]);\r\n } else {\r\n e.target.parentNode.insertBefore(dragElement.element, e.target.parentNode.children[dragElement.o].nextSibling);\r\n }\r\n\r\n dragElement.element.style.opacity = '';\r\n dragElement = null;\r\n }\r\n });\r\n\r\n el.addEventListener('drop', function(e) {\r\n e.preventDefault();\r\n\r\n if (dragElement) {\r\n if (dragElement.o !== dragElement.d) {\r\n if (typeof (obj.options.ondrop) == 'function') {\r\n obj.options.ondrop(el, dragElement.o, dragElement.d, dragElement.element, e.target, e);\r\n }\r\n }\r\n\r\n dragElement.element.style.opacity = '';\r\n dragElement = null;\r\n }\r\n });\r\n\r\n var getElement = function(element) {\r\n var sorting = false;\r\n\r\n function path (element) {\r\n if (element.className) {\r\n if (element.classList.contains('jsorting')) {\r\n sorting = true;\r\n }\r\n }\r\n\r\n if (! sorting) {\r\n path(element.parentNode);\r\n }\r\n }\r\n\r\n path(element);\r\n\r\n return sorting;\r\n }\r\n\r\n for (var i = 0; i < el.children.length; i++) {\r\n if (! el.children[i].hasAttribute('draggable')) {\r\n el.children[i].setAttribute('draggable', 'true');\r\n }\r\n }\r\n\r\n el.val = function() {\r\n var id = null;\r\n var data = [];\r\n for (var i = 0; i < el.children.length; i++) {\r\n if (id = el.children[i].getAttribute('data-id')) {\r\n data.push(id);\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n return el;\r\n}\n;// CONCATENATED MODULE: ./src/utils/lazyloading.js\nfunction LazyLoading(el, options) {\r\n var obj = {}\r\n\r\n // Mandatory options\r\n if (! options.loadUp || typeof(options.loadUp) != 'function') {\r\n options.loadUp = function() {\r\n return false;\r\n }\r\n }\r\n if (! options.loadDown || typeof(options.loadDown) != 'function') {\r\n options.loadDown = function() {\r\n return false;\r\n }\r\n }\r\n // Timer ms\r\n if (! options.timer) {\r\n options.timer = 100;\r\n }\r\n\r\n // Timer\r\n var timeControlLoading = null;\r\n\r\n // Controls\r\n var scrollControls = function(e) {\r\n if (timeControlLoading == null) {\r\n var event = false;\r\n var scrollTop = el.scrollTop;\r\n if (el.scrollTop + (el.clientHeight * 2) >= el.scrollHeight) {\r\n if (options.loadDown()) {\r\n if (scrollTop == el.scrollTop) {\r\n el.scrollTop = el.scrollTop - (el.clientHeight);\r\n }\r\n event = true;\r\n }\r\n } else if (el.scrollTop <= el.clientHeight) {\r\n if (options.loadUp()) {\r\n if (scrollTop == el.scrollTop) {\r\n el.scrollTop = el.scrollTop + (el.clientHeight);\r\n }\r\n event = true;\r\n }\r\n }\r\n\r\n timeControlLoading = setTimeout(function() {\r\n timeControlLoading = null;\r\n }, options.timer);\r\n\r\n if (event) {\r\n if (typeof(options.onupdate) == 'function') {\r\n options.onupdate();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Onscroll\r\n el.onscroll = function(e) {\r\n scrollControls(e);\r\n }\r\n\r\n el.onwheel = function(e) {\r\n scrollControls(e);\r\n }\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/ajax.js\nfunction Ajax() {\r\n var Component = (function(options, complete) {\r\n if (Array.isArray(options)) {\r\n // Create multiple request controller\r\n var multiple = {\r\n instance: [],\r\n complete: complete,\r\n }\r\n\r\n if (options.length > 0) {\r\n for (var i = 0; i < options.length; i++) {\r\n options[i].multiple = multiple;\r\n multiple.instance.push(Component(options[i]));\r\n }\r\n }\r\n\r\n return multiple;\r\n }\r\n\r\n if (! options.data) {\r\n options.data = {};\r\n }\r\n\r\n if (options.type) {\r\n options.method = options.type;\r\n }\r\n\r\n // Default method\r\n if (! options.method) {\r\n options.method = 'GET';\r\n }\r\n\r\n // Default type\r\n if (! options.dataType) {\r\n options.dataType = 'json';\r\n }\r\n\r\n if (options.data) {\r\n // Parse object to variables format\r\n var parseData = function (value, key) {\r\n var vars = [];\r\n if (value) {\r\n var keys = Object.keys(value);\r\n if (keys.length) {\r\n for (var i = 0; i < keys.length; i++) {\r\n if (key) {\r\n var k = key + '[' + keys[i] + ']';\r\n } else {\r\n var k = keys[i];\r\n }\r\n\r\n if (value[k] instanceof FileList) {\r\n vars[k] = value[keys[i]];\r\n } else if (value[keys[i]] === null || value[keys[i]] === undefined) {\r\n vars[k] = '';\r\n } else if (typeof(value[keys[i]]) == 'object') {\r\n var r = parseData(value[keys[i]], k);\r\n var o = Object.keys(r);\r\n for (var j = 0; j < o.length; j++) {\r\n vars[o[j]] = r[o[j]];\r\n }\r\n } else {\r\n vars[k] = value[keys[i]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return vars;\r\n }\r\n\r\n var d = parseData(options.data);\r\n var k = Object.keys(d);\r\n\r\n // Data form\r\n if (options.method == 'GET') {\r\n if (k.length) {\r\n var data = [];\r\n for (var i = 0; i < k.length; i++) {\r\n data.push(k[i] + '=' + encodeURIComponent(d[k[i]]));\r\n }\r\n\r\n if (options.url.indexOf('?') < 0) {\r\n options.url += '?';\r\n }\r\n options.url += data.join('&');\r\n }\r\n } else {\r\n var data = new FormData();\r\n for (var i = 0; i < k.length; i++) {\r\n if (d[k[i]] instanceof FileList) {\r\n if (d[k[i]].length) {\r\n for (var j = 0; j < d[k[i]].length; j++) {\r\n data.append(k[i], d[k[i]][j], d[k[i]][j].name);\r\n }\r\n }\r\n } else {\r\n data.append(k[i], d[k[i]]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var httpRequest = new XMLHttpRequest();\r\n httpRequest.open(options.method, options.url, true);\r\n httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n\r\n // Content type\r\n if (options.contentType) {\r\n httpRequest.setRequestHeader('Content-Type', options.contentType);\r\n }\r\n\r\n // Headers\r\n if (options.method === 'POST') {\r\n httpRequest.setRequestHeader('Accept', 'application/json');\r\n } else {\r\n if (options.dataType === 'blob') {\r\n httpRequest.responseType = \"blob\";\r\n } else {\r\n if (! options.contentType) {\r\n if (options.dataType === 'json') {\r\n httpRequest.setRequestHeader('Content-Type', 'text/json');\r\n } else if (options.dataType === 'html') {\r\n httpRequest.setRequestHeader('Content-Type', 'text/html');\r\n }\r\n }\r\n }\r\n }\r\n\r\n // No cache\r\n if (options.cache !== true) {\r\n httpRequest.setRequestHeader('pragma', 'no-cache');\r\n httpRequest.setRequestHeader('cache-control', 'no-cache');\r\n }\r\n\r\n // Authentication\r\n if (options.withCredentials === true) {\r\n httpRequest.withCredentials = true\r\n }\r\n\r\n // Before send\r\n if (typeof(options.beforeSend) == 'function') {\r\n options.beforeSend(httpRequest);\r\n }\r\n\r\n // Before send\r\n if (typeof(Component.beforeSend) == 'function') {\r\n Component.beforeSend(httpRequest);\r\n }\r\n\r\n if (document.ajax && typeof(document.ajax.beforeSend) == 'function') {\r\n document.ajax.beforeSend(httpRequest);\r\n }\r\n\r\n httpRequest.onload = function() {\r\n if (httpRequest.status >= 200 && httpRequest.status < 300) {\r\n if (options.dataType === 'json') {\r\n try {\r\n var result = JSON.parse(httpRequest.responseText);\r\n\r\n if (options.success && typeof(options.success) == 'function') {\r\n options.success(result);\r\n }\r\n } catch(err) {\r\n if (options.error && typeof(options.error) == 'function') {\r\n options.error(err, result);\r\n }\r\n }\r\n } else {\r\n if (options.dataType === 'blob') {\r\n var result = httpRequest.response;\r\n } else {\r\n var result = httpRequest.responseText;\r\n }\r\n\r\n if (options.success && typeof(options.success) == 'function') {\r\n options.success(result);\r\n }\r\n }\r\n } else {\r\n if (options.error && typeof(options.error) == 'function') {\r\n options.error(httpRequest.responseText, httpRequest.status);\r\n }\r\n }\r\n\r\n // Global queue\r\n if (Component.queue && Component.queue.length > 0) {\r\n Component.send(Component.queue.shift());\r\n }\r\n\r\n // Global complete method\r\n if (Component.requests && Component.requests.length) {\r\n // Get index of this request in the container\r\n var index = Component.requests.indexOf(httpRequest);\r\n // Remove from the ajax requests container\r\n Component.requests.splice(index, 1);\r\n // Deprecated: Last one?\r\n if (! Component.requests.length) {\r\n // Object event\r\n if (options.complete && typeof(options.complete) == 'function') {\r\n options.complete(result);\r\n }\r\n }\r\n // Group requests\r\n if (options.group) {\r\n if (Component.oncomplete && typeof(Component.oncomplete[options.group]) == 'function') {\r\n if (! Component.pending(options.group)) {\r\n Component.oncomplete[options.group]();\r\n Component.oncomplete[options.group] = null;\r\n }\r\n }\r\n }\r\n // Multiple requests controller\r\n if (options.multiple && options.multiple.instance) {\r\n // Get index of this request in the container\r\n var index = options.multiple.instance.indexOf(httpRequest);\r\n // Remove from the ajax requests container\r\n options.multiple.instance.splice(index, 1);\r\n // If this is the last one call method complete\r\n if (! options.multiple.instance.length) {\r\n if (options.multiple.complete && typeof(options.multiple.complete) == 'function') {\r\n options.multiple.complete(result);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Keep the options\r\n httpRequest.options = options;\r\n // Data\r\n httpRequest.data = data;\r\n\r\n // Queue\r\n if (options.queue === true && Component.requests.length > 0) {\r\n Component.queue.push(httpRequest);\r\n } else {\r\n Component.send(httpRequest)\r\n }\r\n\r\n return httpRequest;\r\n });\r\n\r\n Component.send = function(httpRequest) {\r\n if (httpRequest.data) {\r\n if (Array.isArray(httpRequest.data)) {\r\n httpRequest.send(httpRequest.data.join('&'));\r\n } else {\r\n httpRequest.send(httpRequest.data);\r\n }\r\n } else {\r\n httpRequest.send();\r\n }\r\n\r\n Component.requests.push(httpRequest);\r\n }\r\n\r\n Component.exists = function(url, __callback) {\r\n var http = new XMLHttpRequest();\r\n http.open('HEAD', url, false);\r\n http.send();\r\n if (http.status) {\r\n __callback(http.status);\r\n }\r\n }\r\n\r\n Component.pending = function(group) {\r\n var n = 0;\r\n var o = Component.requests;\r\n if (o && o.length) {\r\n for (var i = 0; i < o.length; i++) {\r\n if (! group || group == o[i].options.group) {\r\n n++\r\n }\r\n }\r\n }\r\n return n;\r\n }\r\n\r\n Component.oncomplete = {};\r\n Component.requests = [];\r\n Component.queue = [];\r\n\r\n return Component\r\n}\r\n\r\n/* harmony default export */ var ajax = (Ajax());\n;// CONCATENATED MODULE: ./src/plugins/animation.js\nfunction Animation() {\r\n const Component = {\r\n loading: {}\r\n }\r\n \r\n Component.loading.show = function(timeout) {\r\n if (! Component.loading.element) {\r\n Component.loading.element = document.createElement('div');\r\n Component.loading.element.className = 'jloading';\r\n }\r\n document.body.appendChild(Component.loading.element);\r\n \r\n // Max timeout in seconds\r\n if (timeout > 0) {\r\n setTimeout(function() {\r\n Component.loading.hide();\r\n }, timeout * 1000)\r\n }\r\n }\r\n \r\n Component.loading.hide = function() {\r\n if (Component.loading.element && Component.loading.element.parentNode) {\r\n document.body.removeChild(Component.loading.element);\r\n }\r\n }\r\n \r\n Component.slideLeft = function (element, direction, done) {\r\n if (direction == true) {\r\n element.classList.add('jslide-left-in');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-left-in');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n } else {\r\n element.classList.add('jslide-left-out');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-left-out');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n }\r\n }\r\n \r\n Component.slideRight = function (element, direction, done) {\r\n if (direction === true) {\r\n element.classList.add('jslide-right-in');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-right-in');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n } else {\r\n element.classList.add('jslide-right-out');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-right-out');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n }\r\n }\r\n \r\n Component.slideTop = function (element, direction, done) {\r\n if (direction === true) {\r\n element.classList.add('jslide-top-in');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-top-in');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n } else {\r\n element.classList.add('jslide-top-out');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-top-out');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n }\r\n }\r\n \r\n Component.slideBottom = function (element, direction, done) {\r\n if (direction === true) {\r\n element.classList.add('jslide-bottom-in');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-bottom-in');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 400);\r\n } else {\r\n element.classList.add('jslide-bottom-out');\r\n setTimeout(function () {\r\n element.classList.remove('jslide-bottom-out');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 100);\r\n }\r\n }\r\n \r\n Component.fadeIn = function (element, done) {\r\n element.style.display = '';\r\n element.classList.add('jfade-in');\r\n setTimeout(function () {\r\n element.classList.remove('jfade-in');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 2000);\r\n }\r\n \r\n Component.fadeOut = function (element, done) {\r\n element.classList.add('jfade-out');\r\n setTimeout(function () {\r\n element.style.display = 'none';\r\n element.classList.remove('jfade-out');\r\n if (typeof (done) == 'function') {\r\n done();\r\n }\r\n }, 1000);\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var animation = (Animation());\n;// CONCATENATED MODULE: ./src/plugins/mask.js\n\r\n\r\n\r\nfunction Mask() {\r\n // Currency\r\n var tokens = {\r\n // Text\r\n text: [ '@' ],\r\n // Currency tokens\r\n currency: [ '#(.{1})##0?(.{1}0+)?( ?;(.*)?)?', '#' ],\r\n // Scientific\r\n scientific: [ '0{1}(.{1}0+)?E{1}\\\\+0+' ],\r\n // Percentage\r\n percentage: [ '0{1}(.{1}0+)?%' ],\r\n // Number\r\n numeric: [ '0{1}(.{1}0+)?' ],\r\n // Data tokens\r\n datetime: [ 'YYYY', 'YYY', 'YY', 'MMMMM', 'MMMM', 'MMM', 'MM', 'DDDDD', 'DDDD', 'DDD', 'DD', 'DY', 'DAY', 'WD', 'D', 'Q', 'MONTH', 'MON', 'HH24', 'HH12', 'HH', '\\\\[H\\\\]', 'H', 'AM/PM', 'MI', 'SS', 'MS', 'Y', 'M' ],\r\n // Other\r\n general: [ 'A', '0', '[0-9a-zA-Z\\$]+', '.']\r\n }\r\n\r\n var getDate = function() {\r\n if (this.mask.toLowerCase().indexOf('[h]') !== -1) {\r\n var m = 0;\r\n if (this.date[4]) {\r\n m = parseFloat(this.date[4] / 60);\r\n }\r\n var v = parseInt(this.date[3]) + m;\r\n v /= 24;\r\n } else if (! (this.date[0] && this.date[1] && this.date[2]) && (this.date[3] || this.date[4])) {\r\n v = helpers.two(this.date[3]) + ':' + helpers.two(this.date[4]) + ':' + helpers.two(this.date[5])\r\n } else {\r\n if (this.date[0] && this.date[1] && ! this.date[2]) {\r\n this.date[2] = 1;\r\n }\r\n v = helpers.two(this.date[0]) + '-' + helpers.two(this.date[1]) + '-' + helpers.two(this.date[2]);\r\n\r\n if (this.date[3] || this.date[4] || this.date[5]) {\r\n v += ' ' + helpers.two(this.date[3]) + ':' + helpers.two(this.date[4]) + ':' + helpers.two(this.date[5]);\r\n }\r\n }\r\n\r\n return v;\r\n }\r\n\r\n var extractDate = function() {\r\n var v = '';\r\n if (! (this.date[0] && this.date[1] && this.date[2]) && (this.date[3] || this.date[4])) {\r\n if (this.mask.toLowerCase().indexOf('[h]') !== -1) {\r\n v = parseInt(this.date[3]);\r\n } else {\r\n let h = parseInt(this.date[3]);\r\n if (h < 13 && this.values.indexOf('PM') !== -1) {\r\n v = (h+12) % 24;\r\n } else {\r\n v = h % 24;\r\n }\r\n }\r\n if (this.date[4]) {\r\n v += parseFloat(this.date[4] / 60);\r\n }\r\n if (this.date[5]) {\r\n v += parseFloat(this.date[5] / 3600);\r\n }\r\n v /= 24;\r\n } else if (this.date[0] || this.date[1] || this.date[2] || this.date[3] || this.date[4] || this.date[5]) {\r\n if (this.date[0] && this.date[1] && ! this.date[2]) {\r\n this.date[2] = 1;\r\n }\r\n var t = helpers_date.now(this.date);\r\n v = helpers_date.dateToNum(t);\r\n if (this.date[4]) {\r\n v += parseFloat(this.date[4] / 60);\r\n }\r\n }\r\n\r\n if (isNaN(v)) {\r\n v = '';\r\n }\r\n\r\n return v;\r\n }\r\n\r\n var isBlank = function(v) {\r\n return v === null || v === '' || v === undefined ? true : false;\r\n }\r\n\r\n var isFormula = function(value) {\r\n var v = (''+value)[0];\r\n return v == '=' ? true : false;\r\n }\r\n\r\n var isNumeric = function(t) {\r\n return t === 'currency' || t === 'percentage' || t === 'scientific' || t === 'numeric' ? true : false;\r\n }\r\n\r\n /**\r\n * Get the decimal defined in the mask configuration\r\n */\r\n var getDecimal = function(v) {\r\n if (v && Number(v) == v) {\r\n return '.';\r\n } else {\r\n if (this.options.decimal) {\r\n return this.options.decimal;\r\n } else {\r\n if (this.locale) {\r\n var t = Intl.NumberFormat(this.locale).format(1.1);\r\n return this.options.decimal = t[1];\r\n } else {\r\n if (! v) {\r\n v = this.mask;\r\n }\r\n var e = new RegExp('0{1}(.{1})0+', 'ig');\r\n var t = e.exec(v);\r\n if (t && t[1] && t[1].length == 1) {\r\n // Save decimal\r\n this.options.decimal = t[1];\r\n // Return decimal\r\n return t[1];\r\n } else {\r\n // Did not find any decimal last resort the default\r\n var e = new RegExp('#{1}(.{1})#+', 'ig');\r\n var t = e.exec(v);\r\n if (t && t[1] && t[1].length == 1) {\r\n if (t[1] === ',') {\r\n this.options.decimal = '.';\r\n } else {\r\n this.options.decimal = ',';\r\n }\r\n } else {\r\n this.options.decimal = '1.1'.toLocaleString().substring(1,2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.options.decimal) {\r\n return this.options.decimal;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n var ParseValue = function(v, decimal) {\r\n if (v == '') {\r\n return '';\r\n }\r\n\r\n // Get decimal\r\n if (! decimal) {\r\n decimal = getDecimal.call(this);\r\n }\r\n\r\n // New value\r\n v = (''+v).split(decimal);\r\n\r\n // Signal\r\n var signal = v[0].match(/[-]+/g);\r\n if (signal && signal.length) {\r\n signal = true;\r\n } else {\r\n signal = false;\r\n }\r\n\r\n v[0] = v[0].match(/[0-9]+/g);\r\n\r\n if (v[0]) {\r\n if (signal) {\r\n v[0].unshift('-');\r\n }\r\n v[0] = v[0].join('');\r\n } else {\r\n if (signal) {\r\n v[0] = '-';\r\n }\r\n }\r\n\r\n if (v[0] || v[1]) {\r\n if (v[1] !== undefined) {\r\n v[1] = v[1].match(/[0-9]+/g);\r\n if (v[1]) {\r\n v[1] = v[1].join('');\r\n } else {\r\n v[1] = '';\r\n }\r\n }\r\n } else {\r\n return '';\r\n }\r\n return v;\r\n }\r\n\r\n var FormatValue = function(v, event) {\r\n if (v === '') {\r\n return '';\r\n }\r\n // Get decimal\r\n var d = getDecimal.call(this);\r\n // Convert value\r\n var o = this.options;\r\n // Parse value\r\n v = ParseValue.call(this, v);\r\n if (v === '') {\r\n return '';\r\n }\r\n var t = null;\r\n // Temporary value\r\n if (v[0]) {\r\n if (o.style === 'percent') {\r\n t = parseFloat(v[0]) / 100;\r\n } else {\r\n t = parseFloat(v[0] + '.1');\r\n }\r\n }\r\n\r\n if ((v[0] === '-' || v[0] === '-00') && ! v[1] && (event && event.inputType == \"deleteContentBackward\")) {\r\n return '';\r\n }\r\n\r\n var n = new Intl.NumberFormat(this.locale, o).format(t);\r\n n = n.split(d);\r\n\r\n if (o.style === 'percent') {\r\n if (n[0].indexOf('%') !== -1) {\r\n n[0] = n[0].replace('%', '');\r\n n[2] = '%';\r\n }\r\n }\r\n\r\n if (typeof(n[1]) !== 'undefined') {\r\n var s = n[1].replace(/[0-9]*/g, '');\r\n if (s) {\r\n n[2] = s;\r\n }\r\n }\r\n\r\n if (v[1] !== undefined) {\r\n n[1] = d + v[1];\r\n } else {\r\n n[1] = '';\r\n }\r\n\r\n return n.join('');\r\n }\r\n\r\n var Format = function(e, event) {\r\n var v = Value.call(e);\r\n if (! v) {\r\n return;\r\n }\r\n\r\n // Get decimal\r\n var n = FormatValue.call(this, v, event);\r\n var t = (n.length) - v.length;\r\n var index = Caret.call(e) + t;\r\n // Set value and update caret\r\n Value.call(e, n, index, true);\r\n }\r\n\r\n var Extract = function(v) {\r\n // Keep the raw value\r\n var current = ParseValue.call(this, v);\r\n if (current) {\r\n // Negative values\r\n if (current[0] === '-') {\r\n current[0] = '-0';\r\n }\r\n return parseFloat(current.join('.'));\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Caret getter and setter methods\r\n */\r\n var Caret = function(index, adjustNumeric) {\r\n if (index === undefined) {\r\n if (this.tagName == 'DIV') {\r\n var pos = 0;\r\n var s = window.getSelection();\r\n if (s) {\r\n if (s.rangeCount !== 0) {\r\n var r = s.getRangeAt(0);\r\n var p = r.cloneRange();\r\n p.selectNodeContents(this);\r\n p.setEnd(r.endContainer, r.endOffset);\r\n pos = p.toString().length;\r\n }\r\n }\r\n return pos;\r\n } else {\r\n return this.selectionStart;\r\n }\r\n } else {\r\n // Get the current value\r\n var n = Value.call(this);\r\n\r\n // Review the position\r\n if (adjustNumeric) {\r\n var p = null;\r\n for (var i = 0; i < n.length; i++) {\r\n if (n[i].match(/[\\-0-9]/g) || n[i] === '.' || n[i] === ',') {\r\n p = i;\r\n }\r\n }\r\n\r\n // If the string has no numbers\r\n if (p === null) {\r\n p = n.indexOf(' ');\r\n }\r\n\r\n if (index >= p) {\r\n index = p + 1;\r\n }\r\n }\r\n\r\n // Do not update caret\r\n if (index > n.length) {\r\n index = n.length;\r\n }\r\n\r\n if (index) {\r\n // Set caret\r\n if (this.tagName == 'DIV') {\r\n var s = window.getSelection();\r\n var r = document.createRange();\r\n\r\n if (this.childNodes[0]) {\r\n r.setStart(this.childNodes[0], index);\r\n s.removeAllRanges();\r\n s.addRange(r);\r\n }\r\n } else {\r\n this.selectionStart = index;\r\n this.selectionEnd = index;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Value getter and setter method\r\n */\r\n var Value = function(v, updateCaret, adjustNumeric) {\r\n if (this.tagName == 'DIV') {\r\n if (v === undefined) {\r\n var v = this.innerText;\r\n if (this.value && this.value.length > v.length) {\r\n v = this.value;\r\n }\r\n return v;\r\n } else {\r\n if (this.innerText !== v) {\r\n this.innerText = v;\r\n\r\n if (updateCaret) {\r\n Caret.call(this, updateCaret, adjustNumeric);\r\n }\r\n }\r\n }\r\n } else {\r\n if (v === undefined) {\r\n return this.value;\r\n } else {\r\n if (this.value !== v) {\r\n this.value = v;\r\n if (updateCaret) {\r\n Caret.call(this, updateCaret, adjustNumeric);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Labels\r\n var weekDaysFull = helpers_date.weekdays;\r\n var weekDays = helpers_date.weekdaysShort;\r\n var monthsFull = helpers_date.months;\r\n var months = helpers_date.monthsShort;\r\n\r\n var parser = {\r\n 'YEAR': function(v, s) {\r\n var y = ''+new Date().getFullYear();\r\n\r\n if (typeof(this.values[this.index]) === 'undefined') {\r\n this.values[this.index] = '';\r\n }\r\n if (parseInt(v) >= 0 && parseInt(v) <= 10) {\r\n if (this.values[this.index].length < s) {\r\n this.values[this.index] += v;\r\n }\r\n }\r\n if (this.values[this.index].length == s) {\r\n if (s == 2) {\r\n var y = y.substr(0,2) + this.values[this.index];\r\n } else if (s == 3) {\r\n var y = y.substr(0,1) + this.values[this.index];\r\n } else if (s == 4) {\r\n var y = this.values[this.index];\r\n }\r\n this.date[0] = y;\r\n this.index++;\r\n }\r\n },\r\n 'YYYY': function(v) {\r\n parser.YEAR.call(this, v, 4);\r\n },\r\n 'YYY': function(v) {\r\n parser.YEAR.call(this, v, 3);\r\n },\r\n 'YY': function(v) {\r\n parser.YEAR.call(this, v, 2);\r\n },\r\n 'FIND': function(v, a) {\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = '';\r\n }\r\n if (this.event && this.event.inputType && this.event.inputType.indexOf('delete') > -1) {\r\n this.values[this.index] += v;\r\n return;\r\n }\r\n var pos = 0;\r\n var count = 0;\r\n var value = (this.values[this.index] + v).toLowerCase();\r\n for (var i = 0; i < a.length; i++) {\r\n if (a[i].toLowerCase().indexOf(value) == 0) {\r\n pos = i;\r\n count++;\r\n }\r\n }\r\n if (count > 1) {\r\n this.values[this.index] += v;\r\n } else if (count == 1) {\r\n // Jump number of chars\r\n var t = (a[pos].length - this.values[this.index].length) - 1;\r\n this.position += t;\r\n\r\n this.values[this.index] = a[pos];\r\n this.index++;\r\n return pos;\r\n }\r\n },\r\n 'MMM': function(v) {\r\n var ret = parser.FIND.call(this, v, months);\r\n if (ret !== undefined) {\r\n this.date[1] = ret + 1;\r\n }\r\n },\r\n 'MON': function(v) {\r\n parser['MMM'].call(this, v);\r\n },\r\n 'MMMM': function(v) {\r\n var ret = parser.FIND.call(this, v, monthsFull);\r\n if (ret !== undefined) {\r\n this.date[1] = ret + 1;\r\n }\r\n },\r\n 'MONTH': function(v) {\r\n parser['MMMM'].call(this, v);\r\n },\r\n 'MMMMM': function(v) {\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = '';\r\n }\r\n var pos = 0;\r\n var count = 0;\r\n var value = (this.values[this.index] + v).toLowerCase();\r\n for (var i = 0; i < monthsFull.length; i++) {\r\n if (monthsFull[i][0].toLowerCase().indexOf(value) == 0) {\r\n this.values[this.index] = monthsFull[i][0];\r\n this.date[1] = i + 1;\r\n this.index++;\r\n break;\r\n }\r\n }\r\n },\r\n 'MM': function(v) {\r\n if (isBlank(this.values[this.index])) {\r\n if (parseInt(v) > 1 && parseInt(v) < 10) {\r\n this.date[1] = this.values[this.index] = '0' + v;\r\n this.index++;\r\n } else if (parseInt(v) < 2) {\r\n this.values[this.index] = v;\r\n }\r\n } else {\r\n if (this.values[this.index] == 1 && parseInt(v) < 3) {\r\n this.date[1] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] == 0 && parseInt(v) > 0 && parseInt(v) < 10) {\r\n this.date[1] = this.values[this.index] += v;\r\n this.index++;\r\n }\r\n }\r\n },\r\n 'M': function(v) {\r\n var test = false;\r\n if (parseInt(v) >= 0 && parseInt(v) < 10) {\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = v;\r\n if (v > 1) {\r\n this.date[1] = this.values[this.index];\r\n this.index++;\r\n }\r\n } else {\r\n if (this.values[this.index] == 1 && parseInt(v) < 3) {\r\n this.date[1] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] == 0 && parseInt(v) > 0) {\r\n this.date[1] = this.values[this.index] += v;\r\n this.index++;\r\n } else {\r\n var test = true;\r\n }\r\n }\r\n } else {\r\n var test = true;\r\n }\r\n\r\n // Re-test\r\n if (test == true) {\r\n var t = parseInt(this.values[this.index]);\r\n if (t > 0 && t < 12) {\r\n this.date[1] = this.values[this.index];\r\n this.index++;\r\n // Repeat the character\r\n this.position--;\r\n }\r\n }\r\n },\r\n 'D': function(v) {\r\n var test = false;\r\n if (parseInt(v) >= 0 && parseInt(v) < 10) {\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = v;\r\n if (parseInt(v) > 3) {\r\n this.date[2] = this.values[this.index];\r\n this.index++;\r\n }\r\n } else {\r\n if (this.values[this.index] == 3 && parseInt(v) < 2) {\r\n this.date[2] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] == 1 || this.values[this.index] == 2) {\r\n this.date[2] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] == 0 && parseInt(v) > 0) {\r\n this.date[2] = this.values[this.index] += v;\r\n this.index++;\r\n } else {\r\n var test = true;\r\n }\r\n }\r\n } else {\r\n var test = true;\r\n }\r\n\r\n // Re-test\r\n if (test == true) {\r\n var t = parseInt(this.values[this.index]);\r\n if (t > 0 && t < 32) {\r\n this.date[2] = this.values[this.index];\r\n this.index++;\r\n // Repeat the character\r\n this.position--;\r\n }\r\n }\r\n },\r\n 'DD': function(v) {\r\n if (isBlank(this.values[this.index])) {\r\n if (parseInt(v) > 3 && parseInt(v) < 10) {\r\n this.date[2] = this.values[this.index] = '0' + v;\r\n this.index++;\r\n } else if (parseInt(v) < 10) {\r\n this.values[this.index] = v;\r\n }\r\n } else {\r\n if (this.values[this.index] == 3 && parseInt(v) < 2) {\r\n this.date[2] = this.values[this.index] += v;\r\n this.index++;\r\n } else if ((this.values[this.index] == 1 || this.values[this.index] == 2) && parseInt(v) < 10) {\r\n this.date[2] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] == 0 && parseInt(v) > 0 && parseInt(v) < 10) {\r\n this.date[2] = this.values[this.index] += v;\r\n this.index++;\r\n }\r\n }\r\n },\r\n 'DDD': function(v) {\r\n parser.FIND.call(this, v, weekDays);\r\n },\r\n 'DY': function(v) {\r\n parser['DDD'].call(this, v);\r\n },\r\n 'DDDD': function(v) {\r\n parser.FIND.call(this, v, weekDaysFull);\r\n },\r\n 'DAY': function(v) {\r\n parser['DDDD'].call(this, v);\r\n },\r\n 'HH12': function(v, two) {\r\n if (isBlank(this.values[this.index])) {\r\n if (parseInt(v) > 1 && parseInt(v) < 10) {\r\n if (two) {\r\n v = 0 + v;\r\n }\r\n this.date[3] = this.values[this.index] = v;\r\n this.index++;\r\n } else if (parseInt(v) < 10) {\r\n this.values[this.index] = v;\r\n }\r\n } else {\r\n if (this.values[this.index] == 1 && parseInt(v) < 3) {\r\n this.date[3] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] < 1 && parseInt(v) < 10) {\r\n this.date[3] = this.values[this.index] += v;\r\n this.index++;\r\n }\r\n }\r\n },\r\n 'HH24': function(v, two) {\r\n if (parseInt(v) >= 0 && parseInt(v) < 10) {\r\n if (this.values[this.index] == null || this.values[this.index] == '') {\r\n if (parseInt(v) > 2 && parseInt(v) < 10) {\r\n if (two) {\r\n v = 0 + v;\r\n }\r\n this.date[3] = this.values[this.index] = v;\r\n this.index++;\r\n } else if (parseInt(v) < 10) {\r\n this.values[this.index] = v;\r\n }\r\n } else {\r\n if (this.values[this.index] == 2 && parseInt(v) < 4) {\r\n if (! two && this.values[this.index] === '0') {\r\n this.values[this.index] = '';\r\n }\r\n this.date[3] = this.values[this.index] += v;\r\n this.index++;\r\n } else if (this.values[this.index] < 2 && parseInt(v) < 10) {\r\n if (! two && this.values[this.index] === '0') {\r\n this.values[this.index] = '';\r\n }\r\n this.date[3] = this.values[this.index] += v;\r\n this.index++;\r\n }\r\n }\r\n }\r\n },\r\n 'HH': function(v) {\r\n parser['HH24'].call(this, v, 1);\r\n },\r\n 'H': function(v) {\r\n parser['HH24'].call(this, v, 0);\r\n },\r\n '\\\\[H\\\\]': function(v) {\r\n if (this.values[this.index] == undefined) {\r\n this.values[this.index] = '';\r\n }\r\n if (v.match(/[0-9]/g)) {\r\n this.date[3] = this.values[this.index] += v;\r\n } else {\r\n if (this.values[this.index].match(/[0-9]/g)) {\r\n this.date[3] = this.values[this.index];\r\n this.index++;\r\n // Repeat the character\r\n this.position--;\r\n }\r\n }\r\n },\r\n 'N60': function(v, i) {\r\n if (this.values[this.index] == null || this.values[this.index] == '') {\r\n if (parseInt(v) > 5 && parseInt(v) < 10) {\r\n this.date[i] = this.values[this.index] = '0' + v;\r\n this.index++;\r\n } else if (parseInt(v) < 10) {\r\n this.values[this.index] = v;\r\n }\r\n } else {\r\n if (parseInt(v) < 10) {\r\n this.date[i] = this.values[this.index] += v;\r\n this.index++;\r\n }\r\n }\r\n },\r\n 'MI': function(v) {\r\n parser.N60.call(this, v, 4);\r\n },\r\n 'SS': function(v) {\r\n parser.N60.call(this, v, 5);\r\n },\r\n 'AM/PM': function(v) {\r\n if (typeof(this.values[this.index]) === 'undefined') {\r\n this.values[this.index] = '';\r\n }\r\n\r\n if (this.values[this.index] === '') {\r\n if (v.match(/a/i) && this.date[3] < 13) {\r\n this.values[this.index] += 'A';\r\n } else if (v.match(/p/i)) {\r\n this.values[this.index] += 'P';\r\n }\r\n } else if (this.values[this.index] === 'A' || this.values[this.index] === 'P') {\r\n this.values[this.index] += 'M';\r\n this.index++;\r\n }\r\n },\r\n 'WD': function(v) {\r\n if (typeof(this.values[this.index]) === 'undefined') {\r\n this.values[this.index] = '';\r\n }\r\n if (parseInt(v) >= 0 && parseInt(v) < 7) {\r\n this.values[this.index] = v;\r\n }\r\n if (this.values[this.index].length == 1) {\r\n this.index++;\r\n }\r\n },\r\n '0{1}(.{1}0+)?': function(v) {\r\n // Get decimal\r\n var decimal = getDecimal.call(this);\r\n // Negative number\r\n var neg = false;\r\n // Create if is blank\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = '';\r\n } else {\r\n if (this.values[this.index] == '-') {\r\n neg = true;\r\n }\r\n }\r\n var current = ParseValue.call(this, this.values[this.index], decimal);\r\n if (current) {\r\n this.values[this.index] = current.join(decimal);\r\n }\r\n // New entry\r\n if (parseInt(v) >= 0 && parseInt(v) < 10) {\r\n // Replace the zero for a number\r\n if (this.values[this.index] == '0' && v > 0) {\r\n this.values[this.index] = '';\r\n } else if (this.values[this.index] == '-0' && v > 0) {\r\n this.values[this.index] = '-';\r\n }\r\n // Don't add up zeros because does not mean anything here\r\n if ((this.values[this.index] != '0' && this.values[this.index] != '-0') || v == decimal) {\r\n this.values[this.index] += v;\r\n }\r\n } else if (decimal && v == decimal) {\r\n if (this.values[this.index].indexOf(decimal) == -1) {\r\n if (! this.values[this.index]) {\r\n this.values[this.index] = '0';\r\n }\r\n this.values[this.index] += v;\r\n }\r\n } else if (v == '-') {\r\n // Negative signed\r\n neg = true;\r\n }\r\n\r\n if (neg === true && this.values[this.index][0] !== '-') {\r\n this.values[this.index] = '-' + this.values[this.index];\r\n }\r\n },\r\n '0{1}(.{1}0+)?E{1}\\\\+0+': function(v) {\r\n parser['0{1}(.{1}0+)?'].call(this, v);\r\n },\r\n '0{1}(.{1}0+)?%': function(v) {\r\n parser['0{1}(.{1}0+)?'].call(this, v);\r\n\r\n if (this.values[this.index].match(/[\\-0-9]/g)) {\r\n if (this.values[this.index] && this.values[this.index].indexOf('%') == -1) {\r\n this.values[this.index] += '%';\r\n }\r\n } else {\r\n this.values[this.index] = '';\r\n }\r\n },\r\n '#(.{1})##0?(.{1}0+)?( ?;(.*)?)?': function(v) {\r\n // Parse number\r\n parser['0{1}(.{1}0+)?'].call(this, v);\r\n // Get decimal\r\n var decimal = getDecimal.call(this);\r\n // Get separator\r\n var separator = this.tokens[this.index].substr(1,1);\r\n // Negative\r\n var negative = this.values[this.index][0] === '-' ? true : false;\r\n // Current value\r\n var current = ParseValue.call(this, this.values[this.index], decimal);\r\n\r\n // Get main and decimal parts\r\n if (current !== '') {\r\n // Format number\r\n var n = current[0].match(/[0-9]/g);\r\n if (n) {\r\n // Format\r\n n = n.join('');\r\n var t = [];\r\n var s = 0;\r\n for (var j = n.length - 1; j >= 0 ; j--) {\r\n t.push(n[j]);\r\n s++;\r\n if (! (s % 3)) {\r\n t.push(separator);\r\n }\r\n }\r\n t = t.reverse();\r\n current[0] = t.join('');\r\n if (current[0].substr(0,1) == separator) {\r\n current[0] = current[0].substr(1);\r\n }\r\n } else {\r\n current[0] = '';\r\n }\r\n\r\n // Value\r\n this.values[this.index] = current.join(decimal);\r\n\r\n // Negative\r\n if (negative) {\r\n this.values[this.index] = '-' + this.values[this.index];\r\n }\r\n }\r\n },\r\n '0': function(v) {\r\n if (v.match(/[0-9]/g)) {\r\n this.values[this.index] = v;\r\n this.index++;\r\n }\r\n },\r\n '[0-9a-zA-Z$]+': function(v) {\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = '';\r\n }\r\n var t = this.tokens[this.index];\r\n var s = this.values[this.index];\r\n var i = s.length;\r\n\r\n if (t[i] == v) {\r\n this.values[this.index] += v;\r\n\r\n if (this.values[this.index] == t) {\r\n this.index++;\r\n }\r\n } else {\r\n this.values[this.index] = t;\r\n this.index++;\r\n\r\n if (v.match(/[\\-0-9]/g)) {\r\n // Repeat the character\r\n this.position--;\r\n }\r\n }\r\n },\r\n 'A': function(v) {\r\n if (v.match(/[a-zA-Z]/gi)) {\r\n this.values[this.index] = v;\r\n this.index++;\r\n }\r\n },\r\n '.': function(v) {\r\n parser['[0-9a-zA-Z$]+'].call(this, v);\r\n },\r\n '@': function(v) {\r\n if (isBlank(this.values[this.index])) {\r\n this.values[this.index] = '';\r\n }\r\n this.values[this.index] += v;\r\n }\r\n }\r\n\r\n /**\r\n * Get the tokens in the mask string\r\n */\r\n var getTokens = function(str) {\r\n if (this.type == 'general') {\r\n var t = [].concat(tokens.general);\r\n } else {\r\n var t = [].concat(tokens.currency, tokens.datetime, tokens.percentage, tokens.scientific, tokens.numeric, tokens.text, tokens.general);\r\n }\r\n // Expression to extract all tokens from the string\r\n var e = new RegExp(t.join('|'), 'gi');\r\n // Extract\r\n return str.match(e);\r\n }\r\n\r\n /**\r\n * Get the method of one given token\r\n */\r\n var getMethod = function(str) {\r\n if (! this.type) {\r\n var types = Object.keys(tokens);\r\n } else if (this.type == 'text') {\r\n var types = [ 'text' ];\r\n } else if (this.type == 'general') {\r\n var types = [ 'general' ];\r\n } else if (this.type == 'datetime') {\r\n var types = [ 'numeric', 'datetime', 'general' ];\r\n } else {\r\n var types = [ 'currency', 'percentage', 'scientific', 'numeric', 'general' ];\r\n }\r\n\r\n // Found\r\n for (var i = 0; i < types.length; i++) {\r\n var type = types[i];\r\n for (var j = 0; j < tokens[type].length; j++) {\r\n var e = new RegExp(tokens[type][j], 'gi');\r\n var r = str.match(e);\r\n if (r) {\r\n return { type: type, method: tokens[type][j] }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Identify each method for each token\r\n */\r\n var getMethods = function(t) {\r\n var result = [];\r\n for (var i = 0; i < t.length; i++) {\r\n var m = getMethod.call(this, t[i]);\r\n if (m) {\r\n result.push(m.method);\r\n } else {\r\n result.push(null);\r\n }\r\n }\r\n\r\n // Compatibility with excel\r\n for (var i = 0; i < result.length; i++) {\r\n if (result[i] == 'MM') {\r\n // Not a month, correct to minutes\r\n if (result[i-1] && result[i-1].indexOf('H') >= 0) {\r\n result[i] = 'MI';\r\n } else if (result[i-2] && result[i-2].indexOf('H') >= 0) {\r\n result[i] = 'MI';\r\n } else if (result[i+1] && result[i+1].indexOf('S') >= 0) {\r\n result[i] = 'MI';\r\n } else if (result[i+2] && result[i+2].indexOf('S') >= 0) {\r\n result[i] = 'MI';\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get the type for one given token\r\n */\r\n var getType = function(str) {\r\n var m = getMethod.call(this, str);\r\n if (m) {\r\n var type = m.type;\r\n }\r\n\r\n if (type) {\r\n var numeric = 0;\r\n // Make sure the correct type\r\n var t = getTokens.call(this, str);\r\n for (var i = 0; i < t.length; i++) {\r\n m = getMethod.call(this, t[i]);\r\n if (m && isNumeric(m.type)) {\r\n numeric++;\r\n }\r\n }\r\n if (numeric > 1) {\r\n type = 'general';\r\n }\r\n }\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * Parse character per character using the detected tokens in the mask\r\n */\r\n var parse = function() {\r\n // Parser method for this position\r\n if (typeof(parser[this.methods[this.index]]) == 'function') {\r\n parser[this.methods[this.index]].call(this, this.value[this.position]);\r\n this.position++;\r\n } else {\r\n this.values[this.index] = this.tokens[this.index];\r\n this.index++;\r\n }\r\n }\r\n\r\n var toPlainString = function(num) {\r\n return (''+ +num).replace(/(-?)(\\d*)\\.?(\\d*)e([+-]\\d+)/,\r\n function(a,b,c,d,e) {\r\n return e < 0\r\n ? b + '0.' + Array(1-e-c.length).join(0) + c + d\r\n : b + c + d + Array(e-d.length+1).join(0);\r\n });\r\n }\r\n\r\n /**\r\n * Mask function\r\n * @param {mixed|string} JS input or a string to be parsed\r\n * @param {object|string} When the first param is a string, the second is the mask or object with the mask options\r\n */\r\n var obj = function(e, config, returnObject) {\r\n // Options\r\n var r = null;\r\n var t = null;\r\n var o = {\r\n // Element\r\n input: null,\r\n // Current value\r\n value: null,\r\n // Mask options\r\n options: {},\r\n // New values for each token found\r\n values: [],\r\n // Token position\r\n index: 0,\r\n // Character position\r\n position: 0,\r\n // Date raw values\r\n date: [0,0,0,0,0,0],\r\n // Raw number for the numeric values\r\n number: 0,\r\n }\r\n\r\n // This is a JavaScript Event\r\n if (typeof(e) == 'object') {\r\n // Element\r\n o.input = e.target;\r\n // Current value\r\n o.value = Value.call(e.target);\r\n // Current caret position\r\n o.caret = Caret.call(e.target);\r\n // Mask\r\n if (t = e.target.getAttribute('data-mask')) {\r\n o.mask = t;\r\n }\r\n // Type\r\n if (t = e.target.getAttribute('data-type')) {\r\n o.type = t;\r\n }\r\n // Options\r\n if (e.target.mask) {\r\n if (e.target.mask.options) {\r\n o.options = e.target.mask.options;\r\n }\r\n if (e.target.mask.locale) {\r\n o.locale = e.target.mask.locale;\r\n }\r\n } else {\r\n // Locale\r\n if (t = e.target.getAttribute('data-locale')) {\r\n o.locale = t;\r\n if (o.mask) {\r\n o.options.style = o.mask;\r\n }\r\n }\r\n }\r\n // Extra configuration\r\n if (e.target.attributes && e.target.attributes.length) {\r\n for (var i = 0; i < e.target.attributes.length; i++) {\r\n var k = e.target.attributes[i].name;\r\n var v = e.target.attributes[i].value;\r\n if (k.substr(0,4) == 'data') {\r\n o.options[k.substr(5)] = v;\r\n }\r\n }\r\n }\r\n } else {\r\n // Options\r\n if (typeof(config) == 'string') {\r\n // Mask\r\n o.mask = config;\r\n } else {\r\n // Mask\r\n var k = Object.keys(config);\r\n for (var i = 0; i < k.length; i++) {\r\n o[k[i]] = config[k[i]];\r\n }\r\n }\r\n\r\n if (typeof(e) === 'number') {\r\n // Get decimal\r\n getDecimal.call(o, o.mask);\r\n // Replace to the correct decimal\r\n e = (''+e).replace('.', o.options.decimal);\r\n }\r\n\r\n // Current\r\n o.value = e;\r\n\r\n if (o.input) {\r\n // Value\r\n Value.call(o.input, e);\r\n // Focus\r\n helpers.focus(o.input);\r\n // Caret\r\n o.caret = Caret.call(o.input);\r\n }\r\n }\r\n\r\n // Mask detected start the process\r\n if (! isFormula(o.value) && (o.mask || o.locale)) {\r\n // Compatibility fixes\r\n if (o.mask) {\r\n // Remove []\r\n o.mask = o.mask.replace(new RegExp(/\\[h]/),'|h|');\r\n o.mask = o.mask.replace(new RegExp(/\\[.*?\\]/),'');\r\n o.mask = o.mask.replace(new RegExp(/\\|h\\|/),'[h]');\r\n if (o.mask.indexOf(';') !== -1) {\r\n var t = o.mask.split(';');\r\n o.mask = t[0];\r\n }\r\n // Excel mask TODO: Improve\r\n if (o.mask.indexOf('##') !== -1) {\r\n var d = o.mask.split(';');\r\n if (d[0]) {\r\n if (typeof(e) == 'object') {\r\n d[0] = d[0].replace(new RegExp(/_\\)/g), '');\r\n d[0] = d[0].replace(new RegExp(/_\\(/g), '');\r\n }\r\n d[0] = d[0].replace('*', '\\t');\r\n d[0] = d[0].replace(new RegExp(/_-/g), '');\r\n d[0] = d[0].replace(new RegExp(/_/g), '');\r\n d[0] = d[0].replace(new RegExp(/\"/g), '');\r\n d[0] = d[0].replace('##0.###','##0.000');\r\n d[0] = d[0].replace('##0.##','##0.00');\r\n d[0] = d[0].replace('##0.#','##0.0');\r\n d[0] = d[0].replace('##0,###','##0,000');\r\n d[0] = d[0].replace('##0,##','##0,00');\r\n d[0] = d[0].replace('##0,#','##0,0');\r\n }\r\n o.mask = d[0];\r\n }\r\n // Remove back slashes\r\n if (o.mask.indexOf('\\\\') !== -1) {\r\n var d = o.mask.split(';');\r\n d[0] = d[0].replace(new RegExp(/\\\\/g), '');\r\n o.mask = d[0];\r\n }\r\n // Get type\r\n if (! o.type) {\r\n o.type = getType.call(o, o.mask);\r\n }\r\n // Get tokens\r\n o.tokens = getTokens.call(o, o.mask);\r\n }\r\n\r\n // On new input\r\n if (typeof(e) !== 'object' || ! e.inputType || ! e.inputType.indexOf('insert') || ! e.inputType.indexOf('delete')) {\r\n // Start transformation\r\n if (o.locale) {\r\n if (o.input) {\r\n Format.call(o, o.input, e);\r\n } else {\r\n var newValue = FormatValue.call(o, o.value);\r\n }\r\n } else {\r\n // Get tokens\r\n o.methods = getMethods.call(o, o.tokens);\r\n o.event = e;\r\n\r\n // Go through all tokes\r\n while (o.position < o.value.length && typeof(o.tokens[o.index]) !== 'undefined') {\r\n // Get the appropriate parser\r\n parse.call(o);\r\n }\r\n\r\n // New value\r\n var newValue = o.values.join('');\r\n\r\n // Add tokens to the end of string only if string is not empty\r\n if (isNumeric(o.type) && newValue !== '') {\r\n // Complement things in the end of the mask\r\n while (typeof(o.tokens[o.index]) !== 'undefined') {\r\n var t = getMethod.call(o, o.tokens[o.index]);\r\n if (t && t.type == 'general') {\r\n o.values[o.index] = o.tokens[o.index];\r\n }\r\n o.index++;\r\n }\r\n\r\n var adjustNumeric = true;\r\n } else {\r\n var adjustNumeric = false;\r\n }\r\n\r\n // New value\r\n newValue = o.values.join('');\r\n\r\n // Reset value\r\n if (o.input) {\r\n t = newValue.length - o.value.length;\r\n if (t > 0) {\r\n var caret = o.caret + t;\r\n } else {\r\n var caret = o.caret;\r\n }\r\n Value.call(o.input, newValue, caret, adjustNumeric);\r\n }\r\n }\r\n }\r\n\r\n // Update raw data\r\n if (o.input) {\r\n var label = null;\r\n if (isNumeric(o.type)) {\r\n let v = Value.call(o.input);\r\n // Extract the number\r\n o.number = Extract.call(o, v);\r\n // Keep the raw data as a property of the tag\r\n if (o.type == 'percentage' && (''+v).indexOf('%') !== -1) {\r\n label = obj.adjustPrecision(o.number / 100);\r\n } else {\r\n label = o.number;\r\n }\r\n } else if (o.type == 'datetime') {\r\n label = getDate.call(o);\r\n\r\n if (o.date[0] && o.date[1] && o.date[2]) {\r\n o.input.setAttribute('data-completed', true);\r\n }\r\n }\r\n\r\n if (label) {\r\n o.input.setAttribute('data-value', label);\r\n }\r\n }\r\n\r\n if (newValue !== undefined) {\r\n if (returnObject) {\r\n return o;\r\n } else {\r\n return newValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n obj.adjustPrecision = function(num) {\r\n if (typeof num === 'number' && !Number.isInteger(num)) {\r\n const v = num.toString().split('.');\r\n\r\n if (v[1] && v[1].length > 10) {\r\n let t0 = 0;\r\n const t1 = v[1][v[1].length - 2];\r\n\r\n if (t1 == 0 || t1 == 9) {\r\n for (let i = v[1].length - 2; i > 0; i--) {\r\n if (t0 >= 0 && v[1][i] == t1) {\r\n t0++;\r\n if (t0 > 6) {\r\n break;\r\n }\r\n } else {\r\n t0 = 0;\r\n break;\r\n }\r\n }\r\n\r\n if (t0) {\r\n return parseFloat(parseFloat(num).toFixed(v[1].length - 1));\r\n }\r\n }\r\n }\r\n }\r\n\r\n return num;\r\n }\r\n\r\n // Get the type of the mask\r\n obj.getType = getType;\r\n\r\n // Extract the tokens from a mask\r\n obj.prepare = function(str, o) {\r\n if (! o) {\r\n o = {};\r\n }\r\n return getTokens.call(o, str);\r\n }\r\n\r\n /**\r\n * Apply the mask to a element (legacy)\r\n */\r\n obj.apply = function(e) {\r\n var v = Value.call(e.target);\r\n if (e.key.length == 1) {\r\n v += e.key;\r\n }\r\n Value.call(e.target, obj(v, e.target.getAttribute('data-mask')));\r\n }\r\n\r\n /**\r\n * Legacy support\r\n */\r\n obj.run = function(value, mask, decimal) {\r\n return obj(value, { mask: mask, decimal: decimal });\r\n }\r\n\r\n /**\r\n * Extract number from masked string\r\n */\r\n obj.extract = function(v, options, returnObject) {\r\n if (isBlank(v)) {\r\n return v;\r\n }\r\n if (typeof(options) != 'object') {\r\n return v;\r\n } else {\r\n options = Object.assign({}, options);\r\n\r\n if (! options.options) {\r\n options.options = {};\r\n }\r\n }\r\n\r\n // Compatibility\r\n if (! options.mask && options.format) {\r\n options.mask = options.format;\r\n }\r\n\r\n // Remove []\r\n if (options.mask) {\r\n if (options.mask.indexOf(';') !== -1) {\r\n var t = options.mask.split(';');\r\n options.mask = t[0];\r\n }\r\n options.mask = options.mask.replace(new RegExp(/\\[h]/),'|h|');\r\n options.mask = options.mask.replace(new RegExp(/\\[.*?\\]/),'');\r\n options.mask = options.mask.replace(new RegExp(/\\|h\\|/),'[h]');\r\n }\r\n\r\n // Get decimal\r\n getDecimal.call(options, options.mask);\r\n\r\n var type = null;\r\n var value = null;\r\n\r\n if (options.type == 'percent' || options.options.style == 'percent') {\r\n type = 'percentage';\r\n } else if (options.mask) {\r\n type = getType.call(options, options.mask);\r\n }\r\n\r\n if (type === 'general') {\r\n var o = obj(v, options, true);\r\n\r\n value = v;\r\n } else if (type === 'datetime') {\r\n if (v instanceof Date) {\r\n v = obj.getDateString(v, options.mask);\r\n }\r\n\r\n var o = obj(v, options, true);\r\n\r\n if (helpers.isNumeric(v)) {\r\n value = v;\r\n } else {\r\n value = extractDate.call(o);\r\n }\r\n } else if (type === 'scientific') {\r\n value = v;\r\n if (typeof(v) === 'string') {\r\n value = Number(value);\r\n }\r\n var o = options;\r\n } else {\r\n value = Extract.call(options, v);\r\n // Percentage\r\n if (type === 'percentage' && (''+v).indexOf('%') !== -1) {\r\n value /= 100;\r\n }\r\n var o = options;\r\n }\r\n\r\n o.value = value;\r\n\r\n if (! o.type && type) {\r\n o.type = type;\r\n }\r\n\r\n if (returnObject) {\r\n return o;\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n /**\r\n * Render\r\n */\r\n obj.render = function(value, options, fullMask) {\r\n if (isBlank(value)) {\r\n return value;\r\n }\r\n\r\n if (typeof(options) != 'object') {\r\n return value;\r\n } else {\r\n options = Object.assign({}, options);\r\n\r\n if (! options.options) {\r\n options.options = {};\r\n }\r\n }\r\n\r\n // Compatibility\r\n if (! options.mask && options.format) {\r\n options.mask = options.format;\r\n }\r\n\r\n // Remove []\r\n if (options.mask) {\r\n if (options.mask.indexOf(';') !== -1) {\r\n var t = options.mask.split(';');\r\n if (! fullMask) {\r\n t[0] = t[0].replace(new RegExp(/_\\)/g), '');\r\n t[0] = t[0].replace(new RegExp(/_\\(/g), '');\r\n }\r\n options.mask = t[0];\r\n }\r\n options.mask = options.mask.replace(new RegExp(/\\[h]/),'|h|');\r\n options.mask = options.mask.replace(new RegExp(/\\[.*?\\]/),'');\r\n options.mask = options.mask.replace(new RegExp(/\\|h\\|/),'[h]');\r\n }\r\n\r\n var type = null;\r\n if (options.type == 'percent' || options.options.style == 'percent') {\r\n type = 'percentage';\r\n } else if (options.mask) {\r\n type = getType.call(options, options.mask);\r\n } else if (value instanceof Date) {\r\n type = 'datetime';\r\n }\r\n\r\n // Fill with blanks\r\n var fillWithBlanks = false;\r\n\r\n if (type =='datetime' || options.type == 'calendar') {\r\n var t = obj.getDateString(value, options.mask);\r\n if (t) {\r\n value = t;\r\n }\r\n if (options.mask && fullMask) {\r\n fillWithBlanks = true;\r\n }\r\n } else {\r\n // Parse number\r\n if (typeof(value) === 'string' && jSuites.isNumeric(value)) {\r\n value = Number(value);\r\n }\r\n // Percentage\r\n if (type === 'percentage') {\r\n value = obj.adjustPrecision(value*100);\r\n }\r\n\r\n // Number of decimal places\r\n if (typeof(value) === 'number') {\r\n var t = null;\r\n if (options.mask && fullMask) {\r\n var d = getDecimal.call(options, options.mask);\r\n if (type === 'scientific') {\r\n if (options.mask.indexOf(d) !== -1) {\r\n let exp = options.mask.split('E');\r\n exp = exp[0].split(d);\r\n exp = ('' + exp[1].match(/[0-9]+/g))\r\n exp = exp.length;\r\n t = value.toExponential(exp);\r\n } else {\r\n t = value.toExponential(0);\r\n }\r\n } else {\r\n if (options.mask.indexOf(d) !== -1) {\r\n d = options.mask.split(d);\r\n d = (''+d[1].match(/[0-9]+/g))\r\n d = d.length;\r\n t = value.toFixed(d);\r\n let n = value.toString().split('.');\r\n let fraction = n[1];\r\n if (fraction && fraction.length > d && fraction[fraction.length-1] === '5') {\r\n t = parseFloat(n[0] + '.' + fraction + '1').toFixed(d);\r\n }\r\n } else {\r\n t = value.toFixed(0);\r\n }\r\n\r\n // Handle scientific notation\r\n if ((''+t).indexOf('e') !== -1) {\r\n t = toPlainString(t);\r\n }\r\n }\r\n } else if (options.locale && fullMask) {\r\n // Append zeros\r\n var d = (''+value).split('.');\r\n if (options.options) {\r\n if (typeof(d[1]) === 'undefined') {\r\n d[1] = '';\r\n }\r\n var len = d[1].length;\r\n if (options.options.minimumFractionDigits > len) {\r\n for (var i = 0; i < options.options.minimumFractionDigits - len; i++) {\r\n d[1] += '0';\r\n }\r\n }\r\n }\r\n if (! d[1].length) {\r\n t = d[0]\r\n } else {\r\n t = d.join('.');\r\n }\r\n var len = d[1].length;\r\n if (options.options && options.options.maximumFractionDigits < len) {\r\n t = parseFloat(t).toFixed(options.options.maximumFractionDigits);\r\n }\r\n } else {\r\n t = toPlainString(value);\r\n }\r\n\r\n if (t !== null) {\r\n value = t;\r\n // Get decimal\r\n getDecimal.call(options, options.mask);\r\n // Replace to the correct decimal\r\n if (options.options.decimal) {\r\n value = value.replace('.', options.options.decimal);\r\n }\r\n }\r\n } else {\r\n if (options.mask && fullMask) {\r\n fillWithBlanks = true;\r\n }\r\n }\r\n }\r\n\r\n if (fillWithBlanks) {\r\n var s = options.mask.length - value.length;\r\n if (s > 0) {\r\n for (var i = 0; i < s; i++) {\r\n value += ' ';\r\n }\r\n }\r\n }\r\n\r\n if (type === 'scientific') {\r\n if (! fullMask) {\r\n value = toPlainString(value);\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n value = obj(value, options);\r\n\r\n // Numeric mask, number of zeros\r\n if (fullMask && type === 'numeric') {\r\n var maskZeros = options.mask.match(new RegExp(/^[0]+$/gm));\r\n if (maskZeros && maskZeros.length === 1) {\r\n var maskLength = maskZeros[0].length;\r\n if (maskLength > 3) {\r\n value = '' + value;\r\n while (value.length < maskLength) {\r\n value = '0' + value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n obj.set = function(e, m) {\r\n if (m) {\r\n e.setAttribute('data-mask', m);\r\n // Reset the value\r\n var event = new Event('input', {\r\n bubbles: true,\r\n cancelable: true,\r\n });\r\n e.dispatchEvent(event);\r\n }\r\n }\r\n\r\n // Helper to extract date from a string\r\n obj.extractDateFromString = function (date, format) {\r\n var o = obj(date, { mask: format }, true);\r\n\r\n // Check if in format Excel (Need difference with format date or type detected is numeric)\r\n if (date > 0 && Number(date) == date && (o.values.join(\"\") !== o.value || o.type == \"numeric\")) {\r\n var d = new Date(Math.round((date - 25569) * 86400 * 1000));\r\n return d.getFullYear() + \"-\" + helpers.two(d.getMonth()) + \"-\" + helpers.two(d.getDate()) + ' 00:00:00';\r\n }\r\n\r\n var complete = false;\r\n\r\n if (o.values && o.values.length === o.tokens.length && o.values[o.values.length - 1].length >= o.tokens[o.tokens.length - 1].length) {\r\n complete = true;\r\n }\r\n\r\n if (o.date[0] && o.date[1] && (o.date[2] || complete)) {\r\n if (!o.date[2]) {\r\n o.date[2] = 1;\r\n }\r\n\r\n return o.date[0] + '-' + helpers.two(o.date[1]) + '-' + helpers.two(o.date[2]) + ' ' + helpers.two(o.date[3]) + ':' + helpers.two(o.date[4]) + ':' + helpers.two(o.date[5]);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n // Helper to convert date into string\r\n obj.getDateString = function (value, options) {\r\n if (!options) {\r\n var options = {};\r\n }\r\n\r\n // Labels\r\n if (options && typeof (options) == 'object') {\r\n if (options.format) {\r\n var format = options.format;\r\n } else if (options.mask) {\r\n var format = options.mask;\r\n }\r\n } else {\r\n var format = options;\r\n }\r\n\r\n if (!format) {\r\n format = 'YYYY-MM-DD';\r\n }\r\n\r\n // Convert to number of hours\r\n if (format.indexOf('[h]') >= 0) {\r\n var result = 0;\r\n if (value && helpers.isNumeric(value)) {\r\n result = parseFloat(24 * Number(value));\r\n if (format.indexOf('mm') >= 0) {\r\n var h = ('' + result).split('.');\r\n if (h[1]) {\r\n var d = 60 * parseFloat('0.' + h[1])\r\n d = parseFloat(d.toFixed(2));\r\n } else {\r\n var d = 0;\r\n }\r\n result = parseInt(h[0]) + ':' + helpers.two(d);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // Date instance\r\n if (value instanceof Date) {\r\n value = helpers_date.now(value);\r\n } else if (value && helpers.isNumeric(value)) {\r\n value = helpers_date.numToDate(value);\r\n }\r\n\r\n // Tokens\r\n var tokens = ['DAY', 'WD', 'DDDD', 'DDD', 'DD', 'D', 'Q', 'HH24', 'HH12', 'HH', 'H', 'AM/PM', 'MI', 'SS', 'MS', 'YYYY', 'YYY', 'YY', 'Y', 'MONTH', 'MON', 'MMMMM', 'MMMM', 'MMM', 'MM', 'M', '.'];\r\n\r\n // Expression to extract all tokens from the string\r\n var e = new RegExp(tokens.join('|'), 'gi');\r\n // Extract\r\n var t = format.match(e);\r\n\r\n // Compatibility with excel\r\n for (var i = 0; i < t.length; i++) {\r\n if (t[i].toUpperCase() == 'MM') {\r\n // Not a month, correct to minutes\r\n if (t[i - 1] && t[i - 1].toUpperCase().indexOf('H') >= 0) {\r\n t[i] = 'mi';\r\n } else if (t[i - 2] && t[i - 2].toUpperCase().indexOf('H') >= 0) {\r\n t[i] = 'mi';\r\n } else if (t[i + 1] && t[i + 1].toUpperCase().indexOf('S') >= 0) {\r\n t[i] = 'mi';\r\n } else if (t[i + 2] && t[i + 2].toUpperCase().indexOf('S') >= 0) {\r\n t[i] = 'mi';\r\n }\r\n }\r\n }\r\n\r\n // Object\r\n var o = {\r\n tokens: t\r\n }\r\n\r\n // Value\r\n if (value) {\r\n var d = '' + value;\r\n var splitStr = (d.indexOf('T') !== -1) ? 'T' : ' ';\r\n d = d.split(splitStr);\r\n\r\n var h = 0;\r\n var m = 0;\r\n var s = 0;\r\n\r\n if (d[1]) {\r\n h = d[1].split(':');\r\n m = h[1] ? h[1] : 0;\r\n s = h[2] ? h[2] : 0;\r\n h = h[0] ? h[0] : 0;\r\n }\r\n\r\n d = d[0].split('-');\r\n\r\n let day = new Date(d[0], d[1], 0).getDate();\r\n\r\n if (d[0] && d[1] && d[2] && d[0] > 0 && d[1] > 0 && d[1] < 13 && d[2] > 0 && d[2] <= day) {\r\n\r\n // Data\r\n o.data = [d[0], d[1], d[2], h, m, s];\r\n\r\n // Value\r\n o.value = [];\r\n\r\n // Calendar instance\r\n var calendar = new Date(o.data[0], o.data[1] - 1, o.data[2], o.data[3], o.data[4], o.data[5]);\r\n\r\n // Get method\r\n var get = function (i) {\r\n // Token\r\n var t = this.tokens[i];\r\n // Case token\r\n var s = t.toUpperCase();\r\n var v = null;\r\n\r\n if (s === 'YYYY') {\r\n v = this.data[0];\r\n } else if (s === 'YYY') {\r\n v = this.data[0].substring(1, 4);\r\n } else if (s === 'YY') {\r\n v = this.data[0].substring(2, 4);\r\n } else if (s === 'Y') {\r\n v = this.data[0].substring(3, 4);\r\n } else if (t === 'MON') {\r\n v = helpers_date.months[calendar.getMonth()].substr(0, 3).toUpperCase();\r\n } else if (t === 'mon') {\r\n v = helpers_date.months[calendar.getMonth()].substr(0, 3).toLowerCase();\r\n } else if (t === 'MONTH') {\r\n v = helpers_date.months[calendar.getMonth()].toUpperCase();\r\n } else if (t === 'month') {\r\n v = helpers_date.months[calendar.getMonth()].toLowerCase();\r\n } else if (s === 'MMMMM') {\r\n v = helpers_date.months[calendar.getMonth()].substr(0, 1);\r\n } else if (s === 'MMMM' || t === 'Month') {\r\n v = helpers_date.months[calendar.getMonth()];\r\n } else if (s === 'MMM' || t == 'Mon') {\r\n v = helpers_date.months[calendar.getMonth()].substr(0, 3);\r\n } else if (s === 'MM') {\r\n v = helpers.two(this.data[1]);\r\n } else if (s === 'M') {\r\n v = calendar.getMonth() + 1;\r\n } else if (t === 'DAY') {\r\n v = helpers_date.weekdays[calendar.getDay()].toUpperCase();\r\n } else if (t === 'day') {\r\n v = helpers_date.weekdays[calendar.getDay()].toLowerCase();\r\n } else if (s === 'DDDD' || t == 'Day') {\r\n v = helpers_date.weekdays[calendar.getDay()];\r\n } else if (s === 'DDD') {\r\n v = helpers_date.weekdays[calendar.getDay()].substr(0, 3);\r\n } else if (s === 'DD') {\r\n v = helpers.two(this.data[2]);\r\n } else if (s === 'D') {\r\n v = parseInt(this.data[2]);\r\n } else if (s === 'Q') {\r\n v = Math.floor((calendar.getMonth() + 3) / 3);\r\n } else if (s === 'HH24' || s === 'HH') {\r\n v = this.data[3];\r\n if (v > 12 && this.tokens.indexOf('am/pm') !== -1) {\r\n v -= 12;\r\n }\r\n v = helpers.two(v);\r\n } else if (s === 'HH12') {\r\n if (this.data[3] > 12) {\r\n v = helpers.two(this.data[3] - 12);\r\n } else {\r\n v = helpers.two(this.data[3]);\r\n }\r\n } else if (s === 'H') {\r\n v = this.data[3];\r\n if (v > 12 && this.tokens.indexOf('am/pm') !== -1) {\r\n v -= 12;\r\n v = helpers.two(v);\r\n }\r\n } else if (s === 'MI') {\r\n v = helpers.two(this.data[4]);\r\n } else if (s === 'SS') {\r\n v = helpers.two(this.data[5]);\r\n } else if (s === 'MS') {\r\n v = calendar.getMilliseconds();\r\n } else if (s === 'AM/PM') {\r\n if (this.data[3] >= 12) {\r\n v = 'PM';\r\n } else {\r\n v = 'AM';\r\n }\r\n } else if (s === 'WD') {\r\n v = helpers_date.weekdays[calendar.getDay()];\r\n }\r\n\r\n if (v === null) {\r\n this.value[i] = this.tokens[i];\r\n } else {\r\n this.value[i] = v;\r\n }\r\n }\r\n\r\n for (var i = 0; i < o.tokens.length; i++) {\r\n get.call(o, i);\r\n }\r\n // Put pieces together\r\n value = o.value.join('');\r\n } else {\r\n value = '';\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n return obj;\r\n}\r\n\r\n/* harmony default export */ var mask = (Mask());\r\n\n;// CONCATENATED MODULE: ./src/plugins/calendar.js\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction Calendar() {\r\n var Component = (function (el, options) {\r\n // Already created, update options\r\n if (el.calendar) {\r\n return el.calendar.setOptions(options, true);\r\n }\r\n\r\n // New instance\r\n var obj = {type: 'calendar'};\r\n obj.options = {};\r\n\r\n // Date\r\n obj.date = null;\r\n\r\n /**\r\n * Update options\r\n */\r\n obj.setOptions = function (options, reset) {\r\n // Default configuration\r\n var defaults = {\r\n // Render type: [ default | year-month-picker ]\r\n type: 'default',\r\n // Restrictions\r\n validRange: null,\r\n // Starting weekday - 0 for sunday, 6 for saturday\r\n startingDay: null,\r\n // Date format\r\n format: 'DD/MM/YYYY',\r\n // Allow keyboard date entry\r\n readonly: true,\r\n // Today is default\r\n today: false,\r\n // Show timepicker\r\n time: false,\r\n // Show the reset button\r\n resetButton: true,\r\n // Placeholder\r\n placeholder: '',\r\n // Translations can be done here\r\n months: helpers_date.monthsShort,\r\n monthsFull: helpers_date.months,\r\n weekdays: helpers_date.weekdays,\r\n textDone: dictionary.translate('Done'),\r\n textReset: dictionary.translate('Reset'),\r\n textUpdate: dictionary.translate('Update'),\r\n // Value\r\n value: null,\r\n // Fullscreen (this is automatic set for screensize < 800)\r\n fullscreen: false,\r\n // Create the calendar closed as default\r\n opened: false,\r\n // Events\r\n onopen: null,\r\n onclose: null,\r\n onchange: null,\r\n onupdate: null,\r\n // Internal mode controller\r\n mode: null,\r\n position: null,\r\n // Data type\r\n dataType: null,\r\n // Controls\r\n controls: true,\r\n // Auto select\r\n autoSelect: true,\r\n }\r\n\r\n // Loop through our object\r\n for (var property in defaults) {\r\n if (options && options.hasOwnProperty(property)) {\r\n obj.options[property] = options[property];\r\n } else {\r\n if (typeof (obj.options[property]) == 'undefined' || reset === true) {\r\n obj.options[property] = defaults[property];\r\n }\r\n }\r\n }\r\n\r\n // Reset button\r\n if (obj.options.resetButton == false) {\r\n calendarReset.style.display = 'none';\r\n } else {\r\n calendarReset.style.display = '';\r\n }\r\n\r\n // Readonly\r\n if (obj.options.readonly) {\r\n el.setAttribute('readonly', 'readonly');\r\n } else {\r\n el.removeAttribute('readonly');\r\n }\r\n\r\n // Placeholder\r\n if (obj.options.placeholder) {\r\n el.setAttribute('placeholder', obj.options.placeholder);\r\n } else {\r\n el.removeAttribute('placeholder');\r\n }\r\n\r\n if (helpers.isNumeric(obj.options.value) && obj.options.value > 0) {\r\n obj.options.value = Component.numToDate(obj.options.value);\r\n // Data type numeric\r\n obj.options.dataType = 'numeric';\r\n }\r\n\r\n // Texts\r\n calendarReset.innerHTML = obj.options.textReset;\r\n calendarConfirm.innerHTML = obj.options.textDone;\r\n calendarControlsUpdateButton.innerHTML = obj.options.textUpdate;\r\n\r\n // Define mask\r\n el.setAttribute('data-mask', obj.options.format.toLowerCase());\r\n\r\n // Value\r\n if (!obj.options.value && obj.options.today) {\r\n var value = Component.now();\r\n } else {\r\n var value = obj.options.value;\r\n }\r\n\r\n // Set internal date\r\n if (value) {\r\n // Force the update\r\n obj.options.value = null;\r\n // New value\r\n obj.setValue(value);\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n /**\r\n * Open the calendar\r\n */\r\n obj.open = function (value) {\r\n if (!calendar.classList.contains('jcalendar-focus')) {\r\n if (!calendar.classList.contains('jcalendar-inline')) {\r\n // Current\r\n Component.current = obj;\r\n // Start tracking\r\n tracking(obj, true);\r\n // Create the days\r\n obj.getDays();\r\n // Render months\r\n if (obj.options.type == 'year-month-picker') {\r\n obj.getMonths();\r\n }\r\n // Get time\r\n if (obj.options.time) {\r\n calendarSelectHour.value = obj.date[3];\r\n calendarSelectMin.value = obj.date[4];\r\n }\r\n\r\n // Show calendar\r\n calendar.classList.add('jcalendar-focus');\r\n\r\n // Get the position of the corner helper\r\n if (helpers.getWindowWidth() < 800 || obj.options.fullscreen) {\r\n calendar.classList.add('jcalendar-fullsize');\r\n // Animation\r\n animation.slideBottom(calendarContent, 1);\r\n } else {\r\n calendar.classList.remove('jcalendar-fullsize');\r\n\r\n var rect = el.getBoundingClientRect();\r\n var rectContent = calendarContent.getBoundingClientRect();\r\n\r\n if (obj.options.position) {\r\n calendarContainer.style.position = 'fixed';\r\n if (window.innerHeight < rect.bottom + rectContent.height) {\r\n calendarContainer.style.top = (rect.top - (rectContent.height + 2)) + 'px';\r\n } else {\r\n calendarContainer.style.top = (rect.top + rect.height + 2) + 'px';\r\n }\r\n calendarContainer.style.left = rect.left + 'px';\r\n } else {\r\n if (window.innerHeight < rect.bottom + rectContent.height) {\r\n var d = -1 * (rect.height + rectContent.height + 2);\r\n if (d + rect.top < 0) {\r\n d = -1 * (rect.top + rect.height);\r\n }\r\n calendarContainer.style.top = d + 'px';\r\n } else {\r\n calendarContainer.style.top = 2 + 'px';\r\n }\r\n\r\n if (window.innerWidth < rect.left + rectContent.width) {\r\n var d = window.innerWidth - (rect.left + rectContent.width + 20);\r\n calendarContainer.style.left = d + 'px';\r\n } else {\r\n calendarContainer.style.left = '0px';\r\n }\r\n }\r\n }\r\n\r\n // Events\r\n if (typeof (obj.options.onopen) == 'function') {\r\n obj.options.onopen(el);\r\n }\r\n }\r\n }\r\n }\r\n\r\n obj.close = function (ignoreEvents, update) {\r\n if (obj.options.autoSelect !== true && typeof(update) === 'undefined') {\r\n update = false;\r\n }\r\n if (calendar.classList.contains('jcalendar-focus')) {\r\n if (update !== false) {\r\n var element = calendar.querySelector('.jcalendar-selected');\r\n\r\n if (typeof (update) == 'string') {\r\n var value = update;\r\n } else if (!element || element.classList.contains('jcalendar-disabled')) {\r\n var value = obj.options.value\r\n } else {\r\n var value = obj.getValue();\r\n }\r\n\r\n obj.setValue(value);\r\n } else {\r\n let value = obj.options.value || '';\r\n obj.options.value = null;\r\n obj.setValue(value)\r\n }\r\n\r\n // Events\r\n if (!ignoreEvents && typeof (obj.options.onclose) == 'function') {\r\n obj.options.onclose(el);\r\n }\r\n // Hide\r\n calendar.classList.remove('jcalendar-focus');\r\n // Stop tracking\r\n tracking(obj, false);\r\n // Current\r\n Component.current = null;\r\n }\r\n\r\n return obj.options.value;\r\n }\r\n\r\n obj.prev = function () {\r\n // Check if the visualization is the days picker or years picker\r\n if (obj.options.mode == 'years') {\r\n obj.date[0] = obj.date[0] - 12;\r\n\r\n // Update picker table of days\r\n obj.getYears();\r\n } else if (obj.options.mode == 'months') {\r\n obj.date[0] = parseInt(obj.date[0]) - 1;\r\n // Update picker table of months\r\n obj.getMonths();\r\n } else {\r\n // Go to the previous month\r\n if (obj.date[1] < 2) {\r\n obj.date[0] = obj.date[0] - 1;\r\n obj.date[1] = 12;\r\n } else {\r\n obj.date[1] = obj.date[1] - 1;\r\n }\r\n\r\n // Update picker table of days\r\n obj.getDays();\r\n }\r\n }\r\n\r\n obj.next = function () {\r\n // Check if the visualization is the days picker or years picker\r\n if (obj.options.mode == 'years') {\r\n obj.date[0] = parseInt(obj.date[0]) + 12;\r\n\r\n // Update picker table of days\r\n obj.getYears();\r\n } else if (obj.options.mode == 'months') {\r\n obj.date[0] = parseInt(obj.date[0]) + 1;\r\n // Update picker table of months\r\n obj.getMonths();\r\n } else {\r\n // Go to the previous month\r\n if (obj.date[1] > 11) {\r\n obj.date[0] = parseInt(obj.date[0]) + 1;\r\n obj.date[1] = 1;\r\n } else {\r\n obj.date[1] = parseInt(obj.date[1]) + 1;\r\n }\r\n\r\n // Update picker table of days\r\n obj.getDays();\r\n }\r\n }\r\n\r\n /**\r\n * Set today\r\n */\r\n obj.setToday = function () {\r\n // Today\r\n var value = new Date().toISOString().substr(0, 10);\r\n // Change value\r\n obj.setValue(value);\r\n // Value\r\n return value;\r\n }\r\n\r\n obj.setValue = function (val) {\r\n if (!val) {\r\n val = '' + val;\r\n }\r\n // Values\r\n var newValue = val;\r\n var oldValue = obj.options.value;\r\n\r\n if (oldValue != newValue) {\r\n // Set label\r\n if (!newValue) {\r\n obj.date = null;\r\n var val = '';\r\n el.classList.remove('jcalendar_warning');\r\n el.title = '';\r\n } else {\r\n var value = obj.setLabel(newValue, obj.options);\r\n var date = newValue.split(' ');\r\n if (!date[1]) {\r\n date[1] = '00:00:00';\r\n }\r\n var time = date[1].split(':')\r\n var date = date[0].split('-');\r\n var y = parseInt(date[0]);\r\n var m = parseInt(date[1]);\r\n var d = parseInt(date[2]);\r\n var h = parseInt(time[0]);\r\n var i = parseInt(time[1]);\r\n obj.date = [y, m, d, h, i, 0];\r\n var val = obj.setLabel(newValue, obj.options);\r\n\r\n // Current selection day\r\n var current = Component.now(new Date(y, m - 1, d), true);\r\n\r\n // Available ranges\r\n if (obj.options.validRange) {\r\n if (!obj.options.validRange[0] || current >= obj.options.validRange[0]) {\r\n var test1 = true;\r\n } else {\r\n var test1 = false;\r\n }\r\n\r\n if (!obj.options.validRange[1] || current <= obj.options.validRange[1]) {\r\n var test2 = true;\r\n } else {\r\n var test2 = false;\r\n }\r\n\r\n if (!(test1 && test2)) {\r\n el.classList.add('jcalendar_warning');\r\n el.title = dictionary.translate('Date outside the valid range');\r\n } else {\r\n el.classList.remove('jcalendar_warning');\r\n el.title = '';\r\n }\r\n } else {\r\n el.classList.remove('jcalendar_warning');\r\n el.title = '';\r\n }\r\n }\r\n\r\n // New value\r\n obj.options.value = newValue;\r\n\r\n if (typeof (obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, newValue, oldValue);\r\n }\r\n\r\n // Lemonade JS\r\n if (el.value != val) {\r\n el.value = val;\r\n if (typeof (el.oninput) == 'function') {\r\n el.oninput({\r\n type: 'input',\r\n target: el,\r\n value: el.value\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (obj.date) {\r\n obj.getDays();\r\n // Render months\r\n if (obj.options.type == 'year-month-picker') {\r\n obj.getMonths();\r\n }\r\n }\r\n }\r\n\r\n obj.getValue = function () {\r\n if (obj.date) {\r\n if (obj.options.time) {\r\n return helpers.two(obj.date[0]) + '-' + helpers.two(obj.date[1]) + '-' + helpers.two(obj.date[2]) + ' ' + helpers.two(obj.date[3]) + ':' + helpers.two(obj.date[4]) + ':' + helpers.two(0);\r\n } else {\r\n return helpers.two(obj.date[0]) + '-' + helpers.two(obj.date[1]) + '-' + helpers.two(obj.date[2]) + ' ' + helpers.two(0) + ':' + helpers.two(0) + ':' + helpers.two(0);\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Calendar\r\n */\r\n obj.update = function (element, v) {\r\n if (element.classList.contains('jcalendar-disabled')) {\r\n // Do nothing\r\n } else {\r\n var elements = calendar.querySelector('.jcalendar-selected');\r\n if (elements) {\r\n elements.classList.remove('jcalendar-selected');\r\n }\r\n element.classList.add('jcalendar-selected');\r\n\r\n if (element.classList.contains('jcalendar-set-month')) {\r\n obj.date[1] = v;\r\n obj.date[2] = 1; // first day of the month\r\n } else {\r\n obj.date[2] = element.innerText;\r\n }\r\n\r\n if (!obj.options.time) {\r\n obj.close(null, true);\r\n } else {\r\n obj.date[3] = calendarSelectHour.value;\r\n obj.date[4] = calendarSelectMin.value;\r\n }\r\n }\r\n\r\n // Update\r\n updateActions();\r\n }\r\n\r\n /**\r\n * Set to blank\r\n */\r\n obj.reset = function () {\r\n // Close calendar\r\n obj.setValue('');\r\n obj.date = null;\r\n obj.close(false, false);\r\n }\r\n\r\n /**\r\n * Get calendar days\r\n */\r\n obj.getDays = function () {\r\n // Mode\r\n obj.options.mode = 'days';\r\n\r\n // Setting current values in case of NULLs\r\n var date = new Date();\r\n\r\n // Current selection\r\n var year = obj.date && helpers.isNumeric(obj.date[0]) ? obj.date[0] : parseInt(date.getFullYear());\r\n var month = obj.date && helpers.isNumeric(obj.date[1]) ? obj.date[1] : parseInt(date.getMonth()) + 1;\r\n var day = obj.date && helpers.isNumeric(obj.date[2]) ? obj.date[2] : parseInt(date.getDate());\r\n var hour = obj.date && helpers.isNumeric(obj.date[3]) ? obj.date[3] : parseInt(date.getHours());\r\n var min = obj.date && helpers.isNumeric(obj.date[4]) ? obj.date[4] : parseInt(date.getMinutes());\r\n\r\n // Selection container\r\n obj.date = [year, month, day, hour, min, 0];\r\n\r\n // Update title\r\n calendarLabelYear.innerHTML = year;\r\n calendarLabelMonth.innerHTML = obj.options.months[month - 1];\r\n\r\n // Current month and Year\r\n var isCurrentMonthAndYear = (date.getMonth() == month - 1) && (date.getFullYear() == year) ? true : false;\r\n var currentDay = date.getDate();\r\n\r\n // Number of days in the month\r\n var date = new Date(year, month, 0, 0, 0);\r\n var numberOfDays = date.getDate();\r\n\r\n // First day\r\n var date = new Date(year, month - 1, 0, 0, 0);\r\n var firstDay = date.getDay() + 1;\r\n\r\n // Index value\r\n var index = obj.options.startingDay || 0;\r\n\r\n // First of day relative to the starting calendar weekday\r\n firstDay = firstDay - index;\r\n\r\n // Reset table\r\n calendarBody.innerHTML = '';\r\n\r\n // Weekdays Row\r\n var row = document.createElement('tr');\r\n row.setAttribute('align', 'center');\r\n calendarBody.appendChild(row);\r\n\r\n // Create weekdays row\r\n for (var i = 0; i < 7; i++) {\r\n var cell = document.createElement('td');\r\n cell.classList.add('jcalendar-weekday')\r\n cell.innerHTML = obj.options.weekdays[index].substr(0, 1);\r\n row.appendChild(cell);\r\n // Next week day\r\n index++;\r\n // Restart index\r\n if (index > 6) {\r\n index = 0;\r\n }\r\n }\r\n\r\n // Index of days\r\n var index = 0;\r\n var d = 0;\r\n\r\n // Calendar table\r\n for (var j = 0; j < 6; j++) {\r\n // Reset cells container\r\n var row = document.createElement('tr');\r\n row.setAttribute('align', 'center');\r\n row.style.height = '34px';\r\n\r\n // Create cells\r\n for (var i = 0; i < 7; i++) {\r\n // Create cell\r\n var cell = document.createElement('td');\r\n cell.classList.add('jcalendar-set-day');\r\n\r\n if (index >= firstDay && index < (firstDay + numberOfDays)) {\r\n // Day cell\r\n d++;\r\n cell.innerHTML = d;\r\n\r\n // Selected\r\n if (d == day) {\r\n cell.classList.add('jcalendar-selected');\r\n }\r\n\r\n // Current selection day is today\r\n if (isCurrentMonthAndYear && currentDay == d) {\r\n cell.style.fontWeight = 'bold';\r\n }\r\n\r\n // Current selection day\r\n var current = Component.now(new Date(year, month - 1, d), true);\r\n\r\n // Available ranges\r\n if (obj.options.validRange) {\r\n if (!obj.options.validRange[0] || current >= obj.options.validRange[0]) {\r\n var test1 = true;\r\n } else {\r\n var test1 = false;\r\n }\r\n\r\n if (!obj.options.validRange[1] || current <= obj.options.validRange[1]) {\r\n var test2 = true;\r\n } else {\r\n var test2 = false;\r\n }\r\n\r\n if (!(test1 && test2)) {\r\n cell.classList.add('jcalendar-disabled');\r\n }\r\n }\r\n }\r\n // Day cell\r\n row.appendChild(cell);\r\n // Index\r\n index++;\r\n }\r\n\r\n // Add cell to the calendar body\r\n calendarBody.appendChild(row);\r\n }\r\n\r\n // Show time controls\r\n if (obj.options.time) {\r\n calendarControlsTime.style.display = '';\r\n } else {\r\n calendarControlsTime.style.display = 'none';\r\n }\r\n\r\n // Update\r\n updateActions();\r\n }\r\n\r\n obj.getMonths = function () {\r\n // Mode\r\n obj.options.mode = 'months';\r\n\r\n // Loading month labels\r\n var months = obj.options.months;\r\n\r\n // Value\r\n var value = obj.options.value;\r\n\r\n // Current date\r\n var date = new Date();\r\n var currentYear = parseInt(date.getFullYear());\r\n var currentMonth = parseInt(date.getMonth()) + 1;\r\n var selectedYear = obj.date && helpers.isNumeric(obj.date[0]) ? obj.date[0] : currentYear;\r\n var selectedMonth = obj.date && helpers.isNumeric(obj.date[1]) ? obj.date[1] : currentMonth;\r\n\r\n // Update title\r\n calendarLabelYear.innerHTML = obj.date[0];\r\n calendarLabelMonth.innerHTML = months[selectedMonth - 1];\r\n\r\n // Table\r\n var table = document.createElement('table');\r\n table.setAttribute('width', '100%');\r\n\r\n // Row\r\n var row = null;\r\n\r\n // Calendar table\r\n for (var i = 0; i < 12; i++) {\r\n if (!(i % 4)) {\r\n // Reset cells container\r\n var row = document.createElement('tr');\r\n row.setAttribute('align', 'center');\r\n table.appendChild(row);\r\n }\r\n\r\n // Create cell\r\n var cell = document.createElement('td');\r\n cell.classList.add('jcalendar-set-month');\r\n cell.setAttribute('data-value', i + 1);\r\n cell.innerText = months[i];\r\n\r\n if (obj.options.validRange) {\r\n var current = selectedYear + '-' + helpers.two(i + 1);\r\n if (!obj.options.validRange[0] || current >= obj.options.validRange[0].substr(0, 7)) {\r\n var test1 = true;\r\n } else {\r\n var test1 = false;\r\n }\r\n\r\n if (!obj.options.validRange[1] || current <= obj.options.validRange[1].substr(0, 7)) {\r\n var test2 = true;\r\n } else {\r\n var test2 = false;\r\n }\r\n\r\n if (!(test1 && test2)) {\r\n cell.classList.add('jcalendar-disabled');\r\n }\r\n }\r\n\r\n if (i + 1 == selectedMonth) {\r\n cell.classList.add('jcalendar-selected');\r\n }\r\n\r\n if (currentYear == selectedYear && i + 1 == currentMonth) {\r\n cell.style.fontWeight = 'bold';\r\n }\r\n\r\n row.appendChild(cell);\r\n }\r\n\r\n calendarBody.innerHTML = '