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

Revision: 61897
Author:   catrope
Date:     2010-02-03 00:17:46 +0000 (Wed, 03 Feb 2010)

Log Message:
-----------
UsabilityInitiative: (bug 22349) Dialogs insert text at the top in IE. Use some 
selection save/restore voodoo to work around this

Modified Paths:
--------------
    trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
    trunk/extensions/UsabilityInitiative/Vector/Vector.hooks.php
    trunk/extensions/UsabilityInitiative/WikiEditor/Modules/Toolbar/Toolbar.js
    trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.js
    trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.min.js
    trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.hooks.php
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
    trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.js
    trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js

Modified: trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php  
2010-02-03 00:17:46 UTC (rev 61897)
@@ -71,21 +71,21 @@
                                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' => 7 ),
-                               array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 26 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 95 ),
+                               array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 27 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 96 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.highlight.js', 'version' => 29 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 46 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 11 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 47 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 12 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toc.js', 'version' => 78 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.preview.js', 'version' => 10 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.templateEditor.js', 'version' => 17 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.publish.js', 'version' => 2 ),
                        ),
                        'combined' => array(
-                               array( 'src' => 'js/plugins.combined.js', 
'version' => 212 ),
+                               array( 'src' => 'js/plugins.combined.js', 
'version' => 213 ),
                        ),
                        'minified' => array(
-                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 212 ),
+                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 213 ),
                        ),
                ),
        );

Modified: trunk/extensions/UsabilityInitiative/Vector/Vector.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/Vector/Vector.hooks.php        
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/Vector/Vector.hooks.php        
2010-02-03 00:17:46 UTC (rev 61897)
@@ -14,15 +14,15 @@
                'raw' => array(
                        array( 'src' => 
'Modules/CollapsibleNav/CollapsibleNav.js', 'version' => 7 ),
                        array( 'src' => 
'Modules/CollapsibleTabs/CollapsibleTabs.js', 'version' => 7 ),
-                       array( 'src' => 'Modules/EditWarning/EditWarning.js', 
'version' => 6 ),
+                       array( 'src' => 'Modules/EditWarning/EditWarning.js', 
'version' => 7 ),
                        array( 'src' => 
'Modules/FooterCleanup/FooterCleanup.js', 'version' => 5 ),
                        array( 'src' => 'Modules/SimpleSearch/SimpleSearch.js', 
'version' => 7 ),
                ),
                'combined' => array(
-                       array( 'src' => 'Vector.combined.js', 'version' => 20 ),
+                       array( 'src' => 'Vector.combined.js', 'version' => 21 ),
                ),
                'minified' => array(
-                       array( 'src' => 'Vector.combined.min.js', 'version' => 
20 ),
+                       array( 'src' => 'Vector.combined.min.js', 'version' => 
21 ),
                ),
        );
        static $modules = array(

Modified: 
trunk/extensions/UsabilityInitiative/WikiEditor/Modules/Toolbar/Toolbar.js
===================================================================
--- trunk/extensions/UsabilityInitiative/WikiEditor/Modules/Toolbar/Toolbar.js  
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/WikiEditor/Modules/Toolbar/Toolbar.js  
2010-02-03 00:17:46 UTC (rev 61897)
@@ -1702,7 +1702,6 @@
                        close: function() {
                                $j( $j(this).data( 'context' 
).$iframe[0].contentWindow.document )
                                                .unbind( 'keypress.srdialog' );
-                               $j(this).data( 'context' 
).$iframe[0].contentWindow.focus();
                                $j(this).closest( '.ui-dialog' ).data( 
'dialogaction', false );
                        }
                }

Modified: trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.js
===================================================================
--- trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.js      
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.js      
2010-02-03 00:17:46 UTC (rev 61897)
@@ -1751,7 +1751,6 @@
                        close: function() {
                                $j( $j(this).data( 'context' 
).$iframe[0].contentWindow.document )
                                                .unbind( 'keypress.srdialog' );
-                               $j(this).data( 'context' 
).$iframe[0].contentWindow.focus();
                                $j(this).closest( '.ui-dialog' ).data( 
'dialogaction', false );
                        }
                }

Modified: 
trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.min.js
===================================================================
--- trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.min.js  
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.min.js  
2010-02-03 00:17:46 UTC (rev 61897)
@@ -177,5 +177,5 @@
 s=s.substr(index+match[i].length);var start=index+offset;var 
end=start+match[i].length;var 
newEnd=start+replaceStr.length;$textarea.textSelection('setSelection',{'start':start,'end':end}).textSelection('encapsulateSelection',{'peri':replaceStr,'replace':true}).textSelection('setSelection',{'start':start,'end':newEnd});offset=newEnd;}
 
