Compare commits
1 Commits
bugfix/wik
...
bugfix/wik
| Author | SHA1 | Date | |
|---|---|---|---|
| eb4a983d11 |
@@ -2,15 +2,7 @@
|
|||||||
import { onMount, onDestroy } from 'svelte';
|
import { onMount, onDestroy } from 'svelte';
|
||||||
import { t } from '../translations.svelte';
|
import { t } from '../translations.svelte';
|
||||||
|
|
||||||
let {
|
let { classes='markdown', markdown=$bindable({source:'',rendered:''}), onclick = null, oncontextmenu = null, title='', wrapper = 'div' } = $props();
|
||||||
classes='markdown',
|
|
||||||
markdown=$bindable({source:'',rendered:''}),
|
|
||||||
onclick = null,
|
|
||||||
oncontextmenu = e => {},
|
|
||||||
sheet = null,
|
|
||||||
title='',
|
|
||||||
wrapper = 'div'
|
|
||||||
} = $props();
|
|
||||||
let jspreadsheet = null;
|
let jspreadsheet = null;
|
||||||
const regex = /@startsheet[\s\S]*?@endsheet/g;
|
const regex = /@startsheet[\s\S]*?@endsheet/g;
|
||||||
const number = /^[0-9.-]+$/
|
const number = /^[0-9.-]+$/
|
||||||
@@ -39,16 +31,16 @@
|
|||||||
if (!markdown.rendered) return;
|
if (!markdown.rendered) return;
|
||||||
let sheets = document.getElementsByClassName('spreadsheet');
|
let sheets = document.getElementsByClassName('spreadsheet');
|
||||||
for (let i = 0; i < sheets.length; i++) {
|
for (let i = 0; i < sheets.length; i++) {
|
||||||
let current_sheet = sheets[i];
|
let sheet = sheets[i];
|
||||||
let raw = current_sheet.innerHTML.trim();
|
let raw = sheet.innerHTML.trim();
|
||||||
if (!jspreadsheet) {
|
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
|
let module = await import('jspreadsheet-ce'); // path or package name
|
||||||
await import('jspreadsheet-ce/dist/jspreadsheet.css');
|
await import('jspreadsheet-ce/dist/jspreadsheet.css');
|
||||||
jspreadsheet = module.default ?? module;
|
jspreadsheet = module.default ?? module;
|
||||||
}
|
}
|
||||||
if (!jspreadsheet) break; // break loop if library fails to load
|
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
|
// Use parseCSV from the helpers
|
||||||
@@ -68,25 +60,14 @@
|
|||||||
render: formatCell,
|
render: formatCell,
|
||||||
width:`${len}0px`
|
width:`${len}0px`
|
||||||
}});
|
}});
|
||||||
var w = window.innerWidth;
|
|
||||||
if (classes == 'preview') w = w/2;
|
|
||||||
let config = {
|
let config = {
|
||||||
worksheets : [{
|
worksheets : [{
|
||||||
data:parsed,
|
data:parsed,
|
||||||
columns,
|
columns
|
||||||
tableOverflow: true,
|
|
||||||
tableWidth: `${w}px`,
|
|
||||||
}],
|
}],
|
||||||
onchange : (instance, cell, x, y, value) => update(instance, i),
|
onchange : (instance, cell, x, y, value) => update(instance, i)
|
||||||
oneditionstart : (instance, cell, x, y) => oncontextmenu({sheet:current_sheet.id, x,y})
|
|
||||||
};
|
};
|
||||||
let wb = jspreadsheet(document.getElementById(current_sheet.id), config);
|
let wb = jspreadsheet(document.getElementById(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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
let start = 0;
|
let start = 0;
|
||||||
let stored_source = $state(store_id ? localStorage.getItem(store_id) : null);
|
let stored_source = $state(store_id ? localStorage.getItem(store_id) : null);
|
||||||
let timer = null;
|
let timer = null;
|
||||||
let sheet = null;
|
|
||||||
|
|
||||||
async function applyEdit(){
|
async function applyEdit(){
|
||||||
let success = await onSet(editValue.source);
|
let success = await onSet(editValue.source);
|
||||||
@@ -81,11 +80,8 @@
|
|||||||
|
|
||||||
|
|
||||||
function oncontextmenu(evt){
|
function oncontextmenu(evt){
|
||||||
if (evt.target) {
|
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
evt.stopPropagation();
|
evt.stopPropagation();
|
||||||
}
|
|
||||||
sheet = evt.sheet ? evt : null; // store position of activated cell to focus after editing starts
|
|
||||||
startEdit();
|
startEdit();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -100,10 +96,6 @@
|
|||||||
measured(evt, evt.timeStamp - start);
|
measured(evt, evt.timeStamp - start);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onresize(evt){
|
|
||||||
console.log('onresize()',evt);
|
|
||||||
}
|
|
||||||
|
|
||||||
function ontouchstart(evt){
|
function ontouchstart(evt){
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
start = evt.timeStamp;
|
start = evt.timeStamp;
|
||||||
@@ -145,8 +137,8 @@
|
|||||||
{#if stored_source}
|
{#if stored_source}
|
||||||
<span id="restore_markdown" onclick={restore} class="hint">{t('unsaved_content')}</span>
|
<span id="restore_markdown" onclick={restore} class="hint">{t('unsaved_content')}</span>
|
||||||
{/if}
|
{/if}
|
||||||
<textarea bind:value={editValue.source} onkeyup={typed} onresize={onresize} data="test" autofocus={!simple}></textarea>
|
<textarea bind:value={editValue.source} onkeyup={typed} autofocus={!simple}></textarea>
|
||||||
<Display classes="preview" bind:markdown={editValue} sheet={sheet} />
|
<Display classes="preview" bind:markdown={editValue} />
|
||||||
{#if !simple}
|
{#if !simple}
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<button class="cancel" onclick={e => editing = false}>{t('cancel')}</button>
|
<button class="cancel" onclick={e => editing = false}>{t('cancel')}</button>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
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 { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte';
|
import { t } from '../../translations.svelte';
|
||||||
import { user } from '../../user.svelte';
|
import { user } from '../../user.svelte';
|
||||||
@@ -48,8 +48,13 @@
|
|||||||
});
|
});
|
||||||
if (res.ok){
|
if (res.ok){
|
||||||
let json = await res.json();
|
let json = await res.json();
|
||||||
router.navigate(`/wiki/${page.id}/view`);
|
let target = `/wiki/${page.id}/view`;
|
||||||
|
if (window.location.pathname == target) {
|
||||||
|
loadPage();
|
||||||
|
} else {
|
||||||
|
router.navigate(target);
|
||||||
yikes();
|
yikes();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
error(res);
|
error(res);
|
||||||
}
|
}
|
||||||
@@ -100,7 +105,7 @@
|
|||||||
let path = `wiki/page/${key}`;
|
let path = `wiki/page/${key}`;
|
||||||
if (version) path += `/version/${version}`;
|
if (version) path += `/version/${version}`;
|
||||||
const url = api(path);
|
const url = api(path);
|
||||||
const res = await fetch(url,{credentials:'include'});
|
const res = await get(url);
|
||||||
loadJson(res);
|
loadJson(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -334,10 +334,6 @@ tr:hover .taglist .tag button {
|
|||||||
border-left: 1px solid #333 !important;
|
border-left: 1px solid #333 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.jss_worksheet tr:hover td input{
|
|
||||||
color: yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 900px) {
|
@media screen and (max-width: 900px) {
|
||||||
#app nav a{
|
#app nav a{
|
||||||
background: black;
|
background: black;
|
||||||
|
|||||||
@@ -325,10 +325,6 @@ tr:hover .taglist .tag button {
|
|||||||
border-left: 1px solid #333 !important;
|
border-left: 1px solid #333 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.jss_worksheet tr:hover td input{
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 900px) {
|
@media screen and (max-width: 900px) {
|
||||||
#app nav a{
|
#app nav a{
|
||||||
background: black;
|
background: black;
|
||||||
|
|||||||
Reference in New Issue
Block a user