Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: chrome/test/data/extensions/samples/buildbot/buildbot.html

Issue 109031: Switch from using an iframe to using a JSON URL and dynamically generating th... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 <script> 1 <script>
2 var botRoot = "http://build.chromium.org/buildbot/waterfall"; 2 var botRoot = "http://build.chromium.org/buildbot/waterfall";
3 var botUrl = botRoot + "/horizontal_one_box_per_builder"; 3 //var botRoot = "http://hae14.jail:8016";
Aaron Boodman 2009/05/15 00:15:17 Can you remove this internal URL?
4 var statusURL = "http://chromium-status.appspot.com/current";
5 //var waterfallURL = botRoot + "/console_json?name=erikkay@chromium.org&json=1";
6 var waterfallURL = botRoot + "/console_json?json=1";
7 var botList;
8 var checkinResults;
4 9
5 function updateStatus(status) { 10 function updateStatus(text) {
11 var results = (new RegExp('"Notice".*>(.*)<', 'g')).exec(text);
12 if (!results || results.index < 0) {
13 console.log("Error: couldn't find status div");
14 console.log(text);
15 return;
16 }
17 var status = results[1];
6 var div = document.getElementById("status"); 18 var div = document.getElementById("status");
7 div.title = status; 19 div.title = status;
8 var open = /open/i; 20 var open = /open/i;
9 if (open.exec(status)) { 21 if (open.exec(status)) {
10 div.innerHTML = "tree: &nbsp;open&nbsp;"; 22 div.innerHTML = "tree: &nbsp;open&nbsp;";
11 div.className = "open"; 23 div.className = "open";
12 } else { 24 } else {
13 div.innerHTML = "tree: closed"; 25 div.innerHTML = "tree: closed";
14 div.className = "closed"; 26 div.className = "closed";
15 } 27 }
16 } 28 }
17 29
30 function updateBots(text) {
31 var results = (new RegExp('(.*)<\/body>', 'g')).exec(text);
32 if (!results || results.index < 0) {
33 console.log("Error: couldn't find bot JSON");
34 console.log(text);
35 return;
36 }
37 var data;
38 if (JSON) {
39 try {
40 data = JSON.parse(results[1]);
41 } catch (e) {
42 console.dir(e);
43 console.log(text);
44 return;
45 }
46 } else {
47 eval("var data = " + results[1]);
48 }
49 if (!data) {
50 console.log("Error: JSON parse fail");
51 console.log(results[1]);
52 return;
53 }
54 botList = data[0];
55 checkinResults = data[1];
56 console.dir(botList);
57 displayBots();
58 }
59
60 function showBot(botIndex) {
61 var bot = botList[botIndex];
62 var url = botRoot + "/waterfall?builder=" + bot.name;
63 //var url = botRoot + "/builders/" + bot.name;
64 //var url = botRoot + "/" + bot.url;
65 window.open(url);
66 window.event.stopPropagation();
67 }
68
69 function displayBots() {
70 if (!botList) {
71 console.log("botList is null");
72 return;
73 }
74 var bots = document.getElementById("bots");
75 var html = "";
76 if (bots.className == "visible") {
77 botList.forEach(function(bot, i) {
78 html += "<div class='bot " + bot.color +
79 "' onclick='showBot(" + i + ")' " +
80 "title='" + bot.title + "'></div>";
81 });
82 }
83 bots.innerHTML = html;
84 }
85
18 function requestStatus() { 86 function requestStatus() {
87 requestURL(statusURL, updateStatus);
88 requestURL(waterfallURL, updateBots);
89 setTimeout(requestStatus, 30000);
90 }
91
92 function requestURL(url, callback) {
19 var xhr = new XMLHttpRequest(); 93 var xhr = new XMLHttpRequest();
20 try { 94 try {
21 xhr.onreadystatechange = function(state) { 95 xhr.onreadystatechange = function(state) {
22 if (xhr.readyState == 4) { 96 if (xhr.readyState == 4) {
23 var text = xhr.responseText; 97 var text = xhr.responseText;
24 var re = /"Notice"[^>]*>([^<\n]+)</g; 98 callback(text);
25 var results = re.exec(text);
26 if (results && results.index >= 0) {
27 updateStatus(results[1]);
28 } else {
29 console.log("Error: couldn't find node");
30 }
31 } 99 }
32 } 100 }
33 101
34 xhr.onerror = function(error) { 102 xhr.onerror = function(error) {
35 console.log("xhr error: " + error); 103 console.log("xhr error: " + error);
36 } 104 }
37 105
38 xhr.open("GET", "http://chromium-status.appspot.com/current"); 106 xhr.open("GET", url);
39 xhr.send({}); 107 xhr.send({});
40 } catch(e) { 108 } catch(e) {
41 console.log("exception: " + e); 109 console.log("exception: " + e);
42 } 110 }
43 setTimeout(requestStatus, 30000);
44 } 111 }
45 112
46 var hoverTimerId = null; 113 var hoverTimerId = null;
47 var hideTimerId = null; 114 var hideTimerId = null;
48 115
49 window.addEventListener("mouseover", function(e) { 116 window.addEventListener("mouseover", function(e) {
50 if (hideTimerId) { 117 if (hideTimerId) {
51 hideTimerId = window.clearTimeout(hideTimerId); 118 hideTimerId = window.clearTimeout(hideTimerId);
52 } 119 }
53 120
54 if (bots.className != "visible" && !hoverTimerId) { 121 if (bots.className != "visible" && !hoverTimerId) {
55 hoverTimerId = window.setTimeout(function() { 122 hoverTimerId = window.setTimeout(function() {
56 hoverTimerId = null; 123 hoverTimerId = null;
57 var bots = document.getElementById("bots"); 124 var bots = document.getElementById("bots");
58 bots.className = "visible"; 125 bots.className = "visible";
59 // TODO(erikkay): this generates "Unsafe JavaScript attempt to access 126 displayBots();
60 // frame with URL".
61 bots.src = botUrl + "?xxx=" + (new Date()).getTime();
62 }, 1000); 127 }, 1000);
63 } 128 }
64 }, false); 129 }, false);
65 130
66 window.addEventListener("mouseout", function(e) { 131 window.addEventListener("mouseout", function(e) {
67 if (hoverTimerId) { 132 if (hoverTimerId) {
68 hoverTimerId = window.clearTimeout(hoverTimerId); 133 hoverTimerId = window.clearTimeout(hoverTimerId);
69 } 134 }
70 135
71 if (bots.className != "" && !hideTimerId) { 136 if (bots.className != "" && !hideTimerId) {
72 hideTimerId = window.setTimeout(function() { 137 hideTimerId = window.setTimeout(function() {
73 hideTimerId = null; 138 hideTimerId = null;
74 var bots = document.getElementById("bots"); 139 var bots = document.getElementById("bots");
75 bots.className = ""; 140 bots.className = "";
141 //displayBots();
76 }, 1000); 142 }, 1000);
77 } 143 }
78 }, false); 144 }, false);
79 145
80 window.addEventListener("click", function() { 146 window.addEventListener("click", function() {
81 window.open(botRoot); 147 window.open(botRoot);
82 }, false); 148 }, false);
83 149
84 requestStatus(); 150 requestStatus();
85 </script> 151 </script>
86 152
87 <style> 153 <style>
88 #status { 154 #status {
89 font-weight:bold; 155 font-weight:bold;
90 } 156 }
91 157
158 #change {
159 font-weight:bold;
160 }
161
92 .open { 162 .open {
93 color: green; 163 color: green;
94 } 164 }
95 165
96 .closed { 166 .closed {
97 color: red; 167 color: red;
98 } 168 }
99 169
100 #bots { 170 #bots {
101 border: none; 171 border: none;
102 height: 15px; 172 height: 100%;
103 width: 0; 173 width: 0;
104 -webkit-transition: width .2s linear; 174 -webkit-transition: width .2s linear;
105 background-color: transparent; 175 background-color: transparent;
106 display:-webkit-box; 176 display:-webkit-box;
107 margin-left:-5px; 177 -webkit-box-align:center; /* center content vertically */
178 overflow: hidden;
179 padding-left: 2px;
108 } 180 }
109 181
110 #bots.visible { 182 #bots.visible {
111 width: 435px; /* hardcoded width sucks */ 183 width: 612px; /* hardcoded width sucks */
112 } 184 }
113 185
114 #frame-wrapper { 186 .bot {
115 /* This is used to get us to vertically center the iframe in the vertical 187 margin-right: 1px;
116 space. */ 188 line-height: 100%;
117 -webkit-box-align:center; 189 cursor: pointer;
118 /* Also, scooch the frame in a bit, under the button, because the content of 190 -webkit-border-radius: 2px;
119 the frame has some extra built-in left padding. */
120 display:-webkit-box; 191 display:-webkit-box;
192 width: 10px;
193 height: 15px;
194 }
195
196 .running {
197 background-color: rgb(255, 252, 108);
198 border: 1px solid rgb(197, 197, 109);
199 }
200
201 .notstarted {
202 /* background-color: white; */
203 border: 1px solid rgb(170, 170, 170);
204 }
205
206 .failure {
207 background-color: rgb(233, 128, 128);
208 border: 1px solid rgb(167, 114, 114);
209 }
210
211 .warnings {
212 background-color: rgb(255, 195, 67);
213 border: 1px solid rgb(194, 157, 70);
214 }
215
216 .success {
217 background-color: rgb(143, 223, 95);
218 border: 1px solid rgb(79, 133, 48);
219 }
220
221 .exception {
222 background-color: rgb(224, 176, 255);
223 border: 1px solid rgb(172, 160, 179);
121 } 224 }
122 225
123 </style> 226 </style>
124 227
125 <div class="toolstrip-button"> 228 <div class="toolstrip-button">
126 <span id="status" class="open">tree: open?</span> 229 <span id="status" class="open">tree: open?</span>
127 <div id="frame-wrapper">
128 <iframe scrolling="no" id="bots"></iframe>
129 </div> 230 </div>
231 <div id="bots">
130 </div> 232 </div>
233 <div class="toolstrip-button">
234 <span id="console" class="unknown">change: (none)</span>
Aaron Boodman 2009/05/15 00:15:17 Can we just remove this bit for now if it doesn't
235 </div>
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698