diff -r 490d5cc509ed -r cf61fcea0001 wp/wp-includes/js/mediaelement/wp-mediaelement.js --- a/wp/wp-includes/js/mediaelement/wp-mediaelement.js Tue Jun 09 11:14:17 2015 +0000 +++ b/wp/wp-includes/js/mediaelement/wp-mediaelement.js Mon Oct 14 17:39:30 2019 +0200 @@ -1,34 +1,82 @@ -/* global mejs, _wpmejsSettings */ -(function ($) { - // add mime-type aliases to MediaElement plugin support - mejs.plugins.silverlight[0].types.push('video/x-ms-wmv'); - mejs.plugins.silverlight[0].types.push('audio/x-ms-wma'); +/* global _wpmejsSettings, mejsL10n */ +(function( window, $ ) { - $(function () { + window.wp = window.wp || {}; + + function wpMediaElement() { var settings = {}; - if ( typeof _wpmejsSettings !== 'undefined' ) { - settings = _wpmejsSettings; + /** + * Initialize media elements. + * + * Ensures media elements that have already been initialized won't be + * processed again. + * + * @since 4.4.0 + * + * @returns {void} + */ + function initialize() { + if ( typeof _wpmejsSettings !== 'undefined' ) { + settings = $.extend( true, {}, _wpmejsSettings ); + } + settings.classPrefix = 'mejs-'; + settings.success = settings.success || function ( mejs ) { + var autoplay, loop; + + if ( mejs.rendererName && -1 !== mejs.rendererName.indexOf( 'flash' ) ) { + autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay; + loop = mejs.attributes.loop && 'false' !== mejs.attributes.loop; + + if ( autoplay ) { + mejs.addEventListener( 'canplay', function() { + mejs.play(); + }, false ); + } + + if ( loop ) { + mejs.addEventListener( 'ended', function() { + mejs.play(); + }, false ); + } + } + }; + + /** + * Custom error handler. + * + * Sets up a custom error handler in case a video render fails, and provides a download + * link as the fallback. + * + * @since 4.9.3 + * + * @param {object} media The wrapper that mimics all the native events/properties/methods for all renderers. + * @param {object} node The original HTML video, audio, or iframe tag where the media was loaded. + * @returns {string} + */ + settings.customError = function ( media, node ) { + // Make sure we only fall back to a download link for flash files. + if ( -1 !== media.rendererName.indexOf( 'flash' ) || -1 !== media.rendererName.indexOf( 'flv' ) ) { + return '' + mejsL10n.strings['mejs.download-video'] + ''; + } + }; + + // Only initialize new media elements. + $( '.wp-audio-shortcode, .wp-video-shortcode' ) + .not( '.mejs-container' ) + .filter(function () { + return ! $( this ).parent().hasClass( 'mejs-mediaelement' ); + }) + .mediaelementplayer( settings ); } - settings.success = settings.success || function (mejs) { - var autoplay, loop; - - if ( 'flash' === mejs.pluginType ) { - autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay; - loop = mejs.attributes.loop && 'false' !== mejs.attributes.loop; - - autoplay && mejs.addEventListener( 'canplay', function () { - mejs.play(); - }, false ); + return { + initialize: initialize + }; + } - loop && mejs.addEventListener( 'ended', function () { - mejs.play(); - }, false ); - } - }; + window.wp.mediaelement = new wpMediaElement(); - $('.wp-audio-shortcode, .wp-video-shortcode').mediaelementplayer( settings ); - }); + $( window.wp.mediaelement.initialize ); -}(jQuery)); +})( window, jQuery );