Make WordPress Core

Ticket #31139: 31139.diff

File 31139.diff, 6.6 KB (added by wonderboymusic, 7 years ago)
  • src/wp-admin/includes/ajax-actions.php

     
    27052705        }
    27062706
    27072707        $shortcode = wp_unslash( $_POST['shortcode'] );
    2708         $url = str_replace( '[embed]', '', str_replace( '[/embed]', '', $shortcode ) );
     2708
     2709        preg_match( '/' . get_shortcode_regex() . '/s', $shortcode, $matches );
     2710        $atts = shortcode_parse_atts( $matches[3] );
     2711        if ( ! empty( $atts[5] ) ) {
     2712                $url = $atts[5];
     2713        } elseif ( ! empty( $atts['src'] ) ) {
     2714                $url = $atts['src'];
     2715        }
     2716
    27092717        $parsed = false;
    27102718        setup_postdata( $post );
    27112719
    27122720        $wp_embed->return_false_on_fail = true;
    27132721
    2714         if ( is_ssl() && preg_match( '%^\\[embed[^\\]]*\\]http://%i', $shortcode ) ) {
     2722        if ( is_ssl() && 0 === strpos( $url, 'http://' ) ) {
    27152723                // Admin is ssl and the user pasted non-ssl URL.
    27162724                // Check if the provider supports ssl embeds and use that for the preview.
    27172725                $ssl_shortcode = preg_replace( '%^(\\[embed[^\\]]*\\])http://%i', '$1https://', $shortcode );
     
    27642772        }
    27652773
    27662774        wp_send_json_success( array(
    2767                 'body' => $parsed
     2775                'body' => $parsed,
     2776                'attr' => $wp_embed->last_attr
    27682777        ) );
    27692778}
    27702779
  • src/wp-includes/class-wp-embed.php

     
    1111        public $post_ID;
    1212        public $usecache = true;
    1313        public $linkifunknown = true;
     14        public $last_attr = array();
     15        public $last_url = '';
    1416
    1517        /**
    1618         * When an URL cannot be embedded, return false instead of returning a link
     
    134136                        $url = $attr['src'];
    135137                }
    136138
    137                 if ( empty( $url ) )
     139                $this->last_url = $url;
     140
     141                if ( empty( $url ) ) {
     142                        $this->last_attr = $attr;
    138143                        return '';
     144                }
    139145
    140146                $rawattr = $attr;
    141147                $attr = wp_parse_args( $attr, wp_embed_defaults( $url ) );
    142148
     149                $this->last_attr = $attr;
     150
    143151                // kses converts & into & and we need to undo this
    144152                // See https://core.trac.wordpress.org/ticket/11311
    145153                $url = str_replace( '&', '&', $url );
  • src/wp-includes/js/media/views/embed/link.js

     
    2020        initialize: function() {
    2121                this.spinner = $('<span class="spinner" />');
    2222                this.$el.append( this.spinner[0] );
    23                 this.listenTo( this.model, 'change:url', this.updateoEmbed );
     23                this.listenTo( this.model, 'change:url change:width change:height', this.updateoEmbed );
    2424        },
    2525
    2626        updateoEmbed: function() {
     
    4141        },
    4242
    4343        fetch: function() {
     44                var embed;
     45
    4446                // check if they haven't typed in 500 ms
    4547                if ( $('#embed-url-field').val() !== this.model.get('url') ) {
    4648                        return;
    4749                }
    4850
     51                embed = new wp.shortcode({
     52                        tag: 'embed',
     53                        attrs: _.pick( this.model.attributes, [ 'width', 'height', 'src' ] ),
     54                        content: this.model.get('url')
     55                });
     56
    4957                wp.ajax.send( 'parse-embed', {
    5058                        data : {
    5159                                post_ID: wp.media.view.settings.post.id,
    52                                 shortcode: '[embed]' + this.model.get('url') + '[/embed]'
     60                                shortcode: embed.string()
    5361                        }
    5462                } ).done( _.bind( this.renderoEmbed, this ) );
    5563        },
    5664
    5765        renderoEmbed: function( response ) {
    58                 var html = ( response && response.body ) || '';
     66                var html = ( response && response.body ) || '',
     67                        attr = {},
     68                        opts = { silent: true };
    5969
     70                if ( response && response.attr ) {
     71                        attr = response.attr;
     72
     73                        _.each( [ 'width', 'height' ], function ( key ) {
     74                                var $el = this.$( '.setting.' + key ),
     75                                        value = attr[ key ];
     76
     77                                if ( value ) {
     78                                        this.model.set( key, value, opts );
     79                                        $el.show().find( 'input' ).val( value );
     80                                } else {
     81                                        this.model.unset( key, opts );
     82                                        $el.hide().find( 'input' ).val( '' );
     83                                }
     84                        }, this );
     85                } else {
     86                        this.model.unset( 'height', opts );
     87                        this.model.unset( 'width', opts );
     88                }
     89
    6090                this.spinner.hide();
    6191
    6292                this.$('.setting.title').hide();
  • src/wp-includes/js/media/views.js

     
    45814581        initialize: function() {
    45824582                this.spinner = $('<span class="spinner" />');
    45834583                this.$el.append( this.spinner[0] );
    4584                 this.listenTo( this.model, 'change:url', this.updateoEmbed );
     4584                this.listenTo( this.model, 'change:url change:width change:height', this.updateoEmbed );
    45854585        },
    45864586
    45874587        updateoEmbed: function() {
     
    46024602        },
    46034603
    46044604        fetch: function() {
     4605                var embed;
     4606
    46054607                // check if they haven't typed in 500 ms
    46064608                if ( $('#embed-url-field').val() !== this.model.get('url') ) {
    46074609                        return;
    46084610                }
    46094611
     4612                embed = new wp.shortcode({
     4613                        tag: 'embed',
     4614                        attrs: _.pick( this.model.attributes, [ 'width', 'height', 'src' ] ),
     4615                        content: this.model.get('url')
     4616                });
     4617
    46104618                wp.ajax.send( 'parse-embed', {
    46114619                        data : {
    46124620                                post_ID: wp.media.view.settings.post.id,
    4613                                 shortcode: '[embed]' + this.model.get('url') + '[/embed]'
     4621                                shortcode: embed.string()
    46144622                        }
    46154623                } ).done( _.bind( this.renderoEmbed, this ) );
    46164624        },
    46174625
    46184626        renderoEmbed: function( response ) {
    4619                 var html = ( response && response.body ) || '';
     4627                var html = ( response && response.body ) || '',
     4628                        attr = {},
     4629                        opts = { silent: true };
    46204630
     4631                if ( response && response.attr ) {
     4632                        attr = response.attr;
     4633
     4634                        _.each( [ 'width', 'height' ], function ( key ) {
     4635                                var $el = this.$( '.setting.' + key ),
     4636                                        value = attr[ key ];
     4637
     4638                                if ( value ) {
     4639                                        this.model.set( key, value, opts );
     4640                                        $el.show().find( 'input' ).val( value );
     4641                                } else {
     4642                                        this.model.unset( key, opts );
     4643                                        $el.hide().find( 'input' ).val( '' );
     4644                                }
     4645                        }, this );
     4646                } else {
     4647                        this.model.unset( 'height', opts );
     4648                        this.model.unset( 'width', opts );
     4649                }
     4650
    46214651                this.spinner.hide();
    46224652
    46234653                this.$('.setting.title').hide();
  • src/wp-includes/media-template.php

     
    816816                        <span><?php _e( 'Title' ); ?></span>
    817817                        <input type="text" class="alignment" data-setting="title" />
    818818                </label>
     819                <label class="setting width">
     820                        <span><?php _e( 'Width' ); ?></span>
     821                        <input type="text" class="alignment" data-setting="width" />
     822                </label>
     823                <label class="setting height">
     824                        <span><?php _e( 'Height' ); ?></span>
     825                        <input type="text" class="alignment" data-setting="height" />
     826                </label>
    819827                <div class="embed-container" style="display: none;">
    820828                        <div class="embed-preview"></div>
    821829                </div>