gyorgy@0: (function($) {
gyorgy@0: // progress/loaded bar
gyorgy@0: MediaElementPlayer.prototype.buildprogress = function(player, controls, layers, media) {
gyorgy@0:
gyorgy@0: $('
'+
gyorgy@0: ''+
gyorgy@0: ''+
gyorgy@0: ''+
gyorgy@0: ''+
gyorgy@0: '' +
gyorgy@0: '00:00' +
gyorgy@0: '' +
gyorgy@0: ''+
gyorgy@0: ''+
gyorgy@0: '
')
gyorgy@0: .appendTo(controls);
gyorgy@0:
gyorgy@0: var
gyorgy@0: t = this,
gyorgy@0: total = controls.find('.mejs-time-total'),
gyorgy@0: loaded = controls.find('.mejs-time-loaded'),
gyorgy@0: current = controls.find('.mejs-time-current'),
gyorgy@0: handle = controls.find('.mejs-time-handle'),
gyorgy@0: timefloat = controls.find('.mejs-time-float'),
gyorgy@0: timefloatcurrent = controls.find('.mejs-time-float-current'),
gyorgy@0: handleMouseMove = function (e) {
gyorgy@0: // mouse position relative to the object
gyorgy@0: var x = e.pageX,
gyorgy@0: offset = total.offset(),
gyorgy@0: width = total.outerWidth(),
gyorgy@0: percentage = 0,
gyorgy@0: newTime = 0;
gyorgy@0:
gyorgy@0:
gyorgy@0: if (x > offset.left && x <= width + offset.left && media.duration) {
gyorgy@0: percentage = ((x - offset.left) / width);
gyorgy@0: newTime = (percentage <= 0.02) ? 0 : percentage * media.duration;
gyorgy@0:
gyorgy@0: // seek to where the mouse is
gyorgy@0: if (mouseIsDown) {
gyorgy@0: media.setCurrentTime(newTime);
gyorgy@0: }
gyorgy@0:
gyorgy@0: // position floating time box
gyorgy@0: var pos = x - offset.left;
gyorgy@0: timefloat.css('left', pos);
gyorgy@0: timefloatcurrent.html( mejs.Utility.secondsToTimeCode(newTime) );
gyorgy@0: }
gyorgy@0: },
gyorgy@0: mouseIsDown = false,
gyorgy@0: mouseIsOver = false;
gyorgy@0:
gyorgy@0: // handle clicks
gyorgy@0: //controls.find('.mejs-time-rail').delegate('span', 'click', handleMouseMove);
gyorgy@0: total
gyorgy@0: .bind('mousedown', function (e) {
gyorgy@0: mouseIsDown = true;
gyorgy@0: handleMouseMove(e);
gyorgy@0: return false;
gyorgy@0: });
gyorgy@0:
gyorgy@0: controls.find('.mejs-time-rail')
gyorgy@0: .bind('mouseenter', function(e) {
gyorgy@0: mouseIsOver = true;
gyorgy@0: })
gyorgy@0: .bind('mouseleave',function(e) {
gyorgy@0: mouseIsOver = false;
gyorgy@0: });
gyorgy@0:
gyorgy@0: $(document)
gyorgy@0: .bind('mouseup', function (e) {
gyorgy@0: mouseIsDown = false;
gyorgy@0: //handleMouseMove(e);
gyorgy@0: })
gyorgy@0: .bind('mousemove', function (e) {
gyorgy@0: if (mouseIsDown || mouseIsOver) {
gyorgy@0: handleMouseMove(e);
gyorgy@0: }
gyorgy@0: });
gyorgy@0:
gyorgy@0: // loading
gyorgy@0: media.addEventListener('progress', function (e) {
gyorgy@0: player.setProgressRail(e);
gyorgy@0: player.setCurrentRail(e);
gyorgy@0: }, false);
gyorgy@0:
gyorgy@0: // current time
gyorgy@0: media.addEventListener('timeupdate', function(e) {
gyorgy@0: player.setProgressRail(e);
gyorgy@0: player.setCurrentRail(e);
gyorgy@0: }, false);
gyorgy@0:
gyorgy@0:
gyorgy@0: // store for later use
gyorgy@0: t.loaded = loaded;
gyorgy@0: t.total = total;
gyorgy@0: t.current = current;
gyorgy@0: t.handle = handle;
gyorgy@0: }
gyorgy@0: MediaElementPlayer.prototype.setProgressRail = function(e) {
gyorgy@0:
gyorgy@0: var
gyorgy@0: t = this,
gyorgy@0: target = (e != undefined) ? e.target : t.media,
gyorgy@0: percent = null;
gyorgy@0:
gyorgy@0: // newest HTML5 spec has buffered array (FF4, Webkit)
gyorgy@0: if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && target.duration) {
gyorgy@0: // TODO: account for a real array with multiple values (only Firefox 4 has this so far)
gyorgy@0: percent = target.buffered.end(0) / target.duration;
gyorgy@0: }
gyorgy@0: // Some browsers (e.g., FF3.6 and Safari 5) cannot calculate target.bufferered.end()
gyorgy@0: // to be anything other than 0. If the byte count is available we use this instead.
gyorgy@0: // Browsers that support the else if do not seem to have the bufferedBytes value and
gyorgy@0: // should skip to there. Tested in Safari 5, Webkit head, FF3.6, Chrome 6, IE 7/8.
gyorgy@0: else if (target && target.bytesTotal != undefined && target.bytesTotal > 0 && target.bufferedBytes != undefined) {
gyorgy@0: percent = target.bufferedBytes / target.bytesTotal;
gyorgy@0: }
gyorgy@0: // Firefox 3 with an Ogg file seems to go this way
gyorgy@0: else if (e && e.lengthComputable && e.total != 0) {
gyorgy@0: percent = e.loaded/e.total;
gyorgy@0: }
gyorgy@0:
gyorgy@0: // finally update the progress bar
gyorgy@0: if (percent !== null) {
gyorgy@0: percent = Math.min(1, Math.max(0, percent));
gyorgy@0: // update loaded bar
gyorgy@0: if (t.loaded && t.total) {
gyorgy@0: t.loaded.width(t.total.width() * percent);
gyorgy@0: }
gyorgy@0: }
gyorgy@0: }
gyorgy@0: MediaElementPlayer.prototype.setCurrentRail = function() {
gyorgy@0:
gyorgy@0: var t = this;
gyorgy@0:
gyorgy@0: if (t.media.currentTime != undefined && t.media.duration) {
gyorgy@0:
gyorgy@0: // update bar and handle
gyorgy@0: if (t.total && t.handle) {
gyorgy@0: var
gyorgy@0: newWidth = t.total.width() * t.media.currentTime / t.media.duration,
gyorgy@0: handlePos = newWidth - (t.handle.outerWidth(true) / 2);
gyorgy@0:
gyorgy@0: t.current.width(newWidth);
gyorgy@0: t.handle.css('left', handlePos);
gyorgy@0: }
gyorgy@0: }
gyorgy@0:
gyorgy@0: }
gyorgy@0:
gyorgy@0: })(mejs.$);