summaryrefslogtreecommitdiffstats
path: root/wp-includes/js/mediaelement/wp-mediaelement.js
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/js/mediaelement/wp-mediaelement.js')
-rw-r--r--wp-includes/js/mediaelement/wp-mediaelement.js100
1 files changed, 100 insertions, 0 deletions
diff --git a/wp-includes/js/mediaelement/wp-mediaelement.js b/wp-includes/js/mediaelement/wp-mediaelement.js
new file mode 100644
index 0000000..52e1bbd
--- /dev/null
+++ b/wp-includes/js/mediaelement/wp-mediaelement.js
@@ -0,0 +1,100 @@
+/* global _wpmejsSettings, mejsL10n */
+(function( window, $ ) {
+
+ window.wp = window.wp || {};
+
+ function wpMediaElement() {
+ var settings = {};
+
+ /**
+ * Initialize media elements.
+ *
+ * Ensures media elements that have already been initialized won't be
+ * processed again.
+ *
+ * @memberOf wp.mediaelement
+ *
+ * @since 4.4.0
+ *
+ * @return {void}
+ */
+ function initialize() {
+ var selectors = [];
+
+ 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.
+ * @return {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 '<a href="' + node.src + '">' + mejsL10n.strings['mejs.download-file'] + '</a>';
+ }
+ };
+
+ if ( 'undefined' === typeof settings.videoShortcodeLibrary || 'mediaelement' === settings.videoShortcodeLibrary ) {
+ selectors.push( '.wp-video-shortcode' );
+ }
+ if ( 'undefined' === typeof settings.audioShortcodeLibrary || 'mediaelement' === settings.audioShortcodeLibrary ) {
+ selectors.push( '.wp-audio-shortcode' );
+ }
+ if ( ! selectors.length ) {
+ return;
+ }
+
+ // Only initialize new media elements.
+ $( selectors.join( ', ' ) )
+ .not( '.mejs-container' )
+ .filter(function () {
+ return ! $( this ).parent().hasClass( 'mejs-mediaelement' );
+ })
+ .mediaelementplayer( settings );
+ }
+
+ return {
+ initialize: initialize
+ };
+ }
+
+ /**
+ * @namespace wp.mediaelement
+ * @memberOf wp
+ */
+ window.wp.mediaelement = new wpMediaElement();
+
+ $( window.wp.mediaelement.initialize );
+
+})( window, jQuery );