Changeset 22648
- Timestamp:
- 11/19/2012 12:36:47 AM (12 years ago)
- Location:
- trunk/wp-includes
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/css/media-views.css
r22612 r22648 109 109 } 110 110 111 .media-frame > .media-toolbar {111 .media-frame-toolbar > .media-toolbar { 112 112 top: auto; 113 113 left: 200px; … … 117 117 } 118 118 119 . media-frame.hide-toolbar > .media-toolbar {119 .hide-toolbar .media-frame-toolbar > .media-toolbar { 120 120 bottom: -61px; 121 121 } -
trunk/wp-includes/js/media-views.js
r22612 r22648 61 61 */ 62 62 media.controller.Region = function( options ) { 63 _.extend( this, _.pick( options || {}, 'id', 'controller' ) );63 _.extend( this, _.pick( options || {}, 'id', 'controller', 'selector' ) ); 64 64 65 65 this.on( 'activate:empty', this.empty, this ); … … 114 114 view.$el.addClass( 'mode-' + mode ); 115 115 116 // Remove the hide class. 117 // this.$el.removeClass( 'hide-' + subview ); 118 119 if ( previous ) { 120 // Replace the view in place. 121 previous.$el.replaceWith( view.$el ); 122 123 // Fire the view's `destroy` event if it exists. 124 if ( previous.destroy ) 125 previous.destroy(); 126 // Undelegate events. 127 previous.undelegateEvents(); 128 } 129 116 this.controller.views.set( this.selector, view ); 130 117 this._view = view; 131 118 }, 132 119 133 120 empty: function() { 134 this.view( new Backbone.View() );121 this.view( new media.View() ); 135 122 } 136 123 }); … … 575 562 */ 576 563 564 // wp.media.Views 565 // ------------- 566 // 567 // A subview manager. 568 569 media.Views = function( view, views ) { 570 this.view = view; 571 this._views = _.isArray( views ) ? { '': views } : views || {}; 572 }; 573 574 media.Views.extend = Backbone.Model.extend; 575 576 _.extend( media.Views.prototype, { 577 get: function( selector ) { 578 selector = selector || ''; 579 return this._views[ selector ]; 580 }, 581 582 set: function( selector, views, options ) { 583 var $selector, els, existing, add, method; 584 585 if ( ! _.isString( selector ) ) { 586 options = views; 587 views = selector; 588 selector = ''; 589 } 590 591 views = _.isArray( views ) ? views : [ views ]; 592 add = options && options.add; 593 existing = this.get( selector ); 594 method = add ? 'attach' : 'replace'; 595 596 if ( ! add && existing ) { 597 this.unset( selector ); 598 _.invoke( existing, 'dispose' ); 599 } 600 601 this._views[ selector ] = add && existing ? existing.concat( views ) : views; 602 603 $selector = selector ? this.view.$( selector ) : this.view.$el; 604 els = _.pluck( views, 'el' ); 605 606 _.each( views, function( subview ) { 607 var subviews = subview.views = subview.views || new this.constructor( subview ); 608 subviews.parent = this.view; 609 subviews.selector = selector; 610 }, this ); 611 612 this[ method ]( $selector, els ); 613 return this; 614 }, 615 616 add: function( selector, views ) { 617 return this.set( selector, views, { add: true }); 618 }, 619 620 unset: function( selector, views ) { 621 var existing; 622 623 if ( ! _.isString( selector ) ) { 624 views = selector; 625 selector = ''; 626 } 627 628 views = _.isArray( views ) ? views : [ views ]; 629 630 if ( existing = this.get( selector ) ) 631 this._views[ selector ] = _.difference( existing, views ); 632 633 return this; 634 }, 635 636 render: function() { 637 var root = this._views['']; 638 639 if ( root ) 640 this.replace( this.view.$el, _.pluck( root, 'el' ) ); 641 642 _.each( this._views, function( views, selector ) { 643 if ( selector ) 644 this.replace( this.view.$( selector ), _.pluck( views, 'el' ) ); 645 }, this ); 646 647 return this; 648 }, 649 650 dispose: function() { 651 delete this.parent; 652 delete this.selector; 653 654 _.chain( this._views ).flatten().invoke('dispose'); 655 this._views = []; 656 }, 657 658 replace: function( $target, els ) { 659 if ( this.view.replace ) 660 return this.view.replace( $target, els ); 661 662 $target.html( els ); 663 }, 664 665 attach: function( $target, els ) { 666 if ( this.view.attach ) 667 return this.view.attach( $target, els ); 668 669 $target.append( els ); 670 } 671 }); 672 673 // wp.media.View 674 // ------------- 675 // 676 // The base view class. 677 media.View = Backbone.View.extend({ 678 constructor: function() { 679 this.views = new media.Views( this, this.views ); 680 Backbone.View.apply( this, arguments ); 681 }, 682 683 dispose: function() { 684 // Undelegating events, removing events from the model, and 685 // removing events from the controller mirror the code for 686 // `Backbone.View.dispose` in Backbone master. 687 this.undelegateEvents(); 688 689 if ( this.model && this.model.off ) 690 this.model.off( null, null, this ); 691 692 if ( this.collection && this.collection.off ) 693 this.collection.off( null, null, this ); 694 695 // Recursively dispose child views. 696 if ( this.views ) 697 this.views.dispose(); 698 699 return this; 700 }, 701 702 remove: function() { 703 this.dispose(); 704 return Backbone.View.prototype.remove.apply( this, arguments ); 705 } 706 }); 707 577 708 /** 578 709 * wp.media.view.Frame 579 710 */ 580 media.view.Frame = Backbone.View.extend({ 581 711 media.view.Frame = media.View.extend({ 582 712 initialize: function() { 583 713 this._createRegions(); … … 593 723 this[ region ] = new media.controller.Region({ 594 724 controller: this, 595 id: region 725 id: region, 726 selector: '.media-frame-' + region 596 727 }); 597 728 }, this ); … … 611 742 612 743 render: function() { 613 var els = _.map( this.regions, function( region ) { 614 return this[ region ].view().el; 615 }, this ); 616 617 // Detach the current views to maintain event bindings. 618 $( els ).detach(); 619 this.$el.html( els ); 620 744 if ( ! this.template ) 745 return; 746 747 this.$el.html( this.template( this.options ) ); 748 this.views.render(); 621 749 return this; 622 750 }, … … 636 764 media.view.MediaFrame = media.view.Frame.extend({ 637 765 className: 'media-frame', 766 template: media.template('media-frame'), 638 767 regions: ['menu','content','sidebar','toolbar'], 639 768 … … 1085 1214 1086 1215 this.menu.view().add({ 1087 separateLibrary: new Backbone.View({1216 separateLibrary: new media.View({ 1088 1217 className: 'separator', 1089 1218 priority: 60 … … 1113 1242 } 1114 1243 }, 1115 separateCancel: new Backbone.View({1244 separateCancel: new media.View({ 1116 1245 className: 'separator', 1117 1246 priority: 40 … … 1150 1279 } 1151 1280 }, 1152 separateCancel: new Backbone.View({1281 separateCancel: new media.View({ 1153 1282 className: 'separator', 1154 1283 priority: 40 … … 1370 1499 * wp.media.view.Modal 1371 1500 */ 1372 media.view.Modal = Backbone.View.extend({1501 media.view.Modal = media.View.extend({ 1373 1502 tagName: 'div', 1374 1503 template: media.template('media-modal'), … … 1446 1575 // wp.media.view.UploaderWindow 1447 1576 // ---------------------------- 1448 media.view.UploaderWindow = Backbone.View.extend({1577 media.view.UploaderWindow = media.View.extend({ 1449 1578 tagName: 'div', 1450 1579 className: 'uploader-window', … … 1525 1654 }); 1526 1655 1527 media.view.UploaderInline = Backbone.View.extend({1656 media.view.UploaderInline = media.View.extend({ 1528 1657 tagName: 'div', 1529 1658 className: 'uploader-inline', … … 1581 1710 * wp.media.view.Toolbar 1582 1711 */ 1583 media.view.Toolbar = Backbone.View.extend({1712 media.view.Toolbar = media.View.extend({ 1584 1713 tagName: 'div', 1585 1714 className: 'media-toolbar', … … 1817 1946 * wp.media.view.Button 1818 1947 */ 1819 media.view.Button = Backbone.View.extend({1948 media.view.Button = media.View.extend({ 1820 1949 tagName: 'a', 1821 1950 className: 'media-button', … … 1893 2022 * wp.media.view.ButtonGroup 1894 2023 */ 1895 media.view.ButtonGroup = Backbone.View.extend({2024 media.view.ButtonGroup = media.View.extend({ 1896 2025 tagName: 'div', 1897 2026 className: 'button-group button-large media-button-group', … … 1921 2050 */ 1922 2051 1923 media.view.PriorityList = Backbone.View.extend({2052 media.view.PriorityList = media.View.extend({ 1924 2053 tagName: 'div', 1925 2054 … … 1928 2057 this._views = {}; 1929 2058 1930 this.add( _.extend( {}, this.views, this.options.views ), { silent: true }); 1931 delete this.views; 2059 this.add( _.extend( {}, this._views, this.options.views ), { silent: true }); 1932 2060 delete this.options.views; 1933 2061 … … 1994 2122 1995 2123 toView: function( options ) { 1996 return new Backbone.View( options );2124 return new media.View( options ); 1997 2125 } 1998 2126 }); … … 2027 2155 }); 2028 2156 2029 media.view.MenuItem = Backbone.View.extend({2157 media.view.MenuItem = media.View.extend({ 2030 2158 tagName: 'li', 2031 2159 className: 'media-menu-item', … … 2066 2194 * wp.media.view.Attachment 2067 2195 */ 2068 media.view.Attachment = Backbone.View.extend({2196 media.view.Attachment = media.View.extend({ 2069 2197 tagName: 'li', 2070 2198 className: 'attachment', … … 2264 2392 * wp.media.view.Attachments 2265 2393 */ 2266 media.view.Attachments = Backbone.View.extend({2394 media.view.Attachments = media.View.extend({ 2267 2395 tagName: 'ul', 2268 2396 className: 'attachments', … … 2455 2583 * wp.media.view.Search 2456 2584 */ 2457 media.view.Search = Backbone.View.extend({2585 media.view.Search = media.View.extend({ 2458 2586 tagName: 'input', 2459 2587 className: 'search', … … 2488 2616 * wp.media.view.AttachmentsBrowser 2489 2617 */ 2490 media.view.AttachmentsBrowser = Backbone.View.extend({2618 media.view.AttachmentsBrowser = media.View.extend({ 2491 2619 tagName: 'div', 2492 2620 className: 'attachments-browser', … … 2516 2644 2517 2645 if ( this.options.sortable ) { 2518 this.toolbar.set( 'dragInfo', new Backbone.View({2646 this.toolbar.set( 'dragInfo', new media.View({ 2519 2647 el: $( '<div class="instructions">' + l10n.dragInfo + '</div>' )[0], 2520 2648 priority: -40 … … 2560 2688 * wp.media.view.SelectionPreview 2561 2689 */ 2562 media.view.SelectionPreview = Backbone.View.extend({2690 media.view.SelectionPreview = media.View.extend({ 2563 2691 tagName: 'div', 2564 2692 className: 'selection-preview', … … 2611 2739 * wp.media.view.Selection 2612 2740 */ 2613 media.view.Selection = Backbone.View.extend({2741 media.view.Selection = media.View.extend({ 2614 2742 tagName: 'div', 2615 2743 className: 'media-selection', … … 2708 2836 * wp.media.view.Settings 2709 2837 */ 2710 media.view.Settings = Backbone.View.extend({2838 media.view.Settings = media.View.extend({ 2711 2839 events: { 2712 2840 'click button': 'updateHandler', … … 2854 2982 * wp.media.view.AttachmentCompat 2855 2983 */ 2856 media.view.AttachmentCompat = Backbone.View.extend({2984 media.view.AttachmentCompat = media.View.extend({ 2857 2985 tagName: 'form', 2858 2986 className: 'compat-item', … … 2902 3030 * wp.media.view.Iframe 2903 3031 */ 2904 media.view.Iframe = Backbone.View.extend({3032 media.view.Iframe = media.View.extend({ 2905 3033 className: 'media-iframe', 2906 3034 … … 2918 3046 * wp.media.view.Embed 2919 3047 */ 2920 media.view.Embed = Backbone.View.extend({3048 media.view.Embed = media.View.extend({ 2921 3049 className: 'media-embed', 2922 3050 … … 2929 3057 }).render(); 2930 3058 2931 this._settings = new Backbone.View();3059 this._settings = new media.View(); 2932 3060 this.refresh(); 2933 3061 this.model.on( 'change:type', this.refresh, this ); … … 2971 3099 * wp.media.view.EmbedUrl 2972 3100 */ 2973 media.view.EmbedUrl = Backbone.View.extend({3101 media.view.EmbedUrl = media.View.extend({ 2974 3102 tagName: 'label', 2975 3103 className: 'embed-url', -
trunk/wp-includes/media.php
r22608 r22648 1392 1392 function wp_print_media_templates( $attachment ) { 1393 1393 ?> 1394 <script type="text/html" id="tmpl-media-frame"> 1395 <div class="media-frame-menu"></div> 1396 <div class="media-frame-content"></div> 1397 <div class="media-frame-sidebar"></div> 1398 <div class="media-frame-toolbar"></div> 1399 </script> 1400 1394 1401 <script type="text/html" id="tmpl-media-modal"> 1395 1402 <div class="media-modal">
Note: See TracChangeset
for help on using the changeset viewer.