diff --git a/src/wp-admin/js/word-count.js b/src/wp-admin/js/word-count.js index 0740bb6ef1..bdf4adefae 100644 --- a/src/wp-admin/js/word-count.js +++ b/src/wp-admin/js/word-count.js @@ -1,6 +1,7 @@ ( function() { function WordCounter( settings ) { - var key; + var key, + shortcodes; if ( settings ) { for ( key in settings ) { @@ -9,6 +10,12 @@ } } } + + shortcodes = this.settings.l10n.shortcodes; + + if ( shortcodes && shortcodes.length ) { + this.settings.shortcodesRegExp = new RegExp( '\\[\\/?(?:' + shortcodes.join( '|' ) + ')[^\\]]*?\\]', 'gi' ); + } } WordCounter.prototype.settings = { @@ -65,6 +72,11 @@ text = text + '\n'; text = text.replace( this.settings.HTMLRegExp, '\n' ); + + if ( this.settings.shortcodesRegExp ) { + text = text.replace( this.settings.shortcodesRegExp, '\n' ); + } + text = text.replace( this.settings.spaceRegExp, ' ' ); if ( type === 'words' ) { diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php index 1c45846f2d..e95d075cbe 100644 --- a/src/wp-includes/script-loader.php +++ b/src/wp-includes/script-loader.php @@ -400,7 +400,8 @@ function wp_default_scripts( &$scripts ) { /* translators: If your word count is based on single characters (East Asian characters), enter 'characters', or 'all' to include spaces. Otherwise, enter 'words'. Do not translate into your own language. */ - 'type' => _x( 'words', 'word count: words, characters or all?' ) + 'type' => _x( 'words', 'word count: words, characters or all?' ), + 'shortcodes' => ! empty( $GLOBALS['shortcode_tags'] ) ? array_keys( $GLOBALS['shortcode_tags'] ) : array() ) ); $scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox', 'shortcode' ), false, 1 ); diff --git a/tests/qunit/wp-admin/js/word-count.js b/tests/qunit/wp-admin/js/word-count.js index c3c147d913..ad69453e49 100644 --- a/tests/qunit/wp-admin/js/word-count.js +++ b/tests/qunit/wp-admin/js/word-count.js @@ -44,6 +44,13 @@ words: 3, characters: 14, all: 14 + }, + { + message: 'Shortcodes.', + string: 'one [shortcode attribute="value"]two[/shortcode]three', + words: 3, + characters: 11, + all: 12 } ], function( test ) { _.each( [ 'words', 'characters', 'all' ], function( type ) { @@ -51,4 +58,8 @@ } ); } ); } ); -} )( window.QUnit, new window.wp.utils.WordCounter() ); +} )( window.QUnit, new window.wp.utils.WordCounter( { + l10n: { + shortcodes: [ 'shortcode' ] + } +} ) );