From 34468202f949de4df273012b88dbe4f0d3fcdc5e Mon Sep 17 00:00:00 2001 From: neon_arch Date: Thu, 28 Dec 2023 19:54:28 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20chore:=20add=20code=20to=20displ?= =?UTF-8?q?ay=20saved=20user=20settings=20from=20the=20cookies=20on=20the?= =?UTF-8?q?=20settings=20page=20(#461)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/cookies.js | 70 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/public/static/cookies.js b/public/static/cookies.js index 6b55e02..3525c5b 100644 --- a/public/static/cookies.js +++ b/public/static/cookies.js @@ -1,3 +1,62 @@ +/** + * 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. @@ -16,9 +75,14 @@ document.addEventListener( 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 - document.querySelector('.cookies input').value = cookie.length - ? cookie - : 'No cookies have been saved on your 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