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

Revision: 56248
Author:   catrope
Date:     2009-09-12 21:40:28 +0000 (Sat, 12 Sep 2009)

Log Message:
-----------
EditToolbar: (bug 20618) Stop the link dialog from inserting links to empty 
titles or URLs. Currently, the URL check only checks for the empty string and 
'http://' , but we could replace that by a more elaborate URL-valiating regex. 
Also bump style versions and recombine for r56247

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/EditToolbar/EditToolbar.php
    trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
    trunk/extensions/UsabilityInitiative/js/plugins.combined.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php      
2009-09-12 21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php      
2009-09-12 21:40:28 UTC (rev 56248)
@@ -50,6 +50,7 @@
                                        
'edittoolbar-tool-link-int-target-status-invalid',
                                        
'edittoolbar-tool-link-int-target-status-loading',
                                        'edittoolbar-tool-link-int-invalid',
+                                       'edittoolbar-tool-link-ext-invalid',
                                        'edittoolbar-tool-file',
                                        'edittoolbar-tool-file-pre',
                                        'edittoolbar-tool-file-example',

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php       
2009-09-12 21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php       
2009-09-12 21:40:28 UTC (rev 56248)
@@ -36,6 +36,7 @@
        'edittoolbar-tool-link-int-target-status-invalid' => 'Invalid title',
        'edittoolbar-tool-link-int-target-status-loading' => 'Checking page 
existence...',
        'edittoolbar-tool-link-int-invalid' => 'The title you specified is 
invalid.',
+       'edittoolbar-tool-link-ext-invalid' => 'The URL you specified is 
invalid.',
        'edittoolbar-tool-file' => 'Embedded file',
        'edittoolbar-tool-file-pre' => '$1{{ns:file}}:',
        'edittoolbar-tool-file-example' => 'Example.jpg',

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-09-12 21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js     
2009-09-12 21:40:28 UTC (rev 56248)
@@ -912,14 +912,15 @@
                                        var whitespace = [ '', '' ];
                                        switch ( $j( '#edittoolbar-link-tabs' 
).tabs( 'option', 'selected' ) ) {
                                                case 0: // Internal link
+                                                       var target = $j( 
'#edittoolbar-link-int-target' ).val();
+                                                       var text = $j( 
'#edittoolbar-link-int-text' ).val();
                                                        // FIXME: Exactly how 
fragile is this?
-                                                       if ( $j( 
'#edittoolbar-link-int-target-status-invalid' ).is( ':visible' ) ) {
+                                                       if ( $j( 
'#edittoolbar-link-int-target-status-invalid' ).is( ':visible' )  ||
+                                                                       target 
== '' ) {
                                                                // Refuse to 
add links to invalid titles
                                                                alert( gM( 
'edittoolbar-tool-link-int-invalid' ) );
                                                                return;
                                                        }
-                                                       var target = $j( 
'#edittoolbar-link-int-target' ).val();
-                                                       var text = $j( 
'#edittoolbar-link-int-text' ).val();
                                                        whitespace = $j( 
'#edittoolbar-link-dialog-tab-int' ).data( 'whitespace' );
                                                        if ( target == text )
                                                                insertText = 
'[[' + target + ']]';
@@ -932,6 +933,12 @@
                                                        var escTarget = 
escapeExternalTarget( target );
                                                        var escText = 
escapeExternalText( text );
                                                        whitespace = $j( 
'#edittoolbar-link-dialog-tab-ext' ).data( 'whitespace' );
+                                                       if ( target == '' || 
target == 'http://' ) {
+                                                               // Refuse to 
add links to invalid URLs
+                                                               // TODO: More 
elaborate regex here?
+                                                               alert( gM( 
'edittoolbar-tool-link-ext-invalid' ) );
+                                                               return;
+                                                       }
                                                        if ( escTarget == 
escText )
                                                                insertText = 
escTarget;
                                                        else if ( text == '' )

Modified: trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php    
2009-09-12 21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php    
2009-09-12 21:40:28 UTC (rev 56248)
@@ -19,7 +19,7 @@
 /* Configuration */
 
 // Bump the version number every time you change any of the .css/.js files
-$wgEditToolbarStyleVersion = 29;
+$wgEditToolbarStyleVersion = 30;
 
 // 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-09-12 21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2009-09-12 21:40:28 UTC (rev 56248)
@@ -61,7 +61,7 @@
                                array( 'src' => 'js/plugins/jquery.browser.js', 
'version' => 3 ),
                                array( 'src' => 'js/plugins/jquery.cookie.js', 
'version' => 3 ),
                                array( 'src' => 
'js/plugins/jquery.namespaceSelect.js', 'version' => 1 ),
-                               array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 1 ),
+                               array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 2 ),
                                array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 9 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 4 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 11 ),
@@ -70,10 +70,10 @@
                                array( 'src' => 'js/js2/jquery-ui-1.7.2.js', 
'version' => '1.7.2x' ),
                        ),
                        'combined' => array(
-                               array( 'src' => 'js/plugins.combined.js', 
'version' => 18 ),
+                               array( 'src' => 'js/plugins.combined.js', 
'version' => 19 ),
                        ),
                        'minified' => array(
-                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 18 ),
+                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 19 ),
                        ),
                ),
        );

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2009-09-12 
21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2009-09-12 
21:40:28 UTC (rev 56248)
@@ -484,6 +484,10 @@
                                $.suggestions.restore( context );
                        } else {
                                context.data.$textbox.val( result.data( 'text' 
) );
+                               
+                               // .val() doesn't call any event handlers, so
+                               // let the world know what happened
+                               context.data.$textbox.change();
                        }
                }
                $.suggestions.special( context );
