123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.av.widget.ProgressSlider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.av.widget.ProgressSlider"] = true;
- dojo.provide("dojox.av.widget.ProgressSlider");
- dojo.require("dijit._Widget");
- dojo.require("dijit._Templated");
- dojo.declare("dojox.av.widget.ProgressSlider", [dijit._Widget, dijit._Templated], {
- // summary:
- // A custom slider widget to use with dojox.av.widget.Player.
- // description:
- // Displays the current playhead position of the media. Has two
- // progress bars: one for playhead position, and one for download
- // progress.
- //
- templateString: dojo.cache("dojox.av.widget", "resources/ProgressSlider.html", "<div class=\"Progress\" dojoAttachEvent=\"mousedown:startDrag\">\n \n <div class=\"ProgressLoaded\" dojoAttachPoint=\"progressLoaded\"></div>\n <div class=\"ProgressPosition\" dojoAttachPoint=\"progressPosition\"></div>\n\t<div class=\"ProgressHandle\" dojoAttachPoint=\"handle\" dojoAttachEvent=\"mouseover:handleOver, mouseout:handleOut\"></div>\n</div>\n"),
- postCreate: function(){
- // summary:
- // Initialize slider.
- //
- this.seeking = false;
- this.handleWidth = dojo.marginBox(this.handle).w;
- var dim = dojo.coords(this.domNode);
- this.finalWidth = dim.w
- this.width = dim.w-this.handleWidth;
- this.x = dim.x;
-
- dojo.setSelectable(this.domNode, false);
- dojo.setSelectable(this.handle, false);
- },
- setMedia: function(/* Object */med, playerWidget){
- // summary:
- // A common method to set the media in all Player widgets.
- // May do connections and initializations.
- //
- this.playerWidget = playerWidget;
- this.media = med;
- dojo.connect(this.media, "onMetaData", this, function(data){
- if(data && data.duration){
- this.duration = data.duration;
- }
- });
- dojo.connect(this.media, "onEnd", this, function(){
- dojo.disconnect(this.posCon);
- this.setHandle(this.duration);
- });
- dojo.connect(this.media, "onStart", this, function(){
- this.posCon = dojo.connect(this.media, "onPosition", this, "setHandle");
- });
-
- dojo.connect(this.media, "onDownloaded", this, function(percent){
- this.setLoadedPosition(percent*.01);
- this.width = this.finalWidth * .01 * percent;
- });
-
- },
- onDrag: function(/* HTMLEvent */ evt){
- // summary:
- // Fired when the mouse is moved. Sets the slider.
- //
- var x = evt.clientX - this.x;
- if(x<0) x = 0;
- if(x>this.width-this.handleWidth) x=this.width-this.handleWidth;
-
- var p = x/this.finalWidth;
- this.media.seek( this.duration * p );
- dojo.style(this.handle, "marginLeft", x+"px");
- dojo.style(this.progressPosition, "width", x+"px");
- },
- startDrag: function(){
- // summary:
- // Fired onmousedown of the slider handle.
- //
- dojo.setSelectable(this.playerWidget.domNode, false);
- this.seeking = true;
- this.cmove = dojo.connect(dojo.doc, "mousemove", this, "onDrag");
- this.cup = dojo.connect(dojo.doc, "mouseup", this, "endDrag");
- },
- endDrag: function(){
- // summary:
- // Fired on document.onmouseup.
- //
- dojo.setSelectable(this.playerWidget.domNode, true);
- this.seeking = false;
- if(this.cmove) dojo.disconnect(this.cmove);
- if(this.cup) dojo.disconnect(this.cup);
- this.handleOut();
- },
-
- setHandle: function(time){
- // summary:
- // Sets the slider handle (when it is not being dragged)
- //
- if(!this.seeking){
- var w = this.width-this.handleWidth;
- var p = time/this.duration;
- var x = p*w;
-
- dojo.style(this.handle, "marginLeft", x+"px");
- dojo.style(this.progressPosition, "width", x+"px");
- }
- },
-
- setLoadedPosition: function(decimal){
- // summary:
- // Sets the download progress bar to the percentage of how much
- // the media has been downloaded.
- dojo.style(this.progressLoaded, "width", (this.finalWidth*decimal)+"px");
- },
-
- handleOver: function(){
- // summary:
- // Highlights the slider handle on mouseover, and
- // stays highlighted during drag.
- //
- dojo.addClass(this.handle, "over");
- },
- handleOut: function(){
- // summary:
- // Unhighlights handle onmouseover, or on endDrag.
- //
- if(!this.seeking){
- dojo.removeClass(this.handle, "over");
- }
- },
- onResize: function(playerDimensions){
- // summary:
- // Handles player resize. Need to recalculate the width of
- // position an download bars.
- var dim = dojo.coords(this.domNode);
- this.finalWidth = dim.w;
-
- }
-
- });
- }
|