363 lines
7.0 KiB
PHP
363 lines
7.0 KiB
PHP
<?php
|
|
/**
|
|
* Helpers for generating CSS output.
|
|
*
|
|
* @copyright 2019-present Creative Themes
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
|
|
* @package Blocksy
|
|
*/
|
|
|
|
function blocksy_output_responsive($args = []) {
|
|
$args = wp_parse_args(
|
|
$args,
|
|
[
|
|
'css' => null,
|
|
'tablet_css' => null,
|
|
'mobile_css' => null,
|
|
'selector' => null,
|
|
|
|
'desktop_selector_prefix' => '',
|
|
'tablet_selector_prefix' => '',
|
|
'mobile_selector_prefix' => '',
|
|
|
|
'variableName' => null,
|
|
'unit' => 'px',
|
|
'previousUnit' => '',
|
|
'value' => null,
|
|
]
|
|
);
|
|
|
|
if (empty($args['unit']) && ! empty($args['previousUnit'])) {
|
|
$value = blocksy_expand_responsive_value($args['value']);
|
|
|
|
$all_is_plain = true;
|
|
|
|
if (! is_numeric($value['desktop'])) {
|
|
$all_is_plain = false;
|
|
}
|
|
|
|
if (! is_numeric($value['tablet'])) {
|
|
$all_is_plain = false;
|
|
}
|
|
|
|
if (! is_numeric($value['mobile'])) {
|
|
$all_is_plain = false;
|
|
}
|
|
|
|
if ($all_is_plain) {
|
|
$args['unit'] = $args['previousUnit'];
|
|
}
|
|
}
|
|
|
|
$args['value_suffix'] = $args['unit'];
|
|
$args['responsive'] = true;
|
|
|
|
blocksy_output_css_vars($args);
|
|
}
|
|
|
|
function blocksy_units_config($overrides = []) {
|
|
$units = [
|
|
[
|
|
'unit' => 'px',
|
|
'min' => 0,
|
|
'max' => 40,
|
|
],
|
|
[
|
|
'unit' => 'em',
|
|
'min' => 0,
|
|
'max' => 30,
|
|
],
|
|
[
|
|
'unit' => '%',
|
|
'min' => 0,
|
|
'max' => 100,
|
|
],
|
|
[
|
|
'unit' => 'vw',
|
|
'min' => 0,
|
|
'max' => 100,
|
|
],
|
|
[
|
|
'unit' => 'vh',
|
|
'min' => 0,
|
|
'max' => 100,
|
|
],
|
|
[
|
|
'unit' => 'pt',
|
|
'min' => 0,
|
|
'max' => 100,
|
|
],
|
|
[
|
|
'unit' => 'rem',
|
|
'min' => 0,
|
|
'max' => 30,
|
|
],
|
|
];
|
|
|
|
foreach ($overrides as $single_override) {
|
|
$found = false;
|
|
|
|
foreach ($units as $key => $single_unit) {
|
|
if ($single_override['unit'] === $single_unit['unit']) {
|
|
$units[$key] = $single_override;
|
|
$found = true;
|
|
}
|
|
}
|
|
|
|
if (! $found) {
|
|
$units[] = $single_override;
|
|
}
|
|
}
|
|
|
|
return $units;
|
|
}
|
|
|
|
function blocksy_output_border($args = []) {
|
|
$args = wp_parse_args(
|
|
$args,
|
|
[
|
|
'css' => null,
|
|
'tablet_css' => null,
|
|
'mobile_css' => null,
|
|
|
|
'selector' => null,
|
|
|
|
'desktop_selector_prefix' => '',
|
|
'tablet_selector_prefix' => '',
|
|
'mobile_selector_prefix' => '',
|
|
|
|
'value' => null,
|
|
'default' => null,
|
|
|
|
'variableName' => null,
|
|
'secondColorVariableName' => null,
|
|
|
|
'important' => false,
|
|
'responsive' => false,
|
|
'skip_none' => false
|
|
]
|
|
);
|
|
|
|
if (! $args['default']) {
|
|
return;
|
|
}
|
|
|
|
if ($args['responsive']) {
|
|
blocksy_assert_args($args, ['tablet_css', 'mobile_css']);
|
|
}
|
|
|
|
$value = blocksy_expand_responsive_value($args['value']);
|
|
$default_value = blocksy_expand_responsive_value($args['default']);
|
|
|
|
if (
|
|
is_array($value['desktop'])
|
|
&&
|
|
! isset($value['desktop']['style'])
|
|
) {
|
|
$value['desktop']['style'] = 'none';
|
|
}
|
|
|
|
if (! $value['desktop']) {
|
|
$value['desktop'] = $default_value['desktop'];
|
|
}
|
|
|
|
if (
|
|
isset($default_value['desktop']['secondColor'])
|
|
&&
|
|
! isset($value['desktop']['secondColor'])
|
|
) {
|
|
$value['desktop']['secondColor'] = $default_value['desktop']['secondColor'];
|
|
}
|
|
|
|
if (
|
|
is_array($value['tablet'])
|
|
&&
|
|
! isset($value['tablet']['style'])
|
|
) {
|
|
$value['tablet']['style'] = 'none';
|
|
}
|
|
|
|
if (! $value['tablet']) {
|
|
$value['tablet'] = $default_value['tablet'];
|
|
}
|
|
|
|
if (
|
|
isset($default_value['tablet']['secondColor'])
|
|
&&
|
|
! isset($value['tablet']['secondColor'])
|
|
) {
|
|
$value['tablet']['secondColor'] = $default_value['tablet']['secondColor'];
|
|
}
|
|
|
|
if (
|
|
is_array($value['mobile'])
|
|
&&
|
|
! isset($value['mobile']['style'])
|
|
) {
|
|
$value['mobile']['style'] = 'none';
|
|
}
|
|
|
|
if (! $value['mobile']) {
|
|
$value['mobile'] = $default_value['mobile'];
|
|
}
|
|
|
|
if (
|
|
isset($default_value['mobile']['secondColor'])
|
|
&&
|
|
! isset($value['mobile']['secondColor'])
|
|
) {
|
|
$value['mobile']['secondColor'] = $default_value['mobile']['secondColor'];
|
|
}
|
|
|
|
$border_values = [
|
|
'desktop' => '',
|
|
'tablet' => '',
|
|
'mobile' => '',
|
|
];
|
|
|
|
if ($value['desktop']['style'] === 'none') {
|
|
$border_values['desktop'] = 'none';
|
|
|
|
if (isset($default_value['desktop']['secondColor'])) {
|
|
$value['desktop']['secondColor']['color'] = 'CT_CSS_SKIP_RULE';
|
|
}
|
|
} else {
|
|
$color = blocksy_get_colors([
|
|
'default' => $value['desktop']['color']
|
|
], [
|
|
'default' => $value['desktop']['color']
|
|
]);
|
|
|
|
$border_values['desktop'] = $value['desktop']['width'] . 'px ' .
|
|
$value['desktop']['style'] . ' ' . $color['default'];
|
|
}
|
|
|
|
if (
|
|
isset($value['desktop']['inherit'])
|
|
&&
|
|
$value['desktop']['inherit']
|
|
) {
|
|
$border_values['desktop'] = 'CT_CSS_SKIP_RULE';
|
|
}
|
|
|
|
if ($value['tablet']['style'] === 'none') {
|
|
$border_values['tablet'] = 'none';
|
|
if (isset($default_value['tablet']['secondColor'])) {
|
|
$value['tablet']['secondColor']['color'] = 'CT_CSS_SKIP_RULE';
|
|
}
|
|
} else {
|
|
$color = blocksy_get_colors([
|
|
'default' => $value['tablet']['color']
|
|
], [
|
|
'default' => $value['tablet']['color']
|
|
]);
|
|
|
|
$border_values['tablet'] = $value['tablet']['width'] . 'px ' .
|
|
$value['tablet']['style'] . ' ' . $color['default'];
|
|
}
|
|
|
|
if (
|
|
isset($value['tablet']['inherit'])
|
|
&&
|
|
$value['tablet']['inherit']
|
|
) {
|
|
$border_values['tablet'] = 'CT_CSS_SKIP_RULE';
|
|
}
|
|
|
|
if ($value['mobile']['style'] === 'none') {
|
|
$border_values['mobile'] = 'none';
|
|
if (isset($default_value['mobile']['secondColor'])) {
|
|
$value['mobile']['secondColor']['color'] = 'CT_CSS_SKIP_RULE';
|
|
}
|
|
} else {
|
|
$color = blocksy_get_colors([
|
|
'default' => $value['mobile']['color']
|
|
], [
|
|
'default' => $value['mobile']['color']
|
|
]);
|
|
|
|
$border_values['mobile'] = $value['mobile']['width'] . 'px ' .
|
|
$value['mobile']['style'] . ' ' . $color['default'];
|
|
}
|
|
|
|
if (
|
|
isset($value['mobile']['inherit'])
|
|
&&
|
|
$value['mobile']['inherit']
|
|
) {
|
|
$border_values['mobile'] = 'CT_CSS_SKIP_RULE';
|
|
}
|
|
|
|
$args['value'] = $border_values;
|
|
|
|
if ($args['skip_none']) {
|
|
if (
|
|
$border_values['desktop'] === 'none'
|
|
&&
|
|
$border_values['tablet'] === 'none'
|
|
&&
|
|
$border_values['mobile'] === 'none'
|
|
) {
|
|
$args['value'] = [
|
|
'desktop' => 'CT_CSS_SKIP_RULE',
|
|
'tablet' => 'CT_CSS_SKIP_RULE',
|
|
'mobile' => 'CT_CSS_SKIP_RULE'
|
|
];
|
|
}
|
|
}
|
|
|
|
if ($args['important']) {
|
|
$args['value_suffix'] = ' !important';
|
|
}
|
|
|
|
if (
|
|
isset($value['desktop']['secondColor'])
|
|
&&
|
|
$value['desktop']['secondColor']
|
|
) {
|
|
$secondColorValue = [
|
|
'desktop' => [
|
|
'default' => $value['desktop']['secondColor']
|
|
],
|
|
'tablet' => [
|
|
'default' => $value['tablet']['secondColor']
|
|
],
|
|
'mobile' => [
|
|
'default' => $value['mobile']['secondColor']
|
|
]
|
|
];
|
|
|
|
blocksy_output_colors([
|
|
'value' => $secondColorValue,
|
|
'default' => $secondColorValue,
|
|
|
|
'css' => $args['css'],
|
|
'tablet_css' => $args['tablet_css'],
|
|
'mobile_css' => $args['mobile_css'],
|
|
|
|
'responsive' => $args['responsive'],
|
|
'variables' => [
|
|
'default' => [
|
|
'selector' => $args['selector'],
|
|
'variable' => $args['secondColorVariableName']
|
|
],
|
|
],
|
|
]);
|
|
}
|
|
|
|
blocksy_output_css_vars($args);
|
|
}
|
|
|
|
function blocksy_maybe_append_important($value, $has_important = false) {
|
|
if (! $has_important) {
|
|
return $value;
|
|
}
|
|
|
|
if (strpos($value, 'CT_CSS_SKIP_RULE') !== false) {
|
|
return $value;
|
|
}
|
|
|
|
return $value . ' !important';
|
|
}
|
|
|