Merge branch 'main' into dev
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -104,29 +104,16 @@
|
||||
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>
|
||||
<textarea bind:value={editValue.source} onkeyup={typed} autofocus={!simple}></textarea>
|
||||
<div>{@html target(editValue.rendered)}</div>
|
||||
<div class="buttons">
|
||||
<button class="cancel" onclick={e => editing = false}>{t('cancel')}</button>
|
||||
<span>{@html t('markdown_supported')}</span>
|
||||
<button class="save" onclick={doSave}>{t('save')}</button>
|
||||
</div>
|
||||
{: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>
|
||||
@@ -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}
|
||||
|
||||
@@ -49,5 +49,4 @@
|
||||
</fieldset>
|
||||
</form>
|
||||
<Notes module="time" entity_id={record.id} />
|
||||
{record.description.source}
|
||||
{/if}
|
||||
|
||||
@@ -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}
|
||||
@@ -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(){
|
||||
|
||||
@@ -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} />
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
{time.duration.toFixed(3)} 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}}>
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
"cancel": "abbrechen",
|
||||
"choose_type": "Typ wählen",
|
||||
"click_to_edit": "Anklicken zum Bearbeiten",
|
||||
"client_id": "Client-ID",
|
||||
"client_secret": "Client-Geheimnis",
|
||||
"close_settings": "Einstellungen schließen",
|
||||
@@ -137,15 +138,16 @@
|
||||
"login_services": "Login-Services",
|
||||
"logout": "Abmelden",
|
||||
"logout_user": "{user} abmelden",
|
||||
"long_click_to_edit": "lang klicken zum Bearbeiten",
|
||||
|
||||
"markdown_code": "Markdown-Code",
|
||||
"markdown_supported": "Markdown & <a href=\"https://plantuml.com\">Plantuml</a> nutzbar!",
|
||||
"MANAGE_LOGIN_SERVICES": "Login-Services verwalten",
|
||||
"member": "Mitarbeiter",
|
||||
"members": "Mitarbeiter",
|
||||
"message": "Nachricht",
|
||||
"messages": "Benachrichtigungen",
|
||||
"miscellaneous_settings": "sonstige Einstellungen",
|
||||
"mismatch": "ungleich",
|
||||
"model": "Modell",
|
||||
"models": "Modelle",
|
||||
"module": {
|
||||
@@ -166,7 +168,6 @@
|
||||
"user": "Benutzer",
|
||||
"wiki": "Wiki"
|
||||
},
|
||||
"mismatch": "ungleich",
|
||||
"month": "Monat",
|
||||
"must_not_be_empty": "darf nicht leer sein",
|
||||
|
||||
@@ -215,6 +216,7 @@
|
||||
"region": "Bundesland",
|
||||
"repeat_new_password": "Wiederholung",
|
||||
"results": "Ergebnisse",
|
||||
"right_click_to_edit": "Rechts-Klick zum Bearbeiten",
|
||||
|
||||
"save": "speichern",
|
||||
"saved": "gespeichert",
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
"cancel": "cancel",
|
||||
"choose_type": "choose type",
|
||||
"click_to_edit": "click to edit",
|
||||
"client_id": "client ID",
|
||||
"client_secret": "client secret",
|
||||
"close_settings": "close settings",
|
||||
@@ -38,7 +39,7 @@
|
||||
"contained_tax": "contained tax",
|
||||
"content": "content",
|
||||
"context": "context",
|
||||
"count_of_occurrences": "{count} occurences",
|
||||
"count_of_occurrences": "{count} occurrences",
|
||||
"country": "country",
|
||||
"COURT": "local court",
|
||||
"CUSTOMER-NUMBER": "customer number",
|
||||
@@ -137,15 +138,16 @@
|
||||
"login_services": "login service",
|
||||
"logout": "logout",
|
||||
"logout_user": "logout {user}",
|
||||
"long_click_to_edit": "click long to edit",
|
||||
|
||||
"markdown_code": "Markdown-Code",
|
||||
"markdown_supported": "Markdown & <a href=\"https://plantuml.com\">Plantuml</a> supported!",
|
||||
"MANAGE_LOGIN_SERVICES": "manage login services",
|
||||
"member": "member",
|
||||
"members": "members",
|
||||
"message": "message",
|
||||
"messages": "messages",
|
||||
"miscellaneous_settings": "miscellaneous settings",
|
||||
"mismatch": "mismatch",
|
||||
"model": "model",
|
||||
"models": "models",
|
||||
"module": {
|
||||
@@ -166,7 +168,6 @@
|
||||
"user": "Users",
|
||||
"wiki": "wiki"
|
||||
},
|
||||
"mismatch": "mismatch",
|
||||
"month": "month",
|
||||
"must_not_be_empty": "must not be empty",
|
||||
|
||||
@@ -215,6 +216,7 @@
|
||||
"region": "region",
|
||||
"repeat_new_password": "repeat new password",
|
||||
"results": "results",
|
||||
"right_click_to_edit": "right click to edit",
|
||||
|
||||
"save": "save",
|
||||
"saved": "saved",
|
||||
|
||||
@@ -87,7 +87,7 @@ textarea{
|
||||
|
||||
.kanban .state_10 .box,
|
||||
.kanban .state_100 .box{
|
||||
background: linear-gradient(rgba(0,0,0,0.8));
|
||||
background: linear-gradient(rgba(0,0,0,0.6));
|
||||
}
|
||||
|
||||
.kanban .state_10 .box,
|
||||
|
||||
@@ -290,6 +290,18 @@ span.timetracking {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown.editing{
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
column-gap: 10px;
|
||||
}
|
||||
.markdown .buttons{
|
||||
grid-column-end: span 2;
|
||||
}
|
||||
|
||||
.editable:hover{
|
||||
border: 1px dotted;
|
||||
}
|
||||
|
||||
.timetracks .year, .timetracks .month{
|
||||
border: 1px solid;
|
||||
@@ -307,23 +319,6 @@ span.timetracking {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.markdown.editing{
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.markdown.editing > *{
|
||||
width: 49%;
|
||||
}
|
||||
|
||||
.markdown.editing > *:nth-child(2){
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.markdown img{
|
||||
max-width: 75%;
|
||||
}
|
||||
|
||||
table{
|
||||
min-width: 30vw;
|
||||
@@ -370,6 +365,7 @@ a.wikilink{
|
||||
.grid2{
|
||||
display: grid;
|
||||
grid-template-columns: 230px auto;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.grid2 > :nth-child(2n-1){
|
||||
|
||||
Reference in New Issue
Block a user