refactored more error code
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
import { api } from '../urls.svelte.js';
|
import { api } from '../urls.svelte';
|
||||||
import { t } from '../translations.svelte.js';
|
import { t } from '../translations.svelte';
|
||||||
|
|
||||||
import Autocomplete from './Autocomplete.svelte';
|
import Autocomplete from './Autocomplete.svelte';
|
||||||
import PermissionSelector from './PermissionSelector.svelte';
|
import PermissionSelector from './PermissionSelector.svelte';
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
updatePermission = (uid,perm) => console.log(`no handler for updatePermission(${uid}, ${perm})`)
|
updatePermission = (uid,perm) => console.log(`no handler for updatePermission(${uid}, ${perm})`)
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let error = $state(null);
|
|
||||||
let permissions = $state(null);
|
let permissions = $state(null);
|
||||||
let sortedMembers = $derived.by(() => Object.values(members).sort((a, b) => a.user.name.localeCompare(b.user.name)));
|
let sortedMembers = $derived.by(() => Object.values(members).sort((a, b) => a.user.name.localeCompare(b.user.name)));
|
||||||
|
|
||||||
@@ -36,9 +35,6 @@
|
|||||||
onMount(loadPermissions);
|
onMount(loadPermissions);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
<table>
|
<table>
|
||||||
<tbody>
|
<tbody>
|
||||||
{#each sortedMembers as member,i}
|
{#each sortedMembers as member,i}
|
||||||
|
|||||||
@@ -2,14 +2,14 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { error, yikes } from '../../warn.svelte';
|
||||||
|
import { t } from '../../translations.svelte';
|
||||||
|
|
||||||
import ContactSelector from '../../Components/ContactSelector.svelte';
|
import ContactSelector from '../../Components/ContactSelector.svelte';
|
||||||
|
|
||||||
let company = $state(null);
|
let company = $state(null);
|
||||||
let docType = $state(null);
|
let docType = $state(null);
|
||||||
let error = $state(null);
|
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
|
|
||||||
let document = $state({
|
let document = $state({
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
if (company.bank_account) document.sender.bank_account = company.bank_account;
|
if (company.bank_account) document.sender.bank_account = company.bank_account;
|
||||||
if (company.court) document.sender.court = company.court;
|
if (company.court) document.sender.court = company.court;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,11 +47,12 @@
|
|||||||
const types = await resp.json();
|
const types = await resp.json();
|
||||||
docType = t('type_'+types[document.type]);
|
docType = t('type_'+types[document.type]);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function load(){
|
function load(){
|
||||||
|
yikes();
|
||||||
loadCompanies();
|
loadCompanies();
|
||||||
loadDocType();
|
loadDocType();
|
||||||
}
|
}
|
||||||
@@ -83,7 +84,7 @@
|
|||||||
const json = await resp.json();
|
const json = await resp.json();
|
||||||
router.navigate(`/document/${json.id}/view`);
|
router.navigate(`/document/${json.id}/view`);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,9 +96,6 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
{#if docType}
|
{#if docType}
|
||||||
<legend>{t('add_object',{object:docType})}</legend>
|
<legend>{t('add_object',{object:docType})}</legend>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
import EstimatedTask from '../../Components/EstimatedTask.svelte';
|
import EstimatedTask from '../../Components/EstimatedTask.svelte';
|
||||||
@@ -11,7 +12,6 @@
|
|||||||
onSelect = (task) => {}
|
onSelect = (task) => {}
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let error = $state(null);
|
|
||||||
let projects = $state(null);
|
let projects = $state(null);
|
||||||
|
|
||||||
async function loadItems(){
|
async function loadItems(){
|
||||||
@@ -24,8 +24,9 @@
|
|||||||
});
|
});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
projects = await resp.json();
|
projects = await resp.json();
|
||||||
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.body();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,9 +44,6 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h1>{t('estimated_times')}</h1>
|
<h1>{t('estimated_times')}</h1>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
{#if projects}
|
{#if projects}
|
||||||
{#each projects as project,pid}
|
{#each projects as project,pid}
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
import Item from '../../Components/Item.svelte';
|
import Item from '../../Components/Item.svelte';
|
||||||
@@ -12,8 +13,6 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let items = $state(null);
|
let items = $state(null);
|
||||||
let error = $state(null);
|
|
||||||
|
|
||||||
|
|
||||||
async function loadItems(){
|
async function loadItems(){
|
||||||
const url = api('items/list');
|
const url = api('items/list');
|
||||||
@@ -25,8 +24,9 @@
|
|||||||
});
|
});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
items = await resp.json();
|
items = await resp.json();
|
||||||
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.body();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,9 +36,6 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h1>{t('items')}</h1>
|
<h1>{t('items')}</h1>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
{#if items}
|
{#if items}
|
||||||
{#each items as item,id}
|
{#each items as item,id}
|
||||||
<Item item={item} onclick={() => onSelect(item)} />
|
<Item item={item} onclick={() => onSelect(item)} />
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
import TypeSelector from './TypeSelector.svelte';
|
import TypeSelector from './TypeSelector.svelte';
|
||||||
|
|
||||||
let error = null;
|
|
||||||
let companies = {};
|
let companies = {};
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
let company_id = +router.query.company_id;
|
let company_id = +router.query.company_id;
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
load(selected_company); // relaod docs
|
load(selected_company); // relaod docs
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
documents = await resp.json();
|
documents = await resp.json();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,8 +54,9 @@
|
|||||||
const resp = await fetch(url,{ credentials: 'include'});
|
const resp = await fetch(url,{ credentials: 'include'});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
companies = await resp.json();
|
companies = await resp.json();
|
||||||
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
if (company_id) {
|
if (company_id) {
|
||||||
for (let comp of Object.values(companies)){
|
for (let comp of Object.values(companies)){
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
import Position from './Position.svelte';
|
import Position from './Position.svelte';
|
||||||
|
|
||||||
var {
|
var {
|
||||||
document = $bindable(null),
|
document = $bindable(null),
|
||||||
error = $bindable(null),
|
|
||||||
submit = (key,newVal) => {},
|
submit = (key,newVal) => {},
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
@@ -18,7 +18,6 @@
|
|||||||
async function updatePositions(resp){
|
async function updatePositions(resp){
|
||||||
let json = await resp.json();
|
let json = await resp.json();
|
||||||
document.positions = {};
|
document.positions = {};
|
||||||
error = null;
|
|
||||||
setTimeout(() => document.positions = json,100)
|
setTimeout(() => document.positions = json,100)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +31,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
updatePositions(resp);
|
updatePositions(resp);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,7 +47,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
updatePositions(resp);
|
updatePositions(resp);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
let content = $state(null);
|
let content = $state(null);
|
||||||
let doc = $state(null);
|
let doc = $state(null);
|
||||||
let email = $state(null);
|
let email = $state(null);
|
||||||
let error = $state(null);
|
|
||||||
const router = useTinyRouter();
|
const router = useTinyRouter();
|
||||||
let subject = $state(null);
|
let subject = $state(null);
|
||||||
let { id } = $props();
|
let { id } = $props();
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
doc = await resp.json();
|
doc = await resp.json();
|
||||||
email = doc.customer.email;
|
email = doc.customer.email;
|
||||||
subject = t('new_document_from',{type:t(doc.type),sender:doc.company.name,number:doc.number}),
|
subject = t('new_document_from',{type:t(doc.type),sender:doc.company.name,number:doc.number}),
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
url = api(`document/${id}/settings`);
|
url = api(`document/${id}/settings`);
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
const settings = await resp.json();
|
const settings = await resp.json();
|
||||||
content = settings.content;
|
content = settings.content;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,17 +46,13 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
router.navigate(`/document?company_id=${doc.company.id}`);
|
router.navigate(`/document?company_id=${doc.company.id}`);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(loadDoc);
|
onMount(loadDoc);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{t('customer_email')} / {t('subject')}</legend>
|
<legend>{t('customer_email')} / {t('subject')}</legend>
|
||||||
<input type="text" bind:value={email} />
|
<input type="text" bind:value={email} />
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
import { api, target } from '../../urls.svelte.js';
|
import { api, target } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
@@ -9,7 +10,6 @@
|
|||||||
onSelect = (time) => {}
|
onSelect = (time) => {}
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
let error = $state(null);
|
|
||||||
let projects = $state(null);
|
let projects = $state(null);
|
||||||
let times = $state(null);
|
let times = $state(null);
|
||||||
|
|
||||||
@@ -23,8 +23,9 @@
|
|||||||
});
|
});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
projects = await resp.json();
|
projects = await resp.json();
|
||||||
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.body();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,7 +40,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
times = await resp.json();
|
times = await resp.json();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.body();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import {api} from '../../urls.svelte.js';
|
import {api} from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js';
|
import { user } from '../../user.svelte.js';
|
||||||
|
|
||||||
@@ -20,7 +21,6 @@
|
|||||||
|
|
||||||
let doc = $state(null);
|
let doc = $state(null);
|
||||||
let editable = $derived(doc.state == 1);
|
let editable = $derived(doc.state == 1);
|
||||||
let error = $state(null);
|
|
||||||
let { id } = $props();
|
let { id } = $props();
|
||||||
let pdfDisabled = $state(false);
|
let pdfDisabled = $state(false);
|
||||||
let position_select = $state(false);
|
let position_select = $state(false);
|
||||||
@@ -36,9 +36,9 @@
|
|||||||
});
|
});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
doc.positions = await resp.json();
|
doc.positions = await resp.json();
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,12 +64,12 @@
|
|||||||
body : type
|
body : type
|
||||||
});
|
});
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
error = null;
|
yikes();
|
||||||
let json = await res.json();
|
let json = await res.json();
|
||||||
router.navigate(`/document/${json.id}/view`);
|
router.navigate(`/document/${json.id}/view`);
|
||||||
loadDoc();
|
loadDoc();
|
||||||
} else {
|
} else {
|
||||||
error = await res.text();
|
error(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,9 +78,9 @@
|
|||||||
const resp = await fetch(url,{credentials:'include'});
|
const resp = await fetch(url,{credentials:'include'});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
doc = await resp.json();
|
doc = await resp.json();
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
const url = api(`document/${doc.id}/pdf`);
|
const url = api(`document/${doc.id}/pdf`);
|
||||||
const resp = await fetch(url,{credentials:'include'});
|
const resp = await fetch(url,{credentials:'include'});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
error = null;
|
yikes();
|
||||||
const blob = await resp.blob();
|
const blob = await resp.blob();
|
||||||
const parts = resp.headers.get("Content-disposition").split(";");
|
const parts = resp.headers.get("Content-disposition").split(";");
|
||||||
const filename = parts[1].split('=')[1].split('"').join('');
|
const filename = parts[1].split('=')[1].split('"').join('');
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
fileLink.download = filename;
|
fileLink.download = filename;
|
||||||
fileLink.click();
|
fileLink.click();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
pdfDisabled = false;
|
pdfDisabled = false;
|
||||||
}
|
}
|
||||||
@@ -133,10 +133,6 @@
|
|||||||
<title>Umbrella – {t('document')} {doc?.number}</title>
|
<title>Umbrella – {t('document')} {doc?.number}</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
{#if doc}
|
{#if doc}
|
||||||
<fieldset class="customer">
|
<fieldset class="customer">
|
||||||
<legend>{t('customer')}</legend>
|
<legend>{t('customer')}</legend>
|
||||||
@@ -248,7 +244,7 @@
|
|||||||
<button onclick={() => position_select = true}>{t('add_object',{object:t('position')})}</button>
|
<button onclick={() => position_select = true}>{t('add_object',{object:t('position')})}</button>
|
||||||
{/if}
|
{/if}
|
||||||
</legend>
|
</legend>
|
||||||
<PositionList bind:document={doc} submit={update} bind:error={error} />
|
<PositionList bind:document={doc} submit={update} />
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{t('footer')}</legend>
|
<legend>{t('footer')}</legend>
|
||||||
|
|||||||
@@ -3,13 +3,13 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js';
|
import { user } from '../../user.svelte.js';
|
||||||
|
|
||||||
import List from './List.svelte';
|
import List from './List.svelte';
|
||||||
|
|
||||||
let authors = $state({});
|
let authors = $state({});
|
||||||
let error = $state(null);
|
|
||||||
let loader = {
|
let loader = {
|
||||||
offset : 0,
|
offset : 0,
|
||||||
limit : 20,
|
limit : 20,
|
||||||
@@ -22,9 +22,6 @@
|
|||||||
entity_id = null
|
entity_id = null
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async function loadNotes(){
|
async function loadNotes(){
|
||||||
const url = api(`notes?offset=${loader.offset}&limit=${loader.limit}`);
|
const url = api(`notes?offset=${loader.offset}&limit=${loader.limit}`);
|
||||||
|
|
||||||
@@ -36,11 +33,11 @@
|
|||||||
authors = {...authors, ...data.authors};
|
authors = {...authors, ...data.authors};
|
||||||
loader.offset += loader.limit;
|
loader.offset += loader.limit;
|
||||||
loader.active = false;
|
loader.active = false;
|
||||||
error = null;
|
yikes();
|
||||||
if (Object.keys(data.notes).length) onscroll(null); // when notes were received, check whether they fill up the page
|
if (Object.keys(data.notes).length) onscroll(null); // when notes were received, check whether they fill up the page
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,10 +53,10 @@
|
|||||||
authors[user.id] = user;
|
authors[user.id] = user;
|
||||||
notes[newNote.id] = newNote;
|
notes[newNote.id] = newNote;
|
||||||
note = {source:'',rendered:''};
|
note = {source:'',rendered:''};
|
||||||
error = null;
|
yikes();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,7 +78,4 @@
|
|||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<svelte:window {onscroll} />
|
<svelte:window {onscroll} />
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
<List {notes} />
|
<List {notes} />
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js';
|
import { user } from '../../user.svelte.js';
|
||||||
|
|
||||||
import Editor from '../../Components/MarkdownEditor.svelte';
|
import Editor from '../../Components/MarkdownEditor.svelte';
|
||||||
|
|
||||||
let { authors, module, notes = $bindable() } = $props();
|
let { authors, module, notes = $bindable() } = $props();
|
||||||
let error = $state(null);
|
|
||||||
const router = useTinyRouter();
|
const router = useTinyRouter();
|
||||||
|
|
||||||
async function drop(nid){
|
async function drop(nid){
|
||||||
@@ -19,10 +19,10 @@
|
|||||||
method : 'DELETE'
|
method : 'DELETE'
|
||||||
});
|
});
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
error = false;
|
yikes();
|
||||||
notes = notes.filter((itm,idx) => itm.id != nid);
|
notes = notes.filter((itm,idx) => itm.id != nid);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,10 +46,10 @@
|
|||||||
body : src
|
body : src
|
||||||
});
|
});
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
error = false;
|
yikes();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js';
|
import { user } from '../../user.svelte.js';
|
||||||
|
|
||||||
@@ -10,7 +11,6 @@
|
|||||||
import List from './List.svelte';
|
import List from './List.svelte';
|
||||||
|
|
||||||
let authors = $state(null);
|
let authors = $state(null);
|
||||||
let error = $state(null);
|
|
||||||
let note = $state({source:null,rendered:null});
|
let note = $state({source:null,rendered:null});
|
||||||
let notes = $state(null);
|
let notes = $state(null);
|
||||||
const router = useTinyRouter();
|
const router = useTinyRouter();
|
||||||
@@ -27,10 +27,10 @@
|
|||||||
method : 'DELETE'
|
method : 'DELETE'
|
||||||
});
|
});
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
error = false;
|
yikes();
|
||||||
delete notes[nid];
|
delete notes[nid];
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
notes = Object.values(data.notes).sort((a, b) => a.id - b.id);
|
notes = Object.values(data.notes).sort((a, b) => a.id - b.id);
|
||||||
authors = data.authors;
|
authors = data.authors;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,12 +61,12 @@
|
|||||||
let newNote = await resp.json();
|
let newNote = await resp.json();
|
||||||
authors[user.id] = user;
|
authors[user.id] = user;
|
||||||
notes.push(newNote);
|
notes.push(newNote);
|
||||||
error = null;
|
yikes();
|
||||||
note.source = null;
|
note.source = null;
|
||||||
note.rendered = null;
|
note.rendered = null;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -79,10 +79,10 @@
|
|||||||
body : src
|
body : src
|
||||||
});
|
});
|
||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
error = false;
|
yikes();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,9 +90,6 @@
|
|||||||
onMount(load);
|
onMount(load);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
<List {authors} {module} {notes} />
|
<List {authors} {module} {notes} />
|
||||||
<div class="editor">
|
<div class="editor">
|
||||||
<Editor simple={true} bind:value={note} onSet={saveNote} />
|
<Editor simple={true} bind:value={note} onSet={saveNote} />
|
||||||
|
|||||||
@@ -2,13 +2,13 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
import CompanySelector from '../../Components/CompanySelector.svelte';
|
import CompanySelector from '../../Components/CompanySelector.svelte';
|
||||||
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
|
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
|
||||||
import Tags from '../tags/TagList.svelte';
|
import Tags from '../tags/TagList.svelte';
|
||||||
|
|
||||||
let error = $state(null);
|
|
||||||
let ready = $derived(!!project.name.trim())
|
let ready = $derived(!!project.name.trim())
|
||||||
const router = useTinyRouter();
|
const router = useTinyRouter();
|
||||||
let showSettings = $state(false);
|
let showSettings = $state(false);
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
var newProject = await resp.json();
|
var newProject = await resp.json();
|
||||||
router.navigate(`/project/${newProject.id}/view`);
|
router.navigate(`/project/${newProject.id}/view`);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,9 +50,6 @@
|
|||||||
label{ display: block }
|
label{ display: block }
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
<form {onsubmit}>
|
<form {onsubmit}>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>
|
<legend>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js';
|
import { user } from '../../user.svelte.js';
|
||||||
|
|
||||||
@@ -14,7 +15,6 @@
|
|||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
if (router.hasQueryParam('filter')) filter_input = router.getQueryParam('filter');
|
if (router.hasQueryParam('filter')) filter_input = router.getQueryParam('filter');
|
||||||
let dragged = null;
|
let dragged = null;
|
||||||
let error = $state(null);
|
|
||||||
let highlight = $state({});
|
let highlight = $state({});
|
||||||
let filter = $derived(filter_input.toLowerCase());
|
let filter = $derived(filter_input.toLowerCase());
|
||||||
let project = $state(null);
|
let project = $state(null);
|
||||||
@@ -53,9 +53,9 @@
|
|||||||
if (!tasks[user_id]) tasks[user_id] = {};
|
if (!tasks[user_id]) tasks[user_id] = {};
|
||||||
if (!tasks[user_id][state]) tasks[user_id][state] = {};
|
if (!tasks[user_id][state]) tasks[user_id][state] = {};
|
||||||
tasks[user_id][state][task.id] = task;
|
tasks[user_id][state][task.id] = task;
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,9 +81,9 @@
|
|||||||
tasks[user_id][state][task.id] = task;
|
tasks[user_id][state][task.id] = task;
|
||||||
task.assignee = user_id;
|
task.assignee = user_id;
|
||||||
task.status = state;
|
task.status = state;
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,9 +104,9 @@
|
|||||||
users[uid] = member.user.name;
|
users[uid] = member.user.name;
|
||||||
if (!tasks[uid]) tasks[uid] = {};
|
if (!tasks[uid]) tasks[uid] = {};
|
||||||
}
|
}
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
tasks[assignee][state][task_id] = task;
|
tasks[assignee][state][task_id] = task;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,9 +164,6 @@
|
|||||||
{#if project}
|
{#if project}
|
||||||
<h1 onclick={ev => router.navigate(`/project/${project.id}/view`)}>{project.name}</h1>
|
<h1 onclick={ev => router.navigate(`/project/${project.id}/view`)}>{project.name}</h1>
|
||||||
{/if}
|
{/if}
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
{#if project}
|
{#if project}
|
||||||
<div class="kanban" style="display: grid; grid-template-columns: {`repeat(${columns}, auto)`}">
|
<div class="kanban" style="display: grid; grid-template-columns: {`repeat(${columns}, auto)`}">
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
import { api, target } from '../../urls.svelte.js';
|
import { api, target } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { display } from '../../time.svelte';
|
import { display } from '../../time.svelte';
|
||||||
|
|
||||||
@@ -11,7 +12,6 @@
|
|||||||
let bookmarks = $state(null);
|
let bookmarks = $state(null);
|
||||||
let companies = $state(null);
|
let companies = $state(null);
|
||||||
let documents = $state(null);
|
let documents = $state(null);
|
||||||
let error = $state(null);
|
|
||||||
let fulltext = false;
|
let fulltext = false;
|
||||||
let key = $state(router.getQueryParam('key'));
|
let key = $state(router.getQueryParam('key'));
|
||||||
let input = $state(router.getQueryParam('key'));
|
let input = $state(router.getQueryParam('key'));
|
||||||
@@ -67,7 +67,7 @@
|
|||||||
const res = await resp.json();
|
const res = await resp.json();
|
||||||
bookmarks = Object.keys(res).length ? res : null;
|
bookmarks = Object.keys(res).length ? res : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
const json = await resp.json();
|
const json = await resp.json();
|
||||||
companies = Object.keys(json).length ? json : null;
|
companies = Object.keys(json).length ? json : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
const json = await resp.json();
|
const json = await resp.json();
|
||||||
documents = Object.keys(json).length ? json : null;
|
documents = Object.keys(json).length ? json : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
const json = await resp.json();
|
const json = await resp.json();
|
||||||
notes = Object.keys(json).length ? json : null;
|
notes = Object.keys(json).length ? json : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@
|
|||||||
const res = await resp.json();
|
const res = await resp.json();
|
||||||
projects = Object.keys(res).length ? res : null;
|
projects = Object.keys(res).length ? res : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
const res = await resp.json();
|
const res = await resp.json();
|
||||||
tasks = Object.keys(res).length ? res : null;
|
tasks = Object.keys(res).length ? res : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
const res = await resp.json();
|
const res = await resp.json();
|
||||||
times = Object.keys(res).length ? res : null;
|
times = Object.keys(res).length ? res : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
const res = await resp.json();
|
const res = await resp.json();
|
||||||
pages = Object.keys(res).length ? res : null;
|
pages = Object.keys(res).length ? res : null;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,9 +144,6 @@
|
|||||||
|
|
||||||
<fieldset class="search">
|
<fieldset class="search">
|
||||||
<legend>{t('search')}</legend>
|
<legend>{t('search')}</legend>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
<form onsubmit={setKey}>
|
<form onsubmit={setKey}>
|
||||||
<label>
|
<label>
|
||||||
{t('key')}
|
{t('key')}
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api, target } from '../../urls.svelte.js';
|
import { api, target } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
let { module, id } = $props();
|
let { module, id } = $props();
|
||||||
let error = $state(null);
|
|
||||||
let object = $state(null);
|
let object = $state(null);
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
let task = $state(null);
|
let task = $state(null);
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
if (resp.ok) {
|
if (resp.ok) {
|
||||||
object = await resp.json();
|
object = await resp.json();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,9 +32,6 @@
|
|||||||
onMount(load);
|
onMount(load);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
{#if object}
|
{#if object}
|
||||||
{#if module=='bookmark'}
|
{#if module=='bookmark'}
|
||||||
{@html target(object.comment.rendered).replace(/<p>(.*?)<\/p>/, '$1')} <!-- this is a workaround for in-proper formatting of paragraphs within list items in firefox -->
|
{@html target(object.comment.rendered).replace(/<p>(.*?)<\/p>/, '$1')} <!-- this is a workaround for in-proper formatting of paragraphs within list items in firefox -->
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js'
|
import { user } from '../../user.svelte.js'
|
||||||
|
|
||||||
@@ -12,7 +13,6 @@
|
|||||||
tags = $bindable([]),
|
tags = $bindable([]),
|
||||||
user_list = [],
|
user_list = [],
|
||||||
} = $props();
|
} = $props();
|
||||||
let error = $state(null);
|
|
||||||
let newTag = $state('');
|
let newTag = $state('');
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
|
|
||||||
@@ -35,10 +35,10 @@
|
|||||||
newTag = await resp.text();
|
newTag = await resp.text();
|
||||||
tags.push(newTag);
|
tags.push(newTag);
|
||||||
tags = tags.sort();
|
tags = tags.sort();
|
||||||
error = null;
|
yikes();
|
||||||
newTag = '';
|
newTag = '';
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
tag = await resp.text();
|
tag = await resp.text();
|
||||||
tags = tags.filter(item => item !== tag);
|
tags = tags.filter(item => item !== tag);
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
tags = await resp.json();
|
tags = await resp.json();
|
||||||
tags = tags.sort();
|
tags = tags.sort();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,10 +86,6 @@
|
|||||||
$effect(() => loadTags(id));
|
$effect(() => loadTags(id));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<div class="taglist">
|
<div class="taglist">
|
||||||
{#each tags as tag,idx}
|
{#each tags as tag,idx}
|
||||||
<span class="tag">
|
<span class="tag">
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
import {onMount} from 'svelte';
|
import {onMount} from 'svelte';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
import Reference from './Reference.svelte';
|
import Reference from './Reference.svelte';
|
||||||
|
|
||||||
let { tag } = $props();
|
let { tag } = $props();
|
||||||
let error = $state(null);
|
|
||||||
let uses = $state(null);
|
let uses = $state(null);
|
||||||
|
|
||||||
async function loadUses(){
|
async function loadUses(){
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
const resp = await fetch(url,{credentials:'include'});
|
const resp = await fetch(url,{credentials:'include'});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
uses = await resp.json();
|
uses = await resp.json();
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,9 +26,6 @@
|
|||||||
</script>
|
</script>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{t('tag_uses',{tag:tag})}</legend>
|
<legend>{t('tag_uses',{tag:tag})}</legend>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
{#if uses}
|
{#if uses}
|
||||||
{#each Object.entries(uses) as [module,ids]}
|
{#each Object.entries(uses) as [module,ids]}
|
||||||
<h2>{t(module.endsWith('s') ? module : `${module}s`)}</h2>
|
<h2>{t(module.endsWith('s') ? module : `${module}s`)}</h2>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { user } from '../../user.svelte.js';
|
import { user } from '../../user.svelte.js';
|
||||||
|
|
||||||
@@ -11,7 +12,6 @@
|
|||||||
import Tags from '../tags/TagList.svelte';
|
import Tags from '../tags/TagList.svelte';
|
||||||
|
|
||||||
let { project_id = null, parent_task_id } = $props();
|
let { project_id = null, parent_task_id } = $props();
|
||||||
let error = $state(null);
|
|
||||||
let project = $state(null);
|
let project = $state(null);
|
||||||
let extendedSettings = $state(false);
|
let extendedSettings = $state(false);
|
||||||
let parent_task = $state(null);
|
let parent_task = $state(null);
|
||||||
@@ -54,10 +54,10 @@
|
|||||||
parent_task = await resp.json();
|
parent_task = await resp.json();
|
||||||
task.parent_task_id = +parent_task_id;
|
task.parent_task_id = +parent_task_id;
|
||||||
project_id = parent_task.project_id;
|
project_id = parent_task.project_id;
|
||||||
error = null;
|
yikes();
|
||||||
project = null; // TODO
|
project = null; // TODO
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,9 +67,9 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
project = await resp.json();
|
project = await resp.json();
|
||||||
task.project_id = +project_id;
|
task.project_id = +project_id;
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,9 +111,9 @@
|
|||||||
if (task.parent_task_id){
|
if (task.parent_task_id){
|
||||||
router.navigate(`/task/${task.parent_task_id}/view`);
|
router.navigate(`/task/${task.parent_task_id}/view`);
|
||||||
} else router.navigate(`/task/${task.id}/view`);
|
} else router.navigate(`/task/${task.id}/view`);
|
||||||
error = null;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,9 +130,6 @@
|
|||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{t('add_object',{object:t('task')})}</legend>
|
<legend>{t('add_object',{object:t('task')})}</legend>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
<table {onkeydown}>
|
<table {onkeydown}>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
let error = $state(null);
|
|
||||||
let projects = $state({});
|
let projects = $state({});
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
let tasks = $state(null);
|
let tasks = $state(null);
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
tasks[tid] = await resp.json();
|
tasks[tid] = await resp.json();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
projects[pid] = await resp.json();
|
projects[pid] = await resp.json();
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,9 +102,6 @@
|
|||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{loading ? t('loading_object',{object:t('task_list')}) : t('task_list')}</legend>
|
<legend>{loading ? t('loading_object',{object:t('task_list')}) : t('task_list')}</legend>
|
||||||
{#if error}
|
|
||||||
<soan class="error">{error}</soan>
|
|
||||||
{/if}
|
|
||||||
{#if tasks}
|
{#if tasks}
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error, yikes } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
import { timetrack } from '../../user.svelte.js';
|
import { timetrack } from '../../user.svelte.js';
|
||||||
import { display } from '../../time.svelte.js';
|
import { display } from '../../time.svelte.js';
|
||||||
@@ -10,7 +11,6 @@
|
|||||||
import TimeEditor from '../../Components/TimeRecordEditor.svelte';
|
import TimeEditor from '../../Components/TimeRecordEditor.svelte';
|
||||||
|
|
||||||
let docLinks = $state(null);
|
let docLinks = $state(null);
|
||||||
let error = $state(null);
|
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
let times = $state(null);
|
let times = $state(null);
|
||||||
let tasks = {};
|
let tasks = {};
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
const track = await resp.json();
|
const track = await resp.json();
|
||||||
timetrack.running = track;
|
timetrack.running = track;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,13 +87,13 @@
|
|||||||
body : `${id1}+${id2}`
|
body : `${id1}+${id2}`
|
||||||
});
|
});
|
||||||
if (res.ok){
|
if (res.ok){
|
||||||
error = null;
|
yikes();
|
||||||
let json = await res.json();
|
let json = await res.json();
|
||||||
delete times[id1];
|
delete times[id1];
|
||||||
delete times[id2];
|
delete times[id2];
|
||||||
times[json.id] = json;
|
times[json.id] = json;
|
||||||
} else {
|
} else {
|
||||||
error = await res.text();
|
error(res);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
projects = json.projects;
|
projects = json.projects;
|
||||||
docLinks = json.documents;
|
docLinks = json.documents;
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,9 +132,9 @@
|
|||||||
});
|
});
|
||||||
if (res.ok){
|
if (res.ok){
|
||||||
delete times[time_id];
|
delete times[time_id];
|
||||||
error = false;
|
yikes();
|
||||||
} else {
|
} else {
|
||||||
error = await res.text();
|
error(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,10 +178,10 @@
|
|||||||
let id = json.id;
|
let id = json.id;
|
||||||
for (let key of Object.keys(json)) times[id][key] = json[key];
|
for (let key of Object.keys(json)) times[id][key] = json[key];
|
||||||
detail = null;
|
detail = null;
|
||||||
error = null;
|
yikes();
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
error = await res.text();
|
error(res);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -194,9 +194,6 @@
|
|||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<h1>{t('timetracking')}</h1>
|
<h1>{t('timetracking')}</h1>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
{#if times}
|
{#if times}
|
||||||
{#if selectionSum}
|
{#if selectionSum}
|
||||||
<div class="timetracks sum">
|
<div class="timetracks sum">
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
let { editPassword = $bindable() } = $props();
|
let { editPassword = $bindable() } = $props();
|
||||||
|
|
||||||
let caption = $state(t('update'));
|
let caption = $state(t('update'));
|
||||||
let error = $state("");
|
|
||||||
let newPass = $state("");
|
let newPass = $state("");
|
||||||
let mismatch = $derived(newPass != repeat);
|
let mismatch = $derived(newPass != repeat);
|
||||||
let newEmpty = $derived(!/\S/.test(newPass));
|
let newEmpty = $derived(!/\S/.test(newPass));
|
||||||
@@ -67,7 +66,4 @@
|
|||||||
</label>
|
</label>
|
||||||
<button onclick={submit} disabled={sent||oldEmpty||newEmpty||mismatch}>{caption}</button>
|
<button onclick={submit} disabled={sent||oldEmpty||newEmpty||mismatch}>{caption}</button>
|
||||||
<button onclick={abort} disabled={sent}>{t('abort')}</button>
|
<button onclick={abort} disabled={sent}>{t('abort')}</button>
|
||||||
{#if error}
|
|
||||||
<span class="error">{error}</span>
|
|
||||||
{/if}
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
@@ -3,10 +3,10 @@
|
|||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
|
|
||||||
import { api } from '../../urls.svelte.js';
|
import { api } from '../../urls.svelte.js';
|
||||||
|
import { error } from '../../warn.svelte';
|
||||||
import { t } from '../../translations.svelte.js';
|
import { t } from '../../translations.svelte.js';
|
||||||
|
|
||||||
let caption = t('send_mail');
|
let caption = t('send_mail');
|
||||||
let error = null;
|
|
||||||
let mail = "";
|
let mail = "";
|
||||||
const router = useTinyRouter();
|
const router = useTinyRouter();
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
router.navigate('/user')
|
router.navigate('/user')
|
||||||
} else {
|
} else {
|
||||||
error = await resp.text();
|
error(resp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -66,8 +66,5 @@
|
|||||||
{t('enter_email')}
|
{t('enter_email')}
|
||||||
</label>
|
</label>
|
||||||
<button type="submit">{caption}</button>
|
<button type="submit">{caption}</button>
|
||||||
{#if error}
|
|
||||||
<div class="error">{error}</div>
|
|
||||||
{/if}
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
Reference in New Issue
Block a user