diff --git a/bin/init.js b/bin/init.js new file mode 100755 index 00000000..fbd387fb --- /dev/null +++ b/bin/init.js @@ -0,0 +1,313 @@ +#! /usr/bin/env node + +/* eslint no-console: 0 */ + +/** + * External dependencies + */ +const fs = require( 'fs' ); +const path = require( 'path' ); +const readline = require( 'readline' ); + +/** + * Define Constants + */ +const rl = readline.createInterface( { + input: process.stdin, + output: process.stdout, +} ); +const info = { + error: ( message ) => { + return `\x1b[31m${ message }\x1b[0m`; + }, + success: ( message ) => { + return `\x1b[32m${ message }\x1b[0m`; + }, + warning: ( message ) => { + return `\x1b[33m${ message }\x1b[0m`; + }, + message: ( message ) => { + return `\x1b[34m${ message }\x1b[0m`; + }, +}; +let fileContentUpdated = false; +let fileNameUpdated = false; + +// Start with a prompt. +rl.question( 'Would you like to setup the theme? (y/n) ', ( answer ) => { + if ( 'n' === answer.toLowerCase() ) { + console.log( info.warning( '\nTheme Setup Cancelled.\n' ) ); + process.exit( 0 ); + } + rl.question( 'Enter theme name (shown in WordPress admin)*: ', ( themeName ) => { + const themeInfo = setupTheme( themeName ); + rl.question( 'Confirm the Theme Details (y/n) ', ( confirm ) => { + if ( 'n' === confirm.toLowerCase() ) { + console.log( info.warning( '\nTheme Setup Cancelled.\n' ) ); + process.exit( 0 ); + } + initTheme( themeInfo ); + rl.close(); + } ); + } ); +} ); + +rl.on( 'close', () => { + process.exit( 0 ); +} ); + +/** + * Theme Setup + * + * @param {string} themeName + * + * @return {Object} themeInfo + */ +const setupTheme = ( themeName ) => { + console.log( info.success( '\nFiring up the theme setup...' ) ); + + // Ask theme name. + if ( ! themeName ) { + console.log( info.error( '\nTheme name is required.\n' ) ); + process.exit( 0 ); + } + + // Generate theme info. + const themeInfo = generateThemeInfo( themeName ); + + const themeDetails = { + 'Theme Name: ': `${ themeInfo.themeName }`, + 'Theme Version: ': `1.0.0`, + 'Text Domain: ': `${ themeInfo.kebabCase }`, + 'Package: ': `${ themeInfo.trainCase }`, + 'Namespace: ': `${ themeInfo.pascalSnakeCase }`, + 'Function Prefix: ': `${ themeInfo.snakeCaseWithUnderscoreSuffix }`, + 'CSS Class Prefix: ': `${ themeInfo.kebabCaseWithHyphenSuffix }`, + 'PHP Variable Prefix: ': `${ themeInfo.snakeCaseWithUnderscoreSuffix }`, + 'Version Constant: ': `${ themeInfo.macroCase }_VERSION`, + 'Theme Directory Constant: ': `${ themeInfo.macroCase }_TEMP_DIR`, + 'Theme Build Directory Constant: ': `${ themeInfo.macroCase }_BUILD_DIR`, + 'Theme Build Directory URI Constant: ': `${ themeInfo.macroCase }_BUILD_URI`, + }; + + const biggestStringLength = themeDetails[ 'Theme Build Directory URI Constant: ' ].length + 'Theme Build Directory URI Constant: '.length; + + console.log( info.success( '\nTheme Details:' ) ); + console.log( + info.warning( '┌' + '─'.repeat( biggestStringLength + 2 ) + '┐' ), + ); + Object.keys( themeDetails ).forEach( ( key ) => { + console.log( + info.warning( '│' + ' ' + info.success( key ) + info.message( themeDetails[ key ] ) + ' ' + ' '.repeat( biggestStringLength - ( themeDetails[ key ].length + key.length ) ) + info.warning( '│' ) ), + ); + } ); + console.log( + info.warning( '└' + '─'.repeat( biggestStringLength + 2 ) + '┘' ), + ); + + return themeInfo; +}; + +/** + * Initialize new theme + * + * @param {Object} themeInfo + */ +const initTheme = ( themeInfo ) => { + const chunksToReplace = { + 'elementary theme': themeInfo.themeNameLowerCase, + 'Elementary Theme': themeInfo.themeName, + 'ELEMENTARY THEME': themeInfo.themeNameCobolCase, + 'elementary-theme': themeInfo.kebabCase, + 'Elementary-Theme': themeInfo.trainCase, + 'ELEMENTARY-THEME': themeInfo.cobolCase, + elementary_theme: themeInfo.snakeCase, + Elementary_Theme: themeInfo.pascalSnakeCase, + ELEMENTARY_THEME: themeInfo.macroCase, + 'elementary-theme-': themeInfo.kebabCaseWithHyphenSuffix, + 'Elementary-Theme-': themeInfo.trainCaseWithHyphenSuffix, + 'ELEMENTARY-THEME-': themeInfo.cobolCaseWithHyphenSuffix, + elementary_theme_: themeInfo.snakeCaseWithUnderscoreSuffix, + Elementary_Theme_: themeInfo.pascalSnakeCaseWithUnderscoreSuffix, + ELEMENTARY_THEME_: themeInfo.macroCaseWithUnderscoreSuffix, + }; + + const files = getAllFiles( getRoot() ); + + // File name to replace in. + const fileNameToReplace = {}; + files.forEach( ( file ) => { + const fileName = path.basename( file ); + Object.keys( chunksToReplace ).forEach( ( key ) => { + if ( fileName.includes( key ) ) { + fileNameToReplace[ fileName ] = fileName.replace( key, chunksToReplace[ key ] ); + } + } ); + } ); + + // Replace files contents. + console.log( info.success( '\nUpdating theme details in file(s)...' ) ); + Object.keys( chunksToReplace ).forEach( ( key ) => { + replaceFileContent( files, key, chunksToReplace[ key ] ); + } ); + if ( ! fileContentUpdated ) { + console.log( info.error( 'No file content updated.\n' ) ); + } + + // Replace file names + console.log( info.success( '\nUpdating theme file(s) name...' ) ); + Object.keys( fileNameToReplace ).forEach( ( key ) => { + replaceFileName( files, key, fileNameToReplace[ key ] ); + } ); + if ( ! fileNameUpdated ) { + console.log( info.error( 'No file name updated.\n' ) ); + } + + if ( fileContentUpdated || fileNameUpdated ) { + console.log( info.success( '\nYour new theme is ready to go!' ), '✨' ); + // Docs link + console.log( info.success( '\nFor more information on how to use this theme, please visit the following link: ' + info.warning( 'https://github.com/rtCamp/theme-elementary/blob/main/README.md' ) ) ); + } else { + console.log( info.warning( '\nNo changes were made to your theme.\n' ) ); + } +}; + +/** + * Get all files in a directory + * + * @param {Array} dir - Directory to search + */ +const getAllFiles = ( dir ) => { + const dirOrFilesIgnore = [ + '.git', + '.github', + 'node_modules', + 'vendor', + 'init.js', + ]; + + try { + let files = fs.readdirSync( dir ); + files = files.filter( ( fileOrDir ) => ! dirOrFilesIgnore.includes( fileOrDir ) ); + + const allFiles = []; + files.forEach( ( file ) => { + const filePath = path.join( dir, file ); + const stat = fs.statSync( filePath ); + if ( stat.isDirectory() ) { + allFiles.push( ...getAllFiles( filePath ) ); + } else { + allFiles.push( filePath ); + } + } ); + return allFiles; + } catch ( err ) { + console.log( info.error( err ) ); + } +}; + +/** + * Replace content in file + * + * @param {Array} files Files to search + * @param {string} chunksToReplace String to replace + * @param {string} newChunk New string to replace with + */ +const replaceFileContent = ( files, chunksToReplace, newChunk ) => { + files.forEach( ( file ) => { + const filePath = path.resolve( getRoot(), file ); + + try { + let content = fs.readFileSync( filePath, 'utf8' ); + const regex = new RegExp( chunksToReplace, 'g' ); + content = content.replace( regex, newChunk ); + if ( content !== fs.readFileSync( filePath, 'utf8' ) ) { + fs.writeFileSync( filePath, content, 'utf8' ); + console.log( info.success( `Updated [${ info.message( chunksToReplace ) }] ${ info.success( 'to' ) } [${ info.message( newChunk ) }] ${ info.success( 'in file' ) } [${ info.message( path.basename( file ) ) }]` ) ); + fileContentUpdated = true; + } + } catch ( err ) { + console.log( info.error( `\nError: ${ err }` ) ); + } + } ); +}; + +/** + * Change File Name + * + * @param {Array} files Files to search + * @param {string} oldFileName Old file name + * @param {string} newFileName New file name + */ +const replaceFileName = ( files, oldFileName, newFileName ) => { + files.forEach( ( file ) => { + if ( oldFileName !== path.basename( file ) ) { + return; + } + const filePath = path.resolve( getRoot(), file ); + const newFilePath = path.resolve( getRoot(), file.replace( oldFileName, newFileName ) ); + try { + fs.renameSync( filePath, newFilePath ); + console.log( info.success( `Updated file [${ info.message( path.basename( filePath ) ) }] ${ info.success( 'to' ) } [${ info.message( path.basename( newFilePath ) ) }]` ) ); + fileNameUpdated = true; + } catch ( err ) { + console.log( info.error( `\nError: ${ err }` ) ); + } + } ); +}; + +/** + * Generate Theme Info from Theme Name + * + * @param {string} themeName + */ +const generateThemeInfo = ( themeName ) => { + const themeNameLowerCase = themeName.toLowerCase(); + + const kebabCase = themeName.replace( /\s+/g, '-' ).toLowerCase(); + const snakeCase = kebabCase.replace( /\-/g, '_' ); + const kebabCaseWithHyphenSuffix = kebabCase + '-'; + const snakeCaseWithUnderscoreSuffix = snakeCase + '_'; + + const trainCase = kebabCase.replace( /\b\w/g, ( l ) => { + return l.toUpperCase(); + } ); + const themeNameTrainCase = trainCase.replace( /\-/g, ' ' ); + const pascalSnakeCase = trainCase.replace( /\-/g, '_' ); + const trainCaseWithHyphenSuffix = trainCase + '-'; + const pascalSnakeCaseWithUnderscoreSuffix = pascalSnakeCase + '_'; + + const cobolCase = kebabCase.toUpperCase(); + const themeNameCobolCase = themeNameTrainCase.toUpperCase(); + const macroCase = snakeCase.toUpperCase(); + const cobolCaseWithHyphenSuffix = cobolCase + '-'; + const macroCaseWithUnderscoreSuffix = macroCase + '_'; + + return { + themeName, + themeNameLowerCase, + kebabCase, + snakeCase, + kebabCaseWithHyphenSuffix, + snakeCaseWithUnderscoreSuffix, + trainCase, + themeNameTrainCase, + pascalSnakeCase, + trainCaseWithHyphenSuffix, + pascalSnakeCaseWithUnderscoreSuffix, + cobolCase, + themeNameCobolCase, + macroCase, + cobolCaseWithHyphenSuffix, + macroCaseWithUnderscoreSuffix, + }; +}; + +/** + * Return root directory + * + * @return {string} root directory + */ +const getRoot = () => { + return path.resolve( __dirname, '../' ); +}; diff --git a/composer.json b/composer.json index 4dc4b5cd..16863d23 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "rtcamp/theme-elementary", + "name": "rtcamp/elementary-theme", "description": "A Block based starter theme.", "type": "wordpress-theme", "homepage": "https://rtcamp.com/", @@ -28,7 +28,7 @@ }, "autoload-dev": { "psr-4": { - "Elementary\\Tests\\": "tests/php/" + "Elementary_Theme\\Tests\\": "tests/php/" } }, "scripts": { diff --git a/functions.php b/functions.php index 7e66886f..65fa63dd 100644 --- a/functions.php +++ b/functions.php @@ -4,37 +4,37 @@ * * @link https://developer.wordpress.org/themes/basics/theme-functions/ * - * @package Elementary + * @package Elementary-Theme */ -if ( ! defined( 'ELEMENTARY_VERSION' ) ) : - define( 'ELEMENTARY_VERSION', wp_get_theme()->get( 'Version' ) ); +if ( ! defined( 'ELEMENTARY_THEME_VERSION' ) ) : + define( 'ELEMENTARY_THEME_VERSION', wp_get_theme()->get( 'Version' ) ); endif; -if ( ! defined( 'ELEMENTARY_TEMP_DIR' ) ) : - define( 'ELEMENTARY_TEMP_DIR', untrailingslashit( get_template_directory() ) ); +if ( ! defined( 'ELEMENTARY_THEME_TEMP_DIR' ) ) : + define( 'ELEMENTARY_THEME_TEMP_DIR', untrailingslashit( get_template_directory() ) ); endif; -if ( ! defined( 'ELEMENTARY_BUILD_URI' ) ) : - define( 'ELEMENTARY_BUILD_URI', untrailingslashit( get_template_directory_uri() ) . '/assets/build' ); +if ( ! defined( 'ELEMENTARY_THEME_BUILD_URI' ) ) : + define( 'ELEMENTARY_THEME_BUILD_URI', untrailingslashit( get_template_directory_uri() ) . '/assets/build' ); endif; -if ( ! defined( 'ELEMENTARY_BUILD_DIR' ) ) : - define( 'ELEMENTARY_BUILD_DIR', untrailingslashit( get_template_directory() ) . '/assets/build' ); +if ( ! defined( 'ELEMENTARY_THEME_BUILD_DIR' ) ) : + define( 'ELEMENTARY_THEME_BUILD_DIR', untrailingslashit( get_template_directory() ) . '/assets/build' ); endif; -require_once ELEMENTARY_TEMP_DIR . '/vendor/autoload.php'; +require_once ELEMENTARY_THEME_TEMP_DIR . '/vendor/autoload.php'; /** * Theme bootstrap instance. * * @since 1.0.0 * - * @return object Elementary + * @return object Theme bootstrap instance. */ -function elementary_instance() { - return Elementary\Elementary::get_instance(); +function elementary_theme_instance() { + return Elementary_Theme\Elementary_Theme::get_instance(); } // Instantiate theme. -elementary_instance(); +elementary_theme_instance(); diff --git a/inc/classes/class-elementary.php b/inc/classes/class-elementary-theme.php similarity index 60% rename from inc/classes/class-elementary.php rename to inc/classes/class-elementary-theme.php index 0f95ddc8..5aa5887f 100644 --- a/inc/classes/class-elementary.php +++ b/inc/classes/class-elementary-theme.php @@ -2,20 +2,20 @@ /** * Theme bootstrap file. * - * @package Elementary + * @package Elementary-Theme */ -namespace Elementary; +namespace Elementary_Theme; -use Elementary\Traits\Singleton; -use Elementary\Patterns\Block_Patterns; +use Elementary_Theme\Traits\Singleton; +use Elementary_Theme\Patterns\Block_Patterns; /** - * Class Elementary + * Class Elementary_Theme * * @since 1.0.0 */ -class Elementary { +class Elementary_Theme { use Singleton; @@ -36,7 +36,7 @@ protected function __construct() { * @since 1.0.0 */ public function setup_hooks() { - add_action( 'after_setup_theme', array( $this, 'elementary_support' ) ); + add_action( 'after_setup_theme', array( $this, 'elementary_theme_support' ) ); } /** @@ -44,7 +44,7 @@ public function setup_hooks() { * * @since 1.0.0 */ - public function elementary_support() { + public function elementary_theme_support() { // Add support for core block styles. add_theme_support( 'wp-block-styles' ); } diff --git a/inc/classes/patterns/class-block-pattern-base.php b/inc/classes/patterns/class-block-pattern-base.php index 5763c5d9..db881a1e 100644 --- a/inc/classes/patterns/class-block-pattern-base.php +++ b/inc/classes/patterns/class-block-pattern-base.php @@ -2,10 +2,10 @@ /** * Base class for block patterns. * - * @package Elementary + * @package Elementary-Theme */ -namespace Elementary\Patterns; +namespace Elementary_Theme\Patterns; /** * Class Block_Pattern_Base. diff --git a/inc/classes/patterns/class-block-patterns.php b/inc/classes/patterns/class-block-patterns.php index f5f7fc72..be3308c1 100644 --- a/inc/classes/patterns/class-block-patterns.php +++ b/inc/classes/patterns/class-block-patterns.php @@ -2,12 +2,12 @@ /** * Blocks Patterns handler. * - * @package Elementary + * @package Elementary-Theme */ -namespace Elementary\Patterns; +namespace Elementary_Theme\Patterns; -use Elementary\Traits\Singleton; +use Elementary_Theme\Traits\Singleton; /** * Class Block_Patterns @@ -23,14 +23,14 @@ class Block_Patterns { * * @var string */ - const PATTERN_NAMESPACE = 'elementary'; + const PATTERN_NAMESPACE = 'elementary-theme'; /** * Block Content classes namespace. * * @var string */ - const BLOCK_CONTENT_NAMESPACE = 'Elementary\\Patterns\\Content\\'; + const BLOCK_CONTENT_NAMESPACE = 'Elementary_Theme\\Patterns\\Content\\'; /** * Constructor. @@ -45,8 +45,8 @@ protected function __construct() { * @since 1.0.0 */ public function setup_hooks() { - add_action( 'init', [ $this, 'elementary_register_block_patterns_categories' ] ); - add_action( 'init', [ $this, 'elementary_register_block_patterns' ] ); + add_action( 'init', [ $this, 'elementary_theme_register_block_patterns_categories' ] ); + add_action( 'init', [ $this, 'elementary_theme_register_block_patterns' ] ); } /** @@ -54,16 +54,16 @@ public function setup_hooks() { * * @since 1.0.0 */ - public function elementary_register_block_patterns_categories() { + public function elementary_theme_register_block_patterns_categories() { $block_pattern_categories = array( 'featured' => array( - 'label' => __( 'Featured', 'elementary' ), + 'label' => __( 'Featured', 'elementary-theme' ), ), 'footer' => array( - 'label' => __( 'Footer', 'elementary' ), + 'label' => __( 'Footer', 'elementary-theme' ), ), 'query' => array( - 'label' => __( 'Query', 'elementary' ), + 'label' => __( 'Query', 'elementary-theme' ), ), ); @@ -74,7 +74,7 @@ public function elementary_register_block_patterns_categories() { * * @param array $block_pattern_categories Array of block pattern categories. */ - $block_pattern_categories = apply_filters( 'elementary_block_patterns_categories', $block_pattern_categories ); + $block_pattern_categories = apply_filters( 'elementary_theme_block_patterns_categories', $block_pattern_categories ); foreach ( $block_pattern_categories as $name => $properties ) { register_block_pattern_category( $name, $properties ); @@ -86,7 +86,7 @@ public function elementary_register_block_patterns_categories() { * * @since 1.0.0 */ - public function elementary_register_block_patterns() { + public function elementary_theme_register_block_patterns() { $block_patterns_classes = array( 'footer' => 'Footer', 'hidden-404' => 'Hidden_404', @@ -99,7 +99,7 @@ public function elementary_register_block_patterns() { * * @param array $block_patterns The theme block patterns. */ - $block_patterns = apply_filters( 'elementary_block_patterns', $block_patterns_classes ); + $block_patterns = apply_filters( 'elementary_theme_block_patterns', $block_patterns_classes ); foreach ( $block_patterns as $name => $class ) { $class = self::BLOCK_CONTENT_NAMESPACE . $class; diff --git a/inc/classes/patterns/content/class-footer.php b/inc/classes/patterns/content/class-footer.php index 8f8a2719..80f9afc2 100644 --- a/inc/classes/patterns/content/class-footer.php +++ b/inc/classes/patterns/content/class-footer.php @@ -2,12 +2,12 @@ /** * Footer pattern content. * - * @package Elementary + * @package Elementary-Theme */ -namespace Elementary\Patterns\Content; +namespace Elementary_Theme\Patterns\Content; -use Elementary\Patterns\Block_Pattern_Base; +use Elementary_Theme\Patterns\Block_Pattern_Base; /** * Class Footer @@ -23,7 +23,7 @@ final class Footer extends Block_Pattern_Base { */ public function block_pattern() { return array( - 'title' => __( 'Footer', 'elementary' ), + 'title' => __( 'Footer', 'elementary-theme' ), 'categories' => array( 'footer' ), 'blockTypes' => array( 'core/template-part/footer' ), 'content' => $this->block_pattern_content(), @@ -48,8 +48,8 @@ public function block_pattern_content() { WordPress' + esc_html__( 'Proudly powered by %s', 'elementary-theme' ), + 'WordPress' ); ?>
diff --git a/inc/classes/patterns/content/class-hidden-404.php b/inc/classes/patterns/content/class-hidden-404.php index 867182ef..2e3d9a28 100644 --- a/inc/classes/patterns/content/class-hidden-404.php +++ b/inc/classes/patterns/content/class-hidden-404.php @@ -2,12 +2,12 @@ /** * 404 Pattern content. * - * @package Elementary + * @package Elementary-Theme */ -namespace Elementary\Patterns\Content; +namespace Elementary_Theme\Patterns\Content; -use Elementary\Patterns\Block_Pattern_Base; +use Elementary_Theme\Patterns\Block_Pattern_Base; /** * Class Hidden_404 @@ -22,7 +22,7 @@ final class Hidden_404 extends Block_Pattern_Base { */ public function block_pattern() { return array( - 'title' => __( '404 content', 'elementary' ), + 'title' => __( '404 content', 'elementary-theme' ), 'inserter' => false, 'content' => $this->block_pattern_content(), ); @@ -37,17 +37,17 @@ public function block_pattern_content() { ob_start(); ?> - + - + - + diff --git a/inc/helpers/custom-functions.php b/inc/helpers/custom-functions.php index 701cb0db..837f5dfe 100644 --- a/inc/helpers/custom-functions.php +++ b/inc/helpers/custom-functions.php @@ -2,7 +2,7 @@ /** * Define custom functions for the theme. * - * @package Elementary + * @package Elementary-Theme */ // Define custom functions here. diff --git a/inc/traits/trait-singleton.php b/inc/traits/trait-singleton.php index 24aaf157..f845e731 100644 --- a/inc/traits/trait-singleton.php +++ b/inc/traits/trait-singleton.php @@ -22,10 +22,10 @@ * * If you specifically need multiple objects, then use a normal class. * - * @package Elementary + * @package Elementary-Theme */ -namespace Elementary\Traits; +namespace Elementary_Theme\Traits; trait Singleton { diff --git a/index.php b/index.php index 45a3908b..8a649776 100644 --- a/index.php +++ b/index.php @@ -4,5 +4,5 @@ * There is a core ticket discussing removing this requirement for block themes: * https://core.trac.wordpress.org/ticket/54272. * - * @package Elementary + * @package Elementary-Theme */ diff --git a/package-lock.json b/package-lock.json index fbd9dcb9..a68e7677 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "elementary", + "name": "elementary-theme", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "elementary", + "name": "elementary-theme", "version": "1.0.0", "license": "GPL-2.0-or-later", "devDependencies": { diff --git a/package.json b/package.json index 99844ed7..f13e82d7 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "elementary", + "name": "elementary-theme", "version": "1.0.0", "description": "A base for block theme development.", "private": true, @@ -44,6 +44,7 @@ "build:prod": "cross-env NODE_ENV=production npm-run-all 'build:!(dev|prod)'", "build:js": "wp-scripts build", "dev": "wp-scripts start", + "init": "./bin/init.js", "lint:all": "npm-run-all --parallel lint:*", "lint:css": "wp-scripts lint-style ./assets/src", "lint:css:fix": "npm run lint:css -- --fix ./assets/src", @@ -54,7 +55,7 @@ "lint:php:fix": "./bin/phpcbf.sh", "lint:pkg-json": "wp-scripts lint-pkg-json --ignorePath .gitignore", "lint:staged": "lint-staged", - "prepare": "husky install", + "prepare": "husky install && npm run init", "start": "wp-scripts start", "test": "npm-run-all --parallel test:*", "test:js": "wp-scripts test-unit-js --config=tests/js/jest.config.js", diff --git a/parts/footer.html b/parts/footer.html index cd1d4ddb..c31265d0 100644 --- a/parts/footer.html +++ b/parts/footer.html @@ -1 +1 @@ - + diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 6d9cdbff..2cc58f87 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -50,7 +50,7 @@ Multiple valid text domains can be provided as a comma-delimited list. -->