Chromium Code Reviews| Index: chrome/browser/resources/md_bookmarks/command_manager.js |
| diff --git a/chrome/browser/resources/md_bookmarks/command_manager.js b/chrome/browser/resources/md_bookmarks/command_manager.js |
| index 8960d0a9b94056ae399aadab5c46c0e670e4f1a5..b3774ffadfb839c12e481674ea74696e0e78dbcb 100644 |
| --- a/chrome/browser/resources/md_bookmarks/command_manager.js |
| +++ b/chrome/browser/resources/md_bookmarks/command_manager.js |
| @@ -32,14 +32,22 @@ cr.define('bookmarks', function() { |
| }, |
| }, |
| - /** @type {Set<string>} */ |
| + /** @private {Set<string>} */ |
| menuIds_: Object, |
| + |
| + /** @private */ |
| + canEdit_: Boolean, |
|
calamity
2017/06/13 05:13:53
optional nit: consider renaming this globalCanEdit
tsergeant
2017/06/13 05:32:15
Good idea. Done, both here and in <bookmarks-toolb
|
| }, |
| attached: function() { |
| assert(CommandManager.instance_ == null); |
| CommandManager.instance_ = this; |
| + this.watch('canEdit_', function(state) { |
| + return state.prefs.canEdit; |
| + }); |
| + this.updateFromStore(); |
| + |
| /** @private {function(!Event)} */ |
| this.boundOnOpenItemMenu_ = this.onOpenItemMenu_.bind(this); |
| document.addEventListener('open-item-menu', this.boundOnOpenItemMenu_); |
| @@ -120,7 +128,7 @@ cr.define('bookmarks', function() { |
| return itemIds.size > 0; |
| case Command.UNDO: |
| case Command.REDO: |
| - return true; |
| + return this.canEdit_; |
| default: |
| return this.isCommandVisible_(command, itemIds) && |
| this.isCommandEnabled_(command, itemIds); |
| @@ -136,13 +144,11 @@ cr.define('bookmarks', function() { |
| isCommandVisible_: function(command, itemIds) { |
| switch (command) { |
| case Command.EDIT: |
| - return itemIds.size == 1; |
| + return itemIds.size == 1 && this.canEdit_; |
| case Command.COPY: |
| - return itemIds.size == 1 && |
| - this.containsMatchingNode_(itemIds, function(node) { |
| - return !!node.url; |
| - }); |
| + return this.isSingleBookmark_(itemIds); |
| case Command.DELETE: |
| + return itemIds.size > 0 && this.canEdit_; |
| case Command.OPEN_NEW_TAB: |
| case Command.OPEN_NEW_WINDOW: |
| case Command.OPEN_INCOGNITO: |
| @@ -160,6 +166,12 @@ cr.define('bookmarks', function() { |
| */ |
| isCommandEnabled_: function(command, itemIds) { |
| switch (command) { |
| + case Command.EDIT: |
| + case Command.DELETE: |
| + var state = this.getState(); |
| + return !this.containsMatchingNode_(itemIds, function(node) { |
| + return !bookmarks.util.canEditNode(state, node.id); |
| + }); |
| case Command.OPEN_NEW_TAB: |
| case Command.OPEN_NEW_WINDOW: |
| return this.expandUrls_(itemIds).length > 0; |
| @@ -357,6 +369,18 @@ cr.define('bookmarks', function() { |
| }); |
| }, |
| + /** |
| + * @param {!Set<string>} itemIds |
| + * @return {boolean} True if |itemIds| is a single bookmark (non-folder) |
| + * node. |
| + */ |
| + isSingleBookmark_: function(itemIds) { |
| + return itemIds.size == 1 && |
| + this.containsMatchingNode_(itemIds, function(node) { |
| + return !!node.url; |
| + }); |
| + }, |
| + |
| /** |
| * @param {Event} e |
| * @private |
| @@ -447,8 +471,9 @@ cr.define('bookmarks', function() { |
| * @return {boolean} |
| * @private |
| */ |
| - showDividerAfter_: function(command) { |
| - return command == Command.DELETE; |
| + showDividerAfter_: function(command, itemIds) { |
| + return command == Command.DELETE && |
| + (this.canEdit_ || this.isSingleBookmark_(itemIds)); |
| }, |
| }); |