l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
if ( ! _.isUndefined( window._wpmejsSettings ) ) {
- baseSettings.pluginPath = _wpmejsSettings.pluginPath;
+ baseSettings = _wpmejsSettings;
}
/**
*/
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 <source> 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
removePlayer: function(t) {
var featureIndex, feature;
+ if ( ! t.options ) {
+ return;
+ }
+
// invoke features cleanup
for ( featureIndex in t.options.features ) {
feature = t.options.features[featureIndex];
}
if ( 'native' !== t.media.pluginType ) {
- t.media.remove();
+ t.$media.remove();
}
delete window.mejs.players[t.id];
*
* 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 = [];
}
}
};
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' )
+ }
+ } );
} );
},
/**
* wp.media.view.MediaDetails
*
- * @contructor
+ * @constructor
* @augments wp.media.view.Settings.AttachmentDisplay
* @augments wp.media.view.Settings
* @augments wp.media.View
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 );
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 ) );
}
},
/**
* wp.media.view.AudioDetails
*
- * @contructor
+ * @constructor
* @augments wp.media.view.MediaDetails
* @augments wp.media.view.Settings.AttachmentDisplay
* @augments wp.media.view.Settings
/**
* wp.media.view.VideoDetails
*
- * @contructor
+ * @constructor
* @augments wp.media.view.MediaDetails
* @augments wp.media.view.Settings.AttachmentDisplay
* @augments wp.media.view.Settings
}
});
- /**
- * 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));