mirror of
https://github.com/lubuntu-team/lubuntu.me.git
synced 2025-02-23 16:21:07 +00:00
302 lines
7.7 KiB
PHP
302 lines
7.7 KiB
PHP
|
<?php
|
||
|
namespace Elementor;
|
||
|
|
||
|
use Elementor\Core\Settings\Manager as SettingsManager;
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // Exit if accessed directly.
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Elementor typography control.
|
||
|
*
|
||
|
* A base control for creating typography control. Displays input fields to define
|
||
|
* the content typography including font size, font family, font weight, text
|
||
|
* transform, font style, line height and letter spacing.
|
||
|
*
|
||
|
* Creating new control in the editor (inside `Widget_Base::_register_controls()`
|
||
|
* method):
|
||
|
*
|
||
|
* $this->add_group_control(
|
||
|
* Group_Control_Typography::get_type(),
|
||
|
* [
|
||
|
* 'name' => 'content_typography',
|
||
|
* 'scheme' => Scheme_Typography::TYPOGRAPHY_1,
|
||
|
* 'selector' => '{{WRAPPER}} .text',
|
||
|
* 'separator' => 'before',
|
||
|
* ]
|
||
|
* );
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
*
|
||
|
* @param string $name The field name.
|
||
|
* @param string $separator Optional. Set the position of the control separator.
|
||
|
* Available values are 'default', 'before', 'after'
|
||
|
* and 'none'. 'default' will position the separator
|
||
|
* depending on the control type. 'before' / 'after'
|
||
|
* will position the separator before/after the
|
||
|
* control. 'none' will hide the separator. Default
|
||
|
* is 'default'.
|
||
|
*/
|
||
|
class Group_Control_Typography extends Group_Control_Base {
|
||
|
|
||
|
/**
|
||
|
* Fields.
|
||
|
*
|
||
|
* Holds all the typography control fields.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access protected
|
||
|
* @static
|
||
|
*
|
||
|
* @var array Typography control fields.
|
||
|
*/
|
||
|
protected static $fields;
|
||
|
|
||
|
/**
|
||
|
* Scheme fields keys.
|
||
|
*
|
||
|
* Holds all the typography control scheme fields keys.
|
||
|
* Default is an array containing `font_family` and `font_weight`.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access private
|
||
|
* @static
|
||
|
*
|
||
|
* @var array Typography control scheme fields keys.
|
||
|
*/
|
||
|
private static $_scheme_fields_keys = [ 'font_family', 'font_weight' ];
|
||
|
|
||
|
/**
|
||
|
* Retrieve scheme fields keys.
|
||
|
*
|
||
|
* Get all the available typography control scheme fields keys.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return string Scheme fields keys.
|
||
|
*/
|
||
|
public static function get_scheme_fields_keys() {
|
||
|
return self::$_scheme_fields_keys;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieve type.
|
||
|
*
|
||
|
* Get typography control type.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @access public
|
||
|
* @static
|
||
|
*
|
||
|
* @return string Control type.
|
||
|
*/
|
||
|
public static function get_type() {
|
||
|
return 'typography';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Init fields.
|
||
|
*
|
||
|
* Initialize typography control fields.
|
||
|
*
|
||
|
* @since 1.2.2
|
||
|
* @access protected
|
||
|
*
|
||
|
* @return array Control fields.
|
||
|
*/
|
||
|
protected function init_fields() {
|
||
|
$fields = [];
|
||
|
|
||
|
$default_fonts = SettingsManager::get_settings_managers( 'general' )->get_model()->get_settings( 'elementor_default_generic_fonts' );
|
||
|
|
||
|
if ( $default_fonts ) {
|
||
|
$default_fonts = ', ' . $default_fonts;
|
||
|
}
|
||
|
|
||
|
$fields['font_family'] = [
|
||
|
'label' => _x( 'Family', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::FONT,
|
||
|
'default' => '',
|
||
|
'selector_value' => 'font-family: "{{VALUE}}"' . $default_fonts . ';',
|
||
|
];
|
||
|
|
||
|
$fields['font_size'] = [
|
||
|
'label' => _x( 'Size', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SLIDER,
|
||
|
'size_units' => [ 'px', 'em', 'rem' ],
|
||
|
'range' => [
|
||
|
'px' => [
|
||
|
'min' => 1,
|
||
|
'max' => 200,
|
||
|
],
|
||
|
],
|
||
|
'responsive' => true,
|
||
|
'selector_value' => 'font-size: {{SIZE}}{{UNIT}}',
|
||
|
];
|
||
|
|
||
|
$typo_weight_options = [
|
||
|
'' => __( 'Default', 'elementor' ),
|
||
|
];
|
||
|
|
||
|
foreach ( array_merge( [ 'normal', 'bold' ], range( 100, 900, 100 ) ) as $weight ) {
|
||
|
$typo_weight_options[ $weight ] = ucfirst( $weight );
|
||
|
}
|
||
|
|
||
|
$fields['font_weight'] = [
|
||
|
'label' => _x( 'Weight', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SELECT,
|
||
|
'default' => '',
|
||
|
'options' => $typo_weight_options,
|
||
|
];
|
||
|
|
||
|
$fields['text_transform'] = [
|
||
|
'label' => _x( 'Transform', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SELECT,
|
||
|
'default' => '',
|
||
|
'options' => [
|
||
|
'' => __( 'Default', 'elementor' ),
|
||
|
'uppercase' => _x( 'Uppercase', 'Typography Control', 'elementor' ),
|
||
|
'lowercase' => _x( 'Lowercase', 'Typography Control', 'elementor' ),
|
||
|
'capitalize' => _x( 'Capitalize', 'Typography Control', 'elementor' ),
|
||
|
'none' => _x( 'Normal', 'Typography Control', 'elementor' ),
|
||
|
],
|
||
|
];
|
||
|
|
||
|
$fields['font_style'] = [
|
||
|
'label' => _x( 'Style', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SELECT,
|
||
|
'default' => '',
|
||
|
'options' => [
|
||
|
'' => __( 'Default', 'elementor' ),
|
||
|
'normal' => _x( 'Normal', 'Typography Control', 'elementor' ),
|
||
|
'italic' => _x( 'Italic', 'Typography Control', 'elementor' ),
|
||
|
'oblique' => _x( 'Oblique', 'Typography Control', 'elementor' ),
|
||
|
],
|
||
|
];
|
||
|
|
||
|
$fields['text_decoration'] = [
|
||
|
'label' => _x( 'Decoration', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SELECT,
|
||
|
'default' => '',
|
||
|
'options' => [
|
||
|
'' => __( 'Default', 'elementor' ),
|
||
|
'underline' => _x( 'Underline', 'Typography Control', 'elementor' ),
|
||
|
'overline' => _x( 'Overline', 'Typography Control', 'elementor' ),
|
||
|
'line-through' => _x( 'Line Through', 'Typography Control', 'elementor' ),
|
||
|
'none' => _x( 'None', 'Typography Control', 'elementor' ),
|
||
|
],
|
||
|
];
|
||
|
|
||
|
$fields['line_height'] = [
|
||
|
'label' => _x( 'Line-Height', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SLIDER,
|
||
|
'default' => [
|
||
|
'unit' => 'em',
|
||
|
],
|
||
|
'range' => [
|
||
|
'px' => [
|
||
|
'min' => 1,
|
||
|
],
|
||
|
],
|
||
|
'responsive' => true,
|
||
|
'size_units' => [ 'px', 'em' ],
|
||
|
'selector_value' => 'line-height: {{SIZE}}{{UNIT}}',
|
||
|
];
|
||
|
|
||
|
$fields['letter_spacing'] = [
|
||
|
'label' => _x( 'Letter Spacing', 'Typography Control', 'elementor' ),
|
||
|
'type' => Controls_Manager::SLIDER,
|
||
|
'range' => [
|
||
|
'px' => [
|
||
|
'min' => -5,
|
||
|
'max' => 10,
|
||
|
'step' => 0.1,
|
||
|
],
|
||
|
],
|
||
|
'responsive' => true,
|
||
|
'selector_value' => 'letter-spacing: {{SIZE}}{{UNIT}}',
|
||
|
];
|
||
|
|
||
|
return $fields;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prepare fields.
|
||
|
*
|
||
|
* Process typography control fields before adding them to `add_control()`.
|
||
|
*
|
||
|
* @since 1.2.3
|
||
|
* @access protected
|
||
|
*
|
||
|
* @param array $fields Typography control fields.
|
||
|
*
|
||
|
* @return array Processed fields.
|
||
|
*/
|
||
|
protected function prepare_fields( $fields ) {
|
||
|
array_walk(
|
||
|
$fields, function( &$field, $field_name ) {
|
||
|
if ( in_array( $field_name, [ 'typography', 'popover_toggle' ] ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$selector_value = ! empty( $field['selector_value'] ) ? $field['selector_value'] : str_replace( '_', '-', $field_name ) . ': {{VALUE}};';
|
||
|
|
||
|
$field['selectors'] = [
|
||
|
'{{SELECTOR}}' => $selector_value,
|
||
|
];
|
||
|
|
||
|
$field['condition'] = [
|
||
|
'typography' => 'custom',
|
||
|
];
|
||
|
}
|
||
|
);
|
||
|
|
||
|
return parent::prepare_fields( $fields );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add group arguments to field.
|
||
|
*
|
||
|
* Register field arguments to typography control.
|
||
|
*
|
||
|
* @since 1.2.2
|
||
|
* @access protected
|
||
|
*
|
||
|
* @param string $control_id Typography control id.
|
||
|
* @param array $field_args Typography control field arguments.
|
||
|
*
|
||
|
* @return array Field arguments.
|
||
|
*/
|
||
|
protected function add_group_args_to_field( $control_id, $field_args ) {
|
||
|
$field_args = parent::add_group_args_to_field( $control_id, $field_args );
|
||
|
|
||
|
$args = $this->get_args();
|
||
|
|
||
|
if ( in_array( $control_id, self::get_scheme_fields_keys() ) && ! empty( $args['scheme'] ) ) {
|
||
|
$field_args['scheme'] = [
|
||
|
'type' => self::get_type(),
|
||
|
'value' => $args['scheme'],
|
||
|
'key' => $control_id,
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $field_args;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @since 1.9.0
|
||
|
* @access protected
|
||
|
*/
|
||
|
protected function get_default_options() {
|
||
|
return [
|
||
|
'popover' => [
|
||
|
'starter_name' => 'typography',
|
||
|
'starter_title' => _x( 'Typography', 'Typography Control', 'elementor' ),
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
}
|