<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<title>[13548] trunk: Tabbing in Editors:
Prevent certain browsers from Tabbing out of the field.</title>
</head>
<body>
<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/13548">13548</a></dd>
<dt>Author</dt> <dd>dd32</dd>
<dt>Date</dt> <dd>2010-03-02 11:49:06 +0000 (Tue, 02 Mar 2010)</dd>
</dl>
<h3>Log Message</h3>
<pre>Tabbing in Editors: Prevent certain browsers from Tabbing out of the field. Props filosofo. Fixes <a href="http://trac.wordpress.org/ticket/12424">#12424</a></pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadminjscommondevjs">trunk/wp-admin/js/common.dev.js</a></li>
<li><a href="#trunkwpadminjscommonjs">trunk/wp-admin/js/common.js</a></li>
<li><a href="#trunkwpincludesscriptloaderphp">trunk/wp-includes/script-loader.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadminjscommondevjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/common.dev.js (13547 => 13548)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/common.dev.js        2010-03-02 11:42:15 UTC (rev 13547)
+++ trunk/wp-admin/js/common.dev.js        2010-03-02 11:49:06 UTC (rev 13548)
</span><span class="lines">@@ -269,14 +269,15 @@
</span><span class="cx">         });
</span><span class="cx">
</span><span class="cx">         // tab in textareas
</span><del>-        $('textarea#newcontent').keydown(function(e) {
</del><ins>+        $('#newcontent').keydown(function(e) {
</ins><span class="cx">                 if ( e.keyCode != 9 )
</span><span class="cx">                         return true;
</span><span class="cx">
</span><span class="cx">                 var el = e.target, selStart = el.selectionStart, selEnd = el.selectionEnd, val = el.value, scroll, sel;
</span><span class="cx">
</span><del>-                e.stopPropagation();
-                e.preventDefault();
</del><ins>+                try {
+                        this.lastKey = 9; // not a standard DOM property, lastKey is to help stop Opera tab event. See blur handler below.
+                } catch(err) {}
</ins><span class="cx">
</span><span class="cx">                 if ( document.selection ) {
</span><span class="cx">                         el.focus();
</span><span class="lines">@@ -288,7 +289,17 @@
</span><span class="cx">                         el.selectionStart = el.selectionEnd = selStart + 1;
</span><span class="cx">                         this.scrollTop = scroll;
</span><span class="cx">                 }
</span><ins>+                
+                if ( e.stopPropagation )
+                        e.stopPropagation();
+                if ( e.preventDefault )
+                        e.preventDefault();
</ins><span class="cx">         });
</span><ins>+        
+        $('#newcontent').blur(function(e) {
+                if ( this.lastKey && 9 == this.lastKey )
+                        this.focus();
+        });
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> jQuery(document).ready( function($){
</span></span></pre></div>
<a id="trunkwpadminjscommonjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/common.js (13547 => 13548)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/common.js        2010-03-02 11:42:15 UTC (rev 13547)
+++ trunk/wp-admin/js/common.js        2010-03-02 11:49:06 UTC (rev 13548)
</span><span class="lines">@@ -1 +1 @@
</span><del>-var showNotice,adminMenu,columns,validateForm;(function(a){adminMenu={init:function(){var b=a("#adminmenu");a(".wp-menu-toggle",b).each(function(){var c=a(this),d=c.siblings(".wp-submenu");if(d.length){c.click(function(){adminMenu.toggle(d)})}else{c.hide()}});this.favorites();a(".separator",b).click(function(){if(a("body").hasClass("folded")){adminMenu.fold(1);deleteUserSetting("mfold")}else{adminMenu.fold();setUserSetting("mfold","f")}return false});if(a("body").hasClass("folded")){this.fold()}this.restoreMenuState()},restoreMenuState:function(){a("li.wp-has-submenu","#adminmenu").each(function(c,d){var b=getUserSetting("m"+c);if(a(d).hasClass("wp-has-current-submenu")){return true}if("o"==b){a(d).addClass("wp-menu-open")}else{if("c"==b){a(d).removeClass("wp-menu-open")}}})},toggle:function(b){var c=b.slideToggle(150,function(){b.css("display","")}).parent().toggleClass("wp-menu-open").attr("id");if(c){a("li.wp-has-submenu","#adminmenu").each(function(f,g){if(c==g.id){var d=a(g).hasClass("wp-menu-open")?"o":"c";setUserSetting("m"+f,d)}})}return false},fold:function(b){if(b){a("body").removeClass("folded");a("#adminmenu li.wp-has-submenu").unbind()}else{a("body").addClass("folded");a("#adminmenu li.wp-has-submenu").hoverIntent({over:function(j){var d,c,g,k,i;d=a(this).find(".wp-submenu");c=a(this).offset().top+d.height()+1;g=a("#wpwrap").height();k=60+c-g;i=a(window).height()+a(window).scrollTop()-15;if(i<(c-k)){k=c-i}if(k>1){d.css({marginTop:"-"+k+"px"})}else{if(d.css("marginTop")){d.css({marginTop:""})}}d.addClass("sub-open")},out:function(){a(this).find(".wp-submenu").removeClass("sub-open").css({marginTop:""})},timeout:220,sensitivity:8,interval:100})}},favorites:function(){a("#favorite-inside").width(a("#favorite-actions").width()-4);a("#favorite-toggle, #favorite-inside").bind("mouseenter",function(){a("#favorite-inside").removeClass("slideUp").addClass("slideDown");setTimeout(function(){if(a("#favorite-inside").hasClass("slideDown")){a("#favorite-inside").slideDown(100);a("#favorite-first").addClass("slide-down")}},200)}).bind("mouseleave",function(){a("#favorite-inside").removeClass("slideDown").addClass("slideUp");setTimeout(function(){if(a("#favorite-inside").hasClass("slideUp")){a("#favorite-inside").slideUp(100,function(){a("#favorite-first").removeClass("slide-down")})}},300)})}};a(document).ready(function(){adminMenu.init()});columns={init:function(){a(".hide-column-tog","#adv-settings").click(function(){var b=a(this).val();if(a(this).attr("checked")){a(".column-"+b).show()}else{a(".column-"+b).hide()}columns.save_manage_columns_state()})},save_manage_columns_state:function(){var b=a(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",");a.post(ajaxurl,{action:"hidden-columns",hidden:b,screenoptionnonce:a("#screenoptionnonce").val(),page:pagenow})}};a(document).ready(function(){columns.init()});validateForm=function(b){return !a(b).find(".form-required").filter(function(){return a("input:visible",this).val()==""}).addClass("form-invalid").find("input:visible").change(function(){a(this).closest(".form-invalid").removeClass("form-invalid")}).size()}})(jQuery);showNotice={warn:function(){var a=commonL10n.warnDelete||"";if(confirm(a)){return true}return false},note:function(a){alert(a)}};jQuery(document).ready(function(d){var f=false,a,e,c,b;d("div.wrap h2:first").nextAll("div.updated, div.error").addClass("below-h2");d("div.updated, div.error").not(".below-h2, .inline").insertAfter(d("div.wrap h2:first"));d("#show-settings-link").click(function(){if(!d("#screen-options-wrap").hasClass("screen-options-open")){d("#contextual-help-link-wrap").css("visibility","hidden")}d("#screen-options-wrap").slideToggle("fast",function(){if(d(this).hasClass("screen-options-open")){d("#show-settings-link").css({backgroundImage:'url("images/screen-options-right.gif")'});d("#contextual-help-link-wrap").css("visibility","");d(this).removeClass("screen-options-open")}else{d("#show-settings-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});d(this).addClass("screen-options-open")}});return false});d("#contextual-help-link").click(function(){if(!d("#contextual-help-wrap").hasClass("contextual-help-open")){d("#screen-options-link-wrap").css("visibility","hidden")}d("#contextual-help-wrap").slideToggle("fast",function(){if(d(this).hasClass("contextual-help-open")){d("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right.gif")'});d("#screen-options-link-wrap").css("visibility","");d(this).removeClass("contextual-help-open")}else{d("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});d(this).addClass("contextual-help-open")}});return false});d("tbody").children().children(".check-column").find(":checkbox").click(function(g){if("undefined"==g.shiftKey){return true}if(g.shiftKey){if(!f){return true}a=d(f).closest("form").find(":checkbox");e=a.index(f);c=a.index(this);b=d(this).attr("checked");if(0<e&&0<c&&e!=c){a.slice(e,c).attr("checked",function(){if(d(this).closest("tr").is(":visible")){return b?"checked":""}return""})}}f=this;return true});d("thead, tfoot").find(":checkbox").click(function(i){var j=d(this).attr("checked"),h="undefined"==typeof toggleWithKeyboard?false:toggleWithKeyboard,g=i.shiftKey||h;d(this).closest("table").children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").attr("checked",function(){if(d(this).closest("tr").is(":hidden")){return""}if(g){return d(this).attr("checked")?"":"checked"}else{if(j){return"checked"}}return""});d(this).closest("table").children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").attr("checked",function(){if(g){return""}else{if(j){return"checked"}}return""})});d("#default-password-nag-no").click(function(){setUserSetting("default_password_nag","hide");d("div.default-password-nag").hide();return false});d("textarea#newcontent").keydown(function(k){if(k.keyCode!=9){return true}var i=k.target,m=i.selectionStart,h=i.selectionEnd,l=i.value,g,j;k.stopPropagation();k.preventDefault();if(document.selection){i.focus();j=document.selection.createRange();j.text="\t"}else{if(m>=0){g=this.scrollTop;i.value=l.substring(0,m).concat("\t",l.substring(h));i.selectionStart=i.selectionEnd=m+1;this.scrollTop=g}}})});jQuery(document).ready(function(b){var a=b("span.turbo-nag","#user_info");if(!a.length||("undefined"!=typeof(google)&&google.gears)){return}if("undefined"!=typeof GearsFactory){return}else{try{if(("undefined"!=typeof window.ActiveXObject&&ActiveXObject("Gears.Factory"))||("undefined"!=typeof navigator.mimeTypes&&navigator.mimeTypes["application/x-googlegears"])){return}}catch(c){}}a.show()});
</del><span class="cx">\ No newline at end of file
</span><ins>+var showNotice,adminMenu,columns,validateForm;(function($){adminMenu={init:function(){var menu=$("#adminmenu");$(".wp-menu-toggle",menu).each(function(){var t=$(this),sub=t.siblings(".wp-submenu");if(sub.length){t.click(function(){adminMenu.toggle(sub)})}else{t.hide()}});this.favorites();$(".separator",menu).click(function(){if($("body").hasClass("folded")){adminMenu.fold(1);deleteUserSetting("mfold")}else{adminMenu.fold();setUserSetting("mfold","f")}return false});if($("body").hasClass("folded")){this.fold()}this.restoreMenuState()},restoreMenuState:function(){$("li.wp-has-submenu","#adminmenu").each(function(i,e){var v=getUserSetting("m"+i);if($(e).hasClass("wp-has-current-submenu")){return true}if("o"==v){$(e).addClass("wp-menu-open")}else{if("c"==v){$(e).removeClass("wp-menu-open")}}})},toggle:function(el){var id=el.slideToggle(150,function(){el.css("display","")}).parent().toggleClass("wp-menu-open").attr("id");if(id){$("li.wp-has-submenu","#adminmenu").each(function(i,e){if(id==e.id){var v=$(e).hasClass("wp-menu-open")?"o":"c";setUserSetting("m"+i,v)}})}return false},fold:function(off){if(off){$("body").removeClass("folded");$("#adminmenu li.wp-has-submenu").unbind()}else{$("body").addClass("folded");$("#adminmenu li.wp-has-submenu").hoverIntent({over:function(e){var m,b,h,o,f;m=$(this).find(".wp-submenu");b=$(this).offset().top+m.height()+1;h=$("#wpwrap").height();o=60+b-h;f=$(window).height()+$(window).scrollTop()-15;if(f<(b-o)){o=b-f}if(o>1){m.css({marginTop:"-"+o+"px"})}else{if(m.css("marginTop")){m.css({marginTop:""})}}m.addClass("sub-open")},out:function(){$(this).find(".wp-submenu").removeClass("sub-open").css({marginTop:""})},timeout:220,sensitivity:8,interval:100})}},favorites:function(){$("#favorite-inside").width($("#favorite-actions").width()-4);$("#favorite-toggle, #favorite-inside").bind("mouseenter",function(){$("#favorite-inside").removeClass("slideUp").addClass("slideDown");setTimeout(function(){if($("#favorite-inside").hasClass("slideDown")){$("#favorite-inside").slideDown(100);$("#favorite-first").addClass("slide-down")}},200)}).bind("mouseleave",function(){$("#favorite-inside").removeClass("slideDown").addClass("slideUp");setTimeout(function(){if($("#favorite-inside").hasClass("slideUp")){$("#favorite-inside").slideUp(100,function(){$("#favorite-first").removeClass("slide-down")})}},300)})}};$(document).ready(function(){adminMenu.init()});columns={init:function(){$(".hide-column-tog","#adv-settings").click(function(){var column=$(this).val();if($(this).attr("checked")){$(".column-"+column).show()}else{$(".column-"+column).hide()}columns.save_manage_columns_state()})},save_manage_columns_state:function(){var hidden=$(".manage-column").filter(":hidden").map(function(){return this.id}).get().join(",");$.post(ajaxurl,{action:"hidden-columns",hidden:hidden,screenoptionnonce:$("#screenoptionnonce").val(),page:pagenow})}};$(document).ready(function(){columns.init()});validateForm=function(form){return !$(form).find(".form-required").filter(function(){return $("input:visible",this).val()==""}).addClass("form-invalid").find("input:visible").change(function(){$(this).closest(".form-invalid").removeClass("form-invalid")}).size()}})(jQuery);showNotice={warn:function(){var msg=commonL10n.warnDelete||"";if(confirm(msg)){return true}return false},note:function(text){alert(text)}};jQuery(document).ready(function($){var lastClicked=false,checks,first,last,checked;$("div.wrap h2:first").nextAll("div.updated, div.error").addClass("below-h2");$("div.updated, div.error").not(".below-h2, .inline").insertAfter($("div.wrap h2:first"));$("#show-settings-link").click(function(){if(!$("#screen-options-wrap").hasClass("screen-options-open")){$("#contextual-help-link-wrap").css("visibility","hidden")}$("#screen-options-wrap").slideToggle("fast",function(){if($(this).hasClass("screen-options-open")){$("#show-settings-link").css({backgroundImage:'url("images/screen-options-right.gif")'});$("#contextual-help-link-wrap").css("visibility","");$(this).removeClass("screen-options-open")}else{$("#show-settings-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});$(this).addClass("screen-options-open")}});return false});$("#contextual-help-link").click(function(){if(!$("#contextual-help-wrap").hasClass("contextual-help-open")){$("#screen-options-link-wrap").css("visibility","hidden")}$("#contextual-help-wrap").slideToggle("fast",function(){if($(this).hasClass("contextual-help-open")){$("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right.gif")'});$("#screen-options-link-wrap").css("visibility","");$(this).removeClass("contextual-help-open")}else{$("#contextual-help-link").css({backgroundImage:'url("images/screen-options-right-up.gif")'});$(this).addClass("contextual-help-open")}});return false});$("tbody").children().children(".check-column").find(":checkbox").click(function(e){if("undefined"==e.shiftKey){return true}if(e.shiftKey){if(!lastClicked){return true}checks=$(lastClicked).closest("form").find(":checkbox");first=checks.index(lastClicked);last=checks.index(this);checked=$(this).attr("checked");if(0<first&&0<last&&first!=last){checks.slice(first,last).attr("checked",function(){if($(this).closest("tr").is(":visible")){return checked?"checked":""}return""})}}lastClicked=this;return true});$("thead, tfoot").find(":checkbox").click(function(e){var c=$(this).attr("checked"),kbtoggle="undefined"==typeof toggleWithKeyboard?false:toggleWithKeyboard,toggle=e.shiftKey||kbtoggle;$(this).closest("table").children("tbody").filter(":visible").children().children(".check-column").find(":checkbox").attr("checked",function(){if($(this).closest("tr").is(":hidden")){return""}if(toggle){return $(this).attr("checked")?"":"checked"}else{if(c){return"checked"}}return""});$(this).closest("table").children("thead, tfoot").filter(":visible").children().children(".check-column").find(":checkbox").attr("checked",function(){if(toggle){return""}else{if(c){return"checked"}}return""})});$("#default-password-nag-no").click(function(){setUserSetting("default_password_nag","hide");$("div.default-password-nag").hide();return false});$("#newcontent").keydown(function(e){if(e.keyCode!=9){return true}var el=e.target,selStart=el.selectionStart,selEnd=el.selectionEnd,val=el.value,scroll,sel;try{this.lastKey=9}catch(err){}if(document.selection){el.focus();sel=document.selection.createRange();sel.text="\t"}else{if(selStart>=0){scroll=this.scrollTop;el.value=val.substring(0,selStart).concat("\t",val.substring(selEnd));el.selectionStart=el.selectionEnd=selStart+1;this.scrollTop=scroll}}if(e.stopPropagation){e.stopPropagation()}if(e.preventDefault){e.preventDefault()}});$("#newcontent").blur(function(e){if(this.lastKey&&9==this.lastKey){this.focus()}})});jQuery(document).ready(function($){var turboNag=$("span.turbo-nag","#user_info");if(!turboNag.length||("undefined"!=typeof(google)&&google.gears)){return}if("undefined"!=typeof GearsFactory){return}else{try{if(("undefined"!=typeof window.ActiveXObject&&ActiveXObject("Gears.Factory"))||("undefined"!=typeof navigator.mimeTypes&&navigator.mimeTypes["application/x-googlegears"])){return}}catch(e){}}turboNag.show()});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkwpincludesscriptloaderphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/script-loader.php (13547 => 13548)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/script-loader.php        2010-03-02 11:42:15 UTC (rev 13547)
+++ trunk/wp-includes/script-loader.php        2010-03-02 11:49:06 UTC (rev 13548)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">
</span><span class="cx">         $scripts->add( 'utils', "/wp-admin/js/utils$suffix.js", false, '20090102' );
</span><span class="cx">
</span><del>-        $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20100218' );
</del><ins>+        $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20100302' );
</ins><span class="cx">         $scripts->add_data( 'common', 'group', 1 );
</span><span class="cx">         $scripts->localize( 'common', 'commonL10n', array(
</span><span class="cx">                 'warnDelete' => __("You are about to permanently delete the selected items.\n 'Cancel' to stop, 'OK' to delete."),
</span></span></pre>
</div>
</div>
</body>
</html>