| 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
|
|
|