$j('#wikieditor-toolbar-replace-success').text(u.getMsg('wikieditor-toolbar-tool-replace-success',match.length)).show();$j(this).data('offset',0);}else{var
 start=match.index+offset;var end=start+match[0].length;var 
newEnd=start+replaceStr.length;$textarea.textSelection('setSelection',{'start':start,'end':end});if(mode=='replace'){$textarea.textSelection('encapsulateSelection',{'peri':replaceStr,'replace':true}).textSelection('setSelection',{'start':start,'end':newEnd});}
 
$textarea.textSelection('scrollToCaretPosition');$j(this).data('offset',mode=='replace'?newEnd:end);}});},dialog:{width:500,dialogClass:'wikiEditor-toolbar-dialog',buttons:{'wikieditor-toolbar-tool-replace-button-findnext':function(e){$j(this).closest('.ui-dialog').data('dialogaction',e.target);$j(this).data('replaceCallback').call(this,'find');},'wikieditor-toolbar-tool-replace-button-replacenext':function(e){$j(this).closest('.ui-dialog').data('dialogaction',e.target);$j(this).data('replaceCallback').call(this,'replace');},'wikieditor-toolbar-tool-replace-button-replaceall':function(e){$j(this).closest('.ui-dialog').data('dialogaction',e.target);$j(this).data('replaceCallback').call(this,'replaceAll');},'wikieditor-toolbar-tool-replace-close':function(){$j(this).dialog('close');}},open:function(){$j(this).data('offset',0);$j('#wikieditor-toolbar-replace-search').focus();$j('#wikieditor-toolbar-replace-nomatch,
 #wikieditor-toolbar-replace-success, #wikieditor-toolbar-replace-emptysearch, 
#wikieditor-toolbar-replace-invalidregex').hide();if(!($j(this).data('onetimeonlystuff'))){$j(this).data('onetimeonlystuff',true);$j(this).closest('.ui-dialog').keypress(function(e){if((e.keyCode||e.which)==13){var
 
button=$j(this).data('dialogaction')||$j(this).find('button:first');button.click();e.preventDefault();}});$j(this).closest('.ui-dialog').find('button').focus(function(){$j(this).closest('.ui-dialog').data('dialogaction',this);});}
-var dialog=$j(this).closest('.ui-dialog');var 
that=this;$j($j(this).data('context').$iframe[0].contentWindow.document).bind('keypress.srdialog',function(e){if((e.keyCode||e.which)==13){var
 
button=dialog.data('dialogaction')||dialog.find('button:first');button.click();e.preventDefault();}else
 
if((e.keyCode||e.which)==27){$j(that).dialog('close');}});},close:function(){$j($j(this).data('context').$iframe[0].contentWindow.document).unbind('keypress.srdialog');$j(this).data('context').$iframe[0].contentWindow.focus();$j(this).closest('.ui-dialog').data('dialogaction',false);}}}}});}});$j(document).ready(function(){if(!wgWikiEditorEnabledModules.templateEditor){return
 true;}
+var dialog=$j(this).closest('.ui-dialog');var 
that=this;$j($j(this).data('context').$iframe[0].contentWindow.document).bind('keypress.srdialog',function(e){if((e.keyCode||e.which)==13){var
 
button=dialog.data('dialogaction')||dialog.find('button:first');button.click();e.preventDefault();}else
 
if((e.keyCode||e.which)==27){$j(that).dialog('close');}});},close:function(){$j($j(this).data('context').$iframe[0].contentWindow.document).unbind('keypress.srdialog');$j(this).closest('.ui-dialog').data('dialogaction',false);}}}}});}});$j(document).ready(function(){if(!wgWikiEditorEnabledModules.templateEditor){return
 true;}
 
if($j.fn.wikiEditor){$j('textarea#wpTextbox1').wikiEditor('addModule','templateEditor');}});
\ No newline at end of file

Modified: trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.hooks.php        
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.hooks.php        
2010-02-03 00:17:46 UTC (rev 61897)
@@ -16,14 +16,14 @@
                        array( 'src' => 'Modules/Preview/Preview.js', 'version' 
=> 6 ),
                        array( 'src' => 'Modules/Publish/Publish.js', 'version' 
=> 6 ),
                        array( 'src' => 'Modules/Toc/Toc.js', 'version' => 7 ),
-                       array( 'src' => 'Modules/Toolbar/Toolbar.js', 'version' 
=> 41 ),
+                       array( 'src' => 'Modules/Toolbar/Toolbar.js', 'version' 
=> 42 ),
                        array( 'src' => 
'Modules/TemplateEditor/TemplateEditor.js', 'version' => 4 ),
                ),
                'combined' => array(
-                       array( 'src' => 'WikiEditor.combined.js', 'version' => 
43 ),
+                       array( 'src' => 'WikiEditor.combined.js', 'version' => 
44 ),
                ),
                'minified' => array(
-                       array( 'src' => 'WikiEditor.combined.min.js', 'version' 
=> 43 ),
+                       array( 'src' => 'WikiEditor.combined.min.js', 'version' 
=> 44 ),
                ),
        );
        static $messages = array(

Modified: 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js     
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.textSelection.js     
2010-02-03 00:17:46 UTC (rev 61897)
@@ -368,9 +368,18 @@
        }
        var context = $(this).data( 'wikiEditor-context' );
        var hasIframe = context !== undefined && context.$iframe !== undefined;
