X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/41578db67d72562346e4dbb2a14889b23d522813..9e77185fafaf4e60e2b73821e0e4b9b1a11fb85f:/wp-includes/js/media-audiovideo.js diff --git a/wp-includes/js/media-audiovideo.js b/wp-includes/js/media-audiovideo.js index da91a9cf..73f81a88 100644 --- a/wp-includes/js/media-audiovideo.js +++ b/wp-includes/js/media-audiovideo.js @@ -6,7 +6,7 @@ l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n; if ( ! _.isUndefined( window._wpmejsSettings ) ) { - baseSettings.pluginPath = _wpmejsSettings.pluginPath; + baseSettings = _wpmejsSettings; } /** @@ -14,115 +14,18 @@ */ wp.media.mixin = { mejsSettings: baseSettings, - /** - * Pauses every instance of MediaElementPlayer - */ - pauseAllPlayers: function() { + + removeAllPlayers: function() { var p; + if ( window.mejs && window.mejs.players ) { for ( p in window.mejs.players ) { window.mejs.players[p].pause(); + this.removePlayer( window.mejs.players[p] ); } } }, - /** - * Utility to identify the user's browser - */ - ua: { - is : function( browser ) { - var passes = false, ua = window.navigator.userAgent; - - switch ( browser ) { - case 'oldie': - passes = ua.match(/MSIE [6-8]/gi) !== null; - break; - case 'ie': - passes = ua.match(/MSIE/gi) !== null; - break; - case 'ff': - passes = ua.match(/firefox/gi) !== null; - break; - case 'opera': - passes = ua.match(/OPR/) !== null; - break; - case 'safari': - passes = ua.match(/safari/gi) !== null && ua.match(/chrome/gi) === null; - break; - case 'chrome': - passes = ua.match(/safari/gi) !== null && ua.match(/chrome/gi) !== null; - break; - } - - return passes; - } - }, - - /** - * Specify compatibility for native playback by browser - */ - compat :{ - 'opera' : { - audio: ['ogg', 'wav'], - video: ['ogg', 'webm'] - }, - 'chrome' : { - audio: ['ogg', 'mpeg'], - video: ['ogg', 'webm', 'mp4', 'm4v', 'mpeg'] - }, - 'ff' : { - audio: ['ogg', 'mpeg'], - video: ['ogg', 'webm'] - }, - 'safari' : { - audio: ['mpeg', 'wav'], - video: ['mp4', 'm4v', 'mpeg', 'x-ms-wmv', 'quicktime'] - }, - 'ie' : { - audio: ['mpeg'], - video: ['mp4', 'm4v', 'mpeg'] - } - }, - - /** - * Determine if the passed media contains a that provides - * native playback in the user's browser - * - * @param {jQuery} media - * @returns {Boolean} - */ - isCompatible: function( media ) { - if ( ! media.find( 'source' ).length ) { - return false; - } - - var ua = this.ua, test = false, found = false, sources; - - if ( ua.is( 'oldIE' ) ) { - return false; - } - - sources = media.find( 'source' ); - - _.find( this.compat, function( supports, browser ) { - if ( ua.is( browser ) ) { - found = true; - _.each( sources, function( elem ) { - var audio = new RegExp( 'audio\/(' + supports.audio.join('|') + ')', 'gi' ), - video = new RegExp( 'video\/(' + supports.video.join('|') + ')', 'gi' ); - - if ( elem.type.match( video ) !== null || elem.type.match( audio ) !== null ) { - test = true; - } - } ); - } - - return test || found; - } ); - - return test; - }, - /** * Override the MediaElement method for removing a player. * MediaElement tries to pull the audio/video tag out of @@ -131,6 +34,10 @@ removePlayer: function(t) { var featureIndex, feature; + if ( ! t.options ) { + return; + } + // invoke features cleanup for ( featureIndex in t.options.features ) { feature = t.options.features[featureIndex]; @@ -162,11 +69,13 @@ * * Examples: modal closes, shortcode properties are removed, etc. */ - unsetPlayer : function() { - if ( this.player ) { - wp.media.mixin.pauseAllPlayers(); - wp.media.mixin.removePlayer( this.player ); - this.player = false; + unsetPlayers : function() { + if ( this.players && this.players.length ) { + _.each( this.players, function (player) { + player.pause(); + wp.media.mixin.removePlayer( player ); + } ); + this.players = []; } } }; @@ -666,10 +575,23 @@ renderSelectPosterImageToolbar: function() { this.setPrimaryButton( l10n.videoSelectPosterImageTitle, function( controller, state ) { - var attachment = state.get( 'selection' ).single(); + var urls = [], attachment = state.get( 'selection' ).single(); controller.media.set( 'poster', attachment.get( 'url' ) ); state.trigger( 'set-poster-image', controller.media.toJSON() ); + + _.each( wp.media.view.settings.embedExts, function (ext) { + if ( controller.media.get( ext ) ) { + urls.push( controller.media.get( ext ) ); + } + } ); + + wp.ajax.send( 'set-attachment-thumbnail', { + data : { + urls: urls, + thumbnail_id: attachment.get( 'id' ) + } + } ); } ); }, @@ -695,7 +617,7 @@ /** * wp.media.view.MediaDetails * - * @contructor + * @constructor * @augments wp.media.view.Settings.AttachmentDisplay * @augments wp.media.view.Settings * @augments wp.media.View @@ -705,16 +627,17 @@ media.view.MediaDetails = media.view.Settings.AttachmentDisplay.extend({ initialize: function() { _.bindAll(this, 'success'); - - this.listenTo( this.controller, 'close', media.mixin.unsetPlayer ); + this.players = []; + this.listenTo( this.controller, 'close', media.mixin.unsetPlayers ); this.on( 'ready', this.setPlayer ); - this.on( 'media:setting:remove', media.mixin.unsetPlayer, this ); + this.on( 'media:setting:remove', media.mixin.unsetPlayers, this ); this.on( 'media:setting:remove', this.render ); this.on( 'media:setting:remove', this.setPlayer ); this.events = _.extend( this.events, { 'click .remove-setting' : 'removeSetting', 'change .content-track' : 'setTracks', - 'click .remove-track' : 'setTracks' + 'click .remove-track' : 'setTracks', + 'click .add-media-source' : 'addSource' } ); media.view.Settings.AttachmentDisplay.prototype.initialize.apply( this, arguments ); @@ -760,12 +683,17 @@ this.trigger( 'media:setting:remove', this ); }, + addSource : function( e ) { + this.controller.lastMime = $( e.currentTarget ).data( 'mime' ); + this.controller.setState( 'add-' + this.controller.defaults.id + '-source' ); + }, + /** * @global MediaElementPlayer */ setPlayer : function() { - if ( ! this.player && this.media ) { - this.player = new MediaElementPlayer( this.media, this.settings ); + if ( ! this.players.length && this.media ) { + this.players.push( new MediaElementPlayer( this.media, this.settings ) ); } }, @@ -834,7 +762,7 @@ /** * wp.media.view.AudioDetails * - * @contructor + * @constructor * @augments wp.media.view.MediaDetails * @augments wp.media.view.Settings.AttachmentDisplay * @augments wp.media.view.Settings @@ -866,7 +794,7 @@ /** * wp.media.view.VideoDetails * - * @contructor + * @constructor * @augments wp.media.view.MediaDetails * @augments wp.media.view.Settings.AttachmentDisplay * @augments wp.media.view.Settings @@ -900,18 +828,4 @@ } }); - /** - * Event binding - */ - function init() { - $(document.body) - .on( 'click', '.wp-switch-editor', wp.media.mixin.pauseAllPlayers ) - .on( 'click', '.add-media-source', function( e ) { - media.frame.lastMime = $( e.currentTarget ).data( 'mime' ); - media.frame.setState( 'add-' + media.frame.defaults.id + '-source' ); - } ); - } - - $( init ); - }(jQuery, _, Backbone));