From 9545ceb4f4cc3c17837cc133b30036f44b550f89 Mon Sep 17 00:00:00 2001 From: xenofem Date: Wed, 27 Apr 2022 21:27:03 -0400 Subject: [PATCH 1/4] make favicon version of logo --- resources/transbeam-common.asy | 48 +++++++++++++++++++++++++++++ resources/transbeam-favicon.asy | 13 ++++++++ resources/transbeam.asy | 52 +++++++------------------------- static/favicon.ico | Bin 0 -> 32038 bytes 4 files changed, 72 insertions(+), 41 deletions(-) create mode 100644 resources/transbeam-common.asy create mode 100644 resources/transbeam-favicon.asy create mode 100644 static/favicon.ico diff --git a/resources/transbeam-common.asy b/resources/transbeam-common.asy new file mode 100644 index 0000000..5e218a6 --- /dev/null +++ b/resources/transbeam-common.asy @@ -0,0 +1,48 @@ +struct transbeamPrefs { + real triangleRadius; + real borderInset; + real circleRadius; + real bigBeamRadius; + real smallBeamRadius; + real beamCount; + real beamAngle; + real starterBeamAngle; +} + +void drawTransbeam(transbeamPrefs prefs) { + unravel prefs; + + pen transBlue = rgb("55cdfc"); + pen transPink = rgb("f7a8b8"); + + pen bigBeamColor = transPink; + pen smallBeamColor = transBlue; + + path borderTriangle = dir(90)--dir(210)--dir(330)--cycle; + path outerBorder = scale(triangleRadius)*borderTriangle; + fill(outerBorder, white); + + path beam(real angle, real innerRadius, real outerRadius) { + return arc((0,0), outerRadius, angle/2, -angle/2)--arc((0,0), innerRadius, -angle/2, angle/2)--cycle; + } + + path bigBeam = beam(beamAngle, circleRadius, bigBeamRadius); + path smallBeam = beam(beamAngle, circleRadius, smallBeamRadius); + + for (int i = 0; i < beamCount; ++i) { + if (i > 0) { + fill(rotate(360*i/beamCount)*bigBeam, bigBeamColor); + } + fill(rotate(360*(i+0.5)/beamCount)*smallBeam, smallBeamColor); + } + + pair starterBeamTrianglePoint(real angle) { + pair circlePoint = circleRadius*dir(angle); + return intersectionpoint(circlePoint--(circlePoint+(triangleRadius,0)), outerBorder); + } + + fill(starterBeamTrianglePoint(-starterBeamAngle/2)--arc((0,0), circleRadius, -starterBeamAngle/2, starterBeamAngle/2)--starterBeamTrianglePoint(starterBeamAngle/2)--cycle, bigBeamColor); + + draw(outerBorder, transPink+(2*borderInset)); + draw(scale(triangleRadius-borderInset)*borderTriangle, transBlue+borderInset); +} diff --git a/resources/transbeam-favicon.asy b/resources/transbeam-favicon.asy new file mode 100644 index 0000000..526b182 --- /dev/null +++ b/resources/transbeam-favicon.asy @@ -0,0 +1,13 @@ +import "transbeam-common.asy" as transbeam; + +transbeamPrefs prefs; +prefs.triangleRadius = 100; +prefs.borderInset = 14; +prefs.circleRadius = 12; +prefs.bigBeamRadius = 36; +prefs.smallBeamRadius = 36; +prefs.beamCount = 3; +prefs.beamAngle = 40; +prefs.starterBeamAngle = 80; + +drawTransbeam(prefs); diff --git a/resources/transbeam.asy b/resources/transbeam.asy index 8e0b935..d49c8ef 100644 --- a/resources/transbeam.asy +++ b/resources/transbeam.asy @@ -1,43 +1,13 @@ -real triangleRadius = 100; -real borderInset = 6; +import "transbeam-common.asy" as transbeam; -real circleRadius = 12; -real bigBeamRadius = 36; -real smallBeamRadius = 25; -real beamCount = 12; -real beamAngle = 7; -real starterBeamAngle = 16; +transbeamPrefs prefs; +prefs.triangleRadius = 100; +prefs.borderInset = 6; +prefs.circleRadius = 12; +prefs.bigBeamRadius = 36; +prefs.smallBeamRadius = 25; +prefs.beamCount = 12; +prefs.beamAngle = 7; +prefs.starterBeamAngle = 16; -pen transBlue = rgb("55cdfc"); -pen transPink = rgb("f7a8b8"); - -pen bigBeamColor = transPink; -pen smallBeamColor = transBlue; - -path borderTriangle = dir(90)--dir(210)--dir(330)--cycle; -path outerBorder = scale(triangleRadius)*borderTriangle; -fill(outerBorder, white); - -path beam(real angle, real innerRadius, real outerRadius) { - return arc((0,0), outerRadius, angle/2, -angle/2)--arc((0,0), innerRadius, -angle/2, angle/2)--cycle; -} - -path bigBeam = beam(beamAngle, circleRadius, bigBeamRadius); -path smallBeam = beam(beamAngle, circleRadius, smallBeamRadius); - -for (int i = 0; i < beamCount; ++i) { - if (i > 0) { - fill(rotate(360*i/beamCount)*bigBeam, bigBeamColor); - } - fill(rotate(360*(i+0.5)/beamCount)*smallBeam, smallBeamColor); -} - -pair starterBeamTrianglePoint(real angle) { - pair circlePoint = circleRadius*dir(angle); - return intersectionpoint(circlePoint--(circlePoint+(triangleRadius,0)), outerBorder); -} - -fill(starterBeamTrianglePoint(-starterBeamAngle/2)--arc((0,0), circleRadius, -starterBeamAngle/2, starterBeamAngle/2)--starterBeamTrianglePoint(starterBeamAngle/2)--cycle, bigBeamColor); - -draw(outerBorder, transPink+(2*borderInset)); -draw(scale(triangleRadius-borderInset)*borderTriangle, transBlue+borderInset); +drawTransbeam(prefs); diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4cd2d193b39a3a4ba653dd9ac87dcec3df786305 GIT binary patch literal 32038 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 Date: Wed, 27 Apr 2022 21:47:36 -0400 Subject: [PATCH 2/4] smarter websocket url inference, show a full url for downloads --- static/upload.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/upload.js b/static/upload.js index 3784d9d..d332674 100644 --- a/static/upload.js +++ b/static/upload.js @@ -106,11 +106,11 @@ uploadButton.addEventListener('click', (e) => { totalBytes = files.reduce((acc, file) => acc + file.size, 0); - socket = new WebSocket(`ws://${window.location.host}/upload`); + socket = new WebSocket(`${window.location.protocol === 'http:' ? 'ws' : 'wss'}://${window.location.host}/upload`); socket.addEventListener('open', sendMetadata); socket.addEventListener('message', (msg) => { if (bytesSent === 0 && msg.data.match(/^[A-Za-z0-9]+$/)) { - downloadLink.textContent = msg.data; + downloadLink.textContent = `${window.location.origin}/download/${msg.data}`; sendData(); } else if (msg.data === 'ack') { sendData(); From 43cffcd54c660c85392d6cc52a321e0bb710a212 Mon Sep 17 00:00:00 2001 From: xenofem Date: Wed, 27 Apr 2022 21:47:52 -0400 Subject: [PATCH 3/4] fix styling on disabled buttons --- static/index.html | 2 +- static/transbeam.css | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/static/index.html b/static/index.html index 1640e13..9023dc8 100644 --- a/static/index.html +++ b/static/index.html @@ -9,8 +9,8 @@
diff --git a/static/transbeam.css b/static/transbeam.css index 5f9b129..d442e02 100644 --- a/static/transbeam.css +++ b/static/transbeam.css @@ -17,8 +17,9 @@ button:hover, .fake_button:hover { background-color: #aaa; } -button:disabled, button:disabled:hover, .fake_button:disabled, .fake_button:disabled:hover { +button:disabled, input:disabled + .fake_button { color: #aaa; background-color: #eee; border-color: #ddd; + cursor: not-allowed; } From 55fa969bead36745e2e271d7b3eb9716720af17d Mon Sep 17 00:00:00 2001 From: xenofem Date: Wed, 27 Apr 2022 21:58:11 -0400 Subject: [PATCH 4/4] zip: set minimum version field back to 4.5 I'm not sure what the deal is, it sounds like the UTF-8 bit flag is 6.3, but linux's zip utilities don't support 6.3 and do support the bit flag, so *shrug* --- src/zip.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/zip.rs b/src/zip.rs index 16a1fcf..e20a45f 100644 --- a/src/zip.rs +++ b/src/zip.rs @@ -87,7 +87,7 @@ impl UploadedFile { /// through "Extra field length". fn shared_header_fields(&self, hash: Option) -> Vec { let mut fields = vec![ - 63, 0, // Minimum version required to extract: 6.3 for UTF-8 filenames + 45, 0, // Minimum version required to extract: 4.5 for ZIP64 0b00001000, // General purpose bit flag: bit 3 - size and CRC-32 in data descriptor 0b00001000, // General purpose bit flag: bit 11 - UTF-8 filenames 0, 0, // Compression method: none @@ -138,7 +138,7 @@ impl UploadedFile { fn central_directory_header(&self, local_header_offset: u64, hash: u32) -> Vec { let mut header = vec![ 0x50, 0x4b, 0x01, 0x02, // Central directory file header signature - 63, 3, // Made by a Unix system supporting version 6.3 + 45, 3, // Made by a Unix system supporting version 4.5 ]; header.append(&mut self.shared_header_fields(Some(hash))); append_0(&mut header, 8); // Comment length, disk number, internal attributes, DOS external attributes @@ -169,8 +169,8 @@ fn end_of_central_directory(files: &[UploadedFile]) -> Vec { ]; append_0(&mut eocd, 7); // pad out the rest of the size field eocd.append(&mut vec![ - 63, 3, // Made by a Unix system supporting version 6.3 - 63, 0, // Minimum version 6.3 to extract + 45, 3, // Made by a Unix system supporting version 4.5 + 45, 0, // Minimum version 4.5 to extract ]); append_0(&mut eocd, 8); // Two 4-byte disk numbers, both 0 // Number of central directory records, on this disk and in total