Skip to content

Commit 3ef8399

Browse files
committed
Update
1 parent 5fed5ca commit 3ef8399

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

redirect-searxng-on-failure.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// @name Redirect SearXNG On Failure
33
// @description Redirect to a random SearXNG instance in case of error and empty result
44
// @icon https://www.google.com/s2/favicons?sz=64&domain=searx.space
5-
// @version 0.2
5+
// @version 0.3
66
// @downloadURL https://userscripts.codonaft.com/redirect-searxng-on-failure.js
77
// ==/UserScript==
88

@@ -11,12 +11,12 @@
1111

1212
if (performance.getEntriesByType('navigation')[0]?.responseStatus !== 200) return;
1313
const b = document.body;
14-
if (!document.head.querySelector('link[type="application/opensearchdescription+xml"]')?.title?.includes('SearXNG') && !b.querySelector('a[href="https://searx.space"]')?.textContent?.includes('Public instances')) return;
14+
if (!document.head.querySelector('link[type="application/opensearchdescription+xml"]')?.title?.toLowerCase().includes('searx') && ![...b.querySelectorAll('a[href="https://searx.space"]')].find(i => i.textContent?.includes('Public instances'))) return;
1515

1616
const hasResults = (b.querySelector('td.response-time') || !b.querySelector('td.response-error')) && !b.querySelector('div.dialog-error-block')?.innerText.includes('No results were found');
1717
if (hasResults) return;
1818

19-
console.log('SearXNG: no results');
19+
console.log('no SearXNG results');
2020
const url = new URL(window.location.href);
2121
if (url.hostname.endsWith('.onion')) {
2222
url.host = 'codonaftbvv4j5k7nsrdivbdblycqrng5ls2qkng6lm77svepqjyxgid.onion';
@@ -30,6 +30,27 @@
3030
}
3131
url.pathname = '/searxng';
3232
url.searchParams.set('fast', '0');
33+
34+
const postRequest = !url.searchParams.has('q');
35+
if (postRequest) {
36+
console.log('post request');
37+
const query = b.querySelector('input#q')?.value;
38+
if (!query) {
39+
console.log('no query found');
40+
return;
41+
}
42+
url.searchParams.set('q', query);
43+
44+
const categories = [...b.querySelectorAll('div#categories button.selected')];
45+
if (categories.length > 0) {
46+
url.searchParams.set('categories', categories
47+
.map(i => i.name.split('_')[1])
48+
.filter(i => i)
49+
.join(',')
50+
);
51+
}
52+
}
53+
3354
const params = url.searchParams.toString();
3455
url.search = '';
3556
window.location.replace(`${url.toString()}#${params}`);

0 commit comments

Comments
 (0)