1window.addEventListener("DOMContentLoaded", function() { 2 3 let altlabel = document.querySelector('[href="#access"]'); 4 if (altlabel) altlabel.classList.add("access"); 5 const accessibility_toggle = document.querySelector(".accessibility-toggle"); 6 if(custom_button != "Y" && document.querySelector(".access")) { 7 accessibility_toggle.style.display = "none"; 8 } 9 else { 10 accessibility_toggle.style.setProperty('visibility', 'visible', 'important'); 11 accessibility_toggle.style.setProperty('opacity', '1', 'important'); 12 } 13 14 const toggles = document.querySelectorAll(".accessibility-toggle, .access"); 15 toggles.forEach(button => { 16 button.addEventListener("click", function(e) { 17 e.stopPropagation(); 18 const isExpanded = this.getAttribute("aria-expanded") === "true"; 19 this.setAttribute("aria-expanded", !isExpanded); 20 document.querySelector(".accessibility-panel").classList.toggle("open"); 21 return false; 22 }); 23 }); 24 25 document.addEventListener("click", function(event) { 26 const panel = document.querySelector(".accessibility-panel"); 27 if ( 28 panel.classList.contains("open") && 29 !panel.contains(event.target) && 30 !Array.from(toggles).some(btn => btn.contains(event.target)) 31 ) { 32 panel.classList.remove("open"); 33 toggles.forEach(btn => btn.setAttribute("aria-expanded", "false")); 34 } 35 return false; 36 }); 37 38 let currentFontSizePercent = 100; 39 40 const colorSchemeButtons = document.querySelectorAll(".color-scheme-btn"); 41 colorSchemeButtons.forEach(button => { 42 button.addEventListener("click", function() { 43 if (this.classList.contains("active")) { 44 this.classList.remove("active"); 45 const schemeId = this.id; 46 document.body.classList.remove("accessibility-" + schemeId); 47 localStorage.removeItem("accessibilityColorScheme"); 48 return; 49 } 50 51 document.body.classList.remove( 52 "accessibility-black-on-white", 53 "accessibility-white-on-black", 54 "accessibility-brown-on-beige", 55 "accessibility-dark-blue-on-blue" 56 ); 57 58 colorSchemeButtons.forEach(btn => btn.classList.remove("active")); 59 60 const schemeId = this.id; 61 document.body.classList.add("accessibility-" + schemeId); 62 this.classList.add("active"); 63 localStorage.setItem("accessibilityColorScheme", schemeId); 64 }); 65 }); 66 67 document.getElementById("decrease-font").addEventListener("click", function() { 68 currentFontSizePercent = Math.max(currentFontSizePercent - 10, 70); 69 updatePageFontSize(currentFontSizePercent, main_selector); 70 }); 71 72 document.getElementById("normal-font").addEventListener("click", function() { 73 currentFontSizePercent = 100; 74 updatePageFontSize(currentFontSizePercent, main_selector); 75 }); 76 77 document.getElementById("increase-font").addEventListener("click", function() { 78 currentFontSizePercent = Math.min(currentFontSizePercent + 10, 200); 79 updatePageFontSize(currentFontSizePercent, main_selector); 80 }); 81 82 document.getElementById("large-cursor").addEventListener("click", function() { 83 const isActive = this.getAttribute("aria-pressed") === "true"; 84 this.setAttribute("aria-pressed", !isActive); 85 this.classList.toggle("active"); 86 document.body.classList.toggle("large-cursor"); 87 localStorage.setItem("accessibilityLargeCursor", !isActive); 88 if(isActive) { 89 document.querySelector('.filter-icon .second-filter-icon').style.display = 'none'; 90 } 91 else { 92 document.querySelector('.filter-icon .second-filter-icon').style.display = 'block'; 93 } 94 }); 95 96 document.getElementById("hide-images").addEventListener("click", function() { 97 document.body.classList.add("accessibility-hide-images"); 98 document.getElementById("show-images").classList.remove("active"); 99 this.classList.add("active"); 100 localStorage.setItem("accessibilityHideImages", "true"); 101 if(custom_button == "Y") { 102 accessibility_toggle.style.setProperty('visibility', 'visible', 'important'); 103 accessibility_toggle.style.setProperty('opacity', '1', 'important'); 104 } 105 }); 106 107 document.getElementById("show-images").addEventListener("click", function() { 108 document.body.classList.remove("accessibility-hide-images"); 109 document.getElementById("hide-images").classList.remove("active"); 110 this.classList.add("active"); 111 localStorage.setItem("accessibilityHideImages", "false"); 112 if(custom_button == "Y") { 113 accessibility_toggle.style.setProperty('visibility', 'visible', 'important'); 114 accessibility_toggle.style.setProperty('opacity', '1', 'important'); 115 } 116 }); 117 118 let speechSynthesis = window.speechSynthesis; 119 let speechUtterance = null; 120 let currentHighlightedElement = null; 121 122 document.getElementById("read-aloud").addEventListener("click", function() {
123 if (speechSynthesis.speaking) { 124 speechSynthesis.cancel(); 125 } 126 if (currentHighlightedElement) { 127 currentHighlightedElement.classList.remove("accessibility-highlight-text"); 128 currentHighlightedElement = null; 129 } 130 let textContent = ''; 131 if(main_selector === '') { 132 textContent = document.body.innerText; 133 } 134 else { 135 textContent = document.querySelector(main_selector).innerText; 136 } 137 if (!textContent || textContent.trim() === "") { 138 alert("Ðе найден ÑекÑÑ Ð´Ð»Ñ ÑÑениÑ"); 139 return; 140 } 141 speechUtterance = new SpeechSynthesisUtterance(textContent); 142 let voices = speechSynthesis.getVoices(); 143 let russianVoice = voices.find(voice => voice.lang.includes('ru')); 144 if (russianVoice) { 145 speechUtterance.voice = russianVoice; 146 } 147 speechUtterance.rate = 1; 148 speechUtterance.pitch = 1; 149 speechUtterance.volume = 1; 150 speechUtterance.onend = function() { 151 document.getElementById("stop-reading").classList.remove("active"); 152 document.getElementById("read-aloud").classList.remove("active"); 153 }; 154 speechSynthesis.speak(speechUtterance); 155 document.getElementById("read-aloud").classList.add("active"); 156 document.getElementById("stop-reading").classList.remove("active"); 157 }); 158 159 document.getElementById("stop-reading").addEventListener("click", function() {
160 if (speechSynthesis.speaking) { 161 speechSynthesis.cancel(); 162 if (currentHighlightedElement) { 163 currentHighlightedElement.classList.remove("accessibility-highlight-text"); 164 currentHighlightedElement = null; 165 } 166 document.getElementById("read-aloud").classList.remove("active"); 167 this.classList.add("active"); 168 } 169 }); 170 171 document.getElementById("reset-accessibility").addEventListener("click", function() { 172 document.body.classList.remove( 173 "accessibility-black-on-white", 174 "accessibility-white-on-black", 175 "accessibility-brown-on-beige", 176 "accessibility-dark-blue-on-blue", 177 "accessibility-grayscale", 178 "accessibility-invert", 179 "large-cursor", 180 "accessibility-hide-images" 181 ); 182 document.querySelector('.filter-icon .second-filter-icon').style.display = 'none'; 183 document.querySelectorAll('[data-elem-type="text"], .t-text, [field="text"], [field="title"], [field="subtitle"], [field="descr"]').forEach(el => { 184 el.style.transform = ""; 185 }); 186 Array.from(document.body.children).forEach(el => { 187 if (!el.classList.contains("accessibility-panel")) { 188 el.style.transformOrigin = ""; 189 } 190 }); 191 document.querySelectorAll(".color-scheme-btn, .filter-btn, .font-size-btn").forEach(btn => { 192 btn.classList.remove("active"); 193 if (btn.hasAttribute("aria-pressed")) { 194 btn.setAttribute("aria-pressed", "false"); 195 } 196 }); 197 currentFontSizePercent = 100; 198 if (speechSynthesis.speaking) { 199 speechSynthesis.cancel(); 200 if (currentHighlightedElement) { 201 currentHighlightedElement.classList.remove("accessibility-highlight-text"); 202 currentHighlightedElement = null; 203 } 204 } 205 localStorage.removeItem("accessibilityColorScheme"); 206 localStorage.removeItem("accessibilityFontSizePercent"); 207 localStorage.removeItem("accessibilityGrayscale"); 208 localStorage.removeItem("accessibilityInvert"); 209 localStorage.removeItem("accessibilityLargeCursor"); 210 localStorage.removeItem("accessibilityHideImages"); 211 }); 212 213 const savedFontSize = localStorage.getItem("accessibilityFontSizePercent"); 214 if (savedFontSize) { 215 currentFontSizePercent = parseInt(savedFontSize); 216 } 217 loadSettings(); 218}); 219 220function loadSettings() { 221 const colorScheme = localStorage.getItem("accessibilityColorScheme"); 222 if (colorScheme) { 223 document.body.classList.add("accessibility-" + colorScheme); 224 document.getElementById(colorScheme).classList.add("active"); 225 } 226 227 const fontSizePercent = localStorage.getItem("accessibilityFontSizePercent") || "100"; 228 if (fontSizePercent !== "100") { 229 updatePageFontSize(parseInt(fontSizePercent), main_selector); 230 } 231 232 if (localStorage.getItem("accessibilityGrayscale") === "true") { 233 document.body.classList.add("accessibility-grayscale"); 234 document.getElementById("grayscale").setAttribute("aria-pressed", "true"); 235 document.getElementById("grayscale").classList.add("active"); 236 } 237 238 if (localStorage.getItem("accessibilityInvert") === "true") { 239 document.body.classList.add("accessibility-invert"); 240 document.getElementById("invert-colors").setAttribute("aria-pressed", "true"); 241 document.getElementById("invert-colors").classList.add("active"); 242 } 243 244 if (localStorage.getItem("accessibilityLargeCursor") === "true") { 245 document.querySelector('.filter-icon .second-filter-icon').style.display = 'block'; 246 document.body.classList.add("large-cursor"); 247 document.getElementById("large-cursor").setAttribute("aria-pressed", "true"); 248 document.getElementById("large-cursor").classList.add("active"); 249 } 250 251 if (localStorage.getItem("accessibilityHideImages") === "true") { 252 document.body.classList.add("accessibility-hide-images"); 253 document.getElementById("hide-images").classList.add("active"); 254 } else { 255 document.getElementById("show-images").classList.add("active"); 256 } 257} 258 259function updatePageFontSize(percentSize, selector, overflow='auto') { 260 document.querySelector(selector).style.zoom = `${percentSize}%`; 261 document.body.style.overflow = overflow; 262 localStorage.setItem("accessibilityFontSizePercent", percentSize); 263}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.