diff --git a/frontend/package.json b/frontend/package.json index f4aec90..eff4779 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,9 +24,9 @@ "typescript": "^3.9.3" }, "dependencies": { + "@ckeditor/ckeditor5-build-classic": "^23.0.0", "@types/d3": "^5.7.2", "d3": "^6.2.0", - "sigma": "1.2.1", "sirv-cli": "^1.0.0", "svelte-simple-modal": "^0.6.1" } diff --git a/frontend/src/Editor.svelte b/frontend/src/Editor.svelte index 6ef4d20..aaeb2dd 100644 --- a/frontend/src/Editor.svelte +++ b/frontend/src/Editor.svelte @@ -58,7 +58,7 @@ TaskDetailEditor, { task: e.detail, tasks: tasks }, { closeButton: false }, - { onClose: () => { console.log("callback invoked", tasks); tasks = tasks; }} + { onClose: () => { tasks = tasks; }} ); } diff --git a/frontend/src/TaskDetailEditor.svelte b/frontend/src/TaskDetailEditor.svelte index dd306c7..6d67e48 100644 --- a/frontend/src/TaskDetailEditor.svelte +++ b/frontend/src/TaskDetailEditor.svelte @@ -2,7 +2,9 @@ import { getCategories } from "./task-loader"; import type { TaskDescriptor, TasksFile } from "./task-loader"; import { getContext } from "svelte"; - import { copyFieldsThatExist } from "./helpers"; + import { onMount } from "svelte"; + import ClassicEditor from "@ckeditor/ckeditor5-build-classic"; +import App from "./App.svelte"; const { close } = getContext("simple-modal"); @@ -20,38 +22,89 @@ categories: getCategories(tasks, task.id), }; + // setup editor + let editor; + onMount(() => { + ClassicEditor.create(document.querySelector("#editor")) + .then((e) => { + editor = e; + }) + .catch((error) => { + alert("Editor init error. Open console to see details."); + console.error(error); + }); + }); + function removeCategory(catName: string) { return function () { - editData.categories = editData.categories.filter((t) => t != catName); + editData.categories = editData.categories.filter( + (t) => t != catName + ); }; } function removeDependency(dep: string) { return function () { - editData.task.requires = editData.task.requires.filter((t) => t != dep); + editData.task.requires = editData.task.requires.filter( + (t) => t != dep + ); }; } function saveAndExit() { + if (editData.task.type == "text") + editData.task.htmlContent = editor.getData() Object.assign(task, editData.task); + + // kategorie musíme první odevšad odstranit + for (const t of Object.keys(tasks.clusters)) { + tasks.clusters[t] = tasks.clusters[t].filter( + (id) => id != editData.task.id + ); + } + // a pak všude přidat + for (const t of editData.categories) { + tasks.clusters[t] = [ + ...(tasks.clusters[t] ?? []), + editData.task.id, + ]; + tasks.clusters[t].sort(); // make git happy + } + + // a nakonec zavřít dialog close(); } + +
tasks.json
.
+ nekurzívou se dá editovat. Jakékoliv velké operace je ale vhodné
+ dělat přímo se souborem tasks.json