mirror of
https://ghproxy.net/https://github.com/AlxMedia/curver.git
synced 2025-08-28 04:06:16 +08:00
Update to Kirki 4.2.0
This commit is contained in:
parent
cbfd4f27e4
commit
77ecd4ca69
440 changed files with 6230 additions and 5211 deletions
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2019 kirki-framework
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
2
functions/kirki/kirki-packages/module-field-dependencies/dist/control.js
vendored
Normal file
2
functions/kirki/kirki-packages/module-field-dependencies/dist/control.js
vendored
Normal 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
|
1
functions/kirki/kirki-packages/module-field-dependencies/dist/control.js.map
vendored
Normal file
1
functions/kirki/kirki-packages/module-field-dependencies/dist/control.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,109 @@
|
|||
<?php
|
||||
/**
|
||||
* Automatic field-dependencies scripts calculation for Kirki controls.
|
||||
*
|
||||
* @package kirki-framework/module-field-dependencies
|
||||
* @author Themeum
|
||||
* @copyright Copyright (c) 2023, Themeum
|
||||
* @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 );
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue