Changeset 975


Ignore:
Timestamp:
04/30/10 02:13:44 (3 years ago)
Author:
zach
Message:
Location:
trunk/html5
Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/html5/index.html

    r962 r975  
    2525        height="270" 
    2626        id="player1" 
    27         class="jwplayer" 
    28         poster="./test/../test/files/bunny.jpg" 
    29         src="./test/files/bunny.mp4" 
     27        poster="http://developer.longtailvideo.com/player/trunk/html5/test/files/bunny.jpg" 
    3028        width="480" 
    3129> 
     30        <source src='test/files/bunny.mp4''> 
     31 
    3232</video> 
     33 
     34<script type="text/javascript"> 
     35        $('#player1').jwplayer({ 
     36                skin:'assets/five/five.xml', 
     37                repeat: 'list' 
     38        }); 
     39</script> 
    3340 
    3441<h4>Test 2: manual embed</h4> 
     
    4249</video> 
    4350 
     51 
    4452<script type="text/javascript"> 
    4553        $('#player2').jwplayer({ 
     
    4755        }); 
    4856</script> 
    49  
    5057<h4>Test 3: Theora</h4> 
    5158<video 
  • trunk/html5/jquery.jwplayer.js

    r971 r975  
    88 */ 
    99(function($) { 
    10          
    11         var controlbars = {} 
    12  
    13  
     10        var controlbars = {}; 
     11         
    1412        /** Hooking the jwplayerControlbar up to jQuery. **/ 
    1513        $.fn.jwplayerControlbar = function(player, domelement) { 
     
    1917        }; 
    2018         
     19        $.fn.jwplayerControlbar.positions = { 
     20                BOTTOM: 'BOTTOM', 
     21                TOP: 'TOP', 
     22                OVER: 'OVER' 
     23        }; 
     24         
    2125         
    2226        /** Map with config for the jwplayerControlbar plugin. **/ 
     
    2428                fontsize: 10, 
    2529                fontcolor: '000000', 
    26                 position: 'bottom', 
     30                position: $.fn.jwplayerControlbar.positions.BOTTOM, 
    2731                leftmargin: 0, 
    2832                rightmargin: 0, 
     
    3438                // Draw the background. 
    3539                domelement.parents(":first").append('<div id="' + player.id + '_jwplayerControlbar"></div>'); 
    36                 $("#" + player.id + '_jwplayerControlbar').css('position', 'relative'); 
     40                $("#" + player.id + '_jwplayerControlbar').css('position', 'absolute'); 
    3741                $("#" + player.id + '_jwplayerControlbar').css('height', player.skin.controlbar.elements.background.height); 
     42                switch (controlbars[player.id].position) { 
     43                        case $.fn.jwplayerControlbar.positions.TOP: 
     44                                $("#" + player.id + '_jwplayerControlbar').css('top', 0); 
     45                                break; 
     46                        default: 
     47                                $("#" + player.id + '_jwplayerControlbar').css('top', player.height()); 
     48                                domelement.parents(":first").css('height', parseInt(domelement.parents(":first").css('height').replace('px', '')) + player.skin.controlbar.elements.background.height); 
     49                                break; 
     50                } 
    3851                $("#" + player.id + '_jwplayerControlbar').css('background', 'url(' + player.skin.controlbar.elements.background.src + ') repeat-x center left'); 
    3952                // Draw all elements on top of the bar. 
     
    124137                        height: player.height() 
    125138                }); 
     139                timeHandler({ 
     140                        id: player.id, 
     141                        time: 0, 
     142                        duration: 0 
     143                }); 
     144                bufferHandler({ 
     145                        id: player.id, 
     146                        bufferProgress: 0 
     147                }); 
    126148                muteHandler({ 
    127149                        id: player.id, 
     
    187209                        sliderUp(evt.pageX, player); 
    188210                }); 
    189                 $(bar).mouseleave(function(evt) { 
    190                         sliderUp(evt.pageX, player); 
    191                         evt.stopPropagation(); 
    192                 }); 
    193211                $(bar).mousemove(function(evt) { 
    194212                        if (controlbars[player.id].scrubber == 'time') { 
    195                                 var xps = evt.pageX - $(bar).position().left; 
     213                                controlbars[player.id].mousedown = true; 
     214                                var xps = evt.pageX - $(bar).offset().left; 
    196215                                $('#' + player.id + '_timeSliderThumb').css('left', xps); 
    197216                        } 
     
    202221        /** The slider has been moved up. **/ 
    203222        function sliderUp(msx, player) { 
     223                controlbars[player.id].mousedown = false; 
    204224                if (controlbars[player.id].scrubber == 'time') { 
    205225                        var xps = msx - $('#' + player.id + '_timeSliderRail').offset().left; 
    206226                        var wid = $('#' + player.id + '_timeSliderRail').width(); 
    207                         var pos = xps / wid * player.duration(); 
     227                        var pos = xps / wid * controlbars[player.id].currentDuration; 
    208228                        if (pos < 0) { 
    209229                                pos = 0; 
    210                         } else if (pos > controlbars[player.id].duration) { 
    211                                 pos = controlbars[player.id].duration - 3; 
     230                        } else if (pos > controlbars[player.id].currentDuration) { 
     231                                pos = controlbars[player.id].currentDuration - 3; 
    212232                        } 
    213233                        player.seek(pos); 
     234                        if (player.model.state != $.fn.jwplayer.states.PLAYING) { 
     235                                player.play(); 
     236                        } 
    214237                } else if (controlbars[player.id].scrubber == 'volume') { 
    215238                        var xps = msx - $('#' + player.id + '_volumeSliderRail').offset().left; 
     
    273296                } else { 
    274297                        $('#' + event.id + '_timeSliderBuffer').css('display', 'block'); 
    275                         $('#' + event.id + '_timeSliderProgress').css('display', 'block'); 
    276                         $('#' + event.id + '_timeSliderThumb').css('display', 'block'); 
     298                        if (event.newstate != $.fn.jwplayer.states.BUFFERING) { 
     299                                $('#' + event.id + '_timeSliderProgress').css('display', 'block'); 
     300                                $('#' + event.id + '_timeSliderThumb').css('display', 'block'); 
     301                        } 
    277302                } 
    278303        } 
    279304         
    280305        /** Handles event completion **/ 
    281         function completeHandler(event){ 
     306        function completeHandler(event) { 
    282307                timeHandler($.extend(event, { 
    283308                        position: 0, 
     
    301326                 
    302327                $('#' + event.id + '_timeSliderProgress').css('width', Math.round(railWidth * progress)); 
    303                 $('#' + event.id + '_timeSliderThumb').css('left', railLeft + Math.round((railWidth - thumbWidth) * progress)); 
     328                if (!controlbars[event.id].mousedown) { 
     329                        $('#' + event.id + '_timeSliderThumb').css('left', railLeft + Math.round((railWidth - thumbWidth) * progress)); 
     330                } 
    304331                 
    305332                $('#' + event.id + '_durationText').html(timeFormat(controlbars[event.id].currentDuration)); 
     
    386413(function($) { 
    387414 
    388         var mediaParams ={ 
    389                 volume: 100, 
    390                 fullscreen: false, 
    391                 mute: false, 
    392                 width: 480, 
    393                 height: 320, 
    394                 duration: 0, 
    395                 source: 0, 
    396                 buffer: 0, 
    397                 // I hate javascript 
    398                 //state: $.fn.jwplayer.states.IDLE 
    399                 state: 'IDLE' 
    400         }; 
    401  
    402         $.fn.jwplayerController = function() { 
    403                 return this.each(function() { 
    404                 }); 
    405         }; 
    406          
    407          
    408         $.fn.jwplayerController.play = function(player) { 
    409                         player.media.play(); 
    410                 try { 
    411                         player.media.play(); 
    412                         return true; 
    413                 } catch (err) { 
    414                         $.fn.jwplayerUtils.log("error", err); 
    415                 } 
    416                 return false; 
    417         }; 
     415        var mediaParams = function() { 
     416                return { 
     417                        volume: 100, 
     418                        fullscreen: false, 
     419                        mute: false, 
     420                        width: 480, 
     421                        height: 320, 
     422                        duration: 0, 
     423                        source: 0, 
     424                        sources: [], 
     425                        buffer: 0, 
     426                        state: $.fn.jwplayer.states.IDLE 
     427                }; 
     428        }; 
     429         
     430        $.fn.jwplayerController = function(player) { 
     431                return { 
     432                        play: play(player), 
     433                        pause: pause(player), 
     434                        seek: seek(player), 
     435                        stop: pause(player), 
     436                        volume: volume(player), 
     437                        mute: mute(player), 
     438                        resize: resize(player), 
     439                        fullscreen: fullscreen(player), 
     440                        load: load(player), 
     441                        mediaInfo: mediaInfo(player), 
     442                        addEventListener: addEventListener(player), 
     443                        removeEventListener: removeEventListener(player), 
     444                        sendEvent: sendEvent(player) 
     445                }; 
     446        }; 
     447         
     448         
     449        function play(player) { 
     450                return function() { 
     451                        try { 
     452                                switch (player.model.state) { 
     453                                        case $.fn.jwplayer.states.IDLE: 
     454                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER_FULL, player.media.play); 
     455                                                player.media.load(player.model.sources[player.model.source].file); 
     456                                                break; 
     457                                        case $.fn.jwplayer.states.PAUSED: 
     458                                                player.media.play(); 
     459                                                break; 
     460                                } 
     461                                 
     462                                return $.jwplayer(player.id); 
     463                        } catch (err) { 
     464                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     465                        } 
     466                        return false; 
     467                }; 
     468        } 
    418469         
    419470        /** Switch the pause state of the player. **/ 
    420         $.fn.jwplayerController.pause = function(player) { 
    421                 try { 
    422                         player.media.pause(); 
    423                         return true; 
    424                 } catch (err) { 
    425                         $.fn.jwplayerUtils.log("error", err); 
    426                 } 
    427                 return false; 
    428         }; 
     471        function pause(player) { 
     472                return function() { 
     473                        try { 
     474                                switch (player.model.state) { 
     475                                        case $.fn.jwplayer.states.PLAYING: 
     476                                        case $.fn.jwplayer.states.BUFFERING: 
     477                                                player.media.pause(); 
     478                                                break; 
     479                                } 
     480                                return $.jwplayer(player.id); 
     481                        } catch (err) { 
     482                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     483                        } 
     484                        return false; 
     485                }; 
     486        } 
    429487         
    430488         
    431489        /** Seek to a position in the video. **/ 
    432         $.fn.jwplayerController.seek = function(player, position) { 
    433                 try { 
    434                         player.media.seek(position); 
    435                         return true; 
    436                 } catch (err) { 
    437                         $.fn.jwplayerUtils.log("error", err); 
    438                          
    439                 } 
    440                 return false; 
    441         }; 
     490        function seek(player) { 
     491                return function(position) { 
     492                        try { 
     493                                switch (player.model.state) { 
     494                                        case $.fn.jwplayer.states.PLAYING: 
     495                                        case $.fn.jwplayer.states.PAUSED: 
     496                                        case $.fn.jwplayer.states.BUFFERING: 
     497                                                player.media.seek(position); 
     498                                                break; 
     499                                } 
     500                                return $.jwplayer(player.id); 
     501                        } catch (err) { 
     502                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     503                        } 
     504                        return false; 
     505                }; 
     506        } 
    442507         
    443508         
    444509        /** Stop playback and loading of the video. **/ 
    445         $.fn.jwplayerController.stop = function(player) { 
    446                 try { 
    447                         player.media.stop(); 
    448                         return true; 
    449                 } catch (err) { 
    450                         $.fn.jwplayerUtils.log("error", err); 
    451                          
    452                 } 
    453                 return false; 
    454         }; 
     510        function stop(player) { 
     511                return function() { 
     512                        try { 
     513                                player.media.stop(); 
     514                                return $.jwplayer(player.id); 
     515                        } catch (err) { 
     516                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     517                        } 
     518                        return false; 
     519                }; 
     520        } 
    455521         
    456522         
    457523        /** Get / set the video's volume level. **/ 
    458         $.fn.jwplayerController.volume = function(player, position) { 
    459                 try { 
    460                         if (position === undefined) { 
    461                                 return player.model.volume; 
    462                         } else { 
    463                                 player.media.volume(position); 
    464                                 player.model.volume = position; 
    465                                 return true; 
    466                         } 
    467                 } catch (err) { 
    468                         $.fn.jwplayerUtils.log("error", err); 
    469                 } 
    470                 return false; 
    471         }; 
     524        function volume(player) { 
     525                return function(arg) { 
     526                        try { 
     527                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     528                                        case "function": 
     529                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME, arg); 
     530                                                break; 
     531                                        case "number": 
     532                                                player.media.volume(arg); 
     533                                                return true; 
     534                                        case "string": 
     535                                                player.media.volume(parseInt(arg, 10)); 
     536                                                return true; 
     537                                        default: 
     538                                                return player.model.volume; 
     539                                } 
     540                                return $.jwplayer(player.id); 
     541                        } catch (err) { 
     542                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     543                        } 
     544                        return false; 
     545                }; 
     546        } 
    472547         
    473548        /** Get / set the mute state of the player. **/ 
    474         $.fn.jwplayerController.mute = function(player, state) { 
    475                 try { 
    476                         if (state === undefined) { 
    477                                 return player.model.mute; 
    478                         } else { 
    479                                 player.media.mute(state); 
    480                                 return true; 
    481                         } 
    482                         return true; 
    483                 } catch (err) { 
    484                         $.fn.jwplayerUtils.log("error", err); 
    485                 } 
    486                 return false; 
    487         }; 
     549        function mute(player) { 
     550                return function(arg) { 
     551                        try { 
     552                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     553                                        case "function": 
     554                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE, arg); 
     555                                                break; 
     556                                        case "boolean": 
     557                                                player.media.mute(arg); 
     558                                                break; 
     559                                        default: 
     560                                                return player.model.mute; 
     561                                } 
     562                                return $.jwplayer(player.id); 
     563                        } catch (err) { 
     564                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     565                        } 
     566                        return false; 
     567                }; 
     568        } 
     569         
     570         
     571        /** Resizes the video **/ 
     572        function resize(player) { 
     573                return function(arg1, arg2) { 
     574                        try { 
     575                                switch ($.fn.jwplayerUtils.typeOf(arg1)) { 
     576                                        case "function": 
     577                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_RESIZE, arg1); 
     578                                                break; 
     579                                        case "number": 
     580                                                player.media.resize(arg1, arg2); 
     581                                                break; 
     582                                        default: 
     583                                                break; 
     584                                } 
     585                                return $.jwplayer(player.id); 
     586                        } catch (err) { 
     587                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     588                        } 
     589                        return false; 
     590                }; 
     591        } 
    488592         
    489593         
    490594        /** Jumping the player to/from fullscreen. **/ 
    491         $.fn.jwplayerController.fullscreen = function(player, state) { 
    492                 try { 
    493                         if (state === undefined) { 
    494                                 return player.model.fullscreen; 
    495                         } else { 
    496                                 player.media.fullscreen(state); 
    497                                 return true; 
    498                         } 
    499                 } catch (err) { 
    500                         $.fn.jwplayerUtils.log("error", err); 
    501                 } 
    502                 return false; 
    503         }; 
    504          
    505         /** Resizes the video **/ 
    506         $.fn.jwplayerController.resize = function(player, width, height) { 
    507                 try { 
    508                         player.media.resize(width, height); 
    509                         return true; 
    510                 } catch (err) { 
    511                         $.fn.jwplayerUtils.log("error", err); 
    512                 } 
    513                 return false; 
    514         }; 
     595        function fullscreen(player) { 
     596                return function(arg) { 
     597                        try { 
     598                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     599                                        case "function": 
     600                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_FULLSCREEN, arg); 
     601                                                break; 
     602                                        case "boolean": 
     603                                                player.media.fullscreen(arg); 
     604                                                break; 
     605                                        default: 
     606                                                return player.model.fullscreen; 
     607                                } 
     608                                return $.jwplayer(player.id); 
     609                        } catch (err) { 
     610                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     611                        } 
     612                        return false; 
     613                }; 
     614        } 
     615         
     616        /** Loads a new video **/ 
     617        function load(player) { 
     618                return function(arg) { 
     619                        try { 
     620                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     621                                        case "function": 
     622                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_LOADED, arg); 
     623                                                break; 
     624                                        default: 
     625                                                player.media.load(arg); 
     626                                                break; 
     627                                } 
     628                                return $.jwplayer(player.id); 
     629                        } catch (err) { 
     630                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     631                        } 
     632                        return false; 
     633                }; 
     634        } 
     635         
    515636         
    516637        /** Returns the meta **/ 
    517         $.fn.jwplayerController.mediaInfo = function(player) { 
     638        function mediaInfo(player) { 
    518639                try { 
    519640                        var result = {}; 
    520                         for (var mediaParam in mediaParams){ 
     641                        for (var mediaParam in mediaParams()) { 
    521642                                result[mediaParam] = player.model[mediaParam]; 
    522643                        } 
     
    526647                } 
    527648                return false; 
    528         }; 
    529          
    530         /** Loads a new video **/ 
    531         $.fn.jwplayerController.load = function(player, path) { 
    532                 try { 
    533                         player.media.load(path); 
    534                         return true; 
    535                 } catch (err) { 
    536                         $.fn.jwplayerUtils.log("error", err); 
    537                 } 
    538                 return false; 
    539         }; 
     649        } 
     650         
     651         
     652        /** Add an event listener. **/ 
     653        function addEventListener(player) { 
     654                return function(type, listener, count) { 
     655                        try { 
     656                                if (player.listeners[type] === undefined) { 
     657                                        player.listeners[type] = []; 
     658                                } 
     659                                player.listeners[type].push({ 
     660                                        listener: listener, 
     661                                        count: count 
     662                                }); 
     663                        } catch (err) { 
     664                                $.fn.jwplayerUtils.log("error", err); 
     665                        } 
     666                        return false; 
     667                }; 
     668        } 
     669         
     670         
     671        /** Remove an event listener. **/ 
     672        function removeEventListener(player) { 
     673                return function(type, listener) { 
     674                        try { 
     675                                for (var lisenterIndex in player.listeners[type]) { 
     676                                        if (player.listeners[type][lisenterIndex] == listener) { 
     677                                                player.listeners[type].slice(lisenterIndex, lisenterIndex + 1); 
     678                                                break; 
     679                                        } 
     680                                } 
     681                        } catch (err) { 
     682                                $.fn.jwplayerUtils.log("error", err); 
     683                        } 
     684                        return false; 
     685                }; 
     686        } 
     687         
     688        /** Send an event **/ 
     689        function sendEvent(player) { 
     690                return function(type, data) { 
     691                        data = $.extend({ 
     692                                id: player.id, 
     693                                version: player.version 
     694                        }, data); 
     695                        if (player.config.debug == 'CONSOLE') { 
     696                                $.fn.jwplayerUtils.log(type, data); 
     697                        } 
     698                        for (var listenerIndex in player.listeners[type]) { 
     699                                try { 
     700                                        player.listeners[type][listenerIndex].listener(data); 
     701                                } catch (err) { 
     702                                        $.fn.jwplayerUtils.log("There was an error while handling a listener", err); 
     703                                } 
     704                                if (player.listeners[type][listenerIndex].count === 1) { 
     705                                        delete player.listeners[type][listenerIndex]; 
     706                                } else if (player.listeners[type][listenerIndex].count > 0) { 
     707                                        player.listeners[type][listenerIndex].count = player.listeners[type][listenerIndex].count - 1; 
     708                                } 
     709                        } 
     710                }; 
     711        } 
    540712         
    541713})(jQuery); 
     
    549721 */ 
    550722(function($) { 
     723        /** Map with all players on the page. **/ 
     724        var players = {}; 
     725         
    551726        /** Hooking the controlbar up to jQuery. **/ 
    552727        $.fn.jwplayer = function(options) { 
    553728                return this.each(function() { 
    554                         $.fn.jwplayerUtils.log("setup", this); 
    555                         var model = $.fn.jwplayerModel($(this), options); 
    556                         var player = { 
    557                                 model: model 
    558                         }; 
    559                         players[model.config.id] = player; 
    560                         player = $.extend(player, api(player)); 
    561                         $.fn.jwplayerView(player); 
    562                         $.fn.jwplayerModel.setActiveMediaProvider(player); 
    563                         $.fn.jwplayerSkinner(player, function() { 
    564                                 finishSetup(player); 
    565                         }); 
    566                 }); 
    567         }; 
    568          
    569         function finishSetup(player) { 
    570                 $.fn.jwplayerControlbar($.jwplayer(player.id), player.model.domelement); 
    571                 player.sendEvent($.fn.jwplayer.events.JWPLAYER_READY); 
    572         } 
    573          
    574          
    575         /** Map with all players on the page. **/ 
    576         var players = {}; 
     729                        $.fn.jwplayerUtils.log("Starting setup", this); 
     730                        setupJWPlayer($(this), 0, options); 
     731                }); 
     732        }; 
     733         
     734        function setupJWPlayer(player, step, options) { 
     735                $.fn.jwplayerUtils.log("Starting step " + step, { 
     736                        player: player, 
     737                        options: options 
     738                }); 
     739                try { 
     740                        switch (step) { 
     741                                case 0: 
     742                                        var model = $.fn.jwplayerModel(player, options); 
     743                                        var player = { 
     744                                                model: model, 
     745                                                listeners: {} 
     746                                        }; 
     747                                        setupJWPlayer(player, step + 1); 
     748                                        break; 
     749                                case 1: 
     750                                        player.controller = $.fn.jwplayerController(player); 
     751                                        players[player.model.config.id] = player; 
     752                                        setupJWPlayer($.extend(player, api(player)), step + 1); 
     753                                        break; 
     754                                case 2: 
     755                                        $.fn.jwplayerView(player); 
     756                                        setupJWPlayer(player, step + 1); 
     757                                        break; 
     758                                case 3: 
     759                                        $.fn.jwplayerModel.setActiveMediaProvider(player); 
     760                                        setupJWPlayer(player, step + 1); 
     761                                        break; 
     762                                case 4: 
     763                                        $.fn.jwplayerSkinner(player, function() { 
     764                                                $.fn.jwplayerUtils.log("Skin loading complete", player); 
     765                                                setupJWPlayer(player, step + 1); 
     766                                        }); 
     767                                        break; 
     768                                case 5: 
     769                                        $.fn.jwplayerDisplay($.jwplayer(player.id), player.model.domelement); 
     770                                        setupJWPlayer(player, step + 1); 
     771                                        break; 
     772                                case 6: 
     773                                        $.fn.jwplayerControlbar($.jwplayer(player.id), player.model.domelement); 
     774                                        setupJWPlayer(player, step + 1); 
     775                                        break; 
     776                                case 7: 
     777                                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_READY); 
     778                                        setupJWPlayer(player, step + 1) 
     779                                        break; 
     780                                default: 
     781                                        if (player.config.autostart === true) { 
     782                                                player.play(); 
     783                                        } 
     784                                        if (player.config.repeat) { 
     785                                                if ((player.config.repeat.toLowerCase() == 'list') || (player.config.repeat.toLowerCase() == 'always') || (player.config.repeat.toLowerCase() == 'single')) { 
     786                                                        player.complete(function() { 
     787                                                                player.play(); 
     788                                                        }); 
     789                                                } 
     790                                        } 
     791                                        break; 
     792                        } 
     793                } catch (err) { 
     794                        $.fn.jwplayerUtils.log("Setup failed at step " + step, err); 
     795                } 
     796        } 
    577797         
    578798         
     
    587807                width: 480, 
    588808                mute: false, 
    589                 flashplayer:'http://developer.longtailvideo.com/player/trunk/html5/assets/player.swf' 
    590         }; 
    591          
    592          
    593         /** Start playback or resume. **/ 
    594         function play(player) { 
    595                 return function() { 
    596                         $.fn.jwplayerController.play(player); 
    597                         return jwplayer(player.id); 
    598                 }; 
    599         } 
    600          
    601         /** Switch the pause state of the player. **/ 
    602         function pause(player) { 
    603                 return function() { 
    604                         $.fn.jwplayerController.pause(player); 
    605                         return jwplayer(player.id); 
    606                 }; 
    607         } 
    608          
    609          
    610         /** Seek to a position in the video. **/ 
    611         function seek(player) { 
    612                 return function(arg) { 
    613                         $.fn.jwplayerController.seek(player, arg); 
    614                         return jwplayer(player.id); 
    615                 }; 
    616         } 
    617          
    618          
    619         /** Stop playback and loading of the video. **/ 
    620         function stop(player) { 
    621                 return function() { 
    622                         $.fn.jwplayerController.stop(player); 
    623                         return jwplayer(player.id); 
    624                 }; 
    625         } 
    626          
    627          
    628         /** Change the video's volume level. **/ 
    629         function volume(player) { 
     809                bufferlength: 5, 
     810                start: 0, 
     811                position: 0, 
     812                flashplayer: 'http://developer.longtailvideo.com/player/trunk/html5/assets/player.swf' 
     813        }; 
     814         
     815         
     816        /** A factory for API calls that either set listeners or return data **/ 
     817        function dataListenerFactory(player, dataType, eventType) { 
    630818                return function(arg) { 
    631819                        switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    632820                                case "function": 
    633                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME, arg); 
    634                                         break; 
    635                                 case "number": 
    636                                         $.fn.jwplayerController.volume(player, arg); 
    637                                         break; 
    638                                 case "string": 
    639                                         $.fn.jwplayerController.volume(player, parseInt(arg, 10)); 
     821                                        if (!$.fn.jwplayerUtils.isNull(eventType)) { 
     822                                                player.addEventListener(eventType, arg); 
     823                                        } 
    640824                                        break; 
    641825                                default: 
    642                                         return $.fn.jwplayerController.volume(player); 
    643                         } 
    644                         return jwplayer(player.id); 
    645                 }; 
    646         } 
    647          
    648         /** Switch the mute state of the player. **/ 
    649         function mute(player) { 
    650                 return function(arg) { 
    651                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    652                                 case "function": 
    653                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE, arg); 
    654                                         break; 
    655                                 case "boolean": 
    656                                         $.fn.jwplayerController.mute(player, arg); 
    657                                         break; 
    658                                 default: 
    659                                         return $.fn.jwplayerController.mute(player); 
    660                         } 
    661                         return jwplayer(player.id); 
    662                 }; 
    663         } 
    664          
    665         /** Resizing the player **/ 
    666         function resize(player) { 
    667                 return function(arg1, arg2) { 
    668                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    669                                 case "function": 
    670                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_RESIZE, arg); 
    671                                         break; 
    672                                 case "number": 
    673                                         $.fn.jwplayerController.resize(player, arg1, arg2); 
    674                                         break; 
    675                                 default: 
    676                                         break; 
    677                         } 
    678                         return jwplayer(player.id); 
    679                 }; 
    680         } 
    681          
    682         /** Fullscreen the player **/ 
    683         function fullscreen(player) { 
    684                 return function(arg) { 
    685                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    686                                 case "function": 
    687                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_FULLSCREEN, arg); 
    688                                         break; 
    689                                 case "boolean": 
    690                                         $.fn.jwplayerController.fullscreen(player, arg); 
    691                                         break; 
    692                                 default: 
    693                                         return $.fn.jwplayerController.fullscreen(player); 
    694                         } 
    695                         return jwplayer(player.id); 
    696                 }; 
    697         } 
    698          
    699         /** Adds a state listener **/ 
    700         function state(player) { 
    701                 return function(arg) { 
    702                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    703                                 case "function": 
    704                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, arg); 
    705                                         break; 
    706                                 default: 
    707                                         return $.fn.jwplayerController.mediaInfo(player).state; 
    708                         } 
    709                         return jwplayer(player.id); 
    710                 }; 
    711         } 
    712          
    713         /** Adds a buffer listener **/ 
    714         function buffer(player) { 
    715                 return function(arg) { 
    716                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    717                                 case "function": 
    718                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, arg); 
    719                                         break; 
    720                                 default: 
    721                                         return $.fn.jwplayerController.mediaInfo(player).buffer; 
    722                         } 
    723                         return jwplayer(player.id); 
    724                 }; 
    725         } 
    726          
    727         /** Returns the current time **/ 
    728         function time(player) { 
    729                 return function(arg) { 
    730                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    731                                 case "function": 
    732                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME, arg); 
    733                                         break; 
    734                                 default: 
    735                                         return $.fn.jwplayerController.mediaInfo(player).time; 
    736                         } 
    737                         return jwplayer(player.id); 
    738                 }; 
    739         } 
    740          
    741         /** Loads a new video into the player **/ 
    742         function load(player) { 
    743                 return function(arg) { 
    744                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    745                                 case "function": 
    746                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_LOADED, arg); 
    747                                         break; 
    748                                 default: 
    749                                         $.fn.jwplayerController.load(player, arg); 
    750                         } 
    751                         return jwplayer(player.id); 
    752                 }; 
    753         } 
    754          
    755         /** Adds a listener for video completion **/ 
    756         function complete(player) { 
    757                 return function(arg) { 
    758                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_COMPLETE, arg); 
    759                         return jwplayer(player.id); 
    760                 }; 
    761         } 
    762          
    763         /** Adds a listener for player ready **/ 
    764         function ready(player) { 
    765                 return function(arg) { 
    766                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_READY, arg); 
    767                         return jwplayer(player.id); 
    768                 }; 
    769         } 
    770          
    771         /** Returns the duration **/ 
    772         function duration(player) { 
    773                 return function() { 
    774                         return $.fn.jwplayerController.mediaInfo(player).duration; 
    775                 }; 
    776         } 
    777          
    778         /** Adds a listener for media errors. **/ 
    779         function error(player) { 
    780                 return function(arg) { 
    781                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_ERROR, arg); 
    782                         return jwplayer(player.id); 
    783                 }; 
    784         } 
    785          
    786          
    787         /** Returns the width **/ 
    788         function width(player) { 
    789                 return function() { 
    790                         return $.fn.jwplayerController.mediaInfo(player).width; 
    791                 }; 
    792         } 
    793          
    794          
    795         /** Returns the height **/ 
    796         function height(player) { 
    797                 return function() { 
    798                         return $.fn.jwplayerController.mediaInfo(player).height; 
    799                 }; 
    800         } 
    801          
    802         /** Returns the available meta-data **/ 
    803         function meta(player) { 
    804                 return function() { 
    805                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    806                                 case "function": 
    807                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_META, arg); 
    808                                         break; 
    809                                 default: 
    810                                         return $.fn.jwplayerController.mediaInfo(player); 
    811                         } 
    812                         return jwplayer(player.id); 
    813                 }; 
    814         } 
    815          
    816         /** Returns the API method for adding an event listener.**/ 
    817         function apiAddEventListener(player) { 
    818                 return function(type, listener) { 
    819                         addEventListener(player, type, listener); 
    820                 }; 
    821         } 
    822          
    823         /** Returns the API method for adding an event listener.**/ 
    824         function apiRemoveEventListener(player) { 
    825                 return function(type, listener) { 
    826                         removeEventListener(player, type, listener); 
    827                 }; 
    828         } 
    829          
    830         /** Add an event listener. **/ 
    831         function addEventListener(player, type, listener) { 
    832                 if (player.model.listeners[type] === undefined) { 
    833                         player.model.listeners[type] = []; 
    834                 } 
    835                 player.model.listeners[type].push(listener); 
    836         } 
    837          
    838          
    839         /** Remove an event listener. **/ 
    840         function removeEventListener(player, type, listener) { 
    841                 for (var lisenterIndex in player.model.listeners[type]) { 
    842                         if (player.model.listeners[type][lisenterIndex] == listener) { 
    843                                 player.model.listeners[type].slice(lisenterIndex, lisenterIndex + 1); 
    844                                 break; 
    845                         } 
    846                 } 
    847         } 
    848          
    849         /** Send an event **/ 
    850         function sendEvent(player) { 
    851                 return function(type, data) { 
    852                         data = $.extend({ 
    853                                 id: player.id, 
    854                                 version: player.version 
    855                         }, data); 
    856                         //$.fn.jwplayerUtils.log(type, data); 
    857                         for (var listener in player.model.listeners[type]) { 
    858                                 player.model.listeners[type][listener](data); 
    859                         } 
    860                 }; 
    861         } 
    862                  
     826                                        if (!$.fn.jwplayerUtils.isNull(dataType)) { 
     827                                                return player.controller.mediaInfo[dataType]; 
     828                                        } 
     829                                        return player.controller.mediaInfo; 
     830                        } 
     831                        return $.jwplayer(player.id); 
     832                }; 
     833        } 
     834         
    863835         
    864836        function api(player) { 
    865                 if (!$.fn.jwplayerUtils.isNull(player.id)){ 
     837                if (!$.fn.jwplayerUtils.isNull(player.id)) { 
    866838                        return player; 
    867839                } 
    868840                return { 
     841                        play: player.controller.play, 
     842                        pause: player.controller.pause, 
     843                        stop: player.controller.stop, 
     844                        seek: player.controller.seek, 
     845                         
     846                        resize: player.controller.resize, 
     847                        fullscreen: player.controller.fullscreen, 
     848                        volume: player.controller.volume, 
     849                        mute: player.controller.mute, 
     850                        load: player.controller.load, 
     851                         
     852                        addEventListener: player.controller.addEventListener, 
     853                        removeEventListener: player.controller.removeEventListener, 
     854                        sendEvent: player.controller.sendEvent, 
     855                         
     856                        ready: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_READY), 
     857                        error: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_ERROR), 
     858                        complete: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_COMPLETE), 
     859                        state: dataListenerFactory(player, 'state', $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE), 
     860                        buffer: dataListenerFactory(player, 'buffer', $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER), 
     861                        time: dataListenerFactory(player, 'position', $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME), 
     862                        duration: dataListenerFactory(player, 'duration'), 
     863                        width: dataListenerFactory(player, 'width'), 
     864                        height: dataListenerFactory(player, 'height'), 
     865                        meta: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_META), 
     866                         
    869867                        id: player.model.config.id, 
    870                         buffer: buffer(player), 
    871                         duration: duration(player), 
    872                         complete: complete(player), 
    873                         fullscreen: fullscreen(player), 
    874                         height: buffer(player), 
    875                         load: load(player), 
    876                         meta: meta(player), 
    877                         mute: mute(player), 
    878                         pause: pause(player), 
    879                         play: play(player), 
    880                         resize: resize(player), 
    881                         ready: ready(player), 
    882                         seek: seek(player), 
    883                         state: state(player), 
    884                         stop: stop(player), 
    885                         time: time(player), 
    886                         volume: volume(player), 
    887                         width: width(player), 
    888                         skin: player.skin, 
    889868                        config: player.model.config, 
    890                         addEventListener: apiAddEventListener(player), 
    891                         removeEventListener: apiRemoveEventListener(player), 
    892                         sendEvent: sendEvent(player), 
    893                         version: '0.1-alpha' 
     869                        version: '0.1-alpha', 
     870                        skin: player.skin 
    894871                }; 
    895872        } 
     
    921898                JWPLAYER_ERROR: 'jwplayerError', 
    922899                JWPLAYER_MEDIA_BUFFER: 'jwplayerMediaBuffer', 
    923                 //JWPLAYER_MEDIA_BUFFER_FULL: 'jwplayerMediaBufferFull', 
     900                JWPLAYER_MEDIA_BUFFER_FULL: 'jwplayerMediaBufferFull', 
    924901                JWPLAYER_MEDIA_ERROR: 'jwplayerMediaError', 
    925902                JWPLAYER_MEDIA_LOADED: 'jwplayerMediaLoaded', 
     
    941918                $("video.jwplayer").jwplayer(); 
    942919        }); 
     920         
     921})(jQuery); 
     922/** 
     923 * JW Player view component 
     924 * 
     925 * @author zach 
     926 * @version 1.0alpha 
     927 * @lastmodifieddate 2010-04-11 
     928 */ 
     929(function($) { 
     930        displays = {}; 
     931         
     932        $.fn.jwplayerDisplay = function(player, domelement) { 
     933                displays[player.id] = {}; 
     934                displays[player.id].domelement = domelement; 
     935                var meta = player.meta(); 
     936                domelement.before("<div id='" + player.id + "_display' style='width:" + meta.width + "px;height: " + meta.height + "px;position:relative;z-index:50' ><a id='" + player.id + "_displayImage' href='" + $.fn.jwplayerUtils.getAbsolutePath(meta.sources[meta.source].file) + "'>&nbsp;</a><img id='" + player.id + "_displayIconBackground' src='" + player.skin.display.elements.background.src + "' alt='Click to play video' style='position:absolute; top:" + (meta.height - 60) / 2 + "px; left:" + (meta.width - 60) / 2 + "px; border:0;' /><img id='" + player.id + "_displayIcon' src='" + player.skin.display.elements.playIcon.src + "' alt='Click to play video' style='position:absolute; top:" + (meta.height - 60) / 2 + "px; left:" + (meta.width - 60) / 2 + "px; border:0;' /></div>"); 
     937                var display = $("#" + player.id + "_display"); 
     938                var displayImage = $("#" + player.id + "_displayImage"); 
     939                var displayIcon = $("#" + player.id + "_displayIcon"); 
     940                var displayIconBackground = $("#" + player.id + "_displayIconBackground"); 
     941                displayImage.jwplayerCSS({ 
     942                        'display': "block", 
     943                        'background': "#ffffff url('" + $.fn.jwplayerUtils.getAbsolutePath(player.config.image) + "') no-repeat center center", 
     944                        'width': meta.width, 
     945                        'height': meta.height, 
     946                        'position': "relative", 
     947                        'left': 0, 
     948                        'top': 0 
     949                }); 
     950                 
     951                display.click(function(evt) { 
     952                        $.fn.jwplayerUtils.log("click" + player.model.state, evt); 
     953                        if (typeof evt.preventDefault != 'undefined') { 
     954                                evt.preventDefault(); // W3C 
     955                        } else { 
     956                                evt.returnValue = false; // IE 
     957                        } 
     958                        if (player.model.state != $.fn.jwplayer.states.PLAYING) { 
     959                                player.play(); 
     960                        } else { 
     961                                player.pause(); 
     962                        } 
     963                         
     964                }); 
     965                player.state(stateHandler); 
     966                player.mute(stateHandler); 
     967                player.error(function(obj) { 
     968                 
     969                }); 
     970                displays[player.id].display = display; 
     971                displays[player.id].displayImage = displayImage; 
     972                displays[player.id].displayIcon = displayIcon; 
     973                displays[player.id].displayIconBackground = displayIconBackground; 
     974        }; 
     975         
     976        function setIcon(player, path) { 
     977                $("#" + player.id + "_displayIcon")[0].src = path; 
     978        } 
     979         
     980        function stateHandler(obj) { 
     981                switch ($.jwplayer(obj.id).model.state) { 
     982                        case $.fn.jwplayer.states.BUFFERING: 
     983                                displays[obj.id].displayIconBackground.css("display", "block"); 
     984                                displays[obj.id].displayIcon[0].src = $.jwplayer(obj.id).skin.display.elements.bufferIcon.src; 
     985                                displays[obj.id].displayIcon.css("display", "block"); 
     986                                break; 
     987                        case $.fn.jwplayer.states.PAUSED: 
     988                                displays[obj.id].displayImage.css("background", "transparent no-repeat center center"); 
     989                                displays[obj.id].displayIconBackground.css("display", "block"); 
     990                                displays[obj.id].displayIcon[0].src = $.jwplayer(obj.id).skin.display.elements.playIcon.src; 
     991                                displays[obj.id].displayIcon.css("display", "block"); 
     992                                break; 
     993                        case $.fn.jwplayer.states.IDLE: 
     994                                displays[obj.id].displayImage.css("background", "#ffffff url('" + $.fn.jwplayerUtils.getAbsolutePath($.jwplayer(obj.id).config.image) + "') no-repeat center center"); 
     995                                displays[obj.id].displayIconBackground.css("display", "block"); 
     996                                displays[obj.id].displayIcon[0].src = $.jwplayer(obj.id).skin.display.elements.playIcon.src; 
     997                                displays[obj.id].displayIcon.css("display", "block"); 
     998                                break; 
     999                        default: 
     1000                                if ($.jwplayer(obj.id).mute()) { 
     1001                                        displays[obj.id].displayIconBackground.css("display", "block"); 
     1002                                        displays[obj.id].displayIcon[0].src = $.jwplayer(obj.id).skin.display.elements.muteIcon.src; 
     1003                                        displays[obj.id].displayIcon.css("display", "block"); 
     1004                                } else { 
     1005                                        displays[obj.id].displayImage.css("background", "transparent no-repeat center center"); 
     1006                                        displays[obj.id].displayIconBackground.css("display", "none"); 
     1007                                        displays[obj.id].displayIcon.css("display", "none"); 
     1008                                } 
     1009                                break; 
     1010                } 
     1011        } 
    9431012         
    9441013})(jQuery); 
     
    10111080         
    10121081        function stateHandler(event, player) { 
     1082                $.fn.jwplayerUtils.log(event); 
    10131083                player.model.state = event.newstate; 
    10141084                player.sendEvent($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { 
     
    11531223        function load(player) { 
    11541224                return function(path) { 
     1225                        path = $.fn.jwplayerUtils.getAbsolutePath(path); 
    11551226                        player.model.domelement[0].sendEvent("LOAD", path); 
     1227                        player.model.domelement[0].sendEvent("PLAY"); 
    11561228                }; 
    11571229        } 
     
    12301302                        resize: resize(player), 
    12311303                        state: $.fn.jwplayer.states.IDLE, 
    1232                         interval: null 
     1304                        interval: null, 
     1305                        loadcount: 0 
    12331306                }; 
    12341307                player.media = media; 
     
    12551328                if (player.model.state != newstate) { 
    12561329                        var oldstate = player.model.state; 
     1330                        player.media.state = newstate; 
    12571331                        player.model.state = newstate; 
     1332                        $.fn.jwplayerUtils.log($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { 
     1333                                oldstate: oldstate, 
     1334                                newstate: newstate 
     1335                        }); 
    12581336                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { 
    12591337                                oldstate: oldstate, 
     
    12741352                        duration: event.target.duration 
    12751353                }; 
    1276                 if (player.model.duration === 0){ 
     1354                if (player.model.duration === 0) { 
    12771355                        player.model.duration = event.target.duration; 
    12781356                } 
     
    12821360         
    12831361        function positionHandler(event, player) { 
     1362                if (!$.fn.jwplayerUtils.isNull(event.target)) { 
     1363                        if (player.model.duration === 0) { 
     1364                                player.model.duration = event.target.duration; 
     1365                        } 
     1366                         
     1367                        if (!$.fn.jwplayerUtils.isNull(event.target.currentTime)) { 
     1368                                player.model.position = event.target.currentTime; 
     1369                        } 
     1370                        if (player.media.state == $.fn.jwplayer.states.PLAYING) { 
     1371                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_TIME, { 
     1372                                        position: event.target.currentTime, 
     1373                                        duration: event.target.duration 
     1374                                }); 
     1375                        } 
     1376                } 
     1377                 
     1378        } 
     1379         
     1380        function progressHandler(event, player) { 
     1381                var bufferPercent, bufferTime, bufferFill; 
     1382                if (!isNaN(event.loaded / event.total)) { 
     1383                        bufferPercent = event.loaded / event.total * 100; 
     1384                        bufferTime = bufferPercent / 100 * player.model.duration; 
     1385                } else if (player.model.domelement[0].buffered !== undefined) { 
     1386                        maxBufferIndex = 0; 
     1387                        if (maxBufferIndex >= 0) { 
     1388                                bufferPercent = player.model.domelement[0].buffered.end(maxBufferIndex) / player.model.domelement[0].duration * 100; 
     1389                                bufferTime = player.model.domelement[0].buffered.end(maxBufferIndex) - player.model.position; 
     1390                        } 
     1391                } 
     1392                 
     1393                bufferFill = bufferTime / player.model.config.bufferlength * 100; 
     1394                 
     1395                if (bufferFill < 25 && player.media.state == $.fn.jwplayer.states.PLAYING) { 
     1396                        player.media.bufferFull = false; 
     1397                        player.model.domelement[0].pause(); 
     1398                        setState(PlayerState.BUFFERING); 
     1399                } else if (bufferFill > 95 && player.media.state == $.fn.jwplayer.states.BUFFERING && player.media.bufferFull === false && bufferTime > 0) { 
     1400                        player.media.bufferFull = true; 
     1401                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER_FULL, {}); 
     1402                } 
     1403                 
     1404                if (!player.media.bufferingComplete) { 
     1405                        if (bufferPercent == 100 && player.media.bufferingComplete === false) { 
     1406                                player.media.bufferingComplete = true; 
     1407                        } 
     1408                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, { 
     1409                                'bufferPercent': bufferPercent 
     1410                        }); 
     1411                } 
     1412        } 
     1413         
     1414        function startInterval(player) { 
    12841415                if (player.media.interval === null) { 
    12851416                        player.media.interval = window.setInterval(function() { 
    1286                                 positionHandler(event, player); 
     1417                                positionHandler({}, player); 
    12871418                        }, 100); 
    12881419                } 
    1289                 if (player.model.duration  === 0){ 
    1290                         player.model.duration = event.target.duration; 
    1291                 } 
    1292                 player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_TIME, { 
    1293                         position: event.target.currentTime, 
    1294                         duration: event.target.duration 
    1295                 }); 
    1296         } 
    1297          
    1298         function progressHandler(event, player) { 
    1299                 var buffer; 
    1300                 if (!isNaN(event.loaded / event.total)) { 
    1301                         buffer = event.loaded / event.total * 100; 
    1302                 } else if (player.model.domelement[0].buffered !== undefined) { 
    1303                         buffer = player.model.domelement[0].buffered.end(0) / player.model.domelement[0].duration * 100; 
    1304                 } 
    1305                 player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, { 
    1306                         'bufferPercent': buffer 
    1307                 }); 
    1308         } 
     1420        } 
     1421         
    13091422         
    13101423        function errorHandler(event, player) { 
     
    13141427        function play(player) { 
    13151428                return function() { 
    1316                         player.model.domelement[0].play(); 
     1429                        if (player.media.state != $.fn.jwplayer.states.PLAYING) { 
     1430                                setState(player, $.fn.jwplayer.states.PLAYING); 
     1431                                player.model.domelement[0].play(); 
     1432                        } 
    13171433                }; 
    13181434        } 
     
    13401456                        player.model.domelement[0].currentTime = 0; 
    13411457                        clearInterval(player.media.interval); 
    1342                         player.media.interval = null; 
     1458                        player.media.interval = undefined; 
    13431459                        setState(player, $.fn.jwplayer.states.IDLE); 
    13441460                }; 
     
    13871503                        player.model.fullscreen = state; 
    13881504                        if (state === true) { 
    1389                                 player.css("width", window.width); 
    1390                                 player.css("height", window.height); 
     1505                                //player.css("width", window.width); 
     1506                                //player.css("height", window.height); 
    13911507                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_RESIZE, { 
    1392                                         width: width, 
    1393                                         hieght: height 
     1508                                        width: player.model.width, 
     1509                                        hieght: player.model.height 
    13941510                                }); 
    13951511                        } else { 
     
    14021518        function load(player) { 
    14031519                return function(path) { 
     1520                        path = $.fn.jwplayerUtils.getAbsolutePath(path); 
     1521                        $.fn.jwplayerUtils.log("replay:" + player.model.domelement[0].src + ":" + path + ":" + (path == player.model.domelement[0].src)); 
     1522                        if (path == player.model.domelement[0].src && player.media.loadcount > 0) { 
     1523                                setState(player, $.fn.jwplayer.states.BUFFERING); 
     1524                                setState(player, $.fn.jwplayer.states.PLAYING); 
     1525                                player.model.domelement[0].currentTime = player.config.start; 
     1526                                //player.model.domelement[0].paused = false; 
     1527                                return; 
     1528                        } else if (path != player.model.domelement[0].src) { 
     1529                                player.media.loadcount = 0; 
     1530                        } 
     1531                        player.media.loadcount++; 
     1532                        player.media.bufferFull = false; 
     1533                        player.media.bufferingComplete = false; 
     1534                        setState(player, $.fn.jwplayer.states.BUFFERING); 
    14041535                        player.model.domelement[0].src = path; 
    1405                 }; 
    1406         } 
    1407 })(jQuery);/** 
     1536                        startInterval(player); 
     1537                        player.model.domelement[0].currentTime = player.config.start; 
     1538                }; 
     1539        } 
     1540         
     1541})(jQuery); 
     1542/** 
    14081543 * JW Player model component 
    14091544 * 
     
    14191554                fullscreen: false, 
    14201555                mute: false, 
     1556                start: 0, 
    14211557                width: 480, 
    14221558                height: 320, 
     
    14271563                return { 
    14281564                        sources: {}, 
    1429                         listeners: {}, 
    14301565                        state: $.fn.jwplayer.states.IDLE, 
    14311566                        source: 0, 
     
    14371572        $.fn.jwplayerModel = function(domElement, options) { 
    14381573                var model = createModel(); 
    1439                 model.config = $.fn.jwplayerParse(domElement[0], options); 
     1574                model.config = $.extend(true, {}, $.fn.jwplayer.defaults, $.fn.jwplayerParse(domElement[0]), options); 
    14401575                if ($.fn.jwplayerUtils.isNull(model.config.id)) { 
    14411576                        model.config.id = "jwplayer_" + jwplayerid++; 
     
    14511586                        } 
    14521587                } 
     1588                //model = $.extend(true, {}, , model); 
    14531589                return model; 
    14541590        }; 
     
    15211657        var parsers = {}; 
    15221658         
    1523         $.fn.jwplayerParse = function(player, options) { 
    1524                 return $.extend(true, {}, $.fn.jwplayer.defaults, options, parseElement(player)); 
     1659        $.fn.jwplayerParse = function(player) { 
     1660                return parseElement(player); 
    15251661        }; 
    15261662         
     
    15661702                        }; 
    15671703                } 
     1704                if (!$.fn.jwplayerUtils.isiPhone()) { 
     1705                        domElement.src = undefined; 
     1706                }  
    15681707                configuration.sources = sources; 
    15691708                return configuration; 
     
    15781717                attributes = getAttributeList('video', attributes); 
    15791718                var result = parseMediaElement(domElement, attributes); 
    1580                 if (!$.fn.jwplayerUtils.isNull($(domElement).attr('poster'))){ 
     1719                if (!$.fn.jwplayerUtils.isNull($(domElement).attr('poster')) && !$.fn.jwplayerUtils.isiPhone()){ 
    15811720                        $(domElement).removeAttr('poster'); 
    15821721                } 
     
    17101849                return this.each(function() { 
    17111850                }); 
     1851        }; 
     1852         
     1853        //http://old.nabble.com/jQuery-may-add-$.browser.isiPhone-td11163329s27240.html 
     1854        $.fn.jwplayerUtils.isiPhone = function() { 
     1855                var agent = navigator.userAgent.toLowerCase(); 
     1856                return agent.match(/iPhone/i); 
    17121857        }; 
    17131858         
     
    18732018         
    18742019        function isAbsolutePath(path) { 
     2020                if(path === undefined){ 
     2021                        return; 
     2022                } 
    18752023                var protocol = path.indexOf("://"); 
    18762024                var queryparams = path.indexOf("?"); 
     
    19742122                        'margin': 'auto' 
    19752123                }); 
    1976                 player.model.domelement.jwplayerCSS({ 
     2124                player.model.domelement.css({ 
    19772125                        'position': 'absolute', 
    19782126                        'width': player.model.config.width, 
    19792127                        'height': player.model.config.height, 
    1980                         'left': 0, 
    19812128                        'top': 0, 
    1982                         'z-index': 0 
    1983                 }); 
    1984                 player.model.domelement.before("<a href='" + $.fn.jwplayerUtils.getAbsolutePath(player.model.sources[player.model.source].file) + "'><img src='http://content.bitsontherun.com/staticfiles/play.png' alt='Click to play video' style='position:absolute; top:" + (player.model.height - 60) / 2 + "px; left:" + (player.model.width - 60) / 2 + "px; border:0;' /></a>"); 
    1985                 player.model.domelement.prev("a").jwplayerCSS({ 
    1986                         'display': 'block', 
    1987                         'background': '#ffffff url(' + $.fn.jwplayerUtils.getAbsolutePath(player.model.config.image) + ') no-repeat center center', 
    1988                         'width': player.model.width, 
    1989                         'height': player.model.height, 
    1990                         'position': 'relative', 
    1991                         'left': 0, 
    1992                         'top': 0, 
    1993                         'z-index': 50 
    1994                 }); 
    1995                 player.model.domelement.prev("a").click(function(evt) { 
    1996                         if (typeof evt.preventDefault != 'undefined') { 
    1997                                 evt.preventDefault(); // W3C 
    1998                         } else { 
    1999                                 evt.returnValue = false; // IE 
    2000                         } 
    2001                         if (player.state() !== $.fn.jwplayer.states.PLAYING) { 
    2002                                 player.play(); 
    2003                         } else { 
    2004                                 player.pause(); 
    2005                         } 
    2006                          
    2007                 }); 
    2008                 player.state(function(obj) { 
    2009                         imageHandler(obj, player); 
    2010                 }); 
    2011         }; 
    2012          
    2013         function imageHandler(obj, player) { 
    2014                 switch (obj.newstate) { 
    2015                         case $.fn.jwplayer.states.IDLE: 
    2016                                 player.model.domelement.css("z-index", "0"); 
    2017                                 player.model.domelement.prev("a").css("z-index", "50"); 
    2018                                 break; 
    2019                         case $.fn.jwplayer.states.PLAYING: 
    2020                                 player.model.domelement.prev("a").css("z-index", "0"); 
    2021                                 player.model.domelement.css("z-index", "50"); 
    2022                                 break; 
    2023                 } 
    2024         } 
     2129                        'z-index': 0, 
     2130                        margin: 'auto' 
     2131                }); 
     2132        }; 
    20252133         
    20262134        $.fn.jwplayerView.switchMediaProvider = function() { 
  • trunk/html5/src/jquery.jwplayerControlbar.js

    r971 r975  
    88 */ 
    99(function($) { 
    10          
    11         var controlbars = {} 
    12  
    13  
     10        var controlbars = {}; 
     11         
    1412        /** Hooking the jwplayerControlbar up to jQuery. **/ 
    1513        $.fn.jwplayerControlbar = function(player, domelement) { 
     
    1917        }; 
    2018         
     19        $.fn.jwplayerControlbar.positions = { 
     20                BOTTOM: 'BOTTOM', 
     21                TOP: 'TOP', 
     22                OVER: 'OVER' 
     23        }; 
     24         
    2125         
    2226        /** Map with config for the jwplayerControlbar plugin. **/ 
     
    2428                fontsize: 10, 
    2529                fontcolor: '000000', 
    26                 position: 'bottom', 
     30                position: $.fn.jwplayerControlbar.positions.BOTTOM, 
    2731                leftmargin: 0, 
    2832                rightmargin: 0, 
     
    3438                // Draw the background. 
    3539                domelement.parents(":first").append('<div id="' + player.id + '_jwplayerControlbar"></div>'); 
    36                 $("#" + player.id + '_jwplayerControlbar').css('position', 'relative'); 
     40                $("#" + player.id + '_jwplayerControlbar').css('position', 'absolute'); 
    3741                $("#" + player.id + '_jwplayerControlbar').css('height', player.skin.controlbar.elements.background.height); 
     42                switch (controlbars[player.id].position) { 
     43                        case $.fn.jwplayerControlbar.positions.TOP: 
     44                                $("#" + player.id + '_jwplayerControlbar').css('top', 0); 
     45                                break; 
     46                        default: 
     47                                $("#" + player.id + '_jwplayerControlbar').css('top', player.height()); 
     48                                domelement.parents(":first").css('height', parseInt(domelement.parents(":first").css('height').replace('px', '')) + player.skin.controlbar.elements.background.height); 
     49                                break; 
     50                } 
    3851                $("#" + player.id + '_jwplayerControlbar').css('background', 'url(' + player.skin.controlbar.elements.background.src + ') repeat-x center left'); 
    3952                // Draw all elements on top of the bar. 
     
    124137                        height: player.height() 
    125138                }); 
     139                timeHandler({ 
     140                        id: player.id, 
     141                        time: 0, 
     142                        duration: 0 
     143                }); 
     144                bufferHandler({ 
     145                        id: player.id, 
     146                        bufferProgress: 0 
     147                }); 
    126148                muteHandler({ 
    127149                        id: player.id, 
     
    187209                        sliderUp(evt.pageX, player); 
    188210                }); 
    189                 $(bar).mouseleave(function(evt) { 
    190                         sliderUp(evt.pageX, player); 
    191                         evt.stopPropagation(); 
    192                 }); 
    193211                $(bar).mousemove(function(evt) { 
    194212                        if (controlbars[player.id].scrubber == 'time') { 
    195                                 var xps = evt.pageX - $(bar).position().left; 
     213                                controlbars[player.id].mousedown = true; 
     214                                var xps = evt.pageX - $(bar).offset().left; 
    196215                                $('#' + player.id + '_timeSliderThumb').css('left', xps); 
    197216                        } 
     
    202221        /** The slider has been moved up. **/ 
    203222        function sliderUp(msx, player) { 
     223                controlbars[player.id].mousedown = false; 
    204224                if (controlbars[player.id].scrubber == 'time') { 
    205225                        var xps = msx - $('#' + player.id + '_timeSliderRail').offset().left; 
    206226                        var wid = $('#' + player.id + '_timeSliderRail').width(); 
    207                         var pos = xps / wid * player.duration(); 
     227                        var pos = xps / wid * controlbars[player.id].currentDuration; 
    208228                        if (pos < 0) { 
    209229                                pos = 0; 
    210                         } else if (pos > controlbars[player.id].duration) { 
    211                                 pos = controlbars[player.id].duration - 3; 
     230                        } else if (pos > controlbars[player.id].currentDuration) { 
     231                                pos = controlbars[player.id].currentDuration - 3; 
    212232                        } 
    213233                        player.seek(pos); 
     234                        if (player.model.state != $.fn.jwplayer.states.PLAYING) { 
     235                                player.play(); 
     236                        } 
    214237                } else if (controlbars[player.id].scrubber == 'volume') { 
    215238                        var xps = msx - $('#' + player.id + '_volumeSliderRail').offset().left; 
     
    273296                } else { 
    274297                        $('#' + event.id + '_timeSliderBuffer').css('display', 'block'); 
    275                         $('#' + event.id + '_timeSliderProgress').css('display', 'block'); 
    276                         $('#' + event.id + '_timeSliderThumb').css('display', 'block'); 
     298                        if (event.newstate != $.fn.jwplayer.states.BUFFERING) { 
     299                                $('#' + event.id + '_timeSliderProgress').css('display', 'block'); 
     300                                $('#' + event.id + '_timeSliderThumb').css('display', 'block'); 
     301                        } 
    277302                } 
    278303        } 
    279304         
    280305        /** Handles event completion **/ 
    281         function completeHandler(event){ 
     306        function completeHandler(event) { 
    282307                timeHandler($.extend(event, { 
    283308                        position: 0, 
     
    301326                 
    302327                $('#' + event.id + '_timeSliderProgress').css('width', Math.round(railWidth * progress)); 
    303                 $('#' + event.id + '_timeSliderThumb').css('left', railLeft + Math.round((railWidth - thumbWidth) * progress)); 
     328                if (!controlbars[event.id].mousedown) { 
     329                        $('#' + event.id + '_timeSliderThumb').css('left', railLeft + Math.round((railWidth - thumbWidth) * progress)); 
     330                } 
    304331                 
    305332                $('#' + event.id + '_durationText').html(timeFormat(controlbars[event.id].currentDuration)); 
  • trunk/html5/src/jquery.jwplayerController.js

    r971 r975  
    88(function($) { 
    99 
    10         var mediaParams ={ 
    11                 volume: 100, 
    12                 fullscreen: false, 
    13                 mute: false, 
    14                 width: 480, 
    15                 height: 320, 
    16                 duration: 0, 
    17                 source: 0, 
    18                 buffer: 0, 
    19                 // I hate javascript 
    20                 //state: $.fn.jwplayer.states.IDLE 
    21                 state: 'IDLE' 
     10        var mediaParams = function() { 
     11                return { 
     12                        volume: 100, 
     13                        fullscreen: false, 
     14                        mute: false, 
     15                        width: 480, 
     16                        height: 320, 
     17                        duration: 0, 
     18                        source: 0, 
     19                        sources: [], 
     20                        buffer: 0, 
     21                        state: $.fn.jwplayer.states.IDLE 
     22                }; 
    2223        }; 
    23  
    24         $.fn.jwplayerController = function() { 
    25                 return this.each(function() { 
    26                 }); 
     24         
     25        $.fn.jwplayerController = function(player) { 
     26                return { 
     27                        play: play(player), 
     28                        pause: pause(player), 
     29                        seek: seek(player), 
     30                        stop: pause(player), 
     31                        volume: volume(player), 
     32                        mute: mute(player), 
     33                        resize: resize(player), 
     34                        fullscreen: fullscreen(player), 
     35                        load: load(player), 
     36                        mediaInfo: mediaInfo(player), 
     37                        addEventListener: addEventListener(player), 
     38                        removeEventListener: removeEventListener(player), 
     39                        sendEvent: sendEvent(player) 
     40                }; 
    2741        }; 
    2842         
    2943         
    30         $.fn.jwplayerController.play = function(player) { 
    31                         player.media.play(); 
    32                 try { 
    33                         player.media.play(); 
    34                         return true; 
    35                 } catch (err) { 
    36                         $.fn.jwplayerUtils.log("error", err); 
    37                 } 
    38                 return false; 
    39         }; 
     44        function play(player) { 
     45                return function() { 
     46                        try { 
     47                                switch (player.model.state) { 
     48                                        case $.fn.jwplayer.states.IDLE: 
     49                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER_FULL, player.media.play); 
     50                                                player.media.load(player.model.sources[player.model.source].file); 
     51                                                break; 
     52                                        case $.fn.jwplayer.states.PAUSED: 
     53                                                player.media.play(); 
     54                                                break; 
     55                                } 
     56                                 
     57                                return $.jwplayer(player.id); 
     58                        } catch (err) { 
     59                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     60                        } 
     61                        return false; 
     62                }; 
     63        } 
    4064         
    4165        /** Switch the pause state of the player. **/ 
    42         $.fn.jwplayerController.pause = function(player) { 
    43                 try { 
    44                         player.media.pause(); 
    45                         return true; 
    46                 } catch (err) { 
    47                         $.fn.jwplayerUtils.log("error", err); 
    48                 } 
    49                 return false; 
    50         }; 
     66        function pause(player) { 
     67                return function() { 
     68                        try { 
     69                                switch (player.model.state) { 
     70                                        case $.fn.jwplayer.states.PLAYING: 
     71                                        case $.fn.jwplayer.states.BUFFERING: 
     72                                                player.media.pause(); 
     73                                                break; 
     74                                } 
     75                                return $.jwplayer(player.id); 
     76                        } catch (err) { 
     77                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     78                        } 
     79                        return false; 
     80                }; 
     81        } 
    5182         
    5283         
    5384        /** Seek to a position in the video. **/ 
    54         $.fn.jwplayerController.seek = function(player, position) { 
    55                 try { 
    56                         player.media.seek(position); 
    57                         return true; 
    58                 } catch (err) { 
    59                         $.fn.jwplayerUtils.log("error", err); 
    60                          
    61                 } 
    62                 return false; 
    63         }; 
     85        function seek(player) { 
     86                return function(position) { 
     87                        try { 
     88                                switch (player.model.state) { 
     89                                        case $.fn.jwplayer.states.PLAYING: 
     90                                        case $.fn.jwplayer.states.PAUSED: 
     91                                        case $.fn.jwplayer.states.BUFFERING: 
     92                                                player.media.seek(position); 
     93                                                break; 
     94                                } 
     95                                return $.jwplayer(player.id); 
     96                        } catch (err) { 
     97                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     98                        } 
     99                        return false; 
     100                }; 
     101        } 
    64102         
    65103         
    66104        /** Stop playback and loading of the video. **/ 
    67         $.fn.jwplayerController.stop = function(player) { 
    68                 try { 
    69                         player.media.stop(); 
    70                         return true; 
    71                 } catch (err) { 
    72                         $.fn.jwplayerUtils.log("error", err); 
    73                          
    74                 } 
    75                 return false; 
    76         }; 
     105        function stop(player) { 
     106                return function() { 
     107                        try { 
     108                                player.media.stop(); 
     109                                return $.jwplayer(player.id); 
     110                        } catch (err) { 
     111                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     112                        } 
     113                        return false; 
     114                }; 
     115        } 
    77116         
    78117         
    79118        /** Get / set the video's volume level. **/ 
    80         $.fn.jwplayerController.volume = function(player, position) { 
    81                 try { 
    82                         if (position === undefined) { 
    83                                 return player.model.volume; 
    84                         } else { 
    85                                 player.media.volume(position); 
    86                                 player.model.volume = position; 
    87                                 return true; 
    88                         } 
    89                 } catch (err) { 
    90                         $.fn.jwplayerUtils.log("error", err); 
    91                 } 
    92                 return false; 
    93         }; 
     119        function volume(player) { 
     120                return function(arg) { 
     121                        try { 
     122                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     123                                        case "function": 
     124                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME, arg); 
     125                                                break; 
     126                                        case "number": 
     127                                                player.media.volume(arg); 
     128                                                return true; 
     129                                        case "string": 
     130                                                player.media.volume(parseInt(arg, 10)); 
     131                                                return true; 
     132                                        default: 
     133                                                return player.model.volume; 
     134                                } 
     135                                return $.jwplayer(player.id); 
     136                        } catch (err) { 
     137                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     138                        } 
     139                        return false; 
     140                }; 
     141        } 
    94142         
    95143        /** Get / set the mute state of the player. **/ 
    96         $.fn.jwplayerController.mute = function(player, state) { 
    97                 try { 
    98                         if (state === undefined) { 
    99                                 return player.model.mute; 
    100                         } else { 
    101                                 player.media.mute(state); 
    102                                 return true; 
    103                         } 
    104                         return true; 
    105                 } catch (err) { 
    106                         $.fn.jwplayerUtils.log("error", err); 
    107                 } 
    108                 return false; 
    109         }; 
     144        function mute(player) { 
     145                return function(arg) { 
     146                        try { 
     147                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     148                                        case "function": 
     149                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE, arg); 
     150                                                break; 
     151                                        case "boolean": 
     152                                                player.media.mute(arg); 
     153                                                break; 
     154                                        default: 
     155                                                return player.model.mute; 
     156                                } 
     157                                return $.jwplayer(player.id); 
     158                        } catch (err) { 
     159                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     160                        } 
     161                        return false; 
     162                }; 
     163        } 
     164         
     165         
     166        /** Resizes the video **/ 
     167        function resize(player) { 
     168                return function(arg1, arg2) { 
     169                        try { 
     170                                switch ($.fn.jwplayerUtils.typeOf(arg1)) { 
     171                                        case "function": 
     172                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_RESIZE, arg1); 
     173                                                break; 
     174                                        case "number": 
     175                                                player.media.resize(arg1, arg2); 
     176                                                break; 
     177                                        default: 
     178                                                break; 
     179                                } 
     180                                return $.jwplayer(player.id); 
     181                        } catch (err) { 
     182                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     183                        } 
     184                        return false; 
     185                }; 
     186        } 
    110187         
    111188         
    112189        /** Jumping the player to/from fullscreen. **/ 
    113         $.fn.jwplayerController.fullscreen = function(player, state) { 
    114                 try { 
    115                         if (state === undefined) { 
    116                                 return player.model.fullscreen; 
    117                         } else { 
    118                                 player.media.fullscreen(state); 
    119                                 return true; 
    120                         } 
    121                 } catch (err) { 
    122                         $.fn.jwplayerUtils.log("error", err); 
    123                 } 
    124                 return false; 
    125         }; 
    126          
    127         /** Resizes the video **/ 
    128         $.fn.jwplayerController.resize = function(player, width, height) { 
    129                 try { 
    130                         player.media.resize(width, height); 
    131                         return true; 
    132                 } catch (err) { 
    133                         $.fn.jwplayerUtils.log("error", err); 
    134                 } 
    135                 return false; 
    136         }; 
     190        function fullscreen(player) { 
     191                return function(arg) { 
     192                        try { 
     193                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     194                                        case "function": 
     195                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_FULLSCREEN, arg); 
     196                                                break; 
     197                                        case "boolean": 
     198                                                player.media.fullscreen(arg); 
     199                                                break; 
     200                                        default: 
     201                                                return player.model.fullscreen; 
     202                                } 
     203                                return $.jwplayer(player.id); 
     204                        } catch (err) { 
     205                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     206                        } 
     207                        return false; 
     208                }; 
     209        } 
     210         
     211        /** Loads a new video **/ 
     212        function load(player) { 
     213                return function(arg) { 
     214                        try { 
     215                                switch ($.fn.jwplayerUtils.typeOf(arg)) { 
     216                                        case "function": 
     217                                                player.addEventListener($.fn.jwplayer.events.JWPLAYER_MEDIA_LOADED, arg); 
     218                                                break; 
     219                                        default: 
     220                                                player.media.load(arg); 
     221                                                break; 
     222                                } 
     223                                return $.jwplayer(player.id); 
     224                        } catch (err) { 
     225                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_ERROR, err); 
     226                        } 
     227                        return false; 
     228                }; 
     229        } 
     230         
    137231         
    138232        /** Returns the meta **/ 
    139         $.fn.jwplayerController.mediaInfo = function(player) { 
     233        function mediaInfo(player) { 
    140234                try { 
    141235                        var result = {}; 
    142                         for (var mediaParam in mediaParams){ 
     236                        for (var mediaParam in mediaParams()) { 
    143237                                result[mediaParam] = player.model[mediaParam]; 
    144238                        } 
     
    148242                } 
    149243                return false; 
    150         }; 
    151          
    152         /** Loads a new video **/ 
    153         $.fn.jwplayerController.load = function(player, path) { 
    154                 try { 
    155                         player.media.load(path); 
    156                         return true; 
    157                 } catch (err) { 
    158                         $.fn.jwplayerUtils.log("error", err); 
    159                 } 
    160                 return false; 
    161         }; 
     244        } 
     245         
     246         
     247        /** Add an event listener. **/ 
     248        function addEventListener(player) { 
     249                return function(type, listener, count) { 
     250                        try { 
     251                                if (player.listeners[type] === undefined) { 
     252                                        player.listeners[type] = []; 
     253                                } 
     254                                player.listeners[type].push({ 
     255                                        listener: listener, 
     256                                        count: count 
     257                                }); 
     258                        } catch (err) { 
     259                                $.fn.jwplayerUtils.log("error", err); 
     260                        } 
     261                        return false; 
     262                }; 
     263        } 
     264         
     265         
     266        /** Remove an event listener. **/ 
     267        function removeEventListener(player) { 
     268                return function(type, listener) { 
     269                        try { 
     270                                for (var lisenterIndex in player.listeners[type]) { 
     271                                        if (player.listeners[type][lisenterIndex] == listener) { 
     272                                                player.listeners[type].slice(lisenterIndex, lisenterIndex + 1); 
     273                                                break; 
     274                                        } 
     275                                } 
     276                        } catch (err) { 
     277                                $.fn.jwplayerUtils.log("error", err); 
     278                        } 
     279                        return false; 
     280                }; 
     281        } 
     282         
     283        /** Send an event **/ 
     284        function sendEvent(player) { 
     285                return function(type, data) { 
     286                        data = $.extend({ 
     287                                id: player.id, 
     288                                version: player.version 
     289                        }, data); 
     290                        if (player.config.debug == 'CONSOLE') { 
     291                                $.fn.jwplayerUtils.log(type, data); 
     292                        } 
     293                        for (var listenerIndex in player.listeners[type]) { 
     294                                try { 
     295                                        player.listeners[type][listenerIndex].listener(data); 
     296                                } catch (err) { 
     297                                        $.fn.jwplayerUtils.log("There was an error while handling a listener", err); 
     298                                } 
     299                                if (player.listeners[type][listenerIndex].count === 1) { 
     300                                        delete player.listeners[type][listenerIndex]; 
     301                                } else if (player.listeners[type][listenerIndex].count > 0) { 
     302                                        player.listeners[type][listenerIndex].count = player.listeners[type][listenerIndex].count - 1; 
     303                                } 
     304                        } 
     305                }; 
     306        } 
    162307         
    163308})(jQuery); 
  • trunk/html5/src/jquery.jwplayerCore.js

    r971 r975  
    88 */ 
    99(function($) { 
     10        /** Map with all players on the page. **/ 
     11        var players = {}; 
     12         
    1013        /** Hooking the controlbar up to jQuery. **/ 
    1114        $.fn.jwplayer = function(options) { 
    1215                return this.each(function() { 
    13                         $.fn.jwplayerUtils.log("setup", this); 
    14                         var model = $.fn.jwplayerModel($(this), options); 
    15                         var player = { 
    16                                 model: model 
    17                         }; 
    18                         players[model.config.id] = player; 
    19                         player = $.extend(player, api(player)); 
    20                         $.fn.jwplayerView(player); 
    21                         $.fn.jwplayerModel.setActiveMediaProvider(player); 
    22                         $.fn.jwplayerSkinner(player, function() { 
    23                                 finishSetup(player); 
    24                         }); 
     16                        $.fn.jwplayerUtils.log("Starting setup", this); 
     17                        setupJWPlayer($(this), 0, options); 
    2518                }); 
    2619        }; 
    2720         
    28         function finishSetup(player) { 
    29                 $.fn.jwplayerControlbar($.jwplayer(player.id), player.model.domelement); 
    30                 player.sendEvent($.fn.jwplayer.events.JWPLAYER_READY); 
    31         } 
    32          
    33          
    34         /** Map with all players on the page. **/ 
    35         var players = {}; 
     21        function setupJWPlayer(player, step, options) { 
     22                $.fn.jwplayerUtils.log("Starting step " + step, { 
     23                        player: player, 
     24                        options: options 
     25                }); 
     26                try { 
     27                        switch (step) { 
     28                                case 0: 
     29                                        var model = $.fn.jwplayerModel(player, options); 
     30                                        var player = { 
     31                                                model: model, 
     32                                                listeners: {} 
     33                                        }; 
     34                                        setupJWPlayer(player, step + 1); 
     35                                        break; 
     36                                case 1: 
     37                                        player.controller = $.fn.jwplayerController(player); 
     38                                        players[player.model.config.id] = player; 
     39                                        setupJWPlayer($.extend(player, api(player)), step + 1); 
     40                                        break; 
     41                                case 2: 
     42                                        $.fn.jwplayerView(player); 
     43                                        setupJWPlayer(player, step + 1); 
     44                                        break; 
     45                                case 3: 
     46                                        $.fn.jwplayerModel.setActiveMediaProvider(player); 
     47                                        setupJWPlayer(player, step + 1); 
     48                                        break; 
     49                                case 4: 
     50                                        $.fn.jwplayerSkinner(player, function() { 
     51                                                $.fn.jwplayerUtils.log("Skin loading complete", player); 
     52                                                setupJWPlayer(player, step + 1); 
     53                                        }); 
     54                                        break; 
     55                                case 5: 
     56                                        $.fn.jwplayerDisplay($.jwplayer(player.id), player.model.domelement); 
     57                                        setupJWPlayer(player, step + 1); 
     58                                        break; 
     59                                case 6: 
     60                                        $.fn.jwplayerControlbar($.jwplayer(player.id), player.model.domelement); 
     61                                        setupJWPlayer(player, step + 1); 
     62                                        break; 
     63                                case 7: 
     64                                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_READY); 
     65                                        setupJWPlayer(player, step + 1) 
     66                                        break; 
     67                                default: 
     68                                        if (player.config.autostart === true) { 
     69                                                player.play(); 
     70                                        } 
     71                                        if (player.config.repeat) { 
     72                                                if ((player.config.repeat.toLowerCase() == 'list') || (player.config.repeat.toLowerCase() == 'always') || (player.config.repeat.toLowerCase() == 'single')) { 
     73                                                        player.complete(function() { 
     74                                                                player.play(); 
     75                                                        }); 
     76                                                } 
     77                                        } 
     78                                        break; 
     79                        } 
     80                } catch (err) { 
     81                        $.fn.jwplayerUtils.log("Setup failed at step " + step, err); 
     82                } 
     83        } 
    3684         
    3785         
     
    4694                width: 480, 
    4795                mute: false, 
    48                 flashplayer:'http://developer.longtailvideo.com/player/trunk/html5/assets/player.swf' 
    49         }; 
    50          
    51          
    52         /** Start playback or resume. **/ 
    53         function play(player) { 
    54                 return function() { 
    55                         $.fn.jwplayerController.play(player); 
    56                         return jwplayer(player.id); 
    57                 }; 
    58         } 
    59          
    60         /** Switch the pause state of the player. **/ 
    61         function pause(player) { 
    62                 return function() { 
    63                         $.fn.jwplayerController.pause(player); 
    64                         return jwplayer(player.id); 
    65                 }; 
    66         } 
    67          
    68          
    69         /** Seek to a position in the video. **/ 
    70         function seek(player) { 
    71                 return function(arg) { 
    72                         $.fn.jwplayerController.seek(player, arg); 
    73                         return jwplayer(player.id); 
    74                 }; 
    75         } 
    76          
    77          
    78         /** Stop playback and loading of the video. **/ 
    79         function stop(player) { 
    80                 return function() { 
    81                         $.fn.jwplayerController.stop(player); 
    82                         return jwplayer(player.id); 
    83                 }; 
    84         } 
    85          
    86          
    87         /** Change the video's volume level. **/ 
    88         function volume(player) { 
     96                bufferlength: 5, 
     97                start: 0, 
     98                position: 0, 
     99                flashplayer: 'http://developer.longtailvideo.com/player/trunk/html5/assets/player.swf' 
     100        }; 
     101         
     102         
     103        /** A factory for API calls that either set listeners or return data **/ 
     104        function dataListenerFactory(player, dataType, eventType) { 
    89105                return function(arg) { 
    90106                        switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    91107                                case "function": 
    92                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_VOLUME, arg); 
    93                                         break; 
    94                                 case "number": 
    95                                         $.fn.jwplayerController.volume(player, arg); 
    96                                         break; 
    97                                 case "string": 
    98                                         $.fn.jwplayerController.volume(player, parseInt(arg, 10)); 
     108                                        if (!$.fn.jwplayerUtils.isNull(eventType)) { 
     109                                                player.addEventListener(eventType, arg); 
     110                                        } 
    99111                                        break; 
    100112                                default: 
    101                                         return $.fn.jwplayerController.volume(player); 
     113                                        if (!$.fn.jwplayerUtils.isNull(dataType)) { 
     114                                                return player.controller.mediaInfo[dataType]; 
     115                                        } 
     116                                        return player.controller.mediaInfo; 
    102117                        } 
    103                         return jwplayer(player.id); 
     118                        return $.jwplayer(player.id); 
    104119                }; 
    105120        } 
    106121         
    107         /** Switch the mute state of the player. **/ 
    108         function mute(player) { 
    109                 return function(arg) { 
    110                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    111                                 case "function": 
    112                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_MUTE, arg); 
    113                                         break; 
    114                                 case "boolean": 
    115                                         $.fn.jwplayerController.mute(player, arg); 
    116                                         break; 
    117                                 default: 
    118                                         return $.fn.jwplayerController.mute(player); 
    119                         } 
    120                         return jwplayer(player.id); 
    121                 }; 
    122         } 
    123          
    124         /** Resizing the player **/ 
    125         function resize(player) { 
    126                 return function(arg1, arg2) { 
    127                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    128                                 case "function": 
    129                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_RESIZE, arg); 
    130                                         break; 
    131                                 case "number": 
    132                                         $.fn.jwplayerController.resize(player, arg1, arg2); 
    133                                         break; 
    134                                 default: 
    135                                         break; 
    136                         } 
    137                         return jwplayer(player.id); 
    138                 }; 
    139         } 
    140          
    141         /** Fullscreen the player **/ 
    142         function fullscreen(player) { 
    143                 return function(arg) { 
    144                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    145                                 case "function": 
    146                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_FULLSCREEN, arg); 
    147                                         break; 
    148                                 case "boolean": 
    149                                         $.fn.jwplayerController.fullscreen(player, arg); 
    150                                         break; 
    151                                 default: 
    152                                         return $.fn.jwplayerController.fullscreen(player); 
    153                         } 
    154                         return jwplayer(player.id); 
    155                 }; 
    156         } 
    157          
    158         /** Adds a state listener **/ 
    159         function state(player) { 
    160                 return function(arg) { 
    161                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    162                                 case "function": 
    163                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, arg); 
    164                                         break; 
    165                                 default: 
    166                                         return $.fn.jwplayerController.mediaInfo(player).state; 
    167                         } 
    168                         return jwplayer(player.id); 
    169                 }; 
    170         } 
    171          
    172         /** Adds a buffer listener **/ 
    173         function buffer(player) { 
    174                 return function(arg) { 
    175                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    176                                 case "function": 
    177                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, arg); 
    178                                         break; 
    179                                 default: 
    180                                         return $.fn.jwplayerController.mediaInfo(player).buffer; 
    181                         } 
    182                         return jwplayer(player.id); 
    183                 }; 
    184         } 
    185          
    186         /** Returns the current time **/ 
    187         function time(player) { 
    188                 return function(arg) { 
    189                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    190                                 case "function": 
    191                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME, arg); 
    192                                         break; 
    193                                 default: 
    194                                         return $.fn.jwplayerController.mediaInfo(player).time; 
    195                         } 
    196                         return jwplayer(player.id); 
    197                 }; 
    198         } 
    199          
    200         /** Loads a new video into the player **/ 
    201         function load(player) { 
    202                 return function(arg) { 
    203                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    204                                 case "function": 
    205                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_LOADED, arg); 
    206                                         break; 
    207                                 default: 
    208                                         $.fn.jwplayerController.load(player, arg); 
    209                         } 
    210                         return jwplayer(player.id); 
    211                 }; 
    212         } 
    213          
    214         /** Adds a listener for video completion **/ 
    215         function complete(player) { 
    216                 return function(arg) { 
    217                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_COMPLETE, arg); 
    218                         return jwplayer(player.id); 
    219                 }; 
    220         } 
    221          
    222         /** Adds a listener for player ready **/ 
    223         function ready(player) { 
    224                 return function(arg) { 
    225                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_READY, arg); 
    226                         return jwplayer(player.id); 
    227                 }; 
    228         } 
    229          
    230         /** Returns the duration **/ 
    231         function duration(player) { 
    232                 return function() { 
    233                         return $.fn.jwplayerController.mediaInfo(player).duration; 
    234                 }; 
    235         } 
    236          
    237         /** Adds a listener for media errors. **/ 
    238         function error(player) { 
    239                 return function(arg) { 
    240                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_ERROR, arg); 
    241                         return jwplayer(player.id); 
    242                 }; 
    243         } 
    244          
    245          
    246         /** Returns the width **/ 
    247         function width(player) { 
    248                 return function() { 
    249                         return $.fn.jwplayerController.mediaInfo(player).width; 
    250                 }; 
    251         } 
    252          
    253          
    254         /** Returns the height **/ 
    255         function height(player) { 
    256                 return function() { 
    257                         return $.fn.jwplayerController.mediaInfo(player).height; 
    258                 }; 
    259         } 
    260          
    261         /** Returns the available meta-data **/ 
    262         function meta(player) { 
    263                 return function() { 
    264                         switch ($.fn.jwplayerUtils.typeOf(arg)) { 
    265                                 case "function": 
    266                                         addEventListener(player, $.fn.jwplayer.events.JWPLAYER_MEDIA_META, arg); 
    267                                         break; 
    268                                 default: 
    269                                         return $.fn.jwplayerController.mediaInfo(player); 
    270                         } 
    271                         return jwplayer(player.id); 
    272                 }; 
    273         } 
    274          
    275         /** Returns the API method for adding an event listener.**/ 
    276         function apiAddEventListener(player) { 
    277                 return function(type, listener) { 
    278                         addEventListener(player, type, listener); 
    279                 }; 
    280         } 
    281          
    282         /** Returns the API method for adding an event listener.**/ 
    283         function apiRemoveEventListener(player) { 
    284                 return function(type, listener) { 
    285                         removeEventListener(player, type, listener); 
    286                 }; 
    287         } 
    288          
    289         /** Add an event listener. **/ 
    290         function addEventListener(player, type, listener) { 
    291                 if (player.model.listeners[type] === undefined) { 
    292                         player.model.listeners[type] = []; 
    293                 } 
    294                 player.model.listeners[type].push(listener); 
    295         } 
    296          
    297          
    298         /** Remove an event listener. **/ 
    299         function removeEventListener(player, type, listener) { 
    300                 for (var lisenterIndex in player.model.listeners[type]) { 
    301                         if (player.model.listeners[type][lisenterIndex] == listener) { 
    302                                 player.model.listeners[type].slice(lisenterIndex, lisenterIndex + 1); 
    303                                 break; 
    304                         } 
    305                 } 
    306         } 
    307          
    308         /** Send an event **/ 
    309         function sendEvent(player) { 
    310                 return function(type, data) { 
    311                         data = $.extend({ 
    312                                 id: player.id, 
    313                                 version: player.version 
    314                         }, data); 
    315                         //$.fn.jwplayerUtils.log(type, data); 
    316                         for (var listener in player.model.listeners[type]) { 
    317                                 player.model.listeners[type][listener](data); 
    318                         } 
    319                 }; 
    320         } 
    321                  
    322122         
    323123        function api(player) { 
    324                 if (!$.fn.jwplayerUtils.isNull(player.id)){ 
     124                if (!$.fn.jwplayerUtils.isNull(player.id)) { 
    325125                        return player; 
    326126                } 
    327127                return { 
     128                        play: player.controller.play, 
     129                        pause: player.controller.pause, 
     130                        stop: player.controller.stop, 
     131                        seek: player.controller.seek, 
     132                         
     133                        resize: player.controller.resize, 
     134                        fullscreen: player.controller.fullscreen, 
     135                        volume: player.controller.volume, 
     136                        mute: player.controller.mute, 
     137                        load: player.controller.load, 
     138                         
     139                        addEventListener: player.controller.addEventListener, 
     140                        removeEventListener: player.controller.removeEventListener, 
     141                        sendEvent: player.controller.sendEvent, 
     142                         
     143                        ready: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_READY), 
     144                        error: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_ERROR), 
     145                        complete: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_COMPLETE), 
     146                        state: dataListenerFactory(player, 'state', $.fn.jwplayer.events.JWPLAYER_PLAYER_STATE), 
     147                        buffer: dataListenerFactory(player, 'buffer', $.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER), 
     148                        time: dataListenerFactory(player, 'position', $.fn.jwplayer.events.JWPLAYER_MEDIA_TIME), 
     149                        duration: dataListenerFactory(player, 'duration'), 
     150                        width: dataListenerFactory(player, 'width'), 
     151                        height: dataListenerFactory(player, 'height'), 
     152                        meta: dataListenerFactory(player, null, $.fn.jwplayer.events.JWPLAYER_MEDIA_META), 
     153                         
    328154                        id: player.model.config.id, 
    329                         buffer: buffer(player), 
    330                         duration: duration(player), 
    331                         complete: complete(player), 
    332                         fullscreen: fullscreen(player), 
    333                         height: buffer(player), 
    334                         load: load(player), 
    335                         meta: meta(player), 
    336                         mute: mute(player), 
    337                         pause: pause(player), 
    338                         play: play(player), 
    339                         resize: resize(player), 
    340                         ready: ready(player), 
    341                         seek: seek(player), 
    342                         state: state(player), 
    343                         stop: stop(player), 
    344                         time: time(player), 
    345                         volume: volume(player), 
    346                         width: width(player), 
    347                         skin: player.skin, 
    348155                        config: player.model.config, 
    349                         addEventListener: apiAddEventListener(player), 
    350                         removeEventListener: apiRemoveEventListener(player), 
    351                         sendEvent: sendEvent(player), 
    352                         version: '0.1-alpha' 
     156                        version: '0.1-alpha', 
     157                        skin: player.skin 
    353158                }; 
    354159        } 
     
    380185                JWPLAYER_ERROR: 'jwplayerError', 
    381186                JWPLAYER_MEDIA_BUFFER: 'jwplayerMediaBuffer', 
    382                 //JWPLAYER_MEDIA_BUFFER_FULL: 'jwplayerMediaBufferFull', 
     187                JWPLAYER_MEDIA_BUFFER_FULL: 'jwplayerMediaBufferFull', 
    383188                JWPLAYER_MEDIA_ERROR: 'jwplayerMediaError', 
    384189                JWPLAYER_MEDIA_LOADED: 'jwplayerMediaLoaded', 
  • trunk/html5/src/jquery.jwplayerMediaFlash.js

    r971 r975  
    6767         
    6868        function stateHandler(event, player) { 
     69                $.fn.jwplayerUtils.log(event); 
    6970                player.model.state = event.newstate; 
    7071                player.sendEvent($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { 
     
    209210        function load(player) { 
    210211                return function(path) { 
     212                        path = $.fn.jwplayerUtils.getAbsolutePath(path); 
    211213                        player.model.domelement[0].sendEvent("LOAD", path); 
     214                        player.model.domelement[0].sendEvent("PLAY"); 
    212215                }; 
    213216        } 
  • trunk/html5/src/jquery.jwplayerMediaVideo.js

    r971 r975  
    5757                        resize: resize(player), 
    5858                        state: $.fn.jwplayer.states.IDLE, 
    59                         interval: null 
     59                        interval: null, 
     60                        loadcount: 0 
    6061                }; 
    6162                player.media = media; 
     
    8283                if (player.model.state != newstate) { 
    8384                        var oldstate = player.model.state; 
     85                        player.media.state = newstate; 
    8486                        player.model.state = newstate; 
     87                        $.fn.jwplayerUtils.log($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { 
     88                                oldstate: oldstate, 
     89                                newstate: newstate 
     90                        }); 
    8591                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_PLAYER_STATE, { 
    8692                                oldstate: oldstate, 
     
    101107                        duration: event.target.duration 
    102108                }; 
    103                 if (player.model.duration === 0){ 
     109                if (player.model.duration === 0) { 
    104110                        player.model.duration = event.target.duration; 
    105111                } 
     
    109115         
    110116        function positionHandler(event, player) { 
     117                if (!$.fn.jwplayerUtils.isNull(event.target)) { 
     118                        if (player.model.duration === 0) { 
     119                                player.model.duration = event.target.duration; 
     120                        } 
     121                         
     122                        if (!$.fn.jwplayerUtils.isNull(event.target.currentTime)) { 
     123                                player.model.position = event.target.currentTime; 
     124                        } 
     125                        if (player.media.state == $.fn.jwplayer.states.PLAYING) { 
     126                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_TIME, { 
     127                                        position: event.target.currentTime, 
     128                                        duration: event.target.duration 
     129                                }); 
     130                        } 
     131                } 
     132                 
     133        } 
     134         
     135        function progressHandler(event, player) { 
     136                var bufferPercent, bufferTime, bufferFill; 
     137                if (!isNaN(event.loaded / event.total)) { 
     138                        bufferPercent = event.loaded / event.total * 100; 
     139                        bufferTime = bufferPercent / 100 * player.model.duration; 
     140                } else if (player.model.domelement[0].buffered !== undefined) { 
     141                        maxBufferIndex = 0; 
     142                        if (maxBufferIndex >= 0) { 
     143                                bufferPercent = player.model.domelement[0].buffered.end(maxBufferIndex) / player.model.domelement[0].duration * 100; 
     144                                bufferTime = player.model.domelement[0].buffered.end(maxBufferIndex) - player.model.position; 
     145                        } 
     146                } 
     147                 
     148                bufferFill = bufferTime / player.model.config.bufferlength * 100; 
     149                 
     150                if (bufferFill < 25 && player.media.state == $.fn.jwplayer.states.PLAYING) { 
     151                        player.media.bufferFull = false; 
     152                        player.model.domelement[0].pause(); 
     153                        setState(PlayerState.BUFFERING); 
     154                } else if (bufferFill > 95 && player.media.state == $.fn.jwplayer.states.BUFFERING && player.media.bufferFull === false && bufferTime > 0) { 
     155                        player.media.bufferFull = true; 
     156                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER_FULL, {}); 
     157                } 
     158                 
     159                if (!player.media.bufferingComplete) { 
     160                        if (bufferPercent == 100 && player.media.bufferingComplete === false) { 
     161                                player.media.bufferingComplete = true; 
     162                        } 
     163                        player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, { 
     164                                'bufferPercent': bufferPercent 
     165                        }); 
     166                } 
     167        } 
     168         
     169        function startInterval(player) { 
    111170                if (player.media.interval === null) { 
    112171                        player.media.interval = window.setInterval(function() { 
    113                                 positionHandler(event, player); 
     172                                positionHandler({}, player); 
    114173                        }, 100); 
    115174                } 
    116                 if (player.model.duration  === 0){ 
    117                         player.model.duration = event.target.duration; 
    118                 } 
    119                 player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_TIME, { 
    120                         position: event.target.currentTime, 
    121                         duration: event.target.duration 
    122                 }); 
    123         } 
    124          
    125         function progressHandler(event, player) { 
    126                 var buffer; 
    127                 if (!isNaN(event.loaded / event.total)) { 
    128                         buffer = event.loaded / event.total * 100; 
    129                 } else if (player.model.domelement[0].buffered !== undefined) { 
    130                         buffer = player.model.domelement[0].buffered.end(0) / player.model.domelement[0].duration * 100; 
    131                 } 
    132                 player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_BUFFER, { 
    133                         'bufferPercent': buffer 
    134                 }); 
    135         } 
     175        } 
     176         
    136177         
    137178        function errorHandler(event, player) { 
     
    141182        function play(player) { 
    142183                return function() { 
    143                         player.model.domelement[0].play(); 
     184                        if (player.media.state != $.fn.jwplayer.states.PLAYING) { 
     185                                setState(player, $.fn.jwplayer.states.PLAYING); 
     186                                player.model.domelement[0].play(); 
     187                        } 
    144188                }; 
    145189        } 
     
    167211                        player.model.domelement[0].currentTime = 0; 
    168212                        clearInterval(player.media.interval); 
    169                         player.media.interval = null; 
     213                        player.media.interval = undefined; 
    170214                        setState(player, $.fn.jwplayer.states.IDLE); 
    171215                }; 
     
    214258                        player.model.fullscreen = state; 
    215259                        if (state === true) { 
    216                                 player.css("width", window.width); 
    217                                 player.css("height", window.height); 
     260                                //player.css("width", window.width); 
     261                                //player.css("height", window.height); 
    218262                                player.sendEvent($.fn.jwplayer.events.JWPLAYER_MEDIA_RESIZE, { 
    219                                         width: width, 
    220                                         hieght: height 
     263                                        width: player.model.width, 
     264                                        hieght: player.model.height 
    221265                                }); 
    222266                        } else { 
     
    229273        function load(player) { 
    230274                return function(path) { 
     275                        path = $.fn.jwplayerUtils.getAbsolutePath(path); 
     276                        $.fn.jwplayerUtils.log("replay:" + player.model.domelement[0].src + ":" + path + ":" + (path == player.model.domelement[0].src)); 
     277                        if (path == player.model.domelement[0].src && player.media.loadcount > 0) { 
     278                                setState(player, $.fn.jwplayer.states.BUFFERING); 
     279                                setState(player, $.fn.jwplayer.states.PLAYING); 
     280                                player.model.domelement[0].currentTime = player.config.start; 
     281                                //player.model.domelement[0].paused = false; 
     282                                return; 
     283                        } else if (path != player.model.domelement[0].src) { 
     284                                player.media.loadcount = 0; 
     285                        } 
     286                        player.media.loadcount++; 
     287                        player.media.bufferFull = false; 
     288                        player.media.bufferingComplete = false; 
     289                        setState(player, $.fn.jwplayer.states.BUFFERING); 
    231290                        player.model.domelement[0].src = path; 
    232                 }; 
    233         } 
     291                        startInterval(player); 
     292                        player.model.domelement[0].currentTime = player.config.start; 
     293                }; 
     294        } 
     295         
    234296})(jQuery); 
  • trunk/html5/src/jquery.jwplayerModel.js

    r971 r975  
    1313                fullscreen: false, 
    1414                mute: false, 
     15                start: 0, 
    1516                width: 480, 
    1617                height: 320, 
     
    2122                return { 
    2223                        sources: {}, 
    23                         listeners: {}, 
    2424                        state: $.fn.jwplayer.states.IDLE, 
    2525                        source: 0, 
     
    3131        $.fn.jwplayerModel = function(domElement, options) { 
    3232                var model = createModel(); 
    33                 model.config = $.fn.jwplayerParse(domElement[0], options); 
     33                model.config = $.extend(true, {}, $.fn.jwplayer.defaults, $.fn.jwplayerParse(domElement[0]), options); 
    3434                if ($.fn.jwplayerUtils.isNull(model.config.id)) { 
    3535                        model.config.id = "jwplayer_" + jwplayerid++; 
     
    4545                        } 
    4646                } 
     47                //model = $.extend(true, {}, , model); 
    4748                return model; 
    4849        }; 
  • trunk/html5/src/jquery.jwplayerParse.js

    r971 r975  
    3535        var parsers = {}; 
    3636         
    37         $.fn.jwplayerParse = function(player, options) { 
    38                 return $.extend(true, {}, $.fn.jwplayer.defaults, options, parseElement(player)); 
     37        $.fn.jwplayerParse = function(player) { 
     38                return parseElement(player); 
    3939        }; 
    4040         
     
    8080                        }; 
    8181                } 
     82                if (!$.fn.jwplayerUtils.isiPhone()) { 
     83                        domElement.src = undefined; 
     84                }  
    8285                configuration.sources = sources; 
    8386                return configuration; 
     
    9295                attributes = getAttributeList('video', attributes); 
    9396                var result = parseMediaElement(domElement, attributes); 
    94                 if (!$.fn.jwplayerUtils.isNull($(domElement).attr('poster'))){ 
     97                if (!$.fn.jwplayerUtils.isNull($(domElement).attr('poster')) && !$.fn.jwplayerUtils.isiPhone()){ 
    9598                        $(domElement).removeAttr('poster'); 
    9699                } 
  • trunk/html5/src/jquery.jwplayerUtils.js

    r963 r975  
    1313                return this.each(function() { 
    1414                }); 
     15        }; 
     16         
     17        //http://old.nabble.com/jQuery-may-add-$.browser.isiPhone-td11163329s27240.html 
     18        $.fn.jwplayerUtils.isiPhone = function() { 
     19                var agent = navigator.userAgent.toLowerCase(); 
     20                return agent.match(/iPhone/i); 
    1521        }; 
    1622         
     
    176182         
    177183        function isAbsolutePath(path) { 
     184                if(path === undefined){ 
     185                        return; 
     186                } 
    178187                var protocol = path.indexOf("://"); 
    179188                var queryparams = path.indexOf("?"); 
  • trunk/html5/src/jquery.jwplayerView.js

    r971 r975  
    2727                        'margin': 'auto' 
    2828                }); 
    29                 player.model.domelement.jwplayerCSS({ 
     29                player.model.domelement.css({ 
    3030                        'position': 'absolute', 
    3131                        'width': player.model.config.width, 
    3232                        'height': player.model.config.height, 
    33                         'left': 0, 
    3433                        'top': 0, 
    35                         'z-index': 0 
    36                 }); 
    37                 player.model.domelement.before("<a href='" + $.fn.jwplayerUtils.getAbsolutePath(player.model.sources[player.model.source].file) + "'><img src='http://content.bitsontherun.com/staticfiles/play.png' alt='Click to play video' style='position:absolute; top:" + (player.model.height - 60) / 2 + "px; left:" + (player.model.width - 60) / 2 + "px; border:0;' /></a>"); 
    38                 player.model.domelement.prev("a").jwplayerCSS({ 
    39                         'display': 'block', 
    40                         'background': '#ffffff url(' + $.fn.jwplayerUtils.getAbsolutePath(player.model.config.image) + ') no-repeat center center', 
    41                         'width': player.model.width, 
    42                         'height': player.model.height, 
    43                         'position': 'relative', 
    44                         'left': 0, 
    45                         'top': 0, 
    46                         'z-index': 50 
    47                 }); 
    48                 player.model.domelement.prev("a").click(function(evt) { 
    49                         if (typeof evt.preventDefault != 'undefined') { 
    50                                 evt.preventDefault(); // W3C 
    51                         } else { 
    52                                 evt.returnValue = false; // IE 
    53                         } 
    54                         if (player.state() !== $.fn.jwplayer.states.PLAYING) { 
    55                                 player.play(); 
    56                         } else { 
    57                                 player.pause(); 
    58                         } 
    59                          
    60                 }); 
    61                 player.state(function(obj) { 
    62                         imageHandler(obj, player); 
     34                        'z-index': 0, 
     35                        margin: 'auto' 
    6336                }); 
    6437        }; 
    65          
    66         function imageHandler(obj, player) { 
    67                 switch (obj.newstate) { 
    68                         case $.fn.jwplayer.states.IDLE: 
    69                                 player.model.domelement.css("z-index", "0"); 
    70                                 player.model.domelement.prev("a").css("z-index", "50"); 
    71                                 break; 
    72                         case $.fn.jwplayer.states.PLAYING: 
    73                                 player.model.domelement.prev("a").css("z-index", "0"); 
    74                                 player.model.domelement.css("z-index", "50"); 
    75                                 break; 
    76                 } 
    77         } 
    7838         
    7939        $.fn.jwplayerView.switchMediaProvider = function() { 
Note: See TracChangeset for help on using the changeset viewer.