From 6517628b63d55f687fe2e65a2ea4d9a97a60df2e Mon Sep 17 00:00:00 2001 From: g <> Date: Wed, 19 Aug 2020 11:19:10 +0300 Subject: [PATCH] fix upload tab functionality --- .../js/eml-media-views.js | 1190 +++++++++++++++++ environments/dev1/wp-config-local.php | 13 - environments/lion/wp-config-local.php | 13 - 3 files changed, 1190 insertions(+), 26 deletions(-) create mode 100644 environments/all/wp-content/plugins/enhanced-media-library/js/eml-media-views.js delete mode 100644 environments/dev1/wp-config-local.php delete mode 100644 environments/lion/wp-config-local.php diff --git a/environments/all/wp-content/plugins/enhanced-media-library/js/eml-media-views.js b/environments/all/wp-content/plugins/enhanced-media-library/js/eml-media-views.js new file mode 100644 index 0000000..abc778b --- /dev/null +++ b/environments/all/wp-content/plugins/enhanced-media-library/js/eml-media-views.js @@ -0,0 +1,1190 @@ +window.wp = window.wp || {}; +window.eml = window.eml || { l10n: {} }; + + +( function( $, _ ) { + + var media = wp.media, + l10n = media.view.l10n, + l10n_defaults = { media_orderby: 'date', media_order: 'DESC' }, + original = {}; + + + _.extend( eml.l10n, wpuxss_eml_media_views_l10n ); + _.defaults( eml.l10n, l10n_defaults ); + + + + /** + * wp.media.controller.Library + * + */ + original.controllerLibrary = { + + activate: media.controller.Library.prototype.activate + }; + + _.extend( media.controller.Library.prototype, { + + activate: function() { + + original.controllerLibrary.activate.apply( this, arguments ); + + wp.Uploader.queue.on( 'add', this.beforeUpload, this ); + wp.Uploader.queue.on( 'reset', this.afterUpload, this ); + }, + + beforeUpload: function() { + + if ( wp.Uploader.queue.length == 1 ) { + $('.attachment-filters:has(option[value!="all"]:selected)').val( 'all' ).change(); + } + }, + + afterUpload: function() { + + var library = this.get( 'library' ), + selection = this.get( 'selection' ), + orderby = library.props.get( 'orderby' ); + + + if ( 'menuOrder' === orderby ) { + library.saveMenuOrder(); + } + + library.reset( library.models ); + + selection.trigger( 'selection:unsingle', selection.model, selection ); + selection.trigger( 'selection:single', selection.model, selection ); + }, + + uploading: function( attachment ) { + + var content = this.frame.content, + selection = this.get( 'selection' ); + + + if ( 'upload' === content.mode() ) { + this.frame.content.mode('browse'); + } + + if ( this.get( 'autoSelect' ) ) { + + if ( wp.Uploader.queue.length == 1 && selection.length ) { + selection.reset(); + } + selection.add( attachment ); + selection.trigger( 'selection:unsingle', selection.model, selection ); + selection.trigger( 'selection:single', selection.model, selection ); + } + } + }); + + + + /** + * wp.media.view.AttachmentCompat + * + */ + var newAttachmentCompatEvents = { + 'click input' : 'preSave' + }; + + _.extend( media.view.AttachmentCompat.prototype.events, newAttachmentCompatEvents ); + + _.extend( media.view.AttachmentCompat.prototype, { + + preSave: function() { + + this.noRender = true; + + media.model.Query.cleanQueries(); + }, + + render: function() { + + var compat = this.model.get('compat'), + $compat_el = this.$el, + tcount = this.model.get('tcount'); + + + _.each( tcount, function( count, term_id ) { + + var $option = $( '.eml-taxonomy-filters option[value="'+term_id+'"]' ), + text = $option.text(); + + text = text.replace( /\(.*?\)/, '('+count+')' ); + $option.text( text ); + }); + + if ( ! compat || ! compat.item ) { + return; + } + + if ( this.noRender ) { + return this; + } + + this.views.detach(); + this.$el.html( compat.item ); + this.views.render(); + + + // TODO: find a better solution + if ( this.controller.isModeActive( 'select' ) && + 'edit-attachment' != this.controller.state().get('id') ) { + + $.each( eml.l10n.compat_taxonomies_to_hide, function( id, taxonomy ) { + $compat_el.find( '.compat-field-'+taxonomy ).remove(); + }); + } + + + // TODO: find a better solution + $.each( eml.l10n.compat_taxonomies, function( id, taxonomy ) { + + $compat_el.find( '.compat-field-'+taxonomy+' .label' ).addClass( 'eml-tax-label' ); + $compat_el.find( '.compat-field-'+taxonomy+' .field' ).addClass( 'eml-tax-field' ); + }); + + return this; + } + }); + + + + /** + * wp.media.view.AttachmentFilters + * + */ + _.extend( media.view.AttachmentFilters.prototype, { + + change: function() { + + var filter = this.filters[ this.el.value ], + selection = this.controller.state().get( 'selection' ), + resetFilterButton = this.controller.content.get().toolbar.get( 'resetFilterButton' ), + + + all = $('.attachment-filters').length, + unchanged = $('.attachment-filters').map(function(){ + return this.value + }).get().filter( function( val ){ + return 'all' === val + }).length; + + + if ( filter ) { + this.model.set( filter.props ); + } + + + if ( filter && selection && selection.length && wp.Uploader.queue.length !== 1 ) { + selection.reset(); + } + + + if ( filter && media.view.settings.mediaTrash && ! _.isUndefined( this.controller.toolbar ) ) { + this.controller.toolbar.get().$('.media-selection').toggleClass( 'trash', 'trash' === filter.props.status ); + } + + + if ( _.isUndefined( resetFilterButton ) ) { + return; + } + + resetFilterButton.model.set( 'disabled', all === unchanged ); + }, + + select: function() { + + var model = this.model, + value = 'all', + props = model.toJSON(); + + + props = _.omit( props, 'orderby', 'order' ); + + _.find( this.filters, function( filter, id ) { + + var filterProps = _.omit( filter.props, 'orderby', 'order' ); + + var equal = _.all( filterProps, function( prop, key ) { + return prop === ( _.isUndefined( props[ key ] ) ? null : props[ key ] ); + }); + + if ( equal ) { + return value = id; + } + }); + + this.$el.val( value ); + } + }); + + + + + /** + * wp.media.view.AttachmentFilters + * + */ + original.AttachmentFilters = { + + All: { + createFilters: media.view.AttachmentFilters.All.prototype.createFilters + }, + + Uploaded: { + createFilters: media.view.AttachmentFilters.Uploaded.prototype.createFilters + } + }; + + + + /** + * wp.media.view.AttachmentFilters.All + * + */ + _.extend( media.view.AttachmentFilters.All.prototype, { + + createFilters: function() { + + var uncategorizedProps, + taxonomies = _.intersection( _.keys( eml.l10n.taxonomies ), eml.l10n.filter_taxonomies ); + + + original.AttachmentFilters.All.createFilters.apply( this, arguments ); + + _.each( this.filters, function( filter, key ) { + filter.props['uncategorized'] = null; + filter.props['orderby'] = eml.l10n.media_orderby; + filter.props['order'] = eml.l10n.media_order; + }); + + this.filters.uncategorized = { + text: eml.l10n.uncategorized, + props: { + uploadedTo : null, + uncategorized : true, + status : null, + type : null, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: 60 + }; + + + uncategorizedProps = this.filters.uncategorized.props; + + _.each( taxonomies, function( taxonomy ) { + uncategorizedProps[taxonomy] = null; + }); + + + if ( media.view.settings.mediaTrash && + ( this.controller.isModeActive( 'grid' ) || + this.controller.isModeActive( 'eml-grid' ) ) ) { + + this.filters.trash = { + text: l10n.trash, + props: { + uploadedTo : null, + status : 'trash', + type : null, + orderby : 'date', + order : 'DESC' + }, + priority: 70 + }; + } + } + }); + + + + /** + * wp.media.view.AttachmentFilters.Uploaded + * + */ + _.extend( media.view.AttachmentFilters.Uploaded.prototype, { + + createFilters: function() { + + var uncategorizedProps, + taxonomies = _.intersection( _.keys( eml.l10n.taxonomies ), eml.l10n.filter_taxonomies ); + + + original.AttachmentFilters.Uploaded.createFilters.apply( this, arguments ); + + _.each( this.filters, function( filter, key ) { + filter.props['orderby'] = eml.l10n.media_orderby; + filter.props['order'] = eml.l10n.media_order; + }); + } + }); + + + + /** + * wp.media.view.AttachmentFilters.Taxonomy + * + */ + media.view.AttachmentFilters.Taxonomy = media.view.AttachmentFilters.extend({ + + id: function() { + + return 'media-attachment-'+this.options.taxonomy+'-filters'; + }, + + className: function() { + + // TODO: get rid of excess class name that duplicates id + return 'attachment-filters eml-taxonomy-filters attachment-'+this.options.taxonomy+'-filter'; + }, + + createFilters: function() { + + var filters = {}, + self = this; + + + _.each( self.options.termList || {}, function( term, key ) { + + var term_id = term.term_id, + term_name = $("
").html(term.term_name).text(); + + filters[ term_id ] = { + text: term_name, + props: { + uncategorized : null, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: key+4 + }; + + filters[term_id]['props'][self.options.taxonomy] = term_id; + }); + + filters.all = { + text: eml.l10n.filter_by + ' ' + self.options.singularName, + props: { + uncategorized : null, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: 1 + }; + + filters['all']['props'][self.options.taxonomy] = null; + + filters.in = { + text: '— ' + eml.l10n.in + ' ' + self.options.pluralName + ' —', + props: { + uncategorized : null, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: 2 + }; + + filters['in']['props'][self.options.taxonomy] = 'in'; + + filters.not_in = { + text: '— ' + eml.l10n.not_in + ' ' + self.options.singularName + ' —', + props: { + uncategorized : null, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: 3 + }; + + filters['not_in']['props'][self.options.taxonomy] = 'not_in'; + + this.filters = filters; + } + }); + + + + /** + * wp.media.view.AttachmentFilters.Authors + * + */ + media.view.AttachmentFilters.Authors = media.view.AttachmentFilters.extend({ + + createFilters: function() { + + var filters = {}, + self = this; + + + _.each( self.options.users || {}, function( user, key ) { + + var user_id = user.user_id, + user_name = user.user_name; + + filters[ user_id ] = { + text: user_name, + props: { + author : user_id, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: key+2 + }; + }); + + filters.all = { + text: eml.l10n.in + ' ' + eml.l10n.authors, + props: { + author : null, + orderby : eml.l10n.media_orderby, + order : eml.l10n.media_order + }, + priority: 1 + }; + + this.filters = filters; + } + }); + + + + media.view.Button.resetFilters = media.view.Button.extend({ + + id: 'reset-all-filters', + + initialize: function() { + + media.view.Button.prototype.initialize.apply( this, arguments ); + this.controller.on( 'select:activate select:deactivate', this.toogleResetFilters, this ); + }, + + click: function( event ) { + + if ( '#' === this.attributes.href ) { + event.preventDefault(); + } + + $('.attachment-filters:has(option[value!="all"]:selected)').each( function( index ) { + $(this).val( 'all' ).change(); + }); + }, + + toogleResetFilters: function() { + this.$el.toggleClass( 'hidden' ); + } + }); + + + + media.view.Button.DeleteSelected = media.view.Button.extend({ + + initialize: function() { + + media.view.Button.prototype.initialize.apply( this, arguments ); + if ( this.options.filters ) { + this.options.filters.model.on( 'change', this.filterChange, this ); + } + this.controller.state().get( 'selection' ).on( 'add remove reset', this.toggleDisabled, this ); + }, + + 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() { + media.view.Button.prototype.render.apply( this, arguments ); + this.toggleDisabled(); + return this; + }, + + click: function() { + + var changed = [], removed = [], + selection = this.controller.state().get( 'selection' ), + library = this.controller.state().get( 'library' ); + + if ( ! selection.length ) { + return; + } + + if ( ! media.view.settings.mediaTrash && ! window.confirm( l10n.warnBulkDelete ) ) { + return; + } + + if ( media.view.settings.mediaTrash && + 'trash' !== selection.at( 0 ).get( 'status' ) && + ! window.confirm( l10n.warnBulkTrash ) ) { + + return; + } + + selection.each( function( model ) { + if ( ! model.get( 'nonces' )['delete'] ) { + removed.push( model ); + return; + } + + if ( media.view.settings.mediaTrash && 'trash' === model.get( 'status' ) ) { + model.set( 'status', 'inherit' ); + changed.push( model.save() ); + removed.push( model ); + } else if ( media.view.settings.mediaTrash ) { + model.set( 'status', 'trash' ); + changed.push( model.save() ); + removed.push( model ); + } else { + model.destroy({wait: true}); + } + } ); + + if ( changed.length ) { + selection.remove( removed ); + + $.when.apply( null, changed ).then( _.bind( function() { + library._requery( true ); + this.controller.trigger( 'selection:action:done' ); + }, this ) ); + } else { + this.controller.trigger( 'selection:action:done' ); + } + } + }); + + + + media.view.Button.DeleteSelectedPermanently = media.view.Button.DeleteSelected.extend({ + + filterChange: function( model ) { + + this.canShow = ( 'trash' === model.get( 'status' ) ); + this.$el.toggleClass( 'hidden', ! this.canShow ); + this.controller.browserView.fixLayout(); + }, + + render: function() { + + media.view.Button.prototype.render.apply( this, arguments ); + this.$el.toggleClass( 'hidden', ! this.canShow ); + return this; + }, + + click: function() { + + var removed = [], selection = this.controller.state().get( 'selection' ), + library = this.controller.state().get( 'library' ); + + if ( ! selection.length || ! window.confirm( l10n.warnBulkDelete ) ) { + return; + } + + selection.each( function( model ) { + + if ( ! model.get( 'nonces' )['delete'] ) { + removed.push( model ); + return; + } + + model.destroy({wait: true}); + } ); + + this.controller.trigger( 'selection:action:done' ); + } + }); + + + + media.view.Button.Deselect = media.view.Button.extend({ + + initialize: function() { + + media.view.Button.prototype.initialize.apply( this, arguments ); + this.controller.state().get( 'selection' ).on( 'add remove reset', this.toggleDisabled, this ); + }, + + toggleDisabled: function() { + this.model.set( 'disabled', ! this.controller.state().get( 'selection' ).length ); + }, + + click: function( event ) { + + event.preventDefault(); + + var selection = this.controller.state().get( 'selection' ); + + selection.reset(); + + // Keep focus inside media modal + if ( this.controller.modal ) { + this.controller.modal.focusManager.focus(); + } + } + }); + + + + /** + * wp.media.view.AttachmentsBrowser + * + */ + original.AttachmentsBrowser = { + + initialize: media.view.AttachmentsBrowser.prototype.initialize, + createToolbar: media.view.AttachmentsBrowser.prototype.createToolbar, + }; + + _.extend( media.view.AttachmentsBrowser.prototype, { + + initialize: function() { + + original.AttachmentsBrowser.initialize.apply( this, arguments ); + + this.on( 'ready', this.fixLayout, this ); + this.$window = $( window ); + this.$window.on( 'resize', _.debounce( _.bind( this.fixLayout, this ), 15 ) ); + + if ( $('.notice-dismiss').length ) { + $( document ).on( 'click', '.notice-dismiss', _.debounce( _.bind( this.fixLayout, this), 250 ) ); + } + }, + + fixLayout: function() { + + var $browser = this.$el, + $attachments = $browser.find('.attachments'), + $uploader = $browser.find('.uploader-inline'), + $toolbar = $browser.find('.media-toolbar'), + $messages = $('.eml-media-css .updated:visible, .eml-media-css .error:visible, .eml-media-css .notice:visible, .eml-media-css .notice-error:visible, .eml-media-css .notice-warning:visible, .eml-media-css .notice-success:visible, .eml-media-css .notice-info:visible'), + $update_nag = $('.eml-media-css .update-nag'); + + + if ( $update_nag.length ) { + $update_nag.css( 'margin-left', 15 + 'px' ); + $browser.closest('.wrap').css( 'top', $update_nag.outerHeight() + 25 + 'px' ); + } + + + if ( ! this.controller.isModeActive( 'select' ) && + ! this.controller.isModeActive( 'eml-grid' ) ) { + return; + } + + if ( this.controller.isModeActive( 'select' ) ) { + + $attachments.css( 'top', $toolbar.height() + 10 + 'px' ); + $uploader.css( 'top', $toolbar.height() + 10 + 'px' ); + $browser.find('.eml-loader').css( 'top', $toolbar.height() + 10 + 'px' ); + + // TODO: find a better place for it, something like fixLayoutOnce + $toolbar.find('.media-toolbar-secondary').prepend( $toolbar.find('.instructions') ); + } + + if ( this.controller.isModeActive( 'eml-grid' ) ) + { + var messagesOuterHeight = 0; + + + if ( ! _.isUndefined( $messages ) ) + { + $messages.each( function() { + messagesOuterHeight += $(this).outerHeight( true ); + }); + + messagesOuterHeight = messagesOuterHeight ? messagesOuterHeight - 15 : 0; + } + + $browser.css( 'top', $toolbar.outerHeight() + messagesOuterHeight + 15 + 'px' ); + $toolbar.css( 'top', - $toolbar.outerHeight() - 25 + 'px' ); + } + }, + + createToolbar: function() { + + var LibraryViewSwitcher, Filters, toolbarOptions, + self = this, + i = 1, + isResetButton = false; + + + toolbarOptions = { + controller: this.controller + }; + + if ( this.controller.isModeActive( 'grid' ) || + this.controller.isModeActive( 'eml-grid' ) ) { + + toolbarOptions.className = 'media-toolbar wp-filter'; + } + + /** + * @member {wp.media.view.Toolbar} + */ + this.toolbar = new media.view.Toolbar( toolbarOptions ); + + this.views.add( this.toolbar ); + + this.toolbar.set( 'spinner', new media.view.Spinner({ + priority: -40 + }) ); + + + if ( this.controller.isModeActive( 'grid' ) || + this.controller.isModeActive( 'eml-grid' ) ) { + + LibraryViewSwitcher = media.View.extend({ + className: 'view-switch media-grid-view-switch', + template: media.template( 'media-library-view-switcher') + }); + + this.toolbar.set( 'libraryViewSwitcher', new LibraryViewSwitcher({ + controller: this.controller, + priority: -90 + }).render() ); + } + + + if ( -1 !== $.inArray( this.options.filters, [ 'uploaded', 'all' ] ) || + ( parseInt( eml.l10n.force_filters ) && + ! this.controller.isModeActive( 'eml-bulk-edit' ) && + 'gallery-edit' !== this.controller._state && + 'playlist-edit' !== this.controller._state && + 'video-playlist-edit' !== this.controller._state ) || + 'customize' === eml.l10n.current_screen || + 'widgets' === eml.l10n.current_screen ) { + + + if ( -1 !== $.inArray( 'types', eml.l10n.filters_to_show ) ) { + + this.toolbar.set( 'filtersLabel', new media.view.Label({ + value: l10n.filterByType, + attributes: { + 'for': 'media-attachment-filters' + }, + priority: -80 + }).render() ); + + if ( 'uploaded' === this.options.filters ) { + this.toolbar.set( 'filters', new media.view.AttachmentFilters.Uploaded({ + controller: this.controller, + model: this.collection.props, + priority: -80 + }).render() ); + } else { + Filters = new media.view.AttachmentFilters.All({ + controller: this.controller, + model: this.collection.props, + priority: -80 + }); + + this.toolbar.set( 'filters', Filters.render() ); + } + } + + if ( eml.l10n.wp_version >= '4.0' && -1 !== $.inArray( 'dates', eml.l10n.filters_to_show ) && media.view.settings.months.length ) { + + this.toolbar.set( 'dateFilterLabel', new media.view.Label({ + value: l10n.filterByDate, + attributes: { + 'for': 'media-attachment-date-filters' + }, + priority: -75 + }).render() ); + this.toolbar.set( 'dateFilter', new media.view.DateFilter({ + controller: this.controller, + model: this.collection.props, + priority: -75 + }).render() ); + } + + if ( eml.l10n.users.length > 1 && -1 !== $.inArray( 'authors', eml.l10n.filters_to_show ) ) { + + this.toolbar.set( 'authorFilterLabel', new media.view.Label({ + value: eml.l10n.filter_by + ' ' + eml.l10n.author, + attributes: { + 'for': 'author-filter', + }, + priority: -70 + i++ + }).render() ); + this.toolbar.set( 'author-filter', new media.view.AttachmentFilters.Authors({ + controller: this.controller, + model: this.collection.props, + priority: -70 + i++, + users: eml.l10n.users, + }).render() ); + } + + if ( -1 !== $.inArray( 'taxonomies', eml.l10n.filters_to_show ) ) { + $.each( eml.l10n.taxonomies, function( taxonomy, values ) { + + if ( -1 !== _.indexOf( eml.l10n.filter_taxonomies, taxonomy ) && values.term_list.length ) { + + self.toolbar.set( taxonomy+'FilterLabel', new media.view.Label({ + value: eml.l10n.filter_by + values.singular_name, + attributes: { + 'for': 'media-attachment-' + taxonomy + '-filters', + }, + priority: -70 + i++ + }).render() ); + self.toolbar.set( taxonomy+'-filter', new media.view.AttachmentFilters.Taxonomy({ + controller: self.controller, + model: self.collection.props, + priority: -70 + i++, + taxonomy: taxonomy, + termList: values.term_list, + singularName: values.singular_name, + pluralName: values.plural_name + }).render() ); + } + }); + } + + if ( this.toolbar.$el.find('.attachment-filters').length > 1 ) { + this.toolbar.set( 'resetFilterButton', new media.view.Button.resetFilters({ + controller: this.controller, + text: eml.l10n.reset_filters, + disabled: true, + priority: -70 + i++ + }).render() ); + } + + } // endif + + + if ( this.controller.isModeActive( 'eml-grid' ) ) { + + this.toolbar.set( 'deselectButton', new media.view.Button.Deselect ({ + controller: this.controller, + text: l10n.cancelSelection, + disabled: true, + priority: -70 + i++ + }).render() ); + + this.toolbar.set( 'emlDeleteSelectedButton', new media.view.Button.DeleteSelected({ + filters: Filters, + style: 'primary', + // className: 'delete-selected-button', + disabled: true, + text: media.view.settings.mediaTrash ? l10n.trashSelected : l10n.deleteSelected, + controller: this.controller, + priority: -70 + i++ + }).render() ); + + if ( media.view.settings.mediaTrash ) { + this.toolbar.set( 'emlDeleteSelectedPermanentlyButton', new media.view.Button.DeleteSelectedPermanently({ + filters: Filters, + style: 'primary', + disabled: true, + text: l10n.deleteSelected, + controller: this.controller, + priority: -55 + }).render() ); + } + } + + + // in case it is not eml-grid but the original grid somewhere + if ( this.controller.isModeActive( 'grid' ) ) { + + // BulkSelection is a
with subviews, including screen reader text + this.toolbar.set( 'selectModeToggleButton', new media.view.SelectModeToggleButton({ + text: l10n.bulkSelect, + controller: this.controller, + priority: -70 + }).render() ); + + this.toolbar.set( 'deleteSelectedButton', new media.view.DeleteSelectedButton({ + filters: Filters, + style: 'primary', + disabled: true, + text: media.view.settings.mediaTrash ? l10n.trashSelected : l10n.deleteSelected, + controller: this.controller, + priority: -60, + click: function() { + var changed = [], removed = [], + selection = this.controller.state().get( 'selection' ), + library = this.controller.state().get( 'library' ); + + if ( ! selection.length ) { + return; + } + + if ( ! mediaTrash && ! window.confirm( l10n.warnBulkDelete ) ) { + return; + } + + if ( mediaTrash && + 'trash' !== selection.at( 0 ).get( 'status' ) && + ! window.confirm( l10n.warnBulkTrash ) ) { + + return; + } + + selection.each( function( model ) { + if ( ! model.get( 'nonces' )['delete'] ) { + removed.push( model ); + return; + } + + if ( mediaTrash && 'trash' === model.get( 'status' ) ) { + model.set( 'status', 'inherit' ); + changed.push( model.save() ); + removed.push( model ); + } else if ( mediaTrash ) { + model.set( 'status', 'trash' ); + changed.push( model.save() ); + removed.push( model ); + } else { + model.destroy({wait: true}); + } + } ); + + if ( changed.length ) { + selection.remove( removed ); + + $.when.apply( null, changed ).then( _.bind( function() { + library._requery( true ); + this.controller.trigger( 'selection:action:done' ); + }, this ) ); + } else { + this.controller.trigger( 'selection:action:done' ); + } + } + }).render() ); + + if ( media.view.settings.mediaTrash ) { + this.toolbar.set( 'deleteSelectedPermanentlyButton', new wp.media.view.DeleteSelectedPermanentlyButton({ + filters: Filters, + style: 'primary', + disabled: true, + text: l10n.deleteSelected, + controller: this.controller, + priority: -55, + click: function() { + var removed = [], selection = this.controller.state().get( 'selection' ); + + if ( ! selection.length || ! window.confirm( l10n.warnBulkDelete ) ) { + return; + } + + selection.each( function( model ) { + if ( ! model.get( 'nonces' )['delete'] ) { + removed.push( model ); + return; + } + + model.destroy({wait: true}); + } ); + + this.controller.trigger( 'selection:action:done' ); + } + }).render() ); + } + } + + if ( this.options.search ) { + + this.toolbar.set( 'searchLabel', new media.view.Label({ + value: l10n.searchMediaLabel, + attributes: { + 'for': 'media-search-input' + }, + priority: -50 + }).render() ); + this.toolbar.set( 'search', new media.view.Search({ + controller: this.controller, + model: this.collection.props, + priority: -50 + }).render() ); + } + + if ( this.options.dragInfo ) { + this.toolbar.set( 'dragInfo', new media.View({ + el: $( '
' + l10n.dragInfo + '
' )[0], + priority: -40 + }) ); + } + }, + + updateContent: function() { + + var view = this, + noItemsView; + + if ( this.controller.isModeActive( 'grid' ) || + this.controller.isModeActive( 'eml-grid' ) ) { + noItemsView = view.attachmentsNoResults; + } else { + noItemsView = view.uploader; + } + + if ( ! this.collection.length ) { + + this.toolbar.get( 'spinner' ).show(); + + this.dfd = this.collection.more().done( function() { + + if ( ! view.collection.length ) { + noItemsView.$el.removeClass( 'hidden' ); + } else { + noItemsView.$el.addClass( 'hidden' ); + } + view.toolbar.get( 'spinner' ).hide(); + } ); + + } else { + + noItemsView.$el.addClass( 'hidden' ); + view.toolbar.get( 'spinner' ).hide(); + } + }, + + createUploader: function() { + + this.uploader = new media.view.UploaderInline({ + controller: this.controller, + status: false, + message: this.controller.isModeActive( 'grid' ) || this.controller.isModeActive( 'eml-grid' ) ? '' : l10n.noItemsFound, + canClose: this.controller.isModeActive( 'grid' ) || this.controller.isModeActive( 'eml-grid' ) + }); + + this.uploader.$el.addClass( 'hidden' ); + this.views.add( this.uploader ); + }, + + createAttachments: function() { + this.attachments = new media.view.Attachments({ + controller: this.controller, + collection: this.collection, + selection: this.options.selection, + model: this.model, + sortable: this.options.sortable, + scrollElement: this.options.scrollElement, + idealColumnWidth: this.options.idealColumnWidth, + + // The single `Attachment` view to be used in the `Attachments` view. + AttachmentView: this.options.AttachmentView + }); + + // Add keydown listener to the instance of the Attachments view + // Commented to fix upload tab functionality + //this.attachments.listenTo( this.controller, 'attachment:keydown:arrow', this.attachments.arrowEvent ); + //this.attachments.listenTo( this.controller, 'attachment:details:shift-tab', this.attachments.restoreFocus ); + + this.views.add( this.attachments ); + + + if ( this.controller.isModeActive( 'grid' ) || + this.controller.isModeActive( 'eml-grid' ) ) { + + this.attachmentsNoResults = new media.View({ + controller: this.controller, + tagName: 'p' + }); + + this.attachmentsNoResults.$el.addClass( 'hidden no-media' ); + this.attachmentsNoResults.$el.html( l10n.noItemsFound ); + + this.views.add( this.attachmentsNoResults ); + } + } + }); + + + + /** + * wp.media.view.DateFilter + * + * a copy from media-grid.js | for WP less than 4.1 + */ + if ( _.isUndefined( media.view.DateFilter ) ) { + + media.view.DateFilter = media.view.AttachmentFilters.extend({ + + id: 'media-attachment-date-filters', + + createFilters: function() { + var filters = {}; + _.each( media.view.settings.months || {}, function( value, index ) { + filters[ index ] = { + text: value.text, + props: { + year: value.year, + monthnum: value.month + } + }; + }); + filters.all = { + text: l10n.allDates, + props: { + monthnum: false, + year: false + }, + priority: 10 + }; + this.filters = filters; + } + }); + } + + + + /** + * wp.media.view.MediaFrame.Post + * + */ + original.MediaFrame = { + + Post: { + activate: media.view.MediaFrame.Post.prototype.activate + } + }; + + _.extend( media.view.MediaFrame.Post.prototype, { + + activate: function() { + + var content = this.content.get(); + + original.MediaFrame.Post.activate.apply( this, arguments ); + + this.on( 'open', content.fixLayout, content ); + if ( typeof acf !== 'undefined' && $('.acf-expand-details').length ) { + $( document ).on( 'click', '.acf-expand-details', _.debounce( _.bind( content.fixLayout, content ), 250 ) ); + } + } + }); + + + + $( document ).ready( function() { + + // TODO: find a better place for this + $( document ).on( 'mousedown', '.media-frame .attachments-browser .attachments li', function ( event ) { + + if ( event.ctrlKey || event.shiftKey ) { + event.preventDefault(); + } + }); + }); + + + + // TODO: move to the PHP side + $('body').addClass('eml-media-css'); + +})( jQuery, _ ); diff --git a/environments/dev1/wp-config-local.php b/environments/dev1/wp-config-local.php deleted file mode 100644 index 47ce0fc..0000000 --- a/environments/dev1/wp-config-local.php +++ /dev/null @@ -1,13 +0,0 @@ -