JSTAR-Tab/js/search.js
2025-03-23 23:34:00 +05:00

80 lines
2.6 KiB
JavaScript

const search = {
engines: {
google: {
url: 'https://www.google.com/search?q=',
icon: 'https://www.google.com/s2/favicons?domain=google.com&sz=32',
name: 'Google'
},
bing: {
url: 'https://www.bing.com/search?q=',
icon: 'https://www.google.com/s2/favicons?domain=bing.com&sz=32',
name: 'Bing'
},
duckduckgo: {
url: 'https://duckduckgo.com/?q=',
icon: 'https://www.google.com/s2/favicons?domain=duckduckgo.com&sz=32',
name: 'DuckDuckGo'
},
brave: {
url: 'https://search.brave.com/search?q=',
icon: 'https://www.google.com/s2/favicons?domain=brave.com&sz=32',
name: 'Brave'
},
qwant: {
url: 'https://www.qwant.com/?q=',
icon: 'https://www.google.com/s2/favicons?domain=qwant.com&sz=32',
name: 'Qwant'
},
searxng: {
url: 'https://searx.be/search?q=',
icon: 'https://www.google.com/s2/favicons?domain=searx.be&sz=32',
name: 'SearXNG'
}
},
init: () => {
const searchBar = document.getElementById('search-bar');
const searchButton = document.getElementById('search-button');
searchBar.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
search.perform();
}
});
searchButton.addEventListener('click', search.perform);
document.addEventListener('keydown', (e) => {
if (e.key === '/' &&
!['INPUT', 'TEXTAREA'].includes(document.activeElement.tagName) &&
window.getSelection().toString() === '') {
e.preventDefault();
searchBar.focus();
}
});
const searchEngine = Storage.get('searchEngine') || 'google';
search.updateSearchEngineIcon(searchEngine);
},
updateSearchEngineIcon(engine) {
const searchIcon = document.querySelector('#search-container .search-icon img');
if (!searchIcon) return;
searchIcon.src = this.engines[engine].icon;
},
perform: () => {
const searchBar = document.getElementById('search-bar');
const query = searchBar.value.trim();
const engine = Storage.get('searchEngine') || 'google';
if (query) {
const searchUrl = search.engines[engine].url + encodeURIComponent(query);
window.location.href = searchUrl;
}
}
};
document.addEventListener('DOMContentLoaded', () => {
search.init();
});