anki/ts/graphs/CardCounts.svelte

150 lines
4.4 KiB
Svelte
Raw Normal View History

<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts">
Refactor i18n (#1405) Merging note: the typing changes were fixed in a separate PR. * Put rootDirs into subprojects - typings do not work for any ts or svelte files - if we set the 'rootDirs' in ts/tsconfig.json to '../bazel-bin/ts' and then inherit them from e.g. editor, the root will be changed to '../../bazel-bin/ts', however editor needs look in '../../bazel-bin/ts/editor' instead. * Rename i18n and i18n_helpers to i18n-generated and i18n - This way, we can restrict the awkwardness of importing files outside the ts directory within lib * Fix missing typing of i18n and backend_proto by adding back symlinks * Split up i18n-generated into i18n-{translate,modules} * Change i18n from singleton to functions * Revert "Put rootDirs into subprojects" This partially reverts commit e1d4292ce3979e7b7ee21bf3951b8a462d45c29c. It seems like this might not be necessary after all. However some other change made on this branch seems to have fixed the .svelte.d.ts imports * Introduce i18n-bundles to remove circular import There was a circular import i18n.ts <-> i18n-translate.ts * Create own directory for i18n * Move lib/i18n/translate to lib/translate * This restores tree shaking * Update tsconfig libs and module * es2018-2020 have wide support on all modern browsers including * Switch bundles and langs inside i18n to variables again * Add missing copyright header * Rename translate.ts to ftl.ts * Remove the symlinks again I added them to fix to have completion for tr, however this would have also have meant to abandon the tree shaking. As we want to have tree shaking, it's also not necessary to have the symlinks anymore * Revert "Update tsconfig libs and module" This reverts commit 0a96776a475e9901c1f9f3407c726d1d002fb9ef. * move withCollapsedWhitespace back to i18n/utils * Add back /ts as in rootDirs
2021-10-07 15:31:49 +02:00
import { createEventDispatcher } from "svelte";
import * as tr2 from "../lib/ftl";
Refactor i18n (#1405) Merging note: the typing changes were fixed in a separate PR. * Put rootDirs into subprojects - typings do not work for any ts or svelte files - if we set the 'rootDirs' in ts/tsconfig.json to '../bazel-bin/ts' and then inherit them from e.g. editor, the root will be changed to '../../bazel-bin/ts', however editor needs look in '../../bazel-bin/ts/editor' instead. * Rename i18n and i18n_helpers to i18n-generated and i18n - This way, we can restrict the awkwardness of importing files outside the ts directory within lib * Fix missing typing of i18n and backend_proto by adding back symlinks * Split up i18n-generated into i18n-{translate,modules} * Change i18n from singleton to functions * Revert "Put rootDirs into subprojects" This partially reverts commit e1d4292ce3979e7b7ee21bf3951b8a462d45c29c. It seems like this might not be necessary after all. However some other change made on this branch seems to have fixed the .svelte.d.ts imports * Introduce i18n-bundles to remove circular import There was a circular import i18n.ts <-> i18n-translate.ts * Create own directory for i18n * Move lib/i18n/translate to lib/translate * This restores tree shaking * Update tsconfig libs and module * es2018-2020 have wide support on all modern browsers including * Switch bundles and langs inside i18n to variables again * Add missing copyright header * Rename translate.ts to ftl.ts * Remove the symlinks again I added them to fix to have completion for tr, however this would have also have meant to abandon the tree shaking. As we want to have tree shaking, it's also not necessary to have the symlinks anymore * Revert "Update tsconfig libs and module" This reverts commit 0a96776a475e9901c1f9f3407c726d1d002fb9ef. * move withCollapsedWhitespace back to i18n/utils * Add back /ts as in rootDirs
2021-10-07 15:31:49 +02:00
import type { Stats } from "../lib/proto";
import type { PreferenceStore } from "../sveltelib/preferences";
import type { GraphData, TableDatum } from "./card-counts";
import { gatherData, renderCards } from "./card-counts";
import Graph from "./Graph.svelte";
import type { SearchEventMap } from "./graph-helpers";
import { defaultGraphBounds } from "./graph-helpers";
import InputBox from "./InputBox.svelte";
export let sourceData: Stats.GraphsResponse;
export let preferences: PreferenceStore<Stats.GraphPreferences>;
const { cardCountsSeparateInactive, browserLinksSupported } = preferences;
const dispatch = createEventDispatcher<SearchEventMap>();
2020-07-04 05:38:46 +02:00
let svg = null as HTMLElement | SVGElement | null;
const bounds = defaultGraphBounds();
2020-08-12 10:58:21 +02:00
bounds.width = 225;
bounds.marginBottom = 0;
let graphData = null as unknown as GraphData;
let tableData = null as unknown as TableDatum[];
2020-07-06 06:01:49 +02:00
$: {
graphData = gatherData(sourceData, $cardCountsSeparateInactive);
2020-08-12 10:58:21 +02:00
tableData = renderCards(svg as any, bounds, graphData);
2020-06-27 13:10:17 +02:00
}
const label = tr2.statisticsCountsSeparateSuspendedBuriedCards();
const total = tr2.statisticsCountsTotalCards();
2020-07-04 05:38:46 +02:00
</script>
<Graph title={graphData.title}>
<InputBox>
<label>
<input type="checkbox" bind:checked={$cardCountsSeparateInactive} />
{label}
</label>
</InputBox>
2020-08-12 10:58:21 +02:00
<div class="counts-outer">
<div class="svg-container" width={bounds.width} height={bounds.height}>
<svg
bind:this={svg}
viewBox={`0 0 ${bounds.width} ${bounds.height}`}
style="opacity: {graphData.totalCards ? 1 : 0}"
>
<g class="counts" />
</svg>
</div>
2020-08-12 10:58:21 +02:00
<div class="counts-table">
<table>
{#each tableData as d, _idx}
2020-08-12 10:58:21 +02:00
<tr>
<!-- prettier-ignore -->
2020-08-12 10:58:21 +02:00
<td>
<span style="color: {d.colour};">&nbsp;</span>
{#if browserLinksSupported}
<span class="search-link" on:click={() => dispatch('search', { query: d.query })}>{d.label}</span>
{:else}
<span>{d.label}</span>
{/if}
2020-08-12 10:58:21 +02:00
</td>
<td class="right">{d.count}</td>
<td class="right">{d.percent}</td>
</tr>
{/each}
<tr>
<td><span style="visibility: hidden;"></span> {total}</td>
2020-08-12 10:58:21 +02:00
<td class="right">{graphData.totalCards}</td>
<td />
</tr>
2020-08-12 10:58:21 +02:00
</table>
</div>
</div>
</Graph>
<style lang="scss">
svg {
transition: opacity 1s;
}
.counts-outer {
display: flex;
justify-content: center;
margin: 0 4vw;
.svg-container {
width: 225px;
}
.counts-table {
display: flex;
flex-direction: column;
justify-content: center;
table {
border-spacing: 1em 0;
padding-left: 4vw;
td {
white-space: nowrap;
padding: 0 min(4vw, 40px);
&.right {
text-align: right;
}
}
}
}
}
/* On narrow devices, stack graph and table in a column */
@media only screen and (max-width: 600px) {
.counts-outer {
display: flex;
flex-direction: column;
align-items: center;
.svg-container {
width: 180px;
svg {
margin-left: 4vw;
}
}
.counts-table table td {
padding: 0 min(6vw, 30px);
}
}
}
.search-link:hover {
cursor: pointer;
Add comments to Sass variables and tweak main window (#2137) * Prevent multiple inclusion of variables in CSS files * Use dict instead of tuple for variables * Add comments to variables * Improve appearance of main window * Tweak main window styles * Use json.dumps over pprint.format * Make study button primary * Improve header margin * Make bottom toolbar slimmer * Make congrats page more balanced * Fix type issue * Replace day/night with light/dark * Exclude top-level-drag-row from hover effect * Create dataclass for variables * Run formatter * Apply CSS variables from Python side Why go full-circle with the Sass variables? This way we only need one interface for add-on authors to interact with. It also makes it easier for us to apply additional themes in the future. * Fix typing * Fix rgba values in Qt * Darken button background * Fix palette not being applied in light theme For some odd reason this problem arose much later than #2016. * Tweak default button look * Reformat * Apply CSS vars to ts pages * Include elevation in button_mixins_lib * Cast opacity to int * Add some margin to studiedToday info * Tweak light theme button gradient * Tweak highlight-bg for light theme * Add back default button color as it made the browser sidebar tool icons dark in light theme. * Reformat * Tweak light theme buttons once more Sorry for the back-and-forth. Sass only compiles when there are changes in user files, not when I only change the vars. * Fix bottom toolbar button indicators * Make buttons more clicky * Fix button padding * Handle macOS separately again * Decrease elevation effect for main window buttons to 1 * Imitate box-shadow for Qt elements * Adjust shadow vars * Adjust primary border color because the save button in the deck options had a lighter color than its background gradient. * Boost box-shadow color of primary buttons * Format * Adjust Qt box-shadow imitation and shadow colors * Use more subtle default shadow color * Add some more padding to top toolbar * Revert "Apply CSS vars to ts pages" This reverts commit 5d8e7f6b7ffc8894b6517ecbb8cfba35407fc69a. * Revert "Apply CSS variables from Python side" This reverts commit 87db774412fd2bfd75e2630d2c5e782daef96b5f. * Better match the standard macOS buttons In the dark theme the standard color is a lighter grey, but at least the size/shape is similar again. This doesn't work for the editor buttons. * Reduce the top margin of the congrats screen * Fix illegible buttons when changing theme on macOS; match dark button style
2022-10-29 02:48:53 +02:00
color: var(--fg-link);
text-decoration: underline;
}
</style>