Merge "Add keyboard shortcut for star toggle"

This commit is contained in:
Wyatt Allen
2017-01-09 17:30:06 +00:00
committed by Gerrit Code Review
5 changed files with 19 additions and 3 deletions

View File

@@ -241,7 +241,8 @@ limitations under the License.
<div class="container" hidden$="{{_loading}}"> <div class="container" hidden$="{{_loading}}">
<div class="header"> <div class="header">
<span class="header-title"> <span class="header-title">
<gr-change-star change="{{_change}}" hidden$="[[!_loggedIn]]"></gr-change-star> <gr-change-star id="changeStar"
change="{{_change}}" hidden$="[[!_loggedIn]]"></gr-change-star>
<a href$="[[_computeChangePermalink(_change._number)]]">[[_change._number]]</a><!-- <a href$="[[_computeChangePermalink(_change._number)]]">[[_change._number]]</a><!--
--><span class="changeStatus">[[_computeChangeStatus(_change, _patchRange.patchNum)]]</span><!-- --><span class="changeStatus">[[_computeChangeStatus(_change, _patchRange.patchNum)]]</span><!--
-->: -->:

View File

@@ -127,6 +127,7 @@
'shift+r': '_handleCapitalRKey', 'shift+r': '_handleCapitalRKey',
'a': '_handleAKey', 'a': '_handleAKey',
'd': '_handleDKey', 'd': '_handleDKey',
's': '_handleSKey',
'u': '_handleUKey', 'u': '_handleUKey',
}, },
@@ -636,6 +637,14 @@
this._switchToMostRecentPatchNum(); this._switchToMostRecentPatchNum();
}, },
_handleSKey: function(e) {
if (this.shouldSuppressKeyboardShortcut(e) ||
this.modifierPressed(e)) { return; }
e.preventDefault();
this.$.changeStar.toggleStar();
},
_handleUKey: function(e) { _handleUKey: function(e) {
if (this.shouldSuppressKeyboardShortcut(e)) { return; } if (this.shouldSuppressKeyboardShortcut(e)) { return; }

View File

@@ -51,6 +51,12 @@ limitations under the License.
}); });
suite('keyboard shortcuts', function() { suite('keyboard shortcuts', function() {
test('S should toggle the CL star', function() {
var starStub = sandbox.stub(element.$.changeStar, 'toggleStar');
MockInteractions.pressAndReleaseKeyOn(element, 83, null, 's');
assert(starStub.called);
});
test('U should navigate to / if no backPage set', function() { test('U should navigate to / if no backPage set', function() {
var showStub = sandbox.stub(page, 'show'); var showStub = sandbox.stub(page, 'show');
MockInteractions.pressAndReleaseKeyOn(element, 85, null, 'u'); MockInteractions.pressAndReleaseKeyOn(element, 85, null, 'u');

View File

@@ -42,7 +42,7 @@ limitations under the License.
fill: #ffac33; fill: #ffac33;
} }
</style> </style>
<button class$="[[_computeStarClass(change.starred)]]" on-tap="_handleStarTap"> <button class$="[[_computeStarClass(change.starred)]]" on-tap="toggleStar">
<!-- Public Domain image from the Noun Project: https://thenounproject.com/search/?q=star&i=25969 --> <!-- Public Domain image from the Noun Project: https://thenounproject.com/search/?q=star&i=25969 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve"><path d="M26.439,95.601c-5.608,2.949-9.286,0.276-8.216-5.968l4.5-26.237L3.662,44.816c-4.537-4.423-3.132-8.746,3.137-9.657 l26.343-3.829L44.923,7.46c2.804-5.682,7.35-5.682,10.154,0l11.78,23.87l26.343,3.829c6.27,0.911,7.674,5.234,3.138,9.657 L77.277,63.397l4.501,26.237c1.07,6.244-2.608,8.916-8.216,5.968L50,83.215L26.439,95.601z"></path></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve"><path d="M26.439,95.601c-5.608,2.949-9.286,0.276-8.216-5.968l4.5-26.237L3.662,44.816c-4.537-4.423-3.132-8.746,3.137-9.657 l26.343-3.829L44.923,7.46c2.804-5.682,7.35-5.682,10.154,0l11.78,23.87l26.343,3.829c6.27,0.911,7.674,5.234,3.138,9.657 L77.277,63.397l4.501,26.237c1.07,6.244-2.608,8.916-8.216,5.968L50,83.215L26.439,95.601z"></path></svg>
</button> </button>

View File

@@ -34,7 +34,7 @@
return classes.join(' '); return classes.join(' ');
}, },
_handleStarTap: function() { toggleStar: function() {
var newVal = !this.change.starred; var newVal = !this.change.starred;
this.set('change.starred', newVal); this.set('change.starred', newVal);
this._xhrPromise = this.$.restAPI.saveChangeStarred(this.change._number, this._xhrPromise = this.$.restAPI.saveChangeStarred(this.change._number,