w.props = {
"useMap": "russia-wiki",
"serieName": "",
"useLabels": "short-name",
"secondSerie": null,
"secondSerieName": "",
"secondSerieColors": [
{
"to": 0,
"color": "rgba(255,0,0,0)"
}, {
"from": 0,
"color": "rgba(200,255,100,0.5)"
}
],
"labelFontSize": "11px",
"labelFontWeight": "normal",
"labelFontColor": "",
"labelTextOutline": "1px contrast",
"tooltipFontSize": "14px",
"tooltipFontWeight": "bold",
"tooltipFontColor": "black",
"tooltipDivisor": 1,
"tooltipRoundTo": 0,
"tooltipBackgroundColor": "#ffffff",
"legendFontSize": "16px",
"legendFontWeight": "bold",
"legendFontColor": "black",
"legendAlign": "left",
"legendLayout": "horizontal",
"legendType": "gradient",
"legendDivisor": 1,
"legendRoundTo": 0,
"legendFloating": true,
"colors": ["#00FF00", "#FFFF00", "#FF0000"],
"filterGuid": "",
"zoom": "off",
"resetZoomButton": false,
"fixedIntervals": [
{
"to": 1000,
"name": "Низкая"
}, {
"from": "1000",
"to": "2000",
"name": "Средняя"
}, {
"from": 2000,
"name": "высокая"
}
],
"upButtonSize": 50,
"filterGuidForSelect": "",
"propertyNameForMapping": "",
"selectedRegionColor": "#ff9800",
"crosshair": true,
"marginLeft": 0,
"marginBottom": 0,
"marginTop": 0,
"marginRight": 0,
"seriesBorderColor": "#ffffff",
"seriesBorderWidth": 0.6
};
/*
Версия виджета 1.19 16.10.18.
Виджет принимает на вход до двух мер. Первая используется для подкраски, вторая для вывода в виде текста(пока не работает).
В строки необходимо положить коды региона. Опционально можно положить названия регионов второй строкой. Тогда они
будут использоваться вместо стандартных названий.
Свойства виджета:
useMap - какую карту использовать. Доступна карта России из википедии russia-wiki, карта Казахстана kaz-hc,
Новгородской области novgorodskaya, Смоленской области smolenskaya, республика Татарстан tatarstan и г. Астана astana
У карты custom/world есть возможность делать дриллдаун в РФ.
serieName - имя серии. По умолчанию название столбца из OLAP (если оставить пустым).
useLabels - какие названия регионов использовать. Досупно short-name и full-name.
secondSerie - использовать ли дополнительный показатель. Доступные значение null и bubble. Bubble будет
рисовать круги размером относительно значения показателя
secondSerieName - имя второй серии. По умолчанию название столбца из OLAP (если оставить пустым).
secondSerieColors - цвета второй серии(работает аналогично фиксированным интервалам).
labelFontSize, labelFontWeight, labelFontColor - настройки шрифта лейблов. Если цвет не задан,
то он подбирается автоматически для контраста.
labelTextOutline - включить или выключить обводку текста.
tooltipFontSize, tooltipFontWeight, tooltipFontColor - настройки шрифта тултипа.
tooltipDivisor - на сколько делить значения в подписи.
tooltipRoundTo - до которого знака после запятой округлять в подписи.
tooltipBackgroundColor - цвет подложки подсказки
legendFontWeight, legendFontSize, legendFontColor - настройки шрифта легенды.
legendAlign - расположение легенды. Доступно left, right, center.
legendLayout - расположение элементов легенды. Доступно horizontal и vertical.
legendType - тип легенды. Gradient - заполнение градиентов цветов. Fixed - группы из параметра fixedIntervals.
autoGroups - разбить на равные группы, в каждый цвет попадает равное количество.
legendDivisor - на сколько делить значения в легенде. Работает только для autoGroups.
legendRoundTo - до которого знака после запятой округлять в легенде. Работает только для autoGroups.
legendFloating - если true, то легенда рисуется внутри области с картой
colors - массив цветов.
filterGuid - id фильтра, значение которого будет применятся при клике на карту. ВНИМАНИЕ, работает только если в качестве
второго атрибута в строки положить имя региона.
zoom - возможные значения: off - зум не работает, on - зум по скролу или двойному клику,
area - к предыдущему варианту еще добавляется зум через выделение области на карте
resetZoomButton - если true, то при зуме появляется кнопка сбрасывающая зум
fixedIntervals - настройка интервалов для раскраски. Описываем границы интервала и его имя в легенде. Цвета берутся из массива цветов в том же порядке.
filterGuidForSelect - id фильтра, который подсвечивает регион на карте цветом selectedRegionColor
propertyNameForMapping - необходимо для работы фильтра filterGuidForSelect. Определяет по какому полю в json'e карты мэппиться с значениями в фильтре.
Значения в фильтре должны совпадать с одним из свойств карты (типа short-name, full-name или например name для hc карт), иначе выбор региона не будет работать.
selectedRegionColor - цвет подсветки от фильтра filterGuidForSelect, если задать значение hatch, то регион будет отмечаться штриховкой (для работы шриховки нужна библиотека pattern-fill.js)
crosshair - если true, то появляются 2 пунктирные линии, следующие за курсором
marginLeft, marginBottom, marginTop, marginRight - отступы от границ виджета
seriesBorderColor - цвет границ областей
seriesBorderWidth - толщина границы областей
*/
// добавляем глобальный словарь статуса перерисовки виджета
if(!window.chartsStatusRedraw){
window.chartsStatusRedraw = {};
window.chartsStatusRedraw[w.general.renderTo] = false;
} else {
window.chartsStatusRedraw[w.general.renderTo] = false;
}
// Формируем тултипы
var tooltip = {
// устанавливаем таймаут для тултипа 10 сек в IE, иначе он быстро исчезает
hideDelay: Highcharts.isMS ? 10000 : 500,
backgroundColor: w.props.tooltipBackgroundColor ? w.props.tooltipBackgroundColor : "#ffffff",
pointFormatter: function () {
var roundVal = Math.pow(10, w.props.tooltipRoundTo);
var formattedValue = (Math.round(this.value / w.props.tooltipDivisor * roundVal) / roundVal).toString().replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' ');
return (this['short-name'] ? this['short-name'] : this.name) + ': ' + formattedValue + '
'
},
style: {
fontSize: w.props.tooltipFontSize,
fontWeight: w.props.tooltipFontWeight,
color: w.props.tooltipFontColor
}
};
// Формируем Легенду
var legend = {
align: w.props.legendAlign,
enabled: true,
floating: w.props.legendFloating,
layout: w.props.legendLayout,
itemStyle: {
color: w.props.legendFontColor,
fontSize: w.props.legendFontSize,
fontWeight: w.props.legendFontWeight
}
};
var dataClasses = [];
switch (w.props.legendType) {
case 'gradient':
break;
case 'fixed': // Если фиксированные интервалы
dataClasses = w.props.fixedIntervals.map(function (item, i) {
return $.extend({}, item, {color: w.props.colors[i]});
});
break;
case 'autoValues': // Если разделить поровну по значению
var sortedVals = w.data.values[0].map(function (item) {
return item
});
var colLen = w.props.colors.length;
break;
case 'autoGroups': // Если разделить поровну по группам
var sortedVals = w.data.values[0].map(function (item) {
return item
});
sortedVals.sort(function (a, b) {
return a - b
});
var dataLen = sortedVals.length;
//colLen = w.props.colors.length
var step = Math.ceil(dataLen / w.props.colors.length);
dataClasses = w.props.colors.map(function (item, i) {
var from = i === 0 ? undefined : sortedVals[step * i];
var to = i === w.props.colors.length - 1 ? undefined : sortedVals[step * (i + 1)];
var name;
var roundVal = Math.pow(10, w.props.legendRoundTo);
var fromStr = (Math.round(from / w.props.legendDivisor * roundVal) / roundVal).toString().replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' ');
var toStr = (Math.round(to / w.props.legendDivisor * roundVal) / roundVal).toString().replace(/(?!^)(?=(?:\d{3})+(?:\.|$))/gm, ' ');
if (from === undefined) {
name = 'До ' + toStr
} else if (to === undefined) {
name = 'Больше ' + fromStr
} else {
name = 'От ' + fromStr + ' До ' + toStr
}
return {
color: item,
from: from,
to: to,
name: name
}
});
break;
}
// убираем crosshair в IE, потому что он препятствует прохождению события click
if (w.props.crosshair && Highcharts.isMS)
w.props.crosshair = false;
var mapChart;
DisplayMap(Highcharts.maps[w.props.useMap]);
if (visApi().getWidgetByGuid(w.props.filterGuidForSelect) != undefined) {
visApi().getWidgetDataByGuid(w.props.filterGuidForSelect).then(function (fv) {
if (fv.selected.rows[0] !== undefined && mapChart.get(fv.selected.rows[0][0]) !== undefined) {
if (w.props.selectedRegionColor == 'hatch')
$('#highcharts-default-pattern-1 path').css('stroke', mapChart.get(fv.selected.rows[0][0]).color);
mapChart.get(fv.selected.rows[0][0]).select();
}
});
visApi().onSelectedValuesChangedListener({guid: '8b553255-9845-4595-a23b-44f9d31e45fc', widgetGuid: w.props.filterGuidForSelect}, function (info) {
if (info.selectedValues[0] !== undefined && mapChart.get(info.selectedValues[0][0]) !== undefined) {
if (w.props.selectedRegionColor == 'hatch')
$('#highcharts-default-pattern-1 path').css('stroke', mapChart.get(info.selectedValues[0][0]).color);
mapChart.get(info.selectedValues[0][0]).select();
}
});
}
if (w.props.crosshair)
addCrosshair(1);
if (w.props.zoom == "area") {
var parent_style_scale = 1,
mouseDownX,
mouseDownY,
startMapX,
startMapY;
mapChart.container.onmousedown = null;
if ($("div").is(".va-dashboard-container")) {
parent_style_scale = (visApi().getSheetZoom())/100;
}
$('#' + w.general.renderTo + ' .highcharts-container')
.mousedown(function(e) {
mouseDownX = e.pageX / parent_style_scale;
mouseDownY = e.pageY / parent_style_scale;
e = mapChart.pointer.normalize(e);
startMapX = mapChart.xAxis[0].toValue(e.chartX);
startMapY = mapChart.yAxis[0].toValue(e.chartY);
if ($('#area' + w.general.renderTo).length == 0){
$('