diff --git a/src/lib/GlobalQueryCard.svelte b/src/lib/GlobalQueryCard.svelte index 8757f45..85d2b00 100644 --- a/src/lib/GlobalQueryCard.svelte +++ b/src/lib/GlobalQueryCard.svelte @@ -1,6 +1,4 @@ @@ -49,7 +62,7 @@

Global budget

How much do we have left?

-

+

Limit global warming to (°C) Number(d))} name="temperature" /> -

-

+

+
Acceptable risk of exceeding global warming limit Number(d))} name="risk" /> -

-

+

+
Reduction of non-CO2 emissions Number(d))} name="nonCO2red" /> -

+

Global pathway

How do we spend these emissions over time?

-

+

End-of-century negative emissions Number(d))} name="negEmis" /> -

-

+

+
The timing of early-century mitigation -

+
diff --git a/src/lib/charts/LeafletMap.svelte b/src/lib/charts/LeafletMap.svelte index df26ec7..2fefd62 100644 --- a/src/lib/charts/LeafletMap.svelte +++ b/src/lib/charts/LeafletMap.svelte @@ -1,7 +1,7 @@ @@ -52,11 +55,11 @@ class="path-area" d={path} fill={color} - onmouseover={hover} + onmouseover={(hover)} onmousemove={hover} - onfocus={(e) => dispatch('mouseover', { e })} - onmouseout={() => dispatch('mouseout')} - onblur={() => dispatch('mouseout')} + onfocus={(e) => mouseover({ e })} + onmouseout={mouseout} + onblur={mouseout} role="tooltip" /> diff --git a/src/lib/charts/components/Line.svelte b/src/lib/charts/components/Line.svelte index 2bff8cc..fff02b3 100644 --- a/src/lib/charts/components/Line.svelte +++ b/src/lib/charts/components/Line.svelte @@ -4,7 +4,7 @@ --> @@ -48,11 +51,11 @@ const ox = $xScale.invert(e.offsetX); // find entry in data which is closest to ox const i = finder.center(data, ox); - return dispatch('mouseover', { e, row: data[i] }); + return mouseover({ e, row: data[i] }); }} - onmouseout={(e) => dispatch('mouseout', { e })} - onfocus={(e) => dispatch('mouseover', { e })} - onblur={() => dispatch('mouseout')} + onmouseout={(e) => mouseout({ e })} + onfocus={(e) => mouseover({ e })} + onblur={() => mouseout()} role="tooltip" /> diff --git a/src/lib/charts/components/NdcRange.svelte b/src/lib/charts/components/NdcRange.svelte index 3b378ef..de86d6d 100644 --- a/src/lib/charts/components/NdcRange.svelte +++ b/src/lib/charts/components/NdcRange.svelte @@ -6,7 +6,7 @@ import { handlers } from 'svelte/legacy'; import type { ScaleLinear } from 'd3'; - import { getContext, SvelteComponent, type ComponentEvents, createEventDispatcher } from 'svelte'; + import { getContext } from 'svelte'; import type { Readable } from 'svelte/store'; const { xScale, yScale } = getContext<{ @@ -14,8 +14,6 @@ yScale: Readable>; }>('LayerCake'); - - interface Props { x: number; y0: number; @@ -26,6 +24,8 @@ textNdc: string; // TODO use color of ndc series on global page? color?: string; + mouseover: (e?: any) => void; + mouseout: (e?: any) => void; } let { @@ -36,12 +36,13 @@ textNdcMin, textNdcMax, textNdc, - color = 'black' + color = 'black', + mouseover, + mouseout, }: Props = $props(); - const dispatch = createEventDispatcher(); - function hover(e: ComponentEvents) { - return dispatch('mouseover', { e, row: { time: x, min: y0, max: y1 } }); + function hover(e: any) { + return mouseover({ e, row: { time: x, min: y0, max: y1 } }); } @@ -53,9 +54,9 @@ y2={$yScale(y0)} stroke={color} onmouseover={hover} - onfocus={() => dispatch('mouseover')} - onmouseout={handlers(() => dispatch('mouseout'), () => dispatch('mouseout'))} - onblur={() => dispatch('mouseout')} + onfocus={() => mouseover()} + onmouseout={handlers(() => mouseout(), () => mouseout())} + onblur={() => mouseout()} role="tooltip" /> dispatch('mouseover')} - onmouseout={handlers(() => dispatch('mouseout'), () => dispatch('mouseout'))} - onblur={(e) => dispatch('mouseout')} + onfocus={() => mouseover()} + onmouseout={handlers(() => mouseout(), () => mouseout())} + onblur={() => mouseout()} role="tooltip" /> dispatch('mouseover')} - onmouseout={handlers(() => dispatch('mouseout'), () => dispatch('mouseout'))} - onblur={() => dispatch('mouseout')} + onfocus={() => mouseover()} + onmouseout={handlers(() => mouseout(), () => mouseout())} + onblur={() => mouseout()} role="tooltip" /> diff --git a/src/routes/global/+page.svelte b/src/routes/global/+page.svelte index ff0704e..b13aa05 100644 --- a/src/routes/global/+page.svelte +++ b/src/routes/global/+page.svelte @@ -5,7 +5,7 @@ import { tweened } from 'svelte/motion'; import { cubicOut } from 'svelte/easing'; - import { page } from '$app/stores'; + import { page } from '$app/state'; import { browser } from '$app/environment'; import { goto } from '$app/navigation'; import { tour } from '$lib/shared/stores'; @@ -18,7 +18,7 @@ import type { PageData } from '../global/$types'; import GlobalBudgetCard from '$lib/GlobalBudgetCard.svelte'; import GlobalQueryCard from '$lib/GlobalQueryCard.svelte'; - import { onMount, type ComponentEvents, type SvelteComponent } from 'svelte'; + import { onMount } from 'svelte'; import { driver } from 'driver.js'; import 'driver.js/dist/driver.css'; @@ -71,11 +71,15 @@ const ipcc_blue = '#5bb0c6'; const ipcc_purple = '#a67ab8'; - function updateQueryParam(name: string, value: string) { + async function updateQueryParam(name: string, value: string) { if (browser) { - const params = new URLSearchParams($page.url.search); - params.set(name, value); - goto(`?${params.toString()}`); + const current = page.url.search + const params = new URLSearchParams(current); + if (params.get(name) !== value) { + params.set(name, value); + console.log({current, goto: `?${params.toString()}`}); + await goto(`?${params.toString()}`); + } } } @@ -88,7 +92,7 @@ let evt = $state({}); function hoverBuilder(tmpl: (row: any) => string) { - return function (e: ComponentEvents) { + return function (e: any) { const row = e.detail.row; if (row === undefined) { return; @@ -239,8 +243,8 @@ x={'time'} y={'value'} color="black" - on:mouseover={hoverHistoricalCarbon} - on:mouseout={(e) => (evt = e)} + mouseover={hoverHistoricalCarbon} + mouseout={(e) => (evt = e)} /> {#if policyPathwayToggles.current || emissionGapHover} @@ -250,8 +254,8 @@ y0={'min'} y1={'max'} color={ipcc_red} - on:mouseover={hoverCurrentPolicy} - on:mouseout={(e) => (evt = e)} + mouseover={hoverCurrentPolicy} + mouseout={(e) => (evt = e)} /> {/if} {#if policyPathwayToggles.ndc || ambitionGapHover} @@ -262,8 +266,8 @@ y0={'min'} y1={'max'} color={ipcc_purple} - on:mouseover={hoverNdc} - on:mouseout={(e) => (evt = e)} + mouseover={hoverNdc} + mouseout={(e) => (evt = e)} /> {/if} {#if policyPathwayToggles.netzero} @@ -274,8 +278,8 @@ y0={'min'} y1={'max'} color={ipcc_blue} - on:mouseover={hoverNetzero} - on:mouseout={(e) => (evt = e)} + mouseover={hoverNetzero} + mouseout={(e) => (evt = e)} /> {/if} @@ -299,8 +303,8 @@ x={'time'} y={'value'} color={ipcc_green} - on:mouseover={hoverPathway} - on:mouseout={(e) => (evt = e)} + mouseover={hoverPathway} + mouseout={(e) => (evt = e)} /> diff --git a/src/routes/map/+page.svelte b/src/routes/map/+page.svelte index 46bb0dd..958ee99 100644 --- a/src/routes/map/+page.svelte +++ b/src/routes/map/+page.svelte @@ -48,7 +48,8 @@ // TODO get called once instead of currently being called twice if (params.get(name) !== value) { params.set(name, value); - goto(`?${params.toString()}`); + console.log('goto', `?${params.toString()}`); + // goto(`?${params.toString()}`); } } } diff --git a/src/routes/regions/[iso]/+page.svelte b/src/routes/regions/[iso]/+page.svelte index f816794..af2006f 100644 --- a/src/routes/regions/[iso]/+page.svelte +++ b/src/routes/regions/[iso]/+page.svelte @@ -32,8 +32,11 @@ function updateQueryParam(name: string, value: string) { if (browser) { const params = new URLSearchParams($page.url.search); + if (params.get(name) !== value) { params.set(name, value); - goto(`?${params.toString()}`); + console.log('goto', `?${params.toString()}`); + // goto(`?${params.toString()}`); + } } } @@ -177,8 +180,8 @@ x={'time'} y={'value'} color="black" - on:mouseover={hoverHistoricalCarbon} - on:mouseout={(e) => (evt = e)} + mouseover={hoverHistoricalCarbon} + mouseout={(e) => (evt = e)} /> {#each Object.entries(principles) as [id, { color, label }]} {#if activeEffortSharings[id]} @@ -190,8 +193,8 @@ y0={'min'} y1={'max'} {color} - on:mouseover={hoverEffortSharing(label)} - on:mouseout={(e) => (evt = e)} + mouseover={hoverEffortSharing(label)} + mouseout={(e) => (evt = e)} /> {/if} @@ -206,8 +209,8 @@ textNdcMax={`Max: ${range[1].toFixed(0)}`} textNdc={`NDC`} color="black" - on:mouseover={hoverNdc} - on:mouseout={(e) => (evt = e)} + mouseover={hoverNdc} + mouseout={(e) => (evt = e)} /> {/each} {/if}