WordPress.org

Make WordPress Core

Ticket #21811: 21811-modal-01.patch

File 21811-modal-01.patch, 7.4 KB (added by gcorne, 6 years ago)
  • src/wp-includes/js/media-views.js

    diff --git src/wp-includes/js/media-views.js src/wp-includes/js/media-views.js
    index 745bf86..ddc5d09 100644
     
    10861086        });
    10871087
    10881088        /**
     1089         * wp.media.controller.EditImage
     1090         *
     1091         * @constructor
     1092         * @augments wp.media.controller.State
     1093         * @augments Backbone.Model
     1094         */
     1095        media.controller.EditImage = media.controller.State.extend({
     1096                defaults: {
     1097                        id: 'edit-image',
     1098                        url: '',
     1099                        menu: false,
     1100                        content: 'edit-image',
     1101                        syncSelection: true
     1102                },
     1103
     1104                activate: function() {
     1105
     1106                        this.syncSelection();
     1107                },
     1108
     1109                syncSelection: function() {
     1110                        var selection = this.get('selection'),
     1111                                manager = this.frame._selection;
     1112
     1113                        if ( ! this.get('syncSelection') || ! manager || ! selection ) {
     1114                                return;
     1115                        }
     1116
     1117                        // If the selection supports multiple items, validate the stored
     1118                        // attachments based on the new selection's conditions. Record
     1119                        // the attachments that are not included; we'll maintain a
     1120                        // reference to those. Other attachments are considered in flux.
     1121                        if ( selection.multiple ) {
     1122                                selection.reset( [], { silent: true });
     1123                                selection.validateAll( manager.attachments );
     1124                                manager.difference = _.difference( manager.attachments.models, selection.models );
     1125                        }
     1126
     1127                        // Sync the selection's single item with the master.
     1128                        selection.single( manager.single );
     1129                }
     1130        });
     1131
     1132        /**
    10891133         * wp.media.controller.Embed
    10901134         *
    10911135         * @constructor
     
    17581802                                        menu:    'gallery'
    17591803                                }),
    17601804
    1761                                 new media.controller.GalleryAdd()
     1805                                new media.controller.GalleryAdd(),
     1806
     1807                                new media.controller.EditImage( { selection: options.selection } )
    17621808                        ]);
    17631809
    17641810
     
    17861832
    17871833                                content: {
    17881834                                        'embed':          'embedContent',
     1835                                        'edit-image':     'editImageContent',
    17891836                                        'edit-selection': 'editSelectionContent'
    17901837                                },
    17911838
     
    18831930                        this.content.set( view );
    18841931                },
    18851932
     1933                editImageContent: function() {
     1934                        var selection = this.state().get('selection'),
     1935                                view = new media.view.EditImage( { model: selection.single() } ).render();
     1936
     1937                        this.content.set( view );
     1938
     1939                        // after bringing in the frame, load the actual editor via an ajax call
     1940                        view.loadEditor();
     1941
     1942                },
     1943
    18861944                // Toolbars
    18871945
    18881946                /**
     
    20542112                        media.view.MediaFrame.Select.prototype.bindHandlers.apply( this, arguments );
    20552113                        this.on( 'menu:create:image-details', this.createMenu, this );
    20562114                        this.on( 'content:render:image-details', this.renderImageDetailsContent, this );
     2115                        this.on( 'content:render:edit-image', this.editImageContent, this );
    20572116                        this.on( 'menu:render:image-details', this.renderMenu, this );
    20582117                        this.on( 'toolbar:render:image-details', this.renderImageDetailsToolbar, this );
    20592118                        // override the select toolbar
     
    20772136                                        toolbar: 'replace',
    20782137                                        priority:  80,
    20792138                                        displaySettings: true
    2080                                 })
     2139                                }),
     2140                                new media.controller.EditImage( { image: this.image } )
    20812141                        ]);
    20822142                },
    20832143
     
    21172177
    21182178                },
    21192179
     2180                editImageContent: function() {
     2181                        var attachment = this.state().get('image').attachment,
     2182                                view;
     2183
     2184                        if ( ! attachment ) {
     2185                                return;
     2186                        }
     2187
     2188                        view = new media.view.EditImage( { model: attachment } ).render();
     2189
     2190                        this.content.set( view );
     2191
     2192                        // after bringing in the frame, load the actual editor via an ajax call
     2193                        view.loadEditor();
     2194
     2195                },
     2196
    21202197                renderImageDetailsToolbar: function() {
    21212198                        this.toolbar.set( new media.view.Toolbar({
    21222199                                controller: this,
     
    49064983                },
    49074984
    49084985                editAttachment: function() {
    4909                         this.$el.addClass('needs-refresh');
     4986                        event.preventDefault();
     4987                        this.controller.setState( 'edit-image' );
    49104988                },
    49114989                /**
    49124990                 * @param {Object} event
     
    49164994                        event.preventDefault();
    49174995                        this.model.fetch();
    49184996                }
     4997
    49194998        });
    49204999
    49215000        /**
     
    51895268        media.view.ImageDetails = media.view.Settings.AttachmentDisplay.extend({
    51905269                className: 'image-details',
    51915270                template:  media.template('image-details'),
    5192 
     5271                events: {
     5272                        'click .edit-attachment': 'editAttachment'
     5273                },
    51935274                initialize: function() {
    51945275                        // used in AttachmentDisplay.prototype.updateLinkTo
    51955276                        this.options.attachment = this.model.attachment;
     
    52295310                resetFocus: function() {
    52305311                        this.$( '.caption textarea' ).focus();
    52315312                        this.$( '.embed-image-settings' ).scrollTop( 0 );
     5313                },
     5314
     5315                editAttachment: function() {
     5316                        event.preventDefault();
     5317                        this.controller.setState( 'edit-image' );
    52325318                }
    52335319        });
     5320
     5321
     5322        media.view.EditImage = media.View.extend({
     5323
     5324                className: 'image-editor',
     5325                template: media.template('image-editor'),
     5326
     5327                initialize: function() {
     5328
     5329                        this.editor = window.imageEdit;
     5330                        media.View.prototype.initialize.apply( this, arguments );
     5331                },
     5332
     5333                prepare: function() {
     5334                        return this.model.toJSON();
     5335                },
     5336
     5337                render: function() {
     5338                        media.View.prototype.render.apply( this, arguments );
     5339                        return this;
     5340                },
     5341
     5342                loadEditor: function() {
     5343                        this.editor.open( this.model.get('id'), this.model.get('nonces').edit );
     5344                }
     5345
     5346        });
     5347
    52345348}(jQuery));
  • src/wp-includes/media-template.php

    diff --git src/wp-includes/media-template.php src/wp-includes/media-template.php
    index 93bf672..06f2c9a 100644
    function wp_print_media_templates() { 
    508508                                <div class="thumbnail">
    509509                                        <img src="{{ data.model.url }}" draggable="false" />
    510510                                </div>
     511                                <# if ( data.attachment ) { #>
     512                                        <input type="button" class="edit-attachment button" value="<?php esc_attr_e( 'Edit Image' ); ?>" />
     513                                <# } #>
    511514
    512515                                <div class="setting url">
    513516                                        <?php // might want to make the url editable if it isn't an attachment ?>
    function wp_print_media_templates() { 
    598601                        </div>
    599602                </div>
    600603        </script>
     604
     605        <script type="text/html" id="tmpl-image-editor">
     606                <div id="media-head-{{{ data.id }}}"></div>
     607                <div id="image-editor-{{{ data.id }}}"></div>
     608        </script>
    601609        <?php
    602610
    603611        /**
  • src/wp-includes/media.php

    diff --git src/wp-includes/media.php src/wp-includes/media.php
    index 12cc86b..21a58c1 100644
    function wp_prepare_attachment_for_js( $attachment ) { 
    18271827                'nonces'      => array(
    18281828                        'update' => false,
    18291829                        'delete' => false,
     1830                        'edit'   => false
    18301831                ),
    18311832                'editLink'   => false,
    18321833        );
    18331834
    18341835        if ( current_user_can( 'edit_post', $attachment->ID ) ) {
    18351836                $response['nonces']['update'] = wp_create_nonce( 'update-post_' . $attachment->ID );
     1837                $response['nonces']['edit'] = wp_create_nonce( 'image_editor-' . $attachment->ID );
    18361838                $response['editLink'] = get_edit_post_link( $attachment->ID, 'raw' );
    18371839        }
    18381840
  • src/wp-includes/script-loader.php

    diff --git src/wp-includes/script-loader.php src/wp-includes/script-loader.php
    index 426eb97..4ad68fa 100644
    function wp_default_scripts( &$scripts ) { 
    385385        // To enqueue media-views or media-editor, call wp_enqueue_media().
    386386        // Both rely on numerous settings, styles, and templates to operate correctly.
    387387        $scripts->add( 'media-views',  "/wp-includes/js/media-views$suffix.js",  array( 'utils', 'media-models', 'wp-plupload', 'jquery-ui-sortable' ), false, 1 );
    388         $scripts->add( 'media-editor', "/wp-includes/js/media-editor$suffix.js", array( 'shortcode', 'media-views' ), false, 1 );
     388        $scripts->add( 'media-editor', "/wp-includes/js/media-editor$suffix.js", array( 'shortcode', 'media-views', 'image-edit' ), false, 1 );
    389389        $scripts->add( 'mce-view', "/wp-includes/js/mce-view$suffix.js", array( 'shortcode', 'media-models' ), false, 1 );
    390390
    391391        if ( is_admin() ) {