Sync plugins from current page

Signed-off-by: Adrian Nöthlich <git@promasu.tech>
This commit is contained in:
2019-09-11 19:08:46 +02:00
parent 85d41e4216
commit 8515ff9587
1847 changed files with 505469 additions and 0 deletions

View File

@@ -0,0 +1,306 @@
(function($, undefined){
// vars
var CONTEXT = 'conditional_logic';
/**
* conditionsManager
*
* description
*
* @date 1/2/18
* @since 5.6.5
*
* @param type $var Description. Default.
* @return type Description.
*/
var conditionsManager = new acf.Model({
id: 'conditionsManager',
priority: 20, // run actions later
actions: {
'new_field': 'onNewField',
},
onNewField: function( field ){
if( field.has('conditions') ) {
field.getConditions().render();
}
},
});
/**
* acf.Field.prototype.getField
*
* Finds a field that is related to another field
*
* @date 1/2/18
* @since 5.6.5
*
* @param type $var Description. Default.
* @return type Description.
*/
var getSiblingField = function( field, key ){
// find sibling (very fast)
var fields = acf.getFields({
key: key,
sibling: field.$el,
suppressFilters: true,
});
// find sibling-children (fast)
// needed for group fields, accordions, etc
if( !fields.length ) {
fields = acf.getFields({
key: key,
parent: field.$el.parent(),
suppressFilters: true,
});
}
// return
if( fields.length ) {
return fields[0];
}
return false;
};
acf.Field.prototype.getField = function( key ){
// get sibling field
var field = getSiblingField( this, key );
// return early
if( field ) {
return field;
}
// move up through each parent and try again
var parents = this.parents();
for( var i = 0; i < parents.length; i++ ) {
// get sibling field
field = getSiblingField( parents[i], key );
// return early
if( field ) {
return field;
}
}
// return
return false;
};
/**
* acf.Field.prototype.getConditions
*
* Returns the field's conditions instance
*
* @date 1/2/18
* @since 5.6.5
*
* @param type $var Description. Default.
* @return type Description.
*/
acf.Field.prototype.getConditions = function(){
// instantiate
if( !this.conditions ) {
this.conditions = new Conditions( this );
}
// return
return this.conditions;
};
/**
* Conditions
*
* description
*
* @date 1/2/18
* @since 5.6.5
*
* @param type $var Description. Default.
* @return type Description.
*/
var timeout = false;
var Conditions = acf.Model.extend({
id: 'Conditions',
data: {
field: false, // The field with "data-conditions" (target).
timeStamp: false, // Reference used during "change" event.
groups: [], // The groups of condition instances.
},
setup: function( field ){
// data
this.data.field = field;
// vars
var conditions = field.get('conditions');
// detect groups
if( conditions instanceof Array ) {
// detect groups
if( conditions[0] instanceof Array ) {
// loop
conditions.map(function(rules, i){
this.addRules( rules, i );
}, this);
// detect rules
} else {
this.addRules( conditions );
}
// detect rule
} else {
this.addRule( conditions );
}
},
change: function( e ){
// this function may be triggered multiple times per event due to multiple condition classes
// compare timestamp to allow only 1 trigger per event
if( this.get('timeStamp') === e.timeStamp ) {
return false;
} else {
this.set('timeStamp', e.timeStamp, true);
}
// render condition and store result
var changed = this.render();
},
render: function(){
return this.calculate() ? this.show() : this.hide();
},
show: function(){
return this.get('field').showEnable(this.cid, CONTEXT);
},
hide: function(){
return this.get('field').hideDisable(this.cid, CONTEXT);
},
calculate: function(){
// vars
var pass = false;
// loop
this.getGroups().map(function( group ){
// igrnore this group if another group passed
if( pass ) return;
// find passed
var passed = group.filter(function(condition){
return condition.calculate();
});
// if all conditions passed, update the global var
if( passed.length == group.length ) {
pass = true;
}
});
return pass;
},
hasGroups: function(){
return this.data.groups != null;
},
getGroups: function(){
return this.data.groups;
},
addGroup: function(){
var group = [];
this.data.groups.push( group );
return group;
},
hasGroup: function( i ){
return this.data.groups[i] != null;
},
getGroup: function( i ){
return this.data.groups[i];
},
removeGroup: function( i ){
this.data.groups[i].delete;
return this;
},
addRules: function( rules, group ){
rules.map(function( rule ){
this.addRule( rule, group );
}, this);
},
addRule: function( rule, group ){
// defaults
group = group || 0;
// vars
var groupArray;
// get group
if( this.hasGroup(group) ) {
groupArray = this.getGroup(group);
} else {
groupArray = this.addGroup();
}
// instantiate
var condition = acf.newCondition( rule, this );
// bail ealry if condition failed (field did not exist)
if( !condition ) {
return false;
}
// add rule
groupArray.push(condition);
},
hasRule: function(){
},
getRule: function( rule, group ){
// defaults
rule = rule || 0;
group = group || 0;
return this.data.groups[ group ][ rule ];
},
removeRule: function(){
}
});
})(jQuery);