WordPress.org

Make WordPress Core

Ticket #31541: 4.2.monkey.2.diff

File 4.2.monkey.2.diff, 19.0 KB (added by wonderboymusic, 7 years ago)
  • src/js/me-shim.js

    diff --git a/src/js/me-shim.js b/src/js/me-shim.js
    index ba3ee16..d393ea7 100644
    a b 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 = { 
    460460
    461461                // check for placement inside a <p> tag (sometimes WYSIWYG editors do this)
    462462                node = htmlMediaElement.parentNode;
    463                 while (node !== null && node.tagName.toLowerCase() !== 'body' && node.parentNode != null) {
     463                while (node !== null && node.tagName != null && node.tagName.toLowerCase() !== 'body' && node.parentNode != null && node.parentNode.tagName != null) {
    464464                        if (node.parentNode.tagName.toLowerCase() === 'p') {
    465465                                node.parentNode.parentNode.insertBefore(node, node.parentNode);
    466466                                break;
    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 = { 
    533533                }
    534534                if (options.pluginVars) {
    535535                        initVars = initVars.concat(options.pluginVars);
    536                 }               
     536                }
    537537
    538538                switch (playback.method) {
    539539                        case 'silverlight':
    mejs.HtmlMediaElementShim = { 
    563563'<param name="wmode" value="transparent" />' +
    564564'<param name="allowScriptAccess" value="always" />' +
    565565'<param name="allowFullScreen" value="true" />' +
    566 '<param name="scale" value="default" />' + 
     566'<param name="scale" value="default" />' +
    567567'</object>';
    568568
    569569                                } else {
    mejs.HtmlMediaElementShim = { 
    582582'flashvars="' + initVars.join('&') + '" ' +
    583583'width="' + width + '" ' +
    584584'height="' + height + '" ' +
    585 'scale="default"' + 
     585'scale="default"' +
    586586'class="mejs-shim"></embed>';
    587587                                }
    588588                                break;
    589                        
     589
    590590                        case 'youtube':
    591                        
    592                                
     591
     592
    593593                                var videoId;
    594594                                // youtu.be url from share button
    595595                                if (playback.url.lastIndexOf("youtu.be") != -1) {
    mejs.HtmlMediaElementShim = { 
    608608                                                pluginId: pluginid,
    609609                                                videoId: videoId,
    610610                                                height: height,
    611                                                 width: width   
    612                                         };                             
    613                                
     611                                                width: width
     612                                        };
     613
    614614                                if (mejs.PluginDetector.hasPluginVersion('flash', [10,0,0]) ) {
    615615                                        mejs.YouTubeApi.createFlash(youtubeSettings);
    616616                                } else {
    617                                         mejs.YouTubeApi.enqueueIframe(youtubeSettings);         
     617                                        mejs.YouTubeApi.enqueueIframe(youtubeSettings);
    618618                                }
    619                                
     619
    620620                                break;
    621                        
     621
    622622                        // DEMO Code. Does NOT work.
    623623                        case 'vimeo':
    624624                                var player_id = pluginid + "_player";
    625625                                pluginMediaElement.vimeoid = playback.url.substr(playback.url.lastIndexOf('/')+1);
    626                                
     626
    627627                                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>';
    628628                                if (typeof($f) == 'function') { // froogaloop available
    629629                                        var player = $f(container.childNodes[0]);
    630                                        
     630
    631631                                        player.addEvent('ready', function() {
    632                                                
     632
    633633                                                player.playVideo = function() {
    634634                                                        player.api( 'play' );
    635                                                 } 
     635                                                }
    636636                                                player.stopVideo = function() {
    637637                                                        player.api( 'unload' );
    638                                                 } 
     638                                                }
    639639                                                player.pauseVideo = function() {
    640640                                                        player.api( 'pause' );
    641                                                 } 
     641                                                }
    642642                                                player.seekTo = function( seconds ) {
    643643                                                        player.api( 'seekTo', seconds );
    644644                                                }
    mejs.HtmlMediaElementShim = { 
    653653                                                                player.api( 'setVolume', player.lastVolume );
    654654                                                                delete player.lastVolume;
    655655                                                        }
    656                                                 }                                               
     656                                                }
    657657
    658658                                                function createEvent(player, pluginMediaElement, eventName, e) {
    659659                                                        var obj = {
    mejs.HtmlMediaElementShim = { 
    694694                                else {
    695695                                        console.warn("You need to include froogaloop for vimeo to work");
    696696                                }
    697                                 break;                 
     697                                break;
    698698                }
    699699                // hide original element
    700700                htmlMediaElement.style.display = 'none';
    mejs.HtmlMediaElementShim = { 
    702702                htmlMediaElement.removeAttribute('autoplay');
    703703
    704704                // FYI: options.success will be fired by the MediaPluginBridge
    705                
     705
    706706                return pluginMediaElement;
    707707        },
    708708
    709709        updateNative: function(playback, options, autoplay, preload) {
    710                
     710
    711711                var htmlMediaElement = playback.htmlMediaElement,
    712712                        m;
    713                
    714                
     713
     714
    715715                // add methods to video object to bring it into parity with Flash Object
    716716                for (m in mejs.HtmlMediaElement) {
    717717                        htmlMediaElement[m] = mejs.HtmlMediaElement[m];
    mejs.HtmlMediaElementShim = { 
    720720                /*
    721721                Chrome now supports preload="none"
    722722                if (mejs.MediaFeatures.isChrome) {
    723                
     723
    724724                        // special case to enforce preload attribute (Chrome doesn't respect this)
    725725                        if (preload === 'none' && !autoplay) {
    726                        
     726
    727727                                // forces the browser to stop loading (note: fails in IE9)
    728728                                htmlMediaElement.src = '';
    729729                                htmlMediaElement.load();
    mejs.HtmlMediaElementShim = { 
    747747
    748748                // fire success code
    749749                options.success(htmlMediaElement, htmlMediaElement);
    750                
     750
    751751                return htmlMediaElement;
    752752        }
    753753};
    mejs.YouTubeApi = { 
    773773        },
    774774        iframeQueue: [],
    775775        enqueueIframe: function(yt) {
    776                
     776
    777777                if (this.isLoaded) {
    778778                        this.createIframe(yt);
    779779                } else {
    mejs.YouTubeApi = { 
    782782                }
    783783        },
    784784        createIframe: function(settings) {
    785                
     785
    786786                var
    787                 pluginMediaElement = settings.pluginMediaElement,       
     787                pluginMediaElement = settings.pluginMediaElement,
    788788                player = new YT.Player(settings.containerId, {
    789789                        height: settings.height,
    790790                        width: settings.width,
    mejs.YouTubeApi = { 
    792792                        playerVars: {controls:0},
    793793                        events: {
    794794                                'onReady': function() {
    795                                        
     795
    796796                                        // hook up iframe object to MEjs
    797797                                        settings.pluginMediaElement.pluginApi = player;
    798                                        
     798
    799799                                        // init mejs
    800800                                        mejs.MediaPluginBridge.initPlugin(settings.pluginId);
    801                                        
     801
    802802                                        // create timer
    803803                                        setInterval(function() {
    804804                                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
    805                                         }, 250);                                       
     805                                        }, 250);
    806806                                },
    807807                                'onStateChange': function(e) {
    808                                        
     808
    809809                                        mejs.YouTubeApi.handleStateChange(e.data, player, pluginMediaElement);
    810                                        
     810
    811811                                }
    812812                        }
    813813                });
    814814        },
    815        
     815
    816816        createEvent: function (player, pluginMediaElement, eventName) {
    817817                var obj = {
    818818                        type: eventName,
    mejs.YouTubeApi = { 
    820820                };
    821821
    822822                if (player && player.getDuration) {
    823                        
    824                         // time 
     823
     824                        // time
    825825                        pluginMediaElement.currentTime = obj.currentTime = player.getCurrentTime();
    826826                        pluginMediaElement.duration = obj.duration = player.getDuration();
    827                        
     827
    828828                        // state
    829829                        obj.paused = pluginMediaElement.paused;
    830                         obj.ended = pluginMediaElement.ended;                   
    831                        
     830                        obj.ended = pluginMediaElement.ended;
     831
    832832                        // sound
    833833                        obj.muted = player.isMuted();
    834834                        obj.volume = player.getVolume() / 100;
    835                        
     835
    836836                        // progress
    837837                        obj.bytesTotal = player.getVideoBytesTotal();
    838838                        obj.bufferedBytes = player.getVideoBytesLoaded();
    839                        
     839
    840840                        // fake the W3C buffered TimeRange
    841841                        var bufferedTime = obj.bufferedBytes / obj.bytesTotal * obj.duration;
    842                        
     842
    843843                        obj.target.buffered = obj.buffered = {
    844844                                start: function(index) {
    845845                                        return 0;
    mejs.YouTubeApi = { 
    851851                        };
    852852
    853853                }
    854                
     854
    855855                // send event up the chain
    856856                pluginMediaElement.dispatchEvent(obj.type, obj);
    857         },     
    858        
     857        },
     858
    859859        iFrameReady: function() {
    860                
     860
    861861                this.isLoaded = true;
    862862                this.isIframeLoaded = true;
    863                
     863
    864864                while (this.iframeQueue.length > 0) {
    865865                        var settings = this.iframeQueue.pop();
    866866                        this.createIframe(settings);
    867                 }       
     867                }
    868868        },
    869        
     869
    870870        // FLASH!
    871871        flashPlayers: {},
    872872        createFlash: function(settings) {
    873                
     873
    874874                this.flashPlayers[settings.pluginId] = settings;
    875                
     875
    876876                /*
    877877                settings.container.innerHTML =
    878878                        '<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 = { 
    884884
    885885                var specialIEContainer,
    886886                        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';
    887                        
     887
    888888                if (mejs.MediaFeatures.isIE) {
    889                        
     889
    890890                        specialIEContainer = document.createElement('div');
    891891                        settings.container.appendChild(specialIEContainer);
    892892                        specialIEContainer.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab" ' +
    mejs.YouTubeApi = { 
    903903                                '<param name="allowScriptAccess" value="always">' +
    904904                                '<param name="wmode" value="transparent">' +
    905905                        '</object>';
    906                 }               
    907                
     906                }
     907
    908908        },
    909        
     909
    910910        flashReady: function(id) {
    911911                var
    912912                        settings = this.flashPlayers[id],
    913913                        player = document.getElementById(id),
    914914                        pluginMediaElement = settings.pluginMediaElement;
    915                
    916                 // hook up and return to MediaELementPlayer.success     
    917                 pluginMediaElement.pluginApi = 
     915
     916                // hook up and return to MediaELementPlayer.success
     917                pluginMediaElement.pluginApi =
    918918                pluginMediaElement.pluginElement = player;
    919919                mejs.MediaPluginBridge.initPlugin(id);
    920                
     920
    921921                // load the youtube video
    922922                player.cueVideoById(settings.videoId);
    923                
     923
    924924                var callbackName = settings.containerId + '_callback';
    925                
     925
    926926                window[callbackName] = function(e) {
    927927                        mejs.YouTubeApi.handleStateChange(e, player, pluginMediaElement);
    928928                }
    929                
     929
    930930                player.addEventListener('onStateChange', callbackName);
    931                
     931
    932932                setInterval(function() {
    933933                        mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'timeupdate');
    934934                }, 250);
    935                
     935
    936936                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'canplay');
    937937        },
    938        
     938
    939939        handleStateChange: function(youTubeState, player, pluginMediaElement) {
    940940                switch (youTubeState) {
    941941                        case -1: // not started
    mejs.YouTubeApi = { 
    951951                                break;
    952952                        case 1:
    953953                                pluginMediaElement.paused = false;
    954                                 pluginMediaElement.ended = false;                               
     954                                pluginMediaElement.ended = false;
    955955                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'play');
    956956                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'playing');
    957957                                break;
    958958                        case 2:
    959959                                pluginMediaElement.paused = true;
    960                                 pluginMediaElement.ended = false;                               
     960                                pluginMediaElement.ended = false;
    961961                                mejs.YouTubeApi.createEvent(player, pluginMediaElement, 'pause');
    962962                                break;
    963963                        case 3: // buffering
    mejs.YouTubeApi = { 
    965965                                break;
    966966                        case 5:
    967967                                // cued?
    968                                 break;                                         
    969                        
    970                 }                       
    971                
     968                                break;
     969
     970                }
     971
    972972        }
    973973}
    974974// IFRAME