'', 'secHeadingUpper' => true, 'secHeadingFeature' => false, 'secHeadingSize' => '2rem', 'secHeadingSizeM' => '1.4rem', 'secDivider' => true, 'secDesc' => '', 'secDescSize' => '1rem', 'secDescSizeM' => '0.9rem', 'secAlign' => 'left', ); } public static function block_attributes() { $a = array(); foreach (self::defaults() as $k => $v) { $a[$k] = array('type' => is_bool($v) ? 'boolean' : 'string', 'default' => $v); } return $a; } private static function size($v, $def) { $v = trim((string) $v); return preg_match('/^[0-9]*\.?[0-9]+\s*(rem|em|px|%|vw|vh|pt)$/i', $v) ? $v : $def; } public static function render($attrs) { $d = self::defaults(); $a = array(); foreach ($d as $k => $v) { $a[$k] = array_key_exists($k, (array) $attrs) ? $attrs[$k] : $v; } $heading = trim((string) $a['secHeading']); $desc = trim((string) $a['secDesc']); if ($heading === '' && $desc === '') { return ''; } $align = in_array($a['secAlign'], array('left', 'center', 'right'), true) ? $a['secAlign'] : 'left'; $style = '--aieo-sh-h-d:' . self::size($a['secHeadingSize'], '2rem') . ';--aieo-sh-h-m:' . self::size($a['secHeadingSizeM'], '1.4rem') . ';--aieo-sh-d-d:' . self::size($a['secDescSize'], '1rem') . ';--aieo-sh-d-m:' . self::size($a['secDescSizeM'], '0.9rem') . ';text-align:' . $align; $feature = !empty($a['secHeadingFeature']); $title_cls = $feature ? 'aieo-recommendations-title' : 'aieo-secthead__title' . (!empty($a['secHeadingUpper']) ? ' aieo-secthead__title--upper' : ''); $out = self::css_tag(); $out .= '
' . esc_html($desc) . '
'; } $out .= '