implemented storage of new wiki page version, prepared page display for several versions
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -26,6 +26,10 @@ public class WikiPage implements Mappable {
|
|||||||
this.content = content;
|
this.content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String content(){
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
public String id(){
|
public String id(){
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@@ -74,6 +78,10 @@ public class WikiPage implements Mappable {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int version(){
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Integer> versions(){
|
public List<Integer> versions(){
|
||||||
return versions;
|
return versions;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,6 +91,7 @@
|
|||||||
<Route path="/user/oidc/edit/:serviceName" component={EditService} />
|
<Route path="/user/oidc/edit/:serviceName" component={EditService} />
|
||||||
<Route path="/wiki" component={WikiIndex} />
|
<Route path="/wiki" component={WikiIndex} />
|
||||||
<Route path="/wiki/:id/view" component={WikiPage} />
|
<Route path="/wiki/:id/view" component={WikiPage} />
|
||||||
|
<Route path="/wiki/:id/version/:version" component={WikiPage} />
|
||||||
<Route>
|
<Route>
|
||||||
Not found!
|
Not found!
|
||||||
</Route>
|
</Route>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import Editor from '../../Components/MarkdownEditor.svelte';
|
import Editor from '../../Components/MarkdownEditor.svelte';
|
||||||
|
|
||||||
let error = $state(null);
|
let error = $state(null);
|
||||||
let { id } = $props();
|
let { id, version } = $props();
|
||||||
let page = $state(null);
|
let page = $state(null);
|
||||||
|
|
||||||
async function loadPage(){
|
async function loadPage(){
|
||||||
@@ -28,13 +28,13 @@
|
|||||||
body:JSON.stringify(data)
|
body:JSON.stringify(data)
|
||||||
});
|
});
|
||||||
if (res.ok){
|
if (res.ok){
|
||||||
return true;
|
|
||||||
error = null;
|
error = null;
|
||||||
|
page = await res.json();
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
error = await res.text();
|
error = await res.text();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(loadPage);
|
onMount(loadPage);
|
||||||
@@ -44,5 +44,14 @@
|
|||||||
<span class="error">{error}</span>
|
<span class="error">{error}</span>
|
||||||
{/if}
|
{/if}
|
||||||
{#if page}
|
{#if page}
|
||||||
|
<span class="version">{t('version')}</span>
|
||||||
|
{#each Array.from({ length: page.version }, (_, i) => page.version - i) as v}
|
||||||
|
<span class="version">
|
||||||
|
{#if v == page.version}[{/if}
|
||||||
|
<a href={`/wiki/${id}/version/${v}`}>{v}</a>
|
||||||
|
{#if v == page.version}]{/if}
|
||||||
|
|
||||||
|
</span>
|
||||||
|
{/each}
|
||||||
<Editor editable={true} value={page.content} onSet={s => patch({content:s})}></Editor>
|
<Editor editable={true} value={page.content} onSet={s => patch({content:s})}></Editor>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -264,6 +264,8 @@
|
|||||||
"welcome" : "Willkommen, {0}",
|
"welcome" : "Willkommen, {0}",
|
||||||
"wiki": "Wiki",
|
"wiki": "Wiki",
|
||||||
|
|
||||||
|
"version": "Version",
|
||||||
|
|
||||||
"year": "Jahr",
|
"year": "Jahr",
|
||||||
"your_password_reset_token" : "Ihr Token zum Erstellen eines neuen Passworts",
|
"your_password_reset_token" : "Ihr Token zum Erstellen eines neuen Passworts",
|
||||||
"your_profile": "dein Profil"
|
"your_profile": "dein Profil"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import java.sql.SQLException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
import static de.srsoftware.tools.jdbc.Query.SelectQuery.ALL;
|
||||||
|
import static de.srsoftware.tools.jdbc.Query.insertInto;
|
||||||
import static de.srsoftware.tools.jdbc.Query.select;
|
import static de.srsoftware.tools.jdbc.Query.select;
|
||||||
import static de.srsoftware.umbrella.core.Constants.*;
|
import static de.srsoftware.umbrella.core.Constants.*;
|
||||||
import static de.srsoftware.umbrella.core.Constants.ERROR_FAILED_CREATE_TABLE;
|
import static de.srsoftware.umbrella.core.Constants.ERROR_FAILED_CREATE_TABLE;
|
||||||
@@ -81,11 +82,11 @@ public class SqliteDb extends BaseDb implements WikiDb {
|
|||||||
@Override
|
@Override
|
||||||
public WikiPage load(String id) {
|
public WikiPage load(String id) {
|
||||||
try {
|
try {
|
||||||
var rs = select(ALL).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION).limit(1).exec(db);
|
var rs = select(ALL).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION+" DESC").limit(1).exec(db);
|
||||||
WikiPage page = null;
|
WikiPage page = null;
|
||||||
if (rs.next()) page = WikiPage.of(rs);
|
if (rs.next()) page = WikiPage.of(rs);
|
||||||
rs.close();
|
rs.close();
|
||||||
if (page == null) throw notFound("Failed to load wiki page \"{0}\" from databse!",id);
|
if (page == null) throw notFound("Failed to load wiki page \"{0}\" from database!",id);
|
||||||
rs = select(VERSION).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION).exec(db);
|
rs = select(VERSION).from(TABLE_PAGES).where(ID,Condition.equal(id)).sort(VERSION).exec(db);
|
||||||
var versions = page.versions();
|
var versions = page.versions();
|
||||||
while (rs.next()) versions.add(rs.getInt(VERSION));
|
while (rs.next()) versions.add(rs.getInt(VERSION));
|
||||||
@@ -118,6 +119,11 @@ public class SqliteDb extends BaseDb implements WikiDb {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WikiPage save(WikiPage page) {
|
public WikiPage save(WikiPage page) {
|
||||||
throw UmbrellaException.unprocessable("save(Wikipage) not implemented");
|
try {
|
||||||
|
insertInto(TABLE_PAGES,ID,VERSION,CONTENT).values(page.id(),page.version(),page.content()).execute(db).close();
|
||||||
|
return page;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw databaseException("Failed to write wiki page \"{0}\" to database",page.id(),e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user