OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 (function() { | 5 (function() { |
6 'use strict'; | 6 'use strict'; |
7 | 7 |
8 cr.define('cr.translateInternals', function() { | 8 cr.define('cr.translateInternals', function() { |
9 | 9 |
| 10 var detectionLogs_ = null; |
| 11 |
| 12 function detectionLogs() { |
| 13 if (detectionLogs_ === null) |
| 14 detectionLogs_ = []; |
| 15 return detectionLogs_; |
| 16 } |
| 17 |
10 /** | 18 /** |
11 * Initializes UI and sends a message to the browser for | 19 * Initializes UI and sends a message to the browser for |
12 * initialization. | 20 * initialization. |
13 */ | 21 */ |
14 function initialize() { | 22 function initialize() { |
15 cr.ui.decorate('tabbox', cr.ui.TabBox); | 23 cr.ui.decorate('tabbox', cr.ui.TabBox); |
16 chrome.send('requestInfo'); | 24 chrome.send('requestInfo'); |
| 25 |
| 26 var button = $('detection-logs-dump'); |
| 27 button.addEventListener('click', onDetectionLogsDump); |
17 } | 28 } |
18 | 29 |
19 /** | 30 /** |
20 * Creates a new LI element with a button to dismiss the item. | 31 * Creates a new LI element with a button to dismiss the item. |
21 * | 32 * |
22 * @param {string} text The lable of the LI element. | 33 * @param {string} text The lable of the LI element. |
23 * @param {Function} func Callback called when the button is clicked. | 34 * @param {Function} func Callback called when the button is clicked. |
24 */ | 35 */ |
25 function createLIWithDismissingButton(text, func) { | 36 function createLIWithDismissingButton(text, func) { |
26 var span = document.createElement('span'); | 37 var span = document.createElement('span'); |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 return td; | 215 return td; |
205 } | 216 } |
206 | 217 |
207 /** | 218 /** |
208 * Handles the message of 'languageDetectionInfoAdded' from the | 219 * Handles the message of 'languageDetectionInfoAdded' from the |
209 * browser. | 220 * browser. |
210 * | 221 * |
211 * @param {Object} detail The object which represents the logs. | 222 * @param {Object} detail The object which represents the logs. |
212 */ | 223 */ |
213 function onLanguageDetectionInfoAdded(detail) { | 224 function onLanguageDetectionInfoAdded(detail) { |
| 225 cr.translateInternals.detectionLogs().push(detail); |
| 226 |
214 var tr = document.createElement('tr'); | 227 var tr = document.createElement('tr'); |
215 | 228 |
216 var date = new Date(detail['time']); | 229 var date = new Date(detail['time']); |
217 [ | 230 [ |
218 createTD(formatDate(date), 'detection-logs-time'), | 231 createTD(formatDate(date), 'detection-logs-time'), |
219 createTD(detail['url'], 'detection-logs-url'), | 232 createTD(detail['url'], 'detection-logs-url'), |
220 createTD(formatLanguageCode(detail['content_language']), | 233 createTD(formatLanguageCode(detail['content_language']), |
221 'detection-logs-content-language'), | 234 'detection-logs-content-language'), |
222 createTD(formatLanguageCode(detail['cld_language']), | 235 createTD(formatLanguageCode(detail['cld_language']), |
223 'detection-logs-cld-language'), | 236 'detection-logs-cld-language'), |
224 createTD(detail['is_cld_reliable'], | 237 createTD(detail['is_cld_reliable'], |
225 'detection-logs-is-cld-reliable'), | 238 'detection-logs-is-cld-reliable'), |
226 createTD(formatLanguageCode(detail['language']), | 239 createTD(formatLanguageCode(detail['language']), |
227 'detection-logs-language'), | 240 'detection-logs-language'), |
| 241 createTD(formatLanguageCode(detail['content']), |
| 242 'detection-logs-content'), |
228 ].forEach(function(td) { | 243 ].forEach(function(td) { |
229 tr.appendChild(td); | 244 tr.appendChild(td); |
230 }); | 245 }); |
231 | 246 |
| 247 // TD (and TR) can't use the CSS property 'max-height', so DIV |
| 248 // in the content is needed. |
| 249 var contentTD = tr.querySelector('.detection-logs-content'); |
| 250 var div = document.createElement('div'); |
| 251 div.textContent = contentTD.textContent; |
| 252 contentTD.textContent = ''; |
| 253 contentTD.appendChild(div); |
| 254 |
232 var tbody = $('detection-logs').getElementsByTagName('tbody')[0]; | 255 var tbody = $('detection-logs').getElementsByTagName('tbody')[0]; |
233 tbody.appendChild(tr); | 256 tbody.appendChild(tr); |
234 } | 257 } |
235 | 258 |
236 /** | 259 /** |
237 * Handles the message of 'translateErrorDetailsAdded' from the | 260 * Handles the message of 'translateErrorDetailsAdded' from the |
238 * browser. | 261 * browser. |
239 * | 262 * |
240 * @param {Object} details The object which represents the logs. | 263 * @param {Object} details The object which represents the logs. |
241 */ | 264 */ |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 break; | 297 break; |
275 case 'translateErrorDetailsAdded': | 298 case 'translateErrorDetailsAdded': |
276 cr.translateInternals.onTranslateErrorDetailsAdded(detail); | 299 cr.translateInternals.onTranslateErrorDetailsAdded(detail); |
277 break; | 300 break; |
278 default: | 301 default: |
279 console.error('Unknown message:', message); | 302 console.error('Unknown message:', message); |
280 break; | 303 break; |
281 } | 304 } |
282 } | 305 } |
283 | 306 |
| 307 /** |
| 308 * The callback of button#detetion-logs-dump. |
| 309 */ |
| 310 function onDetectionLogsDump() { |
| 311 var data = JSON.stringify(cr.translateInternals.detectionLogs()); |
| 312 var blob = new Blob([data], {'type': 'text/json'}); |
| 313 var url = webkitURL.createObjectURL(blob); |
| 314 var filename = 'translate_internals_detect_logs_dump.json'; |
| 315 |
| 316 var a = document.createElement('a'); |
| 317 a.setAttribute('href', url); |
| 318 a.setAttribute('download', filename); |
| 319 |
| 320 var event = document.createEvent('MouseEvent'); |
| 321 event.initMouseEvent('click', true, true, window, 0, |
| 322 0, 0, 0, 0, 0, 0, 0, 0, 0, null); |
| 323 a.dispatchEvent(event); |
| 324 } |
| 325 |
284 return { | 326 return { |
| 327 detectionLogs: detectionLogs, |
285 initialize: initialize, | 328 initialize: initialize, |
286 messageHandler: messageHandler, | 329 messageHandler: messageHandler, |
287 onLanguageDetectionInfoAdded: onLanguageDetectionInfoAdded, | 330 onLanguageDetectionInfoAdded: onLanguageDetectionInfoAdded, |
288 onPrefsUpdated: onPrefsUpdated, | 331 onPrefsUpdated: onPrefsUpdated, |
289 onTranslateErrorDetailsAdded: onTranslateErrorDetailsAdded, | 332 onTranslateErrorDetailsAdded: onTranslateErrorDetailsAdded, |
290 }; | 333 }; |
291 }); | 334 }); |
292 | 335 |
293 /** | 336 /** |
294 * The entry point of the UI. | 337 * The entry point of the UI. |
295 */ | 338 */ |
296 function main() { | 339 function main() { |
297 cr.doc.addEventListener('DOMContentLoaded', | 340 cr.doc.addEventListener('DOMContentLoaded', |
298 cr.translateInternals.initialize); | 341 cr.translateInternals.initialize); |
299 } | 342 } |
300 | 343 |
301 main(); | 344 main(); |
302 })(); | 345 })(); |
OLD | NEW |