1//25.10.2022 2var w_easyaccess = {}; 3w_easyaccess.events = {}; 4w_easyaccess.defaults = {}; 5 6if (w_core.cookieGet('w_easyaccess')) { 7 w_easyaccess.data = JSON.parse(w_core.cookieGet('w_easyaccess')); 8} else { 9 w_easyaccess.data = Object.assign({},w_easyaccess.defaults); 10} 11 12w_easyaccess.disable = (mode, value) => { 13 w_easyaccess.set(mode, value, 1); 14} 15 16w_easyaccess.enable = (mode, value) => { 17 w_easyaccess.set(mode, value, 0); 18} 19 20w_easyaccess.isEnable = (mode, value) => { 21 if (!mode && !value) { 22 return !(Object.keys(w_easyaccess.data).length === 0); 23 } 24 if (value) { 25 if (w_easyaccess.data[mode] === value) 26 return true 27 } else { 28 if (w_easyaccess.data[mode]) 29 return true 30 } 31 return false; 32} 33 34w_easyaccess.on = (name, func) => { 35 if (!w_easyaccess.events[name]) { 36 w_easyaccess.events[name] = []; 37 } 38 if (typeof (func) != 'function') 39 return false; 40 w_easyaccess.events[name].push(func); 41}; 42 43w_easyaccess.reset = () => { 44 w_easyaccess.data = Object.assign({},w_easyaccess.defaults); 45 w_easyaccess.save(); 46 w_easyaccess.update(); 47} 48 49w_easyaccess.save = () => { 50 w_core.cookieSet('w_easyaccess', JSON.stringify(w_easyaccess.data), {expires: 604800}); 51}; 52 53w_easyaccess.set = (mode, value, active) => { 54 delete w_easyaccess.data[mode]; 55 if (!active) { 56 if (value) { 57 w_easyaccess.data[mode] = value; 58 } else { 59 w_easyaccess.data[mode] = '1'; 60 } 61 w_easyaccess.trigger('enable', {mode: mode, value: value}); 62 w_easyaccess.trigger('enable.' + mode, {mode: mode, value: value}); 63 w_easyaccess.trigger('enabled.' + mode, {mode: mode, value: value}); 64 } else { 65 w_easyaccess.trigger('disable', {mode: mode, value: value}); 66 w_easyaccess.trigger('disable.' + mode, {mode: mode, value: value}); 67 } 68 w_easyaccess.trigger('change', {mode: mode, value: value}); 69 w_easyaccess.save(); 70 w_easyaccess.update(); 71}; 72 73w_easyaccess.toggle = (mode, value) => { 74 w_easyaccess.set(mode, value, w_easyaccess.isEnable(mode, value)); 75} 76 77w_easyaccess.trigger = (name, args) => { 78 if (w_easyaccess.events[name]) { 79 w_easyaccess.events[name].forEach((current, index) => current(args)); 80 } 81}; 82 83//обновление даннÑÑ 84w_easyaccess.update = () => { 85 let html = document.querySelector('html'); 86 87 //обновление клаÑÑов 88 if (html.getAttribute('class')) { 89 html.getAttribute('class').split(/\s+/).forEach(className => { 90 if (className.indexOf('easyaccess-') === 0) { 91 html.classList.remove(className.toString()); 92 } 93 }); 94 } 95 for (var mode in w_easyaccess.data) { 96 let value = w_easyaccess.data[mode]; 97 html.classList.add('easyaccess-'+mode + (value!=='1' ? '-'+value : '')); 98 w_easyaccess.trigger('enabled.' + mode, {mode: mode, value: value}); 99 } 100 101 102 //обновление ÑлеменÑов ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ 103 document.querySelectorAll('input[data-action="w_easyaccess"]').forEach(input => { 104 input.checked=0; 105 }); 106 for (var mode in w_easyaccess.data) { 107 let value = w_easyaccess.data[mode]; 108 document.querySelectorAll('input[data-action="w_easyaccess"][name="' + mode + '"][value="' + value + '"]').forEach(input => { 109 input.checked = 1; 110 }); 111 }; 112} 113 114document.addEventListener('DOMContentLoaded', () => { 115 document.querySelectorAll('input[data-action="w_easyaccess"]').forEach(input => { 116 input.addEventListener('click', event => { 117 w_easyaccess.set(input.getAttribute('name'), input.getAttribute('value'),!input.checked); 118 }); 119 }); 120 document.querySelectorAll('button[data-action="w_easyaccess"],a[data-action="easyaccess"]').forEach(input => { 121 input.addEventListener('click', event => { 122 w_easyaccess.toggle(input.dataset.name,input.dataset.value); 123 }); 124 }); 125 w_easyaccess.update(); 126}); 127 128w_easyaccess.speech = (text) => { 129 speechSynthesis.cancel(); 130 if(!w_easyaccess.speechMsg){ 131 w_easyaccess.speechMsg = new SpeechSynthesisUtterance(); 132 var voices = speechSynthesis.getVoices(); 133 w_easyaccess.speechMsg.voice = voices[3]; 134 w_easyaccess.speechMsg.voiceURI = 'native'; 135 w_easyaccess.speechMsg.volume = 1; 136 w_easyaccess.speechMsg.rate = 1; 137 w_easyaccess.speechMsg.pitch = 1; 138 w_easyaccess.speechMsg.lang = 'ru-RU'; 139 } 140 w_easyaccess.speechMsg.text = text; 141 speechSynthesis.speak(w_easyaccess.speechMsg); 142}; 143 144w_easyaccess.on('disable.show',function(){ 145 w_easyaccess.reset(); 146}); 147 148 149//лиÑÑÐµÐ½ÐµÑ Ð´Ð»Ñ Ð²ÑбоÑа ÑекÑÑовÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² 150w_easyaccess.speachListener = (event) => { 151 //console.log(event); 152 var target = event.target; 153 if(target.tagName=='HTML') return false; 154 if(target.tagName=='BODY') return false; 155 for (var key in target.childNodes) { 156 let node = target.childNodes[key]; 157 if(node.tagName=='DIV'){ 158 return false; 159 } 160 } 161 let text,placeholder,title,value,speak; 162 163 title = target.getAttribute('title'); 164 title = title ? title.trim() : ''; 165 text = target.innerText; 166 text = text ? text.trim() : ''; 167 168 speak = title ? title : text; 169 170 171 172 switch(target.tagName){ 173 case 'INPUT': 174 case 'LABEL': 175 let label,input; 176 let title=''; 177 let value=''; 178 if(target.tagName=='INPUT') { 179 if(target.parentNode.tagName=='LABEL'){ 180 label = target.parentNode; 181 } else { 182 label = target.parentNode.querySelector("label[for='" + target.id + "']"); 183 } 184 input = target; 185 } 186 if(target.tagName=='LABEL'){ 187 input = target.parentNode.querySelector("[id='" + target.id + "']"); 188 label = target; 189 } 190 if(!input) return false; 191 if(label){ 192 title = label.getAttribute('title'); 193 if(title) title = title.trim(); 194 if(!title) title = label.innerText; 195 if(title) title = title.trim(); 196 } else { 197 title = input.getAttribute('title'); 198 if(title) title = title.trim(); 199 if(!title) title = input.getAttribute('placeholder'); 200 if(title) title = title.trim(); 201 } 202 203 204 switch(target.type){ 205 case 'submit': 206 case 'button': 207 if(title) speak = 'Ðнопка '+ title; 208 if(input.value) speak = 'Ðнопка '+ input.value; 209 break; 210 case 'radio': 211 case 'checkbox': 212 speak = 'Флажок '+ title; 213 if(input.checked) speak += input.checked ? ' оÑмеÑен' : ''; 214 break; 215 case 'password': 216 speak = 'Ðоле ' + title; 217 break; 218 default: 219 speak = 'Ðоле ' + title; 220 if(input.value) speak += ' знаÑение ' + input.value; 221 break; 222 } 223 //console.log(target.type); 224 //speak = 'Ðоле '+speak+'. введено '+target.value; 225 break; 226 case 'A': 227 228 speak = 'СÑÑлка ' + speak; 229 break; 230 } 231 232 if(!speak) return false; 233 234 235 clearTimeout(w_easyaccess.speechTimeout); 236 w_easyaccess.speechTimeout = setTimeout(function(){ 237 238 239 /*let text=''; 240 for (var key in target.childNodes) { 241 let node = target.childNodes[key]; 242 console.log(target.tagName); 243 if(node.nodeType==3){ 244 text += ' '+node.nodeValue.trim(); 245 } 246 }*/ 247 248 //console.log(speak); 249 w_easyaccess.speech(speak); 250 },500); 251} 252 253 254w_easyaccess.on('enable.speech',function(){ 255 w_easyaccess.speech('Режим озвÑÑки ÑекÑÑовÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² ÑайÑа вклÑÑен, наведиÑе кÑÑÑÐ¾Ñ Ð½Ð° блок и ожидайÑе наÑала озвÑÑки.'); 256}); 257 258w_easyaccess.on('enabled.speech',function(){ 259 document.addEventListener('mouseover', w_easyaccess.speachListener); 260}); 261 262w_easyaccess.on('disable.speech',function(){ 263 document.removeEventListener('mouseover', w_easyaccess.speachListener); 264}); 265 266w_easyaccess.on('disable.show',function(){ 267 document.removeEventListener('mouseover', w_easyaccess.speachListener); 268}); 269 270//document.addEventListener('mouseover', w_easyaccess.speachListener);
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.