Sync plugins from current page
Signed-off-by: Adrian Nöthlich <git@promasu.tech>
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
(function($, undefined){
|
||||
|
||||
var Field = acf.Field.extend({
|
||||
|
||||
type: 'oembed',
|
||||
|
||||
events: {
|
||||
'click [data-name="clear-button"]': 'onClickClear',
|
||||
'keypress .input-search': 'onKeypressSearch',
|
||||
'keyup .input-search': 'onKeyupSearch',
|
||||
'change .input-search': 'onChangeSearch'
|
||||
},
|
||||
|
||||
$control: function(){
|
||||
return this.$('.acf-oembed');
|
||||
},
|
||||
|
||||
$input: function(){
|
||||
return this.$('.input-value');
|
||||
},
|
||||
|
||||
$search: function(){
|
||||
return this.$('.input-search');
|
||||
},
|
||||
|
||||
getValue: function(){
|
||||
return this.$input().val();
|
||||
},
|
||||
|
||||
getSearchVal: function(){
|
||||
return this.$search().val();
|
||||
},
|
||||
|
||||
setValue: function( val ){
|
||||
|
||||
// class
|
||||
if( val ) {
|
||||
this.$control().addClass('has-value');
|
||||
} else {
|
||||
this.$control().removeClass('has-value');
|
||||
}
|
||||
|
||||
acf.val( this.$input(), val );
|
||||
},
|
||||
|
||||
showLoading: function( show ){
|
||||
acf.showLoading( this.$('.canvas') );
|
||||
},
|
||||
|
||||
hideLoading: function(){
|
||||
acf.hideLoading( this.$('.canvas') );
|
||||
},
|
||||
|
||||
maybeSearch: function(){
|
||||
|
||||
// vars
|
||||
var prevUrl = this.val();
|
||||
var url = this.getSearchVal();
|
||||
|
||||
// no value
|
||||
if( !url ) {
|
||||
return this.clear();
|
||||
}
|
||||
|
||||
// fix missing 'http://' - causes the oembed code to error and fail
|
||||
if( url.substr(0, 4) != 'http' ) {
|
||||
url = 'http://' + url;
|
||||
}
|
||||
|
||||
// bail early if no change
|
||||
if( url === prevUrl ) return;
|
||||
|
||||
// clear existing timeout
|
||||
var timeout = this.get('timeout');
|
||||
if( timeout ) {
|
||||
clearTimeout( timeout );
|
||||
}
|
||||
|
||||
// set new timeout
|
||||
var callback = $.proxy(this.search, this, url);
|
||||
this.set('timeout', setTimeout(callback, 300));
|
||||
|
||||
},
|
||||
|
||||
search: function( url ){
|
||||
|
||||
// ajax
|
||||
var ajaxData = {
|
||||
action: 'acf/fields/oembed/search',
|
||||
s: url,
|
||||
field_key: this.get('key')
|
||||
};
|
||||
|
||||
// clear existing timeout
|
||||
var xhr = this.get('xhr');
|
||||
if( xhr ) {
|
||||
xhr.abort();
|
||||
}
|
||||
|
||||
// loading
|
||||
this.showLoading();
|
||||
|
||||
// query
|
||||
var xhr = $.ajax({
|
||||
url: acf.get('ajaxurl'),
|
||||
data: acf.prepareForAjax(ajaxData),
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
context: this,
|
||||
success: function( json ){
|
||||
|
||||
// error
|
||||
if( !json || !json.html ) {
|
||||
json = {
|
||||
url: false,
|
||||
html: ''
|
||||
}
|
||||
}
|
||||
|
||||
// update vars
|
||||
this.val( json.url );
|
||||
this.$('.canvas-media').html( json.html );
|
||||
},
|
||||
complete: function(){
|
||||
this.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
this.set('xhr', xhr);
|
||||
},
|
||||
|
||||
clear: function(){
|
||||
this.val('');
|
||||
this.$search().val('');
|
||||
this.$('.canvas-media').html('');
|
||||
},
|
||||
|
||||
onClickClear: function( e, $el ){
|
||||
this.clear();
|
||||
},
|
||||
|
||||
onKeypressSearch: function( e, $el ){
|
||||
if( e.which == 13 ) {
|
||||
e.preventDefault();
|
||||
this.maybeSearch();
|
||||
}
|
||||
},
|
||||
|
||||
onKeyupSearch: function( e, $el ){
|
||||
if( $el.val() ) {
|
||||
this.maybeSearch();
|
||||
}
|
||||
},
|
||||
|
||||
onChangeSearch: function( e, $el ){
|
||||
this.maybeSearch();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
acf.registerFieldType( Field );
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user