From 410646fc5255b3a086e2abdafb8e676fbfb59a87 Mon Sep 17 00:00:00 2001
From: Scott Taylor
Date: Sat, 22 Mar 2014 23:26:17 +0000
Subject: [PATCH] General code cleanup and improving video sizing in the admin:
* Abstract the setting of a primary button and its callback in `wp.media.view.MediaFrame.MediaDetails`
* Account for the existence or non-existence of `$content_width` in the TinyMCE views for video
* Make sure video models always have dimensions, even if they are the defaults
* For browsers that are not Firefox, don't use a timeout when setting the `MediaElementPlayer` instance in TinyMCE views
See #27320.
Built from https://develop.svn.wordpress.org/trunk@27655
git-svn-id: http://core.svn.wordpress.org/trunk@27498 1a063a9b-81f0-0310-95a4-ce76da25c4cd
---
wp-includes/js/media-audiovideo.js | 347 +++++++-----------
wp-includes/js/media-audiovideo.min.js | 2 +-
.../js/tinymce/skins/wordpress/wp-content.css | 4 +
wp-includes/media-template.php | 24 +-
wp-includes/media.php | 11 +-
5 files changed, 163 insertions(+), 225 deletions(-)
diff --git a/wp-includes/js/media-audiovideo.js b/wp-includes/js/media-audiovideo.js
index ac411ea9c5..c78406f41b 100644
--- a/wp-includes/js/media-audiovideo.js
+++ b/wp-includes/js/media-audiovideo.js
@@ -1,7 +1,13 @@
/* global _wpMediaViewsL10n, _wpmejsSettings, MediaElementPlayer, tinymce, WPPlaylistView */
-(function ($, _, Backbone) {
- var media = wp.media, l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
+(function($, _, Backbone) {
+ var media = wp.media,
+ baseSettings = {},
+ l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
+
+ if ( ! _.isUndefined( window._wpmejsSettings ) ) {
+ baseSettings.pluginPath = _wpmejsSettings.pluginPath;
+ }
/**
* @mixin
@@ -11,7 +17,7 @@
/**
* Pauses every instance of MediaElementPlayer
*/
- pauseAllPlayers: function () {
+ pauseAllPlayers: function() {
var p;
if ( window.mejs && window.mejs.players ) {
for ( p in window.mejs.players ) {
@@ -24,7 +30,7 @@
* Utility to identify the user's browser
*/
ua: {
- is : function (browser) {
+ is : function( browser ) {
var passes = false, ua = window.navigator.userAgent;
switch ( browser ) {
@@ -44,7 +50,7 @@
passes = ua.match(/safari/gi) !== null && ua.match(/chrome/gi) === null;
break;
case 'chrome':
- passes = ua.match(/safari/gi) && ua.match(/chrome/gi) !== null;
+ passes = ua.match(/safari/gi) !== null && ua.match(/chrome/gi) !== null;
break;
}
@@ -85,7 +91,7 @@
* @param {jQuery} media
* @returns {Boolean}
*/
- isCompatible: function ( media ) {
+ isCompatible: function( media ) {
if ( ! media.find( 'source' ).length ) {
return false;
}
@@ -98,10 +104,10 @@
sources = media.find( 'source' );
- _.find( this.compat, function (supports, browser) {
+ _.find( this.compat, function( supports, browser ) {
if ( ua.is( browser ) ) {
found = true;
- _.each( sources, function (elem) {
+ _.each( sources, function( elem ) {
var audio = new RegExp( 'audio\/(' + supports.audio.join('|') + ')', 'gi' ),
video = new RegExp( 'video\/(' + supports.video.join('|') + ')', 'gi' );
@@ -214,21 +220,18 @@
caption : ''
},
- edit : function (data) {
+ edit : function( data ) {
var frame, shortcode = wp.shortcode.next( 'audio', data ).shortcode;
frame = wp.media({
frame: 'audio',
state: 'audio-details',
- metadata: _.defaults(
- shortcode.attrs.named,
- wp.media.audio.defaults
- )
+ metadata: _.defaults( shortcode.attrs.named, this.defaults )
});
return frame;
},
- shortcode : function (model) {
+ shortcode : function( model ) {
var self = this, content;
_.each( this.defaults, function( value, key ) {
@@ -268,12 +271,13 @@
autoplay : false,
preload : 'metadata',
content : '',
- caption : ''
+ caption : '',
+ width : 640,
+ height : 360
},
- edit : function (data) {
+ edit : function( data ) {
var frame,
- defaults = this.defaults,
shortcode = wp.shortcode.next( 'video', data ).shortcode,
attrs;
@@ -283,13 +287,13 @@
frame = wp.media({
frame: 'video',
state: 'video-details',
- metadata: _.defaults( attrs, defaults )
+ metadata: _.defaults( attrs, this.defaults )
});
return frame;
},
- shortcode : function (model) {
+ shortcode : function( model ) {
var self = this, content;
_.each( this.defaults, function( value, key ) {
@@ -312,19 +316,20 @@
};
/**
- * wp.media.model.PostMedia
+ * Shared model class for audio and video. Updates the model after
+ * "Add Audio|Video Source" and "Replace Audio|Video" states return
*
* @constructor
* @augments Backbone.Model
- **/
+ */
media.model.PostMedia = Backbone.Model.extend({
initialize: function() {
this.attachment = false;
},
- setSource: function ( attachment ) {
+ setSource: function( attachment ) {
this.attachment = attachment;
- this.extension = attachment.get('filename' ).split('.').pop();
+ this.extension = attachment.get( 'filename' ).split('.').pop();
if ( this.get( 'src' ) && this.extension === this.get( 'src' ).split('.').pop() ) {
this.unset( 'src' );
@@ -343,31 +348,29 @@
this.setSource( attachment );
this.unset( 'src' );
- _.each( _.without( wp.media.view.settings.embedExts, this.extension ), function (ext) {
+ _.each( _.without( wp.media.view.settings.embedExts, this.extension ), function( ext ) {
self.unset( ext );
} );
}
});
/**
- * wp.media.controller.AudioDetails
+ * The controller for the Audio Details state
*
* @constructor
* @augments wp.media.controller.State
* @augments Backbone.Model
*/
media.controller.AudioDetails = media.controller.State.extend({
- defaults: _.defaults({
+ defaults: {
id: 'audio-details',
toolbar: 'audio-details',
title: l10n.audioDetailsTitle,
content: 'audio-details',
menu: 'audio-details',
router: false,
- attachment: false,
- priority: 60,
- editing: false
- }, media.controller.Library.prototype.defaults ),
+ priority: 60
+ },
initialize: function( options ) {
this.media = options.media;
@@ -376,24 +379,22 @@
});
/**
- * wp.media.controller.VideoDetails
+ * The controller for the Video Details state
*
* @constructor
* @augments wp.media.controller.State
* @augments Backbone.Model
*/
media.controller.VideoDetails = media.controller.State.extend({
- defaults: _.defaults({
+ defaults: {
id: 'video-details',
toolbar: 'video-details',
title: l10n.videoDetailsTitle,
content: 'video-details',
menu: 'video-details',
router: false,
- attachment: false,
- priority: 60,
- editing: false
- }, media.controller.Library.prototype.defaults ),
+ priority: 60
+ },
initialize: function( options ) {
this.media = options.media;
@@ -480,23 +481,17 @@
},
- renderDetailsToolbar: function() {
+ setPrimaryButton: function(text, handler) {
this.toolbar.set( new media.view.Toolbar({
controller: this,
items: {
- select: {
+ button: {
style: 'primary',
- text: l10n.update,
+ text: text,
priority: 80,
-
- click: function() {
- var controller = this.controller,
- state = controller.state();
-
- controller.close();
-
- state.trigger( 'update', controller.media.toJSON() );
-
+ click: function() {
+ var controller = this.controller;
+ handler.call( this, controller, controller.state() );
// Restore and reset the default state.
controller.setState( controller.options.state );
controller.reset();
@@ -506,60 +501,27 @@
}) );
},
+ renderDetailsToolbar: function() {
+ this.setPrimaryButton( l10n.update, function( controller, state ) {
+ controller.close();
+ state.trigger( 'update', controller.media.toJSON() );
+ } );
+ },
+
renderReplaceToolbar: function() {
- this.toolbar.set( new media.view.Toolbar({
- controller: this,
- items: {
- replace: {
- style: 'primary',
- text: l10n.replace,
- priority: 80,
-
- click: function() {
- var controller = this.controller,
- state = controller.state(),
- selection = state.get( 'selection' ),
- attachment = selection.single();
-
- controller.media.changeAttachment( attachment );
-
- state.trigger( 'replace', controller.media.toJSON() );
-
- // Restore and reset the default state.
- controller.setState( controller.options.state );
- controller.reset();
- }
- }
- }
- }) );
+ this.setPrimaryButton( l10n.replace, function( controller, state ) {
+ var attachment = state.get( 'selection' ).single();
+ controller.media.changeAttachment( attachment );
+ state.trigger( 'replace', controller.media.toJSON() );
+ } );
},
renderAddSourceToolbar: function() {
- this.toolbar.set( new media.view.Toolbar({
- controller: this,
- items: {
- replace: {
- style: 'primary',
- text: this.addText,
- priority: 80,
-
- click: function() {
- var controller = this.controller,
- state = controller.state(),
- selection = state.get( 'selection' ),
- attachment = selection.single();
-
- controller.media.setSource( attachment );
-
- state.trigger( 'add-source', controller.media.toJSON() );
-
- // Restore and reset the default state.
- controller.setState( controller.options.state );
- controller.reset();
- }
- }
- }
- }) );
+ this.setPrimaryButton( this.addText, function( controller, state ) {
+ var attachment = state.get( 'selection' ).single();
+ controller.media.setSource( attachment );
+ state.trigger( 'add-source', controller.media.toJSON() );
+ } );
}
});
@@ -606,9 +568,7 @@
createStates: function() {
this.states.add([
new media.controller.AudioDetails( {
- media: this.media,
- editable: false,
- menu: 'audio-details'
+ media: this.media
} ),
new media.controller.MediaLibrary( {
@@ -677,9 +637,7 @@
createStates: function() {
this.states.add([
new media.controller.VideoDetails({
- media: this.media,
- editable: false,
- menu: 'video-details'
+ media: this.media
}),
new media.controller.MediaLibrary( {
@@ -721,68 +679,30 @@
},
renderSelectPosterImageToolbar: function() {
- this.toolbar.set( new media.view.Toolbar({
- controller: this,
- items: {
- replace: {
- style: 'primary',
- text: l10n.videoSelectPosterImageTitle,
- priority: 80,
+ this.setPrimaryButton( l10n.videoSelectPosterImageTitle, function( controller, state ) {
+ var attachment = state.get( 'selection' ).single();
- click: function() {
- var controller = this.controller,
- state = controller.state(),
- selection = state.get( 'selection' ),
- attachment = selection.single();
-
- controller.media.set( 'poster', attachment.get( 'url' ) );
-
- state.trigger( 'set-poster-image', controller.media.toJSON() );
-
- // Restore and reset the default state.
- controller.setState( controller.options.state );
- controller.reset();
- }
- }
- }
- }) );
+ controller.media.set( 'poster', attachment.get( 'url' ) );
+ state.trigger( 'set-poster-image', controller.media.toJSON() );
+ } );
},
renderAddTrackToolbar: function() {
- this.toolbar.set( new media.view.Toolbar({
- controller: this,
- items: {
- replace: {
- style: 'primary',
- text: l10n.videoAddTrackTitle,
- priority: 80,
+ this.setPrimaryButton( l10n.videoAddTrackTitle, function( controller, state ) {
+ var attachment = state.get( 'selection' ).single(),
+ content = controller.media.get( 'content' );
- click: function() {
- var controller = this.controller,
- state = controller.state(),
- selection = state.get( 'selection' ),
- attachment = selection.single(),
- content = controller.media.get( 'content' );
+ if ( -1 === content.indexOf( attachment.get( 'url' ) ) ) {
+ content += [
+ ''
+ ].join('');
- if ( -1 === content.indexOf( attachment.get( 'url' ) ) ) {
- content += [
- ''
- ].join('');
-
- controller.media.set( 'content', content );
- }
-
- state.trigger( 'add-track', controller.media.toJSON() );
-
- // Restore and reset the default state.
- controller.setState( controller.options.state );
- controller.reset();
- }
- }
+ controller.media.set( 'content', content );
}
- }) );
+ state.trigger( 'add-track', controller.media.toJSON() );
+ } );
}
});
@@ -827,9 +747,8 @@
*
* @param {Event} e
*/
- removeSetting : function (e) {
+ removeSetting : function(e) {
var wrap = $( e.currentTarget ).parent(), setting;
-
setting = wrap.find( 'input' ).data( 'setting' );
if ( setting ) {
@@ -844,10 +763,10 @@
*
* @fires wp.media.view.MediaDetails#media:setting:remove
*/
- setTracks : function () {
+ setTracks : function() {
var tracks = '';
- _.each( this.$('.content-track'), function (track) {
+ _.each( this.$('.content-track'), function(track) {
tracks += $( track ).val();
} );
@@ -858,7 +777,7 @@
/**
* @global MediaElementPlayer
*/
- setPlayer : function () {
+ setPlayer : function() {
if ( ! this.player && this.media ) {
this.player = new MediaElementPlayer( this.media, this.settings );
}
@@ -867,15 +786,15 @@
/**
* @abstract
*/
- setMedia : function () {
+ setMedia : function() {
return this;
},
- success : function (mejs) {
+ success : function(mejs) {
var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay;
if ( 'flash' === mejs.pluginType && autoplay ) {
- mejs.addEventListener( 'canplay', function () {
+ mejs.addEventListener( 'canplay', function() {
mejs.play();
}, false );
}
@@ -884,23 +803,17 @@
},
/**
- * @global _wpmejsSettings
- *
* @returns {media.view.MediaDetails} Returns itself to allow chaining
*/
render: function() {
- var self = this, settings = {
- success : this.success
- };
-
- if ( ! _.isUndefined( window._wpmejsSettings ) ) {
- settings.pluginPath = _wpmejsSettings.pluginPath;
- }
+ var self = this;
media.view.Settings.AttachmentDisplay.prototype.render.apply( this, arguments );
setTimeout( function() { self.resetFocus(); }, 10 );
- this.settings = settings;
+ this.settings = _.defaults( {
+ success : this.success
+ }, baseSettings );
return this.setMedia();
},
@@ -914,21 +827,21 @@
/**
* When multiple players in the DOM contain the same src, things get weird.
*
- * @param {HTMLElement} media
+ * @param {HTMLElement} elem
* @returns {HTMLElement}
*/
- prepareSrc : function (media) {
- var i = wp.media.view.MediaDetails.instances++;
- _.each( $(media).find('source'), function (source) {
+ prepareSrc : function( elem ) {
+ var i = media.view.MediaDetails.instances++;
+ _.each( $( elem ).find( 'source' ), function( source ) {
source.src = [
source.src,
source.src.indexOf('?') > -1 ? '&' : '?',
'_=',
i
].join('');
- });
+ } );
- return media;
+ return elem;
}
});
@@ -1010,16 +923,16 @@
* @param {Object} settings
* @returns {Object}
*/
- counts : (function (settings) {
+ counts : (function(settings) {
var counts = {};
- return function () {
+ return function() {
if ( ! _.isEmpty( counts ) ) {
return counts;
}
var a = 0, v = 0;
- _.each( settings.attachmentCounts, function (total, mime) {
+ _.each( settings.attachmentCounts, function(total, mime) {
var type;
if ( -1 < mime.indexOf('/') ) {
type = mime.split('/')[0];
@@ -1050,7 +963,7 @@
* @param {Object} options
* @returns {Array}
*/
- states : function (options) {
+ states : function(options) {
return [
new media.controller.Library({
id: 'playlist',
@@ -1093,7 +1006,7 @@
* @param {Object} options
* @returns {Array}
*/
- videoStates : function (options) {
+ videoStates : function(options) {
return [
new media.controller.Library({
id: 'video-playlist',
@@ -1183,7 +1096,7 @@
data = window.decodeURIComponent( $( node ).attr('data-wpview-text') );
frame = media.edit( data );
- frame.on( 'close', function () {
+ frame.on( 'close', function() {
frame.detach();
} );
frame.state( self.state ).on( 'update', function( selection ) {
@@ -1219,7 +1132,7 @@
* @param {Event} e
* @param {HTMLElement} node
*/
- setPlayer: function (e, node) {
+ setPlayer: function(e, node) {
// if the ready event fires on an empty node
if ( ! node ) {
return;
@@ -1227,7 +1140,7 @@
var self = this,
media,
- settings = {},
+ firefox = this.ua.is( 'ff' ),
className = '.wp-' + this.shortcode.tag + '-shortcode';
if ( this.player ) {
@@ -1236,10 +1149,6 @@
media = $( node ).find( className );
- if ( ! _.isUndefined( window._wpmejsSettings ) ) {
- settings.pluginPath = _wpmejsSettings.pluginPath;
- }
-
if ( ! this.isCompatible( media ) ) {
media.closest( '.wpview-wrap' ).addClass( 'wont-play' );
if ( ! media.parent().hasClass( 'wpview-wrap' ) ) {
@@ -1249,7 +1158,7 @@
return;
} else {
media.closest( '.wpview-wrap' ).removeClass( 'wont-play' );
- if ( this.ua.is( 'ff' ) ) {
+ if ( firefox ) {
media.prop( 'preload', 'metadata' );
} else {
media.prop( 'preload', 'none' );
@@ -1259,9 +1168,13 @@
media = wp.media.view.MediaDetails.prepareSrc( media.get(0) );
// Thanks, Firefox!
- setTimeout(function () {
- self.player = new MediaElementPlayer( media, settings );
- }, 50);
+ if ( firefox ) {
+ setTimeout( function() {
+ self.player = new MediaElementPlayer( media, baseSettings );
+ }, 50 );
+ } else {
+ this.player = new MediaElementPlayer( media, baseSettings );
+ }
},
/**
@@ -1270,7 +1183,10 @@
* @returns {string}
*/
getHtml: function() {
- var attrs = this.shortcode.attrs.named;
+ var attrs = _.defaults(
+ this.shortcode.attrs.named,
+ wp.media[ this.shortcode.tag ].defaults
+ );
return this.template({ model: attrs });
}
});
@@ -1332,7 +1248,7 @@
* @param {Event} e
* @param {HTMLElement} node
*/
- setNode: function (e, node) {
+ setNode: function(e, node) {
this.node = node;
this.fetch();
},
@@ -1353,7 +1269,7 @@
* @global WPPlaylistView
* @global tinymce.editors
*/
- setPlayer: function () {
+ setPlayer: function() {
var p,
html = this.getHtml(),
t = this.encodedText,
@@ -1365,7 +1281,7 @@
var doc;
if ( editor.plugins.wpview ) {
doc = editor.getDoc();
- $( doc ).find( '[data-wpview-text="' + t + '"]' ).each(function (i, elem) {
+ $( doc ).find( '[data-wpview-text="' + t + '"]' ).each(function(i, elem) {
var node = $( elem );
node.html( html );
self.node = elem;
@@ -1414,8 +1330,8 @@
artists: data.artists
};
- _.each( attachments, function (attachment) {
- var size = {}, track = {
+ _.each( attachments, function( attachment ) {
+ var size = {}, resize = {}, track = {
src : attachment.url,
type : attachment.mime,
title : attachment.title,
@@ -1425,15 +1341,24 @@
};
if ( 'video' === type ) {
- if ( ! options.width ) {
- options.width = attachment.width;
- options.height = attachment.height;
- }
size.width = attachment.width;
size.height = attachment.height;
+ if ( media.view.settings.contentWidth ) {
+ resize.width = media.view.settings.contentWidth - 22;
+ resize.height = Math.ceil( ( size.height * resize.width ) / size.width );
+ if ( ! options.width ) {
+ options.width = resize.width;
+ options.height = resize.height;
+ }
+ } else {
+ if ( ! options.width ) {
+ options.width = attachment.width;
+ options.height = attachment.height;
+ }
+ }
track.dimensions = {
original : size,
- resized : size
+ resized : _.isEmpty( resize ) ? size : resize
};
} else {
options.width = 400;
@@ -1483,7 +1408,7 @@
function init() {
$(document.body)
.on( 'click', '.wp-switch-editor', wp.media.mixin.pauseAllPlayers )
- .on( 'click', '.add-media-source', function () {
+ .on( 'click', '.add-media-source', function() {
media.frame.setState('add-' + media.frame.defaults.id + '-source');
} );
}
diff --git a/wp-includes/js/media-audiovideo.min.js b/wp-includes/js/media-audiovideo.min.js
index 6977c98fc9..558c72c341 100644
--- a/wp-includes/js/media-audiovideo.min.js
+++ b/wp-includes/js/media-audiovideo.min.js
@@ -1 +1 @@
-!function(a,b,c){function d(){a(document.body).on("click",".wp-switch-editor",wp.media.mixin.pauseAllPlayers).on("click",".add-media-source",function(){e.frame.setState("add-"+e.frame.defaults.id+"-source")})}var e=wp.media,f="undefined"==typeof _wpMediaViewsL10n?{}:_wpMediaViewsL10n;wp.media.mixin={pauseAllPlayers:function(){var a;if(window.mejs&&window.mejs.players)for(a in window.mejs.players)window.mejs.players[a].pause()},ua:{is:function(a){var b=!1,c=window.navigator.userAgent;switch(a){case"oldie":b=null!==c.match(/MSIE [6-8]/gi);break;case"ie":b=null!==c.match(/MSIE/gi);break;case"ff":b=null!==c.match(/firefox/gi);break;case"opera":b=null!==c.match(/OPR/);break;case"safari":b=null!==c.match(/safari/gi)&&null===c.match(/chrome/gi);break;case"chrome":b=c.match(/safari/gi)&&null!==c.match(/chrome/gi)}return b}},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"]}},isCompatible:function(a){if(!a.find("source").length)return!1;var c,d=this.ua,e=!1,f=!1;return d.is("oldIE")?!1:(c=a.find("source"),b.find(this.compat,function(a,g){return d.is(g)&&(f=!0,b.each(c,function(b){var c=new RegExp("audio/("+a.audio.join("|")+")","gi"),d=new RegExp("video/("+a.video.join("|")+")","gi");(null!==b.type.match(d)||null!==b.type.match(c))&&(e=!0)})),e||f}),e)},removePlayer:function(){var a,b,c=this.player;for(a in c.options.features)if(b=c.options.features[a],c["clean"+b])try{c["clean"+b](c)}catch(d){}c.isDynamic||c.$node.remove(),"native"!==c.media.pluginType&&c.media.remove(),delete window.mejs.players[c.id],c.container.remove(),c.globalUnbind(),delete c.node.player},unsetPlayer:function(){this.player&&(wp.media.mixin.pauseAllPlayers(),wp.media.mixin.removePlayer.apply(this),this.player=!1)}},wp.media.playlist=new wp.media.collection({tag:"playlist",type:"audio",editTitle:f.editPlaylistTitle,defaults:{id:wp.media.view.settings.post.id,style:"light",tracklist:!0,tracknumbers:!0,images:!0,artists:!0}}),wp.media["video-playlist"]=new wp.media.collection({tag:"video-playlist",type:"video",editTitle:f.editVideoPlaylistTitle,defaults:{id:wp.media.view.settings.post.id,style:"light",tracklist:!1,tracknumbers:!1,images:!0}}),wp.media.audio={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",loop:!1,autoplay:!1,preload:"none",caption:""},edit:function(a){var c,d=wp.shortcode.next("audio",a).shortcode;return c=wp.media({frame:"audio",state:"audio-details",metadata:b.defaults(d.attrs.named,wp.media.audio.defaults)})},shortcode:function(a){var c,d=this;return b.each(this.defaults,function(b,c){a[c]=d.coerce(a,c),b===a[c]&&delete a[c]}),c=a.content,delete a.content,new wp.shortcode({tag:"audio",attrs:a,content:c})}},wp.media.video={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",poster:"",loop:!1,autoplay:!1,preload:"metadata",content:"",caption:""},edit:function(a){var c,d,e=this.defaults,f=wp.shortcode.next("video",a).shortcode;return d=f.attrs.named,d.content=f.content,c=wp.media({frame:"video",state:"video-details",metadata:b.defaults(d,e)})},shortcode:function(a){var c,d=this;return b.each(this.defaults,function(b,c){a[c]=d.coerce(a,c),b===a[c]&&delete a[c]}),c=a.content,delete a.content,new wp.shortcode({tag:"video",attrs:a,content:c})}},e.model.PostMedia=c.Model.extend({initialize:function(){this.attachment=!1},setSource:function(a){this.attachment=a,this.extension=a.get("filename").split(".").pop(),this.get("src")&&this.extension===this.get("src").split(".").pop()&&this.unset("src"),b.contains(wp.media.view.settings.embedExts,this.extension)?this.set(this.extension,this.attachment.get("url")):this.unset(this.extension)},changeAttachment:function(a){var c=this;this.setSource(a),this.unset("src"),b.each(b.without(wp.media.view.settings.embedExts,this.extension),function(a){c.unset(a)})}}),e.controller.AudioDetails=e.controller.State.extend({defaults:b.defaults({id:"audio-details",toolbar:"audio-details",title:f.audioDetailsTitle,content:"audio-details",menu:"audio-details",router:!1,attachment:!1,priority:60,editing:!1},e.controller.Library.prototype.defaults),initialize:function(a){this.media=a.media,e.controller.State.prototype.initialize.apply(this,arguments)}}),e.controller.VideoDetails=e.controller.State.extend({defaults:b.defaults({id:"video-details",toolbar:"video-details",title:f.videoDetailsTitle,content:"video-details",menu:"video-details",router:!1,attachment:!1,priority:60,editing:!1},e.controller.Library.prototype.defaults),initialize:function(a){this.media=a.media,e.controller.State.prototype.initialize.apply(this,arguments)}}),e.view.MediaFrame.MediaDetails=e.view.MediaFrame.Select.extend({defaults:{id:"media",url:"",menu:"media-details",content:"media-details",toolbar:"media-details",type:"link",priority:120},initialize:function(a){this.DetailsView=a.DetailsView,this.cancelText=a.cancelText,this.addText=a.addText,this.media=new e.model.PostMedia(a.metadata),this.options.selection=new e.model.Selection(this.media.attachment,{multiple:!1}),e.view.MediaFrame.Select.prototype.initialize.apply(this,arguments)},bindHandlers:function(){var a=this.defaults.menu;e.view.MediaFrame.Select.prototype.bindHandlers.apply(this,arguments),this.on("menu:create:"+a,this.createMenu,this),this.on("content:render:"+a,this.renderDetailsContent,this),this.on("menu:render:"+a,this.renderMenu,this),this.on("toolbar:render:"+a,this.renderDetailsToolbar,this)},renderDetailsContent:function(){var a=new this.DetailsView({controller:this,model:this.state().media,attachment:this.state().media.attachment}).render();this.content.set(a)},renderMenu:function(a){var b=this.lastState(),c=b&&b.id,d=this;a.set({cancel:{text:this.cancelText,priority:20,click:function(){c?d.setState(c):d.close()}},separateCancel:new e.View({className:"separator",priority:40})})},renderDetailsToolbar:function(){this.toolbar.set(new e.view.Toolbar({controller:this,items:{select:{style:"primary",text:f.update,priority:80,click:function(){var a=this.controller,b=a.state();a.close(),b.trigger("update",a.media.toJSON()),a.setState(a.options.state),a.reset()}}}}))},renderReplaceToolbar:function(){this.toolbar.set(new e.view.Toolbar({controller:this,items:{replace:{style:"primary",text:f.replace,priority:80,click:function(){var a=this.controller,b=a.state(),c=b.get("selection"),d=c.single();a.media.changeAttachment(d),b.trigger("replace",a.media.toJSON()),a.setState(a.options.state),a.reset()}}}}))},renderAddSourceToolbar:function(){this.toolbar.set(new e.view.Toolbar({controller:this,items:{replace:{style:"primary",text:this.addText,priority:80,click:function(){var a=this.controller,b=a.state(),c=b.get("selection"),d=c.single();a.media.setSource(d),b.trigger("add-source",a.media.toJSON()),a.setState(a.options.state),a.reset()}}}}))}}),e.view.MediaFrame.AudioDetails=e.view.MediaFrame.MediaDetails.extend({defaults:{id:"audio",url:"",menu:"audio-details",content:"audio-details",toolbar:"audio-details",type:"link",title:f.audioDetailsTitle,priority:120},initialize:function(a){a.DetailsView=e.view.AudioDetails,a.cancelText=f.audioDetailsCancel,a.addText=f.audioAddSourceTitle,e.view.MediaFrame.MediaDetails.prototype.initialize.call(this,a)},bindHandlers:function(){e.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply(this,arguments),this.on("toolbar:render:replace-audio",this.renderReplaceToolbar,this),this.on("toolbar:render:add-audio-source",this.renderAddSourceToolbar,this)},createStates:function(){this.states.add([new e.controller.AudioDetails({media:this.media,editable:!1,menu:"audio-details"}),new e.controller.MediaLibrary({type:"audio",id:"replace-audio",title:f.audioReplaceTitle,toolbar:"replace-audio",media:this.media,menu:"audio-details"}),new e.controller.MediaLibrary({type:"audio",id:"add-audio-source",title:f.audioAddSourceTitle,toolbar:"add-audio-source",media:this.media,menu:!1})])}}),e.view.MediaFrame.VideoDetails=e.view.MediaFrame.MediaDetails.extend({defaults:{id:"video",url:"",menu:"video-details",content:"video-details",toolbar:"video-details",type:"link",title:f.videoDetailsTitle,priority:120},initialize:function(a){a.DetailsView=e.view.VideoDetails,a.cancelText=f.videoDetailsCancel,a.addText=f.videoAddSourceTitle,e.view.MediaFrame.MediaDetails.prototype.initialize.call(this,a)},bindHandlers:function(){e.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply(this,arguments),this.on("toolbar:render:replace-video",this.renderReplaceToolbar,this),this.on("toolbar:render:add-video-source",this.renderAddSourceToolbar,this),this.on("toolbar:render:select-poster-image",this.renderSelectPosterImageToolbar,this),this.on("toolbar:render:add-track",this.renderAddTrackToolbar,this)},createStates:function(){this.states.add([new e.controller.VideoDetails({media:this.media,editable:!1,menu:"video-details"}),new e.controller.MediaLibrary({type:"video",id:"replace-video",title:f.videoReplaceTitle,toolbar:"replace-video",media:this.media,menu:"video-details"}),new e.controller.MediaLibrary({type:"video",id:"add-video-source",title:f.videoAddSourceTitle,toolbar:"add-video-source",media:this.media,menu:!1}),new e.controller.MediaLibrary({type:"image",id:"select-poster-image",title:f.videoSelectPosterImageTitle,toolbar:"select-poster-image",media:this.media,menu:"video-details"}),new e.controller.MediaLibrary({type:"text",id:"add-track",title:f.videoAddTrackTitle,toolbar:"add-track",media:this.media,menu:"video-details"})])},renderSelectPosterImageToolbar:function(){this.toolbar.set(new e.view.Toolbar({controller:this,items:{replace:{style:"primary",text:f.videoSelectPosterImageTitle,priority:80,click:function(){var a=this.controller,b=a.state(),c=b.get("selection"),d=c.single();a.media.set("poster",d.get("url")),b.trigger("set-poster-image",a.media.toJSON()),a.setState(a.options.state),a.reset()}}}}))},renderAddTrackToolbar:function(){this.toolbar.set(new e.view.Toolbar({controller:this,items:{replace:{style:"primary",text:f.videoAddTrackTitle,priority:80,click:function(){var a=this.controller,b=a.state(),c=b.get("selection"),d=c.single(),e=a.media.get("content");-1===e.indexOf(d.get("url"))&&(e+=[''].join(""),a.media.set("content",e)),b.trigger("add-track",a.media.toJSON()),a.setState(a.options.state),a.reset()}}}}))}}),e.view.MediaDetails=e.view.Settings.AttachmentDisplay.extend({initialize:function(){b.bindAll(this,"success"),this.listenTo(this.controller,"close",e.mixin.unsetPlayer),this.on("ready",this.setPlayer),this.on("media:setting:remove",e.mixin.unsetPlayer,this),this.on("media:setting:remove",this.render),this.on("media:setting:remove",this.setPlayer),this.events=b.extend(this.events,{"click .remove-setting":"removeSetting","change .content-track":"setTracks","click .remove-track":"setTracks"}),e.view.Settings.AttachmentDisplay.prototype.initialize.apply(this,arguments)},prepare:function(){return b.defaults({model:this.model.toJSON()},this.options)},removeSetting:function(b){var c,d=a(b.currentTarget).parent();c=d.find("input").data("setting"),c&&(this.model.unset(c),this.trigger("media:setting:remove",this)),d.remove()},setTracks:function(){var c="";b.each(this.$(".content-track"),function(b){c+=a(b).val()}),this.model.set("content",c),this.trigger("media:setting:remove",this)},setPlayer:function(){!this.player&&this.media&&(this.player=new MediaElementPlayer(this.media,this.settings))},setMedia:function(){return this},success:function(a){var b=a.attributes.autoplay&&"false"!==a.attributes.autoplay;"flash"===a.pluginType&&b&&a.addEventListener("canplay",function(){a.play()},!1),this.mejs=a},render:function(){var a=this,c={success:this.success};return b.isUndefined(window._wpmejsSettings)||(c.pluginPath=_wpmejsSettings.pluginPath),e.view.Settings.AttachmentDisplay.prototype.render.apply(this,arguments),setTimeout(function(){a.resetFocus()},10),this.settings=c,this.setMedia()},resetFocus:function(){this.$(".embed-media-settings").scrollTop(0)}},{instances:0,prepareSrc:function(c){var d=wp.media.view.MediaDetails.instances++;return b.each(a(c).find("source"),function(a){a.src=[a.src,a.src.indexOf("?")>-1?"&":"?","_=",d].join("")}),c}}),e.view.AudioDetails=e.view.MediaDetails.extend({className:"audio-details",template:e.template("audio-details"),setMedia:function(){var a=this.$(".wp-audio-shortcode");return a.find("source").length?(a.is(":hidden")&&a.show(),this.media=e.view.MediaDetails.prepareSrc(a.get(0))):(a.hide(),this.media=!1),this}}),e.view.VideoDetails=e.view.MediaDetails.extend({className:"video-details",template:e.template("video-details"),setMedia:function(){var a=this.$(".wp-video-shortcode");return a.find("source").length?(a.is(":hidden")&&a.show(),this.media=a.hasClass("youtube-video")?a.get(0):e.view.MediaDetails.prepareSrc(a.get(0))):(a.hide(),this.media=!1),this}}),b.extend(wp.media.playlist,{counts:function(a){var c={};return function(){if(!b.isEmpty(c))return c;var d=0,e=0;return b.each(a.attachmentCounts,function(a,b){var c;if(-1"+e.find("source").eq(0).prop("src")+"
");e.closest(".wpview-wrap").removeClass("wont-play"),this.ua.is("ff")?e.prop("preload","metadata"):e.prop("preload","none"),e=wp.media.view.MediaDetails.prepareSrc(e.get(0)),setTimeout(function(){f.player=new MediaElementPlayer(e,g)},50)}},getHtml:function(){var a=this.shortcode.attrs.named;return this.template({model:a})}}),b.extend(wp.mce.media.View.prototype,wp.media.mixin),wp.mce.video=b.extend({},wp.mce.media,{shortcode:"video",state:"video-details",View:wp.mce.media.View.extend({className:"editor-video",template:e.template("editor-video")})}),wp.mce.views.register("video",wp.mce.video),wp.mce.audio=b.extend({},wp.mce.media,{shortcode:"audio",state:"audio-details",View:wp.mce.media.View.extend({className:"editor-audio",template:e.template("editor-audio")})}),wp.mce.views.register("audio",wp.mce.audio),wp.mce.media.PlaylistView=wp.mce.View.extend({className:"editor-playlist",template:e.template("editor-playlist"),initialize:function(c){this.data={},this.attachments=[],this.shortcode=c.shortcode,b.bindAll(this,"setPlayer"),a(this).on("ready",this.setNode)},setNode:function(a,b){this.node=b,this.fetch()},fetch:function(){this.attachments=wp.media[this.shortcode.tag].attachments(this.shortcode),this.attachments.more().done(this.setPlayer)},setPlayer:function(){var c,d=this.getHtml(),e=this.encodedText,f=this;this.unsetPlayer(),b.each(tinymce.editors,function(b){var c;b.plugins.wpview&&(c=b.getDoc(),a(c).find('[data-wpview-text="'+e+'"]').each(function(b,c){var e=a(c);e.html(d),f.node=c}))},this),c=new WPPlaylistView({el:a(f.node).find(".wp-playlist").get(0),metadata:this.data}),this.player=c._player},getHtml:function(){var a,c,d=this.shortcode.attrs.named,e=wp.media[this.shortcode.tag],f="playlist"===this.shortcode.tag?"audio":"video",g=[];if(this.attachments.length)return b.each(e.defaults,function(a,b){d[b]=e.coerce(d,b)}),c=this.attachments.toJSON(),a={type:f,style:d.style,tracklist:d.tracklist,tracknumbers:d.tracknumbers,images:d.images,artists:d.artists},b.each(c,function(b){var c={},d={src:b.url,type:b.mime,title:b.title,caption:b.caption,description:b.description,meta:b.meta};"video"===f?(a.width||(a.width=b.width,a.height=b.height),c.width=b.width,c.height=b.height,d.dimensions={original:c,resized:c}):a.width=400,d.image=b.image,d.thumb=b.thumb,g.push(d)}),a.tracks=g,this.data=a,this.template(a)}}),b.extend(wp.mce.media.PlaylistView.prototype,wp.media.mixin),wp.mce.playlist=b.extend({},wp.mce.media,{shortcode:"playlist",state:"playlist-edit",View:wp.mce.media.PlaylistView}),wp.mce.views.register("playlist",wp.mce.playlist),wp.mce["video-playlist"]=b.extend({},wp.mce.media,{shortcode:"video-playlist",state:"video-playlist-edit",View:wp.mce.media.PlaylistView}),wp.mce.views.register("video-playlist",wp.mce["video-playlist"]),a(d)}(jQuery,_,Backbone);
\ No newline at end of file
+!function(a,b,c){function d(){a(document.body).on("click",".wp-switch-editor",wp.media.mixin.pauseAllPlayers).on("click",".add-media-source",function(){e.frame.setState("add-"+e.frame.defaults.id+"-source")})}var e=wp.media,f={},g="undefined"==typeof _wpMediaViewsL10n?{}:_wpMediaViewsL10n;b.isUndefined(window._wpmejsSettings)||(f.pluginPath=_wpmejsSettings.pluginPath),wp.media.mixin={pauseAllPlayers:function(){var a;if(window.mejs&&window.mejs.players)for(a in window.mejs.players)window.mejs.players[a].pause()},ua:{is:function(a){var b=!1,c=window.navigator.userAgent;switch(a){case"oldie":b=null!==c.match(/MSIE [6-8]/gi);break;case"ie":b=null!==c.match(/MSIE/gi);break;case"ff":b=null!==c.match(/firefox/gi);break;case"opera":b=null!==c.match(/OPR/);break;case"safari":b=null!==c.match(/safari/gi)&&null===c.match(/chrome/gi);break;case"chrome":b=null!==c.match(/safari/gi)&&null!==c.match(/chrome/gi)}return b}},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"]}},isCompatible:function(a){if(!a.find("source").length)return!1;var c,d=this.ua,e=!1,f=!1;return d.is("oldIE")?!1:(c=a.find("source"),b.find(this.compat,function(a,g){return d.is(g)&&(f=!0,b.each(c,function(b){var c=new RegExp("audio/("+a.audio.join("|")+")","gi"),d=new RegExp("video/("+a.video.join("|")+")","gi");(null!==b.type.match(d)||null!==b.type.match(c))&&(e=!0)})),e||f}),e)},removePlayer:function(){var a,b,c=this.player;for(a in c.options.features)if(b=c.options.features[a],c["clean"+b])try{c["clean"+b](c)}catch(d){}c.isDynamic||c.$node.remove(),"native"!==c.media.pluginType&&c.media.remove(),delete window.mejs.players[c.id],c.container.remove(),c.globalUnbind(),delete c.node.player},unsetPlayer:function(){this.player&&(wp.media.mixin.pauseAllPlayers(),wp.media.mixin.removePlayer.apply(this),this.player=!1)}},wp.media.playlist=new wp.media.collection({tag:"playlist",type:"audio",editTitle:g.editPlaylistTitle,defaults:{id:wp.media.view.settings.post.id,style:"light",tracklist:!0,tracknumbers:!0,images:!0,artists:!0}}),wp.media["video-playlist"]=new wp.media.collection({tag:"video-playlist",type:"video",editTitle:g.editVideoPlaylistTitle,defaults:{id:wp.media.view.settings.post.id,style:"light",tracklist:!1,tracknumbers:!1,images:!0}}),wp.media.audio={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",loop:!1,autoplay:!1,preload:"none",caption:""},edit:function(a){var c,d=wp.shortcode.next("audio",a).shortcode;return c=wp.media({frame:"audio",state:"audio-details",metadata:b.defaults(d.attrs.named,this.defaults)})},shortcode:function(a){var c,d=this;return b.each(this.defaults,function(b,c){a[c]=d.coerce(a,c),b===a[c]&&delete a[c]}),c=a.content,delete a.content,new wp.shortcode({tag:"audio",attrs:a,content:c})}},wp.media.video={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",poster:"",loop:!1,autoplay:!1,preload:"metadata",content:"",caption:"",width:640,height:360},edit:function(a){var c,d,e=wp.shortcode.next("video",a).shortcode;return d=e.attrs.named,d.content=e.content,c=wp.media({frame:"video",state:"video-details",metadata:b.defaults(d,this.defaults)})},shortcode:function(a){var c,d=this;return b.each(this.defaults,function(b,c){a[c]=d.coerce(a,c),b===a[c]&&delete a[c]}),c=a.content,delete a.content,new wp.shortcode({tag:"video",attrs:a,content:c})}},e.model.PostMedia=c.Model.extend({initialize:function(){this.attachment=!1},setSource:function(a){this.attachment=a,this.extension=a.get("filename").split(".").pop(),this.get("src")&&this.extension===this.get("src").split(".").pop()&&this.unset("src"),b.contains(wp.media.view.settings.embedExts,this.extension)?this.set(this.extension,this.attachment.get("url")):this.unset(this.extension)},changeAttachment:function(a){var c=this;this.setSource(a),this.unset("src"),b.each(b.without(wp.media.view.settings.embedExts,this.extension),function(a){c.unset(a)})}}),e.controller.AudioDetails=e.controller.State.extend({defaults:{id:"audio-details",toolbar:"audio-details",title:g.audioDetailsTitle,content:"audio-details",menu:"audio-details",router:!1,priority:60},initialize:function(a){this.media=a.media,e.controller.State.prototype.initialize.apply(this,arguments)}}),e.controller.VideoDetails=e.controller.State.extend({defaults:{id:"video-details",toolbar:"video-details",title:g.videoDetailsTitle,content:"video-details",menu:"video-details",router:!1,priority:60},initialize:function(a){this.media=a.media,e.controller.State.prototype.initialize.apply(this,arguments)}}),e.view.MediaFrame.MediaDetails=e.view.MediaFrame.Select.extend({defaults:{id:"media",url:"",menu:"media-details",content:"media-details",toolbar:"media-details",type:"link",priority:120},initialize:function(a){this.DetailsView=a.DetailsView,this.cancelText=a.cancelText,this.addText=a.addText,this.media=new e.model.PostMedia(a.metadata),this.options.selection=new e.model.Selection(this.media.attachment,{multiple:!1}),e.view.MediaFrame.Select.prototype.initialize.apply(this,arguments)},bindHandlers:function(){var a=this.defaults.menu;e.view.MediaFrame.Select.prototype.bindHandlers.apply(this,arguments),this.on("menu:create:"+a,this.createMenu,this),this.on("content:render:"+a,this.renderDetailsContent,this),this.on("menu:render:"+a,this.renderMenu,this),this.on("toolbar:render:"+a,this.renderDetailsToolbar,this)},renderDetailsContent:function(){var a=new this.DetailsView({controller:this,model:this.state().media,attachment:this.state().media.attachment}).render();this.content.set(a)},renderMenu:function(a){var b=this.lastState(),c=b&&b.id,d=this;a.set({cancel:{text:this.cancelText,priority:20,click:function(){c?d.setState(c):d.close()}},separateCancel:new e.View({className:"separator",priority:40})})},setPrimaryButton:function(a,b){this.toolbar.set(new e.view.Toolbar({controller:this,items:{button:{style:"primary",text:a,priority:80,click:function(){var a=this.controller;b.call(this,a,a.state()),a.setState(a.options.state),a.reset()}}}}))},renderDetailsToolbar:function(){this.setPrimaryButton(g.update,function(a,b){a.close(),b.trigger("update",a.media.toJSON())})},renderReplaceToolbar:function(){this.setPrimaryButton(g.replace,function(a,b){var c=b.get("selection").single();a.media.changeAttachment(c),b.trigger("replace",a.media.toJSON())})},renderAddSourceToolbar:function(){this.setPrimaryButton(this.addText,function(a,b){var c=b.get("selection").single();a.media.setSource(c),b.trigger("add-source",a.media.toJSON())})}}),e.view.MediaFrame.AudioDetails=e.view.MediaFrame.MediaDetails.extend({defaults:{id:"audio",url:"",menu:"audio-details",content:"audio-details",toolbar:"audio-details",type:"link",title:g.audioDetailsTitle,priority:120},initialize:function(a){a.DetailsView=e.view.AudioDetails,a.cancelText=g.audioDetailsCancel,a.addText=g.audioAddSourceTitle,e.view.MediaFrame.MediaDetails.prototype.initialize.call(this,a)},bindHandlers:function(){e.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply(this,arguments),this.on("toolbar:render:replace-audio",this.renderReplaceToolbar,this),this.on("toolbar:render:add-audio-source",this.renderAddSourceToolbar,this)},createStates:function(){this.states.add([new e.controller.AudioDetails({media:this.media}),new e.controller.MediaLibrary({type:"audio",id:"replace-audio",title:g.audioReplaceTitle,toolbar:"replace-audio",media:this.media,menu:"audio-details"}),new e.controller.MediaLibrary({type:"audio",id:"add-audio-source",title:g.audioAddSourceTitle,toolbar:"add-audio-source",media:this.media,menu:!1})])}}),e.view.MediaFrame.VideoDetails=e.view.MediaFrame.MediaDetails.extend({defaults:{id:"video",url:"",menu:"video-details",content:"video-details",toolbar:"video-details",type:"link",title:g.videoDetailsTitle,priority:120},initialize:function(a){a.DetailsView=e.view.VideoDetails,a.cancelText=g.videoDetailsCancel,a.addText=g.videoAddSourceTitle,e.view.MediaFrame.MediaDetails.prototype.initialize.call(this,a)},bindHandlers:function(){e.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply(this,arguments),this.on("toolbar:render:replace-video",this.renderReplaceToolbar,this),this.on("toolbar:render:add-video-source",this.renderAddSourceToolbar,this),this.on("toolbar:render:select-poster-image",this.renderSelectPosterImageToolbar,this),this.on("toolbar:render:add-track",this.renderAddTrackToolbar,this)},createStates:function(){this.states.add([new e.controller.VideoDetails({media:this.media}),new e.controller.MediaLibrary({type:"video",id:"replace-video",title:g.videoReplaceTitle,toolbar:"replace-video",media:this.media,menu:"video-details"}),new e.controller.MediaLibrary({type:"video",id:"add-video-source",title:g.videoAddSourceTitle,toolbar:"add-video-source",media:this.media,menu:!1}),new e.controller.MediaLibrary({type:"image",id:"select-poster-image",title:g.videoSelectPosterImageTitle,toolbar:"select-poster-image",media:this.media,menu:"video-details"}),new e.controller.MediaLibrary({type:"text",id:"add-track",title:g.videoAddTrackTitle,toolbar:"add-track",media:this.media,menu:"video-details"})])},renderSelectPosterImageToolbar:function(){this.setPrimaryButton(g.videoSelectPosterImageTitle,function(a,b){var c=b.get("selection").single();a.media.set("poster",c.get("url")),b.trigger("set-poster-image",a.media.toJSON())})},renderAddTrackToolbar:function(){this.setPrimaryButton(g.videoAddTrackTitle,function(a,b){var c=b.get("selection").single(),d=a.media.get("content");-1===d.indexOf(c.get("url"))&&(d+=[''].join(""),a.media.set("content",d)),b.trigger("add-track",a.media.toJSON())})}}),e.view.MediaDetails=e.view.Settings.AttachmentDisplay.extend({initialize:function(){b.bindAll(this,"success"),this.listenTo(this.controller,"close",e.mixin.unsetPlayer),this.on("ready",this.setPlayer),this.on("media:setting:remove",e.mixin.unsetPlayer,this),this.on("media:setting:remove",this.render),this.on("media:setting:remove",this.setPlayer),this.events=b.extend(this.events,{"click .remove-setting":"removeSetting","change .content-track":"setTracks","click .remove-track":"setTracks"}),e.view.Settings.AttachmentDisplay.prototype.initialize.apply(this,arguments)},prepare:function(){return b.defaults({model:this.model.toJSON()},this.options)},removeSetting:function(b){var c,d=a(b.currentTarget).parent();c=d.find("input").data("setting"),c&&(this.model.unset(c),this.trigger("media:setting:remove",this)),d.remove()},setTracks:function(){var c="";b.each(this.$(".content-track"),function(b){c+=a(b).val()}),this.model.set("content",c),this.trigger("media:setting:remove",this)},setPlayer:function(){!this.player&&this.media&&(this.player=new MediaElementPlayer(this.media,this.settings))},setMedia:function(){return this},success:function(a){var b=a.attributes.autoplay&&"false"!==a.attributes.autoplay;"flash"===a.pluginType&&b&&a.addEventListener("canplay",function(){a.play()},!1),this.mejs=a},render:function(){var a=this;return e.view.Settings.AttachmentDisplay.prototype.render.apply(this,arguments),setTimeout(function(){a.resetFocus()},10),this.settings=b.defaults({success:this.success},f),this.setMedia()},resetFocus:function(){this.$(".embed-media-settings").scrollTop(0)}},{instances:0,prepareSrc:function(c){var d=e.view.MediaDetails.instances++;return b.each(a(c).find("source"),function(a){a.src=[a.src,a.src.indexOf("?")>-1?"&":"?","_=",d].join("")}),c}}),e.view.AudioDetails=e.view.MediaDetails.extend({className:"audio-details",template:e.template("audio-details"),setMedia:function(){var a=this.$(".wp-audio-shortcode");return a.find("source").length?(a.is(":hidden")&&a.show(),this.media=e.view.MediaDetails.prepareSrc(a.get(0))):(a.hide(),this.media=!1),this}}),e.view.VideoDetails=e.view.MediaDetails.extend({className:"video-details",template:e.template("video-details"),setMedia:function(){var a=this.$(".wp-video-shortcode");return a.find("source").length?(a.is(":hidden")&&a.show(),this.media=a.hasClass("youtube-video")?a.get(0):e.view.MediaDetails.prepareSrc(a.get(0))):(a.hide(),this.media=!1),this}}),b.extend(wp.media.playlist,{counts:function(a){var c={};return function(){if(!b.isEmpty(c))return c;var d=0,e=0;return b.each(a.attachmentCounts,function(a,b){var c;if(-1"+d.find("source").eq(0).prop("src")+"");d.closest(".wpview-wrap").removeClass("wont-play"),g?d.prop("preload","metadata"):d.prop("preload","none"),d=wp.media.view.MediaDetails.prepareSrc(d.get(0)),g?setTimeout(function(){e.player=new MediaElementPlayer(d,f)},50):this.player=new MediaElementPlayer(d,f)}},getHtml:function(){var a=b.defaults(this.shortcode.attrs.named,wp.media[this.shortcode.tag].defaults);return this.template({model:a})}}),b.extend(wp.mce.media.View.prototype,wp.media.mixin),wp.mce.video=b.extend({},wp.mce.media,{shortcode:"video",state:"video-details",View:wp.mce.media.View.extend({className:"editor-video",template:e.template("editor-video")})}),wp.mce.views.register("video",wp.mce.video),wp.mce.audio=b.extend({},wp.mce.media,{shortcode:"audio",state:"audio-details",View:wp.mce.media.View.extend({className:"editor-audio",template:e.template("editor-audio")})}),wp.mce.views.register("audio",wp.mce.audio),wp.mce.media.PlaylistView=wp.mce.View.extend({className:"editor-playlist",template:e.template("editor-playlist"),initialize:function(c){this.data={},this.attachments=[],this.shortcode=c.shortcode,b.bindAll(this,"setPlayer"),a(this).on("ready",this.setNode)},setNode:function(a,b){this.node=b,this.fetch()},fetch:function(){this.attachments=wp.media[this.shortcode.tag].attachments(this.shortcode),this.attachments.more().done(this.setPlayer)},setPlayer:function(){var c,d=this.getHtml(),e=this.encodedText,f=this;this.unsetPlayer(),b.each(tinymce.editors,function(b){var c;b.plugins.wpview&&(c=b.getDoc(),a(c).find('[data-wpview-text="'+e+'"]').each(function(b,c){var e=a(c);e.html(d),f.node=c}))},this),c=new WPPlaylistView({el:a(f.node).find(".wp-playlist").get(0),metadata:this.data}),this.player=c._player},getHtml:function(){var a,c,d=this.shortcode.attrs.named,f=wp.media[this.shortcode.tag],g="playlist"===this.shortcode.tag?"audio":"video",h=[];if(this.attachments.length)return b.each(f.defaults,function(a,b){d[b]=f.coerce(d,b)}),c=this.attachments.toJSON(),a={type:g,style:d.style,tracklist:d.tracklist,tracknumbers:d.tracknumbers,images:d.images,artists:d.artists},b.each(c,function(c){var d={},f={},i={src:c.url,type:c.mime,title:c.title,caption:c.caption,description:c.description,meta:c.meta};"video"===g?(d.width=c.width,d.height=c.height,e.view.settings.contentWidth?(f.width=e.view.settings.contentWidth-22,f.height=Math.ceil(d.height*f.width/d.width),a.width||(a.width=f.width,a.height=f.height)):a.width||(a.width=c.width,a.height=c.height),i.dimensions={original:d,resized:b.isEmpty(f)?d:f}):a.width=400,i.image=c.image,i.thumb=c.thumb,h.push(i)}),a.tracks=h,this.data=a,this.template(a)}}),b.extend(wp.mce.media.PlaylistView.prototype,wp.media.mixin),wp.mce.playlist=b.extend({},wp.mce.media,{shortcode:"playlist",state:"playlist-edit",View:wp.mce.media.PlaylistView}),wp.mce.views.register("playlist",wp.mce.playlist),wp.mce["video-playlist"]=b.extend({},wp.mce.media,{shortcode:"video-playlist",state:"video-playlist-edit",View:wp.mce.media.PlaylistView}),wp.mce.views.register("video-playlist",wp.mce["video-playlist"]),a(d)}(jQuery,_,Backbone);
\ No newline at end of file
diff --git a/wp-includes/js/tinymce/skins/wordpress/wp-content.css b/wp-includes/js/tinymce/skins/wordpress/wp-content.css
index f758542193..fba7b06dac 100644
--- a/wp-includes/js/tinymce/skins/wordpress/wp-content.css
+++ b/wp-includes/js/tinymce/skins/wordpress/wp-content.css
@@ -164,6 +164,10 @@ embed {
max-width: 100%;
}
+audio {
+ visibility: hidden;
+}
+
/**
* WP Views
*/
diff --git a/wp-includes/media-template.php b/wp-includes/media-template.php
index 36d81e5974..82b3abe83d 100644
--- a/wp-includes/media-template.php
+++ b/wp-includes/media-template.php
@@ -48,14 +48,20 @@ function wp_underscore_audio_template() {
function wp_underscore_video_template() {
$video_types = wp_get_video_extensions();
?>
-<#
-var isYouTube = ! _.isEmpty( data.model.src ) && data.model.src.match(/youtube|youtu\.be/);
- w = ! data.model.width || data.model.width > 640 ? 640 : data.model.width,
- h = ! data.model.height ? 360 : data.model.height;
+<# var w, h, settings = wp.media.view.settings,
+ isYouTube = ! _.isEmpty( data.model.src ) && data.model.src.match(/youtube|youtu\.be/);
-if ( data.model.width && w !== data.model.width ) {
- h = Math.ceil( ( h * w ) / data.model.width );
-}
+ if ( settings.contentWidth && data.model.width >= settings.contentWidth ) {
+ w = settings.contentWidth;
+ } else {
+ w = data.model.width;
+ }
+
+ if ( w !== data.model.width ) {
+ h = Math.ceil( ( h * w ) / data.model.width );
+ } else {
+ h = data.model.height;
+ }
#>