patch buggy USO site to use actual style settings
This commit is contained in:
parent
cd84a33a53
commit
7a4f499e0d
76
install.js
76
install.js
|
@ -19,6 +19,78 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO: remove the following statement when USO is fixed
|
||||||
|
document.documentElement.appendChild(document.createElement('script')).text = '(' +
|
||||||
|
function() {
|
||||||
|
let settings;
|
||||||
|
document.addEventListener('stylusFixBuggyUSOsettings', function _({detail}) {
|
||||||
|
document.removeEventListener('stylusFixBuggyUSOsettings', _);
|
||||||
|
settings = /\?/.test(detail) && new URLSearchParams(new URL(detail).search);
|
||||||
|
});
|
||||||
|
const originalResponseJson = Response.prototype.json;
|
||||||
|
Response.prototype.json = function(...args) {
|
||||||
|
return originalResponseJson.call(this, ...args).then(json => {
|
||||||
|
Response.prototype.json = originalResponseJson;
|
||||||
|
if (!settings || typeof ((json || {}).style_settings || {}).every != 'function') {
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
const images = new Map();
|
||||||
|
for (const jsonSetting of json.style_settings) {
|
||||||
|
let value = settings.get('ik-' + jsonSetting.install_key);
|
||||||
|
if (!value
|
||||||
|
|| !jsonSetting.style_setting_options
|
||||||
|
|| !jsonSetting.style_setting_options[0]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (value.startsWith('ik-')) {
|
||||||
|
value = value.replace(/^ik-/, '');
|
||||||
|
const defaultItem = jsonSetting.style_setting_options.find(item => item.default);
|
||||||
|
if (!defaultItem || defaultItem.install_key != value) {
|
||||||
|
if (defaultItem) {
|
||||||
|
defaultItem.default = false;
|
||||||
|
}
|
||||||
|
jsonSetting.style_setting_options.some(item => {
|
||||||
|
if (item.install_key == value) {
|
||||||
|
item.default = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (jsonSetting.setting_type == 'image') {
|
||||||
|
jsonSetting.style_setting_options.some(item => {
|
||||||
|
if (item.default) {
|
||||||
|
item.default = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
images.set(jsonSetting.install_key, value);
|
||||||
|
} else {
|
||||||
|
const item = jsonSetting.style_setting_options[0];
|
||||||
|
if (item.value !== value && item.install_key == 'placeholder') {
|
||||||
|
item.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (images.size) {
|
||||||
|
new MutationObserver((_, observer) => {
|
||||||
|
if (!document.getElementById('style-settings')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
observer.disconnect();
|
||||||
|
for (const [name, url] of images.entries()) {
|
||||||
|
const elRadio = document.querySelector(`input[name="ik-${name}"][value="user-url"]`);
|
||||||
|
const elUrl = elRadio && document.getElementById(elRadio.id.replace('url-choice', 'user-url'));
|
||||||
|
if (elUrl) {
|
||||||
|
elUrl.value = url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).observe(document, {childList: true, subtree: true});
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
} + ')()';
|
||||||
|
|
||||||
new MutationObserver((mutations, observer) => {
|
new MutationObserver((mutations, observer) => {
|
||||||
if (document.body) {
|
if (document.body) {
|
||||||
observer.disconnect();
|
observer.disconnect();
|
||||||
|
@ -46,6 +118,10 @@ function getStyleURL () {
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkUpdatability([installedStyle]) {
|
function checkUpdatability([installedStyle]) {
|
||||||
|
// TODO: remove the following statement when USO is fixed
|
||||||
|
document.dispatchEvent(new CustomEvent('stylusFixBuggyUSOsettings', {
|
||||||
|
detail: installedStyle && installedStyle.updateUrl,
|
||||||
|
}));
|
||||||
if (!installedStyle) {
|
if (!installedStyle) {
|
||||||
sendEvent('styleCanBeInstalledChrome');
|
sendEvent('styleCanBeInstalledChrome');
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user