Changeset 22477
- Timestamp:
- 11/09/2012 01:23:20 AM (12 years ago)
- Location:
- trunk/wp-includes/js
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/js/media-models.js
r22467 r22477 742 742 observe: function( attachments, options ) { 743 743 var silent = options && options.silent; 744 this.observers = this.observers || []; 745 this.observers.push( attachments ); 744 746 745 747 attachments.on( 'add remove', silent ? this._evaluateSilentHandler : this._evaluateHandler, this ); … … 747 749 748 750 this.evaluateAll( attachments, options ); 751 return this; 749 752 }, 750 753 751 754 unobserve: function( attachments ) { 752 attachments.off( 'add remove', this._evaluateHandler, this ); 753 attachments.off( 'reset', this._evaluateAllHandler, this ); 755 if ( attachments ) { 756 attachments.off( null, null, this ); 757 this.observers = _.without( this.observers, attachments ); 758 759 } else { 760 _.each( this.observers, function( attachments ) { 761 attachments.off( null, null, this ); 762 }, this ); 763 delete this.observers; 764 } 765 766 return this; 754 767 }, 755 768 -
trunk/wp-includes/js/media-views.js
r22467 r22477 292 292 var selection = this.get('selection'); 293 293 294 this._excludeStateLibrary(); 295 this.buildComposite(); 296 this.on( 'change:library change:exclude', this.buildComposite, this ); 297 this.on( 'change:excludeState', this._excludeState, this ); 298 294 299 // If we're in a workflow that supports multiple attachments, 295 300 // automatically select any uploading attachments. … … 307 312 308 313 deactivate: function() { 314 this.off( 'change:library change:exclude', this.buildComposite, this ); 315 this.off( 'change:excludeState', this._excludeState, this ); 316 this.destroyComposite(); 317 309 318 wp.Uploader.queue.off( 'add', this.selectUpload, this ); 310 319 … … 376 385 377 386 return this; 387 }, 388 389 buildComposite: function() { 390 var original = this.get('_library'), 391 exclude = this.get('exclude'), 392 composite; 393 394 this.destroyComposite(); 395 if ( ! this.get('exclude') ) 396 return; 397 398 // Remember the state's original library. 399 if ( ! original ) 400 this.set( '_library', original = this.get('library') ); 401 402 // Create a composite library in its place. 403 composite = new media.model.Composite( null, { 404 props: _.pick( original.props.toJSON(), 'order', 'orderby' ) 405 }); 406 407 // Accepts attachments that exist in the original library and 408 // that do not exist in the excluded library. 409 composite.validator = function( attachment ) { 410 return !! original.getByCid( attachment.cid ) && ! exclude.getByCid( attachment.cid ); 411 }; 412 413 composite.observe( original ).observe( exclude ); 414 415 // When `more()` is triggered on the composite collection, 416 // pass the command over to the `original`, which will 417 // populate the query. 418 composite.more = _.bind( original.more, original ); 419 420 this.set( 'library', composite ); 421 }, 422 423 destroyComposite: function() { 424 var composite = this.get('library'), 425 original = this.get('_library'); 426 427 if ( ! original ) 428 return; 429 430 composite.unobserve(); 431 this.set( 'library', original ); 432 this.unset('_library'); 433 }, 434 435 _excludeState: function() { 436 var current = this.get('excludeState'), 437 previous = this.previous('excludeState'); 438 439 if ( previous ) 440 this.frame.get( previous ).off( 'change:library', this._excludeStateLibrary, this ); 441 442 if ( current ) 443 this.frame.get( previous ).on( 'change:library', this._excludeStateLibrary, this ); 444 }, 445 446 _excludeStateLibrary: function() { 447 var current = this.get('excludeState'); 448 449 if ( ! current ) 450 return; 451 452 this.set( 'exclude', this.frame.get( current ).get('library') ); 378 453 } 379 454 }); … … 660 735 new media.controller.Library( _.defaults({ 661 736 id: 'gallery-library', 662 library: media.query({ type: 'image' }) 737 library: media.query({ type: 'image' }), 738 excludeState: 'gallery-edit' 663 739 }, gallery ) ), 664 740 665 741 new media.controller.Upload( _.defaults({ 666 id: 'gallery-upload' 742 id: 'gallery-upload', 743 excludeState: 'gallery-edit' 667 744 }, gallery ) ) 668 745 ]); 669 746 670 this.get('gallery-edit').on( 'change:library', this.updateGalleryLibraries, this ).set({671 library: options.selection672 });673 674 747 // Set the default state. 675 748 this.state( options.state ); 676 },677 678 updateGalleryLibraries: function() {679 var editLibrary = this.get('gallery-edit').get('library');680 681 _.each(['gallery-library','gallery-upload'], function( id ) {682 var state = this.get( id ),683 original = state.get('_library'),684 composite;685 686 // Remember the state's original library.687 if ( ! original )688 state.set( '_library', original = state.get('library') );689 690 // Create a composite library in its place.691 composite = new media.model.Composite( null, {692 props: _.pick( original.props.toJSON(), 'order', 'orderby' )693 });694 695 // Accepts attachments that exist in the original library and696 // that do not exist in the state's library.697 composite.validator = function( attachment ) {698 return !! original.getByCid( attachment.cid ) && ! editLibrary.getByCid( attachment.cid );699 };700 701 composite.observe( original );702 composite.observe( editLibrary );703 704 // When `more()` is triggered on the composite collection,705 // pass the command over to the `original`, which will706 // populate the query.707 composite.more = _.bind( original.more, original );708 709 state.set( 'library', composite );710 }, this );711 749 }, 712 750
Note: See TracChangeset
for help on using the changeset viewer.