ae34582c6a3aa601c0de29281b85702aba903020
[platform/framework/web/crosswalk.git] / src / chrome / renderer / resources / neterror.js
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.hidden = true;
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);