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