Make WordPress Core

Ticket #24716: 24716.36.diff

File 24716.36.diff, 6.3 KB (added by ericlewis, 10 years ago)
  • src/wp-includes/css/media-views.css

    diff --git a/src/wp-includes/css/media-views.css b/src/wp-includes/css/media-views.css
    index ad5a7be..2a9914f 100644
    a b  
    228228.media-toolbar-secondary > .media-button,
    229229.media-toolbar-secondary > .media-button-group {
    230230        margin-right: 10px;
    231         float: left;
    232231        margin-top: 15px;
    233232}
    234233
  • src/wp-includes/js/media-grid.js

    diff --git a/src/wp-includes/js/media-grid.js b/src/wp-includes/js/media-grid.js
    index 0ebbc67..73a6dfd 100644
    a b  
    125125                                modal:     false,
    126126                                selection: [],
    127127                                library:   {},
    128                                 multiple:  false,
     128                                multiple:  'add',
    129129                                state:     'library',
    130130                                uploader:  true,
    131131                                mode:      [ 'grid', 'edit' ]
     
    514514                }
    515515        });
    516516
     517        media.view.BulkSelectionToggleButton = media.view.Button.extend({
     518                initialize: function() {
     519                        media.view.Button.prototype.initialize.apply( this, arguments );
     520                        this.listenTo( this.controller, 'bulk-edit:activate bulk-edit:deactivate', _.bind( this.toggleBulkEditHandler, this ) );
     521                },
     522
     523                click: function() {
     524                        var bulkEditActive = this.controller.activeModes.where( { id: 'bulk-edit' } ).length;
     525                        media.view.Button.prototype.click.apply( this, arguments );
     526
     527                        if ( bulkEditActive ) {
     528                                this.controller.deactivateMode( 'bulk-edit' );
     529                                this.controller.activateMode( 'edit' );
     530                        } else {
     531                                this.controller.deactivateMode( 'edit' );
     532                                this.controller.activateMode( 'bulk-edit' );
     533                        }
     534                },
     535
     536                toggleBulkEditHandler: function() {
     537                        var bulkEditActive = this.controller.activeModes.where( { id: 'bulk-edit' } ).length;
     538                        if ( bulkEditActive ) {
     539                                this.$el.addClass( 'button-primary' );
     540                        } else {
     541                                this.$el.removeClass( 'button-primary' );
     542                                this.controller.state().get('selection').reset();
     543                        }
     544                }
     545        });
     546
     547        media.view.BulkDeleteButton = media.view.Button.extend({
     548                initialize: function() {
     549                        media.view.Button.prototype.initialize.apply( this, arguments );
     550                        this.$el.hide();
     551                        this.listenTo( this.controller, 'bulk-edit:activate bulk-edit:deactivate', _.bind( this.visibility, this ) );
     552                },
     553
     554                click: function() {
     555                        media.view.Button.prototype.click.apply( this, arguments );
     556                        while (this.controller.state().get('selection').length > 0) {
     557                                this.controller.state().get('selection').at(0).destroy();
     558                        }
     559                },
     560
     561                visibility: function() {
     562                        var bulkEditActive = this.controller.activeModes.where( { id: 'bulk-edit' } ).length;
     563                        if ( bulkEditActive ) {
     564                                this.$el.show();
     565                        } else {
     566                                this.$el.hide();
     567                        }
     568                }
     569        });
     570
    517571}(jQuery, _, Backbone, wp));
     572 No newline at end of file
  • src/wp-includes/js/media-views.js

    diff --git a/src/wp-includes/js/media-views.js b/src/wp-includes/js/media-views.js
    index 6bf147c..bc618ab 100644
    a b  
    17851785                 * @global wp.Uploader
    17861786                 */
    17871787                initialize: function() {
    1788 
    17891788                        media.view.Frame.prototype.initialize.apply( this, arguments );
    17901789
    17911790                        _.defaults( this.options, {
    17921791                                title:    '',
    17931792                                modal:    true,
    17941793                                uploader: true,
    1795                                 mode:     ['select']
     1794                                mode:     [ 'select' ]
    17961795                        });
    17971796
    17981797                        // Ensure core UI is enabled.
     
    18081807                                this.modal.content( this );
    18091808                        }
    18101809
     1810                        // Store active "modes" that the frame is in. Unrelated to region modes.
     1811                        this.activeModes = new Backbone.Collection();
     1812                        this.activeModes.on( 'add remove reset', _.bind( this.triggerModeEvents, this ) );
     1813
     1814                        _.each( this.options.mode, function( mode ) {
     1815                                this.activeModes.add( new Backbone.Model( { id: mode } ) );
     1816                        }, this );
     1817
    18111818                        // Force the uploader off if the upload limit has been exceeded or
    18121819                        // if the browser isn't supported.
    18131820                        if ( wp.Uploader.limitExceeded || ! wp.Uploader.browser.supported ) {
     
    19721979
    19731980                        window.tb_remove = this._tb_remove;
    19741981                        delete this._tb_remove;
     1982                },
     1983
     1984                /**
     1985                 * Map activeMode collection events to the frame.
     1986                 */
     1987                triggerModeEvents: function( model, collection, options ) {
     1988                        var collectionEvent,
     1989                                modeEventMap = {
     1990                                        add: 'activate',
     1991                                        remove: 'deactivate'
     1992                                },
     1993                                eventToTrigger;
     1994                        // Probably a better way to do this.
     1995                        _.each( options, function( value, key ) {
     1996                                if ( value ) {
     1997                                        collectionEvent = key;
     1998                                }
     1999                        } );
     2000
     2001                        if ( ! _.has( modeEventMap, collectionEvent ) )
     2002                                return;
     2003
     2004                        eventToTrigger = model.get('id') + ':' + modeEventMap[collectionEvent];
     2005                        this.trigger( eventToTrigger );
     2006                },
     2007                activateMode: function( mode ) {
     2008                        this.activeModes.add( [ { id: mode } ] );
     2009                        this.trigger( mode + ':activate' );
     2010                },
     2011                deactivateMode: function( mode ) {
     2012                        // Bail if the mode isn't active.
     2013                        if ( ! this.activeModes.where( { id: mode } ).length ) {
     2014                                return;
     2015                        }
     2016                        this.activeModes.remove( this.activeModes.where( { id: mode } ) );
     2017                        this.trigger( mode + ':deactivate' );
    19752018                }
    19762019        });
    19772020
     
    46734716                        }
    46744717
    46754718                        // In the grid view, bubble up an edit:attachment event to the controller.
    4676                         if ( _.contains( this.controller.options.mode, 'grid' ) ) {
     4719                        if ( this.controller.activeModes.where( { id: 'edit' } ).length ) {
    46774720                                this.controller.trigger( 'edit:attachment', this.model );
    46784721                                return;
    46794722                        }
     
    55685611                        // Feels odd to bring the global media library switcher into the Attachment
    55695612                        // browser view. Is this a use case for doAction( 'add:toolbar-items:attachments-browser', this.toolbar );
    55705613                        // which the controller can tap into and add this view?
    5571                         if ( _.contains( this.controller.options.mode, 'grid' ) ) {
     5614                        if ( this.controller.activeModes.where( { id: 'grid' } ).length ) {
    55725615                                LibraryViewSwitcher = media.View.extend({
    55735616                                        className: 'view-switch media-grid-view-switch',
    55745617                                        template: media.template( 'media-library-view-switcher')
     
    55785621                                        priority: -90
    55795622                                }).render() );
    55805623
     5624                                this.toolbar.set( 'bulkSelectionToggleButton', new media.view.BulkSelectionToggleButton({
     5625                                        text: 'Bulk Edit',
     5626                                        controller: this.controller,
     5627                                        priority: -70
     5628                                }).render() );
     5629
     5630                                this.toolbar.set( 'BulkDeleteButton', new media.view.BulkDeleteButton({
     5631                                        text: 'Bulk Delete',
     5632                                        controller: this.controller,
     5633                                        priority: -69
     5634                                }).render() );
     5635
    55815636                                this.toolbar.set( 'gridFieldOptions', new media.view.GridFieldOptions({
    55825637                                        controller: this.controller,
    55835638                                        priority: -50