PageSourceSearch

https://npat.ru/components/com_wmartalpha/assets/js/easyaccess.js?a8a96629

js npat.ru collected 2026-10-01 08:58:40 UTC 7,967 bytes, 270 lines download raw bytes

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.