tweaks and fixes (#1123)
* same color for disabled styles in popup/manager * reduce slider knob * fix click-to-edit in popup on slider and iframe badge * indicate slider interactivity on hovering name * remove 2px gap when first/last entry is striped * stretch 'blocked' separator to full width * unreachable dimming should not apply to frames * restore CWS check in popup * increase not-applied opacity on name as it's #999 now * oldUI: restore 'disabled' bubble + show 'usercss' fully * adjust disabled colors to match perception because transparent text is rendered using gamma-blending whereas colored text uses LCD-antialiasing so to match opacity .6 of #000 we need #888 not #666
This commit is contained in:
parent
e6988d2f9e
commit
2bf30ed16d
|
@ -232,6 +232,7 @@ a:hover {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.oldUI .disabled h2::after,
|
||||||
.entry.usercss .style-name-link::after {
|
.entry.usercss .style-name-link::after {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
@ -240,14 +241,32 @@ a:hover {
|
||||||
content: "UC";
|
content: "UC";
|
||||||
background-color: hsla(180, 35%, 50%, .35);
|
background-color: hsla(180, 35%, 50%, .35);
|
||||||
padding: 2px 3px;
|
padding: 2px 3px;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
.oldUI .disabled h2::after {
|
||||||
|
content: var(--genericDisabledLabel);
|
||||||
|
text-transform: lowercase;
|
||||||
|
font-weight: normal;
|
||||||
|
background: rgba(128, 128, 128, .2);
|
||||||
|
padding: 2px 5px 3px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.oldUI .entry.usercss .style-name-link::after {
|
||||||
|
content: "usercss";
|
||||||
|
font-weight: normal;
|
||||||
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
.disabled h2 .style-name-link,
|
.disabled h2 .style-name-link,
|
||||||
.disabled .actions,
|
.disabled .applies-to,
|
||||||
.disabled .applies-to {
|
.newUI .disabled.entry .svg-icon {
|
||||||
opacity: 0.6;
|
color: #888;
|
||||||
|
fill: #c4c4c4;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
transition: opacity .5s .1s;
|
transition: color .5s .1s, fill .5s .1s;
|
||||||
|
}
|
||||||
|
.disabled.usercss .style-name-link::after {
|
||||||
|
background-color: hsla(180, 35%, 50%, .2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.disabled:hover .actions {
|
.disabled:hover .actions {
|
||||||
|
@ -321,10 +340,6 @@ a:hover {
|
||||||
margin-bottom: .75rem;
|
margin-bottom: .75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.newUI .disabled {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.newUI .entry {
|
.newUI .entry {
|
||||||
display: table-row;
|
display: table-row;
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
|
|
|
@ -54,7 +54,11 @@ Object.assign(newUI, {
|
||||||
id === 'sliders' ? `ui.${id}` :
|
id === 'sliders' ? `ui.${id}` :
|
||||||
id === 'enabled' ? 'manage.newUI' :
|
id === 'enabled' ? 'manage.newUI' :
|
||||||
`manage.newUI.${id}`,
|
`manage.newUI.${id}`,
|
||||||
renderClass: () => document.documentElement.classList.toggle('newUI', newUI.enabled),
|
renderClass: () => {
|
||||||
|
const cl = document.documentElement.classList;
|
||||||
|
cl.toggle('newUI', newUI.enabled);
|
||||||
|
cl.toggle('oldUI', !newUI.enabled);
|
||||||
|
},
|
||||||
tpl: {
|
tpl: {
|
||||||
getToggle() {
|
getToggle() {
|
||||||
return t.template[newUI.sliders ? 'toggleSlider' : 'toggleChecker'].cloneNode(true);
|
return t.template[newUI.sliders ? 'toggleSlider' : 'toggleChecker'].cloneNode(true);
|
||||||
|
@ -112,6 +116,7 @@ const handleEvent = {};
|
||||||
// translate CSS manually
|
// translate CSS manually
|
||||||
document.styleSheets[0].insertRule(
|
document.styleSheets[0].insertRule(
|
||||||
`:root {${[
|
`:root {${[
|
||||||
|
'genericDisabledLabel',
|
||||||
'updateAllCheckSucceededSomeEdited',
|
'updateAllCheckSucceededSomeEdited',
|
||||||
'filteredStylesAllHidden',
|
'filteredStylesAllHidden',
|
||||||
].map(id => `--${id}:"${CSS.escape(t(id))}";`).join('')
|
].map(id => `--${id}:"${CSS.escape(t(id))}";`).join('')
|
||||||
|
|
|
@ -80,6 +80,7 @@
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0 4px 0 18px;
|
padding: 0 4px 0 18px;
|
||||||
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
.entry .onoffswitch span {
|
.entry .onoffswitch span {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -109,8 +110,8 @@
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
}
|
}
|
||||||
.entry .onoffswitch input + span::before {
|
.entry .onoffswitch input + span::before {
|
||||||
width: 9px;
|
width: 7px;
|
||||||
height: 9px;
|
height: 7px;
|
||||||
left: 2px;
|
left: 2px;
|
||||||
right: auto;
|
right: auto;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
|
|
|
@ -27,8 +27,8 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
body > div:not(#installed):not(#message-box):not(.colorpicker-popup) {
|
body > div:not(#installed):not(#message-box):not(.colorpicker-popup) {
|
||||||
margin-left: var(--outer-padding);
|
padding-left: var(--outer-padding);
|
||||||
margin-right: var(--outer-padding);
|
padding-right: var(--outer-padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
.firefox .chromium-only {
|
.firefox .chromium-only {
|
||||||
|
@ -141,8 +141,6 @@ body.blocked > DIV {
|
||||||
|
|
||||||
#installed {
|
#installed {
|
||||||
border-bottom: 1px solid black;
|
border-bottom: 1px solid black;
|
||||||
padding-bottom: 2px;
|
|
||||||
padding-top: 2px;
|
|
||||||
max-height: 445px;
|
max-height: 445px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
counter-reset: style-number;
|
counter-reset: style-number;
|
||||||
|
@ -222,8 +220,17 @@ html[style] .entry-content {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.entry.disabled .style-name {
|
.entry.disabled .style-name,
|
||||||
|
.entry.disabled .svg-icon {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
color: #888;
|
||||||
|
fill: #aaa;
|
||||||
|
}
|
||||||
|
.entry.disabled:hover .svg-icon {
|
||||||
|
fill: #666;
|
||||||
|
}
|
||||||
|
.entry.disabled:hover a:hover .svg-icon {
|
||||||
|
fill: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.entry .main-controls {
|
.entry .main-controls {
|
||||||
|
@ -238,6 +245,12 @@ html[style] .entry-content {
|
||||||
.entry .onoffswitch {
|
.entry .onoffswitch {
|
||||||
padding: 0 0 0 6px;
|
padding: 0 0 0 6px;
|
||||||
}
|
}
|
||||||
|
.entry .onoffswitch input {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
.style-name:hover .onoffswitch span {
|
||||||
|
box-shadow: inset 1px 1px 3px rgba(0, 0, 0, .8);
|
||||||
|
}
|
||||||
|
|
||||||
.entry:nth-child(even) {
|
.entry:nth-child(even) {
|
||||||
background-color: rgba(0, 0, 0, 0.05);
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
|
@ -305,7 +318,9 @@ a.configure[target="_blank"] .svg-icon.config {
|
||||||
opacity: .2;
|
opacity: .2;
|
||||||
transition: opacity .5s ease-in-out .25s, color .5s ease-in-out .25s;
|
transition: opacity .5s ease-in-out .25s, color .5s ease-in-out .25s;
|
||||||
}
|
}
|
||||||
|
.not-applied .style-name {
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
.not-applied:hover .checker,
|
.not-applied:hover .checker,
|
||||||
.not-applied:hover .style-name,
|
.not-applied:hover .style-name,
|
||||||
.not-applied:hover .actions > * {
|
.not-applied:hover .actions > * {
|
||||||
|
@ -499,7 +514,7 @@ body > .actions {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.blocked #installed > *,
|
body.blocked #installed > :not(.frame),
|
||||||
body.blocked .actions > .main-controls {
|
body.blocked .actions > .main-controls {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -773,7 +788,7 @@ body.blocked .actions > .main-controls {
|
||||||
margin: 0 .25em .25em 0;
|
margin: 0 .25em .25em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.unreachable .entry {
|
.unreachable .entry:not(.frame) {
|
||||||
opacity: .25;
|
opacity: .25;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
100
popup/popup.js
100
popup/popup.js
|
@ -129,7 +129,7 @@ async function initTabUrls() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param {chrome.webNavigation.GetAllFrameResultDetails[]} frames */
|
/** @param {chrome.webNavigation.GetAllFrameResultDetails[]} frames */
|
||||||
function initPopup(frames) {
|
async function initPopup(frames) {
|
||||||
installed = $('#installed');
|
installed = $('#installed');
|
||||||
|
|
||||||
setPopupWidth();
|
setPopupWidth();
|
||||||
|
@ -170,52 +170,52 @@ function initPopup(frames) {
|
||||||
el.onclick = () => el.classList.toggle('expanded');
|
el.onclick = () => el.classList.toggle('expanded');
|
||||||
}
|
}
|
||||||
|
|
||||||
getActiveTab().then(function ping(tab, retryCountdown = 10) {
|
const isStore = tabURL.startsWith(URLS.browserWebStore);
|
||||||
msg.sendTab(tab.id, {method: 'ping'}, {frameId: 0})
|
if (isStore && !FIREFOX) {
|
||||||
.catch(() => false)
|
blockPopup();
|
||||||
.then(pong => {
|
return;
|
||||||
if (pong) {
|
}
|
||||||
return;
|
|
||||||
}
|
for (let retryCountdown = 10; retryCountdown-- > 0;) {
|
||||||
// FF and some Chrome forks (e.g. CentBrowser) implement tab-on-demand
|
const tab = await getActiveTab();
|
||||||
// so we'll wait a bit to handle popup being invoked right after switching
|
if (await msg.sendTab(tab.id, {method: 'ping'}, {frameId: 0}).catch(() => {})) {
|
||||||
if (retryCountdown > 0 && (
|
return;
|
||||||
tab.status !== 'complete' ||
|
}
|
||||||
FIREFOX && tab.url === ABOUT_BLANK)) {
|
if (tab.status === 'complete' && (!FIREFOX || tab.url !== ABOUT_BLANK)) {
|
||||||
setTimeout(ping, 100, tab, --retryCountdown);
|
break;
|
||||||
return;
|
}
|
||||||
}
|
// FF and some Chrome forks (e.g. CentBrowser) implement tab-on-demand
|
||||||
const info = t.template.unreachableInfo;
|
// so we'll wait a bit to handle popup being invoked right after switching
|
||||||
if (!FIREFOX) {
|
await new Promise(resolve => setTimeout(resolve, 100));
|
||||||
// Chrome "Allow access to file URLs" in chrome://extensions message
|
}
|
||||||
info.appendChild($create('p', t('unreachableFileHint')));
|
const info = t.template.unreachableInfo;
|
||||||
}
|
if (!FIREFOX) {
|
||||||
if (FIREFOX && tabURL.startsWith(URLS.browserWebStore)) {
|
// Chrome "Allow access to file URLs" in chrome://extensions message
|
||||||
$('label', info).textContent = t('unreachableAMO');
|
info.appendChild($create('p', t('unreachableFileHint')));
|
||||||
const note = (FIREFOX < 59 ? t('unreachableAMOHintOldFF') : t('unreachableAMOHint')) +
|
} else if (isStore) {
|
||||||
(FIREFOX < 60 ? '' : '\n' + t('unreachableAMOHintNewFF'));
|
$('label', info).textContent = t('unreachableAMO');
|
||||||
const renderToken = s => s[0] === '<'
|
const note = (FIREFOX < 59 ? t('unreachableAMOHintOldFF') : t('unreachableAMOHint')) +
|
||||||
? $create('a', {
|
(FIREFOX < 60 ? '' : '\n' + t('unreachableAMOHintNewFF'));
|
||||||
textContent: s.slice(1, -1),
|
const renderToken = s => s[0] === '<'
|
||||||
onclick: handleEvent.copyContent,
|
? $create('a', {
|
||||||
href: '#',
|
textContent: s.slice(1, -1),
|
||||||
className: 'copy',
|
onclick: handleEvent.copyContent,
|
||||||
tabIndex: 0,
|
href: '#',
|
||||||
title: t('copy'),
|
className: 'copy',
|
||||||
})
|
tabIndex: 0,
|
||||||
: s;
|
title: t('copy'),
|
||||||
const renderLine = line => $create('p', line.split(/(<.*?>)/).map(renderToken));
|
})
|
||||||
const noteNode = $create('fragment', note.split('\n').map(renderLine));
|
: s;
|
||||||
info.appendChild(noteNode);
|
const renderLine = line => $create('p', line.split(/(<.*?>)/).map(renderToken));
|
||||||
}
|
const noteNode = $create('fragment', note.split('\n').map(renderLine));
|
||||||
// Inaccessible locally hosted file type, e.g. JSON, PDF, etc.
|
info.appendChild(noteNode);
|
||||||
if (tabURL.length - tabURL.lastIndexOf('.') <= 5) {
|
}
|
||||||
info.appendChild($create('p', t('InaccessibleFileHint')));
|
// Inaccessible locally hosted file type, e.g. JSON, PDF, etc.
|
||||||
}
|
if (tabURL.length - tabURL.lastIndexOf('.') <= 5) {
|
||||||
document.body.classList.add('unreachable');
|
info.appendChild($create('p', t('InaccessibleFileHint')));
|
||||||
document.body.insertBefore(info, document.body.firstChild);
|
}
|
||||||
});
|
document.body.classList.add('unreachable');
|
||||||
});
|
document.body.insertBefore(info, document.body.firstChild);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param {chrome.webNavigation.GetAllFrameResultDetails} frame */
|
/** @param {chrome.webNavigation.GetAllFrameResultDetails} frame */
|
||||||
|
@ -439,6 +439,7 @@ function createStyleElement(style) {
|
||||||
const sel = 'span.frame-url';
|
const sel = 'span.frame-url';
|
||||||
const frameEl = $(sel, entry) || styleName.insertBefore($create(sel), styleName.lastChild);
|
const frameEl = $(sel, entry) || styleName.insertBefore($create(sel), styleName.lastChild);
|
||||||
frameEl.title = frameUrl;
|
frameEl.title = frameUrl;
|
||||||
|
frameEl.onmousedown = handleEvent.maybeEdit;
|
||||||
}
|
}
|
||||||
entry.classList.toggle('frame', Boolean(frameUrl));
|
entry.classList.toggle('frame', Boolean(frameUrl));
|
||||||
|
|
||||||
|
@ -626,7 +627,8 @@ Object.assign(handleEvent, {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// open an editor on middleclick
|
// open an editor on middleclick
|
||||||
if (event.target.matches('.entry, .style-name, .style-edit-link')) {
|
const el = event.target;
|
||||||
|
if (el.matches('.entry, .style-edit-link') || el.closest('.style-name')) {
|
||||||
this.onmouseup = () => $('.style-edit-link', this).click();
|
this.onmouseup = () => $('.style-edit-link', this).click();
|
||||||
this.oncontextmenu = event => event.preventDefault();
|
this.oncontextmenu = event => event.preventDefault();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
@ -634,7 +636,7 @@ Object.assign(handleEvent, {
|
||||||
}
|
}
|
||||||
// prevent the popup being opened in a background tab
|
// prevent the popup being opened in a background tab
|
||||||
// when an irrelevant link was accidentally clicked
|
// when an irrelevant link was accidentally clicked
|
||||||
if (event.target.closest('a')) {
|
if (el.closest('a')) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user