implemented image embedding links

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2025-10-05 23:25:49 +02:00
parent 20d0247c90
commit 9cefc402b5
7 changed files with 39 additions and 2 deletions

View File

@@ -6,6 +6,7 @@
import { t } from '../../translations.svelte'; import { t } from '../../translations.svelte';
import { user } from '../../user.svelte'; import { user } from '../../user.svelte';
const image_extensions = ['jpg','jpeg','gif','png','svg'];
const router = useTinyRouter(); const router = useTinyRouter();
let children = $state({}); let children = $state({});
let new_dir = $state(null); let new_dir = $state(null);
@@ -80,12 +81,17 @@
yikes(); yikes();
} }
function is_image(file){
let parts = file.toLowerCase().split('.');
let ext = parts.pop();
return image_extensions.includes(ext);
}
async function loadChildren(p){ async function loadChildren(p){
p = p.substring(6); p = p.substring(6);
if (p == '') p = '/'; if (p == '') p = '/';
children = { dirs : {}, files : {}, title : p}; children = { dirs : {}, files : {}, title : p};
path = p; path = p;
console.log(p);
if (p == '/'){ if (p == '/'){
children.dirs[`/user/${user.id}`] = t('my_files'); children.dirs[`/user/${user.id}`] = t('my_files');
children.dirs['/project'] = t('projects') children.dirs['/project'] = t('projects')
@@ -106,6 +112,12 @@
} }
} }
function markdown(file){
let parts = file.split('/');
let md = `![${parts.pop()}](/api/files${file})`;
navigator.clipboard.writeText(md);
}
function onclick(ev){ function onclick(ev){
ev.preventDefault(); ev.preventDefault();
ev.stopPropagation(); ev.stopPropagation();
@@ -178,8 +190,11 @@
<li class="file"> <li class="file">
<span class="symbol"></span> <span class="symbol"></span>
<a href={`/api/files${k}`} target="_blank">{v}</a> <a href={`/api/files${k}`} target="_blank">{v}</a>
{#if is_image(k)}
<button class="symbol" title={'markdown_code'} onclick={e => markdown(k)}></button>
{/if}
{#if delete_allowed} {#if delete_allowed}
<button class="symbol" onclick={e => dropFile(`/api/files${k}`,v)}></button> <button class="symbol" title={t('delete_object',{'object':t('file')})} onclick={e => dropFile(`/api/files${k}`,v)}></button>
{/if} {/if}
</li> </li>
{/each} {/each}

View File

@@ -84,6 +84,7 @@
"failed": "fehlgeschlagen", "failed": "fehlgeschlagen",
"failed_login_attempts" : "Account nach {attempts} fehlgeschlagenen Logins gesperrt bis {release_time}", "failed_login_attempts" : "Account nach {attempts} fehlgeschlagenen Logins gesperrt bis {release_time}",
"file": "Datei",
"files": "Dateien", "files": "Dateien",
"filter": "Filter", "filter": "Filter",
"footer": "Fuß-Text", "footer": "Fuß-Text",
@@ -123,6 +124,7 @@
"logout_user": "{user} abmelden", "logout_user": "{user} abmelden",
"long_click_to_edit": "lang klicken zum Bearbeiten", "long_click_to_edit": "lang klicken zum Bearbeiten",
"markdown_code": "Markdown-Code",
"MANAGE_LOGIN_SERVICES": "Login-Services verwalten", "MANAGE_LOGIN_SERVICES": "Login-Services verwalten",
"member": "Mitarbeiter", "member": "Mitarbeiter",
"members": "Mitarbeiter", "members": "Mitarbeiter",

View File

@@ -123,6 +123,7 @@
"logout_user": "logout {user}", "logout_user": "logout {user}",
"long_click_to_edit": "click long to edit", "long_click_to_edit": "click long to edit",
"markdown_code": "Markdown-Code",
"MANAGE_LOGIN_SERVICES": "manage login services", "MANAGE_LOGIN_SERVICES": "manage login services",
"member": "member", "member": "member",
"members": "members", "members": "members",

View File

@@ -660,3 +660,7 @@ li.task button.symbol:nth-child(1){
.timetracks .selected td:not(.year):not(.month){ .timetracks .selected td:not(.year):not(.month){
background: skyblue; background: skyblue;
} }
.markdown image{
max-width: 75%;
}

View File

@@ -298,6 +298,11 @@ span.timetracking {
right: 0; right: 0;
top: 0; top: 0;
} }
.markdown img{
max-width: 75%;
}
table{ table{
min-width: 30vw; min-width: 30vw;
} }

View File

@@ -294,6 +294,11 @@ span.timetracking {
right: 0; right: 0;
top: 0; top: 0;
} }
.markdown img{
max-width: 75%;
}
table{ table{
min-width: 30vw; min-width: 30vw;
} }

View File

@@ -298,6 +298,11 @@ span.timetracking {
right: 0; right: 0;
top: 0; top: 0;
} }
.markdown img{
max-width: 75%;
}
table{ table{
min-width: 30vw; min-width: 30vw;
} }