| Index: chrome/browser/resources/file_manager/js/default_action_dialog.js
|
| diff --git a/chrome/browser/resources/file_manager/js/default_action_dialog.js b/chrome/browser/resources/file_manager/js/default_action_dialog.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..08d02e48c63818490659bcbb51a00dde9f664c41
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/file_manager/js/default_action_dialog.js
|
| @@ -0,0 +1,136 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +
|
| +/**
|
| + * DefaultActionDialog contains a message, a list box, an ok button, and a
|
| + * cancel button.
|
| + */
|
| +cr.define('cr.filebrowser', function() {
|
| +
|
| + /**
|
| + * Creates dialog in DOM tree.
|
| + *
|
| + * @param {HTMLElement} parentNode Node to be parent for this dialog.
|
| + */
|
| + function DefaultActionDialog(parentNode) {
|
| + cr.ui.dialogs.BaseDialog.call(this, parentNode);
|
| +
|
| + this.list_ = new cr.ui.List();
|
| + this.list_.id = 'default-actions-list';
|
| + this.frame_.insertBefore(this.list_, this.text_.nextSibling);
|
| +
|
| + this.selectionModel_ = this.list_.selectionModel =
|
| + new cr.ui.ListSingleSelectionModel();
|
| + this.dataModel_ = this.list_.dataModel = new cr.ui.ArrayDataModel([]);
|
| +
|
| + // List has max-height defined at css, so that list grows automatically,
|
| + // but doesn't exceed predefined size.
|
| + this.list_.autoExpands = true;
|
| + this.list_.activateItemAtIndex = this.activateItemAtIndex_.bind(this);
|
| +
|
| + this.initialFocusElement_ = this.list_;
|
| +
|
| + var self = this;
|
| +
|
| + // Binding stuff doesn't work with constructors, so we have to create
|
| + // closure here.
|
| + this.list_.itemConstructor = function(item) {
|
| + return self.renderItem(item);
|
| + }
|
| + }
|
| +
|
| + DefaultActionDialog.prototype = {
|
| + __proto__: cr.ui.dialogs.BaseDialog.prototype
|
| + };
|
| +
|
| + /**
|
| + * Overrides BaseDialog::onInputFocus
|
| + */
|
| + DefaultActionDialog.prototype.onInputFocus = function() {
|
| + this.list_.select();
|
| + };
|
| +
|
| + /**
|
| + * Renders item for list.
|
| + * @param {Object} item Item to render.
|
| + */
|
| + DefaultActionDialog.prototype.renderItem = function(item) {
|
| + var result = this.document_.createElement('li');
|
| +
|
| + var iconNode = this.document_.createElement('img');
|
| + iconNode.src = item.iconUrl;
|
| + result.appendChild(iconNode);
|
| +
|
| + var labelNode = this.document_.createElement('span');
|
| + labelNode.textContent = item.label;
|
| + result.appendChild(labelNode);
|
| +
|
| + cr.defineProperty(result, 'lead', cr.PropertyKind.BOOL_ATTR);
|
| + cr.defineProperty(result, 'selected', cr.PropertyKind.BOOL_ATTR);
|
| +
|
| + return result;
|
| + }
|
| +
|
| + /**
|
| + * Shows dialog.
|
| + *
|
| + * @param {String} message Message in dialog caption.
|
| + * @param {Array} items Items to render in list
|
| + * @param {int} defaultIdx Item to select by default.
|
| + * @param {Function} onOk Callback function.
|
| + * @param {Function} onCancel Callback function.
|
| + * @param {Function} onShow Callback function.
|
| + */
|
| + DefaultActionDialog.prototype.show = function(message, items, defaultIdx,
|
| + onOk, onCancel, onShow) {
|
| +
|
| + cr.ui.dialogs.BaseDialog.prototype.show.apply(this,
|
| + [message, onOk, onCancel, onShow]);
|
| +
|
| + this.list_.startBatchUpdates();
|
| +
|
| + this.dataModel_.splice(0, this.dataModel_.length);
|
| +
|
| + for (var i = 0; i < items.length; i++) {
|
| + this.dataModel_.push(items[i]);
|
| + }
|
| +
|
| + this.selectionModel_.selectedIndex = defaultIdx;
|
| +
|
| + this.list_.endBatchUpdates();
|
| + };
|
| +
|
| + /**
|
| + * List activation handler. Closes dialog and calls 'ok' callback.
|
| + *
|
| + * @param {int} index Activated index.
|
| + */
|
| + DefaultActionDialog.prototype.activateItemAtIndex_ = function(index) {
|
| + this.hide();
|
| + if (this.onOk_)
|
| + this.onOk_(this.dataModel_.item(index).task);
|
| + }
|
| +
|
| + /**
|
| + * Closes dialog and invokes callback with currently-selected item.
|
| + */
|
| + DefaultActionDialog.prototype.onOkClick_ = function() {
|
| + this.activateItemAtIndex_(this.selectionModel_.selectedIndex);
|
| + };
|
| +
|
| + // Overrides BaseDialog::onContainerKeyDown_;
|
| + DefaultActionDialog.prototype.onContainerKeyDown_ = function(event) {
|
| + // Handle Escape.
|
| + if (event.keyCode == 27) {
|
| + this.onCancelClick_(event);
|
| + event.preventDefault();
|
| + } else if (event.keyCode == 32 || event.keyCode == 13) {
|
| + this.onOkClick_();
|
| + event.preventDefault();
|
| + }
|
| + };
|
| +
|
| + return {DefaultActionDialog: DefaultActionDialog};
|
| +});
|
|
|