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