From caf0bd78cbf8ec4f202b2f311252ea58c49836d5 Mon Sep 17 00:00:00 2001 From: tophf Date: Thu, 12 Aug 2021 09:49:32 +0300 Subject: [PATCH] update USO-archive urls --- background/update-manager.js | 2 +- background/usercss-install-helper.js | 5 ++--- js/toolbox.js | 13 ++++++----- manage/render.js | 2 +- popup/search.js | 33 +++++++++++++++++++++++----- 5 files changed, 39 insertions(+), 16 deletions(-) diff --git a/background/update-manager.js b/background/update-manager.js index 2ef3a357..023006ef 100644 --- a/background/update-manager.js +++ b/background/update-manager.js @@ -277,7 +277,7 @@ const updateMan = (() => { } function getDateFromVer(style) { - const m = style.updateUrl.startsWith(URLS.usoArchiveRaw) && + const m = URLS.extractUsoArchiveId(style.updateUrl) && style.usercssData.version.match(RX_DATE2VER); if (m) { m[2]--; // month is 0-based in `Date` constructor diff --git a/background/usercss-install-helper.js b/background/usercss-install-helper.js index 20e75536..a51af3a5 100644 --- a/background/usercss-install-helper.js +++ b/background/usercss-install-helper.js @@ -35,10 +35,9 @@ bgReady.all.then(() => { chrome.webRequest.onBeforeSendHeaders.addListener(maybeInstallFromDistro, { urls: [ - URLS.usoArchiveRaw + 'usercss/*.user.css', URLS.usw + 'api/style/*.user.css', - '*://greasyfork.org/scripts/*/code/*.user.css', - '*://sleazyfork.org/scripts/*/code/*.user.css', + ...URLS.usoArchiveRaw.map(s => s + 'usercss/*.user.css'), + ...['greasy', 'sleazy'].map(s => `*://${s}fork.org/scripts/*/code/*.user.css`), ...[].concat( ...Object.entries(maybeDistro) .map(([host, {glob}]) => makeUsercssGlobs(host, glob))), diff --git a/js/toolbox.js b/js/toolbox.js index 55f5422b..dc3ddbb7 100644 --- a/js/toolbox.js +++ b/js/toolbox.js @@ -77,20 +77,23 @@ const URLS = { uso: 'https://userstyles.org/', usoJson: 'https://userstyles.org/styles/chrome/', - usoArchive: 'https://33kk.github.io/uso-archive/', - usoArchiveRaw: 'https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/', + usoArchive: 'https://uso.kkx.one/', + usoArchiveRaw: [ + 'https://cdn.jsdelivr.net/gh/33kk/uso-archive@flomaster/data/', + 'https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/', + ], usw: 'https://userstyles.world/', extractUsoArchiveId: url => url && - url.startsWith(URLS.usoArchiveRaw) && + URLS.usoArchiveRaw.some(u => url.startsWith(u)) && Number(url.match(/\/(\d+)\.user\.css|$/)[1]), extractUsoArchiveInstallUrl: url => { const id = URLS.extractUsoArchiveId(url); - return id ? `${URLS.usoArchive}?style=${id}` : ''; + return id ? `${URLS.usoArchive}/style/${id}` : ''; }, - makeUsoArchiveCodeUrl: id => `${URLS.usoArchiveRaw}usercss/${id}.user.css`, + makeUsoArchiveCodeUrl: id => `${URLS.usoArchiveRaw[0]}usercss/${id}.user.css`, extractGreasyForkInstallUrl: url => /^(https:\/\/(?:greasy|sleazy)fork\.org\/scripts\/\d+)[^/]*\/code\/[^/]*\.user\.css$|$/.exec(url)[1], diff --git a/manage/render.js b/manage/render.js index cc0afb6d..1ee013bd 100644 --- a/manage/render.js +++ b/manage/render.js @@ -83,7 +83,7 @@ function createStyleElement({style, name: nameLC}) { parts.homepage.href = parts.homepage.title = style.url || ''; parts.infoVer.textContent = ud ? ud.version : ''; parts.infoVer.dataset.value = ud ? ud.version : ''; - if (`${style.updateUrl}`.startsWith(URLS.usoArchiveRaw)) { + if (URLS.extractUsoArchiveId(style.updateUrl)) { parts.infoVer.dataset.isDate = ''; } else { delete parts.infoVer.dataset.isDate; diff --git a/popup/search.js b/popup/search.js index a474e344..ff87748c 100644 --- a/popup/search.js +++ b/popup/search.js @@ -11,7 +11,7 @@ require(['/popup/search.css']); const RESULT_ID_PREFIX = 'search-result-'; - const INDEX_URL = URLS.usoArchiveRaw + 'search-index.json'; + const INDEX_URL = URLS.usoArchiveRaw[0] + 'search-index.json'; const USW_INDEX_URL = URLS.usw + 'api/index/uso-format'; const USW_ICON = $create('img', { src: `${URLS.usw}favicon.ico`, @@ -57,6 +57,7 @@ const $class = sel => (sel instanceof Node ? sel : $(sel)).classList; const show = sel => $class(sel).remove('hidden'); const hide = sel => $class(sel).add('hidden'); + const makeUsoArchiveAuthorUrl = a => `${URLS.usoArchive}browse/styles/?search=%40${a}`; Object.assign(Events, { /** @@ -77,6 +78,22 @@ calcCategory(); ready = start(); }, + + usoArchive: { + async openAuthor(event) { + event.preventDefault(); + await Events.usoArchive.prefetchAuthorId.call(this); + Events.openURLandHide.call(this, event); + }, + async prefetchAuthorId() { + return this._fetch || (this._fetch = new Promise(async resolve => { + const url = `${URLS.usoArchiveRaw[0]}styles/${this._id}.json`; + const json = await (await fetch(url)).json(); + this.href = makeUsoArchiveAuthorUrl(json.info.author.id); + resolve(); + })); + }, + }, }); function init() { @@ -277,8 +294,7 @@ // title Object.assign($('.search-result-title', entry), { onclick: Events.openURLandHide, - href: isUsw ? `${URLS.usw}style/${id}` : - `${URLS.usoArchive}?category=${category}&style=${id}`, + href: `${isUsw ? URLS.usw : URLS.usoArchive}style/${id}`, }); if (isUsw) $('.search-result-title', entry).prepend(USW_ICON.cloneNode(true)); $('.search-result-title span', entry).textContent = @@ -291,7 +307,7 @@ const auto = URLS.uso + `auto_style_screenshots/${id}${USO_AUTO_PIC_SUFFIX}`; Object.assign(elShot, { src: shotName && !shotName.endsWith(USO_AUTO_PIC_SUFFIX) - ? `${shotArchived ? URLS.usoArchiveRaw : URLS.uso + 'style_'}screenshots/${shotName}` + ? `${shotArchived ? URLS.usoArchiveRaw[0] : URLS.uso + 'style_'}screenshots/${shotName}` : auto, _src: auto, onerror: fixScreenshot, @@ -302,9 +318,14 @@ Object.assign($('[data-type="author"] a', entry), { textContent: author, title: author, - href: isUsw ? `${URLS.usw}user/${eAuthor}` : - `${URLS.usoArchive}?author=${eAuthor.replace(/%20/g, '+')}`, + }, isUsw ? { + href: `${URLS.usw}user/${eAuthor}`, onclick: Events.openURLandHide, + } : { + _id: id, + href: makeUsoArchiveAuthorUrl(eAuthor), + onclick: Events.usoArchive.openAuthor, + onmousedown: Events.usoArchive.prefetchAuthorId, }); // rating $('[data-type="rating"]', entry).dataset.class =