Make WordPress Core

Ticket #30281: wp-4.1-monkeypatch.diff

File wp-4.1-monkeypatch.diff, 18.9 KB (added by wonderboymusic, 10 years ago)
  • Gruntfile.js

    diff --git Gruntfile.js Gruntfile.js
    index 5b81dc7..cbbacf3 100644
    module.exports = function(grunt) { 
    177177    grunt.registerTask('default', ['concat', 'removelogging', 'uglify', 'cssmin', 'copy',
    178178        'shell:buildFlash', 'replace:cdnBuild', 'shell:buildFlashCDN', 'clean:temp']);
    179179
     180    grunt.registerTask('noflash', ['concat', 'removelogging', 'uglify', 'cssmin', 'copy', 'clean:temp']);
     181
    180182};
     183 No newline at end of file
  • src/js/me-shim.js

    diff --git src/js/me-shim.js src/js/me-shim.js
    index 56510f6..b3f0c8f 100644
    mejs.MediaPluginBridge = { 
    3131                                        pluginMediaElement.pluginApi = pluginMediaElement.pluginElement.Content.MediaElementJS;
    3232                                        break;
    3333                        }
    34        
     34
    3535                        if (pluginMediaElement.pluginApi != null && pluginMediaElement.success) {
    3636                                pluginMediaElement.success(pluginMediaElement, htmlMediaElement);
    3737                        }
    mejs.MediaPluginBridge = { 
    5151                if(!pluginMediaElement){
    5252            return;
    5353        }
    54        
     54
    5555                // fake event object to mimic real HTML media event.
    5656                e = {
    5757                        type: eventName,
    mejs.MediaElementDefaults = { 
    123123        // overrides <video height>
    124124        pluginHeight: -1,
    125125        // additional plugin variables in 'key=value' form
    126         pluginVars: [], 
     126        pluginVars: [],
    127127        // rate in milliseconds for Flash and Silverlight to fire the timeupdate event
    128128        // larger number is less accurate, but less strain on plugin->JavaScript bridge
    129129        timerRate: 250,
    mejs.HtmlMediaElementShim = { 
    164164                }
    165165
    166166                // clean up attributes
    167                 src =           (typeof src == 'undefined'      || src === null || src == '') ? null : src;             
     167                src =           (typeof src == 'undefined'      || src === null || src == '') ? null : src;
    168168                poster =        (typeof poster == 'undefined'   || poster === null) ? '' : poster;
    169169                preload =       (typeof preload == 'undefined'  || preload === null || preload === 'false') ? 'none' : preload;
    170170                autoplay =      !(typeof autoplay == 'undefined' || autoplay === null || autoplay === 'false');
    mejs.HtmlMediaElementShim = { 
    182182                                        htmlMediaElement.play();
    183183                                }, false);
    184184                        }
    185                
     185
    186186                        // add methods to native HTMLMediaElement
    187187                        return this.updateNative(playback, options, autoplay, preload);
    188188                } else if (playback.method !== '') {
    189189                        // create plugin to mimic HTMLMediaElement
    190                        
     190
    191191                        return this.createPlugin( playback,  options, poster, autoplay, preload, controls);
    192192                } else {
    193193                        // boo, no HTML5, no Flash, no Silverlight.
    194194                        this.createErrorMessage( playback, options, poster );
    195                        
     195
    196196                        return this;
    197197                }
    198198        },
    199        
     199
    200200        determinePlayback: function(htmlMediaElement, options, supportsMediaTag, isMediaTag, src) {
    201201                var
    202202                        mediaFiles = [],
    mejs.HtmlMediaElementShim = { 
    212212                        pluginInfo,
    213213                        dummy,
    214214                        media;
    215                        
     215
    216216                // STEP 1: Get URL and type from <video src> or <source src>
    217217
    218218                // supplied type overrides <video type> and <source type>
    219219                if (typeof options.type != 'undefined' && options.type !== '') {
    220                        
     220
    221221                        // accept either string or array of types
    222222                        if (typeof options.type == 'string') {
    223223                                mediaFiles.push({type:options.type, url:src});
    224224                        } else {
    225                                
     225
    226226                                for (i=0; i<options.type.length; i++) {
    227227                                        mediaFiles.push({type:options.type[i], url:src});
    228228                                }
    mejs.HtmlMediaElementShim = { 
    249249                                }
    250250                        }
    251251                }
    252                
     252
    253253                // in the case of dynamicly created players
    254254                // check for audio types
    255255                if (!isMediaTag && mediaFiles.length > 0 && mediaFiles[0].url !== null && this.getTypeFromFile(mediaFiles[0].url).indexOf('audio') > -1) {
    256256                        result.isVideo = false;
    257257                }
    258                
     258
    259259
    260260                // STEP 2: Test for playback method
    261                
     261
    262262                // special case for Android which sadly doesn't implement the canPlayType function (always returns '')
    263263                if (mejs.MediaFeatures.isBustedAndroid) {
    264264                        htmlMediaElement.canPlayType = function(type) {
    265265                                return (type.match(/video\/(mp4|m4v)/gi) !== null) ? 'maybe' : '';
    266266                        };
    267                 }               
    268                
    269                 // special case for Chromium to specify natively supported video codecs (i.e. WebM and Theora)
    270                 if (mejs.MediaFeatures.isChromium) {
    271                         htmlMediaElement.canPlayType = function(type) {
    272                                 return (type.match(/video\/(webm|ogv|ogg)/gi) !== null) ? 'maybe' : '';
    273                         };
    274267                }
    275268
     269                // special case for Chromium to specify natively supported video codecs (i.e. WebM and Theora)
     270                //if (mejs.MediaFeatures.isChromium) {
     271                //      htmlMediaElement.canPlayType = function(type) {
     272                //              return (type.match(/video\/(webm|ogv|ogg)/gi) !== null) ? 'maybe' : '';
     273                //      };
     274                //}
     275
    276276                // test for native playback first
    277277                if (supportsMediaTag && (options.mode === 'auto' || options.mode === 'auto_plugin' || options.mode === 'native')  && !(mejs.MediaFeatures.isBustedNativeHTTPS && options.httpsBasicAuthSite === true)) {
    278                                                
     278
    279279                        if (!isMediaTag) {
    280280
    281                                 // create a real HTML5 Media Element 
    282                                 dummy = document.createElement( result.isVideo ? 'video' : 'audio');                   
     281                                // create a real HTML5 Media Element
     282                                dummy = document.createElement( result.isVideo ? 'video' : 'audio');
    283283                                htmlMediaElement.parentNode.insertBefore(dummy, htmlMediaElement);
    284284                                htmlMediaElement.style.display = 'none';
    285                                
     285
    286286                                // use this one from now on
    287287                                result.htmlMediaElement = htmlMediaElement = dummy;
    288288                        }
    289                                
     289
    290290                        for (i=0; i<mediaFiles.length; i++) {
    291291                                // normal check
    292292                                if (mediaFiles[i].type == "video/m3u8" || htmlMediaElement.canPlayType(mediaFiles[i].type).replace(/no/, '') !== ''
    mejs.HtmlMediaElementShim = { 
    298298                                        result.url = mediaFiles[i].url;
    299299                                        break;
    300300                                }
    301                         }                       
    302                        
     301                        }
     302
    303303                        if (result.method === 'native') {
    304304                                if (result.url !== null) {
    305305                                        htmlMediaElement.src = result.url;
    306306                                }
    307                        
     307
    308308                                // if `auto_plugin` mode, then cache the native result but try plugins.
    309309                                if (options.mode !== 'auto_plugin') {
    310310                                        return result;
    mejs.HtmlMediaElementShim = { 
    321321                                for (j=0; j<options.plugins.length; j++) {
    322322
    323323                                        pluginName = options.plugins[j];
    324                        
     324
    325325                                        // test version of plugin (for future features)
    326                                         pluginVersions = mejs.plugins[pluginName];                             
    327                                        
     326                                        pluginVersions = mejs.plugins[pluginName];
     327
    328328                                        for (k=0; k<pluginVersions.length; k++) {
    329329                                                pluginInfo = pluginVersions[k];
    330                                        
     330
    331331                                                // test if user has the correct plugin version
    332                                                
     332
    333333                                                // for youtube/vimeo
    334                                                 if (pluginInfo.version == null || 
    335                                                        
     334                                                if (pluginInfo.version == null ||
     335
    336336                                                        mejs.PluginDetector.hasPluginVersion(pluginName, pluginInfo.version)) {
    337337
    338338                                                        // test for plugin playback types
    mejs.HtmlMediaElementShim = { 
    349349                                }
    350350                        }
    351351                }
    352                
     352
    353353                // at this point, being in 'auto_plugin' mode implies that we tried plugins but failed.
    354354                // if we have native support then return that.
    355355                if (options.mode === 'auto_plugin' && result.method === 'native') {
    mejs.HtmlMediaElementShim = { 
    368368                var ext;
    369369
    370370                // if no type is supplied, fake it with the extension
    371                 if (url && !type) {             
     371                if (url && !type) {
    372372                        return this.getTypeFromFile(url);
    373373                } else {
    374374                        // only return the mime part of the type in case the attribute contains the codec
    375375                        // see http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#the-source-element
    376376                        // `video/mp4; codecs="avc1.42E01E, mp4a.40.2"` becomes `video/mp4`
    377                        
     377
    378378                        if (type && ~type.indexOf(';')) {
    379                                 return type.substr(0, type.indexOf(';')); 
     379                                return type.substr(0, type.indexOf(';'));
    380380                        } else {
    381381                                return type;
    382382                        }
    383383                }
    384384        },
    385        
     385
    386386        getTypeFromFile: function(url) {
    387387                url = url.split('?')[0];
    388388                var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase();
    389389                return (/(mp4|m4v|ogg|ogv|m3u8|webm|webmv|flv|wmv|mpeg|mov)/gi.test(ext) ? 'video' : 'audio') + '/' + this.getTypeFromExtension(ext);
    390390        },
    391        
     391
    392392        getTypeFromExtension: function(ext) {
    393                
     393
    394394                switch (ext) {
    395395                        case 'mp4':
    396396                        case 'm4v':
    mejs.HtmlMediaElementShim = { 
    398398                                return 'mp4';
    399399                        case 'webm':
    400400                        case 'webma':
    401                         case 'webmv':   
     401                        case 'webmv':
    402402                                return 'webm';
    403403                        case 'ogg':
    404404                        case 'oga':
    405                         case 'ogv':     
     405                        case 'ogv':
    406406                                return 'ogg';
    407407                        default:
    408408                                return ext;
    mejs.HtmlMediaElementShim = { 
    410410        },
    411411
    412412        createErrorMessage: function(playback, options, poster) {
    413                 var 
     413                var
    414414                        htmlMediaElement = playback.htmlMediaElement,
    415415                        errorContainer = document.createElement('div');
    416                        
     416
    417417                errorContainer.className = 'me-cannotplay';
    418418
    419419                try {
    mejs.HtmlMediaElementShim = { 
    436436        },
    437437
    438438        createPlugin:function(playback, options, poster, autoplay, preload, controls) {
    439                 var 
     439                var
    440440                        htmlMediaElement = playback.htmlMediaElement,
    441441                        width = 1,
    442442                        height = 1,
    mejs.HtmlMediaElementShim = { 
    471471                if (playback.isVideo) {
    472472                        width = (options.pluginWidth > 0) ? options.pluginWidth : (options.videoWidth > 0) ? options.videoWidth : (htmlMediaElement.getAttribute('width') !== null) ? htmlMediaElement.getAttribute('width') : options.defaultVideoWidth;
    473473                        height = (options.pluginHeight > 0) ? options.pluginHeight : (options.videoHeight > 0) ? options.videoHeight : (htmlMediaElement.getAttribute('height') !== null) ? htmlMediaElement.getAttribute('height') : options.defaultVideoHeight;
    474                
     474
    475475                        // in case of '%' make sure it's encoded
    476476                        width = mejs.Utility.encodeUrl(width);
    477477                        height = mejs.Utility.encodeUrl(height);
    478                
     478
    479479                } else {
    480480                        if (options.enablePluginDebug) {
    481481                                width = 320;
    mejs.HtmlMediaElementShim = { 
    490490                // add container (must be added to DOM before inserting HTML for IE)
    491491                container.className = 'me-plugin';
    492492                container.id = pluginid + '_container';
    493                
     493
    494494                if (playback.isVideo) {
    495495                                htmlMediaElement.parentNode.insertBefore(container, htmlMediaElement);
    496496                } else {
    mejs.HtmlMediaElementShim = { 
    531531                }
    532532                if (options.pluginVars) {
    533533                        initVars = initVars.concat(options.pluginVars);
    534                 }               
     534                }
    535535
    536536                switch (playback.method) {
    537537                        case 'silverlight':
    mejs.HtmlMediaElementShim = { 
    561561'<param name="wmode" value="transparent" />' +
    562562'<param name="allowScriptAccess" value="always" />' +
    563563'<param name="allowFullScreen" value="true" />' +
    564 '<param name="scale" value="default" />' + 
     564'<param name="scale" value="default" />' +
    565565'</object>';
    566566
    567567                                } else {
    mejs.HtmlMediaElementShim = { 
    580580'flashvars="' + initVars.join('&') + '" ' +
    581581'width="' + width + '" ' +
    582582'height="' + height + '" ' +
    583 'scale="default"' + 
     583'scale="default"' +
    584584'class="mejs-shim"></embed>';
    585585                                }
    586586                                break;
    587                        
     587
    588588                        case 'youtube':
    589                        
    590                                
     589
     590
    591591                                var videoId;
    592592                                // youtu.be url from share button
    593593                                if (playback.url.lastIndexOf("youtu.be") != -1) {
    mejs.HtmlMediaElementShim = { 
    606606                                                pluginId: pluginid,
    607607                                                videoId: videoId,
    608608                                                height: height,
    609                                                 width: width   
    610                                         };                             
    611                                
     609                                                width: width
     610                                        };
     611
    612612                                if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) {
    613613                                        mejs.YouTubeApi.createFlash(youtubeSettings);
    614614                                } else {
    615                                         mejs.YouTubeApi.enqueueIframe(youtubeSettings);         
     615                                        mejs.YouTubeApi.enqueueIframe(youtubeSettings);
    616616                                }
    617                                
     617
    618618                                break;
    619                        
     619
    620620                        // DEMO Code. Does NOT work.
    621621                        case 'vimeo':
    622622                                var player_id = pluginid + "_player";
    623623                                pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1);
    624                                
     624
    625625                                container.innerHTML ='<iframe src="//player.vimeo.com/video/' + pluginMediaElement.vimeoid + '?api=1&portrait=0&byline=0&title=0&player_id=' + player_id + '" width="' + width +'" height="' + height +'" frameborder="0" class="mejs-shim" id="' + player_id + '" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
    626626                                if (typeof($f) == 'function') { // froogaloop available
    627627                                        var player = $f(container.childNodes[0]);
    mejs.HtmlMediaElementShim = { 
    629629                                                $.extend( player, {
    630630                                                        playVideo: function() {
    631631                                                                player.api( 'play' );
    632                                                         }, 
     632                                                        },
    633633                                                        stopVideo: function() {
    634634                                                                player.api( 'unload' );
    635                                                         }, 
     635                                                        },
    636636                                                        pauseVideo: function() {
    637637                                                                player.api( 'pause' );
    638                                                         }, 
     638                                                        },
    639639                                                        seekTo: function( seconds ) {
    640640                                                                player.api( 'seekTo', seconds );
    641                                                         }, 
     641                                                        },
    642642                                                        setVolume: function( volume ) {
    643643                                                                player.api( 'setVolume', volume );
    644                                                         }, 
     644                                                        },
    645645                                                        setMuted: function( muted ) {
    646646                                                                if( muted ) {
    647647                                                                        player.lastVolume = player.api( 'getVolume' );
    mejs.HtmlMediaElementShim = { 
    692692                                else {
    693693                                        console.warn("You need to include froogaloop for vimeo to work");
    694694                                }
    695                                 break;                 
     695                                break;
    696696                }
    697697                // hide original element
    698698                htmlMediaElement.style.display = 'none';
    mejs.HtmlMediaElementShim = { 
    700700                htmlMediaElement.removeAttribute('autoplay');
    701701
    702702                // FYI: options.success will be fired by the MediaPluginBridge
    703                
     703
    704704                return pluginMediaElement;
    705705        },
    706706
    707707        updateNative: function(playback, options, autoplay, preload) {
    708                
     708
    709709                var htmlMediaElement = playback.htmlMediaElement,
    710710                        m;
    711                
    712                
     711
     712
    713713                // add methods to video object to bring it into parity with Flash Object
    714714                for (m in mejs.HtmlMediaElement) {
    715715                        htmlMediaElement[m] = mejs.HtmlMediaElement[m];
    mejs.HtmlMediaElementShim = { 
    718718                /*
    719719                Chrome now supports preload="none"
    720720                if (mejs.MediaFeatures.isChrome) {
    721                
     721
    722722                        // special case to enforce preload attribute (Chrome doesn't respect this)
    723723                        if (preload === 'none' && !autoplay) {
    724                        
     724
    725725                                // forces the browser to stop loading (note: fails in IE9)
    726726                                htmlMediaElement.src = '';
    727727                                htmlMediaElement.load();
    mejs.HtmlMediaElementShim = { 
    745745
    746746                // fire success code
    747747                options.success(htmlMediaElement, htmlMediaElement);
    748                
     748
    749749                return htmlMediaElement;
    750750        }
    751751};
    mejs.YouTubeApi = { 
    771771        },
    772772        iframeQueue: [],
    773773        enqueueIframe: function(yt) {
    774                
     774
    775775                if (this.isLoaded) {
    776776                        this.createIframe(yt);
    777777                } else {
    mejs.YouTubeApi = { 
    780780                }
    781781        },
    782782        createIframe: function(settings) {
    783                
     783
    784784                var
    785                 pluginMediaElement = settings.pluginMediaElement,       
     785                pluginMediaElement = settings.pluginMediaElement,
    786786                player = new YT.Player(settings.containerId, {
    787787                        height: settings.height,
    788788                        width: settings.width,
    mejs.YouTubeApi = { 
    790790                        playerVars: {controls:0},
    791791                        events: {
    792792                                'onReady': function() {
    793                                        
     793
    794794                                        // hook up iframe object to MEjs
    795795                                        settings.pluginMediaElement.pluginApi = player;
    796                                        
     796
    797797                                        // init mejs
    798798                                        mejs.MediaPluginBridge.initPlugin(settings.pluginId);
    799                                        
     799
    800800                                        // create timer
    801801                                        setInterval(function() {
    802802                                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
    803                                         }, 250);                                       
     803                                        }, 250);
    804804                                },
    805805                                'onStateChange': function(e) {
    806                                        
     806
    807807                                        mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement);
    808                                        
     808
    809809                                }
    810810                        }
    811811                });
    812812        },
    813        
     813
    814814        createEvent: function (player, pluginMediaElement, eventName) {
    815815                var obj = {
    816816                        type: eventName,
    mejs.YouTubeApi = { 
    818818                };
    819819
    820820                if (player && player.getDuration) {
    821                        
    822                         // time 
     821
     822                        // time
    823823                        pluginMediaElement.currentTime = obj.currentTime = player.getCurrentTime();
    824824                        pluginMediaElement.duration = obj.duration = player.getDuration();
    825                        
     825
    826826                        // state
    827827                        obj.paused = pluginMediaElement.paused;
    828                         obj.ended = pluginMediaElement.ended;                   
    829                        
     828                        obj.ended = pluginMediaElement.ended;
     829
    830830                        // sound
    831831                        obj.muted = player.isMuted();
    832832                        obj.volume = player.getVolume() / 100;
    833                        
     833
    834834                        // progress
    835835                        obj.bytesTotal = player.getVideoBytesTotal();
    836836                        obj.bufferedBytes = player.getVideoBytesLoaded();
    837                        
     837
    838838                        // fake the W3C buffered TimeRange
    839839                        var bufferedTime = obj.bufferedBytes / obj.bytesTotal * obj.duration;
    840                        
     840
    841841                        obj.target.buffered = obj.buffered = {
    842842                                start: function(index) {
    843843                                        return 0;
    mejs.YouTubeApi = { 
    849849                        };
    850850
    851851                }
    852                
     852
    853853                // send event up the chain
    854854                pluginMediaElement.dispatchEvent(obj.type, obj);
    855         },     
    856        
     855        },
     856
    857857        iFrameReady: function() {
    858                
     858
    859859                this.isLoaded = true;
    860860                this.isIframeLoaded = true;
    861                
     861
    862862                while (this.iframeQueue.length > 0) {
    863863                        var settings = this.iframeQueue.pop();
    864864                        this.createIframe(settings);
    865                 }       
     865                }
    866866        },
    867        
     867
    868868        // FLASH!
    869869        flashPlayers: {},
    870870        createFlash: function(settings) {
    871                
     871
    872872                this.flashPlayers[settings.pluginId] = settings;
    873                
     873
    874874                /*
    875875                settings.container.innerHTML =
    876876                        '<object type="application/x-shockwave-flash" id="' + settings.pluginId + '" data="//www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=' + settings.pluginId  + '&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0" ' +
    mejs.YouTubeApi = { 
    882882
    883883                var specialIEContainer,
    884884                        youtubeUrl = '//www.youtube.com/apiplayer?enablejsapi=1&amp;playerapiid=' + settings.pluginId  + '&amp;version=3&amp;autoplay=0&amp;controls=0&amp;modestbranding=1&loop=0';
    885                        
     885
    886886                if (mejs.MediaFeatures.isIE) {
    887                        
     887
    888888                        specialIEContainer = document.createElement('div');
    889889                        settings.container.appendChild(specialIEContainer);
    890890                        specialIEContainer.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' +
    mejs.YouTubeApi = { 
    901901                                '<param name="allowScriptAccess" value="always">' +
    902902                                '<param name="wmode" value="transparent">' +
    903903                        '</object>';
    904                 }               
    905                
     904                }
     905
    906906        },
    907        
     907
    908908        flashReady: function(id) {
    909909                var
    910910                        settings = this.flashPlayers[id],
    911911                        player = document.getElementById(id),
    912912                        pluginMediaElement = settings.pluginMediaElement;
    913                
    914                 // hook up and return to MediaELementPlayer.success     
    915                 pluginMediaElement.pluginApi = 
     913
     914                // hook up and return to MediaELementPlayer.success
     915                pluginMediaElement.pluginApi =
    916916                pluginMediaElement.pluginElement = player;
    917917                mejs.MediaPluginBridge.initPlugin(id);
    918                
     918
    919919                // load the youtube video
    920920                player.cueVideoById(settings.videoId);
    921                
     921
    922922                var callbackName = settings.containerId + '_callback';
    923                
     923
    924924                window[callbackName] = function(e) {
    925925                        mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement);
    926926                }
    927                
     927
    928928                player.addEventListener('onStateChange', callbackName);
    929                
     929
    930930                setInterval(function() {
    931931                        mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
    932932                }, 250);
    933                
     933
    934934                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay');
    935935        },
    936        
     936
    937937        handleStateChange: function(youTubeState, player, pluginMediaElement) {
    938938                switch (youTubeState) {
    939939                        case -1: // not started
    mejs.YouTubeApi = { 
    949949                                break;
    950950                        case 1:
    951951                                pluginMediaElement.paused = false;
    952                                 pluginMediaElement.ended = false;                               
     952                                pluginMediaElement.ended = false;
    953953                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'play');
    954954                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'playing');
    955955                                break;
    956956                        case 2:
    957957                                pluginMediaElement.paused = true;
    958                                 pluginMediaElement.ended = false;                               
     958                                pluginMediaElement.ended = false;
    959959                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'pause');
    960960                                break;
    961961                        case 3: // buffering
    mejs.YouTubeApi = { 
    963963                                break;
    964964                        case 5:
    965965                                // cued?
    966                                 break;                                         
    967                        
    968                 }                       
    969                
     966                                break;
     967
     968                }
     969
    970970        }
    971971}
    972972// IFRAME