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)));
|
||||
|
||||
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||
// orphaned content script check
|
||||
if (msg.method === 'ping') {
|
||||
sendResponse(true);
|
||||
switch (msg.method) {
|
||||
case 'ping':
|
||||
// orphaned content script check
|
||||
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() {
|
||||
if (chrome.i18n && chrome.i18n.getUILanguage()) {
|
||||
return true;
|
||||
|
|
|
@ -213,7 +213,7 @@ function getTabRealURL(tab) {
|
|||
|
||||
// opens a tab or activates the already opened one,
|
||||
// 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('://')) {
|
||||
url = chrome.runtime.getURL(url);
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ function openURL({url, index, openerTabId, currentWindow = true}) {
|
|||
chrome.tabs.update({url}, resolve);
|
||||
} else {
|
||||
// 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)
|
||||
if (tab && (!FIREFOX || FIREFOX >= 57 && chrome.windows) && !chromeInIncognito) {
|
||||
options.openerTabId = tab.id;
|
||||
|
|
|
@ -277,6 +277,7 @@ function createStyleElement({
|
|||
config.href = style.url;
|
||||
config.target = '_blank';
|
||||
config.title = t('configureStyleOnHomepage');
|
||||
config.dataset.sendMessage = JSON.stringify({method: 'openSettings'});
|
||||
$('use', config).attributes['xlink:href'].nodeValue = '#svg-icon-config-uso';
|
||||
} else if (!style.usercssData || !Object.keys(style.usercssData.vars || {}).length) {
|
||||
config.style.display = 'none';
|
||||
|
@ -364,6 +365,8 @@ Object.assign(handleEvent, {
|
|||
hotkeys.setState(true);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
handleEvent.openURLandHide.call(this, event);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -418,7 +421,22 @@ Object.assign(handleEvent, {
|
|||
|
||||
openURLandHide(event) {
|
||||
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);
|
||||
},
|
||||
|
||||
|
|
|
@ -366,6 +366,7 @@ window.addEventListener('showStyles:done', function _() {
|
|||
|
||||
const customizeButton = $('.search-result-customize', entry);
|
||||
customizeButton.dataset.href = searchAPI.BASE_URL + result.url;
|
||||
customizeButton.dataset.sendMessage = JSON.stringify({method: 'openSettings'});
|
||||
customizeButton.classList.remove('hidden');
|
||||
customizeButton.onclick = function (event) {
|
||||
event.stopPropagation();
|
||||
|
|
Loading…
Reference in New Issue
Block a user