Replace CSS classes with semantic HTML
This commit is contained in:
@@ -46,7 +46,10 @@ a > svg { vertical-align: middle; }
|
||||
*, *::before, *::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
html, body { overflow-x: hidden; }
|
||||
html, body {
|
||||
/* This makes sure that no scrollbar shows up when the menu is open on small screens*/
|
||||
overflow-x: hidden;
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: system-ui, sans-serif;
|
||||
@@ -56,20 +59,26 @@ body{
|
||||
background-color: var(--layer_1_color);
|
||||
padding: 0;
|
||||
}
|
||||
.checkers {
|
||||
header, footer, .checkers {
|
||||
background-image: url("{{bgPattern}}");
|
||||
background-color: #111111; /* Fallback */
|
||||
background-color: var(--layer_1_color);
|
||||
background-repeat: repeat;
|
||||
background-blend-mode: luminosity;
|
||||
}
|
||||
.inset {
|
||||
header, footer {
|
||||
padding-top: 70px;
|
||||
box-shadow: inset 1px 1px 10px 0 var(--shadow_color);
|
||||
border-radius: 12px;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
header > h1 {
|
||||
text-shadow: 1px 1px 10px var(--shadow_color);
|
||||
}
|
||||
footer {
|
||||
padding: 200px 8px 40px 8px;
|
||||
}
|
||||
|
||||
/* Page layout elements */
|
||||
|
||||
@@ -131,7 +140,7 @@ body{
|
||||
padding: 4px;
|
||||
}
|
||||
}
|
||||
.limit_width {
|
||||
section {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
max-width: 1000px;
|
||||
@@ -141,10 +150,6 @@ body{
|
||||
text-align: left;
|
||||
clear: both;
|
||||
}
|
||||
.page_body > h1 {
|
||||
text-shadow: 1px 1px 25px #000000;
|
||||
text-shadow: 1px 1px 25px var(--shadow_color);
|
||||
}
|
||||
|
||||
/* Page contents */
|
||||
|
||||
|
@@ -7,10 +7,10 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>This page does not exist!</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
If you came here by a link from this very same website you can
|
||||
tell me about it on
|
||||
@@ -23,7 +23,7 @@
|
||||
<p>
|
||||
Bye!
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -7,15 +7,15 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>451, Unavailable For Legal Reasons</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
Hello. This file has received an abuse report and has been taken
|
||||
down. It cannot be shared anymore.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -7,10 +7,10 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>You broke pixeldrain</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
Great job.
|
||||
</p>
|
||||
@@ -24,7 +24,7 @@
|
||||
try again in a few minutes (or hours), or go back to the <a
|
||||
href='/'>home page</a> and start over.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -7,10 +7,10 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>Change website appearance</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
You can change how pixeldrain looks! Your theme choice will
|
||||
be saved in a cookie.
|
||||
@@ -30,7 +30,7 @@
|
||||
(Inspired by <a href="https://www.gnome-look.org/p/1441725/" target="_blank">Skeuos GTK</a>)<br/>
|
||||
<!--<input type="radio" id="style_sunny" name="style"><label for="style_sunny">Sunny Style</label>-->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script>
|
||||
// Style selector
|
||||
|
@@ -14,10 +14,10 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>Apps</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<h2>ShareX</h2>
|
||||
<div class="specs">
|
||||
Platform: Windows 7, 8.1 and 10 |
|
||||
@@ -110,7 +110,7 @@
|
||||
please send them to
|
||||
<a href="mailto:support@pixeldrain.com">support@pixeldrain.com</a>.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -7,27 +7,38 @@
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
|
||||
<div class="limit_width">
|
||||
{{if eq .Other "success"}}
|
||||
<header>
|
||||
<h1>Success!</h1>
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
Your account's e-mail address has been updated.
|
||||
</p>
|
||||
</section>
|
||||
{{else if eq .Other "not_found"}}
|
||||
<header>
|
||||
<h1>E-mail change failed</h1>
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
This e-mail change request does not exist or has expired.
|
||||
Please try again if you still want to change your e-mail
|
||||
address.
|
||||
</p>
|
||||
</section>
|
||||
{{else}}
|
||||
<header>
|
||||
<h1>Error</h1>
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
Something went wrong while processing this request. Please
|
||||
try again later.
|
||||
</p>
|
||||
</section>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -7,10 +7,10 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>404, File Not Found!</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
This file does not exist, or it has been removed. Possible
|
||||
reasons for this are:
|
||||
@@ -34,7 +34,7 @@
|
||||
<p>
|
||||
I'm sorry for the inconvenience.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
@@ -49,10 +49,10 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>404, List Not Found!</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<p>
|
||||
This list does not exist, or it has been removed. Possible
|
||||
reasons for this are:
|
||||
@@ -70,7 +70,7 @@
|
||||
<p>
|
||||
I'm sorry for the inconvenience.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -25,10 +25,10 @@
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>{{.Title}}</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
{{if eq .Other.Type "file"}}
|
||||
Download <a href="{{.APIEndpoint}}/file/{{.Other.APIResponse.ID}}?download">{{.Other.APIResponse.Name}}</a> here.
|
||||
{{else}}
|
||||
@@ -66,7 +66,7 @@
|
||||
<li><a href="https://www.apple.com/safari/">Safari</a> (Mac OS)</li>
|
||||
<li><a href="https://www.microsoft.com/en-us/edge">Edge</a> (Windows)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -110,14 +110,14 @@
|
||||
<body>
|
||||
<div id='body' class="body">
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>{{.Form.Title}}</h1>
|
||||
</div>
|
||||
</header>
|
||||
<br/>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
{{template "form" .Form}}
|
||||
<br/>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
</div>
|
||||
|
||||
|
@@ -7,12 +7,12 @@
|
||||
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>{{.Title}}</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
{{.Other}}
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{{define "page_menu"}}
|
||||
<button id="button_toggle_navigation" class="button_toggle_navigation" onclick="toggleMenu();">☰</button>
|
||||
<div id="page_navigation" class="page_navigation">
|
||||
<nav id="page_navigation" class="page_navigation">
|
||||
<a href="/">Home</a>
|
||||
<hr />
|
||||
{{if .Authenticated}}<a href="/user">{{.User.Username}}</a>
|
||||
@@ -26,7 +26,7 @@
|
||||
{{if eq .User.Subscription.ID ""}}
|
||||
<a href="https://pixeldrain.com/vouchercodes">Shopping discounts</a>
|
||||
{{end}}
|
||||
</div>
|
||||
</nav>
|
||||
<script>
|
||||
function toggleMenu() {
|
||||
var nav = document.getElementById("page_navigation");
|
||||
@@ -54,7 +54,7 @@ function resetMenu() {
|
||||
{{end}}
|
||||
|
||||
{{define "page_bottom"}}
|
||||
<div class="inset checkers" style="padding-top: 150px">
|
||||
<footer>
|
||||
<div style="display: inline-block; margin: 0 8px 0 8px;">
|
||||
Pixeldrain is a product by <a href="//fornaxian.tech" target="_blank">Fornaxian Technologies</a>
|
||||
</div>
|
||||
@@ -71,8 +71,6 @@ function resetMenu() {
|
||||
<span class="small_footer_text" style="font-size: .75em; line-height: .75em;">
|
||||
page rendered by {{.Hostname}}
|
||||
</span>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</footer>
|
||||
</div><!-- end page_body -->
|
||||
{{end}}
|
||||
|
@@ -5,14 +5,13 @@
|
||||
{{template "user_style" .}}
|
||||
</head>
|
||||
<body>
|
||||
<div id='body' class="body">
|
||||
{{template "page_top" .}}
|
||||
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>Upload History</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<p>
|
||||
Here are all files you have previously uploaded to pixeldrain using this computer.
|
||||
This data is saved locally in your web browser and gets updated every time you upload a file through your current browser.
|
||||
@@ -20,9 +19,9 @@
|
||||
<br/>
|
||||
|
||||
<div id="uploaded_files" class="highlight_dark"></div>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let apiEndpoint = '{{.APIEndpoint}}';
|
||||
{{template `util.js`}}
|
||||
|
@@ -93,21 +93,21 @@
|
||||
</head>
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset" style="padding-bottom: 60px;">
|
||||
<header style="padding-bottom: 60px;">
|
||||
<picture>
|
||||
<source media="(max-width: 800px)" srcset="/res/img/header_orbitron.png">
|
||||
<img class="header_image" src="/res/img/header_orbitron_wide.png" alt="Header image">
|
||||
</picture>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Svelte element -->
|
||||
<div id="uploader" class="page_content"></div>
|
||||
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>What is pixeldrain?</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<p>
|
||||
Pixeldrain is a file sharing website built for speed and ease of
|
||||
use. You can upload files you want to share online to our
|
||||
@@ -475,7 +475,7 @@
|
||||
logging in head to the <a href="/user/transactions">transactions
|
||||
page</a> to deposit your coins.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<template id="tpl_file_expiry">
|
||||
<p>
|
||||
|
@@ -10,9 +10,9 @@
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>My Buckets</h1>
|
||||
</div>
|
||||
</header>
|
||||
<div id="page_content" class="page_content"></div>
|
||||
|
||||
{{template "page_bottom" .}}
|
||||
|
@@ -6,15 +6,14 @@
|
||||
</head>
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>Please confirm that you want to log out of your pixeldrain account</h1>
|
||||
<br/>
|
||||
</div>
|
||||
</header>
|
||||
<br/>
|
||||
<form method="POST" action="/logout">
|
||||
<input type="submit" value="I want to log out of pixeldrain on this computer" class="button_highlight"/>
|
||||
</form>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<br/>
|
||||
<h2>Why do I need to confirm my logout?</h2>
|
||||
<p>
|
||||
@@ -31,7 +30,7 @@
|
||||
page visit we can confirm that you really want to log out.
|
||||
</p>
|
||||
<br/>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
{{template "analytics"}}
|
||||
</body>
|
||||
|
@@ -8,10 +8,10 @@
|
||||
<body>
|
||||
{{template "page_top" .}}
|
||||
|
||||
<div class="checkers inset">
|
||||
<header">
|
||||
<h1>Widget showcase</h1>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
</header>
|
||||
<section>
|
||||
<h2>Size 2 header</h2>
|
||||
<h3>Size 3 header</h3>
|
||||
<h4>Size 4 header</h4>
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
<br/><br/>
|
||||
<iframe src="https://pixeldrain.com/u/Nygt1on4?embed" style="border: none; width: 800px; max-width: 100%; height: 600px; max-height: 100%; border-radius: 16px;"></iframe>
|
||||
</div>
|
||||
</section>
|
||||
{{template "page_bottom" .}}
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -82,14 +82,13 @@ const delete_reporter = async (email) => {
|
||||
onMount(get_reporters);
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<div class="toolbar" style="text-align: left;">
|
||||
<div class="toolbar_spacer"></div>
|
||||
<button class:button_highlight={creating} on:click={() => {creating = !creating}}>
|
||||
@@ -129,7 +128,7 @@ onMount(get_reporters);
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<br/>
|
||||
|
||||
@@ -161,7 +160,6 @@ onMount(get_reporters);
|
||||
{/each}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -91,14 +91,13 @@ onMount(() => {
|
||||
});
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<div class="toolbar" style="text-align: left;">
|
||||
<div class="toolbar_spacer"></div>
|
||||
<div>Start:</div>
|
||||
@@ -121,8 +120,7 @@ onMount(() => {
|
||||
<AbuseReport report={report} on:refresh={get_reports}/>
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -65,8 +65,7 @@ onMount(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<h2>File removal</h2>
|
||||
<p>
|
||||
Paste any pixeldrain file links in here to remove them
|
||||
@@ -74,8 +73,4 @@ onMount(() => {
|
||||
<div class="highlight_dark">
|
||||
<Form config={block_form}></Form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
</section>
|
||||
|
@@ -159,10 +159,9 @@ onDestroy(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<h3>Bandwidth usage and file views</h3>
|
||||
</div>
|
||||
</section>
|
||||
<div class="highlight_dark" style="margin-bottom: 6px;">
|
||||
<button on:click={() => { loadGraph(1440, 1, true) }}>Day</button>
|
||||
<button on:click={() => { loadGraph(10080, 10, false) }}>Week</button>
|
||||
@@ -189,7 +188,7 @@ onDestroy(() => {
|
||||
<a class="button" href="/api/admin/cpu_profile">CPU profile (wait 1 min)</a>
|
||||
<br/>
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<table>
|
||||
<tr>
|
||||
<td>DB Time</td>
|
||||
@@ -217,7 +216,7 @@ onDestroy(() => {
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each status.peers as peer}
|
||||
<tr class="peer_row"
|
||||
<tr style="text-align: left"
|
||||
class:highlight_red={peer.free_space < peer.min_free_space / 2 || !peer.reachable}
|
||||
class:highlight_yellow={peer.free_space < peer.min_free_space}
|
||||
class:highlight_green={peer.reachable}
|
||||
@@ -316,11 +315,4 @@ onDestroy(() => {
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.peer_row {
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
</section>
|
||||
|
@@ -80,14 +80,13 @@ const delete_ban = async (addr) => {
|
||||
onMount(get_bans);
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<div class="toolbar" style="text-align: left;">
|
||||
<div class="toolbar_spacer"></div>
|
||||
<button class:button_highlight={creating} on:click={() => {creating = !creating}}>
|
||||
@@ -135,7 +134,7 @@ onMount(get_bans);
|
||||
</form>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<br/>
|
||||
|
||||
@@ -165,7 +164,6 @@ onMount(get_bans);
|
||||
{/each}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -26,7 +26,7 @@ onMount(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>Admin Panel</h1>
|
||||
|
||||
<div class="tab_bar">
|
||||
@@ -77,7 +77,7 @@ onMount(() => {
|
||||
Update global settings
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{#if page === "status"}
|
||||
<Home></Home>
|
||||
|
@@ -173,7 +173,7 @@ onMount(get_coupons)
|
||||
|
||||
</script>
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
@@ -221,7 +221,7 @@ onMount(get_coupons)
|
||||
{/each}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -386,18 +386,18 @@ const keydown = (e) => {
|
||||
<div>
|
||||
<!-- If the user is logged in and has used more than 50% of their storage space we will show a progress bar -->
|
||||
{#if window.user.username !== "" && window.user.storage_space_used/window.user.subscription.storage_space > 0.5}
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<StorageProgressBar used={window.user.storage_space_used} total={window.user.subscription.storage_space}></StorageProgressBar>
|
||||
</div>
|
||||
</section>
|
||||
{/if}
|
||||
|
||||
<div class="instruction limit_width" style="margin-top: 0; border-top: none;">
|
||||
<section class="instruction" style="margin-top: 0; border-top: none;">
|
||||
<span class="big_number">1</span>
|
||||
<span class="instruction_text">Select files to upload</span>
|
||||
<br/>
|
||||
You can also drop files on this page from your file manager or
|
||||
paste an image from your clipboard
|
||||
</div>
|
||||
</section>
|
||||
<br/>
|
||||
|
||||
<input bind:this={file_input_field} on:change={file_input_change} type="file" name="file" multiple="multiple"/>
|
||||
@@ -416,7 +416,7 @@ const keydown = (e) => {
|
||||
<a href="/about#content-policy">content policy</a>.
|
||||
<p>
|
||||
|
||||
<div class="instruction limit_width" style="margin-bottom: 0;">
|
||||
<section class="instruction" style="margin-bottom: 0;">
|
||||
<span class="big_number">2</span>
|
||||
<span class="instruction_text">Wait for the files to finish uploading</span>
|
||||
<br/>
|
||||
@@ -426,7 +426,7 @@ const keydown = (e) => {
|
||||
<div>ETA {formatDuration(remaining_time, 0)}</div>
|
||||
<div>Rate {formatDataVolume(total_rate, 3)}/s</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="progress_bar_outer" style="margin-bottom: 1.5em;">
|
||||
<div bind:this={progress_bar_inner} class="progress_bar_inner"></div>
|
||||
</div>
|
||||
@@ -441,10 +441,10 @@ const keydown = (e) => {
|
||||
<UploadProgressBar bind:this={file.component} job={file}></UploadProgressBar>
|
||||
{/each}
|
||||
|
||||
<div class="instruction limit_width">
|
||||
<section class="instruction">
|
||||
<span class="big_number">3</span>
|
||||
<span class="instruction_text">Share the files</span>
|
||||
</div>
|
||||
</section>
|
||||
<br/>
|
||||
|
||||
{#if upload_queue.length > 1}
|
||||
@@ -518,11 +518,11 @@ const keydown = (e) => {
|
||||
<br/>
|
||||
|
||||
{#if window.user.subscription.name === ""}
|
||||
<div class="instruction limit_width">
|
||||
<section>
|
||||
<div class="instruction">
|
||||
<span class="big_number">4</span>
|
||||
<span class="instruction_text">Support me on Patreon!</span>
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
<p>
|
||||
Pixeldrain is struggling to get by financially. Because anyone
|
||||
can upload anything it's hard to find reputable advertisers who
|
||||
@@ -537,13 +537,15 @@ const keydown = (e) => {
|
||||
help with making pixeldrain the easiest and fastest way to share
|
||||
files online!
|
||||
</p>
|
||||
</div>
|
||||
<br/>
|
||||
<div style="text-align: center;">
|
||||
<a href="#pro" class="button big_button" style="min-width: 350px;">
|
||||
<i class="icon">arrow_downward</i>
|
||||
Check out Pro
|
||||
<i class="icon">arrow_downward</i>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
@@ -1,13 +1,10 @@
|
||||
<script>
|
||||
import { fs_delete_bucket } from "../filesystem/FilesystemAPI.svelte";
|
||||
import { createEventDispatcher } from "svelte";
|
||||
import Expandable from "../util/Expandable.svelte";
|
||||
let dispatch = createEventDispatcher()
|
||||
|
||||
export let bucket
|
||||
let details_hidden = true
|
||||
const expand_bucket = () => {
|
||||
details_hidden = !details_hidden
|
||||
}
|
||||
|
||||
const save_bucket = () => {
|
||||
alert("save")
|
||||
@@ -32,21 +29,14 @@ const delete_bucket = async () => {
|
||||
|
||||
</script>
|
||||
|
||||
<div class="bucket">
|
||||
<div class="bucket_header">
|
||||
<Expandable>
|
||||
<div slot="header">
|
||||
<a href={'/d/' + bucket.id} class="bucket_title">
|
||||
<img class="bucket_icon" src="/res/img/mime/folder-remote.png" alt="Bucket icon"/>
|
||||
{bucket.name}
|
||||
</a>
|
||||
<button class="bucket_expand" on:click={expand_bucket}>
|
||||
{#if details_hidden}
|
||||
<i class="icon">expand_more</i>
|
||||
{:else}
|
||||
<i class="icon">expand_less</i>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
<div class="bucket_details" class:hidden={details_hidden}>
|
||||
<div>
|
||||
<form on:submit|preventDefault={save_bucket}>
|
||||
<table class="form">
|
||||
<tr class="form">
|
||||
@@ -66,26 +56,9 @@ const delete_bucket = async () => {
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</Expandable>
|
||||
|
||||
<style>
|
||||
.bucket {
|
||||
text-decoration: none;
|
||||
background-color: var(--layer_3_color);
|
||||
transition: box-shadow 0.5s;
|
||||
box-shadow: 1px 1px 5px 0 var(--shadow_color);
|
||||
margin: 1em 0;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.bucket_header {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
color: var(--text_color);
|
||||
}
|
||||
.bucket_header:hover {
|
||||
background-color: var(--input_color_dark)
|
||||
}
|
||||
.bucket_title {
|
||||
flex: 1 1 auto;
|
||||
align-self: center;
|
||||
@@ -98,18 +71,4 @@ const delete_bucket = async () => {
|
||||
margin: 4px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.bucket_expand {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
.bucket_details {
|
||||
display: flex;
|
||||
padding: 0.4em;
|
||||
flex-direction: column;
|
||||
text-decoration: none;
|
||||
border-top: 1px solid var(--layer_3_color_border);
|
||||
color: var(--text_color);
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
@@ -41,14 +41,13 @@ const create_bucket = async () => {
|
||||
onMount(get_buckets);
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<div class="toolbar" style="text-align: right;">
|
||||
<button
|
||||
class:button_highlight={creating_bucket}
|
||||
@@ -81,11 +80,10 @@ onMount(get_buckets);
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#each buckets as bucket}
|
||||
{#each buckets as bucket (bucket.id)}
|
||||
<UserBucket bucket={bucket} on:refresh={get_buckets}></UserBucket>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -82,14 +82,13 @@ const logout = async (key) => {
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
{#if !loaded}
|
||||
<div class="highlight_yellow">
|
||||
<h2>Warning</h2>
|
||||
@@ -118,7 +117,7 @@ const logout = async (key) => {
|
||||
without your authorization it's probably a good idea to delete all
|
||||
your keys.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<div class="table_scroll">
|
||||
<table style="text-align: left;">
|
||||
<tr>
|
||||
@@ -163,7 +162,6 @@ const logout = async (key) => {
|
||||
{/each}
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -137,8 +137,7 @@ let delete_account = {
|
||||
}
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<h2>Change password</h2>
|
||||
<div class="highlight_dark">
|
||||
<Form config={password_change}></Form>
|
||||
@@ -158,8 +157,4 @@ let delete_account = {
|
||||
<div class="highlight_dark">
|
||||
<Form config={delete_account}></Form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
</style>
|
||||
</section>
|
||||
|
@@ -56,13 +56,13 @@ onMount(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
<div class="limit_width">
|
||||
|
||||
<section>
|
||||
{#if app_name === "jdownloader"}
|
||||
<h2>
|
||||
Connect
|
||||
@@ -162,8 +162,7 @@ onMount(() => {
|
||||
</li>
|
||||
</ul>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -174,8 +174,7 @@ onDestroy(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<h2>Account information</h2>
|
||||
<ul>
|
||||
<li>Username: {window.user.username}</li>
|
||||
@@ -240,7 +239,8 @@ onDestroy(() => {
|
||||
the statistics will be updated periodically. No need to
|
||||
refresh the page.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="highlight_light">
|
||||
<button
|
||||
on:click={() => { update_graphs(1440, 1, true) }}
|
||||
@@ -284,7 +284,7 @@ onDestroy(() => {
|
||||
{formatDataVolume(total_bandwidth, 3)} bandwidth and
|
||||
{formatDataVolume(total_transfer_paid, 3)} paid transfers
|
||||
</div>
|
||||
<div class="limit_width">
|
||||
<section>
|
||||
<h3>Premium transfers and total bandwidth usage</h3>
|
||||
<p>
|
||||
A premium transfer is when a file is downloaded using the data cap
|
||||
@@ -297,9 +297,10 @@ onDestroy(() => {
|
||||
Total bandwidth usage is the combined bandwidth usage of all the
|
||||
files on your account. This includes paid transfers.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<Chart bind:this={graph_bandwidth} data_type="bytes"/>
|
||||
<div class="limit_width">
|
||||
|
||||
<section>
|
||||
<h3>Views and downloads</h3>
|
||||
<p>
|
||||
A view is counted when someone visits the download page of one of
|
||||
@@ -310,6 +311,5 @@ onDestroy(() => {
|
||||
of your files. It does not matter whether the download is completed
|
||||
or not, only the start of the download is counted.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<Chart bind:this={graph_views_downloads} data_type="number"/>
|
||||
</div>
|
||||
|
@@ -8,7 +8,6 @@ export let used = 0
|
||||
$: frac = used / total
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<ProgressBar total={total} used={used}></ProgressBar>
|
||||
|
||||
{#if frac > 0.99}
|
||||
@@ -33,4 +32,3 @@ $: frac = used / total
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
@@ -33,7 +33,7 @@ onMount(() => {
|
||||
|
||||
<svelte:window on:popstate={get_page} />
|
||||
|
||||
<div class="checkers inset">
|
||||
<header>
|
||||
<h1>Welcome home, {window.user.username}!</h1>
|
||||
|
||||
<div class="tab_bar">
|
||||
@@ -75,7 +75,7 @@ onMount(() => {
|
||||
</a>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<br/>
|
||||
|
||||
{#if page === "home"}
|
||||
|
@@ -7,7 +7,6 @@ export let used = 0
|
||||
$: frac = used / total
|
||||
</script>
|
||||
|
||||
<div>
|
||||
Storage:
|
||||
{formatDataVolume(used, 3)}
|
||||
out of
|
||||
@@ -56,7 +55,6 @@ $: frac = used / total
|
||||
</p>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.warn_text {
|
||||
|
@@ -74,13 +74,13 @@ onMount(load_tranfer_used)
|
||||
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
<div class="limit_width">
|
||||
|
||||
<section>
|
||||
<h2>Manage subscription</h2>
|
||||
{#if window.user.subscription.type !== "patreon"}
|
||||
<p>
|
||||
@@ -236,8 +236,7 @@ onMount(load_tranfer_used)
|
||||
mostly useful for prepaid plans, but it works for patreon plans too.
|
||||
Set to 0 to disable the limit.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -120,13 +120,13 @@ onMount(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<div>
|
||||
{#if loading}
|
||||
<div class="spinner_container">
|
||||
<Spinner />
|
||||
</div>
|
||||
{/if}
|
||||
<div class="limit_width">
|
||||
|
||||
<section>
|
||||
<h2>Deposit credits</h2>
|
||||
<p>
|
||||
You can deposit credit on your pixeldrain account with Bitcoin,
|
||||
@@ -269,8 +269,7 @@ onMount(() => {
|
||||
</table>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.spinner_container {
|
||||
|
@@ -28,10 +28,8 @@ export const toggle = () => {
|
||||
.expandable {
|
||||
text-decoration: none;
|
||||
background-color: var(--layer_3_color);
|
||||
transition: box-shadow 0.5s;
|
||||
box-shadow: 1px 1px 6px -2px var(--shadow_color);
|
||||
margin: 1em 0;
|
||||
border-radius: 8px;
|
||||
margin: 0.8em 0;
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.header {
|
||||
|
Reference in New Issue
Block a user