;( function( elementor, $, window ) {
////////////////////////////////////////////
// Hooks. ////
////////////////////////////////////////////
elementor.hooks.addAction( 'panel/open_editor/widget/ee-offcanvas', function( panel, model, view ) {
if ( 'ee-offcanvas.classic' !== view.$el.data('widget_type') )
return;
elementor.channels.editor.off('ee:editor:offcanvas:open').on('ee:editor:offcanvas:open', function( event ) {
var $element = view.$el,
$element_id = $element.data('id'),
$slidebar = window.elementor.$previewContents.find( '#ee-offcanvas-' + $element_id ),
ocController = window.elementorFrontend.eeOffcanvas.controller;
ocController.toggle( 'oc' + $element_id );
});
} );
////////////////////////////////////////////
// Controls Handlers. ////
////////////////////////////////////////////
// Snazzy Control
var ControlSnazzy = elementor.modules.controls.BaseData.extend( {
getSnazzyDefaultOptions: function getSnazzyDefaultOptions() {
var options = this.model.get( 'snazzy_options' );
return {
containerCssClass : 'ee-select2-container',
dropdownCssClass : 'ee-select2-dropdown',
allowClear : true,
placeholder : this.model.get( 'placeholder' ),
dir : elementor.config.is_rtl ? 'rtl' : 'ltr',
ajax : {
url : 'https://snazzymaps.com/' + options.endpoint + '.json',
dataType : 'json',
cache : true,
data : function ( params ) {
return {
key : options.key,
page : params.page || 1,
};
},
processResults: function ( data, params ) {
var styles = $.map( data.styles, function ( obj ) {
obj.id = JSON.stringify( obj );
obj.text = obj.name;
return obj;
});
params.page = params.page || 1;
var response = {
results : styles,
pagination : {
more: ( params.page * 12 ) < data.pagination.totalItems,
},
};
return response;
},
},
minimumInputLength : 0,
minimumResultsForSearch : -1,
escapeMarkup : function ( markup ) { return markup; },
templateResult : this.formatResults,
templateSelection : this.formatResultsSelection,
};
},
formatResults: function formatRepo( repo ) {
if ( repo.loading ) {
return repo.text;
}
var markup =
"
";
return markup;
},
formatResultsSelection: function formatRepoSelection( repo ) {
return repo.text;
},
applySavedValue: function applySavedValue() {
var controlValue = this.getControlValue();
if ( controlValue && '' !== controlValue ) {
controlValue = JSON.parse( this.getControlValue() );
this.setInputValue('[data-setting="' + this.model.get('name') + '"]', controlValue.id );
}
},
getSnazzyOptions: function getSnazzyOptions() {
return jQuery.extend(this.getSnazzyDefaultOptions(), this.model.get('select2options'));
},
onReady: function onReady() {
this.ui.select.select2(this.getSnazzyOptions());
},
onBeforeDestroy: function onBeforeDestroy() {
if (this.ui.select.data('select2')) {
this.ui.select.select2('destroy');
}
this.$el.remove();
}
} );
// Query Control
var ControlQuery = elementor.modules.controls.Select2.extend( {
cache: null,
isTitlesReceived: false,
getSelect2Placeholder: function getSelect2Placeholder() {
var self = this;
return {
id: '',
text: self.model.get('placeholder') || 'All',
};
},
getSelect2DefaultOptions: function getSelect2DefaultOptions() {
var self = this;
return jQuery.extend( elementor.modules.controls.Select2.prototype.getSelect2DefaultOptions.apply( this, arguments ), {
ajax: {
transport: function transport( params, success, failure ) {
var data = {
q : params.data.q,
query_type : self.model.get('query_type'),
query_options : self.model.get('query_options'),
object_type : self.model.get('object_type'),
};
return elementorCommon.ajax.addRequest('ee_query_control_filter_autocomplete', {
data : data,
success : success,
error : failure,
});
},
data: function data( params ) {
return {
q : params.term,
page : params.page,
};
},
cache: true
},
escapeMarkup: function escapeMarkup(markup) {
return markup;
},
minimumInputLength: 1
});
},
getValueTitles: function getValueTitles() {
var self = this,
ids = this.getControlValue(),
queryType = this.model.get('query_type'),
queryOptions = this.model.get('query_options'),
objectType = this.model.get('object_type');
if ( ! ids || ! queryType ) return;
if ( ! _.isArray( ids ) ) {
ids = [ ids ];
}
elementorCommon.ajax.loadObjects({
action : 'ee_query_control_value_titles',
ids : ids,
data : {
query_type : queryType,
query_options : queryOptions,
object_type : objectType,
unique_id : '' + self.cid + queryType,
},
success: function success(data) {
self.isTitlesReceived = true;
self.model.set('options', data);
self.render();
},
before: function before() {
self.addSpinner();
},
});
},
addSpinner: function addSpinner() {
this.ui.select.prop('disabled', true);
this.$el.find('.elementor-control-title').after(' ');
},
onReady: function onReady() {
setTimeout( elementor.modules.controls.Select2.prototype.onReady.bind(this) );
if ( ! this.isTitlesReceived ) {
this.getValueTitles();
}
},
onBeforeDestroy: function onBeforeDestroy() {
if (this.ui.select.data('select2')) {
this.ui.select.select2('destroy');
}
this.$el.remove();
},
} );
// Add Control Handlers
elementor.addControlView( 'ee-query', ControlQuery );
elementor.addControlView( 'ee-snazzy', ControlSnazzy );
} )( elementor, jQuery, window );