ProShell v2.0
Dashboard
Server Info
Server: 158.106.128.192
PHP: 8.2.33
home
planet5
public_html
bansibaba.com
wp-includes
2026-09-16 23:50:07
Editing: MarginPadding.php
Cancel
Save Changes
<?php /** * Module Margin and Padding class. * * This is not how main module margin and padding is generated. Mostly used by other custom options * group such as Button and Field Input. Doesn't support selective padding yet. * * Copy of ET_Builder_Element::process_advanced_custom_margin_options(). * * @since 3.23 * @since 4.6.0 Add sticky style support */ class ET_Builder_Module_Field_MarginPadding extends ET_Builder_Module_Field_Base { /** * True when Divi plugin is active. * * @since 3.23 * * @var bool */ public $is_plugin_active = false; /** * Margin padding properties. * * @since 3.23 * * @var array */ public $properties; /** * Margin padding config. * * @since 3.23 * * @var array */ public $config; /** * Constructor. */ public function __construct() { $this->is_plugin_active = et_is_builder_plugin_active(); $this->properties = array( 'custom_padding', 'custom_padding_tablet', 'custom_padding_phone', 'custom_padding_last_edited', 'custom_margin', 'custom_margin_tablet', 'custom_margin_phone', 'custom_margin_last_edited', 'padding_1_last_edited', 'padding_2_last_edited', 'padding_3_last_edited', 'padding_4_last_edited', ); $this->config = array( 'label' => '', 'prefix' => '', 'tab_slug' => 'advanced', 'toggle_slug' => 'margin_padding', 'sub_toggle' => null, 'option_category' => 'layout', 'depends_show_if' => '', 'depends_show_if_not' => '', 'use_padding' => true, 'use_margin' => true, 'mobile_options' => true, 'sticky' => true, 'hover' => 'tabs', 'custom_padding' => '', 'custom_margin' => '', 'depends_show_if' => 'on', 'priority' => 90, ); } /** * Returns prefixed field names. * * @since 3.23 * * @param string $prefix Prefix. * * @return array */ public function get_prefixed_field_names( $prefix ) { $prefix = $prefix ? "{$prefix}_" : ''; return array( "{$prefix}custom_padding", "{$prefix}custom_padding_tablet", "{$prefix}custom_padding_phone", "{$prefix}custom_padding_last_edited", "{$prefix}custom_margin", "{$prefix}custom_margin_tablet", "{$prefix}custom_margin_phone", "{$prefix}custom_margin_last_edited", "{$prefix}padding_1_last_edited", "{$prefix}padding_2_last_edited", "{$prefix}padding_3_last_edited", "{$prefix}padding_4_last_edited", ); } /** * Add selector prefix if needed. * * @since 3.23 * * Custom margin & padding selector for button element. This is custom selector exist on * ET_Builder_Element. We should do the samething to override hardcoded padding generated * by button element. * * @see ET_Builder_Element::process_advanced_button_options */ public function get_prefixed_selector( $css_element, $type = '', $is_divi_builder_plugin = false ) { // See ET_Builder_Element->process_advanced_button_options() on generating $css_element_processed // for non Divi Builder Plugin. Explicitly add '.et_pb_section' to the selector so selector // splitting during prefixing does not incorrectly add third party classes before #et-boc. if ( 'button' === $type && ! $is_divi_builder_plugin ) { $css_element = "body #page-container .et_pb_section {$css_element}"; } return $css_element; } /** * Returns fields definition. * * @since 3.23 * * @param array $args Field configuration. * * @return array */ public function get_fields( array $args = array() ) { $fields = array(); $config = wp_parse_args( $args, $this->config ); // Config details. $tab_slug = $config['tab_slug']; $toggle_slug = $config['toggle_slug']; $sub_toggle = $config['sub_toggle']; list( $custom_padding, $custom_padding_tablet, $custom_padding_phone, $custom_padding_last_edited, $custom_margin, $custom_margin_tablet, $custom_margin_phone, $custom_margin_last_edited, $padding_1_last_edited, $padding_2_last_edited, $padding_3_last_edited, $padding_4_last_edited, ) = $this->get_prefixed_field_names( $config['prefix'] ); // Custom margin. if ( $config['use_margin'] ) { $fields[ $custom_margin ] = array( 'label' => sprintf( esc_html__( '%1$s Margin', 'et_builder' ), $config['label'] ), 'description' => esc_html__( 'Margin adds extra space to the outside of the element, increasing the distance between the element and other items on the page.', 'et_builder' ), 'type' => 'custom_margin', 'option_category' => $config['option_category'], 'mobile_options' => $config['mobile_options'], 'hover' => $config['hover'], 'sticky' => $config['sticky'], 'depends_show_if' => $config['depends_show_if'], 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, 'sub_toggle' => $sub_toggle, 'priority' => $config['priority'], ); $fields[ $custom_margin_tablet ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, ); $fields[ $custom_margin_phone ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); // Make it possible to override/add options. if ( ! empty( $config['custom_margin'] ) ) { $fields[ $custom_margin ] = array_merge( $fields[ $custom_margin ], $config['custom_margin'] ); } $fields[ $custom_margin_last_edited ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); $fields[ $padding_1_last_edited ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); $fields[ $padding_2_last_edited ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); $fields[ $padding_3_last_edited ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); $fields[ $padding_4_last_edited ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); } // Custom padding. if ( $config['use_padding'] ) { $fields[ $custom_padding ] = array( 'label' => sprintf( esc_html__( '%1$s Padding', 'et_builder' ), $config['label'] ), 'description' => esc_html__( 'Padding adds extra space to the inside of the element, increasing the distance between the edge of the element and its inner contents.', 'et_builder' ), 'type' => 'custom_padding', 'option_category' => $config['option_category'], 'mobile_options' => $config['mobile_options'], 'hover' => $config['hover'], 'sticky' => $config['sticky'], 'depends_show_if' => $config['depends_show_if'], 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, 'sub_toggle' => $sub_toggle, 'priority' => $config['priority'], ); if ( isset( $config['depends_on'] ) && '' !== $config['depends_on'] ) { $fields[ $custom_padding ]['depends_on'] = $config['depends_on']; } $fields[ $custom_padding_tablet ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); $fields[ $custom_padding_phone ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); // Make it possible to override/add options. if ( ! empty( $config['custom_padding'] ) ) { $fields[ $custom_padding ] = array_merge( $fields[ $custom_padding ], $config['custom_padding'] ); } $fields[ $custom_padding_last_edited ] = array( 'type' => 'skip', 'tab_slug' => $tab_slug, 'toggle_slug' => $toggle_slug, ); } return $fields; } /** * Adds CSS rule. * * @since 3.23 * @since 4.6.0 Add sticky style support * * @see ET_Builder_Element->process_advanced_custom_margin_options() * * @param ET_Builder_Element $module Module object. * @param string $prefix Label. * @param array $options Field settings. * @param string $function_name Shortcode function. * @param string $type Margin padding type. */ public function update_styles( $module, $prefix, $options, $function_name, $type ) { $utils = ET_Core_Data_Utils::instance(); $all_values = $module->props; $hover = et_pb_hover_options(); $sticky = et_pb_sticky_options(); $responsive = ET_Builder_Module_Helper_ResponsiveOptions::instance(); $advanced_fields = $module->advanced_fields; $css = isset( $this->advanced_fields['margin_padding']['css'] ) ? $this->advanced_fields['margin_padding']['css'] : array(); // Conditional status. $is_divi_builder_plugin = et_is_builder_plugin_active(); $is_important_set = isset( $options['css']['important'] ); $is_global_important = $is_important_set && 'all' === $options['css']['important']; $is_use_padding = $utils->array_get( $options, 'use_padding', true ); $is_use_margin = $utils->array_get( $options, 'use_margin', true ); $is_sticky_module = $sticky->is_sticky_module( $all_values ); // Selectors. $main_selector = ! empty( $options['css']['main'] ) ? $options['css']['main'] : $module->main_css_element; $limited_selector = ! empty( $options['css']['limited_main'] ) ? $options['css']['limited_main'] : ''; $default_selector = $is_divi_builder_plugin && ! empty( $limited_selector ) ? $limited_selector : $main_selector; // Get important CSS list. $important_options = array(); if ( $is_important_set && is_array( $options['css']['important'] ) ) { $important_options = $options['css']['important']; } // A. Padding. if ( $is_use_padding ) { // Padding Selectors. $padding_selector = ! empty( $options['css']['padding'] ) ? $options['css']['padding'] : $default_selector; $padding_selector_processed = $this->get_prefixed_selector( $padding_selector, $type, $is_divi_builder_plugin ); if ( $is_divi_builder_plugin && ! empty( $limited_selector ) ) { $padding_selector_processed = $padding_selector; } // A.1. Responsive Padding. $is_padding_responsive = $responsive->is_responsive_enabled( $all_values, "{$prefix}_custom_padding" ); $padding_desktop = $responsive->get_any_value( $all_values, "{$prefix}_custom_padding" ); $padding_tablet = $is_padding_responsive ? $responsive->get_any_value( $all_values, "{$prefix}_custom_padding_tablet" ) : ''; $padding_phone = $is_padding_responsive ? $responsive->get_any_value( $all_values, "{$prefix}_custom_padding_phone" ) : ''; $important = in_array( 'custom_padding', $important_options ) || $is_global_important ? true : false; $padding_styles = array( 'desktop' => '' !== $padding_desktop ? rtrim( et_builder_get_element_style_css( $padding_desktop, 'padding', $important ) ) : '', 'tablet' => '' !== $padding_tablet ? rtrim( et_builder_get_element_style_css( $padding_tablet, 'padding', $important ) ) : '', 'phone' => '' !== $padding_phone ? rtrim( et_builder_get_element_style_css( $padding_phone, 'padding', $important ) ) : '', ); $responsive->declare_responsive_css( $padding_styles, $padding_selector_processed, $function_name, $module->get_style_priority() ); // A.2. Hover Padding. $custom_padding_hover = $hover->get_value( "{$prefix}_custom_padding", $all_values, '' ); if ( '' !== $custom_padding_hover && et_builder_is_hover_enabled( "{$prefix}_custom_padding", $all_values ) ) { $padding_hover_selector = $utils->array_get( $options, 'css.hover', $hover->add_hover_to_selectors( $padding_selector ) ); $padding_hover_selector_processed = $this->get_prefixed_selector( $padding_hover_selector, $type, $is_divi_builder_plugin ); if ( $is_divi_builder_plugin && ! empty( $limited_selector ) ) { $padding_hover_selector_processed = $padding_hover_selector; } $el_style = array( 'selector' => $padding_hover_selector_processed, 'declaration' => rtrim( et_builder_get_element_style_css( $custom_padding_hover, 'padding', true ) ), 'priority' => 20, ); ET_Builder_Element::set_style( $function_name, $el_style ); } // A.3. Sticky Padding. $custom_padding_sticky = $sticky->get_value( "{$prefix}_custom_padding", $all_values, '' ); if ( '' !== $custom_padding_sticky && $sticky->is_enabled( "{$prefix}_custom_padding", $all_values ) ) { $padding_sticky_selector = $sticky->add_sticky_to_order_class( $padding_selector, $is_sticky_module ); $padding_sticky_selector_processed = $this->get_prefixed_selector( $padding_sticky_selector, $type, $is_divi_builder_plugin ); if ( $is_divi_builder_plugin && ! empty( $limited_selector ) ) { $padding_sticky_selector_processed = $padding_sticky_selector; } ET_Builder_Element::set_style( $function_name, array( 'selector' => $padding_sticky_selector_processed, 'declaration' => rtrim( et_builder_get_element_style_css( $custom_padding_sticky, 'padding', true ) ), 'priority' => 20, ) ); } } // B. Margin. if ( $is_use_margin ) { // Margin Selectors. $margin_selector = ! empty( $options['css']['margin'] ) ? $options['css']['margin'] : $default_selector; $margin_selector_processed = $this->get_prefixed_selector( $margin_selector, $type, $is_divi_builder_plugin ); if ( $is_divi_builder_plugin && ! empty( $limited_selector ) ) { $margin_selector_processed = $margin_selector; } // A.1. Responsive margin. $is_margin_responsive = $responsive->is_responsive_enabled( $all_values, "{$prefix}_custom_margin" ); $margin_desktop = $responsive->get_any_value( $all_values, "{$prefix}_custom_margin" ); $margin_tablet = $is_margin_responsive ? $responsive->get_any_value( $all_values, "{$prefix}_custom_margin_tablet" ) : ''; $margin_phone = $is_margin_responsive ? $responsive->get_any_value( $all_values, "{$prefix}_custom_margin_phone" ) : ''; $important = in_array( 'custom_margin', $important_options ) || $is_global_important ? true : false; $margin_styles = array( 'desktop' => '' !== $margin_desktop ? rtrim( et_builder_get_element_style_css( $margin_desktop, 'margin', $important ) ) : '', 'tablet' => '' !== $margin_tablet ? rtrim( et_builder_get_element_style_css( $margin_tablet, 'margin', $important ) ) : '', 'phone' => '' !== $margin_phone ? rtrim( et_builder_get_element_style_css( $margin_phone, 'margin', $important ) ) : '', ); $responsive->declare_responsive_css( $margin_styles, $margin_selector_processed, $function_name, $module->get_style_priority() ); // A.2. Hover margin. $custom_margin_hover = $hover->get_value( "{$prefix}_custom_margin", $all_values, '' ); if ( '' !== $custom_margin_hover && et_builder_is_hover_enabled( "{$prefix}_custom_margin", $all_values ) ) { $margin_hover_selector = $utils->array_get( $options, 'css.hover', $hover->add_hover_to_selectors( $margin_selector ) ); $margin_hover_selector_processed = $this->get_prefixed_selector( $margin_hover_selector, $type, $is_divi_builder_plugin ); if ( $is_divi_builder_plugin && ! empty( $limited_selector ) ) { $margin_hover_selector_processed = $margin_hover_selector; } $el_style = array( 'selector' => $margin_hover_selector_processed, 'declaration' => rtrim( et_builder_get_element_style_css( $custom_margin_hover, 'margin', true ) ), 'priority' => 20, ); ET_Builder_Element::set_style( $function_name, $el_style ); } // A.3. Hover margin. $custom_margin_sticky = $sticky->get_value( "{$prefix}_custom_margin", $all_values, '' ); if ( '' !== $custom_margin_sticky && $sticky->is_enabled( "{$prefix}_custom_margin", $all_values ) ) { $margin_sticky_selector = $sticky->add_sticky_to_order_class( $margin_selector, $is_sticky_module ); $margin_sticky_selector_processed = $this->get_prefixed_selector( $margin_sticky_selector, $type, $is_divi_builder_plugin ); if ( $is_divi_builder_plugin && ! empty( $limited_selector ) ) { $margin_sticky_selector_processed = $margin_sticky_selector; } ET_Builder_Element::set_style( $function_name, array( 'selector' => $margin_sticky_selector_processed, 'declaration' => rtrim( et_builder_get_element_style_css( $custom_margin_sticky, 'margin', true ) ), 'priority' => 20, ) ); } } } /** * Process Margin & Padding options and adds CSS rules. * * @since 3.23 * * @param ET_Builder_Element $module Module object. * @param string $function_name Shortcode function. */ public function process_advanced_css( $module, $function_name ) { $utils = ET_Core_Data_Utils::instance(); $all_values = $module->props; $advanced_fields = $module->advanced_fields; // Disable if module doesn't set advanced_fields property and has no VB support. if ( ! $module->has_vb_support() && ! $module->has_advanced_fields ) { return; } $allowed_advanced_fields = array( 'form_field', 'button', 'image_icon' ); foreach ( $allowed_advanced_fields as $advanced_field ) { if ( empty( $advanced_fields[ $advanced_field ] ) ) { continue; } foreach ( $advanced_fields[ $advanced_field ] as $label => $form_field ) { $margin_key = "{$label}_custom_margin"; $padding_key = "{$label}_custom_padding"; $multi_view = et_pb_multi_view_options( $module ); $has_margin = '' !== $utils->array_get( $all_values, $margin_key, '' ); $has_padding = '' !== $utils->array_get( $all_values, $padding_key, '' ); $has_margin_hover = $multi_view->hover_is_enabled( $margin_key ); $has_padding_hover = $multi_view->hover_is_enabled( $padding_key ); $has_padding_sticky = ! empty( et_pb_sticky_options()->get_value( "{$label}_custom_padding", $all_values, '' ) ) && et_pb_sticky_options()->is_enabled( "{$label}_custom_padding", $all_values ); $has_margin_sticky = ! empty( et_pb_sticky_options()->get_value( "{$label}_custom_margin", $all_values, '' ) ) && et_pb_sticky_options()->is_enabled( "{$label}_custom_margin", $all_values ); if ( $has_margin || $has_padding || $has_margin_hover || $has_padding_hover || $has_padding_sticky || $has_margin_sticky ) { $settings = $utils->array_get( $form_field, 'margin_padding', array() ); // Ensure main selector exists. $form_field_margin_padding_css = $utils->array_get( $settings, 'css.main', '' ); if ( empty( $form_field_margin_padding_css ) ) { $utils->array_set( $settings, 'css.main', $utils->array_get( $form_field, 'css.main', '' ) ); } $this->update_styles( $module, $label, $settings, $function_name, $advanced_field ); } } } } /** * Process Margin & Padding options and adds CSS rules. * * @since 4.10.0 * @param array $attrs Module attributes. */ public function is_used( $attrs ) { foreach ( $attrs as $attr => $value ) { if ( ! $value ) { continue; } $is_attr = false !== strpos( $attr, 'custom_margin' ) || false !== strpos( $attr, 'custom_padding' ); if ( $is_attr ) { return true; } } return false; } } return new ET_Builder_Module_Field_MarginPadding();
Upload Files
Cancel
Upload
Create New
Cancel
Create
Change Permissions
Cancel
Save
Change Date
Cancel
Save
Rename Item
Cancel
Save
Confirm Delete
Are you sure you want to delete the selected items?
Cancel
Delete