Initial commit
This commit is contained in:
commit
b37d5417b7
5
data.json
Normal file
5
data.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"instances": [
|
||||||
|
"https://searxng.no-logs.com/search"
|
||||||
|
]
|
||||||
|
}
|
23
index.html
Normal file
23
index.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title></title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="referrer" content="no-referrer">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<style>
|
||||||
|
#info { color: gray; }
|
||||||
|
#info.error { color: red; }
|
||||||
|
</style>
|
||||||
|
<script type="module" src="index.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="search-box">
|
||||||
|
<form id="search">
|
||||||
|
<input name="query" type="text" placeholder="Query">
|
||||||
|
<input type="submit" value="Search">
|
||||||
|
</form>
|
||||||
|
<p id="info"></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
42
index.js
Normal file
42
index.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// Register service worker
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('./sw.js', {
|
||||||
|
type: 'module'
|
||||||
|
})
|
||||||
|
.then(() => console.log('sw ok'))
|
||||||
|
.catch(() => console.log('sw not ok'))
|
||||||
|
}
|
||||||
|
|
||||||
|
var data = {}
|
||||||
|
|
||||||
|
const infoEl = document.getElementById('info')
|
||||||
|
const formEl = document.getElementById('search')
|
||||||
|
|
||||||
|
// Register event listeners
|
||||||
|
formEl.addEventListener('submit', (event) => {
|
||||||
|
if ('instances' in data && data.instances.length > 0) {
|
||||||
|
event.preventDefault()
|
||||||
|
// Random instance
|
||||||
|
const n = Math.floor(Math.random() * data.instances.length)
|
||||||
|
const instanceURL = data.instances[n]
|
||||||
|
// Assign URL
|
||||||
|
const params = new URLSearchParams({
|
||||||
|
q: formEl.query.value
|
||||||
|
})
|
||||||
|
const url = `${instanceURL}?${params.toString()}`
|
||||||
|
location.assign(url)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Fetch data
|
||||||
|
await fetch('./data.json')
|
||||||
|
.then(req => req.json())
|
||||||
|
.then(newData => { data = newData })
|
||||||
|
.then(() => {
|
||||||
|
infoEl.textContent = `${data.instances.length} instances`
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err)
|
||||||
|
infoEl.textContent = err.toString()
|
||||||
|
infoEl.classList.add('error')
|
||||||
|
})
|
30
sw.js
Normal file
30
sw.js
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
const cacheName = 'v1'
|
||||||
|
|
||||||
|
self.addEventListener('install', (event) => {
|
||||||
|
event.waitUntil(
|
||||||
|
caches
|
||||||
|
.open(cacheName)
|
||||||
|
.then(cache => cache.addAll([
|
||||||
|
'.',
|
||||||
|
'./index.html',
|
||||||
|
'./index.js',
|
||||||
|
'./index.css',
|
||||||
|
'./instances.json'
|
||||||
|
]))
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
self.addEventListener('activate', (_event) => {
|
||||||
|
})
|
||||||
|
|
||||||
|
self.addEventListener('fetch', async (event) => {
|
||||||
|
const res = await fetch(event.request)
|
||||||
|
if (!res.ok) {
|
||||||
|
const cachedRes = await caches.match(event.request)
|
||||||
|
if (cachedRes) {
|
||||||
|
event.respondWith(cachedRes)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event.respondWith(res)
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user