Skip to content

Commit ba2e96c

Browse files
committed
update
1 parent 05a00c0 commit ba2e96c

1 file changed

Lines changed: 129 additions & 26 deletions

File tree

‎res/fl.html‎

Lines changed: 129 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<!-- update time 2026/10/06 | version v1.2 -->
2+
<!-- update time 2026/10/10 | version v1.3 -->
33
<html lang="en">
44
<head>
55
<meta charset="UTF-8">
@@ -94,14 +94,114 @@ <h2 class="big-title">Quick Links</h2>
9494
'Yandex': ['https://yandex.com/search?text={a}', 'Search term'],
9595
'DuckDuckGo': ['https://duckduckgo.com/?q={a}', 'Search term'],
9696
'Qwant': ['https://qwant.com/?q={a}', 'Search term'],
97-
'Shodan': ['https://www.shodan.io/search?query={a}', 'Search term']
97+
'Brave': ['https://search.brave.com/search?q={a}', 'Search term'],
98+
'Startpage': ['https://www.startpage.com/sp/search?query={a}', 'Search term'],
99+
'Mojeek': ['https://www.mojeek.com/search?q={a}', 'Search term'],
100+
'Ecosia': ['https://www.ecosia.org/search?q={a}', 'Search term']
101+
},
102+
'Code Search': {
103+
'GitHub Code': ['https://github.com/search?q={a}&type=code', 'Search term'],
104+
'Sourcegraph': ['https://sourcegraph.com/search?q={a}', 'Search term'],
105+
'grep.app': ['https://grep.app/search?q={a}', 'Search term'],
106+
'searchcode': ['https://searchcode.com/?q={a}', 'Search term'],
107+
'Debian Codesearch': ['https://codesearch.debian.net/search?q={a}', 'Search term']
108+
},
109+
'Dev Docs / API': {
110+
'cppreference': ['https://en.cppreference.com/w/index.php?search={a}', 'Search term'],
111+
'MS Learn EN': ['https://learn.microsoft.com/en-us/search/?terms={a}', 'Search term'],
112+
'MS Learn ZH': ['https://learn.microsoft.com/zh-cn/search/?terms={a}', 'Search term'],
113+
'MDN': ['https://developer.mozilla.org/en-US/search?q={a}', 'Search term'],
114+
'Stack Overflow': ['https://stackoverflow.com/search?q={a}', 'Search term'],
115+
'Mankier': ['https://www.mankier.com/search?q={a}', 'Search term'],
116+
'DevDocs': ['https://devdocs.io/#q={a}', 'Search term']
117+
},
118+
'Vulnerability': {
119+
'Exploit-DB': ['https://www.exploit-db.com/search?q={a}', 'Search term'],
120+
'NVD': ['https://nvd.nist.gov/vuln/search/results?query={a}', 'Search term'],
121+
'MITRE CVE': ['https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword={a}', 'Keyword'],
122+
'Sploitus': ['https://sploitus.com/?query={a}', 'Search term']
123+
},
124+
'Threat Intel': {
125+
'VirusTotal': ['https://www.virustotal.com/gui/search/{a}', 'Hash, URL, domain or IP'],
126+
'URLScan': ['https://urlscan.io/search/#{a}', 'Domain, URL or IP'],
127+
'Hybrid Analysis': ['https://www.hybrid-analysis.com/search?query={a}', 'Search term'],
128+
'ThreatFox': ['https://threatfox.abuse.ch/browse.php?search={a}', 'Search term'],
129+
'MalwareBazaar': ['https://bazaar.abuse.ch/browse.php?search={a}', 'Search term'],
130+
'GreyNoise': ['https://viz.greynoise.io/query/?gnql={a}', 'GNQL query'],
131+
'AlienVault OTX': ['https://otx.alienvault.com/browse/?q={a}', 'Search term']
132+
},
133+
'Asset / Network': {
134+
'Shodan': ['https://www.shodan.io/search?query={a}', 'Search term'],
135+
'Censys': ['https://search.censys.io/search?resource=hosts&q={a}', 'Search term'],
136+
'ZoomEye': ['https://www.zoomeye.org/searchResult?q={a}', 'Search term'],
137+
'crt.sh': ['https://crt.sh/?q={a}', 'Domain or keyword'],
138+
'BGP.HE.Net': ['https://bgp.he.net/search?search%5Bsearch%5D={a}&commit=Search', 'IP, ASN or domain'],
139+
'ICANN Lookup': ['https://lookup.icann.org/en/lookup?name={a}', 'Domain name'],
140+
'ipinfo': ['https://ipinfo.io/{a}', 'IP address'],
141+
'SecurityTrails': ['https://securitytrails.com/domain/{a}', 'Domain name'],
142+
'PublicWWW': ['https://publicwww.com/websites/{a}/', 'Source code snippet']
143+
},
144+
'Package Search': {
145+
'repology': ['https://repology.org/projects/?search={a}&maintainer={b}&category={c}&inrepo={d}&notinrepo={e}&repos={f}&families={g}&repos_newest={h}&families_newest={i}', 'Package name', 'Maintainer', 'Category', 'In repository', 'Missing in repository', 'Repository', 'Repository family', 'Repositories with newest version', 'Families with newest version'],
146+
'msys2': ['https://packages.msys2.org/search?q={a}&t=pkg', 'Search term'],
147+
'pkgs.org': ['https://pkgs.org/search/?q={a}', 'Package name'],
148+
'AUR': ['https://aur.archlinux.org/packages?K={a}', 'Package name'],
149+
'Arch': ['https://archlinux.org/packages/?q={a}', 'Package name'],
150+
'Debian': ['https://packages.debian.org/search?keywords={a}', 'Package name'],
151+
'Ubuntu': ['https://packages.ubuntu.com/search?keywords={a}', 'Package name']
152+
},
153+
'Language Packages': {
154+
'PyPI': ['https://pypi.org/search/?q={a}', 'Package name'],
155+
'npm': ['https://www.npmjs.com/search?q={a}', 'Package name'],
156+
'crates.io': ['https://crates.io/search?q={a}', 'Package name'],
157+
'NuGet': ['https://www.nuget.org/packages?q={a}', 'Package name'],
158+
'Go Packages': ['https://pkg.go.dev/search?q={a}', 'Package name'],
159+
'Chocolatey': ['https://community.chocolatey.org/packages?q={a}', 'Package name']
160+
},
161+
'Academic / Paper Search': {
162+
'Google Scholar': ['https://scholar.google.com/scholar?q={a}', 'Search term'],
163+
'Semantic Scholar': ['https://www.semanticscholar.org/search?q={a}', 'Search term'],
164+
'DBLP': ['https://dblp.org/search?q={a}', 'Search term'],
165+
'Baidu Xueshu': ['https://xueshu.baidu.com/s?wd={a}', 'Search term'],
166+
'Wanfang': ['https://s.wanfangdata.com.cn/paper?q={a}', 'Search term'],
167+
'PubMed': ['https://pubmed.ncbi.nlm.nih.gov/?term={a}', 'Search term'],
168+
'Arxiv': ['https://arxiv.org/search/?query={a}', 'Search term'],
169+
'Scielo': ['https://search.scielo.org/?q={a}', 'Search term'],
170+
'Scirp': ['https://www.scirp.org/journal/articles.aspx?searchcode={a}', 'Search term']
171+
},
172+
'Open Access / Books': {
173+
'Open Library': ['https://openlibrary.org/search?q={a}', 'Search term'],
174+
'CORE': ['https://core.ac.uk/search?q={a}', 'Search term'],
175+
'Papers with Code': ['https://paperswithcode.com/search?q_meta={a}', 'Search term']
176+
},
177+
'Dictionaries': {
178+
'iCIBA': ['https://www.iciba.com/word?w={a}', 'Word'],
179+
'Wiktionary': ['https://en.wiktionary.org/w/index.php?search={a}', 'Word'],
180+
'Etymonline': ['https://www.etymonline.com/search?q={a}', 'Word'],
181+
'WordNet': ['http://wordnetweb.princeton.edu/perl/webwn?s={a}', 'Word'],
182+
'Urban Dictionary': ['https://www.urbandictionary.com/define.php?term={a}', 'Term'],
183+
'dict.cc': ['https://www.dict.cc/?s={a}', 'Word'],
184+
'Thesaurus': ['https://www.thesaurus.com/browse/{a}', 'Word'],
185+
'Jisho': ['https://jisho.org/search/{a}', 'Japanese word']
186+
},
187+
'Chinese Dictionaries': {
188+
'Youdao': ['https://dict.youdao.com/result?word={a}&lang=en', 'Word'],
189+
'Baidu Hanyu': ['https://hanyu.baidu.com/s?wd={a}&ptype=zici', 'Word'],
190+
'Zdic': ['https://www.zdic.net/search?word={a}', 'Word']
191+
},
192+
'Media / Archive': {
193+
'Internet Archive': ['https://archive.org/search?query={a}', 'Search term'],
194+
'Wayback Machine': ['https://web.archive.org/web/*/{a}', 'URL to look up'],
195+
'TMDB': ['https://www.themoviedb.org/search?query={a}', 'Search term'],
196+
'MusicBrainz': ['https://musicbrainz.org/search?query={a}&type=release', 'Search term'],
197+
'Discogs': ['https://www.discogs.com/search/?q={a}', 'Search term']
98198
},
99199
'Tor Search': {
100200
'TorDex': ['http://tordexu73joywapk2txdr54jed4imqledpcvcuf75qsas2gwdgksvnyd.onion/search?query={a}', 'Search term'],
101201
'OnDex': ['http://ondexcylxxxq6vcc62l3r2m6rypohvvymsvqeadhln5mjo73pf6ksjad.onion?query={a}', 'Search term'],
102202
'TOR.LINK': ['https://tor.link/?q={a}', 'Search term'],
103203
'OnionLand': ['https://onionlandsearchengine.net/search?q={a}', 'Search term']
104-
},
204+
},
105205
'I2P Search': {
106206
'I2P': ['https://i2psearch.com/search?q={a}', 'Search term']
107207
},
@@ -115,20 +215,6 @@ <h2 class="big-title">Quick Links</h2>
115215
'xdcc.rocks': ['https://www.xdcc.rocks/search/?searchword={a}', 'Search term'],
116216
'xdcc-search': ['https://xdcc-search.com/?q={a}', 'Search term']
117217
},
118-
'Package Search': {
119-
'repology': ['https://repology.org/projects/?search={a}&maintainer={b}&category={c}&inrepo={d}&notinrepo={e}&repos={f}&families={g}&repos_newest={h}&families_newest={i}', 'Package name', 'Maintainer', 'Category', 'In repository', 'Missing in repository', 'Repository', 'Repository family', 'Repositories with newest version', 'Families with newest version'],
120-
'msys2': ['https://packages.msys2.org/search?q={a}&t=pkg', 'Search term']
121-
},
122-
'Academic / Paper Search': {
123-
'Scirp': ['https://www.scirp.org/journal/articles.aspx?searchcode={a}', 'Search term'],
124-
'Scielo': ['https://search.scielo.org/?q={a}', 'Search term'],
125-
'Arxiv': ['https://arxiv.org/search/?query={a}', 'Search term']
126-
},
127-
'Dictionaries': {
128-
'iCIBA': ['https://www.iciba.com/word?w={a}', 'Search term'],
129-
'WordNet': ['http://wordnetweb.princeton.edu/perl/webwn?s={a}', 'Search term'],
130-
'Urban Dictionary': ['https://www.urbandictionary.com/define.php?term={a}', 'Search term']
131-
},
132218
'Radio Search': {
133219
'radio-browser Name': ['http://de1.api.radio-browser.info/xml/stations/search?name={a}&order={b}', 'Search term', 'Sort order'],
134220
'radio-browser UUID': ['http://de1.api.radio-browser.info/xml/stations/byuuid?uuids={a}', 'UUID']
@@ -164,7 +250,7 @@ <h2 class="big-title">Quick Links</h2>
164250
'OpenDNS DoH': 'https://doh.opendns.com/dns-query'
165251
},
166252
'MIRROR': {
167-
'Certnet': 'https://mirrors.cernet.edu.cn/'
253+
'Certnet': 'https://mirrors.cernet.edu.cn/'
168254
}
169255
};
170256
const boxEl = document.getElementById('catBoxes');
@@ -212,7 +298,7 @@ <h2 class="big-title">Quick Links</h2>
212298
b.className = 'eng' + (curEng && curEng.name === name && curEng.cat === cat ? ' on' : '');
213299
b.textContent = name;
214300
b.title = e.tpl + (e.phs.length > 1 ? '(Params: ' + e.phs.slice(1).map(p=> p.label).join(' / ') + ')' : '');
215-
b.onclick = ()=>{ curEng = {name, tpl: e.tpl, phs: e.phs, cat}; refresh(); syncUrl(); };
301+
b.onclick = ()=>{ curEng = {name, tpl: e.tpl, phs: e.phs, cat}; refresh(); syncUrl(); focusInput(); };
216302
engs.appendChild(b);
217303
});
218304
box.appendChild(head);
@@ -283,27 +369,45 @@ <h2 class="big-title">Quick Links</h2>
283369
}
284370
function buildUrl(tpl, values){
285371
const hi = tpl.indexOf('#');
286-
const hash = hi < 0 ? '' : tpl.slice(hi);
372+
let hash = hi < 0 ? '' : tpl.slice(hi);
287373
const str = hi < 0 ? tpl : tpl.slice(0, hi);
288374
const qi = str.indexOf('?');
289-
const base = qi < 0 ? str : str.slice(0, qi);
375+
let base = qi < 0 ? str : str.slice(0, qi);
290376
const query = qi < 0 ? '' : str.slice(qi + 1);
377+
const val = name=>{
378+
const v = values[name];
379+
return v === undefined || v === null || String(v).trim() === '' ? null : String(v).trim();
380+
};
381+
const fillQ = s=> s.replace(/\{([^{}]+)\}/g, (m, name)=>{
382+
const v = val(name);
383+
return v === null ? m : encodeURIComponent(v);
384+
});
385+
const fillP = s=> s.replace(/\/?\{([^{}]+)\}/g, (m, name)=>{
386+
const v = val(name);
387+
if(v === null) return '';
388+
const enc = encodeURIComponent(v).replace(/%2F/gi, '/').replace(/%3A/gi, ':');
389+
return m.charAt(0) === '/' ? '/' + enc : enc;
390+
});
291391
const parts = [];
292392
query.split('&').forEach(seg=>{
293393
if(!seg) return;
294-
const filled = seg.replace(/\{([^{}]+)\}/g, (m, name)=>{
295-
const v = values[name];
296-
return v === undefined || v === null || String(v).trim() === '' ? m : encodeURIComponent(String(v).trim());
297-
});
394+
const filled = fillQ(seg);
298395
if(filled.indexOf('{') >= 0) return;
299396
parts.push(filled);
300397
});
398+
base = fillP(base);
399+
hash = fillP(hash);
301400
return base + (parts.length > 0 ? '?' + parts.join('&') : '') + hash;
302401
}
303402
function jumpTo(url){
304403
if(!url) return;
305404
location.assign(url);
306405
}
406+
function focusInput(){
407+
if(window.matchMedia && !window.matchMedia('(hover: hover)').matches) return;
408+
q.focus();
409+
q.select();
410+
}
307411
let urlTimer = 0;
308412
function syncUrl(){
309413
clearTimeout(urlTimer);
@@ -340,7 +444,6 @@ <h2 class="big-title">Quick Links</h2>
340444
curEng = {name: first, tpl: e0.tpl, phs: e0.phs, cat: firstCat};
341445
}
342446
}
343-
renderBoxes();
344447
renderLinks();
345448
refresh();
346449
const urlParams = new URLSearchParams(location.search);

0 commit comments

Comments
 (0)