implemented adding new pages

This commit is contained in:
2025-09-12 13:20:34 +02:00
parent 7ddd32bb72
commit 7e52e02684
13 changed files with 155 additions and 21 deletions

View File

@@ -19,6 +19,7 @@
import Login from "./Components/Login.svelte";
import Messages from "./routes/message/Messages.svelte";
import Menu from "./Components/Menu.svelte";
import NewPage from "./routes/wiki/AddPage.svelte";
import Notes from "./routes/notes/Index.svelte";
import ProjectList from "./routes/project/List.svelte";
import ProjectAdd from "./routes/project/Create.svelte";
@@ -90,6 +91,7 @@
<Route path="/user/oidc/add" component={EditService} />
<Route path="/user/oidc/edit/:serviceName" component={EditService} />
<Route path="/wiki" component={WikiIndex} />
<Route path="/wiki/add" component={NewPage} />
<Route path="/wiki/:key/view" component={WikiPage} />
<Route path="/wiki/:key/version/:version" component={WikiPage} />
<Route>

View File

@@ -39,10 +39,7 @@
});
if (resp.ok){
const patched = await resp.json();
for (let key of Object.keys(patched)){
console.log('patching '+key+'…');
company[key] = patched[key];
}
for (let key of Object.keys(patched)) company[key] = patched[key];
return true;
}
error = await resp.text();

View File

@@ -38,7 +38,6 @@
function onselect(company){
project.company_id = company.id;
console.log(project);
}
function toggleSettings(ev){

View File

@@ -35,6 +35,7 @@
function dropMember(member){
delete task.members[member.user.id];
console.log({drop:member.user.id});
/// TODO: ?
}
async function load(){

View File

@@ -0,0 +1,66 @@
<script>
import { useTinyRouter } from 'svelte-tiny-router';
import { api } from '../../urls.svelte';
import { t } from '../../translations.svelte';
import Markdown from '../../Components/MarkdownEditor.svelte';
let content = $state({source:null,rendered:null});
let error = $state(null);
let router = useTinyRouter();
let timer = null;
let title = $state(null);
async function onsubmit(ev){
ev.preventDefault();
ev.stopPropagation();
const url = api(`wiki/${title}`);
const res = await fetch(url,{
credentials:'include',
method:'POST',
body:content.source
});
if (res.ok){
router.navigate(`/wiki/${title}/view`);
} else {
error = await res.text();
}
}
function checkTitle(){
if (title) {
if (timer) clearTimeout(timer);
timer = setTimeout(requestTitle,1000);
}
}
async function requestTitle(){
timer = null;
var url = api(`wiki/available/${title}`);
var res = await fetch(url,{credentials:'include'});
const body = await res.text();
if (res.ok){
error = body == 'true' ? null : t('title_not_available',{title:title})
} else {
error = body;
if (!error) error = t('failed_to_check_availability');
}
}
$effect(checkTitle)
</script>
<h1>{t('create_new_object',{object:t('page')})}</h1>
{#if error}
<span class="error">{error}</span>
{/if}
<form {onsubmit}>
<label>
{t('Name')}
<input type="text" bind:value={title} />
</label>
<label>
{t('content')}
<Markdown bind:value={content} simple={true} />
</label>
</form>

View File

@@ -33,6 +33,8 @@
<span class="error">{error}</span>
{/if}
<h1>{t('wiki')}</h1>
<button onclick={() => router.navigate('/wiki/add')}><span class="symbol"></span> {t('create_new_object',{object:t('page')})}</button>
{#if pages}
{#each pages as page}
{#if page.charAt(0).toUpperCase() != lastLetter}