i18n graph titles

This commit is contained in:
Damien Elmes 2020-06-28 14:21:31 +10:00
parent b78f578cd5
commit 595c509546
10 changed files with 37 additions and 13 deletions

View file

@ -88,3 +88,10 @@ statistics-range-all-time = deck life
statistics-range-deck = deck statistics-range-deck = deck
statistics-range-collection = collection statistics-range-collection = collection
statistics-range-search = Search statistics-range-search = Search
statistics-future-due-title = Future Due
statistics-reviews-title = Reviews
statistics-intervals-title = Review Intervals
statistics-answer-buttons-title = Answer Buttons
statistics-hours-title = Hourly Breakdown
statistics-added-title = Added
statistics-card-ease-title = Card Ease

View file

@ -24,6 +24,7 @@
histogramData = buildHistogram(addedData, range); histogramData = buildHistogram(addedData, range);
} }
const title = i18n.tr(i18n.TR.STATISTICS_ADDED_TITLE);
const month = timeSpan(i18n, 1 * MONTH); const month = timeSpan(i18n, 1 * MONTH);
const month3 = timeSpan(i18n, 3 * MONTH); const month3 = timeSpan(i18n, 3 * MONTH);
const year = timeSpan(i18n, 1 * YEAR); const year = timeSpan(i18n, 1 * YEAR);
@ -32,7 +33,7 @@
{#if histogramData} {#if histogramData}
<div class="graph"> <div class="graph">
<h1>Added</h1> <h1>{title}</h1>
<div class="range-box-inner"> <div class="range-box-inner">
<label> <label>

View file

@ -4,8 +4,10 @@
import AxisLabels from "./AxisLabels.svelte"; import AxisLabels from "./AxisLabels.svelte";
import { gatherData, GraphData, renderButtons } from "./buttons"; import { gatherData, GraphData, renderButtons } from "./buttons";
import pb from "../backend/proto"; import pb from "../backend/proto";
import { I18n } from "../i18n";
export let sourceData: pb.BackendProto.GraphsOut | null = null; export let sourceData: pb.BackendProto.GraphsOut | null = null;
export let i18n: I18n;
const bounds = defaultGraphBounds(); const bounds = defaultGraphBounds();
const xText = ""; const xText = "";
@ -17,10 +19,12 @@
console.log("gathering data"); console.log("gathering data");
renderButtons(svg as SVGElement, bounds, gatherData(sourceData)); renderButtons(svg as SVGElement, bounds, gatherData(sourceData));
} }
const title = i18n.tr(i18n.TR.STATISTICS_ANSWER_BUTTONS_TITLE);
</script> </script>
<div class="graph"> <div class="graph">
<h1>Answer Buttons</h1> <h1>{title}</h1>
<svg bind:this={svg} viewBox={`0 0 ${bounds.width} ${bounds.height}`}> <svg bind:this={svg} viewBox={`0 0 ${bounds.width} ${bounds.height}`}>
<g class="bars" /> <g class="bars" />

View file

