/* * UX4G v1.0.0 (https://doc.ux4g.gov.in/) * Copyright 2024 The UX4G Authors * Copyright 2024 NeGD, MeitY. * Licensed under MIT. */ // Exclude Widgets text, links, Images on widgets click function isExcludedElement(element) { // Check if the element is inside #uw-main or has class .uwaw-features__item__name if ( element.closest('#uw-main') || element.classList.contains('uwaw-features__item__name') || element.classList.contains('ux4g-text-spacing') || element.classList.contains('feature-image') || element.classList.contains('icon_global') || element.classList.contains('copyright-text') || element.classList.contains('ux4g-copy') ) { return true; } // Exclude script and svg elements if (element.tagName === 'SCRIPT' || element.tagName === 'DIV' || element.tagName === 'LINK' || element.tagName === 'HTML' || element.tagName === 'HEAD' || element.tagName === 'BODY' || (element.tagName === 'svg' && element.namespaceURI === 'http://www.w3.org/2000/svg')) { return true; } return false; } /***************************************************************************************************/ // ******************************************************************************* // // Bigger & Smaller text script function handleFontSizes(btnId, featureItemId, featureStepsId, tickIconId, increase, btn) { var Storageclick = btn + '-clickCount'; var ButtonStorageClick = btn + '-buttonClicked'; var SizeStorage = btn + '-size'; var clickCount = 0; var addsize = 0; // Check local storage for previous state var localStorageClickCount = localStorage.getItem(Storageclick); if (localStorageClickCount) { clickCount = parseInt(localStorageClickCount, 10); } document.addEventListener('DOMContentLoaded', function() { var featureItem = document.getElementById(featureItemId); var featureSteps = document.getElementById(featureStepsId); var tickIcon = document.getElementById(tickIconId); // Get Storage Items var FontSizeBtnState = JSON.parse(localStorage.getItem(ButtonStorageClick)); var FontSizeClickState = JSON.parse(localStorage.getItem(Storageclick)); // var FontSizeState = localStorage.getItem(SizeStorage); var FontSizeStateBigger = localStorage.getItem('bt-size'); var FontSizeStateSmaller = localStorage.getItem('st-size'); if (FontSizeBtnState) { featureItem.classList.add('feature-active'); featureSteps.classList.add('featureSteps-visible'); tickIcon.style.display = 'inline-block'; // Add step span tags dynamically var StoragestepsHTML = ''; for (var i = 0; i < 4; i++) { StoragestepsHTML += ''; } featureSteps.innerHTML = StoragestepsHTML; if (FontSizeStateBigger != 0) { document.getElementById('btn-small-text').disabled = true; var elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); elements.forEach(function(element) { // Exclude elements inside #uw-main and with class .uwaw-features__item__name if (!isExcludedElement(element)) { var currentSize = window.getComputedStyle(element).fontSize; var newSize = parseFloat(currentSize) + parseFloat(FontSizeStateBigger); element.style.setProperty('font-size', newSize + 'px', 'important'); } }); } if (FontSizeStateSmaller != 0) { document.getElementById('btn-s9').disabled = true; var elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); elements.forEach(function(element) { // Exclude elements inside #uw-main and with class .uwaw-features__item__name if (!isExcludedElement(element)) { var currentSize = window.getComputedStyle(element).fontSize; var newSize = parseFloat(currentSize) - parseFloat(FontSizeStateSmaller); element.style.setProperty('font-size', newSize + 'px', 'important'); } }); } } }); document.getElementById(btnId).addEventListener('click', function() { clickCount++; addsize += 2; var featureItem = document.getElementById(featureItemId); var featureSteps = document.getElementById(featureStepsId); var tickIcon = document.getElementById(tickIconId); if (btnId == "btn-s9") {document.getElementById('btn-small-text').disabled = true; localStorage.setItem('btn-big', true);} if (btnId == "btn-small-text") {document.getElementById('btn-s9').disabled = true; localStorage.setItem('btn-small', true);} // Save current state to local storage localStorage.setItem(Storageclick, clickCount); localStorage.setItem(ButtonStorageClick, true); // Reset on 5th click if (clickCount === 5) { clickCount = 0; addsize = 0; featureItem.classList.remove('feature-active'); featureSteps.classList.remove('featureSteps-visible'); featureSteps.innerHTML = ''; tickIcon.style.display = 'none'; localStorage.setItem(Storageclick, 0); localStorage.setItem(ButtonStorageClick, false); if (btnId == "btn-s9") {document.getElementById('btn-small-text').disabled = false; localStorage.setItem('btn-big', false);} if (btnId == "btn-small-text") {var otherBtn = document.getElementById('btn-s9').disabled = false; localStorage.setItem('btn-small', false);} // Reset font size of all elements resetFontSizes(btn, Storageclick, ButtonStorageClick); return; } // Add feature-active class on the first click if (clickCount === 1) { featureItem.classList.add('feature-active'); featureSteps.classList.add('featureSteps-visible'); localStorage.setItem(Storageclick, clickCount); localStorage.setItem(ButtonStorageClick, true); } // Update data-uw-reader-content attribute document.getElementById(btnId).setAttribute('data-uw-reader-content', clickCount); // Add step span tags dynamically var stepsHTML = ''; for (var i = 0; i < 4; i++) { stepsHTML += ''; } featureSteps.innerHTML = stepsHTML; // Display tick icon until the 4th click if (clickCount < 5) { tickIcon.style.display = 'inline-block'; } adjustFontSizes(increase, btn, addsize); }); } function adjustFontSizes(increase, btn, addsize) { var SizeStorage = btn + '-size'; var elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); elements.forEach(function(element) { // Exclude elements inside #uw-main and with class .uwaw-features__item__name if (!isExcludedElement(element)) { var currentSize = window.getComputedStyle(element).fontSize; var newSize = increase ? parseFloat(currentSize) + 2 : parseFloat(currentSize) - 2; // element.style.fontSize = newSize + 'px'; element.style.setProperty('font-size', newSize + 'px', 'important'); localStorage.setItem(SizeStorage, parseFloat(addsize)); } }); } // Reset font sizes function resetFontSizes() { var elements = document.querySelectorAll('*'); elements.forEach(function(element) { // Reset font-size style for all elements element.style.fontSize = ''; localStorage.setItem('st-size', 0); localStorage.setItem('st-clickCount', 0); localStorage.setItem('st-buttonClicked', false); localStorage.setItem('bt-size', 0); localStorage.setItem('bt-clickCount', 0); localStorage.setItem('bt-buttonClicked', false); localStorage.setItem('btn-big', false); localStorage.setItem('btn-small', false); }); } // Usage handleFontSizes('btn-s9', 'featureItem', 'featureSteps', 'tickIcon', true, 'bt'); // For Bigger Text handleFontSizes('btn-small-text', 'featureItem-st', 'featureSteps-st', 'tickIcon-st', false, 'st'); // For Smaller Text // document.getElementById(btn-s9).addEventListener('click', function() { // }); // ******************************************************************************* // // text spacing let letterSpacing = 0; // Initial letter spacing (auto) let clickCountText = 0; // Counter to track button clicks // Check local storage for previous state var localStorageSpacingCount = localStorage.getItem('ts-clickCount'); if (localStorageSpacingCount) { clickCountText = parseInt(localStorageSpacingCount, 10); } function increaseAndReset() { clickCountText++; var featureItem_ts = document.getElementById('featureItem-ts'); var featureSteps_ts = document.getElementById('featureSteps-ts'); var tickIcon_ts = document.getElementById('tickIcon-ts'); // Save current state to local storage localStorage.setItem('ts-clickCount', clickCountText); localStorage.setItem('ts-buttonClicked',true); // Reset letter spacing after the third click if (clickCountText === 4) { letterSpacing = 0; // Reset letter spacing to auto (0) clickCountText = 0; // Reset click count featureItem_ts.classList.remove('feature-active'); featureSteps_ts.classList.remove('featureSteps-visible'); featureSteps_ts.innerHTML = ''; tickIcon_ts.style.display = 'none'; // Save current state to local storage localStorage.setItem('ts-clickCount', clickCountText); localStorage.setItem('ts-buttonClicked',false); // Reset font size of all elements resetLetterspacing(); return; } // Add feature-active class on the first click if (clickCountText === 1) { featureItem_ts.classList.add('feature-active'); featureSteps_ts.classList.add('featureSteps-visible'); // Save current state to local storage localStorage.setItem('ts-clickCount', clickCountText); localStorage.setItem('ts-buttonClicked',true); } // Add step span tags dynamically var stepsHTML_ts = ''; for (var i = 0; i < 3; i++) { stepsHTML_ts += ''; } featureSteps_ts.innerHTML = stepsHTML_ts; // Display tick icon until the 4th click if (clickCountText < 4) { tickIcon_ts.style.display = 'inline-block'; } letterSpacing += 0.7; // Increase by 5px applyLetterSpacing(); } function decreaseSpacing() { letterSpacing -= 5; // Decrease by 5px applyLetterSpacing(); } function applyLetterSpacing() { const elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); // Select all elements except buttons elements.forEach(function(element) { if (!isExcludedElement(element)) { var currentSize_ts = parseFloat(window.getComputedStyle(element).letterSpacing); currentSize_ts = isNaN(currentSize_ts) ? 0 : currentSize_ts; // Handle cases where lineHeight is 'normal' or an invalid value // Convert to pixels (optional, depending on your needs) currentSize_ts = currentSize_ts + 'px'; var newSize_ts = parseFloat(currentSize_ts) + 0.7; // element.style.letterSpacing = newSize_ts; element.style.setProperty('letter-spacing', newSize_ts + 'px', 'important'); localStorage.setItem('ts-spacing', parseFloat(newSize_ts)); } }); } function resetLetterspacing() { var elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); elements.forEach(function (element) { // Reset font-size style for all elements element.style.letterSpacing = ''; // Reset to default or "normal" localStorage.setItem('ts-spacing', null); localStorage.setItem('ts-clickCount', 0); localStorage.setItem('ts-buttonClicked', false); }); } // Check and restore the state from localStorage on page load document.addEventListener('DOMContentLoaded', function() { var featureItem_ts = document.getElementById('featureItem-ts'); var featureSteps_ts = document.getElementById('featureSteps-ts'); var tickIcon_ts = document.getElementById('tickIcon-ts'); // Restore tickIcon visibility var SpacingState = JSON.parse(localStorage.getItem('ts-buttonClicked')); var SpacingClickState = JSON.parse(localStorage.getItem('ts-clickCount')); var SpacingSizeState = localStorage.getItem('ts-spacing'); console.log( SpacingSizeState); if (SpacingState) { tickIcon_ts.style.display = 'inline-block'; featureItem_ts.classList.add('feature-active'); featureSteps_ts.classList.add('featureSteps-visible'); var stepsHTML_ts = ''; for (var i = 0; i < 3; i++) { stepsHTML_ts += ''; } featureSteps_ts.innerHTML = stepsHTML_ts; const elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); // Select all elements except buttons elements.forEach(function(element) { if (!isExcludedElement(element)) { // Handle cases where lineHeight is 'normal' or an invalid value // Convert to pixels (optional, depending on your needs) // currentSize_ts = SpacingSizeState + 'px'; // element.style.letterSpacing = SpacingSizeState + 'px'; element.style.setProperty('letter-spacing', SpacingSizeState + 'px', 'important'); } }); } }); // ******************************************************************************* // // Line height script var clickCount_lh = 0; // Check local storage for previous state var localStorageClickCount = localStorage.getItem('lh-clickCount'); if (localStorageClickCount) { clickCount_lh = parseInt(localStorageClickCount, 10); } document.getElementById('btn-s12').addEventListener('click', function() { clickCount_lh++; var featureItem_lh = document.getElementById('featureItem-lh'); var featureSteps_lh = document.getElementById('featureSteps-lh'); var tickIcon_lh = document.getElementById('tickIcon-lh'); // Save current state to local storage localStorage.setItem('lh-clickCount', clickCount_lh); localStorage.setItem('lh-buttonClicked', true); // Reset on 5th click if (clickCount_lh === 4) { clickCount_lh = 0; featureItem_lh.classList.remove('feature-active'); featureSteps_lh.classList.remove('featureSteps-visible'); featureSteps_lh.innerHTML = ''; tickIcon_lh.style.display = 'none'; // Reset font size of all elements // Save current state to local storage localStorage.setItem('lh-clickCount', 0); localStorage.setItem('lh-buttonClicked', false); resetlineheight(); return; } // Add feature-active class on the first click if (clickCount_lh === 1) { featureItem_lh.classList.add('feature-active'); featureSteps_lh.classList.add('featureSteps-visible'); localStorage.setItem('lh-clickCount', 1); localStorage.setItem('lh-buttonClicked', true); } // Update data-uw-reader-content attribute document.getElementById('btn-s12').setAttribute('data-uw-reader-content', clickCount_lh); // Add step span tags dynamically var stepsHTML_lh = ''; for (var i = 0; i < 3; i++) { stepsHTML_lh += ''; } featureSteps_lh.innerHTML = stepsHTML_lh; // Display tick icon until the 4th click if (clickCount_lh < 4) { tickIcon_lh.style.display = 'inline-block'; } increaseLineheight(); }); function increaseLineheight() { var elements = document.querySelectorAll('*:not(.uw-widget-custom-trigger, .uw-widget-custom-trigger span)'); elements.forEach(function(element) { // Exclude elements inside #uw-main and with class .uwaw-features__item__name if (!isExcludedElement(element)) { var currentSize_lh = parseFloat(window.getComputedStyle(element).lineHeight); currentSize_lh = isNaN(currentSize_lh) ? 0 : currentSize_lh; // Handle cases where lineHeight is 'normal' or an invalid value // Convert to pixels (optional, depending on your needs) currentSize_lh = currentSize_lh + 'px'; var newSize_lh = parseFloat(currentSize_lh) + 10 + 'px'; localStorage.setItem('lh-height', parseFloat(newSize_lh)); // element.style.lineHeight = newSize_lh; element.style.setProperty('line-height', newSize_lh, 'important'); /*add er*/ } }); } function resetlineheight() { var elements = document.querySelectorAll('*'); elements.forEach(function (element) { // Reset font-size style for all elements element.style.lineHeight = ''; // Reset to default or "normal" localStorage.setItem('lh-height', null); localStorage.setItem('lh-clickCount', 0); localStorage.setItem('lh-buttonClicked', false); }); } // Check and restore the state from localStorage on page load document.addEventListener('DOMContentLoaded', function() { var featureItem_lh = document.getElementById('featureItem-lh'); var featureSteps_lh = document.getElementById('featureSteps-lh'); var tickIcon_lh = document.getElementById('tickIcon-lh'); // Restore tickIcon visibility var LineHeightState = JSON.parse(localStorage.getItem('lh-buttonClicked')); var LineHeightClickState = JSON.parse(localStorage.getItem('lh-clickCount')); var LineHeightSizeState = localStorage.getItem('lh-height'); if (LineHeightState) { tickIcon_lh.style.display = 'inline-block'; featureItem_lh.classList.add('feature-active'); featureSteps_lh.classList.add('featureSteps-visible'); var stepsHTML_lh = ''; for (var i = 0; i < 3; i++) { stepsHTML_lh += ''; } featureSteps_lh.innerHTML = stepsHTML_lh; var elements = document.querySelectorAll('*'); elements.forEach(function(element) { // Exclude elements inside #uw-main and with class .uwaw-features__item__name if (!isExcludedElement(element)) { var currentSize_lh = parseFloat(window.getComputedStyle(element).lineHeight); currentSize_lh = isNaN(currentSize_lh) ? 0 : currentSize_lh; // Handle cases where lineHeight is 'normal' or an invalid value // Convert to pixels (optional, depending on your needs) currentSize_lh = currentSize_lh + 'px'; var newSize_lh = parseFloat(currentSize_lh) + parseFloat(LineHeightSizeState) + 'px'; element.style.setProperty('line-height', newSize_lh, 'important'); } }); } }); /***********************************************************************************************************/ // Hide Images Script // Function to toggle the visibility of images function toggleImages() { document.documentElement.classList.toggle('image-hide'); document.documentElement.id = document.documentElement.classList.contains('image-hide') ? 'imageHideBg' : ''; var images = document.querySelectorAll('img'); // var bgRemove = document.querySelectorAll('*'); var imageVisibilityState = {}; // var bgimageVisibilityState = {}; var tickIcon_ht = document.getElementById('tickIcon-hi'); var featureItem = document.getElementById('featureItem-hi'); // Toggle the visibility of images images.forEach(function (image, index) { if (!isExcludedElement(image)) { image.style.setProperty('visibility', image.style.visibility === 'hidden' ? 'visible' : 'hidden', 'important'); imageVisibilityState[index] = image.style.visibility; } }); // Toggle the visibility of the tickIcon tickIcon_ht.style.display = tickIcon_ht.style.display === 'none' ? 'inline-block' : 'none'; // Toggle the feature-active class on featureItem featureItem.classList.toggle('feature-active'); localStorage.setItem('imageVisibilityState', JSON.stringify(imageVisibilityState)); } // Check and restore the state from localStorage on page load document.addEventListener('DOMContentLoaded', function() { var tickIcon_ht = document.getElementById('tickIcon-hi'); var featureItem = document.getElementById('featureItem-hi'); var images = document.querySelectorAll('img'); // Restore tickIcon visibility var imageVisibilityState = JSON.parse(localStorage.getItem('imageVisibilityState')); if (imageVisibilityState) { images.forEach(function (image, index) { if (!isExcludedElement(image) && imageVisibilityState[index]) { image.style.setProperty('visibility', imageVisibilityState[index], 'important'); } }); } if (imageVisibilityState && imageVisibilityState['1'] === 'hidden') { tickIcon_ht.style.display = 'inline-block'; featureItem.classList.add('feature-active'); document.documentElement.classList.toggle('image-hide'); document.documentElement.id = document.documentElement.classList.contains('image-hide') ? 'imageHideBg' : ''; } }); // ******************************************************************************************************// // light dark mode // Toggle dark mode and save additional state when the button with ID 'dark-btn' is clicked document.getElementById('dark-btn').addEventListener('click', function() { var tickIcon_ht_dark = document.getElementById('tickIcon-ht-dark'); var featureItemDrak = document.getElementById('featureItem-ht-dark'); const checkbox = document.getElementById("checkbox"); const isDarkMode = checkbox.checked; document.body.classList.toggle("dark", isDarkMode); // Toggle the visibility of the tickIcon tickIcon_ht_dark.style.display = tickIcon_ht_dark.style.display === 'none' ? 'inline-block' : 'none'; // Toggle the feature-active class on featureItem featureItemDrak.classList.toggle('feature-active'); // Save the state to local storage localStorage.setItem("darkMode", isDarkMode); }); // Call applyDarkModeOnLoad function on page load document.addEventListener('DOMContentLoaded', function() { var tickIcon_ht_dark = document.getElementById('tickIcon-ht-dark'); var featureItemDrak = document.getElementById('featureItem-ht-dark'); const checkbox = document.getElementById("checkbox"); const isDarkMode = JSON.parse(localStorage.getItem('darkMode')); if (isDarkMode === true) { checkbox.checked = isDarkMode; document.body.classList.add("dark"); tickIcon_ht_dark.style.display = 'inline-block'; featureItemDrak.classList.toggle('feature-active'); } }); /******************************************************************************************************/ //Highlight Links Script // Function to toggle the highlight links feature and save state in local storage // function highlightLinks() { // var tickIcon_ht = document.getElementById('tickIcon-ht'); // var featureItem = document.getElementById('featureItem-ht'); // var HighlightLinkState = []; // // Toggle the visibility of the tickIcon // tickIcon_ht.style.display = tickIcon_ht.style.display === 'none' ? 'inline-block' : 'none'; // // Toggle the feature-active class on featureItem // featureItem.classList.toggle('feature-active'); // // Toggle the highlight of links // var links = document.querySelectorAll('a'); // links.forEach(function (link, index) { // if (!isExcludedElement(link)) { // link.style.setProperty('background', link.style.background ? '' : 'black', 'important'); // link.style.setProperty('color', link.style.color ? '' : 'yellow', 'important'); // // Set HighlightLinkState based on the background color // HighlightLinkState = link.style.getPropertyValue('background') === 'black !important' && link.style.getPropertyValue('color') === 'yellow !important'; // } // }); // // Save state in local storage // localStorage.setItem("highlightLinks", JSON.stringify(HighlightLinkState)); // } // // Check and restore the state from localStorage on page load // document.addEventListener('DOMContentLoaded', function() { // var tickIcon_ht = document.getElementById('tickIcon-ht'); // var featureItem = document.getElementById('featureItem-ht'); // var links = document.querySelectorAll('a'); // // Restore tickIcon visibility // var GetHighlightLinkState = JSON.parse(localStorage.getItem('highlightLinks')); // if (GetHighlightLinkState === true) { // links.forEach(function (link, index) { // if (!isExcludedElement(link) && GetHighlightLinkState) { // link.style.setProperty('background', link.style.background ? '' : '#1C1D1F', 'important'); // link.style.setProperty('color', link.style.color ? '' : 'yellow', 'important'); // } // }); // } // if (GetHighlightLinkState && GetHighlightLinkState === true) { // tickIcon_ht.style.display = 'inline-block'; // featureItem.classList.add('feature-active'); // } // }); function highlightLinks() { var tickIcon_ht = document.getElementById('tickIcon-ht'); var featureItem = document.getElementById('featureItem-ht'); // Toggle the visibility of the tickIcon tickIcon_ht.style.display = tickIcon_ht.style.display === 'none' ? 'inline-block' : 'none'; // Toggle the feature-active class on featureItem featureItem.classList.toggle('feature-active'); // Toggle the highlight of links var links = document.querySelectorAll('a'); var linksHighlighted = false; links.forEach(function (link, index) { if (!isExcludedElement(link)) { link.style.setProperty('background', link.style.background ? '' : 'black', 'important'); link.style.setProperty('color', link.style.color ? '' : 'yellow', 'important'); // Check if link is highlighted if (link.style.getPropertyValue('background') === 'black' && link.style.getPropertyValue('color') === 'yellow') { linksHighlighted = true; } } }); // Save state in local storage var HighlightLinkState = { tickIconVisible: tickIcon_ht.style.display === 'none' ? false : true, featureActive: featureItem.classList.contains('feature-active'), linksHighlighted: linksHighlighted }; localStorage.setItem("highlightLinks", JSON.stringify(HighlightLinkState)); } // Check and restore the state from localStorage on page load document.addEventListener('DOMContentLoaded', function() { var tickIcon_ht = document.getElementById('tickIcon-ht'); var featureItem = document.getElementById('featureItem-ht'); var links = document.querySelectorAll('a'); // Restore the state from local storage var GetHighlightLinkState = JSON.parse(localStorage.getItem('highlightLinks')); if (GetHighlightLinkState) { // Restore tickIcon visibility if (GetHighlightLinkState.tickIconVisible) { tickIcon_ht.style.display = 'inline-block'; } else { tickIcon_ht.style.display = 'none'; } // Restore featureItem class if (GetHighlightLinkState.featureActive) { featureItem.classList.add('feature-active'); } else { featureItem.classList.remove('feature-active'); } // Restore link highlighting if (GetHighlightLinkState.linksHighlighted) { links.forEach(function (link, index) { if (!isExcludedElement(link) && GetHighlightLinkState) { link.style.setProperty('background', '#1C1D1F', 'important'); link.style.setProperty('color', 'yellow', 'important'); } }); } } }); /*******************************************************************************************************/ //Cursor Script // Function to toggle the cursor feature and save state in local storage function toggleCursorFeature() { // Toggle the 'ux4g-bg-cursor' class on the body document.documentElement.classList.toggle('ux4g-bg-cursor'); // Toggle the tick icon var tickIcon_cursor = document.getElementById('tickIcon-cursor'); tickIcon_cursor.style.display = tickIcon_cursor.style.display === 'none' ? 'inline-block' : 'none'; var featureItem = document.getElementById('featureItem-Cursor'); // Toggle the feature-active class on featureItem featureItem.classList.toggle('feature-active'); // Save state in local storage localStorage.setItem("cursorFeatureActive", featureItem.classList.contains('feature-active')); } document.addEventListener('DOMContentLoaded', function() { var GetCursorState = JSON.parse(localStorage.getItem('cursorFeatureActive')); var tickIcon_cursor = document.getElementById('tickIcon-cursor'); var featureItem = document.getElementById('featureItem-Cursor'); if (GetCursorState === true) { document.documentElement.classList.add('ux4g-bg-cursor'); tickIcon_cursor.style.display = 'inline-block'; featureItem.classList.add('feature-active'); } }); /*****************************************************************************************************/ //Dyslexia Font Code function toggleFontFeature() { // Toggle the 'ux4g-font-df' class on the body document.documentElement.classList.toggle('ux4g-font-df'); // Toggle the tick icon var tickIcon_df = document.getElementById('tickIcon-df'); tickIcon_df.style.display = tickIcon_df.style.display === 'none' ? 'inline-block' : 'none'; var featureItem = document.getElementById('featureItem-df'); // Toggle the feature-active class on featureItem featureItem.classList.toggle('feature-active'); // Save state in local storage localStorage.setItem("dyslexia", document.documentElement.classList.contains('ux4g-font-df')); } document.addEventListener('DOMContentLoaded', function() { var GetdyslexiaState = JSON.parse(localStorage.getItem('dyslexia')); var tickIcon_df = document.getElementById('tickIcon-df'); var featureItem_df = document.getElementById('featureItem-df'); if (GetdyslexiaState === true) { document.documentElement.classList.add('ux4g-font-df'); tickIcon_df.style.display = 'inline-block'; featureItem_df.classList.add('feature-active'); } }); /***************************************************************************************************/ // invert script // Function to toggle the 'Invert' feature document.getElementById('btn-invert').addEventListener('click', function() { // Toggle the 'invert' class on the body document.documentElement.classList.toggle('ux4g-bg-white'); // Toggle the tick icon var tickIcon_ic = document.getElementById('tickIcon-ic'); tickIcon_ic.style.display = tickIcon_ic.style.display === 'none' ? 'inline-block' : 'none'; var featureItem = document.getElementById('featureItem-ic'); // Toggle the feature-active class on featureItem featureItem.classList.toggle('feature-active'); // Save the state in localStorage localStorage.setItem('invertFeature', document.documentElement.classList.contains('ux4g-bg-white')); }); document.addEventListener('DOMContentLoaded', function() { var GetInvertState = JSON.parse(localStorage.getItem('invertFeature')); var tickIcon_ic = document.getElementById('tickIcon-ic'); var featureItem_ic = document.getElementById('featureItem-ic'); if (GetInvertState === true) { document.documentElement.classList.add('ux4g-bg-white'); tickIcon_ic.style.display = 'inline-block'; featureItem_ic.classList.add('feature-active'); } }); /***************************************************************************************************/ // Show Hide Main Widgets Div on Click document.getElementById('uw-widget-custom-trigger').addEventListener('click', function() { openMain(); }); // document.getElementById('uw-widget-custom-trigger2').addEventListener('click', function() { // openMain(); // }); function openMain() { var mainElement = document.getElementById('uw-main'); mainElement.style.right = '0px'; } function closeMain() { var mainElement = document.getElementById('uw-main'); mainElement.style.right = '-490px'; } /***************************************************************************************************/ // Reset All Script function resetAll() { var resetFeatures = document.querySelectorAll('.reset-feature'); resetFeatures.forEach(function (feature) { feature.classList.remove('feature-active'); }); // Hide spans with class 'reset-tick' var resetTicks = document.querySelectorAll('.reset-tick'); resetTicks.forEach(function (tick) { tick.style.display = 'none'; }); // Remove yellow highlight color on links var links = document.querySelectorAll('a'); links.forEach(function (link) { link.style.background = ''; link.style.color = ''; }); localStorage.setItem('highlightLinks', false); // Make Images Visible var images = document.querySelectorAll('img'); images.forEach(function (image) { image.style.visibility = 'visible'; }); var resetImageVisibilityState = {}; localStorage.setItem('imageVisibilityState', JSON.stringify(resetImageVisibilityState)); document.documentElement.classList.remove('image-hide'); document.documentElement.id = document.documentElement.classList.contains('image-hide') ? 'imageHideBg' : ''; //Make Invert to default document.documentElement.classList.remove('ux4g-bg-white'); localStorage.setItem('invertFeature', false); // Make font to default document.documentElement.classList.remove('ux4g-font-df'); localStorage.setItem("dyslexia", false); // Make cursor default document.documentElement.classList.remove('ux4g-bg-cursor'); localStorage.setItem("cursorFeatureActive", false); // Make Light-Dark to default // Uncheck var reset_check = document.getElementById("checkbox").checked = false; document.body.classList.remove("dark", reset_check); localStorage.setItem("darkMode", false); //Reset Lineheight resetlineheight(); // Reset Ltter Spacing resetLetterspacing(); //Reset Font Sizes resetFontSizes(); document.getElementById('btn-s9').disabled = false; document.getElementById('btn-small-text').disabled = false; // Remove inner HTML of parent divs with class 'reset-steps' var resetSteps = document.querySelectorAll('.reset-steps'); resetSteps.forEach(function (step) { step.innerHTML = ''; step.classList.remove('featureSteps-visible'); }); //Reset Speech resetspeech(); localStorage.setItem("speak", false); } /***************** Screen Reader Script*************/ document.getElementById('speak').addEventListener('click', function() { // Toggle the tick icon var tickIcon_sp = document.getElementById('tickIcon_sp'); tickIcon_sp.style.display = tickIcon_sp.style.display === 'none' ? 'inline-block' : 'none'; var featureItem_sp = document.getElementById('featureItem_sp'); // Toggle the feature-active class on featureItem featureItem_sp.classList.toggle('feature-active'); // Save state in local storage localStorage.setItem("speak", featureItem_sp.classList.contains('feature-active')); }); // grab the UI elements to work with const speakEl = document.getElementById('speak'); let isReading = false; let utterance = null; let previousSelectedElement = null; // Create audio elements for sound effects const speakOnSound = new Audio(''); const speakOffSound = new Audio(''); document.addEventListener('mouseup', function (event) { if (isReading) { const clickedElement = event.target; // Check if the clicked element can contain text content const allowedTags = ['P', 'SPAN', 'DIV', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'A', 'LI', 'LABEL', 'BUTTON', 'TD', 'TH', 'STRONG', 'EM', 'B', 'I', 'U', 'SMALL', 'BIG', 'SUB', 'SUP']; if (allowedTags.includes(clickedElement.tagName.toUpperCase())) { selectAndSpeak(clickedElement); } } }); // click handler for the "Speak On" button speakEl.addEventListener('click', toggleSpeech); function toggleSpeech() { if (!isReading) { // Enable speech speakOnSound.play(); isReading = true; } else { // Disable speech resetspeech(); } } function resetspeech() { speakOffSound.play(); window.speechSynthesis.cancel(); isReading = false; previousSelectedElement = null; } function startReading(text) { utterance = new SpeechSynthesisUtterance(text); // Set properties for a more formal voice utterance.rate = 0.7; // Adjust the rate (0.5 is slower, 2.0 is faster) utterance.pitch = 10.0; // Set pitch to 1.0 for a natural voice // Attempt to set a female voice const voices = window.speechSynthesis.getVoices(); const femaleVoice = voices.find(voice => voice.name.includes('female') && voice.lang.includes('en')); if (femaleVoice) { utterance.voice = femaleVoice; } window.speechSynthesis.speak(utterance); // Add an event listener for the 'end' event to reset the selection utterance.addEventListener('end', function () { resetSelection(); }); } function selectAndSpeak(element) { const range = document.createRange(); range.selectNodeContents(element); const selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); if (previousSelectedElement !== element) { // If a different element is clicked, cancel the current speech window.speechSynthesis.cancel(); startReading(selection.toString()); previousSelectedElement = element; } else { // If the same element is clicked, toggle between play/pause if (isReading) { window.speechSynthesis.pause(); } else { window.speechSynthesis.resume(); } } } function resetSelection() { const selection = window.getSelection(); selection.removeAllRanges(); previousSelectedElement = null; } document.addEventListener('DOMContentLoaded', function() { var GetspeakState = JSON.parse(localStorage.getItem('speak')); var tickIcon_sp = document.getElementById('tickIcon_sp'); var featureItem_sp = document.getElementById('featureItem_sp'); if (GetspeakState === true) { tickIcon_sp.style.display = 'inline-block'; featureItem_sp.classList.add('feature-active'); speakOnSound.play(); isReading = true; } }); // end here