// 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 showSavedCopyButtonClick() {
if (window.errorPageController) {
errorPageController.showSavedCopyButtonClick();
}
}
function detailsButtonClick() {
if (window.errorPageController)
errorPageController.detailsButtonClick();
}
/**
* Replace the reload button with the Google cached copy suggestion.
*/
function setUpCachedButton(buttonStrings) {
var reloadButton = document.getElementById('reload-button');
reloadButton.textContent = buttonStrings.msg;
var url = buttonStrings.cacheUrl;
var trackingId = buttonStrings.trackingId;
reloadButton.onclick = function(e) {
e.preventDefault();
trackClick(trackingId);
location = url;
};
reloadButton.style.display = '';
document.getElementById('control-buttons').hidden = false;
}
var primaryControlOnLeft = true;
primaryControlOnLeft = false;
function onDocumentLoad() {
var controlButtonDiv = document.getElementById('control-buttons');
var reloadButton = document.getElementById('reload-button');
var detailsButton = document.getElementById('details-button');
var showSavedCopyButton = document.getElementById('show-saved-copy-button');
var primaryButton, secondaryButton;
if (showSavedCopyButton.primary) {
primaryButton = showSavedCopyButton;
secondaryButton = reloadButton;
} else {
primaryButton = reloadButton;
secondaryButton = showSavedCopyButton;
}
// Sets up the proper button layout for the current platform.
if (primaryControlOnLeft) {
buttons.classList.add('suggested-left');
controlButtonDiv.insertBefore(secondaryButton, primaryButton);
} else {
buttons.classList.add('suggested-right');
controlButtonDiv.insertBefore(primaryButton, secondaryButton);
}
if (reloadButton.style.display == 'none' &&
showSavedCopyButton.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('showSavedCopyButton') &&
loadTimeData.getValue('showSavedCopyButton').msg) {
controlButtonDiv.hidden = false;
// Set the secondary button state in the cases of two call to actions.
if (loadTimeData.valueExists('reloadButton') &&
loadTimeData.getValue('reloadButton').msg &&
loadTimeData.valueExists('showSavedCopyButton') &&
loadTimeData.getValue('showSavedCopyButton').msg) {
secondaryButton.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;
}
// Check for Google cached copy suggestion.
if (loadTimeData.valueExists('cacheButton')) {
setUpCachedButton(loadTimeData.getValue('cacheButton'));
}
}
document.addEventListener('DOMContentLoaded', onDocumentLoad);