-       // iframe functions have not been implemented yet, this is a temp hack
-       //var hasIframe = false;
-       return ( hasIframe ? context.fn : fn )[command].call( this, options );
+       
+       // IE selection restore voodoo
+       var needSave = false;
+       if ( hasIframe && context.savedSelection !== null ) {
+               context.fn.restoreSelection();
+               needSave = true;
+       }
+       retval = ( hasIframe ? context.fn : fn )[command].call( this, options );
+       if ( hasIframe && needSave ) {
+               context.fn.saveSelection();
+       }
+       return retval;
 };
 
 } )( jQuery );
\ No newline at end of file

Modified: 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js
===================================================================
--- 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js    
    2010-02-03 00:03:19 UTC (rev 61896)
+++ 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.dialogs.js    
    2010-02-03 00:17:46 UTC (rev 61897)
@@ -77,6 +77,9 @@
                                                                        
$.wikiEditor.modules.dialogs.fn.resize );
                                                        });
                                        }
+                                       dialogDiv.bind( 'dialogclose', 
function() {
+                                               context.fn.restoreSelection();
+                                       } );
                                        // Add tabindexes to dialog form 
elements
                                        // Find the highest tabindex in use
                                        var maxTI = 0;

Modified: trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js        
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js        
2010-02-03 00:17:46 UTC (rev 61897)
@@ -205,7 +205,9 @@
                // The previous HTML of the iframe, stored to detect whether 
something really changed.
                'oldHTML': null,
                // Same for delayedChange()
