Spaces:
Runtime error
Runtime error
neon_arch
๐ธ chore: add code to display saved user settings from the cookies on the settings page (#461)
3446820
/** | |
* 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) { | |
let cookie_value = cookie | |
.split(';') | |
.map((item) => item.split('=')) | |
.reduce((acc, [_, v]) => (acc = JSON.parse(v)) && acc, {}) | |
// Loop through all select tags and add their values to the cookie dictionary | |
document.querySelectorAll('select').forEach((select_tag) => { | |
switch (select_tag.name) { | |
case 'themes': | |
select_tag.value = cookie_value['theme'] | |
break | |
case 'colorschemes': | |
select_tag.value = cookie_value['colorscheme'] | |
break | |
case 'animations': | |
select_tag.value = cookie_value['animation'] | |
break | |
case 'safe_search_levels': | |
select_tag.value = cookie_value['safe_search_level'] | |
break | |
} | |
}) | |
let engines = document.querySelectorAll('.engine') | |
let engines_cookie = cookie_value['engines'] | |
if (engines_cookie.length === engines.length) { | |
document.querySelector('.select_all').checked = true | |
engines.forEach((engine_checkbox) => { | |
engine_checkbox.checked = true | |
}) | |
} else { | |
engines.forEach((engines_checkbox) => { | |
engines_checkbox.checked = false | |
}) | |
engines_cookie.forEach((engine_name) => { | |
engines.forEach((engine_checkbox) => { | |
if ( | |
engine_checkbox.parentNode.parentNode.innerText.trim() === | |
engine_name.trim() | |
) { | |
engine_checkbox.checked = true | |
} | |
}) | |
}) | |
} | |
} | |
/** | |
* 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(cookie) | |
} 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, | |
) | |