[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-content/themes/twentytwentyone/classes/ -> class-twenty-twenty-one-custom-colors.php (source)

   1  <?php
   2  /**
   3   * Custom Colors Class
   4   *
   5   * @package WordPress
   6   * @subpackage Twenty_Twenty_One
   7   * @since Twenty Twenty-One 1.0
   8   */
   9  
  10  /**
  11   * This class is in charge of color customization via the Customizer.
  12   */
  13  class Twenty_Twenty_One_Custom_Colors {
  14  
  15      /**
  16       * Instantiate the object.
  17       *
  18       * @since Twenty Twenty-One 1.0
  19       */
  20  	public function __construct() {
  21  
  22          // Enqueue color variables for customizer & frontend.
  23          add_action( 'wp_enqueue_scripts', array( $this, 'custom_color_variables' ) );
  24  
  25          // Enqueue color variables for editor.
  26          add_action( 'enqueue_block_editor_assets', array( $this, 'editor_custom_color_variables' ) );
  27  
  28          // Add body-class if needed.
  29          add_filter( 'body_class', array( $this, 'body_class' ) );
  30      }
  31  
  32      /**
  33       * Determine the luminance of the given color and then return #fff or #000 so that the text is always readable.
  34       *
  35       * @since Twenty Twenty-One 1.0
  36       *
  37       * @param string $background_color The background color.
  38       * @return string (hex color)
  39       */
  40  	public function custom_get_readable_color( $background_color ) {
  41          return ( 127 < self::get_relative_luminance_from_hex( $background_color ) ) ? '#000' : '#fff';
  42      }
  43  
  44      /**
  45       * Generate color variables.
  46       *
  47       * Adjust the color value of the CSS variables depending on the background color theme mod.
  48       * Both text and link colors needs to be updated.
  49       * The code below needs to be updated, because the colors are no longer theme mods.
  50       *
  51       * @since Twenty Twenty-One 1.0
  52       *
  53       * @param string|null $context Can be "editor" or null.
  54       * @return string
  55       */
  56  	public function generate_custom_color_variables( $context = null ) {
  57  
  58          $theme_css        = 'editor' === $context ? ':root .editor-styles-wrapper{' : ':root{';
  59          $background_color = get_theme_mod( 'background_color', 'D1E4DD' );
  60  
  61          if ( 'd1e4dd' !== strtolower( $background_color ) ) {
  62              $theme_css .= '--global--color-background: #' . $background_color . ';';
  63              $theme_css .= '--global--color-primary: ' . $this->custom_get_readable_color( $background_color ) . ';';
  64              $theme_css .= '--global--color-secondary: ' . $this->custom_get_readable_color( $background_color ) . ';';
  65              $theme_css .= '--button--color-background: ' . $this->custom_get_readable_color( $background_color ) . ';';
  66              $theme_css .= '--button--color-text-hover: ' . $this->custom_get_readable_color( $background_color ) . ';';
  67  
  68              if ( '#fff' === $this->custom_get_readable_color( $background_color ) ) {
  69                  $theme_css .= '--table--stripes-border-color: rgba(240, 240, 240, 0.15);';
  70                  $theme_css .= '--table--stripes-background-color: rgba(240, 240, 240, 0.15);';
  71              }
  72          }
  73  
  74          $theme_css .= '}';
  75  
  76          return $theme_css;
  77      }
  78  
  79      /**
  80       * Customizer & frontend custom color variables.
  81       *
  82       * @since Twenty Twenty-One 1.0
  83       *
  84       * @return void
  85       */
  86  	public function custom_color_variables() {
  87          if ( 'd1e4dd' !== strtolower( get_theme_mod( 'background_color', 'D1E4DD' ) ) ) {
  88              wp_add_inline_style( 'twenty-twenty-one-style', $this->generate_custom_color_variables() );
  89          }
  90      }
  91  
  92      /**
  93       * Editor custom color variables.
  94       *
  95       * @since Twenty Twenty-One 1.0
  96       *
  97       * @return void
  98       */
  99  	public function editor_custom_color_variables() {
 100          wp_enqueue_style(
 101              'twenty-twenty-one-custom-color-overrides',
 102              get_theme_file_uri( 'assets/css/custom-color-overrides.css' ),
 103              array(),
 104              wp_get_theme()->get( 'Version' )
 105          );
 106  
 107          $background_color = get_theme_mod( 'background_color', 'D1E4DD' );
 108          if ( 'd1e4dd' !== strtolower( $background_color ) ) {
 109              wp_add_inline_style( 'twenty-twenty-one-custom-color-overrides', $this->generate_custom_color_variables( 'editor' ) );
 110          }
 111      }
 112  
 113      /**
 114       * Get luminance from a HEX color.
 115       *
 116       * @static
 117       *
 118       * @since Twenty Twenty-One 1.0
 119       *
 120       * @param string $hex The HEX color.
 121       * @return int Returns a number (0-255).
 122       */
 123  	public static function get_relative_luminance_from_hex( $hex ) {
 124  
 125          // Remove the "#" symbol from the beginning of the color.
 126          $hex = ltrim( $hex, '#' );
 127  
 128          // Make sure there are 6 digits for the below calculations.
 129          if ( 3 === strlen( $hex ) ) {
 130              $hex = substr( $hex, 0, 1 ) . substr( $hex, 0, 1 ) . substr( $hex, 1, 1 ) . substr( $hex, 1, 1 ) . substr( $hex, 2, 1 ) . substr( $hex, 2, 1 );
 131          }
 132  
 133          // Get red, green, blue.
 134          $red   = hexdec( substr( $hex, 0, 2 ) );
 135          $green = hexdec( substr( $hex, 2, 2 ) );
 136          $blue  = hexdec( substr( $hex, 4, 2 ) );
 137  
 138          // Calculate the luminance.
 139          $lum = ( 0.2126 * $red ) + ( 0.7152 * $green ) + ( 0.0722 * $blue );
 140          return (int) round( $lum );
 141      }
 142  
 143      /**
 144       * Adds a class to <body> if the background-color is dark.
 145       *
 146       * @since Twenty Twenty-One 1.0
 147       *
 148       * @param array $classes The existing body classes.
 149       * @return array
 150       */
 151  	public function body_class( $classes ) {
 152          $background_color = get_theme_mod( 'background_color', 'D1E4DD' );
 153          $luminance        = self::get_relative_luminance_from_hex( $background_color );
 154  
 155          if ( 127 > $luminance ) {
 156              $classes[] = 'is-dark-theme';
 157          } else {
 158              $classes[] = 'is-light-theme';
 159          }
 160  
 161          if ( 225 <= $luminance ) {
 162              $classes[] = 'has-background-white';
 163          }
 164  
 165          return $classes;
 166      }
 167  }


Generated: Sun Oct 24 01:00:03 2021 Cross-referenced by PHPXref 0.7.1