WordPress.org

Make WordPress Core

Ticket #40771: 40771.2.diff

File 40771.2.diff, 5.2 KB (added by westonruter, 2 years ago)

Use jQuery.trim() and protocol-less oEmbed endpoint URL

  • src/wp-admin/js/widgets/media-video-widget.js

    diff --git src/wp-admin/js/widgets/media-video-widget.js src/wp-admin/js/widgets/media-video-widget.js
    index 547c4efc48..d74145eee1 100644
     
    9898                 */
    9999                fetchEmbed: function fetchEmbed() {
    100100                        var control = this, url;
    101                         url = control.model.get( 'url' );
     101                        url = jQuery.trim( control.model.get( 'url' ) );
    102102
    103103                        // If we already have a local cache of the embed response, return.
    104104                        if ( control.oembedResponses[ url ] ) {
     
    113113                        control.fetchEmbedDfd = jQuery.ajax({
    114114                                url: wp.media.view.settings.oEmbedProxyUrl,
    115115                                data: {
    116                                         url: control.model.get( 'url' ),
     116                                        url: url,
    117117                                        maxwidth: control.model.get( 'width' ),
    118118                                        maxheight: control.model.get( 'height' ),
    119119                                        _wpnonce: wp.media.view.settings.nonce.wpRestApi,
     
    142142                renderPreview: function renderPreview() {
    143143                        var control = this, previewContainer, previewTemplate, attachmentId, attachmentUrl, poster, isHostedEmbed = false, parsedUrl, mime, error;
    144144                        attachmentId = control.model.get( 'attachment_id' );
    145                         attachmentUrl = control.model.get( 'url' );
     145                        attachmentUrl = jQuery.trim( control.model.get( 'url' ) );
    146146                        error = control.model.get( 'error' );
    147147
    148148                        if ( ! attachmentId && ! attachmentUrl ) {
  • src/wp-admin/js/widgets/media-widgets.js

    diff --git src/wp-admin/js/widgets/media-widgets.js src/wp-admin/js/widgets/media-widgets.js
    index cd03b09633..7dd10f154a 100644
    wp.mediaWidgets = ( function( $ ) { 
    142142                                        /**
    143143                                         * Fetch media.
    144144                                         *
    145                                          * This is a TEMPORARY measure until the WP API supports an oEmbed proxy endpoint. See #40450.
    146                                          *
    147                                          * @see https://core.trac.wordpress.org/ticket/40450
    148145                                         * @returns {void}
    149146                                         */
    150147                                        fetch: function() {
    151                                                 var embedLinkView = this, fetchSuccess, matches, fileExt, urlParser; // eslint-disable-line consistent-this
     148                                                var embedLinkView = this, fetchSuccess, matches, fileExt, urlParser, url; // eslint-disable-line consistent-this
     149                                                url = $.trim( embedLinkView.model.get( 'url' ) );
    152150
    153151                                                if ( embedLinkView.dfd && 'pending' === embedLinkView.dfd.state() ) {
    154152                                                        embedLinkView.dfd.abort();
    wp.mediaWidgets = ( function( $ ) { 
    167165                                                };
    168166
    169167                                                urlParser = document.createElement( 'a' );
    170                                                 urlParser.href = embedLinkView.model.get( 'url' );
     168                                                urlParser.href = url;
    171169                                                matches = urlParser.pathname.toLowerCase().match( /\.(\w+)$/ );
    172170                                                if ( matches ) {
    173171                                                        fileExt = matches[1];
    wp.mediaWidgets = ( function( $ ) { 
    184182                                                embedLinkView.dfd = $.ajax({
    185183                                                        url: wp.media.view.settings.oEmbedProxyUrl,
    186184                                                        data: {
    187                                                                 url: embedLinkView.model.get( 'url' ),
     185                                                                url: url,
    188186                                                                maxwidth: embedLinkView.model.get( 'width' ),
    189187                                                                maxheight: embedLinkView.model.get( 'height' ),
    190188                                                                _wpnonce: wp.media.view.settings.nonce.wpRestApi,
    wp.mediaWidgets = ( function( $ ) { 
    779777                                mediaFramePropToModelPropMap[ fieldSchema.media_prop || modelProp ] = modelProp;
    780778                        });
    781779
     780                        // Trim whitespace from url since it causes problems with oembeds.
     781                        if ( mediaFrameProps.url ) {
     782                                mediaFrameProps.url = $.trim( mediaFrameProps.url );
     783                        }
     784
    782785                        _.each( mediaFrameProps, function( value, mediaProp ) {
    783786                                var propName = mediaFramePropToModelPropMap[ mediaProp ] || mediaProp;
    784787                                if ( control.model.schema[ propName ] ) {
  • src/wp-includes/media.php

    diff --git src/wp-includes/media.php src/wp-includes/media.php
    index 6843c61b21..be6c328167 100644
    function wp_enqueue_media( $args = array() ) { 
    34243424                        'audio' => ( $show_audio_playlist ) ? 1 : 0,
    34253425                        'video' => ( $show_video_playlist ) ? 1 : 0,
    34263426                ),
    3427                 'oEmbedProxyUrl' => rest_url( 'oembed/1.0/proxy' ),
     3427                'oEmbedProxyUrl' => preg_replace( '#^\w+:#', '', rest_url( 'oembed/1.0/proxy' ) ),
    34283428                'embedExts'    => $exts,
    34293429                'embedMimes'   => $ext_mimes,
    34303430                'contentWidth' => $content_width,
  • tests/qunit/wp-admin/js/widgets/test-media-video-widget.js

    diff --git tests/qunit/wp-admin/js/widgets/test-media-video-widget.js tests/qunit/wp-admin/js/widgets/test-media-video-widget.js
    index f3b111ecc5..69d9ff6197 100644
     
    2828                equal( mappedProps.preload, 'meta', 'mapModelToMediaFrameProps should set preload' );
    2929
    3030                // Test mapMediaToModelProps().
    31                 mappedProps = videoWidgetControlInstance.mapMediaToModelProps( { loop: false, preload: 'meta', url: testVideoUrl, title: 'random movie file title' } );
     31                mappedProps = videoWidgetControlInstance.mapMediaToModelProps( { loop: false, preload: 'meta', url: testVideoUrl + ' ', title: 'random movie file title' } );
    3232                equal( mappedProps.title, undefined, 'mapMediaToModelProps should ignore title inputs' );
    3333                equal( mappedProps.loop, false, 'mapMediaToModelProps should set loop' );
    3434                equal( mappedProps.preload, 'meta', 'mapMediaToModelProps should set preload' );
     35                equal( mappedProps.url, testVideoUrl, 'mapMediaToModelProps should trim whitespace from urls' );
    3536        });
    3637
    3738        test( 'video widget control renderPreview', function( assert ) {