| Index: chrome/browser/resources/md_downloads/manager.js
|
| diff --git a/chrome/browser/resources/md_downloads/manager.js b/chrome/browser/resources/md_downloads/manager.js
|
| index ebd003f47fc0e37e53ba7f5370eda0efaa46291a..065290d2558067425fec16a78087f81cb7821561 100644
|
| --- a/chrome/browser/resources/md_downloads/manager.js
|
| +++ b/chrome/browser/resources/md_downloads/manager.js
|
| @@ -3,43 +3,75 @@
|
| // found in the LICENSE file.
|
|
|
| cr.define('downloads', function() {
|
| - /**
|
| - * Class to own and manage download items.
|
| - * @constructor
|
| - */
|
| - function Manager() {}
|
| + var Manager = Polymer({
|
| + is: 'downloads-manager',
|
|
|
| - cr.addSingletonGetter(Manager);
|
| + created: function() {
|
| + /** @private {!downloads.ActionService} */
|
| + this.actionService_ = new downloads.ActionService;
|
| + },
|
| +
|
| + properties: {
|
| + hasDownloads_: {
|
| + type: Boolean,
|
| + value: false,
|
| + },
|
| + },
|
|
|
| - Manager.prototype = {
|
| - /** @private {string} */
|
| - searchText_: '',
|
| + /**
|
| + * @return {number} A guess at how many items could be visible at once.
|
| + * @private
|
| + */
|
| + guesstimateNumberOfVisibleItems_: function() {
|
| + var toolbarHeight = this.$.toolbar.offsetHeight;
|
| + return Math.floor((window.innerHeight - toolbarHeight) / 46) + 1;
|
| + },
|
| +
|
| + /**
|
| + * @param {Event} e
|
| + * @private
|
| + */
|
| + onCanExecute_: function(e) {
|
| + e = /** @type {cr.ui.CanExecuteEvent} */(e);
|
| + switch (e.command.id) {
|
| + case 'undo-command':
|
| + e.canExecute = this.$.toolbar.canUndo();
|
| + break;
|
| + case 'clear-all-command':
|
| + e.canExecute = true;
|
| + break;
|
| + }
|
| + },
|
|
|
| /**
|
| - * Sets the search text, updates related UIs, and tells the browser.
|
| - * @param {string} searchText Text we're searching for.
|
| + * @param {Event} e
|
| * @private
|
| */
|
| - setSearchText_: function(searchText) {
|
| - this.searchText_ = searchText;
|
| + onCommand_: function(e) {
|
| + if (e.command.id == 'clear-all-command')
|
| + this.actionService_.clearAll();
|
| + else if (e.command.id == 'undo-command')
|
| + this.actionService_.undo();
|
| + },
|
|
|
| - $('downloads-summary-text').textContent = this.searchText_ ?
|
| - loadTimeData.getStringF('searchResultsFor', this.searchText_) : '';
|
| + /** @private */
|
| + onLoad_: function() {
|
| + this.$.toolbar.setActionService(this.actionService_);
|
| +
|
| + cr.ui.decorate('command', cr.ui.Command);
|
| + document.addEventListener('canExecute', this.onCanExecute_.bind(this));
|
| + document.addEventListener('command', this.onCommand_.bind(this));
|
|
|
| - // Split quoted terms (e.g., 'The "lazy" dog' => ['The', 'lazy', 'dog']).
|
| - function trim(s) { return s.trim(); }
|
| - chrome.send('getDownloads', searchText.split(/"([^"]*)"/).map(trim));
|
| + // Shows all downloads.
|
| + this.actionService_.search('');
|
| },
|
|
|
| /**
|
| - * @return {number} A guess at how many items could be visible at once.
|
| + * @return {number} The number of downloads shown on the page.
|
| * @private
|
| */
|
| - guesstimateNumberOfVisibleItems_: function() {
|
| - var toolbarHeight = $('downloads-toolbar').offsetHeight;
|
| - var summaryHeight = $('downloads-summary').offsetHeight;
|
| - var nonItemSpace = toolbarHeight + summaryHeight;
|
| - return Math.floor((window.innerHeight - nonItemSpace) / 46) + 1;
|
| + size_: function() {
|
| + return this.items_.length;
|
| },
|
|
|
| /**
|
| @@ -67,7 +99,8 @@ cr.define('downloads', function() {
|
| var id = data.id;
|
|
|
| // Re-use old items when possible (saves work, preserves focus).
|
| - var item = oldIdMap[id] || new downloads.ItemView(this.iconLoader_);
|
| + var item = oldIdMap[id] ||
|
| + new downloads.ItemView(this.iconLoader_, this.actionService_);
|
|
|
| this.idMap_[id] = item; // Associated by ID for fast lookup.
|
| this.items_.push(item); // Add to sorted list for order.
|
| @@ -102,19 +135,13 @@ cr.define('downloads', function() {
|
| before = this.items_[j];
|
| }
|
| // If |before| is null, |item| will just get added at the end.
|
| - this.node_.insertBefore(item, before);
|
| + this.$['downloads-list'].insertBefore(item, before);
|
| }
|
|
|
| - var noDownloadsOrResults = $('no-downloads-or-results');
|
| - noDownloadsOrResults.textContent = loadTimeData.getString(
|
| - this.searchText_ ? 'noSearchResults' : 'noDownloads');
|
| -
|
| - var hasDownloads = this.size_() > 0;
|
| - this.node_.hidden = !hasDownloads;
|
| - noDownloadsOrResults.hidden = hasDownloads;
|
| + this.hasDownloads_ = this.size_() > 0;
|
|
|
| if (loadTimeData.getBoolean('allowDeletingHistory'))
|
| - $('clear-all').hidden = !hasDownloads || this.searchText_.length > 0;
|
| + this.$.toolbar.canClearAll = this.hasDownloads_;
|
| },
|
|
|
| /**
|
| @@ -124,108 +151,22 @@ cr.define('downloads', function() {
|
| updateItem_: function(data) {
|
| this.idMap_[data.id].update(data);
|
| },
|
| + });
|
|
|
| - /**
|
| - * @return {number} The number of downloads shown on the page.
|
| - * @private
|
| - */
|
| - size_: function() {
|
| - return this.items_.length;
|
| - },
|
| -
|
| - /** @private */
|
| - clearAll_: function() {
|
| - if (loadTimeData.getBoolean('allowDeletingHistory')) {
|
| - chrome.send('clearAll');
|
| - this.setSearchText_('');
|
| - }
|
| - },
|
| -
|
| - /** @private */
|
| - onLoad_: function() {
|
| - this.node_ = $('downloads-display');
|
| -
|
| - $('clear-all').onclick = function() {
|
| - this.clearAll_();
|
| - }.bind(this);
|
| -
|
| - $('open-downloads-folder').onclick = function() {
|
| - chrome.send('openDownloadsFolder');
|
| - };
|
| -
|
| - $('search-button').onclick = function() {
|
| - if (!$('search-term').hidden)
|
| - return;
|
| - $('clear-search').hidden = false;
|
| - $('search-term').hidden = false;
|
| - };
|
| -
|
| - $('clear-search').onclick = function() {
|
| - $('clear-search').hidden = true;
|
| - $('search-term').hidden = true;
|
| - $('search-term').value = '';
|
| - this.setSearchText_('');
|
| - }.bind(this);
|
| -
|
| - // TODO(dbeam): this previously used onsearch, which batches keystrokes
|
| - // together. This should probably be re-instated eventually.
|
| - $('search-term').oninput = function(e) {
|
| - this.setSearchText_($('search-term').value);
|
| - }.bind(this);
|
| -
|
| - cr.ui.decorate('command', cr.ui.Command);
|
| - document.addEventListener('canExecute', this.onCanExecute_.bind(this));
|
| - document.addEventListener('command', this.onCommand_.bind(this));
|
| -
|
| - this.setSearchText_('');
|
| - },
|
| -
|
| - /**
|
| - * @param {Event} e
|
| - * @private
|
| - */
|
| - onCanExecute_: function(e) {
|
| - e = /** @type {cr.ui.CanExecuteEvent} */(e);
|
| - switch (e.command.id) {
|
| - case 'undo-command':
|
| - e.canExecute = !$('search-term').contains(document.activeElement);
|
| - break;
|
| - case 'clear-all-command':
|
| - e.canExecute = true;
|
| - break;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {Event} e
|
| - * @private
|
| - */
|
| - onCommand_: function(e) {
|
| - if (e.command.id == 'undo-command')
|
| - chrome.send('undo');
|
| - else if (e.command.id == 'clear-all-command')
|
| - this.clearAll_();
|
| - },
|
| + Manager.size = function() {
|
| + return document.querySelector('downloads-manager').size_();
|
| };
|
|
|
| Manager.updateAll = function(list) {
|
| - Manager.getInstance().updateAll_(list);
|
| + document.querySelector('downloads-manager').updateAll_(list);
|
| };
|
|
|
| Manager.updateItem = function(item) {
|
| - Manager.getInstance().updateItem_(item);
|
| - };
|
| -
|
| - Manager.setSearchText = function(searchText) {
|
| - Manager.getInstance().setSearchText_(searchText);
|
| + document.querySelector('downloads-manager').updateItem_(item);
|
| };
|
|
|
| Manager.onLoad = function() {
|
| - Manager.getInstance().onLoad_();
|
| - };
|
| -
|
| - Manager.size = function() {
|
| - return Manager.getInstance().size_();
|
| + document.querySelector('downloads-manager').onLoad_();
|
| };
|
|
|
| return {Manager: Manager};
|
|
|