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();
_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() ) {
_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 @@