@ -3,8 +3,10 @@
import { gatherData, prepareData, GraphData } from "./ease"; import { gatherData, prepareData, GraphData } from "./ease";
import pb from "../backend/proto"; import pb from "../backend/proto";
import HistogramGraph from "./HistogramGraph.svelte"; import HistogramGraph from "./HistogramGraph.svelte";
import { I18n } from "../i18n";
export let sourceData: pb.BackendProto.GraphsOut | null = null; export let sourceData: pb.BackendProto.GraphsOut | null = null;
export let i18n: I18n;
let svg = null as HTMLElement | SVGElement | null; let svg = null as HTMLElement | SVGElement | null;
let histogramData = null as HistogramData | null; let histogramData = null as HistogramData | null;
@ -13,11 +15,13 @@
console.log("gathering data"); console.log("gathering data");
histogramData = prepareData(gatherData(sourceData)); histogramData = prepareData(gatherData(sourceData));
} }
const title = i18n.tr(i18n.TR.STATISTICS_CARD_EASE_TITLE);
</script> </script>
{#if histogramData} {#if histogramData}
<div class="graph"> <div class="graph">
<h1>Card Ease</h1> <h1>{title}</h1>
<HistogramGraph data={histogramData} xText="Ease (%)" yText="Number of cards" /> <HistogramGraph data={histogramData} xText="Ease (%)" yText="Number of cards" />
</div> </div>

View file

@ -32,6 +32,7 @@
histogramData = buildHistogram(graphData, range); histogramData = buildHistogram(graphData, range);
} }
const title = i18n.tr(i18n.TR.STATISTICS_FUTURE_DUE_TITLE);
const month = timeSpan(i18n, 1 * MONTH); const month = timeSpan(i18n, 1 * MONTH);
const month3 = timeSpan(i18n, 3 * MONTH); const month3 = timeSpan(i18n, 3 * MONTH);
const year = timeSpan(i18n, 1 * YEAR); const year = timeSpan(i18n, 1 * YEAR);
@ -41,7 +42,7 @@
{#if histogramData} {#if histogramData}
<div class="graph"> <div class="graph">
<h1>Future Due</h1> <h1>{title}</h1>
<div class="range-box-inner"> <div class="range-box-inner">
<label> <label>

View file

@ -139,7 +139,7 @@
<FutureDue {sourceData} {i18n} /> <FutureDue {sourceData} {i18n} />
<ReviewsGraph {sourceData} {revlogRange} {i18n} /> <ReviewsGraph {sourceData} {revlogRange} {i18n} />
<IntervalsGraph {sourceData} {i18n} /> <IntervalsGraph {sourceData} {i18n} />
<EaseGraph {sourceData} /> <EaseGraph {sourceData} {i18n} />
<ButtonsGraph {sourceData} /> <ButtonsGraph {sourceData} {i18n} />
<HourGraph {sourceData} /> <HourGraph {sourceData} {i18n} />
<AddedGraph {sourceData} {i18n} /> <AddedGraph {sourceData} {i18n} />

View file

@ -4,8 +4,10 @@
import AxisLabels from "./AxisLabels.svelte"; import AxisLabels from "./AxisLabels.svelte";
import { gatherData, GraphData, renderHours } from "./hours"; import { gatherData, GraphData, renderHours } from "./hours";
import pb from "../backend/proto"; import pb from "../backend/proto";
import { I18n } from "../i18n";
export let sourceData: pb.BackendProto.GraphsOut | null = null; export let sourceData: pb.BackendProto.GraphsOut | null = null;
export let i18n: I18n;
const bounds = defaultGraphBounds(); const bounds = defaultGraphBounds();
const xText = ""; const xText = "";
@ -17,10 +19,12 @@
console.log("gathering data"); console.log("gathering data");
renderHours(svg as SVGElement, bounds, gatherData(sourceData)); renderHours(svg as SVGElement, bounds, gatherData(sourceData));
} }
const title = i18n.tr(i18n.TR.STATISTICS_HOURS_TITLE);
</script> </script>
<div class="graph"> <div class="graph">
<h1>Hours</h1> <h1>{title}</h1>
<svg bind:this={svg} viewBox={`0 0 ${bounds.width} ${bounds.height}`}> <svg bind:this={svg} viewBox={`0 0 ${bounds.width} ${bounds.height}`}>
<g class="bars" /> <g class="bars" />

View file

@ -30,13 +30,14 @@
histogramData = prepareIntervalData(intervalData, range); histogramData = prepareIntervalData(intervalData, range);
} }
const title = i18n.tr(i18n.TR.STATISTICS_INTERVALS_TITLE);
const month = timeSpan(i18n, 1 * MONTH); const month = timeSpan(i18n, 1 * MONTH);
const all = i18n.tr(i18n.TR.STATISTICS_RANGE_ALL_TIME); const all = i18n.tr(i18n.TR.STATISTICS_RANGE_ALL_TIME);
</script> </script>
{#if histogramData} {#if histogramData}
<div class="graph intervals"> <div class="graph intervals">
<h1>Review Intervals</h1> <h1>{title}</h1>
<div class="range-box-inner"> <div class="range-box-inner">
<label> <label>

View file

@ -43,13 +43,14 @@
renderReviews(svg as SVGElement, bounds, graphData, range, showTime); renderReviews(svg as SVGElement, bounds, graphData, range, showTime);
} }
const title = i18n.tr(i18n.TR.STATISTICS_REVIEWS_TITLE);
const month = timeSpan(i18n, 1 * MONTH); const month = timeSpan(i18n, 1 * MONTH);
const month3 = timeSpan(i18n, 3 * MONTH); const month3 = timeSpan(i18n, 3 * MONTH);
const year = timeSpan(i18n, 1 * YEAR); const year = timeSpan(i18n, 1 * YEAR);
</script> </script>
<div class="graph"> <div class="graph">
<h1>Reviews</h1> <h1>{title}</h1>
<div class="range-box-inner"> <div class="range-box-inner">
<label> <label>

View file

@ -96,9 +96,10 @@ export function buildHistogram(
.domain(x.domain() as any) .domain(x.domain() as any)
.thresholds(x.ticks(desiredBars))(data.entries() as any); .thresholds(x.ticks(desiredBars))(data.entries() as any);
// start slightly darker const adjustedRange = scaleLinear().range([0.8, 0.3]);
const shiftedMin = xMin! - Math.round((xMax - xMin!) / 10); const colourScale = scaleSequential((n) =>
const colourScale = scaleSequential(interpolateGreens).domain([shiftedMin, xMax]); interpolateGreens(adjustedRange(n))
).domain([xMin!, xMax]);
const total = sum(bins as any, binValue); const total = sum(bins as any, binValue);