WordPress.org

Make WordPress Core

Ticket #22723: 22723.diff

File 22723.diff, 5.0 KB (added by koopersmith, 17 months ago)
  • wp-includes/js/media-views.js

     
    389389                }, 
    390390 
    391391                activate: function() { 
    392                         if ( this.get('syncLastSelection') ) { 
     392                        if ( this.get('syncLastSelection') ) 
    393393                                this.getLastSelection(); 
    394                         } 
    395394 
    396                         this._excludeStateLibrary(); 
    397                         this.buildComposite(); 
    398                         this.on( 'change:library change:exclude', this.buildComposite, this ); 
    399                         this.on( 'change:excludeState', this._excludeState, this ); 
    400  
    401395                        wp.Uploader.queue.on( 'add', this.uploading, this ); 
    402396 
    403397                        this.get('selection').on( 'add remove reset', this.refreshContent, this ); 
     
    418412                        this.get('selection').off( null, null, this ); 
    419413 
    420414                        wp.Uploader.queue.off( null, null, this ); 
    421  
    422                         this.off( 'change:excludeState', this._excludeState, this ); 
    423                         this.off( 'change:library change:exclude', this.buildComposite, this ); 
    424  
    425                         this.destroyComposite(); 
    426415                }, 
    427416 
    428417                reset: function() { 
     
    519508 
    520509                        if ( view && view.get( mode ) ) 
    521510                                setUserSetting( 'libraryContent', mode ); 
    522                 }, 
    523  
    524                 buildComposite: function() { 
    525                         var original = this.get('_library'), 
    526                                 exclude = this.get('exclude'), 
    527                                 composite; 
    528  
    529                         this.destroyComposite(); 
    530                         if ( ! this.get('exclude') ) 
    531                                 return; 
    532  
    533                         // Remember the state's original library. 
    534                         if ( ! original ) 
    535                                 this.set( '_library', original = this.get('library') ); 
    536  
    537                         // Create a composite library in its place. 
    538                         composite = new media.model.Attachments( null, { 
    539                                 props: _.pick( original.props.toJSON(), 'order', 'orderby' ) 
    540                         }); 
    541  
    542                         // Accepts attachments that exist in the original library and 
    543                         // that do not exist in the excluded library. 
    544                         composite.validator = function( attachment ) { 
    545                                 return !! original.getByCid( attachment.cid ) && ! exclude.getByCid( attachment.cid ); 
    546                         }; 
    547  
    548                         composite.mirror( original ).observe( exclude ); 
    549  
    550                         this.set( 'library', composite ); 
    551                 }, 
    552  
    553                 destroyComposite: function() { 
    554                         var composite = this.get('library'), 
    555                                 original = this.get('_library'); 
    556  
    557                         if ( ! original ) 
    558                                 return; 
    559  
    560                         composite.unobserve(); 
    561                         this.set( 'library', original ); 
    562                         this.unset('_library'); 
    563                 }, 
    564  
    565                 _excludeState: function() { 
    566                         var current = this.get('excludeState'), 
    567                                 previous = this.previous('excludeState'); 
    568  
    569                         if ( previous ) 
    570                                 this.frame.state( previous ).off( 'change:library', this._excludeStateLibrary, this ); 
    571  
    572                         if ( current ) 
    573                                 this.frame.state( current ).on( 'change:library', this._excludeStateLibrary, this ); 
    574                 }, 
    575  
    576                 _excludeStateLibrary: function() { 
    577                         var current = this.get('excludeState'); 
    578  
    579                         if ( ! current ) 
    580                                 return; 
    581  
    582                         this.set( 'exclude', this.frame.state( current ).get('library') ); 
    583511                } 
    584512        }); 
    585513 
     
    662590                } 
    663591        }); 
    664592 
     593        // wp.media.controller.GalleryAdd 
     594        // --------------------------------- 
     595        media.controller.GalleryAdd = media.controller.Library.extend({ 
     596                defaults: _.defaults({ 
     597                        id:           'gallery-library', 
     598                        filterable:   'uploaded', 
     599                        multiple:     'add', 
     600                        menu:         'gallery', 
     601                        toolbar:      'gallery-add', 
     602                        title:        l10n.addToGalleryTitle, 
     603                        priority:     100 
     604                }, media.controller.Library.prototype.defaults ), 
     605 
     606                initialize: function() { 
     607                        // If we haven't been provided a `library`, create a `Selection`. 
     608                        if ( ! this.get('library') ) 
     609                                this.set( 'library', media.query({ type: 'image' }) ); 
     610 
     611                        media.controller.Library.prototype.initialize.apply( this, arguments ); 
     612                }, 
     613 
     614                activate: function() { 
     615                        var library = this.get('library'), 
     616                                edit    = this.frame.state('gallery-edit').get('library'); 
     617 
     618                        if ( this.editLibrary && this.editLibrary !== edit ) 
     619                                library.unobserve( this.editLibrary ); 
     620 
     621                        // Accepts attachments that exist in the original library and 
     622                        // that do not exist in gallery's library. 
     623                        library.validator = function( attachment ) { 
     624                                return !! this.mirroring.getByCid( attachment.cid ) && ! edit.getByCid( attachment.cid ) && media.model.Selection.prototype.validator.apply( this, arguments ); 
     625                        }; 
     626 
     627                        library.observe( edit ); 
     628                        this.editLibrary = edit; 
     629 
     630                        media.controller.Library.prototype.activate.apply( this, arguments ); 
     631                } 
     632        }); 
     633 
    665634        // wp.media.controller.FeaturedImage 
    666635        // --------------------------------- 
    667636        media.controller.FeaturedImage = media.controller.Library.extend({ 
     
    15941563                                        menu:    'gallery' 
    15951564                                }), 
    15961565 
    1597                                 new media.controller.Library({ 
    1598                                         id:           'gallery-library', 
    1599                                         library:      media.query({ type: 'image' }), 
    1600                                         filterable:   'uploaded', 
    1601                                         multiple:     'add', 
    1602                                         menu:         'gallery', 
    1603                                         toolbar:      'gallery-add', 
    1604                                         excludeState: 'gallery-edit', 
    1605                                         title:        l10n.addToGalleryTitle, 
    1606                                         priority:     100 
    1607                                 }) 
     1566                                new media.controller.GalleryAdd() 
    16081567                        ]); 
    16091568 
    16101569 
     
    18361795                                                style:    'primary', 
    18371796                                                text:     l10n.addToGallery, 
    18381797                                                priority: 80, 
     1798                                                requires: { selection: true }, 
    18391799 
    18401800                                                click: function() { 
    18411801                                                        var controller = this.controller,