| |
| |
| |
|
|
| |
| (function( component, $ ) { |
| 'use strict'; |
|
|
| var ImageWidgetModel, ImageWidgetControl; |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| ImageWidgetModel = component.MediaWidgetModel.extend({}); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| ImageWidgetControl = component.MediaWidgetControl.extend({ |
|
|
| |
| |
| |
| |
| |
| events: _.extend( {}, component.MediaWidgetControl.prototype.events, { |
| 'click .media-widget-preview.populated': 'editMedia' |
| } ), |
|
|
| |
| |
| |
| |
| |
| renderPreview: function renderPreview() { |
| var control = this, previewContainer, previewTemplate, fieldsContainer, fieldsTemplate, linkInput; |
| if ( ! control.model.get( 'attachment_id' ) && ! control.model.get( 'url' ) ) { |
| return; |
| } |
|
|
| previewContainer = control.$el.find( '.media-widget-preview' ); |
| previewTemplate = wp.template( 'wp-media-widget-image-preview' ); |
| previewContainer.html( previewTemplate( control.previewTemplateProps.toJSON() ) ); |
| previewContainer.addClass( 'populated' ); |
|
|
| linkInput = control.$el.find( '.link' ); |
| if ( ! linkInput.is( document.activeElement ) ) { |
| fieldsContainer = control.$el.find( '.media-widget-fields' ); |
| fieldsTemplate = wp.template( 'wp-media-widget-image-fields' ); |
| fieldsContainer.html( fieldsTemplate( control.previewTemplateProps.toJSON() ) ); |
| } |
| }, |
|
|
| |
| |
| |
| |
| |
| editMedia: function editMedia() { |
| var control = this, mediaFrame, updateCallback, defaultSync, metadata; |
|
|
| metadata = control.mapModelToMediaFrameProps( control.model.toJSON() ); |
|
|
| |
| if ( 'none' === metadata.link ) { |
| metadata.linkUrl = ''; |
| } |
|
|
| |
| mediaFrame = wp.media({ |
| frame: 'image', |
| state: 'image-details', |
| metadata: metadata |
| }); |
| mediaFrame.$el.addClass( 'media-widget' ); |
|
|
| updateCallback = function() { |
| var mediaProps, linkType; |
|
|
| |
| mediaProps = mediaFrame.state().attributes.image.toJSON(); |
| linkType = mediaProps.link; |
| mediaProps.link = mediaProps.linkUrl; |
| control.selectedAttachment.set( mediaProps ); |
| control.displaySettings.set( 'link', linkType ); |
|
|
| control.model.set( _.extend( |
| control.mapMediaToModelProps( mediaProps ), |
| { error: false } |
| ) ); |
| }; |
|
|
| mediaFrame.state( 'image-details' ).on( 'update', updateCallback ); |
| mediaFrame.state( 'replace-image' ).on( 'replace', updateCallback ); |
|
|
| |
| defaultSync = wp.media.model.Attachment.prototype.sync; |
| wp.media.model.Attachment.prototype.sync = function rejectedSync() { |
| return $.Deferred().rejectWith( this ).promise(); |
| }; |
| mediaFrame.on( 'close', function onClose() { |
| mediaFrame.detach(); |
| wp.media.model.Attachment.prototype.sync = defaultSync; |
| }); |
|
|
| mediaFrame.open(); |
| }, |
|
|
| |
| |
| |
| |
| |
| getEmbedResetProps: function getEmbedResetProps() { |
| return _.extend( |
| component.MediaWidgetControl.prototype.getEmbedResetProps.call( this ), |
| { |
| size: 'full', |
| width: 0, |
| height: 0 |
| } |
| ); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| getModelPropsFromMediaFrame: function getModelPropsFromMediaFrame( mediaFrame ) { |
| var control = this; |
| return _.omit( |
| component.MediaWidgetControl.prototype.getModelPropsFromMediaFrame.call( control, mediaFrame ), |
| 'image_title' |
| ); |
| }, |
|
|
| |
| |
| |
| |
| |
| mapModelToPreviewTemplateProps: function mapModelToPreviewTemplateProps() { |
| var control = this, previewTemplateProps, url; |
| url = control.model.get( 'url' ); |
| previewTemplateProps = component.MediaWidgetControl.prototype.mapModelToPreviewTemplateProps.call( control ); |
| previewTemplateProps.currentFilename = url ? url.replace( /\?.*$/, '' ).replace( /^.+\//, '' ) : ''; |
| previewTemplateProps.link_url = control.model.get( 'link_url' ); |
| return previewTemplateProps; |
| } |
| }); |
|
|
| |
| component.controlConstructors.media_image = ImageWidgetControl; |
| component.modelConstructors.media_image = ImageWidgetModel; |
|
|
| })( wp.mediaWidgets, jQuery ); |
|
|