| Index: chrome/browser/resources/file_manager/js/file_manager.js
|
| diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js
|
| index 719a4eea128aa196ac63ad830085e122d0d208c6..be72895e7561f2c2f7e5af135bf63e8a1364e8e3 100644
|
| --- a/chrome/browser/resources/file_manager/js/file_manager.js
|
| +++ b/chrome/browser/resources/file_manager/js/file_manager.js
|
| @@ -529,6 +529,8 @@ FileManager.prototype = {
|
| this.alert = new d.AlertDialog(this.dialogDom_);
|
| this.confirm = new d.ConfirmDialog(this.dialogDom_);
|
| this.prompt = new d.PromptDialog(this.dialogDom_);
|
| + this.defaultTaskPicker =
|
| + new cr.filebrowser.DefaultActionDialog(this.dialogDom_);
|
| };
|
|
|
| /**
|
| @@ -2499,6 +2501,15 @@ FileManager.prototype = {
|
| };
|
|
|
| /**
|
| + * Creates combobox item based on task.
|
| + * @param {Object} task Task to convert.
|
| + * @return {Object} Item appendable to combobox drop-down list.
|
| + */
|
| + FileManager.prototype.createComboboxItem_ = function(task) {
|
| + return { label: task.title, iconUrl: task.iconUrl, task: task };
|
| + }
|
| +
|
| + /**
|
| * Callback called when tasks for selected files are determined.
|
| * @param {Object} selection Selection is passed here, since this.selection
|
| * can change before tasks were found, and we should be accurate.
|
| @@ -2508,7 +2519,8 @@ FileManager.prototype = {
|
| this.taskItems_.clear();
|
|
|
| var defaultTask = null;
|
| - var tasksCount = 0;
|
| + var dropDownItems = [];
|
| +
|
| for (var i = 0; i < tasksList.length; i++) {
|
| var task = tasksList[i];
|
|
|
| @@ -2567,15 +2579,38 @@ FileManager.prototype = {
|
| task.title = str('INSTALL_CRX');
|
| }
|
| }
|
| - this.taskItems_.addItem(this.renderTaskItem_(task));
|
| - tasksCount++;
|
| - if (defaultTask == null) defaultTask = task;
|
| +
|
| + if (defaultTask == null) {
|
| + defaultTask = task;
|
| + this.taskItems_.defaultItem = this.createComboboxItem_(task);
|
| + task.title = task.title + ' ' + str('DEFAULT_ACTION_LABEL');
|
| + dropDownItems.push(this.createComboboxItem_(task));
|
| + } else {
|
| + dropDownItems.push(this.createComboboxItem_(task));
|
| + }
|
| }
|
|
|
| - this.taskItems_.hidden = tasksCount == 0;
|
| - if (tasksCount > 1) {
|
| - // Duplicate default task in drop-down list.
|
| - this.taskItems_.addItem(this.renderTaskItem_(defaultTask));
|
| + var defaultIdx = 0;
|
| + this.taskItems_.hidden = dropDownItems.length == 0;
|
| +
|
| + if (dropDownItems.length > 1) {
|
| + dropDownItems.sort(function(a, b) {
|
| + return a.label.localeCompare(b.label);
|
| + });
|
| +
|
| + for (var j = 0; j < dropDownItems.length; j++) {
|
| + this.taskItems_.addDropDownItem(dropDownItems[j]);
|
| + if (dropDownItems[j].task.taskId == defaultTask.taskId) {
|
| + defaultIdx = j;
|
| + }
|
| + }
|
| +
|
| + this.taskItems_.addSeparator();
|
| + this.taskItems_.addDropDownItem({
|
| + label: str('CHANGE_DEFAULT_MENU_ITEM'),
|
| + items: dropDownItems,
|
| + defaultIdx: defaultIdx
|
| + });
|
| }
|
|
|
| selection.tasksList = tasksList;
|
| @@ -2586,22 +2621,6 @@ FileManager.prototype = {
|
| }
|
| };
|
|
|
| - FileManager.prototype.renderTaskItem_ = function(task) {
|
| - var item = this.document_.createElement('div');
|
| - item.className = 'task-item';
|
| - item.task = task;
|
| -
|
| - var img = this.document_.createElement('img');
|
| - img.src = task.iconUrl;
|
| - item.appendChild(img);
|
| -
|
| - var label = this.document_.createElement('div');
|
| - label.appendChild(this.document_.createTextNode(task.title));
|
| - item.appendChild(label);
|
| -
|
| - return item;
|
| - };
|
| -
|
| FileManager.prototype.getExtensionId_ = function() {
|
| return chrome.extension.getURL('').split('/')[2];
|
| };
|
| @@ -2613,10 +2632,55 @@ FileManager.prototype = {
|
| }
|
| };
|
|
|
| + /**
|
| + * Task combobox handler.
|
| + *
|
| + * @param {Object} event Event containing task which was clicked.
|
| + */
|
| FileManager.prototype.onTaskItemClicked_ = function(event) {
|
| - this.dispatchFileTask_(event.item.task.taskId, this.selection.urls);
|
| + if (event.item.task) {
|
| + // Task field doesn't exist on change-default dropdown item.
|
| + this.dispatchFileTask_(event.item.task.taskId, this.selection.urls);
|
| + } else {
|
| + var extensions = [];
|
| +
|
| + for (var i = 0; i < this.selection.urls.length; i++) {
|
| + var match = /\.(\w+)$/g.exec(this.selection.urls[i]);
|
| + if (match) {
|
| + var ext = match[1].toUpperCase();
|
| + if (extensions.indexOf(ext) == -1) {
|
| + extensions.push(ext);
|
| + }
|
| + }
|
| + }
|
| +
|
| + var format = '';
|
| +
|
| + if (extensions.length != 1) {
|
| + format = extensions[0];
|
| + }
|
| +
|
| + // Change default was clicked. We should open "change default" dialog.
|
| + this.defaultTaskPicker.show(
|
| + strf('CHANGE_DEFAULT_CAPTION', format),
|
| + event.item.items, event.item.defaultIdx,
|
| + this.onDefaultTaskDone_.bind(this));
|
| + }
|
| };
|
|
|
| +
|
| + /**
|
| + * Set's given task as default, when this task is applicable.
|
| + * @param {Object} task Task to set as default.
|
| + */
|
| + FileManager.prototype.onDefaultTaskDone_ = function(task) {
|
| + chrome.fileBrowserPrivate.setDefaultTask(task.taskId);
|
| +
|
| + chrome.fileBrowserPrivate.getFileTasks(
|
| + this.selection.urls,
|
| + this.onTasksFound_.bind(this, this.selection));
|
| + }
|
| +
|
| /**
|
| * Dispatches default task for the current selection. If tasks are not ready
|
| * yet, dispatches after task are available.
|
|
|