/* Web Accessibility version: 0.0.1 */ var IsVoiceMode = false; var filterList = []; var fontSize = 15; var restorefontSize = 15; var saveLocalVariables = true; var HTMLmag = undefined; var IsRotate = true; var elementFocusEnabled = false; filterList[1] = 'hc_extension_off'; filterList[2] = 'hc_extension_highcontrast'; filterList[3] = 'hc_extension_grayscale'; filterList[4] = 'hc_extension_invert'; filterList[5] = 'hc_extension_invert_grayscale'; filterList[6] = 'hc_extension_yellow_on_black'; try { var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; var recognition = new SpeechRecognition(); } catch(e) { console.error(e); $('.no-browser-support').show(); $('.app').hide(); } var noteTextarea = $('#note-textarea'); var notesList = $('ul#notes'); var noteContent = ''; var notes = getAllNotes(); // If false, the recording will stop after a few seconds of silence. // When true, the silence period is longer (about 15 seconds) recognition.continuous = true; $.fn.fixColors = function(options) { var defaults={'isBackground':false}; var opts = $.extend(defaults, options); var htmlcolorMap = { "aliceblue": "#f0f8ff", "antiquewhite": "#faebd7", "aqua": "#00ffff", "aquamarine": "#7fffd4", "azure": "#f0ffff", "beige": "#f5f5dc", "bisque": "#ffe4c4", "black": "#000000", "blanchedalmond": "#ffebcd", "blue": "#0000ff", "blueviolet": "#8a2be2", "brown": "#a52a2a", "burlywood": "#deb887", "cadetblue": "#5f9ea0", "chartreuse": "#7fff00", "chocolate": "#d2691e", "coral": "#ff7f50", "cornflowerblue": "#6495ed", "cornsilk": "#fff8dc", "crimson": "#dc143c", "cyan": "#00ffff", "darkblue": "#00008b", "darkcyan": "#008b8b", "darkgoldenrod": "#b8860b", "darkgray": "#a9a9a9", "darkgrey": "#a9a9a9", "darkgreen": "#006400", "darkkhaki": "#bdb76b", "darkmagenta": "#8b008b", "darkolivegreen": "#556b2f", "darkorange": "#ff8c00", "darkorchid": "#9932cc", "darkred": "#8b0000", "darksalmon": "#e9967a", "darkseagreen": "#8fbc8f", "darkslateblue": "#483d8b", "darkslategray": "#2f4f4f", "darkslategrey": "#2f4f4f", "darkturquoise": "#00ced1", "darkviolet": "#9400d3", "deeppink": "#ff1493", "deepskyblue": "#00bfff", "dimgray": "#696969", "dimgrey": "#696969", "dodgerblue": "#1e90ff", "firebrick": "#b22222", "floralwhite": "#fffaf0", "forestgreen": "#228b22", "fuchsia": "#ff00ff", "gainsboro": "#dcdcdc", "ghostwhite": "#f8f8ff", "gold": "#ffd700", "goldenrod": "#daa520", "gray": "#808080", "grey": "#808080", "green": "#008000", "greenyellow": "#adff2f", "honeydew": "#f0fff0", "hotpink": "#ff69b4", "indianred": "#cd5c5c", "indigo": "#4b0082", "ivory": "#fffff0", "khaki": "#f0e68c", "lavender": "#e6e6fa", "lavenderblush": "#fff0f5", "lawngreen": "#7cfc00", "lemonchiffon": "#fffacd", "lightblue": "#add8e6", "lightcoral": "#f08080", "lightcyan": "#e0ffff", "lightgoldenrodyellow": "#fafad2", "lightgray": "#d3d3d3", "lightgrey": "#d3d3d3", "lightgreen": "#90ee90", "lightpink": "#ffb6c1", "lightsalmon": "#ffa07a", "lightseagreen": "#20b2aa", "lightskyblue": "#87cefa", "lightslategray": "#778899", "lightslategrey": "#778899", "lightsteelblue": "#b0c4de", "lightyellow": "#ffffe0", "lime": "#00ff00", "limegreen": "#32cd32", "linen": "#faf0e6", "magenta": "#ff00ff", "maroon": "#800000", "mediumaquamarine": "#66cdaa", "mediumblue": "#0000cd", "mediumorchid": "#ba55d3", "mediumpurple": "#9370d8", "mediumseagreen": "#3cb371", "mediumslateblue": "#7b68ee", "mediumspringgreen": "#00fa9a", "mediumturquoise": "#48d1cc", "mediumvioletred": "#c71585", "midnightblue": "#191970", "mintcream": "#f5fffa", "mistyrose": "#ffe4e1", "moccasin": "#ffe4b5", "navajowhite": "#ffdead", "navy": "#000080", "oldlace": "#fdf5e6", "olive": "#808000", "olivedrab": "#6b8e23", "orange": "#ffa500", "orangered": "#ff4500", "orchid": "#da70d6", "palegoldenrod": "#eee8aa", "palegreen": "#98fb98", "paleturquoise": "#afeeee", "palevioletred": "#d87093", "papayawhip": "#ffefd5", "peachpuff": "#ffdab9", "peru": "#cd853f", "pink": "#ffc0cb", "plum": "#dda0dd", "powderblue": "#b0e0e6", "purple": "#800080", "red": "#ff0000", "rosybrown": "#bc8f8f", "royalblue": "#4169e1", "saddlebrown": "#8b4513", "salmon": "#fa8072", "sandybrown": "#f4a460", "seagreen": "#2e8b57", "seashell": "#fff5ee", "sienna": "#a0522d", "silver": "#c0c0c0", "skyblue": "#87ceeb", "slateblue": "#6a5acd", "slategray": "#708090", "slategrey": "#708090", "snow": "#fffafa", "springgreen": "#00ff7f", "steelblue": "#4682b4", "tan": "#d2b48c", "teal": "#008080", "thistle": "#d8bfd8", "tomato": "#ff6347", "turquoise": "#40e0d0", "violet": "#ee82ee", "wheat": "#f5deb3", "white": "#ffffff", "whitesmoke": "#f5f5f5", "yellow": "#ffff00", "yellowgreen": "#9acd32" }; function colorNormalize(colorValue) { if (colorValue === null || typeof (colorValue) !== 'string') { return "rgba(0,0,0,0)"; } colorValue = colorValue.toLowerCase(); if (colorValue.indexOf('transparent') >= 0) { return "rgba(0,0,0,0)"; } if (colorValue.match(/rgb.+[0-9]+/) === null) { var hex = colorValue; if (colorValue.match(/#[0-9a-f]+/) === null) { hex = htmlcolorMap[colorValue]; if (hex === undefined) { return "rgba(0,0,0,0)"; } } if (hex.length <= 4) { hex = hex.replace(/([0-9a-f])/g, '0' + '$1'); } var rgb = []; hex = hex.replace(/[0-9a-f]{2}/g, function (m, n) { rgb[rgb.length] = m; }); var ret = 'rgb({r},{g},{b})'; ret = ret.replace('{r}', parseInt(rgb[0], 16)); ret = ret.replace('{g}', parseInt(rgb[1], 16)); ret = ret.replace('{b}', parseInt(rgb[2], 16)); return ret; } return colorValue; } function getColorInfo(strColor) { var match = strColor.match(/rgba[ \t]*\([ \t]*([0-9.]+)[ \t]*,[ \t]*([0-9.]+)[ \t]*,[ \t]*([0-9.]+)[ \t]*,[ \t]*([0-9.]+)[ \t]*\)/); var isAlpha = true; if (match === null) { match = strColor.match(/rgb[ \t]*\([ \t]*([0-9.]+)[ \t]*,[ \t]*([0-9.]+)[ \t]*,[ \t]*([0-9.]+)[ \t]*\)/); isAlpha = false; } var r = match[1] * 1, g = match[2] * 1, b = match[3] * 1, a = match[4] * 1; var brightness = (r * 299 + g * 587 + b * 114) / 1000, cb = 20; if (brightness < 127) { cb = 235; } isTransparent = (isAlpha) && (a === 0); var rgbOnly = 'rgb(' + r + ',' + g + ',' + b + ')'; var maxContrast = "rgb(" + cb + "," + cb + "," + cb + ")"; return { 'r': r, 'g': g, 'b': b, 'a': a, 'brightness': brightness, 'maxContrast': maxContrast, 'rgb': rgbOnly, 'isAlpha': isAlpha, 'isTransparent': isTransparent }; } function getStyle(el, styleProp) { var x = el, y; if (x.currentStyle) { y = x.currentStyle[styleProp]; } else if (window.getComputedStyle) { y = document.defaultView.getComputedStyle(x, null).getPropertyValue(styleProp); } return y; } function getComputedColor(el, what) { var w = { 'c': { 'css': 'color', 'v': 'rgb(0,0,0)' }, 'b': { 'css': 'background-color', 'v': 'rgb(255,255,255)' } }; if (el === undefined || el === null) { return w[what].v; } if (el.tagName.toLowerCase() === 'html') { return w[what].v; } var str = ''; try { str = getStyle(el, w[what].css); if (str === undefined && w[what].css === 'background-color') { str = getStyle(el, 'background'); } str = colorNormalize(str); } catch (e) { str = w[what].v; } return (getColorInfo(str).isTransparent) ? getComputedColor(el.parentNode, what) : str; } /*********************************************** recurses on node's children and fixes the contrast of text ***********************************************/ function fixColors(Node, pBg, pColor) { Node = (Node === undefined) ? document.body : Node; var bg = getColorInfo(getComputedColor(Node, 'b')); var color = getColorInfo(getComputedColor(Node, 'c')); (bg.isAlpha) && $(Node).css('background-color', bg.rgb); (color.isAlpha) && $(Node).css('color', color.rgb); var child = null, contrast = Math.abs(color.brightness - bg.brightness); (contrast < 80) && $(Node).css('color', bg.maxContrast); for (var i = 0; i < Node.childElementCount; i++) { child = Node.children[i]; var ctn = child.tagName; if ((ctn !== undefined) && (ctn === 'INPUT' || ctn === 'BUTTON')) { continue; } fixColors(child, bg, color); } } return this.each(function(){ fixColors(this); }); } $(document).ready(function(e){ $("body").append(getHtml()); // $("body").append(getHtml()); if(localStorage.getItem('accEncode') !== null) { var accEncode = JSON.parse(localStorage.getItem('accEncode')); saveLocalVariables = accEncode.save; if(accEncode.save == true ) { modeSelected(filterList[parseInt(accEncode.filterItem)]); document.body.style.fontSize = parseInt(accEncode.fontSize); startVoiceMode(accEncode.speechmode); } } else { var accEncode = {filterItem : 1, speechmode : false, fontSize : fontSize, save : saveLocalVariables}; localStorage.setItem('accEncode', JSON.stringify(accEncode)); } $('#accAutoSave').prop('checked', saveLocalVariables); document.addEventListener("keyup", event => { if (event.isComposing || event.keyCode === 121) { //showOrHideMenu(); $(".accGear").slideToggle(); return; } }); document.addEventListener("keydown", event => { if (event.isComposing || event.keyCode === 121) { //showOrHideMenu(); $(".accGear").slideToggle(); return; } }); }); function setLocalStorage(type, value) { if(localStorage.getItem('accEncode') !== null) { var accEncode = JSON.parse(localStorage.getItem('accEncode')); if(type == 'filter') accEncode.filterItem = value; else if(type == 'font') accEncode.fontSize = value; else if(type == 'speech') accEncode.speechmode = value; else if(type == 'save') accEncode.save = value; localStorage.setItem('accEncode', JSON.stringify(accEncode)); } } function reset(){ elementFocusEnabled = false; document.body.style.fontSize = restorefontSize; startVoiceMode(false); if(!IsRotate){ screenRotate(); } var inputNodeList = document.querySelectorAll("input[type='text'],input[type='search'],input[type='password'],textarea,select,a,button"); for(var i = 0; i < inputNodeList.length; i++){ inputNodeList[i].classList.remove("addFocus"); } var checkNodeList = document.querySelectorAll("input[type='checkbox'],input[type='radio']"); for(var i = 0; i < checkNodeList.length; i++){ checkNodeList[i].parentElement.classList.remove("addFocus"); } } $(document).on('click', '.FilterItem', function() { setLocalStorage('filter', $(this).attr('data-value')); modeSelected(filterList[($(this).attr('data-value'))]); }); $(document).on('click',function (e) { if ("reset" != e.target.id && "resetChild" != e.target.id && "resetChild" != e.target.parentElement.id && elementFocusEnabled) { var inputNodeList = document.querySelectorAll("input[type='text'],input[type='search'],input[type='password'],textarea,select,a,button"); for(var i = 0; i < inputNodeList.length; i++){ inputNodeList[i].classList.add("addFocus"); if(inputNodeList[i].tagName == 'A'){ inputNodeList[i].setAttribute('tabindex',0) } } var checkNodeList = document.querySelectorAll("input[type='checkbox'],input[type='radio']"); for(var i = 0; i < checkNodeList.length; i++){ checkNodeList[i].parentElement.classList.add("addFocus"); } } }); $(document).on('change', '#accAutoSave', function() { saveLocalVariables = $(this).is(':checked'); setLocalStorage('save' , saveLocalVariables); }); function showOrHideMenu() { $("#accessibilityPanel").slideToggle(); if($(".accGear").hasClass('accActive')) { $(".accGear").removeClass('accActive'); } else { $(".accGear").addClass('accActive'); } fontSize = window.getComputedStyle(document.getElementsByTagName('body')[0]).fontSize.substring(0, 2); restorefontSize = fontSize; } function screenRotate() { if (IsRotate){ IsRotate = false; document.body.style.width = '50vw'; } else{ IsRotate = true; document.body.style.width = '98vw'; } } function populatePlaceHolderAndFocus() { elementFocusEnabled = true; var inputNodeList = document.querySelectorAll("input[type='text'],input[type='search'],input[type='password'],textarea,select,a,button"); for(var i = 0; i < inputNodeList.length; i++){ inputNodeList[i].classList.add("addFocus"); if(inputNodeList[i].tagName == 'A'){ inputNodeList[i].setAttribute('tabindex',0) } } var checkNodeList = document.querySelectorAll("input[type='checkbox'],input[type='radio']"); for(var i = 0; i < checkNodeList.length; i++){ checkNodeList[i].parentElement.classList.add("addFocus"); } } function fontSizeChange(type) { if(type == 1){ fontSize = parseInt(fontSize) + 2; document.body.style.fontSize = fontSize + 'px'; } else { fontSize = parseInt(fontSize) - 2; document.body.style.fontSize = fontSize + 'px'; } setLocalStorage('font', fontSize); } function modeSelected(value) { const element = document.getElementsByTagName('html')[0]; element.style.filter = 'url(#' + value + ')'; } function validate() { $('body').fixColors(); } function pageTitle() { let elements = document.querySelectorAll('h1, h2, h3, h4, h5, h6'); for (const element of elements) { if (element.tagName === 'H1') { element.classList.add("titleH1") } if (element.tagName === 'H2') { element.classList.add("titleH2") } if (element.tagName === 'H3') { element.classList.add("titleH3") } if (element.tagName === 'H4') { element.classList.add("titleH4") } if (element.tagName === 'H5') { element.classList.add("titleH5") } if (element.tagName === 'H6') { element.classList.add("titleH6") } } } function getHtml() { return '
'+ '
'+ ''+ '
'+ '
'+ '
'+ '
'+ '
'+ '
'+ '
'+ '
'+ '
'+ '
' + '
' + '
' + '
' + '
'+ '
'+ '
'+ '
'+ ''+ ''+ ''+ ''+ ' '+ ' '+ ' '+ ' '+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ' '+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''+ ''; } // This block is called every time the Speech APi captures a line. recognition.onresult = function(event) { var current = event.resultIndex; // Get a transcript of what was said. var transcript = event.results[current][0].transcript; var mobileRepeatBug = (current == 1 && transcript == event.results[0][0].transcript); if(!mobileRepeatBug) { noteContent += transcript; noteTextarea.val(noteContent); } }; function startVoiceMode(enable = ''){ IsVoiceMode = IsVoiceMode ? false : true; if(enable != '') { IsVoiceMode = enable; } setLocalStorage('speech', IsVoiceMode); if(IsVoiceMode){ $('input[type=text], input[type=password], input[type=number], input[type=search], textarea').each(function(index){ var input = $(this); var html_to_insert = ""; $(html_to_insert).insertAfter(input); }); }else{ $('.voice').remove(); } } function magnifier() { if (!HTMLmag) { HTMLmag = new HTMLMagnifier({ shape: 'circle', width: 300, height: 300 }); HTMLmag.on('prepareContent', function (magnifierContent) { $('.some-selector', magnifierContent).remove(); }); HTMLmag.on('syncScrollBars', function (magnifierContent) { $('div.scrollable-area', magnifierContent).scrollTop($('div.scrollable-area').scrollTop()); }); HTMLmag.show(); } else { if (HTMLmag.isVisible()) { HTMLmag.hide(); } else { HTMLmag.show(); } } } /*--------Maginify Content-------------*/ /*---------End---------*/ function speechRecognize(obj){ var isStop = containsClass(obj, 'start'); var isStart = containsClass(obj, 'stop'); if(isStart){ $(obj).removeClass('stop'); $(obj).addClass('start'); if (noteContent.length) { noteContent += ' '; } var val ="#"+$(obj).attr('value'); noteTextarea = $(val); recognition.start(); }else if(isStop){ $(obj).removeClass('start'); $(obj).addClass('stop'); recognition.stop(); if(noteContent.length) { saveNote(new Date().toLocaleString(), noteContent); noteContent = ''; } } } /*----------------------------- Speech Synthesis ------------------------------*/ function readOutLoud(message) { var speech = new SpeechSynthesisUtterance(); // Set the text and voice attributes. speech.text = message; speech.volume = 10; speech.rate = 1; speech.pitch = 1; window.speechSynthesis.speak(speech); } function saveNote(dateTime, content) { localStorage.setItem('note-' + dateTime, content); } function getAllNotes() { var notes = []; var key; for (var i = 0; i < localStorage.length; i++) { key = localStorage.key(i); if(key.substring(0,5) == 'note-') { notes.push({ date: key.replace('note-',''), content: localStorage.getItem(localStorage.key(i)) }); } } return notes; } function containsClass(element, className){ return (' ' + element.className + ' ').indexOf(' ' + className+ ' ') > -1; }