Index: ui/file_manager/file_manager/foreground/js/navigation_list_model.js |
diff --git a/ui/file_manager/file_manager/foreground/js/navigation_list_model.js b/ui/file_manager/file_manager/foreground/js/navigation_list_model.js |
index 5195f867673925289f87e0910dd6c6e74efd891c..38f26719112b1f04bd4d113cecb97c7826ffd934 100644 |
--- a/ui/file_manager/file_manager/foreground/js/navigation_list_model.js |
+++ b/ui/file_manager/file_manager/foreground/js/navigation_list_model.js |
@@ -11,24 +11,14 @@ function NavigationModelItem(label) { |
this.label_ = label; |
} |
-NavigationModelItem.prototype = { |
- get label() { return this.label_; } |
+NavigationModelItem.Type = { |
+ SHORTCUT: 'shortcut', |
+ VOLUME: 'volume', |
+ COMMAND: 'command' |
}; |
-/** |
- * Check whether given two model items are same. |
- * @param {NavigationModelItem} item1 The first item to be compared. |
- * @param {NavigationModelItem} item2 The second item to be compared. |
- * @return {boolean} True if given two model items are same. |
- */ |
-NavigationModelItem.isSame = function(item1, item2) { |
- if (item1.isVolume != item2.isVolume) |
- return false; |
- |
- if (item1.isVolume) |
- return item1.volumeInfo === item2.volumeInfo; |
- else |
- return util.isSameEntry(item1.entry, item2.entry); |
+NavigationModelItem.prototype = { |
+ get label() { return this.label_; } |
}; |
/** |
@@ -38,18 +28,17 @@ NavigationModelItem.isSame = function(item1, item2) { |
* @param {!DirectoryEntry} entry Entry. Cannot be null. |
* @constructor |
* @extends {NavigationModelItem} |
+ * @struct |
*/ |
function NavigationModelShortcutItem(label, entry) { |
NavigationModelItem.call(this, label); |
this.entry_ = entry; |
- Object.freeze(this); |
} |
NavigationModelShortcutItem.prototype = { |
__proto__: NavigationModelItem.prototype, |
get entry() { return this.entry_; }, |
- get isVolume() { return false; }, |
- get isShortcut() { return true; } |
+ get type() { return NavigationModelItem.Type.SHORTCUT; } |
}; |
/** |
@@ -59,6 +48,7 @@ NavigationModelShortcutItem.prototype = { |
* @param {!VolumeInfo} volumeInfo Volume info for the volume. Cannot be null. |
* @constructor |
* @extends {NavigationModelItem} |
+ * @struct |
*/ |
function NavigationModelVolumeItem(label, volumeInfo) { |
NavigationModelItem.call(this, label); |
@@ -67,29 +57,49 @@ function NavigationModelVolumeItem(label, volumeInfo) { |
// for determining executability of commands. |
this.volumeInfo_.resolveDisplayRoot( |
function() {}, function() {}); |
- Object.freeze(this); |
} |
NavigationModelVolumeItem.prototype = { |
__proto__: NavigationModelItem.prototype, |
get volumeInfo() { return this.volumeInfo_; }, |
- get isVolume() { return true; }, |
- get isShortcut() { return false; } |
+ get type() { return NavigationModelItem.Type.VOLUME; } |
+}; |
+ |
+/** |
+ * Item of NavigationListModel for commands. |
+ * |
+ * @param {cr.ui.Command} command |
+ * @constructor |
+ * @extends {NavigationModelItem} |
+ * @struct |
+ */ |
+function NavigationModelCommandItem(command) { |
+ NavigationModelItem.call(this, command.label); |
+ this.command_ = command; |
+} |
+ |
+NavigationModelCommandItem.prototype = { |
+ __proto__: NavigationModelItem.prototype, |
+ get command() { return this.command_; }, |
+ get type() { return NavigationModelItem.Type.COMMAND; } |
}; |
/** |
- * A navigation list model. This model combines the 2 lists. |
+ * A navigation list model. This model combines multiple models. |
* @param {VolumeManagerWrapper} volumeManager VolumeManagerWrapper instance. |
* @param {(cr.ui.ArrayDataModel|FolderShortcutsDataModel)} shortcutListModel |
* The list of folder shortcut. |
+ * @param {NavigationModelCommandItem} commandModel, Command button at the |
+ * end of the list. |
* @constructor |
* @extends {cr.EventTarget} |
*/ |
-function NavigationListModel(volumeManager, shortcutListModel) { |
+function NavigationListModel(volumeManager, shortcutListModel, commandModel) { |
cr.EventTarget.call(this); |
this.volumeManager_ = volumeManager; |
this.shortcutListModel_ = shortcutListModel; |
+ this.commandModel_ = commandModel; |
var volumeInfoToModelItem = function(volumeInfo) { |
return new NavigationModelVolumeItem( |
@@ -242,10 +252,12 @@ NavigationListModel.prototype = { |
* @return {NavigationModelItem} The item at the given index. |
*/ |
NavigationListModel.prototype.item = function(index) { |
- var offset = this.volumeList_.length; |
- if (index < offset) |
+ if (index < this.volumeList_.length) |
return this.volumeList_[index]; |
- return this.shortcutList_[index - offset]; |
+ if (index < this.volumeList_.length + this.shortcutList_.length) |
+ return this.shortcutList_[index - this.volumeList_.length]; |
+ if (index === this.length_() - 1) |
+ return this.commandModel_; |
}; |
/** |
@@ -254,7 +266,8 @@ NavigationListModel.prototype.item = function(index) { |
* @private |
*/ |
NavigationListModel.prototype.length_ = function() { |
- return this.volumeList_.length + this.shortcutList_.length; |
+ return this.volumeList_.length + this.shortcutList_.length + |
+ (this.commandModel_ ? 1 : 0); |
}; |
/** |
@@ -277,12 +290,6 @@ NavigationListModel.prototype.indexOf = function(modelItem, opt_fromIndex) { |
* @param {NavigationModelItem} modelItem The entry which is not found. |
*/ |
NavigationListModel.prototype.onItemNotFoundError = function(modelItem) { |
- if (modelItem.isVolume) { |
- // TODO(mtomasz, yoshiki): Implement when needed. |
- return; |
- } |
- if (modelItem.isShortcut) { |
- // For shortcuts, lets the shortcut model handle this situation. |
+ if (modelItem.type === NavigationModelItem.Type.SHORTCUT) |
this.shortcutListModel_.onItemNotFoundError(modelItem.entry); |
- } |
}; |