0.7, '-smaller' => 0.8, '-small' => 0.9, '-big' => 1.2, '-bigger' => 1.4, '-biggest' => 1.6, ); $add_rule = function(&$rules, $text_type_selector, $settings, $key, $dont_scale = false) use ($modifications) { if (!isset($settings[$key]) || !strlen($settings[$key])) { return; } $css_property = strtr($key, '_', '-'); $value = $settings[$key]; $unit = isset($settings[$key . '_unit']) ? $settings[$key . '_unit'] : ''; $rules[$text_type_selector][] = "$css_property:$value$unit;"; foreach ($modifications as $modification_suffix => $modification_scale) { if ($dont_scale === true || (is_array($dont_scale) && in_array($unit, $dont_scale, true)) || !is_numeric($value)) { $scaled_value = $value; } else { $scaled_value = str_replace(',', '.', round($value * $modification_scale, 2)); } $rules[$text_type_selector . $modification_suffix][] = "$css_property:$scaled_value$unit;"; } }; foreach ($settings as $text_type => $text_type_settings) { $text_type_selector = '.tpl-text-' . strtr($text_type, '_', '-'); $text_type_rules = array(); // font-family if (!empty($text_type_settings['font_family'])) { if (!empty($text_type_settings['asset'])) { $assets->require_asset($text_type_settings['asset']); } $font_family = '"' . $text_type_settings['font_family'] . '"'; if (!empty($text_type_settings['font_family_fallback'])) { $font_family .= ',' . $text_type_settings['font_family_fallback']; } $text_type_rules[$text_type_selector][] = "font-family:$font_family;"; foreach ($modifications as $modification_suffix => $modification_scale) { $text_type_rules[$text_type_selector . $modification_suffix][] = "font-family:$font_family;"; } } $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'font_size'); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'font_weight', true); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'font_style'); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'margin_top'); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'margin_bottom'); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'line_height', array('', '%')); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'letter_spacing'); $add_rule($text_type_rules, $text_type_selector, $text_type_settings, 'text_transform'); $has_paragraph_settings = !empty($text_type_settings['children']['p']); if ($text_type_rules) { foreach ($text_type_rules as $text_type_rule_selector => $rules) { $full_selector = "$selector $text_type_rule_selector"; // Дефолтные стили для текста и заголовков if ($text_type_rule_selector === $text_type_selector) { if ($text_type === 'default') { $full_selector .= ", $selector"; } else if (preg_match('/^header(\d+)$/', $text_type, $matches)) { $full_selector .= ", $selector h$matches[1]"; } } // Дополнительный класс tpl-text-TYPE[-size]-paragraph со свойствами шрифта + отступами if ($has_paragraph_settings) { $full_selector .= ", $selector $text_type_rule_selector-paragraph"; } $css[] = "$full_selector {" . join('', $rules) . "}"; } } if ($has_paragraph_settings) { $child_settings = $text_type_settings['children']['p']; $child_properties = array(); $add_rule($child_properties, $text_type_selector, $child_settings, 'margin_top'); $add_rule($child_properties, $text_type_selector, $child_settings, 'margin_bottom'); $add_rule($child_properties, $text_type_selector, $child_settings, 'text_indent'); if ($child_properties) { foreach ($child_properties as $child_selector => $rules) { $full_selector = "$selector $child_selector p, $selector $child_selector-paragraph"; if ($text_type === 'default' && $child_selector === $text_type_selector) { $full_selector .= ", $selector p"; } $css[] = "$full_selector {" . join('', $rules) . "}"; } } } } return join("\n", $css);