--- /dev/null
+<?php
+/**
+ * Custom Header functionality for Twenty Fifteen
+ *
+ * @package WordPress
+ * @subpackage Twenty_Fifteen
+ * @since Twenty Fifteen 1.0
+ */
+
+/**
+ * Set up the WordPress core custom header feature.
+ *
+ * @uses twentyfifteen_header_style()
+ */
+function twentyfifteen_custom_header_setup() {
+ $color_scheme = twentyfifteen_get_color_scheme();
+ $default_text_color = trim( $color_scheme[4], '#' );
+
+ /**
+ * Filter Twenty Fifteen custom-header support arguments.
+ *
+ * @since Twenty Fifteen 1.0
+ *
+ * @param array $args {
+ * An array of custom-header support arguments.
+ *
+ * @type string $default_text_color Default color of the header text.
+ * @type int $width Width in pixels of the custom header image. Default 954.
+ * @type int $height Height in pixels of the custom header image. Default 1300.
+ * @type string $wp-head-callback Callback function used to styles the header image and text
+ * displayed on the blog.
+ * }
+ */
+ add_theme_support( 'custom-header', apply_filters( 'twentyfifteen_custom_header_args', array(
+ 'default-text-color' => $default_text_color,
+ 'width' => 954,
+ 'height' => 1300,
+ 'wp-head-callback' => 'twentyfifteen_header_style',
+ ) ) );
+}
+add_action( 'after_setup_theme', 'twentyfifteen_custom_header_setup' );
+
+/**
+ * Convert HEX to RGB.
+ *
+ * @since Twenty Fifteen 1.0
+ *
+ * @param string $color The original color, in 3- or 6-digit hexadecimal form.
+ * @return array Array containing RGB (red, green, and blue) values for the given
+ * HEX code, empty array otherwise.
+ */
+function twentyfifteen_hex2rgb( $color ) {
+ $color = trim( $color, '#' );
+
+ if ( strlen( $color ) == 3 ) {
+ $r = hexdec( substr( $color, 0, 1 ).substr( $color, 0, 1 ) );
+ $g = hexdec( substr( $color, 1, 1 ).substr( $color, 1, 1 ) );
+ $b = hexdec( substr( $color, 2, 1 ).substr( $color, 2, 1 ) );
+ } else if ( strlen( $color ) == 6 ) {
+ $r = hexdec( substr( $color, 0, 2 ) );
+ $g = hexdec( substr( $color, 2, 2 ) );
+ $b = hexdec( substr( $color, 4, 2 ) );
+ } else {
+ return array();
+ }
+
+ return array( 'red' => $r, 'green' => $g, 'blue' => $b );
+}
+
+if ( ! function_exists( 'twentyfifteen_header_style' ) ) :
+/**
+ * Styles the header image and text displayed on the blog.
+ *
+ * @since Twenty Fifteen 1.0
+ *
+ * @see twentyfifteen_custom_header_setup()
+ */
+function twentyfifteen_header_style() {
+ $header_image = get_header_image();
+
+ // If no custom options for text are set, let's bail.
+ if ( empty( $header_image ) && display_header_text() ) {
+ return;
+ }
+
+ // If we get this far, we have custom styles. Let's do this.
+ ?>
+ <style type="text/css" id="twentyfifteen-header-css">
+ <?php
+ // Short header for when there is no Custom Header and Header Text is hidden.
+ if ( empty( $header_image ) && ! display_header_text() ) :
+ ?>
+ .site-header {
+ padding-top: 14px;
+ padding-bottom: 14px;
+ }
+
+ .site-branding {
+ min-height: 42px;
+ }
+
+ @media screen and (min-width: 46.25em) {
+ .site-header {
+ padding-top: 21px;
+ padding-bottom: 21px;
+ }
+ .site-branding {
+ min-height: 56px;
+ }
+ }
+ @media screen and (min-width: 55em) {
+ .site-header {
+ padding-top: 25px;
+ padding-bottom: 25px;
+ }
+ .site-branding {
+ min-height: 62px;
+ }
+ }
+ @media screen and (min-width: 59.6875em) {
+ .site-header {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+ .site-branding {
+ min-height: 0;
+ }
+ }
+ <?php
+ endif;
+
+ // Has a Custom Header been added?
+ if ( ! empty( $header_image ) ) :
+ ?>
+ .site-header {
+ background: url(<?php header_image(); ?>) no-repeat 50% 50%;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+ }
+
+ @media screen and (min-width: 59.6875em) {
+ body:before {
+ background: url(<?php header_image(); ?>) no-repeat 100% 50%;
+ -webkit-background-size: cover;
+ -moz-background-size: cover;
+ -o-background-size: cover;
+ background-size: cover;
+ border-right: 0;
+ }
+
+ .site-header {
+ background: transparent;
+ }
+ }
+ <?php
+ endif;
+
+ // Has the text been hidden?
+ if ( ! display_header_text() ) :
+ ?>
+ .site-title,
+ .site-description {
+ clip: rect(1px, 1px, 1px, 1px);
+ position: absolute;
+ }
+ <?php endif; ?>
+ </style>
+ <?php
+}
+endif; // twentyfifteen_header_style
+
+/**
+ * Enqueues front-end CSS for the header background color.
+ *
+ * @since Twenty Fifteen 1.0
+ *
+ * @see wp_add_inline_style()
+ */
+function twentyfifteen_header_background_color_css() {
+ $color_scheme = twentyfifteen_get_color_scheme();
+ $default_color = $color_scheme[1];
+ $header_background_color = get_theme_mod( 'header_background_color', $default_color );
+
+ // Don't do anything if the current color is the default.
+ if ( $header_background_color === $default_color ) {
+ return;
+ }
+
+ $css = '
+ /* Custom Header Background Color */
+ body:before,
+ .site-header {
+ background-color: %1$s;
+ }
+
+ @media screen and (min-width: 59.6875em) {
+ .site-header,
+ .secondary {
+ background-color: transparent;
+ }
+
+ .widget button,
+ .widget input[type="button"],
+ .widget input[type="reset"],
+ .widget input[type="submit"],
+ .widget_calendar tbody a,
+ .widget_calendar tbody a:hover,
+ .widget_calendar tbody a:focus {
+ color: %1$s;
+ }
+ }
+ ';
+
+ wp_add_inline_style( 'twentyfifteen-style', sprintf( $css, $header_background_color ) );
+}
+add_action( 'wp_enqueue_scripts', 'twentyfifteen_header_background_color_css', 11 );
+
+/**
+ * Enqueues front-end CSS for the sidebar text color.
+ *
+ * @since Twenty Fifteen 1.0
+ */
+function twentyfifteen_sidebar_text_color_css() {
+ $color_scheme = twentyfifteen_get_color_scheme();
+ $default_color = $color_scheme[4];
+ $sidebar_link_color = get_theme_mod( 'sidebar_textcolor', $default_color );
+
+ // Don't do anything if the current color is the default.
+ if ( $sidebar_link_color === $default_color ) {
+ return;
+ }
+
+ // If we get this far, we have custom styles. Let's do this.
+ $sidebar_link_color_rgb = twentyfifteen_hex2rgb( $sidebar_link_color );
+ $sidebar_text_color = vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.7)', $sidebar_link_color_rgb );
+ $sidebar_border_color = vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.1)', $sidebar_link_color_rgb );
+ $sidebar_border_focus_color = vsprintf( 'rgba( %1$s, %2$s, %3$s, 0.3)', $sidebar_link_color_rgb );
+
+ $css = '
+ /* Custom Sidebar Text Color */
+ .site-title a,
+ .site-description,
+ .secondary-toggle:before {
+ color: %1$s;
+ }
+
+ .site-title a:hover,
+ .site-title a:focus {
+ color: %1$s; /* Fallback for IE7 and IE8 */
+ color: %2$s;
+ }
+
+ .secondary-toggle {
+ border-color: %1$s; /* Fallback for IE7 and IE8 */
+ border-color: %3$s;
+ }
+
+ .secondary-toggle:hover,
+ .secondary-toggle:focus {
+ border-color: %1$s; /* Fallback for IE7 and IE8 */
+ border-color: %4$s;
+ }
+
+ .site-title a {
+ outline-color: %1$s; /* Fallback for IE7 and IE8 */
+ outline-color: %4$s;
+ }
+
+ @media screen and (min-width: 59.6875em) {
+ .secondary a,
+ .dropdown-toggle:after,
+ .widget-title,
+ .widget blockquote cite,
+ .widget blockquote small {
+ color: %1$s;
+ }
+
+ .widget button,
+ .widget input[type="button"],
+ .widget input[type="reset"],
+ .widget input[type="submit"],
+ .widget_calendar tbody a {
+ background-color: %1$s;
+ }
+
+ .textwidget a {
+ border-color: %1$s;
+ }
+
+ .secondary a:hover,
+ .secondary a:focus,
+ .main-navigation .menu-item-description,
+ .widget,
+ .widget blockquote,
+ .widget .wp-caption-text,
+ .widget .gallery-caption {
+ color: %2$s;
+ }
+
+ .widget button:hover,
+ .widget button:focus,
+ .widget input[type="button"]:hover,
+ .widget input[type="button"]:focus,
+ .widget input[type="reset"]:hover,
+ .widget input[type="reset"]:focus,
+ .widget input[type="submit"]:hover,
+ .widget input[type="submit"]:focus,
+ .widget_calendar tbody a:hover,
+ .widget_calendar tbody a:focus {
+ background-color: %2$s;
+ }
+
+ .widget blockquote {
+ border-color: %2$s;
+ }
+
+ .main-navigation ul,
+ .main-navigation li,
+ .secondary-toggle,
+ .widget input,
+ .widget textarea,
+ .widget table,
+ .widget th,
+ .widget td,
+ .widget pre,
+ .widget li,
+ .widget_categories .children,
+ .widget_nav_menu .sub-menu,
+ .widget_pages .children,
+ .widget abbr[title] {
+ border-color: %3$s;
+ }
+
+ .dropdown-toggle:hover,
+ .dropdown-toggle:focus,
+ .widget hr {
+ background-color: %3$s;
+ }
+
+ .widget input:focus,
+ .widget textarea:focus {
+ border-color: %4$s;
+ }
+
+ .sidebar a:focus,
+ .dropdown-toggle:focus {
+ outline-color: %4$s;
+ }
+ }
+ ';
+
+ wp_add_inline_style( 'twentyfifteen-style', sprintf( $css, $sidebar_link_color, $sidebar_text_color, $sidebar_border_color, $sidebar_border_focus_color ) );
+}
+add_action( 'wp_enqueue_scripts', 'twentyfifteen_sidebar_text_color_css', 11 );