+ wp.media.mixin.removeAllPlayers();
+ this.$( 'audio, video' ).each( function (i, elem) {
+ var el = wp.media.view.MediaDetails.prepareSrc( elem );
+ new window.MediaElementPlayer( el, wp.media.mixin.mejsSettings );
+ } );
+ }
+});
+
+module.exports = TwoColumn;
+
+},{}],5:[function(require,module,exports){
+/*globals wp */
+
+/**
+ * wp.media.view.DeleteSelectedPermanentlyButton
+ *
+ * When MEDIA_TRASH is true, a button that handles bulk Delete Permanently logic
+ *
+ * @class
+ * @augments wp.media.view.DeleteSelectedButton
+ * @augments wp.media.view.Button
+ * @augments wp.media.View
+ * @augments wp.Backbone.View
+ * @augments Backbone.View
+ */
+var Button = wp.media.view.Button,
+ DeleteSelected = wp.media.view.DeleteSelectedButton,
+ DeleteSelectedPermanently;
+
+DeleteSelectedPermanently = DeleteSelected.extend({
+ initialize: function() {
+ DeleteSelected.prototype.initialize.apply( this, arguments );
+ this.listenTo( this.controller, 'select:activate', this.selectActivate );
+ this.listenTo( this.controller, 'select:deactivate', this.selectDeactivate );
+ },
+
+ filterChange: function( model ) {
+ this.canShow = ( 'trash' === model.get( 'status' ) );
+ },
+
+ selectActivate: function() {
+ this.toggleDisabled();
+ this.$el.toggleClass( 'hidden', ! this.canShow );
+ },
+
+ selectDeactivate: function() {
+ this.toggleDisabled();
+ this.$el.addClass( 'hidden' );
+ },
+
+ render: function() {
+ Button.prototype.render.apply( this, arguments );
+ this.selectActivate();
+ return this;
+ }
+});
+
+module.exports = DeleteSelectedPermanently;
+
+},{}],6:[function(require,module,exports){
+/*globals wp */
+
+/**
+ * wp.media.view.DeleteSelectedButton
+ *
+ * A button that handles bulk Delete/Trash logic
+ *
+ * @class
+ * @augments wp.media.view.Button
+ * @augments wp.media.View
+ * @augments wp.Backbone.View
+ * @augments Backbone.View
+ */
+var Button = wp.media.view.Button,
+ l10n = wp.media.view.l10n,
+ DeleteSelected;
+
+DeleteSelected = Button.extend({
+ initialize: function() {
+ Button.prototype.initialize.apply( this, arguments );
+ if ( this.options.filters ) {
+ this.listenTo( this.options.filters.model, 'change', this.filterChange );
+ }
+ this.listenTo( this.controller, 'selection:toggle', this.toggleDisabled );
+ },
+
+ filterChange: function( model ) {
+ if ( 'trash' === model.get( 'status' ) ) {
+ this.model.set( 'text', l10n.untrashSelected );
+ } else if ( wp.media.view.settings.mediaTrash ) {
+ this.model.set( 'text', l10n.trashSelected );
+ } else {
+ this.model.set( 'text', l10n.deleteSelected );
+ }
+ },
+
+ toggleDisabled: function() {
+ this.model.set( 'disabled', ! this.controller.state().get( 'selection' ).length );
+ },
+
+ render: function() {
+ Button.prototype.render.apply( this, arguments );
+ if ( this.controller.isModeActive( 'select' ) ) {
+ this.$el.addClass( 'delete-selected-button' );
+ } else {
+ this.$el.addClass( 'delete-selected-button hidden' );
+ }
+ this.toggleDisabled();
+ return this;
+ }
+});
+
+module.exports = DeleteSelected;
+
+},{}],7:[function(require,module,exports){
+/*globals wp */
+
+/**
+ * wp.media.view.SelectModeToggleButton
+ *
+ * @class
+ * @augments wp.media.view.Button
+ * @augments wp.media.View
+ * @augments wp.Backbone.View
+ * @augments Backbone.View
+ */
+var Button = wp.media.view.Button,
+ l10n = wp.media.view.l10n,
+ SelectModeToggle;
+
+SelectModeToggle = Button.extend({
+ initialize: function() {
+ Button.prototype.initialize.apply( this, arguments );
+ this.listenTo( this.controller, 'select:activate select:deactivate', this.toggleBulkEditHandler );
+ this.listenTo( this.controller, 'selection:action:done', this.back );
+ },
+
+ back: function () {
+ this.controller.deactivateMode( 'select' ).activateMode( 'edit' );
+ },
+
+ click: function() {
+ Button.prototype.click.apply( this, arguments );
+ if ( this.controller.isModeActive( 'select' ) ) {
+ this.back();
+ } else {
+ this.controller.deactivateMode( 'edit' ).activateMode( 'select' );
+ }
+ },
+
+ render: function() {
+ Button.prototype.render.apply( this, arguments );
+ this.$el.addClass( 'select-mode-toggle-button' );
+ return this;
+ },
+
+ toggleBulkEditHandler: function() {
+ var toolbar = this.controller.content.get().toolbar, children;
+
+ children = toolbar.$( '.media-toolbar-secondary > *, .media-toolbar-primary > *' );
+
+ // TODO: the Frame should be doing all of this.
+ if ( this.controller.isModeActive( 'select' ) ) {
+ this.model.set( 'text', l10n.cancelSelection );
+ children.not( '.media-button' ).hide();
+ this.$el.show();
+ toolbar.$( '.delete-selected-button' ).removeClass( 'hidden' );
+ } else {
+ this.model.set( 'text', l10n.bulkSelect );
+ this.controller.content.get().$el.removeClass( 'fixed' );
+ toolbar.$el.css( 'width', '' );
+ toolbar.$( '.delete-selected-button' ).addClass( 'hidden' );
+ children.not( '.spinner, .media-button' ).show();
+ this.controller.state().get( 'selection' ).reset();
+ }
+ }
+});
+
+module.exports = SelectModeToggle;
+
+},{}],8:[function(require,module,exports){
+/*globals wp, _ */
+
+/**
+ * wp.media.view.EditImage.Details
+ *
+ * @class
+ * @augments wp.media.view.EditImage
+ * @augments wp.media.View
+ * @augments wp.Backbone.View
+ * @augments Backbone.View
+ */
+var View = wp.media.View,
+ EditImage = wp.media.view.EditImage,
+ Details;
+
+Details = EditImage.extend({
+ initialize: function( options ) {
+ this.editor = window.imageEdit;
+ this.frame = options.frame;
+ this.controller = options.controller;
+ View.prototype.initialize.apply( this, arguments );
+ },
+
+ back: function() {
+ this.frame.content.mode( 'edit-metadata' );
+ },
+
+ save: function() {
+ this.model.fetch().done( _.bind( function() {
+ this.frame.content.mode( 'edit-metadata' );
+ }, this ) );
+ }
+});
+
+module.exports = Details;
+
+},{}],9:[function(require,module,exports){
+/*globals wp, _, jQuery */
+
+/**
+ * wp.media.view.MediaFrame.EditAttachments
+ *
+ * A frame for editing the details of a specific media item.
+ *
+ * Opens in a modal by default.
+ *
+ * Requires an attachment model to be passed in the options hash under `model`.
+ *
+ * @class
+ * @augments wp.media.view.Frame
+ * @augments wp.media.View
+ * @augments wp.Backbone.View
+ * @augments Backbone.View
+ * @mixes wp.media.controller.StateMachine
+ */
+var Frame = wp.media.view.Frame,
+ MediaFrame = wp.media.view.MediaFrame,
+
+ $ = jQuery,
+ EditAttachments;
+
+EditAttachments = MediaFrame.extend({
+
+ className: 'edit-attachment-frame',
+ template: wp.template( 'edit-attachment-frame' ),
+ regions: [ 'title', 'content' ],
+
+ events: {
+ 'click .left': 'previousMediaItem',
+ 'click .right': 'nextMediaItem'
+ },
+
+ initialize: function() {
+ Frame.prototype.initialize.apply( this, arguments );
+
+ _.defaults( this.options, {
+ modal: true,
+ state: 'edit-attachment'
+ });
+
+ this.controller = this.options.controller;
+ this.gridRouter = this.controller.gridRouter;
+ this.library = this.options.library;
+
+ if ( this.options.model ) {
+ this.model = this.options.model;
+ }