diff --git a/README.md b/README.md index 0d647b4a..080a407e 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ Heat.js [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Heat.js%2C%20a%20free%20JavaScript%heat%20map&url=https://github.com/williamtroup/Heat.js&hashtags=javascript,heat,map) -[![npm](https://img.shields.io/badge/npmjs-v2.7.2-blue)](https://www.npmjs.com/package/jheat.js) -[![nuget](https://img.shields.io/badge/nuget-v2.7.2-purple)](https://www.nuget.org/packages/jHeat.js/) +[![npm](https://img.shields.io/badge/npmjs-v2.8.0-blue)](https://www.npmjs.com/package/jheat.js) +[![nuget](https://img.shields.io/badge/nuget-v2.8.0-purple)](https://www.nuget.org/packages/jHeat.js/) [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/williamtroup/Heat.js/blob/main/LICENSE.txt) [![discussions Welcome](https://img.shields.io/badge/discussions-Welcome-red)](https://github.com/williamtroup/Heat.js/discussions) [![coded by William Troup](https://img.shields.io/badge/coded_by-William_Troup-yellow)](https://william-troup.com/) >

🌞 A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends.

->

v2.7.2

+>

v2.8.0


![Heat.js](docs/images/main.png) @@ -27,7 +27,7 @@ Heat.js - Fully configurable per DOM element. - Toggling colors on/off support. - Export all data to CSV, JSON, XML, and TXT. -- Import data from JSON and TXT. +- Import data from JSON, TXT, and CSV. - 51 language translations available! - Trend types allows data to be split up and viewed separately. - Customizable tooltips. diff --git a/README_NUGET.md b/README_NUGET.md index 148366fc..807b5d7f 100644 --- a/README_NUGET.md +++ b/README_NUGET.md @@ -1,8 +1,8 @@ -# Heat.js v2.7.2 +# Heat.js v2.8.0 [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Heat.js%2C%20a%20free%20JavaScript%heat%20map&url=https://github.com/williamtroup/Heat.js&hashtags=javascript,heat,map) -[![npm](https://img.shields.io/badge/npmjs-v2.7.2-blue)](https://www.npmjs.com/package/jheat.js) -[![nuget](https://img.shields.io/badge/nuget-v2.7.2-purple)](https://www.nuget.org/packages/jHeat.js/) +[![npm](https://img.shields.io/badge/npmjs-v2.8.0-blue)](https://www.npmjs.com/package/jheat.js) +[![nuget](https://img.shields.io/badge/nuget-v2.8.0-purple)](https://www.nuget.org/packages/jHeat.js/) [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/williamtroup/Heat.js/blob/main/LICENSE.txt) [![discussions Welcome](https://img.shields.io/badge/discussions-Welcome-red)](https://github.com/williamtroup/Heat.js/discussions) [![coded by William Troup](https://img.shields.io/badge/coded_by-William_Troup-yellow)](https://william-troup.com/) @@ -20,7 +20,7 @@ - Fully configurable per DOM element. - Toggling colors on/off support. - Export all data to CSV, JSON, XML, and TXT. -- Import data from JSON and TXT. +- Import data from JSON, TXT, and CSV. - 51 language translations available! - Trend types allows data to be split up and viewed separately. - Customizable tooltips. diff --git a/dist/heat.js b/dist/heat.js index 14103797..7daf20ee 100644 --- a/dist/heat.js +++ b/dist/heat.js @@ -1,15 +1,12 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ (function() { + var _parameter_Document = null, _parameter_Window = null, _parameter_Math = null, _parameter_JSON = null, _public = {}, _configuration = {}, _string = {empty:"", space:" ", newLine:"\n", dash:"-", underscore:"_", plus:"+", zero:"0", colon:":", comma:","}, _value = {notFound:-1}, _internal_Name_Holiday = "HOLIDAY", _local_Storage_Start_ID = "HJS_", _default_MonthsToShow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], _default_DaysToShow = [1, 2, 3, 4, 5, 6, 7], _elements_Type = {}, _elements_Day_Width = + null, _elements_DateCounts = {}, _elements_View_Name_Map = "map", _elements_View_Name_Chart = "chart", _elements_View_Name_Statistics = "statistics", _elements_View_Map = 1, _elements_View_Chart = 2, _elements_View_Statistics = 3, _export_Type_Csv = "csv", _export_Type_Json = "json", _export_Type_Xml = "xml", _export_Type_Txt = "txt", _attribute_Name_Options = "data-heat-options"; function render() { - var tagTypes = _configuration.domElementTypes; - var tagTypesLength = tagTypes.length; - var tagTypeIndex = 0; - for (; tagTypeIndex < tagTypesLength; tagTypeIndex++) { - var domElements = _parameter_Document.getElementsByTagName(tagTypes[tagTypeIndex]); - var elements = [].slice.call(domElements); - var elementsLength = elements.length; - var elementIndex = 0; - for (; elementIndex < elementsLength; elementIndex++) { + var tagTypes = _configuration.domElementTypes, tagTypesLength = tagTypes.length; + for (var tagTypeIndex = 0; tagTypeIndex < tagTypesLength; tagTypeIndex++) { + var domElements = _parameter_Document.getElementsByTagName(tagTypes[tagTypeIndex]), elements = [].slice.call(domElements), elementsLength = elements.length; + for (var elementIndex = 0; elementIndex < elementsLength; elementIndex++) { if (!renderElement(elements[elementIndex])) { break; } @@ -40,8 +37,7 @@ return result; } function renderBindingOptions(data, element) { - var bindingOptions = buildAttributeOptions(data); - var view = !isDefinedString(bindingOptions.view) ? _string.empty : bindingOptions.view.toLowerCase(); + var bindingOptions = buildAttributeOptions(data), view = !isDefinedString(bindingOptions.view) ? _string.empty : bindingOptions.view.toLowerCase(); bindingOptions.currentView = {}; bindingOptions.currentView.element = element; bindingOptions.currentView.tooltip = null; @@ -170,8 +166,7 @@ } function renderControlTitleBar(bindingOptions) { if (bindingOptions.showTitle || bindingOptions.showYearSelector || bindingOptions.showRefreshButton || bindingOptions.showExportButton || bindingOptions.showImportButton) { - var titleBar = createElement(bindingOptions.currentView.element, "div", "title-bar"); - var title = createElement(titleBar, "div", "title"); + var titleBar = createElement(bindingOptions.currentView.element, "div", "title-bar"), title = createElement(titleBar, "div", "title"); if (bindingOptions.views.chart.enabled || bindingOptions.views.statistics.enabled) { createElement(title, "div", "down-arrow"); } else { @@ -181,9 +176,7 @@ title.innerHTML += bindingOptions.titleText; } if (bindingOptions.views.chart.enabled || bindingOptions.views.statistics.enabled) { - var titlesList = createElement(title, "div", "titles-list"); - var titles = createElement(titlesList, "div", "titles"); - var optionMap = createElementWithHTML(titles, "div", "title", _configuration.mapText); + var titlesList = createElement(title, "div", "titles-list"), titles = createElement(titlesList, "div", "titles"), optionMap = createElementWithHTML(titles, "div", "title", _configuration.mapText); renderTitleDropDownClickEvent(bindingOptions, optionMap, _elements_View_Map, _elements_View_Name_Map); if (bindingOptions.views.chart.enabled) { var optionChart = createElementWithHTML(titles, "div", "title", _configuration.chartText); @@ -224,14 +217,10 @@ bindingOptions.currentView.yearText = createElementWithHTML(titleBar, "div", "year-text", bindingOptions.currentView.year); if (bindingOptions.showYearSelectionDropDown) { createElement(bindingOptions.currentView.yearText, "div", "down-arrow"); - var yearList = createElement(bindingOptions.currentView.yearText, "div", "years-list"); - var years = createElement(yearList, "div", "years"); - var thisYear = (new Date()).getFullYear(); - var activeYear = null; + var yearList = createElement(bindingOptions.currentView.yearText, "div", "years-list"), years = createElement(yearList, "div", "years"), thisYear = (new Date()).getFullYear(), activeYear = null; yearList.style.display = "block"; yearList.style.visibility = "hidden"; - var currentYear = thisYear - bindingOptions.extraSelectionYears; - for (; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++) { + for (var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++) { if (isYearVisible(bindingOptions, currentYear)) { var year = renderControlTitleBarYear(bindingOptions, years, currentYear, thisYear); if (!isDefined(activeYear)) { @@ -269,8 +258,7 @@ } } function renderControlTitleBarYear(bindingOptions, years, currentYear, actualYear) { - var result = null; - var year = createElementWithHTML(years, "div", "year", currentYear); + var result = null, year = createElementWithHTML(years, "div", "year", currentYear); if (bindingOptions.currentView.year !== currentYear) { year.onclick = function() { bindingOptions.currentView.year = currentYear; @@ -303,43 +291,31 @@ } else { bindingOptions.currentView.mapContents.style.minHeight = "unset"; makeAreaDroppable(bindingOptions.currentView.mapContents, bindingOptions); - var map = createElement(bindingOptions.currentView.mapContents, "div", "map"); - var currentYear = bindingOptions.currentView.year; - var monthAdded = false; + var map = createElement(bindingOptions.currentView.mapContents, "div", "map"), currentYear = bindingOptions.currentView.year, monthAdded = false; if (isForViewSwitch) { addClass(map, "view-switch"); } if (bindingOptions.views.map.showDayNames) { - var days = createElement(map, "div", "days"); + var days = createElement(map, "div", "days"), showMinimalDays = bindingOptions.views.map.showMinimalDayNames && bindingOptions.views.map.daysToShow.length === 7; if (!bindingOptions.views.map.showMonthNames || bindingOptions.views.map.placeMonthNamesOnTheBottom) { days.className = "days-months-bottom"; } - var dayNameIndex = 0; - for (; dayNameIndex < 7; dayNameIndex++) { + for (var dayNameIndex = 0; dayNameIndex < 7; dayNameIndex++) { if (isDayVisible(bindingOptions.views.map.daysToShow, dayNameIndex + 1)) { - createElementWithHTML(days, "div", "day-name", _configuration.dayNames[dayNameIndex]); + var dayText = !showMinimalDays || dayNameIndex % 3 === 0 ? _configuration.dayNames[dayNameIndex] : _string.space; + createElementWithHTML(days, "div", "day-name", dayText); } } if (bindingOptions.views.map.showDaysInReverseOrder) { reverseElementsOrder(days); } } - var months = createElement(map, "div", "months"); - var colorRanges = getSortedColorRanges(bindingOptions); - var monthIndex = 0; - for (; monthIndex < 12; monthIndex++) { + var months = createElement(map, "div", "months"), colorRanges = getSortedColorRanges(bindingOptions); + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { if (isMonthVisible(bindingOptions.views.map.monthsToShow, monthIndex)) { - var month = createElement(months, "div", "month"); - var dayColumns = createElement(month, "div", "day-columns"); - var totalDaysInMonth = getTotalDaysInMonth(currentYear, monthIndex); - var currentDayColumn = createElement(dayColumns, "div", "day-column"); - var startFillingDays = false; - var firstDayInMonth = new Date(currentYear, monthIndex, 1); - var firstDayNumberInMonth = getWeekdayNumber(firstDayInMonth); - var actualDay = 1; - totalDaysInMonth = totalDaysInMonth + firstDayNumberInMonth; - var dayIndex = 0; - for (; dayIndex < totalDaysInMonth; dayIndex++) { + var month = createElement(months, "div", "month"), dayColumns = createElement(month, "div", "day-columns"), totalDaysInMonth = getTotalDaysInMonth(currentYear, monthIndex), currentDayColumn = createElement(dayColumns, "div", "day-column"), startFillingDays = false, firstDayInMonth = new Date(currentYear, monthIndex, 1), firstDayNumberInMonth = getWeekdayNumber(firstDayInMonth), actualDay = 1; + totalDaysInMonth += firstDayNumberInMonth; + for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { if (dayIndex >= firstDayNumberInMonth) { startFillingDays = true; } else { @@ -359,8 +335,7 @@ currentDayColumn = createElement(dayColumns, "div", "day-column"); actualDay = 0; if (!isDefined(_elements_Day_Width) && isDefined(day)) { - var marginLeft = getStyleValueByName(day, "margin-left", true); - var marginRight = getStyleValueByName(day, "margin-right", true); + var marginLeft = getStyleValueByName(day, "margin-left", true), marginRight = getStyleValueByName(day, "margin-right", true); _elements_Day_Width = day.offsetWidth + marginLeft + marginRight; } } @@ -368,8 +343,7 @@ actualDay++; } if (bindingOptions.views.map.showMonthNames) { - var monthName = null; - var monthWidth = month.offsetWidth; + var monthName = null, monthWidth = month.offsetWidth; if (!bindingOptions.views.map.placeMonthNamesOnTheBottom) { monthName = createElementWithHTML(month, "div", "month-name", _configuration.monthNames[monthIndex], dayColumns); } else { @@ -390,19 +364,22 @@ month.style.marginLeft = _elements_Day_Width + "px"; } } + if (bindingOptions.views.map.showMonthsInReverseOrder) { + reverseElementsOrder(dayColumns); + } monthAdded = true; } } + if (bindingOptions.views.map.showMonthsInReverseOrder) { + reverseElementsOrder(months); + } if (bindingOptions.keepScrollPositions) { bindingOptions.currentView.mapContents.scrollLeft = bindingOptions.currentView.mapContentsScrollLeft; } } } function renderControlMapMonthDay(bindingOptions, currentDayColumn, dayNumber, month, year, colorRanges) { - var actualDay = dayNumber + 1; - var day = createElement(currentDayColumn, "div", "day"); - var date = new Date(year, month, actualDay); - var dateCount = _elements_DateCounts[bindingOptions.currentView.element.id].type[bindingOptions.currentView.type][toStorageDate(date)]; + var actualDay = dayNumber + 1, day = createElement(currentDayColumn, "div", "day"), date = new Date(year, month, actualDay), dateCount = _elements_DateCounts[bindingOptions.currentView.element.id].type[bindingOptions.currentView.type][toStorageDate(date)]; dateCount = getDefaultNumber(dateCount, 0); renderDayToolTip(bindingOptions, day, date, dateCount); if (bindingOptions.views.map.showDayNumbers && dateCount > 0) { @@ -426,11 +403,8 @@ return day; } function isDataAvailableForYear(bindingOptions) { - var result = false; - var data = getCurrentViewData(bindingOptions); - var checkDate = bindingOptions.currentView.year.toString(); - var storageDate; - for (storageDate in data) { + var result = false, data = getCurrentViewData(bindingOptions), checkDate = bindingOptions.currentView.year.toString(); + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { if (getStorageDateYear(storageDate) === checkDate) { result = true; @@ -445,13 +419,7 @@ makeAreaDroppable(bindingOptions.currentView.chartContents, bindingOptions); } function renderControlChart(bindingOptions, isForViewSwitch) { - var chart = createElement(bindingOptions.currentView.chartContents, "div", "chart"); - var labels = createElement(chart, "div", "y-labels"); - var dayLines = createElement(chart, "div", "day-lines"); - var colorRanges = getSortedColorRanges(bindingOptions); - var largestValueForCurrentYear = getLargestValueForChartYear(bindingOptions); - var currentYear = bindingOptions.currentView.year; - var labelsWidth = 0; + var chart = createElement(bindingOptions.currentView.chartContents, "div", "chart"), labels = createElement(chart, "div", "y-labels"), dayLines = createElement(chart, "div", "day-lines"), colorRanges = getSortedColorRanges(bindingOptions), largestValueForCurrentYear = getLargestValueForChartYear(bindingOptions), currentYear = bindingOptions.currentView.year, labelsWidth = 0; if (isForViewSwitch) { addClass(chart, "view-switch"); } @@ -475,17 +443,12 @@ addClass(noDataMessage, "view-switch"); } } else { - var pixelsPerNumbers = bindingOptions.currentView.mapContents.offsetHeight / largestValueForCurrentYear; - var totalMonths = 0; - var totalDays = 0; - var monthIndex1 = 0; - for (; monthIndex1 < 12; monthIndex1++) { + var pixelsPerNumbers = bindingOptions.currentView.mapContents.offsetHeight / largestValueForCurrentYear, totalMonths = 0, totalDays = 0; + for (var monthIndex1 = 0; monthIndex1 < 12; monthIndex1++) { if (isMonthVisible(bindingOptions.views.chart.monthsToShow, monthIndex1)) { - var totalDaysInMonth = getTotalDaysInMonth(currentYear, monthIndex1); - var actualDay = 1; + var totalDaysInMonth = getTotalDaysInMonth(currentYear, monthIndex1), actualDay = 1; totalMonths++; - var dayIndex = 0; - for (; dayIndex < totalDaysInMonth; dayIndex++) { + for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { if (isDayVisible(bindingOptions.views.chart.daysToShow, actualDay)) { renderControlChartDay(dayLines, bindingOptions, dayIndex + 1, monthIndex1, currentYear, colorRanges, pixelsPerNumbers); } @@ -497,17 +460,26 @@ } } } + if (bindingOptions.views.chart.showInReverseOrder) { + reverseElementsOrder(dayLines); + } if (bindingOptions.views.chart.showMonthNames) { - var chartMonths = createElement(bindingOptions.currentView.chartContents, "div", "chart-months"); - var linesWidth = dayLines.offsetWidth / totalMonths; - var monthTimesValue = 0; - var monthIndex2 = 0; - for (; monthIndex2 < 12; monthIndex2++) { - if (isMonthVisible(bindingOptions.views.chart.monthsToShow, monthIndex2)) { - var monthName = createElementWithHTML(chartMonths, "div", "month-name", _configuration.monthNames[monthIndex2]); + var chartMonths = createElement(bindingOptions.currentView.chartContents, "div", "chart-months"), linesWidth = dayLines.offsetWidth / totalMonths, monthTimesValue = 0; + var addMonthName = function(addMonthNameIndex) { + if (isMonthVisible(bindingOptions.views.chart.monthsToShow, addMonthNameIndex)) { + var monthName = createElementWithHTML(chartMonths, "div", "month-name", _configuration.monthNames[addMonthNameIndex]); monthName.style.left = labelsWidth + linesWidth * monthTimesValue + "px"; monthTimesValue++; } + }; + if (bindingOptions.views.chart.showInReverseOrder) { + for (var monthIndex2 = 12; monthIndex2--;) { + addMonthName(monthIndex2); + } + } else { + for (var monthIndex3 = 0; monthIndex3 < 12; monthIndex3++) { + addMonthName(monthIndex3); + } } chartMonths.style.width = dayLines.offsetWidth + "px"; var monthNameSpace = createElement(chartMonths, "div", "month-name-space"); @@ -520,9 +492,7 @@ } } function renderControlChartDay(dayLines, bindingOptions, day, month, year, colorRanges, pixelsPerNumbers) { - var date = new Date(year, month, day); - var dayLine = createElement(dayLines, "div", "day-line"); - var dateCount = getCurrentViewData(bindingOptions)[toStorageDate(date)]; + var date = new Date(year, month, day), dayLine = createElement(dayLines, "div", "day-line"), dateCount = getCurrentViewData(bindingOptions)[toStorageDate(date)]; dateCount = getDefaultNumber(dateCount, 0); renderDayToolTip(bindingOptions, dayLine, date, dateCount); if (bindingOptions.views.chart.showLineNumbers && dateCount > 0) { @@ -551,13 +521,10 @@ } } function getLargestValueForChartYear(bindingOptions) { - var result = 0; - var data = getCurrentViewData(bindingOptions); - var monthIndex = 0; - for (; monthIndex < 12; monthIndex++) { + var result = 0, data = getCurrentViewData(bindingOptions); + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { var totalDaysInMonth = getTotalDaysInMonth(bindingOptions.currentView.year, monthIndex); - var dayIndex = 0; - for (; dayIndex < totalDaysInMonth; dayIndex++) { + for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { var storageDate = toStorageDate(new Date(bindingOptions.currentView.year, monthIndex, dayIndex + 1)); if (data.hasOwnProperty(storageDate)) { result = _parameter_Math.max(result, parseInt(data[storageDate])); @@ -571,12 +538,7 @@ makeAreaDroppable(bindingOptions.currentView.statisticsContents, bindingOptions); } function renderControlStatistics(bindingOptions, isForViewSwitch) { - var statistics = createElement(bindingOptions.currentView.statisticsContents, "div", "statistics"); - var statisticsRanges = createElement(bindingOptions.currentView.statisticsContents, "div", "statistics-ranges"); - var labels = createElement(statistics, "div", "y-labels"); - var rangeLines = createElement(statistics, "div", "range-lines"); - var colorRanges = getSortedColorRanges(bindingOptions); - var colorRangeValuesForCurrentYear = getLargestValuesForEachRangeType(bindingOptions, colorRanges); + var statistics = createElement(bindingOptions.currentView.statisticsContents, "div", "statistics"), statisticsRanges = createElement(bindingOptions.currentView.statisticsContents, "div", "statistics-ranges"), labels = createElement(statistics, "div", "y-labels"), rangeLines = createElement(statistics, "div", "range-lines"), colorRanges = getSortedColorRanges(bindingOptions), colorRangeValuesForCurrentYear = getLargestValuesForEachRangeType(bindingOptions, colorRanges); if (isForViewSwitch) { addClass(statistics, "view-switch"); } @@ -605,8 +567,7 @@ if (!bindingOptions.views.statistics.showColorRangeLabels) { statisticsRanges.parentNode.removeChild(statisticsRanges); } - var type; - for (type in colorRangeValuesForCurrentYear.types) { + for (var type in colorRangeValuesForCurrentYear.types) { if (colorRangeValuesForCurrentYear.types.hasOwnProperty(type)) { renderControlStatisticsRangeLine(type, rangeLines, colorRangeValuesForCurrentYear.types[type], bindingOptions, colorRanges, pixelsPerNumbers); var useColorRange = getColorRangeByMinimum(colorRanges, type); @@ -619,15 +580,17 @@ } } } + if (bindingOptions.views.statistics.showInReverseOrder) { + reverseElementsOrder(rangeLines); + reverseElementsOrder(statisticsRanges); + } if (bindingOptions.keepScrollPositions) { bindingOptions.currentView.statisticsContents.scrollLeft = bindingOptions.currentView.statisticsContentsScrollLeft; } } } function renderControlStatisticsRangeLine(colorRangeMinimum, dayLines, rangeCount, bindingOptions, colorRanges, pixelsPerNumbers) { - var rangeLine = createElement(dayLines, "div", "range-line"); - var useColorRange = getColorRangeByMinimum(colorRanges, colorRangeMinimum); - var rangeLineHeight = rangeCount * pixelsPerNumbers; + var rangeLine = createElement(dayLines, "div", "range-line"), useColorRange = getColorRangeByMinimum(colorRanges, colorRangeMinimum), rangeLineHeight = rangeCount * pixelsPerNumbers; rangeLine.style.height = rangeLineHeight + "px"; if (rangeLineHeight <= 0) { rangeLine.style.visibility = "hidden"; @@ -653,20 +616,14 @@ } } function getLargestValuesForEachRangeType(bindingOptions, colorRanges) { - var types = {}; - var largestValue = 0; - var data = getCurrentViewData(bindingOptions); + var types = {}, largestValue = 0, data = getCurrentViewData(bindingOptions); types[_string.zero] = 0; - var monthIndex = 0; - for (; monthIndex < 12; monthIndex++) { + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { var totalDaysInMonth = getTotalDaysInMonth(bindingOptions.currentView.year, monthIndex); - var dayIndex = 0; - for (; dayIndex < totalDaysInMonth; dayIndex++) { + for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { var storageDate = toStorageDate(new Date(bindingOptions.currentView.year, monthIndex, dayIndex + 1)); if (data.hasOwnProperty(storageDate)) { - var storageDateParts = getStorageDate(storageDate); - var storageDateObject = new Date(storageDateParts[2], storageDateParts[1], storageDateParts[0]); - var weekDayNumber = getWeekdayNumber(storageDateObject); + var storageDateParts = getStorageDate(storageDate), storageDateObject = new Date(storageDateParts[2], storageDateParts[1], storageDateParts[0]), weekDayNumber = getWeekdayNumber(storageDateObject); if (!isHoliday(bindingOptions, storageDateObject).matched && isMonthVisible(bindingOptions.views.statistics.monthsToShow, storageDateObject.getMonth()) && isDayVisible(bindingOptions.views.statistics.daysToShow, weekDayNumber)) { var useColorRange = getColorRange(bindingOptions, colorRanges, data[storageDate]); if (!isDefined(useColorRange)) { @@ -685,11 +642,8 @@ return {types:types, largestValue:largestValue}; } function renderControlViewGuide(bindingOptions) { - var guide = createElement(bindingOptions.currentView.element, "div", "guide"); - var mapTypes = createElement(guide, "div", "map-types"); - var noneTypeCount = 0; - var storageDate; - for (storageDate in _elements_DateCounts[bindingOptions.currentView.element.id].type[_configuration.unknownTrendText]) { + var guide = createElement(bindingOptions.currentView.element, "div", "guide"), mapTypes = createElement(guide, "div", "map-types"), noneTypeCount = 0; + for (var storageDate in _elements_DateCounts[bindingOptions.currentView.element.id].type[_configuration.unknownTrendText]) { if (_elements_DateCounts[bindingOptions.currentView.element.id].type[_configuration.unknownTrendText].hasOwnProperty(storageDate)) { noneTypeCount++; break; @@ -700,8 +654,7 @@ var description = createElement(bindingOptions.currentView.element, "div", "description", guide); renderDescription(bindingOptions, description); } - var type; - for (type in _elements_DateCounts[bindingOptions.currentView.element.id].type) { + for (var type in _elements_DateCounts[bindingOptions.currentView.element.id].type) { if (type !== _configuration.unknownTrendText || noneTypeCount > 0) { if (noneTypeCount === 0 && bindingOptions.currentView.type === _configuration.unknownTrendText) { bindingOptions.currentView.type = type; @@ -724,11 +677,8 @@ addClass(lessText, "no-click"); } } - var days = createElement(mapToggles, "div", "days"); - var colorRanges = getSortedColorRanges(bindingOptions); - var colorRangesLength = colorRanges.length; - var colorRangesIndex = 0; - for (; colorRangesIndex < colorRangesLength; colorRangesIndex++) { + var days = createElement(mapToggles, "div", "days"), colorRanges = getSortedColorRanges(bindingOptions), colorRangesLength = colorRanges.length; + for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) { renderControlViewGuideDay(bindingOptions, days, colorRanges[colorRangesIndex]); } if (bindingOptions.showLessAndMoreLabels) { @@ -802,7 +752,7 @@ if (bindingOptions.showHolidaysInDayToolTips) { var holiday = isHoliday(bindingOptions, date); if (holiday.matched && isDefinedString(holiday.name)) { - tooltip = tooltip + (": " + holiday.name); + tooltip += _string.colon + _string.space + holiday.name; } } addToolTip(day, bindingOptions, tooltip); @@ -829,8 +779,7 @@ var years = []; if (bindingOptions.showOnlyDataForYearsAvailable) { var data = getCurrentViewData(bindingOptions); - var storageDate; - for (storageDate in data) { + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { var year = parseInt(getStorageDateYear(storageDate)); if (years.indexOf(year) === _value.notFound) { @@ -855,19 +804,15 @@ } function loadDataFromLocalStorage(bindingOptions) { if (bindingOptions.useLocalStorageForData && _parameter_Window.localStorage) { - var keysLength = _parameter_Window.localStorage.length; - var elementId = bindingOptions.currentView.element.id; - var keyIndex = 0; - for (; keyIndex < keysLength; keyIndex++) { + var keysLength = _parameter_Window.localStorage.length, elementId = bindingOptions.currentView.element.id; + for (var keyIndex = 0; keyIndex < keysLength; keyIndex++) { var key = _parameter_Window.localStorage.key(keyIndex); if (startsWithAnyCase(key, _local_Storage_Start_ID)) { - var typesJson = _parameter_Window.localStorage.getItem(key); - var typesObject = getObjectFromString(typesJson); + var typesJson = _parameter_Window.localStorage.getItem(key), typesObject = getObjectFromString(typesJson); if (typesObject.parsed) { _elements_DateCounts[elementId].type = typesObject.result; _elements_DateCounts[elementId].types = 0; - var type; - for (type in _elements_DateCounts[elementId].type) { + for (var type in _elements_DateCounts[elementId].type) { if (_elements_DateCounts[elementId].type.hasOwnProperty(type)) { _elements_DateCounts[elementId].types++; } @@ -887,18 +832,14 @@ } function clearLocalStorageObjects(bindingOptions) { if (bindingOptions.useLocalStorageForData && _parameter_Window.localStorage) { - var keysLength = _parameter_Window.localStorage.length; - var keysToRemove = []; - var elementId = bindingOptions.currentView.element.id; - var keyIndex = 0; - for (; keyIndex < keysLength; keyIndex++) { + var keysLength = _parameter_Window.localStorage.length, keysToRemove = [], elementId = bindingOptions.currentView.element.id; + for (var keyIndex = 0; keyIndex < keysLength; keyIndex++) { if (startsWithAnyCase(_parameter_Window.localStorage.key(keyIndex), _local_Storage_Start_ID + elementId)) { keysToRemove.push(_parameter_Window.localStorage.key(keyIndex)); } } var keysToRemoveLength = keysToRemove.length; - var keyToRemoveIndex = 0; - for (; keyToRemoveIndex < keysToRemoveLength; keyToRemoveIndex++) { + for (var keyToRemoveIndex = 0; keyToRemoveIndex < keysToRemoveLength; keyToRemoveIndex++) { _parameter_Window.localStorage.removeItem(keysToRemove[keyToRemoveIndex]); } } @@ -917,12 +858,10 @@ } } function pullDataFromCustomTrigger(bindingOptions) { - var elementId = bindingOptions.currentView.element.id; - var data = fireCustomTrigger(bindingOptions.onDataFetch, elementId); + var elementId = bindingOptions.currentView.element.id, data = fireCustomTrigger(bindingOptions.onDataFetch, elementId); if (isDefinedObject(data)) { createDateStorageForElement(elementId, bindingOptions, false); - var storageDate; - for (storageDate in data) { + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { if (!_elements_DateCounts[elementId].type[_configuration.unknownTrendText].hasOwnProperty(storageDate)) { _elements_DateCounts[elementId].type[_configuration.unknownTrendText][storageDate] = 0; @@ -933,8 +872,7 @@ } } function cancelAllPullDataTimers() { - var elementId; - for (elementId in _elements_DateCounts) { + for (var elementId in _elements_DateCounts) { if (_elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (isDefined(bindingOptions.currentView.isInFetchModeTimer)) { @@ -949,8 +887,7 @@ result = true; } else { var colorRangesLength = bindingOptions.colorRanges.length; - var colorRangesIndex = 0; - for (; colorRangesIndex < colorRangesLength; colorRangesIndex++) { + for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) { var colorRange = bindingOptions.colorRanges[colorRangesIndex]; if (colorRange.id === id && (!isDefinedBoolean(colorRange.visible) || colorRange.visible)) { result = true; @@ -962,8 +899,7 @@ } function updateColorRangeToggles(bindingOptions, flag) { var colorRangesLength = bindingOptions.colorRanges.length; - var colorRangesIndex = 0; - for (; colorRangesIndex < colorRangesLength; colorRangesIndex++) { + for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) { bindingOptions.colorRanges[colorRangesIndex].visible = flag; fireCustomTrigger(bindingOptions.onColorRangeTypeToggle, bindingOptions.colorRanges[colorRangesIndex].id, flag); } @@ -971,8 +907,7 @@ } function toggleColorRangeVisibleState(bindingOptions, id) { var colorRangesLength = bindingOptions.colorRanges.length; - var colorRangesIndex = 0; - for (; colorRangesIndex < colorRangesLength; colorRangesIndex++) { + for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) { var colorRange = bindingOptions.colorRanges[colorRangesIndex]; if (colorRange.id === id) { colorRange.visible = !(isDefinedBoolean(colorRange.visible) && colorRange.visible); @@ -989,8 +924,7 @@ } if (!isDefined(useColorRange)) { var colorRangesLength = colorRanges.length; - var colorRangesIndex = 0; - for (; colorRangesIndex < colorRangesLength; colorRangesIndex++) { + for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) { var colorRange = colorRanges[colorRangesIndex]; if (dateCount >= colorRange.minimum) { useColorRange = colorRange; @@ -1002,10 +936,8 @@ return useColorRange; } function getColorRangeByMinimum(colorRanges, minimum) { - var colorRangesLength = colorRanges.length; - var useColorRange = null; - var colorRangesIndex = 0; - for (; colorRangesIndex < colorRangesLength; colorRangesIndex++) { + var colorRangesLength = colorRanges.length, useColorRange = null; + for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) { var colorRange = colorRanges[colorRangesIndex]; if (minimum.toString() === colorRange.minimum.toString()) { useColorRange = colorRange; @@ -1020,14 +952,8 @@ }); } function isHoliday(bindingOptions, date) { - var holidaysLength = bindingOptions.holidays.length; - var holidayMatched = false; - var holidayName = null; - var day = date.getDate(); - var month = date.getMonth() + 1; - var year = date.getFullYear(); - var holidayIndex = 0; - for (; holidayIndex < holidaysLength; holidayIndex++) { + var holidaysLength = bindingOptions.holidays.length, holidayMatched = false, holidayName = null, day = date.getDate(), month = date.getMonth() + 1, year = date.getFullYear(); + for (var holidayIndex = 0; holidayIndex < holidaysLength; holidayIndex++) { var holiday = bindingOptions.holidays[holidayIndex]; if (isDefinedString(holiday.date) && holiday.showInViews) { var dateParts = holiday.date.split("/"); @@ -1060,7 +986,7 @@ function importFromFilesSelected(bindingOptions) { var input = createElementWithNoContainer("input"); input.type = "file"; - input.accept = ".json, .txt"; + input.accept = ".json, .txt, .csv"; input.multiple = "multiple"; input.onchange = function() { importFromFiles(input.files, bindingOptions); @@ -1068,13 +994,10 @@ input.click(); } function importFromFiles(files, bindingOptions) { - var filesLength = files.length; - var filesCompleted = []; - var data = getCurrentViewData(bindingOptions); + var filesLength = files.length, filesCompleted = [], data = getCurrentViewData(bindingOptions); var onLoadEnd = function(filename, readingObject) { filesCompleted.push(filename); - var storageDate; - for (storageDate in readingObject) { + for (var storageDate in readingObject) { if (readingObject.hasOwnProperty(storageDate)) { if (!data.hasOwnProperty(storageDate)) { data[storageDate] = 0; @@ -1087,20 +1010,19 @@ renderControlContainer(bindingOptions); } }; - var fileIndex = 0; - for (; fileIndex < filesLength; fileIndex++) { - var file = files[fileIndex]; - var fileExtension = file.name.split(".").pop().toLowerCase(); + for (var fileIndex = 0; fileIndex < filesLength; fileIndex++) { + var file = files[fileIndex], fileExtension = file.name.split(".").pop().toLowerCase(); if (fileExtension === _export_Type_Json) { importFromJson(file, onLoadEnd); } else if (fileExtension === _export_Type_Txt) { importFromTxt(file, onLoadEnd); + } else if (fileExtension === _export_Type_Csv) { + importFromCsv(file, onLoadEnd); } } } function importFromJson(file, onLoadEnd) { - var reader = new FileReader(); - var readingObject = null; + var reader = new FileReader(), readingObject = null; reader.readAsText(file); reader.onloadend = function() { onLoadEnd(file.name, readingObject); @@ -1113,26 +1035,37 @@ }; } function importFromTxt(file, onLoadEnd) { - var reader = new FileReader(); - var readingObject = {}; + var reader = new FileReader(), readingObject = {}; reader.readAsText(file); reader.onloadend = function() { onLoadEnd(file.name, readingObject); }; reader.onload = function(e) { - var lines = e.target.result.toString().split(_string.newLine); + var lines = e.target.result.toString().split(_string.newLine), linesLength = lines.length; + for (var lineIndex = 0; lineIndex < linesLength; lineIndex++) { + var line = lines[lineIndex].split(_string.colon); + readingObject[line[0].trim()] = parseInt(line[1].trim()); + } + }; + } + function importFromCsv(file, onLoadEnd) { + var reader = new FileReader(), readingObject = {}; + reader.readAsText(file); + reader.onloadend = function() { + onLoadEnd(file.name, readingObject); + }; + reader.onload = function(e) { + var data = e.target.result.toString().replace(new RegExp('"', "g"), _string.empty), lines = data.split(_string.newLine); + lines.shift(); var linesLength = lines.length; - var lineIndex = 0; - for (; lineIndex < linesLength; lineIndex++) { - var line = lines[lineIndex].split(":"); + for (var lineIndex = 0; lineIndex < linesLength; lineIndex++) { + var line = lines[lineIndex].split(_string.comma); readingObject[line[0].trim()] = parseInt(line[1].trim()); } }; } function exportAllData(bindingOptions, exportType) { - var contents = null; - var contentsMimeType = getExportMimeType(bindingOptions); - var contentExportType = getDefaultString(exportType, bindingOptions.exportType).toLowerCase(); + var contents = null, contentsMimeType = getExportMimeType(bindingOptions), contentExportType = getDefaultString(exportType, bindingOptions.exportType).toLowerCase(); if (contentExportType === _export_Type_Csv) { contents = getCsvContent(bindingOptions); } else if (contentExportType === _export_Type_Json) { @@ -1154,10 +1087,8 @@ } } function getCsvContent(bindingOptions) { - var data = getExportData(bindingOptions); - var csvContents = []; - var storageDate; - for (storageDate in data) { + var data = getExportData(bindingOptions), csvContents = []; + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { csvContents.push(getCsvValueLine([getCsvValue(storageDate), getCsvValue(data[storageDate])])); } @@ -1171,12 +1102,10 @@ return _parameter_JSON.stringify(getExportData(bindingOptions)); } function getXmlContents(bindingOptions) { - var data = getExportData(bindingOptions); - var contents = []; + var data = getExportData(bindingOptions), contents = []; contents.push(''); contents.push(""); - var storageDate; - for (storageDate in data) { + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { contents.push(""); contents.push("" + storageDate + ""); @@ -1188,25 +1117,20 @@ return contents.join(_string.newLine); } function getTxtContents(bindingOptions) { - var data = getExportData(bindingOptions); - var contents = []; - var storageDate; - for (storageDate in data) { + var data = getExportData(bindingOptions), contents = []; + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { - contents.push(storageDate + ": " + data[storageDate].toString()); + contents.push(storageDate + _string.colon + _string.space + data[storageDate].toString()); } } return contents.join(_string.newLine); } function getExportData(bindingOptions) { - var contents = {}; - var data = getCurrentViewData(bindingOptions); + var contents = {}, data = getCurrentViewData(bindingOptions); if (bindingOptions.exportOnlyYearBeingViewed) { - var monthIndex = 0; - for (; monthIndex < 12; monthIndex++) { + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { var totalDaysInMonth = getTotalDaysInMonth(bindingOptions.currentView.year, monthIndex); - var dayIndex = 0; - for (; dayIndex < totalDaysInMonth; dayIndex++) { + for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { var storageDate2 = toStorageDate(new Date(bindingOptions.currentView.year, monthIndex, dayIndex + 1)); if (data.hasOwnProperty(storageDate2)) { contents[storageDate2] = data[storageDate2]; @@ -1215,16 +1139,14 @@ } } else { var storageDates = []; - var storageDate1; - for (storageDate1 in data) { + for (var storageDate1 in data) { if (data.hasOwnProperty(storageDate1)) { storageDates.push(storageDate1); } } storageDates.sort(); var storageDatesLength = storageDates.length; - var storageDateIndex = 0; - for (; storageDateIndex < storageDatesLength; storageDateIndex++) { + for (var storageDateIndex = 0; storageDateIndex < storageDatesLength; storageDateIndex++) { var storageDate3 = storageDates[storageDateIndex]; if (data.hasOwnProperty(storageDate3)) { contents[storageDate3] = data[storageDate3]; @@ -1247,10 +1169,7 @@ return result; } function getExportFilename(bindingOptions) { - var date = new Date(); - var datePart = padNumber(date.getDate()) + _string.dash + padNumber(date.getMonth() + 1) + _string.dash + date.getFullYear(); - var timePart = padNumber(date.getHours()) + _string.dash + padNumber(date.getMinutes()); - var filenameStart = _string.empty; + var date = new Date(), datePart = padNumber(date.getDate()) + _string.dash + padNumber(date.getMonth() + 1) + _string.dash + date.getFullYear(), timePart = padNumber(date.getHours()) + _string.dash + padNumber(date.getMinutes()), filenameStart = _string.empty; if (bindingOptions.currentView.type !== _configuration.unknownTrendText) { filenameStart = bindingOptions.currentView.type.toLowerCase().replace(_string.space, _string.underscore) + _string.underscore; } @@ -1305,8 +1224,7 @@ function buildAttributeOptionColorRanges(options) { if (isDefinedArray(options.colorRanges)) { var colorRangesLength = options.colorRanges.length; - var colorRangeIndex = 0; - for (; colorRangeIndex < colorRangesLength; colorRangeIndex++) { + for (var colorRangeIndex = 0; colorRangeIndex < colorRangesLength; colorRangeIndex++) { var colorRange = options.colorRanges[colorRangeIndex]; colorRange.id = getDefaultString(colorRange.id, newGuid()); colorRange.name = getDefaultString(colorRange.name, null); @@ -1326,8 +1244,7 @@ function buildAttributeOptionHolidays(options) { if (isDefinedArray(options.holidays)) { var holidaysLength = options.holidays.length; - var holidayIndex = 0; - for (; holidayIndex < holidaysLength; holidayIndex++) { + for (var holidayIndex = 0; holidayIndex < holidaysLength; holidayIndex++) { var holiday = options.holidays[holidayIndex]; holiday.date = getDefaultString(holiday.date, null); holiday.name = getDefaultString(holiday.name, null); @@ -1347,6 +1264,8 @@ options.views.map.showMonthNames = getDefaultBoolean(options.views.map.showMonthNames, true); options.views.map.showDaysInReverseOrder = getDefaultBoolean(options.views.map.showDaysInReverseOrder, false); options.views.map.showNoDataMessageWhenDataIsNotAvailable = getDefaultBoolean(options.views.map.showNoDataMessageWhenDataIsNotAvailable, false); + options.views.map.showMinimalDayNames = getDefaultBoolean(options.views.map.showMinimalDayNames, false); + options.views.map.showMonthsInReverseOrder = getDefaultBoolean(options.views.map.showMonthsInReverseOrder, false); if (isInvalidOptionArray(options.views.map.monthsToShow)) { options.views.map.monthsToShow = _default_MonthsToShow; } @@ -1361,6 +1280,7 @@ options.views.chart.showChartYLabels = getDefaultBoolean(options.views.chart.showChartYLabels, true); options.views.chart.showMonthNames = getDefaultBoolean(options.views.chart.showMonthNames, true); options.views.chart.showLineNumbers = getDefaultBoolean(options.views.chart.showLineNumbers, false); + options.views.chart.showInReverseOrder = getDefaultBoolean(options.views.chart.showInReverseOrder, false); if (isInvalidOptionArray(options.views.chart.monthsToShow)) { options.views.chart.monthsToShow = _default_MonthsToShow; } @@ -1376,6 +1296,7 @@ options.views.statistics.showColorRangeLabels = getDefaultBoolean(options.views.statistics.showColorRangeLabels, true); options.views.statistics.useColorRangeNamesForLabels = getDefaultBoolean(options.views.statistics.useColorRangeNamesForLabels, false); options.views.statistics.showRangeNumbers = getDefaultBoolean(options.views.statistics.showRangeNumbers, false); + options.views.statistics.showInReverseOrder = getDefaultBoolean(options.views.statistics.showInReverseOrder, false); if (isInvalidOptionArray(options.views.statistics.monthsToShow)) { options.views.statistics.monthsToShow = _default_MonthsToShow; } @@ -1431,8 +1352,7 @@ return result; } function getCustomFormattedDateText(dateFormat, date) { - var result = dateFormat; - var weekDayNumber = getWeekdayNumber(date); + var result = dateFormat, weekDayNumber = getWeekdayNumber(date); result = result.replace("{dddd}", _configuration.dayNames[weekDayNumber]); result = result.replace("{dd}", padNumber(date.getDate())); result = result.replace("{d}", date.getDate()); @@ -1471,9 +1391,7 @@ return isDefinedObject(object) && object instanceof Date; } function createElementWithNoContainer(type) { - var result = null; - var nodeType = type.toLowerCase(); - var isText = nodeType === "text"; + var result = null, nodeType = type.toLowerCase(), isText = nodeType === "text"; if (!_elements_Type.hasOwnProperty(nodeType)) { _elements_Type[nodeType] = isText ? _parameter_Document.createTextNode(_string.empty) : _parameter_Document.createElement(nodeType); } @@ -1481,9 +1399,7 @@ return result; } function createElement(container, type, className, beforeNode) { - var result = null; - var nodeType = type.toLowerCase(); - var isText = nodeType === "text"; + var result = null, nodeType = type.toLowerCase(), isText = nodeType === "text"; if (!_elements_Type.hasOwnProperty(nodeType)) { _elements_Type[nodeType] = isText ? _parameter_Document.createTextNode(_string.empty) : _parameter_Document.createElement(nodeType); } @@ -1529,23 +1445,19 @@ e.cancelBubble = true; } function getScrollPosition() { - var doc = _parameter_Document.documentElement; - var left = (_parameter_Window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0); - var top = (_parameter_Window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); + var doc = _parameter_Document.documentElement, left = (_parameter_Window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0), top = (_parameter_Window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); return {left:left, top:top}; } function showElementAtMousePosition(e, element) { - var left = e.pageX; - var top = e.pageY; - var scrollPosition = getScrollPosition(); + var left = e.pageX, top = e.pageY, scrollPosition = getScrollPosition(); element.style.display = "block"; if (left + element.offsetWidth > _parameter_Window.innerWidth) { - left = left - element.offsetWidth; + left -= element.offsetWidth; } else { left++; } if (top + element.offsetHeight > _parameter_Window.innerHeight) { - top = top - element.offsetHeight; + top -= element.offsetHeight; } else { top++; } @@ -1559,8 +1471,7 @@ element.style.top = top + "px"; } function reverseElementsOrder(parent) { - var children = parent.children; - var childrenLength = children.length - 1; + var children = parent.children, childrenLength = children.length - 1; for (; childrenLength--;) { parent.appendChild(children[childrenLength]); } @@ -1599,8 +1510,7 @@ return value; } function getObjectFromString(objectString) { - var parsed = true; - var result = null; + var parsed = true, result = null; try { if (isDefinedString(objectString)) { result = _parameter_JSON.parse(objectString); @@ -1623,8 +1533,7 @@ } function newGuid() { var result = []; - var charIndex = 0; - for (; charIndex < 32; charIndex++) { + for (var charIndex = 0; charIndex < 32; charIndex++) { if (charIndex === 8 || charIndex === 12 || charIndex === 16 || charIndex === 20) { result.push(_string.dash); } @@ -1649,143 +1558,24 @@ function getStorageDateYear(data) { return data.split(_string.dash)[0]; } - function moveToPreviousYear(bindingOptions, callCustomTrigger) { - callCustomTrigger = getDefaultBoolean(callCustomTrigger, true); - var render = true; - var year = bindingOptions.currentView.year; - year--; - for (; !isYearVisible(bindingOptions, year);) { - if (isFirstVisibleYear(bindingOptions, year)) { - render = false; - break; - } - year--; - } - if (render) { - bindingOptions.currentView.year = year; - renderControlContainer(bindingOptions); - if (callCustomTrigger) { - fireCustomTrigger(bindingOptions.onBackYear, bindingOptions.currentView.year); - } - } - } - function moveToNextYear(bindingOptions, callCustomTrigger) { - callCustomTrigger = getDefaultBoolean(callCustomTrigger, true); - var render = true; - var year = bindingOptions.currentView.year; - year++; - for (; !isYearVisible(bindingOptions, year);) { - if (isLastVisibleYear(bindingOptions, year)) { - render = false; - break; - } - year++; - } - if (render) { - bindingOptions.currentView.year = year; - renderControlContainer(bindingOptions); - if (callCustomTrigger) { - fireCustomTrigger(bindingOptions.onBackYear, bindingOptions.currentView.year); - } - } - } - function destroyElement(bindingOptions) { - bindingOptions.currentView.element.innerHTML = _string.empty; - removeClass(bindingOptions.currentView.element, "heat-js"); - _parameter_Document.body.removeChild(bindingOptions.currentView.tooltip); - if (bindingOptions.currentView.isInFetchMode && isDefined(bindingOptions.currentView.isInFetchModeTimer)) { - clearInterval(bindingOptions.currentView.isInFetchModeTimer); - } - fireCustomTrigger(bindingOptions.onDestroy, bindingOptions.currentView.element); - } - function buildDefaultConfiguration(newConfiguration) { - _configuration = !isDefinedObject(newConfiguration) ? {} : newConfiguration; - _configuration.safeMode = getDefaultBoolean(_configuration.safeMode, true); - _configuration.domElementTypes = getDefaultStringOrArray(_configuration.domElementTypes, ["*"]); - buildDefaultConfigurationStrings(); - buildDefaultConfigurationArrays(); - } - function buildDefaultConfigurationStrings() { - _configuration.stText = getDefaultString(_configuration.stText, "st"); - _configuration.ndText = getDefaultString(_configuration.ndText, "nd"); - _configuration.rdText = getDefaultString(_configuration.rdText, "rd"); - _configuration.thText = getDefaultString(_configuration.thText, "th"); - _configuration.backButtonText = getDefaultString(_configuration.backButtonText, "Back"); - _configuration.nextButtonText = getDefaultString(_configuration.nextButtonText, "Next"); - _configuration.refreshButtonText = getDefaultString(_configuration.refreshButtonText, "Refresh"); - _configuration.exportButtonText = getDefaultString(_configuration.exportButtonText, "Export"); - _configuration.lessText = getDefaultString(_configuration.lessText, "Less"); - _configuration.moreText = getDefaultString(_configuration.moreText, "More"); - _configuration.dateText = getDefaultString(_configuration.dateText, "Date"); - _configuration.countText = getDefaultString(_configuration.countText, "Count"); - _configuration.mapText = getDefaultString(_configuration.mapText, "Map"); - _configuration.chartText = getDefaultString(_configuration.chartText, "Chart"); - _configuration.noChartDataMessage = getDefaultString(_configuration.noChartDataMessage, "There is currently no data to view."); - _configuration.statisticsText = getDefaultString(_configuration.statisticsText, "Statistics"); - _configuration.noStatisticsDataMessage = getDefaultString(_configuration.noStatisticsDataMessage, "There are currently no statistics to view."); - _configuration.unknownTrendText = getDefaultString(_configuration.unknownTrendText, "Unknown"); - _configuration.importButtonText = getDefaultString(_configuration.importButtonText, "Import"); - _configuration.noMapDataMessage = getDefaultString(_configuration.noMapDataMessage, "There is currently no data to view."); - _configuration.objectErrorText = getDefaultString(_configuration.objectErrorText, "Errors in object: {{error_1}}, {{error_2}}"); - _configuration.attributeNotValidErrorText = getDefaultString(_configuration.attributeNotValidErrorText, "The attribute '{{attribute_name}}' is not a valid object."); - _configuration.attributeNotSetErrorText = getDefaultString(_configuration.attributeNotSetErrorText, "The attribute '{{attribute_name}}' has not been set correctly."); - } - function buildDefaultConfigurationArrays() { - if (isInvalidOptionArray(_configuration.monthNames, 12)) { - _configuration.monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - } - if (isInvalidOptionArray(_configuration.dayNames, 7)) { - _configuration.dayNames = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; - } - } - function isInvalidOptionArray(array, minimumLength) { - minimumLength = isDefinedNumber(minimumLength) ? minimumLength : 1; - return !isDefinedArray(array) || array.length < minimumLength; - } - var _parameter_Document = null; - var _parameter_Window = null; - var _parameter_Math = null; - var _parameter_JSON = null; - var _configuration = {}; - var _string = {empty:"", space:" ", newLine:"\n", dash:"-", underscore:"_", plus:"+", zero:"0"}; - var _value = {notFound:-1}; - var _internal_Name_Holiday = "HOLIDAY"; - var _local_Storage_Start_ID = "HJS_"; - var _default_MonthsToShow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; - var _default_DaysToShow = [1, 2, 3, 4, 5, 6, 7]; - var _elements_Type = {}; - var _elements_Day_Width = null; - var _elements_DateCounts = {}; - var _elements_View_Name_Map = "map"; - var _elements_View_Name_Chart = "chart"; - var _elements_View_Name_Statistics = "statistics"; - var _elements_View_Map = 1; - var _elements_View_Chart = 2; - var _elements_View_Statistics = 3; - var _export_Type_Csv = "csv"; - var _export_Type_Json = "json"; - var _export_Type_Xml = "xml"; - var _export_Type_Txt = "txt"; - var _attribute_Name_Options = "data-heat-options"; - this.addDates = function(elementId, dates, type, triggerRefresh) { + _public.addDates = function(elementId, dates, type, triggerRefresh) { if (isDefinedString(elementId) && isDefinedArray(dates) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode) { type = getDefaultString(type, _configuration.unknownTrendText); triggerRefresh = getDefaultBoolean(triggerRefresh, true); var datesLength = dates.length; - var dateIndex = 0; - for (; dateIndex < datesLength; dateIndex++) { - this.addDate(elementId, dates[dateIndex], type, false); + for (var dateIndex = 0; dateIndex < datesLength; dateIndex++) { + _public.addDate(elementId, dates[dateIndex], type, false); } if (triggerRefresh) { renderControlContainer(bindingOptions, true); } } } - return this; + return _public; }; - this.addDate = function(elementId, date, type, triggerRefresh) { + _public.addDate = function(elementId, date, type, triggerRefresh) { if (isDefinedString(elementId) && isDefinedDate(date) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode) { @@ -1806,9 +1596,9 @@ } } } - return this; + return _public; }; - this.updateDate = function(elementId, date, count, type, triggerRefresh) { + _public.updateDate = function(elementId, date, count, type, triggerRefresh) { if (isDefinedString(elementId) && isDefinedDate(date) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode && count > 0) { @@ -1824,27 +1614,26 @@ } } } - return this; + return _public; }; - this.removeDates = function(elementId, dates, type, triggerRefresh) { + _public.removeDates = function(elementId, dates, type, triggerRefresh) { if (isDefinedString(elementId) && isDefinedArray(dates) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode) { type = getDefaultString(type, _configuration.unknownTrendText); triggerRefresh = getDefaultBoolean(triggerRefresh, true); var datesLength = dates.length; - var dateIndex = 0; - for (; dateIndex < datesLength; dateIndex++) { - this.removeDate(elementId, dates[dateIndex], type, false); + for (var dateIndex = 0; dateIndex < datesLength; dateIndex++) { + _public.removeDate(elementId, dates[dateIndex], type, false); } if (triggerRefresh) { renderControlContainer(bindingOptions, true); } } } - return this; + return _public; }; - this.removeDate = function(elementId, date, type, triggerRefresh) { + _public.removeDate = function(elementId, date, type, triggerRefresh) { if (isDefinedString(elementId) && isDefinedDate(date) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode) { @@ -1862,9 +1651,9 @@ } } } - return this; + return _public; }; - this.clearDate = function(elementId, date, type, triggerRefresh) { + _public.clearDate = function(elementId, date, type, triggerRefresh) { if (isDefinedString(elementId) && isDefinedDate(date) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode) { @@ -1880,18 +1669,17 @@ } } } - return this; + return _public; }; - this.resetAll = function(triggerRefresh) { - var elementId; - for (elementId in _elements_DateCounts) { + _public.resetAll = function(triggerRefresh) { + for (var elementId in _elements_DateCounts) { if (_elements_DateCounts.hasOwnProperty(elementId)) { - this.reset(elementId, triggerRefresh); + _public.reset(elementId, triggerRefresh); } } - return this; + return _public; }; - this.reset = function(elementId, triggerRefresh) { + _public.reset = function(elementId, triggerRefresh) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; if (!bindingOptions.currentView.isInFetchMode) { @@ -1904,34 +1692,33 @@ } } } - return this; + return _public; }; - this["export"] = function(elementId, exportType) { + _public.export = function(elementId, exportType) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { exportAllData(_elements_DateCounts[elementId].options, exportType); } - return this; + return _public; }; - this.refresh = function(elementId) { + _public.refresh = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; renderControlContainer(bindingOptions, true); fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element); } - return this; + return _public; }; - this.refreshAll = function() { - var elementId; - for (elementId in _elements_DateCounts) { + _public.refreshAll = function() { + for (var elementId in _elements_DateCounts) { if (_elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; renderControlContainer(bindingOptions, true); fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element); } } - return this; + return _public; }; - this.setYear = function(elementId, year) { + _public.setYear = function(elementId, year) { if (isDefinedString(elementId) && isDefinedNumber(year) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; bindingOptions.currentView.year = year; @@ -1942,15 +1729,12 @@ } fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year); } - return this; + return _public; }; - this.setYearToHighest = function(elementId) { + _public.setYearToHighest = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { - var bindingOptions = _elements_DateCounts[elementId].options; - var data = getCurrentViewData(bindingOptions); - var maximumYear = 0; - var storageDate; - for (storageDate in data) { + var bindingOptions = _elements_DateCounts[elementId].options, data = getCurrentViewData(bindingOptions), maximumYear = 0; + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { maximumYear = _parameter_Math.max(maximumYear, parseInt(getStorageDateYear(storageDate))); } @@ -1965,15 +1749,12 @@ fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year); } } - return this; + return _public; }; - this.setYearToLowest = function(elementId) { + _public.setYearToLowest = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { - var bindingOptions = _elements_DateCounts[elementId].options; - var data = getCurrentViewData(bindingOptions); - var minimumYear = 9999; - var storageDate; - for (storageDate in data) { + var bindingOptions = _elements_DateCounts[elementId].options, data = getCurrentViewData(bindingOptions), minimumYear = 9999; + for (var storageDate in data) { if (data.hasOwnProperty(storageDate)) { minimumYear = _parameter_Math.min(minimumYear, parseInt(getStorageDateYear(storageDate))); } @@ -1988,21 +1769,21 @@ fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year); } } - return this; + return _public; }; - this.moveToPreviousYear = function(elementId) { + _public.moveToPreviousYear = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { moveToPreviousYear(_elements_DateCounts[elementId].options); } - return this; + return _public; }; - this.moveToNextYear = function(elementId) { + _public.moveToNextYear = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { moveToNextYear(_elements_DateCounts[elementId].options); } - return this; + return _public; }; - this.moveToCurrentYear = function(elementId) { + _public.moveToCurrentYear = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; bindingOptions.currentView.year = (new Date()).getFullYear(); @@ -2013,9 +1794,9 @@ } fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year); } - return this; + return _public; }; - this.getYear = function(elementId) { + _public.getYear = function(elementId) { var result = null; if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { var bindingOptions = _elements_DateCounts[elementId].options; @@ -2023,20 +1804,19 @@ } return result; }; - this.render = function(element, options) { + _public.render = function(element, options) { if (isDefinedObject(element) && isDefinedObject(options)) { renderControl(renderBindingOptions(options, element)); } - return this; + return _public; }; - this.renderAll = function() { + _public.renderAll = function() { render(); - return this; + return _public; }; - this.switchView = function(elementId, viewName) { + _public.switchView = function(elementId, viewName) { if (isDefinedString(elementId) && isDefinedString(viewName) && _elements_DateCounts.hasOwnProperty(elementId)) { - var bindingOptions = _elements_DateCounts[elementId].options; - var view = null; + var bindingOptions = _elements_DateCounts[elementId].options, view = null; if (viewName.toLowerCase() === _elements_View_Name_Map) { view = _elements_View_Map; } else if (viewName.toLowerCase() === _elements_View_Name_Chart) { @@ -2050,9 +1830,9 @@ renderControlContainer(bindingOptions, false, true); } } - return this; + return _public; }; - this.switchType = function(elementId, type) { + _public.switchType = function(elementId, type) { if (isDefinedString(elementId) && isDefinedString(type) && _elements_DateCounts.hasOwnProperty(elementId) && _elements_DateCounts[elementId].type.hasOwnProperty(type)) { var bindingOptions = _elements_DateCounts[elementId].options; if (bindingOptions.currentView.type !== type) { @@ -2061,15 +1841,12 @@ renderControlContainer(bindingOptions); } } - return this; + return _public; }; - this.updateOptions = function(elementId, newOptions) { + _public.updateOptions = function(elementId, newOptions) { if (isDefinedString(elementId) && isDefinedObject(newOptions) && _elements_DateCounts.hasOwnProperty(elementId)) { - var bindingOptions = _elements_DateCounts[elementId].options; - var newBindingOptions = buildAttributeOptions(newOptions); - var optionChanged = false; - var propertyName; - for (propertyName in newBindingOptions) { + var bindingOptions = _elements_DateCounts[elementId].options, newBindingOptions = buildAttributeOptions(newOptions), optionChanged = false; + for (var propertyName in newBindingOptions) { if (newBindingOptions.hasOwnProperty(propertyName) && bindingOptions.hasOwnProperty(propertyName) && bindingOptions[propertyName] !== newBindingOptions[propertyName]) { bindingOptions[propertyName] = newBindingOptions[propertyName]; optionChanged = true; @@ -2080,30 +1857,75 @@ fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element); } } - return this; + return _public; }; - this.destroyAll = function() { - var elementId; - for (elementId in _elements_DateCounts) { + function moveToPreviousYear(bindingOptions, callCustomTrigger) { + callCustomTrigger = getDefaultBoolean(callCustomTrigger, true); + var render = true, year = bindingOptions.currentView.year; + year--; + while (!isYearVisible(bindingOptions, year)) { + if (isFirstVisibleYear(bindingOptions, year)) { + render = false; + break; + } + year--; + } + if (render) { + bindingOptions.currentView.year = year; + renderControlContainer(bindingOptions); + if (callCustomTrigger) { + fireCustomTrigger(bindingOptions.onBackYear, bindingOptions.currentView.year); + } + } + } + function moveToNextYear(bindingOptions, callCustomTrigger) { + callCustomTrigger = getDefaultBoolean(callCustomTrigger, true); + var render = true, year = bindingOptions.currentView.year; + year++; + while (!isYearVisible(bindingOptions, year)) { + if (isLastVisibleYear(bindingOptions, year)) { + render = false; + break; + } + year++; + } + if (render) { + bindingOptions.currentView.year = year; + renderControlContainer(bindingOptions); + if (callCustomTrigger) { + fireCustomTrigger(bindingOptions.onBackYear, bindingOptions.currentView.year); + } + } + } + _public.destroyAll = function() { + for (var elementId in _elements_DateCounts) { if (_elements_DateCounts.hasOwnProperty(elementId)) { destroyElement(_elements_DateCounts[elementId].options); } } _elements_DateCounts = {}; - return this; + return _public; }; - this.destroy = function(elementId) { + _public.destroy = function(elementId) { if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) { destroyElement(_elements_DateCounts[elementId].options); delete _elements_DateCounts[elementId]; } - return this; + return _public; }; - this.setConfiguration = function(newConfiguration, triggerRefresh) { + function destroyElement(bindingOptions) { + bindingOptions.currentView.element.innerHTML = _string.empty; + removeClass(bindingOptions.currentView.element, "heat-js"); + _parameter_Document.body.removeChild(bindingOptions.currentView.tooltip); + if (bindingOptions.currentView.isInFetchMode && isDefined(bindingOptions.currentView.isInFetchModeTimer)) { + clearInterval(bindingOptions.currentView.isInFetchModeTimer); + } + fireCustomTrigger(bindingOptions.onDestroy, bindingOptions.currentView.element); + } + _public.setConfiguration = function(newConfiguration, triggerRefresh) { if (isDefinedObject(newConfiguration)) { var configurationHasChanged = false; - var propertyName; - for (propertyName in newConfiguration) { + for (var propertyName in newConfiguration) { if (newConfiguration.hasOwnProperty(propertyName) && _configuration.hasOwnProperty(propertyName) && _configuration[propertyName] !== newConfiguration[propertyName]) { _configuration[propertyName] = newConfiguration[propertyName]; configurationHasChanged = true; @@ -2113,24 +1935,67 @@ triggerRefresh = getDefaultBoolean(triggerRefresh, true); buildDefaultConfiguration(_configuration); if (triggerRefresh) { - this.refreshAll(); + _public.refreshAll(); } } } - return this; + return _public; }; - this.getIds = function() { + function buildDefaultConfiguration(newConfiguration) { + _configuration = !isDefinedObject(newConfiguration) ? {} : newConfiguration; + _configuration.safeMode = getDefaultBoolean(_configuration.safeMode, true); + _configuration.domElementTypes = getDefaultStringOrArray(_configuration.domElementTypes, ["*"]); + buildDefaultConfigurationStrings(); + buildDefaultConfigurationArrays(); + } + function buildDefaultConfigurationStrings() { + _configuration.stText = getDefaultString(_configuration.stText, "st"); + _configuration.ndText = getDefaultString(_configuration.ndText, "nd"); + _configuration.rdText = getDefaultString(_configuration.rdText, "rd"); + _configuration.thText = getDefaultString(_configuration.thText, "th"); + _configuration.backButtonText = getDefaultString(_configuration.backButtonText, "Back"); + _configuration.nextButtonText = getDefaultString(_configuration.nextButtonText, "Next"); + _configuration.refreshButtonText = getDefaultString(_configuration.refreshButtonText, "Refresh"); + _configuration.exportButtonText = getDefaultString(_configuration.exportButtonText, "Export"); + _configuration.lessText = getDefaultString(_configuration.lessText, "Less"); + _configuration.moreText = getDefaultString(_configuration.moreText, "More"); + _configuration.dateText = getDefaultString(_configuration.dateText, "Date"); + _configuration.countText = getDefaultString(_configuration.countText, "Count"); + _configuration.mapText = getDefaultString(_configuration.mapText, "Map"); + _configuration.chartText = getDefaultString(_configuration.chartText, "Chart"); + _configuration.noChartDataMessage = getDefaultString(_configuration.noChartDataMessage, "There is currently no data to view."); + _configuration.statisticsText = getDefaultString(_configuration.statisticsText, "Statistics"); + _configuration.noStatisticsDataMessage = getDefaultString(_configuration.noStatisticsDataMessage, "There are currently no statistics to view."); + _configuration.unknownTrendText = getDefaultString(_configuration.unknownTrendText, "Unknown"); + _configuration.importButtonText = getDefaultString(_configuration.importButtonText, "Import"); + _configuration.noMapDataMessage = getDefaultString(_configuration.noMapDataMessage, "There is currently no data to view."); + _configuration.objectErrorText = getDefaultString(_configuration.objectErrorText, "Errors in object: {{error_1}}, {{error_2}}"); + _configuration.attributeNotValidErrorText = getDefaultString(_configuration.attributeNotValidErrorText, "The attribute '{{attribute_name}}' is not a valid object."); + _configuration.attributeNotSetErrorText = getDefaultString(_configuration.attributeNotSetErrorText, "The attribute '{{attribute_name}}' has not been set correctly."); + } + function buildDefaultConfigurationArrays() { + if (isInvalidOptionArray(_configuration.monthNames, 12)) { + _configuration.monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + } + if (isInvalidOptionArray(_configuration.dayNames, 7)) { + _configuration.dayNames = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + } + } + function isInvalidOptionArray(array, minimumLength) { + minimumLength = isDefinedNumber(minimumLength) ? minimumLength : 1; + return !isDefinedArray(array) || array.length < minimumLength; + } + _public.getIds = function() { var result = []; - var elementId; - for (elementId in _elements_DateCounts) { + for (var elementId in _elements_DateCounts) { if (_elements_DateCounts.hasOwnProperty(elementId)) { result.push(elementId); } } return result; }; - this.getVersion = function() { - return "2.7.2"; + _public.getVersion = function() { + return "2.8.0"; }; (function(documentObject, windowObject, mathObject, jsonObject) { _parameter_Document = documentObject; @@ -2145,7 +2010,7 @@ cancelAllPullDataTimers(); }); if (!isDefined(_parameter_Window.$heat)) { - _parameter_Window.$heat = this; + _parameter_Window.$heat = _public; } })(document, window, Math, JSON); })(); \ No newline at end of file diff --git a/dist/heat.js.css b/dist/heat.js.css index 120027f1..34715ec2 100644 --- a/dist/heat.js.css +++ b/dist/heat.js.css @@ -1,5 +1,5 @@ /* - * Heat.js Library v2.7.2 + * Heat.js Library v2.8.0 * * Copyright 2024 Bunoon * Released under the MIT License @@ -373,7 +373,7 @@ div.heat-js div.map-contents div.map div.days-months-bottom div.day-name { text-align: left !important; height: var(--heat-js-day-size); margin-bottom: var(--heat-js-day-spacing); - display: inline-flex; + display: flex; justify-content: center; flex-direction: column; } diff --git a/dist/heat.js.min.css b/dist/heat.js.min.css index 471c8059..7182956b 100644 --- a/dist/heat.js.min.css +++ b/dist/heat.js.min.css @@ -1,2 +1,2 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ -:root{--heat-js-default-font:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--heat-js-text-bold-weight:400;--heat-js-title-bold-weight:900;--heat-js-text-bold-weight-active:900;--heat-js-color-black:#3b3a3a;--heat-js-color-white:#adbac7;--heat-js-color-snow-white:#F5F5F5;--heat-js-color-gray:#AAA;--heat-js-container-background-color:#22272e;--heat-js-container-border-color:#454c56;--heat-js-tooltip-background-color:var(--heat-js-container-background-color);--heat-js-tooltip-border-color:var(--heat-js-container-border-color);--heat-js-tooltip-text-color:var(--heat-js-color-white);--heat-js-years-background-color:var(--heat-js-container-background-color);--heat-js-years-border-color:var(--heat-js-container-border-color);--heat-js-years-text-color:var(--heat-js-color-white);--heat-js-years-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-years-text-color-hover:var(--heat-js-color-snow-white);--heat-js-title-opener-text-color-hover:var(--heat-js-color-gray);--heat-js-title-background-color:var(--heat-js-container-background-color);--heat-js-title-border-color:var(--heat-js-container-border-color);--heat-js-title-text-color:var(--heat-js-color-white);--heat-js-title-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-title-text-color-hover:var(--heat-js-color-snow-white);--heat-js-holiday-background-color:rgba(210,43,43,.75);--heat-js-holiday-border-color:rgba(210,43,43,.5);--heat-js-holiday-text-color:var(--heat-js-color-black);--heat-js-day-background-color:#2d333b;--heat-js-day-border-color:var(--heat-js-container-border-color);--heat-js-day-background-color-hover:var(--heat-js-container-border-color);--heat-js-day-spacing:6.3px;--heat-js-day-opacity-hover:.7;--heat-js-day-opacity-active:.5;--heat-js-day-size:1.1rem;--heat-js-day-chart-width:10px;--heat-js-day-color-1-background-color:rgba(80,200,120,.25);--heat-js-day-color-1-border-color:rgba(80,200,120,.15);--heat-js-day-color-1-text-color:var(--heat-js-color-white);--heat-js-day-color-2-background-color:rgba(80,200,120,.5);--heat-js-day-color-2-border-color:rgba(80,200,120,.25);--heat-js-day-color-2-text-color:var(--heat-js-color-white);--heat-js-day-color-3-background-color:rgba(80,200,120,.75);--heat-js-day-color-3-border-color:rgba(80,200,120,.5);--heat-js-day-color-3-text-color:var(--heat-js-color-black);--heat-js-day-color-4-background-color:rgba(80,200,120,1);--heat-js-day-color-4-border-color:rgba(80,200,120,.75);--heat-js-day-color-4-text-color:var(--heat-js-color-black);--heat-js-button-background-color:var(--heat-js-day-background-color);--heat-js-button-border-color:var(--heat-js-container-border-color);--heat-js-button-text-color:var(--heat-js-color-white);--heat-js-button-background-color-hover:var(--heat-js-container-border-color);--heat-js-button-text-color-hover:var(--heat-js-color-snow-white);--heat-js-button-background-color-active:#616b79;--heat-js-button-text-color-active:var(--heat-js-color-snow-white);--heat-js-border-radius:.5rem;--heat-js-border-radius-day:.35rem;--heat-js-border-size:.5px;--heat-js-border-size-day:1px;--heat-js-spacing:10px;--heat-js-spacing-font-size:.85rem;--heat-js-spacing-day-font-size:.6rem;--heat-js-transition:all .3s;--heat-js-animation-length:0.5s}div.heat-js{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);display:inline-block;position:relative;border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-container-background-color);color:var(--heat-js-color-white);border:var(--heat-js-border-size) solid var(--heat-js-container-border-color);padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);width:100%;max-width:700px;margin:0!important}div.heat-js div.view-switch{animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.no-click{pointer-events:none!important}div.heat-js *{box-sizing:border-box;line-height:normal}div.heat-js *::before,div.heat-js *::after{box-sizing:border-box;line-height:normal}div.heat-js div.title-bar{text-align:right;margin-bottom:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.title{float:left;font-weight:var(--heat-js-title-bold-weight);font-size:1.2rem;padding-bottom:3px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.title:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.titles-list{display:block}div.heat-js div.title-bar div.title div.down-arrow{display:inline-block;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:14px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-right:var(--heat-js-spacing)}div.heat-js div.title-bar div.title div.titles-list{animation:fade-in-animation var(--heat-js-animation-length);padding-top:3px;display:none;position:absolute;width:100px;margin-top:3px;z-index:1000}div.heat-js div.title-bar div.title div.titles-list div.titles{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-title-background-color);border:var(--heat-js-border-size) solid var(--heat-js-title-border-color);color:var(--heat-js-title-text-color);overflow-y:scroll}div.heat-js div.title-bar div.title div.titles-list div.titles div.title{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:left;width:100%;transition:var(--heat-js-transition);font-size:var(--heat-js-spacing-font-size)!important}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):active{opacity:0.5!important}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):hover{cursor:pointer;background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:last-child{border-bottom:none}div.heat-js div.title-bar div.title div.titles-list div.titles div.title-active{background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.title-bar button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.title-bar button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.title-bar button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.title-bar button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.back{margin-left:calc(var(--heat-js-spacing) * 2)!important}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.import{margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.title-bar div.year-text{margin-left:var(--heat-js-spacing);margin-right:var(--heat-js-spacing);display:inline-block;font-weight:var(--heat-js-title-bold-weight);position:relative;padding-top:5px;padding-bottom:5px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.year-text:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.years-list{display:block!important}div.heat-js div.title-bar div.year-text div.down-arrow{display:inline-block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:9px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-left:calc(var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.year-text div.years-list{animation:fade-in-animation var(--heat-js-animation-length);padding-top:5px;display:none;position:absolute;width:80px;left:50%;transform:translateX(-50%);margin-top:5px;z-index:1000}div.heat-js div.title-bar div.year-text div.years-list div.years{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-years-background-color);border:var(--heat-js-border-size) solid var(--heat-js-years-border-color);color:var(--heat-js-years-text-color);max-height:183px;height:100%;overflow-y:scroll;scroll-snap-type:y mandatory}div.heat-js div.title-bar div.year-text div.years-list div.years div.year{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:center;width:100%;transition:var(--heat-js-transition);scroll-snap-align:start}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):active{opacity:0.5!important}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):hover{cursor:pointer;background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover)}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:last-child{border-bottom:none}div.heat-js div.title-bar div.year-text div.years-list div.years div.year-active{background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar div.year-text div.years-list div.years div.year-current{font-style:italic;font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:none}@media (min-width:768px){div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:inline-block}}div.heat-js div.map-contents{overflow-x:scroll;overflow-y:hidden;min-height:191px;position:relative}div.heat-js div.map-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.map-contents div.map{display:inline-flex;flex-direction:row}div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;z-index:50}@media (min-width:768px){div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{display:block}}div.heat-js div.map-contents div.map div.days div.day-name,div.heat-js div.map-contents div.map div.days-months-bottom div.day-name{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);margin-bottom:var(--heat-js-day-spacing);display:inline-flex;justify-content:center;flex-direction:column}div.heat-js div.map-contents div.map div.days-months-bottom{padding-top:0!important}div.heat-js div.map-contents div.map div.months{display:flex;justify-content:space-between;flex-grow:1}div.heat-js div.map-contents div.map div.months div.month{flex:1;pointer-events:none}div.heat-js div.map-contents div.map div.months div.month:last-child div.day-columns div.day-column:last-child div.day{margin-right:0!important}div.heat-js div.map-contents div.map div.months div.month div.month-name,div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.heat-js div.map-contents div.map div.months div.month div.month-name{margin-bottom:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{margin-top:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.day-columns{display:flex;justify-content:space-between}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled{display:flex;border-radius:var(--heat-js-border-radius-day);width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);margin-bottom:var(--heat-js-day-spacing);font-size:var(--heat-js-spacing-day-font-size);justify-content:center;align-items:center;overflow:hidden}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:last-child,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled:last-child{margin-bottom:0}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day{pointer-events:all;background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);transition:var(--heat-js-transition);transition-property:opacity,background-color,color,border-color}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents{display:flex;overflow-x:scroll;overflow-y:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.chart-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.chart-contents div.chart{display:inline-flex;flex-direction:row}div.heat-js div.chart-contents div.chart div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.y-labels{display:block}}div.heat-js div.chart-contents div.chart div.y-labels div.label-0,div.heat-js div.chart-contents div.chart div.y-labels div.label-25,div.heat-js div.chart-contents div.chart div.y-labels div.label-50,div.heat-js div.chart-contents div.chart div.y-labels div.label-75,div.heat-js div.chart-contents div.chart div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.chart-contents div.chart div.y-labels div.label-0{top:0}div.heat-js div.chart-contents div.chart div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-100{bottom:0}div.heat-js div.chart-contents div.chart div.day-lines{flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color)}div.heat-js div.chart-contents div.chart div.day-lines div.day-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);overflow:hidden}div.heat-js div.chart-contents div.chart div.day-lines div.day-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;min-width:var(--heat-js-day-chart-width);margin-right:1px;display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.day-lines div.day-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:last-child{margin-right:0}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents div.chart-months{position:relative;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing))}div.heat-js div.chart-contents div.chart-months div.month-name,div.heat-js div.chart-contents div.chart-months div.month-name-space{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;position:absolute;bottom:0}@media (min-width:768px){div.heat-js div.chart-contents div.chart-months div.month-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart-months div.month-name:nth-child(2){margin-left:var(--heat-js-day-chart-width)}div.heat-js div.chart-contents div.chart-months div.month-name-space{left:0;top:0;position:sticky;background-color:var(--heat-js-container-background-color)}div.heat-js div.statistics-contents{display:flex;overflow:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.statistics-contents div.no-statistics-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.statistics-contents div.statistics{display:flex;flex-direction:row}div.heat-js div.statistics-contents div.statistics div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.y-labels{display:block}}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0{top:0}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{bottom:0}div.heat-js div.statistics-contents div.statistics div.range-lines{display:flex;align-items:baseline;flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color);justify-content:space-between}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);position:relative;overflow:hidden}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number div.count{position:absolute;top:calc(var(--heat-js-spacing) / 2);left:50%;transform:translateX(-50%)}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;flex:1 100%;margin-right:var(--heat-js-spacing);display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:last-child{margin-right:0}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.statistics-contents div.statistics-ranges{display:flex;flex:1;position:relative;justify-content:space-between;align-items:baseline;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px)}div.heat-js div.statistics-contents div.statistics-ranges div.range-name{flex:1 100%;margin-top:var(--heat-js-spacing);font-weight:var(--heat-js-text-bold-weight);text-align:center!important;overflow:hidden;text-overflow:ellipsis}div.heat-js div.description{text-align:center;margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);text-align:center}@media (min-width:768px){div.heat-js div.description{text-align:left}}@media (min-width:768px){div.heat-js div.description{text-align:left}}div.heat-js div.description span.label,div.heat-js div.description a.label,div.heat-js div.description a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.description a.label{transition:var(--heat-js-transition)}div.heat-js div.description a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.description a.label:hover{text-decoration:underline}div.heat-js div.guide{display:block}@media (min-width:768px){div.heat-js div.guide{display:flex}}div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);width:100%}@media (min-width:768px){div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-bottom:0}}div.heat-js div.guide div.map-types{text-align:center;flex-grow:unset;margin-right:0;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left;width:unset;flex-grow:1;margin-right:var(--heat-js-spacing)}}div.heat-js div.guide div.map-types button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.guide div.map-types button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left}}div.heat-js div.guide div.map-types span.label,div.heat-js div.guide div.map-types a.label,div.heat-js div.guide div.map-types a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.guide div.map-types a.label{transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-types a.label:hover{text-decoration:underline}div.heat-js div.guide div.map-types button{margin-left:0!important;margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.guide div.map-toggles{display:flex;align-items:center;justify-content:center;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-toggles{text-align:right;justify-content:right;width:auto}}div.heat-js div.guide div.map-toggles div.less-text,div.heat-js div.guide div.map-toggles div.more-text{display:inline-block;font-weight:var(--heat-js-text-bold-weight);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.less-text:hover,div.heat-js div.guide div.map-toggles div.more-text:hover{cursor:pointer;text-decoration:underline}div.heat-js div.guide div.map-toggles div.less-text:active,div.heat-js div.guide div.map-toggles div.more-text:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-toggles div.less-text{margin-right:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.more-text{margin-left:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.days{display:inline-flex;align-items:center;justify-content:right}div.heat-js div.guide div.map-toggles div.days div.day-number{display:inline-flex!important;justify-content:center;align-items:center;overflow:hidden;text-align:center;font-size:var(--heat-js-spacing-day-font-size);padding-left:calc(var(--heat-js-spacing) / 2);padding-right:calc(var(--heat-js-spacing) / 2)}div.heat-js div.guide div.map-toggles div.days div.day{background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);display:inline-block;border-radius:var(--heat-js-border-radius-day);min-width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.days div.day:last-child{margin-right:0}div.heat-js div.guide div.map-toggles div.days div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.day-color-1:not(.no-hover):active,div.heat-js div.day-color-2:not(.no-hover):active,div.heat-js div.day-color-3:not(.no-hover):active,div.heat-js div.day-color-4:not(.no-hover):active,div.heat-js div.holiday:not(.no-hover):active{opacity:var(--heat-js-day-opacity-active)!important}div.heat-js div.day-color-1:not(.no-hover):hover,div.heat-js div.day-color-2:not(.no-hover):hover,div.heat-js div.day-color-3:not(.no-hover):hover,div.heat-js div.day-color-4:not(.no-hover):hover,div.heat-js div.holiday:not(.no-hover):hover{cursor:pointer;opacity:var(--heat-js-day-opacity-hover)}div.heat-js div.holiday{background-color:var(--heat-js-holiday-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-holiday-border-color)!important;color:var(--heat-js-holiday-text-color)}div.heat-js div.day-color-1{background-color:var(--heat-js-day-color-1-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-1-border-color)!important;color:var(--heat-js-day-color-1-text-color)}div.heat-js div.day-color-2{background-color:var(--heat-js-day-color-2-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-2-border-color)!important;color:var(--heat-js-day-color-2-text-color)}div.heat-js div.day-color-3{background-color:var(--heat-js-day-color-3-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-3-border-color)!important;color:var(--heat-js-day-color-3-text-color)}div.heat-js div.day-color-4{background-color:var(--heat-js-day-color-4-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-4-border-color)!important;color:var(--heat-js-day-color-4-text-color)}div.heat-js-tooltip{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);animation:fade-in-animation var(--heat-js-animation-length);position:absolute;background-color:var(--heat-js-tooltip-background-color);border:var(--heat-js-border-size) solid var(--heat-js-tooltip-border-color);color:var(--heat-js-tooltip-text-color);border-radius:var(--heat-js-border-radius);z-index:2000;max-width:300px;padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);font-weight:var(--heat-js-text-bold-weight);display:none}@keyframes fade-in-animation{0%{opacity:0}100%{opacity:1}} \ No newline at end of file +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +:root{--heat-js-default-font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--heat-js-text-bold-weight:400;--heat-js-title-bold-weight:900;--heat-js-text-bold-weight-active:900;--heat-js-color-black:#3b3a3a;--heat-js-color-white:#adbac7;--heat-js-color-snow-white:#F5F5F5;--heat-js-color-gray:#AAAAAA;--heat-js-container-background-color:#22272e;--heat-js-container-border-color:#454c56;--heat-js-tooltip-background-color:var(--heat-js-container-background-color);--heat-js-tooltip-border-color:var(--heat-js-container-border-color);--heat-js-tooltip-text-color:var(--heat-js-color-white);--heat-js-years-background-color:var(--heat-js-container-background-color);--heat-js-years-border-color:var(--heat-js-container-border-color);--heat-js-years-text-color:var(--heat-js-color-white);--heat-js-years-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-years-text-color-hover:var(--heat-js-color-snow-white);--heat-js-title-opener-text-color-hover:var(--heat-js-color-gray);--heat-js-title-background-color:var(--heat-js-container-background-color);--heat-js-title-border-color:var(--heat-js-container-border-color);--heat-js-title-text-color:var(--heat-js-color-white);--heat-js-title-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-title-text-color-hover:var(--heat-js-color-snow-white);--heat-js-holiday-background-color:rgba( 210, 43, 43, 0.75 );--heat-js-holiday-border-color:rgba( 210, 43, 43, 0.5 );--heat-js-holiday-text-color:var(--heat-js-color-black);--heat-js-day-background-color:#2d333b;--heat-js-day-border-color:var(--heat-js-container-border-color);--heat-js-day-background-color-hover:var(--heat-js-container-border-color);--heat-js-day-spacing:6.3px;--heat-js-day-opacity-hover:0.7;--heat-js-day-opacity-active:0.5;--heat-js-day-size:1.1rem;--heat-js-day-chart-width:10px;--heat-js-day-color-1-background-color:rgba( 80, 200, 120, 0.25 );--heat-js-day-color-1-border-color:rgba( 80, 200, 120, 0.15 );--heat-js-day-color-1-text-color:var(--heat-js-color-white);--heat-js-day-color-2-background-color:rgba( 80, 200, 120, 0.50 );--heat-js-day-color-2-border-color:rgba( 80, 200, 120, 0.25 );--heat-js-day-color-2-text-color:var(--heat-js-color-white);--heat-js-day-color-3-background-color:rgba( 80, 200, 120, 0.75 );--heat-js-day-color-3-border-color:rgba( 80, 200, 120, 0.50 );--heat-js-day-color-3-text-color:var(--heat-js-color-black);--heat-js-day-color-4-background-color:rgba( 80, 200, 120, 1 );--heat-js-day-color-4-border-color:rgba( 80, 200, 120, 0.75 );--heat-js-day-color-4-text-color:var(--heat-js-color-black);--heat-js-button-background-color:var(--heat-js-day-background-color);--heat-js-button-border-color:var(--heat-js-container-border-color);--heat-js-button-text-color:var(--heat-js-color-white);--heat-js-button-background-color-hover:var(--heat-js-container-border-color);--heat-js-button-text-color-hover:var(--heat-js-color-snow-white);--heat-js-button-background-color-active:#616b79;--heat-js-button-text-color-active:var(--heat-js-color-snow-white);--heat-js-border-radius:0.5rem;--heat-js-border-radius-day:0.35rem;--heat-js-border-size:0.5px;--heat-js-border-size-day:1px;--heat-js-spacing:10px;--heat-js-spacing-font-size:0.85rem;--heat-js-spacing-day-font-size:0.6rem;--heat-js-transition:all .3s;--heat-js-animation-length:0.5s}div.heat-js{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);display:inline-block;position:relative;border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-container-background-color);color:var(--heat-js-color-white);border:var(--heat-js-border-size) solid var(--heat-js-container-border-color);padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);width:100%;max-width:700px;margin:0!important}div.heat-js div.view-switch{animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.no-click{pointer-events:none!important}div.heat-js *{box-sizing:border-box;line-height:normal}div.heat-js *::before,div.heat-js *::after{box-sizing:border-box;line-height:normal}div.heat-js div.title-bar{text-align:right;margin-bottom:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.title{float:left;font-weight:var(--heat-js-title-bold-weight);font-size:1.2rem;padding-bottom:3px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.title:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.titles-list{display:block}div.heat-js div.title-bar div.title div.down-arrow{display:inline-block;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:14px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-right:var(--heat-js-spacing)}div.heat-js div.title-bar div.title div.titles-list{animation:fade-in-animation var(--heat-js-animation-length);padding-top:3px;display:none;position:absolute;width:100px;margin-top:3px;z-index:1000}div.heat-js div.title-bar div.title div.titles-list div.titles{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-title-background-color);border:var(--heat-js-border-size) solid var(--heat-js-title-border-color);color:var(--heat-js-title-text-color);overflow-y:scroll}div.heat-js div.title-bar div.title div.titles-list div.titles div.title{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:left;width:100%;transition:var(--heat-js-transition);font-size:var(--heat-js-spacing-font-size)!important}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):active{opacity:0.5!important}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):hover{cursor:pointer;background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:last-child{border-bottom:none}div.heat-js div.title-bar div.title div.titles-list div.titles div.title-active{background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.title-bar button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.title-bar button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.title-bar button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.title-bar button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.back{margin-left:calc(var(--heat-js-spacing) * 2)!important}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.import{margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.title-bar div.year-text{margin-left:var(--heat-js-spacing);margin-right:var(--heat-js-spacing);display:inline-block;font-weight:var(--heat-js-title-bold-weight);position:relative;padding-top:5px;padding-bottom:5px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.year-text:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.years-list{display:block!important}div.heat-js div.title-bar div.year-text div.down-arrow{display:inline-block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:9px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-left:calc(var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.year-text div.years-list{animation:fade-in-animation var(--heat-js-animation-length);padding-top:5px;display:none;position:absolute;width:80px;left:50%;transform:translateX(-50%);margin-top:5px;z-index:1000}div.heat-js div.title-bar div.year-text div.years-list div.years{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-years-background-color);border:var(--heat-js-border-size) solid var(--heat-js-years-border-color);color:var(--heat-js-years-text-color);max-height:183px;height:100%;overflow-y:scroll;scroll-snap-type:y mandatory}div.heat-js div.title-bar div.year-text div.years-list div.years div.year{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:center;width:100%;transition:var(--heat-js-transition);scroll-snap-align:start}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):active{opacity:0.5!important}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):hover{cursor:pointer;background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover)}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:last-child{border-bottom:none}div.heat-js div.title-bar div.year-text div.years-list div.years div.year-active{background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar div.year-text div.years-list div.years div.year-current{font-style:italic;font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:none}@media (min-width:768px){div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:inline-block}}div.heat-js div.map-contents{overflow-x:scroll;overflow-y:hidden;min-height:191px;position:relative}div.heat-js div.map-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.map-contents div.map{display:inline-flex;flex-direction:row}div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;z-index:50}@media (min-width:768px){div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{display:block}}div.heat-js div.map-contents div.map div.days div.day-name,div.heat-js div.map-contents div.map div.days-months-bottom div.day-name{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);margin-bottom:var(--heat-js-day-spacing);display:flex;justify-content:center;flex-direction:column}div.heat-js div.map-contents div.map div.days-months-bottom{padding-top:0!important}div.heat-js div.map-contents div.map div.months{display:flex;justify-content:space-between;flex-grow:1}div.heat-js div.map-contents div.map div.months div.month{flex:1;pointer-events:none}div.heat-js div.map-contents div.map div.months div.month:last-child div.day-columns div.day-column:last-child div.day{margin-right:0!important}div.heat-js div.map-contents div.map div.months div.month div.month-name,div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.heat-js div.map-contents div.map div.months div.month div.month-name{margin-bottom:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{margin-top:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.day-columns{display:flex;justify-content:space-between}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled{display:flex;border-radius:var(--heat-js-border-radius-day);width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);margin-bottom:var(--heat-js-day-spacing);font-size:var(--heat-js-spacing-day-font-size);justify-content:center;align-items:center;overflow:hidden}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:last-child,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled:last-child{margin-bottom:0}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day{pointer-events:all;background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);transition:var(--heat-js-transition);transition-property:opacity,background-color,color,border-color}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents{display:flex;overflow-x:scroll;overflow-y:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.chart-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.chart-contents div.chart{display:inline-flex;flex-direction:row}div.heat-js div.chart-contents div.chart div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.y-labels{display:block}}div.heat-js div.chart-contents div.chart div.y-labels div.label-0,div.heat-js div.chart-contents div.chart div.y-labels div.label-25,div.heat-js div.chart-contents div.chart div.y-labels div.label-50,div.heat-js div.chart-contents div.chart div.y-labels div.label-75,div.heat-js div.chart-contents div.chart div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.chart-contents div.chart div.y-labels div.label-0{top:0}div.heat-js div.chart-contents div.chart div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-100{bottom:0}div.heat-js div.chart-contents div.chart div.day-lines{flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color)}div.heat-js div.chart-contents div.chart div.day-lines div.day-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);overflow:hidden}div.heat-js div.chart-contents div.chart div.day-lines div.day-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;min-width:var(--heat-js-day-chart-width);margin-right:1px;display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.day-lines div.day-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:last-child{margin-right:0}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents div.chart-months{position:relative;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing))}div.heat-js div.chart-contents div.chart-months div.month-name,div.heat-js div.chart-contents div.chart-months div.month-name-space{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;position:absolute;bottom:0}@media (min-width:768px){div.heat-js div.chart-contents div.chart-months div.month-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart-months div.month-name:nth-child(2){margin-left:var(--heat-js-day-chart-width)}div.heat-js div.chart-contents div.chart-months div.month-name-space{left:0;top:0;position:sticky;background-color:var(--heat-js-container-background-color)}div.heat-js div.statistics-contents{display:flex;overflow:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.statistics-contents div.no-statistics-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.statistics-contents div.statistics{display:flex;flex-direction:row}div.heat-js div.statistics-contents div.statistics div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.y-labels{display:block}}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0{top:0}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{bottom:0}div.heat-js div.statistics-contents div.statistics div.range-lines{display:flex;align-items:baseline;flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color);justify-content:space-between}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);position:relative;overflow:hidden}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number div.count{position:absolute;top:calc(var(--heat-js-spacing) / 2);left:50%;transform:translateX(-50%)}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;flex:1 100%;margin-right:var(--heat-js-spacing);display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:last-child{margin-right:0}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.statistics-contents div.statistics-ranges{display:flex;flex:1;position:relative;justify-content:space-between;align-items:baseline;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px)}div.heat-js div.statistics-contents div.statistics-ranges div.range-name{flex:1 100%;margin-top:var(--heat-js-spacing);font-weight:var(--heat-js-text-bold-weight);text-align:center!important;overflow:hidden;text-overflow:ellipsis}div.heat-js div.description{text-align:center;margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);text-align:center}@media (min-width:768px){div.heat-js div.description{text-align:left}}@media (min-width:768px){div.heat-js div.description{text-align:left}}div.heat-js div.description span.label,div.heat-js div.description a.label,div.heat-js div.description a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.description a.label{transition:var(--heat-js-transition)}div.heat-js div.description a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.description a.label:hover{text-decoration:underline}div.heat-js div.guide{display:block}@media (min-width:768px){div.heat-js div.guide{display:flex}}div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);width:100%}@media (min-width:768px){div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-bottom:0}}div.heat-js div.guide div.map-types{text-align:center;flex-grow:unset;margin-right:0;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left;width:unset;flex-grow:1;margin-right:var(--heat-js-spacing)}}div.heat-js div.guide div.map-types button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.guide div.map-types button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left}}div.heat-js div.guide div.map-types span.label,div.heat-js div.guide div.map-types a.label,div.heat-js div.guide div.map-types a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.guide div.map-types a.label{transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-types a.label:hover{text-decoration:underline}div.heat-js div.guide div.map-types button{margin-left:0!important;margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.guide div.map-toggles{display:flex;align-items:center;justify-content:center;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-toggles{text-align:right;justify-content:right;width:auto}}div.heat-js div.guide div.map-toggles div.less-text,div.heat-js div.guide div.map-toggles div.more-text{display:inline-block;font-weight:var(--heat-js-text-bold-weight);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.less-text:hover,div.heat-js div.guide div.map-toggles div.more-text:hover{cursor:pointer;text-decoration:underline}div.heat-js div.guide div.map-toggles div.less-text:active,div.heat-js div.guide div.map-toggles div.more-text:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-toggles div.less-text{margin-right:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.more-text{margin-left:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.days{display:inline-flex;align-items:center;justify-content:right}div.heat-js div.guide div.map-toggles div.days div.day-number{display:inline-flex!important;justify-content:center;align-items:center;overflow:hidden;text-align:center;font-size:var(--heat-js-spacing-day-font-size);padding-left:calc(var(--heat-js-spacing) / 2);padding-right:calc(var(--heat-js-spacing) / 2)}div.heat-js div.guide div.map-toggles div.days div.day{background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);display:inline-block;border-radius:var(--heat-js-border-radius-day);min-width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.days div.day:last-child{margin-right:0}div.heat-js div.guide div.map-toggles div.days div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.day-color-1:not(.no-hover):active,div.heat-js div.day-color-2:not(.no-hover):active,div.heat-js div.day-color-3:not(.no-hover):active,div.heat-js div.day-color-4:not(.no-hover):active,div.heat-js div.holiday:not(.no-hover):active{opacity:var(--heat-js-day-opacity-active)!important}div.heat-js div.day-color-1:not(.no-hover):hover,div.heat-js div.day-color-2:not(.no-hover):hover,div.heat-js div.day-color-3:not(.no-hover):hover,div.heat-js div.day-color-4:not(.no-hover):hover,div.heat-js div.holiday:not(.no-hover):hover{cursor:pointer;opacity:var(--heat-js-day-opacity-hover)}div.heat-js div.holiday{background-color:var(--heat-js-holiday-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-holiday-border-color)!important;color:var(--heat-js-holiday-text-color)}div.heat-js div.day-color-1{background-color:var(--heat-js-day-color-1-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-1-border-color)!important;color:var(--heat-js-day-color-1-text-color)}div.heat-js div.day-color-2{background-color:var(--heat-js-day-color-2-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-2-border-color)!important;color:var(--heat-js-day-color-2-text-color)}div.heat-js div.day-color-3{background-color:var(--heat-js-day-color-3-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-3-border-color)!important;color:var(--heat-js-day-color-3-text-color)}div.heat-js div.day-color-4{background-color:var(--heat-js-day-color-4-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-4-border-color)!important;color:var(--heat-js-day-color-4-text-color)}div.heat-js-tooltip{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);animation:fade-in-animation var(--heat-js-animation-length);position:absolute;background-color:var(--heat-js-tooltip-background-color);border:var(--heat-js-border-size) solid var(--heat-js-tooltip-border-color);color:var(--heat-js-tooltip-text-color);border-radius:var(--heat-js-border-radius);z-index:2000;max-width:300px;padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);font-weight:var(--heat-js-text-bold-weight);display:none}@keyframes fade-in-animation{0%{opacity:0}100%{opacity:1}} \ No newline at end of file diff --git a/dist/heat.min.js b/dist/heat.min.js index fad65b1c..4e11028b 100644 --- a/dist/heat.min.js +++ b/dist/heat.min.js @@ -1,73 +1,75 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ -(function(){function ya(){for(var a=h.domElementTypes,b=a.length,c=0;cf;f++)a.views.map.daysToShow.indexOf(f+1)>L.notFound&&u(e,"div","day-name", -h.dayNames[f]);a.views.map.showDaysInReverseOrder&&Da(e)}e=t(d,"div","months");d=da(a);for(f=0;12>f;f++)if(ea(a.views.map.monthsToShow,f)){g=t(e,"div","month");var m=t(g,"div","day-columns"),C=Y(l,f),A=t(m,"div","day-column"),D=!1;var y=qa(new Date(l,f,1));var H=1;C+=y;for(var I=0;I=y?D=!0:a.views.map.daysToShow.indexOf(H)>L.notFound&&t(A,"div","day-disabled");if(D){var Q=null;a.views.map.daysToShow.indexOf(H)>L.notFound&&(Q=Sa(a,A,I-y,f,l,d));if(0===(I+1)%7&&(a.views.map.showDaysInReverseOrder&& -Da(A),A=t(m,"div","day-column"),H=0,!v(W)&&v(Q))){var Ta=fa(Q,"margin-left",!0),Ua=fa(Q,"margin-right",!0);W=Q.offsetWidth+Ta+Ua}}H++}a.views.map.showMonthNames&&(C=g.offsetWidth,m=a.views.map.placeMonthNamesOnTheBottom?u(g,"div","month-name-bottom",h.monthNames[f]):u(g,"div","month-name",h.monthNames[f],m),v(m)&&(m.style.width=a.views.map.showMonthDayGaps?C+"px":C-W+"px"));b&&v(W)&&(0m;m++)for(C=Y(a.currentView.year,m),A=0;Am;m++)if(ea(a.views.chart.monthsToShow,m))for(C=Y(f,m),A=1,d++,D=0;DL.notFound&&Va(l,a,D+1,m,f,b,g),0===(D+1)%7&&(A=0),A++,y++;if(a.views.chart.showMonthNames){b=t(a.currentView.chartContents,"div","chart-months");d=l.offsetWidth/d;for(g=f=0;12>g;g++)ea(a.views.chart.monthsToShow,g)&&(u(b,"div","month-name",h.monthNames[g]).style.left=e+d*f+"px",f++);b.style.width=l.offsetWidth+ -"px";l=t(b,"div","month-name-space");l.style.height=b.offsetHeight+"px";l.style.width=e+"px"}a.keepScrollPositions&&(a.currentView.chartContents.scrollLeft=a.currentView.chartContentsScrollLeft)}a.currentView.chartContents.style.display="none"}if(a.views.statistics.enabled){d=c;f=t(a.currentView.statisticsContents,"div","statistics");c=t(a.currentView.statisticsContents,"div","statistics-ranges");g=t(f,"div","y-labels");l=t(f,"div","range-lines");b=da(a);e={};y=0;m=K(a);for(C=e[r.zero]=0;12>C;C++)for(A= -Y(a.currentView.year,C),D=0;DL.notFound&&(H=sa(a,b,m[H]),v(H)?(e.hasOwnProperty(H.minimum.toString())||(e[H.minimum.toString()]=0),e[H.minimum]++,y=J.max(y,e[H.minimum])):e[r.zero]++));d&&x(f,"view-switch");0B.innerWidth?e-=d.offsetWidth:e++;f+d.offsetHeight>B.innerHeight?f-=d.offsetHeight:f++;e=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]&&(b.disabled=!0)}}}function ta(a,b,c,d){a.currentView.view===c?x(b,"title-active"):b.onclick=function(){a.currentView.view=c;w(a.onViewSwitch,d);z(a,!1,!0)}}function Za(a,b,c,d){var e=null;b=u(b, -"div","year",c);a.currentView.year!==c?(b.onclick=function(){a.currentView.year=c;z(a);w(a.onSetYear,a.currentView.year)},c===d&&x(b,"year-current")):(x(b,"year-active"),e=b);return e}function Sa(a,b,c,d,e,f){c+=1;b=t(b,"div","day");var g=new Date(e,d,c),l=k[a.currentView.element.id].type[a.currentView.type][M(g)];l=T(l,0);Ga(a,b,g,l);a.views.map.showDayNumbers&&0=g&&(a.style.visibility="hidden");N(b.onDayClick)?a.onclick=function(){w(b.onDayClick,l,m)}:x(a,"no-hover");f=sa(b,f,m,l);v(f)&&ia(b,f.id)&&(q(f.chartCssClassName)?x(a,f.chartCssClassName):x(a,f.cssClassName))} -function Wa(a,b,c,d,e,f){b=t(b,"div","range-line");var g=Ea(e,a);a=c*f;b.style.height=a+"px";0>=a&&(b.style.visibility="hidden");ha(b,d,c.toString());d.views.statistics.showRangeNumbers&&0L.notFound}function Na(a){var b=[];if(a.showOnlyDataForYearsAvailable){a=K(a);for(var c in a)if(a.hasOwnProperty(c)){var d=parseInt(c.split(r.dash)[0]);b.indexOf(d)===L.notFound&&b.push(d)}}return b=b.sort(function(e,f){return e-f})}function S(a,b){return a.yearsToHide.indexOf(b)=== -L.notFound&&(0===a.currentView.yearsAvailable.length||a.currentView.yearsAvailable.indexOf(b)>L.notFound)}function Oa(a){a.currentView.isInFetchMode&&(v(a.currentView.isInFetchModeTimer)||Ja(a),v(a.currentView.isInFetchModeTimer)||(a.currentView.isInFetchModeTimer=setInterval(function(){Ja(a);z(a)},a.dataFetchDelay)))}function Ja(a){var b=a.currentView.element.id,c=w(a.onDataFetch,b);if(G(c)){oa(b,a,!1);for(var d in c)c.hasOwnProperty(d)&&(k[b].type[h.unknownTrendText].hasOwnProperty(d)||(k[b].type[h.unknownTrendText][d]= -0),k[b].type[h.unknownTrendText][d]+=c[d])}}function ia(a,b){var c=!1;if("HOLIDAY"===b)c=!0;else for(var d=a.colorRanges.length,e=0;e=f.minimum)e=f;else break}return e}function Ea(a,b){for(var c=a.length,d=null,e=0;e');g.push("");for(f in l)l.hasOwnProperty(f)&&(g.push(""),g.push(""+f+""),g.push(""+l[f]+""),g.push(""));g.push("");c=g.join(r.newLine)}else if("txt"=== -e){l=ja(a);f=[];for(g in l)l.hasOwnProperty(g)&&f.push(g+": "+l[g].toString());c=f.join(r.newLine)}q(c)&&(l=t(F.body,"a"),l.style.display="none",l.setAttribute("target","_blank"),l.setAttribute("href","data:"+d+";charset=utf-8,"+encodeURIComponent(c)),d=l.setAttribute,g=new Date,f=O(g.getDate())+r.dash+O(g.getMonth()+1)+r.dash+g.getFullYear(),g=O(g.getHours())+r.dash+O(g.getMinutes()),c=r.empty,a.currentView.type!==h.unknownTrendText&&(c=a.currentView.type.toLowerCase().replace(r.space,r.underscore)+ -r.underscore),f=c+f+r.underscore+g+"."+a.exportType.toLowerCase(),d.call(l,"download",f),l.click(),F.body.removeChild(l),w(a.onExport,a.currentView.element))}function ja(a){var b={},c=K(a);if(a.exportOnlyYearBeingViewed)for(var d=0;12>d;d++)for(var e=Y(a.currentView.year,d),f=0;fa.getDay()-1?6:a.getDay()-1}function v(a){return null!==a&&void 0!== -a&&a!==r.empty}function G(a){return v(a)&&"object"===typeof a}function va(a){return v(a)&&"boolean"===typeof a}function q(a){return v(a)&&"string"===typeof a}function N(a){return v(a)&&"function"===typeof a}function la(a){return v(a)&&"number"===typeof a}function U(a){return G(a)&&a instanceof Array}function ma(a){return G(a)&&a instanceof Date}function bb(a){a=a.toLowerCase();var b="text"===a;X.hasOwnProperty(a)||(X[a]=b?F.createTextNode(r.empty):F.createElement(a));return X[a].cloneNode(!1)}function t(a, -b,c,d){b=b.toLowerCase();var e="text"===b;X.hasOwnProperty(b)||(X[b]=e?F.createTextNode(r.empty):F.createElement(b));b=X[b].cloneNode(!1);v(c)&&(b.className=c);v(d)?a.insertBefore(b,d):a.appendChild(b);return b}function u(a,b,c,d,e){a=t(a,b,c,e);a.innerHTML=d;return a}function fa(a,b,c){var d=null;c=n(c,!1);B.getComputedStyle?d=F.defaultView.getComputedStyle(a,null).getPropertyValue(b):a.currentStyle&&(d=a.currentStyle[b]);c&&(d=parseFloat(d,10));return d}function x(a,b){a.className+=r.space+b;a.className= -a.className.trim()}function Z(a){a.preventDefault();a.cancelBubble=!0}function Da(a){for(var b=a.children,c=b.length-1;c--;)a.appendChild(b[c])}function w(a){var b=null;N(a)&&(b=a.apply(null,[].slice.call(arguments,1)));return b}function p(a,b){return q(a)?a:b}function n(a,b){return va(a)?a:b}function E(a,b){return N(a)?a:b}function T(a,b){return la(a)?a:b}function na(a){var b=!0,c=null;try{q(a)&&(c=ba.parse(a))}catch(d){try{c=eval("("+a+")"),N(c)&&(c=c())}catch(e){h.safeMode||(console.error(h.objectErrorText.replace("{{error_1}}", -d.message).replace("{{error_2}}",e.message)),b=!1),c=null}}return{parsed:b,result:c}}function V(){for(var a=[],b=0;32>b;b++){8!==b&&12!==b&&16!==b&&20!==b||a.push(r.dash);var c=J.floor(16*J.random()).toString(16);a.push(c)}return a.join(r.empty)}function O(a){a=a.toString();return 1===a.length?r.zero+a:a}function Ca(a,b){return a.substring(0,b.length).toLowerCase()===b.toLowerCase()}function M(a){return a.getFullYear()+r.dash+O(a.getMonth()+1)+r.dash+O(a.getDate())}function ua(a,b){b=n(b,!0);var c= -!0,d=a.currentView.year;for(d--;!S(a,d);){if(0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]){c=!1;break}d++}c&&(a.currentView.year=d,z(a),b&&w(a.onBackYear,a.currentView.year))}function La(a){a.currentView.element.innerHTML= -r.empty;var b=a.currentView.element;b.className=b.className.replace("heat-js",r.empty);b.className=b.className.trim();F.body.removeChild(a.currentView.tooltip);a.currentView.isInFetchMode&&v(a.currentView.isInFetchModeTimer)&&clearInterval(a.currentView.isInFetchModeTimer);w(a.onDestroy,a.currentView.element)}function Ma(a){h=G(a)?a:{};h.safeMode=n(h.safeMode,!0);a=h;var b=h.domElementTypes,c=["*"];q(b)?(b=b.split(r.space),0===b.length&&(b=c)):b=U(b)?b:c;a.domElementTypes=b;h.stText=p(h.stText,"st"); -h.ndText=p(h.ndText,"nd");h.rdText=p(h.rdText,"rd");h.thText=p(h.thText,"th");h.backButtonText=p(h.backButtonText,"Back");h.nextButtonText=p(h.nextButtonText,"Next");h.refreshButtonText=p(h.refreshButtonText,"Refresh");h.exportButtonText=p(h.exportButtonText,"Export");h.lessText=p(h.lessText,"Less");h.moreText=p(h.moreText,"More");h.dateText=p(h.dateText,"Date");h.countText=p(h.countText,"Count");h.mapText=p(h.mapText,"Map");h.chartText=p(h.chartText,"Chart");h.noChartDataMessage=p(h.noChartDataMessage, -"There is currently no data to view.");h.statisticsText=p(h.statisticsText,"Statistics");h.noStatisticsDataMessage=p(h.noStatisticsDataMessage,"There are currently no statistics to view.");h.unknownTrendText=p(h.unknownTrendText,"Unknown");h.importButtonText=p(h.importButtonText,"Import");h.noMapDataMessage=p(h.noMapDataMessage,"There is currently no data to view.");h.objectErrorText=p(h.objectErrorText,"Errors in object: {{error_1}}, {{error_2}}");h.attributeNotValidErrorText=p(h.attributeNotValidErrorText, -"The attribute '{{attribute_name}}' is not a valid object.");h.attributeNotSetErrorText=p(h.attributeNotSetErrorText,"The attribute '{{attribute_name}}' has not been set correctly.");P(h.monthNames,12)&&(h.monthNames="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "));P(h.dayNames,7)&&(h.dayNames="Mon Tue Wed Thu Fri Sat Sun".split(" "))}function P(a,b){b=la(b)?b:1;return!U(a)||a.lengthc&&(a.currentView.year=c,S(a,a.currentView.year)?z(a):ua(a,!1),w(a.onSetYear,a.currentView.year))}return this};this.moveToPreviousYear=function(a){q(a)&&k.hasOwnProperty(a)&&ua(k[a].options);return this};this.moveToNextYear=function(a){q(a)&&k.hasOwnProperty(a)&&aa(k[a].options);return this};this.moveToCurrentYear=function(a){q(a)&&k.hasOwnProperty(a)&&(a=k[a].options,a.currentView.year=(new Date).getFullYear(),S(a,a.currentView.year)?z(a):aa(a,!1),w(a.onSetYear, -a.currentView.year));return this};this.getYear=function(a){var b=null;q(a)&&k.hasOwnProperty(a)&&(b=k[a].options.currentView.year);return b};this.render=function(a,b){G(a)&&G(b)&&za(Aa(b,a));return this};this.renderAll=function(){ya();return this};this.switchView=function(a,b){if(q(a)&&q(b)&&k.hasOwnProperty(a)){var c=k[a].options,d=null;"map"===b.toLowerCase()?d=1:"chart"===b.toLowerCase()?d=2:"statistics"===b.toLowerCase()&&(d=3);la(d)&&(c.currentView.view=d,w(c.onViewSwitch,b),z(c,!1,!0))}return this}; -this.switchType=function(a,b){if(q(a)&&q(b)&&k.hasOwnProperty(a)&&k[a].type.hasOwnProperty(b)){var c=k[a].options;c.currentView.type!==b&&(c.currentView.type=b,w(c.onTypeSwitch,b),z(c))}return this};this.updateOptions=function(a,b){if(q(a)&&G(b)&&k.hasOwnProperty(a)){var c=k[a].options,d=Ba(b),e=!1,f;for(f in d)d.hasOwnProperty(f)&&c.hasOwnProperty(f)&&c[f]!==d[f]&&(c[f]=d[f],e=!0);e&&(z(c,!0),w(c.onRefresh,c.currentView.element))}return this};this.destroyAll=function(){for(var a in k)k.hasOwnProperty(a)&& -La(k[a].options);k={};return this};this.destroy=function(a){q(a)&&k.hasOwnProperty(a)&&(La(k[a].options),delete k[a]);return this};this.setConfiguration=function(a,b){if(G(a)){var c=!1,d;for(d in a)a.hasOwnProperty(d)&&h.hasOwnProperty(d)&&h[d]!==a[d]&&(h[d]=a[d],c=!0);c&&(b=n(b,!0),Ma(h),b&&this.refreshAll())}return this};this.getIds=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(b);return a};this.getVersion=function(){return"2.7.2"};(function(a,b,c,d){F=a;B=b;J=c;ba=d;Ma();F.addEventListener("DOMContentLoaded", -function(){ya()});B.addEventListener("pagehide",function(){for(var e in k)if(k.hasOwnProperty(e)){var f=k[e].options;v(f.currentView.isInFetchModeTimer)&&clearInterval(f.currentView.isInFetchModeTimer)}});v(B.$heat)||(B.$heat=this)})(document,window,Math,JSON)})(); \ No newline at end of file +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +(function(){function Aa(){for(var a=h.domElementTypes,b=a.length,c=0;c +g;g++)a.views.map.daysToShow.indexOf(g+1)>N.notFound&&v(e,"div","day-name",f&&0!==g%3?p.space:h.dayNames[g]);a.views.map.showDaysInReverseOrder&&S(e)}e=u(d,"div","months");d=fa(a);for(f=0;12>f;f++)if(ha(a.views.map.monthsToShow,f)){g=u(e,"div","month");var r=u(g,"div","day-columns");var A=aa(m,f),E=u(r,"div","day-column"),D=!1,J=sa(new Date(m,f,1)),F=1;A+=J;for(var G=0;G=J?D=!0:a.views.map.daysToShow.indexOf(F)>N.notFound&&u(E,"div","day-disabled");if(D){var L=null;a.views.map.daysToShow.indexOf(F)> +N.notFound&&(L=Ta(a,E,G-J,f,m,d));if(0===(G+1)%7&&(a.views.map.showDaysInReverseOrder&&S(E),E=u(r,"div","day-column"),F=0,!w(Y)&&w(L))){var Ua=ia(L,"margin-left",!0),Va=ia(L,"margin-right",!0);Y=L.offsetWidth+Ua+Va}}F++}a.views.map.showMonthNames&&(E=g.offsetWidth,A=a.views.map.placeMonthNamesOnTheBottom?v(g,"div","month-name-bottom",h.monthNames[f]):v(g,"div","month-name",h.monthNames[f],r),w(A)&&(A.style.width=a.views.map.showMonthDayGaps?E+"px":E-Y+"px"));b&&w(Y)&&(0A;A++)for(E=aa(a.currentView.year,A),D=0;DN.notFound&&(F=ua(a,b,J[F]),w(F)?(e.hasOwnProperty(F.minimum.toString())||(e[F.minimum.toString()]=0),e[F.minimum]++,r=K.max(r,e[F.minimum])): +e[p.zero]++));d&&y(f,"view-switch");0B.innerWidth?e-=d.offsetWidth:e++;f+d.offsetHeight>B.innerHeight?f-=d.offsetHeight:f++;e=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length- +1]&&(b.disabled=!0)}}}function va(a,b,c,d){a.currentView.view===c?y(b,"title-active"):b.onclick=function(){a.currentView.view=c;x(a.onViewSwitch,d);z(a,!1,!0)}}function $a(a,b,c,d){var e=null;b=v(b,"div","year",c);a.currentView.year!==c?(b.onclick=function(){a.currentView.year=c;z(a);x(a.onSetYear,a.currentView.year)},c===d&&y(b,"year-current")):(y(b,"year-active"),e=b);return e}function Ta(a,b,c,d,e,f){c+=1;b=u(b,"div","day");var g=new Date(e,d,c),m=k[a.currentView.element.id].type[a.currentView.type][O(g)]; +m=V(m,0);Ha(a,b,g,m);a.views.map.showDayNumbers&&0g;g++)if(ha(a.views.chart.monthsToShow,g)){A=aa(m,g);var E=1;c++;for(var D=0;DN.notFound&&bb(e,a,D+1,g,m,f,b),0===(D+1)%7&&(E=0),E++,d++}a.views.chart.showInReverseOrder&&S(e);if(a.views.chart.showMonthNames){var J=u(a.currentView.chartContents,"div","chart-months"),F=e.offsetWidth/c,G=0;f=function(L){ha(a.views.chart.monthsToShow,L)&&(v(J,"div","month-name",h.monthNames[L]).style.left= +r+F*G+"px",G++)};if(a.views.chart.showInReverseOrder)for(m=12;m--;)f(m);else for(m=0;12>m;m++)f(m);J.style.width=e.offsetWidth+"px";e=u(J,"div","month-name-space");e.style.height=J.offsetHeight+"px";e.style.width=r+"px"}a.keepScrollPositions&&(a.currentView.chartContents.scrollLeft=a.currentView.chartContentsScrollLeft)}}function bb(a,b,c,d,e,f,g){var m=new Date(e,d,c);a=u(a,"div","day-line");var r=M(b)[O(m)];r=V(r,0);Ha(b,a,m,r);b.views.chart.showLineNumbers&&0=g&&(a.style.visibility="hidden");P(b.onDayClick)?a.onclick=function(){x(b.onDayClick,m,r)}:y(a,"no-hover");f=ua(b,f,r,m);w(f)&&ka(b,f.id)&&(t(f.chartCssClassName)?y(a,f.chartCssClassName):y(a,f.cssClassName))}function ab(a){for(var b=0,c=M(a),d=0;12>d;d++)for(var e=aa(a.currentView.year,d),f=0;f=a&&(b.style.visibility="hidden");ja(b,d,c.toString());d.views.statistics.showRangeNumbers&&0N.notFound}function Oa(a){var b=[];if(a.showOnlyDataForYearsAvailable){a=M(a);for(var c in a)if(a.hasOwnProperty(c)){var d=parseInt(c.split(p.dash)[0]);b.indexOf(d)===N.notFound&&b.push(d)}}return b=b.sort(function(e,f){return e-f})}function U(a,b){return a.yearsToHide.indexOf(b)===N.notFound&&(0===a.currentView.yearsAvailable.length||a.currentView.yearsAvailable.indexOf(b)>N.notFound)} +function Pa(a){a.currentView.isInFetchMode&&(w(a.currentView.isInFetchModeTimer)||Ka(a),w(a.currentView.isInFetchModeTimer)||(a.currentView.isInFetchModeTimer=setInterval(function(){Ka(a);z(a)},a.dataFetchDelay)))}function Ka(a){var b=a.currentView.element.id,c=x(a.onDataFetch,b);if(I(c)){qa(b,a,!1);for(var d in c)c.hasOwnProperty(d)&&(k[b].type[h.unknownTrendText].hasOwnProperty(d)||(k[b].type[h.unknownTrendText][d]=0),k[b].type[h.unknownTrendText][d]+=c[d])}}function ka(a,b){var c=!1;if("HOLIDAY"=== +b)c=!0;else for(var d=a.colorRanges.length,e=0;e=f.minimum)e=f;else break}return e}function Fa(a,b){for(var c= +a.length,d=null,e=0;e'); +f.push("");for(e in g)g.hasOwnProperty(e)&&(f.push(""),f.push(""+e+""),f.push(""+g[e]+""),f.push(""));f.push("");c=f.join(p.newLine)}else if("txt"===b){g=la(a);e=[];for(f in g)g.hasOwnProperty(f)&&e.push(f+p.colon+p.space+g[f].toString());c=e.join(p.newLine)}t(c)&&(g=u(H.body,"a"),g.style.display="none",g.setAttribute("target","_blank"),g.setAttribute("href","data:"+d+";charset=utf-8,"+encodeURIComponent(c)),d=g.setAttribute,f=new Date, +e=Q(f.getDate())+p.dash+Q(f.getMonth()+1)+p.dash+f.getFullYear(),f=Q(f.getHours())+p.dash+Q(f.getMinutes()),c=p.empty,a.currentView.type!==h.unknownTrendText&&(c=a.currentView.type.toLowerCase().replace(p.space,p.underscore)+p.underscore),e=c+e+p.underscore+f+"."+a.exportType.toLowerCase(),d.call(g,"download",e),g.click(),H.body.removeChild(g),x(a.onExport,a.currentView.element))}function la(a){var b={},c=M(a);if(a.exportOnlyYearBeingViewed)for(var d=0;12>d;d++)for(var e=aa(a.currentView.year,d), +f=0;fa.getDay()-1?6:a.getDay()-1}function w(a){return null!==a&&void 0!==a&&a!==p.empty}function I(a){return w(a)&&"object"=== +typeof a}function xa(a){return w(a)&&"boolean"===typeof a}function t(a){return w(a)&&"string"===typeof a}function P(a){return w(a)&&"function"===typeof a}function na(a){return w(a)&&"number"===typeof a}function W(a){return I(a)&&a instanceof Array}function oa(a){return I(a)&&a instanceof Date}function eb(a){a=a.toLowerCase();var b="text"===a;Z.hasOwnProperty(a)||(Z[a]=b?H.createTextNode(p.empty):H.createElement(a));return Z[a].cloneNode(!1)}function u(a,b,c,d){b=b.toLowerCase();var e="text"===b;Z.hasOwnProperty(b)|| +(Z[b]=e?H.createTextNode(p.empty):H.createElement(b));b=Z[b].cloneNode(!1);w(c)&&(b.className=c);w(d)?a.insertBefore(b,d):a.appendChild(b);return b}function v(a,b,c,d,e){a=u(a,b,c,e);a.innerHTML=d;return a}function ia(a,b,c){var d=null;c=n(c,!1);B.getComputedStyle?d=H.defaultView.getComputedStyle(a,null).getPropertyValue(b):a.currentStyle&&(d=a.currentStyle[b]);c&&(d=parseFloat(d,10));return d}function y(a,b){a.className+=p.space+b;a.className=a.className.trim()}function ba(a){a.preventDefault(); +a.cancelBubble=!0}function S(a){for(var b=a.children,c=b.length-1;c--;)a.appendChild(b[c])}function x(a){var b=null;P(a)&&(b=a.apply(null,[].slice.call(arguments,1)));return b}function q(a,b){return t(a)?a:b}function n(a,b){return xa(a)?a:b}function C(a,b){return P(a)?a:b}function V(a,b){return na(a)?a:b}function pa(a){var b=!0,c=null;try{t(a)&&(c=da.parse(a))}catch(d){try{c=eval("("+a+")"),P(c)&&(c=c())}catch(e){h.safeMode||(console.error(h.objectErrorText.replace("{{error_1}}",d.message).replace("{{error_2}}", +e.message)),b=!1),c=null}}return{parsed:b,result:c}}function X(){for(var a=[],b=0;32>b;b++){8!==b&&12!==b&&16!==b&&20!==b||a.push(p.dash);var c=K.floor(16*K.random()).toString(16);a.push(c)}return a.join(p.empty)}function Q(a){a=a.toString();return 1===a.length?p.zero+a:a}function Ea(a,b){return a.substring(0,b.length).toLowerCase()===b.toLowerCase()}function O(a){return a.getFullYear()+p.dash+Q(a.getMonth()+1)+p.dash+Q(a.getDate())}function wa(a,b){b=n(b,!0);var c=!0,d=a.currentView.year;for(d--;!U(a, +d);){if(0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]){c=!1;break}d++}c&&(a.currentView.year=d,z(a),b&&x(a.onBackYear,a.currentView.year))}function Ma(a){a.currentView.element.innerHTML=p.empty;var b= +a.currentView.element;b.className=b.className.replace("heat-js",p.empty);b.className=b.className.trim();H.body.removeChild(a.currentView.tooltip);a.currentView.isInFetchMode&&w(a.currentView.isInFetchModeTimer)&&clearInterval(a.currentView.isInFetchModeTimer);x(a.onDestroy,a.currentView.element)}function Na(a){h=I(a)?a:{};h.safeMode=n(h.safeMode,!0);a=h;var b=h.domElementTypes,c=["*"];t(b)?(b=b.split(p.space),0===b.length&&(b=c)):b=W(b)?b:c;a.domElementTypes=b;h.stText=q(h.stText,"st");h.ndText=q(h.ndText, +"nd");h.rdText=q(h.rdText,"rd");h.thText=q(h.thText,"th");h.backButtonText=q(h.backButtonText,"Back");h.nextButtonText=q(h.nextButtonText,"Next");h.refreshButtonText=q(h.refreshButtonText,"Refresh");h.exportButtonText=q(h.exportButtonText,"Export");h.lessText=q(h.lessText,"Less");h.moreText=q(h.moreText,"More");h.dateText=q(h.dateText,"Date");h.countText=q(h.countText,"Count");h.mapText=q(h.mapText,"Map");h.chartText=q(h.chartText,"Chart");h.noChartDataMessage=q(h.noChartDataMessage,"There is currently no data to view."); +h.statisticsText=q(h.statisticsText,"Statistics");h.noStatisticsDataMessage=q(h.noStatisticsDataMessage,"There are currently no statistics to view.");h.unknownTrendText=q(h.unknownTrendText,"Unknown");h.importButtonText=q(h.importButtonText,"Import");h.noMapDataMessage=q(h.noMapDataMessage,"There is currently no data to view.");h.objectErrorText=q(h.objectErrorText,"Errors in object: {{error_1}}, {{error_2}}");h.attributeNotValidErrorText=q(h.attributeNotValidErrorText,"The attribute '{{attribute_name}}' is not a valid object."); +h.attributeNotSetErrorText=q(h.attributeNotSetErrorText,"The attribute '{{attribute_name}}' has not been set correctly.");R(h.monthNames,12)&&(h.monthNames="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "));R(h.dayNames,7)&&(h.dayNames="Mon Tue Wed Thu Fri Sat Sun".split(" "))}function R(a,b){b=na(b)?b:1;return!W(a)||a.lengthc&&(a.currentView.year= +c,U(a,a.currentView.year)?z(a):wa(a,!1),x(a.onSetYear,a.currentView.year))}return l};l.moveToPreviousYear=function(a){t(a)&&k.hasOwnProperty(a)&&wa(k[a].options);return l};l.moveToNextYear=function(a){t(a)&&k.hasOwnProperty(a)&&ca(k[a].options);return l};l.moveToCurrentYear=function(a){t(a)&&k.hasOwnProperty(a)&&(a=k[a].options,a.currentView.year=(new Date).getFullYear(),U(a,a.currentView.year)?z(a):ca(a,!1),x(a.onSetYear,a.currentView.year));return l};l.getYear=function(a){var b=null;t(a)&&k.hasOwnProperty(a)&& +(b=k[a].options.currentView.year);return b};l.render=function(a,b){I(a)&&I(b)&&Ba(Ca(b,a));return l};l.renderAll=function(){Aa();return l};l.switchView=function(a,b){if(t(a)&&t(b)&&k.hasOwnProperty(a)){a=k[a].options;var c=null;"map"===b.toLowerCase()?c=1:"chart"===b.toLowerCase()?c=2:"statistics"===b.toLowerCase()&&(c=3);na(c)&&(a.currentView.view=c,x(a.onViewSwitch,b),z(a,!1,!0))}return l};l.switchType=function(a,b){t(a)&&t(b)&&k.hasOwnProperty(a)&&k[a].type.hasOwnProperty(b)&&(a=k[a].options,a.currentView.type!== +b&&(a.currentView.type=b,x(a.onTypeSwitch,b),z(a)));return l};l.updateOptions=function(a,b){if(t(a)&&I(b)&&k.hasOwnProperty(a)){a=k[a].options;b=Da(b);var c=!1,d;for(d in b)b.hasOwnProperty(d)&&a.hasOwnProperty(d)&&a[d]!==b[d]&&(a[d]=b[d],c=!0);c&&(z(a,!0),x(a.onRefresh,a.currentView.element))}return l};l.destroyAll=function(){for(var a in k)k.hasOwnProperty(a)&&Ma(k[a].options);k={};return l};l.destroy=function(a){t(a)&&k.hasOwnProperty(a)&&(Ma(k[a].options),delete k[a]);return l};l.setConfiguration= +function(a,b){if(I(a)){var c=!1,d;for(d in a)a.hasOwnProperty(d)&&h.hasOwnProperty(d)&&h[d]!==a[d]&&(h[d]=a[d],c=!0);c&&(b=n(b,!0),Na(h),b&&l.refreshAll())}return l};l.getIds=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(b);return a};l.getVersion=function(){return"2.8.0"};(function(a,b,c,d){H=a;B=b;K=c;da=d;Na();H.addEventListener("DOMContentLoaded",function(){Aa()});B.addEventListener("pagehide",function(){for(var e in k)if(k.hasOwnProperty(e)){var f=k[e].options;w(f.currentView.isInFetchModeTimer)&& +clearInterval(f.currentView.isInFetchModeTimer)}});w(B.$heat)||(B.$heat=l)})(document,window,Math,JSON)})(); \ No newline at end of file diff --git a/dist/themes/dark/heat.js.dark.bright-blue.theme.css b/dist/themes/dark/heat.js.dark.bright-blue.theme.css index ce66743c..a7b05bb2 100644 --- a/dist/themes/dark/heat.js.dark.bright-blue.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-blue.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 210, 43, 43, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.bright-orange.theme.css b/dist/themes/dark/heat.js.dark.bright-orange.theme.css index 1a0f951f..1769ede1 100644 --- a/dist/themes/dark/heat.js.dark.bright-orange.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-orange.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.bright-purple.theme.css b/dist/themes/dark/heat.js.dark.bright-purple.theme.css index ba57382a..94f7b069 100644 --- a/dist/themes/dark/heat.js.dark.bright-purple.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-purple.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.bright-yellow.theme.css b/dist/themes/dark/heat.js.dark.bright-yellow.theme.css index b7c98daf..7eafbbb9 100644 --- a/dist/themes/dark/heat.js.dark.bright-yellow.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-yellow.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.cadmium-red.theme.css b/dist/themes/dark/heat.js.dark.cadmium-red.theme.css index 9c24f01f..aaf39b8b 100644 --- a/dist/themes/dark/heat.js.dark.cadmium-red.theme.css +++ b/dist/themes/dark/heat.js.dark.cadmium-red.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.github.theme.css b/dist/themes/dark/heat.js.dark.github.theme.css index c9be4a00..9d7131c3 100644 --- a/dist/themes/dark/heat.js.dark.github.theme.css +++ b/dist/themes/dark/heat.js.dark.github.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 210, 43, 43, 0.75 ); diff --git a/dist/themes/light/heat.js.light.bright-orange.theme.css b/dist/themes/light/heat.js.light.bright-orange.theme.css index 5241368b..36abfce2 100644 --- a/dist/themes/light/heat.js.light.bright-orange.theme.css +++ b/dist/themes/light/heat.js.light.bright-orange.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.bright-purple.theme.css b/dist/themes/light/heat.js.light.bright-purple.theme.css index 8dec1dcc..1a09e4a4 100644 --- a/dist/themes/light/heat.js.light.bright-purple.theme.css +++ b/dist/themes/light/heat.js.light.bright-purple.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.gamboge.theme.css b/dist/themes/light/heat.js.light.gamboge.theme.css index 458e3763..d16c9b1b 100644 --- a/dist/themes/light/heat.js.light.gamboge.theme.css +++ b/dist/themes/light/heat.js.light.gamboge.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.neon-blue.theme.css b/dist/themes/light/heat.js.light.neon-blue.theme.css index 1246ce04..bf917a35 100644 --- a/dist/themes/light/heat.js.light.neon-blue.theme.css +++ b/dist/themes/light/heat.js.light.neon-blue.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.red.theme.css b/dist/themes/light/heat.js.light.red.theme.css index 74ac6123..8babb8ab 100644 --- a/dist/themes/light/heat.js.light.red.theme.css +++ b/dist/themes/light/heat.js.light.red.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.shamrock-green.theme.css b/dist/themes/light/heat.js.light.shamrock-green.theme.css index 09545dce..3715f8c0 100644 --- a/dist/themes/light/heat.js.light.shamrock-green.theme.css +++ b/dist/themes/light/heat.js.light.shamrock-green.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/translations/heat.translations.af.js b/dist/translations/heat.translations.af.js index bdfe2adc..2d20a685 100644 --- a/dist/translations/heat.translations.af.js +++ b/dist/translations/heat.translations.af.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Afrikaans | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Afrikaans | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ar.js b/dist/translations/heat.translations.ar.js index 3d51ec98..5bdd9b81 100644 --- a/dist/translations/heat.translations.ar.js +++ b/dist/translations/heat.translations.ar.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Arabic | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Arabic | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.be.js b/dist/translations/heat.translations.be.js index a18d868c..5e5b62e9 100644 --- a/dist/translations/heat.translations.be.js +++ b/dist/translations/heat.translations.be.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Belarusian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Belarusian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.bg.js b/dist/translations/heat.translations.bg.js index e27719eb..3e2c717d 100644 --- a/dist/translations/heat.translations.bg.js +++ b/dist/translations/heat.translations.bg.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Bulgarian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Bulgarian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.bn.js b/dist/translations/heat.translations.bn.js index ad20d822..5e3fcdbe 100644 --- a/dist/translations/heat.translations.bn.js +++ b/dist/translations/heat.translations.bn.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Bengali | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Bengali | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ca.js b/dist/translations/heat.translations.ca.js index 82c2cc22..1ae9d2c4 100644 --- a/dist/translations/heat.translations.ca.js +++ b/dist/translations/heat.translations.ca.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Catalan | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Catalan | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.da.js b/dist/translations/heat.translations.da.js index b8a2fd03..2f2f17c6 100644 --- a/dist/translations/heat.translations.da.js +++ b/dist/translations/heat.translations.da.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Danish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Danish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.de.js b/dist/translations/heat.translations.de.js index 154d9641..425c0ac6 100644 --- a/dist/translations/heat.translations.de.js +++ b/dist/translations/heat.translations.de.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - German | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - German | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.el.js b/dist/translations/heat.translations.el.js index dd39469f..140b3395 100644 --- a/dist/translations/heat.translations.el.js +++ b/dist/translations/heat.translations.el.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Greek | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Greek | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.en.js b/dist/translations/heat.translations.en.js index f836500e..882d6b8c 100644 --- a/dist/translations/heat.translations.en.js +++ b/dist/translations/heat.translations.en.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - English | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - English | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "st", "ndText": "nd", diff --git a/dist/translations/heat.translations.eo.js b/dist/translations/heat.translations.eo.js index ac1b3f54..887de491 100644 --- a/dist/translations/heat.translations.eo.js +++ b/dist/translations/heat.translations.eo.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Esperanto | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Esperanto | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.es.js b/dist/translations/heat.translations.es.js index d07e6401..a639426e 100644 --- a/dist/translations/heat.translations.es.js +++ b/dist/translations/heat.translations.es.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Spanish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Spanish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.et.js b/dist/translations/heat.translations.et.js index 5036dc9e..85d38d02 100644 --- a/dist/translations/heat.translations.et.js +++ b/dist/translations/heat.translations.et.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Estonian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Estonian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.fa.js b/dist/translations/heat.translations.fa.js index 274b902b..127ee752 100644 --- a/dist/translations/heat.translations.fa.js +++ b/dist/translations/heat.translations.fa.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Farsi | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Farsi | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.fi.js b/dist/translations/heat.translations.fi.js index a4fbb61a..a5646369 100644 --- a/dist/translations/heat.translations.fi.js +++ b/dist/translations/heat.translations.fi.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Finnish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Finnish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.fr.js b/dist/translations/heat.translations.fr.js index 18d71c92..5cf02790 100644 --- a/dist/translations/heat.translations.fr.js +++ b/dist/translations/heat.translations.fr.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - French | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - French | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.fy.js b/dist/translations/heat.translations.fy.js index d3a9a3dd..2338957c 100644 --- a/dist/translations/heat.translations.fy.js +++ b/dist/translations/heat.translations.fy.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Frisian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Frisian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ga.js b/dist/translations/heat.translations.ga.js index 20a98b75..21951d94 100644 --- a/dist/translations/heat.translations.ga.js +++ b/dist/translations/heat.translations.ga.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Irish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Irish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.gl.js b/dist/translations/heat.translations.gl.js index a14f18a8..fccb42a4 100644 --- a/dist/translations/heat.translations.gl.js +++ b/dist/translations/heat.translations.gl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Galician | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Galician | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.he.js b/dist/translations/heat.translations.he.js index 33cb1f9a..f0597f03 100644 --- a/dist/translations/heat.translations.he.js +++ b/dist/translations/heat.translations.he.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Hebrew | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Hebrew | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.hi.js b/dist/translations/heat.translations.hi.js index 7fc0985d..39bd2209 100644 --- a/dist/translations/heat.translations.hi.js +++ b/dist/translations/heat.translations.hi.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Hindi | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Hindi | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.hu.js b/dist/translations/heat.translations.hu.js index 94646ae0..60167571 100644 --- a/dist/translations/heat.translations.hu.js +++ b/dist/translations/heat.translations.hu.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Hungarian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Hungarian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.hy.js b/dist/translations/heat.translations.hy.js index e21dfdd5..58f19e80 100644 --- a/dist/translations/heat.translations.hy.js +++ b/dist/translations/heat.translations.hy.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Armenian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Armenian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.id.js b/dist/translations/heat.translations.id.js index 6ee4366f..929d75d5 100644 --- a/dist/translations/heat.translations.id.js +++ b/dist/translations/heat.translations.id.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Indonesian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Indonesian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.is.js b/dist/translations/heat.translations.is.js index 6b038805..3d897086 100644 --- a/dist/translations/heat.translations.is.js +++ b/dist/translations/heat.translations.is.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Icelandic | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Icelandic | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.it.js b/dist/translations/heat.translations.it.js index 435b70d0..aa80f61f 100644 --- a/dist/translations/heat.translations.it.js +++ b/dist/translations/heat.translations.it.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Italian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Italian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ja.js b/dist/translations/heat.translations.ja.js index 0990fd60..676bb716 100644 --- a/dist/translations/heat.translations.ja.js +++ b/dist/translations/heat.translations.ja.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Japanese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Japanese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ka.js b/dist/translations/heat.translations.ka.js index cc8f7ed4..5c8d39ad 100644 --- a/dist/translations/heat.translations.ka.js +++ b/dist/translations/heat.translations.ka.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Georgian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Georgian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ko.js b/dist/translations/heat.translations.ko.js index 7f3ad733..684b9bf8 100644 --- a/dist/translations/heat.translations.ko.js +++ b/dist/translations/heat.translations.ko.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Korean | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Korean | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.lb.js b/dist/translations/heat.translations.lb.js index 77e51d9d..2b406454 100644 --- a/dist/translations/heat.translations.lb.js +++ b/dist/translations/heat.translations.lb.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Luxembourgish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Luxembourgish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.lt.js b/dist/translations/heat.translations.lt.js index dcffd732..d3edaa87 100644 --- a/dist/translations/heat.translations.lt.js +++ b/dist/translations/heat.translations.lt.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Lithuanian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Lithuanian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.lv.js b/dist/translations/heat.translations.lv.js index 5b4d9d5d..a85ae700 100644 --- a/dist/translations/heat.translations.lv.js +++ b/dist/translations/heat.translations.lv.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Latvian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Latvian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ms.js b/dist/translations/heat.translations.ms.js index 738cb7b4..a7e21d73 100644 --- a/dist/translations/heat.translations.ms.js +++ b/dist/translations/heat.translations.ms.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Malay | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Malay | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ne.js b/dist/translations/heat.translations.ne.js index 09f6a142..c728e19c 100644 --- a/dist/translations/heat.translations.ne.js +++ b/dist/translations/heat.translations.ne.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Nepali | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Nepali | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.nl.js b/dist/translations/heat.translations.nl.js index e825c3d1..b968cf25 100644 --- a/dist/translations/heat.translations.nl.js +++ b/dist/translations/heat.translations.nl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Dutch | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Dutch | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.no.js b/dist/translations/heat.translations.no.js index e21b7ad0..63655426 100644 --- a/dist/translations/heat.translations.no.js +++ b/dist/translations/heat.translations.no.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Norwegian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Norwegian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.pl.js b/dist/translations/heat.translations.pl.js index 4cfc6d5f..90d88f7e 100644 --- a/dist/translations/heat.translations.pl.js +++ b/dist/translations/heat.translations.pl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Portuguese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Portuguese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.pt.js b/dist/translations/heat.translations.pt.js index 4c34e7c1..344d196f 100644 --- a/dist/translations/heat.translations.pt.js +++ b/dist/translations/heat.translations.pt.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Polish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Polish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ro.js b/dist/translations/heat.translations.ro.js index 9cb8389e..753e1c03 100644 --- a/dist/translations/heat.translations.ro.js +++ b/dist/translations/heat.translations.ro.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Romanian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Romanian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.si.js b/dist/translations/heat.translations.si.js index b272fc22..c9c89cc4 100644 --- a/dist/translations/heat.translations.si.js +++ b/dist/translations/heat.translations.si.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Sinhalese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Sinhalese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.sk.js b/dist/translations/heat.translations.sk.js index db1493ce..899d3672 100644 --- a/dist/translations/heat.translations.sk.js +++ b/dist/translations/heat.translations.sk.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Slovak | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Slovak | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.sl.js b/dist/translations/heat.translations.sl.js index 3f3331b4..d1d679d8 100644 --- a/dist/translations/heat.translations.sl.js +++ b/dist/translations/heat.translations.sl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Slovenian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Slovenian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.sv.js b/dist/translations/heat.translations.sv.js index ec4932d2..c5b29518 100644 --- a/dist/translations/heat.translations.sv.js +++ b/dist/translations/heat.translations.sv.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Swedish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Swedish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.ta.js b/dist/translations/heat.translations.ta.js index 884c5bb3..b3dc7094 100644 --- a/dist/translations/heat.translations.ta.js +++ b/dist/translations/heat.translations.ta.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Tamil | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Tamil | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.te.js b/dist/translations/heat.translations.te.js index e806377d..cfc6786e 100644 --- a/dist/translations/heat.translations.te.js +++ b/dist/translations/heat.translations.te.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Telugu | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Telugu | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.th.js b/dist/translations/heat.translations.th.js index 4b0c26b3..0916f52d 100644 --- a/dist/translations/heat.translations.th.js +++ b/dist/translations/heat.translations.th.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Thai | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Thai | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.tl.js b/dist/translations/heat.translations.tl.js index 836c81ec..a2686211 100644 --- a/dist/translations/heat.translations.tl.js +++ b/dist/translations/heat.translations.tl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Tagalog | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Tagalog | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.tr.js b/dist/translations/heat.translations.tr.js index 6c10838a..d1c0b6dd 100644 --- a/dist/translations/heat.translations.tr.js +++ b/dist/translations/heat.translations.tr.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Turkish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Turkish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.uk.js b/dist/translations/heat.translations.uk.js index cfae8f2e..fe24ac1b 100644 --- a/dist/translations/heat.translations.uk.js +++ b/dist/translations/heat.translations.uk.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Ukrainian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Ukrainian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.zh-tw.js b/dist/translations/heat.translations.zh-tw.js index e50e770e..487637d0 100644 --- a/dist/translations/heat.translations.zh-tw.js +++ b/dist/translations/heat.translations.zh-tw.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Taiwanese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Taiwanese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", diff --git a/dist/translations/heat.translations.zh.js b/dist/translations/heat.translations.zh.js index 1f341720..06b6286d 100644 --- a/dist/translations/heat.translations.zh.js +++ b/dist/translations/heat.translations.zh.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.7.2 - Chinese (simplified) | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v2.8.0 - Chinese (simplified) | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "æ—¥", "ndText": "æ—¥", diff --git a/heat.js.nuspec b/heat.js.nuspec index 9d3fd688..d585d083 100644 --- a/heat.js.nuspec +++ b/heat.js.nuspec @@ -2,7 +2,7 @@ jHeat.js - 2.7.2 + 2.8.0 Heat.js A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends. William Troup diff --git a/package.json b/package.json index b230075e..747c30d0 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "jheat.js", "title": "Heat.js", "description": "A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends.", - "version": "2.7.2", + "version": "2.8.0", "main": "dist/heat.js", "homepage": "https://www.william-troup.com/heat-js/", "author": { diff --git a/src/heat.js b/src/heat.js index 6c8e9583..d9759434 100644 --- a/src/heat.js +++ b/src/heat.js @@ -4,7 +4,7 @@ * A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends. * * @file observe.js - * @version v2.7.2 + * @version v2.8.0 * @author Bunoon * @license MIT License * @copyright Bunoon 2024 @@ -12,12 +12,17 @@ ( function() { + "use strict"; + var // Variables: Constructor Parameters _parameter_Document = null, _parameter_Window = null, _parameter_Math = null, _parameter_JSON = null, + // Variables: Public Scope + _public = {}, + // Variables: Configuration _configuration = {}, @@ -29,7 +34,9 @@ dash: "-", underscore: "_", plus: "+", - zero: "0" + zero: "0", + colon: ":", + comma: "," }, // Variables: Values @@ -502,7 +509,8 @@ } if ( bindingOptions.views.map.showDayNames ) { - var days = createElement( map, "div", "days" ); + var days = createElement( map, "div", "days" ), + showMinimalDays = bindingOptions.views.map.showMinimalDayNames && bindingOptions.views.map.daysToShow.length === 7; if ( !bindingOptions.views.map.showMonthNames || bindingOptions.views.map.placeMonthNamesOnTheBottom ) { days.className = "days-months-bottom"; @@ -510,7 +518,9 @@ for ( var dayNameIndex = 0; dayNameIndex < 7; dayNameIndex++ ) { if ( isDayVisible( bindingOptions.views.map.daysToShow, dayNameIndex + 1 ) ) { - createElementWithHTML( days, "div", "day-name", _configuration.dayNames[ dayNameIndex ] ); + var dayText = !showMinimalDays || dayNameIndex % 3 === 0 ? _configuration.dayNames[ dayNameIndex ] : _string.space; + + createElementWithHTML( days, "div", "day-name", dayText ); } } @@ -598,10 +608,18 @@ month.style.marginLeft = _elements_Day_Width + "px"; } } + + if ( bindingOptions.views.map.showMonthsInReverseOrder ) { + reverseElementsOrder( dayColumns ); + } monthAdded = true; } } + + if ( bindingOptions.views.map.showMonthsInReverseOrder ) { + reverseElementsOrder( months ); + } if ( bindingOptions.keepScrollPositions ) { bindingOptions.currentView.mapContents.scrollLeft = bindingOptions.currentView.mapContentsScrollLeft; @@ -740,18 +758,32 @@ } } + if ( bindingOptions.views.chart.showInReverseOrder ) { + reverseElementsOrder( dayLines ); + } + if ( bindingOptions.views.chart.showMonthNames ) { var chartMonths = createElement( bindingOptions.currentView.chartContents, "div", "chart-months" ), linesWidth = dayLines.offsetWidth / totalMonths, monthTimesValue = 0; - for ( var monthIndex2 = 0; monthIndex2 < 12; monthIndex2++ ) { - if ( isMonthVisible( bindingOptions.views.chart.monthsToShow, monthIndex2 ) ) { - var monthName = createElementWithHTML( chartMonths, "div", "month-name", _configuration.monthNames[ monthIndex2 ] ); + var addMonthName = function( addMonthNameIndex ) { + if ( isMonthVisible( bindingOptions.views.chart.monthsToShow, addMonthNameIndex ) ) { + var monthName = createElementWithHTML( chartMonths, "div", "month-name", _configuration.monthNames[ addMonthNameIndex ] ); monthName.style.left = labelsWidth + ( linesWidth * monthTimesValue ) + "px"; monthTimesValue++; } + }; + + if ( bindingOptions.views.chart.showInReverseOrder ) { + for ( var monthIndex2 = 12; monthIndex2--; ) { + addMonthName( monthIndex2 ); + } + } else { + for ( var monthIndex3 = 0; monthIndex3 < 12; monthIndex3++ ) { + addMonthName( monthIndex3 ); + } } chartMonths.style.width = dayLines.offsetWidth + "px"; @@ -901,6 +933,11 @@ } } } + + if ( bindingOptions.views.statistics.showInReverseOrder ) { + reverseElementsOrder( rangeLines ); + reverseElementsOrder( statisticsRanges ); + } if ( bindingOptions.keepScrollPositions ) { bindingOptions.currentView.statisticsContents.scrollLeft = bindingOptions.currentView.statisticsContentsScrollLeft; @@ -1150,7 +1187,7 @@ var holiday = isHoliday( bindingOptions, date ); if ( holiday.matched && isDefinedString( holiday.name ) ) { - tooltip += ": " + holiday.name; + tooltip += _string.colon + _string.space + holiday.name; } } @@ -1521,7 +1558,7 @@ function importFromFilesSelected( bindingOptions ) { var input = createElementWithNoContainer( "input" ); input.type = "file"; - input.accept = ".json, .txt"; + input.accept = ".json, .txt, .csv"; input.multiple = "multiple"; input.onchange = function() { @@ -1563,6 +1600,8 @@ importFromJson( file, onLoadEnd ); } else if ( fileExtension === _export_Type_Txt ) { importFromTxt( file, onLoadEnd ); + } else if ( fileExtension === _export_Type_Csv ) { + importFromCsv( file, onLoadEnd ); } } } @@ -1601,7 +1640,33 @@ linesLength = lines.length; for ( var lineIndex = 0; lineIndex < linesLength; lineIndex++ ) { - var line = lines[ lineIndex ].split( ":" ); + var line = lines[ lineIndex ].split( _string.colon ); + + readingObject[ line[ 0 ].trim() ] = parseInt( line[ 1 ].trim() ); + } + }; + } + + function importFromCsv( file, onLoadEnd ) { + var reader = new FileReader(), + readingObject = {}; + + reader.readAsText( file ); + + reader.onloadend = function() { + onLoadEnd( file.name, readingObject ); + }; + + reader.onload = function( e ) { + var data = e.target.result.toString().replace( new RegExp( "\"", "g" ), _string.empty ), + lines = data.split( _string.newLine ); + + lines.shift(); + + var linesLength = lines.length; + + for ( var lineIndex = 0; lineIndex < linesLength; lineIndex++ ) { + var line = lines[ lineIndex ].split( _string.comma ); readingObject[ line[ 0 ].trim() ] = parseInt( line[ 1 ].trim() ); } @@ -1692,7 +1757,7 @@ for ( var storageDate in data ) { if ( data.hasOwnProperty( storageDate ) ) { - contents.push( storageDate + ": " + data[ storageDate ].toString() ); + contents.push( storageDate + _string.colon + _string.space + data[ storageDate ].toString() ); } } @@ -1915,6 +1980,8 @@ options.views.map.showMonthNames = getDefaultBoolean( options.views.map.showMonthNames, true ); options.views.map.showDaysInReverseOrder = getDefaultBoolean( options.views.map.showDaysInReverseOrder, false ); options.views.map.showNoDataMessageWhenDataIsNotAvailable = getDefaultBoolean( options.views.map.showNoDataMessageWhenDataIsNotAvailable, false ); + options.views.map.showMinimalDayNames = getDefaultBoolean( options.views.map.showMinimalDayNames, false ); + options.views.map.showMonthsInReverseOrder = getDefaultBoolean( options.views.map.showMonthsInReverseOrder, false ); if ( isInvalidOptionArray( options.views.map.monthsToShow ) ) { options.views.map.monthsToShow = _default_MonthsToShow; @@ -1933,6 +2000,7 @@ options.views.chart.showChartYLabels = getDefaultBoolean( options.views.chart.showChartYLabels, true ); options.views.chart.showMonthNames = getDefaultBoolean( options.views.chart.showMonthNames, true ); options.views.chart.showLineNumbers = getDefaultBoolean( options.views.chart.showLineNumbers, false ); + options.views.chart.showInReverseOrder = getDefaultBoolean( options.views.chart.showInReverseOrder, false ); if ( isInvalidOptionArray( options.views.chart.monthsToShow ) ) { options.views.chart.monthsToShow = _default_MonthsToShow; @@ -1952,6 +2020,7 @@ options.views.statistics.showColorRangeLabels = getDefaultBoolean( options.views.statistics.showColorRangeLabels, true ); options.views.statistics.useColorRangeNamesForLabels = getDefaultBoolean( options.views.statistics.useColorRangeNamesForLabels, false ); options.views.statistics.showRangeNumbers = getDefaultBoolean( options.views.statistics.showRangeNumbers, false ); + options.views.statistics.showInReverseOrder = getDefaultBoolean( options.views.statistics.showInReverseOrder, false ); if ( isInvalidOptionArray( options.views.statistics.monthsToShow ) ) { options.views.statistics.monthsToShow = _default_MonthsToShow; @@ -2390,7 +2459,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.addDates = function( elementId, dates, type, triggerRefresh ) { + _public.addDates = function( elementId, dates, type, triggerRefresh ) { if ( isDefinedString( elementId ) && isDefinedArray( dates ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2401,7 +2470,7 @@ var datesLength = dates.length; for ( var dateIndex = 0; dateIndex < datesLength; dateIndex++ ) { - this.addDate( elementId, dates[ dateIndex ], type, false ); + _public.addDate( elementId, dates[ dateIndex ], type, false ); } if ( triggerRefresh ) { @@ -2410,7 +2479,7 @@ } } - return this; + return _public; }; /** @@ -2428,7 +2497,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.addDate = function( elementId, date, type, triggerRefresh ) { + _public.addDate = function( elementId, date, type, triggerRefresh ) { if ( isDefinedString( elementId ) && isDefinedDate( date ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2457,7 +2526,7 @@ } } - return this; + return _public; }; /** @@ -2476,7 +2545,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.updateDate = function( elementId, date, count, type, triggerRefresh ) { + _public.updateDate = function( elementId, date, count, type, triggerRefresh ) { if ( isDefinedString( elementId ) && isDefinedDate( date ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2499,7 +2568,7 @@ } } - return this; + return _public; }; /** @@ -2517,7 +2586,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.removeDates = function( elementId, dates, type, triggerRefresh ) { + _public.removeDates = function( elementId, dates, type, triggerRefresh ) { if ( isDefinedString( elementId ) && isDefinedArray( dates ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2528,7 +2597,7 @@ var datesLength = dates.length; for ( var dateIndex = 0; dateIndex < datesLength; dateIndex++ ) { - this.removeDate( elementId, dates[ dateIndex ], type, false ); + _public.removeDate( elementId, dates[ dateIndex ], type, false ); } if ( triggerRefresh ) { @@ -2537,7 +2606,7 @@ } } - return this; + return _public; }; /** @@ -2555,7 +2624,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.removeDate = function( elementId, date, type, triggerRefresh ) { + _public.removeDate = function( elementId, date, type, triggerRefresh ) { if ( isDefinedString( elementId ) && isDefinedDate( date ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2580,7 +2649,7 @@ } } - return this; + return _public; }; /** @@ -2598,7 +2667,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.clearDate = function( elementId, date, type, triggerRefresh ) { + _public.clearDate = function( elementId, date, type, triggerRefresh ) { if ( isDefinedString( elementId ) && isDefinedDate( date ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2621,7 +2690,7 @@ } } - return this; + return _public; }; /** @@ -2636,14 +2705,14 @@ * * @returns {Object} The Heat.js class instance. */ - this.resetAll = function( triggerRefresh ) { + _public.resetAll = function( triggerRefresh ) { for ( var elementId in _elements_DateCounts ) { if ( _elements_DateCounts.hasOwnProperty( elementId ) ) { - this.reset( elementId, triggerRefresh ); + _public.reset( elementId, triggerRefresh ); } } - return this; + return _public; }; /** @@ -2659,7 +2728,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.reset = function( elementId, triggerRefresh ) { + _public.reset = function( elementId, triggerRefresh ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2677,7 +2746,7 @@ } } - return this; + return _public; }; /** @@ -2693,12 +2762,12 @@ * * @returns {Object} The Heat.js class instance. */ - this.export = function( elementId, exportType ) { + _public.export = function( elementId, exportType ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { exportAllData( _elements_DateCounts[ elementId ].options, exportType ); } - return this; + return _public; }; @@ -2720,7 +2789,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.refresh = function( elementId ) { + _public.refresh = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2728,7 +2797,7 @@ fireCustomTrigger( bindingOptions.onRefresh, bindingOptions.currentView.element ); } - return this; + return _public; }; /** @@ -2741,7 +2810,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.refreshAll = function() { + _public.refreshAll = function() { for ( var elementId in _elements_DateCounts ) { if ( _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -2751,7 +2820,7 @@ } } - return this; + return _public; }; /** @@ -2767,7 +2836,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.setYear = function( elementId, year ) { + _public.setYear = function( elementId, year ) { if ( isDefinedString( elementId ) && isDefinedNumber( year ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; bindingOptions.currentView.year = year; @@ -2781,7 +2850,7 @@ fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year ); } - return this; + return _public; }; /** @@ -2796,7 +2865,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.setYearToHighest = function( elementId ) { + _public.setYearToHighest = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options, data = getCurrentViewData( bindingOptions ), @@ -2821,7 +2890,7 @@ } } - return this; + return _public; }; /** @@ -2836,7 +2905,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.setYearToLowest = function( elementId ) { + _public.setYearToLowest = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options, data = getCurrentViewData( bindingOptions ), @@ -2861,7 +2930,7 @@ } } - return this; + return _public; }; /** @@ -2876,12 +2945,12 @@ * * @returns {Object} The Heat.js class instance. */ - this.moveToPreviousYear = function( elementId ) { + _public.moveToPreviousYear = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { moveToPreviousYear( _elements_DateCounts[ elementId ].options ); } - return this; + return _public; }; /** @@ -2896,12 +2965,12 @@ * * @returns {Object} The Heat.js class instance. */ - this.moveToNextYear = function( elementId ) { + _public.moveToNextYear = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { moveToNextYear( _elements_DateCounts[ elementId ].options ); } - return this; + return _public; }; /** @@ -2916,7 +2985,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.moveToCurrentYear = function( elementId ) { + _public.moveToCurrentYear = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; bindingOptions.currentView.year = new Date().getFullYear(); @@ -2930,7 +2999,7 @@ fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year ); } - return this; + return _public; }; /** @@ -2944,7 +3013,7 @@ * * @returns {Object} The year being displayed (or null). */ - this.getYear = function( elementId ) { + _public.getYear = function( elementId ) { var result = null; if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { @@ -2968,12 +3037,12 @@ * * @returns {Object} The Heat.js class instance. */ - this.render = function( element, options ) { + _public.render = function( element, options ) { if ( isDefinedObject( element ) && isDefinedObject( options ) ) { renderControl( renderBindingOptions( options, element ) ); } - return this; + return _public; }; /** @@ -2985,10 +3054,10 @@ * * @returns {Object} The Heat.js class instance. */ - this.renderAll = function() { + _public.renderAll = function() { render(); - return this; + return _public; }; /** @@ -3004,7 +3073,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.switchView = function( elementId, viewName ) { + _public.switchView = function( elementId, viewName ) { if ( isDefinedString( elementId ) && isDefinedString( viewName ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options, view = null; @@ -3025,7 +3094,7 @@ } } - return this; + return _public; }; /** @@ -3041,7 +3110,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.switchType = function( elementId, type ) { + _public.switchType = function( elementId, type ) { if ( isDefinedString( elementId ) && isDefinedString( type ) && _elements_DateCounts.hasOwnProperty( elementId ) && _elements_DateCounts[ elementId ].type.hasOwnProperty( type ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options; @@ -3053,7 +3122,7 @@ } } - return this; + return _public; }; /** @@ -3069,7 +3138,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.updateOptions = function( elementId, newOptions ) { + _public.updateOptions = function( elementId, newOptions ) { if ( isDefinedString( elementId ) && isDefinedObject( newOptions ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { var bindingOptions = _elements_DateCounts[ elementId ].options, newBindingOptions = buildAttributeOptions( newOptions ), @@ -3088,7 +3157,7 @@ } } - return this; + return _public; }; function moveToPreviousYear( bindingOptions, callCustomTrigger ) { @@ -3164,7 +3233,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.destroyAll = function() { + _public.destroyAll = function() { for ( var elementId in _elements_DateCounts ) { if ( _elements_DateCounts.hasOwnProperty( elementId ) ) { destroyElement( _elements_DateCounts[ elementId ].options ); @@ -3173,7 +3242,7 @@ _elements_DateCounts = {}; - return this; + return _public; }; /** @@ -3188,14 +3257,14 @@ * * @returns {Object} The Heat.js class instance. */ - this.destroy = function( elementId ) { + _public.destroy = function( elementId ) { if ( isDefinedString( elementId ) && _elements_DateCounts.hasOwnProperty( elementId ) ) { destroyElement( _elements_DateCounts[ elementId ].options ); delete _elements_DateCounts[ elementId ]; } - return this; + return _public; }; function destroyElement( bindingOptions ) { @@ -3232,7 +3301,7 @@ * * @returns {Object} The Heat.js class instance. */ - this.setConfiguration = function( newConfiguration, triggerRefresh ) { + _public.setConfiguration = function( newConfiguration, triggerRefresh ) { if ( isDefinedObject( newConfiguration ) ) { var configurationHasChanged = false; @@ -3249,12 +3318,12 @@ buildDefaultConfiguration( _configuration ); if ( triggerRefresh ) { - this.refreshAll(); + _public.refreshAll(); } } } - return this; + return _public; }; function buildDefaultConfiguration( newConfiguration ) { @@ -3345,7 +3414,7 @@ * * @returns {string[]} The element IDs that have been rendered. */ - this.getIds = function() { + _public.getIds = function() { var result = []; for ( var elementId in _elements_DateCounts ) { @@ -3366,8 +3435,8 @@ * * @returns {string} The version number. */ - this.getVersion = function() { - return "2.7.2"; + _public.getVersion = function() { + return "2.8.0"; }; @@ -3394,7 +3463,7 @@ } ); if ( !isDefined( _parameter_Window.$heat ) ) { - _parameter_Window.$heat = this; + _parameter_Window.$heat = _public; } } ) ( document, window, Math, JSON ); diff --git a/src/heat.js.scss b/src/heat.js.scss index 7325a50f..e045a9de 100644 --- a/src/heat.js.scss +++ b/src/heat.js.scss @@ -1,5 +1,5 @@ /* - * Heat.js Library v2.7.2 + * Heat.js Library v2.8.0 * * Copyright 2024 Bunoon * Released under the MIT License @@ -538,7 +538,7 @@ div.heat-js { text-align: left !important; height: var(--heat-js-day-size); margin-bottom: var(--heat-js-day-spacing); - display: inline-flex; + display: flex; justify-content: center; flex-direction: column; }