diff --git a/README.md b/README.md
index 0d647b4a..080a407e 100644
--- a/README.md
+++ b/README.md
@@ -2,15 +2,15 @@
Heat.js
[](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)
-[](https://www.npmjs.com/package/jheat.js)
-[](https://www.nuget.org/packages/jHeat.js/)
+[](https://www.npmjs.com/package/jheat.js)
+[](https://www.nuget.org/packages/jHeat.js/)
[](https://github.com/williamtroup/Heat.js/blob/main/LICENSE.txt)
[](https://github.com/williamtroup/Heat.js/discussions)
[](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

@@ -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
[](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)
-[](https://www.npmjs.com/package/jheat.js)
-[](https://www.nuget.org/packages/jHeat.js/)
+[](https://www.npmjs.com/package/jheat.js)
+[](https://www.nuget.org/packages/jHeat.js/)
[](https://github.com/williamtroup/Heat.js/blob/main/LICENSE.txt)
[](https://github.com/williamtroup/Heat.js/discussions)
[](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;
}