implemented event-based page-refresh for wiki pages

This commit is contained in:
2026-01-10 22:19:29 +01:00
parent c3b49cf032
commit 9d35952949
5 changed files with 65 additions and 7 deletions

View File

@@ -1,7 +1,7 @@
<script>
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { api } from '../../urls.svelte';
import { api, eventStream } from '../../urls.svelte';
import { error, yikes } from '../../warn.svelte';
import { t } from '../../translations.svelte';
import { user } from '../../user.svelte';
@@ -13,6 +13,7 @@
import TagList from '../tags/TagList.svelte';
let detail = $state(false);
let eventSource = null;
let { key, version } = $props();
let page = $state({});
let router = useTinyRouter();
@@ -27,6 +28,10 @@
return patch({members:newMembers});
}
function connectToBus(){
eventSource = eventStream(null,handleUpdateEvent,null);
}
async function dropMember(member){
var id = member.user.id;
let newMembers = JSON.parse(JSON.stringify(page.members));
@@ -51,6 +56,11 @@
}
}
function handleUpdateEvent(evt){
let json = JSON.parse(evt.data);
if (json.wikipage) loadContent(json.wikipage);
}
function nonMember(json){
return !page.members[json.id];
}
@@ -70,11 +80,15 @@
}
}
async function loadContent(res){
function loadContent(json){
json.versions.sort((a,b)=>b-a);
page = { ...json };
}
async function loadJson(res){
if (res.ok){
let json = await res.json();
json.versions.sort((a,b)=>b-a);
page = { ...json };
loadContent(json);
yikes();
return true;
} else {
@@ -88,7 +102,7 @@
if (version) path += `/version/${version}`;
const url = api(path);
const res = await fetch(url,{credentials:'include'});
loadContent(res);
loadJson(res);
}
function onclick(e){
@@ -105,7 +119,7 @@
method:'PATCH',
body:JSON.stringify(data)
});
return loadContent(res);
return loadJson(res);
}
async function patchGuestPermissions(ev){
@@ -130,6 +144,7 @@
}
$effect(loadPage);
onMount(connectToBus);
</script>
{#if page && page.versions}
<div class="wiki page">