Merge branch 'main' into module/stock

This commit is contained in:
2025-10-17 15:11:31 +02:00
12 changed files with 56 additions and 60 deletions

View File

@@ -8,7 +8,7 @@
href = '#',
onclick = evt => { evt.preventDefault(); startEdit(); return false },
onSet = newVal => {return true;},
title = t('long_click_to_edit'),
title = t('click_to_edit'),
type = 'div',
value = $bindable(null)
} = $props();

View File

@@ -104,29 +104,18 @@
if (simple) startEdit();
</script>
<style>
textarea{
width: 100%;
min-height: 100px;
}
div{
min-width: 40px;
min-height: 20px;
}
div.editable:hover{
border: 1px dotted;
}
</style>
<div class="markdown {editing?'editing':''}">
{#if editing}
<div class="boundary">
<textarea bind:value={editValue.source} onkeyup={typed} autofocus={!simple}></textarea>
<span class="buttons">
<button class="cancel" onclick={e => editing = false}>{t('cancel')}</button>
<button class="save" onclick={doSave}>{t('save')}</button>
</span>
<span class="hint">{@html t('markdown_supported')}</span>
<textarea bind:value={editValue.source} onkeyup={typed} autofocus={!simple}></textarea>
<div class="preview">{@html target(editValue.rendered)}</div>
{#if !simple}
<div class="buttons">
<button class="cancel" onclick={e => editing = false}>{t('cancel')}</button>
<button class="save" onclick={doSave}>{t('save')}</button>
</div>
{/if}
{:else}
<svelte:element this={type} {onclick} {oncontextmenu} class={{editable}} title={t('right_click_to_edit')} >{@html target(editValue.rendered)}</svelte:element>
{/if}
<svelte:element this={type} {onclick} {oncontextmenu} class={{editable}} title={t('long_click_to_edit')} >{@html target(editValue.rendered)}</svelte:element>
</div>

View File

@@ -85,7 +85,7 @@
<textarea bind:value={editValue} onkeyup={typed} autofocus></textarea>
{:else}
{#if value}
<svelte:element this={type} {onmousedown} {onmouseup} {ontouchstart} {ontouchend} class={{editable}} title={t('long_click_to_edit')} >
<svelte:element this={type} {onmousedown} {onmouseup} {ontouchstart} {ontouchend} class={{editable}} title={t('right_click_to_edit')} >
{#each value.split("\n") as line}
{line}<br/>
{/each}

View File

@@ -49,5 +49,4 @@
</fieldset>
</form>
<Notes module="time" entity_id={record.id} />
{record.description.source}
{/if}

View File

@@ -17,9 +17,9 @@
{#if field}
<div class={field.name}>
{#if field.value.includes('\\n')}
<MultiLineEditor type="div" editable={true} value={field.value.replaceAll('\\n','\n')} {onSet} title={t(field.name)+' '+t('long_click_to_edit')} />
<MultiLineEditor type="div" editable={true} value={field.value.replaceAll('\\n','\n')} {onSet} title={t(field.name)+' '+t('right_click_to_edit')} />
{:else}
<LineEditor type="div" editable={true} value={field.value} {onSet} title={t(field.name)+' '+t('long_click_to_edit')} />
<LineEditor type="div" editable={true} value={field.value} {onSet} title={t(field.name)+' '+t('click_to_edit')} />
{/if}
</div>
{/if}

View File

@@ -23,7 +23,6 @@
let tasks = $state({});
let users = {};
let columns = $derived(project.allowed_states?Object.keys(project.allowed_states).length+1:1);
const controller = new AbortController();
$effect(() => updateUrl(filter_input));
@@ -175,8 +174,7 @@
}
function openTask(task_id){
controller.abort();
router.navigate(`/task/${task_id}/view`)
window.open(`/task/${task_id}/view`, '_blank').focus();
}
async function save_bookmark(){

View File

@@ -210,9 +210,7 @@
</div>
{#if task.description}
<div>{t('description')}</div>
<div class="description">
<MarkdownEditor bind:value={task.description} editable={true} onSet={val => update({description:val})} />
</div>
<MarkdownEditor bind:value={task.description} editable={true} onSet={val => update({description:val})} />
{/if}
{#if !showSettings && task.start_date}
<div>{t('start_date')}</div>
@@ -277,6 +275,10 @@
</ul>
</div>
{/if}
<div>{t('tags')}</div>
<div class="tags">
<TagList module="task" {id} user_list={Object.keys(task.members).map(id => +id)} />
</div>
<div>
{t('subtasks')}
@@ -288,10 +290,6 @@
{/if}
</div>
<div>{t('tags')}</div>
<div class="tags">
<TagList module="task" {id} user_list={Object.keys(task.members).map(id => +id)} />
</div>
<h3>{t('notes')}</h3>
<div>
<Notes module="task" entity_id={id} />

View File

@@ -244,7 +244,7 @@
{time.duration.toFixed(3)}&nbsp;h
{/if}
</td>
<td class="user">
<td class="user" onclick={e => {detail = time.id}}>
{users[time.user_id].name}
</td>
<td class="subject" onclick={e => {detail = time.id}}>