r63839 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r63838‎ | r63839 | r63840 >
Date:21:52, 16 March 2010
Author:adam
Status:ok
Tags:
Comment:
Search and Replace: Partial fix of bug 22801. Making the found item scroll into view. Still seems to be a lot of problems with search and replace though
Modified paths:
  • /trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php (modified) (history)
  • /trunk/extensions/UsabilityInitiative/WikiEditor/Modules/Toolbar/Toolbar.js (modified) (history)
  • /trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.js (modified) (history)
  • /trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.min.js (modified) (history)
  • /trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.hooks.php (modified) (history)
  • /trunk/extensions/UsabilityInitiative/js/plugins.combined.js (modified) (history)
  • /trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js (modified) (history)
  • /trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js (modified) (history)

Diff [purge]

Index: trunk/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
@@ -72,7 +72,7 @@
7373 array( 'src' => 'js/plugins/jquery.delayedBind.js', 'version' => 1 ),
7474 array( 'src' => 'js/plugins/jquery.suggestions.js', 'version' => 7 ),
7575 array( 'src' => 'js/plugins/jquery.textSelection.js', 'version' => 27 ),
76 - array( 'src' => 'js/plugins/jquery.wikiEditor.js', 'version' => 172 ),
 76+ array( 'src' => 'js/plugins/jquery.wikiEditor.js', 'version' => 173 ),
7777 array( 'src' => 'js/plugins/jquery.wikiEditor.highlight.js', 'version' => 47 ),
7878 array( 'src' => 'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 52 ),
7979 array( 'src' => 'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 21 ),
@@ -82,10 +82,10 @@
8383 array( 'src' => 'js/plugins/jquery.wikiEditor.publish.js', 'version' => 3 ),
8484 ),
8585 'combined' => array(
86 - array( 'src' => 'js/plugins.combined.js', 'version' => 346 ),
 86+ array( 'src' => 'js/plugins.combined.js', 'version' => 347 ),
8787 ),
8888 'minified' => array(
89 - array( 'src' => 'js/plugins.combined.min.js', 'version' => 346 ),
 89+ array( 'src' => 'js/plugins.combined.min.js', 'version' => 347 ),
9090 ),
9191 ),
9292 );
Index: trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.hooks.php
@@ -16,14 +16,14 @@
1717 array( 'src' => 'Modules/Preview/Preview.js', 'version' => 6 ),
1818 array( 'src' => 'Modules/Publish/Publish.js', 'version' => 6 ),
1919 array( 'src' => 'Modules/Toc/Toc.js', 'version' => 7 ),
20 - array( 'src' => 'Modules/Toolbar/Toolbar.js', 'version' => 59 ),
 20+ array( 'src' => 'Modules/Toolbar/Toolbar.js', 'version' => 60 ),
2121 array( 'src' => 'Modules/TemplateEditor/TemplateEditor.js', 'version' => 6 ),
2222 ),
2323 'combined' => array(
24 - array( 'src' => 'WikiEditor.combined.js', 'version' => 63 ),
 24+ array( 'src' => 'WikiEditor.combined.js', 'version' => 64 ),
2525 ),
2626 'minified' => array(
27 - array( 'src' => 'WikiEditor.combined.min.js', 'version' => 63 ),
 27+ array( 'src' => 'WikiEditor.combined.min.js', 'version' => 64 ),
2828 ),
2929 );
3030 static $messages = array(
Index: trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.js
@@ -1771,6 +1771,7 @@
17721772 var start = match.index + offset;
17731773 var end = start + match[0].length;
17741774 var newEnd = start + replaceStr.length;
 1775+ var context = $j( this ).data( 'context' );
17751776 $textarea.textSelection( 'setSelection', { 'start': start,
17761777 'end': end } );
17771778 if ( mode == 'replace' ) {
@@ -1784,8 +1785,7 @@
17851786 }
17861787 $textarea.textSelection( 'scrollToCaretPosition' );
17871788 $j(this).data( 'offset', mode == 'replace' ? newEnd : end );
1788 - var context = $j(this).data( 'context' );
1789 - var textbox = typeof context.$iframe != 'undefined' ? context.$iframe.contentWindow : $textarea;
 1789+ var textbox = typeof context.$iframe != 'undefined' ? context.$iframe[0].contentWindow : $textarea;
17901790 textbox.focus();
17911791 }
17921792 });
Index: trunk/extensions/UsabilityInitiative/WikiEditor/WikiEditor.combined.min.js
@@ -175,8 +175,8 @@
176176 if(!match){offset=0;s=text;match=s.match(regex);}
177177 if(!match){$j('#wikieditor-toolbar-replace-nomatch').show();}else if(mode=='replaceAll'){var index;for(var i=0;i<match.length;i++){index=s.indexOf(match[i]);if(index==-1){break;}
178178 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;}
179 -$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});}
180 -$textarea.textSelection('scrollToCaretPosition');$j(this).data('offset',mode=='replace'?newEnd:end);var context=$j(this).data('context');var textbox=typeof context.$iframe!='undefined'?context.$iframe.contentWindow:$textarea;textbox.focus();}});},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);});}
 179+$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;var context=$j(this).data('context');$textarea.textSelection('setSelection',{'start':start,'end':end});if(mode=='replace'){$textarea.textSelection('encapsulateSelection',{'peri':replaceStr,'replace':true}).textSelection('setSelection',{'start':start,'end':newEnd});}
 180+$textarea.textSelection('scrollToCaretPosition');$j(this).data('offset',mode=='replace'?newEnd:end);var textbox=typeof context.$iframe!='undefined'?context.$iframe[0].contentWindow:$textarea;textbox.focus();}});},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);});}
