diff --git a/CHANGELOG.md b/CHANGELOG.md index e05beb6c..cd336d7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Next version * Marquee now displays one additional character: https://github.com/captbaritone/webamp/issues/543 +* Track numbers in playlist are now padded to the length of the longest track number. ## 1.0.0 diff --git a/css/playlist-window.css b/css/playlist-window.css index 9139e9df..504327fb 100644 --- a/css/playlist-window.css +++ b/css/playlist-window.css @@ -79,15 +79,10 @@ user-select: none; } -#webamp .playlist-track-numbers > div, #webamp .playlist-track-durations > div { padding-right: 3px; text-align: right; } -#webamp .playlist-track-numbers > div { - text-align: center; - padding-left: 1px; -} #webamp .playlist-track-titles { flex: 1 1 auto; diff --git a/js/components/PlaylistWindow/TrackList.js b/js/components/PlaylistWindow/TrackList.js index 25051058..42609cb4 100644 --- a/js/components/PlaylistWindow/TrackList.js +++ b/js/components/PlaylistWindow/TrackList.js @@ -2,13 +2,21 @@ import React from "react"; import { connect } from "react-redux"; import { getTimeStr } from "../../utils"; -import { getVisibleTrackIds, getScrollOffset } from "../../selectors"; +import { + getVisibleTrackIds, + getScrollOffset, + getNumberOfTracks +} from "../../selectors"; import { TRACK_HEIGHT } from "../../constants"; import { SELECT_ZERO } from "../../actionTypes"; import { dragSelected, scrollPlaylistByDelta } from "../../actionCreators"; import TrackCell from "./TrackCell"; import TrackTitle from "./TrackTitle"; +function getNumberLength(number) { + return number.toString().length; +} + class TrackList extends React.Component { constructor(props) { super(props); @@ -57,6 +65,9 @@ class TrackList extends React.Component { render() { const { tracks, offset } = this.props; + const maxTrackNumberLength = getNumberLength(this.props.numberOfTracks); + const paddedTrackNumForIndex = i => + (i + 1 + offset).toString().padStart(maxTrackNumberLength, "\u00A0"); return (
{ @@ -67,11 +78,10 @@ class TrackList extends React.Component { onClick={this.props.selectZero} onWheel={this.props.scrollPlaylistByDelta} > -
- {this._renderTracks((id, i) => `${i + 1 + offset}.`)} -
- {this._renderTracks(id => )} + {this._renderTracks((id, i) => ( + + ))}
{this._renderTracks(id => getTimeStr(tracks[id].duration))} @@ -90,7 +100,8 @@ const mapDispatchToProps = { const mapStateToProps = state => ({ offset: getScrollOffset(state), trackIds: getVisibleTrackIds(state), - tracks: state.playlist.tracks + tracks: state.playlist.tracks, + numberOfTracks: getNumberOfTracks(state) }); export default connect(mapStateToProps, mapDispatchToProps)(TrackList); diff --git a/js/components/PlaylistWindow/TrackTitle.js b/js/components/PlaylistWindow/TrackTitle.js index 04a3a362..a34298c2 100644 --- a/js/components/PlaylistWindow/TrackTitle.js +++ b/js/components/PlaylistWindow/TrackTitle.js @@ -2,7 +2,11 @@ import React from "react"; import { connect } from "react-redux"; import { getTrackDisplayName } from "../../selectors"; -const TrackTitle = props => {props.title}; +const TrackTitle = props => ( + + {props.paddedTrackNumber}. {props.title} + +); const mapStateToProps = (state, ownProps) => ({ title: getTrackDisplayName(state, ownProps.id) diff --git a/js/components/PlaylistWindow/__snapshots__/index.test.js.snap b/js/components/PlaylistWindow/__snapshots__/index.test.js.snap index 24a7d945..afb77861 100644 --- a/js/components/PlaylistWindow/__snapshots__/index.test.js.snap +++ b/js/components/PlaylistWindow/__snapshots__/index.test.js.snap @@ -74,9 +74,6 @@ exports[`PlaylistWindow renders to snapshot 1`] = ` } } > -
diff --git a/js/selectors.js b/js/selectors.js index 4cd6a457..d22faadd 100644 --- a/js/selectors.js +++ b/js/selectors.js @@ -210,7 +210,7 @@ export const getMediaText = createSelector( `${minimalMediaText} (${getTimeStr(duration)}) *** ` ); -const getNumberOfTracks = state => getTrackOrder(state).length; +export const getNumberOfTracks = state => getTrackOrder(state).length; const getPlaylistDuration = createSelector(getTracks, tracks => Object.values(tracks).reduce((total, track) => total + track.duration, 0) );