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

Unified Diff: ui/file_manager/file_manager/audio_player/elements/track_list.js

Issue 641283002: Separate the audio player app from Files.app Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/file_manager/audio_player/elements/track_list.js
diff --git a/ui/file_manager/file_manager/audio_player/elements/track_list.js b/ui/file_manager/file_manager/audio_player/elements/track_list.js
deleted file mode 100644
index 353083d88bf56f5c53ccf59d7e12d5208c4e726d..0000000000000000000000000000000000000000
--- a/ui/file_manager/file_manager/audio_player/elements/track_list.js
+++ /dev/null
@@ -1,297 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-(function() {
- 'use strict';
-
- Polymer('track-list', {
- /**
- * Initializes an element. This method is called automatically when the
- * element is ready.
- */
- ready: function() {
- this.tracksObserver_ = new ArrayObserver(
- this.tracks,
- this.tracksValueChanged_.bind(this));
-
- window.addEventListener('resize', this.onWindowResize_.bind(this));
- },
-
- /**
- * Registers handlers for changing of external variables
- */
- observe: {
- 'model.shuffle': 'onShuffleChanged',
- },
-
- /**
- * Model object of the Audio Player.
- * @type {AudioPlayerModel}
- */
- model: null,
-
- /**
- * List of tracks.
- * @type {Array.<AudioPlayer.TrackInfo>}
- */
- tracks: [],
-
- /**
- * Play order of the tracks. Each value is the index of 'this.tracks'.
- * @type {Array.<number>}
- */
- playOrder: [],
-
- /**
- * Track index of the current track.
- * If the tracks property is empty, it should be -1. Otherwise, be a valid
- * track number.
- *
- * @type {number}
- */
- currentTrackIndex: -1,
-
- /**
- * Invoked when 'shuffle' property is changed.
- * @param {boolean} oldValue Old value.
- * @param {boolean} newValue New value.
- */
- onShuffleChanged: function(oldValue, newValue) {
- this.generatePlayOrder(true /* keep the current track */);
- },
-
- /**
- * Invoked when the current track index is changed.
- * @param {number} oldValue old value.
- * @param {number} newValue new value.
- */
- currentTrackIndexChanged: function(oldValue, newValue) {
- if (oldValue === newValue)
- return;
-
- if (!isNaN(oldValue) && 0 <= oldValue && oldValue < this.tracks.length)
- this.tracks[oldValue].active = false;
-
- if (0 <= newValue && newValue < this.tracks.length) {
- var currentPlayOrder = this.playOrder.indexOf(newValue);
- if (currentPlayOrder !== -1) {
- // Success
- this.tracks[newValue].active = true;
-
- this.ensureTrackInViewport_(newValue /* trackIndex */);
- return;
- }
- }
-
- // Invalid index
- if (this.tracks.length === 0)
- this.currentTrackIndex = -1;
- else
- this.generatePlayOrder(false /* no need to keep the current track */);
- },
-
- /**
- * Invoked when 'tracks' property is changed.
- * @param {Array.<TrackInfo>} oldValue Old value.
- * @param {Array.<TrackInfo>} newValue New value.
- */
- tracksChanged: function(oldValue, newValue) {
- // Note: Sometimes both oldValue and newValue are null though the actual
- // values are not null. Maybe it's a bug of Polymer.
-
- // Re-register the observer of 'this.tracks'.
- this.tracksObserver_.close();
- this.tracksObserver_ = new ArrayObserver(this.tracks);
- this.tracksObserver_.open(this.tracksValueChanged_.bind(this));
-
- if (this.tracks.length !== 0) {
- // Restore the active track.
- if (this.currentTrackIndex !== -1 &&
- this.currentTrackIndex < this.tracks.length) {
- this.tracks[this.currentTrackIndex].active = true;
- }
-
- // Reset play order and current index.
- this.generatePlayOrder(false /* no need to keep the current track */);
- } else {
- this.playOrder = [];
- this.currentTrackIndex = -1;
- }
- },
-
- /**
- * Invoked when the value in the 'tracks' is changed.
- * @param {Array.<Object>} splices The detail of the change.
- */
- tracksValueChanged_: function(splices) {
- if (this.tracks.length === 0)
- this.currentTrackIndex = -1;
- else
- this.tracks[this.currentTrackIndex].active = true;
- },
-
- /**
- * Invoked when the track element is clicked.
- * @param {Event} event Click event.
- */
- trackClicked: function(event) {
- var index = ~~event.currentTarget.getAttribute('index');
- var track = this.tracks[index];
- if (track)
- this.selectTrack(track);
- },
-
- /**
- * Invoked when the window is resized.
- * @private
- */
- onWindowResize_: function() {
- this.ensureTrackInViewport_(this.currentTrackIndex);
- },
-
- /**
- * Scrolls the track list to ensure the given track in the viewport.
- * @param {number} trackIndex The index of the track to be in the viewport.
- * @private
- */
- ensureTrackInViewport_: function(trackIndex) {
- var trackSelector = '::shadow .track[index="' + trackIndex + '"]';
- var trackElement = this.querySelector(trackSelector);
- if (trackElement) {
- var viewTop = this.scrollTop;
- var viewHeight = this.clientHeight;
- var elementTop = trackElement.offsetTop;
- var elementHeight = trackElement.offsetHeight;
-
- if (elementTop < viewTop) {
- // Adjust the tops.
- this.scrollTop = elementTop;
- } else if (elementTop + elementHeight <= viewTop + viewHeight) {
- // The entire element is in the viewport. Do nothing.
- } else {
- // Adjust the bottoms.
- this.scrollTop = Math.max(0,
- (elementTop + elementHeight - viewHeight));
- }
- }
- },
-
- /**
- * Invoked when the track element is clicked.
- * @param {boolean} keepCurrentTrack Keep the current track or not.
- */
- generatePlayOrder: function(keepCurrentTrack) {
- console.assert((keepCurrentTrack !== undefined),
- 'The argument "forward" is undefined');
-
- if (this.tracks.length === 0) {
- this.playOrder = [];
- return;
- }
-
- // Creates sequenced array.
- this.playOrder =
- this.tracks.
- map(function(unused, index) { return index; });
-
- if (this.model && this.model.shuffle) {
- // Randomizes the play order array (Schwarzian-transform algorithm).
- this.playOrder = this.playOrder
- .map(function(a) {
- return {weight: Math.random(), index: a};
- })
- .sort(function(a, b) { return a.weight - b.weight })
- .map(function(a) { return a.index });
-
- if (keepCurrentTrack) {
- // Puts the current track at the beginning of the play order.
- this.playOrder = this.playOrder
- .filter(function(value) {
- return this.currentTrackIndex !== value;
- }, this);
- this.playOrder.splice(0, 0, this.currentTrackIndex);
- }
- }
-
- if (!keepCurrentTrack)
- this.currentTrackIndex = this.playOrder[0];
- },
-
- /**
- * Sets the current track.
- * @param {AudioPlayer.TrackInfo} track TrackInfo to be set as the current
- * track.
- */
- selectTrack: function(track) {
- var index = -1;
- for (var i = 0; i < this.tracks.length; i++) {
- if (this.tracks[i].url === track.url) {
- index = i;
- break;
- }
- }
- if (index >= 0) {
- // TODO(yoshiki): Clean up the flow and the code around here.
- if (this.currentTrackIndex == index)
- this.replayCurrentTrack();
- else
- this.currentTrackIndex = index;
- }
- },
-
- /**
- * Request to replay the current music.
- */
- replayCurrentTrack: function() {
- this.fire('replay');
- },
-
- /**
- * Returns the current track.
- * @param {AudioPlayer.TrackInfo} track TrackInfo of the current track.
- */
- getCurrentTrack: function() {
- if (this.tracks.length === 0)
- return null;
-
- return this.tracks[this.currentTrackIndex];
- },
-
- /**
- * Returns the next (or previous) track in the track list. If there is no
- * next track, returns -1.
- *
- * @param {boolean} forward Specify direction: forward or previous mode.
- * True: forward mode, false: previous mode.
- * @param {boolean} cyclic Specify if cyclically or not: It true, the first
- * track is succeeding to the last track, otherwise no track after the
- * last.
- * @return {number} The next track index.
- */
- getNextTrackIndex: function(forward, cyclic) {
- if (this.tracks.length === 0)
- return -1;
-
- var defaultTrackIndex =
- forward ? this.playOrder[0] : this.playOrder[this.tracks.length - 1];
-
- var currentPlayOrder = this.playOrder.indexOf(this.currentTrackIndex);
- console.assert(
- (0 <= currentPlayOrder && currentPlayOrder < this.tracks.length),
- 'Insufficient TrackList.playOrder. The current track is not on the ' +
- 'track list.');
-
- var newPlayOrder = currentPlayOrder + (forward ? +1 : -1);
- if (newPlayOrder === -1 || newPlayOrder === this.tracks.length)
- return cyclic ? defaultTrackIndex : -1;
-
- var newTrackIndex = this.playOrder[newPlayOrder];
- console.assert(
- (0 <= newTrackIndex && newTrackIndex < this.tracks.length),
- 'Insufficient TrackList.playOrder. New Play Order: ' + newPlayOrder);
-
- return newTrackIndex;
- },
- }); // Polymer('track-list') block
-})(); // Anonymous closure

Powered by Google App Engine
This is Rietveld 408576698