|
|
|
|
@ -1,25 +1,43 @@
@@ -1,25 +1,43 @@
|
|
|
|
|
<script> |
|
|
|
|
import { onMount } from 'svelte'; |
|
|
|
|
import { api } from '../../urls.svelte'; |
|
|
|
|
import { t } from '../../translations.svelte'; |
|
|
|
|
import { onMount } from 'svelte'; |
|
|
|
|
import { useTinyRouter } from 'svelte-tiny-router'; |
|
|
|
|
import { api } from '../../urls.svelte'; |
|
|
|
|
import { t } from '../../translations.svelte'; |
|
|
|
|
|
|
|
|
|
import Editor from '../../Components/MarkdownEditor.svelte'; |
|
|
|
|
import Editor from '../../Components/MarkdownEditor.svelte'; |
|
|
|
|
|
|
|
|
|
let error = $state(null); |
|
|
|
|
let { id, version } = $props(); |
|
|
|
|
let page = $state(null); |
|
|
|
|
let router = useTinyRouter(); |
|
|
|
|
|
|
|
|
|
async function loadPage(){ |
|
|
|
|
const url = api(`wiki/page/${id}`); |
|
|
|
|
const res = await fetch(url,{credentials:'include'}); |
|
|
|
|
async function loadContent(res){ |
|
|
|
|
if (res.ok){ |
|
|
|
|
page = null; |
|
|
|
|
page = await res.json(); |
|
|
|
|
page.versions.sort((a,b)=>b-a); |
|
|
|
|
version = page.version; |
|
|
|
|
error = null; |
|
|
|
|
} else { |
|
|
|
|
error = await res.text(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async function loadPage(){ |
|
|
|
|
let path = `wiki/page/${id}`; |
|
|
|
|
if (version) path += `/version/${version}`; |
|
|
|
|
const url = api(path); |
|
|
|
|
const res = await fetch(url,{credentials:'include'}); |
|
|
|
|
loadContent(res); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function onclick(e){ |
|
|
|
|
e.preventDefault(); |
|
|
|
|
let href = e.target.getAttribute('href'); |
|
|
|
|
if (href) router.navigate(href); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async function patch(data){ |
|
|
|
|
const url = api(`wiki/page/${id}`); |
|
|
|
|
const res = await fetch(url,{ |
|
|
|
|
@ -27,31 +45,27 @@
@@ -27,31 +45,27 @@
|
|
|
|
|
method:'PATCH', |
|
|
|
|
body:JSON.stringify(data) |
|
|
|
|
}); |
|
|
|
|
if (res.ok){ |
|
|
|
|
error = null; |
|
|
|
|
page = await res.json(); |
|
|
|
|
return true; |
|
|
|
|
} else { |
|
|
|
|
error = await res.text(); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
loadContent(res); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
onMount(loadPage); |
|
|
|
|
$effect(loadPage); |
|
|
|
|
</script> |
|
|
|
|
<h2>{id}</h2> |
|
|
|
|
{#if error} |
|
|
|
|
<span class="error">{error}</span> |
|
|
|
|
{/if} |
|
|
|
|
{#if page} |
|
|
|
|
<span class="version">{t('version')}</span> |
|
|
|
|
{#each Array.from({ length: page.version }, (_, i) => page.version - i) as v} |
|
|
|
|
{#each page.versions as v} |
|
|
|
|
<span class="version"> |
|
|
|
|
{#if v == page.version}[{/if} |
|
|
|
|
<a href={`/wiki/${id}/version/${v}`}>{v}</a> |
|
|
|
|
{#if v == page.version}]{/if} |
|
|
|
|
<a href={`/wiki/${id}/version/${v}`} {onclick} class={page.version == v?'selected':''}>{v}</a> |
|
|
|
|
|
|
|
|
|
</span> |
|
|
|
|
{/each} |
|
|
|
|
{/if} |
|
|
|
|
<h2>{id}</h2> |
|
|
|
|
{#if page} |
|
|
|
|
{#if page.version != page.versions[0]} |
|
|
|
|
<span class="warn">{t('not_recent_version')}</span> |
|
|
|
|
{/if} |
|
|
|
|
<Editor editable={true} value={page.content} onSet={s => patch({content:s})}></Editor> |
|
|
|
|
{/if} |