Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: ui/file_manager/audio_player/elements/control_panel.js

Issue 1883813005: Add shortcuts to audio player. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert 'send to start when paused' for now. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | ui/file_manager/audio_player/js/audio_player.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 (function() { 5 (function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * Moves |target| element above |anchor| element, in order to match the 9 * Moves |target| element above |anchor| element, in order to match the
10 * bottom lines. 10 * bottom lines.
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 timeSlider.addEventListener('change', function() { 132 timeSlider.addEventListener('change', function() {
133 if (this.dragging) 133 if (this.dragging)
134 this.dragging = false; 134 this.dragging = false;
135 this._setSeekingTime(0); 135 this._setSeekingTime(0);
136 }.bind(this)); 136 }.bind(this));
137 timeSlider.addEventListener('immediate-value-change', function() { 137 timeSlider.addEventListener('immediate-value-change', function() {
138 this._setSeekingTime(timeSlider.immediateValue); 138 this._setSeekingTime(timeSlider.immediateValue);
139 if (!this.dragging) 139 if (!this.dragging)
140 this.dragging = true; 140 this.dragging = true;
141 }.bind(this)); 141 }.bind(this));
142 timeSlider.addEventListener('keydown',
143 this.onProgressKeyDownOrKeyPress_.bind(this));
144 timeSlider.addEventListener('keypress',
145 this.onProgressKeyDownOrKeyPress_.bind(this));
146 142
147 // Update volume on user inputs for volume slider. 143 // Update volume on user inputs for volume slider.
148 // During a drag operation, the volume should be updated immediately. 144 // During a drag operation, the volume should be updated immediately.
149 var volumeSlider = 145 var volumeSlider =
150 /** @type {PaperSliderElement} */ (this.$.volumeSlider); 146 /** @type {PaperSliderElement} */ (this.$.volumeSlider);
151 volumeSlider.addEventListener('change', function() { 147 volumeSlider.addEventListener('change', function() {
152 this.volume = volumeSlider.value; 148 this.volume = volumeSlider.value;
153 }.bind(this)); 149 }.bind(this));
154 volumeSlider.addEventListener('immediate-value-change', function() { 150 volumeSlider.addEventListener('immediate-value-change', function() {
155 this.volume = volumeSlider.immediateValue; 151 this.volume = volumeSlider.immediateValue;
(...skipping 27 matching lines...) Expand all
183 volumeClick: function() { 179 volumeClick: function() {
184 if (this.volume !== 0) { 180 if (this.volume !== 0) {
185 this.savedVolume_ = this.volume; 181 this.savedVolume_ = this.volume;
186 this.volume = 0; 182 this.volume = 0;
187 } else { 183 } else {
188 this.volume = this.savedVolume_ || 50; 184 this.volume = this.savedVolume_ || 50;
189 } 185 }
190 }, 186 },
191 187
192 /** 188 /**
189 * Skips min(5 seconds, 10% of duration).
190 * @param {boolean} forward Whether to skip forward/backword.
191 */
192 smallSkip: function(forward) {
193 var millisecondsToSkip = Math.min(5000, this.duration / 10);
194 if (!forward) {
195 millisecondsToSkip *= -1;
196 }
197 this.skip_(millisecondsToSkip);
198 },
199
200 /**
201 * Skips min(10 seconds, 20% of duration).
202 * @param {boolean} forward Whether to skip forward/backword.
203 */
204 bigSkip: function(forward) {
205 var millisecondsToSkip = Math.min(10000, this.duration / 5);
206 if (!forward) {
207 millisecondsToSkip *= -1;
208 }
209 this.skip_(millisecondsToSkip);
210 },
211
212 /**
213 * Skips forward/backword.
214 * @param {number} sec Seconds to skip. Set negative value to skip backword.
215 * @private
216 */
217 skip_: function(millis) {
218 if (this.duration > 0)
219 this.time = Math.max(Math.min(this.time + millis, this.duration), 0);
220 },
221
222 /**
193 * Converts the time into human friendly string. 223 * Converts the time into human friendly string.
194 * @param {number} time Time to be converted. 224 * @param {number} time Time to be converted.
195 * @return {string} String representation of the given time 225 * @return {string} String representation of the given time
196 */ 226 */
197 time2string_: function(time) { 227 time2string_: function(time) {
198 return ~~(time / 60000) + ':' + ('0' + ~~(time / 1000 % 60)).slice(-2); 228 return ~~(time / 60000) + ':' + ('0' + ~~(time / 1000 % 60)).slice(-2);
199 }, 229 },
200 230
201 /** 231 /**
202 * Converts the time and duration into human friendly string. 232 * Converts the time and duration into human friendly string.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 this.$.play.setAttribute('aria-label', 297 this.$.play.setAttribute('aria-label',
268 this.playing ? ariaLabels.pause : ariaLabels.play); 298 this.playing ? ariaLabels.pause : ariaLabels.play);
269 this.$.next.setAttribute('aria-label', ariaLabels.next); 299 this.$.next.setAttribute('aria-label', ariaLabels.next);
270 this.$.volumeButton.setAttribute('aria-label', ariaLabels.volume); 300 this.$.volumeButton.setAttribute('aria-label', ariaLabels.volume);
271 this.$.playList.setAttribute('aria-label', ariaLabels.playList); 301 this.$.playList.setAttribute('aria-label', ariaLabels.playList);
272 this.$.timeSlider.setAttribute('aria-label', ariaLabels.seekSlider); 302 this.$.timeSlider.setAttribute('aria-label', ariaLabels.seekSlider);
273 this.$.volumeButton.setAttribute('aria-label', 303 this.$.volumeButton.setAttribute('aria-label',
274 this.volume !== 0 ? ariaLabels.mute : ariaLabels.unmute); 304 this.volume !== 0 ? ariaLabels.mute : ariaLabels.unmute);
275 this.$.volumeSlider.setAttribute('aria-label', ariaLabels.volumeSlider); 305 this.$.volumeSlider.setAttribute('aria-label', ariaLabels.volumeSlider);
276 }, 306 },
277
278 /**
279 * Handles arrow keys on time slider to skip forward/backword.
280 * @param {!Event} event
281 * @private
282 */
283 onProgressKeyDownOrKeyPress_: function(event) {
284 if (event.code !== 'ArrowRight' && event.code !== 'ArrowLeft' &&
285 event.code !== 'ArrowUp' && event.code !== 'ArrowDown') {
286 return;
287 }
288
289 event.preventDefault();
290
291 if (this.duration > 0) {
292 // Skip 5 seconds or 10% of duration, whichever is smaller.
293 var millisecondsToSkip = Math.min(5000, this.duration / 10);
294 if (event.code === 'ArrowRight' || event.code === 'ArrowUp') {
295 this.time = Math.min(this.time + millisecondsToSkip, this.duration);
296 } else {
297 this.time = Math.max(this.time - millisecondsToSkip, 0);
298 }
299 }
300 }
301 }); 307 });
302 })(); // Anonymous closure 308 })(); // Anonymous closure
OLDNEW
« no previous file with comments | « no previous file | ui/file_manager/audio_player/js/audio_player.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698