{"version":3,"file":"slx.calendar.min.js","sources":["dist/js/slx.calendar.js"],"sourcesContent":["/**\r\n * SlxControls 1.2.36 ({@link https://www.selerix.com})\r\n * This is unpublished proprietary source code of Selerix Systems, Inc. The\r\n * copyright notice above is not evidence any actual or intended\r\n * publication of such source code.\r\n * @copyright Copyright 2024 Selerix Systems, Inc. All Rights Reserved.\r\n */\r\n(function (global) {\r\n\t'use strict';\r\n\tvar x = global.SlxControl;\r\n\r\n\t/**\r\n\t * slx.calendar\r\n\t * @requires slx.core\r\n\t */\r\n\tx.slx.calendar = function () {\r\n\t\tvar that = this;\r\n\t\tx.slx.base.apply(that, arguments);\r\n\r\n\t\t// reference current element\r\n\t\tvar el = that._element;\r\n\t\tif (el === void 0) { return this; }\r\n\t\telse if (el.length === 0) { return el; }\r\n\r\n\t\t// get date locale and language\r\n\t\tvar _getLocale = function(lang) {\r\n\t\t\tif (!Date['locale']) {\r\n\t\t\t\treturn Date.addLocale();\r\n\t\t\t} else if (!lang) {\r\n\t\t\t\treturn Date['locale'];\r\n\t\t\t}\r\n\r\n\t\t\treturn Date['locale'][lang] || Date['locale']['en'];\r\n\t\t};\r\n\r\n\t\t// set custom settings from data props and attributes\r\n\t\tthat.id = that.id || el.slxUniqueId();\r\n\t\tthat.selector = '#' + that.id;\r\n\t\tthat.showControls = that.showControls || el.data('showcontrols');\r\n\t\tthat.onChange = that.onChange || el.attr('onchange') !== void 0 ? x.eval.call(el[0], el.attr('onchange'), 'event') : void 0;\r\n\t\tthat.view = that.view || el.data('view') || 'month';\r\n\t\tthat.lang = that.lang && (that.lang in _getLocale()) ? that.lang : 'en';\r\n\t\tthat.format = that.format || el.data('format') || _getLocale(that.lang).format;\r\n\t\tthat.mobileMaxWidth = that.mobileMaxWidth || el.data('mobile-maxwidth') || 767;\r\n\t\tthat.html5 = that.html5 || el.data('html5') === false ? false : true;\r\n\r\n\t\t// local flags and references\r\n\t\tvar _today = new Date(), _current = new Date(_today.getFullYear(), _today.getMonth(), 1);\r\n\t\t_today.setHours(0); _today.setMinutes(0); _today.setSeconds(0); _today.setMilliseconds(0);\r\n\t\tvar _hidden = x(that.selector + '_value');\r\n\t\tvar _controls = { container: null, previous: null, month: null, year: null, next: null }, _table;\r\n\r\n\t\t// break date format into month, day, year parts\r\n\t\tvar _formatParts;\r\n\t\t(function() {\r\n\t\t\t// get a part of the format\r\n\t\t\tvar getPart = function(i, part) {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tindex: i,\r\n\t\t\t\t\tlength: part.length,\r\n\t\t\t\t\tvalue: part\r\n\t\t\t\t};\r\n\t\t\t};\r\n\r\n\t\t\t// get each format part\r\n\t\t\tvar year, month, day;\r\n\t\t\tvar formatParts = that.format.split(/[\\/-]/);\r\n\t\t\tfor (var i = 0; i < formatParts.length; i++) {\r\n\t\t\t\tvar p = formatParts[i];\r\n\t\t\t\tif (p.indexOf('M') > -1) {\r\n\t\t\t\t\tmonth = getPart(i, p);\r\n\t\t\t\t} else if (p.indexOf('d') > -1) {\r\n\t\t\t\t\tday = getPart(i, p);\r\n\t\t\t\t} else if (p.indexOf('y') > -1) {\r\n\t\t\t\t\tyear = getPart(i, p);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// set internal variable\r\n\t\t\t_formatParts = {\r\n\t\t\t\tmonth: month,\r\n\t\t\t\tday: day,\r\n\t\t\t\tyear: year,\r\n\t\t\t\tlength: formatParts.length\r\n\t\t\t};\r\n\t\t})();\r\n\r\n\t\t// set default view\r\n\t\tthat.view = !_formatParts.day ? 'year' : that.view;\r\n\r\n\t\t// get previous timeframe\r\n\t\tvar _getPrevious = function (view) {\r\n\t\t\tswitch (view) {\r\n\t\t\t\tcase 'year':\r\n\t\t\t\t\t// previous year\r\n\t\t\t\t\treturn new Date(_current.getFullYear() - 1, 0, 1);\r\n\t\t\t\tcase 'decade':\r\n\t\t\t\t\t// previous decade\r\n\t\t\t\t\treturn new Date(_current.getFullYear() - 12, 0, 1);\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// previous month\r\n\t\t\t\t\treturn new Date(_current.getFullYear(), _current.getMonth() - 1, 1);\r\n\t\t\t}\r\n\t\t};\r\n\t\t// get next timeframe\r\n\t\tvar _getNext = function (view) {\r\n\t\t\tswitch (view) {\r\n\t\t\t\tcase 'year':\r\n\t\t\t\t\t// next year\r\n\t\t\t\t\treturn new Date(_current.getFullYear() + 1, 0, 1);\r\n\t\t\t\tcase 'decade':\r\n\t\t\t\t\t// next decade\r\n\t\t\t\t\treturn new Date(_current.getFullYear() + 12, 0, 1);\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// next month\r\n\t\t\t\t\treturn new Date(_current.getFullYear(), _current.getMonth() + 1, 1);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// get and set value\r\n\t\tthat.value = function (v) {\r\n\t\t\tif (v === void 0) {\r\n\t\t\t\t// get value\r\n\t\t\t\treturn _hidden.slxVal();\r\n\t\t\t} else {\r\n\t\t\t\t// set value\r\n\t\t\t\tvar ischange = v !== _hidden.slxVal();\r\n\t\t\t\tvar h = _hidden.slxVal(v);\r\n\t\t\t\t// trigger change event\r\n\t\t\t\tif (ischange) {\r\n\t\t\t\t\t_hidden.trigger('change');\r\n\t\t\t\t\tel.trigger('change');\r\n\r\n\t\t\t\t\t// trigger viewchange event\r\n\t\t\t\t\tvar d = that.dateValue();\r\n\t\t\t\t\tif ((_formatParts.day && d.getMonth() !== _current.getMonth()) || d.getFullYear() !== _current.getFullYear()) {\r\n\t\t\t\t\t\t_current = new Date(d.getFullYear(), d.getMonth(), 1);\r\n\t\t\t\t\t\tel.trigger('viewchange.slx.calendar');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn h;\r\n\t\t\t}\r\n\t\t};\r\n\t\t// get and set text\r\n\t\tthat.text = function (v) {\r\n\t\t\tif (v === void 0) {\r\n\t\t\t\t// get text\r\n\t\t\t\treturn el.slxVal();\r\n\t\t\t} else {\r\n\t\t\t\t// set text\r\n\t\t\t\tif (v === '') { that.value(''); }\r\n\t\t\t\treturn el.slxVal(v);\r\n\t\t\t}\r\n\t\t};\r\n\t\t// get and set value using Date object\r\n\t\tthat.dateValue = function (v) {\r\n\t\t\t// get date value\r\n\t\t\tif (v === void 0) {\r\n\t\t\t\tvar parts = _hidden.slxVal().split(/[\\D]/);\r\n\t\t\t\tvar m = _formatParts.month ? parts[_formatParts.month.index] : '01';\r\n\t\t\t\tvar d = _formatParts.day ? parts[_formatParts.day.index] : '01';\r\n\t\t\t\tvar y = _formatParts.year ? parts[_formatParts.year.index] : '0000';\r\n\r\n\t\t\t\treturn new Date(y, m - 1, d);\r\n\t\t\t}\r\n\t\t\t// set date value\r\n\t\t\telse if (v instanceof Date) { that.value(v.toString(that.format)); }\r\n\t\t};\r\n\r\n\t\t// table cell click handler\r\n\t\tvar _cellClick = function () {\r\n\t\t\t// get current table\r\n\t\t\tvar c = _table.data('current'), d = x(this).data('date');\r\n\t\t\t_table.find('.active').removeClass('active');\r\n\t\t\tx(this).addClass('active');\r\n\r\n\t\t\t// switch to month view\r\n\t\t\tvar _switchToMonth = function () {\r\n\t\t\t\tthat.view = 'month';\r\n\t\t\t\t_table.removeClass('slx-calendar-view-year').removeClass('slx-calendar-view-decade').addClass('slx-calendar-view-month');\r\n\t\t\t\t_controls.month.show();\r\n\t\t\t\t_current = d;\r\n\t\t\t\t// trigger viewchange\r\n\t\t\t\tel.trigger('viewchange.slx.calendar');\r\n\t\t\t};\r\n\r\n\t\t\t// switch to year view\r\n\t\t\tvar _switchToYear = function () {\r\n\t\t\t\tthat.view = 'year';\r\n\t\t\t\t_table.removeClass('slx-calendar-view-month').removeClass('slx-calendar-view-decade').addClass('slx-calendar-view-year');\r\n\t\t\t\t_controls.month.hide();\r\n\t\t\t\t_current = d;\r\n\t\t\t\t// trigger viewchange\r\n\t\t\t\tel.trigger('viewchange.slx.calendar');\r\n\t\t\t};\r\n\r\n\t\t\t// switch view\r\n\t\t\tswitch (that.view) {\r\n\t\t\t\tcase 'decade':\r\n\t\t\t\t\t// switch from decade to year view\r\n\t\t\t\t\t_switchToYear();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'year':\r\n\t\t\t\t\t// switch from year to month view\r\n\t\t\t\t\tif (_formatParts.day) {\r\n\t\t\t\t\t\t_switchToMonth();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthat.dateValue(d);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// set date value\r\n\t\t\t\t\tthat.dateValue(d);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t/* build year view */\r\n\t\tvar _buildYear = function (table) {\r\n\t\t\t// build table body\r\n\t\t\tvar section, row, cell;\r\n\t\t\ttable.append(section = x('
'));\r\n\t\t\tsection.append(row = x('