Skip to content

Commit 7a4ab77

Browse files
authored
Tooltip added to bar charts (#1022)
1 parent 46cd8c6 commit 7a4ab77

File tree

7 files changed

+84
-11
lines changed

7 files changed

+84
-11
lines changed

lib/SvelteUi/app/dist/index.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/SvelteUi/app/dist/index.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/SvelteUi/app/src/app.postcss

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,3 +188,22 @@ svg {
188188
display: block;
189189
text-align: center;
190190
}
191+
192+
.tooltip {
193+
border: 1px solid #ddd;
194+
background: white;
195+
border-radius: 4px;
196+
padding: 4px;
197+
position: absolute;
198+
}
199+
200+
.tooltip::after {
201+
content: "";
202+
position: absolute;
203+
top: 100%;
204+
left: 50%;
205+
margin-left: -9px;
206+
border-width: 9px;
207+
border-style: solid;
208+
border-color: #ddd transparent transparent transparent;
209+
}

lib/SvelteUi/app/src/lib/BarChart.svelte

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script>
22
import { Link } from "svelte-navigator";
3+
import { tooltip } from './tooltip';
34
45
export let config;
56
@@ -83,7 +84,7 @@
8384
<g class='bars'>
8485
{#each config.points as point, i}
8586
{#if !isNaN(xScale(i)) && !isNaN(yScale(point.value))}
86-
<g>
87+
<g data-title="{point.title}" use:tooltip>
8788
{#if point.value !== undefined}
8889
<rect
8990
x="{xScale(i) + 2}"
@@ -102,9 +103,6 @@
102103
transform="translate({xScale(i) + barWidth/2} {yScale(point.value) > yScale(0) - labelOffset ? yScale(point.value) - labelOffset : yScale(point.value) + 10}) rotate({point.labelAngle ? point.labelAngle : barWidth < vertSwitch ? 90 : 0})"
103104

104105
>{point.label}</text>
105-
{#if point.title}
106-
<title>{point.title}</title>
107-
{/if}
108106
{/if}
109107
{/if}
110108
</g>

lib/SvelteUi/app/src/lib/TariffPeakChart.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
title = title + ': ' + peak.v.toFixed(2) + ' kWh';
5050
points.push({
5151
label: peak.v.toFixed(2),
52+
title: peak.v.toFixed(2) + ' kWh',
5253
value: peak.v,
5354
title: title,
5455
color: dark ? '#5c2da5' : '#7c3aed'
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<script>
2+
export let title;
3+
export let x;
4+
export let y;
5+
6+
let width;
7+
let height;
8+
</script>
9+
<div
10+
class="tooltip"
11+
style="top: {y - height - 10}px; left: {x - (width / 2)}px;"
12+
bind:clientHeight={height}
13+
bind:clientWidth={width}
14+
>{title}</div>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import Tooltip from './Tooltip.svelte';
2+
3+
export function tooltip(element) {
4+
let title;
5+
let tooltipComponent;
6+
7+
function click(event) {
8+
if(tooltipComponent) tooltipComponent.$destroy();
9+
10+
title = element.dataset.title || element.getAttribute('title');
11+
var rect = element.getBoundingClientRect();
12+
13+
tooltipComponent = new Tooltip({
14+
props: {
15+
title: title,
16+
x: rect.left + window.scrollX + (rect.width / 2),
17+
y: rect.top + window.scrollY,
18+
},
19+
target: document.body,
20+
});
21+
}
22+
23+
function mouseLeave() {
24+
if(tooltipComponent) {
25+
setTimeout(() => {
26+
tooltipComponent.$destroy();
27+
tooltipComponent = null;
28+
}, 500);
29+
}
30+
}
31+
32+
element.addEventListener('click', click);
33+
element.addEventListener('mouseleave', mouseLeave);
34+
35+
return {
36+
destroy() {
37+
element.removeEventListener('click', click);
38+
element.removeEventListener('mouseleave', mouseLeave);
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)