@@ -613,7 +617,7 @@
                                                        if ( $result.get( 0 ) 
!= $other.get( 0 ) ) {
                                                                return;
                                                        }
-                                                       highlight( $result, 
true );
+                                                       
$.suggestions.highlight( context, $result, true );
                                                        
context.data.$container.hide();
                                                        if ( typeof 
context.config.result.select == 'function' ) {
                                                                
context.config.result.select.call( $result, context.data.$textbox );

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2009-09-12 21:29:51 UTC (rev 56247)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2009-09-12 21:40:28 UTC (rev 56248)
@@ -31,13 +31,13 @@
 result=context.data.$container.find('.suggestions-results 
div:first');else{result=selected.next();if(result.size()==0)
 result=selected;}}
 
selected.removeClass('suggestions-result-current');result.addClass('suggestions-result-current');}
-if(updateTextbox){if(result.size()==0){$.suggestions.restore(context);}else{context.data.$textbox.val(result.data('text'));}}
+if(updateTextbox){if(result.size()==0){$.suggestions.restore(context);}else{context.data.$textbox.val(result.data('text'));context.data.$textbox.change();}}
 
$.suggestions.special(context);},keypress:function(context,key){switch(key){case
 
40:if(context.data.$container.is(':visible')){$.suggestions.highlight(context,'next',true);}else{$.suggestions.update(context,false);}
 context.data.$textbox.trigger('change');break;case 
38:if(context.data.$container.is(':visible')){$.suggestions.highlight(context,'prev',true);}
 context.data.$textbox.trigger('change');break;case 
27:context.data.$container.hide();$.suggestions.restore(context);$.suggestions.cancel(context);context.data.$textbox.trigger('change');break;case
 
13:context.data.$container.hide();break;default:$.suggestions.update(context,true);break;}}};$.fn.suggestions=function(){var
 returnValue=null;var args=arguments;$(this).each(function(){var 
context=$(this).data('suggestions-context');if(typeof 
context=='undefined'){context={config:{'fetch':function(){},'cancel':function(){},'special':{},'result':{},'$region':$(this),'suggestions':[],'maxRows':7,'delay':1200,'submitOnClick':false}};}
 if(args.length>0){if(typeof args[0]=='object'){for(key in 
args[0]){$.suggestions.configure(context,key,args[0][key]);}}else if(typeof 
args[0]=='string'){if(args.length>1){$.suggestions.configure(context,args[0],args[1]);}else
 if(returnValue==null){returnValue=(args[0]in 
context.config?undefined:context.config[args[0]]);}}}
 if(typeof 
context.data=='undefined'){context.data={'timerID':null,'prevText':null,'visibleResults':0,'mouseDownOn':$([]),'$textbox':$(this)};context.data.$container=$('<div
 
/>').css({'top':Math.round(context.data.$textbox.offset().top+context.data.$textbox.outerHeight()),'left':Math.round(context.data.$textbox.offset().left),'width':context.data.$textbox.outerWidth(),'display':'none'}).mouseover(function(e){$.suggestions.highlight(context,$(e.target).closest('.suggestions-results
 div'),false);}).addClass('suggestions').append($('<div 
/>').addClass('suggestions-results').mousedown(function(e){context.data.mouseDownOn=$(e.target).closest('.suggestions-results
 div');}).mouseup(function(e){var 
$result=$(e.target).closest('.suggestions-results div');var 
$other=context.data.mouseDownOn;context.data.mouseDownOn=$([]);if($result.get(0)!=$other.get(0)){return;}
-highlight($result,true);context.data.$container.hide();if(typeof 
context.config.result.select=='function'){context.config.result.select.call($result,context.data.$textbox);}
+$.suggestions.highlight(context,$result,true);context.data.$container.hide();if(typeof
 
context.config.result.select=='function'){context.config.result.select.call($result,context.data.$textbox);}
 context.data.$textbox.focus();})).append($('<div 
/>').addClass('suggestions-special').mousedown(function(e){context.data.mouseDownOn=$(e.target).closest('.suggestions-special');}).mouseup(function(e){var
 $special=$(e.target).closest('.suggestions-special');var 
$other=context.data.mouseDownOn;context.data.mouseDownOn=$([]);if($special.get(0)!=$other.get(0)){return;}
 context.data.$container.hide();if(typeof 
context.config.special.select=='function'){context.config.special.select.call($special,context.data.$textbox);}
 
context.data.$textbox.focus();})).appendTo($('body'));$(this).attr('autocomplete','off').keydown(function(e){context.data.keypressed=(e.keyCode==undefined)?e.which:e.keyCode;context.data.keypressedCount=0;}).keypress(function(){context.data.keypressedCount++;$.suggestions.keypress(context,context.data.keypressed);}).keyup(function(){if(context.data.keypressedCount==0){$.suggestions.keypress(context,context.data.keypressed);}}).blur(function(){if(context.data.mouseDownOn.size()>0){return;}



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

Reply via email to