diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2021-02-08 17:52:46 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-08 17:52:46 -0500 |
commit | 4b6703114c3fedaaf24cc7a376d885e22dfdc4f3 (patch) | |
tree | 5065ab70a1e56ee6187aeb9af46491ab1667b524 /ext/bg | |
parent | 849e4fabe1dffc2851fcb338dae8400d6c8e46ca (diff) |
Improve dictionaries not enabled badges (#1349)
* Improve badges on the settings page
* Add badges on the context page
Diffstat (limited to 'ext/bg')
-rw-r--r-- | ext/bg/context.html | 13 | ||||
-rw-r--r-- | ext/bg/css/context.css | 105 | ||||
-rw-r--r-- | ext/bg/css/settings2.css | 45 | ||||
-rw-r--r-- | ext/bg/js/context-main.js | 21 | ||||
-rw-r--r-- | ext/bg/settings2.html | 9 |
5 files changed, 171 insertions, 22 deletions
diff --git a/ext/bg/context.html b/ext/bg/context.html index afd89207..76e4db2a 100644 --- a/ext/bg/context.html +++ b/ext/bg/context.html @@ -30,7 +30,12 @@ <optgroup label="Primary Profile" id="profile-select-option-group"></optgroup> </select></span> </button> - <a class="nav-button action-open-settings" data-icon="cog" title="Settings" data-hotkey='["global:openSettingsPage","title","Settings ({0})"]'></a> + <a class="nav-button action-open-settings" data-icon="cog" title="Settings" data-hotkey='["global:openSettingsPage","title","Settings ({0})"]'> + <div class="nav-button-warning-badge no-dictionaries-enabled-warning" hidden> + <div class="nav-button-warning-badge-outer"></div> + <div class="nav-button-warning-badge-inner"></div> + </div> + </a> <a class="nav-button action-open-search" data-icon="magnifying-glass" title="Search" data-hotkey='["global:openSearchPage","title","Search ({0})"]'></a> <a class="nav-button action-open-info" data-icon="question-mark" title="Information" data-hotkey='["global:openInfoPage","title","Information ({0})"]'></a> </div> @@ -42,7 +47,11 @@ <span class="link-group-icon"><input type="checkbox" id="enable-search2"></span><span class="link-group-label">Enable content scanning</span> </label> <a class="link-group action-open-settings"> - <span class="link-group-icon" data-icon="chevron"></span><span class="link-group-label">Settings</span> + <span class="link-group-icon" data-icon="chevron"></span> + <span class="link-group-label">Settings</span> + <span class="link-group-badge"> + <div class="flex-margin-left warning-badge no-dictionaries-enabled-warning" hidden><span class="icon" data-icon="exclamation-point-short"></span></div> + </span> </a> <a class="link-group action-open-search"> <span class="link-group-icon" data-icon="chevron"></span><span class="link-group-label">Search</span> diff --git a/ext/bg/css/context.css b/ext/bg/css/context.css index 773f79c6..447c5066 100644 --- a/ext/bg/css/context.css +++ b/ext/bg/css/context.css @@ -15,6 +15,13 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ +:root { + --badge-size: 16px; + + --warning-color: #96751c; + --warning-color-light: #edc75e; +} + body { padding: 10px; margin: 0; @@ -50,8 +57,34 @@ label { } +/* Icons */ +.icon { + --icon-image: none; + --icon-size: contain; + + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center center; + -webkit-mask-mode: alpha; + -webkit-mask-size: var(--icon-size); + -webkit-mask-image: var(--icon-image); + mask-repeat: no-repeat; + mask-position: center center; + mask-mode: alpha; + mask-size: var(--icon-size); + mask-image: var(--icon-image); +} +.icon[data-icon=profile] { --icon-image: url(/mixed/img/profile.svg); } +.icon[data-icon=cog] { --icon-image: url(/mixed/img/cog.svg); } +.icon[data-icon=magnifying-glass] { --icon-image: url(/mixed/img/magnifying-glass.svg); } +.icon[data-icon=exclamation-point-short] { --icon-image: url(/mixed/img/exclamation-point-short.svg); } +.icon[data-icon=question-mark-circle] { --icon-image: url(/mixed/img/question-mark-circle.svg); } + + +/* Page-specific styles */ .link-group { - display: block; + display: flex; + flex-flow: row nowrap; + align-items: center; line-height: 1.5em; margin: 0 -10px; padding: 0.5em 10px; @@ -102,6 +135,9 @@ label { .link-group-label { vertical-align: middle; } +.link-group-badge { + margin-left: 0.5em; +} /* Toggle */ .toggle>input[type=checkbox] { @@ -235,6 +271,7 @@ body[data-loaded=true] .toggle-group { margin: 0; padding: 2px 3px; cursor: pointer; + position: relative; } .nav-button+.nav-button { margin-left: -1px; @@ -337,3 +374,69 @@ select.profile-select { font-style: normal; background-color: initial; } + +.nav-button-warning-badge { + pointer-events: none; + width: 12px; + height: 6px; + position: absolute; + right: calc(50% - 6px); + top: -8px; + z-index: 1; +} +.nav-button-warning-badge-inner, +.nav-button-warning-badge-outer { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background-color: #edc75e; + + --icon-image: url(/mixed/img/material-down-arrow.svg); + --icon-size: contain; + + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center center; + -webkit-mask-mode: alpha; + -webkit-mask-size: var(--icon-size); + -webkit-mask-image: var(--icon-image); + mask-repeat: no-repeat; + mask-position: center center; + mask-mode: alpha; + mask-size: var(--icon-size); + mask-image: var(--icon-image); +} +.nav-button-warning-badge-inner { + margin: 1px 2px; +} +.nav-button-warning-badge-outer { + animation: nav-button-warning-badge-animation ease-in-out 2s alternate infinite; +} +@keyframes nav-button-warning-badge-animation { + 0% { opacity: 1; background-color: #edc75e; } + 100% { opacity: 1; background-color: #333333; } +} + +.warning-badge { + position: relative; + width: var(--badge-size); + height: var(--badge-size); + margin: 0; + padding: 0; + background-color: var(--warning-color-light); + border-radius: 50%; + box-shadow: var(--shadow-vertical); +} +.warning-badge:not([hidden]) { + display: block; +} +.warning-badge>.icon { + display: block; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background-color: var(--warning-color); +} diff --git a/ext/bg/css/settings2.css b/ext/bg/css/settings2.css index 53278951..725804c3 100644 --- a/ext/bg/css/settings2.css +++ b/ext/bg/css/settings2.css @@ -54,6 +54,7 @@ --modal-width-small: 400px; --modal-height-small: 200px; --modal-transition-offset: -64px; + --badge-size: 16px; --link-color: var(--accent-color); --link-color-hover: var(--accent-color-dark); @@ -62,7 +63,7 @@ --outline-item-background-color: rgba(13, 13, 13, 0); --outline-item-background-color-hover: rgba(13, 13, 13, 0.15); --warning-color: #96751c; - --warning-color-light: hsl(44, 80%, 65%); + --warning-color-light: #edc75e; --dim-background-color: rgba(0, 0, 0, 0.5); --content-dimmer-color: rgba(0, 0, 0, 0.1); @@ -421,26 +422,10 @@ a.heading-link-light { position: absolute; right: calc(var(--outline-item-icon-size) * -0.125); top: calc(var(--outline-item-icon-size) * -0.125); - width: calc(var(--outline-item-icon-size) * 0.5); - height: calc(var(--outline-item-icon-size) * 0.5); - margin: 0; - padding: 0; - background-color: var(--warning-color-light); - border-radius: calc(var(--outline-item-icon-size) * 0.5); - box-shadow: var(--shadow-vertical); } .outline-item-left-warning-badge:not([hidden]) { display: block; } -.outline-item-left-warning-badge>.icon { - display: block; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - background-color: var(--warning-color); -} .outline-item-label { white-space: nowrap; padding-left: var(--padding); @@ -1970,6 +1955,29 @@ input.sentence-termination-character-input2 { top: calc(1em * (3 / var(--font-size-no-units))); } +.warning-badge { + position: relative; + width: var(--badge-size); + height: var(--badge-size); + margin: 0; + padding: 0; + background-color: var(--warning-color-light); + border-radius: 50%; + box-shadow: var(--shadow-vertical); +} +.warning-badge:not([hidden]) { + display: block; +} +.warning-badge>.icon { + display: block; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + background-color: var(--warning-color); +} + /* Generic layouts */ .margin-above { @@ -2016,6 +2024,9 @@ input.sentence-termination-character-input2 { flex-flow: row wrap; align-items: center; } +.flex-margin-left { + margin-left: 0.5em; +} .flex-column-nowrap { display: flex; diff --git a/ext/bg/js/context-main.js b/ext/bg/js/context-main.js index 65853514..e9833687 100644 --- a/ext/bg/js/context-main.js +++ b/ext/bg/js/context-main.js @@ -100,6 +100,7 @@ class DisplayController { toggle.checked = extensionEnabled; toggle.addEventListener('change', onToggleChanged, false); } + this._updateDictionariesEnabledWarnings(options); } async _setupHotkeys() { @@ -150,6 +151,26 @@ class DisplayController { }] ); } + + async _updateDictionariesEnabledWarnings(options) { + const noDictionariesEnabledWarnings = document.querySelectorAll('.no-dictionaries-enabled-warning'); + const dictionaries = await api.getDictionaryInfo(); + + let enabledCount = 0; + for (const {title} of dictionaries) { + if ( + Object.prototype.hasOwnProperty.call(options.dictionaries, title) && + options.dictionaries[title].enabled + ) { + ++enabledCount; + } + } + + const hasEnabledDictionary = (enabledCount > 0); + for (const node of noDictionariesEnabledWarnings) { + node.hidden = hasEnabledDictionary; + } + } } (async () => { diff --git a/ext/bg/settings2.html b/ext/bg/settings2.html index 5dd85dd2..341d7f21 100644 --- a/ext/bg/settings2.html +++ b/ext/bg/settings2.html @@ -22,7 +22,7 @@ <div class="sidebar"><div class="sidebar-inner"> <div class="sidebar-body"> <a href="#!profile" class="outline-item"><span class="outline-item-left"><span class="outline-item-icon icon" data-icon="profile"></span></span><span class="outline-item-label">Profile</span></a> - <a href="#!dictionaries" class="outline-item"><span class="outline-item-left"><span class="outline-item-icon icon" data-icon="book"></span><span class="outline-item-left-warning-badge no-dictionaries-enabled-warning" hidden><span class="icon" data-icon="exclamation-point-short"></span></span></span><span class="outline-item-label">Dictionaries</span></a> + <a href="#!dictionaries" class="outline-item"><span class="outline-item-left"><span class="outline-item-icon icon" data-icon="book"></span><span class="outline-item-left-warning-badge no-dictionaries-enabled-warning" hidden><div class="warning-badge"><span class="icon" data-icon="exclamation-point-short"></span></div></span></span><span class="outline-item-label">Dictionaries</span></a> <a href="#!general" class="outline-item"><span class="outline-item-left"><span class="outline-item-icon icon" data-icon="cog"></span></span><span class="outline-item-label">General</span></a> <a href="#!scanning" class="outline-item"><span class="outline-item-left"><span class="outline-item-icon icon" data-icon="scanning"></span></span><span class="outline-item-label">Scanning</span></a> <a href="#!popup" class="outline-item"><span class="outline-item-left"><span class="outline-item-icon icon" data-icon="popup"></span></span><span class="outline-item-label">Popup</span></a> @@ -125,7 +125,12 @@ <div class="settings-group"> <div class="settings-item settings-item-button" data-modal-action="show,dictionaries"><div class="settings-item-inner"> <div class="settings-item-left"> - <div class="settings-item-label">Configure installed and enabled dictionaries…</div> + <div class="settings-item-label"> + <div class="flex-row-nowrap"> + <div>Configure installed and enabled dictionaries…</div> + <div class="flex-margin-left warning-badge no-dictionaries-enabled-warning" hidden><span class="icon" data-icon="exclamation-point-short"></span></div> + </div> + </div> </div> <div class="settings-item-right open-panel-button-container"> <button class="icon-button"><span class="icon-button-inner"><span class="icon" data-icon="material-right-arrow"></span></span></button> |