WordPress.org

Make WordPress Core

Ticket #27891: 27891.diff

File 27891.diff, 15.5 KB (added by wonderboymusic, 6 years ago)
  • src/wp-includes/js/mce-view.js

     
    428428                        this.players = [];
    429429                        this.shortcode = options.shortcode;
    430430                        _.bindAll( this, 'setPlayer' );
     431                        this.fetch();
    431432                        $(this).on( 'ready', this.setPlayer );
    432433                },
    433434
     435                fetch: function () {
     436                        var ids = [], allowed = this.allowedExts( this.shortcode.tag );
     437
     438                        _.each( this.shortcode.attrs.named, function (value, name) {
     439                                if ( -1 !== $.inArray( name, allowed ) && value.match(/^[0-9]+$/) ) {
     440                                        ids.push( parseInt( value, 10 ) );
     441                                }
     442                        } );
     443
     444                        if ( ids.length ) {
     445                                if ( 'video' === this.shortcode.tag
     446                                        && this.shortcode.attrs.named.poster.match(/^[0-9]+$/) ) {
     447                                        ids.push( this.shortcode.attrs.named.poster );
     448                                }
     449                                this.attachments = wp.media.query( { post__in: ids } );
     450                                this.dfd = this.attachments.more().done( _.bind( this.render, this ) );
     451                        } else {
     452                                this.dfd = false;
     453                        }
     454                },
     455
    434456                /**
    435457                 * Creates the player instance for the current node
    436458                 *
     
    446468                                return;
    447469                        }
    448470
     471                        if ( this.dfd && 'pending' === this.dfd.state() && ! this.attachments.length ) {
     472                                return;
     473                        }
     474
    449475                        var self = this,
    450476                                media,
    451477                                firefox = this.ua.is( 'ff' ),
     
    487513                 * @returns {string}
    488514                 */
    489515                getHtml: function() {
    490                         var attrs = _.defaults(
     516                        if ( this.dfd && 'pending' === this.dfd.state() && ! this.attachments.length ) {
     517                                return;
     518                        }
     519
     520                        var options, attrs = _.defaults(
    491521                                this.shortcode.attrs.named,
    492522                                wp.media[ this.shortcode.tag ].defaults
    493523                        );
    494                         return this.template({ model: attrs });
     524
     525                        options = {
     526                                model: attrs,
     527                                attachments: this.attachments.toJSON()
     528                        };
     529
     530                        return this.template( options );
    495531                },
    496532
    497533                unbind: function() {
  • src/wp-includes/js/media-audiovideo.js

     
    2626                        }
    2727                },
    2828
     29                allowedExts: function( type ) {
     30                        return _.filter( _.keys( wp.media.view.settings.embedMimes ), function (key) {
     31                                return 0 === wp.media.view.settings.embedMimes[ key ].indexOf( type );
     32                        } );
     33                },
     34
    2935                /**
    3036                 * Utility to identify the user's browser
    3137                 */
     
    309315         * @augments Backbone.Model
    310316         */
    311317        media.model.PostMedia = Backbone.Model.extend({
    312                 initialize: function() {
    313                         this.attachment = false;
     318                initialize: function( attributes ) {
     319                        this.attachments = false;
     320                        this.params = attributes;
     321                        this.type = this.params.context;
     322
     323                        this.getIds( attributes );
     324                        this.on( 'change', this.reQuery, this );
    314325                },
    315326
     327                reQuery: function () {
     328                        this.params = this.attributes;
     329                        this.getIds( this.params );
     330                },
     331
     332                getIds: function (attributes) {
     333                        var ids = [], allowed = media.mixin.allowedExts( this.type );
     334
     335                        _.each( attributes, function (value, name) {
     336                                if ( -1 !== $.inArray( name, allowed ) && value.match(/^[0-9]+$/) ) {
     337                                        ids.push( parseInt( value, 10 ) );
     338                                }
     339                        } );
     340
     341                        if ( ids.length ) {
     342                                if ( 'video' === this.type
     343                                        && attributes.poster.toString().match(/^[0-9]+$/) ) {
     344                                        ids.push( attributes.poster );
     345                                }
     346                                this.attachments = wp.media.query( { post__in: ids } );
     347                                this.dfd = this.attachments.more();
     348                        }
     349                },
     350
    316351                setSource: function( attachment ) {
    317352                        this.attachment = attachment;
    318353                        this.extension = attachment.get( 'filename' ).split('.').pop();
     
    322357                        }
    323358
    324359                        if ( _.contains( wp.media.view.settings.embedExts, this.extension ) ) {
    325                                 this.set( this.extension, this.attachment.get( 'url' ) );
     360                                this.set( this.extension, this.attachment.get( 'id' ) );
    326361                        } else {
    327362                                this.unset( this.extension );
    328363                        }
     
    416451                        this.cancelText = options.cancelText;
    417452                        this.addText = options.addText;
    418453
     454                        options.metadata.context = this.defaults.id;
     455
    419456                        this.media = new media.model.PostMedia( options.metadata );
    420457                        this.options.selection = new media.model.Selection( this.media.attachment, { multiple: false } );
    421458                        media.view.MediaFrame.Select.prototype.initialize.apply( this, arguments );
     
    436473                        var view = new this.DetailsView({
    437474                                controller: this,
    438475                                model: this.state().media,
    439                                 attachment: this.state().media.attachment
     476                                attachments: this.state().media.attachments.toJSON()
    440477                        }).render();
    441478
    442479                        this.content.set( view );
     
    668705                        this.setPrimaryButton( l10n.videoSelectPosterImageTitle, function( controller, state ) {
    669706                                var attachment = state.get( 'selection' ).single();
    670707
    671                                 controller.media.set( 'poster', attachment.get( 'url' ) );
     708                                controller.media.set( 'poster', attachment.get( 'id' ) );
    672709                                state.trigger( 'set-poster-image', controller.media.toJSON() );
    673710                        } );
    674711                },
  • src/wp-includes/js/media-editor.js

     
    190190
    191191                        if ( 'video' === type ) {
    192192                                if ( attachment.image && -1 === attachment.image.src.indexOf( attachment.icon ) ) {
    193                                         shortcode.poster = attachment.image.src;
     193                                        shortcode.poster = attachment.image.id;
    194194                                }
    195195
    196196                                if ( attachment.width ) {
     
    205205                        extension = attachment.filename.split('.').pop();
    206206
    207207                        if ( _.contains( wp.media.view.settings.embedExts, extension ) ) {
    208                                 shortcode[extension] = attachment.url;
     208                                shortcode[extension] = attachment.id;
    209209                        } else {
    210210                                // Render unsupported audio and video files as links.
    211211                                return wp.media.string.link( props );
  • src/wp-includes/media-template.php

     
    1616function wp_underscore_audio_template() {
    1717        $audio_types = wp_get_audio_extensions();
    1818?>
     19<# var resolvedSrc; #>
    1920<audio controls
    2021        class="wp-audio-shortcode"
    2122        width="{{ _.isUndefined( data.model.width ) ? 400 : data.model.width }}"
     
    2728        }
    2829        <?php endforeach ?>#>
    2930>
    30         <# if ( ! _.isEmpty( data.model.src ) ) { #>
    31         <source src="{{ data.model.src }}" type="{{ wp.media.view.settings.embedMimes[ data.model.src.split('.').pop() ] }}" />
     31        <# if ( ! _.isEmpty( data.model.src ) ) {
     32                resolvedSrc = data.model.src.match(/^[0-9]+$/) ? _.findWhere( data.attachments, { id: parseInt( data.model.src, 10 ) } ).url : data.model.src;
     33        #>
     34        <source src="{{ resolvedSrc }}" type="{{ wp.media.view.settings.embedMimes[ data.model.src.split('.').pop() ] }}" />
    3235        <# } #>
    3336
    3437        <?php foreach ( $audio_types as $type ):
    35         ?><# if ( ! _.isEmpty( data.model.<?php echo $type ?> ) ) { #>
    36         <source src="{{ data.model.<?php echo $type ?> }}" type="{{ wp.media.view.settings.embedMimes[ '<?php echo $type ?>' ] }}" />
     38        ?><# if ( ! _.isEmpty( data.model.<?php echo $type ?> ) ) {
     39                resolvedSrc = data.model.<?php echo $type ?>.match(/^[0-9]+$/) ? _.findWhere( data.attachments, { id: parseInt( data.model.<?php echo $type ?>, 10 ) } ).url : data.model.<?php echo $type ?>;
     40        #>
     41        <source src="{{ resolvedSrc }}" type="{{ wp.media.view.settings.embedMimes[ '<?php echo $type ?>' ] }}" />
    3742        <# } #>
    3843        <?php endforeach;
    3944?></audio>
     
    4954function wp_underscore_video_template() {
    5055        $video_types = wp_get_video_extensions();
    5156?>
    52 <#  var w, h, settings = wp.media.view.settings,
     57<#  var w, h, settings = wp.media.view.settings, resolvedSrc,
    5358                isYouTube = ! _.isEmpty( data.model.src ) && data.model.src.match(/youtube|youtu\.be/);
    5459
     60        console.log( data );
     61
    5562        if ( settings.contentWidth && data.model.width >= settings.contentWidth ) {
    5663                w = settings.contentWidth;
    5764        } else {
     
    6976        class="wp-video-shortcode{{ isYouTube ? ' youtube-video' : '' }}"
    7077        width="{{ w }}"
    7178        height="{{ h }}"
    72         <?php
    73         $props = array( 'poster' => '', 'preload' => 'metadata' );
    74         foreach ( $props as $key => $value ):
    75                 if ( empty( $value ) ) {
    76                 ?><#
    77                 if ( ! _.isUndefined( data.model.<?php echo $key ?> ) && data.model.<?php echo $key ?> ) {
    78                         #> <?php echo $key ?>="{{ data.model.<?php echo $key ?> }}"<#
    79                 } #>
    80                 <?php } else {
    81                         echo $key ?>="{{ _.isUndefined( data.model.<?php echo $key ?> ) ? '<?php echo $value ?>' : data.model.<?php echo $key ?> }}"<?php
    82                 }
    83         endforeach;
    84         ?><#
     79        <# if ( ! _.isUndefined( data.model.poster ) && data.model.poster ) {
     80                resolvedSrc = data.model.poster.match(/^[0-9]+$/) ? _.findWhere( data.attachments, { id: parseInt( data.model.poster, 10 ) } ).url : data.model.poster;
     81                #> poster="{{ resolvedSrc }}"<#
     82        } #>
     83        metadata="{{ _.isUndefined( data.model.preload ) ? 'metadata' : data.model.preload }}"
     84        <#
    8585        <?php foreach ( array( 'autoplay', 'loop' ) as $attr ):
    8686        ?> if ( ! _.isUndefined( data.model.<?php echo $attr ?> ) && data.model.<?php echo $attr ?> ) {
    8787                #> <?php echo $attr ?><#
     
    9191        <# if ( ! _.isEmpty( data.model.src ) ) {
    9292                if ( isYouTube ) { #>
    9393                <source src="{{ data.model.src }}" type="video/youtube" />
    94                 <# } else { #>
    95                 <source src="{{ data.model.src }}" type="{{ settings.embedMimes[ data.model.src.split('.').pop() ] }}" />
     94                <# } else {
     95                        resolvedSrc = data.model.src.match(/^[0-9]+$/) ? _.findWhere( data.attachments, { id: parseInt( data.model.src, 10 ) } ).url : data.model.src;
     96                #>
     97                <source src="{{ resolvedSrc }}" type="{{ settings.embedMimes[ data.model.src.split('.').pop() ] }}" />
    9698                <# }
    9799        } #>
    98100
    99101        <?php foreach ( $video_types as $type ):
    100         ?><# if ( data.model.<?php echo $type ?> ) { #>
    101         <source src="{{ data.model.<?php echo $type ?> }}" type="{{ settings.embedMimes[ '<?php echo $type ?>' ] }}" />
     102        ?><# if ( data.model.<?php echo $type ?> ) {
     103                resolvedSrc = data.model.<?php echo $type ?>.match(/^[0-9]+$/) ? _.findWhere( data.attachments, { id: parseInt( data.model.<?php echo $type ?>, 10 ) } ).url : data.model.<?php echo $type ?>;
     104        #>
     105        <source src="{{ resolvedSrc }}" type="{{ settings.embedMimes[ '<?php echo $type ?>' ] }}" />
    102106        <# } #>
    103107        <?php endforeach; ?>
    104108        {{{ data.model.content }}}
     
    812816                                #>
    813817                                <label class="setting">
    814818                                        <span>SRC</span>
     819                                        <# if ( data.model.src.match(/^[0-9]+$/) ) {
     820                                                resolvedSrc = _.findWhere( data.attachments, {id: parseInt( data.model.src, 10 )} ).url;
     821                                        #>
     822                                        <input type="text" disabled="disabled" value="{{ resolvedSrc }}" />
     823                                        <input type="hidden" data-setting="src" value="{{ data.model.src }}" />
     824                                        <# } else { #>
    815825                                        <input type="text" disabled="disabled" data-setting="src" value="{{ data.model.src }}" />
     826                                        <# } #>
    816827                                        <a class="remove-setting"><?php _e( 'Remove' ); ?></a>
    817828                                </label>
    818829                                <# } #>
     
    826837                                #>
    827838                                <label class="setting">
    828839                                        <span><?php echo strtoupper( $type ) ?></span>
     840                                        <# if ( data.model.<?php echo $type ?>.match(/^[0-9]+$/) ) {
     841                                                resolvedSrc = _.findWhere( data.attachments, {id: parseInt( data.model.<?php echo $type ?>, 10 )} ).url;
     842                                        #>
     843                                        <input type="text" disabled="disabled" value="{{ resolvedSrc }}" />
     844                                        <input type="hidden" data-setting="<?php echo $type ?>" value="{{ data.model.<?php echo $type ?> }}" />
     845                                        <# } else { #>
    829846                                        <input type="text" disabled="disabled" data-setting="<?php echo $type ?>" value="{{ data.model.<?php echo $type ?> }}" />
    830                                         <a class="remove-setting"><?php _e( 'Remove' ); ?></a>
     847                                        <# } #><a class="remove-setting"><?php _e( 'Remove' ); ?></a>
    831848                                </label>
    832849                                <# } #>
    833850                                <?php endforeach ?>
     
    867884        </script>
    868885
    869886        <script type="text/html" id="tmpl-video-details">
    870                 <# var ext, html5types = {
     887                <# var resolvedSrc, ext, html5types = {
    871888                        mp4: wp.media.view.settings.embedMimes.mp4,
    872889                        ogv: wp.media.view.settings.embedMimes.ogv,
    873890                        webm: wp.media.view.settings.embedMimes.webm
     
    897914                                #>
    898915                                <label class="setting">
    899916                                        <span>SRC</span>
     917                                        <# if ( data.model.src.match(/^[0-9]+$/) ) {
     918                                                resolvedSrc = _.findWhere( data.attachments, {id: parseInt( data.model.src, 10 )} ).url;
     919                                        #>
     920                                        <input type="text" disabled="disabled" value="{{ resolvedSrc }}" />
     921                                        <input type="hidden" data-setting="src" value="{{ data.model.src }}" />
     922                                        <# } else { #>
    900923                                        <input type="text" disabled="disabled" data-setting="src" value="{{ data.model.src }}" />
     924                                        <# } #>
    901925                                        <a class="remove-setting"><?php _e( 'Remove' ); ?></a>
    902926                                </label>
    903927                                <# } #>
     
    909933                                #>
    910934                                <label class="setting">
    911935                                        <span><?php echo strtoupper( $type ) ?></span>
     936                                        <# if ( data.model.<?php echo $type ?>.match(/^[0-9]+$/) ) {
     937                                                resolvedSrc = _.findWhere( data.attachments, {id: parseInt( data.model.<?php echo $type ?>, 10 )} ).url;
     938                                        #>
     939                                        <input type="text" disabled="disabled" value="{{ resolvedSrc }}" />
     940                                        <input type="hidden" data-setting="<?php echo $type ?>" value="{{ data.model.<?php echo $type ?> }}" />
     941                                        <# } else { #>
    912942                                        <input type="text" disabled="disabled" data-setting="<?php echo $type ?>" value="{{ data.model.<?php echo $type ?> }}" />
     943                                        <# } #>
    913944                                        <a class="remove-setting"><?php _e( 'Remove' ); ?></a>
    914945                                </label>
    915946                                <# } #>
     
    930961                                <# if ( ! _.isEmpty( data.model.poster ) ) { #>
    931962                                <label class="setting">
    932963                                        <span><?php _e( 'Poster Image' ); ?></span>
     964                                        <# if ( data.model.poster.match(/^[0-9]+$/) ) {
     965                                                resolvedSrc = _.findWhere( data.attachments, {id: parseInt( data.model.poster, 10 )} ).url;
     966                                        #>
     967                                        <input type="text" disabled="disabled" value="{{ resolvedSrc }}" />
     968                                        <input type="hidden" data-setting="poster" value="{{ data.model.poster }}" />
     969                                        <# } else { #>
    933970                                        <input type="text" disabled="disabled" data-setting="poster" value="{{ data.model.poster }}" />
     971                                        <# } #>
    934972                                        <a class="remove-setting"><?php _e( 'Remove' ); ?></a>
    935973                                </label>
    936974                                <# } #>
  • src/wp-includes/media.php

     
    17131713
    17141714        $primary = false;
    17151715        if ( ! empty( $src ) ) {
     1716                if ( is_numeric( $src ) ) {
     1717                        $src = get_attached_file( $src );
     1718                }
     1719
    17161720                if ( ! preg_match( $yt_pattern, $src ) ) {
    17171721                        $type = wp_check_filetype( $src, wp_get_mime_types() );
    17181722                        if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) {
     
    17241728        } else {
    17251729                foreach ( $default_types as $ext ) {
    17261730                        if ( ! empty( $$ext ) ) {
     1731                                if ( is_numeric( $$ext ) ) {
     1732                                        $$ext = get_attached_file( $$ext );
     1733                                        if ( empty( $$ext ) ) {
     1734                                                continue;
     1735                                        }
     1736                                }
     1737
    17271738                                $type = wp_check_filetype( $$ext, wp_get_mime_types() );
    17281739                                if ( strtolower( $type['ext'] ) === $ext )
    17291740                                        $primary = true;
     
    26152626                $id = get_post_thumbnail_id( $attachment->ID );
    26162627                if ( ! empty( $id ) ) {
    26172628                        list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'full' );
    2618                         $response['image'] = compact( 'src', 'width', 'height' );
     2629                        $response['image'] = compact( 'id', 'src', 'width', 'height' );
    26192630                        list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'thumbnail' );
    2620                         $response['thumb'] = compact( 'src', 'width', 'height' );
     2631                        $response['thumb'] = compact( 'id', 'src', 'width', 'height' );
    26212632                } else {
     2633                        $id = 0;
    26222634                        $src = wp_mime_type_icon( $attachment->ID );
    26232635                        $width = 48;
    26242636                        $height = 64;
    2625                         $response['image'] = compact( 'src', 'width', 'height' );
    2626                         $response['thumb'] = compact( 'src', 'width', 'height' );
     2637                        $response['image'] = compact( 'id', 'src', 'width', 'height' );
     2638                        $response['thumb'] = compact( 'id', 'src', 'width', 'height' );
    26272639                }
    26282640        }
    26292641