$attributes['tableWidth'],
'--tableberg-even-row-bg-color' => $even_row_bg_color,
'--tableberg-odd-row-bg-color' => $odd_row_bg_color,
'--tableberg-cell-padding-top' => $cell_padding['top'] ?? '',
'--tableberg-cell-padding-right' => $cell_padding['right'] ?? '',
'--tableberg-cell-padding-bottom' => $cell_padding['bottom'] ?? '',
'--tableberg-cell-padding-left' => $cell_padding['left'] ?? '',
'--tableberg-cell-spacing-top' => $table_spacing['top'] ?? '',
'--tableberg-cell-spacing-left' => $table_spacing['left'] ?? '',
) + $table_border_variables + $inner_border_variables + $global_font_style;
foreach (['top', 'left'] as $k) {
if (isset($cellSpacing[$k]) && $cellSpacing[$k] !== '0') {
$styles['--tableberg-border-collapse'] = 'separate';
}
}
return Utils::generate_css_string($styles);
}
/**
* Class if styling is applied.
*
* @param array $attributes The block attributes.
* @return array CSS classes based on attributes.
*/
public function get_style_class($attributes)
{
$table_width = $attributes['tableWidth'];
$table_alignment = $attributes['tableAlignment'];
$enable_inner_border = $attributes['enableInnerBorder'];
$classes = array();
if ($enable_inner_border) {
$classes[] = 'has-inner-border';
}
$is_value_empty = function ($value) {
return (
is_null($value) ||
false === $value ||
trim($value) === '' ||
trim($value) === 'undefined undefined undefined' ||
empty($value)
);
};
if (!$is_value_empty($table_width)) {
$classes[] = 'has-table-width';
}
if (!$is_value_empty($table_alignment)) {
$classes[] = 'justify-table-' . $table_alignment;
}
return $classes;
}
private static function setRowColSizes($content, $heights, $widths)
{
$lastIdx = 0;
foreach ($heights as $height) {
$idx = strpos($content, '
';
foreach ($widths as $w) {
$colgroup .= "";
}
$colgroup .= '';
$content = HtmlUtils::insert_inside_tag($content, 'table', $colgroup);
return $content;
}
private function even_odd_rows($attributes, $content)
{
$even_color = Utils::get_background_color($attributes, 'evenRowBackgroundColor', 'evenRowBackgroundGradient');
$odd_color = Utils::get_background_color($attributes, 'oddRowBackgroundColor', 'oddRowBackgroundGradient');
if (!$even_color && !$odd_color) {
return $content;
}
$even_color = "background: {$even_color} !important;";
$odd_color = "background: {$odd_color} !important;";
$cursor = 0;
$i = 1;
$end = $attributes['rows'];
if ($attributes['enableTableHeader']) {
$i = 2;
$content = HtmlUtils::append_attr_value($content, 'tr', '', 'style', 0, $cursor);
}
if ($attributes['enableTableFooter']) {
$end -= 1;
}
for (; $i <= $end; $i++) {
$content = HtmlUtils::append_attr_value($content, 'tr', $i % 2 ? $odd_color : $even_color, 'style', $cursor + 1, $cursor);
}
return $content;
}
/**
* Renders the custom table block on the server.
*
* @param array $attributes The block attributes.
* @param string $content The block content.
* @param WP_Block $block The block object.
* @return string Returns the HTML content for the custom table block.
*/
public function render_tableberg_table_block($attributes, $content, $block)
{
$class_names = $this->get_style_class($attributes);
$style = $this->get_styles($attributes);
$wrapper_attributes = get_block_wrapper_attributes(
array(
'class' => trim(join(' ', $class_names)),
'style' => $style,
)
);
$content = HtmlUtils::insert_inside_tag($content, 'table', '
');
$content = HtmlUtils::replace_attrs_of_tag($content, 'table', $wrapper_attributes);
$content = HtmlUtils::replace_closing_tag($content, 'table', '');
if ($attributes['enableTableHeader']) {
$content = HtmlUtils::append_attr_value($content, 'tr', ' tableberg-header', 'class');
$bg_color = Utils::get_background_color($attributes, 'headerBackgroundColor', 'headerBackgroundGradient');
if ($bg_color) {
$content = HtmlUtils::append_attr_value($content, 'tr', "background: {$bg_color} !important;", 'style');
}
}
if ($attributes['enableTableFooter']) {
$footer_idx = strrpos($content, 'register_blocks_assets();
register_block_type(
TABLEBERG_DIR_PATH . 'build/block.json',
array(
'attributes' => $defaults->get_default_attributes('tableberg/table'),
'render_callback' => array($this, 'render_tableberg_table_block'),
)
);
}
}