Update to Kirki 4.0.22

This commit is contained in:
AlxMedia 2022-03-15 14:25:47 +01:00
parent 89e6987b0a
commit 0d1a321554
492 changed files with 29668 additions and 39884 deletions

View file

@ -0,0 +1,2 @@
!function(){var n={dependencyControls:{},init:function(){var n=this;_.each(window.kirkiControlDependencies,(function(t,e){var i=wp.customize.control(e);i&&(t=n.addSettingLink(t),wp.customize.control(e).params.required=t,n.showKirkiControl(i))})),_.each(n.dependencyControls,(function(t,e){_.each(t.childrens,(function(e){wp.customize(t.settingLink,(function(t){wp.customize.control(e,(function(i){var r,o;o=function(){return n.showKirkiControl(wp.customize.control(e))},(r=function(){i.active.set(o())})(),t.bind(r),i.active.validate=o}))}))}))}))},getSettingLink:function(n){var t=document.querySelector('[data-kirki-setting="'+n+'"]'),e=n;return t&&n!==t.dataset.kirkiSettingLink&&(e=t.dataset.kirkiSettingLink),e},addSettingLink:function(n){var t=this;return n.forEach((function(e,i){e.setting?n[i].settingLink=t.getSettingLink(e.setting):e.length&&(n[i]=t.addSettingLink(n[i]))})),n},showKirkiControl:function(n){var t,e=!0;if(_.isString(n)&&(n=wp.customize.control(n)),void 0===n||n.params&&_.isEmpty(n.params.required))return!0;for(t=0;t<n.params.required.length;t++)this.checkCondition(n.params.required[t],n,"AND")||(e=!1);return e},checkCondition:function(n,t,e){var i,r,o,s=this,c="AND"===e?"OR":"AND";if(void 0!==n[0]&&void 0===n.setting){for(i=[],o=0;o<n.length;o++)i.push(s.checkCondition(n[o],t,c));return"OR"===c?-1!==i.indexOf(!0):-1===i.indexOf(!1)}return void 0===wp.customize.control(n.setting)||(s.dependencyControls[n.setting]||(s.dependencyControls[n.setting]={settingLink:n.settingLink,childrens:[]}),s.dependencyControls[n.setting].childrens.includes(t.id)||s.dependencyControls[n.setting].childrens.push(t.id),n.settingLink||(console.log(s.dependencyControls),console.log("--------")),r=wp.customize(n.settingLink).get(),wp.customize.control(n.setting).setting&&(r=wp.customize.control(n.setting).setting._value),s.evaluate(n.value,r,n.operator,n.choice))},evaluate:function(n,t,e,i){var r=!1;if(i&&"object"==typeof t&&(t=t[i]),"==="===e)return n===t;if("=="===e||"="===e||"equals"===e||"equal"===e)return n==t;if("!=="===e)return n!==t;if("!="===e||"not equal"===e)return n!=t;if(">="===e||"greater or equal"===e||"equal or greater"===e)return t>=n;if("<="===e||"smaller or equal"===e||"equal or smaller"===e)return t<=n;if(">"===e||"greater"===e)return t>n;if("<"===e||"smaller"===e)return t<n;if("contains"===e||"in"===e){if(_.isArray(n)&&_.isArray(t))return _.each(t,(function(t){if(n.includes(t))return r=!0,!1})),r;if(_.isArray(t))return _.each(t,(function(t){t==n&&(r=!0)})),r;if(_.isObject(t))return _.isUndefined(t[n])||(r=!0),_.each(t,(function(t){n===t&&(r=!0)})),r;if(_.isString(t))return _.isString(n)?-1<n.indexOf(t)&&-1<t.indexOf(n):-1<n.indexOf(t)}return"does not contain"===e||"not in"===e?!this.evaluate(n,t,"contains",i):n==t}};jQuery(document).ready((function(){n.init()}))}();
//# sourceMappingURL=control.js.map

View file

