| Index: ui/file_manager/file_manager/foreground/js/ui/directory_tree.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/ui/directory_tree.js b/ui/file_manager/file_manager/foreground/js/ui/directory_tree.js
|
| index a699aa58951bf04c6af25947f6f7fb52c15dd490..3230707607e8d3a3a698c7f52eaf4c74f901b41a 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/ui/directory_tree.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/ui/directory_tree.js
|
| @@ -347,7 +347,7 @@ function SubDirectoryItem(label, dirEntry, parentDirItem, tree) {
|
|
|
| // Sets up icons of the item.
|
| var icon = item.querySelector('.icon');
|
| - icon.classList.add('volume-icon');
|
| + icon.classList.add('item-icon');
|
| var location = tree.volumeManager.getLocationInfo(item.entry);
|
| if (location && location.rootType && location.isRootEntry) {
|
| icon.setAttribute('volume-type-icon', location.rootType);
|
| @@ -505,7 +505,7 @@ VolumeItem.prototype.isRemovable_ = function() {
|
| * @private
|
| */
|
| VolumeItem.prototype.setupIcon_ = function(icon, volumeInfo) {
|
| - icon.classList.add('volume-icon');
|
| + icon.classList.add('item-icon');
|
| if (volumeInfo.volumeType === VolumeManagerCommon.VolumeType.PROVIDED) {
|
| var backgroundImage = '-webkit-image-set(' +
|
| 'url(chrome://extension-icon/' + volumeInfo.extensionId +
|
| @@ -689,7 +689,7 @@ function ShortcutItem(modelItem, tree) {
|
| item.innerHTML = TREE_ITEM_INNTER_HTML;
|
|
|
| var icon = item.querySelector('.icon');
|
| - icon.classList.add('volume-icon');
|
| + icon.classList.add('item-icon');
|
| icon.setAttribute('volume-type-icon', VolumeManagerCommon.VolumeType.DRIVE);
|
|
|
| if (tree.contextMenuForRootItems)
|
| @@ -782,6 +782,77 @@ ShortcutItem.prototype.activate = function() {
|
| };
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| +// CommandItem
|
| +
|
| +/**
|
| + * A TreeItem which represents a command button.
|
| + * Command items are displayed as top-level children of DirectoryTree.
|
| + *
|
| + * @param {NavigationModelCommandItem} modelItem
|
| + * @param {DirectoryTree} tree Current tree, which contains this item.
|
| + * @extends {cr.ui.TreeItem}
|
| + * @constructor
|
| + */
|
| +function CommandItem(modelItem, tree) {
|
| + var item = new cr.ui.TreeItem();
|
| + item.__proto__ = CommandItem.prototype;
|
| +
|
| + item.parentTree_ = tree;
|
| + item.modelItem_ = modelItem;
|
| +
|
| + item.innerHTML = TREE_ITEM_INNTER_HTML;
|
| +
|
| + var icon = item.querySelector('.icon');
|
| + icon.classList.add('item-icon');
|
| + icon.setAttribute('command-icon', modelItem.command.id);
|
| +
|
| + item.label = modelItem.label;
|
| + return item;
|
| +}
|
| +
|
| +CommandItem.prototype = {
|
| + __proto__: cr.ui.TreeItem.prototype,
|
| + get entry() {
|
| + return null;
|
| + },
|
| + get modelItem() {
|
| + return this.modelItem_;
|
| + },
|
| + get labelElement() {
|
| + return this.firstElementChild.querySelector('.label');
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * @param {!DirectoryEntry|!FakeEntry} entry
|
| + * @return {boolean} True if the parent item is found.
|
| + */
|
| +CommandItem.prototype.searchAndSelectByEntry = function(entry) {
|
| + return false;
|
| +};
|
| +
|
| +/**
|
| + * @override
|
| + */
|
| +CommandItem.prototype.handleClick = function(e) {
|
| + this.activate();
|
| +};
|
| +
|
| +/**
|
| + * @param {!DirectoryEntry} entry
|
| + */
|
| +CommandItem.prototype.selectByEntry = function(entry) {
|
| +};
|
| +
|
| +/**
|
| + * Executes the command.
|
| + */
|
| +CommandItem.prototype.activate = function() {
|
| + this.modelItem_.command.execute();
|
| +};
|
| +
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| // DirectoryTree
|
|
|
| /**
|
| @@ -887,8 +958,9 @@ DirectoryTree.prototype.updateSubElementsFromList = function(recursive) {
|
| for (var i = 0; i < this.items.length;) {
|
| var found = false;
|
| for (var j = 0; j < this.dataModel.length; j++) {
|
| - if (NavigationModelItem.isSame(this.items[i].modelItem,
|
| - this.dataModel.item(j))) {
|
| + // Comparison by references, which is safe here, as model items are long
|
| + // living.
|
| + if (this.items[i].modelItem === this.dataModel.item(j)) {
|
| found = true;
|
| break;
|
| }
|
| @@ -907,21 +979,26 @@ DirectoryTree.prototype.updateSubElementsFromList = function(recursive) {
|
| var itemIndex = 0;
|
| while (modelIndex < this.dataModel.length) {
|
| if (itemIndex < this.items.length &&
|
| - NavigationModelItem.isSame(this.items[itemIndex].modelItem,
|
| - this.dataModel.item(modelIndex))) {
|
| + this.items[itemIndex].modelItem === this.dataModel.item(modelIndex)) {
|
| if (recursive && this.items[itemIndex] instanceof VolumeItem)
|
| this.items[itemIndex].updateSubDirectories(true);
|
| } else {
|
| var modelItem = this.dataModel.item(modelIndex);
|
| - if (modelItem.isVolume) {
|
| - if (modelItem.volumeInfo.volumeType ===
|
| - VolumeManagerCommon.VolumeType.DRIVE) {
|
| - this.addAt(new DriveVolumeItem(modelItem, this), itemIndex);
|
| - } else {
|
| - this.addAt(new VolumeItem(modelItem, this), itemIndex);
|
| - }
|
| - } else {
|
| - this.addAt(new ShortcutItem(modelItem, this), itemIndex);
|
| + switch (modelItem.type) {
|
| + case NavigationModelItem.Type.VOLUME:
|
| + if (modelItem.volumeInfo.volumeType ===
|
| + VolumeManagerCommon.VolumeType.DRIVE) {
|
| + this.addAt(new DriveVolumeItem(modelItem, this), itemIndex);
|
| + } else {
|
| + this.addAt(new VolumeItem(modelItem, this), itemIndex);
|
| + }
|
| + break;
|
| + case NavigationModelItem.Type.SHORTCUT:
|
| + this.addAt(new ShortcutItem(modelItem, this), itemIndex);
|
| + break;
|
| + case NavigationModelItem.Type.COMMAND:
|
| + this.addAt(new CommandItem(modelItem, this), itemIndex);
|
| + break;
|
| }
|
| }
|
| itemIndex++;
|
|
|