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' ), ], ]; } }