```
-To see a list of all the available binding options you can use for "data-heat-options", click [here](https://william-troup.com/heat-js/documentation/binding-options.html).
+To see a list of all the available binding options you can use for "data-heat-js", click [here](https://william-troup.com/heat-js/documentation/binding-options.html).
-To see a list of all the available custom triggers you can use for "data-heat-options", click [here](https://william-troup.com/heat-js/documentation/binding-options-custom-triggers.html).
+To see a list of all the available custom triggers you can use for "data-heat-js", click [here](https://william-troup.com/heat-js/documentation/binding-options-custom-triggers.html).
diff --git a/README_NUGET.md b/README_NUGET.md
index 3fe64279..03e0af26 100644
--- a/README_NUGET.md
+++ b/README_NUGET.md
@@ -1,8 +1,8 @@
-# Heat.js v3.0.0
+# Heat.js v3.1.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/)
@@ -133,14 +133,14 @@ Make sure you include the "DOCTYPE html" tag at the top of your HTML, as follows
### 3. DOM Element Binding:
```markdown
-
+
Your HTML.
```
-To see a list of all the available binding options you can use for "data-heat-options", click [here](https://william-troup.com/heat-js/documentation/binding-options.html).
+To see a list of all the available binding options you can use for "data-heat-js", click [here](https://william-troup.com/heat-js/documentation/binding-options.html).
-To see a list of all the available custom triggers you can use for "data-heat-options", click [here](https://william-troup.com/heat-js/documentation/binding-options-custom-triggers.html).
+To see a list of all the available custom triggers you can use for "data-heat-js", click [here](https://william-troup.com/heat-js/documentation/binding-options-custom-triggers.html).
### 4. Adding Dates:
diff --git a/dist/heat.js b/dist/heat.js
index a0568efa..0fe1ea79 100644
--- a/dist/heat.js
+++ b/dist/heat.js
@@ -1,7 +1,7 @@
-/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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_Days = "days", _elements_View_Name_Statistics = "statistics", _elements_View_Map = 1, _elements_View_Chart = 2, _elements_View_Days = 3, _elements_View_Statistics = 4, _export_Type_Csv = "csv", _export_Type_Json = "json", _export_Type_Xml = "xml", _export_Type_Txt = "txt", _attribute_Name_Options = "data-heat-options";
+ null, _elements_DateCounts = {}, _elements_View_Name_Map = "map", _elements_View_Name_Chart = "chart", _elements_View_Name_Days = "days", _elements_View_Name_Statistics = "statistics", _elements_View_Map = 1, _elements_View_Chart = 2, _elements_View_Days = 3, _elements_View_Statistics = 4, _export_Type_Csv = "csv", _export_Type_Json = "json", _export_Type_Xml = "xml", _export_Type_Txt = "txt", _attribute_Name_Options = "data-heat-js";
function render() {
var tagTypes = _configuration.domElementTypes, tagTypesLength = tagTypes.length;
for (var tagTypeIndex = 0; tagTypeIndex < tagTypesLength; tagTypeIndex++) {
@@ -50,7 +50,7 @@
bindingOptions.currentView.mapContentsScrollLeft = 0;
bindingOptions.currentView.year = bindingOptions.year;
bindingOptions.currentView.type = _configuration.unknownTrendText;
- bindingOptions.currentView.isInFetchMode = isDefinedFunction(bindingOptions.onDataFetch);
+ bindingOptions.currentView.isInFetchMode = isDefinedFunction(bindingOptions.events.onDataFetch);
bindingOptions.currentView.isInFetchModeTimer = null;
bindingOptions.currentView.yearsAvailable = [];
if (bindingOptions.views.chart.enabled) {
@@ -79,7 +79,7 @@
return bindingOptions;
}
function renderControl(bindingOptions) {
- fireCustomTrigger(bindingOptions.onBeforeRender, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onBeforeRender, bindingOptions.currentView.element);
if (!isDefinedString(bindingOptions.currentView.element.id)) {
bindingOptions.currentView.element.id = newGuid();
}
@@ -91,7 +91,7 @@
bindingOptions.currentView.element.removeAttribute(_attribute_Name_Options);
createDateStorageForElement(bindingOptions.currentView.element.id, bindingOptions);
renderControlContainer(bindingOptions);
- fireCustomTrigger(bindingOptions.onRenderComplete, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onRenderComplete, bindingOptions.currentView.element);
}
function renderControlContainer(bindingOptions, isForDataRefresh, isForViewSwitch) {
isForDataRefresh = getDefaultBoolean(isForDataRefresh, false);
@@ -115,7 +115,7 @@
bindingOptions.currentView.yearsAvailable = getYearsAvailableInData(bindingOptions);
hideToolTip(bindingOptions);
startDataPullTimer(bindingOptions);
- if (bindingOptions.showConfigurationButton) {
+ if (bindingOptions.title.showConfigurationButton) {
renderDisabledBackground(bindingOptions);
renderConfigurationDialog(bindingOptions);
}
@@ -258,7 +258,7 @@
}
if (render) {
renderControlContainer(bindingOptions);
- fireCustomTrigger(bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions);
+ fireCustomTrigger(bindingOptions.events.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions);
} else {
hideToolTip(bindingOptions);
}
@@ -294,7 +294,7 @@
bindingOptions.currentView.tooltip.innerHTML = text;
bindingOptions.currentView.tooltip.style.display = "block";
showElementAtMousePosition(e, bindingOptions.currentView.tooltip);
- }, bindingOptions.tooltipDelay);
+ }, bindingOptions.tooltip.delay);
}
function hideToolTip(bindingOptions) {
if (isDefined(bindingOptions.currentView.tooltip)) {
@@ -308,39 +308,39 @@
}
}
function renderControlTitleBar(bindingOptions) {
- if (bindingOptions.showTitle || bindingOptions.showYearSelector || bindingOptions.showRefreshButton || bindingOptions.showExportButton || bindingOptions.showImportButton) {
+ if (bindingOptions.title.showText || bindingOptions.title.showYearSelector || bindingOptions.title.showRefreshButton || bindingOptions.title.showExportButton || bindingOptions.title.showImportButton) {
var titleBar = createElement(bindingOptions.currentView.element, "div", "title-bar"), title = createElement(titleBar, "div", "title");
if (bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled) {
createElement(title, "div", "down-arrow");
} else {
addClass(title, "no-click");
}
- if (bindingOptions.showTitle) {
- title.innerHTML += bindingOptions.titleText;
+ if (bindingOptions.title.showText) {
+ title.innerHTML += bindingOptions.title.text;
}
if (bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled) {
renderTitleDropDownMenu(bindingOptions, title);
}
- if (bindingOptions.showImportButton && !bindingOptions.currentView.isInFetchMode) {
+ if (bindingOptions.title.showImportButton && !bindingOptions.currentView.isInFetchMode) {
var importData = createElementWithHTML(titleBar, "button", "import", _configuration.importButtonText);
importData.onclick = function() {
importFromFilesSelected(bindingOptions);
};
}
- if (bindingOptions.showExportButton) {
+ if (bindingOptions.title.showExportButton) {
var exportData = createElementWithHTML(titleBar, "button", "export", _configuration.exportButtonText);
exportData.onclick = function() {
exportAllData(bindingOptions);
};
}
- if (bindingOptions.showRefreshButton) {
+ if (bindingOptions.title.showRefreshButton) {
var refresh = createElementWithHTML(titleBar, "button", "refresh", _configuration.refreshButtonText);
refresh.onclick = function() {
renderControlContainer(bindingOptions);
- fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onRefresh, bindingOptions.currentView.element);
};
}
- if (bindingOptions.showYearSelector) {
+ if (bindingOptions.title.showYearSelector) {
var back = createElementWithHTML(titleBar, "button", "back", _configuration.backButtonText);
back.onclick = function() {
moveToPreviousYear(bindingOptions);
@@ -349,12 +349,12 @@
back.disabled = true;
}
bindingOptions.currentView.yearText = createElementWithHTML(titleBar, "div", "year-text", bindingOptions.currentView.year);
- if (bindingOptions.showYearSelectionDropDown) {
+ if (bindingOptions.title.showYearSelectionDropDown) {
renderYearDropDownMenu(bindingOptions);
} else {
addClass(bindingOptions.currentView.yearText, "no-click");
}
- if (bindingOptions.showConfigurationButton) {
+ if (bindingOptions.title.showConfigurationButton) {
var configureButton = createElement(titleBar, "div", "configure");
addToolTip(configureButton, bindingOptions, _configuration.configurationToolTipText);
configureButton.onclick = function() {
@@ -397,7 +397,7 @@
} else {
option.onclick = function() {
bindingOptions.currentView.view = view;
- fireCustomTrigger(bindingOptions.onViewSwitch, viewName);
+ fireCustomTrigger(bindingOptions.events.onViewSwitch, viewName);
renderControlContainer(bindingOptions, false, true);
};
}
@@ -407,7 +407,7 @@
var yearsMenuContainer = createElement(bindingOptions.currentView.yearText, "div", "years-menu-container"), yearsMenu = createElement(yearsMenuContainer, "div", "years-menu"), thisYear = (new Date()).getFullYear(), activeYearMenuItem = null;
yearsMenuContainer.style.display = "block";
yearsMenuContainer.style.visibility = "hidden";
- for (var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++) {
+ for (var currentYear = thisYear - bindingOptions.title.extraSelectionYears; currentYear < thisYear + bindingOptions.title.extraSelectionYears; currentYear++) {
if (isYearVisible(bindingOptions, currentYear)) {
var yearMenuItem = renderYearDropDownMenuItem(bindingOptions, yearsMenu, currentYear, thisYear);
if (!isDefined(activeYearMenuItem)) {
@@ -427,7 +427,7 @@
year.onclick = function() {
bindingOptions.currentView.year = currentYear;
renderControlContainer(bindingOptions);
- fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onSetYear, bindingOptions.currentView.year);
};
if (currentYear === actualYear) {
addClass(year, "year-menu-item-current");
@@ -540,7 +540,7 @@
if (bindingOptions.views.map.showMonthsInReverseOrder) {
reverseElementsOrder(months);
}
- if (bindingOptions.keepScrollPositions) {
+ if (bindingOptions.views.map.keepScrollPositions) {
bindingOptions.currentView.mapContents.scrollLeft = bindingOptions.currentView.mapContentsScrollLeft;
}
}
@@ -552,15 +552,15 @@
if (bindingOptions.views.map.showDayNumbers && dateCount > 0) {
day.innerHTML = dateCount.toString();
}
- if (isDefinedFunction(bindingOptions.onDayClick)) {
+ if (isDefinedFunction(bindingOptions.events.onDayClick)) {
day.onclick = function() {
- fireCustomTrigger(bindingOptions.onDayClick, date, dateCount);
+ fireCustomTrigger(bindingOptions.events.onDayClick, date, dateCount);
};
} else {
addClass(day, "no-hover");
}
var useColorRange = getColorRange(bindingOptions, colorRanges, dateCount, date);
- if (isDefined(useColorRange) && isHeatMapColorVisible(bindingOptions, useColorRange.id)) {
+ if (isDefined(useColorRange) && isColorRangeVisible(bindingOptions, useColorRange.id)) {
if (isDefinedString(useColorRange.mapCssClassName)) {
addClass(day, useColorRange.mapCssClassName);
} else {
@@ -653,7 +653,7 @@
monthNameSpace.style.height = chartMonths.offsetHeight + "px";
monthNameSpace.style.width = labelsWidth + "px";
}
- if (bindingOptions.keepScrollPositions) {
+ if (bindingOptions.views.chart.keepScrollPositions) {
bindingOptions.currentView.chartContents.scrollLeft = bindingOptions.currentView.chartContentsScrollLeft;
}
}
@@ -671,15 +671,15 @@
if (dayLineHeight <= 0) {
dayLine.style.visibility = "hidden";
}
- if (isDefinedFunction(bindingOptions.onDayClick)) {
+ if (isDefinedFunction(bindingOptions.events.onDayClick)) {
dayLine.onclick = function() {
- fireCustomTrigger(bindingOptions.onDayClick, date, dateCount);
+ fireCustomTrigger(bindingOptions.events.onDayClick, date, dateCount);
};
} else {
addClass(dayLine, "no-hover");
}
var useColorRange = getColorRange(bindingOptions, colorRanges, dateCount, date);
- if (isDefined(useColorRange) && isHeatMapColorVisible(bindingOptions, useColorRange.id)) {
+ if (isDefined(useColorRange) && isColorRangeVisible(bindingOptions, useColorRange.id)) {
if (isDefinedString(useColorRange.chartCssClassName)) {
addClass(dayLine, useColorRange.chartCssClassName);
} else {
@@ -694,7 +694,9 @@
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]));
+ if (isMonthVisible(bindingOptions.views.chart.monthsToShow, monthIndex) && isDayVisible(bindingOptions.views.chart.daysToShow, dayIndex + 1)) {
+ result = _parameter_Math.max(result, parseInt(data[storageDate]));
+ }
}
}
}
@@ -743,7 +745,7 @@
reverseElementsOrder(dayLines);
reverseElementsOrder(dayNames);
}
- if (bindingOptions.keepScrollPositions) {
+ if (bindingOptions.views.days.keepScrollPositions) {
bindingOptions.currentView.daysContents.scrollLeft = bindingOptions.currentView.daysContentsScrollLeft;
}
}
@@ -755,9 +757,9 @@
dayLine.style.visibility = "hidden";
}
addToolTip(dayLine, bindingOptions, dayCount.toString());
- if (isDefinedFunction(bindingOptions.onWeekDayClick)) {
+ if (isDefinedFunction(bindingOptions.events.onWeekDayClick)) {
dayLine.onclick = function() {
- fireCustomTrigger(bindingOptions.onWeekDayClick, dayNumber, dayCount);
+ fireCustomTrigger(bindingOptions.events.onWeekDayClick, dayNumber, dayCount);
};
} else {
addClass(dayLine, "no-hover");
@@ -836,7 +838,7 @@
reverseElementsOrder(rangeLines);
reverseElementsOrder(statisticsRanges);
}
- if (bindingOptions.keepScrollPositions) {
+ if (bindingOptions.views.statistics.keepScrollPositions) {
bindingOptions.currentView.statisticsContents.scrollLeft = bindingOptions.currentView.statisticsContentsScrollLeft;
}
}
@@ -852,14 +854,14 @@
addClass(rangeLine, "range-line-number");
createElementWithHTML(rangeLine, "div", "count", rangeCount);
}
- if (isDefinedFunction(bindingOptions.onStatisticClick)) {
+ if (isDefinedFunction(bindingOptions.events.onStatisticClick)) {
rangeLine.onclick = function() {
- fireCustomTrigger(bindingOptions.onStatisticClick, useColorRange);
+ fireCustomTrigger(bindingOptions.events.onStatisticClick, useColorRange);
};
} else {
addClass(rangeLine, "no-hover");
}
- if (isDefined(useColorRange) && isHeatMapColorVisible(bindingOptions, useColorRange.id)) {
+ if (isDefined(useColorRange) && isColorRangeVisible(bindingOptions, useColorRange.id)) {
if (isDefinedString(useColorRange.statisticsCssClassName)) {
addClass(rangeLine, useColorRange.statisticsCssClassName);
} else {
@@ -902,7 +904,7 @@
}
}
if (_elements_DateCounts[bindingOptions.currentView.element.id].types > 1) {
- if (isDefinedString(bindingOptions.descriptionText)) {
+ if (isDefinedString(bindingOptions.description.text)) {
var description = createElement(bindingOptions.currentView.element, "div", "description", guide);
renderDescription(bindingOptions, description);
}
@@ -917,11 +919,11 @@
} else {
renderDescription(bindingOptions, mapTypes);
}
- if (bindingOptions.showGuide) {
+ if (bindingOptions.guide.enabled) {
var mapToggles = createElement(guide, "div", "map-toggles");
- if (bindingOptions.showLessAndMoreLabels) {
+ if (bindingOptions.guide.showLessAndMoreLabels) {
var lessText = createElementWithHTML(mapToggles, "div", "less-text", _configuration.lessText);
- if (bindingOptions.colorRangeTogglesEnabled) {
+ if (bindingOptions.guide.colorRangeTogglesEnabled) {
lessText.onclick = function() {
updateColorRangeToggles(bindingOptions, false);
};
@@ -933,9 +935,9 @@
for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) {
renderControlViewGuideDay(bindingOptions, days, colorRanges[colorRangesIndex]);
}
- if (bindingOptions.showLessAndMoreLabels) {
+ if (bindingOptions.guide.showLessAndMoreLabels) {
var moreText = createElementWithHTML(mapToggles, "div", "more-text", _configuration.moreText);
- if (bindingOptions.colorRangeTogglesEnabled) {
+ if (bindingOptions.guide.colorRangeTogglesEnabled) {
moreText.onclick = function() {
updateColorRangeToggles(bindingOptions, true);
};
@@ -953,7 +955,7 @@
typeButton.onclick = function() {
if (bindingOptions.currentView.type !== type) {
bindingOptions.currentView.type = type;
- fireCustomTrigger(bindingOptions.onTypeSwitch, type);
+ fireCustomTrigger(bindingOptions.events.onTypeSwitch, type);
renderControlContainer(bindingOptions);
}
};
@@ -962,7 +964,7 @@
var day = createElement(days, "div");
day.className = "day";
addToolTip(day, bindingOptions, colorRange.tooltipText);
- if (isHeatMapColorVisible(bindingOptions, colorRange.id)) {
+ if (isColorRangeVisible(bindingOptions, colorRange.id)) {
if (bindingOptions.currentView.view === _elements_View_Map && isDefinedString(colorRange.mapCssClassName)) {
addClass(day, colorRange.mapCssClassName);
} else if (bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart && isDefinedString(colorRange.chartCssClassName)) {
@@ -973,11 +975,11 @@
addClass(day, colorRange.cssClassName);
}
}
- if (bindingOptions.showNumbersInGuide) {
+ if (bindingOptions.guide.showNumbersInGuide) {
addClass(day, "day-number");
day.innerHTML = colorRange.minimum + _string.plus;
}
- if (bindingOptions.colorRangeTogglesEnabled) {
+ if (bindingOptions.guide.colorRangeTogglesEnabled) {
day.onclick = function() {
toggleColorRangeVisibleState(bindingOptions, colorRange.id);
};
@@ -986,21 +988,21 @@
}
}
function renderDescription(bindingOptions, container) {
- if (isDefinedString(bindingOptions.descriptionText)) {
- if (isDefinedString(bindingOptions.descriptionTextLink)) {
- var link = createElementWithHTML(container, "a", "label", bindingOptions.descriptionText);
- link.href = bindingOptions.descriptionTextLink;
+ if (isDefinedString(bindingOptions.description.text)) {
+ if (isDefinedString(bindingOptions.description.url)) {
+ var link = createElementWithHTML(container, "a", "label", bindingOptions.description.text);
+ link.href = bindingOptions.description.url;
link.target = "_blank";
} else {
- createElementWithHTML(container, "span", "label", bindingOptions.descriptionText);
+ createElementWithHTML(container, "span", "label", bindingOptions.description.text);
}
}
}
function renderDayToolTip(bindingOptions, day, date, dateCount) {
- if (isDefinedFunction(bindingOptions.onDayToolTipRender)) {
- addToolTip(day, bindingOptions, fireCustomTrigger(bindingOptions.onDayToolTipRender, date, dateCount));
+ if (isDefinedFunction(bindingOptions.events.onDayToolTipRender)) {
+ addToolTip(day, bindingOptions, fireCustomTrigger(bindingOptions.events.onDayToolTipRender, date, dateCount));
} else {
- var tooltip = getCustomFormattedDateText(bindingOptions.dayToolTipText, date);
+ var tooltip = getCustomFormattedDateText(bindingOptions.tooltip.dayText, date);
if (bindingOptions.showHolidaysInDayToolTips) {
var holiday = isHoliday(bindingOptions, date);
if (holiday.matched && isDefinedString(holiday.name)) {
@@ -1110,7 +1112,7 @@
}
}
function pullDataFromCustomTrigger(bindingOptions) {
- var elementId = bindingOptions.currentView.element.id, data = fireCustomTrigger(bindingOptions.onDataFetch, elementId);
+ var elementId = bindingOptions.currentView.element.id, data = fireCustomTrigger(bindingOptions.events.onDataFetch, elementId);
if (isDefinedObject(data)) {
createDateStorageForElement(elementId, bindingOptions, false);
for (var storageDate in data) {
@@ -1133,7 +1135,7 @@
}
}
}
- function isHeatMapColorVisible(bindingOptions, id) {
+ function isColorRangeVisible(bindingOptions, id) {
var result = false;
if (id === _internal_Name_Holiday) {
result = true;
@@ -1141,7 +1143,7 @@
var colorRangesLength = bindingOptions.colorRanges.length;
for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) {
var colorRange = bindingOptions.colorRanges[colorRangesIndex];
- if (colorRange.id === id && (!isDefinedBoolean(colorRange.visible) || colorRange.visible)) {
+ if (colorRange.id === id && getDefaultBoolean(colorRange.visible, true)) {
result = true;
break;
}
@@ -1153,7 +1155,7 @@
var colorRangesLength = bindingOptions.colorRanges.length;
for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) {
bindingOptions.colorRanges[colorRangesIndex].visible = flag;
- fireCustomTrigger(bindingOptions.onColorRangeTypeToggle, bindingOptions.colorRanges[colorRangesIndex].id, flag);
+ fireCustomTrigger(bindingOptions.events.onColorRangeTypeToggle, bindingOptions.colorRanges[colorRangesIndex].id, flag);
}
renderControlContainer(bindingOptions);
}
@@ -1162,8 +1164,8 @@
for (var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++) {
var colorRange = bindingOptions.colorRanges[colorRangesIndex];
if (colorRange.id === id) {
- colorRange.visible = !(isDefinedBoolean(colorRange.visible) && colorRange.visible);
- fireCustomTrigger(bindingOptions.onColorRangeTypeToggle, colorRange.id, colorRange.visible);
+ colorRange.visible = !getDefaultBoolean(colorRange.visible, true);
+ fireCustomTrigger(bindingOptions.events.onColorRangeTypeToggle, colorRange.id, colorRange.visible);
renderControlContainer(bindingOptions);
break;
}
@@ -1258,7 +1260,7 @@
}
}
if (filesCompleted.length === filesLength) {
- fireCustomTrigger(bindingOptions.onImport, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onImport, bindingOptions.currentView.element);
renderControlContainer(bindingOptions);
}
};
@@ -1335,7 +1337,7 @@
tempLink.setAttribute("download", getExportFilename(bindingOptions));
tempLink.click();
_parameter_Document.body.removeChild(tempLink);
- fireCustomTrigger(bindingOptions.onExport, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onExport, bindingOptions.currentView.element);
}
}
function getCsvContent(bindingOptions) {
@@ -1437,41 +1439,28 @@
return csvValues.join(",");
}
function buildAttributeOptions(newOptions) {
- var options = !isDefinedObject(newOptions) ? {} : newOptions;
- options.views = !isDefinedObject(options.views) ? {} : options.views;
- options.showGuide = getDefaultBoolean(options.showGuide, true);
- options.showTitle = getDefaultBoolean(options.showTitle, true);
- options.showYearSelector = getDefaultBoolean(options.showYearSelector, true);
- options.showRefreshButton = getDefaultBoolean(options.showRefreshButton, false);
- options.showExportButton = getDefaultBoolean(options.showExportButton, false);
- options.colorRangeTogglesEnabled = getDefaultBoolean(options.colorRangeTogglesEnabled, true);
+ var options = getDefaultObject(newOptions, {});
+ options.views = getDefaultObject(options.views, {});
options.exportOnlyYearBeingViewed = getDefaultBoolean(options.exportOnlyYearBeingViewed, true);
options.year = getDefaultNumber(options.year, (new Date()).getFullYear());
- options.keepScrollPositions = getDefaultBoolean(options.keepScrollPositions, false);
- options.extraSelectionYears = getDefaultNumber(options.extraSelectionYears, 50);
- options.showYearSelectionDropDown = getDefaultBoolean(options.showYearSelectionDropDown, true);
options.view = getDefaultString(options.view, _elements_View_Name_Map);
- options.tooltipDelay = getDefaultNumber(options.tooltipDelay, 750);
options.exportType = getDefaultString(options.exportType, _export_Type_Csv);
- options.descriptionText = getDefaultString(options.descriptionText, null);
- options.descriptionTextLink = getDefaultString(options.descriptionTextLink, null);
options.useLocalStorageForData = getDefaultBoolean(options.useLocalStorageForData, false);
options.allowFileImports = getDefaultBoolean(options.allowFileImports, true);
options.yearsToHide = getDefaultArray(options.yearsToHide, []);
- options.showLessAndMoreLabels = getDefaultBoolean(options.showLessAndMoreLabels, true);
- options.showNumbersInGuide = getDefaultBoolean(options.showNumbersInGuide, false);
- options.showImportButton = getDefaultBoolean(options.showImportButton, false);
options.dataFetchDelay = getDefaultNumber(options.dataFetchDelay, 60000);
options.showOnlyDataForYearsAvailable = getDefaultBoolean(options.showOnlyDataForYearsAvailable, false);
options.showHolidaysInDayToolTips = getDefaultBoolean(options.showHolidaysInDayToolTips, false);
- options.showConfigurationButton = getDefaultBoolean(options.showConfigurationButton, true);
options = buildAttributeOptionColorRanges(options);
options = buildAttributeOptionHolidays(options);
+ options = buildAttributeOptionTitle(options);
+ options = buildAttributeOptionDescription(options);
+ options = buildAttributeOptionGuide(options);
+ options = buildAttributeOptionToolTip(options);
options = buildAttributeOptionMapView(options);
options = buildAttributeOptionChartView(options);
options = buildAttributeOptionDaysView(options);
options = buildAttributeOptionStatisticsView(options);
- options = buildAttributeOptionStrings(options);
options = buildAttributeOptionCustomTriggers(options);
return options;
}
@@ -1509,8 +1498,41 @@
}
return options;
}
+ function buildAttributeOptionTitle(options) {
+ options.title = getDefaultObject(options.title, {});
+ options.title.text = getDefaultString(options.title.text, "Heat.js");
+ options.title.showText = getDefaultBoolean(options.title.showText, true);
+ options.title.showYearSelector = getDefaultBoolean(options.title.showYearSelector, true);
+ options.title.showRefreshButton = getDefaultBoolean(options.title.showRefreshButton, false);
+ options.title.showExportButton = getDefaultBoolean(options.title.showExportButton, false);
+ options.title.extraSelectionYears = getDefaultNumber(options.title.extraSelectionYears, 50);
+ options.title.showYearSelectionDropDown = getDefaultBoolean(options.title.showYearSelectionDropDown, true);
+ options.title.showImportButton = getDefaultBoolean(options.title.showImportButton, false);
+ options.title.showConfigurationButton = getDefaultBoolean(options.title.showConfigurationButton, true);
+ return options;
+ }
+ function buildAttributeOptionDescription(options) {
+ options.description = getDefaultObject(options.description, {});
+ options.description.text = getDefaultString(options.description.text, null);
+ options.description.url = getDefaultString(options.description.url, null);
+ return options;
+ }
+ function buildAttributeOptionGuide(options) {
+ options.guide = getDefaultObject(options.guide, {});
+ options.guide.enabled = getDefaultBoolean(options.guide.enabled, true);
+ options.guide.colorRangeTogglesEnabled = getDefaultBoolean(options.guide.colorRangeTogglesEnabled, true);
+ options.guide.showLessAndMoreLabels = getDefaultBoolean(options.guide.showLessAndMoreLabels, true);
+ options.guide.showNumbersInGuide = getDefaultBoolean(options.guide.showNumbersInGuide, false);
+ return options;
+ }
+ function buildAttributeOptionToolTip(options) {
+ options.tooltip = getDefaultObject(options.tooltip, {});
+ options.tooltip.delay = getDefaultNumber(options.tooltip.delay, 750);
+ options.tooltip.dayText = getDefaultString(options.tooltip.dayText, "{d}{o} {mmmm} {yyyy}");
+ return options;
+ }
function buildAttributeOptionMapView(options) {
- options.views.map = !isDefinedObject(options.views.map) ? {} : options.views.map;
+ options.views.map = getDefaultObject(options.views.map, {});
options.views.map.showMonthDayGaps = getDefaultBoolean(options.views.map.showMonthDayGaps, true);
options.views.map.showDayNames = getDefaultBoolean(options.views.map.showDayNames, true);
options.views.map.placeMonthNamesOnTheBottom = getDefaultBoolean(options.views.map.placeMonthNamesOnTheBottom, false);
@@ -1520,6 +1542,7 @@
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);
+ options.views.map.keepScrollPositions = getDefaultBoolean(options.views.map.keepScrollPositions, false);
if (isInvalidOptionArray(options.views.map.monthsToShow)) {
options.views.map.monthsToShow = _default_MonthsToShow;
}
@@ -1529,12 +1552,13 @@
return options;
}
function buildAttributeOptionChartView(options) {
- options.views.chart = !isDefinedObject(options.views.chart) ? {} : options.views.chart;
+ options.views.chart = getDefaultObject(options.views.chart, {});
options.views.chart.enabled = getDefaultBoolean(options.views.chart.enabled, true);
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);
+ options.views.chart.keepScrollPositions = getDefaultBoolean(options.views.chart.keepScrollPositions, false);
if (isInvalidOptionArray(options.views.chart.monthsToShow)) {
options.views.chart.monthsToShow = _default_MonthsToShow;
}
@@ -1544,12 +1568,13 @@
return options;
}
function buildAttributeOptionDaysView(options) {
- options.views.days = !isDefinedObject(options.views.days) ? {} : options.views.days;
+ options.views.days = getDefaultObject(options.views.days, {});
options.views.days.enabled = getDefaultBoolean(options.views.days.enabled, true);
options.views.days.showChartYLabels = getDefaultBoolean(options.views.days.showChartYLabels, true);
options.views.days.showDayNames = getDefaultBoolean(options.views.days.showDayNames, true);
options.views.days.showInReverseOrder = getDefaultBoolean(options.views.days.showInReverseOrder, false);
options.views.days.showDayNumbers = getDefaultBoolean(options.views.days.showDayNumbers, false);
+ options.views.days.keepScrollPositions = getDefaultBoolean(options.views.days.keepScrollPositions, false);
if (isInvalidOptionArray(options.views.days.monthsToShow)) {
options.views.days.monthsToShow = _default_MonthsToShow;
}
@@ -1559,13 +1584,14 @@
return options;
}
function buildAttributeOptionStatisticsView(options) {
- options.views.statistics = !isDefinedObject(options.views.statistics) ? {} : options.views.statistics;
+ options.views.statistics = getDefaultObject(options.views.statistics, {});
options.views.statistics.enabled = getDefaultBoolean(options.views.statistics.enabled, true);
options.views.statistics.showChartYLabels = getDefaultBoolean(options.views.statistics.showChartYLabels, true);
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);
+ options.views.statistics.keepScrollPositions = getDefaultBoolean(options.views.statistics.keepScrollPositions, false);
if (isInvalidOptionArray(options.views.statistics.monthsToShow)) {
options.views.statistics.monthsToShow = _default_MonthsToShow;
}
@@ -1574,35 +1600,31 @@
}
return options;
}
- function buildAttributeOptionStrings(options) {
- options.titleText = getDefaultString(options.titleText, "Heat.js");
- options.dayToolTipText = getDefaultString(options.dayToolTipText, "{d}{o} {mmmm} {yyyy}");
- return options;
- }
function buildAttributeOptionCustomTriggers(options) {
- options.onDayClick = getDefaultFunction(options.onDayClick, null);
- options.onBackYear = getDefaultFunction(options.onBackYear, null);
- options.onNextYear = getDefaultFunction(options.onNextYear, null);
- options.onRefresh = getDefaultFunction(options.onRefresh, null);
- options.onBeforeRender = getDefaultFunction(options.onBeforeRender, null);
- options.onRenderComplete = getDefaultFunction(options.onRenderComplete, null);
- options.onDestroy = getDefaultFunction(options.onDestroy, null);
- options.onExport = getDefaultFunction(options.onExport, null);
- options.onSetYear = getDefaultFunction(options.onSetYear, null);
- options.onTypeSwitch = getDefaultFunction(options.onTypeSwitch, null);
- options.onDayToolTipRender = getDefaultFunction(options.onDayToolTipRender, null);
- options.onAdd = getDefaultFunction(options.onAdd, null);
- options.onRemove = getDefaultFunction(options.onRemove, null);
- options.onReset = getDefaultFunction(options.onReset, null);
- options.onViewSwitch = getDefaultFunction(options.onViewSwitch, null);
- options.onColorRangeTypeToggle = getDefaultFunction(options.onColorRangeTypeToggle, null);
- options.onImport = getDefaultFunction(options.onImport, null);
- options.onStatisticClick = getDefaultFunction(options.onStatisticClick, null);
- options.onDataFetch = getDefaultFunction(options.onDataFetch, null);
- options.onClear = getDefaultFunction(options.onClear, null);
- options.onUpdate = getDefaultFunction(options.onUpdate, null);
- options.onOptionsUpdate = getDefaultFunction(options.onOptionsUpdate, null);
- options.onWeekDayClick = getDefaultFunction(options.onWeekDayClick, null);
+ options.events = getDefaultObject(options.events, {});
+ options.events.onDayClick = getDefaultFunction(options.events.onDayClick, null);
+ options.events.onBackYear = getDefaultFunction(options.events.onBackYear, null);
+ options.events.onNextYear = getDefaultFunction(options.events.onNextYear, null);
+ options.events.onRefresh = getDefaultFunction(options.events.onRefresh, null);
+ options.events.onBeforeRender = getDefaultFunction(options.events.onBeforeRender, null);
+ options.events.onRenderComplete = getDefaultFunction(options.events.onRenderComplete, null);
+ options.events.onDestroy = getDefaultFunction(options.events.onDestroy, null);
+ options.events.onExport = getDefaultFunction(options.events.onExport, null);
+ options.events.onSetYear = getDefaultFunction(options.events.onSetYear, null);
+ options.events.onTypeSwitch = getDefaultFunction(options.events.onTypeSwitch, null);
+ options.events.onDayToolTipRender = getDefaultFunction(options.events.onDayToolTipRender, null);
+ options.events.onAdd = getDefaultFunction(options.events.onAdd, null);
+ options.events.onRemove = getDefaultFunction(options.events.onRemove, null);
+ options.events.onReset = getDefaultFunction(options.events.onReset, null);
+ options.events.onViewSwitch = getDefaultFunction(options.events.onViewSwitch, null);
+ options.events.onColorRangeTypeToggle = getDefaultFunction(options.events.onColorRangeTypeToggle, null);
+ options.events.onImport = getDefaultFunction(options.events.onImport, null);
+ options.events.onStatisticClick = getDefaultFunction(options.events.onStatisticClick, null);
+ options.events.onDataFetch = getDefaultFunction(options.events.onDataFetch, null);
+ options.events.onClear = getDefaultFunction(options.events.onClear, null);
+ options.events.onUpdate = getDefaultFunction(options.events.onUpdate, null);
+ options.events.onOptionsUpdate = getDefaultFunction(options.events.onOptionsUpdate, null);
+ options.events.onWeekDayClick = getDefaultFunction(options.events.onWeekDayClick, null);
return options;
}
function getTotalDaysInMonth(year, month) {
@@ -1773,14 +1795,17 @@
function getDefaultBoolean(value, defaultValue) {
return isDefinedBoolean(value) ? value : defaultValue;
}
+ function getDefaultNumber(value, defaultValue) {
+ return isDefinedNumber(value) ? value : defaultValue;
+ }
function getDefaultFunction(value, defaultValue) {
return isDefinedFunction(value) ? value : defaultValue;
}
function getDefaultArray(value, defaultValue) {
return isDefinedArray(value) ? value : defaultValue;
}
- function getDefaultNumber(value, defaultValue) {
- return isDefinedNumber(value) ? value : defaultValue;
+ function getDefaultObject(value, defaultValue) {
+ return isDefinedObject(value) ? value : defaultValue;
}
function getDefaultStringOrArray(value, defaultValue) {
if (isDefinedString(value)) {
@@ -1874,7 +1899,7 @@
_elements_DateCounts[elementId].type[type][storageDate] = 0;
}
_elements_DateCounts[elementId].type[type][storageDate]++;
- fireCustomTrigger(bindingOptions.onAdd, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onAdd, bindingOptions.currentView.element);
if (triggerRefresh) {
renderControlContainer(bindingOptions, true);
}
@@ -1891,7 +1916,7 @@
if (_elements_DateCounts[elementId].type.hasOwnProperty(type)) {
triggerRefresh = getDefaultBoolean(triggerRefresh, true);
_elements_DateCounts[elementId].type[type][storageDate] = count;
- fireCustomTrigger(bindingOptions.onUpdate, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onUpdate, bindingOptions.currentView.element);
if (triggerRefresh) {
renderControlContainer(bindingOptions, true);
}
@@ -1928,7 +1953,7 @@
if (_elements_DateCounts[elementId].type[type][storageDate] > 0) {
_elements_DateCounts[elementId].type[type][storageDate]--;
}
- fireCustomTrigger(bindingOptions.onRemove, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onRemove, bindingOptions.currentView.element);
if (triggerRefresh) {
renderControlContainer(bindingOptions, true);
}
@@ -1946,7 +1971,7 @@
if (_elements_DateCounts[elementId].type.hasOwnProperty(type) && _elements_DateCounts[elementId].type[type].hasOwnProperty(storageDate)) {
triggerRefresh = getDefaultBoolean(triggerRefresh, true);
delete _elements_DateCounts[elementId].type[type][storageDate];
- fireCustomTrigger(bindingOptions.onClear, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onClear, bindingOptions.currentView.element);
if (triggerRefresh) {
renderControlContainer(bindingOptions, true);
}
@@ -1970,7 +1995,7 @@
triggerRefresh = getDefaultBoolean(triggerRefresh, true);
bindingOptions.currentView.type = _configuration.unknownTrendText;
createDateStorageForElement(elementId, bindingOptions, false);
- fireCustomTrigger(bindingOptions.onReset, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onReset, bindingOptions.currentView.element);
if (triggerRefresh) {
renderControlContainer(bindingOptions, true);
}
@@ -1988,7 +2013,7 @@
if (isDefinedString(elementId) && _elements_DateCounts.hasOwnProperty(elementId)) {
var bindingOptions = _elements_DateCounts[elementId].options;
renderControlContainer(bindingOptions, true);
- fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onRefresh, bindingOptions.currentView.element);
}
return _public;
};
@@ -1997,7 +2022,7 @@
if (_elements_DateCounts.hasOwnProperty(elementId)) {
var bindingOptions = _elements_DateCounts[elementId].options;
renderControlContainer(bindingOptions, true);
- fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onRefresh, bindingOptions.currentView.element);
}
}
return _public;
@@ -2011,7 +2036,7 @@
} else {
renderControlContainer(bindingOptions);
}
- fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onSetYear, bindingOptions.currentView.year);
}
return _public;
};
@@ -2030,7 +2055,7 @@
} else {
renderControlContainer(bindingOptions);
}
- fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onSetYear, bindingOptions.currentView.year);
}
}
return _public;
@@ -2050,7 +2075,7 @@
} else {
renderControlContainer(bindingOptions);
}
- fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onSetYear, bindingOptions.currentView.year);
}
}
return _public;
@@ -2076,7 +2101,7 @@
} else {
renderControlContainer(bindingOptions);
}
- fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onSetYear, bindingOptions.currentView.year);
}
return _public;
};
@@ -2112,7 +2137,7 @@
}
if (isDefinedNumber(view)) {
bindingOptions.currentView.view = view;
- fireCustomTrigger(bindingOptions.onViewSwitch, viewName);
+ fireCustomTrigger(bindingOptions.events.onViewSwitch, viewName);
renderControlContainer(bindingOptions, false, true);
}
}
@@ -2123,7 +2148,7 @@
var bindingOptions = _elements_DateCounts[elementId].options;
if (bindingOptions.currentView.type !== type) {
bindingOptions.currentView.type = type;
- fireCustomTrigger(bindingOptions.onTypeSwitch, type);
+ fireCustomTrigger(bindingOptions.events.onTypeSwitch, type);
renderControlContainer(bindingOptions);
}
}
@@ -2140,8 +2165,8 @@
}
if (optionChanged) {
renderControlContainer(bindingOptions, true);
- fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element);
- fireCustomTrigger(bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions);
+ fireCustomTrigger(bindingOptions.events.onRefresh, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions);
}
}
return _public;
@@ -2161,7 +2186,7 @@
bindingOptions.currentView.year = year;
renderControlContainer(bindingOptions);
if (callCustomTrigger) {
- fireCustomTrigger(bindingOptions.onBackYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onBackYear, bindingOptions.currentView.year);
}
}
}
@@ -2180,7 +2205,7 @@
bindingOptions.currentView.year = year;
renderControlContainer(bindingOptions);
if (callCustomTrigger) {
- fireCustomTrigger(bindingOptions.onBackYear, bindingOptions.currentView.year);
+ fireCustomTrigger(bindingOptions.events.onBackYear, bindingOptions.currentView.year);
}
}
}
@@ -2208,7 +2233,7 @@
if (bindingOptions.currentView.isInFetchMode && isDefined(bindingOptions.currentView.isInFetchModeTimer)) {
clearInterval(bindingOptions.currentView.isInFetchModeTimer);
}
- fireCustomTrigger(bindingOptions.onDestroy, bindingOptions.currentView.element);
+ fireCustomTrigger(bindingOptions.events.onDestroy, bindingOptions.currentView.element);
}
_public.setConfiguration = function(newConfiguration, triggerRefresh) {
if (isDefinedObject(newConfiguration)) {
@@ -2293,7 +2318,7 @@
return result;
};
_public.getVersion = function() {
- return "3.0.0";
+ return "3.1.0";
};
(function(documentObject, windowObject, mathObject, jsonObject) {
_parameter_Document = documentObject;
diff --git a/dist/heat.js.css b/dist/heat.js.css
index fff47359..ac8c7ced 100644
--- a/dist/heat.js.css
+++ b/dist/heat.js.css
@@ -1,5 +1,5 @@
/*
- * Heat.js Library v3.0.0
+ * Heat.js Library v3.1.0
*
* Copyright 2024 Bunoon
* Released under the MIT License
diff --git a/dist/heat.js.min.css b/dist/heat.js.min.css
index 827c36be..1b85c001 100644
--- a/dist/heat.js.min.css
+++ b/dist/heat.js.min.css
@@ -1,2 +1,2 @@
-/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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-sub-title-bold-weight:700;--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-dialog-background-color:var(--heat-js-container-background-color);--heat-js-dialog-border-color:var(--heat-js-container-border-color);--heat-js-dialog-text-color:var(--heat-js-color-white);--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-view-days-background-color:var(--heat-js-day-color-4-background-color);--heat-js-view-days-border-color:var(--heat-js-day-color-4-border-color);--heat-js-view-days-text-color:var(--heat-js-day-color-4-text-color);--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-checkbox-background-color-checked:rgba( 80, 200, 120, 1 );--heat-js-checkbox-background-color:var(--heat-js-color-black);--heat-js-checkbox-border-color-checked:--heat-js-checkbox-background-color-checked;--heat-js-checkbox-border-color:var(--heat-js-color-white);--heat-js-panel-background-color:var(--heat-js-day-background-color);--heat-js-panel-border-color:var(--heat-js-container-border-color);--heat-js-border-control-radius:0.25rem;--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.disabled{display:none;z-index:1000;position:absolute;background-color:rgba(0,0,0,.3);top:0;left:0;height:100%;width:100%;animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.disabled div.dialog{display:none;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:450px;width:calc(100% - var(--heat-js-spacing) * 2);background-color:var(--heat-js-dialog-background-color);border:var(--heat-js-border-size) solid var(--heat-js-dialog-border-color);color:var(--heat-js-dialog-text-color);border-radius:var(--heat-js-border-radius);animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.disabled div.dialog div.dialog-title-bar{position:relative;padding:var(--heat-js-spacing);text-align:left}div.heat-js div.disabled div.dialog div.dialog-title-bar span.dialog-title-bar-text{font-weight:var(--heat-js-title-bold-weight)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close{float:right;width:16px;height:16px;position:relative;cursor:pointer}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::before,div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::after{content:"";position:absolute;height:16px;width:3px;left:6.5px;top:0;background-color:var(--heat-js-color-white);border-radius:var(--heat-js-border-radius);transition:var(--heat-js-transition)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::before{transform:rotate(45deg)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::after{transform:rotate(-45deg)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close:hover::before,div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close:hover::after{background-color:var(--heat-js-color-gray)}div.heat-js div.disabled div.dialog div.dialog-contents{padding:var(--heat-js-spacing);overflow-x:scroll;overflow-y:hidden}div.heat-js div.disabled div.configuration div.dialog-contents div.panel{background-color:var(--heat-js-panel-background-color);border:var(--heat-js-border-size) solid var(--heat-js-panel-border-color);border-radius:var(--heat-js-border-radius);padding:var(--heat-js-spacing)}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container{vertical-align:top;display:inline-block;width:calc(50% - var(--heat-js-spacing));margin-right:var(--heat-js-spacing)}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container:last-child{margin-right:0;width:50%}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container div.side-container-title-text{margin-bottom:var(--heat-js-spacing);font-weight:var(--heat-js-sub-title-bold-weight)}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container label.checkbox{margin-left:var(--heat-js-spacing)}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 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.configure{display:inline-block;width:8.5px;height:8.5px;position:relative;margin-right:var(--heat-js-spacing);transition:var(--heat-js-transition)}div.heat-js div.title-bar div.configure:hover::before,div.heat-js div.title-bar div.configure:hover::after{border-color:var(--heat-js-title-opener-text-color-hover);cursor:pointer}div.heat-js div.title-bar div.configure::before{content:"";position:absolute;height:8.5px;width:8.5px;border-color:var(--heat-js-color-white);border-width:2px;border-style:solid;transform:rotate(-45deg);top:0;left:0;transition:var(--heat-js-transition)}div.heat-js div.title-bar div.configure::after{content:"";position:absolute;height:8.5px;width:8.5px;border-color:var(--heat-js-color-white);border-width:2px;border-style:solid;transform:rotate(90deg);top:0;left:0;transition:var(--heat-js-transition)}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.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-menu-container{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-menu-container{animation:fade-in-animation var(--heat-js-animation-length);padding-top:3px;display:none;position:absolute;min-width:100px;margin-top:3px;z-index:1000}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu{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-menu-container div.titles-menu div.title-menu-header{color:var(--heat-js-color-white);font-weight:var(--heat-js-title-bold-weight);padding:var(--heat-js-spacing);padding-right:calc(var(--heat-js-spacing) * 3);text-align:left;width:100%;font-size:var(--heat-js-spacing-font-size)!important;cursor:default}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);padding:var(--heat-js-spacing);padding-right:calc(var(--heat-js-spacing) * 3);padding-left:calc(var(--heat-js-spacing) * 3);text-align:left;width:100%;transition:var(--heat-js-transition);font-size:var(--heat-js-spacing-font-size)!important;position:relative}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item::before{content:"";position:absolute;left:var(--heat-js-spacing);top:50%;transform:translate(0,-50%);border-radius:50%;width:8px;height:8px;background-color:var(--heat-js-color-white)}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):active{opacity:0.5!important}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-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-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):hover::before{background-color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item-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 div.title div.titles-menu-container div.titles-menu div.title-menu-item-active::before{background-color:var(--heat-js-title-text-color-hover)}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-menu-container{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-menu-container{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-menu-container div.years-menu{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-menu-container div.years-menu div.year-menu-item{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-menu-container div.years-menu div.year-menu-item:not(.year-menu-item-active):active{opacity:0.5!important}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:not(.year-menu-item-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-menu-container div.years-menu div.year-menu-item:last-child{border-bottom:none}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item-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-menu-container div.years-menu div.year-menu-item-current{font-style:italic;font-weight:var(--heat-js-text-bold-weight-active)}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.days-contents{display:flex;overflow:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.days-contents div.no-days-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.days-contents div.days{display:flex;flex-direction:row}div.heat-js div.days-contents div.days 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.days-contents div.days div.y-labels{display:block}}div.heat-js div.days-contents div.days div.y-labels div.label-0,div.heat-js div.days-contents div.days div.y-labels div.label-25,div.heat-js div.days-contents div.days div.y-labels div.label-50,div.heat-js div.days-contents div.days div.y-labels div.label-75,div.heat-js div.days-contents div.days 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.days-contents div.days div.y-labels div.label-0{top:0}div.heat-js div.days-contents div.days div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.days-contents div.days div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.days-contents div.days div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.days-contents div.days div.y-labels div.label-100{bottom:0}div.heat-js div.days-contents div.days div.day-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.days-contents div.days div.day-lines div.day-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.days-contents div.days div.day-lines div.day-line-number div.count{position:absolute;top:calc(var(--heat-js-spacing) / 2);left:50%;transform:translateX(-50%);color:var(--heat-js-view-days-text-color)}div.heat-js div.days-contents div.days 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-view-days-background-color);border:var(--heat-js-border-size) solid var(--heat-js-view-days-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.days-contents div.days div.day-lines div.day-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.days-contents div.days div.day-lines div.day-line:last-child{margin-right:0}div.heat-js div.days-contents div.days div.day-lines div.day-line:not(.no-hover):hover{cursor:pointer;opacity:var(--heat-js-day-opacity-hover)}div.heat-js div.days-contents div.day-names{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.days-contents div.day-names div.day-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;margin-right:var(--heat-js-spacing)}@media (min-width:768px){div.heat-js div.days-contents div.day-names div.day-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.days-contents div.day-names div.day-name:last-child{margin-right:0}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;margin-right:var(--heat-js-spacing)}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics-ranges div.range-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.statistics-contents div.statistics-ranges div.range-name:last-child{margin-right:0}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 label.checkbox{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;display:inline-block;position:relative;padding-left:20px;padding-top:1px;padding-bottom:2px;color:var(--heat-js-color-white)}div.heat-js label.checkbox input{display:none!important}div.heat-js label.checkbox input:checked~span.check-mark{background-color:var(--heat-js-checkbox-background-color-checked);border:var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color-checked)}div.heat-js label.checkbox input:checked~span.check-mark::before{display:block}div.heat-js label.checkbox input:disabled~span.check-mark,div.heat-js label.checkbox input:disabled~span.text{opacity:.5}div.heat-js label.checkbox input:disabled~span.check-mark{border:var(--heat-js-border-size) solid var(--heat-js-color-black)!important}div.heat-js label.checkbox span.check-mark{position:absolute;top:1px;left:0;height:15px;width:15px;background-color:var(--heat-js-checkbox-background-color);border-radius:var(--heat-js-border-control-radius);border:var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color);transition:var(--heat-js-transition)}div.heat-js label.checkbox span.check-mark::before{content:"";transform:rotate(45deg);position:absolute;display:none;left:4.5px;top:1px;width:6px;height:11px;border:solid var(--heat-js-color-black);border-width:0 3px 3px 0}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 4c4d295d..28cdd57c 100644
--- a/dist/heat.min.js
+++ b/dist/heat.min.js
@@ -1,90 +1,92 @@
-/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */
-(function(){function Da(){for(var a=h.domElementTypes,b=a.length,d=0;d
c;c++)S(a.views.map.daysToShow,c+1)&&u(f,"div","day-name",g&&0!==c%3?q.space:h.dayNames[c]);a.views.map.showDaysInReverseOrder&&R(f)}f=n(e,"div","months");e=ma(a);for(g=0;12>g;g++)if(ba(a.views.map.monthsToShow,g)){c=n(f,"div","month");var t=
-n(c,"div","day-columns");var y=ca(l,g),E=n(t,"div","day-column"),B=!1,F=na(new Date(l,g,1)),G=1;y+=F;for(var H=0;H=F?B=!0:S(a.views.map.daysToShow,G)&&n(E,"div","day-disabled");if(B){var L=null;S(a.views.map.daysToShow,G)&&(L=Xa(a,E,H-F,g,l,e));if(0===(H+1)%7&&(a.views.map.showDaysInReverseOrder&&R(E),E=n(t,"div","day-column"),G=0,!w(da)&&w(L))){var Ya=fa(L,"margin-left",!0),Za=fa(L,"margin-right",!0);da=L.offsetWidth+Ya+Za}}G++}a.views.map.showMonthNames&&(E=c.offsetWidth,y=a.views.map.placeMonthNamesOnTheBottom?
-u(c,"div","month-name-bottom",h.monthNames[g]):u(c,"div","month-name",h.monthNames[g],t),w(y)&&(y.style.width=a.views.map.showMonthDayGaps?E+"px":E-da+"px"));b&&w(da)&&(0y;y++)for(E=ca(a.currentView.year,y),B=0;BF;F++)for(y=ca(a.currentView.year,F),E=0;Ec;c++)S(a.views.map.daysToShow,c+1)&&u(f,"div","day-name",g&&0!==c%3?q.space:h.dayNames[c]);a.views.map.showDaysInReverseOrder&&T(f)}f=n(e,"div","months");e=na(a);for(g=0;12>g;g++)if(V(a.views.map.monthsToShow,g)){c=n(f,"div","month");var t=n(c,
+"div","day-columns");var y=da(l,g),E=n(t,"div","day-column"),B=!1,F=oa(new Date(l,g,1)),G=1;y+=F;for(var H=0;H=F?B=!0:S(a.views.map.daysToShow,G)&&n(E,"div","day-disabled");if(B){var K=null;S(a.views.map.daysToShow,G)&&(K=Xa(a,E,H-F,g,l,e));if(0===(H+1)%7&&(a.views.map.showDaysInReverseOrder&&T(E),E=n(t,"div","day-column"),G=0,!w(ea)&&w(K))){var Ya=ha(K,"margin-left",!0),Za=ha(K,"margin-right",!0);ea=K.offsetWidth+Ya+Za}}G++}a.views.map.showMonthNames&&(E=c.offsetWidth,y=a.views.map.placeMonthNamesOnTheBottom?
+u(c,"div","month-name-bottom",h.monthNames[g]):u(c,"div","month-name",h.monthNames[g],t),w(y)&&(y.style.width=a.views.map.showMonthDayGaps?E+"px":E-ea+"px"));b&&w(ea)&&(0y;y++)for(E=da(a.currentView.year,y),B=0;BF;F++)for(y=da(a.currentView.year,F),E=0;Ey;y++)a.currentView.dayCheckBoxes[y].checked&&g.push(y+1);for(y=0;12>y;y++)a.currentView.monthCheckBoxes[y].checked&&l.push(y+1);1<=g.length&&(1===a.currentView.view?
a.views.map.daysToShow=g:a.views.chart.enabled&&2===a.currentView.view?a.views.chart.daysToShow=g:a.views.days.enabled&&3===a.currentView.view?a.views.days.daysToShow=g:a.views.statistics.enabled&&4===a.currentView.view?a.views.statistics.daysToShow=g:a.views.map.daysToShow=g,t=!0);1<=l.length&&(1===a.currentView.view?a.views.map.monthsToShow=l:a.views.chart.enabled&&2===a.currentView.view?a.views.chart.monthsToShow=l:a.views.days.enabled&&3===a.currentView.view?a.views.days.monthsToShow=l:a.views.statistics.enabled&&
-4===a.currentView.view?a.views.statistics.monthsToShow=l:a.views.map.monthsToShow=l,t=!0);t?(A(a),z(a.onOptionsUpdate,a.currentView.element,a)):aa(a)};for(var f=0;7>f;f++)a.currentView.dayCheckBoxes[f]=Aa(e,h.dayNames[f]).input;for(e=0;7>e;e++)a.currentView.monthCheckBoxes[e]=Aa(b,h.monthNames[e]).input;for(e=7;12>e;e++)a.currentView.monthCheckBoxes[e]=Aa(d,h.monthNames[e]).input;V(c,a,h.closeToolTipText)}function Ia(a,b){var d=(b=m(b,!0))?K.addEventListener:K.removeEventListener;(b?C.addEventListener:
-C.removeEventListener)("mousemove",function(){aa(a)});d("scroll",function(){aa(a)})}function V(a,b,d){null!==a&&(a.onmousemove=function(c){cb(c,b,d)})}function cb(a,b,d){ha(a);aa(b);b.currentView.tooltipTimer=setTimeout(function(){b.currentView.tooltip.innerHTML=d;b.currentView.tooltip.style.display="block";var c=b.currentView.tooltip,e=a.pageX,f=a.pageY;var g=K.documentElement;var l=(C.pageXOffset||g.scrollLeft)-(g.clientLeft||0);g=(C.pageYOffset||g.scrollTop)-(g.clientTop||0);c.style.display="block";
-e+c.offsetWidth>C.innerWidth?e-=c.offsetWidth:e++;f+c.offsetHeight>C.innerHeight?f-=c.offsetHeight:f++;ef;f++)a.currentView.dayCheckBoxes[f].checked=S(c,f+1);for(c=0;12>c;c++)a.currentView.monthCheckBoxes[c].checked=ba(e,c);aa(a)}),b=u(b,
-"button","next",h.nextButtonText),b.onclick=function(){ia(a)},0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]&&(b.disabled=!0))}}function db(a,b){b=n(b,"div","titles-menu-container");b=n(b,"div","titles-menu");u(b,"div","title-menu-header",h.dataText+q.colon);var d=u(b,"div","title-menu-item",h.mapText);pa(a,d,1,"map");a.views.chart.enabled&&(d=u(b,"div","title-menu-item",h.chartText),pa(a,d,2,"chart"));a.views.days.enabled&&
-(u(b,"div","title-menu-header",h.yearText+q.colon),d=u(b,"div","title-menu-item",h.daysText),pa(a,d,3,"days"));a.views.statistics.enabled&&(u(b,"div","title-menu-header",h.statisticsText+q.colon),b=u(b,"div","title-menu-item",h.colorRangesText),pa(a,b,4,"statistics"))}function pa(a,b,d,c){a.currentView.view===d?x(b,"title-menu-item-active"):b.onclick=function(){a.currentView.view=d;z(a.onViewSwitch,c);A(a,!1,!0)}}function fb(a){n(a.currentView.yearText,"div","down-arrow");var b=n(a.currentView.yearText,
-"div","years-menu-container"),d=n(b,"div","years-menu"),c=(new Date).getFullYear(),e=null;b.style.display="block";b.style.visibility="hidden";for(var f=c-a.extraSelectionYears;fg;g++)if(ba(a.views.chart.monthsToShow,g)){y=ca(l,g);var E=1;d++;for(var B=0;Bl;l++)f(l);F.style.width=e.offsetWidth+"px";e=n(F,"div","month-name-space");e.style.height=F.offsetHeight+"px";e.style.width=t+"px"}a.keepScrollPositions&&(a.currentView.chartContents.scrollLeft=a.currentView.chartContentsScrollLeft)}}function ib(a,b,d,c,e,f,g){var l=new Date(e,
-c,d);a=n(a,"div","day-line");var t=M(b)[N(l)];t=X(t,0);La(b,a,l,t);b.views.chart.showLineNumbers&&0=g&&(a.style.visibility="hidden");Q(b.onDayClick)?a.onclick=function(){z(b.onDayClick,l,t)}:x(a,"no-hover");f=za(b,f,t,l);w(f)&&qa(b,f.id)&&(v(f.chartCssClassName)?x(a,f.chartCssClassName):x(a,f.cssClassName))}function hb(a){for(var b=0,d=M(a),c=0;12>c;c++)for(var e=ca(a.currentView.year,c),f=0;f=e&&(a.style.visibility="hidden");V(a,c,d.toString());Q(c.onWeekDayClick)?a.onclick=function(){z(c.onWeekDayClick,b,d)}:x(a,"no-hover");c.views.days.showDayNumbers&&0=a&&(b.style.visibility="hidden");V(b,c,d.toString());
-c.views.statistics.showRangeNumbers&&0ja.notFound}function S(a,b){return a.indexOf(b)>ja.notFound}function Sa(a){var b=[];if(a.showOnlyDataForYearsAvailable){a=M(a);for(var d in a)if(a.hasOwnProperty(d)){var c=parseInt(d.split(q.dash)[0]);b.indexOf(c)===ja.notFound&&b.push(c)}}return b=b.sort(function(e,f){return e-f})}function W(a,b){return a.yearsToHide.indexOf(b)===ja.notFound&&(0===a.currentView.yearsAvailable.length||
-a.currentView.yearsAvailable.indexOf(b)>ja.notFound)}function Ta(a){a.currentView.isInFetchMode&&(w(a.currentView.isInFetchModeTimer)||Oa(a),w(a.currentView.isInFetchModeTimer)||(a.currentView.isInFetchModeTimer=setInterval(function(){Oa(a);A(a)},a.dataFetchDelay)))}function Oa(a){var b=a.currentView.element.id,d=z(a.onDataFetch,b);if(J(d)){ya(b,a,!1);for(var c in d)d.hasOwnProperty(c)&&(k[b].type[h.unknownTrendText].hasOwnProperty(c)||(k[b].type[h.unknownTrendText][c]=0),k[b].type[h.unknownTrendText][c]+=
-d[c])}}function qa(a,b){var d=!1;if("HOLIDAY"===b)d=!0;else for(var c=a.colorRanges.length,e=0;e=f.minimum)e=
-f;else break}return e}function Ja(a,b){for(var d=a.length,c=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("");d=f.join(q.newLine)}else if("txt"===b){g=ra(a);e=[];for(f in g)g.hasOwnProperty(f)&&e.push(f+q.colon+q.space+g[f].toString());d=e.join(q.newLine)}v(d)&&(g=n(K.body,"a"),g.style.display="none",g.setAttribute("target","_blank"),g.setAttribute("href","data:"+
-c+";charset=utf-8,"+encodeURIComponent(d)),c=g.setAttribute,f=new Date,e=T(f.getDate())+q.dash+T(f.getMonth()+1)+q.dash+f.getFullYear(),f=T(f.getHours())+q.dash+T(f.getMinutes()),d=q.empty,a.currentView.type!==h.unknownTrendText&&(d=a.currentView.type.toLowerCase().replace(q.space,q.underscore)+q.underscore),e=d+e+q.underscore+f+"."+a.exportType.toLowerCase(),c.call(g,"download",e),g.click(),K.body.removeChild(g),z(a.onExport,a.currentView.element))}function ra(a){var b={},d=M(a);if(a.exportOnlyYearBeingViewed)for(var c=
-0;12>c;c++)for(var e=ca(a.currentView.year,c),f=0;fa.getDay()-1?6:a.getDay()-1}function w(a){return null!==a&&void 0!==a&&a!==q.empty}function J(a){return w(a)&&"object"===typeof a}function Ca(a){return w(a)&&"boolean"===typeof a}function v(a){return w(a)&&"string"===typeof a}function Q(a){return w(a)&&"function"===typeof a}function va(a){return w(a)&&"number"===typeof a}function Y(a){return J(a)&&a instanceof Array}function wa(a){return J(a)&&a instanceof Date}function lb(a){a=a.toLowerCase();
-var b="text"===a;ea.hasOwnProperty(a)||(ea[a]=b?K.createTextNode(q.empty):K.createElement(a));return ea[a].cloneNode(!1)}function n(a,b,d,c){b=b.toLowerCase();var e="text"===b;ea.hasOwnProperty(b)||(ea[b]=e?K.createTextNode(q.empty):K.createElement(b));b=ea[b].cloneNode(!1);w(d)&&(b.className=d);w(c)?a.insertBefore(b,c):a.appendChild(b);return b}function u(a,b,d,c,e){a=n(a,b,d,e);a.innerHTML=c;return a}function fa(a,b,d){var c=null;d=m(d,!1);C.getComputedStyle?c=K.defaultView.getComputedStyle(a,null).getPropertyValue(b):
-a.currentStyle&&(c=a.currentStyle[b]);d&&(c=parseFloat(c,10));return c}function x(a,b){a.className+=q.space+b;a.className=a.className.trim()}function ha(a){a.preventDefault();a.cancelBubble=!0}function R(a){for(var b=a.children,d=b.length-1;d--;)a.appendChild(b[d])}function Aa(a,b,d,c){a=n(a,"div");a=n(a,"label","checkbox");var e=n(a,"input");e.type="checkbox";w(c)&&(e.onclick=c);w(d)&&(e.checked=d);n(a,"span","check-mark");u(a,"span","text",b);return{input:e,label:a}}function z(a){var b=null;Q(a)&&
-(b=a.apply(null,[].slice.call(arguments,1)));return b}function r(a,b){return v(a)?a:b}function m(a,b){return Ca(a)?a:b}function D(a,b){return Q(a)?a:b}function X(a,b){return va(a)?a:b}function xa(a){var b=!0,d=null;try{v(a)&&(d=ka.parse(a))}catch(c){try{d=eval("("+a+")"),Q(d)&&(d=d())}catch(e){h.safeMode||(console.error(h.objectErrorText.replace("{{error_1}}",c.message).replace("{{error_2}}",e.message)),b=!1),d=null}}return{parsed:b,result:d}}function Z(){for(var a=[],b=0;32>b;b++){8!==b&&12!==b&&
-16!==b&&20!==b||a.push(q.dash);var d=I.floor(16*I.random()).toString(16);a.push(d)}return a.join(q.empty)}function T(a){a=a.toString();return 1===a.length?q.zero+a:a}function Ha(a,b){return a.substring(0,b.length).toLowerCase()===b.toLowerCase()}function N(a){return a.getFullYear()+q.dash+T(a.getMonth()+1)+q.dash+T(a.getDate())}function Ba(a,b){b=m(b,!0);var d=!0,c=a.currentView.year;for(c--;!W(a,c);){if(0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]){d=!1;break}c++}d&&(a.currentView.year=c,A(a),b&&z(a.onBackYear,a.currentView.year))}function Qa(a){a.currentView.element.innerHTML=q.empty;var b=a.currentView.element;b.className=b.className.replace("heat-js",q.empty);b.className=b.className.trim();
-Ia(a,!1);K.body.removeChild(a.currentView.tooltip);a.currentView.isInFetchMode&&w(a.currentView.isInFetchModeTimer)&&clearInterval(a.currentView.isInFetchModeTimer);z(a.onDestroy,a.currentView.element)}function Ra(a){h=J(a)?a:{};h.safeMode=m(h.safeMode,!0);a=h;var b=h.domElementTypes,d=["*"];v(b)?(b=b.split(q.space),0===b.length&&(b=d)):b=Y(b)?b:d;a.domElementTypes=b;h.stText=r(h.stText,"st");h.ndText=r(h.ndText,"nd");h.rdText=r(h.rdText,"rd");h.thText=r(h.thText,"th");h.backButtonText=r(h.backButtonText,
-"Back");h.nextButtonText=r(h.nextButtonText,"Next");h.refreshButtonText=r(h.refreshButtonText,"Refresh");h.exportButtonText=r(h.exportButtonText,"Export");h.lessText=r(h.lessText,"Less");h.moreText=r(h.moreText,"More");h.dateText=r(h.dateText,"Date");h.countText=r(h.countText,"Count");h.mapText=r(h.mapText,"Map");h.chartText=r(h.chartText,"Chart");h.noChartDataMessage=r(h.noChartDataMessage,"There is currently no data to view.");h.statisticsText=r(h.statisticsText,"Statistics");h.noStatisticsDataMessage=
-r(h.noStatisticsDataMessage,"There are currently no statistics to view.");h.unknownTrendText=r(h.unknownTrendText,"Unknown");h.importButtonText=r(h.importButtonText,"Import");h.noMapDataMessage=r(h.noMapDataMessage,"There is currently no data to view.");h.objectErrorText=r(h.objectErrorText,"Errors in object: {{error_1}}, {{error_2}}");h.attributeNotValidErrorText=r(h.attributeNotValidErrorText,"The attribute '{{attribute_name}}' is not a valid object.");h.attributeNotSetErrorText=r(h.attributeNotSetErrorText,
-"The attribute '{{attribute_name}}' has not been set correctly.");h.closeToolTipText=r(h.closeToolTipText,"Close");h.configurationToolTipText=r(h.configurationToolTipText,"Configuration");h.configurationTitleText=r(h.configurationTitleText,"Configuration");h.visibleMonthsText=r(h.visibleMonthsText,"Visible Months");h.visibleDaysText=r(h.visibleDaysText,"Visible Days");h.dataText=r(h.dataText,"Data");h.colorRangesText=r(h.colorRangesText,"Color Ranges");h.yearText=r(h.yearText,"Year");h.daysText=r(h.daysText,
-"Days");h.noDaysDataMessage=r(h.noDaysDataMessage,"There are currently no days to view.");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=va(b)?b:1;return!Y(a)||a.lengthd&&(a.currentView.year=d,W(a,a.currentView.year)?A(a):Ba(a,!1),z(a.onSetYear,
-a.currentView.year))}return p};p.moveToPreviousYear=function(a){v(a)&&k.hasOwnProperty(a)&&Ba(k[a].options);return p};p.moveToNextYear=function(a){v(a)&&k.hasOwnProperty(a)&&ia(k[a].options);return p};p.moveToCurrentYear=function(a){v(a)&&k.hasOwnProperty(a)&&(a=k[a].options,a.currentView.year=(new Date).getFullYear(),W(a,a.currentView.year)?A(a):ia(a,!1),z(a.onSetYear,a.currentView.year));return p};p.getYear=function(a){var b=null;v(a)&&k.hasOwnProperty(a)&&(b=k[a].options.currentView.year);return b};
-p.render=function(a,b){J(a)&&J(b)&&Ea(Fa(b,a));return p};p.renderAll=function(){Da();return p};p.switchView=function(a,b){if(v(a)&&v(b)&&k.hasOwnProperty(a)){a=k[a].options;var d=null;"map"===b.toLowerCase()?d=1:"chart"===b.toLowerCase()?d=2:"days"===b.toLowerCase()?d=3:"statistics"===b.toLowerCase()&&(d=4);va(d)&&(a.currentView.view=d,z(a.onViewSwitch,b),A(a,!1,!0))}return p};p.switchType=function(a,b){v(a)&&v(b)&&k.hasOwnProperty(a)&&k[a].type.hasOwnProperty(b)&&(a=k[a].options,a.currentView.type!==
-b&&(a.currentView.type=b,z(a.onTypeSwitch,b),A(a)));return p};p.updateOptions=function(a,b){if(v(a)&&J(b)&&k.hasOwnProperty(a)){a=k[a].options;b=Ga(b);var d=!1,c;for(c in b)b.hasOwnProperty(c)&&a.hasOwnProperty(c)&&a[c]!==b[c]&&(a[c]=b[c],d=!0);d&&(A(a,!0),z(a.onRefresh,a.currentView.element),z(a.onOptionsUpdate,a.currentView.element,a))}return p};p.destroyAll=function(){for(var a in k)k.hasOwnProperty(a)&&Qa(k[a].options);k={};return p};p.destroy=function(a){v(a)&&k.hasOwnProperty(a)&&(Qa(k[a].options),
-delete k[a]);return p};p.setConfiguration=function(a,b){if(J(a)){var d=!1,c;for(c in a)a.hasOwnProperty(c)&&h.hasOwnProperty(c)&&h[c]!==a[c]&&(h[c]=a[c],d=!0);d&&(b=m(b,!0),Ra(h),b&&p.refreshAll())}return p};p.getIds=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(b);return a};p.getVersion=function(){return"3.0.0"};(function(a,b,d,c){K=a;C=b;I=d;ka=c;Ra();K.addEventListener("DOMContentLoaded",function(){Da()});C.addEventListener("pagehide",function(){for(var e in k)if(k.hasOwnProperty(e)){var f=
+4===a.currentView.view?a.views.statistics.monthsToShow=l:a.views.map.monthsToShow=l,t=!0);t?(A(a),z(a.events.onOptionsUpdate,a.currentView.element,a)):ca(a)};for(var f=0;7>f;f++)a.currentView.dayCheckBoxes[f]=Ba(e,h.dayNames[f]).input;for(e=0;7>e;e++)a.currentView.monthCheckBoxes[e]=Ba(b,h.monthNames[e]).input;for(e=7;12>e;e++)a.currentView.monthCheckBoxes[e]=Ba(d,h.monthNames[e]).input;X(c,a,h.closeToolTipText)}function Ia(a,b){var d=(b=m(b,!0))?J.addEventListener:J.removeEventListener;(b?C.addEventListener:
+C.removeEventListener)("mousemove",function(){ca(a)});d("scroll",function(){ca(a)})}function X(a,b,d){null!==a&&(a.onmousemove=function(c){cb(c,b,d)})}function cb(a,b,d){ia(a);ca(b);b.currentView.tooltipTimer=setTimeout(function(){b.currentView.tooltip.innerHTML=d;b.currentView.tooltip.style.display="block";var c=b.currentView.tooltip,e=a.pageX,f=a.pageY;var g=J.documentElement;var l=(C.pageXOffset||g.scrollLeft)-(g.clientLeft||0);g=(C.pageYOffset||g.scrollTop)-(g.clientTop||0);c.style.display="block";
+e+c.offsetWidth>C.innerWidth?e-=c.offsetWidth:e++;f+c.offsetHeight>C.innerHeight?f-=c.offsetHeight:f++;ef;f++)a.currentView.dayCheckBoxes[f].checked=S(c,f+1);for(c=0;12>c;c++)a.currentView.monthCheckBoxes[c].checked=
+V(e,c);ca(a)}),b=u(b,"button","next",h.nextButtonText),b.onclick=function(){ja(a)},0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]&&(b.disabled=!0))}}function db(a,b){b=n(b,"div","titles-menu-container");b=n(b,"div","titles-menu");u(b,"div","title-menu-header",h.dataText+q.colon);var d=u(b,"div","title-menu-item",h.mapText);qa(a,d,1,"map");a.views.chart.enabled&&(d=u(b,"div","title-menu-item",h.chartText),qa(a,d,2,"chart"));
+a.views.days.enabled&&(u(b,"div","title-menu-header",h.yearText+q.colon),d=u(b,"div","title-menu-item",h.daysText),qa(a,d,3,"days"));a.views.statistics.enabled&&(u(b,"div","title-menu-header",h.statisticsText+q.colon),b=u(b,"div","title-menu-item",h.colorRangesText),qa(a,b,4,"statistics"))}function qa(a,b,d,c){a.currentView.view===d?x(b,"title-menu-item-active"):b.onclick=function(){a.currentView.view=d;z(a.events.onViewSwitch,c);A(a,!1,!0)}}function fb(a){n(a.currentView.yearText,"div","down-arrow");
+var b=n(a.currentView.yearText,"div","years-menu-container"),d=n(b,"div","years-menu"),c=(new Date).getFullYear(),e=null;b.style.display="block";b.style.visibility="hidden";for(var f=c-a.title.extraSelectionYears;fg;g++)if(V(a.views.chart.monthsToShow,g)){y=da(l,g);var E=1;d++;for(var B=0;Bl;l++)f(l);F.style.width=e.offsetWidth+"px";e=n(F,"div","month-name-space");e.style.height=F.offsetHeight+"px";e.style.width=t+"px"}a.views.chart.keepScrollPositions&&
+(a.currentView.chartContents.scrollLeft=a.currentView.chartContentsScrollLeft)}}function ib(a,b,d,c,e,f,g){var l=new Date(e,c,d);a=n(a,"div","day-line");var t=N(b)[O(l)];t=Z(t,0);La(b,a,l,t);b.views.chart.showLineNumbers&&0=g&&(a.style.visibility="hidden");R(b.events.onDayClick)?a.onclick=function(){z(b.events.onDayClick,l,t)}:x(a,"no-hover");f=Aa(b,f,t,l);w(f)&&ra(b,f.id)&&(v(f.chartCssClassName)?x(a,f.chartCssClassName):
+x(a,f.cssClassName))}function hb(a){for(var b=0,d=N(a),c=0;12>c;c++)for(var e=da(a.currentView.year,c),f=0;f=e&&(a.style.visibility="hidden");X(a,c,d.toString());R(c.events.onWeekDayClick)?a.onclick=function(){z(c.events.onWeekDayClick,b,d)}:x(a,"no-hover");
+c.views.days.showDayNumbers&&0=a&&(b.style.visibility="hidden");X(b,c,d.toString());c.views.statistics.showRangeNumbers&&0ka.notFound}function S(a,b){return a.indexOf(b)>ka.notFound}function Sa(a){var b=[];if(a.showOnlyDataForYearsAvailable){a=N(a);for(var d in a)if(a.hasOwnProperty(d)){var c=
+parseInt(d.split(q.dash)[0]);b.indexOf(c)===ka.notFound&&b.push(c)}}return b=b.sort(function(e,f){return e-f})}function Y(a,b){return a.yearsToHide.indexOf(b)===ka.notFound&&(0===a.currentView.yearsAvailable.length||a.currentView.yearsAvailable.indexOf(b)>ka.notFound)}function Ta(a){a.currentView.isInFetchMode&&(w(a.currentView.isInFetchModeTimer)||Oa(a),w(a.currentView.isInFetchModeTimer)||(a.currentView.isInFetchModeTimer=setInterval(function(){Oa(a);A(a)},a.dataFetchDelay)))}function Oa(a){var b=
+a.currentView.element.id,d=z(a.events.onDataFetch,b);if(L(d)){za(b,a,!1);for(var c in d)d.hasOwnProperty(c)&&(k[b].type[h.unknownTrendText].hasOwnProperty(c)||(k[b].type[h.unknownTrendText][c]=0),k[b].type[h.unknownTrendText][c]+=d[c])}}function ra(a,b){var d=!1;if("HOLIDAY"===b)d=!0;else for(var c=a.colorRanges.length,e=0;e=f.minimum)e=f;else break}return e}function Ja(a,b){for(var d=a.length,c=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("");d=f.join(q.newLine)}else if("txt"===
+b){g=sa(a);e=[];for(f in g)g.hasOwnProperty(f)&&e.push(f+q.colon+q.space+g[f].toString());d=e.join(q.newLine)}v(d)&&(g=n(J.body,"a"),g.style.display="none",g.setAttribute("target","_blank"),g.setAttribute("href","data:"+c+";charset=utf-8,"+encodeURIComponent(d)),c=g.setAttribute,f=new Date,e=U(f.getDate())+q.dash+U(f.getMonth()+1)+q.dash+f.getFullYear(),f=U(f.getHours())+q.dash+U(f.getMinutes()),d=q.empty,a.currentView.type!==h.unknownTrendText&&(d=a.currentView.type.toLowerCase().replace(q.space,
+q.underscore)+q.underscore),e=d+e+q.underscore+f+"."+a.exportType.toLowerCase(),c.call(g,"download",e),g.click(),J.body.removeChild(g),z(a.events.onExport,a.currentView.element))}function sa(a){var b={},d=N(a);if(a.exportOnlyYearBeingViewed)for(var c=0;12>c;c++)for(var e=da(a.currentView.year,c),f=0;f
+a.getDay()-1?6:a.getDay()-1}function w(a){return null!==a&&void 0!==a&&a!==q.empty}function L(a){return w(a)&&"object"===typeof a}function v(a){return w(a)&&"string"===typeof a}function R(a){return w(a)&&"function"===typeof a}function wa(a){return w(a)&&"number"===typeof a}function aa(a){return L(a)&&a instanceof Array}function xa(a){return L(a)&&a instanceof Date}function lb(a){a=a.toLowerCase();var b="text"===a;fa.hasOwnProperty(a)||(fa[a]=b?J.createTextNode(q.empty):J.createElement(a));return fa[a].cloneNode(!1)}
+function n(a,b,d,c){b=b.toLowerCase();var e="text"===b;fa.hasOwnProperty(b)||(fa[b]=e?J.createTextNode(q.empty):J.createElement(b));b=fa[b].cloneNode(!1);w(d)&&(b.className=d);w(c)?a.insertBefore(b,c):a.appendChild(b);return b}function u(a,b,d,c,e){a=n(a,b,d,e);a.innerHTML=c;return a}function ha(a,b,d){var c=null;d=m(d,!1);C.getComputedStyle?c=J.defaultView.getComputedStyle(a,null).getPropertyValue(b):a.currentStyle&&(c=a.currentStyle[b]);d&&(c=parseFloat(c,10));return c}function x(a,b){a.className+=
+q.space+b;a.className=a.className.trim()}function ia(a){a.preventDefault();a.cancelBubble=!0}function T(a){for(var b=a.children,d=b.length-1;d--;)a.appendChild(b[d])}function Ba(a,b,d,c){a=n(a,"div");a=n(a,"label","checkbox");var e=n(a,"input");e.type="checkbox";w(c)&&(e.onclick=c);w(d)&&(e.checked=d);n(a,"span","check-mark");u(a,"span","text",b);return{input:e,label:a}}function z(a){var b=null;R(a)&&(b=a.apply(null,[].slice.call(arguments,1)));return b}function r(a,b){return v(a)?a:b}function m(a,
+b){return w(a)&&"boolean"===typeof a?a:b}function Z(a,b){return wa(a)?a:b}function D(a,b){return R(a)?a:b}function M(a,b){return L(a)?a:b}function ya(a){var b=!0,d=null;try{v(a)&&(d=la.parse(a))}catch(c){try{d=eval("("+a+")"),R(d)&&(d=d())}catch(e){h.safeMode||(console.error(h.objectErrorText.replace("{{error_1}}",c.message).replace("{{error_2}}",e.message)),b=!1),d=null}}return{parsed:b,result:d}}function ba(){for(var a=[],b=0;32>b;b++){8!==b&&12!==b&&16!==b&&20!==b||a.push(q.dash);var d=I.floor(16*
+I.random()).toString(16);a.push(d)}return a.join(q.empty)}function U(a){a=a.toString();return 1===a.length?q.zero+a:a}function Ha(a,b){return a.substring(0,b.length).toLowerCase()===b.toLowerCase()}function O(a){return a.getFullYear()+q.dash+U(a.getMonth()+1)+q.dash+U(a.getDate())}function Ca(a,b){b=m(b,!0);var d=!0,c=a.currentView.year;for(c--;!Y(a,c);){if(0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]){d=!1;break}c++}d&&(a.currentView.year=c,A(a),b&&z(a.events.onBackYear,a.currentView.year))}function Qa(a){a.currentView.element.innerHTML=q.empty;var b=a.currentView.element;b.className=b.className.replace("heat-js",q.empty);b.className=b.className.trim();Ia(a,!1);J.body.removeChild(a.currentView.tooltip);
+a.currentView.isInFetchMode&&w(a.currentView.isInFetchModeTimer)&&clearInterval(a.currentView.isInFetchModeTimer);z(a.events.onDestroy,a.currentView.element)}function Ra(a){h=L(a)?a:{};h.safeMode=m(h.safeMode,!0);a=h;var b=h.domElementTypes,d=["*"];v(b)?(b=b.split(q.space),0===b.length&&(b=d)):b=aa(b)?b:d;a.domElementTypes=b;h.stText=r(h.stText,"st");h.ndText=r(h.ndText,"nd");h.rdText=r(h.rdText,"rd");h.thText=r(h.thText,"th");h.backButtonText=r(h.backButtonText,"Back");h.nextButtonText=r(h.nextButtonText,
+"Next");h.refreshButtonText=r(h.refreshButtonText,"Refresh");h.exportButtonText=r(h.exportButtonText,"Export");h.lessText=r(h.lessText,"Less");h.moreText=r(h.moreText,"More");h.dateText=r(h.dateText,"Date");h.countText=r(h.countText,"Count");h.mapText=r(h.mapText,"Map");h.chartText=r(h.chartText,"Chart");h.noChartDataMessage=r(h.noChartDataMessage,"There is currently no data to view.");h.statisticsText=r(h.statisticsText,"Statistics");h.noStatisticsDataMessage=r(h.noStatisticsDataMessage,"There are currently no statistics to view.");
+h.unknownTrendText=r(h.unknownTrendText,"Unknown");h.importButtonText=r(h.importButtonText,"Import");h.noMapDataMessage=r(h.noMapDataMessage,"There is currently no data to view.");h.objectErrorText=r(h.objectErrorText,"Errors in object: {{error_1}}, {{error_2}}");h.attributeNotValidErrorText=r(h.attributeNotValidErrorText,"The attribute '{{attribute_name}}' is not a valid object.");h.attributeNotSetErrorText=r(h.attributeNotSetErrorText,"The attribute '{{attribute_name}}' has not been set correctly.");
+h.closeToolTipText=r(h.closeToolTipText,"Close");h.configurationToolTipText=r(h.configurationToolTipText,"Configuration");h.configurationTitleText=r(h.configurationTitleText,"Configuration");h.visibleMonthsText=r(h.visibleMonthsText,"Visible Months");h.visibleDaysText=r(h.visibleDaysText,"Visible Days");h.dataText=r(h.dataText,"Data");h.colorRangesText=r(h.colorRangesText,"Color Ranges");h.yearText=r(h.yearText,"Year");h.daysText=r(h.daysText,"Days");h.noDaysDataMessage=r(h.noDaysDataMessage,"There are currently no days to view.");
+Q(h.monthNames,12)&&(h.monthNames="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "));Q(h.dayNames,7)&&(h.dayNames="Mon Tue Wed Thu Fri Sat Sun".split(" "))}function Q(a,b){b=wa(b)?b:1;return!aa(a)||a.lengthd&&(a.currentView.year=d,Y(a,a.currentView.year)?A(a):Ca(a,!1),z(a.events.onSetYear,
+a.currentView.year))}return p};p.moveToPreviousYear=function(a){v(a)&&k.hasOwnProperty(a)&&Ca(k[a].options);return p};p.moveToNextYear=function(a){v(a)&&k.hasOwnProperty(a)&&ja(k[a].options);return p};p.moveToCurrentYear=function(a){v(a)&&k.hasOwnProperty(a)&&(a=k[a].options,a.currentView.year=(new Date).getFullYear(),Y(a,a.currentView.year)?A(a):ja(a,!1),z(a.events.onSetYear,a.currentView.year));return p};p.getYear=function(a){var b=null;v(a)&&k.hasOwnProperty(a)&&(b=k[a].options.currentView.year);
+return b};p.render=function(a,b){L(a)&&L(b)&&Ea(Fa(b,a));return p};p.renderAll=function(){Da();return p};p.switchView=function(a,b){if(v(a)&&v(b)&&k.hasOwnProperty(a)){a=k[a].options;var d=null;"map"===b.toLowerCase()?d=1:"chart"===b.toLowerCase()?d=2:"days"===b.toLowerCase()?d=3:"statistics"===b.toLowerCase()&&(d=4);wa(d)&&(a.currentView.view=d,z(a.events.onViewSwitch,b),A(a,!1,!0))}return p};p.switchType=function(a,b){v(a)&&v(b)&&k.hasOwnProperty(a)&&k[a].type.hasOwnProperty(b)&&(a=k[a].options,
+a.currentView.type!==b&&(a.currentView.type=b,z(a.events.onTypeSwitch,b),A(a)));return p};p.updateOptions=function(a,b){if(v(a)&&L(b)&&k.hasOwnProperty(a)){a=k[a].options;b=Ga(b);var d=!1,c;for(c in b)b.hasOwnProperty(c)&&a.hasOwnProperty(c)&&a[c]!==b[c]&&(a[c]=b[c],d=!0);d&&(A(a,!0),z(a.events.onRefresh,a.currentView.element),z(a.events.onOptionsUpdate,a.currentView.element,a))}return p};p.destroyAll=function(){for(var a in k)k.hasOwnProperty(a)&&Qa(k[a].options);k={};return p};p.destroy=function(a){v(a)&&
+k.hasOwnProperty(a)&&(Qa(k[a].options),delete k[a]);return p};p.setConfiguration=function(a,b){if(L(a)){var d=!1,c;for(c in a)a.hasOwnProperty(c)&&h.hasOwnProperty(c)&&h[c]!==a[c]&&(h[c]=a[c],d=!0);d&&(b=m(b,!0),Ra(h),b&&p.refreshAll())}return p};p.getIds=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(b);return a};p.getVersion=function(){return"3.1.0"};(function(a,b,d,c){J=a;C=b;I=d;la=c;Ra();J.addEventListener("DOMContentLoaded",function(){Da()});C.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(C.$heat)||(C.$heat=p)})(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 b09fa6da..c191556a 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 2830c910..c5b93fa5 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 76ddb39c..a7e85168 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 ce518422..a7b30317 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 6d10f5ff..d94a2d0e 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 3c5797d3..29277be6 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 9097e3b3..e31c1502 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 b4428e91..f4a563f2 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 58a7612b..7ed1b65f 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 d5572986..84cc6282 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 7f044078..4fdd91d8 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 a532f0fa..6e330001 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 v3.0.0 | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 5e189db2..a8f8cf23 100644
--- a/dist/translations/heat.translations.af.js
+++ b/dist/translations/heat.translations.af.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Afrikaans | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 6ea60445..33d924be 100644
--- a/dist/translations/heat.translations.ar.js
+++ b/dist/translations/heat.translations.ar.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Arabic | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 128fcc18..78cd53f8 100644
--- a/dist/translations/heat.translations.be.js
+++ b/dist/translations/heat.translations.be.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Belarusian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 0340cb31..c4e23d84 100644
--- a/dist/translations/heat.translations.bg.js
+++ b/dist/translations/heat.translations.bg.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Bulgarian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 cf7f92fa..251753c8 100644
--- a/dist/translations/heat.translations.bn.js
+++ b/dist/translations/heat.translations.bn.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Bengali | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 95bb520c..adda4be2 100644
--- a/dist/translations/heat.translations.ca.js
+++ b/dist/translations/heat.translations.ca.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Catalan | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 b8f0b0e7..d9ca4428 100644
--- a/dist/translations/heat.translations.da.js
+++ b/dist/translations/heat.translations.da.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Danish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 1f46b495..023c9c3e 100644
--- a/dist/translations/heat.translations.de.js
+++ b/dist/translations/heat.translations.de.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - German | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 5fcf41dd..30e20294 100644
--- a/dist/translations/heat.translations.el.js
+++ b/dist/translations/heat.translations.el.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Greek | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 647c503f..959c4803 100644
--- a/dist/translations/heat.translations.en.js
+++ b/dist/translations/heat.translations.en.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - English | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 0eab179b..0a831f97 100644
--- a/dist/translations/heat.translations.eo.js
+++ b/dist/translations/heat.translations.eo.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Esperanto | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 f3ecaf80..a9777368 100644
--- a/dist/translations/heat.translations.es.js
+++ b/dist/translations/heat.translations.es.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Spanish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 cadead99..db5b047d 100644
--- a/dist/translations/heat.translations.et.js
+++ b/dist/translations/heat.translations.et.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Estonian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 beb232ea..ab3e62b0 100644
--- a/dist/translations/heat.translations.fa.js
+++ b/dist/translations/heat.translations.fa.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Farsi | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 368b195d..9683b234 100644
--- a/dist/translations/heat.translations.fi.js
+++ b/dist/translations/heat.translations.fi.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Finnish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 85e56eca..8b57f2c1 100644
--- a/dist/translations/heat.translations.fr.js
+++ b/dist/translations/heat.translations.fr.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - French | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 14dfb534..9ce8ddb5 100644
--- a/dist/translations/heat.translations.fy.js
+++ b/dist/translations/heat.translations.fy.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Frisian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 9eb44bb3..ff73c9d6 100644
--- a/dist/translations/heat.translations.ga.js
+++ b/dist/translations/heat.translations.ga.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Irish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 a05f367e..05b42d12 100644
--- a/dist/translations/heat.translations.gl.js
+++ b/dist/translations/heat.translations.gl.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Galician | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 0b3c904c..7064d953 100644
--- a/dist/translations/heat.translations.he.js
+++ b/dist/translations/heat.translations.he.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Hebrew | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 7b71b35a..b204bde9 100644
--- a/dist/translations/heat.translations.hi.js
+++ b/dist/translations/heat.translations.hi.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Hindi | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 5bb3f778..1a119f4e 100644
--- a/dist/translations/heat.translations.hu.js
+++ b/dist/translations/heat.translations.hu.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Hungarian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 0599cddf..1f2cca7d 100644
--- a/dist/translations/heat.translations.hy.js
+++ b/dist/translations/heat.translations.hy.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Armenian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 cc7d0f19..b30be0a8 100644
--- a/dist/translations/heat.translations.id.js
+++ b/dist/translations/heat.translations.id.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Indonesian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 f378e939..836a6b8a 100644
--- a/dist/translations/heat.translations.is.js
+++ b/dist/translations/heat.translations.is.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Icelandic | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 9f505a53..300a167a 100644
--- a/dist/translations/heat.translations.it.js
+++ b/dist/translations/heat.translations.it.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Italian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 aeb84724..467f9d33 100644
--- a/dist/translations/heat.translations.ja.js
+++ b/dist/translations/heat.translations.ja.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Japanese | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 a9161887..cba6d43a 100644
--- a/dist/translations/heat.translations.ka.js
+++ b/dist/translations/heat.translations.ka.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Georgian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 38b218e4..d87dae5d 100644
--- a/dist/translations/heat.translations.ko.js
+++ b/dist/translations/heat.translations.ko.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Korean | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 d0648f57..329ba1fa 100644
--- a/dist/translations/heat.translations.lb.js
+++ b/dist/translations/heat.translations.lb.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Luxembourgish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 01e401d0..ffc1689f 100644
--- a/dist/translations/heat.translations.lt.js
+++ b/dist/translations/heat.translations.lt.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Lithuanian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 bf3f2436..2f5f3630 100644
--- a/dist/translations/heat.translations.lv.js
+++ b/dist/translations/heat.translations.lv.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Latvian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 db5190e2..e7dcda82 100644
--- a/dist/translations/heat.translations.ms.js
+++ b/dist/translations/heat.translations.ms.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Malay | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 0d183c06..ae052a4f 100644
--- a/dist/translations/heat.translations.ne.js
+++ b/dist/translations/heat.translations.ne.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Nepali | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 e9a8e843..30e69853 100644
--- a/dist/translations/heat.translations.nl.js
+++ b/dist/translations/heat.translations.nl.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Dutch | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 cb5fcaf7..79a41902 100644
--- a/dist/translations/heat.translations.no.js
+++ b/dist/translations/heat.translations.no.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Norwegian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 744ee4a9..8f8f0f81 100644
--- a/dist/translations/heat.translations.pl.js
+++ b/dist/translations/heat.translations.pl.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Portuguese | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 adaf8a77..d99bec0e 100644
--- a/dist/translations/heat.translations.pt.js
+++ b/dist/translations/heat.translations.pt.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Polish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 0cf5ce26..380ee2b8 100644
--- a/dist/translations/heat.translations.ro.js
+++ b/dist/translations/heat.translations.ro.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Romanian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 5e934256..c3bd6960 100644
--- a/dist/translations/heat.translations.si.js
+++ b/dist/translations/heat.translations.si.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Sinhalese | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 2b75d389..7467bf76 100644
--- a/dist/translations/heat.translations.sk.js
+++ b/dist/translations/heat.translations.sk.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Slovak | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 23adefe2..c8f9b032 100644
--- a/dist/translations/heat.translations.sl.js
+++ b/dist/translations/heat.translations.sl.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Slovenian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 2938aa5c..0a353145 100644
--- a/dist/translations/heat.translations.sv.js
+++ b/dist/translations/heat.translations.sv.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Swedish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 f2e21c96..e0db9297 100644
--- a/dist/translations/heat.translations.ta.js
+++ b/dist/translations/heat.translations.ta.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Tamil | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 1392dc2e..e13cb332 100644
--- a/dist/translations/heat.translations.te.js
+++ b/dist/translations/heat.translations.te.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Telugu | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 cb1447be..bff92054 100644
--- a/dist/translations/heat.translations.th.js
+++ b/dist/translations/heat.translations.th.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Thai | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 b8a3c16c..2f023ffa 100644
--- a/dist/translations/heat.translations.tl.js
+++ b/dist/translations/heat.translations.tl.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Tagalog | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 c5db5b27..cd6c1a48 100644
--- a/dist/translations/heat.translations.tr.js
+++ b/dist/translations/heat.translations.tr.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Turkish | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 f3a28314..450a23d0 100644
--- a/dist/translations/heat.translations.uk.js
+++ b/dist/translations/heat.translations.uk.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Ukrainian | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 f5d0f359..b704232f 100644
--- a/dist/translations/heat.translations.zh-tw.js
+++ b/dist/translations/heat.translations.zh-tw.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Taiwanese | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.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 449367fe..ea61f43d 100644
--- a/dist/translations/heat.translations.zh.js
+++ b/dist/translations/heat.translations.zh.js
@@ -1,4 +1,4 @@
-/*! Heat.js v3.0.0 - Chinese (simplified) | (c) Bunoon 2024 | MIT License */
+/*! Heat.js v3.1.0 - Chinese (simplified) | (c) Bunoon 2024 | MIT License */
$heat.setConfiguration( {
"stText": "æ—¥",
"ndText": "æ—¥",
diff --git a/heat.js.nuspec b/heat.js.nuspec
index 5a7a04bf..53152683 100644
--- a/heat.js.nuspec
+++ b/heat.js.nuspec
@@ -2,7 +2,7 @@
jHeat.js
- 3.0.0
+ 3.1.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 6aeaad4f..374bce94 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": "3.0.0",
+ "version": "3.1.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 8b0ecfdf..fccd74c4 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 v3.0.0
+ * @version v3.1.0
* @author Bunoon
* @license MIT License
* @copyright Bunoon 2024
@@ -80,7 +80,7 @@
_export_Type_Txt = "txt",
// Variables: Attribute Names
- _attribute_Name_Options = "data-heat-options";
+ _attribute_Name_Options = "data-heat-js";
/*
@@ -152,7 +152,7 @@
bindingOptions.currentView.mapContentsScrollLeft = 0;
bindingOptions.currentView.year = bindingOptions.year;
bindingOptions.currentView.type = _configuration.unknownTrendText;
- bindingOptions.currentView.isInFetchMode = isDefinedFunction( bindingOptions.onDataFetch );
+ bindingOptions.currentView.isInFetchMode = isDefinedFunction( bindingOptions.events.onDataFetch );
bindingOptions.currentView.isInFetchModeTimer = null;
bindingOptions.currentView.yearsAvailable = [];
@@ -187,7 +187,7 @@
}
function renderControl( bindingOptions ) {
- fireCustomTrigger( bindingOptions.onBeforeRender, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onBeforeRender, bindingOptions.currentView.element );
if ( !isDefinedString( bindingOptions.currentView.element.id ) ) {
bindingOptions.currentView.element.id = newGuid();
@@ -203,7 +203,7 @@
createDateStorageForElement( bindingOptions.currentView.element.id, bindingOptions );
renderControlContainer( bindingOptions );
- fireCustomTrigger( bindingOptions.onRenderComplete, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onRenderComplete, bindingOptions.currentView.element );
}
function renderControlContainer( bindingOptions, isForDataRefresh, isForViewSwitch ) {
@@ -237,7 +237,7 @@
startDataPullTimer( bindingOptions );
- if ( bindingOptions.showConfigurationButton ) {
+ if ( bindingOptions.title.showConfigurationButton ) {
renderDisabledBackground( bindingOptions );
renderConfigurationDialog( bindingOptions );
}
@@ -440,7 +440,7 @@
if ( render ) {
renderControlContainer( bindingOptions );
- fireCustomTrigger( bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions );
+ fireCustomTrigger( bindingOptions.events.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions );
} else {
hideToolTip( bindingOptions );
@@ -495,7 +495,7 @@
bindingOptions.currentView.tooltip.style.display = "block";
showElementAtMousePosition( e, bindingOptions.currentView.tooltip );
- }, bindingOptions.tooltipDelay );
+ }, bindingOptions.tooltip.delay );
}
function hideToolTip( bindingOptions ) {
@@ -519,7 +519,7 @@
*/
function renderControlTitleBar( bindingOptions ) {
- if ( bindingOptions.showTitle || bindingOptions.showYearSelector || bindingOptions.showRefreshButton || bindingOptions.showExportButton || bindingOptions.showImportButton ) {
+ if ( bindingOptions.title.showText || bindingOptions.title.showYearSelector || bindingOptions.title.showRefreshButton || bindingOptions.title.showExportButton || bindingOptions.title.showImportButton ) {
var titleBar = createElement( bindingOptions.currentView.element, "div", "title-bar" ),
title = createElement( titleBar, "div", "title" );
@@ -529,15 +529,15 @@
addClass( title, "no-click" );
}
- if ( bindingOptions.showTitle ) {
- title.innerHTML += bindingOptions.titleText;
+ if ( bindingOptions.title.showText ) {
+ title.innerHTML += bindingOptions.title.text;
}
if ( bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled ) {
renderTitleDropDownMenu( bindingOptions, title );
}
- if ( bindingOptions.showImportButton && !bindingOptions.currentView.isInFetchMode ) {
+ if ( bindingOptions.title.showImportButton && !bindingOptions.currentView.isInFetchMode ) {
var importData = createElementWithHTML( titleBar, "button", "import", _configuration.importButtonText );
importData.onclick = function() {
@@ -545,7 +545,7 @@
};
}
- if ( bindingOptions.showExportButton ) {
+ if ( bindingOptions.title.showExportButton ) {
var exportData = createElementWithHTML( titleBar, "button", "export", _configuration.exportButtonText );
exportData.onclick = function() {
@@ -553,16 +553,16 @@
};
}
- if ( bindingOptions.showRefreshButton ) {
+ if ( bindingOptions.title.showRefreshButton ) {
var refresh = createElementWithHTML( titleBar, "button", "refresh", _configuration.refreshButtonText );
refresh.onclick = function() {
renderControlContainer( bindingOptions );
- fireCustomTrigger( bindingOptions.onRefresh, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onRefresh, bindingOptions.currentView.element );
};
}
- if ( bindingOptions.showYearSelector ) {
+ if ( bindingOptions.title.showYearSelector ) {
var back = createElementWithHTML( titleBar, "button", "back", _configuration.backButtonText );
back.onclick = function() {
@@ -575,13 +575,13 @@
bindingOptions.currentView.yearText = createElementWithHTML( titleBar, "div", "year-text", bindingOptions.currentView.year );
- if ( bindingOptions.showYearSelectionDropDown ) {
+ if ( bindingOptions.title.showYearSelectionDropDown ) {
renderYearDropDownMenu( bindingOptions );
} else {
addClass( bindingOptions.currentView.yearText, "no-click" );
}
- if ( bindingOptions.showConfigurationButton ) {
+ if ( bindingOptions.title.showConfigurationButton ) {
var configureButton = createElement( titleBar, "div", "configure" );
addToolTip( configureButton, bindingOptions, _configuration.configurationToolTipText );
@@ -645,7 +645,7 @@
option.onclick = function() {
bindingOptions.currentView.view = view;
- fireCustomTrigger( bindingOptions.onViewSwitch, viewName );
+ fireCustomTrigger( bindingOptions.events.onViewSwitch, viewName );
renderControlContainer( bindingOptions, false, true );
};
}
@@ -662,7 +662,7 @@
yearsMenuContainer.style.display = "block";
yearsMenuContainer.style.visibility = "hidden";
- for ( var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++ ) {
+ for ( var currentYear = thisYear - bindingOptions.title.extraSelectionYears; currentYear < thisYear + bindingOptions.title.extraSelectionYears; currentYear++ ) {
if ( isYearVisible( bindingOptions, currentYear ) ) {
var yearMenuItem = renderYearDropDownMenuItem( bindingOptions, yearsMenu, currentYear, thisYear );
@@ -689,7 +689,7 @@
bindingOptions.currentView.year = currentYear;
renderControlContainer( bindingOptions );
- fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onSetYear, bindingOptions.currentView.year );
};
if ( currentYear === actualYear ) {
@@ -861,7 +861,7 @@
reverseElementsOrder( months );
}
- if ( bindingOptions.keepScrollPositions ) {
+ if ( bindingOptions.views.map.keepScrollPositions ) {
bindingOptions.currentView.mapContents.scrollLeft = bindingOptions.currentView.mapContentsScrollLeft;
}
}
@@ -881,9 +881,9 @@
day.innerHTML = dateCount.toString();
}
- if ( isDefinedFunction( bindingOptions.onDayClick ) ) {
+ if ( isDefinedFunction( bindingOptions.events.onDayClick ) ) {
day.onclick = function() {
- fireCustomTrigger( bindingOptions.onDayClick, date, dateCount );
+ fireCustomTrigger( bindingOptions.events.onDayClick, date, dateCount );
};
} else {
@@ -892,7 +892,7 @@
var useColorRange = getColorRange( bindingOptions, colorRanges, dateCount, date );
- if ( isDefined( useColorRange ) && isHeatMapColorVisible( bindingOptions, useColorRange.id ) ) {
+ if ( isDefined( useColorRange ) && isColorRangeVisible( bindingOptions, useColorRange.id ) ) {
if ( isDefinedString( useColorRange.mapCssClassName ) ) {
addClass( day, useColorRange.mapCssClassName );
} else {
@@ -1033,7 +1033,7 @@
monthNameSpace.style.width = labelsWidth + "px";
}
- if ( bindingOptions.keepScrollPositions ) {
+ if ( bindingOptions.views.chart.keepScrollPositions ) {
bindingOptions.currentView.chartContents.scrollLeft = bindingOptions.currentView.chartContentsScrollLeft;
}
}
@@ -1061,9 +1061,9 @@
dayLine.style.visibility = "hidden";
}
- if ( isDefinedFunction( bindingOptions.onDayClick ) ) {
+ if ( isDefinedFunction( bindingOptions.events.onDayClick ) ) {
dayLine.onclick = function() {
- fireCustomTrigger( bindingOptions.onDayClick, date, dateCount );
+ fireCustomTrigger( bindingOptions.events.onDayClick, date, dateCount );
};
} else {
@@ -1072,7 +1072,7 @@
var useColorRange = getColorRange( bindingOptions, colorRanges, dateCount, date );
- if ( isDefined( useColorRange ) && isHeatMapColorVisible( bindingOptions, useColorRange.id ) ) {
+ if ( isDefined( useColorRange ) && isColorRangeVisible( bindingOptions, useColorRange.id ) ) {
if ( isDefinedString( useColorRange.chartCssClassName ) ) {
addClass( dayLine, useColorRange.chartCssClassName );
} else {
@@ -1092,7 +1092,9 @@
var storageDate = toStorageDate( new Date( bindingOptions.currentView.year, monthIndex, dayIndex + 1 ) );
if ( data.hasOwnProperty( storageDate ) ) {
- result = _parameter_Math.max( result, parseInt( data[ storageDate ] ) );
+ if ( isMonthVisible( bindingOptions.views.chart.monthsToShow, monthIndex ) && isDayVisible( bindingOptions.views.chart.daysToShow, dayIndex + 1 ) ) {
+ result = _parameter_Math.max( result, parseInt( data[ storageDate ] ) );
+ }
}
}
}
@@ -1168,7 +1170,7 @@
reverseElementsOrder( dayNames );
}
- if ( bindingOptions.keepScrollPositions ) {
+ if ( bindingOptions.views.days.keepScrollPositions ) {
bindingOptions.currentView.daysContents.scrollLeft = bindingOptions.currentView.daysContentsScrollLeft;
}
}
@@ -1186,9 +1188,9 @@
addToolTip( dayLine, bindingOptions, dayCount.toString() );
- if ( isDefinedFunction( bindingOptions.onWeekDayClick ) ) {
+ if ( isDefinedFunction( bindingOptions.events.onWeekDayClick ) ) {
dayLine.onclick = function() {
- fireCustomTrigger( bindingOptions.onWeekDayClick, dayNumber, dayCount );
+ fireCustomTrigger( bindingOptions.events.onWeekDayClick, dayNumber, dayCount );
};
} else {
@@ -1321,7 +1323,7 @@
reverseElementsOrder( statisticsRanges );
}
- if ( bindingOptions.keepScrollPositions ) {
+ if ( bindingOptions.views.statistics.keepScrollPositions ) {
bindingOptions.currentView.statisticsContents.scrollLeft = bindingOptions.currentView.statisticsContentsScrollLeft;
}
}
@@ -1346,16 +1348,16 @@
createElementWithHTML( rangeLine, "div", "count", rangeCount );
}
- if ( isDefinedFunction( bindingOptions.onStatisticClick ) ) {
+ if ( isDefinedFunction( bindingOptions.events.onStatisticClick ) ) {
rangeLine.onclick = function() {
- fireCustomTrigger( bindingOptions.onStatisticClick, useColorRange );
+ fireCustomTrigger( bindingOptions.events.onStatisticClick, useColorRange );
};
} else {
addClass( rangeLine, "no-hover" );
}
- if ( isDefined( useColorRange ) && isHeatMapColorVisible( bindingOptions, useColorRange.id ) ) {
+ if ( isDefined( useColorRange ) && isColorRangeVisible( bindingOptions, useColorRange.id ) ) {
if ( isDefinedString( useColorRange.statisticsCssClassName ) ) {
addClass( rangeLine, useColorRange.statisticsCssClassName );
} else {
@@ -1428,7 +1430,7 @@
}
if ( _elements_DateCounts[ bindingOptions.currentView.element.id ].types > 1 ) {
- if ( isDefinedString( bindingOptions.descriptionText ) ) {
+ if ( isDefinedString( bindingOptions.description.text ) ) {
var description = createElement( bindingOptions.currentView.element, "div", "description", guide );
renderDescription( bindingOptions, description );
@@ -1448,13 +1450,13 @@
renderDescription( bindingOptions, mapTypes );
}
- if ( bindingOptions.showGuide ) {
+ if ( bindingOptions.guide.enabled ) {
var mapToggles = createElement( guide, "div", "map-toggles" );
- if ( bindingOptions.showLessAndMoreLabels ) {
+ if ( bindingOptions.guide.showLessAndMoreLabels ) {
var lessText = createElementWithHTML( mapToggles, "div", "less-text", _configuration.lessText );
- if ( bindingOptions.colorRangeTogglesEnabled ) {
+ if ( bindingOptions.guide.colorRangeTogglesEnabled ) {
lessText.onclick = function() {
updateColorRangeToggles( bindingOptions, false );
};
@@ -1472,10 +1474,10 @@
renderControlViewGuideDay( bindingOptions, days, colorRanges[ colorRangesIndex ] );
}
- if ( bindingOptions.showLessAndMoreLabels ) {
+ if ( bindingOptions.guide.showLessAndMoreLabels ) {
var moreText = createElementWithHTML( mapToggles, "div", "more-text", _configuration.moreText );
- if ( bindingOptions.colorRangeTogglesEnabled ) {
+ if ( bindingOptions.guide.colorRangeTogglesEnabled ) {
moreText.onclick = function() {
updateColorRangeToggles( bindingOptions, true );
};
@@ -1498,7 +1500,7 @@
if ( bindingOptions.currentView.type !== type ) {
bindingOptions.currentView.type = type;
- fireCustomTrigger( bindingOptions.onTypeSwitch, type );
+ fireCustomTrigger( bindingOptions.events.onTypeSwitch, type );
renderControlContainer( bindingOptions );
}
};
@@ -1510,7 +1512,7 @@
addToolTip( day, bindingOptions, colorRange.tooltipText );
- if ( isHeatMapColorVisible( bindingOptions, colorRange.id ) ) {
+ if ( isColorRangeVisible( bindingOptions, colorRange.id ) ) {
if ( bindingOptions.currentView.view === _elements_View_Map && isDefinedString( colorRange.mapCssClassName ) ) {
addClass( day, colorRange.mapCssClassName );
} else if ( bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart && isDefinedString( colorRange.chartCssClassName ) ) {
@@ -1522,13 +1524,13 @@
}
}
- if ( bindingOptions.showNumbersInGuide ) {
+ if ( bindingOptions.guide.showNumbersInGuide ) {
addClass( day, "day-number" );
day.innerHTML = colorRange.minimum + _string.plus;
}
- if ( bindingOptions.colorRangeTogglesEnabled ) {
+ if ( bindingOptions.guide.colorRangeTogglesEnabled ) {
day.onclick = function() {
toggleColorRangeVisibleState( bindingOptions, colorRange.id );
};
@@ -1539,14 +1541,14 @@
}
function renderDescription( bindingOptions, container ) {
- if ( isDefinedString( bindingOptions.descriptionText ) ) {
- if ( isDefinedString( bindingOptions.descriptionTextLink ) ) {
- var link = createElementWithHTML( container, "a", "label", bindingOptions.descriptionText );
- link.href = bindingOptions.descriptionTextLink;
+ if ( isDefinedString( bindingOptions.description.text ) ) {
+ if ( isDefinedString( bindingOptions.description.url ) ) {
+ var link = createElementWithHTML( container, "a", "label", bindingOptions.description.text );
+ link.href = bindingOptions.description.url;
link.target = "_blank";
} else {
- createElementWithHTML( container, "span", "label", bindingOptions.descriptionText );
+ createElementWithHTML( container, "span", "label", bindingOptions.description.text );
}
}
}
@@ -1559,11 +1561,11 @@
*/
function renderDayToolTip( bindingOptions, day, date, dateCount ) {
- if ( isDefinedFunction( bindingOptions.onDayToolTipRender ) ) {
- addToolTip( day, bindingOptions, fireCustomTrigger( bindingOptions.onDayToolTipRender, date, dateCount ) );
+ if ( isDefinedFunction( bindingOptions.events.onDayToolTipRender ) ) {
+ addToolTip( day, bindingOptions, fireCustomTrigger( bindingOptions.events.onDayToolTipRender, date, dateCount ) );
} else {
- var tooltip = getCustomFormattedDateText( bindingOptions.dayToolTipText, date );
+ var tooltip = getCustomFormattedDateText( bindingOptions.tooltip.dayText, date );
if ( bindingOptions.showHolidaysInDayToolTips ) {
var holiday = isHoliday( bindingOptions, date );
@@ -1738,7 +1740,7 @@
function pullDataFromCustomTrigger( bindingOptions ) {
var elementId = bindingOptions.currentView.element.id,
- data = fireCustomTrigger( bindingOptions.onDataFetch, elementId );
+ data = fireCustomTrigger( bindingOptions.events.onDataFetch, elementId );
if ( isDefinedObject( data ) ) {
createDateStorageForElement( elementId, bindingOptions, false );
@@ -1774,7 +1776,7 @@
* ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/
- function isHeatMapColorVisible( bindingOptions, id ) {
+ function isColorRangeVisible( bindingOptions, id ) {
var result = false;
if ( id === _internal_Name_Holiday ) {
@@ -1786,7 +1788,7 @@
for ( var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++ ) {
var colorRange = bindingOptions.colorRanges[ colorRangesIndex ];
- if ( colorRange.id === id && ( !isDefinedBoolean( colorRange.visible ) || colorRange.visible ) ) {
+ if ( colorRange.id === id && getDefaultBoolean( colorRange.visible, true ) ) {
result = true;
break;
}
@@ -1802,7 +1804,7 @@
for ( var colorRangesIndex = 0; colorRangesIndex < colorRangesLength; colorRangesIndex++ ) {
bindingOptions.colorRanges[ colorRangesIndex ].visible = flag;
- fireCustomTrigger( bindingOptions.onColorRangeTypeToggle, bindingOptions.colorRanges[ colorRangesIndex ].id, flag );
+ fireCustomTrigger( bindingOptions.events.onColorRangeTypeToggle, bindingOptions.colorRanges[ colorRangesIndex ].id, flag );
}
renderControlContainer( bindingOptions );
@@ -1815,9 +1817,9 @@
var colorRange = bindingOptions.colorRanges[ colorRangesIndex ];
if ( colorRange.id === id ) {
- colorRange.visible = !( isDefinedBoolean( colorRange.visible ) && colorRange.visible );
+ colorRange.visible = !getDefaultBoolean( colorRange.visible, true );
- fireCustomTrigger( bindingOptions.onColorRangeTypeToggle, colorRange.id, colorRange.visible );
+ fireCustomTrigger( bindingOptions.events.onColorRangeTypeToggle, colorRange.id, colorRange.visible );
renderControlContainer( bindingOptions );
break;
}
@@ -1969,7 +1971,7 @@
}
if ( filesCompleted.length === filesLength ) {
- fireCustomTrigger( bindingOptions.onImport, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onImport, bindingOptions.currentView.element );
renderControlContainer( bindingOptions );
}
};
@@ -2087,7 +2089,7 @@
_parameter_Document.body.removeChild( tempLink );
- fireCustomTrigger( bindingOptions.onExport, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onExport, bindingOptions.currentView.element );
}
}
@@ -2237,42 +2239,29 @@
*/
function buildAttributeOptions( newOptions ) {
- var options = !isDefinedObject( newOptions ) ? {} : newOptions;
- options.views = !isDefinedObject( options.views ) ? {} : options.views;
- options.showGuide = getDefaultBoolean( options.showGuide, true );
- options.showTitle = getDefaultBoolean( options.showTitle, true );
- options.showYearSelector = getDefaultBoolean( options.showYearSelector, true );
- options.showRefreshButton = getDefaultBoolean( options.showRefreshButton, false );
- options.showExportButton = getDefaultBoolean( options.showExportButton, false );
- options.colorRangeTogglesEnabled = getDefaultBoolean( options.colorRangeTogglesEnabled, true );
+ var options = getDefaultObject( newOptions, {} );
+ options.views = getDefaultObject( options.views, {} );
options.exportOnlyYearBeingViewed = getDefaultBoolean( options.exportOnlyYearBeingViewed, true );
options.year = getDefaultNumber( options.year, new Date().getFullYear() );
- options.keepScrollPositions = getDefaultBoolean( options.keepScrollPositions, false );
- options.extraSelectionYears = getDefaultNumber( options.extraSelectionYears, 50 );
- options.showYearSelectionDropDown = getDefaultBoolean( options.showYearSelectionDropDown, true );
options.view = getDefaultString( options.view, _elements_View_Name_Map );
- options.tooltipDelay = getDefaultNumber( options.tooltipDelay, 750 );
options.exportType = getDefaultString( options.exportType, _export_Type_Csv );
- options.descriptionText = getDefaultString( options.descriptionText, null );
- options.descriptionTextLink = getDefaultString( options.descriptionTextLink, null );
options.useLocalStorageForData = getDefaultBoolean( options.useLocalStorageForData, false );
options.allowFileImports = getDefaultBoolean( options.allowFileImports, true );
options.yearsToHide = getDefaultArray( options.yearsToHide, [] );
- options.showLessAndMoreLabels = getDefaultBoolean( options.showLessAndMoreLabels, true );
- options.showNumbersInGuide = getDefaultBoolean( options.showNumbersInGuide, false );
- options.showImportButton = getDefaultBoolean( options.showImportButton, false );
options.dataFetchDelay = getDefaultNumber( options.dataFetchDelay, 60000 );
options.showOnlyDataForYearsAvailable = getDefaultBoolean( options.showOnlyDataForYearsAvailable, false );
options.showHolidaysInDayToolTips = getDefaultBoolean( options.showHolidaysInDayToolTips, false );
- options.showConfigurationButton = getDefaultBoolean( options.showConfigurationButton, true );
-
+
options = buildAttributeOptionColorRanges( options );
options = buildAttributeOptionHolidays( options );
+ options = buildAttributeOptionTitle( options );
+ options = buildAttributeOptionDescription( options );
+ options = buildAttributeOptionGuide( options );
+ options = buildAttributeOptionToolTip( options );
options = buildAttributeOptionMapView( options );
options = buildAttributeOptionChartView( options );
options = buildAttributeOptionDaysView( options );
options = buildAttributeOptionStatisticsView( options );
- options = buildAttributeOptionStrings( options );
options = buildAttributeOptionCustomTriggers( options );
return options;
@@ -2355,8 +2344,49 @@
return options;
}
+ function buildAttributeOptionTitle( options ) {
+ options.title = getDefaultObject( options.title, {} );
+ options.title.text = getDefaultString( options.title.text, "Heat.js" );
+ options.title.showText = getDefaultBoolean( options.title.showText, true );
+ options.title.showYearSelector = getDefaultBoolean( options.title.showYearSelector, true );
+ options.title.showRefreshButton = getDefaultBoolean( options.title.showRefreshButton, false );
+ options.title.showExportButton = getDefaultBoolean( options.title.showExportButton, false );
+ options.title.extraSelectionYears = getDefaultNumber( options.title.extraSelectionYears, 50 );
+ options.title.showYearSelectionDropDown = getDefaultBoolean( options.title.showYearSelectionDropDown, true );
+ options.title.showImportButton = getDefaultBoolean( options.title.showImportButton, false );
+ options.title.showConfigurationButton = getDefaultBoolean( options.title.showConfigurationButton, true );
+
+ return options;
+ }
+
+ function buildAttributeOptionDescription( options ) {
+ options.description = getDefaultObject( options.description, {} );
+ options.description.text = getDefaultString( options.description.text, null );
+ options.description.url = getDefaultString( options.description.url, null );
+
+ return options;
+ }
+
+ function buildAttributeOptionGuide( options ) {
+ options.guide = getDefaultObject( options.guide, {} );
+ options.guide.enabled = getDefaultBoolean( options.guide.enabled, true );
+ options.guide.colorRangeTogglesEnabled = getDefaultBoolean( options.guide.colorRangeTogglesEnabled, true );
+ options.guide.showLessAndMoreLabels = getDefaultBoolean( options.guide.showLessAndMoreLabels, true );
+ options.guide.showNumbersInGuide = getDefaultBoolean( options.guide.showNumbersInGuide, false );
+
+ return options;
+ }
+
+ function buildAttributeOptionToolTip( options ) {
+ options.tooltip = getDefaultObject( options.tooltip, {} );
+ options.tooltip.delay = getDefaultNumber( options.tooltip.delay, 750 );
+ options.tooltip.dayText = getDefaultString( options.tooltip.dayText, "{d}{o} {mmmm} {yyyy}" );
+
+ return options;
+ }
+
function buildAttributeOptionMapView( options ) {
- options.views.map = !isDefinedObject( options.views.map ) ? {} : options.views.map;
+ options.views.map = getDefaultObject( options.views.map, {} );
options.views.map.showMonthDayGaps = getDefaultBoolean( options.views.map.showMonthDayGaps, true );
options.views.map.showDayNames = getDefaultBoolean( options.views.map.showDayNames, true );
options.views.map.placeMonthNamesOnTheBottom = getDefaultBoolean( options.views.map.placeMonthNamesOnTheBottom, false );
@@ -2366,6 +2396,7 @@
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 );
+ options.views.map.keepScrollPositions = getDefaultBoolean( options.views.map.keepScrollPositions, false );
if ( isInvalidOptionArray( options.views.map.monthsToShow ) ) {
options.views.map.monthsToShow = _default_MonthsToShow;
@@ -2379,12 +2410,13 @@
}
function buildAttributeOptionChartView( options ) {
- options.views.chart = !isDefinedObject( options.views.chart ) ? {} : options.views.chart;
+ options.views.chart = getDefaultObject( options.views.chart, {} );
options.views.chart.enabled = getDefaultBoolean( options.views.chart.enabled, true );
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 );
+ options.views.chart.keepScrollPositions = getDefaultBoolean( options.views.chart.keepScrollPositions, false );
if ( isInvalidOptionArray( options.views.chart.monthsToShow ) ) {
options.views.chart.monthsToShow = _default_MonthsToShow;
@@ -2398,12 +2430,13 @@
}
function buildAttributeOptionDaysView( options ) {
- options.views.days = !isDefinedObject( options.views.days ) ? {} : options.views.days;
+ options.views.days = getDefaultObject( options.views.days, {} );
options.views.days.enabled = getDefaultBoolean( options.views.days.enabled, true );
options.views.days.showChartYLabels = getDefaultBoolean( options.views.days.showChartYLabels, true );
options.views.days.showDayNames = getDefaultBoolean( options.views.days.showDayNames, true );
options.views.days.showInReverseOrder = getDefaultBoolean( options.views.days.showInReverseOrder, false );
options.views.days.showDayNumbers = getDefaultBoolean( options.views.days.showDayNumbers, false );
+ options.views.days.keepScrollPositions = getDefaultBoolean( options.views.days.keepScrollPositions, false );
if ( isInvalidOptionArray( options.views.days.monthsToShow ) ) {
options.views.days.monthsToShow = _default_MonthsToShow;
@@ -2417,13 +2450,14 @@
}
function buildAttributeOptionStatisticsView( options ) {
- options.views.statistics = !isDefinedObject( options.views.statistics ) ? {} : options.views.statistics;
+ options.views.statistics = getDefaultObject( options.views.statistics, {} );
options.views.statistics.enabled = getDefaultBoolean( options.views.statistics.enabled, true );
options.views.statistics.showChartYLabels = getDefaultBoolean( options.views.statistics.showChartYLabels, true );
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 );
+ options.views.statistics.keepScrollPositions = getDefaultBoolean( options.views.statistics.keepScrollPositions, false );
if ( isInvalidOptionArray( options.views.statistics.monthsToShow ) ) {
options.views.statistics.monthsToShow = _default_MonthsToShow;
@@ -2436,37 +2470,31 @@
return options;
}
- function buildAttributeOptionStrings( options ) {
- options.titleText = getDefaultString( options.titleText, "Heat.js" );
- options.dayToolTipText = getDefaultString( options.dayToolTipText, "{d}{o} {mmmm} {yyyy}" );
-
- return options;
- }
-
function buildAttributeOptionCustomTriggers( options ) {
- options.onDayClick = getDefaultFunction( options.onDayClick, null );
- options.onBackYear = getDefaultFunction( options.onBackYear, null );
- options.onNextYear = getDefaultFunction( options.onNextYear, null );
- options.onRefresh = getDefaultFunction( options.onRefresh, null );
- options.onBeforeRender = getDefaultFunction( options.onBeforeRender, null );
- options.onRenderComplete = getDefaultFunction( options.onRenderComplete, null );
- options.onDestroy = getDefaultFunction( options.onDestroy, null );
- options.onExport = getDefaultFunction( options.onExport, null );
- options.onSetYear = getDefaultFunction( options.onSetYear, null );
- options.onTypeSwitch = getDefaultFunction( options.onTypeSwitch, null );
- options.onDayToolTipRender = getDefaultFunction( options.onDayToolTipRender, null );
- options.onAdd = getDefaultFunction( options.onAdd, null );
- options.onRemove = getDefaultFunction( options.onRemove, null );
- options.onReset = getDefaultFunction( options.onReset, null );
- options.onViewSwitch = getDefaultFunction( options.onViewSwitch, null );
- options.onColorRangeTypeToggle = getDefaultFunction( options.onColorRangeTypeToggle, null );
- options.onImport = getDefaultFunction( options.onImport, null );
- options.onStatisticClick = getDefaultFunction( options.onStatisticClick, null );
- options.onDataFetch = getDefaultFunction( options.onDataFetch, null );
- options.onClear = getDefaultFunction( options.onClear, null );
- options.onUpdate = getDefaultFunction( options.onUpdate, null );
- options.onOptionsUpdate = getDefaultFunction( options.onOptionsUpdate, null );
- options.onWeekDayClick = getDefaultFunction( options.onWeekDayClick, null );
+ options.events = getDefaultObject( options.events, {} );
+ options.events.onDayClick = getDefaultFunction( options.events.onDayClick, null );
+ options.events.onBackYear = getDefaultFunction( options.events.onBackYear, null );
+ options.events.onNextYear = getDefaultFunction( options.events.onNextYear, null );
+ options.events.onRefresh = getDefaultFunction( options.events.onRefresh, null );
+ options.events.onBeforeRender = getDefaultFunction( options.events.onBeforeRender, null );
+ options.events.onRenderComplete = getDefaultFunction( options.events.onRenderComplete, null );
+ options.events.onDestroy = getDefaultFunction( options.events.onDestroy, null );
+ options.events.onExport = getDefaultFunction( options.events.onExport, null );
+ options.events.onSetYear = getDefaultFunction( options.events.onSetYear, null );
+ options.events.onTypeSwitch = getDefaultFunction( options.events.onTypeSwitch, null );
+ options.events.onDayToolTipRender = getDefaultFunction( options.events.onDayToolTipRender, null );
+ options.events.onAdd = getDefaultFunction( options.events.onAdd, null );
+ options.events.onRemove = getDefaultFunction( options.events.onRemove, null );
+ options.events.onReset = getDefaultFunction( options.events.onReset, null );
+ options.events.onViewSwitch = getDefaultFunction( options.events.onViewSwitch, null );
+ options.events.onColorRangeTypeToggle = getDefaultFunction( options.events.onColorRangeTypeToggle, null );
+ options.events.onImport = getDefaultFunction( options.events.onImport, null );
+ options.events.onStatisticClick = getDefaultFunction( options.events.onStatisticClick, null );
+ options.events.onDataFetch = getDefaultFunction( options.events.onDataFetch, null );
+ options.events.onClear = getDefaultFunction( options.events.onClear, null );
+ options.events.onUpdate = getDefaultFunction( options.events.onUpdate, null );
+ options.events.onOptionsUpdate = getDefaultFunction( options.events.onOptionsUpdate, null );
+ options.events.onWeekDayClick = getDefaultFunction( options.events.onWeekDayClick, null );
return options;
}
@@ -2754,6 +2782,10 @@
return isDefinedBoolean( value ) ? value : defaultValue;
}
+ function getDefaultNumber( value, defaultValue ) {
+ return isDefinedNumber( value ) ? value : defaultValue;
+ }
+
function getDefaultFunction( value, defaultValue ) {
return isDefinedFunction( value ) ? value : defaultValue;
}
@@ -2762,8 +2794,8 @@
return isDefinedArray( value ) ? value : defaultValue;
}
- function getDefaultNumber( value, defaultValue ) {
- return isDefinedNumber( value ) ? value : defaultValue;
+ function getDefaultObject( value, defaultValue ) {
+ return isDefinedObject( value ) ? value : defaultValue;
}
function getDefaultStringOrArray( value, defaultValue ) {
@@ -2947,7 +2979,7 @@
_elements_DateCounts[ elementId ].type[ type ][ storageDate ]++;
- fireCustomTrigger( bindingOptions.onAdd, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onAdd, bindingOptions.currentView.element );
if ( triggerRefresh ) {
renderControlContainer( bindingOptions, true );
@@ -2988,7 +3020,7 @@
_elements_DateCounts[ elementId ].type[ type ][ storageDate ] = count;
- fireCustomTrigger( bindingOptions.onUpdate, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onUpdate, bindingOptions.currentView.element );
if ( triggerRefresh ) {
renderControlContainer( bindingOptions, true );
@@ -3069,7 +3101,7 @@
_elements_DateCounts[ elementId ].type[ type ][ storageDate ]--;
}
- fireCustomTrigger( bindingOptions.onRemove, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onRemove, bindingOptions.currentView.element );
if ( triggerRefresh ) {
renderControlContainer( bindingOptions, true );
@@ -3110,7 +3142,7 @@
delete _elements_DateCounts[ elementId ].type[ type ][ storageDate ];
- fireCustomTrigger( bindingOptions.onClear, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onClear, bindingOptions.currentView.element );
if ( triggerRefresh ) {
renderControlContainer( bindingOptions, true );
@@ -3167,7 +3199,7 @@
bindingOptions.currentView.type = _configuration.unknownTrendText;
createDateStorageForElement( elementId, bindingOptions, false );
- fireCustomTrigger( bindingOptions.onReset, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onReset, bindingOptions.currentView.element );
if ( triggerRefresh ) {
renderControlContainer( bindingOptions, true );
@@ -3223,7 +3255,7 @@
var bindingOptions = _elements_DateCounts[ elementId ].options;
renderControlContainer( bindingOptions, true );
- fireCustomTrigger( bindingOptions.onRefresh, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onRefresh, bindingOptions.currentView.element );
}
return _public;
@@ -3245,7 +3277,7 @@
var bindingOptions = _elements_DateCounts[ elementId ].options;
renderControlContainer( bindingOptions, true );
- fireCustomTrigger( bindingOptions.onRefresh, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onRefresh, bindingOptions.currentView.element );
}
}
@@ -3276,7 +3308,7 @@
renderControlContainer( bindingOptions );
}
- fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onSetYear, bindingOptions.currentView.year );
}
return _public;
@@ -3315,7 +3347,7 @@
renderControlContainer( bindingOptions );
}
- fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onSetYear, bindingOptions.currentView.year );
}
}
@@ -3355,7 +3387,7 @@
renderControlContainer( bindingOptions );
}
- fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onSetYear, bindingOptions.currentView.year );
}
}
@@ -3425,7 +3457,7 @@
renderControlContainer( bindingOptions );
}
- fireCustomTrigger( bindingOptions.onSetYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onSetYear, bindingOptions.currentView.year );
}
return _public;
@@ -3520,7 +3552,7 @@
if ( isDefinedNumber( view ) ) {
bindingOptions.currentView.view = view;
- fireCustomTrigger( bindingOptions.onViewSwitch, viewName );
+ fireCustomTrigger( bindingOptions.events.onViewSwitch, viewName );
renderControlContainer( bindingOptions, false, true );
}
}
@@ -3548,7 +3580,7 @@
if ( bindingOptions.currentView.type !== type ) {
bindingOptions.currentView.type = type;
- fireCustomTrigger( bindingOptions.onTypeSwitch, type );
+ fireCustomTrigger( bindingOptions.events.onTypeSwitch, type );
renderControlContainer( bindingOptions );
}
}
@@ -3585,8 +3617,8 @@
if ( optionChanged ) {
renderControlContainer( bindingOptions, true );
- fireCustomTrigger( bindingOptions.onRefresh, bindingOptions.currentView.element );
- fireCustomTrigger( bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions );
+ fireCustomTrigger( bindingOptions.events.onRefresh, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions );
}
}
@@ -3616,7 +3648,7 @@
renderControlContainer( bindingOptions );
if ( callCustomTrigger ) {
- fireCustomTrigger( bindingOptions.onBackYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onBackYear, bindingOptions.currentView.year );
}
}
}
@@ -3644,7 +3676,7 @@
renderControlContainer( bindingOptions );
if ( callCustomTrigger ) {
- fireCustomTrigger( bindingOptions.onBackYear, bindingOptions.currentView.year );
+ fireCustomTrigger( bindingOptions.events.onBackYear, bindingOptions.currentView.year );
}
}
}
@@ -3712,7 +3744,7 @@
clearInterval( bindingOptions.currentView.isInFetchModeTimer );
}
- fireCustomTrigger( bindingOptions.onDestroy, bindingOptions.currentView.element );
+ fireCustomTrigger( bindingOptions.events.onDestroy, bindingOptions.currentView.element );
}
@@ -3880,7 +3912,7 @@
* @returns {string} The version number.
*/
_public.getVersion = function() {
- return "3.0.0";
+ return "3.1.0";
};
diff --git a/src/heat.js.scss b/src/heat.js.scss
index a93d148e..2ac97c43 100644
--- a/src/heat.js.scss
+++ b/src/heat.js.scss
@@ -1,5 +1,5 @@
/*
- * Heat.js Library v3.0.0
+ * Heat.js Library v3.1.0
*
* Copyright 2024 Bunoon
* Released under the MIT License
diff --git a/test/dist/heat.js.basic.html b/test/dist/heat.js.basic.html
index 140cf012..b5063cb0 100644
--- a/test/dist/heat.js.basic.html
+++ b/test/dist/heat.js.basic.html
@@ -16,7 +16,7 @@