http://www.mediawiki.org/wiki/Special:Code/MediaWiki/56194

Revision: 56194
Author:   catrope
Date:     2009-09-11 18:10:26 +0000 (Fri, 11 Sep 2009)

Log Message:
-----------
EditToolbar: (bug 20581, bug 20582, bug 20584) Make search&replace dialog 
select replaced text, inform the user of how many replacements were made if not 
equal to one, and make sure search+replacing headers updates the NTOC.

On a technical level, this adds a function to set the cursor position in a 
textarea, and changes the S&R code to use encapsulateSelection()

Modified Paths:
--------------
    trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
    trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
    trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php      
2009-09-11 18:07:36 UTC (rev 56193)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php      
2009-09-11 18:10:26 UTC (rev 56194)
@@ -104,6 +104,7 @@
                                        'edittoolbar-tool-replace-button',
                                        'edittoolbar-tool-replace-close',
                                        'edittoolbar-tool-replace-nomatch',
+                                       'edittoolbar-tool-replace-success',
                                        /* Special Characters Section */
                                        'edittoolbar-section-characters',
                                        'edittoolbar-characters-page-latin',

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php       
2009-09-11 18:07:36 UTC (rev 56193)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php       
2009-09-11 18:10:26 UTC (rev 56194)
@@ -91,6 +91,7 @@
        'edittoolbar-tool-replace-button' => 'Replace',
        'edittoolbar-tool-replace-close' => 'Close',
        'edittoolbar-tool-replace-nomatch' => 'Your search did not match 
anything.',
+       'edittoolbar-tool-replace-success' => '$1 replacements made.',
        /* Special characters Section */
        'edittoolbar-section-characters' => 'Special characters',
        'edittoolbar-characters-page-latin' => 'Latin',

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-09-11 18:07:36 UTC (rev 56193)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-09-11 18:10:26 UTC (rev 56194)
@@ -1156,15 +1156,26 @@
                                        }
                                        var regex = new RegExp( searchStr, 
flags );
                                        var $textarea = $j(this).data( 
'context' ).$textarea;
-                                       if ( !$textarea.val().match( regex ) ) {
+                                       var matches = $textarea.val().match( 
regex );
+                                       if ( !matches ) {
                                                alert( gM( 
'edittoolbar-tool-replace-nomatch' ) );
                                        } else {
-                                               $textarea.val( 
$textarea.val().replace( regex, replaceStr ) );
+                                               var start, end;
+                                               for ( var i = 0; i < 
matches.length; i++ ) {
+                                                       start = 
$textarea.val().indexOf( matches[i] );
+                                                       end = start + 
matches[i].length;
+                                                       $textarea.setSelection( 
start, end );
+                                                       
$textarea.encapsulateSelection( '', replaceStr, '', false, true );
+                                               }
+                                               if ( i > 1 )
+                                                       alert( gM( 
'edittoolbar-tool-replace-success', i ) );
+                                               
$textarea.scrollToCaretPosition( start );
+                                               $textarea.setSelection( start, 
start + replaceStr.length );
                                        }
-                                       // TODO: Hook for wikEd
                                },
                                'edittoolbar-tool-replace-close': function() {
                                        $j(this).dialog( 'close' );
+                                       $j(this).data( 'context' 
).$textarea.focus();
                                }
                        }
                }

Modified: 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js     
2009-09-11 18:07:36 UTC (rev 56193)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js     
2009-09-11 18:10:26 UTC (rev 56194)
@@ -205,6 +205,21 @@
        }
        return getCaret( this.get( 0 ) );
 },
+setSelection: function( start, end ) {
+       return this.each( function() {
+               if ( this.selectionStart || this.selectionStart == '0' ) {
+                       this.selectionStart = start;
+                       this.selectionEnd = end;
+               } else if ( document.body.createTextRange ) {
+                       var selection = document.body.createTextRange;
+                       selection.setToElementText( this );
+                       var length = selection.text.length;
+                       selection.moveStart( 'character', start );
+                       selection.moveEnd( 'character', -length + end );
+                       selection.select();
+               }
+       });
+},
 /**
  * Ported from Wikia's LinkSuggest extension
  * https://svn.wikia-code.com/wikia/trunk/extensions/wikia/LinkSuggest



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to