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(/ /g,'&nbsp;').replace(/\<br\>/g,'<br>').replace(/\<span class="wikiEditor-tab"\>\<\/span\>/g,'<span class="wikiEditor-tab"></span>');if($.browser.msie){if($.browser.versionNumber<=7){html=html.replace(/ /g," ");}else{html=html.replace(/(^|\n) /g,"$1 ");} html=html.replace(/\t/g,'<span class="wikiEditor-tab"></span>');} html=$('<div />').text('<p>'+html.replace(/\r?\n/g,'</p><p>')+'</p>').html().replace(/&nbsp;/g,' ').replace(/<p>/g,'<p>').replace(/<\/p>/g,'</p>').replace(/<p><\/p>/g,'<br>').replace(/<span class="wikiEditor-tab"><\/span>/g,'<span class="wikiEditor-tab"></span>').replace(/&amp;nbsp;/g,'&nbsp;').replace(/&lt;br&gt;/g,'<br>').replace(/&lt;span class=&quot;wikiEditor-tab&quot;&gt;&lt;\/span&gt;/g,'<span class="wikiEditor-tab"></span>');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