Make WordPress Core

Changeset 41252


Ignore:
Timestamp:
08/14/2017 05:55:24 PM (9 years ago)
Author:
westonruter
Message:

Widgets: Expose link URL input field in Image widget to avoid having to open media modal to discover.

Props timmydcrawford, westonruter.
See #39993.
Fixes #41274.

Location:
trunk/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/css/widgets.css

    r41062 r41252  
    153153}
    154154
     155.media-widget-image-link {
     156        margin: 1em 0;
     157}
     158
    155159/* Widget Dragging Helpers */
    156160.widget.ui-draggable-dragging {
  • trunk/src/wp-admin/js/widgets/media-image-widget.js

    r40670 r41252  
    3131                 */
    3232                renderPreview: function renderPreview() {
    33                         var control = this, previewContainer, previewTemplate;
     33                        var control = this, previewContainer, previewTemplate, fieldsContainer, fieldsTemplate, linkInput;
    3434                        if ( ! control.model.get( 'attachment_id' ) && ! control.model.get( 'url' ) ) {
    3535                                return;
     
    3838                        previewContainer = control.$el.find( '.media-widget-preview' );
    3939                        previewTemplate = wp.template( 'wp-media-widget-image-preview' );
    40                         previewContainer.html( previewTemplate( _.extend( control.previewTemplateProps.toJSON() ) ) );
     40                        previewContainer.html( previewTemplate( control.previewTemplateProps.toJSON() ) );
     41
     42                        linkInput = control.$el.find( '.link' );
     43                        if ( ! linkInput.is( document.activeElement ) ) {
     44                                fieldsContainer = control.$el.find( '.media-widget-fields' );
     45                                fieldsTemplate = wp.template( 'wp-media-widget-image-fields' );
     46                                fieldsContainer.html( fieldsTemplate( control.previewTemplateProps.toJSON() ) );
     47                        }
    4148                },
    4249
     
    6572
    6673                        updateCallback = function() {
    67                                 var mediaProps;
     74                                var mediaProps, linkType;
    6875
    6976                                // Update cached attachment object to avoid having to re-fetch. This also triggers re-rendering of preview.
    7077                                mediaProps = mediaFrame.state().attributes.image.toJSON();
     78                                linkType = mediaProps.link;
     79                                mediaProps.link = mediaProps.linkUrl;
    7180                                control.selectedAttachment.set( mediaProps );
     81                                control.displaySettings.set( 'link', linkType );
    7282
    7383                                control.model.set( _.extend(
     
    131141                 */
    132142                mapModelToPreviewTemplateProps: function mapModelToPreviewTemplateProps() {
    133                         var control = this, mediaFrameProps, url;
     143                        var control = this, previewTemplateProps, url;
    134144                        url = control.model.get( 'url' );
    135                         mediaFrameProps = component.MediaWidgetControl.prototype.mapModelToPreviewTemplateProps.call( control );
    136                         mediaFrameProps.currentFilename = url ? url.replace( /\?.*$/, '' ).replace( /^.+\//, '' ) : '';
    137                         return mediaFrameProps;
     145                        previewTemplateProps = component.MediaWidgetControl.prototype.mapModelToPreviewTemplateProps.call( control );
     146                        previewTemplateProps.currentFilename = url ? url.replace( /\?.*$/, '' ).replace( /^.+\//, '' ) : '';
     147                        previewTemplateProps.link_url = control.model.get( 'link_url' );
     148                        return previewTemplateProps;
    138149                }
    139150        });
  • trunk/src/wp-admin/js/widgets/media-widgets.js

    r41249 r41252  
    513513                        });
    514514
     515                        // Update link_url attribute.
     516                        control.$el.on( 'input change', '.link', function updateLinkUrl() {
     517                                var linkUrl = $.trim( $( this ).val() ), linkType = 'custom';
     518                                if ( control.selectedAttachment.get( 'linkUrl' ) === linkUrl || control.selectedAttachment.get( 'link' ) === linkUrl ) {
     519                                        linkType = 'post';
     520                                } else if ( control.selectedAttachment.get( 'url' ) === linkUrl ) {
     521                                        linkType = 'file';
     522                                }
     523                                control.model.set( {
     524                                        link_url: linkUrl,
     525                                        link_type: linkType
     526                                });
     527
     528                                // Update display settings for the next time the user opens to select from the media library.
     529                                control.displaySettings.set( {
     530                                        link: linkType,
     531                                        linkUrl: linkUrl
     532                                });
     533                        });
     534
    515535                        /*
    516536                         * Copy current display settings from the widget model to serve as basis
     
    823843
    824844                        if ( 'post' === mediaFrameProps.link ) {
    825                                 modelProps.link_url = mediaFrameProps.postUrl;
     845                                modelProps.link_url = mediaFrameProps.postUrl || mediaFrameProps.linkUrl;
    826846                        } else if ( 'file' === mediaFrameProps.link ) {
    827847                                modelProps.link_url = mediaFrameProps.url;
  • trunk/src/wp-includes/widgets/class-wp-widget-media-image.php

    r41162 r41252  
    9696                                        'media_prop' => 'link',
    9797                                        'description' => __( 'Link To' ),
    98                                         'should_preview_update' => false,
     98                                        'should_preview_update' => true,
    9999                                ),
    100100                                'link_url' => array(
     
    104104                                        'media_prop' => 'linkUrl',
    105105                                        'description' => __( 'URL' ),
    106                                         'should_preview_update' => false,
     106                                        'should_preview_update' => true,
    107107                                ),
    108108                                'image_classes' => array(
     
    308308
    309309                ?>
     310                <script type="text/html" id="tmpl-wp-media-widget-image-fields">
     311                        <# var elementIdPrefix = 'el' + String( Math.random() ) + '_'; #>
     312                        <# if ( data.url ) { #>
     313                        <p class="media-widget-image-link">
     314                                <label for="{{ elementIdPrefix }}linkUrl"><?php esc_html_e( 'Link to:' ); ?></label>
     315                                <input id="{{ elementIdPrefix }}linkUrl" type="url" class="widefat link" value="{{ data.link_url }}" placeholder="http://">
     316                        </p>
     317                        <# } #>
     318                </script>
    310319                <script type="text/html" id="tmpl-wp-media-widget-image-preview">
    311                         <#
    312                         var describedById = 'describedBy-' + String( Math.random() );
    313                         #>
     320                        <# var describedById = 'describedBy-' + String( Math.random() ); #>
    314321                        <# if ( data.error && 'missing_attachment' === data.error ) { #>
    315322                                <div class="notice notice-error notice-alt notice-missing-attachment">
  • trunk/src/wp-includes/widgets/class-wp-widget-media.php

    r41162 r41252  
    405405                                </button>
    406406                        </p>
     407                        <div class="media-widget-fields">
     408                        </div>
    407409                </script>
    408410                <?php
Note: See TracChangeset for help on using the changeset viewer.