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

Revision: 57387
Author:   catrope
Date:     2009-10-05 15:24:26 +0000 (Mon, 05 Oct 2009)

Log Message:
-----------
* EditToolbar: (bug 20994) Pressing Enter while a search result is selected 
replaces the search result with a newline in Opera
* Fix annoying selection bug caused by Opera's refusal (at least in 9.0, didn't 
test 9.6 or 10) to set selectionStart past the current selectionEnd; set them 
in the right order so this doesn't happen

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

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-10-05 15:05:24 UTC (rev 57386)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-10-05 15:24:26 UTC (rev 57387)
@@ -1310,14 +1310,18 @@
                                        // Execute the action associated with 
the first button
                                        // when the user presses Enter
                                        $j(this).closest( '.ui-dialog' 
).keypress( function( e ) {
-                                               if ( ( e.keyCode || e.which ) 
== 13 )
+                                               if ( ( e.keyCode || e.which ) 
== 13 ) {
                                                        $j(this).find( 
'button:first' ).click();
+                                                       e.preventDefault();
+                                               }
                                        });
                                }
                                var dialog = $j(this).closest( '.ui-dialog' );
                                $j(this).data( 'context' ).$textarea.bind( 
'keypress.srdialog', function( e ) {
-                                       if ( ( e.keyCode || e.which ) == 13 )
+                                       if ( ( e.keyCode || e.which ) == 13 ) {
                                                dialog.find( 'button:first' 
).click();
+                                               e.preventDefault();
+                                       }
                                });
                        }
                }

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php    
2009-10-05 15:05:24 UTC (rev 57386)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php    
2009-10-05 15:24:26 UTC (rev 57387)
@@ -19,7 +19,7 @@
 /* Configuration */
 
 // Bump the version number every time you change any of the .css/.js files
-$wgEditToolbarStyleVersion = 49;
+$wgEditToolbarStyleVersion = 50;
 
 // Set this to true to simply override the stock toolbar for everyone
 $wgEditToolbarGlobalEnable = false;

Modified: trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2009-10-05 15:05:24 UTC (rev 57386)
+++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2009-10-05 15:24:26 UTC (rev 57387)
@@ -63,7 +63,7 @@
                                array( 'src' => 
'js/plugins/jquery.delayedBind.js', 'version' => 1 ),
                                array( 'src' => 
'js/plugins/jquery.namespaceSelect.js', 'version' => 1 ),
                                array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 4 ),
-                               array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 14 ),
+                               array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 15 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 9 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 11 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 4 ),
@@ -73,10 +73,10 @@
                                array( 'src' => 'js/js2/jquery-ui-1.7.2.js', 
'version' => '1.7.2y' ),
                        ),
                        'combined' => array(
-                               array( 'src' => 'js/plugins.combined.js', 
'version' => 38 ),
+                               array( 'src' => 'js/plugins.combined.js', 
'version' => 39 ),
                        ),
                        'minified' => array(
-                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 38 ),
+                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 39 ),
                        ),
                ),
        );

Modified: 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js     
2009-10-05 15:05:24 UTC (rev 57386)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js     
2009-10-05 15:24:26 UTC (rev 57387)
@@ -203,8 +203,16 @@
                end = start;
        return this.each( function() {
                if ( this.selectionStart || this.selectionStart == '0' ) {
-                       this.selectionStart = start;
-                       this.selectionEnd = end;
+                       // Opera 9.0 doesn't allow setting selectionStart past
+                       // selectionEnd; any attempts to do that will be ignored
+                       // Make sure to set them in the right order
+                       if ( start > this.selectionEnd ) {
+                               this.selectionEnd = end;
+                               this.selectionStart = start;
+                       } else {
+                               this.selectionStart = start;
+                               this.selectionEnd = end;
+                       }
                } else if ( document.body.createTextRange ) {
                        var selection = document.body.createTextRange();
                        selection.moveToElementText( this );

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2009-10-05 
15:05:24 UTC (rev 57386)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2009-10-05 
15:24:26 UTC (rev 57387)
@@ -1027,8 +1027,16 @@
                end = start;
        return this.each( function() {
                if ( this.selectionStart || this.selectionStart == '0' ) {
-                       this.selectionStart = start;
-                       this.selectionEnd = end;
+                       // Opera 9.0 doesn't allow setting selectionStart past
+                       // selectionEnd; any attempts to do that will be ignored
+                       // Make sure to set them in the right order
+                       if ( start > this.selectionEnd ) {
+                               this.selectionEnd = end;
+                               this.selectionStart = start;
+                       } else {
+                               this.selectionStart = start;
+                               this.selectionEnd = end;
+                       }
                } else if ( document.body.createTextRange ) {
                        var selection = document.body.createTextRange();
                        selection.moveToElementText( this );

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2009-10-05 15:05:24 UTC (rev 57386)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2009-10-05 15:24:26 UTC (rev 57387)
@@ -69,7 +69,7 @@
 
if(postRange.text==postText){rawPostText+="\r\n";}else{postFinished=true;}}}}while((!postFinished||!periFinished||!postFinished));caretPos=rawPreText.replace(/\r\n/g,"\n").length;}else
 if(e.selectionStart||e.selectionStart=='0'){caretPos=e.selectionStart;}
 return caretPos;}
 return getCaret(this.get(0));},setSelection:function(start,end){if(typeof 
end=='undefined')
-end=start;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.moveToElementText(this);var 
length=selection.text.length;selection.moveStart('character',start);selection.moveEnd('character',-length+end);selection.select();}});},scrollToCaretPosition:function(force){function
 getLineLength(e){return Math.floor(e.scrollWidth/($.os.name=='linux'?7:8));}
+end=start;return 
this.each(function(){if(this.selectionStart||this.selectionStart=='0'){if(start>this.selectionEnd){this.selectionEnd=end;this.selectionStart=start;}else{this.selectionStart=start;this.selectionEnd=end;}}else
 if(document.body.createTextRange){var 
selection=document.body.createTextRange();selection.moveToElementText(this);var 
length=selection.text.length;selection.moveStart('character',start);selection.moveEnd('character',-length+end);selection.select();}});},scrollToCaretPosition:function(force){function
 getLineLength(e){return Math.floor(e.scrollWidth/($.os.name=='linux'?7:8));}
 function getCaretScrollPosition(e){var text=e.value.replace(/\r/g,"");var 
caret=$(e).getCaretPosition();var lineLength=getLineLength(e);var row=0;var 
charInLine=0;var 
lastSpaceInLine=0;for(i=0;i<caret;i++){charInLine++;if(text.charAt(i)==" 
"){lastSpaceInLine=charInLine;}else 
if(text.charAt(i)=="\n"){lastSpaceInLine=0;charInLine=0;row++;}
 
if(charInLine>lineLength){if(lastSpaceInLine>0){charInLine=charInLine-lastSpaceInLine;lastSpaceInLine=0;row++;}}}
 var nextSpace=0;for(j=caret;j<caret+lineLength;j++){if(text.charAt(j)==" 
"||text.charAt(j)=="\n"||caret==text.length){nextSpace=j;break;}}



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to