WordPress.org

Make WordPress Core

Changeset 27479


Ignore:
Timestamp:
03/09/2014 06:04:29 AM (6 years ago)
Author:
wonderboymusic
Message:

Add wp.media.view.MediaFrame.MediaDetails, which wp.media.view.MediaFrame.AudioDetails and media.view.MediaFrame.VideoDetails extend. The subclasses subsequently only need to set createStates() and bindHandlers(), as well as any missing toolbar views.

See #27016.

File:
1 edited

Legend:

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

    r27478 r27479  
    26982698
    26992699    /**
    2700      * wp.media.view.MediaFrame.AudioDetails
     2700     * wp.media.view.MediaFrame.MediaDetails
    27012701     *
    27022702     * @constructor
     
    27092709     * @mixes wp.media.controller.StateMachine
    27102710     */
    2711     media.view.MediaFrame.AudioDetails = media.view.MediaFrame.Select.extend({
     2711    media.view.MediaFrame.MediaDetails = media.view.MediaFrame.Select.extend({
    27122712        defaults: {
    2713             id:      'audio',
     2713            id:      'media',
    27142714            url:     '',
    2715             menu:    'audio-details',
    2716             content: 'audio-details',
    2717             toolbar: 'audio-details',
     2715            menu:    'media-details',
     2716            content: 'media-details',
     2717            toolbar: 'media-details',
    27182718            type:    'link',
    2719             title:    l10n.audioDetailsTitle,
    27202719            priority: 120
    27212720        },
    27222721
    27232722        initialize: function( options ) {
     2723            this.DetailsView = options.DetailsView;
     2724            this.cancelText = options.cancelText;
     2725            this.addText = options.addText;
     2726
    27242727            this.media = new media.model.PostMedia( options.metadata );
    27252728            this.options.selection = new media.model.Selection( this.media.attachment, { multiple: false } );
     
    27282731
    27292732        bindHandlers: function() {
     2733            var menu = this.defaults.menu;
     2734
    27302735            media.view.MediaFrame.Select.prototype.bindHandlers.apply( this, arguments );
    2731             this.on( 'menu:create:audio-details', this.createMenu, this );
    2732             this.on( 'content:render:audio-details', this.renderAudioDetailsContent, this );
    2733             this.on( 'menu:render:audio-details', this.renderMenu, this );
    2734             this.on( 'toolbar:render:audio-details', this.renderAudioDetailsToolbar, this );
    2735             // override the select toolbar
    2736             this.on( 'toolbar:render:replace-audio', this.renderReplaceAudioToolbar, this );
    2737             this.on( 'toolbar:render:add-audio-source', this.renderAddAudioSourceToolbar, this );
    2738         },
    2739 
    2740         createStates: function() {
    2741             this.states.add([
    2742                 new media.controller.AudioDetails( {
    2743                     media: this.media,
    2744                     editable: false,
    2745                     menu: 'audio-details'
    2746                 } ),
    2747 
    2748                 new media.controller.MediaLibrary( {
    2749                     type: 'audio',
    2750                     id: 'replace-audio',
    2751                     title: l10n.audioReplaceTitle,
    2752                     toolbar: 'replace-audio',
    2753                     media: this.media,
    2754                     menu: 'audio-details'
    2755                 } ),
    2756 
    2757 
    2758                 new media.controller.MediaLibrary( {
    2759                     type: 'audio',
    2760                     id: 'add-audio-source',
    2761                     title: l10n.audioAddSourceTitle,
    2762                     toolbar: 'add-audio-source',
    2763                     media: this.media,
    2764                     menu: 'audio-details'
    2765                 } )
    2766             ]);
    2767         },
    2768 
    2769         renderAudioDetailsContent: function() {
    2770             var view = new media.view.AudioDetails({
     2736
     2737            this.on( 'menu:create:' + menu, this.createMenu, this );
     2738            this.on( 'content:render:' + menu, this.renderDetailsContent, this );
     2739            this.on( 'menu:render:' + menu, this.renderMenu, this );
     2740            this.on( 'toolbar:render:' + menu, this.renderDetailsToolbar, this );
     2741        },
     2742
     2743        renderDetailsContent: function() {
     2744            var view = new this.DetailsView({
    27712745                controller: this,
    27722746                model: this.state().media,
     
    27842758            view.set({
    27852759                cancel: {
    2786                     text:     l10n.audioDetailsCancel,
     2760                    text:     this.cancelText,
    27872761                    priority: 20,
    27882762                    click:    function() {
     
    28022776        },
    28032777
    2804         renderAudioDetailsToolbar: function() {
     2778        renderDetailsToolbar: function() {
    28052779            this.toolbar.set( new media.view.Toolbar({
    28062780                controller: this,
     
    28282802        },
    28292803
    2830         renderReplaceAudioToolbar: function() {
     2804        renderReplaceToolbar: function() {
    28312805            this.toolbar.set( new media.view.Toolbar({
    28322806                controller: this,
     
    28452819                            controller.media.changeAttachment( attachment, state.display( attachment ) );
    28462820
    2847                             // not sure if we want to use wp.media.string.image which will create a shortcode or
    2848                             // perhaps wp.html.string to at least to build the <img />
    28492821                            state.trigger( 'replace', controller.media.toJSON() );
    28502822
     
    28582830        },
    28592831
    2860         renderAddAudioSourceToolbar: function() {
     2832        renderAddSourceToolbar: function() {
    28612833            this.toolbar.set( new media.view.Toolbar({
    28622834                controller: this,
     
    28642836                    replace: {
    28652837                        style:    'primary',
    2866                         text:     l10n.audioAddSourceTitle,
     2838                        text:     this.addText,
    28672839                        priority: 80,
    28682840
     
    28882860
    28892861    /**
    2890      * wp.media.view.MediaFrame.VideoDetails
     2862     * wp.media.view.MediaFrame.AudioDetails
    28912863     *
    28922864     * @constructor
     2865     * @augments wp.media.view.MediaFrame.MediaDetails
    28932866     * @augments wp.media.view.MediaFrame.Select
    28942867     * @augments wp.media.view.MediaFrame
     
    28992872     * @mixes wp.media.controller.StateMachine
    29002873     */
    2901     media.view.MediaFrame.VideoDetails = media.view.MediaFrame.Select.extend({
     2874    media.view.MediaFrame.AudioDetails = media.view.MediaFrame.MediaDetails.extend({
     2875        defaults: {
     2876            id:      'audio',
     2877            url:     '',
     2878            menu:    'audio-details',
     2879            content: 'audio-details',
     2880            toolbar: 'audio-details',
     2881            type:    'link',
     2882            title:    l10n.audioDetailsTitle,
     2883            priority: 120
     2884        },
     2885
     2886        initialize: function( options ) {
     2887            options.DetailsView = media.view.AudioDetails;
     2888            options.cancelText = l10n.audioDetailsCancel;
     2889            options.addText = l10n.audioAddSourceTitle;
     2890
     2891            media.view.MediaFrame.MediaDetails.prototype.initialize.call( this, options );
     2892        },
     2893
     2894        bindHandlers: function() {
     2895            media.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply( this, arguments );
     2896
     2897            this.on( 'toolbar:render:replace-audio', this.renderReplaceToolbar, this );
     2898            this.on( 'toolbar:render:add-audio-source', this.renderAddSourceToolbar, this );
     2899        },
     2900
     2901        createStates: function() {
     2902            this.states.add([
     2903                new media.controller.AudioDetails( {
     2904                    media: this.media,
     2905                    editable: false,
     2906                    menu: 'audio-details'
     2907                } ),
     2908
     2909                new media.controller.MediaLibrary( {
     2910                    type: 'audio',
     2911                    id: 'replace-audio',
     2912                    title: l10n.audioReplaceTitle,
     2913                    toolbar: 'replace-audio',
     2914                    media: this.media,
     2915                    menu: 'audio-details'
     2916                } ),
     2917
     2918
     2919                new media.controller.MediaLibrary( {
     2920                    type: 'audio',
     2921                    id: 'add-audio-source',
     2922                    title: l10n.audioAddSourceTitle,
     2923                    toolbar: 'add-audio-source',
     2924                    media: this.media,
     2925                    menu: 'audio-details'
     2926                } )
     2927            ]);
     2928        }
     2929    });
     2930
     2931    /**
     2932     * wp.media.view.MediaFrame.VideoDetails
     2933     *
     2934     * @constructor
     2935     * @augments wp.media.view.MediaFrame.MediaDetails
     2936     * @augments wp.media.view.MediaFrame.Select
     2937     * @augments wp.media.view.MediaFrame
     2938     * @augments wp.media.view.Frame
     2939     * @augments wp.media.View
     2940     * @augments wp.Backbone.View
     2941     * @augments Backbone.View
     2942     * @mixes wp.media.controller.StateMachine
     2943     */
     2944    media.view.MediaFrame.VideoDetails = media.view.MediaFrame.MediaDetails.extend({
    29022945        defaults: {
    29032946            id:      'video',
     
    29122955
    29132956        initialize: function( options ) {
    2914             this.media = new media.model.PostMedia( options.metadata );
    2915             this.options.selection = new media.model.Selection( this.media.attachment, { multiple: false } );
    2916             media.view.MediaFrame.Select.prototype.initialize.apply( this, arguments );
     2957            options.DetailsView = media.view.VideoDetails;
     2958            options.cancelText = l10n.videoDetailsCancel;
     2959            options.addText = l10n.videoAddSourceTitle;
     2960
     2961            media.view.MediaFrame.MediaDetails.prototype.initialize.call( this, options );
    29172962        },
    29182963
    29192964        bindHandlers: function() {
    2920             media.view.MediaFrame.Select.prototype.bindHandlers.apply( this, arguments );
    2921             this.on( 'menu:create:video-details', this.createMenu, this );
    2922             this.on( 'content:render:video-details', this.renderVideoDetailsContent, this );
    2923             this.on( 'menu:render:video-details', this.renderMenu, this );
    2924             this.on( 'toolbar:render:video-details', this.renderVideoDetailsToolbar, this );
    2925             // override the select toolbar
    2926             this.on( 'toolbar:render:replace-video', this.renderReplaceVideoToolbar, this );
    2927             this.on( 'toolbar:render:add-video-source', this.renderAddVideoSourceToolbar, this );
     2965            media.view.MediaFrame.MediaDetails.prototype.bindHandlers.apply( this, arguments );
     2966
     2967            this.on( 'toolbar:render:replace-video', this.renderReplaceToolbar, this );
     2968            this.on( 'toolbar:render:add-video-source', this.renderAddSourceToolbar, this );
    29282969            this.on( 'toolbar:render:select-poster-image', this.renderSelectPosterImageToolbar, this );
    29292970        },
     
    29643005                } )
    29653006            ]);
    2966         },
    2967 
    2968         renderVideoDetailsContent: function() {
    2969             var view = new media.view.VideoDetails({
    2970                 controller: this,
    2971                 model: this.state().media,
    2972                 attachment: this.state().media.attachment
    2973             }).render();
    2974 
    2975             this.content.set( view );
    2976         },
    2977 
    2978         renderMenu: function( view ) {
    2979             var lastState = this.lastState(),
    2980                 previous = lastState && lastState.id,
    2981                 frame = this;
    2982 
    2983             view.set({
    2984                 cancel: {
    2985                     text:     l10n.videoDetailsCancel,
    2986                     priority: 20,
    2987                     click:    function() {
    2988                         if ( previous ) {
    2989                             frame.setState( previous );
    2990                         } else {
    2991                             frame.close();
    2992                         }
    2993                     }
    2994                 },
    2995                 separateCancel: new media.View({
    2996                     className: 'separator',
    2997                     priority: 40
    2998                 })
    2999             });
    3000 
    3001         },
    3002 
    3003         renderVideoDetailsToolbar: function() {
    3004             this.toolbar.set( new media.view.Toolbar({
    3005                 controller: this,
    3006                 items: {
    3007                     select: {
    3008                         style:    'primary',
    3009                         text:     l10n.update,
    3010                         priority: 80,
    3011 
    3012                         click: function() {
    3013                             var controller = this.controller,
    3014                                 state = controller.state();
    3015 
    3016                             controller.close();
    3017 
    3018                             // not sure if we want to use wp.media.string.image which will create a shortcode or
    3019                             // perhaps wp.html.string to at least to build the <img />
    3020                             state.trigger( 'update', controller.media.toJSON() );
    3021 
    3022                             // Restore and reset the default state.
    3023                             controller.setState( controller.options.state );
    3024                             controller.reset();
    3025                         }
    3026                     }
    3027                 }
    3028             }) );
    3029         },
    3030 
    3031         renderReplaceVideoToolbar: function() {
    3032             this.toolbar.set( new media.view.Toolbar({
    3033                 controller: this,
    3034                 items: {
    3035                     replace: {
    3036                         style:    'primary',
    3037                         text:     l10n.replace,
    3038                         priority: 80,
    3039 
    3040                         click: function() {
    3041                             var controller = this.controller,
    3042                                 state = controller.state(),
    3043                                 selection = state.get( 'selection' ),
    3044                                 attachment = selection.single();
    3045 
    3046                             controller.media.changeAttachment( attachment, state.display( attachment ) );
    3047 
    3048                             state.trigger( 'replace', controller.media.toJSON() );
    3049 
    3050                             // Restore and reset the default state.
    3051                             controller.setState( controller.options.state );
    3052                             controller.reset();
    3053                         }
    3054                     }
    3055                 }
    3056             }) );
    3057         },
    3058 
    3059         renderAddVideoSourceToolbar: function() {
    3060             this.toolbar.set( new media.view.Toolbar({
    3061                 controller: this,
    3062                 items: {
    3063                     replace: {
    3064                         style:    'primary',
    3065                         text:     l10n.videoAddSourceTitle,
    3066                         priority: 80,
    3067 
    3068                         click: function() {
    3069                             var controller = this.controller,
    3070                                 state = controller.state(),
    3071                                 selection = state.get( 'selection' ),
    3072                                 attachment = selection.single();
    3073 
    3074                             controller.media.setSource( attachment, state.display( attachment ) );
    3075 
    3076                             state.trigger( 'add-source', controller.media.toJSON() );
    3077 
    3078                             // Restore and reset the default state.
    3079                             controller.setState( controller.options.state );
    3080                             controller.reset();
    3081                         }
    3082                     }
    3083                 }
    3084             }) );
    30853007        },
    30863008
Note: See TracChangeset for help on using the changeset viewer.