Files
fnx_web/svelte/src/filesystem/edit_window/SharingOptions.svelte

128 lines
3.4 KiB
Svelte
Raw Normal View History

<script lang="ts">
import { domain_url } from "util/Util.svelte";
import CopyButton from "layout/CopyButton.svelte";
import { formatDate } from "util/Formatting";
2025-10-09 15:48:23 +02:00
import { node_is_shared, type FSNode, type NodeOptions } from "lib/FilesystemAPI";
import AccessControl from "./AccessControl.svelte";
2024-02-16 21:07:01 +01:00
export let file: FSNode = {} as FSNode
export let options: NodeOptions
2024-02-16 21:07:01 +01:00
let embed_html: string
let preview_area: HTMLDivElement
2024-02-16 21:07:01 +01:00
$: share_link = window.location.protocol+"//"+window.location.host+"/d/"+file.id
$: embed_iframe(file, options)
2025-10-09 15:48:23 +02:00
const embed_iframe = (file: FSNode, options: NodeOptions) => {
if (!node_is_shared(file)) {
2024-02-16 21:07:01 +01:00
example = false
embed_html = "File is not shared, can't generate embed code"
return
}
let url = domain_url()+"/d/"+file.id
embed_html = `<iframe ` +
`src="${url}" ` +
2025-10-09 15:48:23 +02:00
`style="border: none; width: 100%; max-width 90vw; height: 800px; max-height: 75vh; border-radius: 6px;" ` +
`allowfullscreen` +
2024-02-16 21:07:01 +01:00
`></iframe>`
}
let example = false
const toggle_example = () => {
2025-10-09 15:48:23 +02:00
if (node_is_shared(file)) {
2024-02-16 21:07:01 +01:00
example = !example
if (example) {
preview_area.innerHTML = embed_html
} else {
preview_area.innerHTML = ""
}
}
}
2024-02-16 21:07:01 +01:00
</script>
2025-01-27 22:54:47 +01:00
<fieldset>
<legend>Public link</legend>
2024-05-17 16:32:53 +02:00
2025-01-27 22:54:47 +01:00
{#if file.abuse_type !== undefined}
<div class="highlight_red">
This file or directory has received an abuse report. It cannot be
shared.<br/>
Type of abuse: {file.abuse_type}<br/>
Report time: {formatDate(file.abuse_report_time, true, true, true)}
</div>
2024-02-16 21:07:01 +01:00
{/if}
<div class="link_grid">
2025-10-09 15:48:23 +02:00
<a href={share_link}>{share_link}</a>
2025-01-27 22:54:47 +01:00
<CopyButton text={share_link}>Copy</CopyButton>
</div>
</fieldset>
2025-10-09 15:48:23 +02:00
<AccessControl options={options}/>
2025-01-27 22:54:47 +01:00
<fieldset>
<legend>Embedding</legend>
<p>
If you have a website you can embed pixeldrain directories and files in your
own webpages with the code below. If you embed a directory then all
subdirectories and files will be accessible through the frame. Branding
options will also apply in the frame, but only when applied to this
directory. It will not inherit the style from parent directories.
</p>
<p>
Put this code in your website to embed the file or directory.
</p>
<div class="center">
<textarea bind:value={embed_html} style="width: 100%; height: 4em;"></textarea>
<br/>
<CopyButton text={embed_html}>Copy HTML</CopyButton>
2025-10-09 15:48:23 +02:00
<button on:click={toggle_example} class:button_highlight={example} disabled={!node_is_shared(file)}>
2025-01-27 22:54:47 +01:00
<i class="icon">visibility</i> Show example
</button>
</div>
<hr/>
2024-02-16 21:07:01 +01:00
2025-01-27 22:54:47 +01:00
<div bind:this={preview_area} style="text-align: center;"></div>
</fieldset>
2024-02-16 21:07:01 +01:00
<!-- <fieldset>
<legend>Custom domain</legend>
<p>
Experimental options
</p>
<div class="form_grid">
<label for="custom_domain_name">Domain name</label>
<input
id="custom_domain_name"
bind:value={options.custom_domain_name}
type="text"
disabled={!options.shared}
/>
<label for="custom_domain_cert">Certificate</label>
<textarea id="custom_domain_cert" bind:value={options.custom_domain_cert} style="height: 4em;"></textarea>
<label for="custom_domain_key">Key</label>
<textarea id="custom_domain_key" bind:value={options.custom_domain_key} style="height: 4em;"></textarea>
</div>
</fieldset> -->
2024-02-16 21:07:01 +01:00
<style>
.center {
text-align: center;
}
.link_grid {
2024-02-16 21:07:01 +01:00
display: grid;
grid-template-columns: 10fr auto;
align-items: center;
}
/* .form_grid {
display: grid;
grid-template-columns: 1fr;
align-items: center;
} */
2024-02-16 21:07:01 +01:00
</style>