181181 var dialog=$j(this).closest('.ui-dialog');var that=this;var context=$j(this).data('context');var textbox=typeof context.$iframe!='undefined'?context.$iframe[0].contentWindow.document:context.$textarea;$j(textbox).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(){var context=$j(this).data('context');var textbox=typeof context.$iframe!='undefined'?context.$iframe[0].contentWindow.document:context.$textarea;$j(textbox).unbind('keypress.srdialog');$j(this).closest('.ui-dialog').data('dialogaction',false);}}}}});}});$j(document).ready(function(){if(!wgWikiEditorEnabledModules.templateEditor){return true;}
182182 if(wgNamespaceNumber==10){return true;}
183183 if($j.fn.wikiEditor){$j('textarea#wpTextbox1').wikiEditor('addModule','templateEditor');}});
\ No newline at end of file
Index: trunk/extensions/UsabilityInitiative/WikiEditor/Modules/Toolbar/Toolbar.js
@@ -1722,6 +1722,7 @@
17231723 var start = match.index + offset;
17241724 var end = start + match[0].length;
17251725 var newEnd = start + replaceStr.length;
 1726+ var context = $j( this ).data( 'context' );
17261727 $textarea.textSelection( 'setSelection', { 'start': start,
17271728 'end': end } );
17281729 if ( mode == 'replace' ) {
@@ -1735,8 +1736,7 @@
17361737 }
17371738 $textarea.textSelection( 'scrollToCaretPosition' );
17381739 $j(this).data( 'offset', mode == 'replace' ? newEnd : end );
1739 - var context = $j(this).data( 'context' );
1740 - var textbox = typeof context.$iframe != 'undefined' ? context.$iframe.contentWindow : $textarea;
 1740+ var textbox = typeof context.$iframe != 'undefined' ? context.$iframe[0].contentWindow : $textarea;
