Sync plugins from current page
Signed-off-by: Adrian Nöthlich <git@promasu.tech>
This commit is contained in:
@@ -0,0 +1,249 @@
|
||||
(function($, undefined){
|
||||
|
||||
// vars
|
||||
var storage = [];
|
||||
|
||||
/**
|
||||
* acf.Condition
|
||||
*
|
||||
* description
|
||||
*
|
||||
* @date 23/3/18
|
||||
* @since 5.6.9
|
||||
*
|
||||
* @param type $var Description. Default.
|
||||
* @return type Description.
|
||||
*/
|
||||
|
||||
acf.Condition = acf.Model.extend({
|
||||
|
||||
type: '', // used for model name
|
||||
operator: '==', // rule operator
|
||||
label: '', // label shown when editing fields
|
||||
choiceType: 'input', // input, select
|
||||
fieldTypes: [], // auto connect this conditions with these field types
|
||||
|
||||
data: {
|
||||
conditions: false, // the parent instance
|
||||
field: false, // the field which we query against
|
||||
rule: {} // the rule [field, operator, value]
|
||||
},
|
||||
|
||||
events: {
|
||||
'change': 'change',
|
||||
'keyup': 'change',
|
||||
'enableField': 'change',
|
||||
'disableField': 'change'
|
||||
},
|
||||
|
||||
setup: function( props ){
|
||||
$.extend(this.data, props);
|
||||
},
|
||||
|
||||
getEventTarget: function( $el, event ){
|
||||
return $el || this.get('field').$el;
|
||||
},
|
||||
|
||||
change: function( e, $el ){
|
||||
this.get('conditions').change( e );
|
||||
},
|
||||
|
||||
match: function( rule, field ){
|
||||
return false;
|
||||
},
|
||||
|
||||
calculate: function(){
|
||||
return this.match( this.get('rule'), this.get('field') );
|
||||
},
|
||||
|
||||
choices: function( field ){
|
||||
return '<input type="text" />';
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* acf.newCondition
|
||||
*
|
||||
* description
|
||||
*
|
||||
* @date 1/2/18
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param type $var Description. Default.
|
||||
* @return type Description.
|
||||
*/
|
||||
|
||||
acf.newCondition = function( rule, conditions ){
|
||||
|
||||
// currently setting up conditions for fieldX, this field is the 'target'
|
||||
var target = conditions.get('field');
|
||||
|
||||
// use the 'target' to find the 'trigger' field.
|
||||
// - this field is used to setup the conditional logic events
|
||||
var field = target.getField( rule.field );
|
||||
|
||||
// bail ealry if no target or no field (possible if field doesn't exist due to HTML error)
|
||||
if( !target || !field ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// vars
|
||||
var args = {
|
||||
rule: rule,
|
||||
target: target,
|
||||
conditions: conditions,
|
||||
field: field
|
||||
};
|
||||
|
||||
// vars
|
||||
var fieldType = field.get('type');
|
||||
var operator = rule.operator;
|
||||
|
||||
// get avaibale conditions
|
||||
var conditionTypes = acf.getConditionTypes({
|
||||
fieldType: fieldType,
|
||||
operator: operator,
|
||||
});
|
||||
|
||||
// instantiate
|
||||
var model = conditionTypes[0] || acf.Condition;
|
||||
|
||||
// instantiate
|
||||
var condition = new model( args );
|
||||
|
||||
// return
|
||||
return condition;
|
||||
};
|
||||
|
||||
/**
|
||||
* mid
|
||||
*
|
||||
* Calculates the model ID for a field type
|
||||
*
|
||||
* @date 15/12/17
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param string type
|
||||
* @return string
|
||||
*/
|
||||
|
||||
var modelId = function( type ) {
|
||||
return acf.strPascalCase( type || '' ) + 'Condition';
|
||||
};
|
||||
|
||||
/**
|
||||
* acf.registerConditionType
|
||||
*
|
||||
* description
|
||||
*
|
||||
* @date 1/2/18
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param type $var Description. Default.
|
||||
* @return type Description.
|
||||
*/
|
||||
|
||||
acf.registerConditionType = function( model ){
|
||||
|
||||
// vars
|
||||
var proto = model.prototype;
|
||||
var type = proto.type;
|
||||
var mid = modelId( type );
|
||||
|
||||
// store model
|
||||
acf.models[ mid ] = model;
|
||||
|
||||
// store reference
|
||||
storage.push( type );
|
||||
};
|
||||
|
||||
/**
|
||||
* acf.getConditionType
|
||||
*
|
||||
* description
|
||||
*
|
||||
* @date 1/2/18
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param type $var Description. Default.
|
||||
* @return type Description.
|
||||
*/
|
||||
|
||||
acf.getConditionType = function( type ){
|
||||
var mid = modelId( type );
|
||||
return acf.models[ mid ] || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf.registerConditionForFieldType
|
||||
*
|
||||
* description
|
||||
*
|
||||
* @date 1/2/18
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param type $var Description. Default.
|
||||
* @return type Description.
|
||||
*/
|
||||
|
||||
acf.registerConditionForFieldType = function( conditionType, fieldType ){
|
||||
|
||||
// get model
|
||||
var model = acf.getConditionType( conditionType );
|
||||
|
||||
// append
|
||||
if( model ) {
|
||||
model.prototype.fieldTypes.push( fieldType );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* acf.getConditionTypes
|
||||
*
|
||||
* description
|
||||
*
|
||||
* @date 1/2/18
|
||||
* @since 5.6.5
|
||||
*
|
||||
* @param type $var Description. Default.
|
||||
* @return type Description.
|
||||
*/
|
||||
|
||||
acf.getConditionTypes = function( args ){
|
||||
|
||||
// defaults
|
||||
args = acf.parseArgs(args, {
|
||||
fieldType: '',
|
||||
operator: ''
|
||||
});
|
||||
|
||||
// clonse available types
|
||||
var types = [];
|
||||
|
||||
// loop
|
||||
storage.map(function( type ){
|
||||
|
||||
// vars
|
||||
var model = acf.getConditionType(type);
|
||||
var ProtoFieldTypes = model.prototype.fieldTypes;
|
||||
var ProtoOperator = model.prototype.operator;
|
||||
|
||||
// check fieldType
|
||||
if( args.fieldType && ProtoFieldTypes.indexOf( args.fieldType ) === -1 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// check operator
|
||||
if( args.operator && ProtoOperator !== args.operator ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// append
|
||||
types.push( model );
|
||||
});
|
||||
|
||||
// return
|
||||
return types;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
Reference in New Issue
Block a user