| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // TODO(jhawkins): Use hidden instead of showInline* and display:none. | 5 // TODO(jhawkins): Use hidden instead of showInline* and display:none. |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * The type of the download object. The definition is based on | 8 * The type of the download object. The definition is based on |
| 9 * chrome/browser/ui/webui/downloads_dom_handler.cc:CreateDownloadItemValue() | 9 * chrome/browser/ui/webui/downloads_dom_handler.cc:CreateDownloadItemValue() |
| 10 * @typedef {{by_ext_id: (string|undefined), | 10 * @typedef {{by_ext_id: (string|undefined), |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 * @param {!Element} node The target element to show or hide. | 45 * @param {!Element} node The target element to show or hide. |
| 46 * @param {boolean} isShow Should the target element be visible. | 46 * @param {boolean} isShow Should the target element be visible. |
| 47 */ | 47 */ |
| 48 function showInlineBlock(node, isShow) { | 48 function showInlineBlock(node, isShow) { |
| 49 node.style.display = isShow ? 'inline-block' : 'none'; | 49 node.style.display = isShow ? 'inline-block' : 'none'; |
| 50 } | 50 } |
| 51 | 51 |
| 52 /** | 52 /** |
| 53 * Creates a link with a specified onclick handler and content. | 53 * Creates a link with a specified onclick handler and content. |
| 54 * @param {function()} onclick The onclick handler. | 54 * @param {function()} onclick The onclick handler. |
| 55 * @param {string} value The link text. | 55 * @param {string=} opt_text The link text. |
| 56 * @return {!Element} The created link element. | 56 * @return {!Element} The created link element. |
| 57 */ | 57 */ |
| 58 function createLink(onclick, value) { | 58 function createActionLink(onclick, opt_text) { |
| 59 var link = document.createElement('a'); | 59 var link = document.createElement('a', 'action-link'); |
| 60 link.onclick = onclick; | 60 link.onclick = onclick; |
| 61 link.href = '#'; | 61 if (opt_text) link.textContent = opt_text; |
| 62 link.textContent = value; | |
| 63 link.oncontextmenu = function() { return false; }; | |
| 64 return link; | 62 return link; |
| 65 } | 63 } |
| 66 | 64 |
| 67 /** | 65 /** |
| 68 * Creates a button with a specified onclick handler and content. | 66 * Creates a button with a specified onclick handler and content. |
| 69 * @param {function()} onclick The onclick handler. | 67 * @param {function()} onclick The onclick handler. |
| 70 * @param {string} value The button text. | 68 * @param {string} value The button text. |
| 71 * @return {Element} The created button. | 69 * @return {Element} The created button. |
| 72 */ | 70 */ |
| 73 function createButton(onclick, value) { | 71 function createButton(onclick, value) { |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 } | 321 } |
| 324 | 322 |
| 325 this.nodeImg_ = createElementWithClassName('img', 'icon'); | 323 this.nodeImg_ = createElementWithClassName('img', 'icon'); |
| 326 this.nodeImg_.alt = ''; | 324 this.nodeImg_.alt = ''; |
| 327 this.safe_.appendChild(this.nodeImg_); | 325 this.safe_.appendChild(this.nodeImg_); |
| 328 | 326 |
| 329 // FileLink is used for completed downloads, otherwise we show FileName. | 327 // FileLink is used for completed downloads, otherwise we show FileName. |
| 330 this.nodeTitleArea_ = createElementWithClassName('div', 'title-area'); | 328 this.nodeTitleArea_ = createElementWithClassName('div', 'title-area'); |
| 331 this.safe_.appendChild(this.nodeTitleArea_); | 329 this.safe_.appendChild(this.nodeTitleArea_); |
| 332 | 330 |
| 333 this.nodeFileLink_ = createLink(this.openFile_.bind(this), ''); | 331 this.nodeFileLink_ = createActionLink(this.openFile_.bind(this)); |
| 334 this.nodeFileLink_.className = 'name'; | 332 this.nodeFileLink_.className = 'name'; |
| 335 this.nodeFileLink_.style.display = 'none'; | 333 this.nodeFileLink_.style.display = 'none'; |
| 336 this.nodeTitleArea_.appendChild(this.nodeFileLink_); | 334 this.nodeTitleArea_.appendChild(this.nodeFileLink_); |
| 337 | 335 |
| 338 this.nodeFileName_ = createElementWithClassName('span', 'name'); | 336 this.nodeFileName_ = createElementWithClassName('span', 'name'); |
| 339 this.nodeFileName_.style.display = 'none'; | 337 this.nodeFileName_.style.display = 'none'; |
| 340 this.nodeTitleArea_.appendChild(this.nodeFileName_); | 338 this.nodeTitleArea_.appendChild(this.nodeFileName_); |
| 341 | 339 |
| 342 this.nodeStatus_ = createElementWithClassName('span', 'status'); | 340 this.nodeStatus_ = createElementWithClassName('span', 'status'); |
| 343 this.nodeTitleArea_.appendChild(this.nodeStatus_); | 341 this.nodeTitleArea_.appendChild(this.nodeStatus_); |
| 344 | 342 |
| 345 var nodeURLDiv = createElementWithClassName('div', 'url-container'); | 343 var nodeURLDiv = createElementWithClassName('div', 'url-container'); |
| 346 this.safe_.appendChild(nodeURLDiv); | 344 this.safe_.appendChild(nodeURLDiv); |
| 347 | 345 |
| 348 this.nodeURL_ = createElementWithClassName('a', 'src-url'); | 346 this.nodeURL_ = createElementWithClassName('a', 'src-url'); |
| 349 this.nodeURL_.target = '_blank'; | 347 this.nodeURL_.target = '_blank'; |
| 350 nodeURLDiv.appendChild(this.nodeURL_); | 348 nodeURLDiv.appendChild(this.nodeURL_); |
| 351 | 349 |
| 352 // Controls. | 350 // Controls. |
| 353 this.nodeControls_ = createElementWithClassName('div', 'controls'); | 351 this.nodeControls_ = createElementWithClassName('div', 'controls'); |
| 354 this.safe_.appendChild(this.nodeControls_); | 352 this.safe_.appendChild(this.nodeControls_); |
| 355 | 353 |
| 356 // We don't need 'show in folder' in chromium os. See download_ui.cc and | 354 // We don't need 'show in folder' in chromium os. See download_ui.cc and |
| 357 // http://code.google.com/p/chromium-os/issues/detail?id=916. | 355 // http://code.google.com/p/chromium-os/issues/detail?id=916. |
| 358 if (loadTimeData.valueExists('control_showinfolder')) { | 356 if (loadTimeData.valueExists('control_showinfolder')) { |
| 359 this.controlShow_ = createLink(this.show_.bind(this), | 357 this.controlShow_ = createActionLink(this.show_.bind(this), |
| 360 loadTimeData.getString('control_showinfolder')); | 358 loadTimeData.getString('control_showinfolder')); |
| 361 this.nodeControls_.appendChild(this.controlShow_); | 359 this.nodeControls_.appendChild(this.controlShow_); |
| 362 } else { | 360 } else { |
| 363 this.controlShow_ = null; | 361 this.controlShow_ = null; |
| 364 } | 362 } |
| 365 | 363 |
| 366 this.controlRetry_ = document.createElement('a'); | 364 this.controlRetry_ = document.createElement('a'); |
| 367 this.controlRetry_.download = ''; | 365 this.controlRetry_.download = ''; |
| 368 this.controlRetry_.textContent = loadTimeData.getString('control_retry'); | 366 this.controlRetry_.textContent = loadTimeData.getString('control_retry'); |
| 369 this.nodeControls_.appendChild(this.controlRetry_); | 367 this.nodeControls_.appendChild(this.controlRetry_); |
| 370 | 368 |
| 371 // Pause/Resume are a toggle. | 369 // Pause/Resume are a toggle. |
| 372 this.controlPause_ = createLink(this.pause_.bind(this), | 370 this.controlPause_ = createActionLink(this.pause_.bind(this), |
| 373 loadTimeData.getString('control_pause')); | 371 loadTimeData.getString('control_pause')); |
| 374 this.nodeControls_.appendChild(this.controlPause_); | 372 this.nodeControls_.appendChild(this.controlPause_); |
| 375 | 373 |
| 376 this.controlResume_ = createLink(this.resume_.bind(this), | 374 this.controlResume_ = createActionLink(this.resume_.bind(this), |
| 377 loadTimeData.getString('control_resume')); | 375 loadTimeData.getString('control_resume')); |
| 378 this.nodeControls_.appendChild(this.controlResume_); | 376 this.nodeControls_.appendChild(this.controlResume_); |
| 379 | 377 |
| 380 // Anchors <a> don't support the "disabled" property. | 378 // Anchors <a> don't support the "disabled" property. |
| 381 if (loadTimeData.getBoolean('allow_deleting_history')) { | 379 if (loadTimeData.getBoolean('allow_deleting_history')) { |
| 382 this.controlRemove_ = createLink(this.remove_.bind(this), | 380 this.controlRemove_ = createActionLink(this.remove_.bind(this), |
| 383 loadTimeData.getString('control_removefromlist')); | 381 loadTimeData.getString('control_removefromlist')); |
| 384 this.controlRemove_.classList.add('control-remove-link'); | 382 this.controlRemove_.classList.add('control-remove-link'); |
| 385 } else { | 383 } else { |
| 386 this.controlRemove_ = document.createElement('span'); | 384 this.controlRemove_ = document.createElement('span'); |
| 387 this.controlRemove_.classList.add('disabled-link'); | 385 this.controlRemove_.classList.add('disabled-link'); |
| 388 var text = document.createTextNode( | 386 var text = document.createTextNode( |
| 389 loadTimeData.getString('control_removefromlist')); | 387 loadTimeData.getString('control_removefromlist')); |
| 390 this.controlRemove_.appendChild(text); | 388 this.controlRemove_.appendChild(text); |
| 391 } | 389 } |
| 392 if (!loadTimeData.getBoolean('show_delete_history')) | 390 if (!loadTimeData.getBoolean('show_delete_history')) |
| 393 this.controlRemove_.hidden = true; | 391 this.controlRemove_.hidden = true; |
| 394 | 392 |
| 395 this.nodeControls_.appendChild(this.controlRemove_); | 393 this.nodeControls_.appendChild(this.controlRemove_); |
| 396 | 394 |
| 397 this.controlCancel_ = createLink(this.cancel_.bind(this), | 395 this.controlCancel_ = createActionLink(this.cancel_.bind(this), |
| 398 loadTimeData.getString('control_cancel')); | 396 loadTimeData.getString('control_cancel')); |
| 399 this.nodeControls_.appendChild(this.controlCancel_); | 397 this.nodeControls_.appendChild(this.controlCancel_); |
| 400 | 398 |
| 401 this.controlByExtension_ = document.createElement('span'); | 399 this.controlByExtension_ = document.createElement('span'); |
| 402 this.nodeControls_.appendChild(this.controlByExtension_); | 400 this.nodeControls_.appendChild(this.controlByExtension_); |
| 403 | 401 |
| 404 // Container for 'unsafe download' UI. | 402 // Container for 'unsafe download' UI. |
| 405 this.danger_ = createElementWithClassName('div', 'show-dangerous'); | 403 this.danger_ = createElementWithClassName('div', 'show-dangerous'); |
| 406 this.node.appendChild(this.danger_); | 404 this.node.appendChild(this.danger_); |
| 407 | 405 |
| 408 this.dangerNodeImg_ = createElementWithClassName('img', 'icon'); | 406 this.dangerNodeImg_ = createElementWithClassName('img', 'icon'); |
| 409 this.dangerNodeImg_.alt = ''; | 407 this.dangerNodeImg_.alt = ''; |
| 410 this.danger_.appendChild(this.dangerNodeImg_); | 408 this.danger_.appendChild(this.dangerNodeImg_); |
| 411 | 409 |
| 412 this.dangerDesc_ = document.createElement('div'); | 410 this.dangerDesc_ = document.createElement('div'); |
| 413 this.danger_.appendChild(this.dangerDesc_); | 411 this.danger_.appendChild(this.dangerDesc_); |
| 414 | 412 |
| 415 // Buttons for the malicious case. | 413 // Buttons for the malicious case. |
| 416 this.malwareNodeControls_ = createElementWithClassName('div', 'controls'); | 414 this.malwareNodeControls_ = createElementWithClassName('div', 'controls'); |
| 417 this.malwareSave_ = createLink( | 415 this.malwareSave_ = createActionLink( |
| 418 this.saveDangerous_.bind(this), | 416 this.saveDangerous_.bind(this), |
| 419 loadTimeData.getString('danger_restore')); | 417 loadTimeData.getString('danger_restore')); |
| 420 this.malwareNodeControls_.appendChild(this.malwareSave_); | 418 this.malwareNodeControls_.appendChild(this.malwareSave_); |
| 421 this.malwareDiscard_ = createLink( | 419 this.malwareDiscard_ = createActionLink( |
| 422 this.discardDangerous_.bind(this), | 420 this.discardDangerous_.bind(this), |
| 423 loadTimeData.getString('control_removefromlist')); | 421 loadTimeData.getString('control_removefromlist')); |
| 424 this.malwareNodeControls_.appendChild(this.malwareDiscard_); | 422 this.malwareNodeControls_.appendChild(this.malwareDiscard_); |
| 425 this.danger_.appendChild(this.malwareNodeControls_); | 423 this.danger_.appendChild(this.malwareNodeControls_); |
| 426 | 424 |
| 427 // Buttons for the dangerous but not malicious case. | 425 // Buttons for the dangerous but not malicious case. |
| 428 this.dangerSave_ = createButton( | 426 this.dangerSave_ = createButton( |
| 429 this.saveDangerous_.bind(this), | 427 this.saveDangerous_.bind(this), |
| 430 loadTimeData.getString('danger_save')); | 428 loadTimeData.getString('danger_save')); |
| 431 this.danger_.appendChild(this.dangerSave_); | 429 this.danger_.appendChild(this.dangerSave_); |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 877 function load() { | 875 function load() { |
| 878 chrome.send('onPageLoaded'); | 876 chrome.send('onPageLoaded'); |
| 879 fifoResults = []; | 877 fifoResults = []; |
| 880 downloads = new Downloads(); | 878 downloads = new Downloads(); |
| 881 $('term').focus(); | 879 $('term').focus(); |
| 882 setSearch(''); | 880 setSearch(''); |
| 883 | 881 |
| 884 var clearAllHolder = $('clear-all-holder'); | 882 var clearAllHolder = $('clear-all-holder'); |
| 885 var clearAllElement; | 883 var clearAllElement; |
| 886 if (loadTimeData.getBoolean('allow_deleting_history')) { | 884 if (loadTimeData.getBoolean('allow_deleting_history')) { |
| 887 clearAllElement = createLink(clearAll, loadTimeData.getString('clear_all')); | 885 clearAllElement = createActionLink( |
| 886 clearAll, loadTimeData.getString('clear_all')); |
| 888 clearAllElement.classList.add('clear-all-link'); | 887 clearAllElement.classList.add('clear-all-link'); |
| 889 clearAllHolder.classList.remove('disabled-link'); | 888 clearAllHolder.classList.remove('disabled-link'); |
| 890 } else { | 889 } else { |
| 891 clearAllElement = document.createTextNode( | 890 clearAllElement = document.createTextNode( |
| 892 loadTimeData.getString('clear_all')); | 891 loadTimeData.getString('clear_all')); |
| 893 clearAllHolder.classList.add('disabled-link'); | 892 clearAllHolder.classList.add('disabled-link'); |
| 894 } | 893 } |
| 895 if (!loadTimeData.getBoolean('show_delete_history')) | 894 if (!loadTimeData.getBoolean('show_delete_history')) |
| 896 clearAllHolder.hidden = true; | 895 clearAllHolder.hidden = true; |
| 897 | 896 |
| 898 clearAllHolder.appendChild(clearAllElement); | 897 clearAllHolder.appendChild(clearAllElement); |
| 899 clearAllElement.oncontextmenu = function() { return false; }; | |
| 900 | 898 |
| 901 // TODO(jhawkins): Use a link-button here. | 899 $('open-downloads-folder').onclick = function() { |
| 902 var openDownloadsFolderLink = $('open-downloads-folder'); | |
| 903 openDownloadsFolderLink.onclick = function() { | |
| 904 chrome.send('openDownloadsFolder'); | 900 chrome.send('openDownloadsFolder'); |
| 905 }; | 901 }; |
| 906 openDownloadsFolderLink.oncontextmenu = function() { return false; }; | |
| 907 | 902 |
| 908 $('term').onsearch = function(e) { | 903 $('term').onsearch = function(e) { |
| 909 setSearch($('term').value); | 904 setSearch($('term').value); |
| 910 }; | 905 }; |
| 911 } | 906 } |
| 912 | 907 |
| 913 function setSearch(searchText) { | 908 function setSearch(searchText) { |
| 914 fifoResults.length = 0; | 909 fifoResults.length = 0; |
| 915 downloads.setSearchText(searchText); | 910 downloads.setSearchText(searchText); |
| 916 searchText = searchText.toString().match(/(?:[^\s"]+|"[^"]*")+/g); | 911 searchText = searchText.toString().match(/(?:[^\s"]+|"[^"]*")+/g); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 982 if (Date.now() - start > 50) { | 977 if (Date.now() - start > 50) { |
| 983 clearTimeout(resultsTimeout); | 978 clearTimeout(resultsTimeout); |
| 984 resultsTimeout = setTimeout(tryDownloadUpdatedPeriodically, 5); | 979 resultsTimeout = setTimeout(tryDownloadUpdatedPeriodically, 5); |
| 985 break; | 980 break; |
| 986 } | 981 } |
| 987 } | 982 } |
| 988 } | 983 } |
| 989 | 984 |
| 990 // Add handlers to HTML elements. | 985 // Add handlers to HTML elements. |
| 991 window.addEventListener('DOMContentLoaded', load); | 986 window.addEventListener('DOMContentLoaded', load); |
| 992 | |
| 993 preventDefaultOnPoundLinkClicks(); // From util.js. | |
| OLD | NEW |