mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00

* cards will still be mostly counted by ctype rather than queue * if the user wants to include inactive cards buried and suspended will be first filtered out, before the rest is counted by ctype
92 lines
2.5 KiB
Svelte
92 lines
2.5 KiB
Svelte
<script lang="typescript">
|
|
import { defaultGraphBounds } from "./graph-helpers";
|
|
import { gatherData, renderCards } from "./card-counts";
|
|
import type { GraphData, TableDatum } from "./card-counts";
|
|
import type pb from "anki/backend_proto";
|
|
import type { I18n } from "anki/i18n";
|
|
import SeparateInactiveCheckbox from "./SeparateInactiveCheckbox.svelte";
|
|
|
|
export let sourceData: pb.BackendProto.GraphsOut;
|
|
export let i18n: I18n;
|
|
|
|
let separateInactive = false;
|
|
let svg = null as HTMLElement | SVGElement | null;
|
|
|
|
let bounds = defaultGraphBounds();
|
|
bounds.width = 225;
|
|
bounds.marginBottom = 0;
|
|
|
|
let graphData = (null as unknown) as GraphData;
|
|
let tableData = (null as unknown) as TableDatum[];
|
|
|
|
$: {
|
|
graphData = gatherData(sourceData, separateInactive, i18n);
|
|
tableData = renderCards(svg as any, bounds, graphData);
|
|
}
|
|
|
|
const total = i18n.tr(i18n.TR.STATISTICS_COUNTS_TOTAL_CARDS);
|
|
</script>
|
|
|
|
<style>
|
|
svg {
|
|
transition: opacity 1s;
|
|
}
|
|
|
|
.counts-outer {
|
|
display: flex;
|
|
justify-content: center;
|
|
}
|
|
|
|
.counts-table {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
}
|
|
|
|
table {
|
|
border-spacing: 1em 0;
|
|
}
|
|
|
|
.right {
|
|
text-align: right;
|
|
}
|
|
</style>
|
|
|
|
<div class="graph" id="graph-card-counts">
|
|
<h1>{graphData.title}</h1>
|
|
|
|
<div class="range-box-inner">
|
|
<SeparateInactiveCheckbox bind:separateInactive {i18n} />
|
|
</div>
|
|
|
|
<div class="counts-outer">
|
|
<svg
|
|
bind:this={svg}
|
|
viewBox={`0 0 ${bounds.width} ${bounds.height}`}
|
|
width={bounds.width}
|
|
height={bounds.height}
|
|
style="opacity: {graphData.totalCards ? 1 : 0}">
|
|
<g class="counts" />
|
|
</svg>
|
|
<div class="counts-table">
|
|
<table>
|
|
{#each tableData as d, _idx}
|
|
<tr>
|
|
<!-- prettier-ignore -->
|
|
<td>
|
|
<span style="color: {d.colour};">■ </span>{d.label}
|
|
</td>
|
|
<td class="right">{d.count}</td>
|
|
<td class="right">{d.percent}</td>
|
|
</tr>
|
|
{/each}
|
|
|
|
<tr>
|
|
<td><span style="visibility: hidden;">■</span> {total}</td>
|
|
<td class="right">{graphData.totalCards}</td>
|
|
<td />
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|