-               'oldDelayedHTML': null
+               'oldDelayedHTML': null,
+               // Saved selection state for IE
+               'savedSelection': null
        };
        
        /*
@@ -991,6 +993,22 @@
                                }
                                t = nextT;
                        }
+               },
+               'saveSelection': function() {
+                       if ( !$.browser.msie ) {
+                               // Only IE needs this
+                               return;
+                       }
+                       context.$iframe[0].contentWindow.focus();
+                       context.savedSelection = 
context.$iframe[0].contentWindow.document.selection.createRange();
+               },
+               'restoreSelection': function() {
+                       if ( !$.browser.msie || context.savedSelection === null 
) {
+                               return;
+                       }
+                       context.$iframe[0].contentWindow.focus();
+                       context.savedSelection.select();
+                       context.savedSelection = null;
                }
        };
        

Modified: 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js
===================================================================
--- 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js    
    2010-02-03 00:03:19 UTC (rev 61896)
+++ 
trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toolbar.js    
    2010-02-03 00:17:46 UTC (rev 61897)
@@ -257,6 +257,7 @@
                                }
                                break;
                        case 'dialog':
+                               context.fn.saveSelection();
                                context.$textarea.wikiEditor( 'openDialog', 
action.module );
                                break;
                        default: break;

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2010-02-03 
00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.js 2010-02-03 
00:17:46 UTC (rev 61897)
@@ -6417,9 +6417,18 @@
        }
        var context = $(this).data( 'wikiEditor-context' );
        var hasIframe = context !== undefined && context.$iframe !== undefined;
-       // iframe functions have not been implemented yet, this is a temp hack
-       //var hasIframe = false;
-       return ( hasIframe ? context.fn : fn )[command].call( this, options );
+       
+       // IE selection restore voodoo
+       var needSave = false;
+       if ( hasIframe && context.savedSelection !== null ) {
+               context.fn.restoreSelection();
+               needSave = true;
+       }
+       retval = ( hasIframe ? context.fn : fn )[command].call( this, options );
+       if ( hasIframe && needSave ) {
+               context.fn.saveSelection();
+       }
+       return retval;
 };
 
 } )( jQuery );/**
@@ -6629,7 +6638,9 @@
                // The previous HTML of the iframe, stored to detect whether 
something really changed.
                'oldHTML': null,
                // Same for delayedChange()
-               'oldDelayedHTML': null
+               'oldDelayedHTML': null,
+               // Saved selection state for IE
+               'savedSelection': null
        };
        
        /*
@@ -7415,6 +7426,22 @@
                                }
                                t = nextT;
                        }
+               },
+               'saveSelection': function() {
+                       if ( !$.browser.msie ) {
+                               // Only IE needs this
+                               return;
+                       }
+                       context.$iframe[0].contentWindow.focus();
+                       context.savedSelection = 
context.$iframe[0].contentWindow.document.selection.createRange();
+               },
+               'restoreSelection': function() {
+                       if ( !$.browser.msie || context.savedSelection === null 
) {
+                               return;
+                       }
+                       context.$iframe[0].contentWindow.focus();
+                       context.savedSelection.select();
+                       context.savedSelection = null;
                }
        };
        
@@ -7662,6 +7689,9 @@
                                                                        
$.wikiEditor.modules.dialogs.fn.resize );
                                                        });
                                        }
+                                       dialogDiv.bind( 'dialogclose', 
function() {
+                                               context.fn.restoreSelection();
+                                       } );
                                        // Add tabindexes to dialog form 
elements
                                        // Find the highest tabindex in use
                                        var maxTI = 0;
@@ -9804,6 +9834,7 @@
                                }
                                break;
                        case 'dialog':
+                               context.fn.saveSelection();
                                context.$textarea.wikiEditor( 'openDialog', 
action.module );
                                break;
                        default: break;

Modified: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js
===================================================================
--- trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2010-02-03 00:03:19 UTC (rev 61896)
+++ trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js     
2010-02-03 00:17:46 UTC (rev 61897)
@@ -434,13 +434,15 @@
 
$(this).trigger('scrollToPosition');});}};switch(command){case'encapsulateSelection':options=$.extend({'pre':'','peri':'','post':'','ownline':false,'replace':false},options);break;case'getCaretPosition':options=$.extend({'startAndEnd':false},options);break;case'setSelection':options=$.extend({'start':undefined,'end':undefined,'startContainer':undefined,'endContainer':undefined},options);if(options.end===undefined)
 options.end=options.start;if(options.endContainer==undefined)
 
options.endContainer=options.startContainer;break;case'scrollToCaretPosition':options=$.extend({'force':false},options);break;}
-var context=$(this).data('wikiEditor-context');var 
hasIframe=context!==undefined&&context.$iframe!==undefined;return(hasIframe?context.fn:fn)[command].call(this,options);};})(jQuery);(function($){$.wikiEditor={'modules':{},'instances':[],'browsers':{'ltr':{'msie':[['>=',7]],'firefox':[['>=',2],['!=','2.0'],['!=','2.0.0.1'],['!=','2.0.0.2'],['!=','2.0.0.3'],['!=','2.0.0.4']],'opera':[['>=',9.6]],'safari':[['>=',3.1]]},'rtl':{'msie':[['>=',8]],'firefox':[['>=',2],['!=','2.0'],['!=','2.0.0.1'],['!=','2.0.0.2'],['!=','2.0.0.3'],['!=','2.0.0.4']],'opera':[['>=',9.6]],'safari':[['>=',3.1]]}},'imgPath':wgScriptPath+'/extensions/UsabilityInitiative/images/wikiEditor/','isSupported':function(){if(typeof
 $.wikiEditor.supported!='undefined'){return $.wikiEditor.supported;}
+var context=$(this).data('wikiEditor-context');var 
hasIframe=context!==undefined&&context.$iframe!==undefined;var 
needSave=false;if(hasIframe&&context.savedSelection!==null){context.fn.restoreSelection();needSave=true;}
+retval=(hasIframe?context.fn:fn)[command].call(this,options);if(hasIframe&&needSave){context.fn.saveSelection();}
+return 
retval;};})(jQuery);(function($){$.wikiEditor={'modules':{},'instances':[],'browsers':{'ltr':{'msie':[['>=',7]],'firefox':[['>=',2],['!=','2.0'],['!=','2.0.0.1'],['!=','2.0.0.2'],['!=','2.0.0.3'],['!=','2.0.0.4']],'opera':[['>=',9.6]],'safari':[['>=',3.1]]},'rtl':{'msie':[['>=',8]],'firefox':[['>=',2],['!=','2.0'],['!=','2.0.0.1'],['!=','2.0.0.2'],['!=','2.0.0.3'],['!=','2.0.0.4']],'opera':[['>=',9.6]],'safari':[['>=',3.1]]}},'imgPath':wgScriptPath+'/extensions/UsabilityInitiative/images/wikiEditor/','isSupported':function(){if(typeof
 $.wikiEditor.supported!='undefined'){return $.wikiEditor.supported;}
 if(!($.browser.name in 
$.wikiEditor.browsers[$('body').is('.rtl')?'rtl':'ltr'])){return 
$.wikiEditor.supported=true;}
 var 
browser=$.wikiEditor.browsers[$('body').is('.rtl')?'rtl':'ltr'][$.browser.name];for(var
 condition in browser){var op=browser[condition][0];var 
val=browser[condition][1];if(typeof 
val=='string'){if(!(eval('$.browser.version'+op+'"'+val+'"'))){return 
$.wikiEditor.supported=false;}}else if(typeof 
val=='number'){if(!(eval('$.browser.versionNumber'+op+val))){return 
$.wikiEditor.supported=false;}}}
 return 
$.wikiEditor.supported=true;},'autoMsg':function(object,property){if(typeof 
property=='object'){for(var i in property){if(property[i]in 
object||property[i]+'Msg'in object){property=property[i];break;}}}
 if(property in object){return object[property];}else if(property+'Msg'in 
object){if(typeof object[property+'Msg']=='object'){return 
mw.usability.getMsg.apply(mw.usability,object[property+'Msg']);}else{return 
mw.usability.getMsg(object[property+'Msg']);}}else{return'';}},'autoLang':function(object,lang){return
 
object[lang||wgUserLanguage]||object['default']||object;},'autoIcon':function(icon,path,lang){var
 
src=$.wikiEditor.autoLang(icon,lang);path=path||$.wikiEditor.imgPath;if(src.substr(0,7)!='http://'&&src.substr(0,8)!='https://'&&src[0]!='/'){src=path+src;}
 return 
src+'?'+wgWikiEditorIconVersion;}};$.fn.wikiEditor=function(){if(!$j.wikiEditor.isSupported()){return
 $(this);}
-var context=$(this).data('wikiEditor-context');if(typeof 
context=='undefined'){context={'$textarea':$(this),'views':{},'modules':{},'data':{},'instance':$.wikiEditor.instances.push($(this))-1,'offsets':null,'htmlToTextMap':{},'oldHTML':null,'oldDelayedHTML':null};context.api={'addModule':function(context,data){var
 modules={};if(typeof data=='string'){modules[data]={};}else if(typeof 
data=='object'){modules=data;}
+var context=$(this).data('wikiEditor-context');if(typeof 
context=='undefined'){context={'$textarea':$(this),'views':{},'modules':{},'data':{},'instance':$.wikiEditor.instances.push($(this))-1,'offsets':null,'htmlToTextMap':{},'oldHTML':null,'oldDelayedHTML':null,'savedSelection':null};context.api={'addModule':function(context,data){var
 modules={};if(typeof data=='string'){modules[data]={};}else if(typeof 
data=='object'){modules=data;}
 for(var module in modules){if(typeof module=='string'&&module in 
$.wikiEditor.modules){if('api'in $.wikiEditor.modules[module]){for(var call in 
$.wikiEditor.modules[module].api){if(!(call in 
context.api)){context.api[call]=$.wikiEditor.modules[module].api[call];}}}
 if('fn'in $.wikiEditor.modules[module]&&'create'in 
$.wikiEditor.modules[module].fn){context.modules[module]={};$.wikiEditor.modules[module].fn.create(context,modules[module]);}}}}};context.evt={'change':function(event){event.data.scope='division';var
 
newHTML=context.$content.html();if(context.oldHTML!=newHTML){context.fn.purgeOffsets();context.oldHTML=newHTML;event.data.scope='realchange';}
 return true;},'delayedChange':function(event){event.data.scope='division';var 
newHTML=context.$content.html();if(context.oldDelayedHTML!=newHTML){context.fn.purgeOffsets();context.oldDelayedHTML=newHTML;event.data.scope='realchange';}
@@ -505,7 +507,9 @@
 var base=context.offsets[lowerBound];return 
context.offsets[offset]={'node':base.node,'offset':base.offset+offset-lowerBound,'length':base.length,'depth':base.depth,'lastTextNode':base.lastTextNode,'lastTextNodeDepth':base.lastTextNodeDepth};},'purgeOffsets':function(){context.offsets=null;},'refreshOffsets':function(){context.offsets=[];var
 t=context.fn.traverser(context.$content);var 
pos=0,lastTextNode=null,lastTextNodeDepth=null;while(t){if(t.node.nodeName!='#text'&&t.node.nodeName!='BR'&&t.node.nodeName!='P'){t=t.next();continue;}
 var nextPos=t.node.nodeName=='#text'?pos+t.node.nodeValue.length:pos+1;var 
nextT=t.next();var 
leavingP=t.node.nodeName!='P'&&t.inP&&nextT&&(!nextT.inP||nextT.inP!=t.inP);context.offsets[pos]={'node':t.node,'offset':0,'length':nextPos-pos+(leavingP?1:0),'depth':t.depth,'lastTextNode':lastTextNode,'lastTextNodeDepth':lastTextNodeDepth};if(leavingP){context.offsets[nextPos]={'node':t.node,'offset':nextPos-pos,'length':nextPos-pos+1,'depth':t.depth,'lastTextNode':lastTextNode,'lastTextNodeDepth':lastTextNodeDepth};}
 
pos=nextPos+(leavingP?1:0);if(t.node.nodeName=='#text'){lastTextNode=t.node;lastTextNodeDepth=t.depth;}
-t=nextT;}}};context.$textarea.wrap($('<div></div>').addClass('wikiEditor-ui')).wrap($('<div></div>').addClass('wikiEditor-ui-view
 
wikiEditor-ui-view-wikitext')).wrap($('<div></div>').addClass('wikiEditor-ui-left')).wrap($('<div></div>').addClass('wikiEditor-ui-bottom')).wrap($('<div></div>').addClass('wikiEditor-ui-text'));context.$ui=context.$textarea.parent().parent().parent().parent().parent();context.$wikitext=context.$textarea.parent().parent().parent().parent();context.$wikitext.before($('<div></div>').addClass('wikiEditor-ui-controls').append($('<div></div>').addClass('wikiEditor-ui-tabs').hide()).append($('<div></div>').addClass('wikiEditor-ui-buttons'))).before($('<div
 
style="clear:both;"></div>'));context.$controls=context.$ui.find('.wikiEditor-ui-buttons').hide();context.$buttons=context.$ui.find('.wikiEditor-ui-buttons');context.$tabs=context.$ui.find('.wikiEditor-ui-tabs');context.$ui.after($('<div
 
style="clear:both;"></div>'));context.$wikitext.append($('<div></div>').addClass('wikiEditor-ui-right'));context.$wikitext.find('.wikiEditor-ui-left').prepend($('<div></div>').addClass('wikiEditor-ui-top'));context.view='wikitext';$(window).resize(function(event){context.fn.trigger('resize',event);});context.$iframe=$('<iframe></iframe>').attr({'frameBorder':0,'border':0,'src':wgScriptPath+'/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.html?'+'instance='+context.instance+'&ts='+(new
 
Date()).getTime(),'id':'wikiEditor-iframe-'+context.instance}).css({'backgroundColor':'white','width':'100%','height':context.$textarea.height(),'display':'none','overflow-y':'scroll','overflow-x':'hidden'}).insertAfter(context.$textarea).load(function(){if(!this.isSecondRun){context.$iframe[0].contentWindow.document.designMode='on';if($.browser.msie){this.isSecondRun=true;return;}}
+t=nextT;}},'saveSelection':function(){if(!$.browser.msie){return;}
+context.$iframe[0].contentWindow.focus();context.savedSelection=context.$iframe[0].contentWindow.document.selection.createRange();},'restoreSelection':function(){if(!$.browser.msie||context.savedSelection===null){return;}
+context.$iframe[0].contentWindow.focus();context.savedSelection.select();context.savedSelection=null;}};context.$textarea.wrap($('<div></div>').addClass('wikiEditor-ui')).wrap($('<div></div>').addClass('wikiEditor-ui-view
 
wikiEditor-ui-view-wikitext')).wrap($('<div></div>').addClass('wikiEditor-ui-left')).wrap($('<div></div>').addClass('wikiEditor-ui-bottom')).wrap($('<div></div>').addClass('wikiEditor-ui-text'));context.$ui=context.$textarea.parent().parent().parent().parent().parent();context.$wikitext=context.$textarea.parent().parent().parent().parent();context.$wikitext.before($('<div></div>').addClass('wikiEditor-ui-controls').append($('<div></div>').addClass('wikiEditor-ui-tabs').hide()).append($('<div></div>').addClass('wikiEditor-ui-buttons'))).before($('<div
 
style="clear:both;"></div>'));context.$controls=context.$ui.find('.wikiEditor-ui-buttons').hide();context.$buttons=context.$ui.find('.wikiEditor-ui-buttons');context.$tabs=context.$ui.find('.wikiEditor-ui-tabs');context.$ui.after($('<div
 
style="clear:both;"></div>'));context.$wikitext.append($('<div></div>').addClass('wikiEditor-ui-right'));context.$wikitext.find('.wikiEditor-ui-left').prepend($('<div></div>').addClass('wikiEditor-ui-top'));context.view='wikitext';$(window).resize(function(event){context.fn.trigger('resize',event);});context.$iframe=$('<iframe></iframe>').attr({'frameBorder':0,'border':0,'src':wgScriptPath+'/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.html?'+'instance='+context.instance+'&ts='+(new
 
Date()).getTime(),'id':'wikiEditor-iframe-'+context.instance}).css({'backgroundColor':'white','width':'100%','height':context.$textarea.height(),'display':'none','overflow-y':'scroll','overflow-x':'hidden'}).insertAfter(context.$textarea).load(function(){if(!this.isSecondRun){context.$iframe[0].contentWindow.document.designMode='on';if($.browser.msie){this.isSecondRun=true;return;}}
 context.$content=$(context.$iframe[0].contentWindow.document.body);var 
html=context.$textarea.val().replace(/&nbsp;/g,'&amp;nbsp;').replace(/\<br\>/g,'&lt;br&gt;').replace(/\<span
 class="wikiEditor-tab"\>\<\/span\>/g,'&lt;span 
class=&quot;wikiEditor-tab&quot;&gt;&lt;/span&gt;');if($.browser.msie){if($.browser.versionNumber<=7){html=html.replace(/
 /g,"&nbsp;");}else{html=html.replace(/(^|\n) /g,"$1&nbsp;");}
 html=html.replace(/\t/g,'<span class="wikiEditor-tab"></span>');}
 html=$('<div 
/>').text('<p>'+html.replace(/\r?\n/g,'</p><p>')+'</p>').html().replace(/&amp;nbsp;/g,'&nbsp;').replace(/&lt;p&gt;/g,'<p>').replace(/&lt;\/p&gt;/g,'</p>').replace(/<p><\/p>/g,'<br>').replace(/&lt;span
 class=&quot;wikiEditor-tab&quot;&gt;&lt;\/span&gt;/g,'<span 
class="wikiEditor-tab"></span>').replace(/&amp;amp;nbsp;/g,'&amp;nbsp;').replace(/&amp;lt;br&amp;gt;/g,'&lt;br&gt;').replace(/&amp;lt;span
 
class=&amp;quot;wikiEditor-tab&amp;quot;&amp;gt;&amp;lt;\/span&amp;gt;/g,'&lt;span
 
class=&quot;wikiEditor-tab&quot;&gt;&lt;/span&gt;');context.$content.html(html);context.oldHTML=html;if($('body').is('.rtl')){context.$content.addClass('rtl').attr('dir','rtl');}
@@ -514,7 +518,7 @@
 return 
$(this).data('wikiEditor-context',context);};})(jQuery);RegExp.escape=function(s){return
 
s.replace(/([.*+?^${}()|\/\\[\]])/g,'\\$1');};(function($){$.wikiEditor.modules.dialogs={api:{addDialog:function(context,data){$.wikiEditor.modules.dialogs.fn.create(context,data)},openDialog:function(context,module){if(module
 in 
$.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[module].id).dialog('open');}},closeDialog:function(context,data){if(module
 in 
$.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[module].id).dialog('close');}}},fn:{create:function(context,config){for(module
 in config){$.wikiEditor.modules.dialogs.modules[module]=config[module];}
 
mw.usability.load(['$j.ui','$j.ui.dialog','$j.ui.draggable','$j.ui.resizable'],function(){for(module
 in $.wikiEditor.modules.dialogs.modules){var 
module=$.wikiEditor.modules.dialogs.modules[module];if($('#'+module.id).size()==0){var
 
configuration=module.dialog;configuration.bgiframe=true;configuration.autoOpen=false;configuration.modal=true;configuration.title=$.wikiEditor.autoMsg(module,'title');configuration.newButtons={};for(msg
 in configuration.buttons)
 
configuration.newButtons[mw.usability.getMsg(msg)]=configuration.buttons[msg];configuration.buttons=configuration.newButtons;var
 dialogDiv=$('<div /> 
').attr('id',module.id).html(module.html).data('context',context).appendTo($('body')).each(module.init).dialog(configuration);if(!('resizeme'in
 
module)||module.resizeme){dialogDiv.bind('dialogopen',$.wikiEditor.modules.dialogs.fn.resize).find('.ui-tabs').bind('tabsshow',function(){$(this).closest('.ui-dialog-content').each($.wikiEditor.modules.dialogs.fn.resize);});}
-var maxTI=0;$j('[tabindex]').each(function(){var 
ti=parseInt($j(this).attr('tabindex'));if(ti>maxTI)
+dialogDiv.bind('dialogclose',function(){context.fn.restoreSelection();});var 
maxTI=0;$j('[tabindex]').each(function(){var 
ti=parseInt($j(this).attr('tabindex'));if(ti>maxTI)
 maxTI=ti;});var tabIndex=maxTI+1;$j('.ui-dialog input, .ui-dialog 
button').not('[tabindex]').each(function(){$j(this).attr('tabindex',tabIndex++);});}}});},resize:function(){var
 wrapper=$(this).closest('.ui-dialog');var oldWidth=wrapper.width();var 
oldHidden=$(this).find('*').not(':visible');oldHidden.each(function(){$(this).data('oldstyle',$(this).attr('style'));});oldHidden.show();var
 
oldWS=$(this).css('white-space');$(this).css('white-space','nowrap');if(wrapper.width()<=$(this).get(0).scrollWidth){var
 
thisWidth=$(this).data('thisWidth')?$(this).data('thisWidth'):0;thisWidth=Math.max($(this).get(0).scrollWidth,thisWidth);$(this).width(thisWidth);$(this).data('thisWidth',thisWidth);var
 
wrapperWidth=$(this).data('wrapperWidth')?$(this).data('wrapperWidth'):0;wrapperWidth=Math.max(wrapper.get(0).scrollWidth,wrapperWidth);wrapper.width(wrapperWidth);$(this).data('wrapperWidth',wrapperWidth);$(this).dialog({'width':wrapper.width()});wrapper.css('left',parseInt(wrapper.css('left'))-(wrapper.width()-oldWidth)/2);}
 
$(this).css('white-space',oldWS);oldHidden.each(function(){$(this).attr('style',$(this).data('oldstyle'));});}},modules:{},quickDialog:function(body,settings){$('<div
 
/>').text(body).appendTo($('body')).dialog($.extend({bgiframe:true,modal:true},settings)).dialog('open');}};})(jQuery);(function($){$.wikiEditor.modules.highlight={cfg:{'styleVersion':3},evt:{delayedChange:function(context,event){if(event.data.scope=='realchange'){$.wikiEditor.modules.highlight.fn.scan(context,"");$.wikiEditor.modules.highlight.fn.mark(context,"","");}},ready:function(context,event){$.wikiEditor.modules.highlight.fn.scan(context,"");$.wikiEditor.modules.highlight.fn.mark(context,"","");}},fn:{create:function(context,config){context.modules.highlight.markersStr='';},divide:function(context){},isolate:function(context){return[];},strip:function(context,division){return
 $('<div 
/>').html(division.html().replace(/\<br[^\>]*\>/g,"\n")).text();},scan:function(context,division){function
 
Token(offset,label,tokenStart,match){this.offset=offset;this.label=label;this.tokenStart=tokenStart;this.match=match;}
 var tokenArray=context.modules.highlight.tokenArray=[];var 
text=context.fn.getContents();for(module in context.modules){if(module in 
$.wikiEditor.modules&&'exp'in $.wikiEditor.modules[module]){for(var 
i=0;i<$.wikiEditor.modules[module].exp.length;i++){var 
regex=$.wikiEditor.modules[module].exp[i].regex;var 
label=$.wikiEditor.modules[module].exp[i].label;var markAfter=false;if(typeof 
$.wikiEditor.modules[module].exp[i].markAfter!='undefined'){markAfter=true;}
@@ -662,7 +666,7 @@
 switch(action.type){case'replace':case'encapsulate':var 
parts={'pre':'','peri':'','post':''};for(part in parts){if(part+'Msg'in 
action.options){parts[part]=mw.usability.getMsg(action.options[part+'Msg'],(action.options[part]||null));}else{parts[part]=(action.options[part]||'')}}
 if('regex'in action.options&&'regexReplace'in action.options){var 
selection=context.$textarea.textSelection('getSelection');if(selection!=''&&selection.match(action.options.regex)){parts.peri=selection.replace(action.options.regex,action.options.regexReplace);parts.pre=parts.post='';}}
 
context.$textarea.textSelection('encapsulateSelection',$.extend({},action.options,parts,{'replace':action.type=='replace'}));context.$iframe[0].contentWindow.focus();break;case'callback':if(typeof
 action.execute=='function'){action.execute(context);}
-break;case'dialog':context.$textarea.wikiEditor('openDialog',action.module);break;default:break;}},buildGroup:function(context,id,group){var
 $group=$('<div />').attr({'class':'group group-'+id,'rel':id});var 
label=$.wikiEditor.autoMsg(group,'label');if(label){$group.append('<div 
class="label">'+label+'</div>')}
+break;case'dialog':context.fn.saveSelection();context.$textarea.wikiEditor('openDialog',action.module);break;default:break;}},buildGroup:function(context,id,group){var
 $group=$('<div />').attr({'class':'group group-'+id,'rel':id});var 
label=$.wikiEditor.autoMsg(group,'label');if(label){$group.append('<div 
class="label">'+label+'</div>')}
 var empty=true;if('tools'in group){for(tool in group.tools){var 
tool=$.wikiEditor.modules.toolbar.fn.buildTool(context,tool,group.tools[tool]);if(tool){empty=false;$group.append(tool);}}}
 return empty?null:$group;},buildTool:function(context,id,tool){if('filters'in 
tool){for(filter in tool.filters){if($(tool.filters[filter]).size()==0){return 
null;}}}
 var 
label=$.wikiEditor.autoMsg(tool,'label');switch(tool.type){case'button':var 
src=$.wikiEditor.autoIcon(tool.icon,$.wikiEditor.imgPath+'toolbar/');$button=$('<img
 
/>').attr({'src':src,'width':22,'height':22,'alt':label,'title':label,'rel':id,'class':'tool
 tool-button'});if('action'in 
tool){$button.data('action',tool.action).data('context',context).click(function(){$.wikiEditor.modules.toolbar.fn.doAction($(this).data('context'),$(this).data('action'),$(this));return
 false;});}



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

Reply via email to