djangocms-render-context 1.0.0__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. djangocms_render_context/__init__.py +1 -1
  2. djangocms_render_context/cms_plugins.py +9 -0
  3. djangocms_render_context/forms.py +68 -3
  4. djangocms_render_context/loaders.py +21 -1
  5. djangocms_render_context/locale/cs/LC_MESSAGES/django.mo +0 -0
  6. djangocms_render_context/locale/cs/LC_MESSAGES/django.po +41 -7
  7. djangocms_render_context/locale/cs/LC_MESSAGES/djangojs.mo +0 -0
  8. djangocms_render_context/locale/cs/LC_MESSAGES/djangojs.po +130 -0
  9. djangocms_render_context/migrations/0001_initial.py +0 -2
  10. djangocms_render_context/migrations/0002_rendercontext_mimetype.py +33 -0
  11. djangocms_render_context/migrations/0003_rendercontext_config_and_path.py +46 -0
  12. djangocms_render_context/models.py +49 -8
  13. djangocms_render_context/static/djangocms_render_context/css-dist/icon-family-Material-Icons.css +20 -0
  14. djangocms_render_context/static/djangocms_render_context/css-dist/jspreadsheet.min.css +8 -0
  15. djangocms_render_context/static/djangocms_render_context/css-dist/jsuites.min.css +8 -0
  16. djangocms_render_context/static/djangocms_render_context/js/spreadsheet.js +711 -0
  17. djangocms_render_context/static/djangocms_render_context/js-dist/csv.min.js +1 -0
  18. djangocms_render_context/static/djangocms_render_context/js-dist/index.min.js +8 -0
  19. djangocms_render_context/static/djangocms_render_context/js-dist/index.min.js.map +1 -0
  20. djangocms_render_context/static/djangocms_render_context/js-dist/js-yaml.min.js +2 -0
  21. djangocms_render_context/static/djangocms_render_context/js-dist/jsuites.min.js +8 -0
  22. djangocms_render_context/static/djangocms_render_context/js-dist/jsuites.min.js.map +1 -0
  23. djangocms_render_context/utils.py +16 -0
  24. {djangocms_render_context-1.0.0.dist-info → djangocms_render_context-1.2.0.dist-info}/METADATA +17 -1
  25. djangocms_render_context-1.2.0.dist-info/RECORD +31 -0
  26. {djangocms_render_context-1.0.0.dist-info → djangocms_render_context-1.2.0.dist-info}/WHEEL +1 -1
  27. djangocms_render_context-1.0.0.dist-info/RECORD +0 -17
  28. {djangocms_render_context-1.0.0.dist-info → djangocms_render_context-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["jsdelivr-header.js","/npm/jsuites@5.13.5/dist/jsuites.js"],"names":[],"mappings":"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","file":"/npm/jsuites@5.13.5/dist/jsuites.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/jsuites@5.13.5/dist/jsuites.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\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/dictionary.js\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\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 window['jSuitesStateControl'] = window['jSuitesStateControl'].filter(function(v) {\r\n return v !== null;\r\n });\r\n\r\n // Start after all events\r\n setTimeout(function() {\r\n window['jSuitesStateControl'].push(component);\r\n }, 0);\r\n\r\n } else {\r\n var index = window['jSuitesStateControl'].indexOf(component);\r\n if (index >= 0) {\r\n window['jSuitesStateControl'].splice(index, 1);\r\n }\r\n }\r\n}\r\n\r\n/* harmony default export */ var tracking = (Tracking);\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.textContent.length) {\r\n // Handle contenteditable elements\r\n const range = document.createRange();\r\n const sel = window.getSelection();\r\n\r\n let node = el;\r\n // Go as deep as possible to the last text node\r\n while (node.lastChild) node = node.lastChild;\r\n // Ensure it's a text node\r\n if (node.nodeType === Node.TEXT_NODE) {\r\n range.setStart(node, node.length);\r\n } else {\r\n range.setStart(node, node.childNodes.length);\r\n }\r\n range.collapse(true);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n\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/path.js\nconst isValidPathObj = function(o) {\r\n return typeof o === 'object' || typeof o === 'function';\r\n}\r\n\r\nfunction Path(pathString, value, remove) {\r\n // Ensure the path is a valid, non-empty string\r\n if (typeof pathString !== 'string' || pathString.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Split the path into individual keys and filter out empty keys\r\n const keys = pathString.split('.');\r\n if (keys.length === 0) {\r\n return undefined;\r\n }\r\n\r\n // Start with the root object\r\n let currentObject = this;\r\n\r\n // Read mode: retrieve a value\r\n if (typeof value === 'undefined' && typeof remove === 'undefined') {\r\n // Traverse all keys\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n // Check if the current object is valid and has the key\r\n if (\r\n currentObject != null &&\r\n isValidPathObj(currentObject) &&\r\n Object.prototype.hasOwnProperty.call(currentObject, key)\r\n ) {\r\n currentObject = currentObject[key];\r\n } else {\r\n // Return undefined if the path is invalid or currentObject is null/undefined\r\n return undefined;\r\n }\r\n }\r\n // Return the final value\r\n return currentObject;\r\n }\r\n\r\n // Write mode: set or delete a value\r\n // Traverse all keys except the last one\r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n\r\n // Check if the current object is invalid (null/undefined or non-object)\r\n if (currentObject == null || ! isValidPathObj(currentObject)) {\r\n console.warn(`Cannot set value: path '${pathString}' blocked by invalid object at '${key}'`);\r\n return false;\r\n }\r\n\r\n // If the key exists but is null/undefined or a non-object, replace it with an empty object\r\n if (\r\n Object.prototype.hasOwnProperty.call(currentObject, key) &&\r\n (currentObject[key] == null || ! isValidPathObj(currentObject[key]))\r\n ) {\r\n currentObject[key] = {};\r\n } else if (!Object.prototype.hasOwnProperty.call(currentObject, key)) {\r\n // If the key doesn't exist, create an empty object\r\n currentObject[key] = {};\r\n }\r\n\r\n // Move to the next level\r\n currentObject = currentObject[key];\r\n }\r\n\r\n // Handle the final key\r\n const finalKey = keys[keys.length - 1];\r\n\r\n // Check if the current object is valid for setting/deleting\r\n if (currentObject == null || ! isValidPathObj(currentObject)) {\r\n return false;\r\n }\r\n\r\n // Delete the property if remove is true\r\n if (remove === true) {\r\n if (Object.prototype.hasOwnProperty.call(currentObject, finalKey)) {\r\n delete currentObject[finalKey];\r\n return true;\r\n }\r\n return false; // Nothing to delete\r\n }\r\n\r\n // Set the value\r\n currentObject[finalKey] = value;\r\n return true;\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\r\n if (options.requestedWith) {\r\n httpRequest.setRequestHeader('X-Requested-With', options.requestedWith);\r\n } else {\r\n if (options.requestedWith !== false) {\r\n httpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n }\r\n }\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.onerror = function() {\r\n if (options.error && typeof(options.error) == 'function') {\r\n options.error({\r\n message: 'Network error: Unable to reach the server.',\r\n status: 0\r\n });\r\n }\r\n }\r\n\r\n httpRequest.ontimeout = function() {\r\n if (options.error && typeof(options.error) == 'function') {\r\n options.error({\r\n message: 'Request timed out after ' + httpRequest.timeout + 'ms.',\r\n status: 0\r\n });\r\n }\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/utils/helpers.date.js\n\r\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 let weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n let months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n\r\n Object.defineProperty(Component, 'weekdays', {\r\n get: function () {\r\n return weekdays.map(function(v) {\r\n return dictionary.translate(v);\r\n });\r\n },\r\n });\r\n\r\n Object.defineProperty(Component, 'weekdaysShort', {\r\n get: function () {\r\n return weekdays.map(function(v) {\r\n return dictionary.translate(v).substring(0,3);\r\n });\r\n },\r\n });\r\n\r\n Object.defineProperty(Component, 'months', {\r\n get: function () {\r\n return months.map(function(v) {\r\n return dictionary.translate(v);\r\n });\r\n },\r\n });\r\n\r\n Object.defineProperty(Component, 'monthsShort', {\r\n get: function () {\r\n return months.map(function(v) {\r\n return dictionary.translate(v).substring(0,3);\r\n });\r\n },\r\n });\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var helpers_date = (HelpersDate());\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 }\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 var test = false;\r\n if (parseInt(v) >= 0 && parseInt(v) < 10) {\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 } 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[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 'HH24': function(v, two) {\r\n var test = false;\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 } 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 < 24) {\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 '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 === 'text') {\r\n var o = {};\r\n value = v;\r\n } else 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, strict) {\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 if (type === 'text') {\r\n // Parse number\r\n if (typeof(value) === 'number') {\r\n value = value.toString();\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 if (type === 'numeric' && strict === false && typeof(value) === 'string') {\r\n return value;\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 if (obj.options.format) {\r\n el.setAttribute('data-mask', obj.options.format.toLowerCase());\r\n }\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 = '<tr><td colspan=\"7\"></td></tr>';\r\n calendarBody.children[0].children[0].appendChild(table);\r\n\r\n // Update\r\n updateActions();\r\n }\r\n\r\n obj.getYears = function () {\r\n // Mode\r\n obj.options.mode = 'years';\r\n\r\n // Current date\r\n var date = new Date();\r\n var currentYear = date.getFullYear();\r\n var selectedYear = obj.date && helpers.isNumeric(obj.date[0]) ? obj.date[0] : parseInt(date.getFullYear());\r\n\r\n // Array of years\r\n var y = [];\r\n for (var i = 0; i < 25; i++) {\r\n y[i] = parseInt(obj.date[0]) + (i - 12);\r\n }\r\n\r\n // Assembling the year tables\r\n var table = document.createElement('table');\r\n table.setAttribute('width', '100%');\r\n\r\n for (var i = 0; i < 25; i++) {\r\n if (!(i % 5)) {\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-year');\r\n cell.innerText = y[i];\r\n\r\n if (selectedYear == y[i]) {\r\n cell.classList.add('jcalendar-selected');\r\n }\r\n\r\n if (currentYear == y[i]) {\r\n cell.style.fontWeight = 'bold';\r\n }\r\n\r\n row.appendChild(cell);\r\n }\r\n\r\n calendarBody.innerHTML = '<tr><td colspan=\"7\"></td></tr>';\r\n calendarBody.firstChild.firstChild.appendChild(table);\r\n\r\n // Update\r\n updateActions();\r\n }\r\n\r\n obj.setLabel = function (value, mixed) {\r\n return Component.getDateString(value, mixed);\r\n }\r\n\r\n obj.fromFormatted = function (value, format) {\r\n return Component.extractDateFromString(value, format);\r\n }\r\n\r\n var mouseUpControls = function (e) {\r\n var element = helpers.findElement(e.target, 'jcalendar-container');\r\n if (element) {\r\n var action = e.target.className;\r\n\r\n // Object id\r\n if (action == 'jcalendar-prev') {\r\n obj.prev();\r\n } else if (action == 'jcalendar-next') {\r\n obj.next();\r\n } else if (action == 'jcalendar-month') {\r\n obj.getMonths();\r\n } else if (action == 'jcalendar-year') {\r\n obj.getYears();\r\n } else if (action == 'jcalendar-set-year') {\r\n obj.date[0] = e.target.innerText;\r\n if (obj.options.type == 'year-month-picker') {\r\n obj.getMonths();\r\n } else {\r\n obj.getDays();\r\n }\r\n } else if (e.target.classList.contains('jcalendar-set-month')) {\r\n var month = parseInt(e.target.getAttribute('data-value'));\r\n if (obj.options.type == 'year-month-picker') {\r\n obj.update(e.target, month);\r\n } else {\r\n obj.date[1] = month;\r\n obj.getDays();\r\n }\r\n } else if (action == 'jcalendar-confirm' || action == 'jcalendar-update' || action == 'jcalendar-close') {\r\n obj.close(null, true);\r\n } else if (action == 'jcalendar-backdrop') {\r\n obj.close(false, false);\r\n } else if (action == 'jcalendar-reset') {\r\n obj.reset();\r\n } else if (e.target.classList.contains('jcalendar-set-day') && e.target.innerText) {\r\n obj.update(e.target);\r\n }\r\n } else {\r\n obj.close(false, false);\r\n }\r\n }\r\n\r\n var keyUpControls = function (e) {\r\n if (e.target.value && e.target.value.length > 3) {\r\n var test = Component.extractDateFromString(e.target.value, obj.options.format);\r\n if (test) {\r\n obj.setValue(test);\r\n }\r\n }\r\n }\r\n\r\n // Update actions button\r\n var updateActions = function () {\r\n var currentDay = calendar.querySelector('.jcalendar-selected');\r\n\r\n if (currentDay && currentDay.classList.contains('jcalendar-disabled')) {\r\n calendarControlsUpdateButton.setAttribute('disabled', 'disabled');\r\n calendarSelectHour.setAttribute('disabled', 'disabled');\r\n calendarSelectMin.setAttribute('disabled', 'disabled');\r\n } else {\r\n calendarControlsUpdateButton.removeAttribute('disabled');\r\n calendarSelectHour.removeAttribute('disabled');\r\n calendarSelectMin.removeAttribute('disabled');\r\n }\r\n\r\n // Event\r\n if (typeof (obj.options.onupdate) == 'function') {\r\n obj.options.onupdate(el, obj.getValue());\r\n }\r\n }\r\n\r\n var calendar = null;\r\n var calendarReset = null;\r\n var calendarConfirm = null;\r\n var calendarContainer = null;\r\n var calendarContent = null;\r\n var calendarLabelYear = null;\r\n var calendarLabelMonth = null;\r\n var calendarTable = null;\r\n var calendarBody = null;\r\n\r\n var calendarControls = null;\r\n var calendarControlsTime = null;\r\n var calendarControlsUpdate = null;\r\n var calendarControlsUpdateButton = null;\r\n var calendarSelectHour = null;\r\n var calendarSelectMin = null;\r\n\r\n var init = function () {\r\n // Get value from initial element if that is an input\r\n if (el.tagName == 'INPUT' && el.value) {\r\n options.value = el.value;\r\n }\r\n\r\n // Calendar DOM elements\r\n calendarReset = document.createElement('div');\r\n calendarReset.className = 'jcalendar-reset';\r\n\r\n calendarConfirm = document.createElement('div');\r\n calendarConfirm.className = 'jcalendar-confirm';\r\n\r\n calendarControls = document.createElement('div');\r\n calendarControls.className = 'jcalendar-controls'\r\n calendarControls.style.borderBottom = '1px solid #ddd';\r\n calendarControls.appendChild(calendarReset);\r\n calendarControls.appendChild(calendarConfirm);\r\n\r\n calendarContainer = document.createElement('div');\r\n calendarContainer.className = 'jcalendar-container';\r\n calendarContent = document.createElement('div');\r\n calendarContent.className = 'jcalendar-content';\r\n calendarContainer.appendChild(calendarContent);\r\n\r\n // Main element\r\n if (el.tagName == 'DIV') {\r\n calendar = el;\r\n calendar.classList.add('jcalendar-inline');\r\n } else {\r\n // Add controls to the screen\r\n calendarContent.appendChild(calendarControls);\r\n\r\n calendar = document.createElement('div');\r\n calendar.className = 'jcalendar';\r\n }\r\n calendar.classList.add('jcalendar-container');\r\n calendar.appendChild(calendarContainer);\r\n\r\n // Table container\r\n var calendarTableContainer = document.createElement('div');\r\n calendarTableContainer.className = 'jcalendar-table';\r\n calendarContent.appendChild(calendarTableContainer);\r\n\r\n // Previous button\r\n var calendarHeaderPrev = document.createElement('td');\r\n calendarHeaderPrev.setAttribute('colspan', '2');\r\n calendarHeaderPrev.className = 'jcalendar-prev';\r\n\r\n // Header with year and month\r\n calendarLabelYear = document.createElement('span');\r\n calendarLabelYear.className = 'jcalendar-year';\r\n calendarLabelMonth = document.createElement('span');\r\n calendarLabelMonth.className = 'jcalendar-month';\r\n\r\n var calendarHeaderTitle = document.createElement('td');\r\n calendarHeaderTitle.className = 'jcalendar-header';\r\n calendarHeaderTitle.setAttribute('colspan', '3');\r\n calendarHeaderTitle.appendChild(calendarLabelMonth);\r\n calendarHeaderTitle.appendChild(calendarLabelYear);\r\n\r\n var calendarHeaderNext = document.createElement('td');\r\n calendarHeaderNext.setAttribute('colspan', '2');\r\n calendarHeaderNext.className = 'jcalendar-next';\r\n\r\n var calendarHeader = document.createElement('thead');\r\n var calendarHeaderRow = document.createElement('tr');\r\n calendarHeaderRow.appendChild(calendarHeaderPrev);\r\n calendarHeaderRow.appendChild(calendarHeaderTitle);\r\n calendarHeaderRow.appendChild(calendarHeaderNext);\r\n calendarHeader.appendChild(calendarHeaderRow);\r\n\r\n calendarTable = document.createElement('table');\r\n calendarBody = document.createElement('tbody');\r\n calendarTable.setAttribute('cellpadding', '0');\r\n calendarTable.setAttribute('cellspacing', '0');\r\n calendarTable.appendChild(calendarHeader);\r\n calendarTable.appendChild(calendarBody);\r\n calendarTableContainer.appendChild(calendarTable);\r\n\r\n calendarSelectHour = document.createElement('select');\r\n calendarSelectHour.className = 'jcalendar-select';\r\n calendarSelectHour.onchange = function () {\r\n obj.date[3] = this.value;\r\n\r\n // Event\r\n if (typeof (obj.options.onupdate) == 'function') {\r\n obj.options.onupdate(el, obj.getValue());\r\n }\r\n }\r\n\r\n for (var i = 0; i < 24; i++) {\r\n var element = document.createElement('option');\r\n element.value = i;\r\n element.innerHTML = helpers.two(i);\r\n calendarSelectHour.appendChild(element);\r\n }\r\n\r\n calendarSelectMin = document.createElement('select');\r\n calendarSelectMin.className = 'jcalendar-select';\r\n calendarSelectMin.onchange = function () {\r\n obj.date[4] = this.value;\r\n\r\n // Event\r\n if (typeof (obj.options.onupdate) == 'function') {\r\n obj.options.onupdate(el, obj.getValue());\r\n }\r\n }\r\n\r\n for (var i = 0; i < 60; i++) {\r\n var element = document.createElement('option');\r\n element.value = i;\r\n element.innerHTML = helpers.two(i);\r\n calendarSelectMin.appendChild(element);\r\n }\r\n\r\n // Footer controls\r\n var calendarControlsFooter = document.createElement('div');\r\n calendarControlsFooter.className = 'jcalendar-controls';\r\n\r\n calendarControlsTime = document.createElement('div');\r\n calendarControlsTime.className = 'jcalendar-time';\r\n calendarControlsTime.style.maxWidth = '140px';\r\n calendarControlsTime.appendChild(calendarSelectHour);\r\n calendarControlsTime.appendChild(calendarSelectMin);\r\n\r\n calendarControlsUpdateButton = document.createElement('button');\r\n calendarControlsUpdateButton.setAttribute('type', 'button');\r\n calendarControlsUpdateButton.className = 'jcalendar-update';\r\n\r\n calendarControlsUpdate = document.createElement('div');\r\n calendarControlsUpdate.style.flexGrow = '10';\r\n calendarControlsUpdate.appendChild(calendarControlsUpdateButton);\r\n calendarControlsFooter.appendChild(calendarControlsTime);\r\n\r\n // Only show the update button for input elements\r\n if (el.tagName == 'INPUT') {\r\n calendarControlsFooter.appendChild(calendarControlsUpdate);\r\n }\r\n\r\n calendarContent.appendChild(calendarControlsFooter);\r\n\r\n var calendarBackdrop = document.createElement('div');\r\n calendarBackdrop.className = 'jcalendar-backdrop';\r\n calendar.appendChild(calendarBackdrop);\r\n\r\n // Handle events\r\n el.addEventListener(\"keyup\", keyUpControls);\r\n\r\n // Add global events\r\n calendar.addEventListener(\"swipeleft\", function (e) {\r\n animation.slideLeft(calendarTable, 0, function () {\r\n obj.next();\r\n animation.slideRight(calendarTable, 1);\r\n });\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n calendar.addEventListener(\"swiperight\", function (e) {\r\n animation.slideRight(calendarTable, 0, function () {\r\n obj.prev();\r\n animation.slideLeft(calendarTable, 1);\r\n });\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n if ('ontouchend' in document.documentElement === true) {\r\n calendar.addEventListener(\"touchend\", mouseUpControls);\r\n el.addEventListener(\"touchend\", obj.open);\r\n } else {\r\n calendar.addEventListener(\"mouseup\", mouseUpControls);\r\n el.addEventListener(\"mouseup\", obj.open);\r\n }\r\n\r\n // Global controls\r\n if (!Component.hasEvents) {\r\n // Execute only one time\r\n Component.hasEvents = true;\r\n // Enter and Esc\r\n document.addEventListener(\"keydown\", Component.keydown);\r\n }\r\n\r\n // Set configuration\r\n obj.setOptions(options);\r\n\r\n // Append element to the DOM\r\n if (el.tagName == 'INPUT') {\r\n el.parentNode.insertBefore(calendar, el.nextSibling);\r\n // Add properties\r\n el.setAttribute('autocomplete', 'off');\r\n // Element\r\n el.classList.add('jcalendar-input');\r\n // Value\r\n el.value = obj.setLabel(obj.getValue(), obj.options);\r\n } else {\r\n // Get days\r\n obj.getDays();\r\n // Hour\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\r\n // Default opened\r\n if (obj.options.opened == true) {\r\n obj.open();\r\n }\r\n\r\n // Controls\r\n if (obj.options.controls == false) {\r\n calendarContainer.classList.add('jcalendar-hide-controls');\r\n }\r\n\r\n // Change method\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function (val) {\r\n if (val === undefined) {\r\n return obj.getValue();\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n // Keep object available from the node\r\n el.calendar = calendar.calendar = obj;\r\n }\r\n\r\n init();\r\n\r\n return obj;\r\n });\r\n\r\n Component.keydown = function (e) {\r\n var calendar = null;\r\n if (calendar = Component.current) {\r\n if (e.which == 13) {\r\n // ENTER\r\n calendar.close(false, true);\r\n } else if (e.which == 27) {\r\n // ESC\r\n calendar.close(false, false);\r\n }\r\n }\r\n }\r\n\r\n Component.prettify = function (d, texts) {\r\n if (!texts) {\r\n var texts = {\r\n justNow: 'Just now',\r\n xMinutesAgo: '{0}m ago',\r\n xHoursAgo: '{0}h ago',\r\n xDaysAgo: '{0}d ago',\r\n xWeeksAgo: '{0}w ago',\r\n xMonthsAgo: '{0} mon ago',\r\n xYearsAgo: '{0}y ago',\r\n }\r\n }\r\n\r\n if (d.indexOf('GMT') === -1 && d.indexOf('Z') === -1) {\r\n d += ' GMT';\r\n }\r\n\r\n var d1 = new Date();\r\n var d2 = new Date(d);\r\n var total = parseInt((d1 - d2) / 1000 / 60);\r\n\r\n String.prototype.format = function (o) {\r\n return this.replace('{0}', o);\r\n }\r\n\r\n if (total == 0) {\r\n var text = texts.justNow;\r\n } else if (total < 90) {\r\n var text = texts.xMinutesAgo.format(total);\r\n } else if (total < 1440) { // One day\r\n var text = texts.xHoursAgo.format(Math.round(total / 60));\r\n } else if (total < 20160) { // 14 days\r\n var text = texts.xDaysAgo.format(Math.round(total / 1440));\r\n } else if (total < 43200) { // 30 days\r\n var text = texts.xWeeksAgo.format(Math.round(total / 10080));\r\n } else if (total < 1036800) { // 24 months\r\n var text = texts.xMonthsAgo.format(Math.round(total / 43200));\r\n } else { // 24 months+\r\n var text = texts.xYearsAgo.format(Math.round(total / 525600));\r\n }\r\n\r\n return text;\r\n }\r\n\r\n Component.prettifyAll = function () {\r\n var elements = document.querySelectorAll('.prettydate');\r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].getAttribute('data-date')) {\r\n elements[i].innerHTML = Component.prettify(elements[i].getAttribute('data-date'));\r\n } else {\r\n if (elements[i].innerHTML) {\r\n elements[i].setAttribute('title', elements[i].innerHTML);\r\n elements[i].setAttribute('data-date', elements[i].innerHTML);\r\n elements[i].innerHTML = Component.prettify(elements[i].innerHTML);\r\n }\r\n }\r\n }\r\n }\r\n\r\n Component.now = helpers_date.now;\r\n Component.toArray = helpers_date.toArray;\r\n Component.dateToNum = helpers_date.dateToNum\r\n Component.numToDate = helpers_date.numToDate;\r\n Component.weekdays = helpers_date.weekdays;\r\n Component.months = helpers_date.months;\r\n Component.weekdaysShort = helpers_date.weekdaysShort;\r\n Component.monthsShort = helpers_date.monthsShort;\r\n\r\n // Legacy shortcut\r\n Component.extractDateFromString = mask.extractDateFromString;\r\n Component.getDateString = mask.getDateString;\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var calendar = (Calendar());\n;// CONCATENATED MODULE: ./src/plugins/palette.js\n// More palettes https://coolors.co/ or https://gka.github.io/palettes/#/10|s|003790,005647,ffffe0|ffffe0,ff005e,93003a|1|1\r\n\r\nfunction Palette() {\r\n\r\n var palette = {\r\n material: [\r\n [\"#ffebee\", \"#fce4ec\", \"#f3e5f5\", \"#e8eaf6\", \"#e3f2fd\", \"#e0f7fa\", \"#e0f2f1\", \"#e8f5e9\", \"#f1f8e9\", \"#f9fbe7\", \"#fffde7\", \"#fff8e1\", \"#fff3e0\", \"#fbe9e7\", \"#efebe9\", \"#fafafa\", \"#eceff1\"],\r\n [\"#ffcdd2\", \"#f8bbd0\", \"#e1bee7\", \"#c5cae9\", \"#bbdefb\", \"#b2ebf2\", \"#b2dfdb\", \"#c8e6c9\", \"#dcedc8\", \"#f0f4c3\", \"#fff9c4\", \"#ffecb3\", \"#ffe0b2\", \"#ffccbc\", \"#d7ccc8\", \"#f5f5f5\", \"#cfd8dc\"],\r\n [\"#ef9a9a\", \"#f48fb1\", \"#ce93d8\", \"#9fa8da\", \"#90caf9\", \"#80deea\", \"#80cbc4\", \"#a5d6a7\", \"#c5e1a5\", \"#e6ee9c\", \"#fff59d\", \"#ffe082\", \"#ffcc80\", \"#ffab91\", \"#bcaaa4\", \"#eeeeee\", \"#b0bec5\"],\r\n [\"#e57373\", \"#f06292\", \"#ba68c8\", \"#7986cb\", \"#64b5f6\", \"#4dd0e1\", \"#4db6ac\", \"#81c784\", \"#aed581\", \"#dce775\", \"#fff176\", \"#ffd54f\", \"#ffb74d\", \"#ff8a65\", \"#a1887f\", \"#e0e0e0\", \"#90a4ae\"],\r\n [\"#ef5350\", \"#ec407a\", \"#ab47bc\", \"#5c6bc0\", \"#42a5f5\", \"#26c6da\", \"#26a69a\", \"#66bb6a\", \"#9ccc65\", \"#d4e157\", \"#ffee58\", \"#ffca28\", \"#ffa726\", \"#ff7043\", \"#8d6e63\", \"#bdbdbd\", \"#78909c\"],\r\n [\"#f44336\", \"#e91e63\", \"#9c27b0\", \"#3f51b5\", \"#2196f3\", \"#00bcd4\", \"#009688\", \"#4caf50\", \"#8bc34a\", \"#cddc39\", \"#ffeb3b\", \"#ffc107\", \"#ff9800\", \"#ff5722\", \"#795548\", \"#9e9e9e\", \"#607d8b\"],\r\n [\"#e53935\", \"#d81b60\", \"#8e24aa\", \"#3949ab\", \"#1e88e5\", \"#00acc1\", \"#00897b\", \"#43a047\", \"#7cb342\", \"#c0ca33\", \"#fdd835\", \"#ffb300\", \"#fb8c00\", \"#f4511e\", \"#6d4c41\", \"#757575\", \"#546e7a\"],\r\n [\"#d32f2f\", \"#c2185b\", \"#7b1fa2\", \"#303f9f\", \"#1976d2\", \"#0097a7\", \"#00796b\", \"#388e3c\", \"#689f38\", \"#afb42b\", \"#fbc02d\", \"#ffa000\", \"#f57c00\", \"#e64a19\", \"#5d4037\", \"#616161\", \"#455a64\"],\r\n [\"#c62828\", \"#ad1457\", \"#6a1b9a\", \"#283593\", \"#1565c0\", \"#00838f\", \"#00695c\", \"#2e7d32\", \"#558b2f\", \"#9e9d24\", \"#f9a825\", \"#ff8f00\", \"#ef6c00\", \"#d84315\", \"#4e342e\", \"#424242\", \"#37474f\"],\r\n [\"#b71c1c\", \"#880e4f\", \"#4a148c\", \"#1a237e\", \"#0d47a1\", \"#006064\", \"#004d40\", \"#1b5e20\", \"#33691e\", \"#827717\", \"#f57f17\", \"#ff6f00\", \"#e65100\", \"#bf360c\", \"#3e2723\", \"#212121\", \"#263238\"],\r\n ],\r\n fire: [\r\n [\"0b1a6d\", \"840f38\", \"b60718\", \"de030b\", \"ff0c0c\", \"fd491c\", \"fc7521\", \"faa331\", \"fbb535\", \"ffc73a\"],\r\n [\"071147\", \"5f0b28\", \"930513\", \"be0309\", \"ef0000\", \"fa3403\", \"fb670b\", \"f9991b\", \"faad1e\", \"ffc123\"],\r\n [\"03071e\", \"370617\", \"6a040f\", \"9d0208\", \"d00000\", \"dc2f02\", \"e85d04\", \"f48c06\", \"faa307\", \"ffba08\"],\r\n [\"020619\", \"320615\", \"61040d\", \"8c0207\", \"bc0000\", \"c82a02\", \"d05203\", \"db7f06\", \"e19405\", \"efab00\"],\r\n [\"020515\", \"2d0513\", \"58040c\", \"7f0206\", \"aa0000\", \"b62602\", \"b94903\", \"c57205\", \"ca8504\", \"d89b00\"],\r\n ],\r\n baby: [\r\n [\"eddcd2\", \"fff1e6\", \"fde2e4\", \"fad2e1\", \"c5dedd\", \"dbe7e4\", \"f0efeb\", \"d6e2e9\", \"bcd4e6\", \"99c1de\"],\r\n [\"e1c4b3\", \"ffd5b5\", \"fab6ba\", \"f5a8c4\", \"aacecd\", \"bfd5cf\", \"dbd9d0\", \"baceda\", \"9dc0db\", \"7eb1d5\"],\r\n [\"daa990\", \"ffb787\", \"f88e95\", \"f282a9\", \"8fc4c3\", \"a3c8be\", \"cec9b3\", \"9dbcce\", \"82acd2\", \"649dcb\"],\r\n [\"d69070\", \"ff9c5e\", \"f66770\", \"f05f8f\", \"74bbb9\", \"87bfae\", \"c5b993\", \"83aac3\", \"699bca\", \"4d89c2\"],\r\n [\"c97d5d\", \"f58443\", \"eb4d57\", \"e54a7b\", \"66a9a7\", \"78ae9c\", \"b5a67e\", \"7599b1\", \"5c88b7\", \"4978aa\"],\r\n ],\r\n chart: [\r\n ['#C1D37F', '#4C5454', '#FFD275', '#66586F', '#D05D5B', '#C96480', '#95BF8F', '#6EA240', '#0F0F0E', '#EB8258', '#95A3B3', '#995D81'],\r\n ],\r\n }\r\n\r\n var Component = function (o) {\r\n // Otherwise get palette value\r\n if (palette[o]) {\r\n return palette[o];\r\n } else {\r\n return palette.material;\r\n }\r\n }\r\n\r\n Component.get = function (o) {\r\n // Otherwise get palette value\r\n if (palette[o]) {\r\n return palette[o];\r\n } else {\r\n return palette;\r\n }\r\n }\r\n\r\n Component.set = function (o, v) {\r\n palette[o] = v;\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var palette = (Palette());\n;// CONCATENATED MODULE: ./src/plugins/tabs.js\n\r\n\r\n\r\n\r\nfunction Tabs(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n data: [],\r\n position: null,\r\n allowCreate: false,\r\n allowChangePosition: false,\r\n onclick: null,\r\n onload: null,\r\n onchange: null,\r\n oncreate: null,\r\n ondelete: null,\r\n onbeforecreate: null,\r\n onchangeposition: null,\r\n animation: false,\r\n hideHeaders: false,\r\n padding: null,\r\n palette: null,\r\n maxWidth: null,\r\n }\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 // Class\r\n el.classList.add('jtabs');\r\n\r\n var prev = null;\r\n var next = null;\r\n var border = null;\r\n\r\n // Helpers\r\n const setBorder = function(index) {\r\n if (obj.options.animation) {\r\n setTimeout(function() {\r\n let rect = obj.headers.children[index].getBoundingClientRect();\r\n\r\n if (obj.options.palette === 'modern') {\r\n border.style.width = rect.width - 4 + 'px';\r\n border.style.left = obj.headers.children[index].offsetLeft + 2 + 'px';\r\n } else {\r\n border.style.width = rect.width + 'px';\r\n border.style.left = obj.headers.children[index].offsetLeft + 'px';\r\n }\r\n\r\n if (obj.options.position === 'bottom') {\r\n border.style.top = '0px';\r\n } else {\r\n border.style.bottom = '0px';\r\n }\r\n }, 50);\r\n }\r\n }\r\n\r\n var updateControls = function(x) {\r\n if (typeof(obj.headers.scrollTo) == 'function') {\r\n obj.headers.scrollTo({\r\n left: x,\r\n behavior: 'smooth',\r\n });\r\n } else {\r\n obj.headers.scrollLeft = x;\r\n }\r\n\r\n if (x <= 1) {\r\n prev.classList.add('disabled');\r\n } else {\r\n prev.classList.remove('disabled');\r\n }\r\n\r\n if (x >= obj.headers.scrollWidth - obj.headers.offsetWidth) {\r\n next.classList.add('disabled');\r\n } else {\r\n next.classList.remove('disabled');\r\n }\r\n\r\n if (obj.headers.scrollWidth <= obj.headers.offsetWidth) {\r\n prev.style.display = 'none';\r\n next.style.display = 'none';\r\n } else {\r\n prev.style.display = '';\r\n next.style.display = '';\r\n }\r\n }\r\n\r\n obj.setBorder = setBorder;\r\n\r\n // Set value\r\n obj.open = function(index) {\r\n // This is to force safari to update the children\r\n const items = Array.from(obj.content.children);\r\n if (! obj.content.children[index]) {\r\n return;\r\n }\r\n\r\n var previous = null;\r\n for (var i = 0; i < obj.headers.children.length; i++) {\r\n if (obj.headers.children[i].classList.contains('jtabs-selected')) {\r\n // Current one\r\n previous = i;\r\n }\r\n // Remote selected\r\n obj.headers.children[i].classList.remove('jtabs-selected');\r\n obj.headers.children[i].removeAttribute('aria-selected')\r\n if (obj.content.children[i]) {\r\n obj.content.children[i].classList.remove('jtabs-selected');\r\n }\r\n }\r\n\r\n obj.headers.children[index].classList.add('jtabs-selected');\r\n obj.headers.children[index].setAttribute('aria-selected', 'true')\r\n\r\n if (obj.content.children[index]) {\r\n obj.content.children[index].classList.add('jtabs-selected');\r\n }\r\n\r\n if (previous != index && typeof(obj.options.onchange) == 'function') {\r\n if (obj.content.children[index]) {\r\n obj.options.onchange(el, obj, index, obj.headers.children[index], obj.content.children[index]);\r\n }\r\n }\r\n\r\n // Hide\r\n if (obj.options.hideHeaders == true && (obj.headers.children.length < 3 && obj.options.allowCreate == false)) {\r\n obj.headers.parentNode.style.display = 'none';\r\n } else {\r\n obj.headers.parentNode.style.display = '';\r\n\r\n var x1 = obj.headers.children[index].offsetLeft;\r\n var x2 = x1 + obj.headers.children[index].offsetWidth;\r\n var r1 = obj.headers.scrollLeft;\r\n var r2 = r1 + obj.headers.offsetWidth;\r\n\r\n if (! (r1 <= x1 && r2 >= x2)) {\r\n // Out of the viewport\r\n updateControls(x1 - 1);\r\n }\r\n\r\n // Set border\r\n setBorder(index);\r\n }\r\n }\r\n\r\n obj.selectIndex = function(a) {\r\n var index = Array.prototype.indexOf.call(obj.headers.children, a);\r\n if (index >= 0) {\r\n obj.open(index);\r\n }\r\n\r\n return index;\r\n }\r\n\r\n obj.rename = function(i, title) {\r\n if (! title) {\r\n title = prompt('New title', obj.headers.children[i].innerText);\r\n }\r\n obj.headers.children[i].innerText = title;\r\n setBorder(obj.getActive());\r\n }\r\n\r\n obj.create = function(title, url) {\r\n if (typeof(obj.options.onbeforecreate) == 'function') {\r\n var ret = obj.options.onbeforecreate(el, title);\r\n if (ret === false) {\r\n return false;\r\n } else {\r\n title = ret;\r\n }\r\n }\r\n\r\n var div = obj.appendElement(title);\r\n\r\n if (typeof(obj.options.oncreate) == 'function') {\r\n obj.options.oncreate(el, div)\r\n }\r\n\r\n setBorder(obj.getActive());\r\n\r\n return div;\r\n }\r\n\r\n obj.remove = function(index) {\r\n return obj.deleteElement(index);\r\n }\r\n\r\n obj.nextNumber = function() {\r\n var num = 0;\r\n for (var i = 0; i < obj.headers.children.length; i++) {\r\n var tmp = obj.headers.children[i].innerText.match(/[0-9].*/);\r\n if (tmp > num) {\r\n num = parseInt(tmp);\r\n }\r\n }\r\n if (! num) {\r\n num = 1;\r\n } else {\r\n num++;\r\n }\r\n\r\n return num;\r\n }\r\n\r\n obj.deleteElement = function(index) {\r\n let current = obj.getActive();\r\n\r\n if (! obj.headers.children[index]) {\r\n return false;\r\n } else {\r\n obj.headers.removeChild(obj.headers.children[index]);\r\n obj.content.removeChild(obj.content.children[index]);\r\n }\r\n\r\n if (current === index) {\r\n obj.open(0);\r\n } else {\r\n let current = obj.getActive() || 0;\r\n setBorder(current);\r\n }\r\n\r\n if (typeof(obj.options.ondelete) == 'function') {\r\n obj.options.ondelete(el, index)\r\n }\r\n }\r\n\r\n obj.appendElement = function(title, cb, openTab, position) {\r\n if (! title) {\r\n var title = prompt('Title?', '');\r\n }\r\n\r\n if (title) {\r\n let headerId = helpers.guid();\r\n let contentId = helpers.guid();\r\n // Add content\r\n var div = document.createElement('div');\r\n div.setAttribute('id', contentId);\r\n div.setAttribute('role', 'tabpanel');\r\n div.setAttribute('aria-labelledby', headerId);\r\n\r\n // Add headers\r\n var h = document.createElement('div');\r\n h.setAttribute('id', headerId);\r\n h.setAttribute('role', 'tab');\r\n h.setAttribute('aria-controls', contentId);\r\n\r\n h.textContent = title;\r\n h.content = div;\r\n\r\n if (typeof(position) === 'undefined') {\r\n obj.content.appendChild(div);\r\n obj.headers.insertBefore(h, obj.headers.lastChild);\r\n } else {\r\n let r = obj.content.children[position];\r\n if (r) {\r\n obj.content.insertBefore(div, r);\r\n } else {\r\n obj.content.appendChild(div);\r\n }\r\n r = obj.headers.children[position] || obj.headers.lastChild;\r\n obj.headers.insertBefore(h, r);\r\n }\r\n\r\n // Sortable\r\n if (obj.options.allowChangePosition) {\r\n h.setAttribute('draggable', 'true');\r\n }\r\n\r\n // Open new tab\r\n if (openTab !== false) {\r\n // Open new tab\r\n obj.selectIndex(h);\r\n }\r\n\r\n // Callback\r\n if (typeof(cb) == 'function') {\r\n cb(div, h);\r\n }\r\n\r\n // Return element\r\n return div;\r\n }\r\n }\r\n\r\n obj.getActive = function() {\r\n for (var i = 0; i < obj.headers.children.length; i++) {\r\n if (obj.headers.children[i].classList.contains('jtabs-selected')) {\r\n return i;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n obj.updateContent = function(position, newContent) {\r\n if (typeof newContent !== 'string') {\r\n var contentItem = newContent;\r\n } else {\r\n var contentItem = document.createElement('div');\r\n contentItem.innerHTML = newContent;\r\n }\r\n\r\n if (obj.content.children[position].classList.contains('jtabs-selected')) {\r\n newContent.classList.add('jtabs-selected');\r\n }\r\n\r\n obj.content.replaceChild(newContent, obj.content.children[position]);\r\n\r\n setBorder();\r\n }\r\n\r\n obj.updatePosition = function(f, t, ignoreEvents, openTab) {\r\n // Ondrop update position of content\r\n if (f > t) {\r\n obj.content.insertBefore(obj.content.children[f], obj.content.children[t]);\r\n } else {\r\n obj.content.insertBefore(obj.content.children[f], obj.content.children[t].nextSibling);\r\n }\r\n\r\n // Open destination tab\r\n if (openTab !== false) {\r\n obj.open(t);\r\n } else {\r\n const activeIndex = obj.getActive();\r\n\r\n if (t < activeIndex) {\r\n obj.setBorder(activeIndex);\r\n }\r\n }\r\n\r\n // Call event\r\n if (! ignoreEvents && typeof(obj.options.onchangeposition) == 'function') {\r\n obj.options.onchangeposition(obj.headers, f, t);\r\n }\r\n }\r\n\r\n obj.move = function(f, t, ignoreEvents, openTab) {\r\n if (f > t) {\r\n obj.headers.insertBefore(obj.headers.children[f], obj.headers.children[t]);\r\n } else {\r\n obj.headers.insertBefore(obj.headers.children[f], obj.headers.children[t].nextSibling);\r\n }\r\n\r\n obj.updatePosition(f, t, ignoreEvents, openTab);\r\n }\r\n\r\n obj.setBorder = setBorder;\r\n\r\n obj.init = function() {\r\n el.textContent = '';\r\n\r\n // Make sure the component is blank\r\n obj.headers = document.createElement('div');\r\n obj.content = document.createElement('div');\r\n obj.headers.classList.add('jtabs-headers');\r\n obj.headers.setAttribute('role', 'tablist');\r\n obj.content.classList.add('jtabs-content');\r\n obj.content.setAttribute('role', 'region');\r\n obj.content.setAttribute('aria-label', 'Tab Panels');\r\n\r\n if (obj.options.palette) {\r\n el.classList.add('jtabs-modern');\r\n } else {\r\n el.classList.remove('jtabs-modern');\r\n }\r\n\r\n // Padding\r\n if (obj.options.padding) {\r\n obj.content.style.padding = parseInt(obj.options.padding) + 'px';\r\n }\r\n\r\n // Header\r\n var header = document.createElement('div');\r\n header.className = 'jtabs-headers-container';\r\n header.appendChild(obj.headers);\r\n if (obj.options.maxWidth) {\r\n header.style.maxWidth = parseInt(obj.options.maxWidth) + 'px';\r\n }\r\n\r\n // Controls\r\n var controls = document.createElement('div');\r\n controls.className = 'jtabs-controls';\r\n controls.setAttribute('draggable', 'false');\r\n header.appendChild(controls);\r\n\r\n // Append DOM elements\r\n if (obj.options.position == 'bottom') {\r\n el.appendChild(obj.content);\r\n el.appendChild(header);\r\n } else {\r\n el.appendChild(header);\r\n el.appendChild(obj.content);\r\n }\r\n\r\n // New button\r\n if (obj.options.allowCreate == true) {\r\n var add = document.createElement('div');\r\n add.className = 'jtabs-add';\r\n add.onclick = function() {\r\n obj.create();\r\n }\r\n controls.appendChild(add);\r\n }\r\n\r\n prev = document.createElement('div');\r\n prev.className = 'jtabs-prev';\r\n prev.onclick = function() {\r\n updateControls(obj.headers.scrollLeft - obj.headers.offsetWidth);\r\n }\r\n controls.appendChild(prev);\r\n\r\n next = document.createElement('div');\r\n next.className = 'jtabs-next';\r\n next.onclick = function() {\r\n updateControls(obj.headers.scrollLeft + obj.headers.offsetWidth);\r\n }\r\n controls.appendChild(next);\r\n\r\n // Data\r\n for (var i = 0; i < obj.options.data.length; i++) {\r\n // Title\r\n if (obj.options.data[i].titleElement) {\r\n var headerItem = obj.options.data[i].titleElement;\r\n } else {\r\n var headerItem = document.createElement('div');\r\n }\r\n // Icon\r\n if (obj.options.data[i].icon) {\r\n var iconContainer = document.createElement('div');\r\n var icon = document.createElement('i');\r\n icon.classList.add('material-icons');\r\n icon.textContent = obj.options.data[i].icon;\r\n iconContainer.appendChild(icon);\r\n headerItem.appendChild(iconContainer);\r\n }\r\n // Title\r\n if (obj.options.data[i].title) {\r\n var title = document.createTextNode(obj.options.data[i].title);\r\n headerItem.appendChild(title);\r\n }\r\n // Width\r\n if (obj.options.data[i].width) {\r\n headerItem.style.width = obj.options.data[i].width;\r\n }\r\n // Content\r\n if (obj.options.data[i].contentElement) {\r\n var contentItem = obj.options.data[i].contentElement;\r\n } else {\r\n var contentItem = document.createElement('div');\r\n contentItem.innerHTML = obj.options.data[i].content;\r\n }\r\n obj.headers.appendChild(headerItem);\r\n obj.content.appendChild(contentItem);\r\n }\r\n\r\n // Animation\r\n border = document.createElement('div');\r\n border.className = 'jtabs-border';\r\n obj.headers.appendChild(border);\r\n\r\n if (obj.options.animation) {\r\n el.classList.add('jtabs-animation');\r\n }\r\n\r\n // Events\r\n obj.headers.addEventListener(\"click\", function(e) {\r\n if (e.target.parentNode.classList.contains('jtabs-headers')) {\r\n var target = e.target;\r\n } else {\r\n if (e.target.tagName == 'I') {\r\n var target = e.target.parentNode.parentNode;\r\n } else {\r\n var target = e.target.parentNode;\r\n }\r\n }\r\n\r\n var index = obj.selectIndex(target);\r\n\r\n if (typeof(obj.options.onclick) == 'function') {\r\n obj.options.onclick(el, obj, index, obj.headers.children[index], obj.content.children[index]);\r\n }\r\n });\r\n\r\n obj.headers.addEventListener(\"contextmenu\", function(e) {\r\n obj.selectIndex(e.target);\r\n });\r\n\r\n if (obj.headers.children.length) {\r\n // Open first tab\r\n obj.open(0);\r\n }\r\n\r\n // Update controls\r\n updateControls(0);\r\n\r\n if (obj.options.allowChangePosition == true) {\r\n Sorting(obj.headers, {\r\n direction: 1,\r\n ondrop: function(a,b,c) {\r\n obj.updatePosition(b,c);\r\n },\r\n });\r\n }\r\n\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, obj);\r\n }\r\n }\r\n\r\n // Loading existing nodes as the data\r\n if (el.children[0] && el.children[0].children.length) {\r\n // Create from existing elements\r\n for (var i = 0; i < el.children[0].children.length; i++) {\r\n var item = obj.options.data && obj.options.data[i] ? obj.options.data[i] : {};\r\n\r\n if (el.children[1] && el.children[1].children[i]) {\r\n item.titleElement = el.children[0].children[i];\r\n item.contentElement = el.children[1].children[i];\r\n } else {\r\n item.contentElement = el.children[0].children[i];\r\n }\r\n\r\n obj.options.data[i] = item;\r\n }\r\n }\r\n\r\n // Remote controller flag\r\n var loadingRemoteData = false;\r\n\r\n // Create from data\r\n if (obj.options.data) {\r\n // Append children\r\n for (var i = 0; i < obj.options.data.length; i++) {\r\n if (obj.options.data[i].url) {\r\n ajax({\r\n url: obj.options.data[i].url,\r\n type: 'GET',\r\n dataType: 'text/html',\r\n index: i,\r\n success: function(result) {\r\n obj.options.data[this.index].content = result;\r\n },\r\n complete: function() {\r\n obj.init();\r\n }\r\n });\r\n\r\n // Flag loading\r\n loadingRemoteData = true;\r\n }\r\n }\r\n }\r\n\r\n if (! loadingRemoteData) {\r\n obj.init();\r\n }\r\n\r\n el.tabs = obj;\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/color.js\n\r\n\r\n\r\n\r\n\r\n\r\nfunction Color(el, options) {\r\n // Already created, update options\r\n if (el.color) {\r\n return el.color.setOptions(options, true);\r\n }\r\n\r\n // New instance\r\n var obj = { type: 'color' };\r\n obj.options = {};\r\n\r\n var container = null;\r\n var backdrop = null;\r\n var content = null;\r\n var resetButton = null;\r\n var closeButton = null;\r\n var tabs = null;\r\n var jsuitesTabs = null;\r\n\r\n /**\r\n * Update options\r\n */\r\n obj.setOptions = function(options, reset) {\r\n /**\r\n * @typedef {Object} defaults\r\n * @property {(string|Array)} value - Initial value of the compontent\r\n * @property {string} placeholder - The default instruction text on the element\r\n * @property {requestCallback} onchange - Method to be execute after any changes on the element\r\n * @property {requestCallback} onclose - Method to be execute when the element is closed\r\n * @property {string} doneLabel - Label for button done\r\n * @property {string} resetLabel - Label for button reset\r\n * @property {string} resetValue - Value for button reset\r\n * @property {Bool} showResetButton - Active or note for button reset - default false\r\n */\r\n var defaults = {\r\n placeholder: '',\r\n value: null,\r\n onopen: null,\r\n onclose: null,\r\n onchange: null,\r\n closeOnChange: true,\r\n palette: null,\r\n position: null,\r\n doneLabel: 'Done',\r\n resetLabel: 'Reset',\r\n fullscreen: false,\r\n opened: false,\r\n }\r\n\r\n if (! options) {\r\n options = {};\r\n }\r\n\r\n if (options && ! options.palette) {\r\n // Default palette\r\n options.palette = palette();\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 // Update the text of the controls, if they have already been created\r\n if (resetButton) {\r\n resetButton.innerHTML = obj.options.resetLabel;\r\n }\r\n if (closeButton) {\r\n closeButton.innerHTML = obj.options.doneLabel;\r\n }\r\n\r\n // Update the pallete\r\n if (obj.options.palette && jsuitesTabs) {\r\n jsuitesTabs.updateContent(0, table());\r\n }\r\n\r\n // Value\r\n if (typeof obj.options.value === 'string') {\r\n el.value = obj.options.value;\r\n if (el.tagName === 'INPUT') {\r\n el.style.color = el.value;\r\n el.style.backgroundColor = el.value;\r\n }\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 if (el.getAttribute('placeholder')) {\r\n el.removeAttribute('placeholder');\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n obj.select = function(color) {\r\n // Remove current selected mark\r\n var selected = container.querySelector('.jcolor-selected');\r\n if (selected) {\r\n selected.classList.remove('jcolor-selected');\r\n }\r\n\r\n // Mark cell as selected\r\n if (obj.values[color]) {\r\n obj.values[color].classList.add('jcolor-selected');\r\n }\r\n\r\n obj.options.value = color;\r\n }\r\n\r\n /**\r\n * Open color pallete\r\n */\r\n obj.open = function() {\r\n if (! container.classList.contains('jcolor-focus')) {\r\n // Start tracking\r\n tracking(obj, true);\r\n\r\n // Show color picker\r\n container.classList.add('jcolor-focus');\r\n\r\n // Select current color\r\n if (obj.options.value) {\r\n obj.select(obj.options.value);\r\n }\r\n\r\n // Reset margin\r\n content.style.marginTop = '';\r\n content.style.marginLeft = '';\r\n\r\n var rectContent = content.getBoundingClientRect();\r\n var availableWidth = helpers.getWindowWidth();\r\n var availableHeight = helpers.getWindowHeight();\r\n\r\n if (availableWidth < 800 || obj.options.fullscreen == true) {\r\n content.classList.add('jcolor-fullscreen');\r\n animation.slideBottom(content, 1);\r\n backdrop.style.display = 'block';\r\n } else {\r\n if (content.classList.contains('jcolor-fullscreen')) {\r\n content.classList.remove('jcolor-fullscreen');\r\n backdrop.style.display = '';\r\n }\r\n\r\n if (obj.options.position) {\r\n content.style.position = 'fixed';\r\n } else {\r\n content.style.position = '';\r\n }\r\n\r\n if (rectContent.left + rectContent.width > availableWidth) {\r\n content.style.marginLeft = -1 * (rectContent.left + rectContent.width - (availableWidth - 20)) + 'px';\r\n }\r\n if (rectContent.top + rectContent.height > availableHeight) {\r\n content.style.marginTop = -1 * (rectContent.top + rectContent.height - (availableHeight - 20)) + 'px';\r\n }\r\n }\r\n\r\n\r\n if (typeof(obj.options.onopen) == 'function') {\r\n obj.options.onopen(el, obj);\r\n }\r\n\r\n jsuitesTabs.setBorder(jsuitesTabs.getActive());\r\n\r\n // Update sliders\r\n if (obj.options.value) {\r\n var rgb = HexToRgb(obj.options.value);\r\n\r\n rgbInputs.forEach(function(rgbInput, index) {\r\n rgbInput.value = rgb[index];\r\n rgbInput.dispatchEvent(new Event('input'));\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Close color pallete\r\n */\r\n obj.close = function(ignoreEvents) {\r\n if (container.classList.contains('jcolor-focus')) {\r\n // Remove focus\r\n container.classList.remove('jcolor-focus');\r\n // Make sure backdrop is hidden\r\n backdrop.style.display = '';\r\n // Call related events\r\n if (! ignoreEvents && typeof(obj.options.onclose) == 'function') {\r\n obj.options.onclose(el, obj);\r\n }\r\n // Stop the object\r\n tracking(obj, false);\r\n }\r\n\r\n return obj.options.value;\r\n }\r\n\r\n /**\r\n * Set value\r\n */\r\n obj.setValue = function(color) {\r\n if (! color) {\r\n color = '';\r\n }\r\n\r\n if (color != obj.options.value) {\r\n obj.options.value = color;\r\n slidersResult = color;\r\n\r\n // Remove current selecded mark\r\n obj.select(color);\r\n\r\n // Onchange\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, color, obj);\r\n }\r\n\r\n // Changes\r\n if (el.value != obj.options.value) {\r\n // Set input value\r\n el.value = obj.options.value;\r\n if (el.tagName === 'INPUT') {\r\n el.style.color = el.value;\r\n el.style.backgroundColor = el.value;\r\n }\r\n\r\n // Element onchange native\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 if (obj.options.closeOnChange == true) {\r\n obj.close();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get value\r\n */\r\n obj.getValue = function() {\r\n return obj.options.value;\r\n }\r\n\r\n var backdropClickControl = false;\r\n\r\n // Converts a number in decimal to hexadecimal\r\n var decToHex = function(num) {\r\n var hex = num.toString(16);\r\n return hex.length === 1 ? \"0\" + hex : hex;\r\n }\r\n\r\n // Converts a color in rgb to hexadecimal\r\n var rgbToHex = function(r, g, b) {\r\n return \"#\" + decToHex(r) + decToHex(g) + decToHex(b);\r\n }\r\n\r\n // Converts a number in hexadecimal to decimal\r\n var hexToDec = function(hex) {\r\n return parseInt('0x' + hex);\r\n }\r\n\r\n // Converts a color in hexadecimal to rgb\r\n var HexToRgb = function(hex) {\r\n return [hexToDec(hex.substr(1, 2)), hexToDec(hex.substr(3, 2)), hexToDec(hex.substr(5, 2))]\r\n }\r\n\r\n var table = function() {\r\n // Content of the first tab\r\n var tableContainer = document.createElement('div');\r\n tableContainer.className = 'jcolor-grid';\r\n\r\n // Cells\r\n obj.values = [];\r\n\r\n // Table pallete\r\n var t = document.createElement('table');\r\n t.setAttribute('cellpadding', '7');\r\n t.setAttribute('cellspacing', '0');\r\n\r\n for (var j = 0; j < obj.options.palette.length; j++) {\r\n var tr = document.createElement('tr');\r\n for (var i = 0; i < obj.options.palette[j].length; i++) {\r\n var td = document.createElement('td');\r\n var color = obj.options.palette[j][i];\r\n if (color.length < 7 && color.substr(0,1) !== '#') {\r\n color = '#' + color;\r\n }\r\n td.style.backgroundColor = color;\r\n td.setAttribute('data-value', color);\r\n td.innerHTML = '';\r\n tr.appendChild(td);\r\n\r\n // Selected color\r\n if (obj.options.value == color) {\r\n td.classList.add('jcolor-selected');\r\n }\r\n\r\n // Possible values\r\n obj.values[color] = td;\r\n }\r\n t.appendChild(tr);\r\n }\r\n\r\n // Append to the table\r\n tableContainer.appendChild(t);\r\n\r\n return tableContainer;\r\n }\r\n\r\n // Canvas where the image will be rendered\r\n var canvas = document.createElement('canvas');\r\n canvas.width = 200;\r\n canvas.height = 160;\r\n var context = canvas.getContext(\"2d\");\r\n\r\n var resizeCanvas = function() {\r\n // Specifications necessary to correctly obtain colors later in certain positions\r\n var m = tabs.firstChild.getBoundingClientRect();\r\n canvas.width = m.width - 14;\r\n gradient()\r\n }\r\n\r\n var gradient = function() {\r\n var g = context.createLinearGradient(0, 0, canvas.width, 0);\r\n // Create color gradient\r\n g.addColorStop(0, \"rgb(255,0,0)\");\r\n g.addColorStop(0.15, \"rgb(255,0,255)\");\r\n g.addColorStop(0.33, \"rgb(0,0,255)\");\r\n g.addColorStop(0.49, \"rgb(0,255,255)\");\r\n g.addColorStop(0.67, \"rgb(0,255,0)\");\r\n g.addColorStop(0.84, \"rgb(255,255,0)\");\r\n g.addColorStop(1, \"rgb(255,0,0)\");\r\n context.fillStyle = g;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n g = context.createLinearGradient(0, 0, 0, canvas.height);\r\n g.addColorStop(0, \"rgba(255,255,255,1)\");\r\n g.addColorStop(0.5, \"rgba(255,255,255,0)\");\r\n g.addColorStop(0.5, \"rgba(0,0,0,0)\");\r\n g.addColorStop(1, \"rgba(0,0,0,1)\");\r\n context.fillStyle = g;\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n var hsl = function() {\r\n var element = document.createElement('div');\r\n element.className = \"jcolor-hsl\";\r\n\r\n var point = document.createElement('div');\r\n point.className = 'jcolor-point';\r\n\r\n var div = document.createElement('div');\r\n div.appendChild(canvas);\r\n div.appendChild(point);\r\n element.appendChild(div);\r\n\r\n // Moves the marquee point to the specified position\r\n var update = function(buttons, x, y) {\r\n if (buttons === 1) {\r\n var rect = element.getBoundingClientRect();\r\n var left = x - rect.left;\r\n var top = y - rect.top;\r\n if (left < 0) {\r\n left = 0;\r\n }\r\n if (top < 0) {\r\n top = 0;\r\n }\r\n if (left > rect.width) {\r\n left = rect.width;\r\n }\r\n if (top > rect.height) {\r\n top = rect.height;\r\n }\r\n point.style.left = left + 'px';\r\n point.style.top = top + 'px';\r\n var pixel = context.getImageData(left, top, 1, 1).data;\r\n slidersResult = rgbToHex(pixel[0], pixel[1], pixel[2]);\r\n }\r\n }\r\n\r\n // Applies the point's motion function to the div that contains it\r\n element.addEventListener('mousedown', function(e) {\r\n update(e.buttons, e.clientX, e.clientY);\r\n });\r\n\r\n element.addEventListener('mousemove', function(e) {\r\n update(e.buttons, e.clientX, e.clientY);\r\n });\r\n\r\n element.addEventListener('touchmove', function(e) {\r\n update(1, e.changedTouches[0].clientX, e.changedTouches[0].clientY);\r\n });\r\n\r\n return element;\r\n }\r\n\r\n var slidersResult = '';\r\n\r\n var rgbInputs = [];\r\n\r\n var changeInputColors = function() {\r\n if (slidersResult !== '') {\r\n for (var j = 0; j < rgbInputs.length; j++) {\r\n var currentColor = HexToRgb(slidersResult);\r\n\r\n currentColor[j] = 0;\r\n\r\n var newGradient = 'linear-gradient(90deg, rgb(';\r\n newGradient += currentColor.join(', ');\r\n newGradient += '), rgb(';\r\n\r\n currentColor[j] = 255;\r\n\r\n newGradient += currentColor.join(', ');\r\n newGradient += '))';\r\n\r\n rgbInputs[j].style.backgroundImage = newGradient;\r\n }\r\n }\r\n }\r\n\r\n var sliders = function() {\r\n // Content of the third tab\r\n var slidersElement = document.createElement('div');\r\n slidersElement.className = 'jcolor-sliders';\r\n\r\n var slidersBody = document.createElement('div');\r\n\r\n // Creates a range-type input with the specified name\r\n var createSliderInput = function(name) {\r\n var inputContainer = document.createElement('div');\r\n inputContainer.className = 'jcolor-sliders-input-container';\r\n\r\n var label = document.createElement('label');\r\n label.innerText = name;\r\n\r\n var subContainer = document.createElement('div');\r\n subContainer.className = 'jcolor-sliders-input-subcontainer';\r\n\r\n var input = document.createElement('input');\r\n input.type = 'range';\r\n input.min = 0;\r\n input.max = 255;\r\n input.value = 0;\r\n\r\n input.setAttribute('aria-label', \"Color value\");\r\n input.setAttribute('aria-valuemin', \"0\");\r\n input.setAttribute('aria-valuemax', \"255\");\r\n input.setAttribute('aria-valuenow', \"0\");\r\n\r\n inputContainer.appendChild(label);\r\n subContainer.appendChild(input);\r\n\r\n var value = document.createElement('div');\r\n value.innerText = input.value;\r\n\r\n input.addEventListener('input', function() {\r\n value.innerText = input.value;\r\n });\r\n\r\n subContainer.appendChild(value);\r\n inputContainer.appendChild(subContainer);\r\n\r\n slidersBody.appendChild(inputContainer);\r\n\r\n return input;\r\n }\r\n\r\n // Creates red, green and blue inputs\r\n rgbInputs = [\r\n createSliderInput('Red'),\r\n createSliderInput('Green'),\r\n createSliderInput('Blue'),\r\n ];\r\n\r\n slidersElement.appendChild(slidersBody);\r\n\r\n // Element that prints the current color\r\n var slidersResultColor = document.createElement('div');\r\n slidersResultColor.className = 'jcolor-sliders-final-color';\r\n\r\n var resultElement = document.createElement('div');\r\n resultElement.style.visibility = 'hidden';\r\n resultElement.innerText = 'a';\r\n slidersResultColor.appendChild(resultElement)\r\n\r\n // Update the element that prints the current color\r\n var updateResult = function() {\r\n var resultColor = rgbToHex(parseInt(rgbInputs[0].value), parseInt(rgbInputs[1].value), parseInt(rgbInputs[2].value));\r\n\r\n resultElement.innerText = resultColor;\r\n resultElement.style.color = resultColor;\r\n resultElement.style.removeProperty('visibility');\r\n\r\n slidersResult = resultColor;\r\n }\r\n\r\n // Apply the update function to color inputs\r\n rgbInputs.forEach(function(rgbInput) {\r\n rgbInput.addEventListener('input', function() {\r\n updateResult();\r\n changeInputColors();\r\n });\r\n });\r\n\r\n slidersElement.appendChild(slidersResultColor);\r\n\r\n return slidersElement;\r\n }\r\n\r\n var init = function() {\r\n // Initial options\r\n obj.setOptions(options);\r\n\r\n // Add a proper input tag when the element is an input\r\n if (el.tagName == 'INPUT') {\r\n el.classList.add('jcolor-input');\r\n el.readOnly = true;\r\n }\r\n\r\n // Table container\r\n container = document.createElement('div');\r\n container.className = 'jcolor';\r\n\r\n // Table container\r\n backdrop = document.createElement('div');\r\n backdrop.className = 'jcolor-backdrop';\r\n container.appendChild(backdrop);\r\n\r\n // Content\r\n content = document.createElement('div');\r\n content.className = 'jcolor-content';\r\n\r\n // Controls\r\n var controls = document.createElement('div');\r\n controls.className = 'jcolor-controls';\r\n content.appendChild(controls);\r\n\r\n // Reset button\r\n resetButton = document.createElement('div');\r\n resetButton.className = 'jcolor-reset';\r\n resetButton.innerHTML = obj.options.resetLabel;\r\n controls.appendChild(resetButton);\r\n\r\n // Close button\r\n closeButton = document.createElement('div');\r\n closeButton.className = 'jcolor-close';\r\n closeButton.innerHTML = obj.options.doneLabel;\r\n controls.appendChild(closeButton);\r\n\r\n // Element that will be used to create the tabs\r\n tabs = document.createElement('div');\r\n content.appendChild(tabs);\r\n\r\n // Starts the jSuites tabs component\r\n jsuitesTabs = Tabs(tabs, {\r\n animation: true,\r\n data: [\r\n {\r\n title: 'Grid',\r\n contentElement: table(),\r\n },\r\n {\r\n title: 'Spectrum',\r\n contentElement: hsl(),\r\n },\r\n {\r\n title: 'Sliders',\r\n contentElement: sliders(),\r\n }\r\n ],\r\n onchange: function(element, instance, index) {\r\n if (index === 1) {\r\n resizeCanvas();\r\n } else {\r\n var color = slidersResult !== '' ? slidersResult : obj.getValue();\r\n\r\n if (index === 2 && color) {\r\n var rgb = HexToRgb(color);\r\n\r\n rgbInputs.forEach(function(rgbInput, index) {\r\n rgbInput.value = rgb[index];\r\n rgbInput.dispatchEvent(new Event('input'));\r\n });\r\n }\r\n }\r\n },\r\n palette: 'modern',\r\n });\r\n\r\n container.appendChild(content);\r\n\r\n // Insert picker after the element\r\n if (el.tagName == 'INPUT') {\r\n el.parentNode.insertBefore(container, el.nextSibling);\r\n } else {\r\n el.appendChild(container);\r\n }\r\n\r\n container.addEventListener(\"click\", function(e) {\r\n if (e.target.tagName == 'TD') {\r\n var value = e.target.getAttribute('data-value');\r\n if (value) {\r\n obj.setValue(value);\r\n }\r\n } else if (e.target.classList.contains('jcolor-reset')) {\r\n obj.setValue('');\r\n obj.close();\r\n } else if (e.target.classList.contains('jcolor-close')) {\r\n if (jsuitesTabs.getActive() > 0) {\r\n obj.setValue(slidersResult);\r\n }\r\n obj.close();\r\n } else if (e.target.classList.contains('jcolor-backdrop')) {\r\n obj.close();\r\n } else {\r\n obj.open();\r\n }\r\n });\r\n\r\n /**\r\n * If element is focus open the picker\r\n */\r\n el.addEventListener(\"mouseup\", function(e) {\r\n obj.open();\r\n });\r\n\r\n // If the picker is open on the spectrum tab, it changes the canvas size when the window size is changed\r\n window.addEventListener('resize', function() {\r\n if (container.classList.contains('jcolor-focus') && jsuitesTabs.getActive() == 1) {\r\n resizeCanvas();\r\n }\r\n });\r\n\r\n // Default opened\r\n if (obj.options.opened == true) {\r\n obj.open();\r\n }\r\n\r\n // Change\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n return obj.getValue();\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n // Keep object available from the node\r\n el.color = obj;\r\n\r\n // Container shortcut\r\n container.color = obj;\r\n }\r\n\r\n obj.toHex = function(rgb) {\r\n var hex = function(x) {\r\n return (\"0\" + parseInt(x).toString(16)).slice(-2);\r\n }\r\n if (rgb) {\r\n if (/^#[0-9A-F]{6}$/i.test(rgb)) {\r\n return rgb;\r\n } else {\r\n rgb = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n if (rgb && rgb.length) {\r\n return \"#\" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n init();\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/contextmenu.js\n\r\n\r\n\r\nfunction Contextmenu() {\r\n\r\n var Component = function(el, options) {\r\n // New instance\r\n var obj = {type: 'contextmenu'};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n items: null,\r\n onclick: null,\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Class definition\r\n el.classList.add('jcontextmenu');\r\n\r\n /**\r\n * Open contextmenu\r\n */\r\n obj.open = function (e, items) {\r\n if (items) {\r\n // Update content\r\n obj.options.items = items;\r\n // Create items\r\n obj.create(items);\r\n }\r\n\r\n // Close current contextmenu\r\n if (Component.current) {\r\n Component.current.close();\r\n }\r\n\r\n // Add to the opened components monitor\r\n tracking(obj, true);\r\n\r\n // Show context menu\r\n el.classList.add('jcontextmenu-focus');\r\n\r\n // Current\r\n Component.current = obj;\r\n\r\n // Coordinates\r\n if ((obj.options.items && obj.options.items.length > 0) || el.children.length) {\r\n if (e.target) {\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n x = e.changedTouches[0].clientX;\r\n y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n } else {\r\n var x = e.x;\r\n var y = e.y;\r\n }\r\n\r\n var rect = el.getBoundingClientRect();\r\n\r\n if (window.innerHeight < y + rect.height) {\r\n var h = y - rect.height;\r\n if (h < 0) {\r\n h = 0;\r\n }\r\n el.style.top = h + 'px';\r\n } else {\r\n el.style.top = y + 'px';\r\n }\r\n\r\n if (window.innerWidth < x + rect.width) {\r\n if (x - rect.width > 0) {\r\n el.style.left = (x - rect.width) + 'px';\r\n } else {\r\n el.style.left = '10px';\r\n }\r\n } else {\r\n el.style.left = x + 'px';\r\n }\r\n }\r\n }\r\n\r\n obj.isOpened = function () {\r\n return el.classList.contains('jcontextmenu-focus') ? true : false;\r\n }\r\n\r\n /**\r\n * Close menu\r\n */\r\n obj.close = function () {\r\n if (el.classList.contains('jcontextmenu-focus')) {\r\n el.classList.remove('jcontextmenu-focus');\r\n }\r\n tracking(obj, false);\r\n }\r\n\r\n /**\r\n * Create items based on the declared objectd\r\n * @param {object} items - List of object\r\n */\r\n obj.create = function (items) {\r\n // Update content\r\n el.innerHTML = '';\r\n\r\n // Add header contextmenu\r\n var itemHeader = createHeader();\r\n el.appendChild(itemHeader);\r\n\r\n // Append items\r\n for (var i = 0; i < items.length; i++) {\r\n var itemContainer = createItemElement(items[i]);\r\n el.appendChild(itemContainer);\r\n }\r\n }\r\n\r\n /**\r\n * createHeader for context menu\r\n * @private\r\n * @returns {HTMLElement}\r\n */\r\n function createHeader() {\r\n var header = document.createElement('div');\r\n header.classList.add(\"header\");\r\n header.addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n var title = document.createElement('a');\r\n title.classList.add(\"title\");\r\n title.innerHTML = dictionary.translate(\"Menu\");\r\n\r\n header.appendChild(title);\r\n\r\n var closeButton = document.createElement('a');\r\n closeButton.classList.add(\"close\");\r\n closeButton.innerHTML = dictionary.translate(\"close\");\r\n closeButton.addEventListener(\"click\", function (e) {\r\n obj.close();\r\n });\r\n\r\n header.appendChild(closeButton);\r\n\r\n return header;\r\n }\r\n\r\n /**\r\n * Private function for create a new Item element\r\n * @param {type} item\r\n * @returns {jsuitesL#15.jSuites.contextmenu.createItemElement.itemContainer}\r\n */\r\n function createItemElement(item) {\r\n if (item.type && (item.type == 'line' || item.type == 'divisor')) {\r\n var itemContainer = document.createElement('hr');\r\n } else {\r\n var itemContainer = document.createElement('div');\r\n var itemText = document.createElement('a');\r\n itemText.innerHTML = item.title;\r\n\r\n if (item.tooltip) {\r\n itemContainer.setAttribute('title', item.tooltip);\r\n }\r\n\r\n if (item.icon) {\r\n itemContainer.setAttribute('data-icon', item.icon);\r\n }\r\n\r\n if (item.id) {\r\n itemContainer.id = item.id;\r\n }\r\n\r\n if (item.disabled) {\r\n itemContainer.className = 'jcontextmenu-disabled';\r\n } else if (item.onclick) {\r\n let method = item.onclick;\r\n itemContainer.addEventListener(\"mousedown\", function (e) {\r\n e.preventDefault();\r\n });\r\n itemContainer.addEventListener(\"mouseup\", function (e) {\r\n method(this, e);\r\n });\r\n }\r\n itemContainer.appendChild(itemText);\r\n\r\n if (item.submenu) {\r\n var itemIconSubmenu = document.createElement('span');\r\n itemIconSubmenu.innerHTML = \"&#9658;\";\r\n itemContainer.appendChild(itemIconSubmenu);\r\n itemContainer.classList.add('jcontexthassubmenu');\r\n var el_submenu = document.createElement('div');\r\n // Class definition\r\n el_submenu.classList.add('jcontextmenu');\r\n // Focusable\r\n el_submenu.setAttribute('tabindex', '900');\r\n\r\n // Append items\r\n var submenu = item.submenu;\r\n for (var i = 0; i < submenu.length; i++) {\r\n var itemContainerSubMenu = createItemElement(submenu[i]);\r\n el_submenu.appendChild(itemContainerSubMenu);\r\n }\r\n\r\n itemContainer.appendChild(el_submenu);\r\n\r\n // Submenu positioning logic:\r\n // Case 1: Default (enough space to the right) - submenu opens to the right of the parent menu item.\r\n // Case 2: Not enough space to the right, but enough to the left - submenu opens to the left of the parent menu item.\r\n // Case 3: Not enough space on either side (e.g., very narrow viewport) - submenu opens below the parent menu item.\r\n itemContainer.addEventListener('mouseenter', function () {\r\n // Reset to default\r\n el_submenu.style.left = '';\r\n el_submenu.style.right = '';\r\n el_submenu.style.minWidth = itemContainer.offsetWidth + 'px';\r\n\r\n // Temporarily show submenu to measure\r\n el_submenu.style.display = 'block';\r\n el_submenu.style.opacity = '0';\r\n el_submenu.style.pointerEvents = 'none';\r\n\r\n // Use getBoundingClientRect to determine position\r\n var parentRect = itemContainer.getBoundingClientRect();\r\n var submenuRect = el_submenu.getBoundingClientRect();\r\n var viewportWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\r\n // Calculate the right edge if rendered to the right\r\n var rightEdge = parentRect.right + submenuRect.width;\r\n var leftEdge = parentRect.left - submenuRect.width;\r\n\r\n // If rendering to the right would overflow, render to the left\r\n if (rightEdge > viewportWidth && leftEdge >= 0) {\r\n el_submenu.style.left = 'auto';\r\n el_submenu.style.right = '99%';\r\n } \r\n // If both right and left would overflow, render to the right of the left border (worst case)\r\n else if (rightEdge > viewportWidth && leftEdge < 0) {\r\n el_submenu.style.left = '32px';\r\n el_submenu.style.right = 'auto';\r\n el_submenu.style.top = '100%';\r\n }\r\n // Default: render to the right\r\n else {\r\n el_submenu.style.left = '99%';\r\n el_submenu.style.right = 'auto';\r\n }\r\n\r\n // Restore visibility\r\n el_submenu.style.opacity = '';\r\n el_submenu.style.pointerEvents = '';\r\n el_submenu.style.display = '';\r\n });\r\n\r\n // Also reset submenu position on mouseleave to avoid stale styles\r\n itemContainer.addEventListener('mouseleave', function () {\r\n el_submenu.style.left = '';\r\n el_submenu.style.right = '';\r\n el_submenu.style.minWidth = '';\r\n });\r\n } else if (item.shortcut) {\r\n var itemShortCut = document.createElement('span');\r\n itemShortCut.innerHTML = item.shortcut;\r\n itemContainer.appendChild(itemShortCut);\r\n }\r\n }\r\n return itemContainer;\r\n }\r\n\r\n if (typeof (obj.options.onclick) == 'function') {\r\n el.addEventListener('click', function (e) {\r\n obj.options.onclick(obj, e);\r\n });\r\n }\r\n\r\n // Create items\r\n if (obj.options.items) {\r\n obj.create(obj.options.items);\r\n }\r\n\r\n window.addEventListener(\"mousewheel\", function () {\r\n obj.close();\r\n });\r\n\r\n el.contextmenu = obj;\r\n\r\n return obj;\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var contextmenu = (Contextmenu());\n;// CONCATENATED MODULE: ./src/plugins/dropdown.js\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction Dropdown() {\r\n\r\n var Component = (function (el, options) {\r\n // Already created, update options\r\n if (el.dropdown) {\r\n return el.dropdown.setOptions(options, true);\r\n }\r\n\r\n // New instance\r\n var obj = {type: 'dropdown'};\r\n obj.options = {};\r\n\r\n // Success\r\n var success = function (data, val) {\r\n // Set data\r\n if (data && data.length) {\r\n // Sort\r\n if (obj.options.sortResults !== false) {\r\n if (typeof obj.options.sortResults == \"function\") {\r\n data.sort(obj.options.sortResults);\r\n } else {\r\n data.sort(sortData);\r\n }\r\n }\r\n\r\n obj.setData(data);\r\n }\r\n\r\n // Onload method\r\n if (typeof (obj.options.onload) == 'function') {\r\n obj.options.onload(el, obj, data, val);\r\n }\r\n\r\n // Set value\r\n if (val) {\r\n applyValue(val);\r\n }\r\n\r\n // Component value\r\n if (val === undefined || val === null) {\r\n obj.options.value = '';\r\n }\r\n el.value = obj.options.value;\r\n\r\n // Open dropdown\r\n if (obj.options.opened == true) {\r\n obj.open();\r\n }\r\n }\r\n\r\n\r\n // Default sort\r\n var sortData = function (itemA, itemB) {\r\n var testA, testB;\r\n if (typeof itemA == \"string\") {\r\n testA = itemA;\r\n } else {\r\n if (itemA.text) {\r\n testA = itemA.text;\r\n } else if (itemA.name) {\r\n testA = itemA.name;\r\n }\r\n }\r\n\r\n if (typeof itemB == \"string\") {\r\n testB = itemB;\r\n } else {\r\n if (itemB.text) {\r\n testB = itemB.text;\r\n } else if (itemB.name) {\r\n testB = itemB.name;\r\n }\r\n }\r\n\r\n if (typeof testA == \"string\" || typeof testB == \"string\") {\r\n if (typeof testA != \"string\") {\r\n testA = \"\" + testA;\r\n }\r\n if (typeof testB != \"string\") {\r\n testB = \"\" + testB;\r\n }\r\n return testA.localeCompare(testB);\r\n } else {\r\n return testA - testB;\r\n }\r\n }\r\n\r\n /**\r\n * Reset the options for the dropdown\r\n */\r\n var resetValue = function () {\r\n // Reset value container\r\n obj.value = {};\r\n // Remove selected\r\n for (var i = 0; i < obj.items.length; i++) {\r\n if (obj.items[i].selected == true) {\r\n if (obj.items[i].element) {\r\n obj.items[i].element.classList.remove('jdropdown-selected')\r\n }\r\n obj.items[i].selected = null;\r\n }\r\n }\r\n // Reset options\r\n obj.options.value = '';\r\n // Reset value\r\n el.value = '';\r\n }\r\n\r\n /**\r\n * Apply values to the dropdown\r\n */\r\n var applyValue = function (values) {\r\n // Reset the current values\r\n resetValue();\r\n\r\n // Read values\r\n if (values !== null) {\r\n if (!values) {\r\n if (typeof (obj.value['']) !== 'undefined') {\r\n obj.value[''] = '';\r\n }\r\n } else {\r\n if (!Array.isArray(values)) {\r\n values = ('' + values).split(';');\r\n }\r\n for (var i = 0; i < values.length; i++) {\r\n obj.value[values[i]] = '';\r\n }\r\n }\r\n }\r\n\r\n // Update the DOM\r\n for (var i = 0; i < obj.items.length; i++) {\r\n if (typeof (obj.value[Value(i)]) !== 'undefined') {\r\n if (obj.items[i].element) {\r\n obj.items[i].element.classList.add('jdropdown-selected')\r\n }\r\n obj.items[i].selected = true;\r\n\r\n // Keep label\r\n obj.value[Value(i)] = Text(i);\r\n }\r\n }\r\n\r\n // Global value\r\n obj.options.value = Object.keys(obj.value).join(';');\r\n\r\n // Update labels\r\n obj.header.value = obj.getText();\r\n }\r\n\r\n // Get the value of one item\r\n var Value = function (k, v) {\r\n // Legacy purposes\r\n if (!obj.options.format) {\r\n var property = 'value';\r\n } else {\r\n var property = 'id';\r\n }\r\n\r\n if (obj.items[k]) {\r\n if (v !== undefined) {\r\n return obj.items[k].data[property] = v;\r\n } else {\r\n return obj.items[k].data[property];\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n // Get the label of one item\r\n var Text = function (k, v) {\r\n // Legacy purposes\r\n if (!obj.options.format) {\r\n var property = 'text';\r\n } else {\r\n var property = 'name';\r\n }\r\n\r\n if (obj.items[k]) {\r\n if (v !== undefined) {\r\n return obj.items[k].data[property] = v;\r\n } else {\r\n return obj.items[k].data[property];\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n var getValue = function () {\r\n return Object.keys(obj.value);\r\n }\r\n\r\n var getText = function () {\r\n var data = [];\r\n var k = Object.keys(obj.value);\r\n for (var i = 0; i < k.length; i++) {\r\n data.push(obj.value[k[i]]);\r\n }\r\n return data;\r\n }\r\n\r\n obj.setOptions = function (options, reset) {\r\n if (!options) {\r\n options = {};\r\n }\r\n\r\n // Default configuration\r\n var defaults = {\r\n url: null,\r\n data: [],\r\n format: 0,\r\n multiple: false,\r\n autocomplete: false,\r\n remoteSearch: false,\r\n lazyLoading: false,\r\n type: null,\r\n width: null,\r\n maxWidth: null,\r\n opened: false,\r\n value: null,\r\n placeholder: '',\r\n newOptions: false,\r\n position: false,\r\n onchange: null,\r\n onload: null,\r\n onopen: null,\r\n onclose: null,\r\n onfocus: null,\r\n onblur: null,\r\n oninsert: null,\r\n onbeforeinsert: null,\r\n onsearch: null,\r\n onbeforesearch: null,\r\n sortResults: false,\r\n autofocus: false,\r\n prompt: null,\r\n allowEmpty: 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 // Force autocomplete search\r\n if (obj.options.remoteSearch == true || obj.options.type === 'searchbar') {\r\n obj.options.autocomplete = true;\r\n }\r\n\r\n // New options\r\n if (obj.options.newOptions == true) {\r\n obj.header.classList.add('jdropdown-add');\r\n } else {\r\n obj.header.classList.remove('jdropdown-add');\r\n }\r\n\r\n // Autocomplete\r\n if (obj.options.autocomplete == true) {\r\n obj.header.removeAttribute('readonly');\r\n } else {\r\n obj.header.setAttribute('readonly', 'readonly');\r\n }\r\n\r\n // Place holder\r\n if (obj.options.placeholder) {\r\n obj.header.setAttribute('placeholder', obj.options.placeholder);\r\n } else {\r\n obj.header.removeAttribute('placeholder');\r\n }\r\n\r\n // Remove specific dropdown typing to add again\r\n el.classList.remove('jdropdown-searchbar');\r\n el.classList.remove('jdropdown-picker');\r\n el.classList.remove('jdropdown-list');\r\n\r\n if (obj.options.type == 'searchbar') {\r\n el.classList.add('jdropdown-searchbar');\r\n } else if (obj.options.type == 'list') {\r\n el.classList.add('jdropdown-list');\r\n } else if (obj.options.type == 'picker') {\r\n el.classList.add('jdropdown-picker');\r\n } else {\r\n if (helpers.getWindowWidth() < 800) {\r\n if (obj.options.autocomplete) {\r\n el.classList.add('jdropdown-searchbar');\r\n obj.options.type = 'searchbar';\r\n } else {\r\n el.classList.add('jdropdown-picker');\r\n obj.options.type = 'picker';\r\n }\r\n } else {\r\n if (obj.options.width) {\r\n el.style.width = obj.options.width;\r\n el.style.minWidth = obj.options.width;\r\n } else {\r\n el.style.removeProperty('width');\r\n el.style.removeProperty('min-width');\r\n }\r\n\r\n el.classList.add('jdropdown-default');\r\n obj.options.type = 'default';\r\n }\r\n }\r\n\r\n // Close button\r\n if (obj.options.type == 'searchbar') {\r\n containerHeader.appendChild(closeButton);\r\n } else {\r\n container.insertBefore(closeButton, container.firstChild);\r\n }\r\n\r\n // Load the content\r\n if (obj.options.url && !options.data) {\r\n ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (data) {\r\n if (data) {\r\n success(data, obj.options.value);\r\n }\r\n }\r\n });\r\n } else {\r\n success(obj.options.data, obj.options.value);\r\n }\r\n\r\n // Return the instance\r\n return obj;\r\n }\r\n\r\n // Helpers\r\n var containerHeader = null;\r\n var container = null;\r\n var content = null;\r\n var closeButton = null;\r\n var resetButton = null;\r\n var backdrop = null;\r\n\r\n var keyTimer = null;\r\n\r\n /**\r\n * Init dropdown\r\n */\r\n var init = function () {\r\n // Do not accept null\r\n if (!options) {\r\n options = {};\r\n }\r\n\r\n // If the element is a SELECT tag, create a configuration object\r\n if (el.tagName == 'SELECT') {\r\n var ret = Component.extractFromDom(el, options);\r\n el = ret.el;\r\n options = ret.options;\r\n }\r\n\r\n // Place holder\r\n if (!options.placeholder && el.getAttribute('placeholder')) {\r\n options.placeholder = el.getAttribute('placeholder');\r\n }\r\n\r\n // Value container\r\n obj.value = {};\r\n // Containers\r\n obj.items = [];\r\n obj.groups = [];\r\n // Search options\r\n obj.search = '';\r\n obj.results = null;\r\n\r\n // Create dropdown\r\n el.classList.add('jdropdown');\r\n\r\n // Header container\r\n containerHeader = document.createElement('div');\r\n containerHeader.className = 'jdropdown-container-header';\r\n\r\n // Header\r\n obj.header = document.createElement('input');\r\n obj.header.className = 'jdropdown-header jss_object';\r\n obj.header.type = 'text';\r\n obj.header.setAttribute('autocomplete', 'off');\r\n obj.header.onfocus = function () {\r\n if (typeof (obj.options.onfocus) == 'function') {\r\n obj.options.onfocus(el);\r\n }\r\n }\r\n\r\n obj.header.onblur = function () {\r\n if (typeof (obj.options.onblur) == 'function') {\r\n obj.options.onblur(el);\r\n }\r\n }\r\n\r\n obj.header.onkeyup = function (e) {\r\n if (obj.options.autocomplete == true && !keyTimer) {\r\n if (obj.search != obj.header.value.trim()) {\r\n keyTimer = setTimeout(function () {\r\n obj.find(obj.header.value.trim());\r\n keyTimer = null;\r\n }, 400);\r\n }\r\n\r\n if (!el.classList.contains('jdropdown-focus')) {\r\n obj.open();\r\n }\r\n } else {\r\n if (!obj.options.autocomplete) {\r\n obj.next(e.key);\r\n }\r\n }\r\n }\r\n\r\n // Global controls\r\n if (!Component.hasEvents) {\r\n // Execute only one time\r\n Component.hasEvents = true;\r\n // Enter and Esc\r\n document.addEventListener(\"keydown\", Component.keydown);\r\n }\r\n\r\n // Container\r\n container = document.createElement('div');\r\n container.className = 'jdropdown-container';\r\n\r\n // Dropdown content\r\n content = document.createElement('div');\r\n content.className = 'jdropdown-content';\r\n\r\n // Close button\r\n closeButton = document.createElement('div');\r\n closeButton.className = 'jdropdown-close';\r\n closeButton.textContent = 'Done';\r\n\r\n // Reset button\r\n resetButton = document.createElement('div');\r\n resetButton.className = 'jdropdown-reset';\r\n resetButton.textContent = 'x';\r\n resetButton.onclick = function () {\r\n obj.reset();\r\n obj.close();\r\n }\r\n\r\n // Create backdrop\r\n backdrop = document.createElement('div');\r\n backdrop.className = 'jdropdown-backdrop';\r\n\r\n // Append elements\r\n containerHeader.appendChild(obj.header);\r\n\r\n container.appendChild(content);\r\n el.appendChild(containerHeader);\r\n el.appendChild(container);\r\n el.appendChild(backdrop);\r\n\r\n // Set the otiptions\r\n obj.setOptions(options);\r\n\r\n if ('ontouchsend' in document.documentElement === true) {\r\n el.addEventListener('touchsend', Component.mouseup);\r\n } else {\r\n el.addEventListener('mouseup', Component.mouseup);\r\n }\r\n\r\n // Lazyloading\r\n if (obj.options.lazyLoading == true) {\r\n LazyLoading(content, {\r\n loadUp: obj.loadUp,\r\n loadDown: obj.loadDown,\r\n });\r\n }\r\n\r\n content.onwheel = function (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n // Change method\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function (val) {\r\n if (val === undefined) {\r\n return obj.getValue(obj.options.multiple ? true : false);\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n // Keep object available from the node\r\n el.dropdown = obj;\r\n }\r\n\r\n /**\r\n * Get the current remote source of data URL\r\n */\r\n obj.getUrl = function () {\r\n return obj.options.url;\r\n }\r\n\r\n /**\r\n * Set the new data from a remote source\r\n * @param {string} url - url from the remote source\r\n * @param {function} callback - callback when the data is loaded\r\n */\r\n obj.setUrl = function (url, callback) {\r\n obj.options.url = url;\r\n\r\n ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (data) {\r\n obj.setData(data);\r\n // Callback\r\n if (typeof (callback) == 'function') {\r\n callback(obj);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Set ID for one item\r\n */\r\n obj.setId = function (item, v) {\r\n // Legacy purposes\r\n if (!obj.options.format) {\r\n var property = 'value';\r\n } else {\r\n var property = 'id';\r\n }\r\n\r\n if (typeof (item) == 'object') {\r\n item[property] = v;\r\n } else {\r\n obj.items[item].data[property] = v;\r\n }\r\n }\r\n\r\n const add = function(title, id) {\r\n if (! title) {\r\n let current = obj.options.autocomplete == true ? obj.header.value : '';\r\n title = prompt(dictionary.translate('Add A New Option'), current);\r\n if (! title) {\r\n return false;\r\n }\r\n }\r\n\r\n // Id\r\n if (! id) {\r\n id = helpers.guid();\r\n }\r\n\r\n // Create new item\r\n if (!obj.options.format) {\r\n var item = {\r\n value: id,\r\n text: title,\r\n }\r\n } else {\r\n var item = {\r\n id: id,\r\n name: title,\r\n }\r\n }\r\n\r\n // Callback\r\n if (typeof (obj.options.onbeforeinsert) == 'function') {\r\n let ret = obj.options.onbeforeinsert(obj, item);\r\n if (ret === false) {\r\n return false;\r\n } else if (ret) {\r\n item = ret;\r\n }\r\n }\r\n\r\n // Add item to the main list\r\n obj.options.data.push(item);\r\n\r\n // Create DOM\r\n var newItem = obj.createItem(item);\r\n\r\n // Append DOM to the list\r\n content.appendChild(newItem.element);\r\n\r\n // Callback\r\n if (typeof (obj.options.oninsert) == 'function') {\r\n obj.options.oninsert(obj, item, newItem);\r\n }\r\n\r\n // Show content\r\n if (content.style.display == 'none') {\r\n content.style.display = '';\r\n }\r\n\r\n // Search?\r\n if (obj.results) {\r\n obj.results.push(newItem);\r\n }\r\n\r\n return item;\r\n }\r\n\r\n /**\r\n * Add a new item\r\n * @param {string} title - title of the new item\r\n * @param {string} id - value/id of the new item\r\n */\r\n obj.add = function (title, id) {\r\n if (typeof (obj.options.prompt) == 'function') {\r\n return obj.options.prompt.call(obj, add);\r\n }\r\n return add(title, id);\r\n }\r\n\r\n /**\r\n * Create a new item\r\n */\r\n obj.createItem = function (data, group, groupName) {\r\n // Keep the correct source of data\r\n if (!obj.options.format) {\r\n if (!data.value && data.id !== undefined) {\r\n data.value = data.id;\r\n //delete data.id;\r\n }\r\n if (!data.text && data.name !== undefined) {\r\n data.text = data.name;\r\n //delete data.name;\r\n }\r\n } else {\r\n if (!data.id && data.value !== undefined) {\r\n data.id = data.value;\r\n //delete data.value;\r\n }\r\n if (!data.name && data.text !== undefined) {\r\n data.name = data.text\r\n //delete data.text;\r\n }\r\n }\r\n\r\n // Create item\r\n var item = {};\r\n item.element = document.createElement('div');\r\n item.element.className = 'jdropdown-item';\r\n item.element.indexValue = obj.items.length;\r\n item.data = data;\r\n\r\n // Groupd DOM\r\n if (group) {\r\n item.group = group;\r\n }\r\n\r\n // Id\r\n if (data.id) {\r\n item.element.setAttribute('id', data.id);\r\n }\r\n\r\n // Disabled\r\n if (data.disabled == true) {\r\n item.element.setAttribute('data-disabled', true);\r\n }\r\n\r\n // Tooltip\r\n if (data.tooltip) {\r\n item.element.setAttribute('title', data.tooltip);\r\n }\r\n\r\n // Image\r\n if (data.image) {\r\n var image = document.createElement('img');\r\n image.className = 'jdropdown-image';\r\n image.src = data.image;\r\n if (!data.title) {\r\n image.classList.add('jdropdown-image-small');\r\n }\r\n item.element.appendChild(image);\r\n } else if (data.icon) {\r\n var icon = document.createElement('span');\r\n icon.className = \"jdropdown-icon material-icons\";\r\n icon.innerText = data.icon;\r\n if (!data.title) {\r\n icon.classList.add('jdropdown-icon-small');\r\n }\r\n if (data.color) {\r\n icon.style.color = data.color;\r\n }\r\n item.element.appendChild(icon);\r\n } else if (data.color) {\r\n var color = document.createElement('div');\r\n color.className = 'jdropdown-color';\r\n color.style.backgroundColor = data.color;\r\n item.element.appendChild(color);\r\n }\r\n\r\n // Set content\r\n if (!obj.options.format) {\r\n var text = data.text;\r\n } else {\r\n var text = data.name;\r\n }\r\n\r\n var node = document.createElement('div');\r\n node.className = 'jdropdown-description';\r\n node.textContent = text || '&nbsp;';\r\n\r\n // Title\r\n if (data.title) {\r\n var title = document.createElement('div');\r\n title.className = 'jdropdown-title';\r\n title.innerText = data.title;\r\n node.appendChild(title);\r\n }\r\n\r\n // Set content\r\n if (!obj.options.format) {\r\n var val = data.value;\r\n } else {\r\n var val = data.id;\r\n }\r\n\r\n // Value\r\n if (obj.value[val]) {\r\n item.element.classList.add('jdropdown-selected');\r\n item.selected = true;\r\n }\r\n\r\n // Keep DOM accessible\r\n obj.items.push(item);\r\n\r\n // Add node to item\r\n item.element.appendChild(node);\r\n\r\n return item;\r\n }\r\n\r\n obj.appendData = function (data) {\r\n // Create elements\r\n if (data.length) {\r\n // Helpers\r\n var items = [];\r\n var groups = [];\r\n\r\n // Prepare data\r\n for (var i = 0; i < data.length; i++) {\r\n // Process groups\r\n if (data[i].group) {\r\n if (!groups[data[i].group]) {\r\n groups[data[i].group] = [];\r\n }\r\n groups[data[i].group].push(i);\r\n } else {\r\n items.push(i);\r\n }\r\n }\r\n\r\n // Number of items counter\r\n var counter = 0;\r\n\r\n // Groups\r\n var groupNames = Object.keys(groups);\r\n\r\n // Append groups in case exists\r\n if (groupNames.length > 0) {\r\n for (var i = 0; i < groupNames.length; i++) {\r\n // Group container\r\n var group = document.createElement('div');\r\n group.className = 'jdropdown-group';\r\n // Group name\r\n var groupName = document.createElement('div');\r\n groupName.className = 'jdropdown-group-name';\r\n groupName.textContent = groupNames[i];\r\n // Group arrow\r\n var groupArrow = document.createElement('i');\r\n groupArrow.className = 'jdropdown-group-arrow jdropdown-group-arrow-down';\r\n groupName.appendChild(groupArrow);\r\n // Group items\r\n var groupContent = document.createElement('div');\r\n groupContent.className = 'jdropdown-group-items';\r\n for (var j = 0; j < groups[groupNames[i]].length; j++) {\r\n var item = obj.createItem(data[groups[groupNames[i]][j]], group, groupNames[i]);\r\n\r\n if (obj.options.lazyLoading == false || counter < 200) {\r\n groupContent.appendChild(item.element);\r\n counter++;\r\n }\r\n }\r\n // Group itens\r\n group.appendChild(groupName);\r\n group.appendChild(groupContent);\r\n // Keep group DOM\r\n obj.groups.push(group);\r\n // Only add to the screen if children on the group\r\n if (groupContent.children.length > 0) {\r\n // Add DOM to the content\r\n content.appendChild(group);\r\n }\r\n }\r\n }\r\n\r\n if (items.length) {\r\n for (var i = 0; i < items.length; i++) {\r\n var item = obj.createItem(data[items[i]]);\r\n if (obj.options.lazyLoading == false || counter < 200) {\r\n content.appendChild(item.element);\r\n counter++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n obj.setData = function (data) {\r\n // Reset current value\r\n resetValue();\r\n\r\n // Make sure the content container is blank\r\n content.textContent = '';\r\n\r\n // Reset\r\n obj.header.value = '';\r\n\r\n // Reset items and values\r\n obj.items = [];\r\n\r\n // Prepare data\r\n if (data && data.length) {\r\n for (var i = 0; i < data.length; i++) {\r\n // Compatibility\r\n if (typeof (data[i]) != 'object') {\r\n // Correct format\r\n if (!obj.options.format) {\r\n data[i] = {\r\n value: data[i],\r\n text: data[i]\r\n }\r\n } else {\r\n data[i] = {\r\n id: data[i],\r\n name: data[i]\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Append data\r\n obj.appendData(data);\r\n\r\n // Update data\r\n obj.options.data = data;\r\n } else {\r\n // Update data\r\n obj.options.data = [];\r\n }\r\n\r\n obj.close();\r\n }\r\n\r\n obj.getData = function () {\r\n return obj.options.data;\r\n }\r\n\r\n /**\r\n * Get position of the item\r\n */\r\n obj.getPosition = function (val) {\r\n for (var i = 0; i < obj.items.length; i++) {\r\n if (Value(i) == val) {\r\n return i;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get dropdown current text\r\n */\r\n obj.getText = function (asArray) {\r\n // Get value\r\n var v = getText();\r\n // Return value\r\n if (asArray) {\r\n return v;\r\n } else {\r\n return v.join('; ');\r\n }\r\n }\r\n\r\n /**\r\n * Get dropdown current value\r\n */\r\n obj.getValue = function (asArray) {\r\n // Get value\r\n var v = getValue();\r\n // Return value\r\n if (asArray) {\r\n return v;\r\n } else {\r\n return v.join(';');\r\n }\r\n }\r\n\r\n /**\r\n * Change event\r\n */\r\n var change = function (oldValue) {\r\n // Lemonade JS\r\n if (el.value != obj.options.value) {\r\n el.value = obj.options.value;\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 // Events\r\n if (typeof (obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, obj, oldValue, obj.options.value);\r\n }\r\n }\r\n\r\n /**\r\n * Set value\r\n */\r\n obj.setValue = function (newValue) {\r\n // Current value\r\n var oldValue = obj.getValue();\r\n // New value\r\n if (Array.isArray(newValue)) {\r\n newValue = newValue.join(';')\r\n }\r\n\r\n if (oldValue !== newValue) {\r\n // Set value\r\n applyValue(newValue);\r\n\r\n // Change\r\n change(oldValue);\r\n }\r\n }\r\n\r\n obj.resetSelected = function () {\r\n obj.setValue(null);\r\n }\r\n\r\n obj.selectIndex = function (index, force) {\r\n // Make sure is a number\r\n var index = parseInt(index);\r\n\r\n // Only select those existing elements\r\n if (obj.items && obj.items[index] && (force === true || obj.items[index].data.disabled !== true)) {\r\n // Reset cursor to a new position\r\n obj.setCursor(index, false);\r\n\r\n // Behaviour\r\n if (!obj.options.multiple) {\r\n // Update value\r\n if (obj.items[index].selected) {\r\n if (obj.options.allowEmpty !== false) {\r\n obj.setValue(null);\r\n }\r\n } else {\r\n obj.setValue(Value(index));\r\n }\r\n\r\n // Close component\r\n obj.close();\r\n } else {\r\n // Old value\r\n var oldValue = obj.options.value;\r\n\r\n // Toggle option\r\n if (obj.items[index].selected) {\r\n obj.items[index].element.classList.remove('jdropdown-selected');\r\n obj.items[index].selected = false;\r\n\r\n delete obj.value[Value(index)];\r\n } else {\r\n // Select element\r\n obj.items[index].element.classList.add('jdropdown-selected');\r\n obj.items[index].selected = true;\r\n\r\n // Set value\r\n obj.value[Value(index)] = Text(index);\r\n }\r\n\r\n // Global value\r\n obj.options.value = Object.keys(obj.value).join(';');\r\n\r\n // Update labels for multiple dropdown\r\n if (obj.options.autocomplete == false) {\r\n obj.header.value = getText().join('; ');\r\n }\r\n\r\n // Events\r\n change(oldValue);\r\n }\r\n }\r\n }\r\n\r\n obj.selectItem = function (item) {\r\n obj.selectIndex(item.indexValue);\r\n }\r\n\r\n var exists = function (k, result) {\r\n for (var j = 0; j < result.length; j++) {\r\n if (!obj.options.format) {\r\n if (result[j].value == k) {\r\n return true;\r\n }\r\n } else {\r\n if (result[j].id == k) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n obj.find = function (str) {\r\n if (obj.search == str.trim()) {\r\n return false;\r\n }\r\n\r\n // Search term\r\n obj.search = str;\r\n\r\n // Reset index\r\n obj.setCursor();\r\n\r\n // Remove nodes from all groups\r\n if (obj.groups.length) {\r\n for (var i = 0; i < obj.groups.length; i++) {\r\n obj.groups[i].lastChild.textContent = '';\r\n }\r\n }\r\n\r\n // Remove all nodes\r\n content.textContent = '';\r\n\r\n // Remove current items in the remote search\r\n if (obj.options.remoteSearch == true) {\r\n // Reset results\r\n obj.results = null;\r\n // URL\r\n var url = obj.options.url;\r\n\r\n // Ajax call\r\n let o = {\r\n url: url,\r\n method: 'GET',\r\n data: { q: str },\r\n dataType: 'json',\r\n success: function (result) {\r\n // Reset items\r\n obj.items = [];\r\n\r\n // Add the current selected items to the results in case they are not there\r\n var current = Object.keys(obj.value);\r\n if (current.length) {\r\n for (var i = 0; i < current.length; i++) {\r\n if (!exists(current[i], result)) {\r\n if (!obj.options.format) {\r\n result.unshift({value: current[i], text: obj.value[current[i]]});\r\n } else {\r\n result.unshift({id: current[i], name: obj.value[current[i]]});\r\n }\r\n }\r\n }\r\n }\r\n // Append data\r\n obj.appendData(result);\r\n // Show or hide results\r\n if (!result.length) {\r\n content.style.display = 'none';\r\n } else {\r\n content.style.display = '';\r\n }\r\n\r\n if (typeof(obj.options.onsearch) === 'function') {\r\n obj.options.onsearch(obj, result);\r\n }\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onbeforesearch) === 'function') {\r\n let ret = obj.options.onbeforesearch(obj, o);\r\n if (ret === false) {\r\n return;\r\n } else if (typeof(ret) === 'object') {\r\n o = ret;\r\n }\r\n }\r\n\r\n // Remote search\r\n ajax(o);\r\n } else {\r\n // Search terms\r\n str = new RegExp(str, 'gi');\r\n\r\n // Reset search\r\n var results = [];\r\n\r\n // Append options\r\n for (var i = 0; i < obj.items.length; i++) {\r\n // Item label\r\n var label = Text(i);\r\n // Item title\r\n var title = obj.items[i].data.title || '';\r\n // Group name\r\n var groupName = obj.items[i].data.group || '';\r\n // Synonym\r\n var synonym = obj.items[i].data.synonym || '';\r\n if (synonym) {\r\n synonym = synonym.join(' ');\r\n }\r\n\r\n if (str == null || obj.items[i].selected == true || label.toString().match(str) || title.match(str) || groupName.match(str) || synonym.match(str)) {\r\n results.push(obj.items[i]);\r\n }\r\n }\r\n\r\n if (!results.length) {\r\n content.style.display = 'none';\r\n\r\n // Results\r\n obj.results = null;\r\n } else {\r\n content.style.display = '';\r\n\r\n // Results\r\n obj.results = results;\r\n\r\n // Show 200 items at once\r\n var number = results.length || 0;\r\n\r\n // Lazyloading\r\n if (obj.options.lazyLoading == true && number > 200) {\r\n number = 200;\r\n }\r\n\r\n for (var i = 0; i < number; i++) {\r\n if (obj.results[i].group) {\r\n if (!obj.results[i].group.parentNode) {\r\n content.appendChild(obj.results[i].group);\r\n }\r\n obj.results[i].group.lastChild.appendChild(obj.results[i].element);\r\n } else {\r\n content.appendChild(obj.results[i].element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Auto focus\r\n if (obj.options.autofocus == true) {\r\n obj.first();\r\n }\r\n }\r\n\r\n obj.open = function () {\r\n // Focus\r\n if (!el.classList.contains('jdropdown-focus')) {\r\n // Current dropdown\r\n Component.current = obj;\r\n\r\n // Start tracking\r\n tracking(obj, true);\r\n\r\n // Add focus\r\n el.classList.add('jdropdown-focus');\r\n\r\n // Animation\r\n if (helpers.getWindowWidth() < 800) {\r\n if (obj.options.type == null || obj.options.type == 'picker') {\r\n animation.slideBottom(container, 1);\r\n }\r\n }\r\n\r\n // Filter\r\n if (obj.options.autocomplete == true) {\r\n obj.header.value = obj.search;\r\n obj.header.focus();\r\n }\r\n\r\n // Set cursor for the first or first selected element\r\n var k = getValue();\r\n if (k[0]) {\r\n var cursor = obj.getPosition(k[0]);\r\n if (cursor !== false) {\r\n obj.setCursor(cursor);\r\n }\r\n }\r\n\r\n // Container Size\r\n if (!obj.options.type || obj.options.type == 'default') {\r\n var rect = el.getBoundingClientRect();\r\n var rectContainer = container.getBoundingClientRect();\r\n\r\n if (obj.options.position) {\r\n container.style.position = 'fixed';\r\n if (window.innerHeight < rect.bottom + rectContainer.height) {\r\n container.style.top = '';\r\n container.style.bottom = (window.innerHeight - rect.top) + 1 + 'px';\r\n } else {\r\n container.style.top = rect.bottom + 'px';\r\n container.style.bottom = '';\r\n }\r\n container.style.left = rect.left + 'px';\r\n } else {\r\n if (window.innerHeight < rect.bottom + rectContainer.height) {\r\n container.style.top = '';\r\n container.style.bottom = rect.height + 1 + 'px';\r\n } else {\r\n container.style.top = '';\r\n container.style.bottom = '';\r\n }\r\n }\r\n\r\n container.style.minWidth = rect.width + 'px';\r\n\r\n if (obj.options.maxWidth) {\r\n container.style.maxWidth = obj.options.maxWidth;\r\n }\r\n\r\n if (!obj.items.length && obj.options.autocomplete == true) {\r\n content.style.display = 'none';\r\n } else {\r\n content.style.display = '';\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 obj.close = function (ignoreEvents) {\r\n if (el.classList.contains('jdropdown-focus')) {\r\n // Update labels\r\n obj.header.value = obj.getText();\r\n // Remove cursor\r\n obj.setCursor();\r\n // Events\r\n if (!ignoreEvents && typeof (obj.options.onclose) == 'function') {\r\n obj.options.onclose(el);\r\n }\r\n // Blur\r\n if (obj.header.blur) {\r\n obj.header.blur();\r\n }\r\n // Remove focus\r\n el.classList.remove('jdropdown-focus');\r\n // Start tracking\r\n tracking(obj, false);\r\n // Current dropdown\r\n Component.current = null;\r\n }\r\n\r\n return obj.getValue();\r\n }\r\n\r\n /**\r\n * Set cursor\r\n */\r\n obj.setCursor = function (index, setPosition) {\r\n // Remove current cursor\r\n if (obj.currentIndex != null) {\r\n // Remove visual cursor\r\n if (obj.items && obj.items[obj.currentIndex]) {\r\n obj.items[obj.currentIndex].element.classList.remove('jdropdown-cursor');\r\n }\r\n }\r\n\r\n if (index == undefined) {\r\n obj.currentIndex = null;\r\n } else {\r\n index = parseInt(index);\r\n\r\n // Cursor only for visible items\r\n if (obj.items[index].element.parentNode) {\r\n obj.items[index].element.classList.add('jdropdown-cursor');\r\n obj.currentIndex = index;\r\n\r\n // Update scroll to the cursor element\r\n if (setPosition !== false && obj.items[obj.currentIndex].element) {\r\n var container = content.scrollTop;\r\n var element = obj.items[obj.currentIndex].element;\r\n content.scrollTop = element.offsetTop - element.scrollTop + element.clientTop - 95;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Compatibility\r\n obj.resetCursor = obj.setCursor;\r\n obj.updateCursor = obj.setCursor;\r\n\r\n /**\r\n * Reset cursor and selected items\r\n */\r\n obj.reset = function () {\r\n // Reset cursor\r\n obj.setCursor();\r\n\r\n // Reset selected\r\n obj.setValue(null);\r\n }\r\n\r\n /**\r\n * First available item\r\n */\r\n obj.first = function () {\r\n if (obj.options.lazyLoading === true) {\r\n obj.loadFirst();\r\n }\r\n\r\n var items = content.querySelectorAll('.jdropdown-item');\r\n if (items.length) {\r\n var newIndex = items[0].indexValue;\r\n obj.setCursor(newIndex);\r\n }\r\n }\r\n\r\n /**\r\n * Last available item\r\n */\r\n obj.last = function () {\r\n if (obj.options.lazyLoading === true) {\r\n obj.loadLast();\r\n }\r\n\r\n var items = content.querySelectorAll('.jdropdown-item');\r\n if (items.length) {\r\n var newIndex = items[items.length - 1].indexValue;\r\n obj.setCursor(newIndex);\r\n }\r\n }\r\n\r\n obj.next = function (letter) {\r\n var newIndex = null;\r\n\r\n if (letter) {\r\n if (letter.length == 1) {\r\n // Current index\r\n var current = obj.currentIndex || -1;\r\n // Letter\r\n letter = letter.toLowerCase();\r\n\r\n var e = null;\r\n var l = null;\r\n var items = content.querySelectorAll('.jdropdown-item');\r\n if (items.length) {\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].indexValue > current) {\r\n if (e = obj.items[items[i].indexValue]) {\r\n if (l = e.element.innerText[0]) {\r\n l = l.toLowerCase();\r\n if (letter == l) {\r\n newIndex = items[i].indexValue;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n obj.setCursor(newIndex);\r\n }\r\n }\r\n } else {\r\n if (obj.currentIndex == undefined || obj.currentIndex == null) {\r\n obj.first();\r\n } else {\r\n var element = obj.items[obj.currentIndex].element;\r\n\r\n var next = element.nextElementSibling;\r\n if (next) {\r\n if (next.classList.contains('jdropdown-group')) {\r\n next = next.lastChild.firstChild;\r\n }\r\n newIndex = next.indexValue;\r\n } else {\r\n if (element.parentNode.classList.contains('jdropdown-group-items')) {\r\n if (next = element.parentNode.parentNode.nextElementSibling) {\r\n if (next.classList.contains('jdropdown-group')) {\r\n next = next.lastChild.firstChild;\r\n } else if (next.classList.contains('jdropdown-item')) {\r\n newIndex = next.indexValue;\r\n } else {\r\n next = null;\r\n }\r\n }\r\n\r\n if (next) {\r\n newIndex = next.indexValue;\r\n }\r\n }\r\n }\r\n\r\n if (newIndex !== null) {\r\n obj.setCursor(newIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n obj.prev = function () {\r\n var newIndex = null;\r\n\r\n if (obj.currentIndex === null) {\r\n obj.first();\r\n } else {\r\n var element = obj.items[obj.currentIndex].element;\r\n\r\n var prev = element.previousElementSibling;\r\n if (prev) {\r\n if (prev.classList.contains('jdropdown-group')) {\r\n prev = prev.lastChild.lastChild;\r\n }\r\n newIndex = prev.indexValue;\r\n } else {\r\n if (element.parentNode.classList.contains('jdropdown-group-items')) {\r\n if (prev = element.parentNode.parentNode.previousElementSibling) {\r\n if (prev.classList.contains('jdropdown-group')) {\r\n prev = prev.lastChild.lastChild;\r\n } else if (prev.classList.contains('jdropdown-item')) {\r\n newIndex = prev.indexValue;\r\n } else {\r\n prev = null\r\n }\r\n }\r\n\r\n if (prev) {\r\n newIndex = prev.indexValue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (newIndex !== null) {\r\n obj.setCursor(newIndex);\r\n }\r\n }\r\n\r\n obj.loadFirst = function () {\r\n // Search\r\n if (obj.results) {\r\n var results = obj.results;\r\n } else {\r\n var results = obj.items;\r\n }\r\n\r\n // Show 200 items at once\r\n var number = results.length || 0;\r\n\r\n // Lazyloading\r\n if (obj.options.lazyLoading == true && number > 200) {\r\n number = 200;\r\n }\r\n\r\n // Reset container\r\n content.textContent = '';\r\n\r\n // First 200 items\r\n for (var i = 0; i < number; i++) {\r\n if (results[i].group) {\r\n if (!results[i].group.parentNode) {\r\n content.appendChild(results[i].group);\r\n }\r\n results[i].group.lastChild.appendChild(results[i].element);\r\n } else {\r\n content.appendChild(results[i].element);\r\n }\r\n }\r\n\r\n // Scroll go to the begin\r\n content.scrollTop = 0;\r\n }\r\n\r\n obj.loadLast = function () {\r\n // Search\r\n if (obj.results) {\r\n var results = obj.results;\r\n } else {\r\n var results = obj.items;\r\n }\r\n\r\n // Show first page\r\n var number = results.length;\r\n\r\n // Max 200 items\r\n if (number > 200) {\r\n number = number - 200;\r\n\r\n // Reset container\r\n content.textContent = '';\r\n\r\n // First 200 items\r\n for (var i = number; i < results.length; i++) {\r\n if (results[i].group) {\r\n if (!results[i].group.parentNode) {\r\n content.appendChild(results[i].group);\r\n }\r\n results[i].group.lastChild.appendChild(results[i].element);\r\n } else {\r\n content.appendChild(results[i].element);\r\n }\r\n }\r\n\r\n // Scroll go to the begin\r\n content.scrollTop = content.scrollHeight;\r\n }\r\n }\r\n\r\n obj.loadUp = function () {\r\n var test = false;\r\n\r\n // Search\r\n if (obj.results) {\r\n var results = obj.results;\r\n } else {\r\n var results = obj.items;\r\n }\r\n\r\n var items = content.querySelectorAll('.jdropdown-item');\r\n var fistItem = items[0].indexValue;\r\n fistItem = obj.items[fistItem];\r\n var index = results.indexOf(fistItem) - 1;\r\n\r\n if (index > 0) {\r\n var number = 0;\r\n\r\n while (index > 0 && results[index] && number < 200) {\r\n if (results[index].group) {\r\n if (!results[index].group.parentNode) {\r\n content.insertBefore(results[index].group, content.firstChild);\r\n }\r\n results[index].group.lastChild.insertBefore(results[index].element, results[index].group.lastChild.firstChild);\r\n } else {\r\n content.insertBefore(results[index].element, content.firstChild);\r\n }\r\n\r\n index--;\r\n number++;\r\n }\r\n\r\n // New item added\r\n test = true;\r\n }\r\n\r\n return test;\r\n }\r\n\r\n obj.loadDown = function () {\r\n var test = false;\r\n\r\n // Search\r\n if (obj.results) {\r\n var results = obj.results;\r\n } else {\r\n var results = obj.items;\r\n }\r\n\r\n var items = content.querySelectorAll('.jdropdown-item');\r\n var lastItem = items[items.length - 1].indexValue;\r\n lastItem = obj.items[lastItem];\r\n var index = results.indexOf(lastItem) + 1;\r\n\r\n if (index < results.length) {\r\n var number = 0;\r\n while (index < results.length && results[index] && number < 200) {\r\n if (results[index].group) {\r\n if (!results[index].group.parentNode) {\r\n content.appendChild(results[index].group);\r\n }\r\n results[index].group.lastChild.appendChild(results[index].element);\r\n } else {\r\n content.appendChild(results[index].element);\r\n }\r\n\r\n index++;\r\n number++;\r\n }\r\n\r\n // New item added\r\n test = true;\r\n }\r\n\r\n return test;\r\n }\r\n\r\n init();\r\n\r\n return obj;\r\n });\r\n\r\n Component.keydown = function (e) {\r\n var dropdown = null;\r\n if (dropdown = Component.current) {\r\n if (e.which == 13 || e.which == 9) { // enter or tab\r\n if (dropdown.header.value && dropdown.currentIndex == null && dropdown.options.newOptions) {\r\n // if they typed something in, but it matched nothing, and newOptions are allowed, start that flow\r\n dropdown.add();\r\n } else {\r\n // Quick Select/Filter\r\n if (dropdown.currentIndex == null && dropdown.options.autocomplete == true && dropdown.header.value != \"\") {\r\n dropdown.find(dropdown.header.value);\r\n }\r\n dropdown.selectIndex(dropdown.currentIndex);\r\n }\r\n } else if (e.which == 38) { // up arrow\r\n if (dropdown.currentIndex == null) {\r\n dropdown.first();\r\n } else if (dropdown.currentIndex > 0) {\r\n dropdown.prev();\r\n }\r\n e.preventDefault();\r\n } else if (e.which == 40) { // down arrow\r\n if (dropdown.currentIndex == null) {\r\n dropdown.first();\r\n } else if (dropdown.currentIndex + 1 < dropdown.items.length) {\r\n dropdown.next();\r\n }\r\n e.preventDefault();\r\n } else if (e.which == 36) {\r\n dropdown.first();\r\n if (!e.target.classList.contains('jdropdown-header')) {\r\n e.preventDefault();\r\n }\r\n } else if (e.which == 35) {\r\n dropdown.last();\r\n if (!e.target.classList.contains('jdropdown-header')) {\r\n e.preventDefault();\r\n }\r\n } else if (e.which == 27) {\r\n dropdown.close();\r\n } else if (e.which == 33) { // page up\r\n if (dropdown.currentIndex == null) {\r\n dropdown.first();\r\n } else if (dropdown.currentIndex > 0) {\r\n for (var i = 0; i < 7; i++) {\r\n dropdown.prev()\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.which == 34) { // page down\r\n if (dropdown.currentIndex == null) {\r\n dropdown.first();\r\n } else if (dropdown.currentIndex + 1 < dropdown.items.length) {\r\n for (var i = 0; i < 7; i++) {\r\n dropdown.next()\r\n }\r\n }\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n Component.mouseup = function (e) {\r\n var element = helpers.findElement(e.target, 'jdropdown');\r\n if (element) {\r\n var dropdown = element.dropdown;\r\n if (e.target.classList.contains('jdropdown-header')) {\r\n if (element.classList.contains('jdropdown-focus') && element.classList.contains('jdropdown-default')) {\r\n var rect = element.getBoundingClientRect();\r\n\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n if (rect.width - (x - rect.left) < 30) {\r\n if (e.target.classList.contains('jdropdown-add')) {\r\n dropdown.add();\r\n } else {\r\n dropdown.close();\r\n }\r\n } else {\r\n if (dropdown.options.autocomplete == false) {\r\n dropdown.close();\r\n }\r\n }\r\n } else {\r\n dropdown.open();\r\n }\r\n } else if (e.target.classList.contains('jdropdown-group-name')) {\r\n var items = e.target.nextSibling.children;\r\n if (e.target.nextSibling.style.display != 'none') {\r\n for (var i = 0; i < items.length; i++) {\r\n if (items[i].style.display != 'none') {\r\n dropdown.selectItem(items[i]);\r\n }\r\n }\r\n }\r\n } else if (e.target.classList.contains('jdropdown-group-arrow')) {\r\n if (e.target.classList.contains('jdropdown-group-arrow-down')) {\r\n e.target.classList.remove('jdropdown-group-arrow-down');\r\n e.target.classList.add('jdropdown-group-arrow-up');\r\n e.target.parentNode.nextSibling.style.display = 'none';\r\n } else {\r\n e.target.classList.remove('jdropdown-group-arrow-up');\r\n e.target.classList.add('jdropdown-group-arrow-down');\r\n e.target.parentNode.nextSibling.style.display = '';\r\n }\r\n } else if (e.target.classList.contains('jdropdown-item')) {\r\n dropdown.selectItem(e.target);\r\n } else if (e.target.classList.contains('jdropdown-image')) {\r\n dropdown.selectItem(e.target.parentNode);\r\n } else if (e.target.classList.contains('jdropdown-description')) {\r\n dropdown.selectItem(e.target.parentNode);\r\n } else if (e.target.classList.contains('jdropdown-title')) {\r\n dropdown.selectItem(e.target.parentNode.parentNode);\r\n } else if (e.target.classList.contains('jdropdown-close') || e.target.classList.contains('jdropdown-backdrop')) {\r\n dropdown.close();\r\n }\r\n }\r\n }\r\n\r\n Component.extractFromDom = function (el, options) {\r\n // Keep reference\r\n var select = el;\r\n if (!options) {\r\n options = {};\r\n }\r\n // Prepare configuration\r\n if (el.getAttribute('multiple') && (!options || options.multiple == undefined)) {\r\n options.multiple = true;\r\n }\r\n if (el.getAttribute('placeholder') && (!options || options.placeholder == undefined)) {\r\n options.placeholder = el.getAttribute('placeholder');\r\n }\r\n if (el.getAttribute('data-autocomplete') && (!options || options.autocomplete == undefined)) {\r\n options.autocomplete = true;\r\n }\r\n if (!options || options.width == undefined) {\r\n options.width = el.offsetWidth;\r\n }\r\n if (el.value && (!options || options.value == undefined)) {\r\n options.value = el.value;\r\n }\r\n if (!options || options.data == undefined) {\r\n options.data = [];\r\n for (var j = 0; j < el.children.length; j++) {\r\n if (el.children[j].tagName == 'OPTGROUP') {\r\n for (var i = 0; i < el.children[j].children.length; i++) {\r\n options.data.push({\r\n value: el.children[j].children[i].value,\r\n text: el.children[j].children[i].textContent,\r\n group: el.children[j].getAttribute('label'),\r\n });\r\n }\r\n } else {\r\n options.data.push({\r\n value: el.children[j].value,\r\n text: el.children[j].textContent,\r\n });\r\n }\r\n }\r\n }\r\n if (!options || options.onchange == undefined) {\r\n options.onchange = function (a, b, c, d) {\r\n if (options.multiple == true) {\r\n if (obj.items[b].classList.contains('jdropdown-selected')) {\r\n select.options[b].setAttribute('selected', 'selected');\r\n } else {\r\n select.options[b].removeAttribute('selected');\r\n }\r\n } else {\r\n select.value = d;\r\n }\r\n }\r\n }\r\n // Create DIV\r\n var div = document.createElement('div');\r\n el.parentNode.insertBefore(div, el);\r\n el.style.display = 'none';\r\n el = div;\r\n\r\n return {el: el, options: options};\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var dropdown = (Dropdown());\n;// CONCATENATED MODULE: ./src/plugins/picker.js\n\r\n\r\n\r\nfunction Picker(el, options) {\r\n // Already created, update options\r\n if (el.picker) {\r\n return el.picker.setOptions(options, true);\r\n }\r\n\r\n // New instance\r\n var obj = { type: 'picker' };\r\n obj.options = {};\r\n\r\n var dropdownHeader = null;\r\n var dropdownContent = null;\r\n\r\n /**\r\n * The element passed is a DOM element\r\n */\r\n var isDOM = function(o) {\r\n return (o instanceof Element || o instanceof HTMLDocument);\r\n }\r\n\r\n /**\r\n * Create the content options\r\n */\r\n var createContent = function() {\r\n dropdownContent.innerHTML = '';\r\n\r\n // Create items\r\n var keys = Object.keys(obj.options.data);\r\n\r\n // Go though all options\r\n for (var i = 0; i < keys.length; i++) {\r\n // Item\r\n var dropdownItem = document.createElement('div');\r\n dropdownItem.classList.add('jpicker-item');\r\n dropdownItem.setAttribute('role', 'option');\r\n dropdownItem.k = keys[i];\r\n dropdownItem.v = obj.options.data[keys[i]];\r\n // Label\r\n var item = obj.getLabel(keys[i], dropdownItem);\r\n if (isDOM(item)) {\r\n dropdownItem.appendChild(item);\r\n } else {\r\n dropdownItem.innerHTML = item;\r\n }\r\n // Append\r\n dropdownContent.appendChild(dropdownItem);\r\n }\r\n }\r\n\r\n /**\r\n * Set or reset the options for the picker\r\n */\r\n obj.setOptions = function(options, reset) {\r\n // Default configuration\r\n var defaults = {\r\n value: 0,\r\n data: null,\r\n render: null,\r\n onchange: null,\r\n onmouseover: null,\r\n onselect: null,\r\n onopen: null,\r\n onclose: null,\r\n onload: null,\r\n width: null,\r\n header: true,\r\n right: false,\r\n bottom: false,\r\n content: false,\r\n columns: null,\r\n grid: null,\r\n height: null,\r\n }\r\n\r\n // Legacy purpose only\r\n if (options && options.options) {\r\n options.data = options.options;\r\n }\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 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 // Start using the options\r\n if (obj.options.header === false) {\r\n dropdownHeader.style.display = 'none';\r\n } else {\r\n dropdownHeader.style.display = '';\r\n }\r\n\r\n // Width\r\n if (obj.options.width) {\r\n dropdownHeader.style.width = parseInt(obj.options.width) + 'px';\r\n } else {\r\n dropdownHeader.style.width = '';\r\n }\r\n\r\n // Height\r\n if (obj.options.height) {\r\n dropdownContent.style.maxHeight = obj.options.height + 'px';\r\n dropdownContent.style.overflow = 'scroll';\r\n } else {\r\n dropdownContent.style.overflow = '';\r\n }\r\n\r\n if (obj.options.columns > 0) {\r\n if (! obj.options.grid) {\r\n dropdownContent.classList.add('jpicker-columns');\r\n dropdownContent.style.width = obj.options.width ? obj.options.width : 36 * obj.options.columns + 'px';\r\n } else {\r\n dropdownContent.classList.add('jpicker-grid');\r\n dropdownContent.style.gridTemplateColumns = 'repeat(' + obj.options.grid + ', 1fr)';\r\n }\r\n }\r\n\r\n if (isNaN(parseInt(obj.options.value))) {\r\n obj.options.value = 0;\r\n }\r\n\r\n // Create list from data\r\n createContent();\r\n\r\n // Set value\r\n obj.setValue(obj.options.value);\r\n\r\n // Set options all returns the own instance\r\n return obj;\r\n }\r\n\r\n obj.getValue = function() {\r\n return obj.options.value;\r\n }\r\n\r\n obj.setValue = function(k, e) {\r\n // Set label\r\n obj.setLabel(k);\r\n\r\n // Update value\r\n obj.options.value = String(k);\r\n\r\n // Lemonade JS\r\n if (el.value != obj.options.value) {\r\n el.value = obj.options.value;\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 if (dropdownContent.children[k] && dropdownContent.children[k].getAttribute('type') !== 'generic') {\r\n obj.close();\r\n }\r\n\r\n // Call method\r\n if (e) {\r\n if (typeof (obj.options.onchange) == 'function') {\r\n var v = obj.options.data[k];\r\n\r\n obj.options.onchange(el, obj, v, v, k, e);\r\n }\r\n }\r\n }\r\n\r\n obj.getLabel = function(v, item) {\r\n var label = obj.options.data[v] || null;\r\n if (typeof(obj.options.render) == 'function') {\r\n label = obj.options.render(label, item);\r\n }\r\n return label;\r\n }\r\n\r\n obj.setLabel = function(v) {\r\n var item;\r\n\r\n if (obj.options.content) {\r\n item = document.createElement('i');\r\n item.textContent = obj.options.content;\r\n item.classList.add('material-icons');\r\n } else {\r\n item = obj.getLabel(v, null);\r\n }\r\n\r\n // Label\r\n if (isDOM(item)) {\r\n dropdownHeader.textContent = '';\r\n dropdownHeader.appendChild(item);\r\n } else {\r\n dropdownHeader.innerHTML = item;\r\n }\r\n }\r\n\r\n obj.open = function() {\r\n if (! el.classList.contains('jpicker-focus')) {\r\n // Start tracking the element\r\n tracking(obj, true);\r\n\r\n // Open picker\r\n el.classList.add('jpicker-focus');\r\n el.focus();\r\n\r\n var top = 0;\r\n var left = 0;\r\n\r\n dropdownContent.style.marginLeft = '';\r\n\r\n var rectHeader = dropdownHeader.getBoundingClientRect();\r\n var rectContent = dropdownContent.getBoundingClientRect();\r\n\r\n if (window.innerHeight < rectHeader.bottom + rectContent.height || obj.options.bottom) {\r\n top = -1 * (rectContent.height + 4);\r\n } else {\r\n top = rectHeader.height + 4;\r\n }\r\n\r\n if (obj.options.right === true) {\r\n left = -1 * rectContent.width + rectHeader.width;\r\n }\r\n\r\n if (rectContent.left + left < 0) {\r\n left = left + rectContent.left + 10;\r\n }\r\n if (rectContent.left + rectContent.width > window.innerWidth) {\r\n left = -1 * (10 + rectContent.left + rectContent.width - window.innerWidth);\r\n }\r\n\r\n dropdownContent.style.marginTop = parseInt(top) + 'px';\r\n dropdownContent.style.marginLeft = parseInt(left) + 'px';\r\n\r\n //dropdownContent.style.marginTop\r\n if (typeof obj.options.onopen == 'function') {\r\n obj.options.onopen(el, obj);\r\n }\r\n }\r\n }\r\n\r\n obj.close = function() {\r\n if (el.classList.contains('jpicker-focus')) {\r\n el.classList.remove('jpicker-focus');\r\n\r\n // Start tracking the element\r\n tracking(obj, false);\r\n\r\n if (typeof obj.options.onclose == 'function') {\r\n obj.options.onclose(el, obj);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create floating picker\r\n */\r\n var init = function() {\r\n let id = helpers.guid();\r\n\r\n // Class\r\n el.classList.add('jpicker');\r\n el.setAttribute('role', 'combobox');\r\n el.setAttribute('aria-haspopup', 'listbox');\r\n el.setAttribute('aria-expanded', 'false');\r\n el.setAttribute('aria-controls', id);\r\n el.setAttribute('tabindex', '0');\r\n el.onmousedown = function(e) {\r\n if (! el.classList.contains('jpicker-focus')) {\r\n obj.open();\r\n }\r\n }\r\n\r\n // Dropdown Header\r\n dropdownHeader = document.createElement('div');\r\n dropdownHeader.classList.add('jpicker-header');\r\n\r\n // Dropdown content\r\n dropdownContent = document.createElement('div');\r\n dropdownContent.setAttribute('id', id);\r\n dropdownContent.setAttribute('role', 'listbox');\r\n dropdownContent.classList.add('jpicker-content');\r\n dropdownContent.onclick = function(e) {\r\n var item = helpers.findElement(e.target, 'jpicker-item');\r\n if (item) {\r\n if (item.parentNode === dropdownContent) {\r\n // Update label\r\n obj.setValue(item.k, e);\r\n }\r\n }\r\n }\r\n // Append content and header\r\n el.appendChild(dropdownHeader);\r\n el.appendChild(dropdownContent);\r\n\r\n // Default value\r\n el.value = options.value || 0;\r\n\r\n // Set options\r\n obj.setOptions(options);\r\n\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, obj);\r\n }\r\n\r\n // Change\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n return obj.getValue();\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n // Reference\r\n el.picker = obj;\r\n }\r\n\r\n init();\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/toolbar.js\n\r\n\r\n\r\n\r\n\r\nfunction Toolbar(el, options) {\r\n // New instance\r\n var obj = { type:'toolbar' };\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n app: null,\r\n container: false,\r\n badge: false,\r\n title: false,\r\n responsive: false,\r\n maxWidth: null,\r\n bottom: true,\r\n items: [],\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n if (! el && options.app && options.app.el) {\r\n el = document.createElement('div');\r\n options.app.el.appendChild(el);\r\n }\r\n\r\n // Arrow\r\n var toolbarArrow = document.createElement('div');\r\n toolbarArrow.classList.add('jtoolbar-item');\r\n toolbarArrow.classList.add('jtoolbar-arrow');\r\n\r\n var toolbarFloating = document.createElement('div');\r\n toolbarFloating.classList.add('jtoolbar-floating');\r\n toolbarArrow.appendChild(toolbarFloating);\r\n\r\n obj.selectItem = function(element) {\r\n var elements = toolbarContent.children;\r\n for (var i = 0; i < elements.length; i++) {\r\n if (element != elements[i]) {\r\n elements[i].classList.remove('jtoolbar-selected');\r\n }\r\n }\r\n element.classList.add('jtoolbar-selected');\r\n }\r\n\r\n obj.hide = function() {\r\n animation.slideBottom(el, 0, function() {\r\n el.style.display = 'none';\r\n });\r\n }\r\n\r\n obj.show = function() {\r\n el.style.display = '';\r\n animation.slideBottom(el, 1);\r\n }\r\n\r\n obj.get = function() {\r\n return el;\r\n }\r\n\r\n obj.setBadge = function(index, value) {\r\n toolbarContent.children[index].children[1].firstChild.innerHTML = value;\r\n }\r\n\r\n obj.destroy = function() {\r\n toolbar.remove();\r\n el.innerHTML = '';\r\n }\r\n\r\n obj.update = function(a, b) {\r\n for (var i = 0; i < toolbarContent.children.length; i++) {\r\n // Toolbar element\r\n var toolbarItem = toolbarContent.children[i];\r\n // State management\r\n if (typeof(toolbarItem.updateState) == 'function') {\r\n toolbarItem.updateState(el, obj, toolbarItem, a, b);\r\n }\r\n }\r\n for (var i = 0; i < toolbarFloating.children.length; i++) {\r\n // Toolbar element\r\n var toolbarItem = toolbarFloating.children[i];\r\n // State management\r\n if (typeof(toolbarItem.updateState) == 'function') {\r\n toolbarItem.updateState(el, obj, toolbarItem, a, b);\r\n }\r\n }\r\n }\r\n\r\n obj.create = function(items) {\r\n // Reset anything in the toolbar\r\n toolbarContent.innerHTML = '';\r\n // Create elements in the toolbar\r\n for (var i = 0; i < items.length; i++) {\r\n var toolbarItem = document.createElement('div');\r\n toolbarItem.classList.add('jtoolbar-item');\r\n\r\n if (items[i].width) {\r\n toolbarItem.style.width = parseInt(items[i].width) + 'px'; \r\n }\r\n\r\n if (items[i].k) {\r\n toolbarItem.k = items[i].k;\r\n }\r\n\r\n if (items[i].tooltip) {\r\n toolbarItem.setAttribute('title', items[i].tooltip);\r\n toolbarItem.setAttribute('aria-label', items[i].tooltip);\r\n }\r\n\r\n // Id\r\n if (items[i].id) {\r\n toolbarItem.setAttribute('id', items[i].id);\r\n }\r\n\r\n // Selected\r\n if (items[i].updateState) {\r\n toolbarItem.updateState = items[i].updateState;\r\n }\r\n\r\n if (items[i].active) {\r\n toolbarItem.classList.add('jtoolbar-active');\r\n }\r\n\r\n if (items[i].disabled) {\r\n toolbarItem.classList.add('jtoolbar-disabled');\r\n }\r\n\r\n if (items[i].type == 'select' || items[i].type == 'dropdown') {\r\n Picker(toolbarItem, items[i]);\r\n } else if (items[i].type == 'divisor') {\r\n toolbarItem.classList.add('jtoolbar-divisor');\r\n } else if (items[i].type == 'label') {\r\n toolbarItem.classList.add('jtoolbar-label');\r\n toolbarItem.innerHTML = items[i].content;\r\n } else {\r\n // Material icons\r\n var toolbarIcon = document.createElement('i');\r\n if (typeof(items[i].class) === 'undefined') {\r\n toolbarIcon.classList.add('material-icons');\r\n } else {\r\n var c = items[i].class.split(' ');\r\n for (var j = 0; j < c.length; j++) {\r\n toolbarIcon.classList.add(c[j]);\r\n }\r\n }\r\n toolbarIcon.innerHTML = items[i].content ? items[i].content : '';\r\n toolbarItem.setAttribute('role', 'button');\r\n toolbarItem.appendChild(toolbarIcon);\r\n\r\n // Badge options\r\n if (obj.options.badge == true) {\r\n var toolbarBadge = document.createElement('div');\r\n toolbarBadge.classList.add('jbadge');\r\n var toolbarBadgeContent = document.createElement('div');\r\n toolbarBadgeContent.innerHTML = items[i].badge ? items[i].badge : '';\r\n toolbarBadge.appendChild(toolbarBadgeContent);\r\n toolbarItem.appendChild(toolbarBadge);\r\n }\r\n\r\n // Title\r\n if (items[i].title) {\r\n if (obj.options.title == true) {\r\n var toolbarTitle = document.createElement('span');\r\n toolbarTitle.innerHTML = items[i].title;\r\n toolbarItem.appendChild(toolbarTitle);\r\n } else {\r\n toolbarItem.setAttribute('title', items[i].title);\r\n }\r\n }\r\n\r\n if (obj.options.app && items[i].route) {\r\n // Route\r\n toolbarItem.route = items[i].route;\r\n // Onclick for route\r\n toolbarItem.onclick = function() {\r\n obj.options.app.pages(this.route);\r\n }\r\n // Create pages\r\n obj.options.app.pages(items[i].route, {\r\n toolbarItem: toolbarItem,\r\n closed: true\r\n });\r\n }\r\n\r\n // Render\r\n if (typeof(items[i].render) === 'function') {\r\n items[i].render(toolbarItem, items[i]);\r\n }\r\n }\r\n\r\n if (items[i].onclick) {\r\n toolbarItem.onclick = items[i].onclick.bind(items[i], el, obj, toolbarItem);\r\n }\r\n\r\n toolbarContent.appendChild(toolbarItem);\r\n }\r\n\r\n // Fits to the page\r\n setTimeout(function() {\r\n obj.refresh();\r\n }, 0);\r\n }\r\n\r\n obj.open = function() {\r\n toolbarArrow.classList.add('jtoolbar-arrow-selected');\r\n\r\n var rectElement = el.getBoundingClientRect();\r\n var rect = toolbarFloating.getBoundingClientRect();\r\n if (rect.bottom > window.innerHeight || obj.options.bottom) {\r\n toolbarFloating.style.bottom = '0';\r\n } else {\r\n toolbarFloating.style.removeProperty('bottom');\r\n }\r\n\r\n toolbarFloating.style.right = '0';\r\n\r\n toolbarArrow.children[0].focus();\r\n // Start tracking\r\n tracking(obj, true);\r\n }\r\n\r\n obj.close = function() {\r\n toolbarArrow.classList.remove('jtoolbar-arrow-selected')\r\n // End tracking\r\n tracking(obj, false);\r\n }\r\n\r\n obj.refresh = function() {\r\n if (obj.options.responsive == true) {\r\n // Width of the c\r\n var rect = el.parentNode.getBoundingClientRect();\r\n if (! obj.options.maxWidth) {\r\n obj.options.maxWidth = rect.width;\r\n }\r\n // Available parent space\r\n var available = parseInt(obj.options.maxWidth);\r\n // Remove arrow\r\n if (toolbarArrow.parentNode) {\r\n toolbarArrow.parentNode.removeChild(toolbarArrow);\r\n }\r\n // Move all items to the toolbar\r\n while (toolbarFloating.firstChild) {\r\n toolbarContent.appendChild(toolbarFloating.firstChild);\r\n }\r\n // Toolbar is larger than the parent, move elements to the floating element\r\n if (available < toolbarContent.offsetWidth) {\r\n // Give space to the floating element\r\n available -= 50;\r\n // Move to the floating option\r\n while (toolbarContent.lastChild && available < toolbarContent.offsetWidth) {\r\n toolbarFloating.insertBefore(toolbarContent.lastChild, toolbarFloating.firstChild);\r\n }\r\n }\r\n // Show arrow\r\n if (toolbarFloating.children.length > 0) {\r\n toolbarContent.appendChild(toolbarArrow);\r\n }\r\n }\r\n }\r\n\r\n obj.setReadonly = function(state) {\r\n state = state ? 'add' : 'remove';\r\n el.classList[state]('jtoolbar-disabled');\r\n }\r\n\r\n el.onclick = function(e) {\r\n var element = helpers.findElement(e.target, 'jtoolbar-item');\r\n if (element) {\r\n obj.selectItem(element);\r\n }\r\n\r\n if (e.target.classList.contains('jtoolbar-arrow')) {\r\n obj.open();\r\n }\r\n }\r\n\r\n window.addEventListener('resize', function() {\r\n obj.refresh();\r\n });\r\n\r\n // Toolbar\r\n el.classList.add('jtoolbar');\r\n // Reset content\r\n el.innerHTML = '';\r\n // Container\r\n if (obj.options.container == true) {\r\n el.classList.add('jtoolbar-container');\r\n }\r\n // Content\r\n var toolbarContent = document.createElement('div');\r\n el.appendChild(toolbarContent);\r\n // Special toolbar for mobile applications\r\n if (obj.options.app) {\r\n el.classList.add('jtoolbar-mobile');\r\n }\r\n // Create toolbar\r\n obj.create(obj.options.items);\r\n // Shortcut\r\n el.toolbar = obj;\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/utils/filter.js\n\r\n// Valid tags\r\nconst validTags = [\r\n 'html','body','address','span', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'b', 'i', 'blockquote',\r\n 'strong', 'em', 'ul', 'ol', 'li', 'a', 'code', 'pre', 'hr', 'br', 'img',\r\n 'figure', 'picture', 'figcaption', 'iframe', 'table', 'thead', 'tbody', 'tfoot', 'tr',\r\n 'th', 'td', 'caption', 'u', 'del', 'ins', 'sub', 'sup', 'small', 'mark',\r\n 'input', 'textarea', 'select', 'option', 'button', 'label', 'fieldset',\r\n 'legend', 'audio', 'video', 'abbr', 'cite', 'kbd', 'section', 'article',\r\n 'nav', 'aside', 'header', 'footer', 'main', 'details', 'summary', 'svg', 'line', 'source'\r\n];\r\n// Valid properties\r\nconst validProperty = ['width', 'height', 'align', 'border', 'src', 'tabindex'];\r\n// Valid CSS attributes\r\nconst validStyle = ['color', 'font-weight', 'font-size', 'background', 'background-color', 'margin'];\r\n\r\nconst parse = function(element, img) {\r\n // Remove elements that are not white-listed\r\n if (element.tagName && validTags.indexOf(element.tagName.toLowerCase()) === -1) {\r\n if (element.innerText) {\r\n element.innerHTML = element.innerText;\r\n }\r\n }\r\n // Remove attributes\r\n if (element.attributes && element.attributes.length) {\r\n let style = null;\r\n // Process style attribute\r\n let elementStyle = element.getAttribute('style');\r\n if (elementStyle) {\r\n style = [];\r\n let t = elementStyle.split(';');\r\n for (let j = 0; j < t.length; j++) {\r\n let v = t[j].trim().split(':');\r\n if (validStyle.indexOf(v[0].trim()) >= 0) {\r\n let k = v.shift();\r\n v = v.join(':');\r\n style.push(k + ':' + v);\r\n }\r\n }\r\n }\r\n // Process image\r\n if (element.tagName.toUpperCase() === 'IMG') {\r\n if (! element.src) {\r\n element.parentNode.removeChild(element);\r\n } else {\r\n // Check if is data\r\n element.setAttribute('tabindex', '900');\r\n // Check attributes for persistence\r\n img.push(element.src);\r\n }\r\n }\r\n // Remove attributes\r\n let attr = [];\r\n for (let i = 0; i < element.attributes.length; i++) {\r\n attr.push(element.attributes[i].name);\r\n }\r\n if (attr.length) {\r\n attr.forEach(function (v) {\r\n if (validProperty.indexOf(v) === -1) {\r\n element.removeAttribute(v);\r\n } else {\r\n // Protection XSS\r\n let at = element.getAttribute(v);\r\n if (at.indexOf('<') !== -1) {\r\n element.setAttribute(v, at.replace('<', '&#60;'));\r\n }\r\n }\r\n });\r\n }\r\n element.style = '';\r\n // Add valid style\r\n if (style && style.length) {\r\n element.setAttribute('style', style.join(';'));\r\n }\r\n }\r\n // Parse children\r\n if (element.children.length) {\r\n for (let i = element.children.length; i > 0; i--) {\r\n parse(element.children[i - 1], img);\r\n }\r\n }\r\n}\r\n\r\nconst filter = function(data, img) {\r\n if (data) {\r\n data = data.replace(new RegExp('<!--(.*?)-->', 'gsi'), '');\r\n }\r\n let parser = new DOMParser();\r\n let d = parser.parseFromString(data, \"text/html\");\r\n parse(d, img);\r\n let div = document.createElement('div');\r\n div.innerHTML = d.firstChild.innerHTML;\r\n return div;\r\n}\r\n\r\n/* harmony default export */ var utils_filter = (filter);\n;// CONCATENATED MODULE: ./src/plugins/editor.js\n\r\n\r\n\r\n\r\n\r\n\r\nfunction Editor() {\r\n var Component = (function(el, options) {\r\n // New instance\r\n var obj = { type:'editor' };\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n // Load data from a remove location\r\n url: null,\r\n // Initial HTML content\r\n value: '',\r\n // Initial snippet\r\n snippet: null,\r\n // Add toolbar\r\n toolbar: true,\r\n toolbarOnTop: false,\r\n // Website parser is to read websites and images from cross domain\r\n remoteParser: null,\r\n // Placeholder\r\n placeholder: null,\r\n // Parse URL\r\n filterPaste: true,\r\n // Accept drop files\r\n dropZone: true,\r\n dropAsSnippet: false,\r\n acceptImages: true,\r\n acceptFiles: false,\r\n maxFileSize: 5000000,\r\n allowImageResize: true,\r\n // Style\r\n maxHeight: null,\r\n height: null,\r\n focus: false,\r\n // Events\r\n onclick: null,\r\n onfocus: null,\r\n onblur: null,\r\n onload: null,\r\n onkeyup: null,\r\n onkeydown: null,\r\n onchange: null,\r\n extensions: null,\r\n type: null,\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Private controllers\r\n var editorTimer = null;\r\n var editorAction = null;\r\n var files = [];\r\n\r\n // Keep the reference for the container\r\n obj.el = el;\r\n\r\n if (typeof(obj.options.onclick) == 'function') {\r\n el.onclick = function(e) {\r\n obj.options.onclick(el, obj, e);\r\n }\r\n }\r\n\r\n // Prepare container\r\n el.classList.add('jeditor-container');\r\n\r\n // Snippet\r\n var snippet = document.createElement('div');\r\n snippet.className = 'jsnippet';\r\n snippet.setAttribute('contenteditable', false);\r\n\r\n // Toolbar\r\n var toolbar = document.createElement('div');\r\n toolbar.className = 'jeditor-toolbar';\r\n\r\n obj.editor = document.createElement('div');\r\n obj.editor.setAttribute('contenteditable', true);\r\n obj.editor.setAttribute('spellcheck', false);\r\n obj.editor.classList.add('jeditor');\r\n\r\n // Placeholder\r\n if (obj.options.placeholder) {\r\n obj.editor.setAttribute('data-placeholder', obj.options.placeholder);\r\n }\r\n\r\n // Max height\r\n if (obj.options.maxHeight || obj.options.height) {\r\n obj.editor.style.overflowY = 'auto';\r\n\r\n if (obj.options.maxHeight) {\r\n obj.editor.style.maxHeight = obj.options.maxHeight;\r\n }\r\n if (obj.options.height) {\r\n obj.editor.style.height = obj.options.height;\r\n }\r\n }\r\n\r\n // Set editor initial value\r\n if (obj.options.url) {\r\n ajax({\r\n url: obj.options.url,\r\n dataType: 'html',\r\n success: function(result) {\r\n obj.editor.innerHTML = result;\r\n\r\n Component.setCursor(obj.editor, obj.options.focus == 'initial' ? true : false);\r\n }\r\n })\r\n } else {\r\n if (obj.options.value) {\r\n obj.editor.innerHTML = obj.options.value;\r\n } else {\r\n // Create from existing elements\r\n for (var i = 0; i < el.children.length; i++) {\r\n obj.editor.appendChild(el.children[i]);\r\n }\r\n }\r\n }\r\n\r\n // Make sure element is empty\r\n el.innerHTML = '';\r\n\r\n /**\r\n * Onchange event controllers\r\n */\r\n var change = function(e) {\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, obj, e);\r\n }\r\n\r\n // Update value\r\n obj.options.value = obj.getData();\r\n\r\n // Lemonade JS\r\n if (el.value != obj.options.value) {\r\n el.value = obj.options.value;\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 /**\r\n * Extract images from a HTML string\r\n */\r\n var extractImageFromHtml = function(html) {\r\n let img = [];\r\n // Create temp element\r\n var div = document.createElement('div');\r\n utils_filter(html, img);\r\n if (img.length) {\r\n for (var i = 0; i < img.length; i++) {\r\n obj.addImage(img[i]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Insert node at caret\r\n */\r\n var insertNodeAtCaret = function(newNode) {\r\n var sel, range;\r\n\r\n if (window.getSelection) {\r\n sel = window.getSelection();\r\n if (sel.rangeCount) {\r\n range = sel.getRangeAt(0);\r\n var selectedText = range.toString();\r\n range.deleteContents();\r\n range.insertNode(newNode);\r\n // move the cursor after element\r\n range.setStartAfter(newNode);\r\n range.setEndAfter(newNode);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n }\r\n }\r\n\r\n var updateTotalImages = function() {\r\n var o = null;\r\n if (o = snippet.children[0]) {\r\n // Make sure is a grid\r\n if (! o.classList.contains('jslider-grid')) {\r\n o.classList.add('jslider-grid');\r\n }\r\n // Quantify of images\r\n var number = o.children.length;\r\n // Set the configuration of the grid\r\n o.setAttribute('data-number', number > 4 ? 4 : number);\r\n // Total of images inside the grid\r\n if (number > 4) {\r\n o.setAttribute('data-total', number - 4);\r\n } else {\r\n o.removeAttribute('data-total');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Append image to the snippet\r\n */\r\n var appendImage = function(image) {\r\n if (! snippet.innerHTML) {\r\n obj.appendSnippet({});\r\n }\r\n snippet.children[0].appendChild(image);\r\n updateTotalImages();\r\n }\r\n\r\n /**\r\n * Append snippet\r\n * @Param object data\r\n */\r\n obj.appendSnippet = function(data) {\r\n // Reset snippet\r\n snippet.innerHTML = '';\r\n\r\n // Attributes\r\n var a = [ 'image', 'title', 'description', 'host', 'url' ];\r\n\r\n for (var i = 0; i < a.length; i++) {\r\n var div = document.createElement('div');\r\n div.className = 'jsnippet-' + a[i];\r\n div.setAttribute('data-k', a[i]);\r\n snippet.appendChild(div);\r\n if (data[a[i]]) {\r\n if (a[i] == 'image') {\r\n if (! Array.isArray(data.image)) {\r\n data.image = [ data.image ];\r\n }\r\n for (var j = 0; j < data.image.length; j++) {\r\n var img = document.createElement('img');\r\n img.src = data.image[j];\r\n div.appendChild(img);\r\n }\r\n } else {\r\n div.innerHTML = data[a[i]];\r\n }\r\n }\r\n }\r\n\r\n obj.editor.appendChild(document.createElement('br'));\r\n obj.editor.appendChild(snippet);\r\n }\r\n\r\n /**\r\n * Set editor value\r\n */\r\n obj.setData = function(o) {\r\n if (typeof(o) == 'object') {\r\n obj.editor.innerHTML = o.content;\r\n } else {\r\n obj.editor.innerHTML = o;\r\n }\r\n\r\n if (obj.options.focus) {\r\n Component.setCursor(obj.editor, true);\r\n }\r\n\r\n // Reset files container\r\n files = [];\r\n }\r\n\r\n obj.getFiles = function() {\r\n var f = obj.editor.querySelectorAll('.jfile');\r\n var d = [];\r\n for (var i = 0; i < f.length; i++) {\r\n if (files[f[i].src]) {\r\n d.push(files[f[i].src]);\r\n }\r\n }\r\n return d;\r\n }\r\n\r\n obj.getText = function() {\r\n return obj.editor.innerText;\r\n }\r\n\r\n /**\r\n * Get editor data\r\n */\r\n obj.getData = function(json) {\r\n if (! json) {\r\n var data = obj.editor.innerHTML;\r\n } else {\r\n var data = {\r\n content : '',\r\n }\r\n\r\n // Get snippet\r\n if (snippet.innerHTML) {\r\n var index = 0;\r\n data.snippet = {};\r\n for (var i = 0; i < snippet.children.length; i++) {\r\n // Get key from element\r\n var key = snippet.children[i].getAttribute('data-k');\r\n if (key) {\r\n if (key == 'image') {\r\n if (! data.snippet.image) {\r\n data.snippet.image = [];\r\n }\r\n // Get all images\r\n for (var j = 0; j < snippet.children[i].children.length; j++) {\r\n data.snippet.image.push(snippet.children[i].children[j].getAttribute('src'))\r\n }\r\n } else {\r\n data.snippet[key] = snippet.children[i].innerHTML;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Get files\r\n var f = Object.keys(files);\r\n if (f.length) {\r\n data.files = [];\r\n for (var i = 0; i < f.length; i++) {\r\n data.files.push(files[f[i]]);\r\n }\r\n }\r\n\r\n // Get content\r\n var d = document.createElement('div');\r\n d.innerHTML = obj.editor.innerHTML;\r\n var s = d.querySelector('.jsnippet');\r\n if (s) {\r\n s.remove();\r\n }\r\n\r\n var text = d.innerHTML;\r\n text = text.replace(/<br>/g, \"\\n\");\r\n text = text.replace(/<\\/div>/g, \"<\\/div>\\n\");\r\n text = text.replace(/<(?:.|\\n)*?>/gm, \"\");\r\n data.content = text.trim();\r\n\r\n // Process extensions\r\n processExtensions('getData', data);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n // Reset\r\n obj.reset = function() {\r\n obj.editor.innerHTML = '';\r\n snippet.innerHTML = '';\r\n files = [];\r\n }\r\n\r\n obj.addPdf = function(data) {\r\n if (data.result.substr(0,4) != 'data') {\r\n console.error('Invalid source');\r\n } else {\r\n var canvas = document.createElement('canvas');\r\n canvas.width = 60;\r\n canvas.height = 60;\r\n\r\n var img = new Image();\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(function(blob) {\r\n var newImage = document.createElement('img');\r\n newImage.src = window.URL.createObjectURL(blob);\r\n newImage.title = data.name;\r\n newImage.className = 'jfile pdf';\r\n\r\n files[newImage.src] = {\r\n file: newImage.src,\r\n extension: 'pdf',\r\n content: data.result,\r\n }\r\n\r\n //insertNodeAtCaret(newImage);\r\n document.execCommand('insertHtml', false, newImage.outerHTML);\r\n });\r\n }\r\n }\r\n\r\n obj.addImage = function(src, asSnippet) {\r\n if (! obj.options.acceptImages) {\r\n return;\r\n }\r\n\r\n if (! src) {\r\n src = '';\r\n }\r\n\r\n if (src.substr(0,4) != 'data' && ! obj.options.remoteParser) {\r\n console.error('remoteParser not defined in your initialization');\r\n } else {\r\n // This is to process cross domain images\r\n if (src.substr(0,4) == 'data') {\r\n var extension = src.split(';')\r\n extension = extension[0].split('/');\r\n extension = extension[1];\r\n } else {\r\n var extension = src.substr(src.lastIndexOf('.') + 1);\r\n // Work for cross browsers\r\n src = obj.options.remoteParser + src;\r\n }\r\n\r\n var img = new Image();\r\n\r\n img.onload = function onload() {\r\n var canvas = document.createElement('canvas');\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\r\n\r\n canvas.toBlob(function(blob) {\r\n var newImage = document.createElement('img');\r\n newImage.src = window.URL.createObjectURL(blob);\r\n newImage.classList.add('jfile');\r\n newImage.setAttribute('tabindex', '900');\r\n newImage.setAttribute('width', img.width);\r\n newImage.setAttribute('height', img.height);\r\n files[newImage.src] = {\r\n file: newImage.src,\r\n extension: extension,\r\n content: canvas.toDataURL(),\r\n }\r\n\r\n if (obj.options.dropAsSnippet || asSnippet) {\r\n appendImage(newImage);\r\n // Just to understand the attachment is part of a snippet\r\n files[newImage.src].snippet = true;\r\n } else {\r\n //insertNodeAtCaret(newImage);\r\n document.execCommand('insertHtml', false, newImage.outerHTML);\r\n }\r\n\r\n change();\r\n });\r\n };\r\n\r\n img.src = src;\r\n }\r\n }\r\n\r\n obj.addFile = function(files) {\r\n var reader = [];\r\n\r\n for (var i = 0; i < files.length; i++) {\r\n if (files[i].size > obj.options.maxFileSize) {\r\n alert('The file is too big');\r\n } else {\r\n // Only PDF or Images\r\n var type = files[i].type.split('/');\r\n\r\n if (type[0] == 'image') {\r\n type = 1;\r\n } else if (type[1] == 'pdf') {\r\n type = 2;\r\n } else {\r\n type = 0;\r\n }\r\n\r\n if (type) {\r\n // Create file\r\n reader[i] = new FileReader();\r\n reader[i].index = i;\r\n reader[i].type = type;\r\n reader[i].name = files[i].name;\r\n reader[i].date = files[i].lastModified;\r\n reader[i].size = files[i].size;\r\n reader[i].addEventListener(\"load\", function (data) {\r\n // Get result\r\n if (data.target.type == 2) {\r\n if (obj.options.acceptFiles == true) {\r\n obj.addPdf(data.target);\r\n }\r\n } else {\r\n obj.addImage(data.target.result);\r\n }\r\n }, false);\r\n\r\n reader[i].readAsDataURL(files[i])\r\n } else {\r\n alert('The extension is not allowed');\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Destroy\r\n obj.destroy = function() {\r\n obj.editor.removeEventListener('mouseup', editorMouseUp);\r\n obj.editor.removeEventListener('mousedown', editorMouseDown);\r\n obj.editor.removeEventListener('mousemove', editorMouseMove);\r\n obj.editor.removeEventListener('keyup', editorKeyUp);\r\n obj.editor.removeEventListener('keydown', editorKeyDown);\r\n obj.editor.removeEventListener('dragstart', editorDragStart);\r\n obj.editor.removeEventListener('dragenter', editorDragEnter);\r\n obj.editor.removeEventListener('dragover', editorDragOver);\r\n obj.editor.removeEventListener('drop', editorDrop);\r\n obj.editor.removeEventListener('paste', editorPaste);\r\n obj.editor.removeEventListener('blur', editorBlur);\r\n obj.editor.removeEventListener('focus', editorFocus);\r\n\r\n el.editor = null;\r\n el.classList.remove('jeditor-container');\r\n\r\n toolbar.remove();\r\n snippet.remove();\r\n obj.editor.remove();\r\n }\r\n\r\n obj.upload = function() {\r\n helpers.click(obj.file);\r\n }\r\n\r\n var select = function(e) {\r\n var s = window.getSelection()\r\n var r = document.createRange();\r\n r.selectNode(e);\r\n s.addRange(r)\r\n }\r\n\r\n var editorPaste = function(e) {\r\n if (obj.options.filterPaste == true) {\r\n if (e.clipboardData || e.originalEvent.clipboardData) {\r\n var html = (e.originalEvent || e).clipboardData.getData('text/html');\r\n var text = (e.originalEvent || e).clipboardData.getData('text/plain');\r\n var file = (e.originalEvent || e).clipboardData.files\r\n } else if (window.clipboardData) {\r\n var html = window.clipboardData.getData('Html');\r\n var text = window.clipboardData.getData('Text');\r\n var file = window.clipboardData.files\r\n }\r\n\r\n if (file.length) {\r\n // Paste a image from the clipboard\r\n obj.addFile(file);\r\n } else {\r\n if (! html) {\r\n html = text.split('\\r\\n');\r\n if (! e.target.innerText) {\r\n html.map(function(v) {\r\n var d = document.createElement('div');\r\n d.innerText = v;\r\n obj.editor.appendChild(d);\r\n });\r\n } else {\r\n html = html.map(function(v) {\r\n return '<div>' + v + '</div>';\r\n });\r\n document.execCommand('insertText', false, html.join(''));\r\n }\r\n } else {\r\n let img = [];\r\n var d = utils_filter(html, img);\r\n if (img.length) {\r\n for (var i = 0; i < img.length; i++) {\r\n obj.addImage(img[i]);\r\n }\r\n }\r\n // Paste to the editor\r\n //insertNodeAtCaret(d);\r\n document.execCommand('insertHtml', false, d.innerHTML);\r\n }\r\n }\r\n\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n var editorDragStart = function(e) {\r\n if (editorAction && editorAction.e) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n var editorDragEnter = function(e) {\r\n if (editorAction || obj.options.dropZone == false) {\r\n // Do nothing\r\n } else {\r\n el.classList.add('jeditor-dragging');\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n var editorDragOver = function(e) {\r\n if (editorAction || obj.options.dropZone == false) {\r\n // Do nothing\r\n } else {\r\n if (editorTimer) {\r\n clearTimeout(editorTimer);\r\n }\r\n\r\n editorTimer = setTimeout(function() {\r\n el.classList.remove('jeditor-dragging');\r\n }, 100);\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n var editorDrop = function(e) {\r\n if (editorAction || obj.options.dropZone === false) {\r\n // Do nothing\r\n } else {\r\n // Position caret on the drop\r\n let range = null;\r\n if (document.caretRangeFromPoint) {\r\n range=document.caretRangeFromPoint(e.clientX, e.clientY);\r\n } else if (e.rangeParent) {\r\n range=document.createRange();\r\n range.setStart(e.rangeParent,e.rangeOffset);\r\n }\r\n let sel = window.getSelection();\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n sel.anchorNode.parentNode.focus();\r\n\r\n let html = (e.originalEvent || e).dataTransfer.getData('text/html');\r\n let text = (e.originalEvent || e).dataTransfer.getData('text/plain');\r\n let file = (e.originalEvent || e).dataTransfer.files;\r\n\r\n if (file.length) {\r\n obj.addFile(file);\r\n } else if (text) {\r\n extractImageFromHtml(html);\r\n }\r\n\r\n el.classList.remove('jeditor-dragging');\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n var editorBlur = function(e) {\r\n // Process extensions\r\n processExtensions('onevent', e);\r\n // Apply changes\r\n change(e);\r\n // Blur\r\n if (typeof(obj.options.onblur) == 'function') {\r\n obj.options.onblur(el, obj, e);\r\n }\r\n }\r\n\r\n var editorFocus = function(e) {\r\n // Focus\r\n if (typeof(obj.options.onfocus) == 'function') {\r\n obj.options.onfocus(el, obj, e);\r\n }\r\n }\r\n\r\n var editorKeyUp = function(e) {\r\n if (! obj.editor.innerHTML) {\r\n obj.editor.innerHTML = '<div><br></div>';\r\n }\r\n if (typeof(obj.options.onkeyup) == 'function') {\r\n obj.options.onkeyup(el, obj, e);\r\n }\r\n }\r\n\r\n var editorKeyDown = function(e) {\r\n // Process extensions\r\n processExtensions('onevent', e);\r\n\r\n if (e.key == 'Delete') {\r\n if (e.target.tagName == 'IMG') {\r\n var parent = e.target.parentNode;\r\n select(e.target);\r\n if (parent.classList.contains('jsnippet-image')) {\r\n updateTotalImages();\r\n }\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onkeydown) == 'function') {\r\n obj.options.onkeydown(el, obj, e);\r\n }\r\n }\r\n\r\n var editorMouseUp = function(e) {\r\n if (editorAction && editorAction.e) {\r\n editorAction.e.classList.remove('resizing');\r\n\r\n if (editorAction.e.changed == true) {\r\n var image = editorAction.e.cloneNode()\r\n image.width = parseInt(editorAction.e.style.width) || editorAction.e.getAttribute('width');\r\n image.height = parseInt(editorAction.e.style.height) || editorAction.e.getAttribute('height');\r\n editorAction.e.style.width = '';\r\n editorAction.e.style.height = '';\r\n select(editorAction.e);\r\n document.execCommand('insertHtml', false, image.outerHTML);\r\n }\r\n }\r\n\r\n editorAction = false;\r\n }\r\n\r\n var editorMouseDown = function(e) {\r\n var close = function(snippet) {\r\n var rect = snippet.getBoundingClientRect();\r\n if (rect.width - (e.clientX - rect.left) < 40 && e.clientY - rect.top < 40) {\r\n snippet.innerHTML = '';\r\n snippet.remove();\r\n }\r\n }\r\n\r\n if (e.target.tagName == 'IMG') {\r\n if (e.target.style.cursor) {\r\n var rect = e.target.getBoundingClientRect();\r\n editorAction = {\r\n e: e.target,\r\n x: e.clientX,\r\n y: e.clientY,\r\n w: rect.width,\r\n h: rect.height,\r\n d: e.target.style.cursor,\r\n }\r\n\r\n if (! e.target.getAttribute('width')) {\r\n e.target.setAttribute('width', rect.width)\r\n }\r\n\r\n if (! e.target.getAttribute('height')) {\r\n e.target.setAttribute('height', rect.height)\r\n }\r\n\r\n var s = window.getSelection();\r\n if (s.rangeCount) {\r\n for (var i = 0; i < s.rangeCount; i++) {\r\n s.removeRange(s.getRangeAt(i));\r\n }\r\n }\r\n\r\n e.target.classList.add('resizing');\r\n } else {\r\n editorAction = true;\r\n }\r\n } else {\r\n if (e.target.classList.contains('jsnippet')) {\r\n close(e.target);\r\n } else if (e.target.parentNode.classList.contains('jsnippet')) {\r\n close(e.target.parentNode);\r\n }\r\n\r\n editorAction = true;\r\n }\r\n }\r\n\r\n var editorMouseMove = function(e) {\r\n if (e.target.tagName == 'IMG' && ! e.target.parentNode.classList.contains('jsnippet-image') && obj.options.allowImageResize == true) {\r\n if (e.target.getAttribute('tabindex')) {\r\n var rect = e.target.getBoundingClientRect();\r\n if (e.clientY - rect.top < 5) {\r\n if (rect.width - (e.clientX - rect.left) < 5) {\r\n e.target.style.cursor = 'ne-resize';\r\n } else if (e.clientX - rect.left < 5) {\r\n e.target.style.cursor = 'nw-resize';\r\n } else {\r\n e.target.style.cursor = 'n-resize';\r\n }\r\n } else if (rect.height - (e.clientY - rect.top) < 5) {\r\n if (rect.width - (e.clientX - rect.left) < 5) {\r\n e.target.style.cursor = 'se-resize';\r\n } else if (e.clientX - rect.left < 5) {\r\n e.target.style.cursor = 'sw-resize';\r\n } else {\r\n e.target.style.cursor = 's-resize';\r\n }\r\n } else if (rect.width - (e.clientX - rect.left) < 5) {\r\n e.target.style.cursor = 'e-resize';\r\n } else if (e.clientX - rect.left < 5) {\r\n e.target.style.cursor = 'w-resize';\r\n } else {\r\n e.target.style.cursor = '';\r\n }\r\n }\r\n }\r\n\r\n // Move\r\n if (e.which == 1 && editorAction && editorAction.d) {\r\n if (editorAction.d == 'e-resize' || editorAction.d == 'ne-resize' || editorAction.d == 'se-resize') {\r\n editorAction.e.style.width = (editorAction.w + (e.clientX - editorAction.x));\r\n\r\n if (e.shiftKey) {\r\n var newHeight = (e.clientX - editorAction.x) * (editorAction.h / editorAction.w);\r\n editorAction.e.style.height = editorAction.h + newHeight;\r\n } else {\r\n var newHeight = null;\r\n }\r\n }\r\n\r\n if (! newHeight) {\r\n if (editorAction.d == 's-resize' || editorAction.d == 'se-resize' || editorAction.d == 'sw-resize') {\r\n if (! e.shiftKey) {\r\n editorAction.e.style.height = editorAction.h + (e.clientY - editorAction.y);\r\n }\r\n }\r\n }\r\n\r\n editorAction.e.changed = true;\r\n }\r\n }\r\n\r\n var processExtensions = function(method, data) {\r\n if (obj.options.extensions) {\r\n var ext = Object.keys(obj.options.extensions);\r\n if (ext.length) {\r\n for (var i = 0; i < ext.length; i++)\r\n if (obj.options.extensions[ext[i]] && typeof(obj.options.extensions[ext[i]][method]) == 'function') {\r\n obj.options.extensions[ext[i]][method].call(obj, data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n var loadExtensions = function() {\r\n if (obj.options.extensions) {\r\n var ext = Object.keys(obj.options.extensions);\r\n if (ext.length) {\r\n for (var i = 0; i < ext.length; i++) {\r\n if (obj.options.extensions[ext[i]] && typeof (obj.options.extensions[ext[i]]) == 'function') {\r\n obj.options.extensions[ext[i]] = obj.options.extensions[ext[i]](el, obj);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('mouseup', editorMouseUp);\r\n document.addEventListener('mousemove', editorMouseMove);\r\n obj.editor.addEventListener('mousedown', editorMouseDown);\r\n obj.editor.addEventListener('keyup', editorKeyUp);\r\n obj.editor.addEventListener('keydown', editorKeyDown);\r\n obj.editor.addEventListener('dragstart', editorDragStart);\r\n obj.editor.addEventListener('dragenter', editorDragEnter);\r\n obj.editor.addEventListener('dragover', editorDragOver);\r\n obj.editor.addEventListener('drop', editorDrop);\r\n obj.editor.addEventListener('paste', editorPaste);\r\n obj.editor.addEventListener('focus', editorFocus);\r\n obj.editor.addEventListener('blur', editorBlur);\r\n\r\n // Append editor to the container\r\n el.appendChild(obj.editor);\r\n // Snippet\r\n if (obj.options.snippet) {\r\n obj.appendSnippet(obj.options.snippet);\r\n }\r\n\r\n // Add toolbar\r\n if (obj.options.toolbar) {\r\n // Default toolbar configuration\r\n if (Array.isArray(obj.options.toolbar)) {\r\n var toolbarOptions = {\r\n container: true,\r\n responsive: true,\r\n items: obj.options.toolbar\r\n }\r\n } else if (obj.options.toolbar === true) {\r\n var toolbarOptions = {\r\n container: true,\r\n responsive: true,\r\n items: [],\r\n }\r\n } else {\r\n var toolbarOptions = obj.options.toolbar;\r\n }\r\n\r\n // Default items\r\n if (! (toolbarOptions.items && toolbarOptions.items.length)) {\r\n toolbarOptions.items = Component.getDefaultToolbar(obj);\r\n }\r\n\r\n if (obj.options.toolbarOnTop) {\r\n // Add class\r\n el.classList.add('toolbar-on-top');\r\n // Append to the DOM\r\n el.insertBefore(toolbar, el.firstChild);\r\n } else {\r\n // Add padding to the editor\r\n obj.editor.style.padding = '15px';\r\n // Append to the DOM\r\n el.appendChild(toolbar);\r\n }\r\n\r\n // Create toolbar\r\n Toolbar(toolbar, toolbarOptions);\r\n\r\n toolbar.addEventListener('click', function() {\r\n obj.editor.focus();\r\n })\r\n }\r\n\r\n // Upload file\r\n obj.file = document.createElement('input');\r\n obj.file.style.display = 'none';\r\n obj.file.type = 'file';\r\n obj.file.setAttribute('accept', 'image/*');\r\n obj.file.onchange = function() {\r\n obj.addFile(this.files);\r\n }\r\n el.appendChild(obj.file);\r\n\r\n // Focus to the editor\r\n if (obj.options.focus) {\r\n Component.setCursor(obj.editor, obj.options.focus == 'initial' ? true : false);\r\n }\r\n\r\n // Change method\r\n el.change = obj.setData;\r\n\r\n // Global generic value handler\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n // Data type\r\n var o = el.getAttribute('data-html') === 'true' ? false : true;\r\n return obj.getData(o);\r\n } else {\r\n obj.setData(val);\r\n }\r\n }\r\n\r\n loadExtensions();\r\n\r\n el.editor = obj;\r\n\r\n // Onload\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, obj, obj.editor);\r\n }\r\n\r\n return obj;\r\n });\r\n\r\n Component.setCursor = function(element, first) {\r\n element.focus();\r\n document.execCommand('selectAll');\r\n var sel = window.getSelection();\r\n var range = sel.getRangeAt(0);\r\n if (first == true) {\r\n var node = range.startContainer;\r\n var size = 0;\r\n } else {\r\n var node = range.endContainer;\r\n var size = node.length;\r\n }\r\n range.setStart(node, size);\r\n range.setEnd(node, size);\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n\r\n Component.getDefaultToolbar = function(obj) {\r\n\r\n var color = function(a,b,c) {\r\n if (! c.color) {\r\n var t = null;\r\n var colorPicker = Color(c, {\r\n onchange: function(o, v) {\r\n if (c.k === 'color') {\r\n document.execCommand('foreColor', false, v);\r\n } else {\r\n document.execCommand('backColor', false, v);\r\n }\r\n }\r\n });\r\n c.color.open();\r\n }\r\n }\r\n\r\n var items = [];\r\n\r\n items.push({\r\n content: 'undo',\r\n onclick: function() {\r\n document.execCommand('undo');\r\n }\r\n });\r\n\r\n items.push({\r\n content: 'redo',\r\n onclick: function() {\r\n document.execCommand('redo');\r\n }\r\n });\r\n\r\n items.push({\r\n type: 'divisor'\r\n });\r\n\r\n if (obj.options.toolbarOnTop) {\r\n items.push({\r\n type: 'select',\r\n width: '140px',\r\n options: ['Default', 'Verdana', 'Arial', 'Courier New'],\r\n render: function (e) {\r\n return '<span style=\"font-family:' + e + '\">' + e + '</span>';\r\n },\r\n onchange: function (a,b,c,d,e) {\r\n document.execCommand(\"fontName\", false, d);\r\n }\r\n });\r\n\r\n items.push({\r\n type: 'select',\r\n content: 'format_size',\r\n options: ['x-small', 'small', 'medium', 'large', 'x-large'],\r\n render: function (e) {\r\n return '<span style=\"font-size:' + e + '\">' + e + '</span>';\r\n },\r\n onchange: function (a,b,c,d,e) {\r\n //var html = `<span style=\"font-size: ${c}\">${text}</span>`;\r\n //document.execCommand('insertHtml', false, html);\r\n document.execCommand(\"fontSize\", false, parseInt(e)+1);\r\n //var f = window.getSelection().anchorNode.parentNode\r\n //f.removeAttribute(\"size\");\r\n //f.style.fontSize = d;\r\n }\r\n });\r\n\r\n items.push({\r\n type: 'select',\r\n options: ['format_align_left', 'format_align_center', 'format_align_right', 'format_align_justify'],\r\n render: function (e) {\r\n return '<i class=\"material-icons\">' + e + '</i>';\r\n },\r\n onchange: function (a,b,c,d,e) {\r\n var options = ['JustifyLeft','justifyCenter','justifyRight','justifyFull'];\r\n document.execCommand(options[e]);\r\n }\r\n });\r\n\r\n items.push({\r\n type: 'divisor'\r\n });\r\n\r\n items.push({\r\n content: 'format_color_text',\r\n k: 'color',\r\n onclick: color,\r\n });\r\n\r\n items.push({\r\n content: 'format_color_fill',\r\n k: 'background-color',\r\n onclick: color,\r\n });\r\n }\r\n\r\n items.push({\r\n content: 'format_bold',\r\n onclick: function(a,b,c) {\r\n document.execCommand('bold');\r\n\r\n if (document.queryCommandState(\"bold\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n items.push({\r\n content: 'format_italic',\r\n onclick: function(a,b,c) {\r\n document.execCommand('italic');\r\n\r\n if (document.queryCommandState(\"italic\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n items.push({\r\n content: 'format_underline',\r\n onclick: function(a,b,c) {\r\n document.execCommand('underline');\r\n\r\n if (document.queryCommandState(\"underline\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n items.push({\r\n type:'divisor'\r\n });\r\n\r\n items.push({\r\n content: 'format_list_bulleted',\r\n onclick: function(a,b,c) {\r\n document.execCommand('insertUnorderedList');\r\n\r\n if (document.queryCommandState(\"insertUnorderedList\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n items.push({\r\n content: 'format_list_numbered',\r\n onclick: function(a,b,c) {\r\n document.execCommand('insertOrderedList');\r\n\r\n if (document.queryCommandState(\"insertOrderedList\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n items.push({\r\n content: 'format_indent_increase',\r\n onclick: function(a,b,c) {\r\n document.execCommand('indent', true, null);\r\n\r\n if (document.queryCommandState(\"indent\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n items.push({\r\n content: 'format_indent_decrease',\r\n onclick: function(a,b,c) {\r\n document.execCommand('outdent');\r\n\r\n if (document.queryCommandState(\"outdent\")) {\r\n c.classList.add('selected');\r\n } else {\r\n c.classList.remove('selected');\r\n }\r\n }\r\n });\r\n\r\n if (obj.options.toolbarOnTop) {\r\n items.push({\r\n type: 'divisor'\r\n });\r\n\r\n items.push({\r\n content: 'photo',\r\n onclick: function () {\r\n obj.upload();\r\n }\r\n });\r\n\r\n items.push({\r\n type: 'select',\r\n content: 'table_view',\r\n columns: 8,\r\n grid: 8,\r\n right: true,\r\n options: [\r\n '0x0', '1x0', '2x0', '3x0', '4x0', '5x0', '6x0', '7x0',\r\n '0x1', '1x1', '2x1', '3x1', '4x1', '5x1', '6x1', '7x1',\r\n '0x2', '1x2', '2x2', '3x2', '4x2', '5x2', '6x2', '7x2',\r\n '0x3', '1x3', '2x3', '3x3', '4x3', '5x3', '6x3', '7x3',\r\n '0x4', '1x4', '2x4', '3x4', '4x4', '5x4', '6x4', '7x4',\r\n '0x5', '1x5', '2x5', '3x5', '4x5', '5x5', '6x5', '7x5',\r\n '0x6', '1x6', '2x6', '3x6', '4x6', '5x6', '6x6', '7x6',\r\n '0x7', '1x7', '2x7', '3x7', '4x7', '5x7', '6x7', '7x7',\r\n ],\r\n render: function (e, item) {\r\n if (item) {\r\n item.onmouseover = this.onmouseover;\r\n e = e.split('x');\r\n item.setAttribute('data-x', e[0]);\r\n item.setAttribute('data-y', e[1]);\r\n }\r\n var element = document.createElement('div');\r\n item.style.margin = '1px';\r\n item.style.border = '1px solid #ddd';\r\n return element;\r\n },\r\n onmouseover: function (e) {\r\n var x = parseInt(e.target.getAttribute('data-x'));\r\n var y = parseInt(e.target.getAttribute('data-y'));\r\n for (var i = 0; i < e.target.parentNode.children.length; i++) {\r\n var element = e.target.parentNode.children[i];\r\n var ex = parseInt(element.getAttribute('data-x'));\r\n var ey = parseInt(element.getAttribute('data-y'));\r\n if (ex <= x && ey <= y) {\r\n element.style.backgroundColor = '#cae1fc';\r\n element.style.borderColor = '#2977ff';\r\n } else {\r\n element.style.backgroundColor = '';\r\n element.style.borderColor = '#ddd';\r\n }\r\n }\r\n },\r\n onchange: function (a, b, c) {\r\n c = c.split('x');\r\n var table = document.createElement('table');\r\n var tbody = document.createElement('tbody');\r\n for (var y = 0; y <= c[1]; y++) {\r\n var tr = document.createElement('tr');\r\n for (var x = 0; x <= c[0]; x++) {\r\n var td = document.createElement('td');\r\n td.innerHTML = '';\r\n tr.appendChild(td);\r\n }\r\n tbody.appendChild(tr);\r\n }\r\n table.appendChild(tbody);\r\n table.setAttribute('width', '100%');\r\n table.setAttribute('cellpadding', '6');\r\n table.setAttribute('cellspacing', '0');\r\n document.execCommand('insertHTML', false, table.outerHTML);\r\n }\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var editor = (Editor());\r\n\n;// CONCATENATED MODULE: ./src/plugins/floating.js\nfunction Floating() {\r\n var Component = (function (el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n type: 'big',\r\n title: 'Untitled',\r\n width: 510,\r\n height: 472,\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Private methods\r\n\r\n var setContent = function () {\r\n var temp = document.createElement('div');\r\n while (el.children[0]) {\r\n temp.appendChild(el.children[0]);\r\n }\r\n\r\n obj.content = document.createElement('div');\r\n obj.content.className = 'jfloating_content';\r\n obj.content.innerHTML = el.innerHTML;\r\n\r\n while (temp.children[0]) {\r\n obj.content.appendChild(temp.children[0]);\r\n }\r\n\r\n obj.container = document.createElement('div');\r\n obj.container.className = 'jfloating';\r\n obj.container.appendChild(obj.content);\r\n\r\n if (obj.options.title) {\r\n obj.container.setAttribute('title', obj.options.title);\r\n } else {\r\n obj.container.classList.add('no-title');\r\n }\r\n\r\n // validate element dimensions\r\n if (obj.options.width) {\r\n obj.container.style.width = parseInt(obj.options.width) + 'px';\r\n }\r\n\r\n if (obj.options.height) {\r\n obj.container.style.height = parseInt(obj.options.height) + 'px';\r\n }\r\n\r\n el.innerHTML = '';\r\n el.appendChild(obj.container);\r\n }\r\n\r\n var setEvents = function () {\r\n if (obj.container) {\r\n obj.container.addEventListener('click', function (e) {\r\n var rect = e.target.getBoundingClientRect();\r\n\r\n if (e.target.classList.contains('jfloating')) {\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n if (rect.width - (x - rect.left) < 50 && (y - rect.top) < 50) {\r\n setTimeout(function () {\r\n obj.close();\r\n }, 100);\r\n } else {\r\n obj.setState();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n var setType = function () {\r\n obj.container.classList.add('jfloating-' + obj.options.type);\r\n }\r\n\r\n obj.state = {\r\n isMinized: false,\r\n }\r\n\r\n obj.setState = function () {\r\n if (obj.state.isMinized) {\r\n obj.container.classList.remove('jfloating-minimized');\r\n } else {\r\n obj.container.classList.add('jfloating-minimized');\r\n }\r\n obj.state.isMinized = !obj.state.isMinized;\r\n }\r\n\r\n obj.close = function () {\r\n Components.elements.splice(Component.elements.indexOf(obj.container), 1);\r\n obj.updatePosition();\r\n el.remove();\r\n }\r\n\r\n obj.updatePosition = function () {\r\n for (var i = 0; i < Component.elements.length; i++) {\r\n var floating = Component.elements[i];\r\n var prevFloating = Component.elements[i - 1];\r\n floating.style.right = i * (prevFloating ? prevFloating.offsetWidth : floating.offsetWidth) * 1.01 + 'px';\r\n }\r\n }\r\n\r\n obj.init = function () {\r\n // Set content into root\r\n setContent();\r\n\r\n // Set dialog events\r\n setEvents();\r\n\r\n // Set dialog type\r\n setType();\r\n\r\n // Update floating position\r\n Component.elements.push(obj.container);\r\n obj.updatePosition();\r\n\r\n el.floating = obj;\r\n }\r\n\r\n obj.init();\r\n\r\n return obj;\r\n });\r\n\r\n Component.elements = [];\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var floating = (Floating());\n;// CONCATENATED MODULE: ./src/plugins/validations.js\n\r\n\r\nfunction Validations() {\r\n /**\r\n * Options: Object,\r\n * Properties:\r\n * Constraint,\r\n * Reference,\r\n * Value\r\n */\r\n\r\n const isNumeric = function(num) {\r\n return !isNaN(num) && num !== null && (typeof num !== 'string' || num.trim() !== '');\r\n }\r\n\r\n const numberCriterias = {\r\n 'between': function(value, range) {\r\n return value >= range[0] && value <= range[1];\r\n },\r\n 'not between': function(value, range) {\r\n return value < range[0] || value > range[1];\r\n },\r\n '<': function(value, range) {\r\n return value < range[0];\r\n },\r\n '<=': function(value, range) {\r\n return value <= range[0];\r\n },\r\n '>': function(value, range) {\r\n return value > range[0];\r\n },\r\n '>=': function(value, range) {\r\n return value >= range[0];\r\n },\r\n '=': function(value, range) {\r\n return value == range[0];\r\n },\r\n '!=': function(value, range) {\r\n return value != range[0];\r\n },\r\n }\r\n\r\n const dateCriterias = {\r\n 'valid date': function() {\r\n return true;\r\n },\r\n '=': function(value, range) {\r\n return value === range[0];\r\n },\r\n '!=': function(value, range) {\r\n return value !== range[0];\r\n },\r\n '<': function(value, range) {\r\n return value < range[0];\r\n },\r\n '<=': function(value, range) {\r\n return value <= range[0];\r\n },\r\n '>': function(value, range) {\r\n return value > range[0];\r\n },\r\n '>=': function(value, range) {\r\n return value >= range[0];\r\n },\r\n 'between': function(value, range) {\r\n return value >= range[0] && value <= range[1];\r\n },\r\n 'not between': function(value, range) {\r\n return value < range[0] || value > range[1];\r\n },\r\n }\r\n\r\n const textCriterias = {\r\n 'contains': function(value, range) {\r\n return value.includes(range[0]);\r\n },\r\n 'not contains': function(value, range) {\r\n return !value.includes(range[0]);\r\n },\r\n 'begins with': function(value, range) {\r\n return value.startsWith(range[0]);\r\n },\r\n 'ends with': function(value, range) {\r\n return value.endsWith(range[0]);\r\n },\r\n '=': function(value, range) {\r\n return value === range[0];\r\n },\r\n '!=': function(value, range) {\r\n return value !== range[0];\r\n },\r\n 'valid email': function(value) {\r\n var pattern = new RegExp(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/);\r\n\r\n return pattern.test(value);\r\n },\r\n 'valid url': function(value) {\r\n var pattern = new RegExp(/(((https?:\\/\\/)|(www\\.))[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|]+)/ig);\r\n\r\n return pattern.test(value);\r\n },\r\n }\r\n\r\n // Component router\r\n const component = function(value, options) {\r\n if (typeof(component[options.type]) === 'function') {\r\n if (options.allowBlank && (typeof value === 'undefined' || value === '' || value === null)) {\r\n return true;\r\n }\r\n return component[options.type].call(this, value, options);\r\n }\r\n return null;\r\n }\r\n \r\n component.url = function(data) {\r\n var pattern = new RegExp(/(((https?:\\/\\/)|(www\\.))[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|]+)/ig);\r\n return pattern.test(data) ? true : false;\r\n }\r\n\r\n component.email = function(data) {\r\n var pattern = new RegExp(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/);\r\n return data && pattern.test(data) ? true : false;\r\n }\r\n \r\n component.required = function(data) {\r\n return data && data.trim() ? true : false;\r\n }\r\n\r\n component.empty = function(data) {\r\n return typeof data === 'undefined' || data === null || (typeof data === 'string' && !data.toString().trim());\r\n }\r\n\r\n component['not exist'] = component.empty;\r\n\r\n component.notEmpty = function(data) {\r\n return !component.empty(data);\r\n }\r\n\r\n component.exist = component.notEmpty;\r\n\r\n component.number = function(data, options) {\r\n if (! isNumeric(data)) {\r\n return false;\r\n }\r\n\r\n if (!options || !options.criteria) {\r\n return true;\r\n }\r\n\r\n if (!numberCriterias[options.criteria]) {\r\n return false;\r\n }\r\n\r\n let values = options.value.map(function(num) {\r\n return parseFloat(num);\r\n })\r\n\r\n return numberCriterias[options.criteria](data, values);\r\n };\r\n\r\n component.login = function(data) {\r\n let pattern = new RegExp(/^[a-zA-Z0-9._-]+$/);\r\n return data && pattern.test(data) ? true : false;\r\n }\r\n\r\n component.list = function(data, options) {\r\n let dataType = typeof data;\r\n if (dataType !== 'string' && dataType !== 'number') {\r\n return false;\r\n }\r\n let list;\r\n if (typeof(options.value[0]) === 'string') {\r\n if (options.source) {\r\n list = options.source;\r\n } else {\r\n list = options.value[0].split(',');\r\n }\r\n } else {\r\n list = options.value[0];\r\n }\r\n\r\n if (! Array.isArray(list)) {\r\n return false;\r\n } else {\r\n let validOption = list.findIndex(function (item) {\r\n return item == data;\r\n });\r\n\r\n return validOption > -1;\r\n }\r\n }\r\n\r\n const getCurrentDateWithoutTime = function() {\r\n let date = new Date();\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n }\r\n\r\n const relativeDates = {\r\n 'one year ago': function() {\r\n let date = getCurrentDateWithoutTime();\r\n\r\n date.setFullYear(date.getFullYear() - 1);\r\n\r\n return date;\r\n },\r\n 'one month ago': function() {\r\n let date = getCurrentDateWithoutTime();\r\n\r\n date.setMonth(date.getMonth() - 1);\r\n\r\n return date;\r\n },\r\n 'one week ago': function() {\r\n let date = getCurrentDateWithoutTime();\r\n\r\n date.setDate(date.getDate() - 7);\r\n\r\n return date;\r\n },\r\n yesterday: function() {\r\n let date = getCurrentDateWithoutTime();\r\n\r\n date.setDate(date.getDate() - 1);\r\n\r\n return date;\r\n },\r\n today: getCurrentDateWithoutTime,\r\n tomorrow: function() {\r\n let date = getCurrentDateWithoutTime();\r\n\r\n date.setDate(date.getDate() + 1);\r\n\r\n return date;\r\n },\r\n };\r\n\r\n component.date = function(data, options) {\r\n if (isNumeric(data) && data > 0 && data < 1000000) {\r\n data = helpers_date.numToDate(data);\r\n }\r\n\r\n if (new Date(data) == 'Invalid Date') {\r\n return false;\r\n }\r\n\r\n if (!options || !options.criteria) {\r\n return true;\r\n }\r\n\r\n if (!dateCriterias[options.criteria]) {\r\n return false;\r\n }\r\n\r\n let values = options.value.map(function(date) {\r\n if (typeof date === 'string' && relativeDates[date]) {\r\n return relativeDates[date]().getTime();\r\n }\r\n\r\n return new Date(date).getTime();\r\n });\r\n\r\n return dateCriterias[options.criteria](new Date(data).getTime(), values);\r\n }\r\n\r\n component.text = function(data, options) {\r\n if (typeof data === 'undefined' || data === null) {\r\n data = '';\r\n } else if (typeof data !== 'string') {\r\n return false;\r\n }\r\n\r\n if (!options || !options.criteria) {\r\n return true;\r\n }\r\n\r\n if (!textCriterias[options.criteria]) {\r\n return false;\r\n }\r\n\r\n return textCriterias[options.criteria](data, options.value);\r\n }\r\n\r\n component.textLength = function(data, options) {\r\n let textLength;\r\n if (typeof data === 'string') {\r\n textLength = data.length;\r\n } else if (typeof data !== 'undefined' && data !== null && typeof data.toString === 'function') {\r\n textLength = data.toString().length;\r\n } else {\r\n textLength = 0;\r\n }\r\n\r\n return component.number(textLength, options);\r\n }\r\n\r\n component.time = function(data, options) {\r\n if (! isNumeric(data)) {\r\n return false;\r\n }\r\n\r\n if (!options || !options.criteria) {\r\n return true;\r\n }\r\n\r\n if (!numberCriterias[options.criteria]) {\r\n return false;\r\n }\r\n\r\n let values = options.value.map(function(num) {\r\n return parseInt(parseFloat(num) * 10**17) / 10**17;\r\n })\r\n\r\n return numberCriterias[options.criteria](parseInt(parseFloat(data) * 10**17) / 10**17, values);\r\n };\r\n\r\n return component;\r\n}\r\n\r\n/* harmony default export */ var validations = (Validations());\n;// CONCATENATED MODULE: ./src/plugins/form.js\n\r\n\r\n\r\n\r\nfunction Form() {\r\n var Component = (function(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n url: null,\r\n message: 'Are you sure? There are unsaved information in your form',\r\n ignore: false,\r\n currentHash: null,\r\n submitButton:null,\r\n validations: null,\r\n onbeforeload: null,\r\n onload: null,\r\n onbeforesave: null,\r\n onsave: null,\r\n onbeforeremove: null,\r\n onremove: null,\r\n onerror: function(el, message) {\r\n alert(message);\r\n }\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Validations\r\n if (! obj.options.validations) {\r\n obj.options.validations = {};\r\n }\r\n\r\n // Submit Button\r\n if (! obj.options.submitButton) {\r\n obj.options.submitButton = el.querySelector('input[type=submit]');\r\n }\r\n\r\n if (obj.options.submitButton && obj.options.url) {\r\n obj.options.submitButton.onclick = function() {\r\n obj.save();\r\n }\r\n }\r\n\r\n if (! obj.options.validations.email) {\r\n obj.options.validations.email = validations.email;\r\n }\r\n\r\n if (! obj.options.validations.length) {\r\n obj.options.validations.length = validations.length;\r\n }\r\n\r\n if (! obj.options.validations.required) {\r\n obj.options.validations.required = validations.required;\r\n }\r\n\r\n obj.setUrl = function(url) {\r\n obj.options.url = url;\r\n }\r\n\r\n obj.load = function() {\r\n ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n dataType: 'json',\r\n queue: true,\r\n success: function(data) {\r\n // Overwrite values from the backend\r\n if (typeof(obj.options.onbeforeload) == 'function') {\r\n var ret = obj.options.onbeforeload(el, data);\r\n if (ret) {\r\n data = ret;\r\n }\r\n }\r\n // Apply values to the form\r\n Component.setElements(el, data);\r\n // Onload methods\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n obj.save = function() {\r\n var test = obj.validate();\r\n\r\n if (test) {\r\n obj.options.onerror(el, test);\r\n } else {\r\n var data = Component.getElements(el, true);\r\n\r\n if (typeof(obj.options.onbeforesave) == 'function') {\r\n var data = obj.options.onbeforesave(el, data);\r\n\r\n if (data === false) {\r\n return;\r\n }\r\n }\r\n\r\n ajax({\r\n url: obj.options.url,\r\n method: 'POST',\r\n dataType: 'json',\r\n data: data,\r\n success: function(result) {\r\n if (typeof(obj.options.onsave) == 'function') {\r\n obj.options.onsave(el, data, result);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n obj.remove = function() {\r\n if (typeof(obj.options.onbeforeremove) == 'function') {\r\n var ret = obj.options.onbeforeremove(el, obj);\r\n if (ret === false) {\r\n return false;\r\n }\r\n }\r\n\r\n ajax({\r\n url: obj.options.url,\r\n method: 'DELETE',\r\n dataType: 'json',\r\n success: function(result) {\r\n if (typeof(obj.options.onremove) == 'function') {\r\n obj.options.onremove(el, obj, result);\r\n }\r\n\r\n obj.reset();\r\n }\r\n });\r\n }\r\n\r\n var addError = function(element) {\r\n // Add error in the element\r\n element.classList.add('error');\r\n // Submit button\r\n if (obj.options.submitButton) {\r\n obj.options.submitButton.setAttribute('disabled', true);\r\n }\r\n // Return error message\r\n var error = element.getAttribute('data-error') || 'There is an error in the form';\r\n element.setAttribute('title', error);\r\n return error;\r\n }\r\n\r\n var delError = function(element) {\r\n var error = false;\r\n // Remove class from this element\r\n element.classList.remove('error');\r\n element.removeAttribute('title');\r\n // Get elements in the form\r\n var elements = el.querySelectorAll(\"input, select, textarea, div[name]\");\r\n // Run all elements\r\n for (var i = 0; i < elements.length; i++) {\r\n if (elements[i].getAttribute('data-validation')) {\r\n if (elements[i].classList.contains('error')) {\r\n error = true;\r\n }\r\n }\r\n }\r\n\r\n if (obj.options.submitButton) {\r\n if (error) {\r\n obj.options.submitButton.setAttribute('disabled', true);\r\n } else {\r\n obj.options.submitButton.removeAttribute('disabled');\r\n }\r\n }\r\n }\r\n\r\n obj.validateElement = function(element) {\r\n // Test results\r\n var test = false;\r\n // Value\r\n var value = Component.getValue(element);\r\n // Validation\r\n var validation = element.getAttribute('data-validation');\r\n // Parse\r\n if (typeof(obj.options.validations[validation]) == 'function' && ! obj.options.validations[validation](value, element)) {\r\n // Not passed in the test\r\n test = addError(element);\r\n } else {\r\n if (element.classList.contains('error')) {\r\n delError(element);\r\n }\r\n }\r\n\r\n return test;\r\n }\r\n\r\n obj.reset = function() {\r\n // Get elements in the form\r\n var name = null;\r\n var elements = el.querySelectorAll(\"input, select, textarea, div[name]\");\r\n // Run all elements\r\n for (var i = 0; i < elements.length; i++) {\r\n if (name = elements[i].getAttribute('name')) {\r\n if (elements[i].type == 'checkbox' || elements[i].type == 'radio') {\r\n elements[i].checked = false;\r\n } else {\r\n if (typeof(elements[i].val) == 'function') {\r\n elements[i].val('');\r\n } else {\r\n elements[i].value = '';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Run form validation\r\n obj.validate = function() {\r\n var test = [];\r\n // Get elements in the form\r\n var elements = el.querySelectorAll(\"input, select, textarea, div[name]\");\r\n // Run all elements\r\n for (var i = 0; i < elements.length; i++) {\r\n // Required\r\n if (elements[i].getAttribute('data-validation')) {\r\n var res = obj.validateElement(elements[i]);\r\n if (res) {\r\n test.push(res);\r\n }\r\n }\r\n }\r\n if (test.length > 0) {\r\n return test.join('<br>');\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Check the form\r\n obj.getError = function() {\r\n // Validation\r\n return obj.validation() ? true : false;\r\n }\r\n\r\n // Return the form hash\r\n obj.setHash = function() {\r\n return obj.getHash(Component.getElements(el));\r\n }\r\n\r\n // Get the form hash\r\n obj.getHash = 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 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 // Is there any change in the form since start tracking?\r\n obj.isChanged = function() {\r\n var hash = obj.setHash();\r\n return (obj.options.currentHash != hash);\r\n }\r\n\r\n // Restart tracking\r\n obj.resetTracker = function() {\r\n obj.options.currentHash = obj.setHash();\r\n obj.options.ignore = false;\r\n }\r\n\r\n // Ignore flag\r\n obj.setIgnore = function(ignoreFlag) {\r\n obj.options.ignore = ignoreFlag ? true : false;\r\n }\r\n\r\n // Start tracking in one second\r\n setTimeout(function() {\r\n obj.options.currentHash = obj.setHash();\r\n }, 1000);\r\n\r\n // Validations\r\n el.addEventListener(\"keyup\", function(e) {\r\n if (e.target.getAttribute('data-validation')) {\r\n obj.validateElement(e.target);\r\n }\r\n });\r\n\r\n // Alert\r\n if (! Component.hasEvents) {\r\n window.addEventListener(\"beforeunload\", function (e) {\r\n if (obj.isChanged() && obj.options.ignore == false) {\r\n var confirmationMessage = obj.options.message? obj.options.message : \"\\o/\";\r\n\r\n if (confirmationMessage) {\r\n if (typeof e == 'undefined') {\r\n e = window.event;\r\n }\r\n\r\n if (e) {\r\n e.returnValue = confirmationMessage;\r\n }\r\n\r\n return confirmationMessage;\r\n } else {\r\n return void(0);\r\n }\r\n }\r\n });\r\n\r\n Component.hasEvents = true;\r\n }\r\n\r\n el.form = obj;\r\n\r\n return obj;\r\n });\r\n\r\n // Get value from one element\r\n Component.getValue = function(element) {\r\n var value = null;\r\n if (element.type == 'checkbox') {\r\n if (element.checked == true) {\r\n value = element.value || true;\r\n }\r\n } else if (element.type == 'radio') {\r\n if (element.checked == true) {\r\n value = element.value;\r\n }\r\n } else if (element.type == 'file') {\r\n value = element.files;\r\n } else if (element.tagName == 'select' && element.multiple == true) {\r\n value = [];\r\n var options = element.querySelectorAll(\"options[selected]\");\r\n for (var j = 0; j < options.length; j++) {\r\n value.push(options[j].value);\r\n }\r\n } else if (typeof(element.val) == 'function') {\r\n value = element.val();\r\n } else {\r\n value = element.value || '';\r\n }\r\n\r\n return value;\r\n }\r\n\r\n // Get form elements\r\n Component.getElements = function(el, asArray) {\r\n var data = {};\r\n var name = null;\r\n var elements = el.querySelectorAll(\"input, select, textarea, div[name]\");\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n if (name = elements[i].getAttribute('name')) {\r\n data[name] = Component.getValue(elements[i]) || '';\r\n }\r\n }\r\n\r\n return asArray == true ? data : JSON.stringify(data);\r\n }\r\n\r\n //Get form elements\r\n Component.setElements = function(el, data) {\r\n var name = null;\r\n var value = null;\r\n var elements = el.querySelectorAll(\"input, select, textarea, div[name]\");\r\n for (var i = 0; i < elements.length; i++) {\r\n // Attributes\r\n var type = elements[i].getAttribute('type');\r\n if (name = elements[i].getAttribute('name')) {\r\n // Transform variable names in pathname\r\n name = name.replace(new RegExp(/\\[(.*?)\\]/ig), '.$1');\r\n value = null;\r\n // Seach for the data in the path\r\n if (name.match(/\\./)) {\r\n var tmp = Path.call(data, name) || '';\r\n if (typeof(tmp) !== 'undefined') {\r\n value = tmp;\r\n }\r\n } else {\r\n if (typeof(data[name]) !== 'undefined') {\r\n value = data[name];\r\n }\r\n }\r\n // Set the values\r\n if (value !== null) {\r\n if (type == 'checkbox' || type == 'radio') {\r\n elements[i].checked = value ? true : false;\r\n } else if (type == 'file') {\r\n // Do nothing\r\n } else {\r\n if (typeof (elements[i].val) == 'function') {\r\n elements[i].val(value);\r\n } else {\r\n elements[i].value = value;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var plugins_form = (Form());\n;// CONCATENATED MODULE: ./src/plugins/modal.js\n\r\n\r\n\r\n\r\nfunction Modal() {\r\n\r\n var Events = function() {\r\n // Position\r\n var tracker = null;\r\n\r\n var keyDown = function (e) {\r\n if (e.which == 27) {\r\n var modals = document.querySelectorAll('.jmodal');\r\n for (var i = 0; i < modals.length; i++) {\r\n modals[i].parentNode.modal.close();\r\n }\r\n }\r\n }\r\n\r\n var mouseUp = function (e) {\r\n let element = e.composedPath();\r\n var item = helpers.findElement(element[0], 'jmodal');\r\n if (item) {\r\n // Get target info\r\n var rect = item.getBoundingClientRect();\r\n\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n if (rect.width - (x - rect.left) < 50 && (y - rect.top) < 50) {\r\n item.parentNode.modal.close();\r\n }\r\n }\r\n\r\n if (tracker) {\r\n tracker.element.style.cursor = 'auto';\r\n tracker = null;\r\n }\r\n }\r\n\r\n var mouseDown = function (e) {\r\n let element = e.composedPath();\r\n var item = helpers.findElement(element[0], 'jmodal');\r\n if (item) {\r\n // Get target info\r\n var rect = item.getBoundingClientRect();\r\n\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n if (rect.width - (x - rect.left) < 50 && (y - rect.top) < 50) {\r\n // Do nothing\r\n } else {\r\n if (y - rect.top < 50) {\r\n if (document.selection) {\r\n document.selection.empty();\r\n } else if (window.getSelection) {\r\n window.getSelection().removeAllRanges();\r\n }\r\n\r\n tracker = {\r\n left: rect.left,\r\n top: rect.top,\r\n x: e.clientX,\r\n y: e.clientY,\r\n width: rect.width,\r\n height: rect.height,\r\n element: item,\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n var mouseMove = function (e) {\r\n if (tracker) {\r\n e = e || window.event;\r\n if (e.buttons) {\r\n var mouseButton = e.buttons;\r\n } else if (e.button) {\r\n var mouseButton = e.button;\r\n } else {\r\n var mouseButton = e.which;\r\n }\r\n\r\n if (mouseButton) {\r\n tracker.element.style.top = (tracker.top + (e.clientY - tracker.y) + (tracker.height / 2)) + 'px';\r\n tracker.element.style.left = (tracker.left + (e.clientX - tracker.x) + (tracker.width / 2)) + 'px';\r\n tracker.element.style.cursor = 'move';\r\n } else {\r\n tracker.element.style.cursor = 'auto';\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', keyDown);\r\n document.addEventListener('mouseup', mouseUp);\r\n document.addEventListener('mousedown', mouseDown);\r\n document.addEventListener('mousemove', mouseMove);\r\n }\r\n\r\n var Component = (function (el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n url: null,\r\n onopen: null,\r\n onclose: null,\r\n onload: null,\r\n closed: false,\r\n width: null,\r\n height: null,\r\n title: null,\r\n padding: null,\r\n backdrop: true,\r\n icon: null,\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Title\r\n if (!obj.options.title && el.getAttribute('title')) {\r\n obj.options.title = el.getAttribute('title');\r\n }\r\n\r\n var temp = document.createElement('div');\r\n while (el.children[0]) {\r\n temp.appendChild(el.children[0]);\r\n }\r\n\r\n obj.title = document.createElement('div');\r\n obj.title.className = 'jmodal_title';\r\n if (obj.options.icon) {\r\n obj.title.setAttribute('data-icon', obj.options.icon);\r\n }\r\n\r\n obj.content = document.createElement('div');\r\n obj.content.className = 'jmodal_content';\r\n obj.content.innerHTML = el.innerHTML;\r\n\r\n while (temp.children[0]) {\r\n obj.content.appendChild(temp.children[0]);\r\n }\r\n\r\n obj.container = document.createElement('div');\r\n obj.container.className = 'jmodal';\r\n obj.container.appendChild(obj.title);\r\n obj.container.appendChild(obj.content);\r\n\r\n if (obj.options.padding) {\r\n obj.content.style.padding = obj.options.padding;\r\n }\r\n if (obj.options.width) {\r\n obj.container.style.width = obj.options.width;\r\n }\r\n if (obj.options.height) {\r\n obj.container.style.height = obj.options.height;\r\n }\r\n if (obj.options.title) {\r\n var title = document.createElement('h4');\r\n title.innerText = obj.options.title;\r\n obj.title.appendChild(title);\r\n }\r\n\r\n el.innerHTML = '';\r\n el.style.display = 'none';\r\n el.appendChild(obj.container);\r\n\r\n // Backdrop\r\n if (obj.options.backdrop) {\r\n var backdrop = document.createElement('div');\r\n backdrop.className = 'jmodal_backdrop';\r\n backdrop.onclick = function () {\r\n obj.close();\r\n }\r\n el.appendChild(backdrop);\r\n }\r\n\r\n obj.open = function () {\r\n el.style.display = 'block';\r\n // Fullscreen\r\n var rect = obj.container.getBoundingClientRect();\r\n if (helpers.getWindowWidth() < rect.width) {\r\n obj.container.style.top = '';\r\n obj.container.style.left = '';\r\n obj.container.classList.add('jmodal_fullscreen');\r\n animation.slideBottom(obj.container, 1);\r\n } else {\r\n if (obj.options.backdrop) {\r\n backdrop.style.display = 'block';\r\n }\r\n }\r\n // Event\r\n if (typeof (obj.options.onopen) == 'function') {\r\n obj.options.onopen(el, obj);\r\n }\r\n }\r\n\r\n obj.resetPosition = function () {\r\n obj.container.style.top = '';\r\n obj.container.style.left = '';\r\n }\r\n\r\n obj.isOpen = function () {\r\n return el.style.display != 'none' ? true : false;\r\n }\r\n\r\n obj.close = function () {\r\n if (obj.isOpen()) {\r\n el.style.display = 'none';\r\n if (obj.options.backdrop) {\r\n // Backdrop\r\n backdrop.style.display = '';\r\n }\r\n // Remove fullscreen class\r\n obj.container.classList.remove('jmodal_fullscreen');\r\n // Event\r\n if (typeof (obj.options.onclose) == 'function') {\r\n obj.options.onclose(el, obj);\r\n }\r\n }\r\n }\r\n\r\n if (obj.options.url) {\r\n ajax({\r\n url: obj.options.url,\r\n method: 'GET',\r\n dataType: 'text/html',\r\n success: function (data) {\r\n obj.content.innerHTML = data;\r\n\r\n if (!obj.options.closed) {\r\n obj.open();\r\n }\r\n\r\n if (typeof (obj.options.onload) === 'function') {\r\n obj.options.onload(obj);\r\n }\r\n }\r\n });\r\n } else {\r\n if (!obj.options.closed) {\r\n obj.open();\r\n }\r\n\r\n if (typeof (obj.options.onload) === 'function') {\r\n obj.options.onload(obj);\r\n }\r\n }\r\n\r\n // Keep object available from the node\r\n el.modal = obj;\r\n\r\n // Create events when the first modal is create only\r\n Events();\r\n\r\n // Execute the events only once\r\n Events = function() {};\r\n\r\n return obj;\r\n });\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var modal = (Modal());\n;// CONCATENATED MODULE: ./src/plugins/notification.js\n\r\n\r\n\r\nfunction Notification() {\r\n var Component = function (options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n icon: null,\r\n name: 'Notification',\r\n date: null,\r\n error: null,\r\n title: null,\r\n message: null,\r\n timeout: 4000,\r\n autoHide: true,\r\n closeable: 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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n var notification = document.createElement('div');\r\n notification.className = 'jnotification';\r\n\r\n if (obj.options.error) {\r\n notification.classList.add('jnotification-error');\r\n }\r\n\r\n var notificationContainer = document.createElement('div');\r\n notificationContainer.className = 'jnotification-container';\r\n notification.appendChild(notificationContainer);\r\n\r\n var notificationHeader = document.createElement('div');\r\n notificationHeader.className = 'jnotification-header';\r\n notificationContainer.appendChild(notificationHeader);\r\n\r\n var notificationImage = document.createElement('div');\r\n notificationImage.className = 'jnotification-image';\r\n notificationHeader.appendChild(notificationImage);\r\n\r\n if (obj.options.icon) {\r\n var notificationIcon = document.createElement('img');\r\n notificationIcon.src = obj.options.icon;\r\n notificationImage.appendChild(notificationIcon);\r\n }\r\n\r\n var notificationName = document.createElement('div');\r\n notificationName.className = 'jnotification-name';\r\n notificationName.innerHTML = obj.options.name;\r\n notificationHeader.appendChild(notificationName);\r\n\r\n if (obj.options.closeable == true) {\r\n var notificationClose = document.createElement('div');\r\n notificationClose.className = 'jnotification-close';\r\n notificationClose.onclick = function () {\r\n obj.hide();\r\n }\r\n notificationHeader.appendChild(notificationClose);\r\n }\r\n\r\n var notificationDate = document.createElement('div');\r\n notificationDate.className = 'jnotification-date';\r\n notificationHeader.appendChild(notificationDate);\r\n\r\n var notificationContent = document.createElement('div');\r\n notificationContent.className = 'jnotification-content';\r\n notificationContainer.appendChild(notificationContent);\r\n\r\n if (obj.options.title) {\r\n var notificationTitle = document.createElement('div');\r\n notificationTitle.className = 'jnotification-title';\r\n notificationTitle.innerHTML = obj.options.title;\r\n notificationContent.appendChild(notificationTitle);\r\n }\r\n\r\n var notificationMessage = document.createElement('div');\r\n notificationMessage.className = 'jnotification-message';\r\n notificationMessage.innerHTML = obj.options.message;\r\n notificationContent.appendChild(notificationMessage);\r\n\r\n obj.show = function () {\r\n document.body.appendChild(notification);\r\n if (helpers.getWindowWidth() > 800) {\r\n animation.fadeIn(notification);\r\n } else {\r\n animation.slideTop(notification, 1);\r\n }\r\n }\r\n\r\n obj.hide = function () {\r\n if (helpers.getWindowWidth() > 800) {\r\n animation.fadeOut(notification, function () {\r\n if (notification.parentNode) {\r\n notification.parentNode.removeChild(notification);\r\n if (notificationTimeout) {\r\n clearTimeout(notificationTimeout);\r\n }\r\n }\r\n });\r\n } else {\r\n animation.slideTop(notification, 0, function () {\r\n if (notification.parentNode) {\r\n notification.parentNode.removeChild(notification);\r\n if (notificationTimeout) {\r\n clearTimeout(notificationTimeout);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n obj.show();\r\n\r\n if (obj.options.autoHide == true) {\r\n var notificationTimeout = setTimeout(function () {\r\n obj.hide();\r\n }, obj.options.timeout);\r\n }\r\n\r\n if (helpers.getWindowWidth() < 800) {\r\n notification.addEventListener(\"swipeup\", function (e) {\r\n obj.hide();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n Component.isVisible = function () {\r\n var j = document.querySelector('.jnotification');\r\n return j && j.parentNode ? true : false;\r\n }\r\n\r\n return Component;\r\n}\r\n\r\n/* harmony default export */ var notification = (Notification());\n;// CONCATENATED MODULE: ./src/plugins/progressbar.js\nfunction Progressbar(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n value: 0,\r\n onchange: null,\r\n width: null,\r\n };\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 // Class\r\n el.classList.add('jprogressbar');\r\n el.setAttribute('tabindex', 1);\r\n el.setAttribute('data-value', obj.options.value);\r\n\r\n var bar = document.createElement('div');\r\n bar.style.width = obj.options.value + '%';\r\n bar.style.color = '#fff';\r\n el.appendChild(bar);\r\n\r\n if (obj.options.width) {\r\n el.style.width = obj.options.width;\r\n }\r\n\r\n // Set value\r\n obj.setValue = function(value) {\r\n value = parseInt(value);\r\n obj.options.value = value;\r\n bar.style.width = value + '%';\r\n el.setAttribute('data-value', value + '%');\r\n\r\n if (value < 6) {\r\n el.style.color = '#000';\r\n } else {\r\n el.style.color = '#fff';\r\n }\r\n\r\n // Update value\r\n obj.options.value = value;\r\n\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, value);\r\n }\r\n\r\n // Lemonade JS\r\n if (el.value != obj.options.value) {\r\n el.value = obj.options.value;\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 obj.getValue = function() {\r\n return obj.options.value;\r\n }\r\n\r\n var action = function(e) {\r\n if (e.which) {\r\n // Get target info\r\n var rect = el.getBoundingClientRect();\r\n\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n obj.setValue(Math.round((x - rect.left) / rect.width * 100));\r\n }\r\n }\r\n\r\n // Events\r\n if ('touchstart' in document.documentElement === true) {\r\n el.addEventListener('touchstart', action);\r\n el.addEventListener('touchend', action);\r\n } else {\r\n el.addEventListener('mousedown', action);\r\n el.addEventListener(\"mousemove\", action);\r\n }\r\n\r\n // Change\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n return obj.getValue();\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n // Reference\r\n el.progressbar = obj;\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/rating.js\nfunction Rating(el, options) {\r\n // Already created, update options\r\n if (el.rating) {\r\n return el.rating.setOptions(options, true);\r\n }\r\n\r\n // New instance\r\n var obj = {};\r\n obj.options = {};\r\n\r\n obj.setOptions = function(options, reset) {\r\n // Default configuration\r\n var defaults = {\r\n number: 5,\r\n value: 0,\r\n tooltip: [ 'Very bad', 'Bad', 'Average', 'Good', 'Very good' ],\r\n onchange: null,\r\n };\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 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 // Make sure the container is empty\r\n el.innerHTML = '';\r\n\r\n // Add elements\r\n for (var i = 0; i < obj.options.number; i++) {\r\n var div = document.createElement('div');\r\n div.setAttribute('data-index', (i + 1))\r\n div.setAttribute('title', obj.options.tooltip[i])\r\n el.appendChild(div);\r\n }\r\n\r\n // Selected option\r\n if (obj.options.value) {\r\n for (var i = 0; i < obj.options.number; i++) {\r\n if (i < obj.options.value) {\r\n el.children[i].classList.add('jrating-selected');\r\n }\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n // Set value\r\n obj.setValue = function(index) {\r\n for (var i = 0; i < obj.options.number; i++) {\r\n if (i < index) {\r\n el.children[i].classList.add('jrating-selected');\r\n } else {\r\n el.children[i].classList.remove('jrating-over');\r\n el.children[i].classList.remove('jrating-selected');\r\n }\r\n }\r\n\r\n obj.options.value = index;\r\n\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, index);\r\n }\r\n\r\n // Lemonade JS\r\n if (el.value != obj.options.value) {\r\n el.value = obj.options.value;\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 obj.getValue = function() {\r\n return obj.options.value;\r\n }\r\n\r\n var init = function() {\r\n // Start plugin\r\n obj.setOptions(options);\r\n\r\n // Class\r\n el.classList.add('jrating');\r\n\r\n // Events\r\n el.addEventListener(\"click\", function(e) {\r\n var index = e.target.getAttribute('data-index');\r\n if (index != undefined) {\r\n if (index == obj.options.value) {\r\n obj.setValue(0);\r\n } else {\r\n obj.setValue(index);\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener(\"mouseover\", function(e) {\r\n var index = e.target.getAttribute('data-index');\r\n for (var i = 0; i < obj.options.number; i++) {\r\n if (i < index) {\r\n el.children[i].classList.add('jrating-over');\r\n } else {\r\n el.children[i].classList.remove('jrating-over');\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener(\"mouseout\", function(e) {\r\n for (var i = 0; i < obj.options.number; i++) {\r\n el.children[i].classList.remove('jrating-over');\r\n }\r\n });\r\n\r\n // Change\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n return obj.getValue();\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n // Reference\r\n el.rating = obj;\r\n }\r\n\r\n init();\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/search.js\n\r\n\r\n\r\nfunction Search(el, options) {\r\n if (el.search) {\r\n return el.search;\r\n }\r\n\r\n var index = null;\r\n\r\n var select = function(e) {\r\n if (e.target.classList.contains('jsearch_item')) {\r\n var element = e.target;\r\n } else {\r\n var element = e.target.parentNode;\r\n }\r\n\r\n obj.selectIndex(element);\r\n e.preventDefault();\r\n }\r\n\r\n var createList = function(data) {\r\n if (typeof(obj.options.onsearch) == 'function') {\r\n var ret = obj.options.onsearch(obj, data);\r\n if (ret) {\r\n data = ret;\r\n }\r\n }\r\n\r\n // Reset container\r\n container.innerHTML = '';\r\n // Print results\r\n if (! data.length) {\r\n // Show container\r\n el.style.display = '';\r\n } else {\r\n // Show container\r\n el.style.display = 'block';\r\n\r\n // Show items (only 10)\r\n var len = data.length < 11 ? data.length : 10;\r\n for (var i = 0; i < len; i++) {\r\n if (typeof(data[i]) == 'string') {\r\n var text = data[i];\r\n var value = data[i];\r\n } else {\r\n // Legacy\r\n var text = data[i].text;\r\n if (! text && data[i].name) {\r\n text = data[i].name;\r\n }\r\n var value = data[i].value;\r\n if (! value && data[i].id) {\r\n value = data[i].id;\r\n }\r\n }\r\n\r\n var div = document.createElement('div');\r\n div.setAttribute('data-value', value);\r\n div.setAttribute('data-text', text);\r\n div.className = 'jsearch_item';\r\n\r\n if (data[i].id) {\r\n div.setAttribute('id', data[i].id)\r\n }\r\n\r\n if (obj.options.forceSelect && i == 0) {\r\n div.classList.add('selected');\r\n }\r\n var img = document.createElement('img');\r\n if (data[i].image) {\r\n img.src = data[i].image;\r\n } else {\r\n img.style.display = 'none';\r\n }\r\n div.appendChild(img);\r\n\r\n var item = document.createElement('div');\r\n item.innerHTML = text;\r\n div.appendChild(item);\r\n\r\n // Append item to the container\r\n container.appendChild(div);\r\n }\r\n }\r\n }\r\n\r\n var execute = function(str) {\r\n if (str != obj.terms) {\r\n // New terms\r\n obj.terms = str;\r\n // New index\r\n if (obj.options.forceSelect) {\r\n index = 0;\r\n } else {\r\n index = null;\r\n }\r\n // Array or remote search\r\n if (Array.isArray(obj.options.data)) {\r\n var test = function(o) {\r\n if (typeof(o) == 'string') {\r\n if ((''+o).toLowerCase().search(str.toLowerCase()) >= 0) {\r\n return true;\r\n }\r\n } else {\r\n for (var key in o) {\r\n var value = o[key];\r\n if ((''+value).toLowerCase().search(str.toLowerCase()) >= 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n var results = obj.options.data.filter(function(item) {\r\n return test(item);\r\n });\r\n\r\n // Show items\r\n createList(results);\r\n } else {\r\n // Get remove results\r\n ajax({\r\n url: obj.options.data + str,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(data) {\r\n // Show items\r\n createList(data);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Search timer\r\n var timer = null;\r\n\r\n // Search methods\r\n var obj = function(str) {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n timer = setTimeout(function() {\r\n execute(str);\r\n }, 500);\r\n }\r\n if(options.forceSelect === null) {\r\n options.forceSelect = true;\r\n }\r\n obj.options = {\r\n data: options.data || null,\r\n input: options.input || null,\r\n searchByNode: options.searchByNode || null,\r\n onselect: options.onselect || null,\r\n forceSelect: options.forceSelect,\r\n onsearch: options.onsearch || null,\r\n onbeforesearch: options.onbeforesearch || null,\r\n };\r\n\r\n obj.selectIndex = function(item) {\r\n var id = item.getAttribute('id');\r\n var text = item.getAttribute('data-text');\r\n var value = item.getAttribute('data-value');\r\n var image = item.children[0].src || '';\r\n // Onselect\r\n if (typeof(obj.options.onselect) == 'function') {\r\n obj.options.onselect(obj, text, value, id, image);\r\n }\r\n // Close container\r\n obj.close();\r\n }\r\n\r\n obj.open = function() {\r\n el.style.display = 'block';\r\n }\r\n\r\n obj.close = function() {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n // Current terms\r\n obj.terms = '';\r\n // Remove results\r\n container.innerHTML = '';\r\n // Hide\r\n el.style.display = '';\r\n }\r\n\r\n obj.isOpened = function() {\r\n return el.style.display ? true : false;\r\n }\r\n\r\n obj.keydown = function(e) {\r\n if (obj.isOpened()) {\r\n if (e.key == 'Enter') {\r\n // Enter\r\n if (index!==null && container.children[index]) {\r\n obj.selectIndex(container.children[index]);\r\n e.preventDefault();\r\n } else {\r\n obj.close();\r\n }\r\n } else if (e.key === 'ArrowUp') {\r\n // Up\r\n if (index!==null && container.children[0]) {\r\n container.children[index].classList.remove('selected');\r\n if(!obj.options.forceSelect && index === 0) {\r\n index = null;\r\n } else {\r\n index = Math.max(0, index-1);\r\n container.children[index].classList.add('selected');\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.key === 'ArrowDown') {\r\n // Down\r\n if(index == null) {\r\n index = -1;\r\n } else {\r\n container.children[index].classList.remove('selected');\r\n }\r\n if (index < 9 && container.children[index+1]) {\r\n index++;\r\n }\r\n container.children[index].classList.add('selected');\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n obj.keyup = function(e) {\r\n if (! obj.options.searchByNode && obj.options.input) {\r\n if (obj.options.input.tagName === 'DIV') {\r\n var terms = obj.options.input.innerText;\r\n } else {\r\n var terms = obj.options.input.value;\r\n }\r\n } else {\r\n // Current node\r\n var node = helpers.getNode();\r\n if (node) {\r\n var terms = node.innerText;\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onbeforesearch) == 'function') {\r\n var ret = obj.options.onbeforesearch(obj, terms);\r\n if (ret) {\r\n terms = ret;\r\n } else {\r\n if (ret === false) {\r\n // Ignore event\r\n return;\r\n }\r\n }\r\n }\r\n\r\n obj(terms);\r\n }\r\n\r\n obj.blur = function(e) {\r\n obj.close();\r\n }\r\n\r\n // Add events\r\n if (obj.options.input) {\r\n obj.options.input.addEventListener(\"keyup\", obj.keyup);\r\n obj.options.input.addEventListener(\"keydown\", obj.keydown);\r\n obj.options.input.addEventListener(\"blur\", obj.blur);\r\n }\r\n\r\n // Append element\r\n var container = document.createElement('div');\r\n container.classList.add('jsearch_container');\r\n container.onmousedown = select;\r\n el.appendChild(container);\r\n\r\n el.classList.add('jsearch');\r\n el.search = obj;\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/slider.js\nfunction Slider(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n obj.currentImage = null;\r\n\r\n if (options) {\r\n obj.options = options;\r\n }\r\n\r\n // Focus\r\n el.setAttribute('tabindex', '900')\r\n\r\n // Items\r\n obj.options.items = [];\r\n\r\n if (! el.classList.contains('jslider')) {\r\n el.classList.add('jslider');\r\n el.classList.add('unselectable');\r\n\r\n if (obj.options.height) {\r\n el.style.minHeight = parseInt(obj.options.height) + 'px';\r\n }\r\n if (obj.options.width) {\r\n el.style.width = parseInt(obj.options.width) + 'px';\r\n }\r\n if (obj.options.grid) {\r\n el.classList.add('jslider-grid');\r\n var number = el.children.length;\r\n if (number > 4) {\r\n el.setAttribute('data-total', number - 4);\r\n }\r\n el.setAttribute('data-number', (number > 4 ? 4 : number));\r\n }\r\n\r\n // Add slider counter\r\n var counter = document.createElement('div');\r\n counter.classList.add('jslider-counter');\r\n\r\n // Move children inside\r\n if (el.children.length > 0) {\r\n // Keep children items\r\n for (var i = 0; i < el.children.length; i++) {\r\n obj.options.items.push(el.children[i]);\r\n \r\n // counter click event\r\n var item = document.createElement('div');\r\n item.onclick = function() {\r\n var index = Array.prototype.slice.call(counter.children).indexOf(this);\r\n obj.show(obj.currentImage = obj.options.items[index]);\r\n }\r\n counter.appendChild(item);\r\n }\r\n }\r\n // Add caption\r\n var caption = document.createElement('div');\r\n caption.className = 'jslider-caption';\r\n\r\n // Add close buttom\r\n var controls = document.createElement('div');\r\n var close = document.createElement('div');\r\n close.className = 'jslider-close';\r\n close.innerHTML = '';\r\n \r\n close.onclick = function() {\r\n obj.close();\r\n }\r\n controls.appendChild(caption);\r\n controls.appendChild(close);\r\n }\r\n\r\n obj.updateCounter = function(index) {\r\n for (var i = 0; i < counter.children.length; i ++) {\r\n if (counter.children[i].classList.contains('jslider-counter-focus')) {\r\n counter.children[i].classList.remove('jslider-counter-focus');\r\n break;\r\n }\r\n }\r\n counter.children[index].classList.add('jslider-counter-focus');\r\n }\r\n\r\n obj.show = function(target) {\r\n if (! target) {\r\n var target = el.children[0];\r\n }\r\n\r\n // Focus element\r\n el.classList.add('jslider-focus');\r\n el.classList.remove('jslider-grid');\r\n el.appendChild(controls);\r\n el.appendChild(counter);\r\n\r\n // Update counter\r\n var index = obj.options.items.indexOf(target);\r\n obj.updateCounter(index);\r\n\r\n // Remove display\r\n for (var i = 0; i < el.children.length; i++) {\r\n el.children[i].style.display = '';\r\n }\r\n target.style.display = 'block';\r\n\r\n // Is there any previous\r\n if (target.previousElementSibling) {\r\n el.classList.add('jslider-left');\r\n } else {\r\n el.classList.remove('jslider-left');\r\n }\r\n\r\n // Is there any next\r\n if (target.nextElementSibling && target.nextElementSibling.tagName == 'IMG') {\r\n el.classList.add('jslider-right');\r\n } else {\r\n el.classList.remove('jslider-right');\r\n }\r\n\r\n obj.currentImage = target;\r\n\r\n // Vertical image\r\n if (obj.currentImage.offsetHeight > obj.currentImage.offsetWidth) {\r\n obj.currentImage.classList.add('jslider-vertical');\r\n }\r\n\r\n controls.children[0].innerText = obj.currentImage.getAttribute('title');\r\n }\r\n\r\n obj.open = function() {\r\n obj.show();\r\n\r\n // Event\r\n if (typeof(obj.options.onopen) == 'function') {\r\n obj.options.onopen(el);\r\n }\r\n }\r\n\r\n obj.close = function() {\r\n // Remove control classes\r\n el.classList.remove('jslider-focus');\r\n el.classList.remove('jslider-left');\r\n el.classList.remove('jslider-right');\r\n // Show as a grid depending on the configuration\r\n if (obj.options.grid) {\r\n el.classList.add('jslider-grid');\r\n }\r\n // Remove display\r\n for (var i = 0; i < el.children.length; i++) {\r\n el.children[i].style.display = '';\r\n }\r\n // Remove controls from the component\r\n counter.remove();\r\n controls.remove();\r\n // Current image\r\n obj.currentImage = null;\r\n // Event\r\n if (typeof(obj.options.onclose) == 'function') {\r\n obj.options.onclose(el);\r\n }\r\n }\r\n\r\n obj.reset = function() {\r\n el.innerHTML = '';\r\n }\r\n\r\n obj.next = function() {\r\n var nextImage = obj.currentImage.nextElementSibling;\r\n if (nextImage && nextImage.tagName === 'IMG') {\r\n obj.show(obj.currentImage.nextElementSibling);\r\n }\r\n }\r\n \r\n obj.prev = function() {\r\n if (obj.currentImage.previousElementSibling) {\r\n obj.show(obj.currentImage.previousElementSibling);\r\n }\r\n }\r\n\r\n var mouseUp = function(e) {\r\n // Open slider\r\n if (e.target.tagName == 'IMG') {\r\n obj.show(e.target);\r\n } else if (! e.target.classList.contains('jslider-close') && ! (e.target.parentNode.classList.contains('jslider-counter') || e.target.classList.contains('jslider-counter'))){\r\n // Arrow controls\r\n var offsetX = e.offsetX || e.changedTouches[0].clientX;\r\n if (e.target.clientWidth - offsetX < 40) {\r\n // Show next image\r\n obj.next();\r\n } else if (offsetX < 40) {\r\n // Show previous image\r\n obj.prev();\r\n }\r\n }\r\n }\r\n\r\n if ('ontouchend' in document.documentElement === true) {\r\n el.addEventListener('touchend', mouseUp);\r\n } else {\r\n el.addEventListener('mouseup', mouseUp);\r\n }\r\n\r\n // Add global events\r\n el.addEventListener(\"swipeleft\", function(e) {\r\n obj.next();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n el.addEventListener(\"swiperight\", function(e) {\r\n obj.prev();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n el.addEventListener('keydown', function(e) {\r\n if (e.which == 27) {\r\n obj.close();\r\n }\r\n });\r\n\r\n el.slider = obj;\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/tags.js\n\r\n\r\n\r\n\r\nfunction Tags(el, options) {\r\n // Redefine configuration\r\n if (el.tags) {\r\n return el.tags.setOptions(options, true);\r\n }\r\n\r\n var obj = { type:'tags' };\r\n obj.options = {};\r\n\r\n // Limit\r\n var limit = function() {\r\n return obj.options.limit && el.children.length >= obj.options.limit ? true : false;\r\n }\r\n\r\n // Search helpers\r\n var search = null;\r\n var searchContainer = null;\r\n\r\n obj.setOptions = function(options, reset) {\r\n /**\r\n * @typedef {Object} defaults\r\n * @property {(string|Array)} value - Initial value of the compontent\r\n * @property {number} limit - Max number of tags inside the element\r\n * @property {string} search - The URL for suggestions\r\n * @property {string} placeholder - The default instruction text on the element\r\n * @property {validation} validation - Method to validate the tags\r\n * @property {requestCallback} onbeforechange - Method to be execute before any changes on the element\r\n * @property {requestCallback} onchange - Method to be execute after any changes on the element\r\n * @property {requestCallback} onfocus - Method to be execute when on focus\r\n * @property {requestCallback} onblur - Method to be execute when on blur\r\n * @property {requestCallback} onload - Method to be execute when the element is loaded\r\n */\r\n var defaults = {\r\n value: '',\r\n limit: null,\r\n search: null,\r\n placeholder: null,\r\n validation: null,\r\n onbeforepaste: null,\r\n onbeforechange: null,\r\n onremoveitem: null,\r\n onlimit: null,\r\n onchange: null,\r\n onfocus: null,\r\n onblur: null,\r\n onload: null,\r\n }\r\n\r\n // Loop through though the default 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 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 // Placeholder\r\n if (obj.options.placeholder) {\r\n el.setAttribute('data-placeholder', obj.options.placeholder);\r\n } else {\r\n el.removeAttribute('data-placeholder');\r\n }\r\n el.placeholder = obj.options.placeholder;\r\n\r\n // Update value\r\n obj.setValue(obj.options.value);\r\n\r\n // Validate items\r\n filter();\r\n\r\n // Create search box\r\n if (obj.options.search) {\r\n if (! searchContainer) {\r\n searchContainer = document.createElement('div');\r\n el.parentNode.insertBefore(searchContainer, el.nextSibling);\r\n\r\n // Create container\r\n search = Search(searchContainer, {\r\n data: obj.options.search,\r\n onselect: function(a,b,c) {\r\n obj.selectIndex(b,c);\r\n }\r\n });\r\n }\r\n } else {\r\n if (searchContainer) {\r\n search = null;\r\n searchContainer.remove();\r\n searchContainer = null;\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n /**\r\n * Add a new tag to the element\r\n * @param {(?string|Array)} value - The value of the new element\r\n */\r\n obj.add = function(value, focus) {\r\n if (typeof(obj.options.onbeforechange) == 'function') {\r\n var ret = obj.options.onbeforechange(el, obj, obj.options.value, value);\r\n if (ret === false) {\r\n return false;\r\n } else { \r\n if (ret != null) {\r\n value = ret;\r\n }\r\n }\r\n }\r\n\r\n // Make sure search is closed\r\n if (search) {\r\n search.close();\r\n }\r\n\r\n if (limit()) {\r\n if (typeof(obj.options.onlimit) == 'function') {\r\n obj.options.onlimit(obj, obj.options.limit);\r\n } else {\r\n alert(dictionary.translate('You reach the limit number of entries') + ' ' + obj.options.limit);\r\n }\r\n } else {\r\n // Get node\r\n var node = helpers.getNode();\r\n\r\n if (node && node.parentNode && node.parentNode.classList.contains('jtags') &&\r\n node.nextSibling && (! (node.nextSibling.innerText && node.nextSibling.innerText.trim()))) {\r\n div = node.nextSibling;\r\n } else {\r\n // Remove not used last item\r\n if (el.lastChild) {\r\n if (! el.lastChild.innerText.trim()) {\r\n el.removeChild(el.lastChild);\r\n }\r\n }\r\n\r\n // Mix argument string or array\r\n if (! value || typeof(value) == 'string') {\r\n var div = createElement(value, value, node);\r\n } else {\r\n for (var i = 0; i <= value.length; i++) {\r\n if (! limit()) {\r\n if (! value[i] || typeof(value[i]) == 'string') {\r\n var t = value[i] || '';\r\n var v = null;\r\n } else {\r\n var t = value[i].text;\r\n var v = value[i].value;\r\n }\r\n\r\n // Add element\r\n var div = createElement(t, v);\r\n }\r\n }\r\n }\r\n\r\n // Change\r\n change();\r\n }\r\n\r\n // Place caret\r\n if (focus) {\r\n setFocus(div);\r\n }\r\n }\r\n }\r\n\r\n obj.setLimit = function(limit) {\r\n obj.options.limit = limit;\r\n var n = el.children.length - limit;\r\n while (el.children.length > limit) {\r\n el.removeChild(el.lastChild);\r\n }\r\n }\r\n\r\n // Remove a item node\r\n obj.remove = function(node) {\r\n // Remove node\r\n node.parentNode.removeChild(node);\r\n // Make sure element is not blank\r\n if (! el.children.length) {\r\n obj.add('', true);\r\n } else {\r\n change();\r\n }\r\n\r\n if (typeof(obj.options.onremoveitem) == 'function') {\r\n obj.options.onremoveitem(el, obj, node);\r\n }\r\n }\r\n\r\n /**\r\n * Get all tags in the element\r\n * @return {Array} data - All tags as an array\r\n */\r\n obj.getData = function() {\r\n var data = [];\r\n for (var i = 0; i < el.children.length; i++) {\r\n // Get value\r\n var text = el.children[i].innerText.replace(\"\\n\", \"\");\r\n // Get id\r\n var value = el.children[i].getAttribute('data-value');\r\n if (! value) {\r\n value = text;\r\n }\r\n // Item\r\n if (text || value) {\r\n data.push({ text: text, value: value });\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n /**\r\n * Get the value of one tag. Null for all tags\r\n * @param {?number} index - Tag index number. Null for all tags.\r\n * @return {string} value - All tags separated by comma\r\n */\r\n obj.getValue = function(index) {\r\n var value = null;\r\n\r\n if (index != null) {\r\n // Get one individual value\r\n value = el.children[index].getAttribute('data-value');\r\n if (! value) {\r\n value = el.children[index].innerText.replace(\"\\n\", \"\");\r\n }\r\n } else {\r\n // Get all\r\n var data = [];\r\n for (var i = 0; i < el.children.length; i++) {\r\n value = el.children[i].innerText.replace(\"\\n\", \"\");\r\n if (value) {\r\n data.push(obj.getValue(i));\r\n }\r\n }\r\n value = data.join(',');\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Set the value of the element based on a string separeted by (,|;|\\r\\n)\r\n * @param {mixed} value - A string or array object with values\r\n */\r\n obj.setValue = function(mixed) {\r\n if (! mixed) {\r\n obj.reset();\r\n } else {\r\n if (el.value != mixed) {\r\n if (Array.isArray(mixed)) {\r\n obj.add(mixed);\r\n } else {\r\n // Remove whitespaces\r\n var text = (''+mixed).trim();\r\n // Tags\r\n var data = extractTags(text);\r\n // Reset\r\n el.innerHTML = '';\r\n // Add tags to the element\r\n obj.add(data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reset the data from the element\r\n */\r\n obj.reset = function() {\r\n // Empty class\r\n el.classList.add('jtags-empty');\r\n // Empty element\r\n el.innerHTML = '<div></div>';\r\n // Execute changes\r\n change();\r\n }\r\n\r\n /**\r\n * Verify if all tags in the element are valid\r\n * @return {boolean}\r\n */\r\n obj.isValid = function() {\r\n var test = 0;\r\n for (var i = 0; i < el.children.length; i++) {\r\n if (el.children[i].classList.contains('jtags_error')) {\r\n test++;\r\n }\r\n }\r\n return test == 0 ? true : false;\r\n }\r\n\r\n /**\r\n * Add one element from the suggestions to the element\r\n * @param {object} item - Node element in the suggestions container\r\n */ \r\n obj.selectIndex = function(text, value) {\r\n var node = helpers.getNode();\r\n if (node) {\r\n // Append text to the caret\r\n node.innerText = text;\r\n // Set node id\r\n if (value) {\r\n node.setAttribute('data-value', value);\r\n }\r\n // Remove any error\r\n node.classList.remove('jtags_error');\r\n if (! limit()) {\r\n // Add new item\r\n obj.add('', true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Search for suggestions\r\n * @param {object} node - Target node for any suggestions\r\n */\r\n obj.search = function(node) {\r\n // Search for\r\n var terms = node.innerText;\r\n }\r\n\r\n // Destroy tags element\r\n obj.destroy = function() {\r\n // Bind events\r\n el.removeEventListener('mouseup', tagsMouseUp);\r\n el.removeEventListener('keydown', tagsKeyDown);\r\n el.removeEventListener('keyup', tagsKeyUp);\r\n el.removeEventListener('paste', tagsPaste);\r\n el.removeEventListener('focus', tagsFocus);\r\n el.removeEventListener('blur', tagsBlur);\r\n\r\n // Remove element\r\n el.parentNode.removeChild(el);\r\n }\r\n\r\n var setFocus = function(node) {\r\n if (el.children.length) {\r\n var range = document.createRange();\r\n var sel = window.getSelection();\r\n if (! node) {\r\n var node = el.childNodes[el.childNodes.length-1];\r\n }\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\n var createElement = function(label, value, node) {\r\n var div = document.createElement('div');\r\n div.textContent = label ? label : '';\r\n if (value) {\r\n div.setAttribute('data-value', value);\r\n }\r\n\r\n if (node && node.parentNode.classList.contains('jtags')) {\r\n el.insertBefore(div, node.nextSibling);\r\n } else {\r\n el.appendChild(div);\r\n }\r\n\r\n return div;\r\n }\r\n\r\n var change = function() {\r\n // Value\r\n var value = obj.getValue();\r\n\r\n if (value != obj.options.value) {\r\n obj.options.value = value;\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, obj, obj.options.value);\r\n }\r\n\r\n // Lemonade JS\r\n if (el.value != obj.options.value) {\r\n el.value = obj.options.value;\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 filter();\r\n }\r\n\r\n /**\r\n * Filter tags\r\n */\r\n var filter = function() {\r\n for (var i = 0; i < el.children.length; i++) {\r\n if (el.children[i].tagName === 'DIV') {\r\n // Create label design\r\n if (!obj.getValue(i)) {\r\n el.children[i].classList.remove('jtags_label');\r\n } else {\r\n el.children[i].classList.add('jtags_label');\r\n\r\n // Validation in place\r\n if (typeof (obj.options.validation) == 'function') {\r\n if (obj.getValue(i)) {\r\n if (!obj.options.validation(el.children[i], el.children[i].innerText, el.children[i].getAttribute('data-value'))) {\r\n el.children[i].classList.add('jtags_error');\r\n } else {\r\n el.children[i].classList.remove('jtags_error');\r\n }\r\n } else {\r\n el.children[i].classList.remove('jtags_error');\r\n }\r\n } else {\r\n el.children[i].classList.remove('jtags_error');\r\n }\r\n }\r\n }\r\n }\r\n\r\n isEmpty();\r\n }\r\n\r\n var isEmpty = function() {\r\n // Can't be empty\r\n if (! el.innerText.trim()) {\r\n if (! el.children.length || el.children[0].tagName === 'BR') {\r\n el.innerHTML = '';\r\n setFocus(createElement());\r\n }\r\n } else {\r\n el.classList.remove('jtags-empty');\r\n }\r\n }\r\n\r\n /**\r\n * Extract tags from a string\r\n * @param {string} text - Raw string\r\n * @return {Array} data - Array with extracted tags\r\n */\r\n var extractTags = function(text) {\r\n /** @type {Array} */\r\n var data = [];\r\n\r\n /** @type {string} */\r\n var word = '';\r\n\r\n // Remove whitespaces\r\n text = text.trim();\r\n\r\n if (text) {\r\n for (var i = 0; i < text.length; i++) {\r\n if (text[i] == ',' || text[i] == ';' || text[i] == '\\n') {\r\n if (word) {\r\n data.push(word.trim());\r\n word = '';\r\n }\r\n } else {\r\n word += text[i];\r\n }\r\n }\r\n\r\n if (word) {\r\n data.push(word);\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /** @type {number} */\r\n var anchorOffset = 0;\r\n\r\n /**\r\n * Processing event keydown on the element\r\n * @param e {object}\r\n */\r\n var tagsKeyDown = function(e) {\r\n // Anchoroffset\r\n anchorOffset = window.getSelection().anchorOffset;\r\n\r\n // Verify if is empty\r\n isEmpty();\r\n\r\n // Comma\r\n if (e.key === 'Tab' || e.key === ';' || e.key === ',') {\r\n var n = window.getSelection().anchorOffset;\r\n if (n > 1) {\r\n if (limit()) {\r\n if (typeof(obj.options.onlimit) == 'function') {\r\n obj.options.onlimit(obj, obj.options.limit)\r\n }\r\n } else {\r\n obj.add('', true);\r\n }\r\n }\r\n e.preventDefault();\r\n } else if (e.key == 'Enter') {\r\n if (! search || ! search.isOpened()) {\r\n var n = window.getSelection().anchorOffset;\r\n if (n > 1) {\r\n if (! limit()) {\r\n obj.add('', true);\r\n }\r\n }\r\n e.preventDefault();\r\n }\r\n } else if (e.key == 'Backspace') {\r\n // Back space - do not let last item to be removed\r\n if (el.children.length == 1 && window.getSelection().anchorOffset < 1) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n // Search events\r\n if (search) {\r\n search.keydown(e);\r\n }\r\n\r\n // Verify if is empty\r\n isEmpty();\r\n }\r\n\r\n /**\r\n * Processing event keyup on the element\r\n * @param e {object}\r\n */\r\n var tagsKeyUp = function(e) {\r\n if (e.which == 39) {\r\n // Right arrow\r\n var n = window.getSelection().anchorOffset;\r\n if (n > 1 && n == anchorOffset) {\r\n obj.add('', true);\r\n }\r\n } else if (e.which == 13 || e.which == 38 || e.which == 40) {\r\n e.preventDefault();\r\n } else {\r\n if (search) {\r\n search.keyup(e);\r\n }\r\n }\r\n\r\n filter();\r\n }\r\n\r\n /**\r\n * Processing event paste on the element\r\n * @param e {object}\r\n */\r\n var tagsPaste = function(e) {\r\n if (e.clipboardData || e.originalEvent.clipboardData) {\r\n var text = (e.originalEvent || e).clipboardData.getData('text/plain');\r\n } else if (window.clipboardData) {\r\n var text = window.clipboardData.getData('Text');\r\n }\r\n\r\n var data = extractTags(text);\r\n\r\n if (typeof(obj.options.onbeforepaste) == 'function') {\r\n var ret = obj.options.onbeforepaste(el, obj, data);\r\n if (ret === false) {\r\n e.preventDefault();\r\n return false;\r\n } else {\r\n if (ret) {\r\n data = ret;\r\n }\r\n }\r\n }\r\n\r\n if (data.length > 1) {\r\n obj.add(data, true);\r\n e.preventDefault();\r\n } else if (data[0]) {\r\n document.execCommand('insertText', false, data[0])\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Processing event mouseup on the element\r\n * @param e {object}\r\n */\r\n var tagsMouseUp = function(e) {\r\n if (e.target.parentNode && e.target.parentNode.classList.contains('jtags')) {\r\n if (e.target.classList.contains('jtags_label') || e.target.classList.contains('jtags_error')) {\r\n var rect = e.target.getBoundingClientRect();\r\n if (rect.width - (e.clientX - rect.left) < 16) {\r\n obj.remove(e.target);\r\n }\r\n }\r\n }\r\n\r\n // Set focus in the last item\r\n if (e.target == el) {\r\n setFocus();\r\n }\r\n }\r\n\r\n var tagsFocus = function() {\r\n if (! el.classList.contains('jtags-focus')) {\r\n if (! el.children.length || obj.getValue(el.children.length - 1)) {\r\n if (! limit()) {\r\n createElement('');\r\n }\r\n }\r\n\r\n if (typeof(obj.options.onfocus) == 'function') {\r\n obj.options.onfocus(el, obj, obj.getValue());\r\n }\r\n\r\n el.classList.add('jtags-focus');\r\n }\r\n }\r\n\r\n var tagsBlur = function() {\r\n if (el.classList.contains('jtags-focus')) {\r\n if (search) {\r\n search.close();\r\n }\r\n\r\n for (var i = 0; i < el.children.length - 1; i++) {\r\n // Create label design\r\n if (! obj.getValue(i)) {\r\n el.removeChild(el.children[i]);\r\n }\r\n }\r\n\r\n change();\r\n\r\n el.classList.remove('jtags-focus');\r\n\r\n if (typeof(obj.options.onblur) == 'function') {\r\n obj.options.onblur(el, obj, obj.getValue());\r\n }\r\n }\r\n }\r\n\r\n var init = function() {\r\n // Bind events\r\n if ('touchend' in document.documentElement === true) {\r\n el.addEventListener('touchend', tagsMouseUp);\r\n } else {\r\n el.addEventListener('mouseup', tagsMouseUp);\r\n }\r\n\r\n el.addEventListener('keydown', tagsKeyDown);\r\n el.addEventListener('keyup', tagsKeyUp);\r\n el.addEventListener('paste', tagsPaste);\r\n el.addEventListener('focus', tagsFocus);\r\n el.addEventListener('blur', tagsBlur);\r\n\r\n // Editable\r\n el.setAttribute('contenteditable', true);\r\n\r\n // Prepare container\r\n el.classList.add('jtags');\r\n\r\n // Initial options\r\n obj.setOptions(options);\r\n\r\n if (typeof(obj.options.onload) == 'function') {\r\n obj.options.onload(el, obj);\r\n }\r\n\r\n // Change methods\r\n el.change = obj.setValue;\r\n\r\n // Global generic value handler\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n return obj.getValue();\r\n } else {\r\n obj.setValue(val);\r\n }\r\n }\r\n\r\n el.tags = obj;\r\n }\r\n\r\n init();\r\n\r\n return obj;\r\n}\n;// CONCATENATED MODULE: ./src/plugins/upload.js\n\r\n\r\n\r\n\r\n\r\nfunction Upload(el, options) {\r\n var obj = {};\r\n obj.options = {};\r\n\r\n // Default configuration\r\n var defaults = {\r\n type: 'image',\r\n extension: '*',\r\n input: false,\r\n minWidth: false,\r\n maxWidth: null,\r\n maxHeight: null,\r\n maxJpegSizeBytes: null, // For example, 350Kb would be 350000\r\n onchange: null,\r\n multiple: false,\r\n remoteParser: null,\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 obj.options[property] = defaults[property];\r\n }\r\n }\r\n\r\n // Multiple\r\n if (obj.options.multiple == true) {\r\n el.setAttribute('data-multiple', true);\r\n }\r\n\r\n // Container\r\n el.content = [];\r\n\r\n // Upload icon\r\n el.classList.add('jupload');\r\n\r\n if (obj.options.input == true) {\r\n el.classList.add('input');\r\n }\r\n\r\n obj.add = function(data) {\r\n // Reset container for single files\r\n if (obj.options.multiple == false) {\r\n el.content = [];\r\n el.innerText = '';\r\n }\r\n\r\n // Append to the element\r\n if (obj.options.type == 'image') {\r\n var img = document.createElement('img');\r\n img.setAttribute('src', data.file);\r\n img.setAttribute('tabindex', -1);\r\n if (! el.getAttribute('name')) {\r\n img.className = 'jfile';\r\n img.content = data;\r\n }\r\n el.appendChild(img);\r\n } else {\r\n if (data.name) {\r\n var name = data.name;\r\n } else {\r\n var name = data.file;\r\n }\r\n var div = document.createElement('div');\r\n div.innerText = name || obj.options.type;\r\n div.classList.add('jupload-item');\r\n div.setAttribute('tabindex', -1);\r\n el.appendChild(div);\r\n }\r\n\r\n if (data.content) {\r\n data.file = helpers.guid();\r\n }\r\n\r\n // Push content\r\n el.content.push(data);\r\n\r\n // Onchange\r\n if (typeof(obj.options.onchange) == 'function') {\r\n obj.options.onchange(el, data);\r\n }\r\n }\r\n\r\n obj.addFromFile = function(file) {\r\n var type = file.type.split('/');\r\n if (type[0] == obj.options.type) {\r\n var readFile = new FileReader();\r\n readFile.addEventListener(\"load\", function (v) {\r\n var data = {\r\n file: v.srcElement.result,\r\n extension: file.name.substr(file.name.lastIndexOf('.') + 1),\r\n name: file.name,\r\n size: file.size,\r\n lastmodified: file.lastModified,\r\n content: v.srcElement.result,\r\n }\r\n\r\n obj.add(data);\r\n });\r\n\r\n readFile.readAsDataURL(file);\r\n } else {\r\n alert(dictionary.translate('This extension is not allowed'));\r\n }\r\n }\r\n\r\n obj.addFromUrl = function(src) {\r\n if (src.substr(0,4) != 'data' && ! obj.options.remoteParser) {\r\n console.error('remoteParser not defined in your initialization');\r\n } else {\r\n // This is to process cross domain images\r\n if (src.substr(0,4) == 'data') {\r\n var extension = src.split(';')\r\n extension = extension[0].split('/');\r\n var type = extension[0].replace('data:','');\r\n if (type == obj.options.type) {\r\n var data = {\r\n file: src,\r\n name: '',\r\n extension: extension[1],\r\n content: src,\r\n }\r\n obj.add(data);\r\n } else {\r\n alert(obj.options.text.extensionNotAllowed);\r\n }\r\n } else {\r\n var extension = src.substr(src.lastIndexOf('.') + 1);\r\n // Work for cross browsers\r\n src = obj.options.remoteParser + src;\r\n // Get remove content\r\n ajax({\r\n url: src,\r\n type: 'GET',\r\n dataType: 'blob',\r\n success: function(data) {\r\n //add(extension[0].replace('data:',''), data);\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n var getDataURL = function(canvas, type) {\r\n var compression = 0.92;\r\n var lastContentLength = null;\r\n var content = canvas.toDataURL(type, compression);\r\n while (obj.options.maxJpegSizeBytes && type === 'image/jpeg' &&\r\n content.length > obj.options.maxJpegSizeBytes && content.length !== lastContentLength) {\r\n // Apply the compression\r\n compression *= 0.9;\r\n lastContentLength = content.length;\r\n content = canvas.toDataURL(type, compression);\r\n }\r\n return content;\r\n }\r\n\r\n var mime = obj.options.type + '/' + obj.options.extension;\r\n var input = document.createElement('input');\r\n input.type = 'file';\r\n input.setAttribute('accept', mime);\r\n input.onchange = function() {\r\n for (var i = 0; i < this.files.length; i++) {\r\n obj.addFromFile(this.files[i]);\r\n }\r\n }\r\n\r\n // Allow multiple files\r\n if (obj.options.multiple == true) {\r\n input.setAttribute('multiple', true);\r\n }\r\n\r\n var current = null;\r\n\r\n el.addEventListener(\"click\", function(e) {\r\n current = null;\r\n if (! el.children.length || e.target === el) {\r\n helpers.click(input);\r\n } else {\r\n if (e.target.parentNode == el) {\r\n current = e.target;\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener(\"dblclick\", function(e) {\r\n helpers.click(input);\r\n });\r\n\r\n el.addEventListener('dragenter', function(e) {\r\n el.style.border = '1px dashed #000';\r\n });\r\n\r\n el.addEventListener('dragleave', function(e) {\r\n el.style.border = '1px solid #eee';\r\n });\r\n\r\n el.addEventListener('dragstop', function(e) {\r\n el.style.border = '1px solid #eee';\r\n });\r\n\r\n el.addEventListener('dragover', function(e) {\r\n e.preventDefault();\r\n });\r\n\r\n el.addEventListener('keydown', function(e) {\r\n if (current && e.which == 46) {\r\n var index = Array.prototype.indexOf.call(el.children, current);\r\n if (index >= 0) {\r\n el.content.splice(index, 1);\r\n current.remove();\r\n current = null;\r\n }\r\n }\r\n });\r\n\r\n el.addEventListener('drop', function(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n var html = (e.originalEvent || e).dataTransfer.getData('text/html');\r\n var file = (e.originalEvent || e).dataTransfer.files;\r\n\r\n if (file.length) {\r\n for (var i = 0; i < e.dataTransfer.files.length; i++) {\r\n obj.addFromFile(e.dataTransfer.files[i]);\r\n }\r\n } else if (html) {\r\n if (obj.options.multiple == false) {\r\n el.innerText = '';\r\n }\r\n\r\n // Create temp element\r\n let img = [];\r\n utils_filter(html, img);\r\n if (img.length) {\r\n for (var i = 0; i < img.length; i++) {\r\n obj.addFromUrl(img[i]);\r\n }\r\n }\r\n }\r\n\r\n el.style.border = '1px solid #eee';\r\n\r\n return false;\r\n });\r\n\r\n el.val = function(val) {\r\n if (val === undefined) {\r\n return el.content && el.content.length ? el.content : null;\r\n } else {\r\n // Reset\r\n el.innerText = '';\r\n el.content = [];\r\n\r\n if (val) {\r\n if (Array.isArray(val)) {\r\n for (var i = 0; i < val.length; i++) {\r\n if (typeof(val[i]) == 'string') {\r\n obj.add({ file: val[i] });\r\n } else {\r\n obj.add(val[i]);\r\n }\r\n }\r\n } else if (typeof(val) == 'string') {\r\n obj.add({ file: val });\r\n }\r\n }\r\n }\r\n }\r\n\r\n el.upload = el.image = obj;\r\n\r\n return obj;\r\n}\r\n\n// EXTERNAL MODULE: ./packages/sha512/sha512.js\nvar sha512 = __webpack_require__(195);\nvar sha512_default = /*#__PURE__*/__webpack_require__.n(sha512);\n;// CONCATENATED MODULE: ./src/jsuites.js\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar jsuites_jSuites = {\r\n // Helpers\r\n ...dictionary,\r\n ...helpers,\r\n /** Current version */\r\n version: '5.13.3',\r\n /** Bind new extensions to Jsuites */\r\n setExtensions: function(o) {\r\n if (typeof(o) == 'object') {\r\n var k = Object.keys(o);\r\n for (var i = 0; i < k.length; i++) {\r\n jsuites_jSuites[k[i]] = o[k[i]];\r\n }\r\n }\r\n },\r\n tracking: tracking,\r\n path: Path,\r\n sorting: Sorting,\r\n lazyLoading: LazyLoading,\r\n // Plugins\r\n ajax: ajax,\r\n animation: animation,\r\n calendar: calendar,\r\n color: Color,\r\n contextmenu: contextmenu,\r\n dropdown: dropdown,\r\n editor: editor,\r\n floating: floating,\r\n form: plugins_form,\r\n mask: mask,\r\n modal: modal,\r\n notification: notification,\r\n palette: palette,\r\n picker: Picker,\r\n progressbar: Progressbar,\r\n rating: Rating,\r\n search: Search,\r\n slider: Slider,\r\n tabs: Tabs,\r\n tags: Tags,\r\n toolbar: Toolbar,\r\n upload: Upload,\r\n validations: validations,\r\n}\r\n\r\n// Legacy\r\njsuites_jSuites.image = Upload;\r\njsuites_jSuites.image.create = function(data) {\r\n var img = document.createElement('img');\r\n img.setAttribute('src', data.file);\r\n img.className = 'jfile';\r\n img.setAttribute('tabindex', -1);\r\n img.content = data;\r\n\r\n return img;\r\n}\r\n\r\njsuites_jSuites.tracker = plugins_form;\r\njsuites_jSuites.loading = animation.loading;\r\njsuites_jSuites.sha512 = (sha512_default());\r\n\r\n\r\n/** Core events */\r\nconst Events = function() {\r\n\r\n if (typeof(window['jSuitesStateControl']) === 'undefined') {\r\n window['jSuitesStateControl'] = [];\r\n } else {\r\n // Do nothing\r\n return;\r\n }\r\n\r\n const find = function(DOMElement, component) {\r\n if (DOMElement[component.type] && DOMElement[component.type] == component) {\r\n return true;\r\n }\r\n if (DOMElement.component && DOMElement.component == component) {\r\n return true;\r\n }\r\n if (DOMElement.parentNode) {\r\n return find(DOMElement.parentNode, component);\r\n }\r\n return false;\r\n }\r\n\r\n const isOpened = function(e) {\r\n let state = window['jSuitesStateControl'];\r\n if (state && state.length > 0) {\r\n for (let i = 0; i < state.length; i++) {\r\n if (state[i] && ! find(e, state[i])) {\r\n state[i].close();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Width of the border\r\n let cornerSize = 15;\r\n\r\n // Current element\r\n let element = null;\r\n\r\n // Controllers\r\n let editorAction = false;\r\n\r\n // Event state\r\n let state = {\r\n x: null,\r\n y: null,\r\n }\r\n\r\n // Tooltip element\r\n let tooltip = document.createElement('div')\r\n tooltip.classList.add('jtooltip');\r\n\r\n const isWebcomponent = function(e) {\r\n return e && (e.shadowRoot || (e.tagName && e.tagName.includes('-')));\r\n }\r\n\r\n const getElement = function(e) {\r\n let d;\r\n let element;\r\n // Which component I am clicking\r\n let path = e.path || (e.composedPath && e.composedPath());\r\n\r\n // If path available get the first element in the chain\r\n if (path) {\r\n element = path[0];\r\n // Adjustment sales force\r\n if (element && isWebcomponent(element) && ! element.shadowRoot && e.toElement) {\r\n element = e.toElement;\r\n }\r\n } else {\r\n // Try to guess using the coordinates\r\n if (e.target && isWebcomponent(e.target)) {\r\n d = e.target.shadowRoot;\r\n } else {\r\n d = document;\r\n }\r\n // Get the first target element\r\n element = d.elementFromPoint(x, y);\r\n }\r\n return element;\r\n }\r\n\r\n // Events\r\n const mouseDown = function(e) {\r\n // Verify current components tracking\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n let element = getElement(e);\r\n // Editable\r\n let editable = element && element.tagName === 'DIV' && element.getAttribute('contentEditable');\r\n // Check if this is the floating\r\n let item = jsuites_jSuites.findElement(element, 'jpanel');\r\n // Jfloating found\r\n if (item && ! item.classList.contains(\"readonly\") && ! editable) {\r\n // Keep the tracking information\r\n let rect = item.getBoundingClientRect();\r\n let angle = 0;\r\n if (item.style.rotate) {\r\n // Extract the angle value from the match and convert it to a number\r\n angle = parseFloat(item.style.rotate);\r\n }\r\n let action = 'move';\r\n if (element.getAttribute('data-action')) {\r\n action = element.getAttribute('data-action');\r\n } else {\r\n if (item.style.cursor) {\r\n action = 'resize';\r\n } else {\r\n item.style.cursor = 'move';\r\n }\r\n }\r\n\r\n // Action\r\n editorAction = {\r\n action: action,\r\n a: angle,\r\n e: item,\r\n x: x,\r\n y: y,\r\n l: rect.left,\r\n t: rect.top,\r\n b: rect.bottom,\r\n r: rect.right,\r\n w: rect.width,\r\n h: rect.height,\r\n d: item.style.cursor,\r\n actioned: false,\r\n }\r\n // Make sure width and height styling is OK\r\n if (! item.style.width) {\r\n item.style.width = rect.width + 'px';\r\n }\r\n if (! item.style.height) {\r\n item.style.height = rect.height + 'px';\r\n }\r\n } else {\r\n // No floating action found\r\n editorAction = false;\r\n }\r\n\r\n isOpened(element);\r\n\r\n focus(e);\r\n }\r\n\r\n const calculateAngle = function(x1, y1, x2, y2, x3, y3) {\r\n // Calculate dx and dy for the first line\r\n const dx1 = x2 - x1;\r\n const dy1 = y2 - y1;\r\n // Calculate dx and dy for the second line\r\n const dx2 = x3 - x1;\r\n const dy2 = y3 - y1;\r\n // Calculate the angle for the first line\r\n let angle1 = Math.atan2(dy1, dx1);\r\n // Calculate the angle for the second line\r\n let angle2 = Math.atan2(dy2, dx2);\r\n // Calculate the angle difference in radians\r\n let angleDifference = angle2 - angle1;\r\n // Convert the angle difference to degrees\r\n angleDifference = angleDifference * (180 / Math.PI);\r\n // Normalize the angle difference to be within [0, 360) degrees\r\n if (angleDifference < 0) {\r\n angleDifference += 360;\r\n }\r\n return angleDifference;\r\n }\r\n\r\n const mouseUp = function(e) {\r\n if (editorAction && editorAction.e) {\r\n if (typeof(editorAction.e.refresh) == 'function' && state.actioned) {\r\n editorAction.e.refresh();\r\n }\r\n editorAction.e.style.cursor = '';\r\n }\r\n\r\n // Reset\r\n state = {\r\n x: null,\r\n y: null,\r\n }\r\n\r\n editorAction = false;\r\n }\r\n\r\n const mouseMove = function(e) {\r\n if (editorAction) {\r\n let x = e.clientX || e.pageX;\r\n let y = e.clientY || e.pageY;\r\n\r\n if (state.x == null && state.y == null) {\r\n state.x = x;\r\n state.y = y;\r\n }\r\n\r\n // Action on going\r\n if (editorAction.action === 'move') {\r\n var dx = x - state.x;\r\n var dy = y - state.y;\r\n var top = editorAction.e.offsetTop + dy;\r\n var left = editorAction.e.offsetLeft + dx;\r\n\r\n // Update position\r\n editorAction.e.style.top = top + 'px';\r\n editorAction.e.style.left = left + 'px';\r\n\r\n // Update element\r\n if (typeof (editorAction.e.refresh) == 'function') {\r\n state.actioned = true;\r\n editorAction.e.refresh('position', top, left);\r\n }\r\n } else if (editorAction.action === 'rotate') {\r\n let ox = editorAction.l+editorAction.w/2;\r\n let oy = editorAction.t+editorAction.h/2;\r\n let angle = calculateAngle(ox, oy, editorAction.x, editorAction.y, x, y);\r\n angle = angle + editorAction.a % 360;\r\n angle = Math.round(angle / 2) * 2;\r\n editorAction.e.style.rotate = `${angle}deg`;\r\n // Update element\r\n if (typeof (editorAction.e.refresh) == 'function') {\r\n state.actioned = true;\r\n editorAction.e.refresh('rotate', angle);\r\n }\r\n } else if (editorAction.action === 'resize') {\r\n let top = null;\r\n let left = null;\r\n let width = null;\r\n let height = null;\r\n\r\n if (editorAction.d == 'e-resize' || editorAction.d == 'ne-resize' || editorAction.d == 'se-resize') {\r\n width = editorAction.e.offsetWidth + (x - state.x);\r\n\r\n if (e.shiftKey) {\r\n height = editorAction.e.offsetHeight + (x - state.x) * (editorAction.e.offsetHeight / editorAction.e.offsetWidth);\r\n }\r\n } else if (editorAction.d === 'w-resize' || editorAction.d == 'nw-resize'|| editorAction.d == 'sw-resize') {\r\n left = editorAction.e.offsetLeft + (x - state.x);\r\n width = editorAction.e.offsetLeft + editorAction.e.offsetWidth - left;\r\n\r\n if (e.shiftKey) {\r\n height = editorAction.e.offsetHeight - (x - state.x) * (editorAction.e.offsetHeight / editorAction.e.offsetWidth);\r\n }\r\n }\r\n\r\n if (editorAction.d == 's-resize' || editorAction.d == 'se-resize' || editorAction.d == 'sw-resize') {\r\n if (! height) {\r\n height = editorAction.e.offsetHeight + (y - state.y);\r\n }\r\n } else if (editorAction.d === 'n-resize' || editorAction.d == 'ne-resize' || editorAction.d == 'nw-resize') {\r\n top = editorAction.e.offsetTop + (y - state.y);\r\n height = editorAction.e.offsetTop + editorAction.e.offsetHeight - top;\r\n }\r\n\r\n if (top) {\r\n editorAction.e.style.top = top + 'px';\r\n }\r\n if (left) {\r\n editorAction.e.style.left = left + 'px';\r\n }\r\n if (width) {\r\n editorAction.e.style.width = width + 'px';\r\n }\r\n if (height) {\r\n editorAction.e.style.height = height + 'px';\r\n }\r\n\r\n // Update element\r\n if (typeof(editorAction.e.refresh) == 'function') {\r\n state.actioned = true;\r\n editorAction.e.refresh('dimensions', width, height);\r\n }\r\n }\r\n\r\n state.x = x;\r\n state.y = y;\r\n } else {\r\n let element = getElement(e);\r\n // Resize action\r\n let item = jsuites_jSuites.findElement(element, 'jpanel');\r\n // Found eligible component\r\n if (item) {\r\n // Resizing action\r\n let controls = item.classList.contains('jpanel-controls');\r\n if (controls) {\r\n let position = element.getAttribute('data-position');\r\n if (position) {\r\n item.style.cursor = position;\r\n } else {\r\n item.style.cursor = '';\r\n }\r\n } else if (item.getAttribute('tabindex')) {\r\n let rect = item.getBoundingClientRect();\r\n //console.log(e.clientY - rect.top, rect.width - (e.clientX - rect.left), cornerSize)\r\n if (e.clientY - rect.top < cornerSize) {\r\n if (rect.width - (e.clientX - rect.left) < cornerSize) {\r\n item.style.cursor = 'ne-resize';\r\n } else if (e.clientX - rect.left < cornerSize) {\r\n item.style.cursor = 'nw-resize';\r\n } else {\r\n item.style.cursor = 'n-resize';\r\n }\r\n } else if (rect.height - (e.clientY - rect.top) < cornerSize) {\r\n if (rect.width - (e.clientX - rect.left) < cornerSize) {\r\n item.style.cursor = 'se-resize';\r\n } else if (e.clientX - rect.left < cornerSize) {\r\n item.style.cursor = 'sw-resize';\r\n } else {\r\n item.style.cursor = 's-resize';\r\n }\r\n } else if (rect.width - (e.clientX - rect.left) < cornerSize) {\r\n item.style.cursor = 'e-resize';\r\n } else if (e.clientX - rect.left < cornerSize) {\r\n item.style.cursor = 'w-resize';\r\n } else {\r\n item.style.cursor = '';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n let position = ['n','ne','e','se','s','sw','w','nw','rotate'];\r\n position.forEach(function(v, k) {\r\n position[k] = document.createElement('div');\r\n position[k].classList.add('jpanel-action');\r\n if (v === 'rotate') {\r\n position[k].setAttribute('data-action', 'rotate');\r\n } else {\r\n position[k].setAttribute('data-action', 'resize');\r\n position[k].setAttribute('data-position', v + '-resize');\r\n }\r\n });\r\n\r\n let currentElement;\r\n\r\n const focus = function(e) {\r\n let element = getElement(e);\r\n // Check if this is floating\r\n let item = jsuites_jSuites.findElement(element, 'jpanel');\r\n if (item && ! item.classList.contains(\"readonly\") && item.classList.contains('jpanel-controls')) {\r\n item.append(...position);\r\n\r\n if (! item.classList.contains('jpanel-rotate')) {\r\n position[position.length-1].remove();\r\n }\r\n\r\n currentElement = item;\r\n } else {\r\n blur(e);\r\n }\r\n }\r\n\r\n const blur = function(e) {\r\n if (currentElement) {\r\n position.forEach(function(v) {\r\n v.remove();\r\n });\r\n currentElement = null;\r\n }\r\n }\r\n\r\n const mouseOver = function(e) {\r\n let element = getElement(e);\r\n var message = element.getAttribute('data-tooltip');\r\n if (message) {\r\n // Instructions\r\n tooltip.innerText = message;\r\n\r\n // Position\r\n if (e.changedTouches && e.changedTouches[0]) {\r\n var x = e.changedTouches[0].clientX;\r\n var y = e.changedTouches[0].clientY;\r\n } else {\r\n var x = e.clientX;\r\n var y = e.clientY;\r\n }\r\n\r\n tooltip.style.top = y + 'px';\r\n tooltip.style.left = x + 'px';\r\n document.body.appendChild(tooltip);\r\n } else if (tooltip.innerText) {\r\n tooltip.innerText = '';\r\n document.body.removeChild(tooltip);\r\n }\r\n }\r\n\r\n const contextMenu = function(e) {\r\n var item = document.activeElement;\r\n if (item && typeof(item.contextmenu) == 'function') {\r\n // Create edition\r\n item.contextmenu(e);\r\n\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n } else {\r\n // Search for possible context menus\r\n item = jsuites_jSuites.findElement(e.target, function(o) {\r\n return o.tagName && o.getAttribute('aria-contextmenu-id');\r\n });\r\n\r\n if (item) {\r\n var o = document.querySelector('#' + item);\r\n if (! o) {\r\n console.error('JSUITES: contextmenu id not found: ' + item);\r\n } else {\r\n o.contextmenu.open(e);\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n }\r\n }\r\n\r\n const keyDown = function(e) {\r\n let item = document.activeElement;\r\n if (item) {\r\n if (e.key === \"Delete\" && typeof(item.delete) == 'function') {\r\n item.delete();\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n\r\n let state = window['jSuitesStateControl'];\r\n if (state && state.length > 0) {\r\n item = state[state.length - 1];\r\n if (item) {\r\n if (e.key === \"Escape\" && typeof(item.isOpened) == 'function' && typeof(item.close) == 'function') {\r\n if (item.isOpened()) {\r\n item.close();\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const input = function(e) {\r\n if (e.target.getAttribute('data-mask') || e.target.mask) {\r\n jsuites_jSuites.mask(e);\r\n }\r\n }\r\n\r\n document.addEventListener('focusin', focus);\r\n document.addEventListener('mouseup', mouseUp);\r\n document.addEventListener(\"mousedown\", mouseDown);\r\n document.addEventListener('mousemove', mouseMove);\r\n document.addEventListener('mouseover', mouseOver);\r\n document.addEventListener('keydown', keyDown);\r\n document.addEventListener('contextmenu', contextMenu);\r\n document.addEventListener('input', input);\r\n}\r\n\r\nif (typeof(document) !== \"undefined\") {\r\n Events();\r\n}\r\n\r\n/* harmony default export */ var jsuites = (jsuites_jSuites);\n}();\njSuites = __webpack_exports__[\"default\"];\n/******/ })()\n;\n\n return jSuites;\n})));"]}