/pigeoncms/Modules/PigeonCms.VideoPlayer/views/wmvplayer/wmvplayer.js
http://pigeoncms.googlecode.com/ · JavaScript · 794 lines · 673 code · 96 blank · 25 comment · 133 complexity · 264168f93fbba125e0f397762addd78c MD5 · raw file
- /****************************************************************************
- * JW WMV Player version 1.1, created with M$ Silverlight 1.0
- *
- * This file contains all logic for the JW WMV Player. For a functional setup,
- * the following two files are also needed:
- * - silverlight.js (for instantiating the silverlight plugin)
- * - wmvplayer.xaml (or another XAML skin describing the player graphics)
- *
- * More info: http://www.jeroenwijering.com/?item=JW_WMV_Player
- ****************************************************************************/
- if(typeof jeroenwijering == "undefined") {
- var jeroenwijering = new Object();
- jeroenwijering.utils = new Object();
- }
- /****************************************************************************
- * The player wrapper; loads config variables and starts MVC cycle.
- ****************************************************************************/
- jeroenwijering.Player = function(cnt,src,cfg) {
- this.controller;
- this.model;
- this.view;
- this.configuration = {
- backgroundcolor:'FFFFFF',
- windowless:'false',
- file:'',
- height:'260',
- image:'',
- backcolor:'FFFFFF',
- frontcolor:'000000',
- lightcolor:'000000',
- screencolor:'000000',
- width:'320',
- logo:'',
- overstretch:'false',
- shownavigation:'true',
- showstop:'false',
- showdigits:'true',
- usefullscreen:'true',
- usemute:'false',
- autostart:'false',
- bufferlength:'3',
- duration:'0',
- repeat:'false',
- sender:'',
- start:'0',
- volume:'90',
- link:'',
- linkfromdisplay:'false',
- linktarget:'_self'
- };
- for(itm in this.configuration) {
- if(cfg[itm] != undefined) {
- if (itm.indexOf('color') > 0) {
- this.configuration[itm] = cfg[itm].substr(cfg[itm].length-6);
- } else {
- this.configuration[itm] = cfg[itm];
- }
- }
- }
- Silverlight.createObjectEx({
- source:src,
- parentElement:cnt,
- properties:{
- width:this.configuration['width'],
- height:this.configuration['height'],
- version:'1.0',
- inplaceInstallPrompt:true,
- isWindowless:this.configuration['windowless'],
- background:'#'+this.configuration['backgroundcolor']
- },
- events:{
- onLoad:this.onLoadHandler,
- onError:null
- },
- context:this
- });
- }
- jeroenwijering.Player.prototype = {
- addListener: function(typ,fcn) {
- this.view.listeners.push({type:typ,func:fcn});
- },
- getConfig: function() {
- return this.configuration;
- },
- onLoadHandler: function(pid,tgt,sdr) {
- tgt.configuration['sender'] = sdr;
- tgt.controller = new jeroenwijering.Controller(tgt.configuration);
- tgt.view = new jeroenwijering.View(tgt.configuration,tgt.controller);
- tgt.model = new jeroenwijering.Model(tgt.configuration,tgt.controller,tgt.view);
- tgt.controller.startMVC(tgt.view,tgt.model);
- },
- sendEvent: function(typ,prm) {
- switch(typ.toUpperCase()) {
- case 'LINK':
- this.controller.setLink();
- break;
- case 'LOAD':
- this.controller.setLoad(prm);
- break;
- case 'MUTE':
- this.controller.setMute();
- break;
- case 'PLAY':
- this.controller.setPlay();
- break;
- case 'SCRUB':
- this.controller.setScrub(prm);
- break;
- case 'STOP':
- this.controller.setStop();
- break;
- case 'VOLUME':
- this.controller.setVolume(prm);
- break;
- }
- }
- }
- /****************************************************************************
- * The controller of the player MVC triad, which processes all user input.
- ****************************************************************************/
- jeroenwijering.Controller = function(cfg) {
- this.configuration = cfg;
- }
- jeroenwijering.Controller.prototype = {
- startMVC: function(vie,mdl) {
- this.view = vie;
- this.model = mdl;
- if(this.configuration['usemute'] == 'true') {
- this.view.onVolume(0);
- this.view.onMute(true);
- this.model.goVolume(0);
- } else {
- this.view.onVolume(this.configuration['volume']);
- this.model.goVolume(this.configuration['volume']);
- }
- if(this.configuration['autostart'] == 'true') {
- this.model.goStart();
- } else {
- this.model.goPause();
- }
- },
- setState: function(old,stt) {
- this.state = stt;
- var pos = this.configuration['start'];
- if(old == 'Closed' && pos > 0) {
- setTimeout(jeroenwijering.utils.delegate(this,this.setScrub),200,pos);
- }
- },
- setLink: function() {
- if (this.configuration['linktarget'].indexOf('javascript:') == 0) {
- return Function(this.configuration['linktarget']).apply();
- } else if (this.configuration['linktarget'] == '_blank') {
- window.open(this.configuration['link']);
- } else if (this.configuration['linktarget'] != '') {
- window.location = this.configuration['link'];
- }
- },
- setLoad: function(fil) {
- if(this.model.state != "Closed") {
- this.model.goStop();
- }
- this.configuration['file'] = fil;
- if(this.configuration['autostart'] == 'true') {
- setTimeout(jeroenwijering.utils.delegate(this.model,this.model.goStart),100);
- }
- },
- setMute: function() {
- if(this.configuration['usemute'] == 'true') {
- this.configuration['usemute'] = 'false';
- this.model.goVolume(this.configuration['volume']);
- this.view.onMute(false);
- } else {
- this.configuration['usemute'] = 'true';
- this.model.goVolume(0);
- this.view.onMute(true);
- }
- },
- setPlay: function() {
- if(this.state == 'Buffering' || this.state == 'Playing') {
- if(this.configuration['duration'] == 0) {
- this.model.goStop();
- } else {
- this.model.goPause();
- }
- } else {
- this.model.goStart();
- }
- },
- setScrub: function(sec) {
- if(sec < 2) {
- sec = 0;
- } else if (sec > this.configuration['duration']-4) {
- sec = this.configuration['duration']-4;
- }
- if(this.state == 'Buffering' || this.state == 'Playing') {
- this.model.goStart(sec);
- } else {
- this.model.goPause(sec);
- }
- },
- setStop: function() {
- this.model.goStop();
- },
- setVolume: function(pct) {
- if(pct < 0) { pct = 0; } else if(pct > 100) { pct = 100; }
- this.configuration['volume'] = Math.round(pct);
- this.model.goVolume(pct);
- this.view.onVolume(pct);
- if(this.configuration['usemute'] == 'true') {
- this.configuration['usemute'] = 'false';
- this.view.onMute(false);
- }
- },
- setFullscreen: function() {
- var fss = !this.configuration['sender'].getHost().content.FullScreen;
- this.configuration['sender'].getHost().content.FullScreen = fss;
- jeroenwijering.utils.delegate(this.view,this.view.onFullscreen);
- }
- }
- /****************************************************************************
- * The view of the player MVC triad, which manages the graphics.
- ****************************************************************************/
- jeroenwijering.View = function(cfg,ctr) {
- this.configuration = cfg;
- this.listeners = Array();
- this.controller = ctr;
- this.fstimeout;
- this.fslistener;
- this.display = this.configuration['sender'].findName("PlayerDisplay");
- this.controlbar = this.configuration['sender'].findName("PlayerControls");
- this.configuration['sender'].getHost().content.onResize =
- jeroenwijering.utils.delegate(this,this.resizePlayer);
- this.configuration['sender'].getHost().content.onFullScreenChange =
- jeroenwijering.utils.delegate(this,this.onFullscreen);
- this.assignColorsClicks();
- this.resizePlayer();
- }
- jeroenwijering.View.prototype = {
- onBuffer: function(pct) {
- var snd = this.configuration['sender'];
- if(pct == 0) {
- snd.findName("BufferText").Text = null;
- } else {
- pct < 10 ? pct = "0"+pct: pct = ""+pct;
- snd.findName("BufferText").Text = pct;
- }
- this.delegate('BUFFER',[pct]);
- },
- onFullscreen: function(fss) {
- var snd = this.configuration['sender'];
- var fst = snd.getHost().content.FullScreen;
- if(fst) {
- this.fstimeout = setTimeout(jeroenwijering.utils.delegate(this,
- this.hideFSControls),2000);
- this.fslistener = this.display.addEventListener('MouseMove',
- jeroenwijering.utils.delegate(this,this.showFSControls));
- snd.findName("FullscreenSymbol").Visibility = "Collapsed";
- snd.findName("FullscreenOffSymbol").Visibility = "Visible";
- } else {
- clearTimeout(this.fstimeout);
- this.display.removeEventListener("MouseMove",this.fslistener);
- this.controlbar.Visibility = "Visible";
- this.display.Cursor = "Hand";
- snd.findName("FullscreenSymbol").Visibility = "Visible";
- snd.findName("FullscreenOffSymbol").Visibility = "Collapsed";
- }
- this.resizePlayer();
- this.delegate('FULLSCREEN');
- },
- showFSControls: function(sdr,arg) {
- var vbt = sdr.findName('PlayerControls');
- var yps = arg.GetPosition(vbt).Y;
- clearTimeout(this.fstimeout);
- this.controlbar.Visibility = "Visible";
- this.display.Cursor = "Hand";
- if(yps < 0) {
- this.fstimeout = setTimeout(jeroenwijering.utils.delegate(this,
- this.hideFSControls),2000);
- }
- },
- hideFSControls: function() {
- this.controlbar.Visibility = "Collapsed";
- this.display.Cursor = "None";
- },
- onLoad: function(pct) {
- var snd = this.configuration['sender'];
- var max = snd.findName("TimeSlider").Width;
- snd.findName("DownloadProgress").Width = Math.round(max*pct/100);
- this.delegate('LOAD',[pct]);
- },
- onMute: function(mut) {
- var snd = this.configuration['sender'];
- this.configuration['usemute'] = ''+mut;
- if(mut) {
- snd.findName("VolumeHighlight").Visibility = "Collapsed";
- snd.findName("MuteSymbol").Visibility = "Visible";
- snd.findName("MuteOffSymbol").Visibility = "Collapsed";
- if(this.state == 'Playing') {
- snd.findName("MuteIcon").Visibility = "Visible";
- }
- } else {
- snd.findName("VolumeHighlight").Visibility = "Visible";
- snd.findName("MuteSymbol").Visibility = "Collapsed";
- snd.findName("MuteOffSymbol").Visibility = "Visible";
- snd.findName("MuteIcon").Visibility = "Collapsed";
- }
- this.delegate('MUTE');
- },
- onState: function(old,stt) {
- var snd = this.configuration['sender'];
- this.state = stt;
- if(stt == 'Buffering' || stt == 'Playing' || stt == 'Opening') {
- snd.findName("PlayIcon").Visibility = "Collapsed";
- snd.findName("PlaySymbol").Visibility = "Collapsed";
- snd.findName("PlayOffSymbol").Visibility = "Visible";
- if (stt=='Playing') {
- snd.findName("BufferIcon").Visibility = "Collapsed";
- snd.findName("BufferText").Visibility = "Collapsed";
- if(this.configuration['usemute'] == 'true') {
- snd.findName("MuteIcon").Visibility = "Visible";
- }
- } else{
- snd.findName("BufferIcon").Visibility = "Visible";
- snd.findName("BufferText").Visibility = "Visible";
- }
- } else {
- snd.findName("MuteIcon").Visibility = "Collapsed";
- snd.findName("BufferIcon").Visibility = "Collapsed";
- snd.findName("BufferText").Visibility = "Collapsed";
- snd.findName("PlayOffSymbol").Visibility = "Collapsed";
- snd.findName("PlaySymbol").Visibility = "Visible";
- if(this.configuration['linkfromdisplay'] == 'true') {
- snd.findName("PlayIcon").Visibility = "Collapsed";
- } else {
- snd.findName("PlayIcon").Visibility = "Visible";
- }
- }
- try {
- if(!(old == 'Completed' && stt == 'Buffering') &&
- !(old == 'Buffering' && stt == 'Paused')) {
- playerStatusChange(old.toUpperCase(),stt.toUpperCase());
- }
- } catch (err) {}
- this.delegate('STATE',[old,stt]);
- },
- onTime: function(elp,dur) {
- var snd = this.configuration['sender'];
- var snd = this.configuration['sender'];
- var max = snd.findName("TimeSlider").Width;
- if(dur > 0) {
- var pos = Math.round(max*elp/dur);
- this.configuration['duration'] = dur;
- snd.findName("ElapsedText").Text = jeroenwijering.utils.timestring(elp);
- snd.findName("RemainingText").Text = jeroenwijering.utils.timestring(dur-elp);
- snd.findName("TimeSymbol").Visibility = "Visible";
- snd.findName("TimeSymbol")['Canvas.Left'] = pos+4;
- snd.findName("TimeHighlight").Width = pos-2;
- } else {
- snd.findName("TimeSymbol").Visibility = "Collapsed";
- }
- this.delegate('TIME',[elp,dur]);
- },
- onVolume: function(pct) {
- var snd = this.configuration['sender'];
- snd.findName("VolumeHighlight").Width = Math.round(pct/5);
- this.delegate('VOLUME',[pct]);
- },
- assignColorsClicks: function() {
- this.display.Cursor = "Hand";
- this.display.Background = "#FF"+this.configuration['screencolor'];
- if(this.configuration['linkfromdisplay'] == 'false') {
- this.display.addEventListener('MouseLeftButtonUp',
- jeroenwijering.utils.delegate(this.controller,
- this.controller.setPlay));
- } else {
- this.display.addEventListener('MouseLeftButtonUp',
- jeroenwijering.utils.delegate(this.controller,
- this.controller.setLink));
- this.display.findName("PlayIcon").Visibility = "Collapsed";
- }
- if(this.configuration['logo'] != '') {
- this.display.findName('OverlayCanvas').Visibility = "Visible";
- this.display.findName('OverlayLogo').ImageSource =
- this.configuration['logo'];
- }
- this.controlbar.findName("ControlbarBack").Fill =
- "#FF"+this.configuration['backcolor'];
- this.assignButton('Play',this.controller.setPlay);
- this.assignButton('Stop',this.controller.setStop);
- this.configuration['sender'].findName('ElapsedText').Foreground =
- "#FF"+this.configuration['frontcolor'];
- this.assignSlider('Time',this.changeTime);
- this.configuration['sender'].findName('DownloadProgress').Fill =
- "#FF"+this.configuration['frontcolor'];
- this.configuration['sender'].findName('RemainingText').Foreground =
- "#FF"+this.configuration['frontcolor'];
- this.assignButton('Link',this.controller.setLink);
- this.assignButton('Fullscreen',this.controller.setFullscreen);
- this.assignButton('Mute',this.controller.setMute);
- this.assignSlider('Volume',this.changeVolume);
- },
- assignButton: function(btn,act) {
- var el1 = this.configuration['sender'].findName(btn+'Button');
- el1.Cursor = "Hand";
- el1.addEventListener('MouseLeftButtonUp',
- jeroenwijering.utils.delegate(this.controller,act));
- el1.addEventListener('MouseEnter',
- jeroenwijering.utils.delegate(this,this.rollOver));
- el1.addEventListener('MouseLeave',
- jeroenwijering.utils.delegate(this,this.rollOut));
- this.configuration['sender'].findName(btn+'Symbol').Fill =
- "#FF"+this.configuration['frontcolor'];
- try {
- this.configuration['sender'].findName(btn+'OffSymbol').Fill =
- "#FF"+this.configuration['frontcolor'];
- } catch(e) {}
- },
- assignSlider: function(sld,act) {
- var el1 = this.configuration['sender'].findName(sld+'Button');
- el1.Cursor = "Hand";
- el1.addEventListener('MouseLeftButtonUp',
- jeroenwijering.utils.delegate(this,act));
- el1.addEventListener('MouseEnter',
- jeroenwijering.utils.delegate(this,this.rollOver));
- el1.addEventListener('MouseLeave',
- jeroenwijering.utils.delegate(this,this.rollOut));
- this.configuration['sender'].findName(sld+'Slider').Fill =
- "#FF"+this.configuration['frontcolor'];
- this.configuration['sender'].findName(sld+'Highlight').Fill =
- "#FF"+this.configuration['frontcolor'];
- this.configuration['sender'].findName(sld+'Symbol').Fill =
- "#FF"+this.configuration['frontcolor'];
- },
- delegate: function(typ,arg) {
- for(var i=0; i<this.listeners.length; i++) {
- if(this.listeners[i]['type'].toUpperCase() == typ) {
- this.listeners[i]['func'].apply(null,arg);
- }
- }
- },
- rollOver: function(sdr) {
- var str = sdr.Name.substr(0,sdr.Name.length-6);
- this.configuration['sender'].findName(str+'Symbol').Fill =
- "#FF"+this.configuration['lightcolor'];
- try {
- this.configuration['sender'].findName(str+'OffSymbol').Fill =
- "#FF"+this.configuration['lightcolor'];
- } catch(e) {}
- },
- rollOut: function(sdr) {
- var str = sdr.Name.substr(0,sdr.Name.length-6);
- this.configuration['sender'].findName(str+'Symbol').Fill =
- "#FF"+this.configuration['frontcolor'];
- try {
- this.configuration['sender'].findName(str+'OffSymbol').Fill =
- "#FF"+this.configuration['frontcolor'];
- } catch(e) {}
- },
- changeTime: function(sdr,arg) {
- var tbt = sdr.findName('TimeSlider');
- var xps = arg.GetPosition(tbt).X;
- var sec = Math.floor(xps/tbt.Width*this.configuration['duration']);
- this.controller.setScrub(sec);
- },
- changeVolume: function(sdr,arg) {
- var vbt = sdr.findName('VolumeButton');
- var xps = arg.GetPosition(vbt).X;
- this.controller.setVolume(xps*5);
- },
- resizePlayer: function() {
- var wid = this.configuration['sender'].getHost().content.actualWidth;
- var hei = this.configuration['sender'].getHost().content.actualHeight;
- var fss = this.configuration['sender'].getHost().content.FullScreen;
- if(this.configuration['shownavigation'] == 'true') {
- if(fss == true) {
- this.resizeDisplay(wid,hei);
- this.controlbar['Canvas.Left'] = Math.round(wid/2-250);
- this.resizeControlbar(500,hei-this.controlbar.Height-16);
- this.controlbar.findName('ControlbarBack')['Opacity'] = 0.5;
- } else {
- this.resizeDisplay(wid,hei-20);
- this.controlbar['Canvas.Left'] = 0;
- this.resizeControlbar(wid,hei-this.controlbar.Height);
- this.controlbar.findName('ControlbarBack')['Opacity'] = 1;
- }
- } else {
- this.resizeDisplay(wid,hei);
- }
- },
- resizeDisplay: function(wid,hei) {
- this.stretchElement('PlayerDisplay',wid,hei);
- this.stretchElement('VideoWindow',wid,hei);
- this.stretchElement('PlaceholderImage',wid,hei);
- this.centerElement('PlayIcon',wid,hei);
- this.centerElement('MuteIcon',wid,hei);
- this.centerElement('BufferIcon',wid,hei);
- this.centerElement('BufferText',wid,hei);
- this.display.findName('OverlayCanvas')['Canvas.Left'] = wid -
- this.display.findName('OverlayCanvas').Width - 10;
- this.display.Visibility = "Visible";
- },
- resizeControlbar: function(wid,yps,alp) {
- this.controlbar['Canvas.Top'] = yps;
- this.stretchElement('PlayerControls',wid);
- this.stretchElement('ControlbarBack',wid);
- this.placeElement('PlayButton',0);
- var lft = 17;
- this.placeElement('VolumeButton',wid-24);
- this.placeElement('MuteButton',wid-37);
- var rgt = 37;
- if(this.configuration['showstop'] == 'true') {
- this.placeElement('StopButton',lft);
- lft += 17;
- } else {
- this.controlbar.findName('StopButton').Visibility="Collapsed";
- }
- if(this.configuration['usefullscreen'] == 'true') {
- rgt += 18;
- this.placeElement('FullscreenButton',wid-rgt);
- } else {
- this.controlbar.findName('FullscreenButton').Visibility =
- "Collapsed";
- }
- if(this.configuration['link'] != '') {
- rgt += 18;
- this.placeElement('LinkButton',wid-rgt);
- } else {
- this.controlbar.findName('LinkButton').Visibility="Collapsed";
- }
- if(this.configuration['showdigits'] == 'true' && wid-rgt-lft> 160) {
- rgt += 35;
- this.controlbar.findName('RemainingButton').Visibility="Visible";
- this.controlbar.findName('ElapsedButton').Visibility="Visible";
- this.placeElement('RemainingButton',wid-rgt);
- this.placeElement('ElapsedButton',lft);
- lft +=35;
- } else {
- this.controlbar.findName('RemainingButton').Visibility =
- "Collapsed";
- this.controlbar.findName('ElapsedButton').Visibility="Collapsed";
- }
- this.placeElement('TimeButton',lft);
- this.stretchElement('TimeButton',wid-lft-rgt);
- this.stretchElement('TimeShadow',wid-lft-rgt);
- this.stretchElement('TimeStroke',wid-lft-rgt);
- this.stretchElement('TimeFill',wid-lft-rgt);
- this.stretchElement('TimeSlider',wid-lft-rgt-10);
- this.stretchElement('DownloadProgress',wid-lft-rgt-10);
- var tsb = this.configuration['sender'].findName('TimeSymbol');
- this.stretchElement('TimeHighlight',tsb['Canvas.Left']-5);
- this.controlbar.Visibility = "Visible";
- },
- centerElement: function(nam,wid,hei) {
- var elm = this.configuration['sender'].findName(nam);
- elm['Canvas.Left'] = Math.round(wid/2 - elm.Width/2);
- elm['Canvas.Top'] = Math.round(hei/2 - elm.Height/2);
- },
- stretchElement: function(nam,wid,hei) {
- var elm = this.configuration['sender'].findName(nam);
- elm.Width = wid;
- if (hei != undefined) { elm.Height = hei; }
- },
- placeElement: function(nam,xps,yps) {
- var elm = this.configuration['sender'].findName(nam);
- elm['Canvas.Left'] = xps;
- if(yps) { elm['Canvas.Top'] = yps; }
- }
- }
- /****************************************************************************
- * The model of the player MVC triad, which stores all playback logic.
- ****************************************************************************/
- jeroenwijering.Model = function(cfg,ctr,vie) {
- this.configuration = cfg;
- this.controller = ctr;
- this.view = vie;
- this.video = this.configuration['sender'].findName("VideoWindow");
- this.preview = this.configuration['sender'].findName("PlaceholderImage");
- var str = {
- 'true':'UniformToFill',
- 'false':'Uniform',
- 'fit':'Fill',
- 'none':'None'
- }
- this.state = this.video.CurrentState;
- this.timeint;
- this.video.Stretch = str[this.configuration['overstretch']];
- this.preview.Stretch = str[this.configuration['overstretch']];
- this.video.BufferingTime =
- jeroenwijering.utils.spanstring(this.configuration['bufferlength']);
- this.video.AutoPlay = true;
- this.video.AddEventListener("CurrentStateChanged",
- jeroenwijering.utils.delegate(this,this.stateChanged));
- this.video.AddEventListener("MediaEnded",
- jeroenwijering.utils.delegate(this,this.mediaEnded));
- this.video.AddEventListener("BufferingProgressChanged",
- jeroenwijering.utils.delegate(this,this.bufferChanged));
- this.video.AddEventListener("DownloadProgressChanged",
- jeroenwijering.utils.delegate(this,this.downloadChanged));
- if(this.configuration['image'] != '') {
- this.preview.Source = this.configuration['image'];
- }
- }
- jeroenwijering.Model.prototype = {
- goPause: function(sec) {
- this.video.pause();
- if(!isNaN(sec)) {
- this.video.Position = jeroenwijering.utils.spanstring(sec);
- }
- this.timeChanged();
- },
- goStart: function(sec) {
- this.video.Visibility = 'Visible';
- this.preview.Visibility = 'Collapsed';
- if(this.state == "Closed") {
- this.video.Source = this.configuration['file'];
- } else {
- this.video.play();
- }
- if(!isNaN(sec)) {
- this.video.Position = jeroenwijering.utils.spanstring(sec);
- }
- },
- goStop: function() {
- this.video.Visibility = 'Collapsed';
- this.preview.Visibility = 'Visible';
- this.goPause(0);
- this.video.Source = 'null';
- this.view.onBuffer(0);
- clearInterval(this.timeint);
- },
- goVolume: function(pct) {
- this.video.Volume = pct/100;
- },
- stateChanged: function() {
- var stt = this.video.CurrentState;
- if(stt != this.state) {
- this.controller.setState(this.state,stt);
- this.view.onState(this.state,stt);
- this.state = stt;
- this.configuration['duration'] =
- Math.round(this.video.NaturalDuration.Seconds*10)/10;
- if(stt != "Playing" && stt != "Buffering" && stt != "Opening") {
- clearInterval(this.timeint);
- } else {
- this.timeint = setInterval(jeroenwijering.utils.delegate(
- this,this.timeChanged),100);
- }
- }
- },
- mediaEnded: function() {
- if(this.configuration['repeat'] == 'true') {
- this.goStart(0);
- } else {
- this.state = 'Completed';
- this.view.onState(this.state,'Completed');
- this.video.Visibility = 'Collapsed';
- this.preview.Visibility = 'Visible';
- this.goPause(0);
- }
- },
- bufferChanged: function() {
- var bfr = Math.round(this.video.BufferingProgress*100);
- this.view.onBuffer(bfr);
- },
- downloadChanged: function() {
- var dld = Math.round(this.video.DownloadProgress*100);
- this.view.onLoad(dld);
- },
- timeChanged: function() {
- var pos = Math.round(this.video.Position.Seconds*10)/10;
- this.view.onTime(pos,this.configuration['duration']);
- }
- }
- /****************************************************************************
- * Some utility functions.
- ****************************************************************************/
- jeroenwijering.utils.delegate = function(obj,fcn) {
- return function() {
- return fcn.apply(obj,arguments);
- }
- }
- jeroenwijering.utils.timestring = function(stp) {
- var hrs = Math.floor(stp/3600);
- var min = Math.floor(stp%3600/60);
- var sec = Math.round(stp%60);
- var str = "";
- sec > 9 ? str += sec: str +='0'+sec;
- min > 9 ? str = min+":"+str: str='0'+min+":"+str;
- hrs > 0 ? str = hrs+":"+str: null;
- return str;
- }
- jeroenwijering.utils.spanstring = function(stp) {
- var hrs = Math.floor(stp/3600);
- var min = Math.floor(stp%3600/60);
- var sec = Math.round(stp%60*10)/10;
- var str = hrs+':'+min+':'+sec;
- return str;
- }