diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java b/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java index 1373d5f..26a2e2c 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/WikiPage.java @@ -4,6 +4,7 @@ package de.srsoftware.umbrella.core.model; import static de.srsoftware.umbrella.core.Constants.*; import static de.srsoftware.umbrella.core.Util.markdown; import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.invalidFieldException; +import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.unprocessable; import de.srsoftware.tools.Mappable; import de.srsoftware.umbrella.core.api.UserService; @@ -71,9 +72,7 @@ public class WikiPage implements Mappable { var val = json.get(key); switch (key){ case ID: - if (!(val instanceof String s)) throw invalidFieldException(ID,"String"); - title(s); - break; + throw unprocessable("{0} cannot be altered!",ID); case CONTENT: if (!(val instanceof String s)) throw invalidFieldException(CONTENT,"String"); content(s); @@ -101,6 +100,10 @@ public class WikiPage implements Mappable { } } break; + case TITLE: + if (!(val instanceof String t)) throw invalidFieldException(TITLE,"String"); + title(t); + break; } } return this; @@ -113,6 +116,7 @@ public class WikiPage implements Mappable { private WikiPage title(String newVal) { if (title.equals(newVal)) return this; title = newVal; + version++; dirtyFields.add(TITLE); return this; } diff --git a/frontend/src/routes/wiki/View.svelte b/frontend/src/routes/wiki/View.svelte index 9c4f339..4f02746 100644 --- a/frontend/src/routes/wiki/View.svelte +++ b/frontend/src/routes/wiki/View.svelte @@ -5,7 +5,8 @@ import { t } from '../../translations.svelte'; import { user } from '../../user.svelte'; - import Editor from '../../Components/MarkdownEditor.svelte'; + import MarkdownEditor from '../../Components/MarkdownEditor.svelte'; + import LineEditor from '../../Components/LineEditor.svelte'; import Notes from '../notes/RelatedNotes.svelte'; import PermissionEditor from '../../Components/PermissionEditor.svelte'; import TagList from '../tags/TagList.svelte'; @@ -15,6 +16,7 @@ let page = $state(null); let router = useTinyRouter(); let members = $state({}); + let editable = $derived(page.members[user.id].permission.code<4); async function addMember(entry){ let newMembers = JSON.parse(JSON.stringify(page.members)); @@ -88,6 +90,11 @@ return loadContent(res); } + async function patchTitle(t){ + var result = await(patch({title:t})); + router.navigate(`/wiki/${page.id}/view`); + } + async function updatePermission(uid, newPerm){ let newMembers = JSON.parse(JSON.stringify(page.members)); newMembers[uid] = {permission:newPerm}; @@ -103,18 +110,17 @@ {t('version')} {#each page.versions as v} - {v}   + {v}   {/each} -

{page.title}

+ patchTitle(t)} /> {#if page.version != page.versions[0]} {t('not_recent_version')} {/if} -{#if page.members[user.id].permission.code<4} - patch({content:s})}> + patch({content:s})} /> +{#if editable} {:else} -
{@html page.content.rendered}
diff --git a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java index 02892e3..567af32 100644 --- a/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java +++ b/wiki/src/main/java/de/srsoftware/umbrella/wiki/SqliteDb.java @@ -306,7 +306,8 @@ public class SqliteDb extends BaseDb implements WikiDb { @Override public WikiPage save(WikiPage page) { try { - if (page.isDirty(CONTENT) || page.isDirty(ID)) insertInto(TABLE_PAGES,ID,VERSION,CONTENT).values(page.title(),page.version(),page.content()).execute(db).close(); + if (page.isDirty(CONTENT) || page.isDirty(ID) || page.isDirty(TITLE)) insertInto(TABLE_PAGES,ID,VERSION,TITLE,CONTENT) + .values(page.id(),page.version(),page.title(),page.content()).execute(db).close(); if (page.isDirty(MEMBERS)){ Query.delete().from(TABLE_PAGES_USERS).where(PAGE_ID,Condition.equal(page.title())).where(USER_ID,Condition.notIn(page.members().keySet().toArray())).execute(db); var query = replaceInto(TABLE_PAGES_USERS,PAGE_ID,USER_ID,PERMISSIONS);