Changeset 27266
- Timestamp:
- 02/25/2014 05:31:19 PM (10 years ago)
- Location:
- trunk/src/wp-includes/js
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/js/media-editor.js
r27242 r27266 293 293 */ 294 294 return function( shortcode ) { 295 296 297 298 299 300 301 302 303 } 304 305 306 307 308 309 310 311 312 313 314 295 var shortcodeString = shortcode.string(), 296 result = cache[ shortcodeString ], 297 attrs, args, query, others; 298 299 delete cache[ shortcodeString ]; 300 301 if ( result ) { 302 return result; 303 } 304 305 // Fill the default shortcode attributes. 306 attrs = _.defaults( shortcode.attrs.named, this.defaults ); 307 args = _.pick( attrs, 'orderby', 'order' ); 308 309 args.type = type; 310 args.perPage = -1; 311 312 // Mark the `orderby` override attribute. 313 if ( undefined !== attrs.orderby ) { 314 attrs._orderByField = attrs.orderby; 315 315 } 316 316 … … 359 359 }, 360 360 361 362 363 364 365 366 367 } 368 369 370 371 372 373 374 375 376 377 } 378 379 380 381 382 383 361 shortcodeAttrs : function ( prop, attachments ) { 362 var props = attachments.props.toJSON(), 363 attrs = _.pick( props, 'orderby', 'order', 'style' ); 364 365 if ( attachments[ prop ] ) { 366 _.extend( attrs, attachments[ prop ].toJSON() ); 367 } 368 369 // Convert all collection shortcodes to use the `ids` property. 370 // Ignore `post__in` and `post__not_in`; the attachments in 371 // the collection will already reflect those properties. 372 attrs.ids = attachments.pluck('id'); 373 374 // Copy the `uploadedTo` post ID. 375 if ( props.uploadedTo ) { 376 attrs.id = props.uploadedTo; 377 } 378 379 // Check if the collection is randomly ordered. 380 delete attrs.orderby; 381 382 if ( attrs._orderbyRandom ) { 383 attrs.orderby = 'rand'; 384 384 } else if ( attrs._orderByField && attrs._orderByField != 'rand' ) { 385 386 } 387 388 385 attrs.orderby = attrs._orderByField; 386 } 387 388 delete attrs._orderbyRandom; 389 389 delete attrs._orderByField; 390 390 391 392 393 394 391 // If the `ids` attribute is set and `orderby` attribute 392 // is the default value, clear it for cleaner output. 393 if ( attrs.ids && 'post__in' === attrs.orderby ) { 394 delete attrs.orderby; 395 395 } 396 396 … … 406 406 } 407 407 408 409 410 411 412 } 413 414 415 416 417 418 408 // Remove default attributes from the shortcode. 409 _.each( wp.media[prop].defaults, function( value, key ) { 410 if ( value === attrs[ key ] ) { 411 delete attrs[ key ]; 412 } 413 }); 414 return attrs; 415 }, 416 417 editSelection : function ( prop, shortcode ) { 418 var defaultPostId = wp.media[ prop ].defaults.id, 419 419 attachments, selection; 420 420 421 422 423 424 425 426 } 427 428 429 430 431 432 433 434 435 436 437 421 // Ignore the rest of the match object. 422 shortcode = shortcode.shortcode; 423 424 if ( _.isUndefined( shortcode.get('id') ) && ! _.isUndefined( defaultPostId ) ) { 425 shortcode.set( 'id', defaultPostId ); 426 } 427 428 attachments = wp.media[ prop ].attachments( shortcode ); 429 430 selection = new wp.media.model.Selection( attachments.models, { 431 props: attachments.props.toJSON(), 432 multiple: true 433 }); 434 435 selection[ prop ] = attachments[ prop ]; 436 437 // Fetch the query's attachments, and then break ties from the 438 438 // query to allow for sorting. 439 440 441 442 443 444 445 446 447 439 selection.more().done( function() { 440 // Break ties with the query. 441 selection.props.set({ query: false }); 442 selection.unmirror(); 443 selection.props.unset('orderby'); 444 }); 445 446 return selection; 447 }, 448 448 449 449 /** … … 454 454 * @returns {wp.shortcode} 455 455 */ 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 } 472 473 474 475 476 477 multiple: true, 478 479 480 481 482 483 484 485 456 cacheShortcode : function ( prop, attachments, shortcode ) { 457 // Use a cloned version of the playlist. 458 var clone = new wp.media.model.Attachments( attachments.models, { 459 props: attachments.props.toJSON() 460 }); 461 clone[ prop ] = attachments[ prop ]; 462 cache[ shortcode.string() ] = clone; 463 464 return shortcode; 465 }, 466 467 getEditFrame : function ( args ) { 468 // Destroy the previous gallery frame. 469 if ( this.frame ) { 470 this.frame.dispose(); 471 } 472 473 // Store the current gallery frame. 474 this.frame = wp.media( _.extend( { 475 frame: 'post', 476 editing: true, 477 multiple: true 478 }, args ) ).open(); 479 480 return this.frame; 481 }, 482 483 instance : function ( prop, args ) { 484 return { 485 attachments: this.attachments( prop, args.type ), 486 486 /** 487 487 * Triggered when clicking 'Insert {label}' or 'Update {label}' … … 496 496 * @returns {wp.shortcode} 497 497 */ 498 499 500 501 502 503 504 505 498 shortcode: function( attachments ) { 499 var shortcode = new wp.shortcode({ 500 tag: prop, 501 attrs: wp.media.collection.shortcodeAttrs( prop, attachments ), 502 type: 'single' 503 }); 504 505 return wp.media.collection.cacheShortcode( prop, attachments, shortcode ); 506 506 }, 507 507 /** … … 520 520 * @returns {wp.media.view.MediaFrame.Select} A media workflow. 521 521 */ 522 523 524 525 526 527 522 edit: function( content ) { 523 var shortcode = wp.shortcode.next( prop, content ); 524 525 // Bail if we didn't match the shortcode or all of the content. 526 if ( ! shortcode || shortcode.content !== content ) { 527 return; 528 528 } 529 529 530 531 532 533 534 535 536 537 530 return wp.media.collection.getEditFrame( { 531 title: args.title, 532 state: prop + '-edit', 533 selection: wp.media.collection.editSelection( prop, shortcode ) 534 } ); 535 } 536 }; 537 } 538 538 }; 539 539 540 541 542 540 wp.media.gallery = (function() { 541 var gallery = { 542 defaults : { 543 543 itemtag: 'dl', 544 544 icontag: 'dt', 545 545 captiontag: 'dd', 546 546 columns: '3', 547 547 link: 'post', 548 548 size: 'thumbnail', 549 550 551 552 553 554 555 556 557 558 559 549 order: 'ASC', 550 id: wp.media.view.settings.post.id, 551 orderby : 'menu_order ID' 552 } 553 }; 554 555 return _.extend(gallery, wp.media.collection.instance( 'gallery', { 556 type : 'image', 557 title : wp.media.view.l10n.editGalleryTitle 558 })); 559 }()); 560 560 561 561 wp.media.playlist = (function() { -
trunk/src/wp-includes/js/media-views.js
r27239 r27266 768 768 * @returns {wp.media.controller.Library} 769 769 */ 770 770 media.controller.CollectionEdit = function ( prop, args ) { 771 771 /** 772 772 * @constructor … … 775 775 * @augments Backbone.Model 776 776 */ 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 777 return media.controller.Library.extend({ 778 defaults : _.defaults(args.defaults || {}, { 779 id: prop + '-edit', 780 toolbar: prop + '-edit', 781 multiple: false, 782 describe: true, 783 edge: 199, 784 editing: false, 785 sortable: true, 786 searchable: false, 787 content: 'browse', 788 priority: 60, 789 dragInfo: true, 790 791 // Don't sync the selection, as the Edit {Collection} library 792 // *is* the selection. 793 syncSelection: false 794 }), 795 796 initialize: function() { 797 // If we haven't been provided a `library`, create a `Selection`. 798 if ( ! this.get('library') ) { 799 this.set( 'library', new media.model.Selection() ); 800 800 } 801 802 803 801 // The single `Attachment` view to be used in the `Attachments` view. 802 if ( ! this.get('AttachmentView') ) { 803 this.set( 'AttachmentView', media.view.Attachment.EditLibrary ); 804 804 } 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 805 media.controller.Library.prototype.initialize.apply( this, arguments ); 806 }, 807 808 activate: function() { 809 var library = this.get('library'); 810 811 // Limit the library to images only. 812 library.props.set( 'type', args.type ); 813 814 // Watch for uploaded attachments. 815 this.get('library').observe( wp.Uploader.queue ); 816 817 this.frame.on( 'content:render:browse', this.settings, this ); 818 819 media.controller.Library.prototype.activate.apply( this, arguments ); 820 }, 821 822 deactivate: function() { 823 // Stop watching for uploaded attachments. 824 this.get('library').unobserve( wp.Uploader.queue ); 825 826 this.frame.off( 'content:render:browse', this.settings, this ); 827 828 media.controller.Library.prototype.deactivate.apply( this, arguments ); 829 }, 830 831 settings: function( browser ) { 832 var library = this.get('library'), obj = {}; 833 834 if ( ! library || ! browser ) { 835 return; 836 836 } 837 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 838 library[ prop ] = library[ prop ] || new Backbone.Model(); 839 840 obj[ prop ] = new media.view.Settings[ args.settings ]({ 841 controller: this, 842 model: library[ prop ], 843 priority: 40 844 }); 845 846 browser.sidebar.set( obj ); 847 848 if ( args.dragInfoText ) { 849 browser.toolbar.set( 'dragInfo', new media.View({ 850 el: $( '<div class="instructions">' + args.dragInfoText + '</div>' )[0], 851 priority: -40 852 }) ); 853 } 854 855 browser.toolbar.set( 'reverse', { 856 text: l10n.reverseOrder, 857 priority: 80, 858 859 click: function() { 860 library.reset( library.toArray().reverse() ); 861 } 862 }); 863 } 864 }); 865 }; 866 866 867 867 /** … … 873 873 * @returns {wp.media.controller.Library} 874 874 */ 875 875 media.controller.CollectionAdd = function ( prop, args ) { 876 876 /** 877 877 * @constructor … … 880 880 * @augments Backbone.Model 881 881 */ 882 883 884 885 886 887 888 889 890 891 892 893 894 895 882 return media.controller.Library.extend({ 883 defaults: _.defaults({ 884 id: prop + '-library', 885 filterable: 'uploaded', 886 multiple: 'add', 887 menu: prop, 888 toolbar: prop + '-add', 889 priority: 100, 890 syncSelection: false 891 }, args.defaults || {}, media.controller.Library.prototype.defaults ), 892 initialize: function() { 893 // If we haven't been provided a `library`, create a `Selection`. 894 if ( ! this.get('library') ) { 895 this.set( 'library', media.query({ type: args.type }) ); 896 896 } 897 898 897 media.controller.Library.prototype.initialize.apply( this, arguments ); 898 }, 899 899 900 900 activate: function() { 901 902 903 904 905 901 var library = this.get('library'), 902 edit = this.frame.state(prop + '-edit').get('library'); 903 904 if ( this.editLibrary && this.editLibrary !== edit ) { 905 library.unobserve( this.editLibrary ); 906 906 } 907 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 908 // Accepts attachments that exist in the original library and 909 // that do not exist in gallery's library. 910 library.validator = function( attachment ) { 911 return !! this.mirroring.get( attachment.cid ) && ! edit.get( attachment.cid ) && media.model.Selection.prototype.validator.apply( this, arguments ); 912 }; 913 914 // Reset the library to ensure that all attachments are re-added 915 // to the collection. Do so silently, as calling `observe` will 916 // trigger the `reset` event. 917 library.reset( library.mirroring.models, { silent: true }); 918 library.observe( edit ); 919 this.editLibrary = edit; 920 921 media.controller.Library.prototype.activate.apply( this, arguments ); 922 } 923 }); 924 }; 925 925 926 926 // wp.media.controller.GalleryEdit … … 1875 1875 this.on( 'menu:create:video-playlist', this.createMenu, this ); 1876 1876 this.on( 'toolbar:create:main-insert', this.createToolbar, this ); 1877 1878 1879 1877 this.on( 'toolbar:create:main-gallery', this.createToolbar, this ); 1878 this.on( 'toolbar:create:main-playlist', this.createToolbar, this ); 1879 this.on( 'toolbar:create:main-video-playlist', this.createToolbar, this ); 1880 1880 this.on( 'toolbar:create:featured-image', this.featuredImageToolbar, this ); 1881 1881 this.on( 'toolbar:create:main-embed', this.mainEmbedToolbar, this );
Note: See TracChangeset
for help on using the changeset viewer.