Snippets
Created by
Piotr Szrajber
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | /**
* 1) Change style of the geometries - for example make point circles smaller
* 2) Change tooltip behavior so that it does not disappear immediately after taking the mouse pointer from the geometry
* 2017-11-27 Piotr Szrajber <piotr.szrajber@hexagongeospatial.com>
*/
var delayedHideTooltip,
delayedHideTooltipTimeoutId,
DELAYED_HIDE_TOOLTIP_TIMEOUT = 500,
TIMEOUT = null;
document.addEventListener('mousemove', function(e) {
var mouseElement = document.elementFromPoint(e.pageX, e.pageY);
if (mouseElement && mouseElement.closest(".leaflet-popup-content-wrapper, .leaflet-marker-icon")) {
clearTimeout(delayedHideTooltipTimeoutId);
delayedHideTooltipTimeoutId = undefined;
} else {
if (delayedHideTooltipTimeoutId) return;
delayedHideTooltipTimeoutId = setTimeout(() => {
delayedHideTooltip && delayedHideTooltip();
delayedHideTooltip = null;
}, DELAYED_HIDE_TOOLTIP_TIMEOUT);
}
});
// modify style of the geometries
function overwriteStyle(widget) {
/*
{
"stroke": true,
"color": "#ffffff",
"weight": 2,
"opacity": 0.9,
"fill": true,
"fillColor": "#cccccc",
"fillOpacity": 0.9,
"fillRule": "evenodd",
"dashArray": null,
"lineCap": "round",
"lineJoin": "round",
"clickable": true,
"pointerEvents": "auto",
"className": "",
"radius": 10,
"strokeColor": "#ffffff",
"strokeOpacity": 0.9,
"strokeWidth": 2,
"strokeLineCap": "round",
"strokeLineJoin": "round"
}
*/
const CIRCLE_SIZE = 5;
let painter = widget.chart.painter(),
defaultStyle = painter.defaultStyle(),
paintStyle = painter.paintStyle();
defaultStyle.radius = CIRCLE_SIZE;
painter.defaultStyle(defaultStyle);
painter.paintStyle((feature) => {
let style = paintStyle.call(this, feature);
style.radius = CIRCLE_SIZE;
return style;
});
}
// make the tooltip available for mouse events (requires also css for bi-tooltip)
function overwriteTooltipBehavior(widget) {
let painter = widget.chart.painter(),
origHideTooltip = painter.hideTooltip,
origShowTooltip = painter.showTooltip;
painter.hideTooltip = function(e) {
delayedHideTooltip = () => {
origHideTooltip.apply(null, arguments)
};
};
painter.showTooltip = function(e, t, r) {
painter.target().map.closePopup();
return origShowTooltip.call(this, e, t, r);
};
}
function repaint(widget) {
let painter = widget.chart.painter();
painter.unmount();
painter.mount();
painter.paint();
}
// waits until choropleth widget is ready
function waitForChoropleths(callback) {
gsp.bi.stage.findWidgets({
descriptors: [{
chartM: {
chart: "choropleth"
}
}]
}, function(widgets) {
if (!widgets || !widgets[0]) {
TIMEOUT = setTimeout(function() {
waitForChoropleths(callback);
}, 500);
} else {
clearTimeout(TIMEOUT);
callback(widgets);
}
});
}
waitForChoropleths((widgets) => {
overwriteStyle(widgets[0]);
overwriteTooltipBehavior(widgets[0]);
repaint(widgets[0]);
});
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.