diff --git a/README.md b/README.md index 6ee8729b..6aa3a705 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ turn your phone or raspi into a portable file server with resumable uploads/down * [file parser plugins](#file-parser-plugins) - provide custom parsers to index additional tags, also see [./bin/mtag/README.md](./bin/mtag/README.md) * [upload events](#upload-events) - trigger a script/program on each upload * [hiding from google](#hiding-from-google) - tell search engines you dont wanna be indexed + * [themes](#themes) * [complete examples](#complete-examples) * [browser support](#browser-support) - TLDR: yes * [client examples](#client-examples) - interact with copyparty using non-browser clients @@ -247,6 +248,8 @@ some improvement ideas ## not my bugs +* [Chrome issue 1317069](https://bugs.chromium.org/p/chromium/issues/detail?id=1317069) -- if you try to upload a folder which contains symlinks by dragging it into the browser, the symlinked files will not get uploaded + * iPhones: the volume control doesn't work because [apple doesn't want it to](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11) * *future workaround:* enable the equalizer, make it all-zero, and set a negative boost to reduce the volume * "future" because `AudioContext` is broken in the current iOS version (15.1), maybe one day... @@ -808,22 +811,23 @@ also, `--force-js` disables the plain HTML folder listing, making things harder ## themes -you can add your own themes by modifying `browser.css` or providing your own css to `--css-browser` +you can add your own themes by modifying `browser.css` or providing your own css to `--css-browser`, then telling copyparty they exist by increasing `--themes` -
- -currently there is four themes, -* classic dark/light -* flat dark/light -* vice -* [hotdog stand](https://blog.codinghorror.com/a-tribute-to-the-windows-31-hot-dog-stand-color-scheme/) +
+0. classic dark +2. flat dark +4. vice
+1. classic light +3. flat light + +5. hotdog stand
the classname of the HTML tag is set according to the selected theme, which is used to set colors as css variables ++ * each theme *generally* has a dark theme (even numbers) and a light theme (odd numbers), showing in pairs * the first theme (theme 0 and 1) is `html.a`, second theme (2 and 3) is `html.b` * if a light theme is selected, `html.y` is set, otherwise `html.z` is -* additionally, if the dark edition of the 2nd theme is selected, `html.bz` is set +* so if the dark edition of the 2nd theme is selected, you use any of `html.b`, `html.z`, `html.bz` to specify rules see the top of [./copyparty/web/browser.css](./copyparty/web/browser.css) where the color variables are set, and there's layout-specific stuff near the bottom diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 404794a3..e44bf73c 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -485,7 +485,7 @@ def run_argparse(argv, formatter): ap2.add_argument("--no-logues", action="store_true", help="disable rendering .prologue/.epilogue.html into directory listings") ap2.add_argument("--no-readme", action="store_true", help="disable rendering readme.md into directory listings") ap2.add_argument("--vague-403", action="store_true", help="send 404 instead of 403 (security through ambiguity, very enterprise)") - ap2.add_argument("--force-js", action="store_true", help="don't send HTML folder listings, force clients to use the embedded json instead -- slight protection against misbehaving search engines which ignore --no-robots") + ap2.add_argument("--force-js", action="store_true", help="don't send folder listings as HTML, force clients to use the embedded json instead -- slight protection against misbehaving search engines which ignore --no-robots") ap2.add_argument("--no-robots", action="store_true", help="adds http and html headers asking search engines to not index anything") ap2 = ap.add_argument_group('yolo options') diff --git a/copyparty/web/browser.css b/copyparty/web/browser.css index ade0dc95..abb020d6 100644 --- a/copyparty/web/browser.css +++ b/copyparty/web/browser.css @@ -927,8 +927,8 @@ html.y #widget.open { } html.b #barpos, html.b #barbuf { - width: calc(100% - 19.5em); - left: 8.5em; + width: calc(100% - 19em); + left: 8em; } #widget { bottom: -3.2em; @@ -937,6 +937,12 @@ html.y #widget.open { #pvol { max-width: 9em; } + html.b #ops { + padding-left: 1.7em; + } + html.b #path { + padding-left: 1.3em; + } } @media (max-width: 35em) { #ops>a[data-dest="new_md"], @@ -2237,6 +2243,9 @@ html.a #pctl a { margin-right: .5em; box-shadow: -.02em -.02em .3em rgba(0,0,0,0.2) inset; } +html.b #pctl { + left: .5em; +} html.c #ops, html.a #ops { margin: 1.7em 1.5em 0 1.5em; @@ -2372,7 +2381,8 @@ html.ay #tree { html.b #path { - margin: 1.3em 0; + margin: 1.3em 0 1.4em 0; + line-height: 1.7em; } html.b.op_open #path { margin-top: .2em; @@ -2406,9 +2416,10 @@ html.by #barpos { box-shadow: 0 0 0 1px rgba(0,0,0,0.2) inset; } html.b #ops { + max-width: 1em; + margin-bottom: 2em; position: relative; z-index: 2; - max-width: calc(100% - 10em); } html.b #ops a { background: var(--bg); @@ -2422,8 +2433,11 @@ html.b #srch_q { html.b #srch_q:empty { margin-bottom: -1em; } +html.b #op_up2k { + margin-top: 3em; +} html.b #wrap { - margin-top: .3em; + margin-top: 2em; } html.b #tree { box-shadow: 0 -1px 0 rgba(128,128,128,0.4); diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 3f5899b4..16f38894 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -5104,7 +5104,7 @@ var unpost = (function () { html.push(""); } else - html.push("

sike! no uploads " + (filt.value ? 'matching that filter' : '') + " are sufficiently recent

"); + html.push("sike! no uploads " + (filt.value ? 'matching that filter' : '') + " are sufficiently recent"); var mods = [1000, 100, 10]; for (var a = 0; a < res.length; a++) {
timesizefile