Changeset 104184 in spip-zone


Ignore:
Timestamp:
May 5, 2017, 9:04:25 AM (2 years ago)
Author:
cedric@…
Message:

Fix plusieurs playliste dans la meme page : le js d'init echouait dans l'init des 2e et suivantes playlistes du fait d'une erreur de conception
On refactore en mettant en commun la fonction d'init qui est rappelee apres chaque getScript d'un plugin et tente a chaque fois d'initialiser tous les players qui le peuvent

Location:
_plugins_/player/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/player/trunk/javascript/mejs-init.js

    r96816 r104184  
    33        var L=mejsloader;
    44        if (typeof L == "undefined")
    5                 mejsloader = L = {gs:null,plug:{},css:{},init:null,c:0,cssload:null};
     5                mejsloader = L = {gs:null,plug:{},css:{},init:null,c:0,cssload:null,to_run:{}};
    66        if (!L.init){
    77                L.cssload = function (f){
     
    1313                                stylesheet.type = 'text/css';
    1414                                document.getElementsByTagName('head')[0].appendChild(stylesheet);
     15                        }
     16                }
     17                L.runplayers = function(infos){
     18                        if (infos) {
     19                                L.to_run[infos.id] = infos;
     20                                L.to_run[infos.id].cssLoaded = false;
     21                                L.to_run[infos.id].toRun = true;
     22                                //console.log(L.to_run);
     23                        }
     24                        for (var id in L.to_run){
     25                                var opt = L.to_run[id];
     26                                var run = L.to_run[id].toRun;
     27                                //console.log(id);
     28                                //console.log(opt);
     29                                if (!L.to_run[id].cssLoaded) {
     30                                        for (var c in opt.css){
     31                                                L.cssload(opt.css[c]);
     32                                        }
     33                                        L.to_run[id].cssLoaded = true;
     34                                }
     35                                for (var p in opt.plugins){
     36                                        //console.log(p);
     37                                        //console.log(L.plug[p]);
     38                                        // load this plugin
     39                                        if (typeof L.plug[p]=="undefined"){
     40                                                //console.log("Load Plugin "+p);
     41                                                run = false;
     42                                                L.plug[p] = false;
     43                                                jQuery.getScript(opt.plugins[p], function (){
     44                                                        L.plug[p] = true;
     45                                                        L.runplayers(false);
     46                                                });
     47                                        }
     48                                        // this plugin is loading
     49                                        else if (L.plug[p]==false){
     50                                                //console.log("Plugin "+p+" loading...");
     51                                                run = false; // will be run on next call of runplayer
     52                                        }
     53                                        else {
     54                                                //console.log("Plugin "+p+" loaded");
     55                                        }
     56                                }
     57                                if (run){
     58                                        mejs.MediaFeatures.isChromium = false; // bugfix Chromium : can now play mpx sound files
     59                                        new MediaElementPlayer('#'+id, jQuery.extend(opt.options, {
     60                                                "success": function (media){
     61                                                        function togglePlayingState(){
     62                                                                jQuery(media).closest('.mejs-inner').removeClass(media.paused ? 'playing' : 'paused').addClass(media.paused ? 'paused' : 'playing');
     63                                                        }
     64
     65                                                        togglePlayingState();
     66                                                        media.addEventListener('play', togglePlayingState, false);
     67                                                        media.addEventListener('playing', togglePlayingState, false);
     68                                                        media.addEventListener('pause', togglePlayingState, false);
     69                                                        media.addEventListener('paused', togglePlayingState, false);
     70                                                        if (jQuery('#'+id).attr('autoplay')) media.play();
     71                                                }
     72                                        }));
     73                                        L.to_run[id].toRun = false;
     74                                }
    1575                        }
    1676                }
     
    2686                                                me.attr('id', id);
    2787                                        }
    28                                         var opt = {options: {}, plugins: {}, css: []}, i, v;
     88                                        var opt = {id:id, options: {}, plugins: {}, css: []}, i, v;
    2989                                        for (i in opt){
    3090                                                if (v = me.attr('data-mejs'+i)) opt[i] = jQuery.parseJSON(v);
    3191                                        }
    32                                         function runthisplayer(){
    33                                                 var run = true;
    34                                                 //console.log(css);
    35                                                 for (var c in opt.css){
    36                                                         L.cssload(opt.css[c]);
    37                                                 }
    38                                                 for (var p in opt.plugins){
    39                                                         //console.log(p);
    40                                                         //console.log(L.plug[p]);
    41                                                         // load this plugin
    42                                                         if (typeof L.plug[p]=="undefined"){
    43                                                                 //console.log("Load Plugin "+p);
    44                                                                 run = false;
    45                                                                 L.plug[p] = false;
    46                                                                 jQuery.getScript(opt.plugins[p], function (){
    47                                                                         L.plug[p] = true;
    48                                                                         runthisplayer();
    49                                                                 });
    50                                                         }
    51                                                         // this plugin is loading
    52                                                         else if (L.plug[p]==false){
    53                                                                 //console.log("Plugin "+p+" loading...");
    54                                                                 run = false;
    55                                                         }
    56                                                         else {
    57                                                                 //console.log("Plugin "+p+" loaded");
    58                                                         }
    59                                                 }
    60                                                 if (run){
    61                                                         mejs.MediaFeatures.isChromium = false; // bugfix Chromium : can now play mpx sound files
    62                                                         new MediaElementPlayer('#'+id, jQuery.extend(opt.options, {
    63                                                                 "success": function (media){
    64                                                                         function togglePlayingState(){
    65                                                                                 jQuery(media).closest('.mejs-inner').removeClass(media.paused ? 'playing' : 'paused').addClass(media.paused ? 'paused' : 'playing');
    66                                                                         }
    6792
    68                                                                         togglePlayingState();
    69                                                                         media.addEventListener('play', togglePlayingState, false);
    70                                                                         media.addEventListener('playing', togglePlayingState, false);
    71                                                                         media.addEventListener('pause', togglePlayingState, false);
    72                                                                         media.addEventListener('paused', togglePlayingState, false);
    73                                                                         if (me.attr('autoplay')) media.play();
    74                                                                 }
    75                                                         }));
    76                                                 }
    77                                         }
    78 
    79                                         runthisplayer();
     93                                        L.runplayers(opt);
    8094                                })
    8195                        })(jQuery);
  • _plugins_/player/trunk/javascript/mejs-init.min.js

    r96816 r104184  
    11var mejsloader;
    2 (function(){var a=mejsloader;"undefined"==typeof a&&(mejsloader=a={gs:null,plug:{},css:{},init:null,c:0,cssload:null});a.init||(a.cssload=function(b){if("undefined"==typeof a.css[b]){a.css[b]=!0;var c=document.createElement("link");c.href=b;c.rel="stylesheet";c.type="text/css";document.getElementsByTagName("head")[0].appendChild(c)}},a.init=function(){!0===a.gs&&function(b){jQuery("audio.mejs,video.mejs").not(".done").each(function(){function c(){var e=!0,h;for(h in d.css)a.cssload(d.css[h]);for(var f in d.plugins)"undefined"==
    3 typeof a.plug[f]?(e=!1,a.plug[f]=!1,jQuery.getScript(d.plugins[f],function(){a.plug[f]=!0;c()})):0==a.plug[f]&&(e=!1);e&&(mejs.MediaFeatures.isChromium=!1,new MediaElementPlayer("#"+b,jQuery.extend(d.options,{success:function(a){function b(){jQuery(a).closest(".mejs-inner").removeClass(a.paused?"playing":"paused").addClass(a.paused?"paused":"playing")}b();a.addEventListener("play",b,!1);a.addEventListener("playing",b,!1);a.addEventListener("pause",b,!1);a.addEventListener("paused",b,!1);g.attr("autoplay")&&
    4 a.play()}})))}var g=jQuery(this).addClass("done"),b;(b=g.attr("id"))||(b="mejs-"+g.attr("data-id")+"-"+a.c++,g.attr("id",b));var d={options:{},plugins:{},css:[]},e,h;for(e in d)if(h=g.attr("data-mejs"+e))d[e]=jQuery.parseJSON(h);c()})}(jQuery)});a.gs||("undefined"!==typeof mejscss&&a.cssload(mejscss),a.gs=jQuery.getScript(mejspath,function(){a.gs=!0;a.init();jQuery(a.init);onAjaxLoad(a.init)}))})();
     2(function(){var a=mejsloader;"undefined"==typeof a&&(mejsloader=a={gs:null,plug:{},css:{},init:null,c:0,cssload:null,to_run:{}});a.init||(a.cssload=function(b){if("undefined"==typeof a.css[b]){a.css[b]=!0;var c=document.createElement("link");c.href=b;c.rel="stylesheet";c.type="text/css";document.getElementsByTagName("head")[0].appendChild(c)}},a.runplayers=function(b){b&&(a.to_run[b.id]=b,a.to_run[b.id].cssLoaded=!1,a.to_run[b.id].toRun=!0);for(var c in a.to_run){b=a.to_run[c];var d=a.to_run[c].toRun;
     3if(!a.to_run[c].cssLoaded){for(var f in b.css)a.cssload(b.css[f]);a.to_run[c].cssLoaded=!0}for(var e in b.plugins)"undefined"==typeof a.plug[e]?(d=!1,a.plug[e]=!1,jQuery.getScript(b.plugins[e],function(){a.plug[e]=!0;a.runplayers(!1)})):0==a.plug[e]&&(d=!1);d&&(mejs.MediaFeatures.isChromium=!1,new MediaElementPlayer("#"+c,jQuery.extend(b.options,{success:function(a){function b(){jQuery(a).closest(".mejs-inner").removeClass(a.paused?"playing":"paused").addClass(a.paused?"paused":"playing")}b();a.addEventListener("play",
     4b,!1);a.addEventListener("playing",b,!1);a.addEventListener("pause",b,!1);a.addEventListener("paused",b,!1);jQuery("#"+c).attr("autoplay")&&a.play()}})),a.to_run[c].toRun=!1)}},a.init=function(){!0===a.gs&&function(b){jQuery("audio.mejs,video.mejs").not(".done").each(function(){var b=jQuery(this).addClass("done"),d;(d=b.attr("id"))||(d="mejs-"+b.attr("data-id")+"-"+a.c++,b.attr("id",d));d={id:d,options:{},plugins:{},css:[]};var f,e;for(f in d)if(e=b.attr("data-mejs"+f))d[f]=jQuery.parseJSON(e);a.runplayers(d)})}(jQuery)});
     5a.gs||("undefined"!==typeof mejscss&&a.cssload(mejscss),a.gs=jQuery.getScript(mejspath,function(){a.gs=!0;a.init();jQuery(a.init);onAjaxLoad(a.init)}))})();
  • _plugins_/player/trunk/paquet.xml

    r103720 r104184  
    22        prefix="player"
    33        categorie="multimedia"
    4         version="2.7.9"
     4        version="2.8.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.