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
if ( '' !== $parallax_background ) {
[17000] Fix | Delete
$this->add_classname( 'et_pb_section_parallax' );
[17001] Fix | Delete
}
[17002] Fix | Delete
[17003] Fix | Delete
return $parallax_background;
[17004] Fix | Delete
}
[17005] Fix | Delete
[17006] Fix | Delete
/**
[17007] Fix | Delete
* Generate CSS Filters
[17008] Fix | Delete
* Check our shortcode arguments for CSS `filter` properties. If found, set the style rules for this block. (This
[17009] Fix | Delete
* function reads options set by the 'Filters' and 'Image Filters' builder menu fields.)
[17010] Fix | Delete
*
[17011] Fix | Delete
* @since 3.23 Add responsive setting styling processing here.
[17012] Fix | Delete
*
[17013] Fix | Delete
* @param string $function_name Builder module's function name (keeps the CSS rules straight)
[17014] Fix | Delete
* @param string $prefix Optional string prepended to the field name (i.e., `filter_saturate` -> `child_filter_saturate`)
[17015] Fix | Delete
* @param mixed $selectors Array or string containing all target DOM element(s), ID(s), and/or class(es)
[17016] Fix | Delete
*
[17017] Fix | Delete
* @return string Any additional CSS classes (added if filters were applied).
[17018] Fix | Delete
*/
[17019] Fix | Delete
function generate_css_filters( $function_name = '', $prefix = '', $selectors = array('%%order_class%%') ) {
[17020] Fix | Delete
[17021] Fix | Delete
if ( '' === $function_name ) {
[17022] Fix | Delete
ET_Core_Logger::error( '$function_name is required.' );
[17023] Fix | Delete
return;
[17024] Fix | Delete
}
[17025] Fix | Delete
[17026] Fix | Delete
// If `$selectors` is a string, convert to an array before we continue
[17027] Fix | Delete
$selectors_prepared = $selectors;
[17028] Fix | Delete
if ( ! is_array( $selectors ) ) {
[17029] Fix | Delete
$selectors_prepared = explode( ',', et_core_intentionally_unescaped( $selectors, 'fixed_string' ) );
[17030] Fix | Delete
}
[17031] Fix | Delete
$responsive_selectors = $selectors_prepared;
[17032] Fix | Delete
[17033] Fix | Delete
$additional_classes = '';
[17034] Fix | Delete
[17035] Fix | Delete
// If we don't have a target selector, get out now
[17036] Fix | Delete
if ( ! $selectors_prepared ) {
[17037] Fix | Delete
return $additional_classes;
[17038] Fix | Delete
}
[17039] Fix | Delete
[17040] Fix | Delete
$hover_suffix = et_pb_hover_options()->get_suffix();
[17041] Fix | Delete
$field_suffixes = array( '', 'tablet', 'phone', $hover_suffix );
[17042] Fix | Delete
$filters_default = array();
[17043] Fix | Delete
$filters_default_fb = array();
[17044] Fix | Delete
[17045] Fix | Delete
foreach ( $field_suffixes as $suffix ) {
[17046] Fix | Delete
if ( $hover_suffix === $suffix ) {
[17047] Fix | Delete
$selectors_prepared = array_map( array( $this, 'add_hover_to_selectors' ), $selectors_prepared );
[17048] Fix | Delete
}
[17049] Fix | Delete
[17050] Fix | Delete
// Mobile parameters. Update suffix and add media query argument for styles declaration.
[17051] Fix | Delete
$device_suffix = '';
[17052] Fix | Delete
$media_query = array();
[17053] Fix | Delete
$is_mobile = in_array( $suffix, array( 'tablet', 'phone' ) );
[17054] Fix | Delete
if ( $is_mobile ) {
[17055] Fix | Delete
$breakpoint = 'tablet' === $suffix ? 'max_width_980' : 'max_width_767';
[17056] Fix | Delete
$media_query = array( 'media_query' => ET_Builder_Element::get_media_query( $breakpoint ) );
[17057] Fix | Delete
[17058] Fix | Delete
// For mobile, we need to reset $suffix and use $devie_suffix instead. Later on with
[17059] Fix | Delete
// empty suffix, the filter will only return desktop value and will be used as default
[17060] Fix | Delete
// and will be merged with filter mobile values.
[17061] Fix | Delete
$device_suffix = "_{$suffix}";
[17062] Fix | Delete
$suffix = '';
[17063] Fix | Delete
}
[17064] Fix | Delete
[17065] Fix | Delete
// Some web browser glitches with filters and blend modes can be improved this way
[17066] Fix | Delete
// see https://bugs.chromium.org/p/chromium/issues/detail?id=157218 for more info
[17067] Fix | Delete
$backfaceVisibility = 'backface-visibility:hidden;';
[17068] Fix | Delete
$backfaceVisibilityAdded = array();
[17069] Fix | Delete
[17070] Fix | Delete
$additional_classes = '';
[17071] Fix | Delete
[17072] Fix | Delete
// Blend Mode
[17073] Fix | Delete
$mix_blend_mode = self::$data_utils->array_get( $this->props, "{$prefix}mix_blend_mode", '' );
[17074] Fix | Delete
[17075] Fix | Delete
// Filters
[17076] Fix | Delete
$filter = array();
[17077] Fix | Delete
$filter_names = array();
[17078] Fix | Delete
$filter_keys = array(
[17079] Fix | Delete
'hue_rotate',
[17080] Fix | Delete
'saturate',
[17081] Fix | Delete
'brightness',
[17082] Fix | Delete
'contrast',
[17083] Fix | Delete
'invert',
[17084] Fix | Delete
'sepia',
[17085] Fix | Delete
'opacity',
[17086] Fix | Delete
'blur',
[17087] Fix | Delete
);
[17088] Fix | Delete
[17089] Fix | Delete
// Assign filter values and names.
[17090] Fix | Delete
foreach( $filter_keys as $filter_key ) {
[17091] Fix | Delete
$filter_name = "{$prefix}filter_{$filter_key}";
[17092] Fix | Delete
$filter_names[] = $filter_name;
[17093] Fix | Delete
$filter[ $filter_key ] = self::$data_utils->array_get( $this->props, "{$filter_name}{$suffix}", '');
[17094] Fix | Delete
}
[17095] Fix | Delete
[17096] Fix | Delete
$is_any_filter_responsive = et_pb_responsive_options()->is_any_responsive_enabled( $this->props, $filter_names );
[17097] Fix | Delete
$is_any_filter_hover_enabled = et_pb_hover_options()->is_any_hover_enabled( $this->props, $filter_names );
[17098] Fix | Delete
[17099] Fix | Delete
// For mobile, it should return any value exist if current device value is empty.
[17100] Fix | Delete
if ( $is_mobile ) {
[17101] Fix | Delete
// Blend Mode.
[17102] Fix | Delete
$is_blend_responsive = et_pb_responsive_options()->is_responsive_enabled( $this->props, "{$prefix}mix_blend_mode" );
[17103] Fix | Delete
$mix_blend_mode = $is_blend_responsive ? et_pb_responsive_options()->get_any_value( $this->props, "{$prefix}mix_blend_mode{$suffix}", '', true ) : '';
[17104] Fix | Delete
[17105] Fix | Delete
// Filters.
[17106] Fix | Delete
$filters_mobile = array();
[17107] Fix | Delete
[17108] Fix | Delete
foreach( $filter as $filter_key => $filter_value ) {
[17109] Fix | Delete
if ( ! et_pb_responsive_options()->is_responsive_enabled( $this->props, "{$prefix}filter_{$filter_key}" ) ) {
[17110] Fix | Delete
continue;
[17111] Fix | Delete
}
[17112] Fix | Delete
$filters_mobile[ $filter_key ] = et_pb_responsive_options()->get_any_value( $this->props, "{$prefix}filter_{$filter_key}{$device_suffix}", '', true );
[17113] Fix | Delete
}
[17114] Fix | Delete
[17115] Fix | Delete
// If any responsive settings active on filter settings, set desktop value as default.
[17116] Fix | Delete
if ( $is_any_filter_responsive ) {
[17117] Fix | Delete
$filters_mobile = array_merge( $filter, $filters_mobile );
[17118] Fix | Delete
}
[17119] Fix | Delete
[17120] Fix | Delete
// Replace current filter values with mobile filter values.
[17121] Fix | Delete
$filter = $filters_mobile;
[17122] Fix | Delete
}
[17123] Fix | Delete
[17124] Fix | Delete
// Remove any filters with null or default values
[17125] Fix | Delete
$filter = array_filter( $filter, 'strlen' );
[17126] Fix | Delete
[17127] Fix | Delete
// Optional: CSS `mix-blend-mode` rule
[17128] Fix | Delete
$mix_blend_mode_default = ET_Global_Settings::get_value( 'all_mix_blend_mode', 'default' );
[17129] Fix | Delete
if ( $mix_blend_mode && $mix_blend_mode !== $mix_blend_mode_default ) {
[17130] Fix | Delete
foreach ( $selectors_prepared as $selector ) {
[17131] Fix | Delete
ET_Builder_Element::set_style( $function_name, array_merge( array(
[17132] Fix | Delete
'selector' => $selector,
[17133] Fix | Delete
'declaration' => sprintf(
[17134] Fix | Delete
'mix-blend-mode: %1$s;',
[17135] Fix | Delete
esc_html( $mix_blend_mode )
[17136] Fix | Delete
) . $backfaceVisibility,
[17137] Fix | Delete
), $media_query ) );
[17138] Fix | Delete
$backfaceVisibilityAdded[] = $selector;
[17139] Fix | Delete
}
[17140] Fix | Delete
$additional_classes .= ' et_pb_css_mix_blend_mode';
[17141] Fix | Delete
} else if ( 'et_pb_column' === $function_name ) {
[17142] Fix | Delete
// Columns need to pass through
[17143] Fix | Delete
$additional_classes .= ' et_pb_css_mix_blend_mode_passthrough';
[17144] Fix | Delete
}
[17145] Fix | Delete
[17146] Fix | Delete
// Optional: CSS `filter` rule
[17147] Fix | Delete
if ( empty( $filter ) ) {
[17148] Fix | Delete
// Since we added responsive settings, the process should not be stopped here.
[17149] Fix | Delete
// It should continue until tablet and phone are checked completely. Replace
[17150] Fix | Delete
// return with continue.
[17151] Fix | Delete
continue;
[17152] Fix | Delete
}
[17153] Fix | Delete
[17154] Fix | Delete
$css_value = array();
[17155] Fix | Delete
$css_value_fb_hover = array();
[17156] Fix | Delete
foreach ( $filter as $label => $value ) {
[17157] Fix | Delete
// Check against our default settings, and only append the rule if it differs
[17158] Fix | Delete
// (only for default state since hover and mobile might be equal to default,
[17159] Fix | Delete
// ie. no filter on hover only)
[17160] Fix | Delete
if ( ET_Global_Settings::get_value( 'all_filter_' . $label, 'default' ) === $value && $hover_suffix !== $suffix && ! $is_mobile && ! ( $is_any_filter_responsive && $is_any_filter_hover_enabled ) ) {
[17161] Fix | Delete
continue;
[17162] Fix | Delete
}
[17163] Fix | Delete
[17164] Fix | Delete
// Don't apply hover filter if it is not enabled
[17165] Fix | Delete
if ( $hover_suffix === $suffix && ! et_pb_hover_options()->is_enabled( "{$prefix}filter_{$label}{$suffix}", $this->props ) ) {
[17166] Fix | Delete
continue;
[17167] Fix | Delete
}
[17168] Fix | Delete
[17169] Fix | Delete
$value = et_sanitize_input_unit( $value, false, 'deg' );
[17170] Fix | Delete
$label_css_format = str_replace( '_', '-', $label );
[17171] Fix | Delete
// Construct string of all CSS Filter values
[17172] Fix | Delete
$css_value[$label] = esc_html( "${label_css_format}(${value})" );
[17173] Fix | Delete
// Construct Visual Builder hover rules
[17174] Fix | Delete
if ( ! in_array( $label, array( 'opacity', 'blur' ) ) ) {
[17175] Fix | Delete
// Skip those, because they mess with VB controls
[17176] Fix | Delete
$css_value_fb_hover[$label] = esc_html( "${label_css_format}(${value})" );
[17177] Fix | Delete
}
[17178] Fix | Delete
}
[17179] Fix | Delete
[17180] Fix | Delete
// Append our new CSS rules
[17181] Fix | Delete
if ( $css_value ) {
[17182] Fix | Delete
// Store the default (non-hover) filters
[17183] Fix | Delete
if ( '' === $suffix ) {
[17184] Fix | Delete
$filters_default = $css_value;
[17185] Fix | Delete
}
[17186] Fix | Delete
[17187] Fix | Delete
// Merge the hover filters onto the default filters so that filters that
[17188] Fix | Delete
// have no hover option set are not removed from the CSS declaration
[17189] Fix | Delete
if ( $hover_suffix === $suffix ) {
[17190] Fix | Delete
$css_value = array_merge( $filters_default, $css_value );
[17191] Fix | Delete
}
[17192] Fix | Delete
[17193] Fix | Delete
foreach ( $selectors_prepared as $selector ) {
[17194] Fix | Delete
$backfaceVisibilityDeclaration = in_array( $selector, $backfaceVisibilityAdded ) ? '' : $backfaceVisibility;
[17195] Fix | Delete
[17196] Fix | Delete
// Allow custom child filter target hover selector
[17197] Fix | Delete
if ( 'child_' == $prefix && $hover_suffix === $suffix ){
[17198] Fix | Delete
$selector = self::$_->array_get( $this->advanced_fields, 'filters.child_filters_target.css.hover', $selector );
[17199] Fix | Delete
}
[17200] Fix | Delete
[17201] Fix | Delete
ET_Builder_Element::set_style( $function_name, array_merge( array(
[17202] Fix | Delete
'selector' => $selector,
[17203] Fix | Delete
'declaration' => sprintf(
[17204] Fix | Delete
'filter: %1$s;',
[17205] Fix | Delete
implode( ' ', $css_value )
[17206] Fix | Delete
) . $backfaceVisibilityDeclaration,
[17207] Fix | Delete
), $media_query ) );
[17208] Fix | Delete
}
[17209] Fix | Delete
$additional_classes .= ' et_pb_css_filters';
[17210] Fix | Delete
}
[17211] Fix | Delete
[17212] Fix | Delete
// If we have VB hover-friendly CSS rules, we'll gather those and append them here
[17213] Fix | Delete
if ( $css_value_fb_hover ) {
[17214] Fix | Delete
// Store the default (non-hover) filters
[17215] Fix | Delete
if ( '' === $suffix ) {
[17216] Fix | Delete
$filters_default_fb = $css_value_fb_hover;
[17217] Fix | Delete
}
[17218] Fix | Delete
[17219] Fix | Delete
// Merge the hover filters onto the default filters so that filters that
[17220] Fix | Delete
// have no hover option set are not removed from the CSS declaration
[17221] Fix | Delete
if ( $hover_suffix === $suffix ) {
[17222] Fix | Delete
$css_value_fb_hover = array_merge( $filters_default_fb, $css_value_fb_hover );
[17223] Fix | Delete
}
[17224] Fix | Delete
[17225] Fix | Delete
foreach ( $selectors_prepared as $selector ) {
[17226] Fix | Delete
$selector_hover = str_replace(
[17227] Fix | Delete
'%%order_class%%',
[17228] Fix | Delete
'html:not(.et_fb_edit_enabled) #et-fb-app %%order_class%%:hover',
[17229] Fix | Delete
$selector
[17230] Fix | Delete
);
[17231] Fix | Delete
ET_Builder_Element::set_style( $function_name, array(
[17232] Fix | Delete
'selector' => $selector_hover,
[17233] Fix | Delete
'declaration' => esc_html( sprintf(
[17234] Fix | Delete
'filter: %1$s;',
[17235] Fix | Delete
implode( ' ', $css_value_fb_hover )
[17236] Fix | Delete
) ),
[17237] Fix | Delete
) );
[17238] Fix | Delete
}
[17239] Fix | Delete
$additional_classes .= ' et_pb_css_filters_hover';
[17240] Fix | Delete
}
[17241] Fix | Delete
}
[17242] Fix | Delete
[17243] Fix | Delete
return $additional_classes;
[17244] Fix | Delete
}
[17245] Fix | Delete
[17246] Fix | Delete
/**
[17247] Fix | Delete
* Convert classes array to a string. Also removes any duplicate classes
[17248] Fix | Delete
*
[17249] Fix | Delete
* @param array $classes A list of CSS classnames
[17250] Fix | Delete
*
[17251] Fix | Delete
* @return array
[17252] Fix | Delete
*/
[17253] Fix | Delete
function stringify_css_filter_classes( $classes ) {
[17254] Fix | Delete
// Remove repeating classes
[17255] Fix | Delete
$classes = array_unique( $classes );
[17256] Fix | Delete
[17257] Fix | Delete
// Transform classes to a string
[17258] Fix | Delete
$classes = ' ' . implode( ' ', $classes );
[17259] Fix | Delete
[17260] Fix | Delete
return $classes;
[17261] Fix | Delete
}
[17262] Fix | Delete
[17263] Fix | Delete
/**
[17264] Fix | Delete
* Adds a suffix at the end of the selector
[17265] Fix | Delete
* E.g: add_suffix_to_selectors(':hover', '%%order_class%%% .image') >>> '%%order_class%%% .image:hover'
[17266] Fix | Delete
*
[17267] Fix | Delete
* @param string $suffix
[17268] Fix | Delete
* @param string $selector
[17269] Fix | Delete
*
[17270] Fix | Delete
* @return string
[17271] Fix | Delete
*/
[17272] Fix | Delete
public function add_suffix_to_selectors( $suffix, $selector ) {
[17273] Fix | Delete
$selectors = explode( ',', $selector );
[17274] Fix | Delete
$selectors = array_map( 'trim', $selectors );
[17275] Fix | Delete
[17276] Fix | Delete
foreach ( $selectors as &$selector ) {
[17277] Fix | Delete
$selector .= $suffix;
[17278] Fix | Delete
}
[17279] Fix | Delete
[17280] Fix | Delete
return implode( ', ', $selectors );
[17281] Fix | Delete
}
[17282] Fix | Delete
[17283] Fix | Delete
/**
[17284] Fix | Delete
* Adds `:hover` in selector at the end of the selector
[17285] Fix | Delete
* E.g: add_hover_to_selectors('%%order_class%%% .image') >>> '%%order_class%%% .image:hover'
[17286] Fix | Delete
*
[17287] Fix | Delete
* @param string $selector
[17288] Fix | Delete
*
[17289] Fix | Delete
* @return string
[17290] Fix | Delete
*
[17291] Fix | Delete
* @deprecated Use et_pb_hover_options()->add_hover_to_selectors( $selector );
[17292] Fix | Delete
*/
[17293] Fix | Delete
public function add_hover_to_selectors( $selector ) {
[17294] Fix | Delete
return et_pb_hover_options()->add_hover_to_selectors( $selector );
[17295] Fix | Delete
}
[17296] Fix | Delete
[17297] Fix | Delete
/**
[17298] Fix | Delete
* Adds `:hover` in selector at the end of the selector if $add_hover is true
[17299] Fix | Delete
* otherwise returns the original selector
[17300] Fix | Delete
*
[17301] Fix | Delete
* @param string $selector
[17302] Fix | Delete
* @param bool $add_hover
[17303] Fix | Delete
*
[17304] Fix | Delete
* @return string
[17305] Fix | Delete
*/
[17306] Fix | Delete
protected function _maybe_add_hover_to_selectors( $selector, $add_hover = false ) {
[17307] Fix | Delete
return $add_hover ? et_pb_hover_options()->add_hover_to_selectors( $selector ) : $selector;
[17308] Fix | Delete
}
[17309] Fix | Delete
[17310] Fix | Delete
/**
[17311] Fix | Delete
* Adds `:hover` in selector after `%%order_class%%`
[17312] Fix | Delete
* E.g: add_hover_to_order_class('%%order_class%%% .image') >>> '%%order_class%%%:hover .image'
[17313] Fix | Delete
*
[17314] Fix | Delete
* @param string $selector
[17315] Fix | Delete
*
[17316] Fix | Delete
* @return string
[17317] Fix | Delete
*
[17318] Fix | Delete
* @deprecated Use et_pb_hover_options()->add_hover_to_order_class( $selector );
[17319] Fix | Delete
*/
[17320] Fix | Delete
public function add_hover_to_order_class( $selector ) {
[17321] Fix | Delete
return et_pb_hover_options()->add_hover_to_order_class( $selector );
[17322] Fix | Delete
}
[17323] Fix | Delete
[17324] Fix | Delete
/**
[17325] Fix | Delete
* Adds `:hover` to order class only if is specified, in other cse returns original selector
[17326] Fix | Delete
* otherwise returns the original selector
[17327] Fix | Delete
*
[17328] Fix | Delete
* @param string $selector
[17329] Fix | Delete
* @param bool $add_hover
[17330] Fix | Delete
*
[17331] Fix | Delete
* @return string
[17332] Fix | Delete
*/
[17333] Fix | Delete
protected function _maybe_add_hover_to_order_class( $selector, $add_hover = false ) {
[17334] Fix | Delete
return $add_hover ? et_pb_hover_options()->add_hover_to_order_class( $selector ) : $selector;
[17335] Fix | Delete
}
[17336] Fix | Delete
[17337] Fix | Delete
/**
[17338] Fix | Delete
* Convert smart quotes and & entity to their applicable characters
[17339] Fix | Delete
*
[17340] Fix | Delete
* @param string $text Input text
[17341] Fix | Delete
*
[17342] Fix | Delete
* @return string
[17343] Fix | Delete
*/
[17344] Fix | Delete
static function convert_smart_quotes_and_amp( $text ) {
[17345] Fix | Delete
$smart_quotes = array(
[17346] Fix | Delete
'“',
[17347] Fix | Delete
'”',
[17348] Fix | Delete
'″',
[17349] Fix | Delete
'‘',
[17350] Fix | Delete
'’',
[17351] Fix | Delete
''',
[17352] Fix | Delete
'&',
[17353] Fix | Delete
);
[17354] Fix | Delete
[17355] Fix | Delete
$replacements = array(
[17356] Fix | Delete
'"',
[17357] Fix | Delete
'"',
[17358] Fix | Delete
'"',
[17359] Fix | Delete
''',
[17360] Fix | Delete
''',
[17361] Fix | Delete
''',
[17362] Fix | Delete
'&',
[17363] Fix | Delete
);
[17364] Fix | Delete
[17365] Fix | Delete
if ( 'fr_FR' === get_locale() ) {
[17366] Fix | Delete
$french_smart_quotes = array(
[17367] Fix | Delete
' »',
[17368] Fix | Delete
'″>',
[17369] Fix | Delete
);
[17370] Fix | Delete
[17371] Fix | Delete
$french_replacements = array(
[17372] Fix | Delete
'"',
[17373] Fix | Delete
'">',
[17374] Fix | Delete
);
[17375] Fix | Delete
[17376] Fix | Delete
$smart_quotes = array_merge( $smart_quotes, $french_smart_quotes );
[17377] Fix | Delete
$replacements = array_merge( $replacements, $french_replacements );
[17378] Fix | Delete
}
[17379] Fix | Delete
[17380] Fix | Delete
$text = str_replace( $smart_quotes, $replacements, $text );
[17381] Fix | Delete
[17382] Fix | Delete
return $text;
[17383] Fix | Delete
}
[17384] Fix | Delete
[17385] Fix | Delete
public function process_multiple_checkboxes_field_value( $value_map, $value ) {
[17386] Fix | Delete
$result = array();
[17387] Fix | Delete
$index = 0;
[17388] Fix | Delete
[17389] Fix | Delete
foreach ( explode( '|', $value ) as $checkbox_value ) {
[17390] Fix | Delete
if ( 'on' === $checkbox_value ) {
[17391] Fix | Delete
$result[] = $value_map[ $index ];
[17392] Fix | Delete
}
[17393] Fix | Delete
[17394] Fix | Delete
$index++;
[17395] Fix | Delete
}
[17396] Fix | Delete
[17397] Fix | Delete
return implode( '|', $result );
[17398] Fix | Delete
}
[17399] Fix | Delete
[17400] Fix | Delete
/**
[17401] Fix | Delete
* Adds one or more CSS classes to the module on the frontend.
[17402] Fix | Delete
*
[17403] Fix | Delete
* @since 3.1
[17404] Fix | Delete
*
[17405] Fix | Delete
* @param string|array $to_add classname(s) to be added
[17406] Fix | Delete
* @param number|bool $position position of added classname (0-based). Some class need to be placed
[17407] Fix | Delete
* at exact position. i.e. .et_pb_column_{$type} on column inner
[17408] Fix | Delete
*/
[17409] Fix | Delete
function add_classname( $to_add, $position = false ) {
[17410] Fix | Delete
if ( empty( $to_add ) ) {
[17411] Fix | Delete
return;
[17412] Fix | Delete
}
[17413] Fix | Delete
[17414] Fix | Delete
$classname = is_array( $to_add ) ? $to_add : array( $to_add );
[17415] Fix | Delete
[17416] Fix | Delete
if ( is_numeric( $position ) ) {
[17417] Fix | Delete
array_splice($this->classname, intval( $position ), 0, $classname );
[17418] Fix | Delete
} else {
[17419] Fix | Delete
$this->classname = array_merge( $this->classname, $classname );
[17420] Fix | Delete
}
[17421] Fix | Delete
}
[17422] Fix | Delete
[17423] Fix | Delete
/**
[17424] Fix | Delete
* Removes one ore more CSS classes to the module on the frontend
[17425] Fix | Delete
*
[17426] Fix | Delete
* @since 3.1
[17427] Fix | Delete
*
[17428] Fix | Delete
* @param string|array $to_remove classname(s) to be removed
[17429] Fix | Delete
*/
[17430] Fix | Delete
function remove_classname( $to_remove ) {
[17431] Fix | Delete
$this->classname = array_filter( $this->classname );
[17432] Fix | Delete
[17433] Fix | Delete
if ( is_string( $to_remove ) && '' !== $to_remove ) {
[17434] Fix | Delete
$this->classname = array_diff( $this->classname, array( $to_remove ) );
[17435] Fix | Delete
} elseif ( is_array( $to_remove ) ) {
[17436] Fix | Delete
$to_remove = array_filter( $to_remove );
[17437] Fix | Delete
[17438] Fix | Delete
$this->classname = array_diff( $this->classname, $to_remove );
[17439] Fix | Delete
}
[17440] Fix | Delete
}
[17441] Fix | Delete
[17442] Fix | Delete
/**
[17443] Fix | Delete
* Outputs module class
[17444] Fix | Delete
*
[17445] Fix | Delete
* @since 3.1
[17446] Fix | Delete
*
[17447] Fix | Delete
* @return string escaped class
[17448] Fix | Delete
*/
[17449] Fix | Delete
function module_classname( $function_name = '' ) {
[17450] Fix | Delete
if ( ! in_array( $function_name, ET_Builder_Element::$uses_module_classname ) ) {
[17451] Fix | Delete
// Add module slug to array of modules where `module_classname()` used
[17452] Fix | Delete
ET_Builder_Element::$uses_module_classname[] = $function_name;
[17453] Fix | Delete
}
[17454] Fix | Delete
[17455] Fix | Delete
$module_name = str_replace( 'et_pb_', '', $this->slug );
[17456] Fix | Delete
[17457] Fix | Delete
/**
[17458] Fix | Delete
* Filters module classes.
[17459] Fix | Delete
*
[17460] Fix | Delete
* @since 3.1
[17461] Fix | Delete
*
[17462] Fix | Delete
* @param array $classname Array of classnames.
[17463] Fix | Delete
* @param int $render_count Number of times render function has been executed
[17464] Fix | Delete
*/
[17465] Fix | Delete
$classname = (array) array_unique( apply_filters( "et_builder_{$module_name}_classes", $this->classname, $this->render_count() ) );
[17466] Fix | Delete
[17467] Fix | Delete
return implode( ' ', array_map( 'esc_attr', $classname ) );
[17468] Fix | Delete
}
[17469] Fix | Delete
[17470] Fix | Delete
/**
[17471] Fix | Delete
* Outputs module id
[17472] Fix | Delete
*
[17473] Fix | Delete
* @since 3.1
[17474] Fix | Delete
*
[17475] Fix | Delete
* @param bool $include_attribute wrap module id with id attribute name or not (to be used directly on module div)
[17476] Fix | Delete
*
[17477] Fix | Delete
* @return string module id / module id wrapped by id attribute
[17478] Fix | Delete
*/
[17479] Fix | Delete
function module_id( $include_attribute = true ) {
[17480] Fix | Delete
$module_id = esc_attr( $this->props['module_id'] );
[17481] Fix | Delete
[17482] Fix | Delete
$output = $include_attribute ? sprintf( ' id="%1$s"', $module_id ) : $module_id;
[17483] Fix | Delete
[17484] Fix | Delete
return '' !== $module_id ? $output : '';
[17485] Fix | Delete
}
[17486] Fix | Delete
[17487] Fix | Delete
/**
[17488] Fix | Delete
* Helper method for rendering button markup which works compatible with advanced options' button
[17489] Fix | Delete
*
[17490] Fix | Delete
* @since 3.1
[17491] Fix | Delete
*
[17492] Fix | Delete
* @param array $args button settings
[17493] Fix | Delete
*
[17494] Fix | Delete
* @return string rendered button HTML
[17495] Fix | Delete
*/
[17496] Fix | Delete
function render_button( $args = array() ) {
[17497] Fix | Delete
// Prepare arguments
[17498] Fix | Delete
$defaults = array(
[17499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function