1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

335 lines
5.1 KiB

/*jslint laxbreak:true */
/*jslint laxcomma:true */
/*jslint loopfunc:true */
/*jslint strict:true */
/*jslint browser:true */
/*jslint devel:true */
define([
"underscore"
, "jquery"
, "backbone"
, "modules/webaudio"
, "text!../../templates/player/layout.html"
, "text!../../templates/player/player-status.html"
]
, function (
_
, $
, Backbone
, WebAudio
, tmplPlayerLayout
, tmplPlayerStatus
) {
"use strict";
if (!_.isFunction(Array.prototype.shuffle)) {
Array.prototype.shuffle = function() {
var len = this.length
, i = len
;
if ( len === 0 ) {
return false;
}
while (i--) {
var p = parseInt(Math.random()*len, 10);
var t = this[i];
this[i] = this[p];
this[p] = t;
}
};
}
var
Player = Backbone.View.extend({
elViewport: null
, $elViewport: null
, playIndex: []
, playCursor: 0
, webAudio: null
, _stateRandom: null
, _stateRepeat: null
, _stateMute: null
, _stateVolume: null
, _stateAudio: null
, _state: null
, _states: {
stopped: 0
, loading: 1
, playing: 2
, paused: 3
}
, events: {
//"click #add-friend": "showPrompt",
"click div:first-child > a.buttonPrev":
"__buttonPrevious"
, "click div:first-child > a.buttonNext":
"__buttonNext"
, "click div:first-child > a.buttonPlay":
"__buttonPlayPause"
// Volume Down
, "click div:first-child > .playerVolumeWrapper > a:first-child":
"__buttonVolumeDown"
// Volume Up
, "click div:first-child > .playerVolumeWrapper > a:last-child":
"__buttonVolumeUp"
// Volume click
, "click div:first-child > .playerVolumeWrapper > input":
"__buttonVolumeClick"
// Seek input
, "click div:last-child > .playerProgressWrapper > progress":
"__buttonSeek"
}
, initialize: function (options) {
var that = this
;
_.bindAll(this
// Public
, "setPlayIndex"
, "setRandomState"
, "setRepeatState"
, "playItem"
// Events
, "__buttonPlayPause"
, "__buttonNext"
, "__buttonPrevious"
, "__buttonVolumeUp"
, "__buttonVolumeDown"
, "__buttonVolumeClick"
, "__buttonSeek"
// Private
, "_waCreate"
, "_waBindEvents"
, "__waStateChanged"
, "_playerEnded"
, "_playerLoading"
, "_playNext"
, "_playPrevious"
, "_playerPause"
, "_playerStop"
, "_playerStart"
, "_setVolume"
, "_getItemData"
, "_getItemMediaUrl"
, "_setViewport"
, "_updateViewportProgress"
);
Player.__super__.initialize.apply(that);
that.$el.html(tmplPlayerLayout);
that.elViewport = document.createElement("div");
that.$elViewport = $(that.elViewport);
that.$elViewport.html(_.template(tmplPlayerStatus)({}));
that.$el.append(that.elViewport);
that._waCreate();
return that;
}
/**
* PUBLIC
**/
, setPlayIndex: function (index) {
var that = this
;
that._playIndex = index;
that._playCursor = 0;
if (that._stateRandom) {
that.setRandomState(that._stateRandom);
}
return that._playIndex;
}
, setRandomState: function (random) {
var that = this
;
if (random === true) {
that._playIndex.shuffle();
}
// TODO: Set cursor back to the item that was playing
return that._stateRandom = random;
}
, setRepeatState: function (repeat) {
var that = this
;
return that._stateRepeat = repeat;
}
, playItem: function (item) {
}
/**
* EVENTS
**/
, __buttonPlayPause: function (event) {
var that = this
;
}
, __buttonNext: function (event) {
var that = this
;
}
, __buttonPrevious: function (event) {
var that = this
;
}
, __buttonVolumeUp: function (event) {
var that = this
;
}
, __buttonVolumeDown: function (event) {
var that = this
;
}
, __buttonVolumeClick: function (event) {
var that = this
;
}
, __buttonSeek: function (event) {
var that = this
;
}
/**
* PRIVATE
**/
// Audio Player
, _waCreate: function () {
var that = this
;
return that.webAudio = new WebAudio();
}
, _waBindEvents: function () {
}
, __waStateChanged: function () {
var that = this
;
}
// Player Controls
, _playerEnded: function () {
var that = this
;
}
, _playerLoading: function () {
var that = this
;
}
, _playNext: function () {
var that = this
;
}
, _playPrevious: function () {
var that = this
;
}
, _playerPause: function () {
var that = this
;
}
, _playerStop: function () {
var that = this
;
}
, _playerStart: function () {
var that = this
;
}
, _setVolume: function (volume) {
var that = this
;
}
// Viewport methods
, _getItemData: function (item) {
var that = this
;
}
, _getItemMediaUrl: function (item) {
var that = this
;
}
, _setViewport: function (item) {
var that = this
;
}
, _updateViewportProgress: function (progress, time) {
var that = this
;
}
});
return Player;
});