From 7ad4205f7018ad356257ae1f1218dc27fdd1cfb2 Mon Sep 17 00:00:00 2001
From: Scott Taylor
Date: Wed, 19 Mar 2014 07:02:15 +0000
Subject: [PATCH] Add MCE views for audio and video shortcodes. When the
shortcode does not contain a source that supports native playback, just show
the filename.
* Remove the audio/video shortcode parsing from the `wpgallery` plugin.
* Make `mce-view` a dependency of `media-audiovideo`
* Introduce `wp.mce.video`, `wp.mce.audio`, `wp.mce.media`, and `wp.mce.media.View`
* Rename `wp.media.audio|video.shortcode()` to `wp.media.audio|video.update()` since it is called on Update and returns a `wp.shortcode` object now.
* In `wp.mce.View.render()`, fire a `ready` event when the placeholder is being parsed and pass the current node to the event handler.
See #27389, #27437.
Built from https://develop.svn.wordpress.org/trunk@27615
git-svn-id: http://core.svn.wordpress.org/trunk@27458 1a063a9b-81f0-0310-95a4-ce76da25c4cd
---
wp-includes/js/mce-view.js | 14 +-
wp-includes/js/mce-view.min.js | 2 +-
wp-includes/js/media-audiovideo.js | 165 +++++++++++++++---
wp-includes/js/media-audiovideo.min.js | 2 +-
.../js/tinymce/plugins/wpgallery/plugin.js | 33 +---
.../tinymce/plugins/wpgallery/plugin.min.js | 2 +-
.../js/tinymce/skins/wordpress/wp-content.css | 66 +++++--
wp-includes/js/tinymce/wp-tinymce.js.gz | Bin 121461 -> 121352 bytes
wp-includes/media-template.php | 17 ++
wp-includes/script-loader.php | 2 +-
10 files changed, 224 insertions(+), 79 deletions(-)
diff --git a/wp-includes/js/mce-view.js b/wp-includes/js/mce-view.js
index be2681a06b..73e33c9cfb 100644
--- a/wp-includes/js/mce-view.js
+++ b/wp-includes/js/mce-view.js
@@ -31,10 +31,14 @@ window.wp = window.wp || {};
var html = this.getHtml();
// Search all tinymce editor instances and update the placeholders
_.each( tinymce.editors, function( editor ) {
- var doc;
+ var doc, self = this;
if ( editor.plugins.wpview ) {
doc = editor.getDoc();
- $( doc ).find( '[data-wpview-text="' + this.encodedText + '"]' ).html( html );
+ $( doc ).find( '[data-wpview-text="' + this.encodedText + '"]' ).each(function (i, elem) {
+ var node = $( elem );
+ node.html( html );
+ $( self ).trigger( 'ready', elem );
+ });
}
}, this );
}
@@ -178,7 +182,7 @@ window.wp = window.wp || {};
/**
* Refresh views after an update is made
- *
+ *
* @param view {object} being refreshed
* @param text {string} textual representation of the view
*/
@@ -204,9 +208,9 @@ window.wp = window.wp || {};
return instances[ encodedText ];
},
- /**
+ /**
* render( scope )
- *
+ *
* Renders any view instances inside a DOM node `scope`.
*
* View instances are detected by the presence of wrapper elements.
diff --git a/wp-includes/js/mce-view.min.js b/wp-includes/js/mce-view.min.js
index c0229cce0e..92d42a172b 100644
--- a/wp-includes/js/mce-view.min.js
+++ b/wp-includes/js/mce-view.min.js
@@ -1 +1 @@
-window.wp=window.wp||{},function(a){var b={},c={},d=wp.media,e=["encodedText"];wp.mce=wp.mce||{},wp.mce.View=function(a){a||(a={}),_.extend(this,_.pick(a,e)),this.initialize.apply(this,arguments)},_.extend(wp.mce.View.prototype,{initialize:function(){},html:function(){},render:function(){var b=this.getHtml();_.each(tinymce.editors,function(c){var d;c.plugins.wpview&&(d=c.getDoc(),a(d).find('[data-wpview-text="'+this.encodedText+'"]').html(b))},this)}}),wp.mce.View.extend=Backbone.View.extend,wp.mce.views={register:function(a,c){b[a]=c},get:function(a){return b[a]},unregister:function(a){delete b[a]},toViews:function(a){var c,d=[{content:a}];return _.each(b,function(a,b){c=d.slice(),d=[],_.each(c,function(c){var e,f=c.content;if(c.processed)return void d.push(c);for(;f&&(e=a.toView(f));)e.index&&d.push({content:f.substring(0,e.index)}),d.push({content:wp.mce.views.toView(b,e.content,e.options),processed:!0}),f=f.slice(e.index+e.content.length);f&&d.push({content:f})})}),_.pluck(d,"content").join("")},toView:function(a,b,d){var e,f,g=wp.mce.views.get(a),h=window.encodeURIComponent(b);return g?(wp.mce.views.getInstance(h)||(f=d,f.encodedText=h,e=new g.View(f),c[h]=e),wp.html.string({tag:"div",attrs:{"class":"wpview-wrap wpview-type-"+a,"data-wpview-text":h,"data-wpview-type":a,contenteditable:"false"},content:" "})):b},refreshView:function(a,b){var d,e,f,g=window.encodeURIComponent(b);f=wp.mce.views.getInstance(g),f||(e=a.toView(b),d=e.options,d.encodedText=g,f=new a.View(d),c[g]=f),wp.mce.views.render()},getInstance:function(a){return c[a]},render:function(){_.each(c,function(a){a.render()})},edit:function(b){var c=a(b).data("wpview-type"),d=wp.mce.views.get(c);d&&d.edit(b)}},wp.mce.gallery={shortcode:"gallery",toView:function(a){var b=wp.shortcode.next(this.shortcode,a);if(b)return{index:b.index,content:b.content,options:{shortcode:b.shortcode}}},View:wp.mce.View.extend({className:"editor-gallery",template:d.template("editor-gallery"),postID:a("#post_ID").val(),initialize:function(a){this.shortcode=a.shortcode,this.fetch()},fetch:function(){this.attachments=wp.media.gallery.attachments(this.shortcode,this.postID),this.attachments.more().done(_.bind(this.render,this))},getHtml:function(){var a,b,c=this.shortcode.attrs.named;if(this.attachments.length)return b=this.attachments.toJSON(),_.each(b,function(a){a.thumbnail=a.sizes.thumbnail?a.sizes.thumbnail:a.sizes.full}),a={attachments:b,columns:c.columns?parseInt(c.columns,10):3},this.template(a)}}),edit:function(b){var c,d,e=wp.media.gallery,f=this;d=window.decodeURIComponent(a(b).attr("data-wpview-text")),c=e.edit(d),c.state("gallery-edit").on("update",function(d){var g=e.shortcode(d).string();a(b).attr("data-wpview-text",window.encodeURIComponent(g)),wp.mce.views.refreshView(f,g),c.detach()})}},wp.mce.views.register("gallery",wp.mce.gallery)}(jQuery);
\ No newline at end of file
+window.wp=window.wp||{},function(a){var b={},c={},d=wp.media,e=["encodedText"];wp.mce=wp.mce||{},wp.mce.View=function(a){a||(a={}),_.extend(this,_.pick(a,e)),this.initialize.apply(this,arguments)},_.extend(wp.mce.View.prototype,{initialize:function(){},html:function(){},render:function(){var b=this.getHtml();_.each(tinymce.editors,function(c){var d,e=this;c.plugins.wpview&&(d=c.getDoc(),a(d).find('[data-wpview-text="'+this.encodedText+'"]').each(function(c,d){var f=a(d);f.html(b),a(e).trigger("ready",d)}))},this)}}),wp.mce.View.extend=Backbone.View.extend,wp.mce.views={register:function(a,c){b[a]=c},get:function(a){return b[a]},unregister:function(a){delete b[a]},toViews:function(a){var c,d=[{content:a}];return _.each(b,function(a,b){c=d.slice(),d=[],_.each(c,function(c){var e,f=c.content;if(c.processed)return void d.push(c);for(;f&&(e=a.toView(f));)e.index&&d.push({content:f.substring(0,e.index)}),d.push({content:wp.mce.views.toView(b,e.content,e.options),processed:!0}),f=f.slice(e.index+e.content.length);f&&d.push({content:f})})}),_.pluck(d,"content").join("")},toView:function(a,b,d){var e,f,g=wp.mce.views.get(a),h=window.encodeURIComponent(b);return g?(wp.mce.views.getInstance(h)||(f=d,f.encodedText=h,e=new g.View(f),c[h]=e),wp.html.string({tag:"div",attrs:{"class":"wpview-wrap wpview-type-"+a,"data-wpview-text":h,"data-wpview-type":a,contenteditable:"false"},content:" "})):b},refreshView:function(a,b){var d,e,f,g=window.encodeURIComponent(b);f=wp.mce.views.getInstance(g),f||(e=a.toView(b),d=e.options,d.encodedText=g,f=new a.View(d),c[g]=f),wp.mce.views.render()},getInstance:function(a){return c[a]},render:function(){_.each(c,function(a){a.render()})},edit:function(b){var c=a(b).data("wpview-type"),d=wp.mce.views.get(c);d&&d.edit(b)}},wp.mce.gallery={shortcode:"gallery",toView:function(a){var b=wp.shortcode.next(this.shortcode,a);if(b)return{index:b.index,content:b.content,options:{shortcode:b.shortcode}}},View:wp.mce.View.extend({className:"editor-gallery",template:d.template("editor-gallery"),postID:a("#post_ID").val(),initialize:function(a){this.shortcode=a.shortcode,this.fetch()},fetch:function(){this.attachments=wp.media.gallery.attachments(this.shortcode,this.postID),this.attachments.more().done(_.bind(this.render,this))},getHtml:function(){var a,b,c=this.shortcode.attrs.named;if(this.attachments.length)return b=this.attachments.toJSON(),_.each(b,function(a){a.thumbnail=a.sizes.thumbnail?a.sizes.thumbnail:a.sizes.full}),a={attachments:b,columns:c.columns?parseInt(c.columns,10):3},this.template(a)}}),edit:function(b){var c,d,e=wp.media.gallery,f=this;d=window.decodeURIComponent(a(b).attr("data-wpview-text")),c=e.edit(d),c.state("gallery-edit").on("update",function(d){var g=e.shortcode(d).string();a(b).attr("data-wpview-text",window.encodeURIComponent(g)),wp.mce.views.refreshView(f,g),c.detach()})}},wp.mce.views.register("gallery",wp.mce.gallery)}(jQuery);
\ No newline at end of file
diff --git a/wp-includes/js/media-audiovideo.js b/wp-includes/js/media-audiovideo.js
index 173a203ec3..c3e2910655 100644
--- a/wp-includes/js/media-audiovideo.js
+++ b/wp-includes/js/media-audiovideo.js
@@ -1,4 +1,4 @@
-/* global _wpMediaViewsL10n */
+/* global _wpMediaViewsL10n, _wpmejsSettings, MediaElementPlayer */
(function ($, _, Backbone) {
var media = wp.media, l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
@@ -61,7 +61,7 @@
video: ['ogg', 'webm']
},
'chrome' : {
- audio: ['ogg', 'mpeg', 'x-ms-wma'],
+ audio: ['ogg', 'mpeg'],
video: ['ogg', 'webm', 'mp4', 'm4v', 'mpeg']
},
'ff' : {
@@ -227,20 +227,24 @@
return frame;
},
- shortcode : function (shortcode) {
- var self = this;
+ update : function (model) {
+ var self = this, content;
- _.each( wp.media.audio.defaults, function( value, key ) {
- shortcode[ key ] = self.coerce( shortcode, key );
+ _.each( this.defaults, function( value, key ) {
+ model[ key ] = self.coerce( model, key );
- if ( value === shortcode[ key ] ) {
- delete shortcode[ key ];
+ if ( value === model[ key ] ) {
+ delete model[ key ];
}
});
- return wp.shortcode.string({
- tag: 'audio',
- attrs: shortcode
+ content = model.content;
+ delete model.content;
+
+ return new wp.shortcode({
+ tag: 'audio',
+ attrs: model,
+ content: content
});
}
};
@@ -283,21 +287,23 @@
return frame;
},
- shortcode : function (shortcode) {
- var self = this, content = shortcode.content;
- delete shortcode.content;
+ update : function (model) {
+ var self = this, content;
_.each( this.defaults, function( value, key ) {
- shortcode[ key ] = self.coerce( shortcode, key );
+ model[ key ] = self.coerce( model, key );
- if ( value === shortcode[ key ] ) {
- delete shortcode[ key ];
+ if ( value === model[ key ] ) {
+ delete model[ key ];
}
});
- return wp.shortcode.string({
- tag: 'video',
- attrs: shortcode,
+ content = model.content;
+ delete model.content;
+
+ return new wp.shortcode({
+ tag: 'video',
+ attrs: model,
content: content
});
}
@@ -972,6 +978,125 @@
}
} );
+ wp.mce.media = {
+ toView: function( content ) {
+ var match = wp.shortcode.next( this.shortcode, content );
+
+ if ( ! match ) {
+ return;
+ }
+
+ return {
+ index: match.index,
+ content: match.content,
+ options: {
+ shortcode: match.shortcode
+ }
+ };
+ },
+
+ edit: function( node ) {
+ var p,
+ media = wp.media[ this.shortcode ],
+ self = this,
+ frame, data;
+
+ wp.media.mixin.pauseAllPlayers();
+
+ data = window.decodeURIComponent( $( node ).data('wpview-text') );
+ frame = media.edit( data );
+ frame.on( 'close', function () {
+ frame.detach();
+ } );
+ frame.state( self.shortcode + '-details' ).on( 'update', function( selection ) {
+ var shortcode = wp.media[ self.shortcode ].update( selection ).string();
+ $( node ).attr( 'data-wpview-text', window.encodeURIComponent( shortcode ) );
+ wp.mce.views.refreshView( self, shortcode );
+ frame.detach();
+ } );
+ frame.open();
+ }
+ };
+
+ wp.mce.media.View = wp.mce.View.extend({
+ initialize: function( options ) {
+ this.shortcode = options.shortcode;
+ _.bindAll( this, 'setPlayer' );
+ $(this).on( 'ready', this.setPlayer );
+ },
+
+ setPlayer: function (e, node) {
+ // if the ready event fires on an empty node
+ if ( ! node ) {
+ return;
+ }
+
+ var self = this,
+ media,
+ settings = {},
+ className = '.wp-' + this.shortcode.tag + '-shortcode';
+
+ if ( this.player ) {
+ this.unsetPlayer();
+ }
+
+ 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' ) ) {
+ media.parent().replaceWith( media );
+ }
+ media.replaceWith( '' + media.find( 'source' ).eq(0).prop( 'src' ) + '
' );
+ return;
+ } else {
+ media.closest( '.wpview-wrap' ).removeClass( 'wont-play' );
+ if ( this.ua.is( 'ff' ) ) {
+ media.prop( 'preload', 'metadata' );
+ } else {
+ media.prop( 'preload', 'none' );
+ }
+ }
+
+ media = wp.media.view.MediaDetails.prepareSrc( media.get(0) );
+
+ // Thanks, Firefox!
+ setTimeout(function () {
+ self.player = new MediaElementPlayer( media, settings );
+ }, 50);
+ },
+
+ getHtml: function() {
+ var attrs = this.shortcode.attrs.named;
+ return this.template({ model: attrs });
+ }
+ });
+ _.extend( wp.mce.media.View.prototype, wp.media.mixin );
+
+ wp.mce.video = _.extend( {}, wp.mce.media, {
+ shortcode: 'video',
+ View: wp.mce.media.View.extend({
+ className: 'editor-video',
+ template: media.template('editor-video')
+ })
+ } );
+
+ wp.mce.views.register( 'video', wp.mce.video );
+
+ wp.mce.audio = _.extend( {}, wp.mce.media, {
+ shortcode: 'audio',
+ View: wp.mce.media.View.extend({
+ className: 'editor-audio',
+ template: media.template('editor-audio')
+ })
+ } );
+
+ wp.mce.views.register( 'audio', wp.mce.audio );
+
function init() {
$(document.body)
.on( 'click', '.wp-switch-editor', wp.media.mixin.pauseAllPlayers )
diff --git a/wp-includes/js/media-audiovideo.min.js b/wp-includes/js/media-audiovideo.min.js
index 4e3f40bf77..151b42e2c4 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","x-ms-wma"],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"},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=this;return b.each(wp.media.audio.defaults,function(b,d){a[d]=c.coerce(a,d),b===a[d]&&delete a[d]}),wp.shortcode.string({tag:"audio",attrs:a})}},wp.media.video={coerce:wp.media.coerce,defaults:{id:wp.media.view.settings.post.id,src:"",poster:"",loop:!1,autoplay:!1,preload:"metadata",content:""},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=this,d=a.content;return delete a.content,b.each(this.defaults,function(b,d){a[d]=c.coerce(a,d),b===a[d]&&delete a[d]}),wp.shortcode.string({tag:"video",attrs:a,content:d})}},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.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'].join(""),a.media.set("content",e)),b.trigger("add-track",a.media.toJSON()),a.setState(a.options.state),a.reset()}}}}))}}),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",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",View:wp.mce.media.View.extend({className:"editor-audio",template:e.template("editor-audio")})}),wp.mce.views.register("audio",wp.mce.audio),a(d)}(jQuery,_,Backbone);
\ No newline at end of file
diff --git a/wp-includes/js/tinymce/plugins/wpgallery/plugin.js b/wp-includes/js/tinymce/plugins/wpgallery/plugin.js
index d33dbca088..2f0912873b 100644
--- a/wp-includes/js/tinymce/plugins/wpgallery/plugin.js
+++ b/wp-includes/js/tinymce/plugins/wpgallery/plugin.js
@@ -25,8 +25,8 @@ tinymce.PluginManager.add('wpgallery', function( editor ) {
}
function replaceAVShortcodes( content ) {
- var testRegex = /\[(video-playlist|audio|video|playlist)[^\]]*\]/,
- replaceRegex = /\[(video-playlist|audio|video|playlist)[^\]]*\]([\s\S]*?\[\/\1\])?/;
+ var testRegex = /\[(video-playlist|playlist)[^\]]*\]/,
+ replaceRegex = /\[(video-playlist|playlist)[^\]]*\]([\s\S]*?\[\/\1\])?/;
while ( testRegex.test( content ) ) {
content = content.replace( replaceRegex, replaceCallback );
@@ -92,31 +92,6 @@ tinymce.PluginManager.add('wpgallery', function( editor ) {
editor.dom.setAttrib( node, 'data-wp-media', window.encodeURIComponent( shortcode ) );
frame.detach();
});
- } else if ( editor.dom.hasClass( node, 'wp-video' ) ) {
- frame = wp.media.video.edit( data );
- frame.on( 'close', function () {
- frame.detach();
- } );
- frame.state( 'video-details' ).on(
- 'update replace add-source select-poster-image add-track',
- function ( selection ) {
- var shortcode = wp.media.video.shortcode( selection );
- editor.dom.setAttrib( node, 'data-wp-media', window.encodeURIComponent( shortcode ) );
- frame.detach();
- }
- );
- frame.open();
- } else if ( editor.dom.hasClass( node, 'wp-audio' ) ) {
- frame = wp.media.audio.edit( data );
- frame.on( 'close', function () {
- frame.detach();
- } );
- frame.state( 'audio-details' ).on( 'update replace add-source', function ( selection ) {
- var shortcode = wp.media.audio.shortcode( selection );
- editor.dom.setAttrib( node, 'data-wp-media', window.encodeURIComponent( shortcode ) );
- frame.detach();
- } );
- frame.open();
} else {
// temp
window.console && window.console.log( 'Edit AV shortcode ' + data );
@@ -177,10 +152,6 @@ tinymce.PluginManager.add('wpgallery', function( editor ) {
if ( node.nodeName === 'IMG' && dom.getAttrib( node, 'data-wp-media' ) ) {
if ( dom.hasClass( node, 'wp-gallery' ) ) {
event.name = 'gallery';
- } else if ( dom.hasClass( node, 'wp-video' ) ) {
- event.name = 'video';
- } else if ( dom.hasClass( node, 'wp-audio' ) ) {
- event.name = 'audio';
} else if ( dom.hasClass( node, 'wp-playlist' ) ) {
event.name = 'playlist';
} else if ( dom.hasClass( node, 'wp-video-playlist' ) ) {
diff --git a/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js b/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js
index 5e3e970106..65596d7bd7 100644
--- a/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js
+++ b/wp-includes/js/tinymce/plugins/wpgallery/plugin.min.js
@@ -1 +1 @@
-tinymce.PluginManager.add("wpgallery",function(a){function b(a){return a.replace(/\[gallery([^\]]*)\]/g,function(a){return c("wp-gallery",a)})}function c(a,b){return b=window.encodeURIComponent(b),'
'}function d(a,b,d){var e;return d&&d.indexOf("["+b)>-1?(e=a.length-d.length,c("wp-"+b,a.substring(0,e))+a.substring(e)):c("wp-"+b,a)}function e(a){for(var b=/\[(video-playlist|audio|video|playlist)[^\]]*\]/,c=/\[(video-playlist|audio|video|playlist)[^\]]*\]([\s\S]*?\[\/\1\])?/;b.test(a);)a=a.replace(c,d);return a}function f(a){function b(a,b){return b=new RegExp(b+'="([^"]+)"').exec(a),b?window.decodeURIComponent(b[1]):""}return a.replace(/(?:]+)?>)*(
]+>)(?:<\/p>)*/g,function(a,c){var d=b(c,"data-wp-media");return d?"
"+d+"
":a})}function g(b){var c,d,e;"IMG"===b.nodeName&&"undefined"!=typeof wp&&wp.media&&(e=window.decodeURIComponent(a.dom.getAttrib(b,"data-wp-media")),a.dom.hasClass(b,"wp-gallery")&&wp.media.gallery?(c=wp.media.gallery,d=c.edit(e),d.state("gallery-edit").on("update",function(e){var f=c.shortcode(e).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(f)),d.detach()})):a.dom.hasClass(b,"wp-playlist")&&wp.media.playlist?(d=wp.media.playlist.edit(e),d.state("playlist-edit").on("update",function(c){var e=wp.media.playlist.shortcode(c).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(e)),d.detach()})):a.dom.hasClass(b,"wp-video-playlist")&&wp.media["video-playlist"]?(d=wp.media["video-playlist"].edit(e),d.state("video-playlist-edit").on("update",function(c){var e=wp.media["video-playlist"].shortcode(c).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(e)),d.detach()})):a.dom.hasClass(b,"wp-video")?(d=wp.media.video.edit(e),d.on("close",function(){d.detach()}),d.state("video-details").on("update replace add-source select-poster-image add-track",function(c){var e=wp.media.video.shortcode(c);a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(e)),d.detach()}),d.open()):a.dom.hasClass(b,"wp-audio")?(d=wp.media.audio.edit(e),d.on("close",function(){d.detach()}),d.state("audio-details").on("update replace add-source",function(c){var e=wp.media.audio.shortcode(c);a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(e)),d.detach()}),d.open()):window.console&&window.console.log("Edit AV shortcode "+e))}a.addCommand("WP_Gallery",function(){g(a.selection.getNode())}),a.on("mouseup",function(b){function c(){d.removeClass(d.select("img.wp-media-selected"),"wp-media-selected")}var d=a.dom,e=b.target;"IMG"===e.nodeName&&d.getAttrib(e,"data-wp-media")?2!==b.button&&(d.hasClass(e,"wp-media-selected")?g(e):(c(),d.addClass(e,"wp-media-selected"))):c()}),a.on("ResolveName",function(b){var c=a.dom,d=b.target;"IMG"===d.nodeName&&c.getAttrib(d,"data-wp-media")&&(c.hasClass(d,"wp-gallery")?b.name="gallery":c.hasClass(d,"wp-video")?b.name="video":c.hasClass(d,"wp-audio")?b.name="audio":c.hasClass(d,"wp-playlist")?b.name="playlist":c.hasClass(d,"wp-video-playlist")&&(b.name="video-playlist"))}),a.on("BeforeSetContent",function(c){a.plugins.wpview||(c.content=b(c.content)),c.content=e(c.content)}),a.on("PostProcess",function(a){a.get&&(a.content=f(a.content))})});
\ No newline at end of file
+tinymce.PluginManager.add("wpgallery",function(a){function b(a){return a.replace(/\[gallery([^\]]*)\]/g,function(a){return c("wp-gallery",a)})}function c(a,b){return b=window.encodeURIComponent(b),'
'}function d(a,b,d){var e;return d&&d.indexOf("["+b)>-1?(e=a.length-d.length,c("wp-"+b,a.substring(0,e))+a.substring(e)):c("wp-"+b,a)}function e(a){for(var b=/\[(video-playlist|playlist)[^\]]*\]/,c=/\[(video-playlist|playlist)[^\]]*\]([\s\S]*?\[\/\1\])?/;b.test(a);)a=a.replace(c,d);return a}function f(a){function b(a,b){return b=new RegExp(b+'="([^"]+)"').exec(a),b?window.decodeURIComponent(b[1]):""}return a.replace(/(?:]+)?>)*(
]+>)(?:<\/p>)*/g,function(a,c){var d=b(c,"data-wp-media");return d?"
"+d+"
":a})}function g(b){var c,d,e;"IMG"===b.nodeName&&"undefined"!=typeof wp&&wp.media&&(e=window.decodeURIComponent(a.dom.getAttrib(b,"data-wp-media")),a.dom.hasClass(b,"wp-gallery")&&wp.media.gallery?(c=wp.media.gallery,d=c.edit(e),d.state("gallery-edit").on("update",function(e){var f=c.shortcode(e).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(f)),d.detach()})):a.dom.hasClass(b,"wp-playlist")&&wp.media.playlist?(d=wp.media.playlist.edit(e),d.state("playlist-edit").on("update",function(c){var e=wp.media.playlist.shortcode(c).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(e)),d.detach()})):a.dom.hasClass(b,"wp-video-playlist")&&wp.media["video-playlist"]?(d=wp.media["video-playlist"].edit(e),d.state("video-playlist-edit").on("update",function(c){var e=wp.media["video-playlist"].shortcode(c).string();a.dom.setAttrib(b,"data-wp-media",window.encodeURIComponent(e)),d.detach()})):window.console&&window.console.log("Edit AV shortcode "+e))}a.addCommand("WP_Gallery",function(){g(a.selection.getNode())}),a.on("mouseup",function(b){function c(){d.removeClass(d.select("img.wp-media-selected"),"wp-media-selected")}var d=a.dom,e=b.target;"IMG"===e.nodeName&&d.getAttrib(e,"data-wp-media")?2!==b.button&&(d.hasClass(e,"wp-media-selected")?g(e):(c(),d.addClass(e,"wp-media-selected"))):c()}),a.on("ResolveName",function(b){var c=a.dom,d=b.target;"IMG"===d.nodeName&&c.getAttrib(d,"data-wp-media")&&(c.hasClass(d,"wp-gallery")?b.name="gallery":c.hasClass(d,"wp-playlist")?b.name="playlist":c.hasClass(d,"wp-video-playlist")&&(b.name="video-playlist"))}),a.on("BeforeSetContent",function(c){a.plugins.wpview||(c.content=b(c.content)),c.content=e(c.content)}),a.on("PostProcess",function(a){a.get&&(a.content=f(a.content))})});
\ 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 8e208de1d3..d90dc9386d 100644
--- a/wp-includes/js/tinymce/skins/wordpress/wp-content.css
+++ b/wp-includes/js/tinymce/skins/wordpress/wp-content.css
@@ -141,15 +141,6 @@ img::selection {
background-image: url(images/gallery.png);
}
-.mce-content-body img.wp-media.wp-video {
- background-image: url(images/video.png);
-}
-
-.mce-content-body img.wp-media.wp-audio {
- height: 70px;
- background-image: url(images/audio.png);
-}
-
.mce-content-body img.wp-media.wp-playlist {
background-image: url("images/playlist-audio.png");
}
@@ -223,44 +214,81 @@ embed {
}
/**
- * Gallery preview
+ * Media previews
*/
-.wpview-type-gallery {
+.wpview-type-gallery,
+.wpview-type-audio,
+.wpview-type-video {
position: relative;
margin-bottom: 16px;
cursor: pointer;
border: 1px solid transparent;
}
- .wpview-type-gallery:after {
+.wpview-type-audio {
+ padding: 24px 0 0;
+}
+
+.wpview-type-video {
+ padding: 0;
+}
+
+.wont-play {
+ padding: 4px 0;
+}
+
+.wont-play p {
+ font-size: 13px;
+ line-height: 1.3;
+ display: block;
+ width: 70%;
+ margin: 0 15%;
+ text-align: center;
+}
+
+.wpview-type-gallery:after {
content: '';
display: table;
clear: both;
}
- .wpview-type-gallery.selected {
+.wpview-type-gallery.selected,
+.wpview-type-audio,
+.wpview-type-video {
background-color: #f2f8ff;
border-color: #777;
}
-.wpview-type-gallery .toolbar {
- position: absolute;
- top: 0;
- right: 0;
- background-color: #333;
- color: white;
+.wpview-type-gallery .toolbar,
+.wpview-type-audio .toolbar,
+.wpview-type-video .toolbar {
+ position: absolute;
+ top: 0;
+ right: 0;
+ background-color: #333;
+ color: white;
display: none;
+ z-index: 100;
}
+.wpview-type-video .toolbar div,
.wpview-type-gallery .toolbar div,
#wp-image-toolbar div {
margin: 5px;
}
+.wpview-type-audio .toolbar div {
+ margin: 2px 5px;
+}
+
+.wpview-type-audio .toolbar,
+.wpview-type-video .toolbar,
.wpview-type-gallery.selected .toolbar {
display: block;
}
+.wpview-type-audio .toolbar span,
+.wpview-type-video .toolbar span,
.wpview-type-gallery .toolbar span {
cursor: pointer;
}
diff --git a/wp-includes/js/tinymce/wp-tinymce.js.gz b/wp-includes/js/tinymce/wp-tinymce.js.gz
index 9af78c5e79d7a13743092b17964754c40e4b7e11..0c65177662c750d4ebda192df6a14de3b41fd87b 100644
GIT binary patch
delta 16057
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
delta 16166
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