Update to svelte 5
This commit is contained in:
@@ -3,10 +3,14 @@ import Button from "layout/Button.svelte";
|
||||
import type { FSPermissions, NodeOptions } from "lib/FilesystemAPI";
|
||||
import PermissionButton from "./PermissionButton.svelte";
|
||||
|
||||
export let options: NodeOptions
|
||||
let {
|
||||
options = $bindable()
|
||||
}: {
|
||||
options: NodeOptions;
|
||||
} = $props();
|
||||
|
||||
let new_user_id = ""
|
||||
let new_user_perms = <FSPermissions>{read: true}
|
||||
let new_user_id = $state("")
|
||||
let new_user_perms = $state(<FSPermissions>{read: true})
|
||||
const add_user = (e: SubmitEvent) => {
|
||||
e.preventDefault()
|
||||
if (options.user_permissions === undefined) {
|
||||
@@ -19,8 +23,8 @@ const del_user = (id: string) => {
|
||||
options.user_permissions = options.user_permissions
|
||||
}
|
||||
|
||||
let new_password = ""
|
||||
let new_password_perms = <FSPermissions>{read: true}
|
||||
let new_password = $state("")
|
||||
let new_password_perms = $state(<FSPermissions>{read: true})
|
||||
const add_password = (e: SubmitEvent) => {
|
||||
e.preventDefault()
|
||||
if (options.password_permissions === undefined) {
|
||||
@@ -64,7 +68,7 @@ const del_password = (pass: string) => {
|
||||
not receive an e-mail invite. Giving write access to a user without giving
|
||||
read access as well does not actually allow them to write anything.
|
||||
</p>
|
||||
<form on:submit={add_user} class="row">
|
||||
<form onsubmit={add_user} class="row">
|
||||
<input type="text" bind:value={new_user_id} placeholder="Username" class="grow" size="1">
|
||||
<Button type="submit" icon="add" label="Add"/>
|
||||
<div class="perms">
|
||||
@@ -94,7 +98,7 @@ const del_password = (pass: string) => {
|
||||
<p>
|
||||
<b>This feature is not implemented currently!</b>
|
||||
</p>
|
||||
<form on:submit={add_password} class="row">
|
||||
<form onsubmit={add_password} class="row">
|
||||
<input type="text" bind:value={new_password} placeholder="Password" class="grow" size="1">
|
||||
<Button type="submit" icon="add" label="Add"/>
|
||||
<div class="perms">
|
||||
|
@@ -1,4 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { run } from 'svelte/legacy';
|
||||
import { createEventDispatcher } from "svelte";
|
||||
import ThemePresets from "./ThemePresets.svelte";
|
||||
import { fs_update, fs_node_type, type FSNode, type NodeOptions, node_is_shared, type FSPermissions } from "lib/FilesystemAPI";
|
||||
@@ -7,11 +8,16 @@ import HelpButton from "layout/HelpButton.svelte";
|
||||
import FilePicker from "filesystem/filemanager/FilePicker.svelte";
|
||||
let dispatch = createEventDispatcher()
|
||||
|
||||
export let file: FSNode
|
||||
export let options: NodeOptions
|
||||
export let enabled: boolean
|
||||
let {
|
||||
file = $bindable(),
|
||||
options = $bindable(),
|
||||
enabled = $bindable()
|
||||
}: {
|
||||
file: FSNode;
|
||||
options: NodeOptions;
|
||||
enabled: boolean;
|
||||
} = $props();
|
||||
|
||||
$: update_colors(options)
|
||||
const update_colors = (options: NodeOptions) => {
|
||||
if (enabled) {
|
||||
options.branding_enabled = "true"
|
||||
@@ -21,7 +27,7 @@ const update_colors = (options: NodeOptions) => {
|
||||
}
|
||||
}
|
||||
|
||||
let picker: FilePicker
|
||||
let picker: FilePicker = $state()
|
||||
let picking = ""
|
||||
const pick_image = (type: string) => {
|
||||
picking = type
|
||||
@@ -61,7 +67,10 @@ const handle_picker = async (e: CustomEvent<FSNode[]>) => {
|
||||
}
|
||||
}
|
||||
|
||||
let highlight_info = false
|
||||
let highlight_info = $state(false)
|
||||
run(() => {
|
||||
update_colors(options)
|
||||
});
|
||||
</script>
|
||||
|
||||
<fieldset>
|
||||
@@ -127,7 +136,7 @@ let highlight_info = false
|
||||
working. Recommended dimensions for the header image are 1000x90 px.
|
||||
</p>
|
||||
<div>Header image ID</div>
|
||||
<button on:click={() => pick_image("brand_header_image")}>
|
||||
<button onclick={() => pick_image("brand_header_image")}>
|
||||
<i class="icon">folder_open</i>
|
||||
Pick
|
||||
</button>
|
||||
@@ -135,7 +144,7 @@ let highlight_info = false
|
||||
<div>Header image link</div>
|
||||
<input class="span2" type="text" bind:value={options.brand_header_link}/>
|
||||
<div>Background image ID</div>
|
||||
<button on:click={() => pick_image("brand_background_image")}>
|
||||
<button onclick={() => pick_image("brand_background_image")}>
|
||||
<i class="icon">folder_open</i>
|
||||
Pick
|
||||
</button>
|
||||
|
@@ -1,4 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { preventDefault } from 'svelte/legacy';
|
||||
import { fs_rename, fs_update, type FSNode, type NodeOptions } from "lib/FilesystemAPI";
|
||||
import Modal from "util/Modal.svelte";
|
||||
import BrandingOptions from "./BrandingOptions.svelte";
|
||||
@@ -9,13 +10,18 @@ import AccessControl from "./AccessControl.svelte";
|
||||
import type { FSNavigator } from "filesystem/FSNavigator";
|
||||
import { loading_finish, loading_start } from "lib/Loading";
|
||||
|
||||
export let nav: FSNavigator
|
||||
let file: FSNode = {} as FSNode
|
||||
let options: NodeOptions = {} as NodeOptions
|
||||
let file: FSNode = $state({} as FSNode)
|
||||
let options: NodeOptions = $state({} as NodeOptions)
|
||||
|
||||
let custom_css = ""
|
||||
let custom_css = $state("")
|
||||
|
||||
export let visible: boolean
|
||||
let {
|
||||
nav,
|
||||
visible = $bindable()
|
||||
}: {
|
||||
nav: FSNavigator;
|
||||
visible: boolean;
|
||||
} = $props();
|
||||
|
||||
// Open the edit window. Argument 1 is the file to edit, 2 is whether the file
|
||||
// should be opened after the user finishes editing and 3 is the default tab
|
||||
@@ -54,11 +60,11 @@ export const edit = (f: FSNode, oae = false, open_tab = "") => {
|
||||
visible = true
|
||||
}
|
||||
|
||||
let tab = "file"
|
||||
let open_after_edit = false
|
||||
let tab = $state("file")
|
||||
let open_after_edit = $state(false)
|
||||
|
||||
let new_name = ""
|
||||
let branding_enabled = false
|
||||
let new_name = $state("")
|
||||
let branding_enabled = $state(false)
|
||||
|
||||
const save = async (keep_editing = false) => {
|
||||
console.debug("Saving file", file.path)
|
||||
@@ -106,27 +112,27 @@ const save = async (keep_editing = false) => {
|
||||
|
||||
<Modal bind:visible={visible} title="Edit {file.name}" width="800px" form="edit_form" style="color: var(--body_text_color); {custom_css}">
|
||||
<div class="tab_bar">
|
||||
<button class:button_highlight={tab === "file"} on:click={() => tab = "file"}>
|
||||
<button class:button_highlight={tab === "file"} onclick={() => tab = "file"}>
|
||||
<i class="icon">edit</i>
|
||||
Properties
|
||||
</button>
|
||||
<button class:button_highlight={tab === "share"} on:click={() => tab = "share"}>
|
||||
<button class:button_highlight={tab === "share"} onclick={() => tab = "share"}>
|
||||
<i class="icon">share</i>
|
||||
Sharing
|
||||
</button>
|
||||
{#if $nav.permissions.owner}
|
||||
<button class:button_highlight={tab === "access"} on:click={() => tab = "access"}>
|
||||
<button class:button_highlight={tab === "access"} onclick={() => tab = "access"}>
|
||||
<i class="icon">key</i>
|
||||
Access control
|
||||
</button>
|
||||
{/if}
|
||||
<button class:button_highlight={tab === "branding"} on:click={() => tab = "branding"}>
|
||||
<button class:button_highlight={tab === "branding"} onclick={() => tab = "branding"}>
|
||||
<i class="icon">palette</i>
|
||||
Branding
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<form id="edit_form" on:submit|preventDefault={() => save(false)}></form>
|
||||
<form id="edit_form" onsubmit={preventDefault(() => save(false))}></form>
|
||||
|
||||
<div class="tab_content">
|
||||
{#if tab === "file"}
|
||||
@@ -138,7 +144,10 @@ const save = async (keep_editing = false) => {
|
||||
bind:open_after_edit
|
||||
/>
|
||||
{:else if tab === "share"}
|
||||
<SharingOptions bind:file bind:options on:save={() => save(true)} />
|
||||
<SharingOptions
|
||||
bind:file
|
||||
bind:options
|
||||
/>
|
||||
{:else if tab === "access"}
|
||||
<AccessControl bind:options />
|
||||
{:else if tab === "branding"}
|
||||
|
@@ -5,13 +5,21 @@ import PathLink from "filesystem/util/PathLink.svelte";
|
||||
import type { FSNavigator } from "filesystem/FSNavigator";
|
||||
import { loading_finish, loading_start } from "lib/Loading";
|
||||
|
||||
export let nav: FSNavigator
|
||||
export let file: FSNode = {} as FSNode
|
||||
export let new_name: string
|
||||
export let visible: boolean
|
||||
export let open_after_edit: boolean
|
||||
let {
|
||||
nav,
|
||||
file = $bindable({} as FSNode),
|
||||
new_name = $bindable(),
|
||||
visible = $bindable(),
|
||||
open_after_edit = $bindable(false)
|
||||
}: {
|
||||
nav: FSNavigator;
|
||||
file?: FSNode;
|
||||
new_name: string;
|
||||
visible: boolean;
|
||||
open_after_edit: boolean;
|
||||
} = $props();
|
||||
|
||||
$: is_root_dir = file.path === "/"+file.id
|
||||
let is_root_dir = $derived(file.path === "/"+file.id)
|
||||
|
||||
const delete_file = async (e: MouseEvent) => {
|
||||
e.preventDefault()
|
||||
|
@@ -2,9 +2,15 @@
|
||||
import ToggleButton from "layout/ToggleButton.svelte";
|
||||
import type { FSPermissions } from "lib/FilesystemAPI";
|
||||
|
||||
export let permissions = <FSPermissions>{}
|
||||
let {
|
||||
permissions = $bindable()
|
||||
}: {
|
||||
permissions: FSPermissions
|
||||
} = $props();
|
||||
</script>
|
||||
|
||||
<ToggleButton group_first bind:on={permissions.read}>Read</ToggleButton>
|
||||
<ToggleButton group_middle bind:on={permissions.write}>Write</ToggleButton>
|
||||
<ToggleButton group_last bind:on={permissions.delete}>Delete</ToggleButton>
|
||||
{#if permissions !== undefined}
|
||||
<ToggleButton group_first bind:on={permissions.read}>Read</ToggleButton>
|
||||
<ToggleButton group_middle bind:on={permissions.write}>Write</ToggleButton>
|
||||
<ToggleButton group_last bind:on={permissions.delete}>Delete</ToggleButton>
|
||||
{/if}
|
||||
|
@@ -1,18 +1,22 @@
|
||||
<script lang="ts">
|
||||
import { domain_url } from "util/Util.svelte";
|
||||
import { run } from 'svelte/legacy';
|
||||
import { domain_url } from "util/Util";
|
||||
import CopyButton from "layout/CopyButton.svelte";
|
||||
import { formatDate } from "util/Formatting";
|
||||
import { node_is_shared, type FSNode, type NodeOptions } from "lib/FilesystemAPI";
|
||||
import AccessControl from "./AccessControl.svelte";
|
||||
|
||||
export let file: FSNode = {} as FSNode
|
||||
export let options: NodeOptions
|
||||
let {
|
||||
file = $bindable(),
|
||||
options = $bindable(),
|
||||
}: {
|
||||
file?: FSNode;
|
||||
options: NodeOptions;
|
||||
} = $props();
|
||||
|
||||
let embed_html: string
|
||||
let preview_area: HTMLDivElement
|
||||
let embed_html: string = $state()
|
||||
let preview_area: HTMLDivElement = $state()
|
||||
|
||||
$: share_link = window.location.protocol+"//"+window.location.host+"/d/"+file.id
|
||||
$: embed_iframe(file, options)
|
||||
const embed_iframe = (file: FSNode, options: NodeOptions) => {
|
||||
if (!node_is_shared(file)) {
|
||||
example = false
|
||||
@@ -28,7 +32,7 @@ const embed_iframe = (file: FSNode, options: NodeOptions) => {
|
||||
`></iframe>`
|
||||
}
|
||||
|
||||
let example = false
|
||||
let example = $state(false)
|
||||
const toggle_example = () => {
|
||||
if (node_is_shared(file)) {
|
||||
example = !example
|
||||
@@ -40,6 +44,10 @@ const toggle_example = () => {
|
||||
}
|
||||
}
|
||||
|
||||
let share_link = $derived(window.location.protocol+"//"+window.location.host+"/d/"+file.id)
|
||||
run(() => {
|
||||
embed_iframe(file, options)
|
||||
});
|
||||
</script>
|
||||
|
||||
<fieldset>
|
||||
@@ -78,7 +86,7 @@ const toggle_example = () => {
|
||||
<textarea bind:value={embed_html} style="width: 100%; height: 4em;"></textarea>
|
||||
<br/>
|
||||
<CopyButton text={embed_html}>Copy HTML</CopyButton>
|
||||
<button on:click={toggle_example} class:button_highlight={example} disabled={!node_is_shared(file)}>
|
||||
<button onclick={toggle_example} class:button_highlight={example} disabled={!node_is_shared(file)}>
|
||||
<i class="icon">visibility</i> Show example
|
||||
</button>
|
||||
</div>
|
||||
|
@@ -1,9 +1,13 @@
|
||||
<script lang="ts">
|
||||
import type { FSNodeProperties } from "lib/FilesystemAPI";
|
||||
|
||||
export let properties: FSNodeProperties = {} as FSNodeProperties
|
||||
let {
|
||||
properties = $bindable({} as FSNodeProperties)
|
||||
}: {
|
||||
properties?: FSNodeProperties;
|
||||
} = $props();
|
||||
|
||||
let current_theme = -1
|
||||
let current_theme = $state(-1)
|
||||
|
||||
const set_theme = (index: number) => {
|
||||
current_theme = index
|
||||
@@ -71,7 +75,7 @@ const themes = [
|
||||
</script>
|
||||
|
||||
{#each themes as theme, index (theme.name)}
|
||||
<button class:button_highlight={current_theme === index} on:click={() => {set_theme(index)}}>
|
||||
<button class:button_highlight={current_theme === index} onclick={() => {set_theme(index)}}>
|
||||
{theme.name}
|
||||
</button>
|
||||
{/each}
|
||||
|
Reference in New Issue
Block a user