var $ = jQuery,
EmbedLink;
/**
* wp.media.view.EmbedLink
*
* @memberOf wp.media.view
*
* @class
* @augments wp.media.view.Settings
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
EmbedLink = wp.media.view.Settings.extend(/** @lends wp.media.view.EmbedLink.prototype */{
className: 'embed-link-settings',
template: wp.template('embed-link-settings'),
initialize: function() {
this.listenTo( this.model, 'change:url', this.updateoEmbed );
},
updateoEmbed: _.debounce( function() {
var url = this.model.get( 'url' );
// Clear out previous results.
this.$('.embed-container').hide().find('.embed-preview').empty();
this.$( '.setting' ).hide();
// Only proceed with embed if the field contains more than 11 characters.
// Example: http://a.io is 11 chars
if ( url && ( url.length < 11 || ! url.match(/^http(s)?:\/\//) ) ) {
return;
}
this.fetch();
}, wp.media.controller.Embed.sensitivity ),
fetch: function() {
var url = this.model.get( 'url' ), re, youTubeEmbedMatch;
// Check if they haven't typed in 500 ms.
if ( $('#embed-url-field').val() !== url ) {
return;
}
if ( this.dfd && 'pending' === this.dfd.state() ) {
this.dfd.abort();
}
// Support YouTube embed urls, since they work once in the editor.
re = /https?:\/\/www\.youtube\.com\/embed\/([^/]+)/;
youTubeEmbedMatch = re.exec( url );
if ( youTubeEmbedMatch ) {
url = 'https://www.youtube.com/watch?v=' + youTubeEmbedMatch[ 1 ];
}
this.dfd = wp.apiRequest({
url: wp.media.view.settings.oEmbedProxyUrl,
data: {
url: url,
maxwidth: this.model.get( 'width' ),
maxheight: this.model.get( 'height' )
},
type: 'GET',
dataType: 'json',
context: this
})
.done( function( response ) {
this.renderoEmbed( {
data: {
body: response.html || ''
}
} );
} )
.fail( this.renderFail );
},
renderFail: function ( response, status ) {
if ( 'abort' === status ) {
return;
}
this.$( '.link-text' ).show();
},
renderoEmbed: function( response ) {
var html = ( response && response.data && response.data.body ) || '';
if ( html ) {
this.$('.embed-container').show().find('.embed-preview').html( html );
} else {
this.renderFail();
}
}
});
module.exports = EmbedLink;