| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| function toggleHelpBox() { |
| var helpBoxOuter = document.getElementById('help-box-outer'); |
| helpBoxOuter.classList.toggle('hidden'); |
| var detailsButton = document.getElementById('details-button'); |
| if (helpBoxOuter.classList.contains('hidden')) |
| detailsButton.innerText = detailsButton.detailsText; |
| else |
| detailsButton.innerText = detailsButton.hideDetailsText; |
| } |
| |
| function diagnoseErrors() { |
| var extensionId = 'idddmepepmjcgiedknnmlbadcokidhoa'; |
| var diagnoseFrame = document.getElementById('diagnose-frame'); |
| diagnoseFrame.innerHTML = |
| '<iframe src="chrome-extension://' + extensionId + |
| '/index.html"></iframe>'; |
| } |
| |
| // Subframes use a different layout but the same html file. This is to make it |
| // easier to support platforms that load the error page via different |
| // mechanisms (Currently just iOS). |
| if (window.top.location != window.location) |
| document.documentElement.setAttribute('subframe', ''); |
| |
| // Re-renders the error page using |strings| as the dictionary of values. |
| // Used by NetErrorTabHelper to update DNS error pages with probe results. |
| function updateForDnsProbe(strings) { |
| var context = new JsEvalContext(strings); |
| jstProcess(context, document.getElementById('t')); |
| } |
| |
| // Given the classList property of an element, adds an icon class to the list |
| // and removes the previously- |
| function updateIconClass(classList, newClass) { |
| var oldClass; |
| |
| if (classList.hasOwnProperty('last_icon_class')) { |
| oldClass = classList['last_icon_class']; |
| if (oldClass == newClass) |
| return; |
| } |
| |
| classList.add(newClass); |
| if (oldClass !== undefined) |
| classList.remove(oldClass); |
| |
| classList['last_icon_class'] = newClass; |
| |
| if (newClass == 'icon-offline') { |
| document.body.classList.add('offline'); |
| new Runner('.interstitial-wrapper'); |
| } |
| } |
| |
| // Does a search using |baseSearchUrl| and the text in the search box. |
| function search(baseSearchUrl) { |
| var searchTextNode = document.getElementById('search-box'); |
| document.location = baseSearchUrl + searchTextNode.value; |
| return false; |
| } |
| |
| // Use to track clicks on elements generated by the navigation correction |
| // service. If |trackingId| is negative, the element does not come from the |
| // correction service. |
| function trackClick(trackingId) { |
| // This can't be done with XHRs because XHRs are cancelled on navigation |
| // start, and because these are cross-site requests. |
| if (trackingId >= 0 && errorPageController) |
| errorPageController.trackClick(trackingId); |
| } |
| |
| // Called when an <a> tag generated by the navigation correction service is |
| // clicked. Separate function from trackClick so the resources don't have to |
| // be updated if new data is added to jstdata. |
| function linkClicked(jstdata) { |
| trackClick(jstdata.trackingId); |
| } |
| |
| // Implements button clicks. This function is needed during the transition |
| // between implementing these in trunk chromium and implementing them in |
| // iOS. |
| function reloadButtonClick(url) { |
| if (window.errorPageController) { |
| errorPageController.reloadButtonClick(); |
| } else { |
| location = url; |
| } |
| } |
| |
| function loadStaleButtonClick() { |
| if (window.errorPageController) { |
| errorPageController.loadStaleButtonClick(); |
| } |
| } |
| |
| function detailsButtonClick() { |
| if (window.errorPageController) |
| errorPageController.detailsButtonClick(); |
| } |
| |
| var primaryControlOnLeft = true; |
| <if expr="is_macosx or is_ios or is_linux or is_android"> |
| primaryControlOnLeft = false; |
| </if> |
| |
| function onDocumentLoad() { |
| var buttonsDiv = document.getElementById('buttons'); |
| var controlButtonDiv = document.getElementById('control-buttons'); |
| var reloadButton = document.getElementById('reload-button'); |
| var detailsButton = document.getElementById('details-button'); |
| var staleLoadButton = document.getElementById('stale-load-button'); |
| |
| var primaryButton = reloadButton; |
| var secondaryButton = staleLoadButton; |
| |
| // Sets up the proper button layout for the current platform. |
| if (primaryControlOnLeft) { |
| buttons.classList.add('suggested-left'); |
| controlButtonDiv.insertBefore(primaryButton, secondaryButton); |
| } else { |
| buttons.classList.add('suggested-right'); |
| controlButtonDiv.insertBefore(secondaryButton, primaryButton); |
| } |
| |
| if (reloadButton.style.display == 'none' && |
| staleLoadButton.style.display == 'none') { |
| detailsButton.classList.add('singular'); |
| } |
| |
| // Hide the details button if there are no details to show. |
| if (loadTimeData.valueExists('summary') && |
| !loadTimeData.getValue('summary').msg) { |
| detailsButton.style.display = 'none'; |
| document.getElementById('help-box-outer').style.display = 'block'; |
| } |
| |
| // Show control buttons. |
| if (loadTimeData.valueExists('reloadButton') && |
| loadTimeData.getValue('reloadButton').msg || |
| loadTimeData.valueExists('staleLoadButton') && |
| loadTimeData.getValue('staleLoadButton').msg) { |
| controlButtonDiv.hidden = false; |
| } |
| |
| // Add a main message paragraph. |
| if (loadTimeData.valueExists('primaryParagraph')) { |
| var p = document.querySelector('#main-message p'); |
| p.innerHTML = loadTimeData.getString('primaryParagraph'); |
| p.hidden = false; |
| } |
| } |
| |
| document.addEventListener('DOMContentLoaded', onDocumentLoad); |