1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 var site; 6 var key1; 7 var key2; 8 9 function setRadio(name, value) { 10 var radios = document.querySelectorAll('input[name="' + name + '"]'); 11 for (var i = 0; i < radios.length; i++) { 12 radios[i].checked = (radios[i].value == value); 13 radios[i].disabled = !getEnabled(); 14 } 15 } 16 17 function update() { 18 document.body.className = getEnabled() ? '' : 'disabled'; 19 20 if (getEnabled()) { 21 $('title').innerText = 'High Contrast is Enabled'; 22 $('toggle').innerHTML = '<b>Disable</b> ' + 23 '<span class="kb">(' + key1 + ')</span>'; 24 $('subcontrols').style.display = 'block'; 25 } else { 26 $('title').innerText = 'High Contrast is Disabled'; 27 $('toggle').innerHTML = '<b>Enable</b> ' + 28 '<span class="kb">(' + key1 + ')</span>'; 29 $('subcontrols').style.display = 'none'; 30 } 31 32 setRadio('keyaction', getKeyAction()); 33 if (site) { 34 setRadio('scheme', getSiteScheme(site)); 35 $('make_default').disabled = (getSiteScheme(site) == getDefaultScheme()); 36 } else { 37 setRadio('scheme', getDefaultScheme()); 38 } 39 if (getEnabled()) { 40 document.documentElement.setAttribute( 41 'hc', 42 site ? 'a' + getSiteScheme(site) : 'a' + getDefaultScheme()); 43 } else { 44 document.documentElement.setAttribute('hc', 'a0'); 45 } 46 chrome.extension.getBackgroundPage().updateTabs(); 47 } 48 49 function onToggle() { 50 setEnabled(!getEnabled()); 51 update(); 52 } 53 54 function onForget() { 55 resetSiteSchemes(); 56 update(); 57 } 58 59 function onRadioChange(name, value) { 60 switch (name) { 61 case 'keyaction': 62 setKeyAction(value); 63 break; 64 case 'apply': 65 setApply(value); 66 break; 67 case 'scheme': 68 if (site) { 69 setSiteScheme(site, value); 70 } else { 71 setDefaultScheme(value); 72 } 73 break; 74 } 75 update(); 76 } 77 78 function onMakeDefault() { 79 setDefaultScheme(getSiteScheme(site)); 80 update(); 81 } 82 83 function addRadioListeners(name) { 84 var radios = document.querySelectorAll('input[name="' + name + '"]'); 85 for (var i = 0; i < radios.length; i++) { 86 radios[i].addEventListener('change', function(evt) { 87 onRadioChange(evt.target.name, evt.target.value); 88 }, false); 89 radios[i].addEventListener('click', function(evt) { 90 onRadioChange(evt.target.name, evt.target.value); 91 }, false); 92 } 93 } 94 95 function init() { 96 var i18nElements = document.querySelectorAll('*[i18n-content]'); 97 for (var i = 0; i < i18nElements.length; i++) { 98 var elem = i18nElements[i]; 99 var msg = elem.getAttribute('i18n-content'); 100 elem.innerHTML = chrome.i18n.getMessage(msg); 101 } 102 103 addRadioListeners('keyaction'); 104 addRadioListeners('apply'); 105 addRadioListeners('scheme'); 106 $('toggle').addEventListener('click', onToggle, false); 107 $('make_default').addEventListener('click', onMakeDefault, false); 108 $('forget').addEventListener('click', onForget, false); 109 if (navigator.appVersion.indexOf('Mac') != -1) { 110 key1 = '⌘+Shift+F11'; 111 key2 = '⌘+Shift+F12'; 112 } else { 113 key1 = 'Shift+F11'; 114 key2 = 'Shift+F12'; 115 } 116 117 chrome.windows.getLastFocused({'populate': true}, function(window) { 118 for (var i = 0; i < window.tabs.length; i++) { 119 var tab = window.tabs[i]; 120 if (tab.active) { 121 if (isDisallowedUrl(tab.url)) { 122 $('scheme_title').innerText = 'Default color scheme:'; 123 $('make_default').style.display = 'none'; 124 } else { 125 site = siteFromUrl(tab.url); 126 $('scheme_title').innerHTML = 'Color scheme for <b>' + site + 127 '</b>:<br><span class="kb">(' + key2 + ')</span>'; 128 $('make_default').style.display = 'block'; 129 } 130 update(); 131 return; 132 } 133 } 134 site = 'unknown site'; 135 update(); 136 }); 137 } 138 139 window.addEventListener('load', init, false); 140