Fix a regression in search highlighting from r90092
authorBrion Vibber <brion@users.mediawiki.org>
Tue, 16 Aug 2011 22:42:57 +0000 (22:42 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Tue, 16 Aug 2011 22:42:57 +0000 (22:42 +0000)
Followup on r94609, r94681 test cases.
This fixes the test case with a period that was failing; problem was not the period, but the space before.
The changed regex in r90092 ended up including the preceding whitespace in the match, so the position of the match was coming up one character before the actual word -- thus offsetting the highlight by one char.

Changed from search to match, using the regex's index property (same as search returns) and adding in the length of the first match component which covers the space/whatever

resources/jquery/jquery.highlightText.js

index 4bc231c..44ac56e 100644 (file)
@@ -24,8 +24,9 @@ $.highlightText = {
                        // non latin characters can make regex think a new word has begun: do not use \b
                        // http://stackoverflow.com/questions/3787072/regex-wordwrap-with-utf8-characters-in-js
                        // look for an occurence of our pattern and store the starting position
-                       var pos = node.data.search( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
-                       if ( pos >= 0 ) {
+                       var match = node.data.match( new RegExp( "(^|\\s)" + $.escapeRE( pat ), "i" ) );
+                       if ( match ) {
+                               var pos = match.index + match[1].length; // include length of any matched spaces
                                // create the span wrapper for the matched text
                                var spannode = document.createElement( 'span' );
                                spannode.className = 'highlight';