Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../themes/Divi/includes/builder
File: class-et-builder-element.php
}
[3000] Fix | Delete
[3001] Fix | Delete
// Format FB component path
[3002] Fix | Delete
// TODO, move this to class method and property, and allow both to be overridden
[3003] Fix | Delete
$component_path = str_replace( 'et_pb_' , '', $function_name_processed );
[3004] Fix | Delete
$component_path = str_replace( '_', '-', $component_path );
[3005] Fix | Delete
[3006] Fix | Delete
$_i = isset( $atts['_i'] ) ? $atts['_i'] : 0;
[3007] Fix | Delete
$address = isset( $atts['_address'] ) ? $atts['_address'] : '0';
[3008] Fix | Delete
[3009] Fix | Delete
// set the global parent if exists
[3010] Fix | Delete
if ( ( ! isset( $attrs['global_module'] ) || '' === $attrs['global_module'] ) && '' !== $global_parent ) {
[3011] Fix | Delete
$attrs['global_parent'] = $global_parent;
[3012] Fix | Delete
}
[3013] Fix | Delete
[3014] Fix | Delete
if ( isset( $this->is_structure_element ) && $this->is_structure_element ) {
[3015] Fix | Delete
$this->vb_support = 'on';
[3016] Fix | Delete
}
[3017] Fix | Delete
[3018] Fix | Delete
$processed_content = false !== $global_content ? $global_content : $this->content;
[3019] Fix | Delete
[3020] Fix | Delete
// Determine the parent type to send it down the tree while processing shortcode
[3021] Fix | Delete
// Main purpose is to know when we rendering Specialty Section content.
[3022] Fix | Delete
if ( 'et_pb_section' === $render_slug ) {
[3023] Fix | Delete
$parent_type = isset( $attrs['specialty'] ) && 'on' === $attrs['specialty'] ? 'et_pb_specialty_section' : 'et_pb_section';
[3024] Fix | Delete
} else if ( 'et_pb_specialty_section' === $parent_type && 'et_pb_column' === $render_slug ) {
[3025] Fix | Delete
$parent_type = 'et_pb_specialty_column';
[3026] Fix | Delete
} else {
[3027] Fix | Delete
$parent_type = $render_slug;
[3028] Fix | Delete
}
[3029] Fix | Delete
[3030] Fix | Delete
// Make sure content of Specialty Section is valid and has correct structure. Fix inner shortcode tags if needed.
[3031] Fix | Delete
if ( 'et_pb_specialty_section' === $parent_type ) {
[3032] Fix | Delete
$processed_content = $this->et_pb_maybe_fix_specialty_columns( $processed_content );
[3033] Fix | Delete
}
[3034] Fix | Delete
[3035] Fix | Delete
$content = array_key_exists( 'content', $this->fields_unprocessed ) || 'et_pb_code' === $function_name_processed || 'et_pb_fullwidth_code' === $function_name_processed ? $processed_content : et_fb_process_shortcode( $processed_content, $address, $global_parent, $global_parent_type, $parent_type );
[3036] Fix | Delete
[3037] Fix | Delete
// Global Code module content should be decoded before passing to VB.
[3038] Fix | Delete
$is_global_code = in_array( $function_name_processed, array( 'et_pb_code', 'et_pb_fullwidth_code' ) );
[3039] Fix | Delete
[3040] Fix | Delete
$prepared_content = $content;
[3041] Fix | Delete
[3042] Fix | Delete
if ( ( ! is_array( $content ) && $this->vb_support !== 'on' && ! $this->has_line_breaks( $content ) ) || $is_global_code ) {
[3043] Fix | Delete
$prepared_content = html_entity_decode( $content, ENT_COMPAT, 'UTF-8' );
[3044] Fix | Delete
}
[3045] Fix | Delete
[3046] Fix | Delete
if ( empty( $attrs ) ) {
[3047] Fix | Delete
// Visual Builder expects $attrs to be an object.
[3048] Fix | Delete
// Associative array converted to an object by wp_json_encode correctly, but empty array is not and it causes issues.
[3049] Fix | Delete
$attrs = new stdClass();
[3050] Fix | Delete
}
[3051] Fix | Delete
[3052] Fix | Delete
$is_child_module = in_array( $render_slug, self::get_child_slugs( $this->get_post_type() ) ) && false === strpos( $render_slug, '_column_inner' ) && false === strpos( $render_slug, '_column' );
[3053] Fix | Delete
$module_type = $this->type;
[3054] Fix | Delete
$render_count = $is_child_module ? self::_get_index( self::INDEX_MODULE_ITEM ) : self::_get_index( array( self::INDEX_MODULE_ORDER, $function_name_processed ) );
[3055] Fix | Delete
$child_title_var = isset( $this->child_title_var ) ? $this->child_title_var : '';
[3056] Fix | Delete
$child_title_fallback_var = isset( $this->child_title_fallback_var ) ? $this->child_title_fallback_var : '';
[3057] Fix | Delete
$advanced_setting_title_text = isset( $this->advanced_setting_title_text ) ? $this->advanced_setting_title_text : '';
[3058] Fix | Delete
[3059] Fix | Delete
// If this is a shop module use the Shop module render count
[3060] Fix | Delete
// Shop module creates a new class instance which resets the $_render_count value
[3061] Fix | Delete
// ( see get_shop_html() method of ET_Builder_Module_Shop class in main-modules.php )
[3062] Fix | Delete
// so we use a static property to track its proper render count
[3063] Fix | Delete
if ( 'et_pb_shop' === $render_slug ) {
[3064] Fix | Delete
$render_count = self::$_shop_render_count;
[3065] Fix | Delete
self::$_shop_render_count++;
[3066] Fix | Delete
}
[3067] Fix | Delete
[3068] Fix | Delete
// Ensuring that module which uses another module's template (i.e. accordion item uses toggle's
[3069] Fix | Delete
// component) has correct values for class properties where it makes a difference. This is covered on front-end, but it causes inheriting
[3070] Fix | Delete
// module uses its template's value on render_as_builder_data()
[3071] Fix | Delete
if ( isset( $rendering_module, $rendering_module->type ) ) {
[3072] Fix | Delete
$module_type = $rendering_module->type;
[3073] Fix | Delete
$child_title_var = isset( $rendering_module->child_title_var ) ? $rendering_module->child_title_var : $child_title_var;
[3074] Fix | Delete
$child_title_fallback_var = isset( $rendering_module->child_title_fallback_var ) ? $rendering_module->child_title_fallback_var : $child_title_fallback_var;
[3075] Fix | Delete
$advanced_setting_title_text = isset( $rendering_module->advanced_setting_title_text ) ? $rendering_module->advanced_setting_title_text : $advanced_setting_title_text;
[3076] Fix | Delete
}
[3077] Fix | Delete
[3078] Fix | Delete
// Build object.
[3079] Fix | Delete
$object = array(
[3080] Fix | Delete
'_i' => $_i,
[3081] Fix | Delete
'_order' => $_i,
[3082] Fix | Delete
// TODO make address be _address, its conflicting with 'address' prop in map module... (not sure how though, they are in diffent places...)
[3083] Fix | Delete
'address' => $address,
[3084] Fix | Delete
'child_slug' => $this->child_slug,
[3085] Fix | Delete
'parent_slug' => $real_parent_type,
[3086] Fix | Delete
'vb_support' => $this->vb_support,
[3087] Fix | Delete
'parent_address' => $parent_address,
[3088] Fix | Delete
'shortcode_index' => $render_count,
[3089] Fix | Delete
'type' => $output_render_slug,
[3090] Fix | Delete
'theme_builder_suffix' => self::_get_theme_builder_order_class_suffix(),
[3091] Fix | Delete
'component_path' => $component_path,
[3092] Fix | Delete
'main_css_element' => $this->main_css_element,
[3093] Fix | Delete
'attrs' => $attrs,
[3094] Fix | Delete
'content' => $prepared_content,
[3095] Fix | Delete
'is_module_child' => 'child' === $module_type,
[3096] Fix | Delete
'is_structure_element' => !empty($this->is_structure_element),
[3097] Fix | Delete
'is_specialty_placeholder' => $is_specialty_placeholder,
[3098] Fix | Delete
'is_official_module' => $this->_is_official_module,
[3099] Fix | Delete
'child_title_var' => $child_title_var,
[3100] Fix | Delete
'child_title_fallback_var' => $child_title_fallback_var,
[3101] Fix | Delete
'advanced_setting_title_text' => $advanced_setting_title_text,
[3102] Fix | Delete
'wrapper_settings' => $this->get_wrapper_settings( $render_slug ),
[3103] Fix | Delete
);
[3104] Fix | Delete
[3105] Fix | Delete
if ( ! empty( $unsynced_global_attributes ) ) {
[3106] Fix | Delete
$object['unsyncedGlobalSettings'] = $unsynced_global_attributes[0];
[3107] Fix | Delete
}
[3108] Fix | Delete
[3109] Fix | Delete
if ( $is_global_template ) {
[3110] Fix | Delete
$object['libraryModuleScope'] = 'global';
[3111] Fix | Delete
}
[3112] Fix | Delete
[3113] Fix | Delete
if ( isset( $this->module_items_config ) ) {
[3114] Fix | Delete
$object['module_items_config'] = $this->module_items_config;
[3115] Fix | Delete
}
[3116] Fix | Delete
[3117] Fix | Delete
return $object;
[3118] Fix | Delete
}
[3119] Fix | Delete
[3120] Fix | Delete
/**
[3121] Fix | Delete
* Determine if provided string contain line-breaks (`\r\n`)
[3122] Fix | Delete
*
[3123] Fix | Delete
* @param string $content String to check
[3124] Fix | Delete
*
[3125] Fix | Delete
* @return bool
[3126] Fix | Delete
*/
[3127] Fix | Delete
function has_line_breaks( $content ) {
[3128] Fix | Delete
return count( preg_split('/\r\n*\n/', trim( $content ), -1, PREG_SPLIT_NO_EMPTY ) ) > 1;
[3129] Fix | Delete
}
[3130] Fix | Delete
[3131] Fix | Delete
// intended to be overridden as needed
[3132] Fix | Delete
function additional_render( $attrs, $content = null, $render_slug ) {
[3133] Fix | Delete
if ( method_exists( $this, 'additional_shortcode_callback' ) ) {
[3134] Fix | Delete
// Backwards compatibility
[3135] Fix | Delete
$this->__call( 'additional_shortcode_callback', array( $attrs, $content, $render_slug ) );
[3136] Fix | Delete
}
[3137] Fix | Delete
}
[3138] Fix | Delete
[3139] Fix | Delete
// intended to be overridden as needed
[3140] Fix | Delete
function predefined_child_modules(){}
[3141] Fix | Delete
[3142] Fix | Delete
/**
[3143] Fix | Delete
* Generate global setting name
[3144] Fix | Delete
*
[3145] Fix | Delete
* @param string $option_slug Option slug
[3146] Fix | Delete
*
[3147] Fix | Delete
* @return string Global setting name in the following format: "module_slug-option_slug"
[3148] Fix | Delete
*/
[3149] Fix | Delete
public function get_global_setting_name( $option_slug ) {
[3150] Fix | Delete
$global_setting_name = sprintf(
[3151] Fix | Delete
'%1$s-%2$s',
[3152] Fix | Delete
isset( $this->global_settings_slug ) ? $this->global_settings_slug : $this->slug,
[3153] Fix | Delete
$option_slug
[3154] Fix | Delete
);
[3155] Fix | Delete
[3156] Fix | Delete
return $global_setting_name;
[3157] Fix | Delete
}
[3158] Fix | Delete
[3159] Fix | Delete
/**
[3160] Fix | Delete
* Add global default values to all fields, if they don't have defaults set
[3161] Fix | Delete
*
[3162] Fix | Delete
* @return void
[3163] Fix | Delete
*/
[3164] Fix | Delete
protected function _maybe_add_global_defaults() {
[3165] Fix | Delete
// Don't add default settings to "child" modules
[3166] Fix | Delete
if ( 'child' === $this->type ) {
[3167] Fix | Delete
return;
[3168] Fix | Delete
}
[3169] Fix | Delete
[3170] Fix | Delete
$fields = $this->fields_unprocessed;
[3171] Fix | Delete
$ignored_keys = array(
[3172] Fix | Delete
'custom_margin',
[3173] Fix | Delete
'custom_padding',
[3174] Fix | Delete
);
[3175] Fix | Delete
[3176] Fix | Delete
// Font color settings have custom_color set to true, so add them to ignored keys array
[3177] Fix | Delete
if ( isset( $this->advanced_fields['fonts'] ) && is_array( $this->advanced_fields['fonts'] ) ) {
[3178] Fix | Delete
foreach ( $this->advanced_fields['fonts'] as $font_key => $font_settings ) {
[3179] Fix | Delete
$ignored_keys[] = sprintf( '%1$s_text_color', $font_key );
[3180] Fix | Delete
}
[3181] Fix | Delete
}
[3182] Fix | Delete
[3183] Fix | Delete
$ignored_keys = apply_filters( 'et_builder_add_defaults_ignored_keys', $ignored_keys );
[3184] Fix | Delete
[3185] Fix | Delete
foreach ( $fields as $field_key => $field_settings ) {
[3186] Fix | Delete
if ( in_array( $field_key, $ignored_keys ) ) {
[3187] Fix | Delete
continue;
[3188] Fix | Delete
}
[3189] Fix | Delete
[3190] Fix | Delete
$global_setting_name = $this->get_global_setting_name( $field_key );
[3191] Fix | Delete
$global_setting_value = ET_Global_Settings::get_value( $global_setting_name );
[3192] Fix | Delete
[3193] Fix | Delete
if ( ! isset( $field_settings['default'] ) && $global_setting_value ) {
[3194] Fix | Delete
$fields[ $field_key ]['default'] = $global_setting_value;
[3195] Fix | Delete
// Mark this default as global so VB won't print it to replicate FE behaviour
[3196] Fix | Delete
$fields[ $field_key ]['is_global_default'] = true;
[3197] Fix | Delete
}
[3198] Fix | Delete
}
[3199] Fix | Delete
[3200] Fix | Delete
$this->fields_unprocessed = $fields;
[3201] Fix | Delete
}
[3202] Fix | Delete
[3203] Fix | Delete
/**
[3204] Fix | Delete
* Rebuild option template in $this->fields_unprocessed property into actual field if needed.
[3205] Fix | Delete
*
[3206] Fix | Delete
* @since 3.28
[3207] Fix | Delete
*/
[3208] Fix | Delete
protected function _maybe_rebuild_option_template() {
[3209] Fix | Delete
// Once module's option template inside $this->fields_unprocessed is rebuilt, the next
[3210] Fix | Delete
// module's `_render()` won't need it. Thus, skip this to speed up performance.
[3211] Fix | Delete
if ( in_array( $this->slug, self::$_has_rebuilt_option_template ) ) {
[3212] Fix | Delete
return;
[3213] Fix | Delete
}
[3214] Fix | Delete
[3215] Fix | Delete
foreach( $this->fields_unprocessed as $field_name => $field ) {
[3216] Fix | Delete
// If first two field name matches template prefix, it is safely assume that current
[3217] Fix | Delete
// unprocessed fields is reference to option template.
[3218] Fix | Delete
if ( self::$option_template->is_enabled() && self::$option_template->is_option_template_field( $field_name ) ) {
[3219] Fix | Delete
// Rebuild fields
[3220] Fix | Delete
$rebuilt_fields = self::$option_template->rebuild_field_template( $field_name );
[3221] Fix | Delete
[3222] Fix | Delete
// Assign rebuilt fields to module's unprocessed fields
[3223] Fix | Delete
foreach( $rebuilt_fields as $rebuilt_field_name => $rebuilt_field ) {
[3224] Fix | Delete
$this->fields_unprocessed[ $rebuilt_field_name ] = $rebuilt_field;
[3225] Fix | Delete
}
[3226] Fix | Delete
[3227] Fix | Delete
// Remove option template field
[3228] Fix | Delete
unset( $this->fields_unprocessed[ $field_name ] );
[3229] Fix | Delete
}
[3230] Fix | Delete
}
[3231] Fix | Delete
[3232] Fix | Delete
self::$_has_rebuilt_option_template[] = $this->slug;
[3233] Fix | Delete
}
[3234] Fix | Delete
[3235] Fix | Delete
/**
[3236] Fix | Delete
* Adds Global Presets settings.
[3237] Fix | Delete
*
[3238] Fix | Delete
* @since 3.26
[3239] Fix | Delete
*
[3240] Fix | Delete
* @param array $attrs The list of a module attributes
[3241] Fix | Delete
* @param string $render_slug The real slug from the shortcode
[3242] Fix | Delete
*
[3243] Fix | Delete
* @return array
[3244] Fix | Delete
*/
[3245] Fix | Delete
protected function _maybe_add_global_presets_settings( $attrs, $render_slug ) {
[3246] Fix | Delete
if ( ( et_fb_is_enabled() || et_builder_bfb_enabled() ) && ! self::is_theme_builder_layout() ) {
[3247] Fix | Delete
return $attrs;
[3248] Fix | Delete
}
[3249] Fix | Delete
[3250] Fix | Delete
$render_slug = self::$global_presets_manager->maybe_convert_module_type( $render_slug, $attrs );
[3251] Fix | Delete
$module_preset_settings = self::$global_presets_manager->get_module_presets_settings( $render_slug, $attrs );
[3252] Fix | Delete
[3253] Fix | Delete
if ( is_array( $attrs ) ) {
[3254] Fix | Delete
// We need a special handler for social media child items module background color setting
[3255] Fix | Delete
// as it has different default background color for each network.
[3256] Fix | Delete
if ( 'et_pb_social_media_follow_network' === $render_slug
[3257] Fix | Delete
&& ! empty( $attrs['social_network'] )
[3258] Fix | Delete
&& ! empty( $attrs['background_color'] )
[3259] Fix | Delete
&& ! empty( $module_preset_settings['background_color'] )
[3260] Fix | Delete
&& $attrs['background_color'] !== $module_preset_settings['background_color']
[3261] Fix | Delete
) {
[3262] Fix | Delete
$background_color_definition = self::$_->array_get( $this->get_fields(), "social_network.options.{$attrs['social_network']}.data.color" );
[3263] Fix | Delete
[3264] Fix | Delete
if ( $background_color_definition === $attrs['background_color'] ) {
[3265] Fix | Delete
// Unset the background color attrs if it was default based on selected network.
[3266] Fix | Delete
unset( $attrs['background_color'] );
[3267] Fix | Delete
}
[3268] Fix | Delete
}
[3269] Fix | Delete
[3270] Fix | Delete
return array_merge( $module_preset_settings, $attrs );
[3271] Fix | Delete
}
[3272] Fix | Delete
[3273] Fix | Delete
return $module_preset_settings;
[3274] Fix | Delete
}
[3275] Fix | Delete
[3276] Fix | Delete
/**
[3277] Fix | Delete
* Add additional option fields.
[3278] Fix | Delete
*
[3279] Fix | Delete
* @since 3.23 Introduce form field options set. Also, add codes to generate responsive options
[3280] Fix | Delete
* set with suffix automatically. It also supports mobile_options on composite, bg
[3281] Fix | Delete
* field, and computed fields as well.
[3282] Fix | Delete
*/
[3283] Fix | Delete
protected function _add_additional_fields() {
[3284] Fix | Delete
// Setup has_advanced_fields property to adjust advanced options visibility on
[3285] Fix | Delete
// module that has no VB support to avoid sudden advanced options appearances
[3286] Fix | Delete
$this->has_advanced_fields = isset( $this->advanced_fields );
[3287] Fix | Delete
[3288] Fix | Delete
// Advanced options are added by default unless module explicitly disabled it
[3289] Fix | Delete
$this->advanced_fields = $this->has_advanced_fields ? $this->advanced_fields : array();
[3290] Fix | Delete
[3291] Fix | Delete
// Advanced options have to be array
[3292] Fix | Delete
if ( ! is_array( $this->advanced_fields ) ) {
[3293] Fix | Delete
return;
[3294] Fix | Delete
}
[3295] Fix | Delete
[3296] Fix | Delete
// Add form field options set to modules that use form as main part.
[3297] Fix | Delete
$this->_add_form_field_fields();
[3298] Fix | Delete
[3299] Fix | Delete
$this->_add_font_fields();
[3300] Fix | Delete
[3301] Fix | Delete
$this->_add_background_fields();
[3302] Fix | Delete
[3303] Fix | Delete
$this->_add_borders_fields();
[3304] Fix | Delete
[3305] Fix | Delete
$this->_add_button_fields();
[3306] Fix | Delete
[3307] Fix | Delete
$this->_add_box_shadow_fields();
[3308] Fix | Delete
[3309] Fix | Delete
$this->_add_transforms_fields();
[3310] Fix | Delete
[3311] Fix | Delete
$this->_add_position_fields();
[3312] Fix | Delete
[3313] Fix | Delete
$this->_add_text_fields();
[3314] Fix | Delete
[3315] Fix | Delete
$this->_add_sizing_fields();
[3316] Fix | Delete
[3317] Fix | Delete
$this->_add_overflow_fields();
[3318] Fix | Delete
[3319] Fix | Delete
$this->_add_margin_padding_fields();
[3320] Fix | Delete
[3321] Fix | Delete
// Add filter fields to modules
[3322] Fix | Delete
$this->_add_filter_fields();
[3323] Fix | Delete
[3324] Fix | Delete
// Add divider fields to section modules.
[3325] Fix | Delete
$this->_add_divider_fields();
[3326] Fix | Delete
[3327] Fix | Delete
// Add animation fields to all modules
[3328] Fix | Delete
$this->_add_animation_fields();
[3329] Fix | Delete
[3330] Fix | Delete
$this->_add_additional_transition_fields();
[3331] Fix | Delete
[3332] Fix | Delete
// Add text shadow fields to all modules
[3333] Fix | Delete
$this->_add_text_shadow_fields();
[3334] Fix | Delete
[3335] Fix | Delete
// Add link options to all modules
[3336] Fix | Delete
$this->_add_link_options_fields();
[3337] Fix | Delete
[3338] Fix | Delete
$this->_add_scroll_effects_fields();
[3339] Fix | Delete
[3340] Fix | Delete
if ( ! isset( $this->_additional_fields_options ) ) {
[3341] Fix | Delete
return false;
[3342] Fix | Delete
}
[3343] Fix | Delete
[3344] Fix | Delete
$additional_options = $this->_additional_fields_options;
[3345] Fix | Delete
[3346] Fix | Delete
$this->_additional_fields_options = array();
[3347] Fix | Delete
[3348] Fix | Delete
$is_column_module = in_array( $this->slug, array( 'et_pb_column', 'et_pb_column_inner' ) );
[3349] Fix | Delete
[3350] Fix | Delete
// delete second level advanced options default values
[3351] Fix | Delete
if ( isset( $this->type ) && 'child' === $this->type && ! $is_column_module && apply_filters( 'et_pb_remove_child_module_defaults', true ) ) {
[3352] Fix | Delete
foreach ( $additional_options as $name => $settings ) {
[3353] Fix | Delete
if ( isset( $additional_options[ $name ]['default'] ) && ! isset( $additional_options[ $name ]['default_on_child'] ) ) {
[3354] Fix | Delete
$additional_options[ $name ]['default'] = '';
[3355] Fix | Delete
}
[3356] Fix | Delete
}
[3357] Fix | Delete
}
[3358] Fix | Delete
[3359] Fix | Delete
if ( function_exists( 'et_builder_definition_sort' ) ) {
[3360] Fix | Delete
et_builder_definition_sort( $additional_options );
[3361] Fix | Delete
}
[3362] Fix | Delete
[3363] Fix | Delete
$additional_options = et_pb_responsive_options()->create( $additional_options );
[3364] Fix | Delete
[3365] Fix | Delete
$this->_set_fields_unprocessed( $additional_options );
[3366] Fix | Delete
}
[3367] Fix | Delete
[3368] Fix | Delete
/**
[3369] Fix | Delete
* Set i18n used by font fields.
[3370] Fix | Delete
*
[3371] Fix | Delete
* @since 4.4.9
[3372] Fix | Delete
*
[3373] Fix | Delete
* @return void
[3374] Fix | Delete
*/
[3375] Fix | Delete
protected function set_i18n_font() {
[3376] Fix | Delete
[3377] Fix | Delete
// Cache results so that translation/escaping only happens once.
[3378] Fix | Delete
$i18n =& self::$i18n;
[3379] Fix | Delete
if ( ! isset( $i18n['font'] ) ) {
[3380] Fix | Delete
// phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment
[3381] Fix | Delete
$i18n['font'] = array(
[3382] Fix | Delete
'letter_spacing' => array(
[3383] Fix | Delete
'label' => esc_html__( '%1$s Letter Spacing', 'et_builder' ),
[3384] Fix | Delete
'description' => esc_html__( 'Letter spacing adjusts the distance between each letter in the %1$s.', 'et_builder' ),
[3385] Fix | Delete
),
[3386] Fix | Delete
'size' => array(
[3387] Fix | Delete
'label' => esc_html__( '%1$s Text Size', 'et_builder' ),
[3388] Fix | Delete
'description' => esc_html__( 'Increase or decrease the size of the %1$s text.', 'et_builder' ),
[3389] Fix | Delete
),
[3390] Fix | Delete
'font' => array(
[3391] Fix | Delete
'label' => esc_html__( '%1$s Font', 'et_builder' ),
[3392] Fix | Delete
'description' => esc_html__( 'Choose a custom font to use for the %1$s. All Google web fonts are available, or you can upload your own custom font files.', 'et_builder' ),
[3393] Fix | Delete
),
[3394] Fix | Delete
'color' => array(
[3395] Fix | Delete
'label' => esc_html__( '%1$s Text Color', 'et_builder' ),
[3396] Fix | Delete
'description' => esc_html__( 'Pick a color to be used for the %1$s text.', 'et_builder' ),
[3397] Fix | Delete
),
[3398] Fix | Delete
'line_height' => array(
[3399] Fix | Delete
'label' => esc_html__( '%1$s Line Height', 'et_builder' ),
[3400] Fix | Delete
'description' => esc_html__( 'Line height adjusts the distance between each line of the %1$s text. This becomes noticeable if the %1$s is long and wraps onto multiple lines.', 'et_builder' ),
[3401] Fix | Delete
),
[3402] Fix | Delete
'text_align' => array(
[3403] Fix | Delete
'label' => esc_html__( '%1$s Text Alignment', 'et_builder' ),
[3404] Fix | Delete
'description' => esc_html__( 'Align the %1$s to the left, right, center or justify.', 'et_builder' ),
[3405] Fix | Delete
),
[3406] Fix | Delete
);
[3407] Fix | Delete
// phpcs:enable
[3408] Fix | Delete
}
[3409] Fix | Delete
}
[3410] Fix | Delete
[3411] Fix | Delete
/**
[3412] Fix | Delete
* Add font option fields.
[3413] Fix | Delete
*
[3414] Fix | Delete
* @since 3.23 Introduce block elements sub options group. Add responsive settings for font set,
[3415] Fix | Delete
* text color, text alignment, and text-shadow options set.
[3416] Fix | Delete
*/
[3417] Fix | Delete
protected function _add_font_fields() {
[3418] Fix | Delete
// Font fields are added by default if module has partial or full VB support
[3419] Fix | Delete
if ( $this->has_vb_support() ) {
[3420] Fix | Delete
$this->advanced_fields['fonts'] = self::$_->array_get( $this->advanced_fields, 'fonts', array(
[3421] Fix | Delete
'module' => array(
[3422] Fix | Delete
'label' => esc_html__( 'Module', 'custom_module' ),
[3423] Fix | Delete
'line_height' => array(
[3424] Fix | Delete
'default' => floatval( et_get_option( 'body_font_height', '1.7' ) ) . 'em',
[3425] Fix | Delete
),
[3426] Fix | Delete
'font_size' => array(
[3427] Fix | Delete
'default' => absint( et_get_option( 'body_font_size', '14' ) ) . 'px',
[3428] Fix | Delete
),
[3429] Fix | Delete
),
[3430] Fix | Delete
) );
[3431] Fix | Delete
} else if ( ! $this->has_advanced_fields ) {
[3432] Fix | Delete
// Disable if module doesn't set advanced_fields property and has no VB support
[3433] Fix | Delete
return;
[3434] Fix | Delete
}
[3435] Fix | Delete
[3436] Fix | Delete
// Font settings have to be array
[3437] Fix | Delete
if ( ! is_array( self::$_->array_get( $this->advanced_fields, 'fonts' ) ) ) {
[3438] Fix | Delete
return;
[3439] Fix | Delete
}
[3440] Fix | Delete
[3441] Fix | Delete
$advanced_font_options = $this->advanced_fields['fonts'];
[3442] Fix | Delete
[3443] Fix | Delete
$additional_options = array();
[3444] Fix | Delete
$defaults = array(
[3445] Fix | Delete
'all_caps' => 'off',
[3446] Fix | Delete
);
[3447] Fix | Delete
[3448] Fix | Delete
$this->set_i18n_font();
[3449] Fix | Delete
$i18n =& self::$i18n;
[3450] Fix | Delete
[3451] Fix | Delete
foreach ( $advanced_font_options as $option_name => $option_settings ) {
[3452] Fix | Delete
$advanced_font_options[ $option_name ]['defaults'] = $defaults;
[3453] Fix | Delete
[3454] Fix | Delete
// Continue if toggle is disabled.
[3455] Fix | Delete
$toggle_disabled = isset( $option_settings['disable_toggle'] ) && $option_settings['disable_toggle'];
[3456] Fix | Delete
if ( $toggle_disabled ) {
[3457] Fix | Delete
continue;
[3458] Fix | Delete
}
[3459] Fix | Delete
[3460] Fix | Delete
// Block Elements - 1. Add block elements settings to fonts.
[3461] Fix | Delete
// We need to add link, ul, ol, and quote settings to fonts. We also need to convert
[3462] Fix | Delete
// current font setting with block_elements to be sub toggle of P.
[3463] Fix | Delete
if ( isset( $option_settings['block_elements'] ) && is_array( $option_settings['block_elements'] ) ) {
[3464] Fix | Delete
[3465] Fix | Delete
// Ensure target font option is exist.
[3466] Fix | Delete
if ( ! isset( $advanced_font_options[ $option_name ] ) ) {
[3467] Fix | Delete
continue;
[3468] Fix | Delete
}
[3469] Fix | Delete
[3470] Fix | Delete
// Get current block elements selector.
[3471] Fix | Delete
$block_default_selector = isset( $option_settings['css']['main'] ) ? $option_settings['css']['main'] : '';
[3472] Fix | Delete
$block_elements_css = isset( $option_settings['block_elements']['css'] ) ? $option_settings['block_elements']['css'] : array();
[3473] Fix | Delete
$block_elements_selector = isset( $block_elements_css['main'] ) ? $block_elements_css['main'] : $block_default_selector;
[3474] Fix | Delete
[3475] Fix | Delete
// Ensure block elements selector exist and not empty.
[3476] Fix | Delete
if ( empty( $block_elements_selector ) ) {
[3477] Fix | Delete
// Don't forget to disable block elements, so no sub toggles will be added.
[3478] Fix | Delete
$advanced_font_options[ $option_name ]['block_elements'] = false;
[3479] Fix | Delete
continue;
[3480] Fix | Delete
}
[3481] Fix | Delete
[3482] Fix | Delete
// Block element default settings will be used by the following sub toggles. Special
[3483] Fix | Delete
// for P sub toggle, we have to use existing font settings.
[3484] Fix | Delete
$existing_text_settings = $advanced_font_options[ $option_name ];
[3485] Fix | Delete
$block_elements_default_settings = array(
[3486] Fix | Delete
'line_height' => array(
[3487] Fix | Delete
'default' => '1em',
[3488] Fix | Delete
),
[3489] Fix | Delete
'font_size' => array(
[3490] Fix | Delete
'default' => '14px',
[3491] Fix | Delete
),
[3492] Fix | Delete
'toggle_slug' => $option_name,
[3493] Fix | Delete
);
[3494] Fix | Delete
[3495] Fix | Delete
// Check if current module is child or not. Then append default_on_child argument.
[3496] Fix | Delete
$is_child_module = isset( $this->type ) && 'child' === $this->type;
[3497] Fix | Delete
if ( $is_child_module ) {
[3498] Fix | Delete
// Tell font options to set default_on_child. Use fields prefix to avoid confusion.
[3499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function