Make WordPress Core


Ignore:
Timestamp:
11/21/2012 10:18:59 AM (11 years ago)
Author:
koopersmith
Message:

Media: Dynamically generate attachment filters using get_post_mime_types().

Moves get_post_mime_types() from wp-admin/includes/post.php to wp-includes/post.php.

fixes #22514, see #21390.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/js/media-views.js

    r22741 r22743  
    27672767        },
    27682768
     2769        filters: (function() {
     2770            var filters = {};
     2771
     2772            _.each( media.view.settings.mimeTypes || {}, function( text, key ) {
     2773                filters[ key ] = {
     2774                    text: text,
     2775                    props: {
     2776                        type:   key,
     2777                        parent: null
     2778                    }
     2779                };
     2780            });
     2781
     2782            filters.all = {
     2783                text:  l10n.allMediaItems,
     2784                props: {
     2785                    type:   null,
     2786                    parent: null
     2787                },
     2788                priority: 10
     2789            };
     2790
     2791            filters.uploaded = {
     2792                text:  l10n.uploadedToThisPost,
     2793                props: {
     2794                    type:   null,
     2795                    parent: media.view.settings.postId
     2796                },
     2797                priority: 20
     2798            };
     2799
     2800            return filters;
     2801        }()),
     2802
    27692803        initialize: function() {
    2770             var els;
    2771 
    2772             els = _.map({
    2773                 all:      'allMediaItems',
    2774                 uploaded: 'uploadedToThisPost',
    2775                 image:    'images',
    2776                 audio:    'audio',
    2777                 video:    'videos'
    2778             }, function( text, value ) {
    2779                 return this.make( 'option', { value: value }, l10n[ text ] );
    2780             }, this );
    2781 
    2782             this.$el.html( els );
     2804            // Build `<option>` elements.
     2805            this.$el.html( _.chain( this.filters ).map( function( filter, value ) {
     2806                return {
     2807                    el: this.make( 'option', { value: value }, filter.text ),
     2808                    priority: filter.priority || 50
     2809                };
     2810            }, this ).sortBy('priority').pluck('el').value() );
    27832811
    27842812            this.model.on( 'change', this.select, this );
     
    27872815
    27882816        change: function( event ) {
    2789             var model = this.model,
    2790                 value = this.el.value,
    2791                 type;
    2792 
    2793             if ( 'all' === value || 'uploaded' === value )
    2794                 model.unset('type');
    2795             else if ( 'image' === value || 'audio' === value || 'video' === value )
    2796                 model.set( 'type', value );
    2797 
    2798             if ( 'uploaded' === value )
    2799                 model.set( 'parent', media.view.settings.postId );
    2800             else
    2801                 model.unset('parent');
     2817            var filter = this.filters[ this.el.value ];
     2818
     2819            if ( filter )
     2820                this.model.set( filter.props );
    28022821        },
    28032822
    28042823        select: function() {
    28052824            var model = this.model,
     2825                value = 'all',
    28062826                type = model.get('type'),
    2807                 value = 'all';
    2808 
    2809             if ( model.get('parent') === media.view.settings.postId )
    2810                 value = 'uploaded';
    2811             else if ( 'image' === type )
    2812                 value = 'image';
    2813             else if ( 'audio' === type )
    2814                 value = 'audio';
    2815             else if ( 'video' === type )
    2816                 value = 'video';
     2827                parent = model.get('parent'),
     2828                props = {
     2829                    parent: _.isUndefined( parent ) ? null : parent,
     2830                    type:   _.isUndefined( type ) ? null : type
     2831                };
     2832
     2833            _.find( this.filters, function( filter, key ) {
     2834                if ( _.isEqual( filter.props, props ) )
     2835                    return value = key;
     2836            });
    28172837
    28182838            this.$el.val( value );
Note: See TracChangeset for help on using the changeset viewer.