inital no-js frontend
This commit is contained in:
parent
38f04320f0
commit
253de6ff13
17 changed files with 13 additions and 488 deletions
|
@ -1,61 +0,0 @@
|
|||
/**
|
||||
* This functions gets the saved cookies if it is present on the user's machine If it
|
||||
* is available then it is parsed and converted to an object which is then used to
|
||||
* retrieve the preferences that the user had selected previously and is then loaded
|
||||
* and used for displaying the user provided settings by setting them as the selected
|
||||
* options in the settings page.
|
||||
*
|
||||
* @function
|
||||
* @param {string} cookie - It takes the client settings cookie as a string.
|
||||
* @returns {void}
|
||||
*/
|
||||
function setClientSettingsOnPage(cookie) {
|
||||
// Loop through all select tags and add their values to the cookie dictionary
|
||||
let engines = document.querySelectorAll('.engine')
|
||||
|
||||
document.querySelector('.select_all').checked = true
|
||||
|
||||
engines.forEach((engine) => {
|
||||
engine.checked = cookie[engine.parentNode.parentNode.innerText.trim()];
|
||||
if (!engine.checked) {
|
||||
document.querySelector('.select_all').checked = false
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is executed when any page on the website finishes loading and
|
||||
* this function retrieves the cookies if it is present on the user's machine.
|
||||
* If it is available then the saved cookies is display in the cookies tab
|
||||
* otherwise an appropriate message is displayed if it is not available.
|
||||
*
|
||||
* @function
|
||||
* @listens DOMContentLoaded
|
||||
* @returns {void}
|
||||
*/
|
||||
document.addEventListener(
|
||||
'DOMContentLoaded',
|
||||
() => {
|
||||
try {
|
||||
// Decode the cookie value
|
||||
let cookie = decodeURIComponent(document.cookie)
|
||||
// Set the value of the input field to the decoded cookie value if it is not empty
|
||||
// Otherwise, display a message indicating that no cookies have been saved on the user's system
|
||||
if (cookie.length) {
|
||||
document.querySelector('.cookies input').value = cookie
|
||||
// This function displays the user provided settings on the settings page.
|
||||
setClientSettingsOnPage(JSON.parse(cookie.replace("appCookie=", "")))
|
||||
} else {
|
||||
document.querySelector('.cookies input').value =
|
||||
'No cookies have been saved on your system'
|
||||
}
|
||||
} catch (error) {
|
||||
// If there is an error decoding the cookie, log the error to the console
|
||||
// and display an error message in the input field
|
||||
console.error('Error decoding cookie:', error)
|
||||
document.querySelector('.cookies input').value = 'Error decoding cookie'
|
||||
}
|
||||
},
|
||||
false,
|
||||
)
|
|
@ -1,7 +0,0 @@
|
|||
/**
|
||||
* This function provides the ability for the button to toggle the dropdown error-box
|
||||
* in the search page.
|
||||
*/
|
||||
function toggleErrorBox() {
|
||||
document.querySelector('.dropdown_error_box').classList.toggle('show')
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
/**
|
||||
* Selects the input element for the search box
|
||||
* @type {HTMLInputElement}
|
||||
*/
|
||||
const searchBox = document.querySelector('input')
|
||||
|
||||
/**
|
||||
* Redirects the user to the search results page with the query parameter
|
||||
*/
|
||||
function searchWeb() {
|
||||
const query = searchBox.value.trim()
|
||||
try {
|
||||
let safeSearchLevel = document.querySelector('.search_options select').value
|
||||
if (query) {
|
||||
window.location.href = `search?q=${encodeURIComponent(
|
||||
query,
|
||||
)}&safesearch=${encodeURIComponent(safeSearchLevel)}`
|
||||
}
|
||||
} catch (error) {
|
||||
if (query) {
|
||||
window.location.href = `search?q=${encodeURIComponent(query)}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens for the 'Enter' key press event on the search box and calls the searchWeb function
|
||||
* @param {KeyboardEvent} e - The keyboard event object
|
||||
*/
|
||||
searchBox.addEventListener('keyup', (e) => {
|
||||
if (e.key === 'Enter') {
|
||||
searchWeb()
|
||||
}
|
||||
})
|
|
@ -1,39 +0,0 @@
|
|||
/**
|
||||
* Navigates to the next page by incrementing the current page number in the URL query string.
|
||||
* @returns {void}
|
||||
*/
|
||||
function navigate_forward() {
|
||||
let url = new URL(window.location);
|
||||
let searchParams = url.searchParams;
|
||||
|
||||
let q = searchParams.get('q');
|
||||
let page = parseInt(searchParams.get('page'));
|
||||
|
||||
if (isNaN(page)) {
|
||||
page = 1;
|
||||
} else {
|
||||
page++;
|
||||
}
|
||||
|
||||
window.location.href = `${url.origin}${url.pathname}?q=${encodeURIComponent(q)}&page=${page}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the previous page by decrementing the current page number in the URL query string.
|
||||
* @returns {void}
|
||||
*/
|
||||
function navigate_backward() {
|
||||
let url = new URL(window.location);
|
||||
let searchParams = url.searchParams;
|
||||
|
||||
let q = searchParams.get('q');
|
||||
let page = parseInt(searchParams.get('page'));
|
||||
|
||||
if (isNaN(page)) {
|
||||
page = 0;
|
||||
} else if (page > 0) {
|
||||
page--;
|
||||
}
|
||||
|
||||
window.location.href = `${url.origin}${url.pathname}?q=${encodeURIComponent(q)}&page=${page}`;
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
document.addEventListener(
|
||||
'DOMContentLoaded',
|
||||
() => {
|
||||
let url = new URL(window.location)
|
||||
let searchParams = url.searchParams
|
||||
|
||||
let safeSearchLevel = searchParams.get('safesearch')
|
||||
|
||||
if (
|
||||
safeSearchLevel >= 0 &&
|
||||
safeSearchLevel <= 2 &&
|
||||
safeSearchLevel !== null
|
||||
) {
|
||||
document.querySelector('.search_options select').value = safeSearchLevel
|
||||
}
|
||||
},
|
||||
false,
|
||||
)
|
|
@ -1,66 +0,0 @@
|
|||
/**
|
||||
* This function handles the toggling of selections of all upstream search engines
|
||||
* options in the settings page under the tab engines.
|
||||
*/
|
||||
function toggleAllSelection() {
|
||||
document
|
||||
.querySelectorAll('.engine')
|
||||
.forEach(
|
||||
(engine_checkbox) =>
|
||||
(engine_checkbox.checked =
|
||||
document.querySelector('.select_all').checked),
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* This function adds the functionality to sidebar buttons to only show settings
|
||||
* related to that tab.
|
||||
* @param {HTMLElement} current_tab - The current tab that was clicked.
|
||||
*/
|
||||
function setActiveTab(current_tab) {
|
||||
// Remove the active class from all tabs and buttons
|
||||
document
|
||||
.querySelectorAll('.tab')
|
||||
.forEach((tab) => tab.classList.remove('active'))
|
||||
document
|
||||
.querySelectorAll('.btn')
|
||||
.forEach((tab) => tab.classList.remove('active'))
|
||||
|
||||
// Add the active class to the current tab and its corresponding settings
|
||||
current_tab.classList.add('active')
|
||||
document
|
||||
.querySelector(`.${current_tab.innerText.toLowerCase().replace(' ', '_')}`)
|
||||
.classList.add('active')
|
||||
}
|
||||
|
||||
/**
|
||||
* This function adds the functionality to save all the user selected preferences
|
||||
* to be saved in a cookie on the users machine.
|
||||
*/
|
||||
function setClientSettings() {
|
||||
// Create an object to store the user's preferences
|
||||
let cookie_dictionary = new Object()
|
||||
|
||||
document.querySelectorAll('.engine').forEach((engine_checkbox) => {
|
||||
cookie_dictionary[engine_checkbox.parentNode.parentNode.innerText.trim()] = engine_checkbox.checked
|
||||
})
|
||||
|
||||
// Set the expiration date for the cookie to 1 year from the current date
|
||||
let expiration_date = new Date()
|
||||
expiration_date.setFullYear(expiration_date.getFullYear() + 1)
|
||||
|
||||
// Save the cookie to the user's machine
|
||||
document.cookie = `appCookie=${JSON.stringify(
|
||||
cookie_dictionary,
|
||||
)}; expires=${expiration_date.toUTCString()}`
|
||||
|
||||
// Display a success message to the user
|
||||
document.querySelector('.message').innerText =
|
||||
'✅ The settings have been saved sucessfully!!'
|
||||
|
||||
// Clear the success message after 10 seconds
|
||||
setTimeout(() => {
|
||||
document.querySelector('.message').innerText = ''
|
||||
}, 10000)
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue