Ignore:
Timestamp:
10/09/12 22:13:28 (7 years ago)
Author:
kent1
Message:

Beaucoup de changements pour peu de nouvelles fonctionnalités mais :

  • On clean un peu le code en ajoutant un peu de commentaires
  • Sur de petites vidéos, l'évènement progress n'est appelé qu'au début, on utilise donc d'autres évènements pour remplir la barre de chargement tant que celle ci n'est pas à 100% (timeupdate,play)
  • On améliore un peu le mode fullscreen html5
  • On évite certaines variables

Il reste encore pas mal de code à cleaner/réorganiser mais bon

File:
1 edited

Legend:

Unmodified
Added
Removed
  • plugins_spip/html5/trunk/javascript/mediaspip_player.js

    r6853 r6988  
    8181        window.fullScreenApi = fullScreenApi;
    8282       
    83         var media_hover = false;
    84         var slider = false;
    85         var stop_message_timeout = false;
     83        var media_hover = false,
     84                slider = false,
     85                stop_message_timeout = false;
    8686       
    8787        /**
     
    9292         */
    9393        $.extend($.fn, {
    94                         mediaspip_player_init : function(options){
    95                         var defaults = {
    96                                         autoplay:false,
    97                                         autoload:true,
    98                                         minwidth : 300,
    99                                         movieSize : null,
    100                                         cookie_volume: false,
    101                                         messages: true,
    102                                         volume_slider_orientation: 'horizontal'
    103                                 };
    104                        
     94                mediaspip_player_init : function(options){
     95                        /**
     96                         * Si c'est iTruc, cela ne fonctionne pas => on sort direct et on laisse la balise html5 faire ce qu'elle peut
     97                         */
    10598                        if(isiPhone() || isiPad()){
    10699                                return;
    107100                        }
     101                       
     102                        var defaults = {
     103                                autoplay:false,
     104                                autoload:true,
     105                                minwidth : 300,
     106                                movieSize : null,
     107                                cookie_volume: false,
     108                                messages: true,
     109                                volume_slider_orientation: 'horizontal'
     110                        };
     111                       
    108112                        options = $.extend(defaults, options);
    109        
    110                         var id = $(this)[0];
    111                         var media = $(this);
    112                         var class_wrapper = '';
     113                        $(this)[0].options = options;
     114                       
     115                        var media = $(this),
     116                                id = $(this)[0],
     117                                class_wrapper = '';
     118                       
    113119                        if((typeof($.ui) == 'object') && (typeof($.ui.slider) == 'function')){
    114120                                id.slider = true;
     
    132138                                $(this).show();
    133139                        }
    134                         var playable = false;
    135                         var wrapper;
     140                        var playable = false,
     141                                wrapper = '';
    136142       
    137143                        if($(this).is('audio')){
     
    158164                                        media.mediaspip_test_fallback(options);
    159165                                }else{
    160                                         id.mediacanplay = false;
    161                                         id.isFullScreen = false;
    162                                         var styles = ' style="';
    163                                         var style = false;
     166                                        id.mediacanplay = id.isFullScreen = false;
     167                                        var styles = ' style="',
     168                                                style = false,
     169                                                control = null,
     170                                                bloc_messages = '';
     171                                       
    164172                                        if(options.width){
    165173                                                style = true;
     
    175183                                       
    176184                                        if(id.addcontrols){
    177                                                 var controls = '<div class="controls small">'
     185                                                controls = '<div class="controls small">'
    178186                                                        +'<div class="buttons_left">'
    179187                                                                +'<span class="play_pause_button" title="'+mediaspip_player_lang.bouton_loading+'"></span>'
     
    208216               
    209217                                                wrapper.append(controls);
    210                                                 var control = wrapper.find('.controls');
    211                                         }else{
    212                                                 var control = null;
     218                                                control = wrapper.find('.controls');
    213219                                        }
    214220                                        if(options.minwidth && $(this).width() > options.minwidth){
     
    218224                                        }
    219225                                       
    220                                         var bloc_messages = '';
    221226                                        if(wrapper.height() < 100)
    222227                                                options.messages = false;
     
    232237                                                        wrapper.height(img_height);
    233238                                                }else{
    234                                                         var img_width = media.prev().width();
    235                                                         var img_height = media.prev().height();
    236                                                         var ratio = options.minwidth / img_width;
     239                                                        var img_width = media.prev().width(),
     240                                                                img_height = media.prev().height(),
     241                                                                ratio = options.minwidth / img_width;
    237242                                                        wrapper.width(options.minwidth);
    238243                                                        wrapper.height(img_height*ratio);
     
    246251                                        }
    247252                                        if(control){
    248                                                 var elapsed_time = control.find('.elapsed_time');
    249                                                 var remaining_time = control.find('.remaining_time');
    250                                                 var progress_indicator = control.find('.progress_indicator');
    251                                                 var progress_elapse = control.find('.progress_elapsed_time');
     253                                                var elapsed_time = control.find('.elapsed_time'),
     254                                                        remaining_time = control.find('.remaining_time'),
     255                                                        progress_indicator = control.find('.progress_indicator'),
     256                                                        progress_elapse = control.find('.progress_elapsed_time');
    252257                                                media.mediaspip_resize_controls();
    253258                                        }
    254        
    255                                         id.addEventListener("canplay", function(e){
    256                                                 media.mediaspip_start(options,'canplay');
    257                                         }, true);
    258                                        
    259                                         document.addEventListener(fullScreenApi.fullScreenEventName, function(e){
    260                                                 if(id.isFullScreen && !fullScreenApi.isFullScreen()){
    261                                                         media.mediaspip_fullscreen(control);
    262                                                 }
    263                                                 media.mediaspip_resize_controls();
    264                                         }, true);
    265259                                       
    266260                                        id.addEventListener("loadedmetadata",function(e){
     
    282276       
    283277                                        id.addEventListener("timeupdate", function(e){
     278                                                if(control && id.percent_loaded && id.percent_loaded != 100){
     279                                                        media.mediaspip_update_loaded(e);
     280                                                }
    284281                                                var percent_time = mediaspip_anything_to_percent(id.currentTime,id.duration);
    285282                                                if(remaining_time.is('.remaining') && (id.duration != 'Infinity')){
     
    310307       
    311308                                        id.addEventListener("progress", function(e){
    312                                                 var percent_loaded = null;
    313                                                 if((typeof(e.loaded) != 'undefined') && (typeof(e.total) != 'undefined')){
    314                                                         percent_loaded = mediaspip_anything_to_percent(e.loaded,e.total);
    315                                                 }else if((typeof(id.buffered) != 'undefined') && (id.buffered.length > 0)){
    316                                                         percent_loaded = mediaspip_anything_to_percent(id.buffered.end(0),id.duration);
    317                                                 }
    318                                                 if(percent_loaded != null)
    319                                                         control.find('.progress_buffered').css('width',percent_loaded+'%');
    320                                         }, true);
    321        
     309                                                if(control)
     310                                                        media.mediaspip_update_loaded(e);
     311                                        },true);
     312                                       
     313                                        id.addEventListener("play", function(e){
     314                                                if(control && id.percent_loaded && id.percent_loaded != 100)
     315                                                        media.mediaspip_update_loaded(e);
     316                                        },true);
     317                                       
     318                                        id.addEventListener("loadeddata", function(e){
     319                                                if(control)
     320                                                        media.mediaspip_update_loaded(e);
     321                                        },true);
     322                                       
    322323                                        id.addEventListener("ended", function(e){
    323324                                                if(!id.islooping){
     
    335336                                        }, true);
    336337       
     338                                        document.addEventListener(fullScreenApi.fullScreenEventName, function(e){
     339                                                if(id.isFullScreen && !fullScreenApi.isFullScreen()){
     340                                                        media.mediaspip_fullscreen();
     341                                                }
     342                                                media.mediaspip_resize_controls();
     343                                        }, true);
     344                                       
    337345                                        media.click(function(){
    338346                                                media.mediaspip_play_pause(options);
     
    341349                                        media.dblclick(function(e){
    342350                                                e.preventDefault();
    343                                                 media.mediaspip_fullscreen(control);
     351                                                media.mediaspip_fullscreen();
    344352                                        });
    345353                                       
    346                                         var stop_timeout = false;
    347                                         var last_moved=0;
    348                                         var clientx = 0;
    349                                         var clienty = 0;
     354                                        var stop_timeout = false,
     355                                                last_moved=0,
     356                                                clientx = 0,
     357                                                clienty = 0;
     358                                       
    350359                                        wrapper.mousemove(function(e){
    351                                                 var now = e.timeStamp;
    352360                                                media_hover = $(this).find('audio,video');
    353361                                                if(id.isFullScreen && !id.paused){
    354                                                         if ((now - last_moved > 1000) && ((e.clientX != clientx) || (e.clientY != clienty))) {
     362                                                        if ((e.timeStamp - last_moved > 1000) && ((e.clientX != clientx) || (e.clientY != clienty))) {
    355363                                                                wrapper.addClass('hover');
    356364                                                                clearTimeout(stop_timeout);
     
    359367                                                                };
    360368                                                                stop_timeout = setTimeout(full_onmousestop, 1500);
    361                                                                 last_moved = now;
     369                                                                last_moved = e.timeStamp;
    362370                                                                clientx = e.clientX;
    363371                                                                clienty = e.clientY;
     
    388396               
    389397                                                control.find('.fullwindow_button').click(function(e){
    390                                                         media.mediaspip_fullscreen(control);
     398                                                        media.mediaspip_fullscreen();
    391399                                                });
    392400                                               
     
    447455                },
    448456                mediaspip_start : function(options,action){
    449                         var media = this;
    450                         var id = this.get(0);
    451                         var wrapper = media.parent();
    452                         var control = wrapper.find('.controls');
    453                         var elapsed_time = control.find('.elapsed_time');
    454                         var remaining_time = control.find('.remaining_time');
    455                         var progress_indicator = control.find('.progress_indicator');
    456                         var progress_elapse = control.find('.progress_elapsed_time');
     457                        var media = this,
     458                                id = this.get(0),
     459                                wrapper = media.parent(),
     460                                control = wrapper.find('.controls'),
     461                                elapsed_time = control.find('.elapsed_time'),
     462                                remaining_time = control.find('.remaining_time'),
     463                                progress_indicator = control.find('.progress_indicator'),
     464                                progress_elapse = control.find('.progress_elapsed_time');
    457465                       
    458466                        if(!id.mediacanplay){
     
    461469                                }
    462470                                id.mediacanplay = true;
    463                                 var width_container = media.width();
    464                                 var parent_width = wrapper.parent().width();
     471                                var width_container = media.width(),
     472                                        parent_width = wrapper.parent().width();
    465473                               
    466474                                if(id.videoHeight && id.videoWidth){
    467475                                        if(options.movieSize == 'adapt' && !id.isFullScreen && !media.hasClass('noresize')){
    468476                                                width_container = parent_width;
    469                                                 var ratio = (width_container/id.videoWidth);
    470                                                 var height_final = (id.videoHeight*ratio).toFixed();
     477                                                var ratio = (width_container/id.videoWidth),
     478                                                        height_final = (id.videoHeight*ratio).toFixed();
    471479                                                wrapper.add(media).animate({height:height_final+'px',width:width_container+'px'},500,function(){
    472480                                                        media.mediaspip_resize_controls();
     
    572580                },
    573581                mediaspip_play_pause : function(options){
    574                         var id = this;
    575                         if($(id)[0].mediacanplay && !$(id)[0].seeking){
    576                                 if($(id)[0].paused){
    577                                         id.parent('.media_wrapper').removeClass('paused');
    578                                         id.mediaspip_messages('play',mediaspip_player_lang.statut_play,options);
    579                                         id.parent('.media_wrapper').find('.play_pause_button').addClass('pause').attr('title',mediaspip_player_lang.bouton_pause);
     582                        if($(this)[0].mediacanplay && !$(this)[0].seeking){
     583                                if($(this)[0].paused){
     584                                        $(this).parent('.media_wrapper').removeClass('paused');
     585                                        $(this).mediaspip_messages('play',mediaspip_player_lang.statut_play,options);
     586                                        $(this).parent('.media_wrapper').find('.play_pause_button').addClass('pause').attr('title',mediaspip_player_lang.bouton_pause);
    580587                                        if(options.cookie_volume){
    581588                                                var volume_cookie = parseFloat($.cookie('mediaspip_volume'));
    582589                                                if((volume_cookie >= 0) && (volume_cookie <= 1)){
    583                                                         id[0].volume = volume_cookie;
     590                                                        $(this)[0].volume = volume_cookie;
    584591                                                }
    585592                                                if($.cookie('mediaspip_volume_muted') == 'muted'){
    586                                                         id[0].muted = true;
    587                                                 }
    588                                         }
    589                                         id[0].play();
    590                                 }else if ($(id)[0].ended){
    591                                         id.parent('.media_wrapper').removeClass('paused');
    592                                         id.parent('.media_wrapper').find('.play_pause_button').addClass('pause').attr('title',mediaspip_player_lang.bouton_pause);
    593                                         $(id)[0].currentTime = $(id)[0].startTime ? $(id)[0].startTime : '0';
     593                                                        $(this)[0].muted = true;
     594                                                }
     595                                        }
     596                                        $(this)[0].play();
     597                                }else if ($(this)[0].ended){
     598                                        $(this).parent('.media_wrapper').removeClass('paused');
     599                                        $(this).parent('.media_wrapper').find('.play_pause_button').addClass('pause').attr('title',mediaspip_player_lang.bouton_pause);
     600                                        $(this)[0].currentTime = $(this)[0].startTime ? $(this)[0].startTime : '0';
    594601                                        if(options.cookie_volume){
    595602                                                var volume_cookie = parseFloat($.cookie('mediaspip_volume'));
    596603                                                if((volume_cookie >= 0) && (volume_cookie <= 1)){
    597                                                         id[0].volume = volume_cookie;
     604                                                        $(this)[0].volume = volume_cookie;
    598605                                                }
    599606                                                if($.cookie('mediaspip_volume_muted') == 'muted'){
    600                                                         id[0].muted = true;
    601                                                 }
    602                                         }
    603                                         id[0].play();
     607                                                        $(this)[0].muted = true;
     608                                                }
     609                                        }
     610                                        $(this)[0].play();
    604611                                }else{
    605                                         id.parent('.media_wrapper').addClass('paused');
    606                                         id.mediaspip_messages('pause',mediaspip_player_lang.statut_pause,options);
    607                                         id.parent('.media_wrapper').find('.play_pause_button').removeClass('pause').attr('title',mediaspip_player_lang.bouton_lire);
    608                                         id[0].pause();
     612                                        $(this).parent('.media_wrapper').addClass('paused');
     613                                        $(this).mediaspip_messages('pause',mediaspip_player_lang.statut_pause,options);
     614                                        $(this).parent('.media_wrapper').find('.play_pause_button').removeClass('pause').attr('title',mediaspip_player_lang.bouton_lire);
     615                                        $(this)[0].pause();
    609616                                }
    610617                        }
     
    620627                mediaspip_volume : function(mute,options){
    621628                        if($(this)[0].mediacanplay){
    622                                 var id= $(this);
    623                                 var control = id.parent().find('.controls');
     629                                var control = $(this).parent().find('.controls');
    624630                                if(mute){
    625                                         if(id[0].muted){
    626                                                 id.mediaspip_messages('mute',mediaspip_player_lang.statut_unmute,options);
    627                                                 var volume_title = mediaspip_player_lang.bouton_volume+' ('+Math.floor(id[0].volume*100)+'%)';
     631                                        if($(this)[0].muted){
     632                                                $(this).mediaspip_messages('mute',mediaspip_player_lang.statut_unmute,options);
     633                                                var volume_title = mediaspip_player_lang.bouton_volume+' ('+Math.floor($(this)[0].volume*100)+'%)';
    628634                                                control.find('.volume_button').removeClass('muted').attr('title',volume_title);
    629                                                 id[0].muted = false;
    630                                                 if(id[0].slider && (typeof(id[0].slider_volume) == 'object')){
    631                                                         id[0].slider_volume.slider('value',(id[0].volume*100));
    632                                                         id[0].slider_volume.slider('enable');
     635                                                $(this)[0].muted = false;
     636                                                if($(this)[0].slider && (typeof($(this)[0].slider_volume) == 'object')){
     637                                                        $(this)[0].slider_volume.slider('value',($(this)[0].volume*100));
     638                                                        $(this)[0].slider_volume.slider('enable');
    633639                                                }
    634640                                                if(options.cookie_volume)
    635641                                                        $.cookie('mediaspip_volume_muted',null);
    636642                                        }else{
    637                                                 id.mediaspip_messages('mute',mediaspip_player_lang.statut_mute,options);
     643                                                $(this).mediaspip_messages('mute',mediaspip_player_lang.statut_mute,options);
    638644                                                control.find('.volume_button').addClass('muted').attr('title',mediaspip_player_lang.bouton_volume_muted);
    639                                                 id[0].muted = true;
    640                                                 if(id[0].slider && (typeof(id[0].slider_volume) == 'object'))
    641                                                         id[0].slider_volume.slider('disable');
     645                                                $(this)[0].muted = true;
     646                                                if($(this)[0].slider && (typeof($(this)[0].slider_volume) == 'object'))
     647                                                        $(this)[0].slider_volume.slider('disable');
    642648                                                if(options.cookie_volume)
    643649                                                        $.cookie('mediaspip_volume_muted','muted');
    644650                                        }
    645                                 }else if(!id[0].muted){
    646                                         var volume = id[0].volume;
    647                                         var sound_button = control.find('.volume_button');
    648                                         var class_remove = sound_button.attr('class').match('volume_button_[0-9]{1,3}');
     651                                }else if(!$(this)[0].muted){
     652                                        var volume = $(this)[0].volume,
     653                                                sound_button = control.find('.volume_button'),
     654                                                class_remove = sound_button.attr('class').match('volume_button_[0-9]{1,3}');
    649655                                        if((volume <= 0.66) && (volume > 0.33)){
    650656                                                if(class_remove != null)
     
    664670                                                sound_button.addClass('volume_button_0');
    665671                                        }
    666                                         var volume_title = mediaspip_player_lang.bouton_volume+' ('+Math.floor(id[0].volume*100)+'%)';
     672                                        var volume_title = mediaspip_player_lang.bouton_volume+' ('+Math.floor($(this)[0].volume*100)+'%)';
    667673                                        control.find('.volume_button').attr('title',volume_title);
    668                                         if(id[0].slider && (typeof(id[0].slider_volume) == 'object')){
    669                                                 id[0].slider_volume.slider('value',(id[0].volume*100));
    670                                                 id[0].slider_volume.slider('enable');
    671                                         }
    672                                         id.mediaspip_messages('volume',volume_title,options);
     674                                        if($(this)[0].slider && (typeof($(this)[0].slider_volume) == 'object')){
     675                                                $(this)[0].slider_volume.slider('value',($(this)[0].volume*100));
     676                                                $(this)[0].slider_volume.slider('enable');
     677                                        }
     678                                        $(this).mediaspip_messages('volume',volume_title,options);
    673679                                               
    674680                                        if(options.cookie_volume)
    675                                                 $.cookie('mediaspip_volume', id[0].volume);
     681                                                $.cookie('mediaspip_volume', $(this)[0].volume);
    676682                                }
    677683                        }
     
    685691                 */
    686692                mediaspip_seek_to : function(cursor_position,slider,options){
    687                         var id = $(this);
    688                         var was_playing = false;
    689                         if(!$(id)[0].paused){
     693                        var was_playing = false,
     694                                duration = $(this)[0].duration,
     695                                currenttime = $(this)[0].currentTime,
     696                                control = $(this).parent().find('.controls'),
     697                                progress = control.find('.progress_back'),
     698                                offset = progress.offset(),
     699                                width = cursor_position-offset.left,
     700                                width_total = progress.width(),
     701                                percent = Math.floor((width / width_total) * 100),
     702                                time = Math.floor((duration * percent) / 100),
     703                                time_affiche = mediaspip_second_to_time(time);
     704                       
     705                        if(!$(this)[0].paused){
    690706                                was_playing = true;
    691                                 $(id)[0].pause();
    692                         }
    693                         var duration = id[0].duration;
    694                         var currenttime = id[0].currentTime;
    695                         var control = id.parent().find('.controls');
    696                         var progress = control.find('.progress_back');
    697                         var offset = progress.offset();
    698                         width = cursor_position-offset.left;
    699                         var width_total = progress.width();
    700                         var percent = Math.floor((width / width_total) * 100);
     707                                $(this)[0].pause();
     708                        }
     709                       
    701710                        if(!slider){
    702711                                control.find('.progress_elapsed_time').css('width',percent+'%');
    703712                                control.find('.progress_indicator').css('left',percent+'%');
    704713                        }
    705                         var time = Math.floor((duration * percent) / 100);
    706                         id[0].currentTime = time;
    707714                       
    708                         var time_affiche = mediaspip_second_to_time(time);
     715                        $(this)[0].currentTime = time;
     716                       
    709717                        if(currenttime > time)
    710                                 id.mediaspip_messages('seek_back',mediaspip_player_lang.statut_seek_back+' '+time_affiche,options);
     718                                $(this).mediaspip_messages('seek_back',mediaspip_player_lang.statut_seek_back+' '+time_affiche,options);
    711719                        else
    712                                 id.mediaspip_messages('seek_to',mediaspip_player_lang.statut_seek_to+' '+time_affiche,options);
     720                                $(this).mediaspip_messages('seek_to',mediaspip_player_lang.statut_seek_to+' '+time_affiche,options);
    713721                        if(was_playing){
    714                                 $(id)[0].play();
     722                                $(this)[0].play();
    715723                        }
    716724                },
     
    727735                 */
    728736                mediaspip_seek_to_percent : function(percent,slider,options,update_slider){
    729                         var id = $(this);
    730                         var duration = id[0].duration;
    731                         var currenttime = id[0].currentTime;
     737                        var duration = $(this)[0].duration,
     738                                currenttime = $(this)[0].currentTime;
    732739                        if(((currenttime == duration) && (percent == 100)) || ((currenttime == 0) && (percent == 0))){
    733740                                return false;
     
    738745                                var time = Math.ceil((duration * percent) / 100);
    739746                               
    740                         id[0].currentTime = time;
     747                        $(this)[0].currentTime = time;
    741748                        var time_affiche = mediaspip_second_to_time(time);
    742749                        if(currenttime > time)
    743                                 id.mediaspip_messages('seek_back',mediaspip_player_lang.statut_seek_back+' '+time_affiche,options);
     750                                $(this).mediaspip_messages('seek_back',mediaspip_player_lang.statut_seek_back+' '+time_affiche,options);
    744751                        else
    745                                 id.mediaspip_messages('seek_to',mediaspip_player_lang.statut_seek_to+' '+time_affiche,options);
     752                                $(this).mediaspip_messages('seek_to',mediaspip_player_lang.statut_seek_to+' '+time_affiche,options);
    746753                        if(!slider){
    747                                 var control = id.parent().find('.controls');
     754                                var control = $(this).parent().find('.controls');
    748755                                control.find('.progress_elapsed_time').css('width',percent+'%');
    749756                                control.find('.progress_indicator').css('left',percent+'%');
    750757                        }else if(update_slider){
    751                                 id[0].slider_control.slider("value", percent);
     758                                $(this)[0].slider_control.slider("value", percent);
    752759                        }
    753760                },
     
    756763                 */
    757764                mediaspip_loop : function(options){
    758                         var media = $(this);
    759                         var id = $(this)[0];
    760765                        var container = $(this).parent();
    761                         if(!id.loop && !container.hasClass('loop')){
    762                                 media.attr('title',mediaspip_player_lang.bouton_loop_looped);
     766                        if(!$(this)[0].loop && !container.hasClass('loop')){
     767                                $(this).attr('title',mediaspip_player_lang.bouton_loop_looped);
    763768                                container.addClass('loop');
    764                                 media.mediaspip_messages('loop',mediaspip_player_lang.statut_loop,options);
    765                                 if (typeof id.loop == 'boolean') {
    766                                         id.loop = true;
     769                                $(this).mediaspip_messages('loop',mediaspip_player_lang.statut_loop,options);
     770                                if (typeof ($(this)[0]).loop == 'boolean') {
     771                                        $(this)[0].loop = true;
    767772                                }else {
    768                                         id.islooping = true;
     773                                        $(this)[0].islooping = true;
    769774                                }
    770775                        }else{
    771                                 media.attr('title',mediaspip_player_lang.bouton_loop);
     776                                $(this).attr('title',mediaspip_player_lang.bouton_loop);
    772777                                container.removeClass('loop');
    773778                                $(this).mediaspip_messages('unloop',mediaspip_player_lang.statut_unloop,options);
    774                                 if (typeof id.loop == 'boolean') {
    775                                         id.loop = true;
     779                                if (typeof($(this)[0].loop) == 'boolean') {
     780                                        $(this)[0].loop = true;
    776781                                }else {
    777                                         id.islooping = false;
    778                                 }
    779                                 media.removeAttr('loop');
     782                                        $(this)[0].islooping = false;
     783                                }
     784                                $(this).removeAttr('loop');
    780785                        }
    781786                },
    782                 mediaspip_fullscreen : function(control){
    783                         var media = $(this);
    784                         var id = media[0];
    785                         var container = $(this).parent();
    786                         var id_container = container.get(0);
    787                         if(id.mediacanplay){
    788                                 if(!id.isFullScreen){
    789                                         id.videoOrigWidth = media.width();
    790                                         id.videoOrigHeight = media.height();
     787                mediaspip_fullscreen : function(){
     788                        var container = $(this).parent(),
     789                                id_container = container[0];
     790                        if($(this)[0].mediacanplay){
     791                                if(!$(this)[0].isFullScreen){
     792                                        $(this)[0].isFullScreen = true;
     793                                        $(this)[0].videoOrigWidth = $(this).width();
     794                                        $(this)[0].videoOrigHeight = $(this).height();
    791795                                        id_container.origWidth = container.width();
    792796                                        id_container.origHeight = container.height();
    793797                                        if (fullScreenApi.supportsFullScreen) {
    794                                                 fullScreenApi.fullScreenEventName = fullScreenApi.prefix + 'fullscreenchange';
    795                                                 (fullScreenApi.prefix === '') ? container[0].requestFullScreen() : container[0][fullScreenApi.prefix + 'RequestFullScreen']();
    796                                                 media.mediaspip_fullscreen_resize();
    797                                                 media.mediaspip_resize_controls();
     798                                                $(this).mediaspip_fullscreen_resize();
    798799                                        }else{
    799800                                                $('body').css({'overflow' : 'hidden', '-moz-user-select' : 'none'});
    800                                                 media.mediaspip_fullscreen_resize();
     801                                                $(this).mediaspip_fullscreen_resize();
    801802                                                $(window).unbind('resize').resize(function(){
    802                                                         media.mediaspip_fullscreen_resize();
    803                                                         media.mediaspip_resize_controls();
    804                                                 });
    805                                         }
    806                                         id.isFullScreen = true;
    807                                         container.find('.controls').removeClass('small');
    808                                         container.addClass('media_wrapper_full');
    809                                         container.find('span.fullwindow_button').attr('title',mediaspip_player_lang.bouton_fullscreen_full);
     803                                                        $(this).mediaspip_fullscreen_resize();
     804                                                });
     805                                        }
    810806                                }else{
     807                                        $(this)[0].isFullScreen = false;
    811808                                        if (fullScreenApi.supportsFullScreen) {
    812809                                                (fullScreenApi.prefix === '') ? document.cancelFullScreen() : document[fullScreenApi.prefix + 'CancelFullScreen']();
    813                                         }
    814                                         container.bind('fullscreen_resize',function(){
    815                                                 $(this).removeClass('media_wrapper_full').animate({width:id_container.origWidth+'px',height:id_container.origHeight+'px',left:'0',top:'0'},500,function(){
    816                                                         media.mediaspip_resize_controls();
    817                                                 });
    818                                         });
    819                                         $(this).bind('fullscreen_resize',function(){
    820                                                 $(this).animate({width:id.videoOrigWidth+'px',height:id.videoOrigHeight+'px',left:'0',top:'0'},500,function(){
    821                                                         media.mediaspip_resize_controls();
    822                                                 });
    823                                         });
    824                                         $(window).unbind('resize');
    825                                         $('body').css({'overflow' : 'inherit', '-moz-user-select' : 'inherit'});
    826                                         width_orig = id.videoOrigWidth;
    827                                         height_orig = id.videoOrigHeight;
     810                                                container.bind('fullscreen_resize',function(){
     811                                                        container.css({width:id_container.origWidth,height:id_container.origHeight}).removeClass('media_wrapper_full');
     812                                                        $(this).mediaspip_resize_controls();
     813                                                });
     814                                        }else{
     815                                                container.bind('fullscreen_resize',function(){
     816                                                        container.removeClass('media_wrapper_full').animate({width:id_container.origWidth+'px',height:id_container.origHeight+'px',left:'0',top:'0'},500,function(){
     817                                                                $(this).mediaspip_resize_controls();
     818                                                        });
     819                                                });
     820                                                $(this).bind('fullscreen_resize',function(){
     821                                                        $(this).animate({width:$(this)[0].videoOrigWidth+'px',height:$(this)[0].videoOrigHeight+'px',left:'0',top:'0'},500,function(){
     822                                                                $(this).mediaspip_resize_controls();
     823                                                        });
     824                                                });
     825                                                $('body').css({'overflow' : 'inherit', '-moz-user-select' : 'inherit'});
     826                                                $(window).unbind('resize');
     827                                        }
    828828                                        container.add($(this)).trigger('fullscreen_resize').unbind('fullscreen_resize');
    829                                         container.removeClass('media_wrapper_full');
    830829                                        container.find('.controls').addClass('small');
    831830                                        container.find('span.fullwindow_button').attr('title',mediaspip_player_lang.bouton_fullscreen);
    832                                         media.mediaspip_resize_controls();
    833                                         id.isFullScreen = false;
    834831                                }
    835832                        }
    836833                },
    837834                mediaspip_fullscreen_resize : function(){
    838                         var media = $(this);
    839                         var id = media.get(0);
    840835                        var container = $(this).parent();
    841836                        var id_container = container.get(0);
     
    843838                    var window_height = window.innerHeight;
    844839       
    845                     var ratio = (window_height/id.videoHeight);
    846                         var width_final = (id.videoWidth*ratio).toFixed();
    847        
    848                         container.css({width:'100%',height:'100%',left:'0',top:'0'});
    849        
     840                    var ratio = (window_height/$(this)[0].videoHeight);
     841                        var width_final = ($(this)[0].videoWidth*ratio).toFixed();
     842       
     843                        container.find('span.fullwindow_button').attr('title',mediaspip_player_lang.bouton_fullscreen_full);
     844                       
    850845                        if (fullScreenApi.supportsFullScreen) {
     846                                container.css({width:'100%',height:'100%'}).addClass('media_wrapper_full').find('.controls').removeClass('small');
    851847                                $(this).css({width:'100%',height:'100%'});
     848                                (fullScreenApi.prefix === '') ? id_container.requestFullScreen() : id_container[fullScreenApi.prefix + 'RequestFullScreen']();
     849                                $(this).mediaspip_resize_controls();
    852850                        }else{
     851                                container.css({width:'100%',height:'100%',left:'0',top:'0'}).addClass('media_wrapper_full').find('.controls').removeClass('small');
    853852                                if(width_final > window_width){
    854                                         var ratio = (window_width/id.videoWidth);
    855                                         var height_final = (id.videoHeight*ratio).toFixed();
     853                                        var ratio = (window_width/$(this)[0].videoWidth);
     854                                        var height_final = ($(this)[0].videoHeight*ratio).toFixed();
    856855                                        var top = ((window_height-height_final)/2).toFixed();
    857856                                        $(this).css({position:'absolute',width:window_width+'px',height:height_final+'px',top:top+'px',left:'0'});
     
    860859                                        $(this).css({position:'auto',width:width_final+'px',height:window_height+'px',left:left+'px',top:'0'});
    861860                                }
     861                                media.mediaspip_resize_controls();
    862862                        }
    863863                },
     
    878878                 * - Moins la largeur de l'indication de temps restant (inclus ses margins, padding et bordures droite et gauche)
    879879                 */
    880                 mediaspip_resize_controls : function(){
    881                         var media = $(this);
    882                         var control = media.parent().find('.controls');
     880                mediaspip_resize_controls : function(force){
     881                        var control = $(this).parent().find('.controls');
    883882                        var width = control.width();
    884883                        var play_width = control.find('.buttons_left').outerWidth()+parseFloat(control.find('.buttons_left').css('margin-left'))+parseFloat(control.find('.buttons_left').css('margin-right'));
     
    890889                        var elapsed_width = control.find(".elapsed_time").outerWidth()+parseFloat(control.find('.elapsed_time').css('margin-left'))+parseFloat(control.find('.elapsed_time').css('margin-right'));
    891890                        var progressback_width = progresswidth - elapsed_width - remaining_width - parseFloat(control.find('.progress_back').css('border-left-width')) - parseFloat(control.find('.progress_back').css('border-right-width'))-parseFloat(control.find('.progress_back').css('margin-right')) - parseFloat(control.find('.progress_back').css('margin-left')) - parseFloat(control.find('.progress_back').css('padding-right')) - parseFloat(control.find('.progress_back').css('padding-left'))-2;
    892                         control.find('.progress_back').width(progressback_width);
     891                        if(progressback_width < 0 && !force){
     892                                if($(this)[0].slider && (typeof($(this)[0].slider_volume) == 'object')){
     893                                        $(this)[0].slider_volume.slider('option',{'orientation':'vertical'});
     894                                        control.find('.volume_slider_container').removeClass('horizontal').addClass('vertical');
     895                                }
     896                                $(this).mediaspip_resize_controls(true);
     897                        }else{
     898                                control.find('.progress_back').width(progressback_width);
     899                        }
    893900                },
    894901                /**
     
    896903                 */
    897904                mediaspip_messages : function(type,message,options){
    898                         if(!options.messages)
    899                                 return;
     905                        if(!options.messages) return;
    900906                        if($(this).is('.media_wrapper')){
    901907                                var messages = $(this).find('.messages');
     
    928934                mediaspip_test_fallback : function(options){
    929935                        if(typeof($.fn.mediaspip_fallback_flash) == 'function'){
    930                                 var id = $(this);
    931936                                if(jQuery.browser.msie){
    932                                         var sources = id.parent().children("source");
     937                                        var sources = $(this).parent().children("source");
    933938                                }else{
    934                                         var sources = id.children("source");
     939                                        var sources = $(this).children("source");
    935940                                }
    936941                                $.each(sources, function(index, value){
    937942                                        if(($(this).attr('type').match('video/x-flv'))||($(this).attr('type').match('video/mp4'))||($(this).attr('type').match('audio/mpeg'))){
    938                                                 id.parent('div').mediaspip_fallback_flash({
     943                                                $(this).parent('div').mediaspip_fallback_flash({
    939944                                                        flowurl:options.flowurl,
    940945                                                        flasherror:options.flasherror?options.flasherror:'',
     
    942947                                                        autoload:options.autoload,
    943948                                                        wmode : 'transparent',
    944                                                         width : id.attr('width'),
    945                                                         height : id.attr('height')?id.attr('height'):id.parent().height(),
    946                                                         poster : id.attr('poster'),
     949                                                        width : $(this).attr('width'),
     950                                                        height : $(this).attr('height')?$(this).attr('height'):$(this).parent().height(),
     951                                                        poster : $(this).attr('poster'),
    947952                                                        sources : $(this)
    948953                                                });
     
    953958                                        }
    954959                                });
     960                        }
     961                },
     962                mediaspip_update_loaded : function(e){
     963                        var percent_loaded = null;
     964                        if($(this)[0].buffered && $(this)[0].buffered.length){
     965                                percent_loaded = mediaspip_anything_to_percent($(this)[0].buffered.end(0),$(this)[0].duration);
     966                        }
     967                        else if((typeof(e.loaded) != 'undefined') && (typeof(e.total) != 'undefined')){
     968                                percent_loaded = mediaspip_anything_to_percent(e.loaded,e.total);
     969                        }
     970                        if(percent_loaded != null){
     971                                $(this)[0].percent_loaded = percent_loaded;
     972                                $(this).parent().find('.progress_buffered').css('width',percent_loaded+'%');
    955973                        }
    956974                }
     
    970988            if (e.keyCode == 27) {
    971989                $('video').each(function(){
    972                         if($(this)[0].isFullScreen){
    973                                 e.preventDefault();
    974                                 $(this).mediaspip_fullscreen($(this).parent().find('.controls'));
    975                                 return false;
     990                        if (!fullScreenApi.supportsFullScreen) {
     991                                if($(this)[0].isFullScreen){
     992                                        e.preventDefault();
     993                                        $(this).mediaspip_fullscreen();
     994                                        return false;
     995                                }
    976996                        }
     997                        return false;
    977998                });
    978999            }
     
    9851006                $('video').each(function(){
    9861007                        if(!$(this)[0].isFullScreen && (($('input:focus,textarea:focus').size() == 0) && (!$(this)[0].paused && !$(this)[0].ended))){
    987                                 $(this).mediaspip_fullscreen($(this).parent().find('.controls'));
     1008                                $(this).mediaspip_fullscreen();
    9881009                                return;
    9891010                        }
     
    11451166}
    11461167
     1168/**
     1169 * Fonction pour savoir si le navigateur est un iPhone
     1170 * @returns boolean true/false
     1171 */
    11471172function isiPhone() {
    11481173    var agent = navigator.userAgent.toLowerCase();
    11491174    return agent.match(/iPhone/i);
    11501175}
     1176
     1177/**
     1178 * Fonction pour savoir si le navigateur est un iPad
     1179 * @returns boolean true/false
     1180 */
    11511181function isiPad(){
    11521182        var agent = navigator.userAgent.toLowerCase();
Note: See TracChangeset for help on using the changeset viewer.