// 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('details'); helpBoxOuter.classList.toggle('hidden'); var detailsButton = document.getElementById('details-button'); if (helpBoxOuter.classList.contains('hidden')) detailsButton.innerText = detailsButton.detailsText; else detailsButton.innerText = detailsButton.hideDetailsText; // Details appears over the main content on small screens. if (mobileNav) { document.getElementById('main-content').classList.toggle('hidden'); var runnerContainer = document.querySelector('.runner-container'); if (runnerContainer) { runnerContainer.classList.toggle('hidden'); } } } function diagnoseErrors() { var extensionId = 'idddmepepmjcgiedknnmlbadcokidhoa'; var diagnoseFrame = document.getElementById('diagnose-frame'); diagnoseFrame.innerHTML = ''; } // 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'); } else { document.body.classList.add('neterror'); } } // 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 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; primaryControlOnLeft = false; 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'; } // Show control buttons. if (loadTimeData.valueExists('reloadButton') && loadTimeData.getValue('reloadButton').msg || loadTimeData.valueExists('staleLoadButton') && loadTimeData.getValue('staleLoadButton').msg) { controlButtonDiv.hidden = false; // Set the secondary button state in the cases of two call to actions. // Reload is secondary to stale load. if (loadTimeData.valueExists('staleLoadButton') && loadTimeData.getValue('staleLoadButton').msg) { reloadButton.classList.add('secondary-button'); } } // 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);