@ -0,0 +1,109 @@
<?php
/**
* Automatic field-dependencies scripts calculation for Kirki controls.
*
* @package kirki-framework/module-field-dependencies
* @author Ari Stathopoulos (@aristath)
* @copyright Copyright (c) 2019, Ari Stathopoulos (@aristath)
* @license https://opensource.org/licenses/MIT
* @since 1.0.0
*/
namespace Kirki\Module;
use Kirki\URL;
/**
* Field dependencies.
*/
class Field_Dependencies {
/**
* An array of field dependencies.
*
* @access private
* @since 1.0.0
* @var array
*/
private $dependencies = [];
/**
* Constructor.
*
* @access public
* @since 1.0.0
*/
public function __construct() {
add_action( 'customize_controls_enqueue_scripts', [ $this, 'field_dependencies' ] );
add_filter( 'kirki_field_add_control_args', [ $this, 'field_add_control_args' ] );
}
/**
* Filter control arguments.
*
* @access public
* @since 1.0.0
* @param array $args The field arguments.
* @return array
*/
public function field_add_control_args( $args ) {
if ( isset( $args['active_callback'] ) ) {
if ( is_array( $args['active_callback'] ) ) {
if ( ! is_callable( $args['active_callback'] ) ) {
// Bugfix for https://github.com/aristath/kirki/issues/1961.
foreach ( $args['active_callback'] as $key => $val ) {
if ( is_callable( $val ) ) {
unset( $args['active_callback'][ $key ] );
}
}
if ( isset( $args['active_callback'][0] ) ) {
$args['required'] = $args['active_callback'];
}
}
}
if ( ! empty( $args['required'] ) ) {
$this->dependencies[ $args['settings'] ] = $args['required'];
$args['active_callback'] = '__return_true';
return $args;
}
// No need to proceed any further if we're using the default value.
if ( '__return_true' === $args['active_callback'] ) {
return $args;
}
// Make sure the function is callable, otherwise fallback to __return_true.
if ( ! is_callable( $args['active_callback'] ) ) {
$args['active_callback'] = '__return_true';
}
} else {
// The ReactSelect field triggered from Background field doesn't have $args['active_callback'] argument.
if ( ! empty( $args['required'] ) ) {
$this->dependencies[ $args['settings'] ] = $args['required'];
}
}
return $args;
}
/**
* Enqueues the field-dependencies script
* and adds variables to it using the wp_localize_script function.
* The rest is handled via JS.
*
* @access public
* @return void
*/
public function field_dependencies() {
wp_enqueue_script( 'kirki_field_dependencies', URL::get_from_path( dirname( __DIR__ ) . '/dist/control.js' ), [ 'jquery', 'customize-base', 'customize-controls' ], '4.0', true );
wp_localize_script( 'kirki_field_dependencies', 'kirkiControlDependencies', $this->dependencies );
}
}

View file

