Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 Polymer({ | 5 Polymer({ |
| 6 is: 'bookmarks-command-manager', | 6 is: 'bookmarks-command-manager', |
| 7 | 7 |
| 8 behaviors: [ | 8 behaviors: [ |
| 9 bookmarks.StoreClient, | 9 bookmarks.StoreClient, |
| 10 ], | 10 ], |
| 11 | 11 |
| 12 properties: { | 12 properties: { |
| 13 /** @type {Set<string>} */ | 13 /** @type {Set<string>} */ |
| 14 menuIds_: Object, | 14 menuIds_: Object, |
| 15 }, | 15 }, |
| 16 | 16 |
| 17 attached: function() { | 17 attached: function() { |
| 18 /** @private {function(!Event)} */ | 18 /** @private {function(!Event)} */ |
| 19 this.boundOnOpenItemMenu_ = this.onOpenItemMenu_.bind(this); | 19 this.boundOnOpenItemMenu_ = this.onOpenItemMenu_.bind(this); |
| 20 document.addEventListener('open-item-menu', this.boundOnOpenItemMenu_); | 20 document.addEventListener('open-item-menu', this.boundOnOpenItemMenu_); |
| 21 | |
| 22 /** @private {function(!Event)} */ | |
| 23 this.boundOnKeydown_ = this.onKeydown_.bind(this); | |
| 24 document.addEventListener('keydown', this.boundOnKeydown_); | |
| 25 | |
| 26 this.shortcuts_ = {}; | |
|
calamity
2017/04/26 10:07:58
This isn't declared or annotated anywhere.
tsergeant
2017/04/27 01:42:51
Done.
| |
| 27 this.shortcuts_[Command.EDIT] = cr.isMac ? 'enter' : 'f2'; | |
| 28 this.shortcuts_[Command.COPY] = cr.isMac ? 'meta+c' : 'ctrl+c'; | |
| 29 this.shortcuts_[Command.DELETE] = cr.isMac ? 'delete backspace' : 'delete'; | |
| 21 }, | 30 }, |
| 22 | 31 |
| 23 detached: function() { | 32 detached: function() { |
| 24 document.removeEventListener('open-item-menu', this.boundOnOpenItemMenu_); | 33 document.removeEventListener('open-item-menu', this.boundOnOpenItemMenu_); |
| 34 document.removeEventListener('keydown', this.boundOnKeydown_); | |
| 25 }, | 35 }, |
| 26 | 36 |
| 27 /** | 37 /** |
| 28 * Display the command context menu at (|x|, |y|) in window co-ordinates. | 38 * Display the command context menu at (|x|, |y|) in window co-ordinates. |
| 29 * Commands will execute on the currently selected items. | 39 * Commands will execute on the currently selected items. |
| 30 * @param {number} x | 40 * @param {number} x |
| 31 * @param {number} y | 41 * @param {number} y |
| 32 */ | 42 */ |
| 33 openCommandMenuAtPosition: function(x, y) { | 43 openCommandMenuAtPosition: function(x, y) { |
| 34 this.menuIds_ = this.getState().selection.items; | 44 this.menuIds_ = this.getState().selection.items; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 135 /** | 145 /** |
| 136 * @param {Event} e | 146 * @param {Event} e |
| 137 * @private | 147 * @private |
| 138 */ | 148 */ |
| 139 onCommandClick_: function(e) { | 149 onCommandClick_: function(e) { |
| 140 this.closeCommandMenu(); | 150 this.closeCommandMenu(); |
| 141 this.handle(e.target.getAttribute('command'), assert(this.menuIds_)); | 151 this.handle(e.target.getAttribute('command'), assert(this.menuIds_)); |
| 142 }, | 152 }, |
| 143 | 153 |
| 144 /** | 154 /** |
| 155 * @param {!Event} e | |
| 156 * @private | |
| 157 */ | |
| 158 onKeydown_: function(e) { | |
| 159 var selection = this.getState().selection.items; | |
| 160 // TODO(tsergeant): Prevent keyboard shortcuts when a dialog is open or text | |
| 161 // field is focused. | |
| 162 for (var commandName in this.shortcuts_) { | |
| 163 var shortcut = this.shortcuts_[commandName]; | |
| 164 if (Polymer.IronA11yKeysBehavior.keyboardEventMatchesKeys(e, shortcut) && | |
| 165 this.canExecute(commandName, selection)) { | |
| 166 this.handle(commandName, selection); | |
| 167 | |
| 168 e.stopPropagation(); | |
| 169 e.preventDefault(); | |
| 170 return; | |
| 171 } | |
| 172 } | |
| 173 }, | |
| 174 | |
| 175 /** | |
| 145 * Close the menu on mousedown so clicks can propagate to the underlying UI. | 176 * Close the menu on mousedown so clicks can propagate to the underlying UI. |
| 146 * This allows the user to right click the list while a context menu is | 177 * This allows the user to right click the list while a context menu is |
| 147 * showing and get another context menu. | 178 * showing and get another context menu. |
| 148 * @param {Event} e | 179 * @param {Event} e |
| 149 * @private | 180 * @private |
| 150 */ | 181 */ |
| 151 onMenuMousedown_: function(e) { | 182 onMenuMousedown_: function(e) { |
| 152 if (e.path[0] != this.$.dropdown) | 183 if (e.path[0] != this.$.dropdown) |
| 153 return; | 184 return; |
| 154 | 185 |
| 155 this.$.dropdown.close(); | 186 this.$.dropdown.close(); |
| 156 }, | 187 }, |
| 157 | 188 |
| 158 /** @private */ | 189 /** @private */ |
| 159 getEditActionLabel_: function() { | 190 getEditActionLabel_: function() { |
| 160 if (this.menuIds_.size > 1) | 191 if (this.menuIds_.size > 1) |
| 161 return; | 192 return; |
| 162 | 193 |
| 163 var id = Array.from(this.menuIds_)[0]; | 194 var id = Array.from(this.menuIds_)[0]; |
| 164 var itemUrl = this.getState().nodes[id].url; | 195 var itemUrl = this.getState().nodes[id].url; |
| 165 var label = itemUrl ? 'menuEdit' : 'menuRename'; | 196 var label = itemUrl ? 'menuEdit' : 'menuRename'; |
| 166 return loadTimeData.getString(label); | 197 return loadTimeData.getString(label); |
| 167 }, | 198 }, |
| 168 }); | 199 }); |
| OLD | NEW |