%PDF- %PDF-
Direktori : /home/tradesc/www/relax/wp-content/plugins/Ereferer/lib/titan-framework/lib/ |
Current File : /home/tradesc/www/relax/wp-content/plugins/Ereferer/lib/titan-framework/lib/class-option-font.php |
<?php /** * Font Option Class * * @since 1.4 */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } /** * Font Option Class * * @since 1.4 */ class TitanFrameworkOptionFont extends TitanFrameworkOption { // Default settings specific to this option public $defaultSecondarySettings = array( 'show_font_family' => true, 'show_color' => true, 'show_font_size' => true, 'show_font_weight' => true, 'show_font_style' => true, 'show_line_height' => true, 'show_letter_spacing' => true, 'show_text_transform' => true, 'show_font_variant' => true, 'show_text_shadow' => true, 'show_preview' => true, 'enqueue' => true, 'preview_text' => '', 'include_fonts' => '', // A regex string or array of regex strings to match font names to include. 'show_websafe_fonts' => true, 'show_google_fonts' => true, 'fonts' => array(), ); // Default style options public static $defaultStyling = array( 'font-family' => 'inherit', 'color' => '#333333', 'font-size' => 'inherit', 'font-weight' => 'inherit', 'font-style' => 'normal', 'line-height' => '1.5em', 'letter-spacing' => 'normal', 'text-transform' => 'none', 'font-variant' => 'normal', 'text-shadow-location' => 'none', 'text-shadow-distance' => '0px', 'text-shadow-blur' => '0px', 'text-shadow-color' => '#333333', 'text-shadow-opacity' => '1', 'font-type' => 'google', // Only used internally to determine if the font is a 'dark' => '', // only used to toggle the preview background ); // The list of web safe fonts public static $webSafeFonts = array( 'Arial, Helvetica, sans-serif' => 'Arial', '"Arial Black", Gadget, sans-serif' => 'Arial Black', '"Comic Sans MS", cursive, sans-serif' => 'Comic Sans', '"Courier New", Courier, monospace' => 'Courier New', 'Georgia, serif' => 'Geogia', 'Impact, Charcoal, sans-serif' => 'Impact', '"Lucida Console", Monaco, monospace' => 'Lucida Console', '"Lucida Sans Unicode", "Lucida Grande", sans-serif' => 'Lucida Sans', '"Palatino Linotype", "Book Antiqua", Palatino, serif' => 'Palatino', 'Tahoma, Geneva, sans-serif' => 'Tahoma', '"Times New Roman", Times, serif' => 'Times New Roman', '"Trebuchet MS", Helvetica, sans-serif' => 'Trebuchet', 'Verdana, Geneva, sans-serif' => 'Verdana', ); // Holds all the options with Google Fonts for enqueuing. // We need to do this since we want to gather all the fonts first then enqueue only the unique fonts private static $optionsToEnqueue = array(); /** * Constructor * * @return void * @since 1.4 */ function __construct( $settings, $owner ) { parent::__construct( $settings, $owner ); tf_add_action_once( 'admin_enqueue_scripts', array( $this, 'loadAdminScripts' ) ); tf_add_action_once( 'customize_controls_enqueue_scripts', array( $this, 'loadAdminScripts' ) ); tf_add_action_once( 'admin_head', array( __CLASS__, 'createFontScript' ) ); tf_add_action_once( 'wp_enqueue_scripts', array( $this, 'enqueueGooglefonts' ) ); add_filter( 'tf_generate_css_font_' . $this->getOptionNamespace(), array( $this, 'generateCSS' ), 10, 2 ); // Customizer preview handling tf_add_action_once( 'tf_generate_customizer_preview_js', array( $this, 'generateCustomizerPreviewJS' ) ); tf_add_filter_once( 'tf_generate_customizer_preview_css_' . $this->getOptionNamespace(), array( $this, 'generateCustomizerPreviewCSS' ) ); if ( $this->settings['enqueue'] ) { self::$optionsToEnqueue[] = $this; } } /** * Adds the Javascript code that adds Google fonts straight into the customizer preview. * * @since 1.9.2 * * @return void * * @see TitanFrameworkCustomizer->livePreviewMainScript() */ public function generateCustomizerPreviewJS() { ?> for ( var fontName in data.google_fonts ) { if ( document.querySelector( '#tf-preview-' + fontName ) ) { continue; } var link = document.createElement('LINK'); link.setAttribute( 'rel', 'stylesheet' ); link.setAttribute( 'type', 'text/css' ); link.setAttribute( 'media', 'all' ); link.setAttribute( 'id', 'tf-preview' + fontName ); link.setAttribute( 'href', data.google_fonts[ fontName ] ); document.head.appendChild( link ); } <?php } /** * Adds the list of all Google fonts into the customizer live preview * * @since 1.9.2 * * @param array $generated The parameters to pass to the ajax handler during customizer live previews. * * @return array An array containing modified ajax values to pass */ public function generateCustomizerPreviewCSS( $generated ) { if ( empty( $generated['google_fonts'] ) ) { $generated['google_fonts'] = array(); } $generated['google_fonts'] = array_merge( $generated['google_fonts'], $this->getGoogleFontURLs() ); return $generated; } /** * Gets all the Google font URLs for enqueuing. This was previously inside $this->enqueueGooglefonts() * but was split off so it can be used by other functions. * * @since 1.9.2 * * @return array An array containing the font names as keys and the font URLs as values. */ public function getGoogleFontURLs() { $urls = array(); // Gather all the fonts that we need to load, some may be repeated so we need to // load them once after gathering them $fontsToLoad = array(); foreach ( self::$optionsToEnqueue as $option ) { $fontValue = $option->getValue(); if ( empty( $fontValue['font-family'] ) ) { continue; } if ( $fontValue['font-family'] == 'inherit' ) { continue; } if ( $fontValue['font-type'] != 'google' ) { continue; } // Stop load Custom Fonts if ( in_array($fontValue['font-family'],$this->settings['fonts']) ) { continue; } // Get all the fonts that we need to load if ( empty( $fontsToLoad[ $fontValue['font-family'] ] ) ) { $fontsToLoad[ $fontValue['font-family'] ] = array(); } // Get the weight $variant = $fontValue['font-weight']; if ( $variant == 'normal' ) { $variant = '400'; } else if ( $variant == 'bold' ) { $variant = '500'; } else if ( $variant == 'bolder' ) { $variant = '800'; } else if ( $variant == 'lighter' ) { $variant = '100'; } if ( $fontValue['font-style'] == 'italic' ) { $variant .= 'italic'; } $fontsToLoad[ $fontValue['font-family'] ][] = $variant; } // Font subsets, allow others to change this $subsets = apply_filters( 'tf_google_font_subsets_' . $this->getOptionNamespace(), array( 'latin', 'latin-ext' ) ); // Enqueue the Google Font foreach ( $fontsToLoad as $fontName => $variants ) { // Always include the normal weight so that we don't error out $variants[] = '400'; $variants = array_unique( $variants ); $fontUrl = sprintf( '//fonts.googleapis.com/css?family=%s:%s&subset=%s', str_replace( ' ', '+', $fontName ), implode( ',', $variants ), implode( ',', $subsets ) ); $fontUrl = apply_filters( 'tf_enqueue_google_webfont_' . $this->getOptionNamespace(), $fontUrl, $fontName ); if ( $fontUrl != false ) { $urls[ $fontName ] = $fontUrl; } } return $urls; } /** * Enqueues all the Google fonts, used in wp_enqueue_scripts * * @since 1.4 * * @return void */ public function enqueueGooglefonts() { $urls = $this->getGoogleFontURLs(); foreach ( $urls as $fontName => $url ) { wp_enqueue_style( 'tf-google-webfont-' . strtolower( str_replace( ' ', '-', $fontName ) ), $url ); } } /** * Generates CSS for the font, this is used in TitanFrameworkCSS * * @param string $css The CSS generated * @param TitanFrameworkOption $option The current option being processed * @return string The CSS generated * @since 1.4 */ public function generateCSS( $css, $option ) { if ( $this->settings['id'] != $option->settings['id'] ) { return $css; } $skip = array( 'dark', 'font-type', 'text-shadow-distance', 'text-shadow-blur', 'text-shadow-color', 'text-shadow-opacity' ); // If the value is blank, use the defaults $value = $this->getValue(); if ( empty( $value ) ) { $value = array(); } $value = array_merge( self::$defaultStyling, $value ); foreach ( $value as $key => $val ) { // Force skip other keys, those are processed under another key, e.g. text-shadow-distance is // used by text-shadow-location if ( in_array( $key, $skip ) ) { continue; } // Don't include keys which are not in the default styles if ( ! in_array( $key, array_keys( self::$defaultStyling ) ) ) { continue; } if ( $key == 'font-family' ) { if ( $value[ $key ] == 'inherit' ) { $css .= '$' . $option->settings['id'] . '-' . $key . ': ' . $value[ $key ] . ';'; continue; } if ( ! empty( $value['font-type'] ) ) { if ( $value['font-type'] == 'google' ) { $css .= '$' . $option->settings['id'] . '-' . $key . ': "' . $value[ $key ] . '";'; continue; } } $css .= '$' . $option->settings['id'] . '-' . $key . ': ' . $value[ $key ] . ';'; continue; } if ( $key == 'text-shadow-location' ) { $textShadow = ''; if ( $value[ $key ] != 'none' ) { if ( stripos( $value[ $key ], 'left' ) !== false ) { $textShadow .= '-' . $value['text-shadow-distance']; } else if ( stripos( $value[ $key ], 'right' ) !== false ) { $textShadow .= $value['text-shadow-distance']; } else { $textShadow .= '0'; } $textShadow .= ' '; if ( stripos( $value[ $key ], 'top' ) !== false ) { $textShadow .= '-' . $value['text-shadow-distance']; } else if ( stripos( $value[ $key ], 'bottom' ) !== false ) { $textShadow .= $value['text-shadow-distance']; } else { $textShadow .= '0'; } $textShadow .= ' '; $textShadow .= $value['text-shadow-blur']; $textShadow .= ' '; $rgb = tf_hex2rgb( $value['text-shadow-color'] ); $rgb[] = $value['text-shadow-opacity']; $textShadow .= 'rgba(' . implode( ',', $rgb ) . ')'; } else { $textShadow .= $value[ $key ]; } $css .= '$' . $option->settings['id'] . '-text-shadow: ' . $textShadow . ';'; continue; } $css .= '$' . $option->settings['id'] . '-' . $key . ': ' . $value[ $key ] . ';'; } /* * There are 2 ways to include the values for the CSS. The normal `value-arraykey`, or just `value` * Using `value` will print out the entire font CSS. */ // Create the entire CSS for the font, this should just be used to replace the `value` variable. $cssVariables = ''; $cssChecking = array( 'font_family', 'color', 'font_size', 'font_weight', 'font_style', 'line_height', 'letter_spacing', 'text_transform', 'font_variant', 'text_shadow' ); // Enter values that are not marked as false. foreach ( $cssChecking as $subject ) { if ( $option->settings[ 'show_'.$subject ] ) { $cssVariableArray[] = str_replace( '_', '-', $subject ); } } // Now, integrate these values with their corresponding keys. foreach ( $cssVariableArray as $param ) { $cssVariables .= $param . ': $' . $option->settings['id'] . '-' . $param . ";\n"; } // Replace the `value` parameters in the given css. $modifiedCss = ''; if ( ! empty( $option->settings['css'] ) ) { $modifiedCss = $option->settings['css']; // If `value` is given, replace it with the entire css we created above in $cssVariables. $modifiedCss = preg_replace( '/value[^-]/', $cssVariables, $modifiedCss ); // Normal `value-arraykey` values. $modifiedCss = str_replace( 'value-', '$' . $option->settings['id'] . '-', $modifiedCss ); } $css .= $modifiedCss; return $css; } /** * Enqueues the needed scripts for the admin * * @return void * @since 1.4 */ public function loadAdminScripts() { wp_enqueue_script( 'wp-color-picker' ); wp_enqueue_style( 'wp-color-picker' ); } /** * Creates the Javascript for running the font option * * @return void * @since 1.4 */ public static function createFontScript() { ?> <script> jQuery(document).ready(function($) { "use strict"; var _tf_select_font_throttle = null; // Initialize color pickers $('.tf-font .tf-font-sel-color, .tf-font .tf-font-sel-shadow-color').wpColorPicker({ change: function ( event, ui ) { // update the preview, but throttle it to prevent fast loading if ( _tf_select_font_throttle != null ) { clearTimeout( _tf_select_font_throttle ); _tf_select_font_throttle = null; } var $this = $(this); _tf_select_font_throttle = setTimeout( function() { tf_select_font_update_preview( $this.parents('.tf-font:eq(0)'), true ); }, 300 ); } }); // Initialize the option $('.tf-font').each(function() { // Update save field on change $(this).find('select,.tf-font-sel-dark').change(function() { tf_select_font_update_preview( $(this).parents('.tf-font:eq(0)'), true ); }); // Trigger for toggling light/dark preview backgrounds $(this).find('.btn-dark').click(function() { var darkInput = $(this).parent().find('.tf-font-sel-dark'); if ( darkInput.val() == '' ) { darkInput.val('dark').trigger('change'); } else { darkInput.val('').trigger('change'); } }) // initialize preview tf_select_font_update_preview( $(this), true ); // We have to do this after 1ms for the theme customizer, or else the field's value // gets changed to a weird value var $this = $(this); setTimeout( function() { tf_select_font_update_preview( $this, false ) }, 1 ); }); /** * Theme Customizer scripts */ // Check for font selector clicks, we need to adjust styles to make it look nice $('body.wp-customizer .tf-font').on('mouseup', function(e) { if ( $(e.target).is('.wp-color-result') ) { if ( ! $(e.target).is('.wp-picker-open') ) { $(e.target).parents('label:eq(0)').addClass('tf-picker-open'); } else { $(e.target).parents('label:eq(0)').removeClass('tf-picker-open'); } } }); // Check for close clicks (clicking outside while the picker is open) $('body.wp-customizer').on('mouseup', '*', function(e) { var $target = $(e.target); if ( $target.is('.wp-color-result, .wp-color-picker, .wp-picker-default') ) { return; } if ( $target.parents('.wp-picker-holder').length > 0 ) { return; } if ( $('.tf-picker-open').length > 0 ) { $('.tf-picker-open').removeClass('tf-picker-open'); } }); }); // Updates the option elements function tf_select_font_update_preview( $container, doTrigger ) { "use strict"; var $ = jQuery; // Show / hide shadow fields if ( $container.find(".tf-font-sel-location").val() == 'none' || $container.find('.tf-font-sel-location').parents('label:eq(0)').attr('data-visible') == 'false' ) { $container.find(".tf-font-sel-distance").parents('label:eq(0)').fadeOut(); $container.find(".tf-font-sel-blur").parents('label:eq(0)').fadeOut(); $container.find(".tf-font-sel-shadow-color").parents('.wp-picker-container').parents('label:eq(0)').fadeOut(); $container.find(".tf-font-sel-opacity").parents('label:eq(0)').fadeOut(); } else { $container.find(".tf-font-sel-distance").parents('label:eq(0)').fadeIn(); $container.find(".tf-font-sel-blur").parents('label:eq(0)').fadeIn(); $container.find(".tf-font-sel-shadow-color").parents('.wp-picker-container').parents('label:eq(0)').fadeIn(); $container.find(".tf-font-sel-opacity").parents('label:eq(0)').fadeIn(); } var family = $container.find('.tf-font-sel-family').val(); // These are all our parameters var params = { 'font-family': family, 'font-type': $container.find(".tf-font-sel-family option[value='" + family + "']").parent().attr('class'), 'color': $container.find(".tf-font-sel-color").val(), 'font-size': $container.find(".tf-font-sel-size").val(), 'font-weight': $container.find(".tf-font-sel-weight").val(), 'font-style': $container.find(".tf-font-sel-style").val(), 'line-height': $container.find(".tf-font-sel-height").val(), 'letter-spacing': $container.find(".tf-font-sel-spacing").val(), 'text-transform': $container.find(".tf-font-sel-transform").val(), 'font-variant': $container.find(".tf-font-sel-variant").val(), 'text-shadow-location': $container.find(".tf-font-sel-location").val(), 'text-shadow-distance': $container.find(".tf-font-sel-distance").val(), 'text-shadow-blur': $container.find(".tf-font-sel-blur").val(), 'text-shadow-color': $container.find(".tf-font-sel-shadow-color").val(), 'text-shadow-opacity': $container.find(".tf-font-sel-opacity").val(), 'dark': $container.find(".tf-font-sel-dark").val(), 'text': $container.find("iframe").attr('data-preview-text') } // Update preview if ( $container.find('iframe').is(':not([data-visible=false])') ) { $container.find('iframe').attr('src', '<?php echo TitanFramework::getURL( 'iframe-font-preview.php?', __FILE__ ) ?>' + $.param(params) ); } // Update hidden save field $container.find('.tf-for-saving').val(serialize(params)); if ( doTrigger ) { $container.find('.tf-for-saving').trigger('change'); } } </script> <?php } /** * Displays the option in admin panels and meta boxes * * @return void * @since 1.4 */ public function display() { $this->echoOptionHeader( true ); // Get the current value and merge with defaults $value = $this->getValue(); if ( ! empty( $value ) ) { $value = array_merge( self::$defaultStyling, $value ); } else { $value = self::$defaultStyling; } /* * Create all the fields */ $visibilityAttrs = ''; if ( ! $this->settings['show_font_family'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <div> <label <?php echo $visibilityAttrs ?>> Font Family <select class='tf-font-sel-family'> <option value='inherit'>inherit</option> <?php if( $this->settings['fonts'] ) { ?> <optgroup label="Custom Fonts" class='customf-fonts'> <?php foreach ( $this->settings['fonts'] as $family => $label ) { printf( "<option value='%s'%s>%s</option>", $family, selected( $value['font-family'], $family, false ), $label ); } ?> </optgroup> <?php } if ( $this->settings['show_websafe_fonts'] ) { ?> <optgroup label="Web Safe Fonts" class='safe'> <?php foreach ( self::$webSafeFonts as $family => $label ) { printf( "<option value='%s'%s>%s</option>", $family, selected( $value['font-family'], $family, false ), $label ); } ?> </optgroup> <?php } if ( $this->settings['show_google_fonts'] ) { ?> <optgroup label="Google WebFonts" class='google'> <?php $allFonts = titan_get_googlefonts(); foreach ( $allFonts as $key => $fontStuff ) { // Show only the include_fonts (font names) if provided, uses regex. if ( ! empty( $this->settings['include_fonts'] ) ) { if ( is_array( $this->settings['include_fonts'] ) ) { $fontNameMatch = false; foreach ( $this->settings['include_fonts'] as $fontNamePattern ) { if ( ! is_string( $fontNamePattern ) ) { continue; } $fontNamePattern = '/' . trim( $fontNamePattern, '/' ) . '/'; if ( preg_match( $fontNamePattern . 'i', $fontStuff['name'] ) ) { $fontNameMatch = true; break; } } if ( ! $fontNameMatch ) { continue; } } else if ( is_string( $this->settings['include_fonts'] ) ) { $fontNamePattern = '/' . trim( $this->settings['include_fonts'], '/' ) . '/'; if ( ! preg_match( $fontNamePattern . 'i', $fontStuff['name'] ) ) { continue; } } } printf( "<option value='%s'%s>%s</option>", esc_attr( $fontStuff['name'] ), selected( $value['font-family'], $fontStuff['name'], false ), $fontStuff['name'] ); } ?> </optgroup> <?php } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_color'] ) { $visibilityAttrs = "data-visible='false' style='display: block'"; } ?> <label <?php echo $visibilityAttrs ?>> Color <input class='tf-font-sel-color' type="text" value="<?php echo esc_attr( $value['color'] ) ?>" data-default-color="<?php echo esc_attr( $value['color'] ) ?>"/> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_font_size'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Size <select class='tf-font-sel-size'> <option value='inherit'>inherit</option> <?php for ( $i = 1; $i <= 150; $i++ ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'px' ), selected( $value['font-size'], $i . 'px', false ), $i . 'px' ); } for ( $i = 0.1; $i <= 3.1; $i += 0.1 ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'em' ), selected( $value['font-size'], $i . 'em', false ), $i . 'em' ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_font_weight'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Weight <select class='tf-font-sel-weight'> <option value='inherit'>inherit</option> <?php $options = array( 'normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '700', '800', '900' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['font-weight'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_font_style'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Style <select class='tf-font-sel-style'> <?php $options = array( 'normal', 'italic' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['font-style'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_line_height'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Line Height <select class='tf-font-sel-height'> <?php for ( $i = .5; $i <= 3; $i += 0.1 ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'em' ), selected( $value['line-height'], $i . 'em', false ), $i . 'em' ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_letter_spacing'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Letter Spacing <select class='tf-font-sel-spacing'> <option value='normal'>normal</option> <?php for ( $i = -20; $i <= 20; $i++ ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'px' ), selected( $value['letter-spacing'], $i . 'px', false ), $i . 'px' ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_text_transform'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Text Transform <select class='tf-font-sel-transform'> <?php $options = array( 'none', 'capitalize', 'uppercase', 'lowercase' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-transform'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_font_variant'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Variant <select class='tf-font-sel-variant'> <?php $options = array( 'normal', 'small-caps' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['font-variant'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_text_shadow'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Shadow Location <select class='tf-font-sel-location'> <?php $options = array( 'none', 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-shadow-location'], $option, false ), $option ); } ?> </select> </label> <label style='display: none'> Shadow Distance <select class='tf-font-sel-distance'> <?php for ( $i = 0; $i <= 10; $i++ ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'px' ), selected( $value['text-shadow-distance'], $i . 'px', false ), $i . 'px' ); } ?> </select> </label> <label style='display: none'> Shadow Blur <select class='tf-font-sel-blur'> <?php $options = array( '0px', '1px', '2px', '3px', '4px', '5px', '10px', '20px' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-shadow-blur'], $option, false ), $option ); } ?> </select> </label> <label style='display: none'> Shadow Color <input class="tf-font-sel-shadow-color" type="text" value="<?php echo esc_attr( $value['text-shadow-color'] ) ?>" data-default-color="<?php echo esc_attr( $value['text-shadow-color'] ) ?>"/> </label> <label style='display: none'> Shadow Opacity <select class='tf-font-sel-opacity'> <?php $options = array( '1', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1', '0' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-shadow-opacity'], $option, false ), $option ); } ?> </select> </label> </div> <?php $visibilityAttrs = ''; if ( ! $this->settings['show_preview'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <div <?php echo $visibilityAttrs ?>> <iframe data-preview-text='<?php echo esc_attr( $this->settings['preview_text'] ) ?>'></iframe> <i class='dashicons dashicons-admin-appearance btn-dark'></i> <input type='hidden' class='tf-font-sel-dark' value='<?php echo esc_attr( $value['dark'] ? 'dark' : '' ) ?>'/> </div> <?php if ( ! is_serialized( $value ) ) { $value = serialize( $value ); } printf("<input type='hidden' class='tf-for-saving' name='%s' id='%s' value='%s' />", $this->getID(), $this->getID(), esc_attr( $value ) ); $this->echoOptionFooter( false ); } /** * Cleans up the serialized value before saving * * @param string $value The serialized value * @return string The cleaned value * @since 1.4 */ public function cleanValueForSaving( $value ) { if ( is_array( $value ) ) { $value = serialize( $value ); } return stripslashes( $value ); } /** * Cleans the raw value for getting * * @param string $value The raw value * @return string The cleaned value * @since 1.4 */ public function cleanValueForGetting( $value ) { if ( is_string( $value ) ) { $value = maybe_unserialize( stripslashes( $value ) ); } if ( is_array( $value ) ) { $value = array_merge( self::$defaultStyling, $value ); } if ( ! empty( $value['font-family'] ) ) { $value['font-type'] = in_array( $value['font-family'], array_keys( self::$webSafeFonts ) ) ? 'websafe' : 'google'; } return $value; } /** * Registers the theme customizer control, for displaying the option * * @param WP_Customize $wp_enqueue_script The customize object * @param TitanFrameworkCustomizerSection $section The section where this option will be placed * @param int $priority The order of this control in the section * @return void * @since 1.4 */ public function registerCustomizerControl( $wp_customize, $section, $priority = 1 ) { $wp_customize->add_control( new TitanFrameworkOptionFontControl( $wp_customize, $this->getID(), array( 'label' => $this->settings['name'], 'section' => $section->settings['id'], 'settings' => $this->getID(), 'description' => $this->settings['desc'], 'priority' => $priority, 'params' => $this->settings, ) ) ); } } /* * We create a new control for the theme customizer */ add_action( 'customize_register', 'registerTitanFrameworkOptionFontControl', 1 ); /** * Creates the option for the theme customizer * * @return void * @since 1.4 */ function registerTitanFrameworkOptionFontControl() { class TitanFrameworkOptionFontControl extends WP_Customize_Control { public $description; public $params; public function render_content() { $this->params['show_preview'] = false; TitanFrameworkOptionFont::createFontScript(); ?> <div class='tf-font'> <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> <?php // Get the current value and merge with defaults $value = $this->value(); if ( is_serialized( $value ) ) { $value = unserialize( $value ); } if ( ! is_array( $value ) ) { $value = array(); } $value = array_merge( TitanFrameworkOptionFont::$defaultStyling, $value ); /* * Create all the fields */ $visibilityAttrs = ''; if ( ! $this->params['show_font_family'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <div> <label <?php echo $visibilityAttrs ?>> Font Family <select class='tf-font-sel-family'> <option value='inherit'>inherit</option> <?php if( $this->params['fonts'] ) { ?> <optgroup label="Custom Fonts" class='customf-fonts'> <?php foreach ( $this->params['fonts'] as $family => $label ) { printf( "<option value='%s'%s>%s</option>", $family, selected( $value['font-family'], $family, false ), $label ); } ?> </optgroup> <?php } if ( $this->params['show_websafe_fonts'] ) { ?> <optgroup label="Web Safe Fonts" class='safe'> <?php foreach ( TitanFrameworkOptionFont::$webSafeFonts as $family => $label ) { printf( "<option value='%s'%s>%s</option>", $family, selected( $value['font-family'], $family, false ), $label ); } ?> </optgroup> <?php } ?> <?php if ( $this->params['show_google_fonts'] ) { ?> <optgroup label="Google WebFonts" class='google'> <?php $allFonts = titan_get_googlefonts(); foreach ( $allFonts as $key => $fontStuff ) { // Show only the include_fonts (font names) if provided, uses regex. if ( ! empty( $this->params['include_fonts'] ) ) { if ( is_array( $this->params['include_fonts'] ) ) { $fontNameMatch = false; foreach ( $this->params['include_fonts'] as $fontNamePattern ) { if ( ! is_string( $fontNamePattern ) ) { continue; } $fontNamePattern = '/' . trim( $fontNamePattern, '/' ) . '/'; if ( preg_match( $fontNamePattern . 'i', $fontStuff['name'] ) ) { $fontNameMatch = true; break; } } if ( ! $fontNameMatch ) { continue; } } else if ( is_string( $this->params['include_fonts'] ) ) { $fontNamePattern = '/' . trim( $this->params['include_fonts'], '/' ) . '/'; if ( ! preg_match( $fontNamePattern . 'i', $fontStuff['name'] ) ) { continue; } } } printf( "<option value='%s'%s>%s</option>", esc_attr( $fontStuff['name'] ), selected( $value['font-family'], $fontStuff['name'], false ), $fontStuff['name'] ); } ?> </optgroup> <?php // End the show_google_fonts conditional } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_color'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Color <input class='tf-font-sel-color' type="text" value="<?php echo esc_attr( $value['color'] ) ?>" data-default-color="<?php echo esc_attr( $value['color'] ) ?>"/> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_font_size'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Size <select class='tf-font-sel-size'> <option value='inherit'>inherit</option> <?php for ( $i = 1; $i <= 150; $i++ ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'px' ), selected( $value['font-size'], $i . 'px', false ), $i . 'px' ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_font_weight'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Weight <select class='tf-font-sel-weight'> <option value='inherit'>inherit</option> <?php $options = array( 'normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '700', '800', '900' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['font-weight'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_font_style'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Style <select class='tf-font-sel-style'> <?php $options = array( 'normal', 'italic' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['font-style'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_line_height'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Line Height <select class='tf-font-sel-height'> <?php for ( $i = .5; $i <= 3; $i += 0.1 ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'em' ), selected( $value['line-height'], $i . 'em', false ), $i . 'em' ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_letter_spacing'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Letter Spacing <select class='tf-font-sel-spacing'> <option value='normal'>normal</option> <?php for ( $i = -20; $i <= 20; $i++ ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'px' ), selected( $value['letter-spacing'], $i . 'px', false ), $i . 'px' ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_text_transform'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Text Transform <select class='tf-font-sel-transform'> <?php $options = array( 'none', 'capitalize', 'uppercase', 'lowercase' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-transform'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_font_variant'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Font Variant <select class='tf-font-sel-variant'> <?php $options = array( 'normal', 'small-caps' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['font-variant'], $option, false ), $option ); } ?> </select> </label> <?php $visibilityAttrs = ''; if ( ! $this->params['show_text_shadow'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <label <?php echo $visibilityAttrs ?>> Shadow Location <select class='tf-font-sel-location'> <?php $options = array( 'none', 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-shadow-location'], $option, false ), $option ); } ?> </select> </label> <label style='display: none'> Shadow Distance <select class='tf-font-sel-distance'> <?php for ( $i = 0; $i <= 10; $i++ ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $i . 'px' ), selected( $value['text-shadow-distance'], $i . 'px', false ), $i . 'px' ); } ?> </select> </label> <label style='display: none'> Shadow Blur <select class='tf-font-sel-blur'> <?php $options = array( '0px', '1px', '2px', '3px', '4px', '5px', '10px', '20px' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-shadow-blur'], $option, false ), $option ); } ?> </select> </label> <label style='display: none'> Shadow Color <input class="tf-font-sel-shadow-color" type="text" value="<?php echo esc_attr( $value['text-shadow-color'] ) ?>" data-default-color="<?php echo esc_attr( $value['text-shadow-color'] ) ?>"/> </label> <label style='display: none'> Shadow Opacity <select class='tf-font-sel-opacity'> <?php $options = array( '1', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1', '0' ); foreach ( $options as $option ) { printf( "<option value='%s'%s>%s</option>", esc_attr( $option ), selected( $value['text-shadow-opacity'], $option, false ), $option ); } ?> </select> </label> </div> <?php $visibilityAttrs = ''; if ( ! $this->params['show_preview'] ) { $visibilityAttrs = "data-visible='false' style='display: none'"; } ?> <div <?php echo $visibilityAttrs ?>> <iframe></iframe> <i class='dashicons dashicons-admin-appearance btn-dark'></i> <input type='hidden' class='tf-font-sel-dark' value='<?php echo esc_attr( $value['dark'] ? 'dark' : '' ) ?>'/> </div> <?php if ( ! is_serialized( $value ) ) { $value = serialize( $value ); } ?> <input type='hidden' class='tf-for-saving' <?php $this->link() ?> value='<?php echo esc_attr( $value ) ?>'/> </div> <?php echo "<p class='description'>{$this->description}</p>"; } } }