Redesign tab bar and tune shadows

This commit is contained in:
2021-09-23 20:38:17 +02:00
parent fb26f17fb8
commit cbdbac49d7
19 changed files with 184 additions and 203 deletions

View File

@@ -95,6 +95,27 @@ function Viewer(type, viewToken, data) {
// Show introduction popup
new IntroPopup()
// Delete all the garbage that advertisers leave behind in my cookies and
// localstorage
// window.addEventListener("beforeunload", () => {
// document.cookie.split("; ").forEach(cookie => {
// let name = cookie.split("=")[0]
// if (name !== "pd_auth_key" && name !== "style") {
// document.cookie = name + "=; Max-Age=0; expires=Thu, 01 Jan 1970 00:00:00 UTC; SameSite=Lax; path=/;"
// }
// })
// let keys = []
// for (let i = 0; i < localStorage.length; i++) {
// keys.push(localStorage.key(i))
// }
// keys.forEach(key => {
// if (key !== "viewer_intro_popup_dismissed" && key !== "uploaded_files") {
// localStorage.removeItem(key)
// }
// })
// })
this.initialized = true
}

View File

@@ -89,7 +89,6 @@ body, .checkers {
background: var(--input_color);
border-radius: 0;
border-bottom-right-radius: 90%;
box-shadow: 2px 2px 8px -3px #000000;
box-shadow: 2px 2px 8px -3px var(--shadow_color);
}
.button_toggle_navigation:active {
@@ -111,8 +110,7 @@ body, .checkers {
overflow-y: auto;
overflow-x: hidden;
text-align: left;
box-shadow: inset -10px 0px 10px -10px #000000;
box-shadow: inset -10px 0px 10px -10px var(--shadow_color);
box-shadow: inset -8px 0px 8px -8px var(--shadow_color);
transition: left 0.5s;
}
.page_body {
@@ -148,8 +146,7 @@ body, .checkers {
padding: 0 0 20px 0;
background-color: #212121;
background-color: var(--layer_2_color);
box-shadow: 1px 1px 20px 0 #000000;
box-shadow: 1px 1px 20px 0 var(--shadow_color);
box-shadow: 1px 1px 12px 0 var(--shadow_color);
box-sizing: border-box;
clear: both;
}
@@ -207,6 +204,7 @@ body, .checkers {
.highlight_lighter,
.highlight_green,
.highlight_blue,
.highlight_yellow,
.highlight_red,
.highlight_1,
.highlight_2,
@@ -222,27 +220,31 @@ body, .checkers {
}
.highlight_dark, .highlight_1 {
background-color: var(--layer_1_color);
box-shadow: 1px 1px var(--layer_1_shadow) 0 var(--shadow_color);
box-shadow: 1px 1px 6px -2px var(--shadow_color);
}
.highlight_middle, .highlight_2 {
background-color: var(--layer_2_color);
box-shadow: 1px 1px var(--layer_2_shadow) 0 var(--shadow_color);
box-shadow: 1px 1px 6px -2px var(--shadow_color);
}
.highlight_light, .highlight_3 {
background-color: var(--layer_3_color);
box-shadow: 1px 1px var(--layer_3_shadow) 0 var(--shadow_color);
box-shadow: 1px 1px 6px -2px var(--shadow_color);
}
.highlight_lighter, .highlight_4 {
background-color: var(--layer_4_color);
box-shadow: 1px 1px var(--layer_4_shadow) 0 var(--shadow_color);
box-shadow: 1px 1px 6px -2px var(--shadow_color);
}
.highlight_green {
background-color: rgba(0, 255, 0, 0.05);
border-color: #00d000;
border-color: #00D000;
}
.highlight_blue {
background-color: rgba(32, 32, 255, 0.2);
border-color: rgb(54, 54, 255);
border-color: #3636FF;
}
.highlight_yellow {
background-color: rgba(255, 255, 0, 0.05);
border-color: #A0A000;
}
.highlight_red {
background-color: rgba(255, 0, 0, 0.1);
@@ -251,6 +253,7 @@ body, .checkers {
.highlight_green,
.highlight_blue,
.highlight_yellow,
.highlight_red {
border-top-width: 1px;
border-top-style: solid;
@@ -262,8 +265,7 @@ body, .checkers {
h1, h2, h3, h4, h5, h6 {
line-height: 1em;
margin-left: 10px;
margin-right: 10px;
margin: 0.5em 10px;
font-weight: normal;
}
@@ -508,22 +510,26 @@ select:disabled , select.disabled {
.round {
border-radius: 32px;
}
.tab {
margin: 0 0 10px 8px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.tab:last-child {
margin-right: 8px;
}
.tab_bar {
display: block;
width: 100%;
margin: 0 0 16px 0;
overflow-x: auto;
overflow-y: hidden;
white-space: nowrap;
box-sizing: border-box;
text-align: center;
background-color: var(--layer_1_color);
box-shadow: inset 0 -10px 8px -12px var(--shadow_color);
}
.tab_bar > button,
.tab_bar > .button {
margin: 10px 0 0 10px;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.tab_bar > *:last-child {
margin-right: 10px;
}
/* Dropdown list of the select tag */

View File

@@ -161,7 +161,7 @@
overflow-y: scroll;
overflow-x: hidden;
float: left;
box-shadow: inset 1px 1px var(--layer_1_shadow) var(--shadow_color);
box-shadow: inset 1px 1px 5px var(--shadow_color);
background-color: var(--layer_1_color);
border-radius: 16px;
text-align: center;
@@ -211,7 +211,7 @@
}
.pannable { cursor: move; }
.drop_shadow { box-shadow: 1px 1px var(--layer_3_shadow) var(--shadow_color); }
.drop_shadow { box-shadow: 1px 1px 5px var(--shadow_color); }
/* ========================
|| TOOLBAR COMPONENTS ||
@@ -317,7 +317,7 @@ table {width: auto !important;}
max-width: 80%;
height: auto;
background-color: var(--layer_4_color);
box-shadow: 1px 1px var(--layer_4_shadow) var(--shadow_color);
box-shadow: 1px 1px 10px var(--shadow_color);
border-radius: 20px;
z-index: 50;
transition: opacity .4s, left .5s, top .5s;

View File

@@ -1,4 +1,4 @@
import App from './admin_panel/AdminPanel.svelte';
import App from './admin_panel/Router.svelte';
const app = new App({
target: document.getElementById("page_content"),

View File

@@ -153,7 +153,7 @@ onMount(get_reporters);
<td>{formatDate(reporter.last_used, true, true, false)}</td>
<td>{formatDate(reporter.created, false, false, false)}</td>
<td>
<button on:click|preventDefault={() => {delete_reporter(reporter.email)}} class="button button_red">
<button on:click|preventDefault={() => {delete_reporter(reporter.email)}} class="button button_red round">
<i class="icon">delete</i>
</button>
</td>

View File

@@ -155,6 +155,7 @@ onDestroy(() => {
</tr>
</table>
<h3>Pixelstore peers</h3>
<div class="table_scroll">
<table>
<thead>
<tr>
@@ -174,7 +175,7 @@ onDestroy(() => {
{#each status.peers as peer}
<tr class="peer_row"
class:highlight_red={peer.free_space < peer.min_free_space / 2 || !peer.reachable}
class:highlight_blue={peer.free_space < peer.min_free_space}
class:highlight_yellow={peer.free_space < peer.min_free_space}
class:highlight_green={peer.reachable}
>
<td>{peer.address}</td>
@@ -191,6 +192,7 @@ onDestroy(() => {
{/each}
</tbody>
</table>
</div>
<h3>Pixelstore stats</h3>
<table>
<thead>
@@ -236,13 +238,14 @@ onDestroy(() => {
</tbody>
</table>
<h3>Query statistics</h3>
<div class="table_scroll" style="text-align: left;">
<table>
<thead>
<tr>
<td style="cursor: pointer;" on:click={() => { getStats('query_name') }}>Query</td>
<td style="cursor: pointer;" on:click={() => { getStats('calls') }}>Calls</td>
<td style="cursor: pointer;" on:click={() => { getStats('average_duration') }}>Average Duration</td>
<td style="cursor: pointer;" on:click={() => { getStats('total_duration') }}>Total Duration</td>
<td style="cursor: pointer;" on:click={() => { getStats('average_duration') }}>Avg dur</td>
<td style="cursor: pointer;" on:click={() => { getStats('total_duration') }}>Total dur</td>
<td>Callers</td>
</tr>
</thead>
@@ -251,7 +254,7 @@ onDestroy(() => {
<tr>
<td>{q.query_name}</td>
<td>{q.calls}</td>
<td>{formatDuration(q.average_duration, 3)}</td>
<td>{q.average_duration}ms</td>
<td>{formatDuration(q.total_duration, 0)}</td>
<td>
{#each q.callers as caller}
@@ -263,6 +266,7 @@ onDestroy(() => {
</tbody>
</table>
</div>
</div>
</div>
<style>

View File

@@ -26,44 +26,43 @@ onMount(() => {
<div>
<div class="tab_bar">
<a class="button tab"
<a class="button"
href="/admin"
class:button_highlight={page === "status"}
on:click|preventDefault={() => {navigate("status", "Status")}}>
<i class="icon">home</i>
Status
</a>
<a class="button tab" href="/admin/abuse">
<a class="button" href="/admin/abuse">
<i class="icon">block</i>
Block files
</a>
<a class="button tab"
<a class="button"
href="/admin/abuse_reports"
class:button_highlight={page === "abuse_reports"}
on:click|preventDefault={() => {navigate("abuse_reports", "Abuse reports")}}>
<i class="icon">flag</i>
User abuse reports
</a>
<a class="button tab"
<a class="button"
href="/admin/abuse_reporters"
class:button_highlight={page === "abuse_reporters"}
on:click|preventDefault={() => {navigate("abuse_reporters", "Abuse reporters")}}>
<i class="icon">report</i>
E-mail abuse reporters
</a>
<a class="button tab"
<a class="button"
href="/admin/ip_bans"
class:button_highlight={page === "ip_bans"}
on:click|preventDefault={() => {navigate("ip_bans", "IP bans")}}>
<i class="icon">remove_circle</i>
IP bans
</a>
<a class="button tab" href="/admin/globals">
<a class="button" href="/admin/globals">
<i class="icon">edit</i>
Update global settings
</a>
</div>
<hr/>
{#if page === "status"}
<Home></Home>

View File

@@ -73,7 +73,7 @@ const share_tumblr = () => {
overflow-x: hidden;
float: left;
background-color: var(--layer_1_color);
box-shadow: inset 1px 1px var(--layer_1_shadow) var(--shadow_color);
box-shadow: inset 1px 1px 5px var(--shadow_color);
text-align: center;
z-index: 48;
overflow: hidden;

View File

@@ -236,7 +236,7 @@ const toggle_select = () => {
margin: 16px 0 16px 0;
text-align: left;
background-color: var(--layer_2_color);
box-shadow: 1px 1px var(--layer_2_shadow) var(--shadow_color);
box-shadow: 1px 1px 5px var(--shadow_color);
box-sizing: border-box;
border-collapse: collapse;
}

View File

@@ -197,7 +197,7 @@ const paste = (e) => {
margin: 6px 0 0 0;
padding: 0;
background-color: var(--layer_2_color);
box-shadow: 1px 1px var(--layer_2_shadow) var(--shadow_color);
box-shadow: 1px 1px 5px var(--shadow_color);
}
.upload_progress_bar {

View File

@@ -76,7 +76,7 @@ const mouseup = (e) => {
top: 50%;
cursor: pointer;
transform: translateY(-50%);
box-shadow: 1px 1px var(--layer_3_shadow) var(--shadow_color);
box-shadow: 1px 1px 5px var(--shadow_color);
}
.image.zoom {
max-width: none;

View File

@@ -63,6 +63,6 @@ onMount(() => {
max-height: 100%;
top: 50%;
transform: translateY(-50%);
box-shadow: 1px 1px var(--layer_3_shadow) var(--shadow_color);
box-shadow: 1px 1px 5px var(--shadow_color);
}
</style>

View File

@@ -73,7 +73,7 @@ const delete_bucket = async () => {
text-decoration: none;
background-color: var(--layer_3_color);
transition: box-shadow 0.5s;
box-shadow: 1px 1px var(--layer_3_shadow) 0 var(--shadow_color);
box-shadow: 1px 1px 5px 0 var(--shadow_color);
margin: 1em 0;
border-radius: 8px;
overflow: hidden;

View File

@@ -84,7 +84,7 @@ const logout = async (key) => {
{/if}
<div class="limit_width">
{#if !loaded}
<div class="highlight_blue">
<div class="highlight_yellow">
<h2>Warning</h2>
<p>
API keys are sensitive information. They can be used to gain

View File

@@ -183,7 +183,7 @@ onDestroy(() => {
refresh the page.
</p>
</div>
<div class="highlight_dark">
<div class="highlight_light">
<button
on:click={() => { update_graphs(1440, 1, true) }}
class:button_highlight={graph_timespan == 1440}>

View File

@@ -25,21 +25,21 @@ onMount(() => {
<div>
<div class="tab_bar">
<a class="button tab"
<a class="button"
href="/user"
class:button_highlight={page === ""}
on:click|preventDefault={() => {navigate("", "My home")}}>
<i class="icon">home</i>
My home
</a>
<a class="button tab"
<a class="button"
href="/user/settings"
class:button_highlight={page === "settings"}
on:click|preventDefault={() => {navigate("settings", "Account settings")}}>
<i class="icon">settings</i>
Account settings
</a>
<a class="button tab"
<a class="button"
href="/user/api_keys"
class:button_highlight={page === "api_keys"}
on:click|preventDefault={() => {navigate("api_keys", "API keys")}}>
@@ -47,7 +47,6 @@ onMount(() => {
API keys
</a>
</div>
<hr/>
{#if page === ""}
<Home></Home>

View File

@@ -29,7 +29,7 @@ export const toggle = () => {
text-decoration: none;
background-color: var(--layer_3_color);
transition: box-shadow 0.5s;
box-shadow: 1px 1px var(--layer_3_shadow) 0 var(--shadow_color);
box-shadow: 1px 1px 6px -2px var(--shadow_color);
margin: 1em 0;
border-radius: 8px;
overflow: hidden;

View File

@@ -88,12 +88,12 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) {
if nudity {
// Brave and a-ads don't care about nudity. I'm not sure about ads.plus
switch i := rand.Intn(5); i {
case 0:
switch i := rand.Intn(10); i {
case 0, 1, 2, 3:
vd.AdBannerType = brave
case 1:
case 4, 5, 6, 7:
vd.AdBannerType = adsPlus
case 2, 3, 4:
case 8, 9:
vd.AdBannerType = aAds
default:
panic(fmt.Errorf("random number generator returned unrecognised number: %d", i))
@@ -102,13 +102,11 @@ func (vd *viewerData) adType(files []pixelapi.ListFile) {
// PixFuture does not allow nudity, so that's what we'll show on all
// files which are safe
switch i := rand.Intn(10); i {
case 0:
case 0, 1:
vd.AdBannerType = brave
case 1:
vd.AdBannerType = aAds
case 2, 3, 4, 5:
case 2, 3, 4:
vd.AdBannerType = adsPlus
case 6, 7, 8, 9:
case 5, 6, 7, 8, 9:
vd.AdBannerType = pixFuture
default:
panic(fmt.Errorf("random number generator returned unrecognised number: %d", i))

View File

@@ -50,13 +50,9 @@ type pixeldrainStyleSheet struct {
ScrollbarBackgroundColor hsl
Layer1Color hsl // Deepest and darkest layer
Layer1Shadow int // Deep layers have little shadow
Layer2Color hsl
Layer2Shadow int
Layer3Color hsl
Layer3Shadow int
Layer4Color hsl // Highest and brightest layer
Layer4Shadow int // High layers have lots of shadow
ShadowColor hsl
}
@@ -79,16 +75,12 @@ func (s pixeldrainStyleSheet) String() string {
--layer_1_color: #%s;
--layer_1_color_border: #%s;
--layer_1_shadow: %s;
--layer_2_color: #%s;
--layer_2_color_border: #%s;
--layer_2_shadow: %s;
--layer_3_color: #%s;
--layer_3_color_border: #%s;
--layer_3_shadow: %s;
--layer_4_color: #%s;
--layer_4_color_border: #%s;
--layer_4_shadow: %s;
--shadow_color: #%s;
}`,
@@ -106,16 +98,12 @@ func (s pixeldrainStyleSheet) String() string {
s.ScrollbarBackgroundColor.RGB(),
s.Layer1Color.RGB(),
s.Layer1Color.add(0, 0, .05).RGB(),
fmt.Sprintf("%dpx", s.Layer1Shadow),
s.Layer2Color.RGB(),
s.Layer2Color.add(0, 0, .05).RGB(),
fmt.Sprintf("%dpx", s.Layer2Shadow),
s.Layer3Color.RGB(),
s.Layer3Color.add(0, 0, .05).RGB(),
fmt.Sprintf("%dpx", s.Layer3Shadow),
s.Layer4Color.RGB(),
s.Layer4Color.add(0, 0, .05).RGB(),
fmt.Sprintf("%dpx", s.Layer4Shadow),
s.ShadowColor.RGB(),
)
}
@@ -217,21 +205,17 @@ var defaultPixeldrainStyle = pixeldrainStyleSheet{
ScrollbarHoverColor: hsl{266, .85, .50},
ScrollbarBackgroundColor: hsl{275, .75, .06},
Layer1Color: hsl{275, .8, .06},
Layer1Shadow: 3,
Layer2Color: hsl{275, .75, .11},
Layer2Shadow: 5,
Layer1Color: hsl{275, .8, .07},
Layer2Color: hsl{275, .75, .12},
Layer3Color: hsl{275, .7, .18},
Layer3Shadow: 7,
Layer4Color: hsl{275, .65, .24},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}
var pixeldrainClassicStyle = pixeldrainStyleSheet{
TextColor: hsl{0, 0, .8},
InputColor: hsl{0, 0, .2},
InputColor: hsl{0, 0, .25},
InputTextColor: hsl{0, 0, 1},
HighlightColor: hsl{89, .60, .45},
HighlightTextColor: hsl{0, 0, 0},
@@ -241,13 +225,9 @@ var pixeldrainClassicStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{0, 0, 0},
Layer1Color: hsl{0, 0, .08},
Layer1Shadow: 3,
Layer2Color: hsl{0, 0, .11},
Layer2Shadow: 5,
Layer3Color: hsl{0, 0, .15},
Layer3Shadow: 7,
Layer4Color: hsl{0, 0, .18},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}
@@ -264,13 +244,11 @@ var sunnyPixeldrainStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{0, 0, 0},
Layer1Color: hsl{0, 0, .98}, // hsl(0, 0%, 13%)
Layer1Shadow: 3,
Layer2Color: hsl{0, 1, 1},
Layer2Shadow: 5,
Layer3Color: hsl{0, 1, 1},
Layer3Shadow: 6,
Layer4Color: hsl{0, 1, 1},
ShadowColor: hsl{0, 0, 0},
ShadowColor: hsl{0, 0, 0.5},
}
var solarizedDarkStyle = pixeldrainStyleSheet{
@@ -285,13 +263,9 @@ var solarizedDarkStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{0, 0, 0},
Layer1Color: hsl{192, .87, .09},
Layer1Shadow: 3,
Layer2Color: hsl{192, .81, .14},
Layer2Shadow: 5,
Layer3Color: hsl{192, .95, .17},
Layer3Shadow: 7,
Layer4Color: hsl{192, .99, .19},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}
@@ -308,13 +282,9 @@ var maroonStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{0, 0, 0},
Layer1Color: hsl{0, .5, .05},
Layer1Shadow: 3,
Layer2Color: hsl{0, .6, .08}, // hsl{0, .8, .15},
Layer2Shadow: 5,
Layer3Color: hsl{0, .9, .14},
Layer3Shadow: 7,
Layer4Color: hsl{0, .9, .20},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}
@@ -331,13 +301,9 @@ var hackerStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{0, 0, 0},
Layer1Color: hsl{0, 0, 0},
Layer1Shadow: 3,
Layer2Color: hsl{0, 0, .03},
Layer2Shadow: 5,
Layer3Color: hsl{120, .3, .08},
Layer3Shadow: 7,
Layer4Color: hsl{120, .5, .12},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}
@@ -354,13 +320,9 @@ var cantaPixeldrainStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{200, .13, .27}, // hsl(200, 13%, 27%)
Layer1Color: hsl{180, .04, .16},
Layer1Shadow: 3,
Layer2Color: hsl{168, .05, .21},
Layer2Shadow: 5,
Layer3Color: hsl{170, .05, .26},
Layer3Shadow: 6,
Layer4Color: hsl{163, .04, .31},
Layer4Shadow: 7,
ShadowColor: hsl{0, 0, 0},
}
@@ -377,13 +339,9 @@ var arcPixeldrainStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{223, .12, .2}, // hsl(223, 12%, 29%)
Layer1Color: hsl{215, .17, .19},
Layer1Shadow: 3,
Layer2Color: hsl{227, .14, .25}, // hsl(227, 14%, 25%)
Layer2Shadow: 5,
Layer3Color: hsl{223, .12, .29},
Layer3Shadow: 7,
Layer4Color: hsl{223, .10, .32},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}
@@ -400,13 +358,9 @@ var deepseaPixeldrainStyle = pixeldrainStyleSheet{
ScrollbarBackgroundColor: hsl{0, 0, .11}, // hsl(0, 0%, 11%)
Layer1Color: hsl{160, .27, .05},
Layer1Shadow: 3,
Layer2Color: hsl{163, .26, .09}, // hsl(163, 26%, 11%)
Layer2Shadow: 5,
Layer3Color: hsl{161, .28, .12}, // hsl(161, 28%, 14%)
Layer3Shadow: 7,
Layer4Color: hsl{161, .32, .15},
Layer4Shadow: 9,
ShadowColor: hsl{0, 0, 0},
}