Example #1
0
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;
}
Example #2
0
/**
 * @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);
      }
    }
  }
}
Example #3
0
/**
 * @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);
}
Example #4
0
$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'),