Compare commits

..

1 Commits

Author SHA1 Message Date
eb4a983d11 fixed bug: now redirecting to newest version when deleting wiki page
All checks were successful
Build Docker Image / Docker-Build (push) Successful in 2m1s
Build Docker Image / Clean-Registry (push) Successful in -12s
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
2026-03-30 21:07:55 +02:00
5 changed files with 24 additions and 54 deletions

View File

@@ -2,15 +2,7 @@
import { onMount, onDestroy } from 'svelte';
import { t } from '../translations.svelte';
let {
classes='markdown',
markdown=$bindable({source:'',rendered:''}),
onclick = null,
oncontextmenu = e => {},
sheet = null,
title='',
wrapper = 'div'
} = $props();
let { classes='markdown', markdown=$bindable({source:'',rendered:''}), onclick = null, oncontextmenu = null, title='', wrapper = 'div' } = $props();
let jspreadsheet = null;
const regex = /@startsheet[\s\S]*?@endsheet/g;
const number = /^[0-9.-]+$/
@@ -39,16 +31,16 @@
if (!markdown.rendered) return;
let sheets = document.getElementsByClassName('spreadsheet');
for (let i = 0; i < sheets.length; i++) {
let current_sheet = sheets[i];
let raw = current_sheet.innerHTML.trim();
let sheet = sheets[i];
let raw = sheet.innerHTML.trim();
if (!jspreadsheet) {
current_sheet.innerHTML = t('Loading spreadsheet library…');
sheet.innerHTML = t('Loading spreadsheet library…');
let module = await import('jspreadsheet-ce'); // path or package name
await import('jspreadsheet-ce/dist/jspreadsheet.css');
jspreadsheet = module.default ?? module;
}
if (!jspreadsheet) break; // break loop if library fails to load
current_sheet.innerHTML = t('Processing spreadsheet data…');
sheet.innerHTML = t('Processing spreadsheet data…');
// Use parseCSV from the helpers
@@ -68,25 +60,14 @@
render: formatCell,
width:`${len}0px`
}});
var w = window.innerWidth;
if (classes == 'preview') w = w/2;
let config = {
worksheets : [{
data:parsed,
columns,
tableOverflow: true,
tableWidth: `${w}px`,
columns
}],
onchange : (instance, cell, x, y, value) => update(instance, i),
oneditionstart : (instance, cell, x, y) => oncontextmenu({sheet:current_sheet.id, x,y})
onchange : (instance, cell, x, y, value) => update(instance, i)
};
let wb = jspreadsheet(document.getElementById(current_sheet.id), config);
if (sheet && sheet.sheet == current_sheet.id) {
let cell = wb[0].getCellFromCoords(sheet.x, sheet.y);
cell.scrollIntoView({block:'center'});
wb[0].updateSelectionFromCoords(sheet.x, sheet.y);
wb[0].openEditor(cell);
}
let wb = jspreadsheet(document.getElementById(sheet.id), config);
}
}

View File

@@ -20,7 +20,6 @@
let start = 0;
let stored_source = $state(store_id ? localStorage.getItem(store_id) : null);
let timer = null;
let sheet = null;
async function applyEdit(){
let success = await onSet(editValue.source);
@@ -81,13 +80,10 @@
function oncontextmenu(evt){
if (evt.target) {
evt.preventDefault();
evt.stopPropagation();
}
sheet = evt.sheet ? evt : null; // store position of activated cell to focus after editing starts
startEdit();
return false;
evt.preventDefault();
evt.stopPropagation();
startEdit();
return false;
}
function onmousedown(evt){
@@ -100,10 +96,6 @@
measured(evt, evt.timeStamp - start);
}
function onresize(evt){
console.log('onresize()',evt);
}
function ontouchstart(evt){
evt.preventDefault();
start = evt.timeStamp;
@@ -145,8 +137,8 @@
{#if stored_source}
<span id="restore_markdown" onclick={restore} class="hint">{t('unsaved_content')}</span>
{/if}
<textarea bind:value={editValue.source} onkeyup={typed} onresize={onresize} data="test" autofocus={!simple}></textarea>
<Display classes="preview" bind:markdown={editValue} sheet={sheet} />
<textarea bind:value={editValue.source} onkeyup={typed} autofocus={!simple}></textarea>
<Display classes="preview" bind:markdown={editValue} />
{#if !simple}
<div class="buttons">
<button class="cancel" onclick={e => editing = false}>{t('cancel')}</button>
@@ -154,6 +146,6 @@
</div>
{/if}
{:else}
<Display classes={{editable}} markdown={value} {onclick} {oncontextmenu} title={t('right_click_to_edit')} wrapper={type} />
<Display classes={{editable}} markdown={value} {onclick} {oncontextmenu} title={t('right_click_to_edit')} wrapper={type} />
{/if}
</div>

View File

@@ -1,7 +1,7 @@
<script>
import { onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router';
import { api, eventStream } from '../../urls.svelte';
import { api, eventStream, get } from '../../urls.svelte';
import { error, yikes } from '../../warn.svelte';
import { t } from '../../translations.svelte';
import { user } from '../../user.svelte';
@@ -48,8 +48,13 @@
});
if (res.ok){
let json = await res.json();
router.navigate(`/wiki/${page.id}/view`);
yikes();
let target = `/wiki/${page.id}/view`;
if (window.location.pathname == target) {
loadPage();
} else {
router.navigate(target);
yikes();
}
} else {
error(res);
}
@@ -100,7 +105,7 @@
let path = `wiki/page/${key}`;
if (version) path += `/version/${version}`;
const url = api(path);
const res = await fetch(url,{credentials:'include'});
const res = await get(url);
loadJson(res);
}

View File

@@ -334,10 +334,6 @@ tr:hover .taglist .tag button {
border-left: 1px solid #333 !important;
}
.jss_worksheet tr:hover td input{
color: yellow;
}
@media screen and (max-width: 900px) {
#app nav a{
background: black;

View File

@@ -325,10 +325,6 @@ tr:hover .taglist .tag button {
border-left: 1px solid #333 !important;
}
.jss_worksheet tr:hover td input{
color: black;
}
@media screen and (max-width: 900px) {
#app nav a{
background: black;