Files
wordpress-preseed/wp-content/plugins/advanced-custom-fields/assets/build/js/_field-group-locations.js
2019-09-11 19:08:46 +02:00

104 lines
2.1 KiB
JavaScript

(function($, undefined){
/**
* locationManager
*
* Field group location rules functionality
*
* @date 15/12/17
* @since 5.7.0
*
* @param void
* @return void
*/
var locationManager = new acf.Model({
id: 'locationManager',
wait: 'ready',
events: {
'click .add-location-rule': 'onClickAddRule',
'click .add-location-group': 'onClickAddGroup',
'click .remove-location-rule': 'onClickRemoveRule',
'change .refresh-location-rule': 'onChangeRemoveRule'
},
initialize: function(){
this.$el = $('#acf-field-group-locations');
},
onClickAddRule: function( e, $el ){
this.addRule( $el.closest('tr') );
},
onClickRemoveRule: function( e, $el ){
this.removeRule( $el.closest('tr') );
},
onChangeRemoveRule: function( e, $el ){
this.changeRule( $el.closest('tr') );
},
onClickAddGroup: function( e, $el ){
this.addGroup();
},
addRule: function( $tr ){
acf.duplicate( $tr );
},
removeRule: function( $tr ){
if( $tr.siblings('tr').length == 0 ) {
$tr.closest('.rule-group').remove();
} else {
$tr.remove();
}
},
changeRule: function( $rule ){
// vars
var $group = $rule.closest('.rule-group');
var prefix = $rule.find('td.param select').attr('name').replace('[param]', '');
// ajaxdata
var ajaxdata = {};
ajaxdata.action = 'acf/field_group/render_location_rule';
ajaxdata.rule = acf.serialize( $rule, prefix );
ajaxdata.rule.id = $rule.data('id');
ajaxdata.rule.group = $group.data('id');
// temp disable
acf.disable( $rule.find('td.value') );
// ajax
$.ajax({
url: acf.get('ajaxurl'),
data: acf.prepareForAjax(ajaxdata),
type: 'post',
dataType: 'html',
success: function( html ){
if( !html ) return;
$rule.replaceWith( html );
}
});
},
addGroup: function(){
// vars
var $group = this.$('.rule-group:last');
// duplicate
$group2 = acf.duplicate( $group );
// update h4
$group2.find('h4').text( acf.__('or') );
// remove all tr's except the first one
$group2.find('tr').not(':first').remove();
}
});
})(jQuery);