implemented renaming of wiki page
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -4,6 +4,7 @@ package de.srsoftware.umbrella.core.model;
|
|||||||
import static de.srsoftware.umbrella.core.Constants.*;
|
import static de.srsoftware.umbrella.core.Constants.*;
|
||||||
import static de.srsoftware.umbrella.core.Util.markdown;
|
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.invalidFieldException;
|
||||||
|
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.unprocessable;
|
||||||
|
|
||||||
import de.srsoftware.tools.Mappable;
|
import de.srsoftware.tools.Mappable;
|
||||||
import de.srsoftware.umbrella.core.api.UserService;
|
import de.srsoftware.umbrella.core.api.UserService;
|
||||||
@@ -71,9 +72,7 @@ public class WikiPage implements Mappable {
|
|||||||
var val = json.get(key);
|
var val = json.get(key);
|
||||||
switch (key){
|
switch (key){
|
||||||
case ID:
|
case ID:
|
||||||
if (!(val instanceof String s)) throw invalidFieldException(ID,"String");
|
throw unprocessable("{0} cannot be altered!",ID);
|
||||||
title(s);
|
|
||||||
break;
|
|
||||||
case CONTENT:
|
case CONTENT:
|
||||||
if (!(val instanceof String s)) throw invalidFieldException(CONTENT,"String");
|
if (!(val instanceof String s)) throw invalidFieldException(CONTENT,"String");
|
||||||
content(s);
|
content(s);
|
||||||
@@ -101,6 +100,10 @@ public class WikiPage implements Mappable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TITLE:
|
||||||
|
if (!(val instanceof String t)) throw invalidFieldException(TITLE,"String");
|
||||||
|
title(t);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
@@ -113,6 +116,7 @@ public class WikiPage implements Mappable {
|
|||||||
private WikiPage title(String newVal) {
|
private WikiPage title(String newVal) {
|
||||||
if (title.equals(newVal)) return this;
|
if (title.equals(newVal)) return this;
|
||||||
title = newVal;
|
title = newVal;
|
||||||
|
version++;
|
||||||
dirtyFields.add(TITLE);
|
dirtyFields.add(TITLE);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,8 @@
|
|||||||
import { t } from '../../translations.svelte';
|
import { t } from '../../translations.svelte';
|
||||||
import { user } from '../../user.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 Notes from '../notes/RelatedNotes.svelte';
|
||||||
import PermissionEditor from '../../Components/PermissionEditor.svelte';
|
import PermissionEditor from '../../Components/PermissionEditor.svelte';
|
||||||
import TagList from '../tags/TagList.svelte';
|
import TagList from '../tags/TagList.svelte';
|
||||||
@@ -15,6 +16,7 @@
|
|||||||
let page = $state(null);
|
let page = $state(null);
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
let members = $state({});
|
let members = $state({});
|
||||||
|
let editable = $derived(page.members[user.id].permission.code<4);
|
||||||
|
|
||||||
async function addMember(entry){
|
async function addMember(entry){
|
||||||
let newMembers = JSON.parse(JSON.stringify(page.members));
|
let newMembers = JSON.parse(JSON.stringify(page.members));
|
||||||
@@ -88,6 +90,11 @@
|
|||||||
return loadContent(res);
|
return loadContent(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function patchTitle(t){
|
||||||
|
var result = await(patch({title:t}));
|
||||||
|
router.navigate(`/wiki/${page.id}/view`);
|
||||||
|
}
|
||||||
|
|
||||||
async function updatePermission(uid, newPerm){
|
async function updatePermission(uid, newPerm){
|
||||||
let newMembers = JSON.parse(JSON.stringify(page.members));
|
let newMembers = JSON.parse(JSON.stringify(page.members));
|
||||||
newMembers[uid] = {permission:newPerm};
|
newMembers[uid] = {permission:newPerm};
|
||||||
@@ -103,18 +110,17 @@
|
|||||||
<span class="version">{t('version')}</span>
|
<span class="version">{t('version')}</span>
|
||||||
{#each page.versions as v}
|
{#each page.versions as v}
|
||||||
<span class="version">
|
<span class="version">
|
||||||
<a href={`/wiki/${key}/version/${v}`} {onclick} class={page.version == v?'selected':''}>{v}</a>
|
<a href={`/wiki/${page.id}/version/${v}`} {onclick} class={page.version == v?'selected':''}>{v}</a>
|
||||||
</span>
|
</span>
|
||||||
{/each}
|
{/each}
|
||||||
<h2>{page.title}</h2>
|
<LineEditor value={page.title} type="h2" {editable} onSet={t => patchTitle(t)} />
|
||||||
{#if page.version != page.versions[0]}
|
{#if page.version != page.versions[0]}
|
||||||
<span class="warn">{t('not_recent_version')}</span>
|
<span class="warn">{t('not_recent_version')}</span>
|
||||||
{/if}
|
{/if}
|
||||||
{#if page.members[user.id].permission.code<4}
|
<MarkdownEditor {editable} value={page.content} onSet={s => patch({content:s})} />
|
||||||
<Editor editable={true} value={page.content} onSet={s => patch({content:s})}></Editor>
|
{#if editable}
|
||||||
<PermissionEditor members={page.members} {addMember} {dropMember} {getCandidates} {updatePermission} />
|
<PermissionEditor members={page.members} {addMember} {dropMember} {getCandidates} {updatePermission} />
|
||||||
{:else}
|
{:else}
|
||||||
<div class="markdown">{@html page.content.rendered}</div>
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -306,7 +306,8 @@ public class SqliteDb extends BaseDb implements WikiDb {
|
|||||||
@Override
|
@Override
|
||||||
public WikiPage save(WikiPage page) {
|
public WikiPage save(WikiPage page) {
|
||||||
try {
|
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)){
|
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);
|
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);
|
var query = replaceInto(TABLE_PAGES_USERS,PAGE_ID,USER_ID,PERMISSIONS);
|
||||||
|
|||||||
Reference in New Issue
Block a user