| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 document.addEventListener('DOMContentLoaded', function() { | 5 document.addEventListener('DOMContentLoaded', function() { |
| 6 // Test harness sets the search string to prevent the automatic load. | 6 // Test harness sets the search string to prevent the automatic load. |
| 7 // It calls AudioPlayer.load() explicitly after initializing | 7 // It calls AudioPlayer.load() explicitly after initializing |
| 8 // the |chrome| variable with an appropriate mock object. | 8 // the |chrome| variable with an appropriate mock object. |
| 9 if (!document.location.search) { | 9 if (!document.location.search) { |
| 10 AudioPlayer.load(); | 10 AudioPlayer.load(); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 this.loadMetadata_(i); | 116 this.loadMetadata_(i); |
| 117 } | 117 } |
| 118 }; | 118 }; |
| 119 | 119 |
| 120 AudioPlayer.prototype.loadMetadata_ = function(track) { | 120 AudioPlayer.prototype.loadMetadata_ = function(track) { |
| 121 this.fetchMetadata_( | 121 this.fetchMetadata_( |
| 122 this.urls_[track], this.displayMetadata_.bind(this, track)); | 122 this.urls_[track], this.displayMetadata_.bind(this, track)); |
| 123 }; | 123 }; |
| 124 | 124 |
| 125 AudioPlayer.prototype.displayMetadata_ = function(track, metadata) { | 125 AudioPlayer.prototype.displayMetadata_ = function(track, metadata) { |
| 126 if (metadata.thumbnailURL || metadata.error) { | 126 this.trackListItems_[track].setMetadata(metadata, this.container_); |
| 127 this.container_.classList.remove('noart'); | 127 this.trackStackItems_[track].setMetadata(metadata, this.container_); |
| 128 } | |
| 129 this.trackListItems_[track].setMetadata(metadata); | |
| 130 this.trackStackItems_[track].setMetadata(metadata); | |
| 131 }; | 128 }; |
| 132 | 129 |
| 133 AudioPlayer.prototype.select_ = function(newTrack) { | 130 AudioPlayer.prototype.select_ = function(newTrack) { |
| 134 if (this.currentTrack_ == newTrack) return; | 131 if (this.currentTrack_ == newTrack) return; |
| 135 | 132 |
| 136 this.changeSelectionInList_(this.currentTrack_, newTrack); | 133 this.changeSelectionInList_(this.currentTrack_, newTrack); |
| 137 this.changeSelectionInStack_(this.currentTrack_, newTrack); | 134 this.changeSelectionInStack_(this.currentTrack_, newTrack); |
| 138 | 135 |
| 139 this.currentTrack_ = newTrack; | 136 this.currentTrack_ = newTrack; |
| 140 this.scrollToCurrent_(false); | 137 this.scrollToCurrent_(false); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 this.advance_(true /* forward */, true /* only if valid */); | 236 this.advance_(true /* forward */, true /* only if valid */); |
| 240 }.bind(this), | 237 }.bind(this), |
| 241 3000); | 238 3000); |
| 242 }; | 239 }; |
| 243 | 240 |
| 244 AudioPlayer.prototype.cancelAutoAdvance_ = function() { | 241 AudioPlayer.prototype.cancelAutoAdvance_ = function() { |
| 245 if (this.autoAdvanceTimer_) { | 242 if (this.autoAdvanceTimer_) { |
| 246 clearTimeout(this.autoAdvanceTimer_); | 243 clearTimeout(this.autoAdvanceTimer_); |
| 247 this.autoAdvanceTimer_ = null; | 244 this.autoAdvanceTimer_ = null; |
| 248 } | 245 } |
| 249 } | 246 }; |
| 250 | 247 |
| 251 AudioPlayer.prototype.onExpandCollapse_ = function() { | 248 AudioPlayer.prototype.onExpandCollapse_ = function() { |
| 252 this.container_.classList.toggle('collapsed'); | 249 this.container_.classList.toggle('collapsed'); |
| 253 this.syncHeight_(); | 250 this.syncHeight_(); |
| 254 if (!this.isCompact_()) | 251 if (!this.isCompact_()) |
| 255 this.scrollToCurrent_(true); | 252 this.scrollToCurrent_(true); |
| 256 }; | 253 }; |
| 257 | 254 |
| 258 /* Keep the below constants in sync with the CSS. */ | 255 /* Keep the below constants in sync with the CSS. */ |
| 259 // TODO(kaznacheev): Set to 30 when the audio player is title-less. | 256 // TODO(kaznacheev): Set to 30 when the audio player is title-less. |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 318 var title = this.url_.split('/').pop(); | 315 var title = this.url_.split('/').pop(); |
| 319 var dotIndex = title.lastIndexOf('.'); | 316 var dotIndex = title.lastIndexOf('.'); |
| 320 if (dotIndex >= 0) title = title.substr(0, dotIndex); | 317 if (dotIndex >= 0) title = title.substr(0, dotIndex); |
| 321 return title; | 318 return title; |
| 322 }; | 319 }; |
| 323 | 320 |
| 324 AudioPlayer.TrackInfo.prototype.getDefaultArtist = function() { | 321 AudioPlayer.TrackInfo.prototype.getDefaultArtist = function() { |
| 325 return 'Unknown Artist'; // TODO(kaznacheev): i18n | 322 return 'Unknown Artist'; // TODO(kaznacheev): i18n |
| 326 }; | 323 }; |
| 327 | 324 |
| 328 AudioPlayer.TrackInfo.prototype.setMetadata = function(metadata) { | 325 /** |
| 326 * @param {Object} metadata The metadata object |
| 327 * @param {HTMLElement} container The container for the tracks. |
| 328 */ |
| 329 AudioPlayer.TrackInfo.prototype.setMetadata = function(metadata, container) { |
| 329 if (metadata.error) { | 330 if (metadata.error) { |
| 330 this.art_.classList.add('blank'); | 331 this.art_.classList.add('blank'); |
| 331 this.art_.classList.add('error'); | 332 this.art_.classList.add('error'); |
| 333 container.classList.remove('noart'); |
| 332 } else if (metadata.thumbnailURL) { | 334 } else if (metadata.thumbnailURL) { |
| 333 this.art_.classList.remove('blank'); | 335 this.img_.onload = function() { |
| 336 // Only display the image if the thumbnail loaded successfully. |
| 337 this.art_.classList.remove('blank'); |
| 338 container.classList.remove('noart'); |
| 339 }.bind(this); |
| 334 this.img_.src = metadata.thumbnailURL; | 340 this.img_.src = metadata.thumbnailURL; |
| 335 } | 341 } |
| 336 this.title_.textContent = metadata.title || this.getDefaultTitle(); | 342 this.title_.textContent = metadata.title || this.getDefaultTitle(); |
| 337 this.artist_.textContent = metadata.artist || this.getDefaultArtist(); | 343 this.artist_.textContent = metadata.artist || this.getDefaultArtist(); |
| 338 }; | 344 }; |
| OLD | NEW |