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

Unified Diff: chrome/browser/resources/file_manager/audio_player/elements/track_list.js

Issue 185653014: [AudioPlayer] Fix a bug on changing 'expanded' status (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Adressed the comment Created 6 years, 9 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: chrome/browser/resources/file_manager/audio_player/elements/track_list.js
diff --git a/chrome/browser/resources/file_manager/audio_player/elements/track_list.js b/chrome/browser/resources/file_manager/audio_player/elements/track_list.js
index 6b373ad6da5d7a6ad960fc101738c22967f0b175..07953d22723e6cb29720fd965ba9aadb29248be6 100644
--- a/chrome/browser/resources/file_manager/audio_player/elements/track_list.js
+++ b/chrome/browser/resources/file_manager/audio_player/elements/track_list.js
@@ -92,8 +92,9 @@
},
/**
- * Invoked when 'tracks' property is clicked.
- * @param {Event} event Click event.
+ * 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
@@ -101,15 +102,17 @@
// Re-register the observer of 'this.tracks'.
this.tracksObserver_.close();
- this.tracksObserver_ = new ArrayObserver(
- this.tracks,
- this.tracksValueChanged_.bind(this));
+ this.tracksObserver_ = new ArrayObserver(this.tracks);
+ this.tracksObserver_.open(this.tracksValueChanged_.bind(this));
- // Reset play order and current index.
- if (this.tracks.length !== 0)
- this.generatePlayOrder(false /* no need to keep the current track */);
+ if (this.tracks.length !== 0) {
+ // Restore the active track.
+ if (this.currentTrackIndex !== -1)
+ this.tracks[this.currentTrackIndex].active = true;
hirono 2014/03/06 08:48:44 How about the case where this.currentTrackIndex >=
yoshiki 2014/03/06 09:24:23 Done.
- if (this.tracks.length === 0) {
+ // Reset play order and current index.
+ this.generatePlayOrder(false /* no need to keep the current track */);
+ } else {
this.playOrder = [];
this.currentTrackIndex = -1;
}
@@ -154,10 +157,21 @@
var trackSelector = '.track[index="' + trackIndex + '"]';
var trackElement = this.impl.querySelector(trackSelector);
if (trackElement) {
- this.scrollTop = Math.max(
- 0,
- (trackElement.offsetTop + trackElement.offsetHeight -
- this.clientHeight));
+ 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));
+ }
}
},

Powered by Google App Engine
This is Rietveld 408576698