directly install usercss from raw github links
This commit is contained in:
parent
414609297d
commit
820695ebf1
|
@ -1,4 +1,10 @@
|
||||||
/* global API_METHODS openURL download URLS tabManager */
|
/* global
|
||||||
|
API_METHODS
|
||||||
|
download
|
||||||
|
openURL
|
||||||
|
tabManager
|
||||||
|
URLS
|
||||||
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
(() => {
|
(() => {
|
||||||
|
@ -27,16 +33,36 @@
|
||||||
return code;
|
return code;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const maybeDistro = {
|
||||||
|
// https://github.com/StylishThemes/GitHub-Dark/raw/master/github-dark.user.css
|
||||||
|
'github.com': {
|
||||||
|
glob: '/*/raw/*',
|
||||||
|
rx: /^https:\/\/github\.com\/[^/]+\/[^/]+\/raw\/[^/]+\/[^/]+?\.user\.(css|styl)([#?].*)?$/,
|
||||||
|
},
|
||||||
|
// https://raw.githubusercontent.com/StylishThemes/GitHub-Dark/master/github-dark.user.css
|
||||||
|
'raw.githubusercontent.com': {
|
||||||
|
glob: '/*',
|
||||||
|
rx: /^https:\/\/raw\.githubusercontent\.com(\/[^/]+?){4}\.user\.(css|styl)([#?].*)?$/,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
// Faster installation on known distribution sites to avoid flicker of css text
|
// Faster installation on known distribution sites to avoid flicker of css text
|
||||||
chrome.webRequest.onBeforeSendHeaders.addListener(({tabId, url}) => {
|
chrome.webRequest.onBeforeSendHeaders.addListener(({tabId, url}) => {
|
||||||
openInstallerPage(tabId, url, {});
|
const m = maybeDistro[new URL(url).hostname];
|
||||||
// Silently suppressing navigation like it never happened
|
if (!m || m.rx.test(url)) {
|
||||||
return {redirectUrl: 'javascript:void 0'}; // eslint-disable-line no-script-url
|
openInstallerPage(tabId, url, {});
|
||||||
|
// Silently suppress navigation.
|
||||||
|
// Don't redirect to the install URL as it'll flash the text!
|
||||||
|
return {redirectUrl: 'javascript:void 0'}; // eslint-disable-line no-script-url
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
urls: [
|
urls: [
|
||||||
URLS.usoArchiveRaw + 'usercss/*.user.css',
|
URLS.usoArchiveRaw + 'usercss/*.user.css',
|
||||||
'*://greasyfork.org/scripts/*/code/*.user.css',
|
'*://greasyfork.org/scripts/*/code/*.user.css',
|
||||||
'*://sleazyfork.org/scripts/*/code/*.user.css',
|
'*://sleazyfork.org/scripts/*/code/*.user.css',
|
||||||
|
...[].concat(
|
||||||
|
...Object.entries(maybeDistro)
|
||||||
|
.map(([host, {glob}]) => makeUsercssGlobs(host, glob))),
|
||||||
],
|
],
|
||||||
types: ['main_frame'],
|
types: ['main_frame'],
|
||||||
}, ['blocking']);
|
}, ['blocking']);
|
||||||
|
@ -46,7 +72,7 @@
|
||||||
const h = responseHeaders.find(h => h.name.toLowerCase() === 'content-type');
|
const h = responseHeaders.find(h => h.name.toLowerCase() === 'content-type');
|
||||||
tabManager.set(tabId, isContentTypeText.name, h && isContentTypeText(h.value) || undefined);
|
tabManager.set(tabId, isContentTypeText.name, h && isContentTypeText(h.value) || undefined);
|
||||||
}, {
|
}, {
|
||||||
urls: '%css,%css?*,%styl,%styl?*'.replace(/%/g, '*://*/*.user.').split(','),
|
urls: makeUsercssGlobs('*', '/*'),
|
||||||
types: ['main_frame'],
|
types: ['main_frame'],
|
||||||
}, ['responseHeaders']);
|
}, ['responseHeaders']);
|
||||||
|
|
||||||
|
@ -57,7 +83,7 @@
|
||||||
!oldUrl.startsWith(URLS.installUsercss)) {
|
!oldUrl.startsWith(URLS.installUsercss)) {
|
||||||
const inTab = url.startsWith('file:') && Boolean(fileLoader);
|
const inTab = url.startsWith('file:') && Boolean(fileLoader);
|
||||||
const code = await (inTab ? fileLoader : urlLoader)(tabId, url);
|
const code = await (inTab ? fileLoader : urlLoader)(tabId, url);
|
||||||
if (/==userstyle==/i.test(code)) {
|
if (/==userstyle==/i.test(code) && !/^\s*</.test(code)) {
|
||||||
openInstallerPage(tabId, url, {code, inTab});
|
openInstallerPage(tabId, url, {code, inTab});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,4 +106,8 @@
|
||||||
chrome.tabs.update(tabId, {url: newUrl});
|
chrome.tabs.update(tabId, {url: newUrl});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function makeUsercssGlobs(host, path) {
|
||||||
|
return '%css,%css?*,%styl,%styl?*'.replace(/%/g, `*://${host}${path}.user.`).split(',');
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user