You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
5.6 KiB
PHP

<?php
/**
* Heading Module Definition.
*
* @since 4.22.0
*
* @package Divi Builder
*/
/**
* Class ET_Builder_Module_Heading
*/
class ET_Builder_Module_Heading extends ET_Builder_Module {
/**
* Init the module.
*
* @inherit
*
* @return void
*/
public function init() {
$this->name = esc_html__( 'Heading', 'et_builder' );
$this->plural = esc_html__( 'Headings', 'et_builder' );
$this->slug = 'et_pb_heading';
$this->vb_support = 'on';
$this->settings_modal_toggles = array(
'general' => array(
'toggles' => array(
'main_content' => et_builder_i18n( 'Text' ),
),
),
'custom_css' => array(
'toggles' => array(
'attributes' => array(
'title' => esc_html__( 'Attributes', 'et_builder' ),
'priority' => 95,
),
),
),
);
$this->advanced_fields = array(
'fonts' => array(
'title' => array(
'label' => et_builder_i18n( 'Heading' ),
'css' => array(
'main' => [
'%%order_class%% .et_pb_heading_container h1',
'%%order_class%% .et_pb_heading_container h2',
'%%order_class%% .et_pb_heading_container h3',
'%%order_class%% .et_pb_heading_container h4',
'%%order_class%% .et_pb_heading_container h5',
'%%order_class%% .et_pb_heading_container h6',
],
),
'font_size' => array(
'default' => '30px',
),
'line_height' => array(
'default' => '1em',
),
'letter_spacing' => array(
'default' => '0px',
),
'header_level' => array(
'default' => 'h1',
'label' => esc_html__( 'Heading Level', 'et_builder' ),
),
),
),
'background' => array(
'options' => array(
'parallax_method' => array(
'default' => 'off',
),
),
),
'margin_padding' => array(
'css' => array(
'important' => 'all',
),
),
'max_width' => array(
'css' => array(
'important' => 'all',
),
),
'text' => array(
'use_text_orientation' => false,
'use_background_layout' => false,
'css' => array(
'main' => [
'%%order_class%% h1',
'%%order_class%% h2',
'%%order_class%% h3',
'%%order_class%% h4',
'%%order_class%% h5',
'%%order_class%% h6',
],
),
),
'box_shadow' => array(
'default' => array(),
),
'position_fields' => array(
'default' => 'relative',
),
'link_options' => false,
'filters' => false,
);
$this->custom_css_fields = array(
'main_element' => [
'label' => et_builder_i18n( 'Main Element' ),
'selector' => implode(
',',
[
'%%order_class%% h1',
'%%order_class%% h2',
'%%order_class%% h3',
'%%order_class%% h4',
'%%order_class%% h5',
'%%order_class%% h6',
]
),
],
'heading_container' => array(
'label' => esc_html__( 'Heading Container', 'et_builder' ),
'selector' => '.et_pb_heading_container',
),
);
}
/**
* Fields definition.
*
* @return array
*/
public function get_fields() {
$fields = array(
'title' => array(
'label' => et_builder_i18n( 'Heading' ),
'type' => 'text',
'option_category' => 'basic_option',
'description' => esc_html__( 'Enter your page title here.', 'et_builder' ),
'toggle_slug' => 'main_content',
'dynamic_content' => 'text',
'mobile_options' => true,
'hover' => 'tabs',
),
);
return $fields;
}
/**
* Renders the module output.
*
* @param array $attrs List of attributes.
* @param string $content Content being processed.
* @param string $render_slug Slug of module that is used for rendering output.
*
* @return string
*/
public function render( $attrs, $content, $render_slug ) {
$multi_view = et_pb_multi_view_options( $this );
// Allowing full html for backwards compatibility.
$title = $this->_esc_attr( 'title', 'full' );
$header_level = $this->props['title_level'];
$video_background = $this->video_background();
$title = $multi_view->render_element(
array(
'tag' => et_pb_process_header_level( $header_level, 'h1' ),
'content' => '{{title}}',
'attrs' => array(
'class' => 'et_pb_module_heading',
),
)
);
// Background layout class names.
$background_layout_class_names = et_pb_background_layout_options()->get_background_layout_class( $this->props );
$this->add_classname( $background_layout_class_names );
$video_background = $this->video_background();
$parallax_image_background = $this->get_parallax_image_background();
// Background layout data attributes.
$data_background_layout = et_pb_background_layout_options()->get_background_layout_attrs( $this->props );
$content = $multi_view->render_element(
array(
'tag' => 'div',
'content' => $title,
'attrs' => array(
'class' => 'et_pb_heading_container',
),
)
);
$output = sprintf(
'<div%3$s class="%2$s"%6$s>
%5$s
%4$s
%7$s
%8$s
%1$s
</div>',
/* 01 */ $content,
/* 02 */ $this->module_classname( $render_slug ),
/* 03 */ $this->module_id(),
/* 04 */ $video_background,
/* 05 */ $parallax_image_background,
/* 06 */ et_core_esc_previously( $data_background_layout ),
/* 07 */ et_core_esc_previously( $this->background_pattern() ),
/* 08 */ et_core_esc_previously( $this->background_mask() )
);
return $output;
}
}
if ( et_builder_should_load_all_module_data() ) {
new ET_Builder_Module_Heading();
}