From 4403848a4b496b2a21bc9b76481e442d59a0595d Mon Sep 17 00:00:00 2001 From: Wumbo <58399748+WumboSpasm@users.noreply.github.com> Date: Fri, 3 Nov 2023 18:07:25 -0400 Subject: [PATCH] web: Extension UI improvements (#13473) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * web: Improve styling of extension pop-up menu * web: Improve styling of extension settings page * web: Improve styling of extension player * web: Make styling more consistent across browsers * web: Run eslint, fix some problems * web: Move version text near top of pop-up menu, add to settings menu * web: Improve logo hover bounds in pop-up and settings * web: Improve styling of extension status indicator * web: Update extension pop-up text strings * web: Misc. sizing/padding changes to extension UI * web: chore: Add a stylelint exception for #backgroundColor in player.css Because it's not kebab-case, to match the keys of the metadata object in JS. --------- Co-authored-by: TÖRÖK Attila --- .../assets/_locales/en/messages.json | 16 +- web/packages/extension/assets/css/common.css | 48 +++- web/packages/extension/assets/css/options.css | 16 +- web/packages/extension/assets/css/player.css | 239 ++++++------------ web/packages/extension/assets/css/popup.css | 69 +++-- web/packages/extension/assets/options.html | 83 +++--- web/packages/extension/assets/player.html | 114 ++++----- web/packages/extension/assets/popup.html | 20 +- web/packages/extension/src/options.ts | 9 +- web/packages/extension/src/player.ts | 51 ++-- web/packages/extension/src/popup.ts | 3 +- 11 files changed, 314 insertions(+), 354 deletions(-) diff --git a/web/packages/extension/assets/_locales/en/messages.json b/web/packages/extension/assets/_locales/en/messages.json index 015261a82..4aa9a469f 100644 --- a/web/packages/extension/assets/_locales/en/messages.json +++ b/web/packages/extension/assets/_locales/en/messages.json @@ -9,7 +9,7 @@ "message": "Show SWF download in context menu" }, "settings_autostart": { - "message": "Play automatically without splash screen (then click to unmute)" + "message": "Autoplay Flash content (click to unmute)" }, "settings_log_level": { "message": "Log level" @@ -57,25 +57,25 @@ "message": "Checking Ruffle status on current tab…" }, "status_result_running": { - "message": "Ruffle is loaded and ready to run Flash content on the current tab." + "message": "Ruffle is ready to run Flash content in the current tab." }, "status_result_running_protected": { - "message": "Ruffle is loaded and running the Flash content that you requested." + "message": "Ruffle is ready to run the Flash content that you request." }, "status_result_optout": { - "message": "Ruffle is not loaded because the current page has marked itself as incompatible." + "message": "Ruffle cannot load because the current website marked itself as incompatible." }, "status_result_disabled": { - "message": "Ruffle is not loaded because it is disabled." + "message": "Ruffle is disabled." }, "status_result_error": { - "message": "An error occurred when querying the current tab's instance of Ruffle." + "message": "An error occurred while querying the current page's Ruffle instance." }, "status_result_protected": { - "message": "Ruffle cannot load on protected browser pages." + "message": "Ruffle cannot load in protected browser pages." }, "action_reload": { - "message": "Reload tab to apply changes" + "message": "Reload Tab to Apply Changes" }, "open_player_page": { "message": "Open SWF Player" diff --git a/web/packages/extension/assets/css/common.css b/web/packages/extension/assets/css/common.css index 08f49906b..8c3beb54e 100644 --- a/web/packages/extension/assets/css/common.css +++ b/web/packages/extension/assets/css/common.css @@ -1,4 +1,5 @@ :root { + --ruffle-light-blue: #546da3; --ruffle-blue: #37528c; --ruffle-dark-blue: #184778; --ruffle-orange: #ffad33; @@ -25,8 +26,19 @@ body { position: relative; background: var(--ruffle-dark-blue); text-align: center; - padding: 16px; - box-shadow: 0 0 15px #0008; + padding: 16px 16px 6px; + box-shadow: 0 0 12px #0008; +} + +.header a { + display: inline-block; + line-height: 0; +} + +#version-text { + text-align: center; + font-size: smaller; + opacity: 0.6; } .logo { @@ -40,10 +52,37 @@ body { /* Controls */ +input, +select { + background: var(--ruffle-dark-blue); + color: white; + padding: 6px; + border: none; + border-radius: 4px; +} + +input::placeholder { + opacity: 0.5; + color: white; +} + +button { + padding: 6px 8px; + border: 2px solid var(--ruffle-blue); + border-radius: 8px; + cursor: pointer; + text-align: center; + background: var(--ruffle-light-blue); + color: white; + + /* This gives the text a little more weight without outright bolding it */ + text-shadow: 0 0 0.1px white; +} + .options { display: flex; flex-flow: column; - gap: 24px; + gap: 20px; } .option { @@ -54,13 +93,14 @@ body { .option input, .option select { + padding: 4px; position: absolute; right: 0; } .option label { display: inline-block; - padding-right: 80px; + padding-right: 60px; } /* Checkbox (Based on "Pure CSS Slider Checkboxes": https://codepen.io/Qvcool/pen/bdzVYW) */ diff --git a/web/packages/extension/assets/css/options.css b/web/packages/extension/assets/css/options.css index e1b3ecd92..07906a6e6 100644 --- a/web/packages/extension/assets/css/options.css +++ b/web/packages/extension/assets/css/options.css @@ -3,19 +3,17 @@ } .container { - max-width: 400px; + max-width: 600px; margin: auto; padding: 24px 32px; } -details > .options { - padding-top: 10px; +#advanced-options { + color: var(--ruffle-orange); + font-size: 28px; + margin: 8px auto 0; } -details > .options.special { - padding-top: 30px; -} - -details > summary { - cursor: pointer; +#reset-settings { + margin: 0 auto; } diff --git a/web/packages/extension/assets/css/player.css b/web/packages/extension/assets/css/player.css index 77a71f0c0..0dbb22154 100644 --- a/web/packages/extension/assets/css/player.css +++ b/web/packages/extension/assets/css/player.css @@ -1,9 +1,3 @@ -:root { - --ruffle-blue: #37528c; - --ruffle-orange: #ffad33; - --splash-screen-background: #31497d; -} - body { position: absolute; inset: 0; @@ -12,25 +6,81 @@ body { font-family: Lato, sans-serif; font-size: 100%; display: flex; - flex-flow: column; + flex-direction: column; background: black; } +#nav { + width: 100%; + background: var(--ruffle-blue); + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + color: white; + padding: 8px 16px; + box-sizing: border-box; +} + +#nav > * { + display: flex; + gap: 16px; +} + +.logo { + height: 32px; + flex: 0 0 content; +} + +.select-container > div { + display: flex; + align-items: center; + gap: 4px; +} + +#web-url { + width: min(40vw, 500px); +} + +#local-file { + display: none; +} + +#local-file-name { + font-size: smaller; +} + +#toggle-info, +#reload-swf { + cursor: pointer; +} + #main { position: relative; flex: 1; + display: flex; + flex-direction: row; +} + +#player-container { + overflow-y: hidden; + flex-grow: 1; +} + +#player-container > * { + position: relative; + width: 100%; + height: 100%; } #overlay { - position: absolute; - inset: 0; - z-index: 1; pointer-events: none; border: 8px dashed var(--ruffle-orange); border-radius: 30px; opacity: 0; transition: opacity 0.3s ease-in; - margin: 10px 5px; + box-sizing: border-box; + z-index: 1; } #overlay.drag { @@ -38,160 +88,37 @@ body { transition-timing-function: ease-out; } -#player { - position: absolute; - inset: 0; - width: auto; - height: auto; - margin: 10px 0; +#overlay:not([hidden]) ~ #player { + bottom: 100%; } -#nav { - width: 100%; - background: var(--ruffle-blue); - box-shadow: 0 3px 6px 5px var(--ruffle-blue); - display: flex; - align-items: center; - justify-content: space-around; - color: white; - padding: 10px 0 5px; - margin-bottom: 5px; +#info-container { + width: 300px; + background-color: var(--ruffle-blue); + padding: 4px 16px; + flex-direction: column; + gap: 8px; + box-sizing: border-box; } -#title { - transition: opacity 0.5s; +#info-container span:first-child { + text-shadow: 0 0 1px white; } -#title:hover { - opacity: 0.5; +#info-container span:first-child::after { + content: ":"; } -#title img { - height: 32px; +#info-container span:last-child { + float: right; } -#file-picker { - margin-left: 10px; -} - -#file-picker select, -#file-picker input { - margin-left: 5px; -} - -#local-file-container, -#web-url-container { - display: inline-block; - vertical-align: middle; -} - -#local-file { - width: 0; - opacity: 0; - position: absolute; -} - -#local-file-label, -#web-form-submit { - color: var(--ruffle-blue); - padding: 3px 10px; - margin: 5px 2px; - cursor: pointer; - border-radius: 50px; +/* TODO: Make metadata element IDs kebab-case, and convert back and forth + between that and the camelCase of metadata JS object keys. */ +/* stylelint-disable-next-line selector-id-pattern */ +#backgroundColor { + width: 1em; + height: 1em; + border: 2px solid var(--ruffle-dark-blue); background-color: white; } - -#web-form-submit { - border-style: solid; - border-color: white; - margin-right: 10px; -} - -#local-file-name { - min-width: 150px; - display: inline-block; - font-size: smaller; -} - -.hidden { - display: none !important; -} - -.modal { - display: none; - position: fixed; - z-index: 1; - left: 0; - top: 0; - width: 100%; - height: 100%; -} - -.modal-content { - background-color: var(--ruffle-blue); - margin: 15vh auto; - padding: 20px; - border: 2px solid white; - width: 300px; - height: 270px; - overflow: auto; -} - -.close { - color: #aaa; - float: right; - font-size: 28px; - font-weight: bold; - cursor: pointer; -} - -#open-modal, -#reload-swf { - vertical-align: middle; - cursor: pointer; -} - -#metadata { - margin: 0 auto; -} - -#metadata td { - padding: 2px 1px; - border: 1px solid #ddd; - color: var(--ruffle-orange); -} - -#metadata tr td:nth-child(1) { - font-weight: bold; - padding: 0 10px; -} - -#web-url { - width: min(40vw, 500px); -} - -@media only screen and (width <= 800px) { - #local-file-container, - #web-url-container { - display: block; - } - - #web-url-container { - margin-bottom: 10px; - } -} - -@media only screen and (width <= 600px) { - #local-file-static-label { - display: block; - margin-bottom: 5px; - } - - #local-file-container { - margin-bottom: 10px; - } - - #nav { - flex-flow: column; - } -} diff --git a/web/packages/extension/assets/css/popup.css b/web/packages/extension/assets/css/popup.css index 1f6273392..d124005a8 100644 --- a/web/packages/extension/assets/css/popup.css +++ b/web/packages/extension/assets/css/popup.css @@ -8,32 +8,17 @@ body { } .container { - padding: 16px; -} - -button { - display: block; - width: 100%; - padding: 10px; - border: none; - cursor: pointer; - text-align: center; - background: var(--ruffle-orange); - color: black; - border-top: 1px solid var(--ruffle-blue); -} - -#version-text { - text-align: center; - font-size: 12px; - opacity: 0.8; - margin: 2px 0 6px; + font-size: small; + padding: 12px; } #status-container { text-align: center; - background: white; + background-color: white; + background-image: linear-gradient(#fff1, #fff1 50%, #0001 50%, #0001); + background-size: 100% 2px; color: black; + box-shadow: inset 0 -12px 12px -12px #0008; } #status-indicator { @@ -48,21 +33,55 @@ button { box-shadow: 0 0 10px var(--color); } +.options { + gap: 12px; +} + +.buttons-container { + display: flex; + flex-wrap: wrap; + row-gap: 2px; + padding: 0 8px; +} + +.buttons-container button { + flex-grow: 1; +} + +/* TODO: figure out why this appears smaller on Firefox */ +#options-button { + width: 24px; + margin-left: 4px; + padding: 0 2px; + cursor: pointer; +} + #reload-button { height: 0; padding: 0; - transition: height 0.2s ease-in; + transition: + height 0.2s ease-in, + margin-bottom 0.2s ease-in; overflow: hidden; + cursor: default; + background: var(--ruffle-orange); + color: var(--ruffle-dark-blue); + text-shadow: 0 0 0.1px var(--ruffle-dark-blue); + flex-basis: 100%; } #reload-button:enabled { - height: calc(1em + 20px); - transition: height 0.2s ease-out; + height: 33px; + margin-bottom: 6px; + transition: + height 0.2s ease-out, + margin-bottom 0.2s ease-out; + cursor: pointer; } @media (prefers-color-scheme: dark) { #status-container { - background: #333; + background-color: #333; color: white; } } diff --git a/web/packages/extension/assets/options.html b/web/packages/extension/assets/options.html index 34fd0cbd3..f803c90ff 100644 --- a/web/packages/extension/assets/options.html +++ b/web/packages/extension/assets/options.html @@ -12,12 +12,9 @@
- + +
nightly YYYY-MM-DD
@@ -30,50 +27,40 @@
- +
-
- Advanced Options -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- -
-
+
Advanced Options
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
diff --git a/web/packages/extension/assets/player.html b/web/packages/extension/assets/player.html index 1138d7940..b1c2e3aef 100644 --- a/web/packages/extension/assets/player.html +++ b/web/packages/extension/assets/player.html @@ -6,6 +6,7 @@ Ruffle Player + @@ -13,77 +14,66 @@