Home | History | Annotate | Download | only in resources
      1 // Copyright 2013 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 function toggleHelpBox() {
      6   var helpBoxOuter = document.getElementById('help-box-outer');
      7   helpBoxOuter.classList.toggle('hidden');
      8   var detailsButton = document.getElementById('details-button');
      9   if (helpBoxOuter.classList.contains('hidden'))
     10     detailsButton.innerText = detailsButton.detailsText;
     11   else
     12     detailsButton.innerText = detailsButton.hideDetailsText;
     13 }
     14 
     15 function diagnoseErrors() {
     16   var extensionId = 'idddmepepmjcgiedknnmlbadcokidhoa';
     17   var diagnoseFrame = document.getElementById('diagnose-frame');
     18   diagnoseFrame.innerHTML =
     19       '<iframe src="chrome-extension://' + extensionId +
     20       '/index.html"></iframe>';
     21 }
     22 
     23 // Subframes use a different layout but the same html file.  This is to make it
     24 // easier to support platforms that load the error page via different
     25 // mechanisms (Currently just iOS).
     26 if (window.top.location != window.location)
     27   document.documentElement.setAttribute('subframe', '');
     28 
     29 // Re-renders the error page using |strings| as the dictionary of values.
     30 // Used by NetErrorTabHelper to update DNS error pages with probe results.
     31 function updateForDnsProbe(strings) {
     32   i18nTemplate.process(document, strings);
     33   var context = new JsEvalContext(strings);
     34   jstProcess(context, document.getElementById('t'));
     35 }
     36 
     37 // Given the classList property of an element, adds an icon class to the list
     38 // and removes the previously-
     39 function updateIconClass(classList, newClass) {
     40   var oldClass;
     41 
     42   if (classList.hasOwnProperty('last_icon_class')) {
     43     oldClass = classList['last_icon_class'];
     44     if (oldClass == newClass)
     45       return;
     46   }
     47 
     48   classList.add(newClass);
     49   if (oldClass !== undefined)
     50     classList.remove(oldClass);
     51 
     52   classList['last_icon_class'] = newClass;
     53 
     54   if (newClass == 'icon-offline') {
     55     document.body.classList.add('offline');
     56     new Runner('.interstitial-wrapper');
     57   }
     58 }
     59 
     60 // Does a search using |baseSearchUrl| and the text in the search box.
     61 function search(baseSearchUrl) {
     62   var searchTextNode = document.getElementById('search-box');
     63   document.location = baseSearchUrl + searchTextNode.value;
     64   return false;
     65 }
     66 
     67 // Use to track clicks on elements generated by the navigation correction
     68 // service.  If |trackingId| is negative, the element does not come from the
     69 // correction service.
     70 function trackClick(trackingId) {
     71   // This can't be done with XHRs because XHRs are cancelled on navigation
     72   // start, and because these are cross-site requests.
     73   if (trackingId >= 0 && errorPageController)
     74     errorPageController.trackClick(trackingId);
     75 }
     76 
     77 // Called when an <a> tag generated by the navigation correction service is
     78 // clicked.  Separate function from trackClick so the resources don't have to
     79 // be updated if new data is added to jstdata.
     80 function linkClicked(jstdata) {
     81   trackClick(jstdata.trackingId);
     82 }
     83 
     84 // Implements button clicks.  This function is needed during the transition
     85 // between implementing these in trunk chromium and implementing them in
     86 // iOS.
     87 function reloadButtonClick(url) {
     88   if (window.errorPageController) {
     89     errorPageController.reloadButtonClick();
     90   } else {
     91     location = url;
     92   }
     93 }
     94 
     95 function loadStaleButtonClick() {
     96   if (window.errorPageController) {
     97     errorPageController.loadStaleButtonClick();
     98   }
     99 }
    100 
    101 function detailsButtonClick() {
    102   if (window.errorPageController)
    103     errorPageController.detailsButtonClick();
    104 }
    105 
    106 var primaryControlOnLeft = true;
    107 <if expr="is_macosx or is_ios or is_linux or is_android">
    108 primaryControlOnLeft = false;
    109 </if>
    110 
    111 // Sets up the proper button layout for the current platform.
    112 function setButtonLayout() {
    113   var buttonsDiv = document.getElementById('buttons');
    114   var controlButtonDiv = document.getElementById('control-buttons');
    115   var reloadButton = document.getElementById('reload-button');
    116   var detailsButton = document.getElementById('details-button');
    117   var staleLoadButton = document.getElementById('stale-load-button');
    118 
    119   var primaryButton = reloadButton;
    120   var secondaryButton = staleLoadButton;
    121 
    122   if (primaryControlOnLeft) {
    123     buttons.classList.add('suggested-left');
    124     controlButtonDiv.insertBefore(primaryButton, secondaryButton);
    125   } else {
    126     buttons.classList.add('suggested-right');
    127     controlButtonDiv.insertBefore(secondaryButton, primaryButton);
    128   }
    129 
    130   if (reloadButton.style.display == 'none' &&
    131       staleLoadButton.style.display == 'none') {
    132     detailsButton.classList.add('singular');
    133   }
    134 
    135   if (templateData) {
    136     // Hide the details button if there are no details to show.
    137     if (templateData.summary && !templateData.summary.msg) {
    138       detailsButton.style.display = 'none';
    139       document.getElementById('help-box-outer').style.display = 'block';
    140     }
    141 
    142     // Show control buttons.
    143     if (templateData.reloadButton && templateData.reloadButton.msg ||
    144         templateData.staleLoadButton && templateData.staleLoadButton.msg) {
    145       controlButtonDiv.hidden = false;
    146     }
    147   }
    148 }
    149 
    150 document.addEventListener('DOMContentLoaded', setButtonLayout);
    151