diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..961aa9c --- /dev/null +++ b/.eslintrc @@ -0,0 +1,8 @@ +{ + "extends": [ + "plugin:@wordpress/eslint-plugin/es5" + ], + "env": { + "browser": true + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fff7c8f --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/node_modules +/vendor +package-lock.json +composer.lock diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index edf97ac..0000000 --- a/.jscsrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "preset": "wordpress", - "fileExtensions": [ ".js" ], - "excludeFiles": [ - "js/**.min.js" - ] -} diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index eef19b5..0000000 --- a/.jshintignore +++ /dev/null @@ -1 +0,0 @@ -js/**.min.js diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..55b598d --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,15 @@ +{ + "extends": [ + "stylelint-config-wordpress/scss" + ], + "ignoreFiles": [ + "sass/_normalize.scss" + ], + "rules": { + "font-family-no-missing-generic-family-keyword": null, + "no-descending-specificity": null, + "block-no-empty": null, + "no-duplicate-selectors": null, + "font-family-no-duplicate-names": null + } +} diff --git a/.travis.yml b/.travis.yml index 4840c9f..4545c1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,92 +4,67 @@ # For use with the Underscores WordPress theme. # @link https://github.com/Automattic/_s -# Ditch sudo and use containers. -# @link https://docs.travis-ci.com/user/migrating-from-legacy/#Why-migrate-to-container-based-infrastructure%3F -# @link https://docs.travis-ci.com/user/workers/container-based-infrastructure/#Routing-your-build-to-container-based-infrastructure -sudo: false +# Tell Travis CI which distro to use. dist: trusty +# Cache directories between builds. +# @link https://docs.travis-ci.com/user/caching/#arbitrary-directories +cache: + directories: + # Cache directory for npm. + - $HOME/.npm + # Cache directory for older Composer versions. + - $HOME/.composer/cache/files + # Cache directory for more recent Composer versions. + - $HOME/.cache/composer/files + # Declare project language. -# @link https://about.travis-ci.org/docs/user/languages/php/ -language: php +# @link https://docs.travis-ci.com/user/languages/php/ +language: + - php + +php: + - 5.6 + - 7.0 + - 7.1 + - 7.2 + - 7.3 -# Declare versions of PHP to use. Use one decimal max. -# @link https://docs.travis-ci.com/user/build-configuration/ matrix: - fast_finish: true + fast_finish: true + include: + - php: 7.4 + env: SNIFF=1 - include: - # Current $required_php_version for WordPress: 5.2.4 - # aliased to 5.2.17 - - php: '5.2' - dist: precise - # aliased to a recent 5.6.x version - - php: '5.6' - env: SNIFF=1 - # aliased to a recent 7.0.x version - - php: '7.0' - # aliased to a recent 7.2.x version - - php: '7.2' - # bleeding edge PHP - - php: 'nightly' +before_install: + # Speed up build time by disabling Xdebug. + - phpenv config-rm xdebug.ini || echo 'No xdebug config.' + # Download and install the latest long-term support release of node. + - nvm install --lts + # Install Composer dependencies. + - composer install + # Install NPM dependencies. + - npm install - allow_failures: - - php: 'nightly' - -# Use this to prepare the system to install prerequisites or dependencies. -# e.g. sudo apt-get update. -# Failures in this section will result in build status 'errored'. -# before_install: - -# Use this to prepare your build for testing. -# e.g. copy database configurations, environment variables, etc. -# Failures in this section will result in build status 'errored'. -before_script: - # Speed up build time by disabling Xdebug. - - phpenv config-rm xdebug.ini || echo 'No xdebug config.' - # Set up temporary paths. - - export PHPCS_DIR=/tmp/phpcs - - export WPCS_DIR=/tmp/wpcs - - export PHPCOMPAT_DIR=/tmp/phpcompatibility - # Install CodeSniffer for WordPress Coding Standards checks. - - if [[ "$SNIFF" == "1" ]]; then git clone -b master --depth 1 https://github.com/squizlabs/PHP_CodeSniffer.git $PHPCS_DIR; fi - # Install WordPress Coding Standards. - - if [[ "$SNIFF" == "1" ]]; then git clone -b 0.14.1 --depth 1 https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git $WPCS_DIR; fi - # Install PHP Compatibility sniffs. - - if [[ "$SNIFF" == "1" ]]; then git clone -b master --depth 1 https://github.com/wimg/PHPCompatibility.git $PHPCOMPAT_DIR; fi - # Set install path for PHPCS sniffs. - # @link https://github.com/squizlabs/PHP_CodeSniffer/blob/4237c2fc98cc838730b76ee9cee316f99286a2a7/CodeSniffer.php#L1941 - - if [[ "$SNIFF" == "1" ]]; then $PHPCS_DIR/bin/phpcs --config-set installed_paths $WPCS_DIR,$PHPCOMPAT_DIR; fi - # After CodeSniffer install you should refresh your path. - - if [[ "$SNIFF" == "1" ]]; then phpenv rehash; fi - # Install JSCS: JavaScript Code Style checker. - # @link http://jscs.info/ - - if [[ "$SNIFF" == "1" ]]; then npm install -g jscs; fi - # Install JSHint, a JavaScript Code Quality Tool. - # @link http://jshint.com/docs/ - - if [[ "$SNIFF" == "1" ]]; then npm install -g jshint; fi - # Pull in the WP Core jshint rules. - - if [[ "$SNIFF" == "1" ]]; then wget https://develop.svn.wordpress.org/trunk/.jshintrc; fi - -# Run test script commands. -# Default is specific to project language. -# All commands must exit with code 0 on success. Anything else is considered failure. script: - # Search for PHP syntax errors. - - find -L . -name '*.php' -print0 | xargs -0 -n 1 -P 4 php -l - # Run the theme through JSHint. - - if [[ "$SNIFF" == "1" ]]; then jshint .; fi - # Run the theme through JavaScript Code Style checker. - - if [[ "$SNIFF" == "1" ]]; then jscs .; fi - # WordPress Coding Standards. - # @link https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards - # @link https://pear.php.net/package/PHP_CodeSniffer/ - # Uses a custom ruleset based on WordPress. This ruleset is automatically - # picked up by PHPCS as it's named `phpcs.xml(.dist)`. - - if [[ "$SNIFF" == "1" ]]; then $PHPCS_DIR/bin/phpcs --runtime-set ignore_warnings_on_exit 1; fi + # Validate the composer.json file. + # @link https://getcomposer.org/doc/03-cli.md#validate + - composer validate --no-check-all --strict + + # Search for PHP syntax errors using PHP Parallel Lint. + # @link https://github.com/php-parallel-lint/PHP-Parallel-Lint + - composer lint:php + + # Check the PHP files with the coding standards documented in the phpcs.xml.dist file. + - if [[ "$SNIFF" == 1 ]]; then composer lint:wpcs; fi + + # Check the JS files with the lint-js script defined in the @wordpress/scripts package. + - if [[ "$SNIFF" == 1 ]]; then npm run lint:js; fi + + # Check the SCSS files with the lint-style script defined in the @wordpress/scripts package. + - if [[ "$SNIFF" == 1 ]]; then npm run lint:scss; fi # Receive notifications for build results. -# @link https://docs.travis-ci.com/user/notifications/#Email-notifications +# @link https://docs.travis-ci.com/user/notifications/#configuring-email-notifications notifications: email: false diff --git a/404.php b/404.php index 62c3e06..ba5d537 100644 --- a/404.php +++ b/404.php @@ -31,13 +31,15 @@ get_header();

diff --git a/README.md b/README.md index 8c459ad..624e244 100644 --- a/README.md +++ b/README.md @@ -31,14 +31,16 @@ If you want to set things up manually, download `_s` from GitHub. The first thin 3. Search for `Text Domain: _s` in `style.css`. 4. Search for  _s (with a space before it) to capture DocBlocks. 5. Search for `_s-` to capture prefixed handles. +6. Search for `_S_` (in uppercase) to capture constants. OR -1. Search for: `'_s'` and replace with: `'megatherium-is-awesome'` -2. Search for: `_s_` and replace with: `megatherium_is_awesome_` +1. Search for: `'_s'` and replace with: `'megatherium-is-awesome'`. +2. Search for: `_s_` and replace with: `megatherium_is_awesome_`. 3. Search for: `Text Domain: _s` and replace with: `Text Domain: megatherium-is-awesome` in `style.css`. -4. Search for:  _s and replace with:  Megatherium_is_Awesome -5. Search for: `_s-` and replace with: `megatherium-is-awesome-` +4. Search for:  _s and replace with:  Megatherium_is_Awesome. +5. Search for: `_s-` and replace with: `megatherium-is-awesome-`. +6. Search for: `_S_` and replace with: `MEGATHERIUM_IS_AWESOME_`. Then, update the stylesheet header in `style.css`, the links in `footer.php` with your own information and rename `_s.pot` from `languages` folder to use the theme's slug. Next, update or delete this readme. diff --git a/comments.php b/comments.php index 2c94bfd..364973f 100644 --- a/comments.php +++ b/comments.php @@ -33,14 +33,14 @@ if ( post_password_required() ) { printf( /* translators: 1: title. */ esc_html__( 'One thought on “%1$s”', '_s' ), - '' . get_the_title() . '' + '' . wp_kses_post( get_the_title() ) . '' ); } else { - printf( // WPCS: XSS OK. + printf( /* translators: 1: comment count number, 2: title. */ esc_html( _nx( '%1$s thought on “%2$s”', '%1$s thoughts on “%2$s”', $_s_comment_count, 'comments title', '_s' ) ), - number_format_i18n( $_s_comment_count ), - '' . get_the_title() . '' + number_format_i18n( $_s_comment_count ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + '' . wp_kses_post( get_the_title() ) . '' ); } ?> @@ -50,10 +50,12 @@ if ( post_password_required() ) {
    'ol', - 'short_ping' => true, - ) ); + wp_list_comments( + array( + 'style' => 'ol', + 'short_ping' => true, + ) + ); ?>
diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..4bfdcb9 --- /dev/null +++ b/composer.json @@ -0,0 +1,35 @@ +{ + "name": "automattic/underscores", + "type": "wordpress-theme", + "description": "Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for.", + "keywords": [ + "WordPress", + "Themes" + ], + "homepage": "https://github.com/Automattic/_s", + "license": "GPL-2.0-or-later", + "authors": [ + { + "name": "Contributors", + "homepage": "https://github.com/Automattic/_s/graphs/contributors" + } + ], + "require": { + "php": ">=5.6" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2", + "wptrt/wpthemereview": "^0.2.1", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "wp-cli/i18n-command": "^2.2" + }, + "scripts": { + "lint:wpcs": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs", + "lint:php": "@php ./vendor/bin/parallel-lint --exclude .git --exclude vendor .", + "make-pot": "wp i18n make-pot . languages/_s.pot" + }, + "support": { + "issues": "https://github.com/Automattic/_s/issues", + "source": "https://github.com/Automattic/_s" + } +} diff --git a/functions.php b/functions.php index b7134e7..32d2dcc 100644 --- a/functions.php +++ b/functions.php @@ -7,6 +7,11 @@ * @package _s */ +if ( ! defined( '_S_VERSION' ) ) { + // Replace the version number of the theme on each release. + define( '_S_VERSION', '1.0.0' ); +} + if ( ! function_exists( '_s_setup' ) ) : /** * Sets up theme defaults and registers support for various WordPress features. @@ -43,27 +48,38 @@ if ( ! function_exists( '_s_setup' ) ) : add_theme_support( 'post-thumbnails' ); // This theme uses wp_nav_menu() in one location. - register_nav_menus( array( - 'menu-1' => esc_html__( 'Primary', '_s' ), - ) ); + register_nav_menus( + array( + 'menu-1' => esc_html__( 'Primary', '_s' ), + ) + ); /* * Switch default core markup for search form, comment form, and comments * to output valid HTML5. */ - add_theme_support( 'html5', array( - 'search-form', - 'comment-form', - 'comment-list', - 'gallery', - 'caption', - ) ); + add_theme_support( + 'html5', + array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) + ); // Set up the WordPress core custom background feature. - add_theme_support( 'custom-background', apply_filters( '_s_custom_background_args', array( - 'default-color' => 'ffffff', - 'default-image' => '', - ) ) ); + add_theme_support( + 'custom-background', + apply_filters( + '_s_custom_background_args', + array( + 'default-color' => 'ffffff', + 'default-image' => '', + ) + ) + ); // Add theme support for selective refresh for widgets. add_theme_support( 'customize-selective-refresh-widgets' ); @@ -73,12 +89,15 @@ if ( ! function_exists( '_s_setup' ) ) : * * @link https://codex.wordpress.org/Theme_Logo */ - add_theme_support( 'custom-logo', array( - 'height' => 250, - 'width' => 250, - 'flex-width' => true, - 'flex-height' => true, - ) ); + add_theme_support( + 'custom-logo', + array( + 'height' => 250, + 'width' => 250, + 'flex-width' => true, + 'flex-height' => true, + ) + ); } endif; add_action( 'after_setup_theme', '_s_setup' ); @@ -104,15 +123,17 @@ add_action( 'after_setup_theme', '_s_content_width', 0 ); * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar */ function _s_widgets_init() { - register_sidebar( array( - 'name' => esc_html__( 'Sidebar', '_s' ), - 'id' => 'sidebar-1', - 'description' => esc_html__( 'Add widgets here.', '_s' ), - 'before_widget' => '
', - 'after_widget' => '
', - 'before_title' => '

', - 'after_title' => '

', - ) ); + register_sidebar( + array( + 'name' => esc_html__( 'Sidebar', '_s' ), + 'id' => 'sidebar-1', + 'description' => esc_html__( 'Add widgets here.', '_s' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) + ); } add_action( 'widgets_init', '_s_widgets_init' ); @@ -120,11 +141,11 @@ add_action( 'widgets_init', '_s_widgets_init' ); * Enqueue scripts and styles. */ function _s_scripts() { - wp_enqueue_style( '_s-style', get_stylesheet_uri() ); + wp_enqueue_style( '_s-style', get_stylesheet_uri(), array(), _S_VERSION ); - wp_enqueue_script( '_s-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '20151215', true ); + wp_enqueue_script( '_s-navigation', get_template_directory_uri() . '/js/navigation.js', array(), _S_VERSION, true ); - wp_enqueue_script( '_s-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20151215', true ); + wp_enqueue_script( '_s-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), _S_VERSION, true ); if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { wp_enqueue_script( 'comment-reply' ); diff --git a/header.php b/header.php index e5c99d7..527ab38 100644 --- a/header.php +++ b/header.php @@ -21,6 +21,7 @@ > +
@@ -40,17 +41,19 @@ $_s_description = get_bloginfo( 'description', 'display' ); if ( $_s_description || is_customize_preview() ) : ?> -

+

diff --git a/inc/custom-header.php b/inc/custom-header.php index a4c2a6c..5176f17 100644 --- a/inc/custom-header.php +++ b/inc/custom-header.php @@ -17,14 +17,20 @@ * @uses _s_header_style() */ function _s_custom_header_setup() { - add_theme_support( 'custom-header', apply_filters( '_s_custom_header_args', array( - 'default-image' => '', - 'default-text-color' => '000000', - 'width' => 1000, - 'height' => 250, - 'flex-height' => true, - 'wp-head-callback' => '_s_header_style', - ) ) ); + add_theme_support( + 'custom-header', + apply_filters( + '_s_custom_header_args', + array( + 'default-image' => '', + 'default-text-color' => '000000', + 'width' => 1000, + 'height' => 250, + 'flex-height' => true, + 'wp-head-callback' => '_s_header_style', + ) + ) + ); } add_action( 'after_setup_theme', '_s_custom_header_setup' ); @@ -56,9 +62,9 @@ if ( ! function_exists( '_s_header_style' ) ) : .site-description { position: absolute; clip: rect(1px, 1px, 1px, 1px); - } - .site-title a, diff --git a/inc/customizer.php b/inc/customizer.php index 190c3d9..10e277d 100644 --- a/inc/customizer.php +++ b/inc/customizer.php @@ -16,14 +16,20 @@ function _s_customize_register( $wp_customize ) { $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; if ( isset( $wp_customize->selective_refresh ) ) { - $wp_customize->selective_refresh->add_partial( 'blogname', array( - 'selector' => '.site-title a', - 'render_callback' => '_s_customize_partial_blogname', - ) ); - $wp_customize->selective_refresh->add_partial( 'blogdescription', array( - 'selector' => '.site-description', - 'render_callback' => '_s_customize_partial_blogdescription', - ) ); + $wp_customize->selective_refresh->add_partial( + 'blogname', + array( + 'selector' => '.site-title a', + 'render_callback' => '_s_customize_partial_blogname', + ) + ); + $wp_customize->selective_refresh->add_partial( + 'blogdescription', + array( + 'selector' => '.site-description', + 'render_callback' => '_s_customize_partial_blogdescription', + ) + ); } } add_action( 'customize_register', '_s_customize_register' ); diff --git a/inc/jetpack.php b/inc/jetpack.php index 3831099..2a82dfb 100644 --- a/inc/jetpack.php +++ b/inc/jetpack.php @@ -16,31 +16,37 @@ */ function _s_jetpack_setup() { // Add theme support for Infinite Scroll. - add_theme_support( 'infinite-scroll', array( - 'container' => 'main', - 'render' => '_s_infinite_scroll_render', - 'footer' => 'page', - ) ); + add_theme_support( + 'infinite-scroll', + array( + 'container' => 'main', + 'render' => '_s_infinite_scroll_render', + 'footer' => 'page', + ) + ); // Add theme support for Responsive Videos. add_theme_support( 'jetpack-responsive-videos' ); // Add theme support for Content Options. - add_theme_support( 'jetpack-content-options', array( - 'post-details' => array( - 'stylesheet' => '_s-style', - 'date' => '.posted-on', - 'categories' => '.cat-links', - 'tags' => '.tags-links', - 'author' => '.byline', - 'comment' => '.comments-link', - ), - 'featured-images' => array( - 'archive' => true, - 'post' => true, - 'page' => true, - ), - ) ); + add_theme_support( + 'jetpack-content-options', + array( + 'post-details' => array( + 'stylesheet' => '_s-style', + 'date' => '.posted-on', + 'categories' => '.cat-links', + 'tags' => '.tags-links', + 'author' => '.byline', + 'comment' => '.comments-link', + ), + 'featured-images' => array( + 'archive' => true, + 'post' => true, + 'page' => true, + ), + ) + ); } add_action( 'after_setup_theme', '_s_jetpack_setup' ); diff --git a/inc/template-tags.php b/inc/template-tags.php index bc5fd31..a9a1f1b 100644 --- a/inc/template-tags.php +++ b/inc/template-tags.php @@ -17,7 +17,8 @@ if ( ! function_exists( '_s_posted_on' ) ) : $time_string = ''; } - $time_string = sprintf( $time_string, + $time_string = sprintf( + $time_string, esc_attr( get_the_date( DATE_W3C ) ), esc_html( get_the_date() ), esc_attr( get_the_modified_date( DATE_W3C ) ), @@ -30,7 +31,7 @@ if ( ! function_exists( '_s_posted_on' ) ) : '' . $time_string . '' ); - echo '' . $posted_on . ''; // WPCS: XSS OK. + echo '' . $posted_on . ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } endif; @@ -46,7 +47,7 @@ if ( ! function_exists( '_s_posted_by' ) ) : '' . esc_html( get_the_author() ) . '' ); - echo ' ' . $byline . ''; // WPCS: XSS OK. + echo ' ' . $byline . ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } endif; @@ -62,14 +63,14 @@ if ( ! function_exists( '_s_entry_footer' ) ) : $categories_list = get_the_category_list( esc_html__( ', ', '_s' ) ); if ( $categories_list ) { /* translators: 1: list of categories. */ - printf( '' . esc_html__( 'Posted in %1$s', '_s' ) . '', $categories_list ); // WPCS: XSS OK. + printf( '' . esc_html__( 'Posted in %1$s', '_s' ) . '', $categories_list ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /* translators: used between list items, there is a space after the comma */ $tags_list = get_the_tag_list( '', esc_html_x( ', ', 'list item separator', '_s' ) ); if ( $tags_list ) { /* translators: 1: list of tags. */ - printf( '' . esc_html__( 'Tagged %1$s', '_s' ) . '', $tags_list ); // WPCS: XSS OK. + printf( '' . esc_html__( 'Tagged %1$s', '_s' ) . '', $tags_list ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } @@ -86,7 +87,7 @@ if ( ! function_exists( '_s_entry_footer' ) ) : ), ) ), - get_the_title() + wp_kses_post( get_the_title() ) ) ); echo ''; @@ -103,7 +104,7 @@ if ( ! function_exists( '_s_entry_footer' ) ) : ), ) ), - get_the_title() + wp_kses_post( get_the_title() ) ), '', '' @@ -132,17 +133,33 @@ if ( ! function_exists( '_s_post_thumbnail' ) ) : - + - 150, + 'single_image_width' => 300, + 'product_grid' => array( + 'default_rows' => 3, + 'min_rows' => 1, + 'default_columns' => 4, + 'min_columns' => 1, + 'max_columns' => 6, + ), + ) + ); add_theme_support( 'wc-product-gallery-zoom' ); add_theme_support( 'wc-product-gallery-lightbox' ); add_theme_support( 'wc-product-gallery-slider' ); @@ -29,7 +43,7 @@ add_action( 'after_setup_theme', '_s_woocommerce_setup' ); * @return void */ function _s_woocommerce_scripts() { - wp_enqueue_style( '_s-woocommerce-style', get_template_directory_uri() . '/woocommerce.css' ); + wp_enqueue_style( '_s-woocommerce-style', get_template_directory_uri() . '/woocommerce.css', array(), _S_VERSION ); $font_path = WC()->plugin_url() . '/assets/fonts/'; $inline_font = '@font-face { @@ -70,36 +84,6 @@ function _s_woocommerce_active_body_class( $classes ) { } add_filter( 'body_class', '_s_woocommerce_active_body_class' ); -/** - * Products per page. - * - * @return integer number of products. - */ -function _s_woocommerce_products_per_page() { - return 12; -} -add_filter( 'loop_shop_per_page', '_s_woocommerce_products_per_page' ); - -/** - * Product gallery thumnbail columns. - * - * @return integer number of columns. - */ -function _s_woocommerce_thumbnail_columns() { - return 4; -} -add_filter( 'woocommerce_product_thumbnails_columns', '_s_woocommerce_thumbnail_columns' ); - -/** - * Default loop columns on product archives. - * - * @return integer products per row. - */ -function _s_woocommerce_loop_columns() { - return 3; -} -add_filter( 'loop_shop_columns', '_s_woocommerce_loop_columns' ); - /** * Related Products Args. * @@ -118,31 +102,6 @@ function _s_woocommerce_related_products_args( $args ) { } add_filter( 'woocommerce_output_related_products_args', '_s_woocommerce_related_products_args' ); -if ( ! function_exists( '_s_woocommerce_product_columns_wrapper' ) ) { - /** - * Product columns wrapper. - * - * @return void - */ - function _s_woocommerce_product_columns_wrapper() { - $columns = _s_woocommerce_loop_columns(); - echo '
'; - } -} -add_action( 'woocommerce_before_shop_loop', '_s_woocommerce_product_columns_wrapper', 40 ); - -if ( ! function_exists( '_s_woocommerce_product_columns_wrapper_close' ) ) { - /** - * Product columns wrapper close. - * - * @return void - */ - function _s_woocommerce_product_columns_wrapper_close() { - echo '
'; - } -} -add_action( 'woocommerce_after_shop_loop', '_s_woocommerce_product_columns_wrapper_close', 40 ); - /** * Remove default WooCommerce wrapper. */ @@ -175,7 +134,7 @@ if ( ! function_exists( '_s_woocommerce_wrapper_after' ) ) { * @return void */ function _s_woocommerce_wrapper_after() { - ?> + ?> a, .page_item_has_children > a' ); if ( 'ontouchstart' in window ) { touchStartFn = function( e ) { - var menuItem = this.parentNode, i; + var menuItem = this.parentNode; if ( ! menuItem.classList.contains( 'focus' ) ) { e.preventDefault(); @@ -103,4 +113,4 @@ } } }( container ) ); -} )(); +}() ); diff --git a/js/skip-link-focus-fix.js b/js/skip-link-focus-fix.js index 0037752..bf9367e 100644 --- a/js/skip-link-focus-fix.js +++ b/js/skip-link-focus-fix.js @@ -28,4 +28,4 @@ } }, false ); } -} )(); +}() ); diff --git a/languages/_s.pot b/languages/_s.pot index 59216a2..22e332b 100644 --- a/languages/_s.pot +++ b/languages/_s.pot @@ -1,43 +1,70 @@ -# Copyright (C) 2017 Automattic +# Copyright (C) 2020 Automattic # This file is distributed under the GNU General Public License v2 or later. msgid "" msgstr "" "Project-Id-Version: _s 1.0.0\n" -"Report-Msgid-Bugs-To: https://wordpress.org/tags/_s\n" -"POT-Creation-Date: 2016-12-23 16:00+0100\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/_s\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n" -"Last-Translator:\n" -"Language-Team: LANGUAGE \n" -"X-Generator: grunt-wp-i18n 0.5.4\n" +"POT-Creation-Date: 2020-04-10T15:22:10+00:00\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"X-Generator: WP-CLI 2.4.0\n" +"X-Domain: _s\n" -#: 404.php:17 +#. Theme Name of the theme +msgid "_s" +msgstr "" + +#. Theme URI of the theme +msgid "https://underscores.me/" +msgstr "" + +#. Description of the theme +msgid "Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for." +msgstr "" + +#. Author of the theme +msgid "Automattic" +msgstr "" + +#. Author URI of the theme +msgid "https://automattic.com/" +msgstr "" + +#: 404.php:18 msgid "Oops! That page can’t be found." msgstr "" -#: 404.php:21 -msgid "" -"It looks like nothing was found at this location. Maybe try one of the " -"links below or a search?" +#: 404.php:22 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" msgstr "" -#: 404.php:30 +#: 404.php:31 msgid "Most Used Categories" msgstr "" -#: 404.php:47 #. translators: %1$s: smiley +#: 404.php:49 msgid "Try looking in the monthly archives. %1$s" msgstr "" -#: comments.php:34 #. translators: 1: title. +#: comments.php:35 msgid "One thought on “%1$s”" msgstr "" -#: comments.php:67 +#. translators: 1: comment count number, 2: title. +#: comments.php:41 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "" +msgstr[1] "" + +#: comments.php:68 msgid "Comments are closed." msgstr "" @@ -45,63 +72,93 @@ msgstr "" msgid "https://wordpress.org/" msgstr "" -#: footer.php:20 #. translators: %s: CMS name, i.e. WordPress. +#: footer.php:21 msgid "Proudly powered by %s" msgstr "" -#: footer.php:25 #. translators: 1: Theme name, 2: Theme author. +#: footer.php:27 msgid "Theme: %1$s by %2$s." msgstr "" -#: functions.php:47 +#: functions.php:53 msgid "Primary" msgstr "" -#: functions.php:105 +#: functions.php:128 msgid "Sidebar" msgstr "" -#: functions.php:107 +#: functions.php:130 msgid "Add widgets here." msgstr "" -#: header.php:24 +#: header.php:26 msgid "Skip to content" msgstr "" -#: header.php:45 +#: header.php:49 msgid "Primary Menu" msgstr "" -#: inc/template-tags.php:52 +#. translators: %s: post date. +#: inc/template-tags.php:30 +msgctxt "post date" +msgid "Posted on %s" +msgstr "" + +#. translators: %s: post author. +#: inc/template-tags.php:46 +msgctxt "post author" +msgid "by %s" +msgstr "" + #. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:63 msgid ", " msgstr "" -#: inc/template-tags.php:55 #. translators: 1: list of categories. +#: inc/template-tags.php:66 msgid "Posted in %1$s" msgstr "" -#: inc/template-tags.php:62 +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:70 +msgctxt "list item separator" +msgid ", " +msgstr "" + #. translators: 1: list of tags. +#: inc/template-tags.php:73 msgid "Tagged %1$s" msgstr "" -#: inc/template-tags.php:72 #. translators: %s: post title +#: inc/template-tags.php:83 msgid "Leave a Comment on %s" msgstr "" -#: inc/template-tags.php:89 template-parts/content-page.php:35 #. translators: %s: Name of current post. Only visible to screen readers +#: inc/template-tags.php:100 +#: template-parts/content-page.php:39 msgid "Edit %s" msgstr "" -#: search.php:21 +#: inc/woocommerce.php:227 +msgid "View your shopping cart" +msgstr "" + +#. translators: number of items in the mini cart. +#: inc/woocommerce.php:231 +msgid "%d item" +msgid_plural "%d items" +msgstr[0] "" +msgstr[1] "" + #. translators: %s: search query. +#: search.php:22 msgid "Search Results for: %s" msgstr "" @@ -109,78 +166,25 @@ msgstr "" msgid "Nothing Found" msgstr "" -#: template-parts/content-none.php:25 #. translators: 1: link to WP admin new post page. +#: template-parts/content-none.php:24 msgid "Ready to publish your first post? Get started here." msgstr "" -#: template-parts/content-none.php:38 -msgid "" -"Sorry, but nothing matched your search terms. Please try again with some " -"different keywords." +#: template-parts/content-none.php:37 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." msgstr "" #: template-parts/content-none.php:44 -msgid "" -"It seems we can’t find what you’re looking for. Perhaps " -"searching can help." +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." msgstr "" -#: template-parts/content-page.php:22 template-parts/content.php:45 +#: template-parts/content-page.php:25 +#: template-parts/content.php:53 msgid "Pages:" msgstr "" -#: template-parts/content.php:34 #. translators: %s: Name of current post. Only visible to screen readers +#: template-parts/content.php:40 msgid "Continue reading \"%s\"" msgstr "" - -#. Theme Name of the plugin/theme -msgid "_s" -msgstr "" - -#. Theme URI of the plugin/theme -msgid "https://underscores.me/" -msgstr "" - -#. Description of the plugin/theme -msgid "" -"Hi. I'm a starter theme called _s, or underscores, if " -"you like. I'm a theme meant for hacking so don't use me as a Parent " -"Theme. Instead try turning me into the next, most awesome, WordPress " -"theme out there. That's what I'm here for." -msgstr "" - -#. Author of the plugin/theme -msgid "Automattic" -msgstr "" - -#. Author URI of the plugin/theme -msgid "https://automattic.com/" -msgstr "" - -#: comments.php:40 -#. translators: 1: comment count number, 2: title. -msgctxt "comments title" -msgid "%1$s thought on “%2$s”" -msgid_plural "%1$s thoughts on “%2$s”" -msgstr[0] "" -msgstr[1] "" - -#: inc/template-tags.php:29 -#. translators: %s: post date. -msgctxt "post date" -msgid "Posted on %s" -msgstr "" - -#: inc/template-tags.php:35 -#. translators: %s: post author. -msgctxt "post author" -msgid "by %s" -msgstr "" - -#: inc/template-tags.php:59 -#. translators: used between list items, there is a space after the comma -msgctxt "list item separator" -msgid ", " -msgstr "" diff --git a/package.json b/package.json new file mode 100644 index 0000000..da584ee --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "underscores", + "version": "1.0.0", + "description": "Hi. I'm a starter theme called _s, or underscores, if you like. I'm a theme meant for hacking so don't use me as a Parent Theme. Instead try turning me into the next, most awesome, WordPress theme out there. That's what I'm here for.", + "author": "Automattic Theme Team", + "license": "GPL-2.0-or-later", + "keywords": [ + "WordPress", + "Theme" + ], + "homepage": "https://github.com/Automattic/_s#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/Automattic/_s.git" + }, + "bugs": { + "url": "https://github.com/Automattic/_s/issues" + }, + "devDependencies": { + "node-sass": "^4.13.1", + "@wordpress/scripts": "^7.2.0" + }, + "scripts": { + "compile:css": "node-sass sass/style.scss style.css && node-sass sass/woocommerce.scss woocommerce.css && stylelint '*.css' --fix || true && stylelint '*.css' --fix", + "lint:scss": "wp-scripts lint-style 'sass/**/*.scss'", + "lint:js": "wp-scripts lint-js 'js/*.js'" + } +} diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 578ce02..2105118 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -1,9 +1,9 @@ - - - + + + A custom set of code standard rules to check for WordPress themes. @@ -28,21 +28,28 @@ - - + + . + + /vendor/* + /node_modules/* + - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/readme.txt b/readme.txt index 55559d1..66fc766 100644 --- a/readme.txt +++ b/readme.txt @@ -34,5 +34,5 @@ _s includes support for Infinite Scroll in Jetpack. == Credits == -* Based on Underscores https://underscores.me/, (C) 2012-2017 Automattic, Inc., [GPLv2 or later](https://www.gnu.org/licenses/gpl-2.0.html) -* normalize.css https://necolas.github.io/normalize.css/, (C) 2012-2016 Nicolas Gallagher and Jonathan Neal, [MIT](https://opensource.org/licenses/MIT) +* Based on Underscores https://underscores.me/, (C) 2012-2020 Automattic, Inc., [GPLv2 or later](https://www.gnu.org/licenses/gpl-2.0.html) +* normalize.css https://necolas.github.io/normalize.css/, (C) 2012-2018 Nicolas Gallagher and Jonathan Neal, [MIT](https://opensource.org/licenses/MIT) diff --git a/rtl.css b/rtl.css index c59ed61..8729dfd 100644 --- a/rtl.css +++ b/rtl.css @@ -1,8 +1,8 @@ /* Theme Name: _s -Adding support for languages written in a Right To Left (RTL) direction is easy - -it's just a matter of overwriting all the horizontal positioning attributes +Adding support for languages written in a Right To Left (RTL) direction is easy. +It's just a matter of overwriting all the horizontal positioning attributes of your CSS stylesheet in a separate stylesheet file named rtl.css. https://codex.wordpress.org/Right-to-Left_Language_Support diff --git a/sass/_normalize.scss b/sass/_normalize.scss index c5ad67a..a7301ab 100644 --- a/sass/_normalize.scss +++ b/sass/_normalize.scss @@ -9,8 +9,8 @@ */ html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ + line-height: 1.15; + -webkit-text-size-adjust: 100%; } /* Sections @@ -43,9 +43,9 @@ h1 { */ hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ + box-sizing: content-box; + height: 0; + overflow: visible; } /** @@ -54,8 +54,8 @@ hr { */ pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace, monospace; + font-size: 1em; } /* Text-level semantics @@ -75,9 +75,9 @@ a { */ abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; } /** @@ -97,8 +97,8 @@ strong { code, kbd, samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace, monospace; + font-size: 1em; } /** @@ -154,10 +154,10 @@ input, optgroup, select, textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; } /** @@ -166,7 +166,7 @@ textarea { */ button, -input { /* 1 */ +input { overflow: visible; } @@ -176,7 +176,7 @@ input { /* 1 */ */ button, -select { /* 1 */ +select { text-transform: none; } @@ -230,12 +230,12 @@ fieldset { */ legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; } /** @@ -261,8 +261,8 @@ textarea { [type="checkbox"], [type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ + box-sizing: border-box; + padding: 0; } /** @@ -280,8 +280,8 @@ textarea { */ [type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ + -webkit-appearance: textfield; + outline-offset: -2px; } /** @@ -298,8 +298,8 @@ textarea { */ ::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ + -webkit-appearance: button; + font: inherit; } /* Interactive diff --git a/sass/elements/_elements.scss b/sass/elements/_elements.scss index 2f68814..51ebb30 100644 --- a/sass/elements/_elements.scss +++ b/sass/elements/_elements.scss @@ -1,15 +1,17 @@ +/* Inherit box-sizing to more easily change it's value on a component level. +@link http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ +*, +*::before, +*::after { + box-sizing: inherit; +} + html { box-sizing: border-box; } -*, -*:before, -*:after { /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ - box-sizing: inherit; -} - body { - background: $color__background-body; /* Fallback for when there is no custom background color defined. */ + background: $color__background-body; // Fallback for when there is no custom background color defined. } hr { @@ -22,12 +24,12 @@ hr { @import "lists"; img { - height: auto; /* Make sure images are scaled correctly. */ - max-width: 100%; /* Adhere to container width. */ + height: auto; // Make sure images are scaled correctly. + max-width: 100%; // Adhere to container width. } figure { - margin: 1em 0; /* Extra wide images within figure tags don't overflow the content area. */ + margin: 1em 0; // Extra wide images within figure tags don't overflow the content area. } @import "tables"; diff --git a/sass/elements/_lists.scss b/sass/elements/_lists.scss index fcda0c1..f126366 100644 --- a/sass/elements/_lists.scss +++ b/sass/elements/_lists.scss @@ -1,4 +1,5 @@ -ul, ol { +ul, +ol { margin: 0 0 1.5em 3em; } @@ -17,7 +18,7 @@ li > ol { } dt { - font-weight: bold; + font-weight: 700; } dd { diff --git a/sass/forms/_buttons.scss b/sass/forms/_buttons.scss index cc54f95..cdd89c3 100644 --- a/sass/forms/_buttons.scss +++ b/sass/forms/_buttons.scss @@ -6,10 +6,12 @@ input[type="submit"] { border-color: $color__border-button; border-radius: 3px; background: $color__background-button; - color: rgba(0, 0, 0, .8); + color: rgba(0, 0, 0, 0.8); + @include font-size(0.75); + line-height: 1; - padding: .6em 1em .4em; + padding: 0.6em 1em 0.4em; &:hover { border-color: $color__border-button-hover; diff --git a/sass/forms/_forms.scss b/sass/forms/_forms.scss index 2036ef9..94fd5bd 100644 --- a/sass/forms/_forms.scss +++ b/sass/forms/_forms.scss @@ -1,3 +1,2 @@ @import "buttons"; - @import "fields"; diff --git a/sass/layout/_no-sidebar.scss b/sass/layout/_no-sidebar.scss index ae44e48..07cce07 100644 --- a/sass/layout/_no-sidebar.scss +++ b/sass/layout/_no-sidebar.scss @@ -1,4 +1,5 @@ .no-sidebar { + .content-area { float: none; margin-left: auto; diff --git a/sass/media/_captions.scss b/sass/media/_captions.scss index c299bfe..1f7f60c 100644 --- a/sass/media/_captions.scss +++ b/sass/media/_captions.scss @@ -3,6 +3,7 @@ max-width: 100%; img[class*="wp-image-"] { + @include center-block; } diff --git a/sass/media/_galleries.scss b/sass/media/_galleries.scss index c1773b8..f42aa46 100644 --- a/sass/media/_galleries.scss +++ b/sass/media/_galleries.scss @@ -10,8 +10,9 @@ // Loops to enumerate the classes for gallery columns. @for $i from 2 through 9 { + .gallery-columns-#{$i} & { - max-width: map-get( $columns, $i ); + max-width: map-get($columns, $i); } } } diff --git a/sass/mixins/_mixins-master.scss b/sass/mixins/_mixins-master.scss index 2578a21..54ff533 100644 --- a/sass/mixins/_mixins-master.scss +++ b/sass/mixins/_mixins-master.scss @@ -25,5 +25,5 @@ // Column width with margin @mixin column-width($numberColumns: 3) { - width: map-get( $columns, $numberColumns ) - ( ( $columns__margin * ( $numberColumns - 1 ) ) / $numberColumns ); + width: map-get($columns, $numberColumns) - ( ( $columns__margin * ( $numberColumns - 1 ) ) / $numberColumns ); } diff --git a/sass/modules/_accessibility.scss b/sass/modules/_accessibility.scss index 469887c..b935555 100644 --- a/sass/modules/_accessibility.scss +++ b/sass/modules/_accessibility.scss @@ -9,7 +9,7 @@ padding: 0; position: absolute !important; width: 1px; - word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ + word-wrap: normal !important; // Many screen reader and browser combinations announce broken words as they would appear visually. &:focus { background-color: $color__background-screen; @@ -19,8 +19,10 @@ clip-path: none; color: $color__text-screen; display: block; + @include font-size(0.875); - font-weight: bold; + + font-weight: 700; height: auto; left: 5px; line-height: normal; @@ -28,7 +30,7 @@ text-decoration: none; top: 5px; width: auto; - z-index: 100000; /* Above WP toolbar. */ + z-index: 100000; // Above WP toolbar. } } diff --git a/sass/modules/_alignments.scss b/sass/modules/_alignments.scss index 5db6ab4..c74338d 100644 --- a/sass/modules/_alignments.scss +++ b/sass/modules/_alignments.scss @@ -2,15 +2,20 @@ display: inline; float: left; margin-right: 1.5em; + margin-bottom: 1.5em; } .alignright { display: inline; float: right; margin-left: 1.5em; + margin-bottom: 1.5em; } .aligncenter { clear: both; + @include center-block; + + margin-bottom: 1.5em; } diff --git a/sass/modules/_clearings.scss b/sass/modules/_clearings.scss index 3c4a30e..7654d76 100644 --- a/sass/modules/_clearings.scss +++ b/sass/modules/_clearings.scss @@ -4,12 +4,15 @@ .site-header, .site-content, .site-footer { - &::before, - &::after { - @include clearfix; - } - &::after { - @include clearfix-after; - } + &::before, + &::after { + + @include clearfix; + } + + &::after { + + @include clearfix-after; + } } diff --git a/sass/modules/_infinite-scroll.scss b/sass/modules/_infinite-scroll.scss index 1172137..8867444 100644 --- a/sass/modules/_infinite-scroll.scss +++ b/sass/modules/_infinite-scroll.scss @@ -1,10 +1,10 @@ -/* Globally hidden elements when Infinite Scroll is supported and in use. */ -.infinite-scroll .posts-navigation, /* Older / Newer Posts Navigation (always hidden) */ -.infinite-scroll.neverending .site-footer { /* Theme Footer (when set to scrolling) */ +/* Hide the Posts Navigation and the Footer when Infinite Scroll is in use. */ +.infinite-scroll .posts-navigation, +.infinite-scroll.neverending .site-footer { display: none; } -/* When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before. */ +/* Re-display the Theme Footer when Infinite Scroll has reached its end. */ .infinity-end.neverending .site-footer { display: block; } diff --git a/sass/navigation/_links.scss b/sass/navigation/_links.scss index 95a5b4d..2e59a07 100644 --- a/sass/navigation/_links.scss +++ b/sass/navigation/_links.scss @@ -4,14 +4,17 @@ a { &:visited { color: $color__link-visited; } + &:hover, &:focus, &:active { color: $color__link-hover; } + &:focus { outline: thin dotted; } + &:hover, &:active { outline: 0; diff --git a/sass/navigation/_menus.scss b/sass/navigation/_menus.scss index 1a2b040..d88b0a6 100644 --- a/sass/navigation/_menus.scss +++ b/sass/navigation/_menus.scss @@ -24,6 +24,7 @@ } li { + &:hover > ul, &.focus > ul { left: 100%; @@ -77,9 +78,11 @@ } @media screen and (min-width: 37.5em) { + .menu-toggle { display: none; } + .main-navigation ul { display: block; } diff --git a/sass/shop/_checkout.scss b/sass/shop/_checkout.scss index 3aebbcc..abe52aa 100644 --- a/sass/shop/_checkout.scss +++ b/sass/shop/_checkout.scss @@ -1,8 +1,7 @@ -/** - * Checkout - */ @media screen and (min-width: 768px) { + .col2-set { + .form-row-first { float: left; margin-right: $columns__margin; @@ -15,6 +14,7 @@ .form-row-first, .form-row-last { + @include column-width(2); } } diff --git a/sass/shop/_components.scss b/sass/shop/_components.scss index 996116a..9a4633d 100644 --- a/sass/shop/_components.scss +++ b/sass/shop/_components.scss @@ -5,6 +5,7 @@ position: relative; margin: 0; padding: 0; + @include clearfix; .cart-contents { @@ -31,12 +32,12 @@ line-height: 1.618; font-size: 1em; width: 5.3em; - font-family: 'star'; + font-family: star; font-weight: 400; - &:before { + &::before { content: "\53\53\53\53\53"; - opacity: .25; + opacity: 0.25; float: left; top: 0; left: 0; @@ -52,7 +53,7 @@ padding-top: 1.5em; } - span:before { + span::before { content: "\53\53\53\53\53"; top: 0; position: absolute; @@ -62,6 +63,7 @@ } p.stars { + a { position: relative; height: 1em; @@ -72,7 +74,8 @@ p.stars { margin-right: 1px; font-weight: 400; - &:before { + &::before { + display: block; position: absolute; top: 0; @@ -80,25 +83,28 @@ p.stars { width: 1em; height: 1em; line-height: 1; - font-family: "star"; + font-family: star; content: "\53"; color: $color__text-main; text-indent: 0; - opacity: .25; + opacity: 0.25; } &:hover { - ~ a:before { + + ~ a::before { content: "\53"; color: $color__text-main; - opacity: .25; + opacity: 0.25; } } } &:hover { + a { - &:before { + + &::before { content: "\53"; color: $color__link; opacity: 1; @@ -107,22 +113,25 @@ p.stars { } &.selected { + a.active { - &:before { + + &::before { content: "\53"; color: $color__link; opacity: 1; } - ~ a:before { + ~ a::before { content: "\53"; color: $color__text-main; - opacity: .25; + opacity: 0.25; } } a:not(.active) { - &:before { + + &::before { content: "\53"; color: $color__link; opacity: 1; @@ -135,6 +144,7 @@ p.stars { * Tabs */ .woocommerce-tabs { + ul.tabs { list-style: none; margin: 0; @@ -154,6 +164,7 @@ p.stars { } .panel { + h2:first-of-type { margin-bottom: 1em; } @@ -187,13 +198,16 @@ p.stars { * Forms */ .form-row { + &.woocommerce-validated { + input.input-text { box-shadow: inset 2px 0 0 $woocommerce__color-success; } } &.woocommerce-invalid { + input.input-text { box-shadow: inset 2px 0 0 $woocommerce__color-error; } @@ -201,7 +215,7 @@ p.stars { } .required { - color: red; + color: #f00; } /** @@ -212,6 +226,7 @@ p.stars { .woocommerce-error, .woocommerce-noreviews, p.no-comments { + @include clearfix; background-color: $woocommerce__color-success; clear: both; @@ -239,10 +254,12 @@ p.no-comments { } @media screen and (min-width: 48em) { + /** * Header cart */ .site-header-cart { + .widget_shopping_cart { position: absolute; top: 100%; @@ -255,6 +272,7 @@ p.no-comments { &:hover, &.focus { + .widget_shopping_cart { left: 0; display: block; diff --git a/sass/shop/_products.scss b/sass/shop/_products.scss index 3d4dd98..5d39372 100644 --- a/sass/shop/_products.scss +++ b/sass/shop/_products.scss @@ -1,7 +1,5 @@ -/** - * Products - */ ul.products { + @include clearfix; margin: 0; padding: 0; @@ -26,8 +24,11 @@ ul.products { } @media screen and (min-width: 48em) { + ul.products { + li.product { + @include column-width(3); float: left; margin-right: $columns__margin; @@ -42,22 +43,24 @@ ul.products { } } - .columns-1 { - ul.products { - li.product { - float: none; - width: 100%; - } + ul.products.columns-1 { + + li.product { + float: none; + width: 100%; } + } @for $i from 2 through 6 { - .columns-#{$i} { - ul.products { - li.product { - @include column-width( $i ); - } + + ul.products.columns-#{$i} { + + li.product { + + @include column-width( $i ); } + } } } diff --git a/sass/shop/_single-product.scss b/sass/shop/_single-product.scss index 7c0fe1c..d3ecff5 100644 --- a/sass/shop/_single-product.scss +++ b/sass/shop/_single-product.scss @@ -1,8 +1,7 @@ -/** - * Single Product - */ .single-product { + div.product { + @include clearfix; position: relative; @@ -22,6 +21,7 @@ } .flex-control-thumbs { + @include clearfix; margin: 0; padding: 0; @@ -32,7 +32,7 @@ float: left; img { - opacity: .5; + opacity: 0.5; &.flex-active { opacity: 1; @@ -40,6 +40,7 @@ } &:hover { + img { opacity: 1; } @@ -48,9 +49,13 @@ } @for $i from 2 through 5 { + &.woocommerce-product-gallery--columns-#{$i} { + .flex-control-thumbs { + li { + @include column-width($i); &:nth-child(#{$i}n) { @@ -69,7 +74,8 @@ } .stock { - &:empty:before { + + &:empty::before { display: none; } diff --git a/sass/shop/_tables.scss b/sass/shop/_tables.scss index 0b28281..36a0ffd 100644 --- a/sass/shop/_tables.scss +++ b/sass/shop/_tables.scss @@ -1,46 +1,49 @@ -/** - * Shop tables - */ table.shop_table_responsive { + thead { display: none; } tbody { + th { display: none; } } tr { + td { display: block; text-align: right; clear: both; - &:before { - content: attr(data-title) ': '; + &::before { + content: attr(data-title) ": "; float: left; } &.product-remove { + a { text-align: left; } - &:before { + &::before { display: none; } } &.actions, &.download-actions { - &:before { + + &::before { display: none; } } &.download-actions { + .button { display: block; text-align: center; @@ -51,26 +54,31 @@ table.shop_table_responsive { } @media screen and (min-width: 48em) { + table.shop_table_responsive { + thead { display: table-header-group; } tbody { + th { display: table-cell; } } tr { - th, td { + + th, + td { text-align: left; } td { display: table-cell; - &:before { + &::before { display: none; } } diff --git a/sass/shop/_widgets.scss b/sass/shop/_widgets.scss index 63324b2..2336d79 100644 --- a/sass/shop/_widgets.scss +++ b/sass/shop/_widgets.scss @@ -2,13 +2,14 @@ * WooCommerce Price Filter */ .widget_price_filter { + .price_slider { margin-bottom: 1.5em; } .price_slider_amount { text-align: right; - line-height: 2.4em; + line-height: 2.4; .button { float: left; @@ -29,7 +30,7 @@ outline: none; background: $color__link; box-sizing: border-box; - margin-top: -.25em; + margin-top: -0.25em; opacity: 1; &:last-child { @@ -38,7 +39,7 @@ &:hover, &.ui-state-active { - box-shadow: 0 0 0 .25em rgba(#000, 0.1); + box-shadow: 0 0 0 0.25em rgba(#000, 0.1); } } @@ -51,11 +52,11 @@ } .price_slider_wrapper .ui-widget-content { - background: rgba(0,0,0,0.1); + background: rgba(0, 0, 0, 0.1); } .ui-slider-horizontal { - height: .5em; + height: 0.5em; } .ui-slider-horizontal .ui-slider-range { diff --git a/sass/site/primary/_comments.scss b/sass/site/primary/_comments.scss index 13760c5..df8485a 100644 --- a/sass/site/primary/_comments.scss +++ b/sass/site/primary/_comments.scss @@ -1,6 +1,7 @@ .comment-content a { word-wrap: break-word; } + .bypostauthor { display: block; } diff --git a/sass/site/secondary/_widgets.scss b/sass/site/secondary/_widgets.scss index 09b3d74..418343e 100644 --- a/sass/site/secondary/_widgets.scss +++ b/sass/site/secondary/_widgets.scss @@ -1,7 +1,7 @@ .widget { margin: 0 0 1.5em; - /* Make sure select elements fit in widgets. */ + // Make sure select elements fit in widgets. select { max-width: 100%; } diff --git a/sass/style.scss b/sass/style.scss index 1d5190d..445764d 100644 --- a/sass/style.scss +++ b/sass/style.scss @@ -11,9 +11,9 @@ Text Domain: _s Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready This theme, like WordPress, is licensed under the GPL. -Use it to make something cool, have fun, and share what you've learned with others. +Use it to make something cool, have fun, and share what you've learned. -_s is based on Underscores https://underscores.me/, (C) 2012-2017 Automattic, Inc. +_s is based on Underscores https://underscores.me/, (C) 2012-2020 Automattic, Inc. Underscores is distributed under the terms of the GNU GPL v2 or later. Normalizing styles have been helped along thanks to the fine work of diff --git a/sass/typography/_copy.scss b/sass/typography/_copy.scss index db7411f..31b11f4 100644 --- a/sass/typography/_copy.scss +++ b/sass/typography/_copy.scss @@ -2,7 +2,10 @@ p { margin-bottom: 1.5em; } -dfn, cite, em, i { +dfn, +cite, +em, +i { font-style: italic; } @@ -17,6 +20,7 @@ address { pre { background: $color__background-pre; font-family: $font__pre; + @include font-size(0.9375); line-height: $font__line-height-pre; margin-bottom: 1.6em; @@ -25,17 +29,23 @@ pre { padding: 1.6em; } -code, kbd, tt, var { +code, +kbd, +tt, +var { font-family: $font__code; + @include font-size(0.9375); } -abbr, acronym { +abbr, +acronym { border-bottom: 1px dotted $color__border-abbr; cursor: help; } -mark, ins { +mark, +ins { background: $color__background-ins; text-decoration: none; } diff --git a/sass/typography/_headings.scss b/sass/typography/_headings.scss index 8333692..2c41a74 100644 --- a/sass/typography/_headings.scss +++ b/sass/typography/_headings.scss @@ -1,3 +1,8 @@ -h1, h2, h3, h4, h5, h6 { +h1, +h2, +h3, +h4, +h5, +h6 { clear: both; } diff --git a/sass/typography/_typography.scss b/sass/typography/_typography.scss index b25e6cc..db6f863 100644 --- a/sass/typography/_typography.scss +++ b/sass/typography/_typography.scss @@ -6,10 +6,10 @@ optgroup, textarea { color: $color__text-main; font-family: $font__main; + @include font-size(1); line-height: $font__line-height-body; } @import "headings"; - @import "copy"; diff --git a/sass/variables-site/_colors.scss b/sass/variables-site/_colors.scss index f2dba39..3b9e719 100644 --- a/sass/variables-site/_colors.scss +++ b/sass/variables-site/_colors.scss @@ -8,9 +8,9 @@ $color__background-ins: #fff9c0; $color__text-screen: #21759b; $color__text-input: #666; $color__text-input-focus: #111; -$color__link: royalblue; -$color__link-visited: purple; -$color__link-hover: midnightblue; +$color__link: #4169e1; //royalblue +$color__link-visited: #800080; //purple +$color__link-hover: #191970; //midnightblue $color__text-main: #404040; $color__border-button: #ccc #ccc #bbb; diff --git a/sass/variables-site/_typography.scss b/sass/variables-site/_typography.scss index 302891e..324432f 100644 --- a/sass/variables-site/_typography.scss +++ b/sass/variables-site/_typography.scss @@ -1,5 +1,5 @@ $font__main: sans-serif; -$font__code: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; -$font__pre: "Courier 10 Pitch", Courier, monospace; +$font__code: monaco, consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +$font__pre: "Courier 10 Pitch", courier, monospace; $font__line-height-body: 1.5; $font__line-height-pre: 1.6; diff --git a/sass/woocommerce.scss b/sass/woocommerce.scss index e8b987e..0a442c0 100644 --- a/sass/woocommerce.scss +++ b/sass/woocommerce.scss @@ -4,16 +4,12 @@ Theme Name: _s WooCommerce styles override */ -/** - * WooCommerce color variables - */ +// WooCommerce color variables $woocommerce__color-error: #e2401c; $woocommerce__color-success: #0f834d; -$woocommerce__color-info: #3D9CD2; +$woocommerce__color-info: #3d9cd2; -/** - * Imports - */ +// Imports @import "variables-site/variables-site"; @import "mixins/mixins-master"; diff --git a/style.css b/style.css index 4683b47..ca1e0ea 100644 --- a/style.css +++ b/style.css @@ -11,14 +11,15 @@ Text Domain: _s Tags: custom-background, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready This theme, like WordPress, is licensed under the GPL. -Use it to make something cool, have fun, and share what you've learned with others. +Use it to make something cool, have fun, and share what you've learned. -_s is based on Underscores https://underscores.me/, (C) 2012-2017 Automattic, Inc. +_s is based on Underscores https://underscores.me/, (C) 2012-2020 Automattic, Inc. Underscores is distributed under the terms of the GNU GPL v2 or later. Normalizing styles have been helped along thanks to the fine work of Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ */ + /*-------------------------------------------------------------- >>> TABLE OF CONTENTS: ---------------------------------------------------------------- @@ -41,10 +42,12 @@ Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ ## Captions ## Galleries --------------------------------------------------------------*/ + /*-------------------------------------------------------------- # Normalize --------------------------------------------------------------*/ -/* normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ + +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ /* Document ========================================================================== */ @@ -53,10 +56,9 @@ Nicolas Gallagher and Jonathan Neal https://necolas.github.io/normalize.css/ * 1. Correct the line height in all browsers. * 2. Prevent adjustments of font size after orientation changes in iOS. */ - html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ + line-height: 1.15; + -webkit-text-size-adjust: 100%; } /* Sections @@ -65,7 +67,6 @@ html { /** * Remove the margin in all browsers. */ - body { margin: 0; } @@ -74,7 +75,6 @@ body { * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */ - h1 { font-size: 2em; margin: 0.67em 0; @@ -87,21 +87,19 @@ h1 { * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. */ - hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ + box-sizing: content-box; + height: 0; + overflow: visible; } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ - pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace, monospace; + font-size: 1em; } /* Text-level semantics @@ -110,7 +108,6 @@ pre { /** * Remove the gray background on active links in IE 10. */ - a { background-color: transparent; } @@ -119,17 +116,15 @@ a { * 1. Remove the bottom border in Chrome 57- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ - abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; } /** * Add the correct font weight in Chrome, Edge, and Safari. */ - b, strong { font-weight: bolder; @@ -139,18 +134,16 @@ strong { * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ - code, kbd, samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ + font-family: monospace, monospace; + font-size: 1em; } /** * Add the correct font size in all browsers. */ - small { font-size: 80%; } @@ -159,7 +152,6 @@ small { * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ - sub, sup { font-size: 75%; @@ -182,7 +174,6 @@ sup { /** * Remove the border on images inside links in IE 10. */ - img { border-style: none; } @@ -194,25 +185,23 @@ img { * 1. Change the font styles in all browsers. * 2. Remove the margin in Firefox and Safari. */ - button, input, optgroup, select, textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ + font-family: inherit; + font-size: 100%; + line-height: 1.15; + margin: 0; } /** * Show the overflow in IE. * 1. Show the overflow in Edge. */ - button, -input { /* 1 */ +input { overflow: visible; } @@ -220,16 +209,14 @@ input { /* 1 */ * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ - button, -select { /* 1 */ +select { text-transform: none; } /** * Correct the inability to style clickable types in iOS and Safari. */ - button, [type="button"], [type="reset"], @@ -240,7 +227,6 @@ button, /** * Remove the inner border and padding in Firefox. */ - button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, @@ -252,7 +238,6 @@ button::-moz-focus-inner, /** * Restore the focus styles unset by the previous rule. */ - button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, @@ -263,7 +248,6 @@ button:-moz-focusring, /** * Correct the padding in Firefox. */ - fieldset { padding: 0.35em 0.75em 0.625em; } @@ -274,20 +258,18 @@ fieldset { * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */ - legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; } /** * Add the correct vertical alignment in Chrome, Firefox, and Opera. */ - progress { vertical-align: baseline; } @@ -295,7 +277,6 @@ progress { /** * Remove the default vertical scrollbar in IE 10+. */ - textarea { overflow: auto; } @@ -304,17 +285,15 @@ textarea { * 1. Add the correct box sizing in IE 10. * 2. Remove the padding in IE 10. */ - [type="checkbox"], [type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ + box-sizing: border-box; + padding: 0; } /** * Correct the cursor style of increment and decrement buttons in Chrome. */ - [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; @@ -324,16 +303,14 @@ textarea { * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ - [type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ + -webkit-appearance: textfield; + outline-offset: -2px; } /** * Remove the inner padding in Chrome and Safari on macOS. */ - [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } @@ -342,10 +319,9 @@ textarea { * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */ - ::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ + -webkit-appearance: button; + font: inherit; } /* Interactive @@ -354,7 +330,6 @@ textarea { /* * Add the correct display in Edge, IE 10+, and Firefox. */ - details { display: block; } @@ -362,7 +337,6 @@ details { /* * Add the correct display in all browsers. */ - summary { display: list-item; } @@ -373,7 +347,6 @@ summary { /** * Add the correct display in IE 10+. */ - template { display: none; } @@ -381,7 +354,6 @@ template { /** * Add the correct display in IE 10. */ - [hidden] { display: none; } @@ -402,7 +374,12 @@ textarea { line-height: 1.5; } -h1, h2, h3, h4, h5, h6 { +h1, +h2, +h3, +h4, +h5, +h6 { clear: both; } @@ -410,7 +387,10 @@ p { margin-bottom: 1.5em; } -dfn, cite, em, i { +dfn, +cite, +em, +i { font-style: italic; } @@ -424,7 +404,7 @@ address { pre { background: #eee; - font-family: "Courier 10 Pitch", Courier, monospace; + font-family: "Courier 10 Pitch", courier, monospace; font-size: 15px; font-size: 0.9375rem; line-height: 1.6; @@ -434,18 +414,23 @@ pre { padding: 1.6em; } -code, kbd, tt, var { - font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; +code, +kbd, +tt, +var { + font-family: monaco, consolas, "Andale Mono", "DejaVu Sans Mono", monospace; font-size: 15px; font-size: 0.9375rem; } -abbr, acronym { +abbr, +acronym { border-bottom: 1px dotted #666; cursor: help; } -mark, ins { +mark, +ins { background: #fff9c0; text-decoration: none; } @@ -457,20 +442,21 @@ big { /*-------------------------------------------------------------- # Elements --------------------------------------------------------------*/ + +/* Inherit box-sizing to more easily change it's value on a component level. +@link http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ +*, +*::before, +*::after { + box-sizing: inherit; +} + html { box-sizing: border-box; } -*, -*:before, -*:after { - /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ - box-sizing: inherit; -} - body { background: #fff; - /* Fallback for when there is no custom background color defined. */ } hr { @@ -480,7 +466,8 @@ hr { margin-bottom: 1.5em; } -ul, ol { +ul, +ol { margin: 0 0 1.5em 3em; } @@ -499,7 +486,7 @@ li > ol { } dt { - font-weight: bold; + font-weight: 700; } dd { @@ -508,14 +495,11 @@ dd { img { height: auto; - /* Make sure images are scaled correctly. */ max-width: 100%; - /* Adhere to container width. */ } figure { margin: 1em 0; - /* Extra wide images within figure tags don't overflow the content area. */ } table { @@ -538,7 +522,7 @@ input[type="submit"] { font-size: 12px; font-size: 0.75rem; line-height: 1; - padding: .6em 1em .4em; + padding: 0.6em 1em 0.4em; } button:hover, @@ -548,7 +532,8 @@ input[type="submit"]:hover { border-color: #ccc #bbb #aaa; } -button:active, button:focus, +button:active, +button:focus, input[type="button"]:active, input[type="button"]:focus, input[type="reset"]:active, @@ -610,26 +595,30 @@ textarea { /*-------------------------------------------------------------- # Navigation --------------------------------------------------------------*/ + /*-------------------------------------------------------------- ## Links --------------------------------------------------------------*/ a { - color: royalblue; + color: #4169e1; } a:visited { - color: purple; + color: #800080; } -a:hover, a:focus, a:active { - color: midnightblue; +a:hover, +a:focus, +a:active { + color: #191970; } a:focus { outline: thin dotted; } -a:hover, a:active { +a:hover, +a:active { outline: 0; } @@ -695,16 +684,20 @@ a:hover, a:active { } @media screen and (min-width: 37.5em) { + .menu-toggle { display: none; } + .main-navigation ul { display: block; } } -.site-main .comment-navigation, .site-main -.posts-navigation, .site-main +.site-main .comment-navigation, +.site-main +.posts-navigation, +.site-main .post-navigation { margin: 0 0 1.5em; overflow: hidden; @@ -728,6 +721,7 @@ a:hover, a:active { /*-------------------------------------------------------------- # Accessibility --------------------------------------------------------------*/ + /* Text meant only for screen readers. */ .screen-reader-text { border: 0; @@ -739,7 +733,7 @@ a:hover, a:active { padding: 0; position: absolute !important; width: 1px; - word-wrap: normal !important; /* Many screen reader and browser combinations announce broken words as they would appear visually. */ + word-wrap: normal !important; } .screen-reader-text:focus { @@ -752,7 +746,7 @@ a:hover, a:active { display: block; font-size: 14px; font-size: 0.875rem; - font-weight: bold; + font-weight: 700; height: auto; left: 5px; line-height: normal; @@ -761,7 +755,6 @@ a:hover, a:active { top: 5px; width: auto; z-index: 100000; - /* Above WP toolbar. */ } /* Do not show the outline on the skip link target. */ @@ -776,12 +769,14 @@ a:hover, a:active { display: inline; float: left; margin-right: 1.5em; + margin-bottom: 1.5em; } .alignright { display: inline; float: right; margin-left: 1.5em; + margin-bottom: 1.5em; } .aligncenter { @@ -789,34 +784,35 @@ a:hover, a:active { display: block; margin-left: auto; margin-right: auto; + margin-bottom: 1.5em; } /*-------------------------------------------------------------- # Clearings --------------------------------------------------------------*/ -.clear:before, -.clear:after, -.entry-content:before, -.entry-content:after, -.comment-content:before, -.comment-content:after, -.site-header:before, -.site-header:after, -.site-content:before, -.site-content:after, -.site-footer:before, -.site-footer:after { +.clear::before, +.clear::after, +.entry-content::before, +.entry-content::after, +.comment-content::before, +.comment-content::after, +.site-header::before, +.site-header::after, +.site-content::before, +.site-content::after, +.site-footer::before, +.site-footer::after { content: ""; display: table; table-layout: fixed; } -.clear:after, -.entry-content:after, -.comment-content:after, -.site-header:after, -.site-content:after, -.site-footer:after { +.clear::after, +.entry-content::after, +.comment-content::after, +.site-header::after, +.site-content::after, +.site-footer::after { clear: both; } @@ -825,7 +821,6 @@ a:hover, a:active { --------------------------------------------------------------*/ .widget { margin: 0 0 1.5em; - /* Make sure select elements fit in widgets. */ } .widget select { @@ -835,6 +830,7 @@ a:hover, a:active { /*-------------------------------------------------------------- # Content --------------------------------------------------------------*/ + /*-------------------------------------------------------------- ## Posts and pages --------------------------------------------------------------*/ @@ -876,14 +872,14 @@ a:hover, a:active { /*-------------------------------------------------------------- # Infinite scroll --------------------------------------------------------------*/ -/* Globally hidden elements when Infinite Scroll is supported and in use. */ + +/* Hide the Posts Navigation and the Footer when Infinite Scroll is in use. */ .infinite-scroll .posts-navigation, .infinite-scroll.neverending .site-footer { - /* Theme Footer (when set to scrolling) */ display: none; } -/* When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before. */ +/* Re-display the Theme Footer when Infinite Scroll has reached its end. */ .infinity-end.neverending .site-footer { display: block; } diff --git a/template-parts/content-page.php b/template-parts/content-page.php index b20eff0..3d34fc3 100644 --- a/template-parts/content-page.php +++ b/template-parts/content-page.php @@ -20,10 +20,12 @@ '', - ) ); + wp_link_pages( + array( + 'before' => '', + ) + ); ?> @@ -41,7 +43,7 @@ ), ) ), - get_the_title() + wp_kses_post( get_the_title() ) ), '', '' diff --git a/template-parts/content.php b/template-parts/content.php index 0573e82..4f7ee77 100644 --- a/template-parts/content.php +++ b/template-parts/content.php @@ -33,23 +33,27 @@
"%s"', '_s' ), - array( - 'span' => array( - 'class' => array(), - ), - ) - ), - get_the_title() - ) ); + the_content( + sprintf( + wp_kses( + /* translators: %s: Name of current post. Only visible to screen readers */ + __( 'Continue reading "%s"', '_s' ), + array( + 'span' => array( + 'class' => array(), + ), + ) + ), + wp_kses_post( get_the_title() ) + ) + ); - wp_link_pages( array( - 'before' => '', - ) ); + wp_link_pages( + array( + 'before' => '', + ) + ); ?>
diff --git a/woocommerce.css b/woocommerce.css index d1308c5..a884400 100644 --- a/woocommerce.css +++ b/woocommerce.css @@ -3,15 +3,7 @@ Theme Name: _s WooCommerce styles override */ -/** - * WooCommerce color variables - */ -/** - * Imports - */ -/** - * Shop tables - */ + /** * Shop tables */ @@ -29,7 +21,7 @@ table.shop_table_responsive tr td { clear: both; } -table.shop_table_responsive tr td:before { +table.shop_table_responsive tr td::before { content: attr(data-title) ": "; float: left; } @@ -38,11 +30,12 @@ table.shop_table_responsive tr td.product-remove a { text-align: left; } -table.shop_table_responsive tr td.product-remove:before { +table.shop_table_responsive tr td.product-remove::before { display: none; } -table.shop_table_responsive tr td.actions:before, table.shop_table_responsive tr td.download-actions:before { +table.shop_table_responsive tr td.actions::before, +table.shop_table_responsive tr td.download-actions::before { display: none; } @@ -52,26 +45,29 @@ table.shop_table_responsive tr td.download-actions .button { } @media screen and (min-width: 48em) { + table.shop_table_responsive thead { display: table-header-group; } + table.shop_table_responsive tbody th { display: table-cell; } - table.shop_table_responsive tr th, table.shop_table_responsive tr td { + + table.shop_table_responsive tr th, + table.shop_table_responsive tr td { text-align: left; } + table.shop_table_responsive tr td { display: table-cell; } - table.shop_table_responsive tr td:before { + + table.shop_table_responsive tr td::before { display: none; } } -/** - * Products - */ /** * Products */ @@ -102,44 +98,50 @@ ul.products li.product .button { } @media screen and (min-width: 48em) { + ul.products li.product { - width: 30.7966666667%; + width: 30.79667%; float: left; margin-right: 3.8%; } + ul.products li.product.first { clear: both; } + ul.products li.product.last { margin-right: 0; } - .columns-1 ul.products li.product { + + ul.products.columns-1 li.product { float: none; width: 100%; } - .columns-2 ul.products li.product { + + ul.products.columns-2 li.product { width: 48.1%; } - .columns-3 ul.products li.product { - width: 30.7966666667%; + + ul.products.columns-3 li.product { + width: 30.79667%; } - .columns-4 ul.products li.product { + + ul.products.columns-4 li.product { width: 22.15%; } - .columns-5 ul.products li.product { + + ul.products.columns-5 li.product { width: 16.96%; } - .columns-6 ul.products li.product { - width: 13.4933333333%; + + ul.products.columns-6 li.product { + width: 13.49333%; } } /** * Single product */ -/** - * Single Product - */ .single-product div.product { content: ""; display: table; @@ -178,7 +180,7 @@ ul.products li.product .button { } .single-product div.product .woocommerce-product-gallery .flex-control-thumbs li img { - opacity: .5; + opacity: 0.5; } .single-product div.product .woocommerce-product-gallery .flex-control-thumbs li img.flex-active { @@ -202,7 +204,7 @@ ul.products li.product .button { } .single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-3 .flex-control-thumbs li { - width: 30.7966666667%; + width: 30.79667%; } .single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-3 .flex-control-thumbs li:nth-child(3n) { @@ -237,7 +239,7 @@ ul.products li.product .button { clear: both; } -.stock:empty:before { +.stock:empty::before { display: none; } @@ -249,21 +251,21 @@ ul.products li.product .button { color: #e2401c; } -/** - * Checkout - */ /** * Checkout */ @media screen and (min-width: 768px) { + .col2-set .form-row-first { float: left; margin-right: 3.8%; } + .col2-set .form-row-last { float: right; margin-right: 0; } + .col2-set .form-row-first, .col2-set .form-row-last { width: 48.1%; @@ -273,6 +275,7 @@ ul.products li.product .button { /** * General WooCommerce components */ + /** * Header cart */ @@ -308,13 +311,13 @@ ul.products li.product .button { line-height: 1.618; font-size: 1em; width: 5.3em; - font-family: 'star'; + font-family: star; font-weight: 400; } -.star-rating:before { +.star-rating::before { content: "\53\53\53\53\53"; - opacity: .25; + opacity: 0.25; float: left; top: 0; left: 0; @@ -330,12 +333,12 @@ ul.products li.product .button { padding-top: 1.5em; } -.star-rating span:before { +.star-rating span::before { content: "\53\53\53\53\53"; top: 0; position: absolute; left: 0; - color: royalblue; + color: #4169e1; } p.stars a { @@ -349,7 +352,7 @@ p.stars a { font-weight: 400; } -p.stars a:before { +p.stars a::before { display: block; position: absolute; top: 0; @@ -357,40 +360,40 @@ p.stars a:before { width: 1em; height: 1em; line-height: 1; - font-family: "star"; + font-family: star; content: "\53"; color: #404040; text-indent: 0; - opacity: .25; + opacity: 0.25; } -p.stars a:hover ~ a:before { +p.stars a:hover ~ a::before { content: "\53"; color: #404040; - opacity: .25; + opacity: 0.25; } -p.stars:hover a:before { +p.stars:hover a::before { content: "\53"; - color: royalblue; + color: #4169e1; opacity: 1; } -p.stars.selected a.active:before { +p.stars.selected a.active::before { content: "\53"; - color: royalblue; + color: #4169e1; opacity: 1; } -p.stars.selected a.active ~ a:before { +p.stars.selected a.active ~ a::before { content: "\53"; color: #404040; - opacity: .25; + opacity: 0.25; } -p.stars.selected a:not(.active):before { +p.stars.selected a:not(.active)::before { content: "\53"; - color: royalblue; + color: #4169e1; opacity: 1; } @@ -439,7 +442,7 @@ p.stars.selected a:not(.active):before { } .woocommerce-password-strength.good { - color: #3D9CD2; + color: #3d9cd2; } /** @@ -454,7 +457,7 @@ p.stars.selected a:not(.active):before { } .required { - color: red; + color: #f00; } /** @@ -475,7 +478,7 @@ p.no-comments { .woocommerce-info, .woocommerce-noreviews, p.no-comments { - background-color: #3D9CD2; + background-color: #3d9cd2; } .woocommerce-error { @@ -489,11 +492,12 @@ p.no-comments { right: 0; margin: 0; padding: 1em; - background-color: #3D9CD2; + background-color: #3d9cd2; z-index: 9999; } @media screen and (min-width: 48em) { + /** * Header cart */ @@ -506,7 +510,9 @@ p.no-comments { display: block; box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2); } - .site-header-cart:hover .widget_shopping_cart, .site-header-cart.focus .widget_shopping_cart { + + .site-header-cart:hover .widget_shopping_cart, + .site-header-cart.focus .widget_shopping_cart { left: 0; display: block; } @@ -515,6 +521,7 @@ p.no-comments { /** * WooCommerce widgets */ + /** * WooCommerce Price Filter */ @@ -524,7 +531,7 @@ p.no-comments { .widget_price_filter .price_slider_amount { text-align: right; - line-height: 2.4em; + line-height: 2.4; } .widget_price_filter .price_slider_amount .button { @@ -543,9 +550,9 @@ p.no-comments { height: 1em; cursor: ew-resize; outline: none; - background: royalblue; + background: #4169e1; box-sizing: border-box; - margin-top: -.25em; + margin-top: -0.25em; opacity: 1; } @@ -553,7 +560,8 @@ p.no-comments { margin-left: -1em; } -.widget_price_filter .ui-slider .ui-slider-handle:hover, .widget_price_filter .ui-slider .ui-slider-handle.ui-state-active { +.widget_price_filter .ui-slider .ui-slider-handle:hover, +.widget_price_filter .ui-slider .ui-slider-handle.ui-state-active { box-shadow: 0 0 0 0.25em rgba(0, 0, 0, 0.1); } @@ -562,7 +570,7 @@ p.no-comments { z-index: 1; display: block; border: 0; - background: royalblue; + background: #4169e1; } .widget_price_filter .price_slider_wrapper .ui-widget-content { @@ -570,7 +578,7 @@ p.no-comments { } .widget_price_filter .ui-slider-horizontal { - height: .5em; + height: 0.5em; } .widget_price_filter .ui-slider-horizontal .ui-slider-range {