--- a/ui.js Wed Oct 12 12:10:03 2016 +0800
+++ b/ui.js Wed Oct 12 12:43:57 2016 +0800
this.rivet = rivets.bind(this.el, {player: this.model, front: this});
this.listenTo(this.model, 'ended', this.advance);
+ this.listenTo(this.model, 'change:random', this.makeOrder);
+ this.listenTo(this.model.tracks, 'reset', this.makeOrder);
Backbone.View.prototype.remove.apply(this);
- this.fastForward(null, {player: this.model});
+ this.fastForward(null, {player: this.model, front: this});
+ makeOrder: function() {
+ if (this.model.get('random')) {
+ var trackNumber = this.model.get('track').get('id') || 0;
+ var shuffled = _.shuffle(_.range(this.model.tracks.length));
+ this.order = [trackNumber].concat(_(shuffled).without(trackNumber));
+ this.order = _.range(this.model.tracks.length);
fastBackward: function(event, context) {
- var trackNumber = (context.player.get('track').get('id') || 0) - 1;
- if (trackNumber < 0 && context.player.get('repeat')) {
- trackNumber = context.player.tracks.length - 1;
+ var trackNumber = context.player.get('track').get('id') || 0;
+ var oi = context.front.order.indexOf(trackNumber) - 1;
+ if (oi < 0 && context.player.get('repeat')) {
+ oi = context.player.tracks.length - 1;
- if (trackNumber >= 0 && trackNumber < context.player.tracks.length) {
- context.player.startTrack(trackNumber);
+ if (oi >= 0 && oi < context.player.tracks.length) {
+ context.player.startTrack(context.front.order[oi]);
fastForward: function(event, context) {
- var trackNumber = (context.player.get('track').get('id') || 0) + 1;
- if (trackNumber >= context.player.tracks.length && context.player.get('repeat')) {
+ var trackNumber = context.player.get('track').get('id') || 0;
+ var oi = context.front.order.indexOf(trackNumber) + 1;
+ if (oi >= context.player.tracks.length && context.player.get('repeat')) {
- if (trackNumber >= 0 && trackNumber < context.player.tracks.length) {
- context.player.startTrack(trackNumber);
+ if (oi >= 0 && oi < context.player.tracks.length) {
+ context.player.startTrack(context.front.order[oi]);