function at_core_submit_fonts($values, $generated_files_path) { // Websafe fonts. $websafe_fonts = $values['websafe_options']; // Elements to apply fonts to. $font_elements = font_elements(); // Fallback family $fallback_font_family = 'sans-serif'; if (isset($values['settings_font_fallback'])) { $fallback_font_family = str_replace('_', '-', $values['settings_font_fallback']); } // Initialize some variables. $fonts = array(); $base_size = '16'; // 16px default // Inject config settings for web-fonts. $values['settings_font_use_google_fonts'] = FALSE; $values['settings_font_use_typekit'] = FALSE; $font_styles = array(); foreach ($font_elements as $font_key => $font_values) { // Get the selectors for each element. $fonts[$font_key]['selectors'] = $font_values['selector']; // Reset the selectors variable if we have custom selectors. if ($font_key == 'custom_selectors' && !empty($values['settings_font_custom_selectors']) && !empty($values['settings_custom_selectors'])) { $fonts[$font_key]['selectors'] = $values['settings_custom_selectors']; // ? $values['settings_custom_selectors'] : 'ruby ruby' } // Size/Line height. if (!empty($values['settings_font_size_' . $font_key])) { //$base_size = $values['settings_font_size_base'] ? $values['settings_font_size_base'] : $base_size; $px_size = $values['settings_font_size_' . $font_key]; $rem_size = $values['settings_font_size_' . $font_key] / $base_size; // line-height multipliers are a bit magical, but "pretty good" defaults. $line_height_multiplier = $values['settings_font_line_height_multiplier_default']; if ($px_size >= $values['settings_font_line_height_multiplier_large_size']) { $line_height_multiplier = $values['settings_font_line_height_multiplier_large']; } $fonts[$font_key]['size'] = ' font-size: ' . ceil($px_size) . 'px; font-size: ' . round($rem_size, 3) . 'rem;'; $fonts[$font_key]['line_height'] = ' line-height: ' . ceil($px_size * $line_height_multiplier) . 'px; line-height: ' . round($rem_size * $line_height_multiplier, 3) . 'rem;'; // if (isset($values['settings_font_size_base'])) { // $rem_size = $base_size / 16; // $fonts['base']['size'] = ' font-size: ' . ceil($px_size) . 'px; font-size: ' . round($rem_size, 3) . 'rem;'; // $fonts['base']['line_height'] = ' line-height: ' . ceil($px_size * $line_height_multiplier) . 'px; line-height: ' . round($rem_size * $line_height_multiplier, 3) . 'rem;'; // } } // Set font family for each key. if (isset($values['settings_font_' . $font_key])) { // Websafe. if ($values['settings_font_' . $font_key] == 'websafe') { if (isset($values['settings_font_websafe_' . $font_key])) { if (!empty($websafe_fonts[$values['settings_font_websafe_' . $font_key]])) { $websafe_font = $websafe_fonts[$values['settings_font_websafe_' . $font_key]]; $fonts[$font_key]['family'] = 'font-family: ' . trim($websafe_font) . ';'; } else { $fonts[$font_key]['family'] = 'font-family: inherit;'; } } else { $fonts[$font_key]['family'] = 'font-family: inherit;'; } } // Google. if ($values['settings_font_' . $font_key] == 'google') { if (isset($values['settings_font_google_' . $font_key])) { $fonts[$font_key]['family'] = 'font-family: ' . $values['settings_font_google_' . $font_key] . ', ' . trim($fallback_font_family) . ';'; $values['settings_font_use_google_fonts'] = TRUE; } else { $fonts[$font_key]['family'] = 'font-family: inherit;'; } } // Typekit. if ($values['settings_font_' . $font_key] == 'typekit') { if (!empty($values['settings_font_typekit_' . $font_key])) { $fonts[$font_key]['family'] = 'font-family: ' . $values['settings_font_typekit_' . $font_key] . ', ' . trim($fallback_font_family) . ';'; $values['settings_font_use_typekit'] = TRUE; } else { $fonts[$font_key]['family'] = 'font-family: inherit;'; } } } // Font smoothing. if (isset($values['settings_font_smoothing_' . $font_key]) && $values['settings_font_smoothing_' . $font_key] == 1) { $fonts[$font_key]['smoothing'] = ' -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;'; } } // Output data to file. if (!empty($fonts)) { foreach ($fonts as $font_key => $font_values) { if (isset($font_values['family']) || isset($font_values['size'])) { $font_style = $font_values['selectors'] . ' { '; if (isset($font_values['family'])) { $font_style .= str_replace(';;', ';', $font_values['family']); } if (isset($font_values['size'])) { $font_style .= $font_values['size']; } if (isset($font_values['line_height'])) { $font_style .= $font_values['line_height']; } if (isset($font_values['smoothing'])) { $font_style .= $font_values['smoothing']; } $font_style .= ' }'; $font_styles[] = $font_style; } } $output = implode("\n", $font_styles); } $output = $output ? Xss::filter($output) : '/** No fonts styles set **/'; $file_name = 'fonts.css'; $filepath = "{$generated_files_path}/{$file_name}"; file_unmanaged_save_data($output, $filepath, FILE_EXISTS_REPLACE); // Return modified values to convert to config. return $values; }
/** * @file * Generate title styles. */ function at_core_submit_titles($values, $theme, $generated_files_path) { $titles_styles = array(); // Array of valid title types $titles_valid_types = title_valid_type_options(); // Get the font elements array. $font_elements = font_elements(); $css = array(); // Build arrays of selectors with associated styles. foreach ($font_elements as $font_element_key => $font_element_value) { if (in_array($font_element_key, $titles_valid_types)) { $case = 'text-transform:'; $weight = 'font-weight:'; $alignment = 'text-align:'; // Selector if (!empty($font_element_value['selector'])) { $css[$font_element_key]['selector'] = $font_element_value['selector']; } //var_dump($values['settings_titles_' . $font_element_key . '_case']); // Case or Font variant: small-caps is a font-variant, set properties and values accordingly. // We need to set tranform and variant explicitly so selectors can override each other, without // any nasty inheritance issues, such as when .page__title overrides h1. if (!empty($values['settings_titles_' . $font_element_key . '_case'])) { if ($values['settings_titles_' . $font_element_key . '_case'] == 'small-caps') { $css[$font_element_key]['styles']['font_variant'] = 'font-variant:' . $values['settings_titles_' . $font_element_key . '_case']; $css[$font_element_key]['styles']['text_transform'] = 'text-transform:none'; } else { $css[$font_element_key]['styles']['case'] = $case . $values['settings_titles_' . $font_element_key . '_case']; $css[$font_element_key]['styles']['font_variant'] = 'font-variant:normal'; } } // Weight if (!empty($values['settings_titles_' . $font_element_key . '_weight'])) { $css[$font_element_key]['styles']['weight'] = $weight . $values['settings_titles_' . $font_element_key . '_weight']; } // Alignment if (!empty($values['settings_titles_' . $font_element_key . '_alignment'])) { $css[$font_element_key]['styles']['align'] = $alignment . $values['settings_titles_' . $font_element_key . '_alignment']; } } } // Format CSS. if (!empty($css)) { $output = array(); foreach ($css as $selector_key => $selector_styles) { if (isset($selector_styles['styles'])) { $output[] = $selector_styles['selector'] . '{' . implode(';', $selector_styles['styles']) . '}'; } } if (!empty($output)) { // Output data to file. $titles_styles = implode("\n", $output); if (!empty($titles_styles)) { //$file_name = $theme . '.titles.css'; $file_name = 'title-styles.css'; $filepath = "$generated_files_path/$file_name"; file_unmanaged_save_data($titles_styles, $filepath, FILE_EXISTS_REPLACE); } } } }
/** * @file * Output formatted CSS for fonts. */ function at_core_submit_fonts($values, $theme, $generated_files_path) { // Paths $subtheme_path = drupal_get_path('theme', $theme); $generated_scripts_path = $subtheme_path . '/scripts/generated'; // Websafe fonts. $websafe_fonts = websafe_fonts(); // Elements to apply fonts to. $font_elements = font_elements(); // Initialize some variables. $fonts = array(); $size = ''; $base_size = '16'; // 16px default $px_size = ''; $rem_size = ''; $fileOperations = new FileOperations(); $font_styles = array(); foreach ($font_elements as $font_key => $font_values) { // Get the selectors for each element. $fonts[$font_key]['selectors'] = $font_values['selector']; // Custom selectors, reset the selectors variable if we have custom selectors. if ($font_key == 'custom_selectors' && !empty($values['settings_font_custom_selectors']) && !empty($values['settings_custom_selectors'])) { $fonts[$font_key]['selectors'] = $values['settings_custom_selectors']; // ? $values['settings_custom_selectors'] : 'ruby ruby' } // Size/Line height if (!empty($values['settings_font_size_' . $font_key])) { $px_size = $values['settings_font_size_' . $font_key]; $rem_size = $values['settings_font_size_' . $font_key] / $base_size; // line-height multipliers are a bit magical, but "pretty good" defaults. $line_height_multiplier = $values['settings_font_lineheight_multiplier_default']; if ($px_size >= $values['settings_font_lineheight_multiplier_large_size']) { $line_height_multiplier = $values['settings_font_lineheight_multiplier_large']; } $fonts[$font_key]['size'] = 'font-size:' . ceil($px_size) . 'px; font-size:' . round($rem_size, 3) . 'rem;'; $fonts[$font_key]['lineheight'] = 'line-height:' . ceil($px_size * $line_height_multiplier) . 'px; line-height:' . round($rem_size * $line_height_multiplier, 3) . 'rem;'; } // Websafe if ($values['settings_font_' . $font_key] == 'websafe') { $fonts[$font_key]['family'] = 'font-family:' . $websafe_fonts[$values['settings_font_websafe']] . ';'; } // Customstack if ($values['settings_font_' . $font_key] == 'customstack') { $fonts[$font_key]['family'] = 'font-family:' . $values['settings_font_customstack'] . ';'; } // Google if ($values['settings_font_' . $font_key] == 'google') { $fonts[$font_key]['family'] = 'font-family:' . $values['settings_font_google_' . $font_key] . ';'; } // Typekit if ($values['settings_font_' . $font_key] == 'typekit') { $fonts[$font_key]['family'] = 'font-family:' . $values['settings_font_typekit_' . $font_key] . ';'; } } // Output data to file if (!empty($fonts)) { foreach ($fonts as $key => $values) { if (isset($values['family']) || isset($values['size'])) { $font_style = $values['selectors'] . '{'; if (isset($values['family'])) { $font_style .= $values['family']; } if (isset($values['size'])) { $font_style .= $values['size']; } if (isset($values['lineheight'])) { $font_style .= $values['lineheight']; } $font_style .= '}'; $font_styles[] = $font_style; } } $output = implode("\n", $font_styles); } $output = $output ? Xss::filter($output) : '/** No fonts styles set **/'; //$file_name = $theme . '.fonts.css'; $file_name = 'fonts.css'; $filepath = "$generated_files_path/$file_name"; file_unmanaged_save_data($output, $filepath, FILE_EXISTS_REPLACE); }
$form['titles'] = array( '#type' => 'details', '#title' => t('Titles'), '#group' => 'extension_settings', ); $form['titles']['description'] = array( '#markup' => t('<h3>Title Styles</h3><p>Set title case, weight and alignment.</p><p>Semibold and light font-weight options will only work if the font supports those weights, otherwise these typically render as bold and normal respecitively.</p>'), ); // Array of valid title types $titles_valid_types = title_valid_type_options(); // Get the fonts list $font_elements = font_elements(); // Build form elements for each selector and style. foreach ($font_elements as $font_element_key => $font_element_value) { if (in_array($font_element_key, $titles_valid_types)) { // Title element $form['titles'][$font_element_key . '_element'] = array( '#type' => 'details', '#title' => t($font_element_value['label']), ); // Case $form['titles'][$font_element_key . '_element']['settings_titles_' . $font_element_key . '_case'] = array( '#type' => 'select', '#title' => t('Case'), '#default_value' => theme_get_setting('settings.titles_' . $font_element_key . '_case'), '#options' => title_style_options('case'),