Home | History | Annotate | Download | only in highcontrast
      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 = '&#x2318;+Shift+F11';
    111     key2 = '&#x2318;+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