popup: "configure" opens USO page and expands the settings area
This commit is contained in:
parent
30fa9671c8
commit
0a865318a4
|
@ -13,9 +13,15 @@
|
||||||
document.addEventListener('stylish' + type + browser, onClick)));
|
document.addEventListener('stylish' + type + browser, onClick)));
|
||||||
|
|
||||||
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||||
|
switch (msg.method) {
|
||||||
|
case 'ping':
|
||||||
// orphaned content script check
|
// orphaned content script check
|
||||||
if (msg.method === 'ping') {
|
|
||||||
sendResponse(true);
|
sendResponse(true);
|
||||||
|
break;
|
||||||
|
case 'openSettings':
|
||||||
|
openSettings();
|
||||||
|
sendResponse(true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -260,6 +266,26 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function openSettings(countdown = 10e3) {
|
||||||
|
const button = document.querySelector('.advanced_button') ||
|
||||||
|
document.evaluate('//*[not(*) and contains(., "Advanced Style Settings")]',
|
||||||
|
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
|
||||||
|
if (button) {
|
||||||
|
button.dispatchEvent(new MouseEvent('click', {bubbles: true}));
|
||||||
|
setTimeout(function pollArea(countdown = 2000) {
|
||||||
|
const area = document.getElementById('advancedsettings_area');
|
||||||
|
if (area || countdown < 0) {
|
||||||
|
(area || button).scrollIntoView({behavior: 'smooth', block: area ? 'end' : 'center'});
|
||||||
|
} else {
|
||||||
|
setTimeout(pollArea, 100, countdown - 100);
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
} else if (countdown > 0) {
|
||||||
|
setTimeout(openSettings, 100, countdown - 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function orphanCheck() {
|
function orphanCheck() {
|
||||||
if (chrome.i18n && chrome.i18n.getUILanguage()) {
|
if (chrome.i18n && chrome.i18n.getUILanguage()) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -213,7 +213,7 @@ function getTabRealURL(tab) {
|
||||||
|
|
||||||
// opens a tab or activates the already opened one,
|
// opens a tab or activates the already opened one,
|
||||||
// reuses the New Tab page if it's focused now
|
// reuses the New Tab page if it's focused now
|
||||||
function openURL({url, index, openerTabId, currentWindow = true}) {
|
function openURL({url, index, active, currentWindow = true}) {
|
||||||
if (!url.includes('://')) {
|
if (!url.includes('://')) {
|
||||||
url = chrome.runtime.getURL(url);
|
url = chrome.runtime.getURL(url);
|
||||||
}
|
}
|
||||||
|
@ -237,7 +237,7 @@ function openURL({url, index, openerTabId, currentWindow = true}) {
|
||||||
chrome.tabs.update({url}, resolve);
|
chrome.tabs.update({url}, resolve);
|
||||||
} else {
|
} else {
|
||||||
// create a new tab
|
// create a new tab
|
||||||
const options = {url, index};
|
const options = {url, index, active};
|
||||||
// FF57+ supports openerTabId, but not in Android (indicated by the absence of chrome.windows)
|
// FF57+ supports openerTabId, but not in Android (indicated by the absence of chrome.windows)
|
||||||
if (tab && (!FIREFOX || FIREFOX >= 57 && chrome.windows) && !chromeInIncognito) {
|
if (tab && (!FIREFOX || FIREFOX >= 57 && chrome.windows) && !chromeInIncognito) {
|
||||||
options.openerTabId = tab.id;
|
options.openerTabId = tab.id;
|
||||||
|
|
|
@ -277,6 +277,7 @@ function createStyleElement({
|
||||||
config.href = style.url;
|
config.href = style.url;
|
||||||
config.target = '_blank';
|
config.target = '_blank';
|
||||||
config.title = t('configureStyleOnHomepage');
|
config.title = t('configureStyleOnHomepage');
|
||||||
|
config.dataset.sendMessage = JSON.stringify({method: 'openSettings'});
|
||||||
$('use', config).attributes['xlink:href'].nodeValue = '#svg-icon-config-uso';
|
$('use', config).attributes['xlink:href'].nodeValue = '#svg-icon-config-uso';
|
||||||
} else if (!style.usercssData || !Object.keys(style.usercssData.vars || {}).length) {
|
} else if (!style.usercssData || !Object.keys(style.usercssData.vars || {}).length) {
|
||||||
config.style.display = 'none';
|
config.style.display = 'none';
|
||||||
|
@ -364,6 +365,8 @@ Object.assign(handleEvent, {
|
||||||
hotkeys.setState(true);
|
hotkeys.setState(true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
handleEvent.openURLandHide.call(this, event);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -418,7 +421,22 @@ Object.assign(handleEvent, {
|
||||||
|
|
||||||
openURLandHide(event) {
|
openURLandHide(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
openURL({url: this.href || this.dataset.href})
|
const el = this;
|
||||||
|
const msg = tryJSONparse(el.dataset.sendMessage);
|
||||||
|
getActiveTab()
|
||||||
|
.then(activeTab => openURL({
|
||||||
|
url: this.href || this.dataset.href,
|
||||||
|
index: activeTab.index + 1,
|
||||||
|
active: false,
|
||||||
|
}))
|
||||||
|
.then(msg && (
|
||||||
|
function poll(tab, t0 = performance.now()) {
|
||||||
|
msg.tabId = tab.id;
|
||||||
|
return sendMessage(msg)
|
||||||
|
.catch(ignoreChromeError)
|
||||||
|
.then(handled => handled || performance.now() - t0 < 200 && poll(tab))
|
||||||
|
.then(() => chrome.tabs.update(tab.id, {active: true}));
|
||||||
|
}))
|
||||||
.then(window.close);
|
.then(window.close);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -366,6 +366,7 @@ window.addEventListener('showStyles:done', function _() {
|
||||||
|
|
||||||
const customizeButton = $('.search-result-customize', entry);
|
const customizeButton = $('.search-result-customize', entry);
|
||||||
customizeButton.dataset.href = searchAPI.BASE_URL + result.url;
|
customizeButton.dataset.href = searchAPI.BASE_URL + result.url;
|
||||||
|
customizeButton.dataset.sendMessage = JSON.stringify({method: 'openSettings'});
|
||||||
customizeButton.classList.remove('hidden');
|
customizeButton.classList.remove('hidden');
|
||||||
customizeButton.onclick = function (event) {
|
customizeButton.onclick = function (event) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user