frontend: Add a cloud word for tags
This commit is contained in:
parent
daae6f4f07
commit
76f830b332
8
frontend/fic/package-lock.json
generated
8
frontend/fic/package-lock.json
generated
@ -14,7 +14,8 @@
|
|||||||
"bootswatch": "^5.1.3",
|
"bootswatch": "^5.1.3",
|
||||||
"hash-wasm": "^4.9.0",
|
"hash-wasm": "^4.9.0",
|
||||||
"seedrandom": "^3.0.5",
|
"seedrandom": "^3.0.5",
|
||||||
"vite": "^5.0.0"
|
"vite": "^5.0.0",
|
||||||
|
"wordcloud": "^1.2.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sveltejs/adapter-static": "^3.0.0",
|
"@sveltejs/adapter-static": "^3.0.0",
|
||||||
@ -2857,6 +2858,11 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wordcloud": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wordcloud/-/wordcloud-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-fUnDsGrHXou+49j1OeKaC7nOeZPx+sWjIet0L/j6eAcm0nXy+a+AuUs/iDAX4PLBg1Zc6wgXWXhoXdQsXRWAEw=="
|
||||||
|
},
|
||||||
"node_modules/wrappy": {
|
"node_modules/wrappy": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
"@sveltejs/adapter-static": "^3.0.0",
|
"@sveltejs/adapter-static": "^3.0.0",
|
||||||
"@sveltejs/kit": "^2.0.0",
|
"@sveltejs/kit": "^2.0.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^3.0.0",
|
"@sveltejs/vite-plugin-svelte": "^3.0.0",
|
||||||
|
"@sveltestrap/sveltestrap": "^6.2.1",
|
||||||
"eslint": "^8.4.2",
|
"eslint": "^8.4.2",
|
||||||
"eslint-config-prettier": "^9.0.0",
|
"eslint-config-prettier": "^9.0.0",
|
||||||
"eslint-plugin-svelte": "^2.35.1",
|
"eslint-plugin-svelte": "^2.35.1",
|
||||||
@ -20,7 +21,6 @@
|
|||||||
"sass": "^1.51.0",
|
"sass": "^1.51.0",
|
||||||
"sass-loader": "^14.0.0",
|
"sass-loader": "^14.0.0",
|
||||||
"svelte": "^4.0.0",
|
"svelte": "^4.0.0",
|
||||||
"@sveltestrap/sveltestrap": "^6.2.1",
|
|
||||||
"vite": "^5.0.0"
|
"vite": "^5.0.0"
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
@ -31,6 +31,7 @@
|
|||||||
"bootswatch": "^5.1.3",
|
"bootswatch": "^5.1.3",
|
||||||
"hash-wasm": "^4.9.0",
|
"hash-wasm": "^4.9.0",
|
||||||
"seedrandom": "^3.0.5",
|
"seedrandom": "^3.0.5",
|
||||||
"vite": "^5.0.0"
|
"vite": "^5.0.0",
|
||||||
|
"wordcloud": "^1.2.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
57
frontend/fic/src/routes/tags/+page.svelte
Normal file
57
frontend/fic/src/routes/tags/+page.svelte
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<script>
|
||||||
|
import { tick } from 'svelte';
|
||||||
|
import { goto } from '$app/navigation';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Container,
|
||||||
|
Icon,
|
||||||
|
} from '@sveltestrap/sveltestrap';
|
||||||
|
|
||||||
|
import WordCloud from 'wordcloud';
|
||||||
|
|
||||||
|
import { themesStore } from '$lib/stores/themes.js';
|
||||||
|
|
||||||
|
tick().then(() => {
|
||||||
|
WordCloud(
|
||||||
|
document.getElementById('wordcloud'),
|
||||||
|
{
|
||||||
|
list: computeTags(),
|
||||||
|
gridSize: Math.round(20 * document.getElementById('wordcloud').clientWidth / 1024),
|
||||||
|
weightFactor: function (size) {
|
||||||
|
return Math.pow(size, 2.8) * document.getElementById('wordcloud').clientWidth / 1024;
|
||||||
|
},
|
||||||
|
rotateRatio: 0.5,
|
||||||
|
ellipticity: 14,
|
||||||
|
click: (item) => {
|
||||||
|
goto('tags/' + item[0]);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
function computeTags() {
|
||||||
|
const ttags = { };
|
||||||
|
|
||||||
|
for (const key in $themesStore) {
|
||||||
|
const theme = $themesStore[key];
|
||||||
|
for (const k in theme.exercices) {
|
||||||
|
const exercice = theme.exercices[k];
|
||||||
|
for (const tag of exercice.tags) {
|
||||||
|
if (!ttags[tag]) ttags[tag] = 1;
|
||||||
|
else ttags[tag] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const tags = [];
|
||||||
|
for (const tag in ttags) {
|
||||||
|
tags.push([tag, ttags[tag]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Container class="mt-2 d-flex">
|
||||||
|
<canvas id="wordcloud" class="w-100" width="1600" height="730"></canvas>
|
||||||
|
</Container>
|
Loading…
x
Reference in New Issue
Block a user