@ -0,0 +1,323 @@
var kirkiDependencies = {
dependencyControls: {},
init: function () {
var self = this;
_.each(
window.kirkiControlDependencies,
function (requirements, dependantID) {
var control = wp.customize.control(dependantID);
if (control) {
requirements = self.addSettingLink(requirements);
wp.customize.control(dependantID).params.required = requirements;
self.showKirkiControl(control);
}
}
);
_.each(self.dependencyControls, function (dependency, dependencySetting) {
_.each(dependency.childrens, function (childrenSetting) {
wp.customize(dependency.settingLink, function (setting) {
var setupControl = function (control) {
var setActiveState;
var isDisplayed;
isDisplayed = function () {
return self.showKirkiControl(
wp.customize.control(childrenSetting)
);
};
setActiveState = function () {
control.active.set(isDisplayed());
};
setActiveState();
setting.bind(setActiveState);
control.active.validate = isDisplayed;
};
wp.customize.control(childrenSetting, setupControl);
});
});
});
},
/**
* Get the actual customize setting link of a control.
*
* @since 1.0.3
* @param {string} controlID The ID of the control.
* @return {string} The setting link.
*/
getSettingLink: function (controlID) {
var control = document.querySelector(
'[data-kirki-setting="' + controlID + '"]'
);
var setting = controlID;
if (control) {
if (controlID !== control.dataset.kirkiSettingLink) {
setting = control.dataset.kirkiSettingLink;
}
}
return setting;
},
addSettingLink: function (requirements) {
const self = this;
requirements.forEach(function (requirement, requirementIndex) {
if (requirement.setting) {
requirements[requirementIndex].settingLink = self.getSettingLink(
requirement.setting
);
} else {
// If `requirement` is an array, then it has nested dependencies, so let's loop it.
if (requirement.length) {
requirements[requirementIndex] = self.addSettingLink(
requirements[requirementIndex]
);
}
}
});
return requirements;
},
/**
* Should we show the control?
*
* @since 3.0.17
* @param {string|object} control - The control-id or the control object.
* @returns {bool} - Whether the control should be shown or not.
*/
showKirkiControl: function (control) {
const self = this;
let show = true;
let i;
if (_.isString(control)) {
control = wp.customize.control(control);
}
// Exit early if control not found or if "required" argument is not defined.
if (
"undefined" === typeof control ||
(control.params && _.isEmpty(control.params.required))
) {
return true;
}
// Loop control requirements.
for (i = 0; i < control.params.required.length; i++) {
if (!self.checkCondition(control.params.required[i], control, "AND")) {
show = false;
}
}
return show;
},
/**
* Check a condition.
*
* @param {Object} dependency - The dependency, inherited from showKirkiControl.
* @param {Object} dependantControl - The dependant control object.
* @param {string} relation - Can be one of 'AND' or 'OR'.
* @returns {bool} - Returns the results of the condition checks.
*/
checkCondition: function (dependency, dependantControl, relation) {
let self = this;
let childRelation = "AND" === relation ? "OR" : "AND";
let nestedItems;
let value;
let i;
// If dependency has nested dependants, we need to process them separately.
if (
"undefined" !== typeof dependency[0] &&
"undefined" === typeof dependency.setting
) {
nestedItems = [];
// Loop sub-dependencies.
for (i = 0; i < dependency.length; i++) {
nestedItems.push(
self.checkCondition(dependency[i], dependantControl, childRelation)
);
}
// OR relation. Check that true is part of the array.
if ("OR" === childRelation) {
return -1 !== nestedItems.indexOf(true);
}
// AND relation. Check that false is not part of the array.
return -1 === nestedItems.indexOf(false);
} // End of nested dependants processing.
if ("undefined" === typeof wp.customize.control(dependency.setting)) {
// Early exit if setting is not defined.
return true;
}
if (!self.dependencyControls[dependency.setting]) {
self.dependencyControls[dependency.setting] = {
settingLink: dependency.settingLink,
childrens: [],
};
}
if (
!self.dependencyControls[dependency.setting].childrens.includes(
dependantControl.id
)
) {
self.dependencyControls[dependency.setting].childrens.push(
dependantControl.id
);
}
if (!dependency.settingLink) {
// console.log(dependency);
// console.log(dependantControl);
console.log(self.dependencyControls);
console.log("--------");
}
value = wp.customize(dependency.settingLink).get();
if (wp.customize.control(dependency.setting).setting) {
value = wp.customize.control(dependency.setting).setting._value;
}
return self.evaluate(
dependency.value,
value,
dependency.operator,
dependency.choice
);
},
/**
* Figure out if the 2 values have the relation we want.
*
* @since 3.0.17
* @param {mixed} value1 - The 1st value.
* @param {mixed} value2 - The 2nd value.
* @param {string} operator - The comparison to use.
* @param {string} choice - If we want to check an item in an object value.
* @returns {bool} - Returns the evaluation result.
*/
evaluate: function (value1, value2, operator, choice) {
var found = false;
if (choice && "object" === typeof value2) {
value2 = value2[choice];
}
if ("===" === operator) {
return value1 === value2;
}
if (
"==" === operator ||
"=" === operator ||
"equals" === operator ||
"equal" === operator
) {
return value1 == value2;
}
if ("!==" === operator) {
return value1 !== value2;
}
if ("!=" === operator || "not equal" === operator) {
return value1 != value2;
}
if (
">=" === operator ||
"greater or equal" === operator ||
"equal or greater" === operator
) {
return value2 >= value1;
}
if (
"<=" === operator ||
"smaller or equal" === operator ||
"equal or smaller" === operator
) {
return value2 <= value1;
}
if (">" === operator || "greater" === operator) {
return value2 > value1;
}
if ("<" === operator || "smaller" === operator) {
return value2 < value1;
}
if ("contains" === operator || "in" === operator) {
if (_.isArray(value1) && _.isArray(value2)) {
_.each(value2, function (value) {
if (value1.includes(value)) {
found = true;
return false;
}
});
return found;
}
if (_.isArray(value2)) {
_.each(value2, function (value) {
if (value == value1) {
// jshint ignore:line
found = true;
}
});
return found;
}
if (_.isObject(value2)) {
if (!_.isUndefined(value2[value1])) {
found = true;
}
_.each(value2, function (subValue) {
if (value1 === subValue) {
found = true;
}
});
return found;
}
if (_.isString(value2)) {
if (_.isString(value1)) {
return -1 < value1.indexOf(value2) && -1 < value2.indexOf(value1);
}
return -1 < value1.indexOf(value2);
}
}
if ("does not contain" === operator || "not in" === operator) {
return !this.evaluate(value1, value2, "contains", choice);
}
return value1 == value2;
},
};
jQuery(document).ready(function () {
kirkiDependencies.init();
});