17411741 textbox.focus();
17421742 }
17431743 });
Index: trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
@@ -1165,9 +1165,8 @@
11661166 */
11671167
11681168 'getElementAtCursor': function() {
1169 - //firefox only
1170 - // TODO: IE support
11711169 if ( context.$iframe[0].contentWindow.getSelection ) {
 1170+ // Firefox and Opera
11721171 var selection = context.$iframe[0].contentWindow.getSelection();
11731172 if ( selection.rangeCount == 0 ) {
11741173 // We don't know where the cursor is
@@ -1176,9 +1175,11 @@
11771176 var sc = selection.getRangeAt( 0 ).startContainer;
11781177 if ( sc.nodeName == "#text" ) sc = sc.parentNode;
11791178 return $( sc );
1180 - } else {
1181 - return $( [] );
1182 - }
 1179+ } else if ( context.$iframe[0].contentWindow.document.selection ) { // should come last; Opera!
 1180+ // IE
 1181+ var selection = context.$iframe[0].contentWindow.document.selection.createRange();
 1182+ return $( selection.parentElement() );
 1183+ }
11831184 },
11841185
11851186 /**
@@ -1678,7 +1679,7 @@
16791680 * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
16801681 */
16811682 'scrollToCaretPosition': function( options ) {
1682 - // FIXME: context.$textarea.trigger( 'scrollToPosition' ) ?
 1683+ context.fn.scrollToTop( context.fn.getElementAtCursor(), true );
16831684 },
16841685 /**
16851686 * Scroll an element to the top of the iframe
Index: trunk/extensions/UsabilityInitiative/js/plugins.combined.js
@@ -7708,9 +7708,8 @@
77097709 */
77107710
77117711 'getElementAtCursor': function() {
7712 - //firefox only
7713 - // TODO: IE support
77147712 if ( context.$iframe[0].contentWindow.getSelection ) {
 7713+ // Firefox and Opera
77157714 var selection = context.$iframe[0].contentWindow.getSelection();
77167715 if ( selection.rangeCount == 0 ) {
77177716 // We don't know where the cursor is
@@ -7719,9 +7718,11 @@
77207719 var sc = selection.getRangeAt( 0 ).startContainer;
77217720 if ( sc.nodeName == "#text" ) sc = sc.parentNode;
77227721 return $( sc );
7723 - } else {
7724 - return $( [] );
7725 - }
 7722+ } else if ( context.$iframe[0].contentWindow.document.selection ) { // should come last; Opera!
 7723+ // IE
 7724+ var selection = context.$iframe[0].contentWindow.document.selection.createRange();
 7725+ return $( selection.parentElement() );
 7726+ }
77267727 },
77277728
77287729 /**
@@ -8221,7 +8222,7 @@
82228223 * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead
82238224 */
82248225 'scrollToCaretPosition': function( options ) {
8225 - // FIXME: context.$textarea.trigger( 'scrollToPosition' ) ?
 8226+ context.fn.scrollToTop( context.fn.getElementAtCursor(), true );
82268227 },
82278228 /**
82288229 * Scroll an element to the top of the iframe
Index: trunk/extensions/UsabilityInitiative/js/plugins.combined.min.js
@@ -521,7 +521,7 @@
522522 context.$content=$(context.$iframe[0].contentWindow.document.body);var html=context.$textarea.val().replace(/&esc;/g,'&esc;esc;').replace(/\<p\>/g,'&esc;&lt;p&gt;').replace(/\<\/p\>/g,'&esc;&lt;/p&gt;').replace(/\<span class="wikiEditor-tab"\>\<\/span\>/g,'&esc;&lt;span&nbsp;class=&quot;wikiEditor-tab&quot;&gt;&lt;/span&gt;').replace(/&nbsp;/g,'&esc;&amp;nbsp;');if($.browser.msie){html=html.replace(/\t/g,'<span class="wikiEditor-tab"></span>');if($.browser.versionNumber<=7){html=html.replace(/ /g,"&nbsp;");}else{html=html.replace(/(^|\n) /g,"$1&nbsp;");}}
523523 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(/&lt;span( |&nbsp;)class=("|&quot;)wikiEditor-tab("|&quot;)&gt;&lt;\/span&gt;/g,'<span class="wikiEditor-tab"></span>').replace(/<p><\/p>/g,'<p><br></p>').replace(/&amp;esc;&amp;amp;nbsp;/g,'&amp;nbsp;').replace(/&amp;esc;&amp;lt;p&amp;gt;/g,'&lt;p&gt;').replace(/&amp;esc;&amp;lt;\/p&amp;gt;/g,'&lt;/p&gt;').replace(/&amp;esc;&amp;lt;span&amp;nbsp;class=&amp;quot;wikiEditor-tab&amp;quot;&amp;gt;&amp;lt;\/span&amp;gt;/g,'&lt;span class="wikiEditor-tab"&gt;&lt;\/span&gt;').replace(/&amp;esc;esc;/g,'&amp;esc;');context.$content.html(html);if($('body').is('.rtl')){context.$content.addClass('rtl').attr('dir','rtl');}
524524 context.$textarea.attr('disabled',true);context.$textarea.hide();context.$iframe.show();context.fn.trigger('ready');context.oldHTML=context.oldDelayedHTML=context.$content.html();$(context.$iframe[0].contentWindow.document).bind('keydown',function(event){event.jQueryNode=context.fn.getElementAtCursor();return context.fn.trigger('keydown',event);}).bind('keyup',function(event){event.jQueryNode=context.fn.getElementAtCursor();return context.fn.trigger('keyup',event);}).bind('keypress',function(event){event.jQueryNode=context.fn.getElementAtCursor();return context.fn.trigger('keypress',event);}).bind('paste',function(event){return context.fn.trigger('paste',event);}).bind('cut',function(event){return context.fn.trigger('cut',event);}).bind('keyup paste mouseup cut encapsulateSelection',function(event){return context.fn.trigger('change',event);}).delayedBind(250,'keyup paste mouseup cut encapsulateSelection',function(event){context.fn.trigger('delayedChange',event);});});context.$textarea.closest('form').submit(function(){context.$textarea.attr('disabled',false);context.$textarea.val(context.$textarea.textSelection('getContents'));});context.fallbackWindowOnBeforeUnload=window.onbeforeunload;window.onbeforeunload=function(){context.$textarea.val(context.$textarea.textSelection('getContents'));if(context.fallbackWindowOnBeforeUnload){return context.fallbackWindowOnBeforeUnload();}};},'getElementAtCursor':function(){if(context.$iframe[0].contentWindow.getSelection){var selection=context.$iframe[0].contentWindow.getSelection();if(selection.rangeCount==0){return $([]);}
525 -var sc=selection.getRangeAt(0).startContainer;if(sc.nodeName=="#text")sc=sc.parentNode;return $(sc);}else{return $([]);}},'getContents':function(){var html;if($.browser.msie){var $c=$(context.$content.get(0).cloneNode(true));$c.find('p').each(function(){if($(this).html()==''){$(this).replaceWith('<p></p>');}});html=$c.html();}else{html=context.$content.html();}
 525+var sc=selection.getRangeAt(0).startContainer;if(sc.nodeName=="#text")sc=sc.parentNode;return $(sc);}else if(context.$iframe[0].contentWindow.document.selection){var selection=context.$iframe[0].contentWindow.document.selection.createRange();return $(selection.parentElement());}},'getContents':function(){var html;if($.browser.msie){var $c=$(context.$content.get(0).cloneNode(true));$c.find('p').each(function(){if($(this).html()==''){$(this).replaceWith('<p></p>');}});html=$c.html();}else{html=context.$content.html();}
526526 return context.fn.htmlToText(html);},'getSelection':function(){var retval;if(context.$iframe[0].contentWindow.getSelection){retval=context.$iframe[0].contentWindow.getSelection();if($.browser.opera){if(retval.rangeCount>0){retval=context.fn.htmlToText($('<pre />').append(retval.getRangeAt(0).cloneContents()).html());}else{retval='';}}}else if(context.$iframe[0].contentWindow.document.selection){retval=context.$iframe[0].contentWindow.document.selection.createRange();}
527527 if(typeof retval.text!='undefined'){retval=context.fn.htmlToText(retval.htmlText);}else if(typeof retval.toString!='undefined'){retval=retval.toString();}
528528 return retval;},'encapsulateSelection':function(options){var selText=$(this).textSelection('getSelection');var selTextArr;var collapseToEnd=false;var selectAfter=false;var setSelectionTo=null;var pre=options.pre,post=options.post;if(!selText){selText=options.peri;selectAfter=true;}else if(options.peri==selText.replace(/\s+$/,'')){selText=selText.replace(/\s+$/,'');collapseToEnd=true;selectAfter=true;}else if(options.replace){selText=options.peri;}else if(selText.charAt(selText.length-1)==' '){selText=selText.substring(0,selText.length-1);post+=' ';}
@@ -572,7 +572,7 @@
573573 range2.moveEnd('character',counted);while(matches=range2.htmlText.match(/\<\/p\>(\<br[^\>]*\>)+\<p\>/gi)){if(matches.length<=counted)
574574 break;range2.moveEnd('character',matches.length);counted+=matches.length;}
575575 range2.setEndPoint('StartToEnd',range);range2.select();}
576 -return context.$textarea;},'scrollToCaretPosition':function(options){},'scrollToTop':function($element,force){var html=context.$content.closest('html'),body=context.$content.closest('body'),parentHtml=$('html'),parentBody=$('body');var y=$element.offset().top;if(!$.browser.msie&&!$element.is('body')){y=parentHtml.scrollTop()>0?y+html.scrollTop()-parentHtml.scrollTop():y;y=parentBody.scrollTop()>0?y+body.scrollTop()-parentBody.scrollTop():y;}
 576+return context.$textarea;},'scrollToCaretPosition':function(options){context.fn.scrollToTop(context.fn.getElementAtCursor(),true);},'scrollToTop':function($element,force){var html=context.$content.closest('html'),body=context.$content.closest('body'),parentHtml=$('html'),parentBody=$('body');var y=$element.offset().top;if(!$.browser.msie&&!$element.is('body')){y=parentHtml.scrollTop()>0?y+html.scrollTop()-parentHtml.scrollTop():y;y=parentBody.scrollTop()>0?y+body.scrollTop()-parentBody.scrollTop():y;}
577577 var topBound=html.scrollTop()>body.scrollTop()?html.scrollTop():body.scrollTop(),bottomBound=topBound+context.$iframe.height();if(force||y<topBound||y>bottomBound){html.scrollTop(y);body.scrollTop(y);}
578578 $element.trigger('scrollToTop');}};context.$textarea.wrapAll($('<div></div>').addClass('wikiEditor-ui')).wrapAll($('<div></div>').addClass('wikiEditor-ui-view wikiEditor-ui-view-wikitext')).wrapAll($('<div></div>').addClass('wikiEditor-ui-left')).wrapAll($('<div></div>').addClass('wikiEditor-ui-bottom')).wrapAll($('<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);});}
579579 var args=$.makeArray(arguments);if(typeof context.$iframe==='undefined'&&arguments[0]=='addModule'&&typeof arguments[1]=='object'){for(module in arguments[1]){if(module in $.wikiEditor.modules&&$.wikiEditor.isSupported($.wikiEditor.modules[module])&&$.wikiEditor.isRequired($.wikiEditor.modules[module],'iframe')){context.fn.setupIframe();break;}}}

Status & tagging log