mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-14 05:15:18 +00:00
enh: folder background image
This commit is contained in:
parent
d46b7b8f1b
commit
2a234829f5
4 changed files with 87 additions and 3 deletions
|
|
@ -2263,7 +2263,18 @@
|
||||||
>
|
>
|
||||||
{#if !loading}
|
{#if !loading}
|
||||||
<div in:fade={{ duration: 50 }} class="w-full h-full flex flex-col">
|
<div in:fade={{ duration: 50 }} class="w-full h-full flex flex-col">
|
||||||
{#if $settings?.backgroundImageUrl ?? $config?.license_metadata?.background_image_url ?? null}
|
{#if $selectedFolder && $selectedFolder?.meta?.background_image_url}
|
||||||
|
<div
|
||||||
|
class="absolute {$showSidebar
|
||||||
|
? 'md:max-w-[calc(100%-260px)] md:translate-x-[260px]'
|
||||||
|
: ''} top-0 left-0 w-full h-full bg-cover bg-center bg-no-repeat"
|
||||||
|
style="background-image: url({$selectedFolder?.meta?.background_image_url}) "
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div
|
||||||
|
class="absolute top-0 left-0 w-full h-full bg-linear-to-t from-white to-white/85 dark:from-gray-900 dark:to-gray-900/90 z-0"
|
||||||
|
/>
|
||||||
|
{:else if $settings?.backgroundImageUrl ?? $config?.license_metadata?.background_image_url ?? null}
|
||||||
<div
|
<div
|
||||||
class="absolute {$showSidebar
|
class="absolute {$showSidebar
|
||||||
? 'md:max-w-[calc(100%-260px)] md:translate-x-[260px]'
|
? 'md:max-w-[calc(100%-260px)] md:translate-x-[260px]'
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
let showFolderModal = false;
|
let showFolderModal = false;
|
||||||
let showDeleteConfirm = false;
|
let showDeleteConfirm = false;
|
||||||
|
|
||||||
const updateHandler = async ({ name, data }) => {
|
const updateHandler = async ({ name, meta, data }) => {
|
||||||
if (name === '') {
|
if (name === '') {
|
||||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||||
return;
|
return;
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
|
|
||||||
const res = await updateFolderById(localStorage.token, folder.id, {
|
const res = await updateFolderById(localStorage.token, folder.id, {
|
||||||
name,
|
name,
|
||||||
|
...(meta ? { meta } : {}),
|
||||||
...(data ? { data } : {})
|
...(data ? { data } : {})
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
toast.error(`${error}`);
|
toast.error(`${error}`);
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,9 @@
|
||||||
export let folder = null;
|
export let folder = null;
|
||||||
|
|
||||||
let name = '';
|
let name = '';
|
||||||
|
let meta = {
|
||||||
|
background_image_url: null
|
||||||
|
};
|
||||||
let data = {
|
let data = {
|
||||||
system_prompt: '',
|
system_prompt: '',
|
||||||
files: []
|
files: []
|
||||||
|
|
@ -40,6 +43,7 @@
|
||||||
|
|
||||||
await onSubmit({
|
await onSubmit({
|
||||||
name,
|
name,
|
||||||
|
meta,
|
||||||
data
|
data
|
||||||
});
|
});
|
||||||
show = false;
|
show = false;
|
||||||
|
|
@ -48,10 +52,15 @@
|
||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
name = folder.name;
|
name = folder.name;
|
||||||
|
meta = folder.meta || {
|
||||||
|
background_image_url: null
|
||||||
|
};
|
||||||
data = folder.data || {
|
data = folder.data || {
|
||||||
system_prompt: '',
|
system_prompt: '',
|
||||||
files: []
|
files: []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(folder);
|
||||||
};
|
};
|
||||||
|
|
||||||
const focusInput = async () => {
|
const focusInput = async () => {
|
||||||
|
|
@ -73,6 +82,9 @@
|
||||||
|
|
||||||
$: if (!show && !edit) {
|
$: if (!show && !edit) {
|
||||||
name = '';
|
name = '';
|
||||||
|
meta = {
|
||||||
|
background_image_url: null
|
||||||
|
};
|
||||||
data = {
|
data = {
|
||||||
system_prompt: '',
|
system_prompt: '',
|
||||||
files: []
|
files: []
|
||||||
|
|
@ -123,6 +135,65 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<input
|
||||||
|
id="folder-background-image-input"
|
||||||
|
type="file"
|
||||||
|
hidden
|
||||||
|
accept="image/*"
|
||||||
|
on:change={(e) => {
|
||||||
|
const inputFiles = e.target.files;
|
||||||
|
|
||||||
|
let reader = new FileReader();
|
||||||
|
reader.onload = (event) => {
|
||||||
|
let originalImageUrl = `${event.target.result}`;
|
||||||
|
meta.background_image_url = originalImageUrl;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (
|
||||||
|
inputFiles &&
|
||||||
|
inputFiles.length > 0 &&
|
||||||
|
['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(
|
||||||
|
inputFiles[0]['type']
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
reader.readAsDataURL(inputFiles[0]);
|
||||||
|
} else {
|
||||||
|
console.log(`Unsupported File Type '${inputFiles[0]['type']}'.`);
|
||||||
|
|
||||||
|
// clear the input
|
||||||
|
e.target.value = '';
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="flex justify-between w-full mt-1 items-center">
|
||||||
|
<div class="text-xs text-gray-500">{$i18n.t('Folder Background Image')}</div>
|
||||||
|
|
||||||
|
<div class="">
|
||||||
|
<button
|
||||||
|
aria-labelledby="chat-background-label background-image-url-state"
|
||||||
|
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||||
|
on:click={() => {
|
||||||
|
if (meta?.background_image_url !== null) {
|
||||||
|
meta.background_image_url = null;
|
||||||
|
} else {
|
||||||
|
const input = document.getElementById('folder-background-image-input');
|
||||||
|
if (input) {
|
||||||
|
input.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
<span class="ml-2 self-center" id="background-image-url-state"
|
||||||
|
>{meta?.background_image_url !== null
|
||||||
|
? $i18n.t('Reset')
|
||||||
|
: $i18n.t('Upload')}</span
|
||||||
|
>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<hr class=" border-gray-50 dark:border-gray-850 my-2.5 w-full" />
|
<hr class=" border-gray-50 dark:border-gray-850 my-2.5 w-full" />
|
||||||
|
|
||||||
{#if $user?.role === 'admin' || ($user?.permissions.chat?.system_prompt ?? true)}
|
{#if $user?.role === 'admin' || ($user?.permissions.chat?.system_prompt ?? true)}
|
||||||
|
|
|
||||||
|
|
@ -282,7 +282,7 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateHandler = async ({ name, data }) => {
|
const updateHandler = async ({ name, meta, data }) => {
|
||||||
if (name === '') {
|
if (name === '') {
|
||||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||||
return;
|
return;
|
||||||
|
|
@ -295,6 +295,7 @@
|
||||||
|
|
||||||
const res = await updateFolderById(localStorage.token, folderId, {
|
const res = await updateFolderById(localStorage.token, folderId, {
|
||||||
name,
|
name,
|
||||||
|
...(meta ? { meta } : {}),
|
||||||
...(data ? { data } : {})
|
...(data ? { data } : {})
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
toast.error(`${error}`);
|
toast.error(`${error}`);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue