<!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>[14337] trunk: Alot of drag/drop/sortable improvements to nav menu admin UI
 .</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/14337">14337</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2010-05-02 19:09:10 +0000 (Sun, 02 May 2010)</dd>
</dl>

<h3>Log Message</h3>
<pre>Alot of drag/drop/sortable improvements to nav menu admin UI. props koopersmith, fixes <a href="http://trac.wordpress.org/ticket/12675">#12675</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadmincssnavmenucss">trunk/wp-admin/css/nav-menu.css</a></li>
<li><a href="#trunkwpadmincssnavmenudevcss">trunk/wp-admin/css/nav-menu.dev.css</a></li>
<li><a href="#trunkwpadminincludesnavmenuphp">trunk/wp-admin/includes/nav-menu.php</a></li>
<li><a href="#trunkwpadminjsnavmenudevjs">trunk/wp-admin/js/nav-menu.dev.js</a></li>
<li><a href="#trunkwpadminjsnavmenujs">trunk/wp-admin/js/nav-menu.js</a></li>
<li><a href="#trunkwpadminnavmenusphp">trunk/wp-admin/nav-menus.php</a></li>
<li><a href="#trunkwpincludesscriptloaderphp">trunk/wp-includes/script-loader.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadmincssnavmenucss"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/css/nav-menu.css (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/css/nav-menu.css        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-admin/css/nav-menu.css        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -1 +1 @@
</span><del>-#nav-menus-frame{margin-left:300px;}#menu-settings-column{display:block;width:281px;margin-left:-300px;clear:both;float:left;}#menu-settings-column .inside{padding:0 10px;}#menu-settings-column .handlediv{background:url(&quot;../images/menu-bits.gif&quot;) no-repeat scroll 0 -110px;}#wpbody{position:relative;}#menu-management-liquid{float:left;min-width:100%;}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%;}#menu-management .menu-edit{margin-bottom:20px;}#nav-menu-header,#post-body{border-color:#ccc;border-style:solid;}#nav-menu-header{background:url(&quot;../images/gray-grad.png&quot;) repeat-x scroll left top #dfdfdf;border-width:1px 1px 0 1px;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;-khtml-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;-khtml-border-top-right-radius:6px;border-top-right-radius:6px;}#post-body{background:#fff;padding:0 0 10px 10px;border-width:0 1px 1px 1px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;-khtml-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;-khtml-border-bottom-right-radius:6px;border-bottom-right-radius:6px;}.post-body-plain{padding:10px 10px 0 0;}#menu-management .menu-add-new abbr{font-weight:bold;}#menu-management .nav-tabs{padding-left:30px;}#menu-management .nav-tab{background:#f4f4f4;font-weight:bold;border-color:#dfdfdf;}#menu-management .nav-tab-active{background:#ececec;border-color:#ccc;border-bottom-color:#ececec;}#menu-management #major-publishing-actions #delete-action{float:right;margin-right:10px;}#menu-name-label{margin-top:-2px;}#wpbody .open-label{display:inline-block;}#wpbody .open-label span{padding-right:10px;}.js .label-with-default-title{color:#aaa;font-style:italic;}#menu-management .inside{padding:0 10px;}.postbox .howto input{width:180px;float:right;}.customlinkdiv .howto input{width:210px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete,.submitclose{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-controls{float:left;}.add-to-menu{float:right;}.postbox img.waiting{display:none;vertical-align:middle;}form.processing .postbox img.waiting{display:inline;}.button-controls{margin:10px 0;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}#create-menu-name{width:159px;}#manage-menu .inside{padding:0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}.menu-item-textbox{width:180px;}.howto span{margin-top:4px;display:block;float:left;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;margin-bottom:10px;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li li .menu-item-title{margin-left:14px;}.list li li li .menu-item-title{margin-left:28px;}.list li li li li .menu-item-title{margin-left:42px;}.list li li li li li .menu-item-title{margin-left:56px;}.list li li li li li li .menu-item-title{margin-left:70px;}.list li li li li li li li .menu-item-title{margin-left:84px;}.list li li li li li li li li .menu-item-title{margin-left:98px;}.list li li li li li li li li li .menu-item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu{padding-top:1em;}.menu ul{width:100%;}.menu li{margin:0;}.menu li dl{clear:both;line-height:1.5em;position:relative;}.menu li dl dt{background:url(&quot;../images/gray-grad.png&quot;) repeat-x scroll left top #DFDFDF;border:1px solid #E6E6E6;clear:both;position:relative;padding-left:10px;height:auto;width:400px;line-height:35px;text-shadow:0 1px 0 #FFF;font-weight:bold;overflow:hidden;}.menu li.deleting dl dt{background-color:#f66;background-image:none;text-shadow:0 0 0 #ccc;}.menu li dl.menu-item-edit-inactive dt{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;-khtml-border-radius:6px;}.menu li dl.menu-item-edit-active dt{-moz-border-radius:6px 6px 0 0;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-khtml-border-top-right-radius:6px;-khtml-border-top-left-radius:6px;border-top-right-radius:6px;border-top-left-radius:6px;}.js .menu li dl dt{cursor:move;}.no-js .menu li dl{margin-top:13px;}.menu li .item-title{padding:7px 0;line-height:20px;display:block;margin-right:13em;}.menu li .sortable-placeholder{width:430px;}.menu li div.sortable-placeholder{background:#f5f5f5;border:1px dashed #bbb;margin:10px 0;padding-top:40px;}.menu li dl.sortable-placeholder{background:#f5f5f5;padding-bottom:40px;}.menu li li{margin-left:20px;}.dropzone{height:7px;margin:3px 0 3px 0;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:20px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-order{padding-right:10px;}.item-controls .item-order a{font-weight:bold;}body.js .item-order{display:none;}.item-controls .menu-item-delete:hover{color:#f00;}.item-edit{background:url(&quot;../images/menu-bits.gif&quot;) no-repeat scroll 0 -105px;position:absolute;right:-20px;top:0;display:block;width:23px;height:36px;overflow:hidden;text-indent:-999em;border-bottom:1px solid #eee;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;-khtml-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.menu-item-settings{background:#F9F9F9;width:400px;padding:10px 0 10px 10px;border:solid #E6E6E6;border-width:0 1px 1px 1px;-moz-border-radius:0 0 6px 6px;-webkit-border-bottom-right-radius:6px;-webkit-border-bottom-left-radius:6px;-khtml-border-bottom-right-radius:6px;-khtml-border-bottom-left-radius:6px;}.menu-item-settings.menu-item-edit-active{display:block;}.menu-item-settings.menu-item-edit-inactive{display:none;}.add-menu-item-pagelinks{margin:.5em auto;text-align:center;}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;font-size:11px;color:#777;font-style:italic;border:1px solid #dfdfdf;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;-khtml-border-radius:6px;}.link-to-original a{padding-left:4px;font-style:normal;}.hidden-field{display:none;}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left;}.description-thin{width:190px;height:40px;}.description-wide{width:390px;}.menu-item-actions{padding-top:15px;line-height:25px;}.save-menu-item{padding-left:10px;float:right;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.major-publishing-actions{padding:5px 10px;border-bottom:1px solid #eee;}.major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;}.major-publishing-actions .delete-action{line-height:25px;vertical-align:middle;text-align:left;float:right;padding-right:15px;}.menu-name-label span{font-size:11px;font-style:normal;}.submitbox .submitclose{color:#21759B;border-bottom:1px solid #21759B;padding:1px 2px;text-decoration:none;}.submitbox .submitclose:hover{background:#21759B;color:#fff;}.menu-item-settings:after,.button-controls:after,#menu-item-url-wrap:after,#menu-item-name-wrap:after{content:&quot;.&quot;;display:block;height:0;clear:both;visibility:hidden;}.menu-item-settings,.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block;}
</del><span class="cx">\ No newline at end of file
</span><ins>+#nav-menus-frame{margin-left:300px;}#menu-settings-column{display:block;width:281px;margin-left:-300px;clear:both;float:left;}#menu-settings-column .inside{padding:0 10px;}#menu-settings-column .handlediv{background:url(&quot;../images/menu-bits.gif&quot;) no-repeat scroll 0 -110px;}#wpbody{position:relative;}#menu-management-liquid{float:left;min-width:100%;}#menu-management{position:relative;margin-right:20px;margin-top:-3px;width:100%;}#menu-management .menu-edit{margin-bottom:20px;}#nav-menu-header,#post-body{border-color:#ccc;border-style:solid;}#nav-menu-header{background:url(&quot;../images/gray-grad.png&quot;) repeat-x scroll left top #dfdfdf;border-width:1px 1px 0 1px;-moz-border-radius-topleft:6px;-webkit-border-top-left-radius:6px;-khtml-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-topright:6px;-webkit-border-top-right-radius:6px;-khtml-border-top-right-radius:6px;border-top-right-radius:6px;}#post-body{background:#fff;padding:0 0 10px 10px;border-width:0 1px 1px 1px;-moz-border-radius-bottomleft:6px;-webkit-border-bottom-left-radius:6px;-khtml-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-moz-border-radius-bottomright:6px;-webkit-border-bottom-right-radius:6px;-khtml-border-bottom-right-radius:6px;border-bottom-right-radius:6px;}#post-body-content{position:relative;}.post-body-plain{padding:10px 10px 0 0;}#menu-management .menu-add-new abbr{font-weight:bold;}#menu-management .nav-tabs{padding-left:30px;}#menu-management .nav-tab{background:#f4f4f4;font-weight:bold;border-color:#dfdfdf;}#menu-management .nav-tab-active{background:#ececec;border-color:#ccc;border-bottom-color:#ececec;}#menu-management #major-publishing-actions #delete-action{float:right;margin-right:10px;}#menu-name-label{margin-top:-2px;}#wpbody .open-label{display:inline-block;}#wpbody .open-label span{padding-right:10px;}.js .input-with-default-title{color:#aaa;font-style:italic;}#menu-management .inside{padding:0 10px;}.postbox .howto input{width:180px;float:right;}.customlinkdiv .howto input{width:210px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete,.submitclose{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-controls{float:left;}.add-to-menu{float:right;}.postbox img.waiting{display:none;vertical-align:middle;}form.processing .postbox img.waiting{display:inline;}.button-controls{margin:10px 0;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}#create-menu-name{width:159px;}#manage-menu .inside{padding:0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}.menu-item-textbox{width:180px;}.howto span{margin-top:4px;display:block;float:left;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;margin-bottom:10px;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li li .menu-item-title{margin-left:14px;}.list li li li .menu-item-title{margin-left:28px;}.list li li li li .menu-item-title{margin-left:42px;}.list li li li li li .menu-item-title{margin-left:56px;}.list li li li li li li .menu-item-title{margin-left:70px;}.list li li li li li li li .menu-item-title{margin-left:84px;}.list li li li li li li li li .menu-item-title{margin-left:98px;}.list li li li li li li li li li .menu-item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu{padding-top:1em;}.menu ul{width:100%;}.menu li{margin-bottom:0;}.menu li dl{clear:both;line-height:1.5em;position:relative;margin-top:13px;}.menu li dl dt{background:url(&quot;../images/gray-grad.png&quot;) repeat-x scroll left top #DFDFDF;border:1px solid #E6E6E6;clear:both;position:relative;padding-left:10px;height:auto;width:400px;line-height:35px;text-shadow:0 1px 0 #FFF;font-weight:bold;overflow:hidden;}.menu li dl.menu-item-edit-inactive dt{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;-khtml-border-radius:6px;}.menu li dl.menu-item-edit-active dt{-moz-border-radius:6px 6px 0 0;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;-khtml-border-top-right-radius:6px;-khtml-border-top-left-radius:6px;border-top-right-radius:6px;border-top-left-radius:6px;}.js .menu li dl dt{cursor:move;}.menu li.deleting dl dt{background-color:#faa;}.menu li .item-title{padding:7px 0;line-height:20px;display:block;margin-right:13em;}li.menu-item.ui-sortable-helper dl{margin-top:0;}li.menu-item.ui-sortable-helper .menu-item-transport dl{margin-top:13px;}.menu .sortable-placeholder{height:35px;width:410px;margin-top:13px;}.menu-item-depth-0{margin-left:0;}.menu-item-depth-1{margin-left:30px;}.menu-item-depth-2{margin-left:60px;}.menu-item-depth-3{margin-left:90px;}.menu-item-depth-4{margin-left:120px;}.menu-item-depth-5{margin-left:150px;}.menu-item-depth-6{margin-left:180px;}.menu-item-depth-7{margin-left:210px;}.menu-item-depth-8{margin-left:240px;}.menu-item-depth-9{margin-left:270px;}.menu-item-depth-10{margin-left:300px;}.menu-item-depth-11{margin-left:330px;}.menu-item-depth-0 .menu-item-transport{margin-left:0;}.menu-item-depth-1 .menu-item-transport{margin-left:-30px;}.menu-item-depth-2 .menu-item-transport{margin-left:-60px;}.menu-item-depth-3 .menu-item-transport{margin-left:-90px;}.menu-item-depth-4 .menu-item-transport{margin-left:-120px;}.menu-item-depth-5 .menu-item-transport{margin-left:-150px;}.menu-item-depth-6 .menu-item-transport{margin-left:-180px;}.menu-item-depth-7 .menu-item-transport{margin-left:-210px;}.menu-item-depth-8 .menu-item-transport{margin-left:-240px;}.menu-item-depth-9 .menu-item-transport{margin-left:-270px;}.menu-item-depth-10 .menu-item-transport{margin-left:-300px;}.menu-item-depth-11 .menu-item-transport{margin-left:-330px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:20px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-order{padding-right:10px;}.item-controls .item-order a{font-weight:bold;}body.js .item-order{display:none;}.item-controls .menu-item-delete:hover{color:#f00;}.item-edit{background:url(&quot;../images/menu-bits.gif&quot;) no-repeat scroll 0 -105px;position:absolute;right:-20px;top:0;display:block;width:23px;height:36px;overflow:hidden;text-indent:-999em;border-bottom:1px solid #eee;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;-khtml-border-bottom-left-radius:3px;border-bottom-left-radius:3px;}.menu-item-settings{background:#F9F9F9;width:400px;padding:10px 0 10px 10px;border:solid #E6E6E6;border-width:0 1px 1px 1px;-moz-border-radius:0 0 6px 6px;-webkit-border-bottom-right-radius:6px;-webkit-border-bottom-left-radius:6px;-khtml-border-bottom-right-radius:6px;-khtml-border-bottom-left-radius:6px;}.menu-item-settings.menu-item-edit-active{display:block;}.menu-item-settings.menu-item-edit-inactive{display:none;}.add-menu-item-pagelinks{margin:.5em auto;text-align:center;}.link-to-original{display:block;margin:0 0 10px;padding:3px 5px 5px;font-size:11px;color:#777;font-style:italic;border:1px solid #dfdfdf;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;-khtml-border-radius:6px;}.link-to-original a{padding-left:4px;font-style:normal;}.hidden-field{display:none;}.menu-item-settings .description-thin,.menu-item-settings .description-wide{margin-right:10px;float:left;}.description-thin{width:190px;height:40px;}.description-wide{width:390px;}.menu-item-actions{padding-top:15px;line-height:25px;}.save-menu-item{padding-left:10px;float:right;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.major-publishing-actions{padding:5px 10px;border-bottom:1px solid #eee;}.major-publishing-actions .publishing-action{text-align:right;float:right;line-height:23px;}.major-publishing-actions .delete-action{line-height:25px;vertical-align:middle;text-align:left;float:right;padding-right:15px;}.menu-name-label span{font-size:11px;font-style:normal;}.submitbox .submitclose{color:#21759B;border-bottom:1px solid #21759B;padding:1px 2px;text-decoration:none;}.submitbox .submitclose:hover{background:#21759B;color:#fff;}.menu-item-settings:after,.button-controls:after,#menu-item-url-wrap:after,#menu-item-name-wrap:after{content:&quot;.&quot;;display:block;height:0;clear:both;visibility:hidden;}.menu-item-settings,.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block;}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkwpadmincssnavmenudevcss"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/css/nav-menu.dev.css (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/css/nav-menu.dev.css        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-admin/css/nav-menu.dev.css        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -79,6 +79,10 @@
</span><span class="cx">                 border-bottom-right-radius: 6px;
</span><span class="cx">         }
</span><span class="cx">         
</span><ins>+        #post-body-content {
+                position: relative;
+        }
+        
</ins><span class="cx">         .post-body-plain {
</span><span class="cx">                 padding: 10px 10px 0 0;
</span><span class="cx">         }
</span><span class="lines">@@ -119,7 +123,7 @@
</span><span class="cx">                 padding-right: 10px;
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        .js .label-with-default-title {
</del><ins>+        .js .input-with-default-title {
</ins><span class="cx">                 color: #aaa;
</span><span class="cx">                 font-style: italic;
</span><span class="cx">         }
</span><span class="lines">@@ -203,12 +207,13 @@
</span><span class="cx"> .menu ul.sub-menu {
</span><span class="cx"> }
</span><span class="cx"> .menu li { 
</span><del>-        margin: 0;
</del><ins>+        margin-bottom: 0;
</ins><span class="cx"> }
</span><span class="cx"> .menu li dl {
</span><span class="cx">         clear:both;
</span><span class="cx">         line-height:1.5em;
</span><span class="cx">         position:relative;
</span><ins>+        margin-top: 13px;
</ins><span class="cx"> }
</span><span class="cx"> .menu li dl dt {
</span><span class="cx">         background: url(&quot;../images/gray-grad.png&quot;) repeat-x scroll left top #DFDFDF;
</span><span class="lines">@@ -223,12 +228,6 @@
</span><span class="cx">         font-weight:bold;
</span><span class="cx">         overflow: hidden;
</span><span class="cx"> }
</span><del>-        .menu li.deleting dl dt {
-                background-color:#f66;
-                background-image: none;
-                text-shadow: 0 0 0 #ccc;
-        }
-
</del><span class="cx"> .menu li dl.menu-item-edit-inactive dt {
</span><span class="cx">         border-radius: 6px;
</span><span class="cx">         -webkit-border-radius: 6px; 
</span><span class="lines">@@ -247,9 +246,11 @@
</span><span class="cx"> .js .menu li dl dt {
</span><span class="cx">         cursor: move;
</span><span class="cx"> }
</span><del>-.no-js .menu li dl {
-        margin-top: 13px;
</del><ins>+.menu li dl dt:hover {
</ins><span class="cx"> }
</span><ins>+.menu li.deleting dl dt {
+        background-color:#faa;
+}
</ins><span class="cx"> 
</span><span class="cx"> .menu li .item-title { 
</span><span class="cx">         padding: 7px 0;
</span><span class="lines">@@ -258,26 +259,46 @@
</span><span class="cx">         margin-right:13em;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-.menu li .sortable-placeholder {
-        width: 430px;
</del><ins>+/* Sortables */
+li.menu-item.ui-sortable-helper dl {
+        margin-top: 0;
</ins><span class="cx"> }
</span><del>-.menu li div.sortable-placeholder {
-        background: #f5f5f5;
-        border: 1px dashed #bbb;
-        margin: 10px 0;
-        padding-top:40px;
</del><ins>+        li.menu-item.ui-sortable-helper .menu-item-transport dl {
+                margin-top: 13px;
+        }
+.menu .sortable-placeholder {
+        height: 35px;
+        width: 410px;
+        margin-top: 13px;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-.menu li dl.sortable-placeholder {
-        background: #f5f5f5;
-        padding-bottom:40px;
-}
</del><ins>+/* WARNING: The factor of 30px is hardcoded into the nav-menus javascript. */
+.menu-item-depth-0 { margin-left: 0px; }
+.menu-item-depth-1 { margin-left: 30px; }
+.menu-item-depth-2 { margin-left: 60px; }
+.menu-item-depth-3 { margin-left: 90px; }
+.menu-item-depth-4 { margin-left: 120px; }
+.menu-item-depth-5 { margin-left: 150px; }
+.menu-item-depth-6 { margin-left: 180px; }
+.menu-item-depth-7 { margin-left: 210px; }
+.menu-item-depth-8 { margin-left: 240px; }
+.menu-item-depth-9 { margin-left: 270px; }
+.menu-item-depth-10 { margin-left: 300px; }
+.menu-item-depth-11 { margin-left: 330px; }
</ins><span class="cx"> 
</span><del>-.menu li li { margin-left: 20px; }
</del><ins>+.menu-item-depth-0 .menu-item-transport { margin-left: 0px; }
+.menu-item-depth-1 .menu-item-transport { margin-left: -30px; }
+.menu-item-depth-2 .menu-item-transport { margin-left: -60px; }
+.menu-item-depth-3 .menu-item-transport { margin-left: -90px; }
+.menu-item-depth-4 .menu-item-transport { margin-left: -120px; }
+.menu-item-depth-5 .menu-item-transport { margin-left: -150px; }
+.menu-item-depth-6 .menu-item-transport { margin-left: -180px; }
+.menu-item-depth-7 .menu-item-transport { margin-left: -210px; }
+.menu-item-depth-8 .menu-item-transport { margin-left: -240px; }
+.menu-item-depth-9 .menu-item-transport { margin-left: -270px; }
+.menu-item-depth-10 .menu-item-transport { margin-left: -300px; }
+.menu-item-depth-11 .menu-item-transport { margin-left: -330px; }
</ins><span class="cx"> 
</span><del>-/* Drag and Drop */
-.dropzone { height: 7px; margin: 3px 0 3px 0; }
-
</del><span class="cx"> /* Menu item controls */
</span><span class="cx"> .item-type { text-transform: uppercase; font-size: 11px; color: #999999; padding-right: 10px; }
</span><span class="cx"> .item-controls { font-size: 11px; position: absolute; right: 20px; top: -1px; }
</span></span></pre></div>
<a id="trunkwpadminincludesnavmenuphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/nav-menu.php (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/nav-menu.php        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-admin/includes/nav-menu.php        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -8,8 +8,25 @@
</span><span class="cx">  * @uses Walker_Nav_Menu
</span><span class="cx">  */
</span><span class="cx"> class Walker_Nav_Menu_Edit extends Walker_Nav_Menu  {
</span><del>-
</del><span class="cx">         /**
</span><ins>+         * @see Walker_Nav_Menu::start_lvl()
+         * @since 3.0.0
+         *
+         * @param string $output Passed by reference.
+         * @param int $depth Depth of page.
+         */
+        function start_lvl(&amp;$output, $depth) {}
+        
+        /**
+         * @see Walker_Nav_Menu::end_lvl()
+         * @since 3.0.0
+         *
+         * @param string $output Passed by reference.
+         * @param int $depth Depth of page.
+         */
+        function end_lvl(&amp;$output, $depth) {}
+        
+        /**
</ins><span class="cx">          * @see Walker::start_el()
</span><span class="cx">          * @since 3.0.0
</span><span class="cx">          *
</span><span class="lines">@@ -41,7 +58,7 @@
</span><span class="cx">                         $original_title = $original_object-&gt;post_title;
</span><span class="cx">                 }
</span><span class="cx">                 ?&gt;
</span><del>-                &lt;li id=&quot;menu-item-&lt;?php echo $item_id; ?&gt;&quot; class=&quot;menu-item-&lt;?php echo strtolower(esc_attr( $item-&gt;append )); ?&gt;&quot;&gt;
</del><ins>+                &lt;li id=&quot;menu-item-&lt;?php echo $item_id; ?&gt;&quot; class=&quot;menu-item menu-item-depth-&lt;?php echo $depth; ?&gt; menu-item-&lt;?php echo strtolower(esc_attr( $item-&gt;append )); ?&gt;&quot;&gt;
</ins><span class="cx">                         &lt;dl class=&quot;&lt;?php 
</span><span class="cx">                                 if ( isset($_GET['edit-menu-item']) &amp;&amp; $item_id == $_GET['edit-menu-item'] )
</span><span class="cx">                                         echo 'menu-item-edit-active';
</span><span class="lines">@@ -166,14 +183,15 @@
</span><span class="cx">                                         &lt;input class=&quot;button-primary save-menu-item&quot; name=&quot;save_menu_item&quot; type=&quot;submit&quot; value=&quot;&lt;?php esc_attr_e('Save Menu Item'); ?&gt;&quot; /&gt;
</span><span class="cx">                                 &lt;/span&gt;
</span><span class="cx">                                 
</span><del>-                                &lt;input type=&quot;hidden&quot; name=&quot;menu-item-append[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo $item-&gt;append; ?&gt;&quot; /&gt;
-                                &lt;input type=&quot;hidden&quot; name=&quot;menu-item-db-id[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo $item_id; ?&gt;&quot; /&gt;
-                                &lt;input type=&quot;hidden&quot; name=&quot;menu-item-object-id[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;object_id ); ?&gt;&quot; /&gt;
-                                &lt;input type=&quot;hidden&quot; name=&quot;menu-item-object[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;object ); ?&gt;&quot; /&gt;
-                                &lt;input type=&quot;hidden&quot; name=&quot;menu-item-parent-id[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;post_parent ); ?&gt;&quot; /&gt;
-                                &lt;input type=&quot;hidden&quot; class=&quot;menu-item-position&quot; name=&quot;menu-item-position[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;menu_order ); ?&gt;&quot; /&gt;
-                                &lt;input type=&quot;hidden&quot; name=&quot;menu-item-type[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;type ); ?&gt;&quot; /&gt;
-                        &lt;/div&gt;&lt;!-- .menu-item-settings--&gt;
</del><ins>+                                &lt;input class=&quot;menu-item-data-append&quot; type=&quot;hidden&quot; name=&quot;menu-item-append[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo $item-&gt;append; ?&gt;&quot; /&gt;
+                                &lt;input class=&quot;menu-item-data-db-id&quot; type=&quot;hidden&quot; name=&quot;menu-item-db-id[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo $item_id; ?&gt;&quot; /&gt;
+                                &lt;input class=&quot;menu-item-data-object-id&quot; type=&quot;hidden&quot; name=&quot;menu-item-object-id[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;object_id ); ?&gt;&quot; /&gt;
+                                &lt;input class=&quot;menu-item-data-object&quot; type=&quot;hidden&quot; name=&quot;menu-item-object[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;object ); ?&gt;&quot; /&gt;
+                                &lt;input class=&quot;menu-item-data-parent-id&quot; type=&quot;hidden&quot; name=&quot;menu-item-parent-id[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;post_parent ); ?&gt;&quot; /&gt;
+                                &lt;input class=&quot;menu-item-data-position&quot; type=&quot;hidden&quot; class=&quot;menu-item-position&quot; name=&quot;menu-item-position[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;menu_order ); ?&gt;&quot; /&gt;
+                                &lt;input class=&quot;menu-item-data-type&quot; type=&quot;hidden&quot; name=&quot;menu-item-type[&lt;?php echo $item_id; ?&gt;]&quot; value=&quot;&lt;?php echo esc_attr( $item-&gt;type ); ?&gt;&quot; /&gt;
+                        &lt;/div&gt;&lt;!-- .menu-item-settings--&gt;        
+                        &lt;ul class=&quot;menu-item-transport&quot;&gt;&lt;/ul&gt;
</ins><span class="cx">                 &lt;?php
</span><span class="cx">                 $output .= ob_get_clean();
</span><span class="cx">         }
</span><span class="lines">@@ -426,7 +444,7 @@
</span><span class="cx">                         &lt;p id=&quot;menu-item-name-wrap&quot;&gt;
</span><span class="cx">                                 &lt;label class=&quot;howto&quot; for=&quot;custom-menu-item-name&quot;&gt;
</span><span class="cx">                                         &lt;span&gt;&lt;?php _e('Text'); ?&gt;&lt;/span&gt;
</span><del>-                                        &lt;input id=&quot;custom-menu-item-name&quot; name=&quot;menu-item[&lt;?php echo $_nav_menu_placeholder; ?&gt;][menu-item-title]&quot; type=&quot;text&quot; class=&quot;regular-text menu-item-textbox label-with-default-title&quot; title=&quot;&lt;?php esc_attr_e('Menu Item'); ?&gt;&quot; /&gt;
</del><ins>+                                        &lt;input id=&quot;custom-menu-item-name&quot; name=&quot;menu-item[&lt;?php echo $_nav_menu_placeholder; ?&gt;][menu-item-title]&quot; type=&quot;text&quot; class=&quot;regular-text menu-item-textbox input-with-default-title&quot; title=&quot;&lt;?php esc_attr_e('Menu Item'); ?&gt;&quot; /&gt;
</ins><span class="cx">                                 &lt;/label&gt;
</span><span class="cx">                         &lt;/p&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkwpadminjsnavmenudevjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/nav-menu.dev.js (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/nav-menu.dev.js        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-admin/js/nav-menu.dev.js        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -8,18 +8,12 @@
</span><span class="cx">  * @subpackage Administration
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-var WPNavMenuHandler = function () {
-        var $ = jQuery,
-        activeHovering = false,
-        currentDropzone = null,
</del><ins>+var WPNavMenuHandler = function ($) {
+        var autoCompleteData = {},
</ins><span class="cx">         
</span><del>-        customLinkNameInput,
-        customLinkURLInput,
-        customLinkNameDefault,
-        customLinkURLDefault,
</del><ins>+        menuItemDepthPerLevel = 30, // Do not use directly. Use depthToPx and pxToDepth instead.
+        globalMaxDepth = 11,
</ins><span class="cx"> 
</span><del>-        autoCompleteData = {},
-
</del><span class="cx">         formatAutocompleteResponse = function( resultRow, pos, total, queryTerm ) {
</span><span class="cx">                 if ( resultRow &amp;&amp; resultRow[0] ) {
</span><span class="cx">                         var data = $.parseJSON(resultRow[0]);
</span><span class="lines">@@ -80,83 +74,85 @@
</span><span class="cx"> 
</span><span class="cx">                 return itemData;
</span><span class="cx">         },
</span><del>-
-        getParentMenuItemDBId = function() {
-                var allInputs = this.getElementsByTagName('input'),
-                i = allInputs.length,
-                j,
-                parentEl,
-                parentInputs;
-
-                while( i-- ) {
-                        if ( -1 != allInputs[i].name.indexOf('menu-item-parent-id[' + parseInt(this.id.replace('menu-item-', ''), 10) + ']') ) {
-                                /*  This LI element is not in a submenu */
-                                if ( ! this.parentNode.className || -1 == this.parentNode.className.indexOf('sub-menu') ) {
-                                        allInputs[i].value = 0;
-
-                                /* This LI is in a submenu, so need to get the parent's object ID (which is different from the parent's DB ID, the ID in its attributes) */
-                                } else if ( 'LI' == this.parentNode.parentNode.nodeName &amp;&amp; -1 != this.parentNode.parentNode.id.indexOf('menu-item-') )  {
-                                         parentEl = this.parentNode.parentNode;
-                                         parentInputs = parentEl.getElementsByTagName('input');
-                                         j = parentInputs.length;
-                                         while ( j-- ) {
-                                                if ( parentInputs[j].name &amp;&amp; -1 != parentInputs[j].name.indexOf('menu-item-object-id[' + parseInt(parentEl.id.replace('menu-item-', ''), 10) + ']') ) {
-                                                        allInputs[i].value = parseInt(parentInputs[j].value, 10);
-                                                        break;
-                                                }
-                                         }
-                                }
-                                break;
-                        }
-                }
</del><ins>+        
+        recalculateMenuItemPositions = function() {
+                menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } );
</ins><span class="cx">         },
</span><del>-
-        makeDroppable = function(el) {
-                var that = this;
-
-                $(el).droppable({
-                        accept: '.menu li',
-                        tolerance: 'pointer',
-                        drop: function(e, ui) {
-                                that.eventOnDrop(ui.draggable[0], this, ui, e);
-                        },
-
-                        over: function(e,ui) {
-                                that.eventOnDragOver(ui.draggable[0], this, ui, e);
-                        },
-
-                        out: function(e, ui) {
-                                that.eventOnDragOut(ui.draggable[0], this, ui, e);
-                        }
-                });
</del><ins>+        
+        depthToPx = function(depth) {
+                return depth * menuItemDepthPerLevel;
</ins><span class="cx">         },
</span><ins>+        
+        pxToDepth = function(px) {
+                return Math.floor(px / menuItemDepthPerLevel);
+        },
</ins><span class="cx"> 
</span><del>-        menuList,
</del><ins>+        menuList;
+        
+        // jQuery extensions
+        $.fn.extend({
+                menuItemDepth : function() {
+                        return pxToDepth( this.eq(0).css('margin-left').slice(0, -2) );
+                },
+                updateDepthClass : function(current, prev) {
+                        return this.each(function(){
+                                var t = $(this);
+                                prev = prev || t.menuItemDepth();
+                                $(this).removeClass('menu-item-depth-'+ prev )
+                                        .addClass('menu-item-depth-'+ current );
+                        });
+                },
+                shiftDepthClass : function(change) {
+                        return this.each(function(){
+                                var t = $(this),
+                                        depth = t.menuItemDepth();
+                                $(this).removeClass('menu-item-depth-'+ depth )
+                                        .addClass('menu-item-depth-'+ (depth + change) );
+                        });
+                },
+                childMenuItems : function() {
+                        var result = $();
+                        this.each(function(){
+                                var t = $(this), depth = t.menuItemDepth(), next = t.next();
+                                while( next.length &amp;&amp; next.menuItemDepth() &gt; depth ) {
+                                        result = result.add( next );
+                                        next = next.next();
+                                }
+                        });
+                        return result;
+                },
+                updateParentMenuItemDBId : function() {
+                        return this.each(function(){
+                                var item = $(this),
+                                        input = item.find('.menu-item-data-parent-id'),
+                                        depth = item.menuItemDepth(),
+                                        parent = item.prev();
</ins><span class="cx"> 
</span><del>-        setupListItemsDragAndDrop = function(list) {
-                if ( ! list )
-                        return;
</del><ins>+                                if( depth == 0 ) { // Item is on the top level, has no parent
+                                        input.val(0);
+                                } else { // Find the parent item, and retrieve its object id.
+                                        while( parent.menuItemDepth() != depth - 1 ) {
+                                                parent = parent.prev();
+                                        }
+                                        input.val( parent.find('.menu-item-data-object-id').val() );
+                                }
+                        });
+                },
+                hideAdvancedMenuItemFields : function() {
+                        return this.each(function(){
+                                var that = $(this);
+                                $('.hide-column-tog').not(':checked').each(function(){
+                                        that.find('.field-' + $(this).val() ).addClass('hidden-field');
+                                });
+                        });
+                },
+        });
</ins><span class="cx"> 
</span><del>-                var dummyListItem = document.getElementById(list.id + '-dummy-list-item'),
-                menuListItems = list.getElementsByTagName('li'),
-                i = menuListItems.length;
-
-                if ( ! dummyListItem ) {
-                        dummyListItem = document.createElement('li');
-                        dummyListItem.id = list.id + '-dummy-list-item';
-                        list.appendChild(dummyListItem);
-                        this.setupListItemDragAndDrop(dummyListItem);
-                }
-                
-                while ( i-- )
-                        this.setupListItemDragAndDrop(menuListItems[i]);
-        };
-
</del><span class="cx">         return {
</span><span class="cx">                 
</span><span class="cx">                 // Functions that run on init.
</span><span class="cx">                 init : function() {
</span><del>-                        menuList = document.getElementById('menu-to-edit');
</del><ins>+                        menuList = $('#menu-to-edit');
</ins><span class="cx">                         
</span><span class="cx">                         this.attachMenuEditListeners();
</span><span class="cx"> 
</span><span class="lines">@@ -164,8 +160,8 @@
</span><span class="cx">                         
</span><span class="cx">                         this.attachTabsPanelListeners();
</span><span class="cx">                         
</span><del>-                        // init drag and drop
-                        setupListItemsDragAndDrop.call(this, menuList); 
</del><ins>+                        if( menuList.length ) // If no menu, we're in the + tab.
+                                this.initSortables();
</ins><span class="cx"> 
</span><span class="cx">                         this.initToggles();
</span><span class="cx">                 },
</span><span class="lines">@@ -183,14 +179,106 @@
</span><span class="cx">                                 $('.field-' + field).addClass('hidden-field');
</span><span class="cx">                         }
</span><span class="cx">                         // hide fields
</span><del>-                        this.hideAdvancedMenuItemFields();
</del><ins>+                        menuList.hideAdvancedMenuItemFields();
</ins><span class="cx">                 },
</span><span class="cx">                 
</span><del>-                hideAdvancedMenuItemFields : function(container) {
-                        container = container || '.menu';
-                        $('.hide-column-tog').not(':checked').each(function(){
-                                $(container).find('.field-' + $(this).val() ).addClass('hidden-field');
</del><ins>+                initSortables : function() {
+                        var currentDepth = 0, originalDepth, minDepth, maxDepth,
+                                menuLeft = menuList.offset().left;
+                        
+                        menuList.sortable({
+                                handle: ' &gt; dl',
+                                placeholder: 'sortable-placeholder',
+                                start: function(e, ui) {
+                                        var next, height, width, parent, children, maxChildDepth,
+                                                transport = ui.item.children('.menu-item-transport');
+                                        
+                                        // Set depths
+                                        originalDepth = ui.item.menuItemDepth();
+                                        updateCurrentDepth(ui, originalDepth);
+                                        
+                                        // Attach child elements to parent
+                                        // Skip the placeholder
+                                        parent = ( ui.item.next()[0] == ui.placeholder[0] ) ? ui.item.next() : ui.item;
+                                        children = parent.childMenuItems();
+                                        transport.append( children );
+
+                                        // Now that the element is complete, we can update...
+                                        updateDepthRange(ui);
+                                        
+                                        // Update the height of the placeholder to match the moving item.
+                                        height = transport.outerHeight();
+                                        // If there are children, account for distance between top of children and parent
+                                        height += ( height &gt; 0 ) ? (ui.placeholder.css('margin-top').slice(0, -2) * 1) : 0;
+                                        height += ui.item.outerHeight();
+                                        height -= 2; // Subtract 2 for borders
+                                        ui.placeholder.height(height);
+                                        
+                                        // Update the width of the placeholder to match the moving item.
+                                        maxChildDepth = originalDepth;
+                                        children.each(function(){
+                                                var depth = $(this).menuItemDepth();
+                                                maxChildDepth = (depth &gt; maxChildDepth) ? depth : maxChildDepth;
+                                        });
+                                        width = ui.item.find('dl dt').outerWidth(); // Get original width
+                                        width += depthToPx(maxChildDepth - originalDepth); // Account for children
+                                        width -= 2; // Subtract 2 for borders
+                                        ui.placeholder.width(width);
+                                },
+                                stop: function(e, ui) {
+                                        var children, depthChange = currentDepth - originalDepth;
+                                        
+                                        // Return child elements to the list
+                                        children = ui.item.children('.menu-item-transport').children().insertAfter(ui.item);
+                                        
+                                        // Update depth classes
+                                        if( depthChange != 0 ) {
+                                                ui.item.updateDepthClass( currentDepth );
+                                                children.shiftDepthClass( depthChange );
+                                        }
+                                        // Finally, update the item/menu data.
+                                        ui.item.updateParentMenuItemDBId();
+                                        recalculateMenuItemPositions();
+                                },
+                                change: function(e, ui) {
+                                        // Make sure the placeholder is inside the menu.
+                                        // Otherwise fix it, or we're in trouble.
+                                        if( ! ui.placeholder.parent().hasClass('menu') )
+                                                ui.placeholder.appendTo(menuList);
+                                                
+                                        updateDepthRange(ui);
+                                },
+                                sort: function(e, ui) {
+                                        var depth = pxToDepth(ui.item.offset().left - menuLeft);
+                                        // Check and correct if depth is not within range.
+                                        if ( depth &lt; minDepth ) depth = minDepth;
+                                        else if ( depth &gt; maxDepth ) depth = maxDepth;
+                                        
+                                        if( depth != currentDepth )
+                                                updateCurrentDepth(ui, depth);
+                                }
</ins><span class="cx">                         });
</span><ins>+                        
+                        function updateDepthRange(ui) {
+                                var prev = ui.placeholder.prev(),
+                                        next = ui.placeholder.next(), depth;
+                                        
+                                // Make sure we don't select the moving item.
+                                if( prev[0] == ui.item[0] ) prev = prev.prev();        
+                                if( next[0] == ui.item[0] ) next = next.next();
+                                
+                                minDepth = (next.length) ? next.menuItemDepth() : 0;
+                                
+                                if( prev.length )
+                                        maxDepth = ( (depth = prev.menuItemDepth() + 1) &gt; globalMaxDepth ) ? globalMaxDepth : depth;
+                                else
+                                        maxDepth = 0;
+                        }
+                        
+                        function updateCurrentDepth(ui, depth) {
+                                ui.placeholder.updateDepthClass( depth, currentDepth );
+                                currentDepth = depth;
+                        }
</ins><span class="cx">                 },
</span><span class="cx">                 
</span><span class="cx">                 attachMenuEditListeners : function() {
</span><span class="lines">@@ -209,29 +297,42 @@
</span><span class="cx">                                 }
</span><span class="cx">                         });
</span><span class="cx">                 },
</span><del>-
-                attachMenuMetaListeners : function(formEL) {
-                        if ( ! formEL )
-                                return;
-
-                        var that = this, lwd = 'label-with-default-title';
</del><ins>+                
+                /**
+                 * An interface for managing default values for input elements
+                 * that is both JS and accessibility-friendly.
+                 *
+                 * Input elements that add the class 'input-with-default-title'
+                 * will have their values set to the provided HTML title when empty.
+                 */
+                setupInputWithDefaultTitle : function() {
+                        var name = 'input-with-default-title';
</ins><span class="cx">                         
</span><del>-                        $('.'+lwd).each(function(){
</del><ins>+                        $('.' + name).each( function(){
</ins><span class="cx">                                 var $t = $(this), title = $t.attr('title'), val = $t.val();
</span><del>-                                $t.data(lwd, title);
-                                if( '' == val ) $t.val(title);
</del><ins>+                                $t.data( name, title );
+                                
+                                if( '' == val ) $t.val( title );
</ins><span class="cx">                                 else if ( title == val ) return;
</span><del>-                                else $t.removeClass(lwd);
-                        }).focus(function(){
</del><ins>+                                else $t.removeClass( name );
+                        }).focus( function(){
</ins><span class="cx">                                 var $t = $(this);
</span><del>-                                if( $t.val() == $t.data(lwd) )
-                                        $t.val('').removeClass(lwd);
-                        }).blur(function(){
</del><ins>+                                if( $t.val() == $t.data(name) )
+                                        $t.val('').removeClass( name );
+                        }).blur( function(){
</ins><span class="cx">                                 var $t = $(this);
</span><span class="cx">                                 if( '' == $t.val() )
</span><del>-                                        $t.val( $t.data(lwd) ).addClass(lwd);
</del><ins>+                                        $t.val( $t.data(name) ).addClass( name );
</ins><span class="cx">                         });
</span><ins>+                },
</ins><span class="cx"> 
</span><ins>+                attachMenuMetaListeners : function(formEL) {
+                        if ( ! formEL )
+                                return;
+
+                        var that = this;
+                        this.setupInputWithDefaultTitle();
+                        
</ins><span class="cx">                         // auto-suggest for the quick-search boxes
</span><span class="cx">                         $('input.quick-search').each(function(i, el) {
</span><span class="cx">                                 that.setupQuickSearchEventListeners(el); 
</span><span class="lines">@@ -240,9 +341,6 @@
</span><span class="cx">                         $(formEL).bind('submit', function(e) {
</span><span class="cx">                                 return that.eventSubmitMetaForm.call(that, this, e);
</span><span class="cx">                         });
</span><del>-                        $(formEL).find('input:submit').click(function() {
-                                $(this).siblings('img.waiting').show();
-                        });
</del><span class="cx">                 },
</span><span class="cx"> 
</span><span class="cx">                 attachTabsPanelListeners : function() {
</span><span class="lines">@@ -288,19 +386,6 @@
</span><span class="cx">                         });
</span><span class="cx">                 },
</span><span class="cx"> 
</span><del>-                setupListItemDragAndDrop : function(el) {
-                        var defLists = el.getElementsByTagName('dl'),
-                        dropZone = this.makeListItemDropzone(el),
-                        i = defLists.length;
-
-                        makeDroppable.call(this, dropZone);
-                        this.makeListItemDraggable(el);
-
-                        while( i-- ) {
-                                makeDroppable.call(this, defLists[i]);
-                        }
-                },
-
</del><span class="cx">                 /**
</span><span class="cx">                  * Set up quick-search input fields' events.
</span><span class="cx">                  *
</span><span class="lines">@@ -399,78 +484,6 @@
</span><span class="cx">                 },
</span><span class="cx"> 
</span><span class="cx">                 /**
</span><del>-                 * Callback for the drag over action when dragging a list item.
-                 *
-                 * @param object draggedEl The DOM element being dragged
-                 * @param object dropEl The DOM element on top of which we're dropping.
-                 */
-                eventOnDragOver : function(draggedEl, dropEl) {
-                        activeHovering = true;
-                        currentDropzone = dropEl;
-                        dropEl.className += ' sortable-placeholder';
-                },
-
-                /**
-                 * Callback for the drag out action when dragging a list item.
-                 *
-                 * @param object draggedEl The DOM element being dragged
-                 * @param object dropEl The DOM element on top of which we're dropping.
-                 */
-                eventOnDragOut : function(draggedEl, dropEl) {
-                        activeHovering = false;
-
-                        /* delay the disappearance of the droppable area so it doesn't flicker in and out */
-                        (function(that) {
-                                setTimeout(function() {
-                                        if ( that != currentDropzone || ( ! activeHovering &amp;&amp; that.className &amp;&amp; -1 != that.className.indexOf('sortable-placeholder') ) ) {
-                                                that.className = that.className.replace(/sortable-placeholder/g, '');
-                                        }
-                                }, 800);
-                        })(dropEl);
-                },
-
-                /**
-                 * Callback for the drop action when dragging and dropping a list item.
-                 *
-                 * @param object draggedEl The DOM element being dragged (and now dropped)
-                 * @param object dropEl The DOM element on top of which we're dropping.
-                 */
-                eventOnDrop : function(draggedEl, dropEl) {
-                        var dropIntoSublist = !! ( -1 == dropEl.className.indexOf('dropzone') ),
-                        subLists = dropEl.parentNode.getElementsByTagName('ul'),
-                        hasSublist = false,
-                        i = subLists.length,
-                        subList;
-
-                        activeHovering = false;
-                        
-                        dropEl.className = dropEl.className.replace(/sortable-placeholder/g, '');
-
-                        if ( dropIntoSublist ) {
-                                while ( i-- ) {
-                                        if ( subLists[i] &amp;&amp; 1 != subLists[i].className.indexOf('sub-menu') ) {
-                                                hasSublist = true;
-                                                subList = subLists[i];
-                                        }
-                                }
-
-                                if ( ! hasSublist ) {
-                                        subList = document.createElement('ul');
-                                        subList.className = 'sub-menu';
-                                        dropEl.parentNode.appendChild(subList);
-                                }
-
-                                subList.appendChild(draggedEl);
-                        } else {
-                                dropEl.parentNode.parentNode.insertBefore(draggedEl, dropEl.parentNode);
-                        }
-
-                        this.recalculateSortOrder(menuList);
-
-                        getParentMenuItemDBId.call(draggedEl); 
-                },
-
-                /**
</del><span class="cx">                  * Callback for the meta form submit action listener.
</span><span class="cx">                  *
</span><span class="cx">                  * @param object thisForm The submitted form.
</span><span class="lines">@@ -487,6 +500,7 @@
</span><span class="cx">                         processMethod = function(){},
</span><span class="cx">                         re = new RegExp('menu-item\\[(\[^\\]\]*)');
</span><span class="cx"> 
</span><ins>+                        thisForm.className = thisForm.className + ' processing',
</ins><span class="cx">                         that = this;
</span><span class="cx">                         params['action'] = '';
</span><span class="cx"> 
</span><span class="lines">@@ -534,75 +548,21 @@
</span><span class="cx"> 
</span><span class="cx">                         $.post( ajaxurl, params, function(menuMarkup) {
</span><span class="cx">                                 processMethod.call(that, menuMarkup, params);        
</span><del>-                                $(thisForm).find('img.waiting').hide();
</del><ins>+                                thisForm.className = thisForm.className.replace(/processing/g, '');
</ins><span class="cx">                         });
</span><span class="cx"> 
</span><span class="cx">                         return false;
</span><span class="cx">                 },
</span><span class="cx"> 
</span><del>-                makeListItemDraggable : function(el) {
-                        // make menu item draggable
-                        $(el).draggable({
-                                handle: ' &gt; dl',
-                                opacity: .8,
-                                addClasses: false,
-                                helper: 'clone',
-                                zIndex: 100
-                        });
-                },
-
</del><span class="cx">                 /**
</span><del>-                 * Add the child element that acts as the dropzone for drag-n-drop.
-                 * 
-                 * @param object el The parent object to which we'll prepend the dropzone.
-                 * @return object The dropzone DOM element.
-                 */
-                makeListItemDropzone : function(el) {
-                        if ( ! el )
-                                return false;
-                        var divs = el.getElementsByTagName('div'),
-                        i = divs.length,
-                        dropZone = document.createElement('div');
-
-                        while( i-- ) {
-                                if ( divs[i].className &amp;&amp; -1 != divs[i].className.indexOf('dropzone') &amp;&amp; ( el == divs[i].parentNode ) ) 
-                                        return divs[i];
-                        }
-
-                        dropZone.className = 'dropzone';
-                        el.insertBefore(dropZone, el.firstChild);
-                        return dropZone;
-                },
-
-                /**
</del><span class="cx">                  * Process the add menu item request response into menu list item.
</span><span class="cx">                  *
</span><span class="cx">                  * @param string menuMarkup The text server response of menu item markup.
</span><span class="cx">                  * @param object req The request arguments.
</span><span class="cx">                  */
</span><span class="cx">                 processAddMenuItemResponse : function( menuMarkup, req ) {
</span><del>-                        if ( ! req )
-                                req = {};
-                        var dropZone,
-                        dummyListItem = document.getElementById(menuList.id + '-dummy-list-item'),
-                        i,
-                        listElements,
-                        wrap = document.createElement('ul');
</del><ins>+                        $(menuMarkup).hideAdvancedMenuItemFields().appendTo( menuList );
</ins><span class="cx"> 
</span><del>-                        wrap.innerHTML = menuMarkup;
-                        listElements = wrap.getElementsByTagName('li');
-                        i = listElements.length;
-                        while ( i-- ) {
-                                this.setupListItemDragAndDrop(listElements[i]);
-                                if ( dummyListItem )
-                                        menuList.insertBefore(listElements[i], dummyListItem);
-                                else
-                                        menuList.appendChild(listElements[i]);
-                        }
-
-                        this.recalculateSortOrder(menuList);
-                        this.hideAdvancedMenuItemFields(menuList);
-
</del><span class="cx">                         /* set custom link form back to defaults */
</span><span class="cx">                         $('#custom-menu-item-name').val('').blur();
</span><span class="cx">                         $('#custom-menu-item-url').val('http://');
</span><span class="lines">@@ -668,46 +628,20 @@
</span><span class="cx">                         }
</span><span class="cx">                 },
</span><span class="cx"> 
</span><del>-                recalculateSortOrder : function(parentEl) {
-                        var allInputs = parentEl.getElementsByTagName('input'),
-                        i,
-                        j = 0;
-
-                        for( i = 0; i &lt; allInputs.length; i++ ) {
-                                if ( allInputs[i].name &amp;&amp; -1 != allInputs[i].name.indexOf('menu-item-position') ) {
-                                        allInputs[i].value = ++j;
-                                }
-                        }
-                },
-
</del><span class="cx">                 removeMenuItem : function(el) {
</span><del>-                        if ( ! el ) 
-                                return false;
-
-                        var subMenus = el.getElementsByTagName('ul'),
-                        subs,
-                        i;
-
-                        if ( subMenus[0] ) {
-                                subs = subMenus[0].getElementsByTagName('li');
-                                for ( i = 0; i &lt; subs.length; i++ ) {
-                                        if ( subs[i].id &amp;&amp; -1 != subs[i].id.indexOf('menu-item-') &amp;&amp; subs[i].parentNode == subMenus[0] ) {
-                                                el.parentNode.insertBefore(subs[i], el);
-                                        }
-                                }
-                        }
-
-                        el.className += ' deleting';
-                        $(el).fadeOut( 350 , function() {
-                                this.parentNode.removeChild(this);        
-                        });
</del><ins>+                        el = $(el)
+                        var children = el.childMenuItems();
</ins><span class="cx">                         
</span><del>-                        this.recalculateSortOrder(menuList);
</del><ins>+                        el.addClass('deleting').fadeOut( 350 , function() {
+                                el.remove();
+                                children.shiftDepthClass(-1).updateParentMenuItemDBId();
+                                recalculateMenuItemPositions();
+                        });
</ins><span class="cx">                 }
</span><span class="cx">         }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-var wpNavMenu = new WPNavMenuHandler();
</del><ins>+var wpNavMenu = new WPNavMenuHandler(jQuery);
</ins><span class="cx"> 
</span><span class="cx"> jQuery(function() {
</span><span class="cx">         wpNavMenu.init();
</span></span></pre></div>
<a id="trunkwpadminjsnavmenujs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/nav-menu.js (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/nav-menu.js        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-admin/js/nav-menu.js        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -1 +1 @@
</span><del>-var WPNavMenuHandler=function(){var h=jQuery,a=false,j=null,g,d,m,i,l={},n=function(p,t,q,s){if(p&amp;&amp;p[0]){var r=h.parseJSON(p[0]);if(r.post_title){if(r.ID&amp;&amp;r.post_type){l[r.post_title]={ID:r.ID,object_type:r.post_type}}return r.post_title}}},o=function(p,t,q,s){if(p&amp;&amp;p[0]){var r=h.parseJSON(p[0]);if(r.post_title){return r.post_title}}},b=function(v,u){if(!v){return false}u=u||document;var q=[&quot;menu-item-db-id&quot;,&quot;menu-item-object-id&quot;,&quot;menu-item-object&quot;,&quot;menu-item-parent-id&quot;,&quot;menu-item-position&quot;,&quot;menu-item-type&quot;,&quot;menu-item-append&quot;,&quot;menu-item-title&quot;,&quot;menu-item-url&quot;,&quot;menu-item-description&quot;,&quot;menu-item-attr-title&quot;,&quot;menu-item-target&quot;,&quot;menu-item-classes&quot;,&quot;menu-item-xfn&quot;],p={},r=u.getElementsByTagName(&quot;input&quot;),t=r.length,s,w=document.getElementById(&quot;nav-menu-meta-object-id&quot;).value;while(t--){s=q.length;while(s--){if(r[t]&amp;&amp;r[t].name&amp;&amp;&quot;menu-item[&quot;+v+&quot;][&quot;+q[s]+&quot;]&quot;==r[t].name){p[q[s]]=r[t].value}}}return p},c=function(){var t=this.getElementsByTagName(&quot;input&quot;),q=t.length,p,s,r;while(q--){if(-1!=t[q].name.indexOf(&quot;menu-item-parent-id[&quot;+parseInt(this.id.replace(&quot;menu-item-&quot;,&quot;&quot;),10)+&quot;]&quot;)){if(!this.parentNode.className||-1==this.parentNode.className.indexOf(&quot;sub-menu&quot;)){t[q].value=0}else{if(&quot;LI&quot;==this.parentNode.parentNode.nodeName&amp;&amp;-1!=this.parentNode.parentNode.id.indexOf(&quot;menu-item-&quot;)){s=this.parentNode.parentNode;r=s.getElementsByTagName(&quot;input&quot;);p=r.length;while(p--){if(r[p].name&amp;&amp;-1!=r[p].name.indexOf(&quot;menu-item-object-id[&quot;+parseInt(s.id.replace(&quot;menu-item-&quot;,&quot;&quot;),10)+&quot;]&quot;)){t[q].value=parseInt(r[p].value,10);break}}}}break}}},e=function(p){var q=this;h(p).droppable({accept:&quot;.menu li&quot;,tolerance:&quot;pointer&quot;,drop:function(s,r){q.eventOnDrop(r.draggable[0],this,r,s)},over:function(s,r){q.eventOnDragOver(r.draggable[0],this,r,s)},out:function(s,r){q.eventOnDragOut(r.draggable[0],this,r,s)}})},k,f=function(s){if(!s){return}var q=document.getElementById(s.id+&quot;-dummy-list-item&quot;),p=s.getElementsByTagName(&quot;li&quot;),r=p.length;if(!q){q=document.createElement(&quot;li&quot;);q.id=s.id+&quot;-dummy-list-item&quot;;s.appendChild(q);this.setupListItemDragAndDrop(q)}while(r--){this.setupListItemDragAndDrop(p[r])}};return{init:function(){k=document.getElementById(&quot;menu-to-edit&quot;);this.attachMenuEditListeners();this.attachMenuMetaListeners(document.getElementById(&quot;nav-menu-meta&quot;));this.attachTabsPanelListeners();f.call(this,k);this.initToggles()},initToggles:function(){postboxes.add_postbox_toggles(&quot;nav-menus&quot;);columns.useCheckboxesForHidden();columns.checked=function(p){h(&quot;.field-&quot;+p).removeClass(&quot;hidden-field&quot;)};columns.unchecked=function(p){h(&quot;.field-&quot;+p).addClass(&quot;hidden-field&quot;)};this.hideAdvancedMenuItemFields()},hideAdvancedMenuItemFields:function(p){p=p||&quot;.menu&quot;;h(&quot;.hide-column-tog&quot;).not(&quot;:checked&quot;).each(function(){h(p).find(&quot;.field-&quot;+h(this).val()).addClass(&quot;hidden-field&quot;)})},attachMenuEditListeners:function(){var p=this;h(&quot;#update-nav-menu&quot;).bind(&quot;click&quot;,function(q){if(q.target&amp;&amp;q.target.className){if(-1!=q.target.className.indexOf(&quot;item-edit&quot;)){return p.eventOnClickEditLink(q.target)}else{if(-1!=q.target.className.indexOf(&quot;menu-delete&quot;)){return p.eventOnClickMenuDelete(q.target)}else{if(-1!=q.target.className.indexOf(&quot;item-delete&quot;)){return p.eventOnClickMenuItemDelete(q.target)}else{if(-1!=q.target.className.indexOf(&quot;item-close&quot;)){return p.eventOnClickCloseLink(q.target)}}}}}})},attachMenuMetaListeners:function(q){if(!q){return}var r=this,p=&quot;label-with-default-title&quot;;h(&quot;.&quot;+p).each(function(){var u=h(this),t=u.attr(&quot;title&quot;),s=u.val();u.data(p,t);if(&quot;&quot;==s){u.val(t)}else{if(t==s){return}else{u.removeClass(p)}}}).focus(function(){var s=h(this);if(s.val()==s.data(p)){s.val(&quot;&quot;).removeClass(p)}}).blur(function(){var s=h(this);if(&quot;&quot;==s.val()){s.val(s.data(p)).addClass(p)}});h(&quot;input.quick-search&quot;).each(function(s,t){r.setupQuickSearchEventListeners(t)});h(q).bind(&quot;submit&quot;,function(s){return r.eventSubmitMetaForm.call(r,this,s)});h(q).find(&quot;input:submit&quot;).click(function(){h(this).siblings(&quot;img.waiting&quot;).show()})},attachTabsPanelListeners:function(){h(&quot;#menu-settings-column&quot;).bind(&quot;click&quot;,function(u){if(u.target&amp;&amp;u.target.className&amp;&amp;-1!=u.target.className.indexOf(&quot;nav-tab-link&quot;)){var v,q=/#(.*)$/.exec(u.target.href),t,w=h(u.target).parents(&quot;.inside&quot;).first()[0],p=w?w.getElementsByTagName(&quot;input&quot;):[],r=p.length;while(r--){p[r].checked=false}h(&quot;.tabs-panel&quot;,w).each(function(){if(this.className){this.className=this.className.replace(&quot;tabs-panel-active&quot;,&quot;tabs-panel-inactive&quot;)}});h(&quot;.tabs&quot;,w).each(function(){this.className=this.className.replace(&quot;tabs&quot;,&quot;&quot;)});u.target.parentNode.className+=&quot; tabs&quot;;if(q&amp;&amp;q[1]){v=document.getElementById(q[1]);if(v){v.className=v.className.replace(&quot;tabs-panel-inactive&quot;,&quot;tabs-panel-active&quot;)}}return false}else{if(u.target&amp;&amp;u.target.className&amp;&amp;-1!=u.target.className.indexOf(&quot;select-all&quot;)){var s=/#(.*)$/.exec(u.target.href);if(s&amp;&amp;s[1]){h(&quot;#&quot;+s[1]+&quot; .tabs-panel-active input[type=checkbox]&quot;).attr(&quot;checked&quot;,&quot;checked&quot;);return false}}}})},setupListItemDragAndDrop:function(r){var p=r.getElementsByTagName(&quot;dl&quot;),s=this.makeListItemDropzone(r),q=p.length;e.call(this,s);this.makeListItemDraggable(r);while(q--){e.call(this,p[q])}},setupQuickSearchEventListeners:function(p){var q=this;h(p).autocomplete(ajaxurl+&quot;?action=menu-quick-search&amp;type=&quot;+p.name,{delay:500,formatItem:n,formatResult:o,minchars:2,multiple:false}).bind(&quot;blur&quot;,function(t){var r=l[this.value],s=this;if(r){h.post(ajaxurl+&quot;?action=menu-quick-search&amp;type=get-post-item&amp;response-format=markup&quot;,r,function(u){q.processQuickSearchQueryResponse.call(q,u,r);l[s.value]=false})}})},eventOnClickEditLink:function(p){var r,q=/#(.*)$/.exec(p.href);if(q&amp;&amp;q[1]){r=h(&quot;#&quot;+q[1]);if(0!=r.length){if(r.hasClass(&quot;menu-item-edit-inactive&quot;)){r.slideDown(&quot;fast&quot;).siblings(&quot;dl&quot;).andSelf().removeClass(&quot;menu-item-edit-inactive&quot;).addClass(&quot;menu-item-edit-active&quot;)}else{r.slideUp(&quot;fast&quot;).siblings(&quot;dl&quot;).andSelf().removeClass(&quot;menu-item-edit-active&quot;).addClass(&quot;menu-item-edit-inactive&quot;)}return false}}},eventOnClickCloseLink:function(p){h(p).closest(&quot;.menu-item-settings&quot;).siblings(&quot;dl&quot;).find(&quot;.item-edit&quot;).click();return false},eventOnClickMenuDelete:function(p){if(confirm(navMenuL10n.warnDeleteMenu)){return true}else{return false}},eventOnClickMenuItemDelete:function(p){var s,r,q=this;if(confirm(navMenuL10n.warnDeleteMenuItem)){r=/_wpnonce=([a-zA-Z0-9]*)$/.exec(p.href);if(r&amp;&amp;r[1]){s=parseInt(p.id.replace(&quot;delete-&quot;,&quot;&quot;),10);h.post(ajaxurl,{action:&quot;delete-menu-item&quot;,&quot;menu-item&quot;:s,_wpnonce:r[1]},function(t){if(&quot;1&quot;==t){q.removeMenuItem(document.getElementById(&quot;menu-item-&quot;+s))}});return false}return true}else{return false}},eventOnDragOver:function(p,q){a=true;j=q;q.className+=&quot; sortable-placeholder&quot;},eventOnDragOut:function(p,q){a=false;(function(r){setTimeout(function(){if(r!=j||(!a&amp;&amp;r.className&amp;&amp;-1!=r.className.indexOf(&quot;sortable-placeholder&quot;))){r.className=r.className.replace(/sortable-placeholder/g,&quot;&quot;)}},800)})(q)},eventOnDrop:function(s,v){var t=!!(-1==v.className.indexOf(&quot;dropzone&quot;)),q=v.parentNode.getElementsByTagName(&quot;ul&quot;),u=false,r=q.length,p;a=false;v.className=v.className.replace(/sortable-placeholder/g,&quot;&quot;);if(t){while(r--){if(q[r]&amp;&amp;1!=q[r].className.indexOf(&quot;sub-menu&quot;)){u=true;p=q[r]}}if(!u){p=document.createElement(&quot;ul&quot;);p.className=&quot;sub-menu&quot;;v.parentNode.appendChild(p)}p.appendChild(s)}else{v.parentNode.parentNode.insertBefore(s,v.parentNode)}this.recalculateSortOrder(k);c.call(s)},eventSubmitMetaForm:function(q,w){var u=q.getElementsByTagName(&quot;input&quot;),t=u.length,s,y,p,v,r={},x=function(){},z=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;);that=this;r.action=&quot;&quot;;while(t--){if(u[t].name&amp;&amp;-1!=u[t].name.indexOf(&quot;menu-item-object-id&quot;)&amp;&amp;u[t].checked||(&quot;undefined&quot;!=typeof u[t].id&amp;&amp;&quot;custom-menu-item-url&quot;==u[t].id&amp;&amp;&quot;&quot;!=u[t].value&amp;&amp;&quot;http://&quot;!=u[t].value)){r.action=&quot;add-menu-item&quot;;x=that.processAddMenuItemResponse;v=z.exec(u[t].name);p=&quot;undefined&quot;==typeof v[1]?0:parseInt(v[1],10);y=b(p);for(s in y){r[&quot;menu-item[&quot;+p+&quot;][&quot;+s+&quot;]&quot;]=y[s]}u[t].checked=false}else{if(&quot;&quot;==r.action&amp;&amp;&quot;&quot;!=u[t].value&amp;&amp;u[t].className&amp;&amp;-1!=u[t].className.search(/quick-search\b[^-]/)){r.action=&quot;menu-quick-search&quot;;r.q=u[t].value;r[&quot;response-format&quot;]=&quot;markup&quot;;r.type=u[t].name;x=that.processQuickSearchQueryResponse}}}r.menu=q.elements.menu.value;r[&quot;menu-settings-column-nonce&quot;]=q.elements[&quot;menu-settings-column-nonce&quot;].value;h.post(ajaxurl,r,function(A){x.call(that,A,r);h(q).find(&quot;img.waiting&quot;).hide()});return false},makeListItemDraggable:function(p){h(p).draggable({handle:&quot; &gt; dl&quot;,opacity:0.8,addClasses:false,helper:&quot;clone&quot;,zIndex:100})},makeListItemDropzone:function(r){if(!r){return false}var q=r.getElementsByTagName(&quot;div&quot;),p=q.length,s=document.createElement(&quot;div&quot;);while(p--){if(q[p].className&amp;&amp;-1!=q[p].className.indexOf(&quot;dropzone&quot;)&amp;&amp;(r==q[p].parentNode)){return q[p]}}s.className=&quot;dropzone&quot;;r.insertBefore(s,r.firstChild);return s},processAddMenuItemResponse:function(p,u){if(!u){u={}}var v,q=document.getElementById(k.id+&quot;-dummy-list-item&quot;),s,r,t=document.createElement(&quot;ul&quot;);t.innerHTML=p;r=t.getElementsByTagName(&quot;li&quot;);s=r.length;while(s--){this.setupListItemDragAndDrop(r[s]);if(q){k.insertBefore(r[s],q)}else{k.appendChild(r[s])}}this.recalculateSortOrder(k);this.hideAdvancedMenuItemFields(k);h(&quot;#custom-menu-item-name&quot;).val(&quot;&quot;).blur();h(&quot;#custom-menu-item-url&quot;).val(&quot;http://&quot;)},processQuickSearchQueryResponse:function(t,y){if(!y){y={}}var q=document.createElement(&quot;ul&quot;),p=document.getElementById(&quot;nav-menu-meta&quot;),u,x,r,z,v,w=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;),s;r=w.exec(t);if(r&amp;&amp;r[1]){v=r[1];while(p.elements[&quot;menu-item[&quot;+v+&quot;][menu-item-type]&quot;]){v--}if(v!=r[1]){t=t.replace(new RegExp(&quot;menu-item\\[&quot;+r[1]+&quot;\\]&quot;,&quot;g&quot;),&quot;menu-item[&quot;+v+&quot;]&quot;)}}q.innerHTML=t;x=q.getElementsByTagName(&quot;li&quot;);if(x[0]&amp;&amp;y.object_type){s=document.getElementById(y.object_type+&quot;-search-checklist&quot;);if(s){s.appendChild(x[0])}}else{if(y.type){r=/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*)/.exec(y.type);if(r&amp;&amp;r[2]){s=document.getElementById(r[2]+&quot;-search-checklist&quot;);if(s){u=x.length;if(!u){z=document.createElement(&quot;li&quot;);z.appendChild(document.createTextNode(navMenuL10n.noResultsFound));s.appendChild(z)}while(u--){s.appendChild(x[u])}}}}}},recalculateSortOrder:function(r){var s=r.getElementsByTagName(&quot;input&quot;),q,p=0;for(q=0;q&lt;s.length;q++){if(s[q].name&amp;&amp;-1!=s[q].name.indexOf(&quot;menu-item-position&quot;)){s[q].value=++p}}},removeMenuItem:function(r){if(!r){return false}var s=r.getElementsByTagName(&quot;ul&quot;),q,p;if(s[0]){q=s[0].getElementsByTagName(&quot;li&quot;);for(p=0;p&lt;q.length;p++){if(q[p].id&amp;&amp;-1!=q[p].id.indexOf(&quot;menu-item-&quot;)&amp;&amp;q[p].parentNode==s[0]){r.parentNode.insertBefore(q[p],r)}}}r.className+=&quot; deleting&quot;;h(r).fadeOut(350,function(){this.parentNode.removeChild(this)});this.recalculateSortOrder(k)}}};var wpNavMenu=new WPNavMenuHandler();jQuery(function(){wpNavMenu.init()});
</del><span class="cx">\ No newline at end of file
</span><ins>+var WPNavMenuHandler=function(d){var h={},f=30,c=11,j=function(l,p,m,o){if(l&amp;&amp;l[0]){var n=d.parseJSON(l[0]);if(n.post_title){if(n.ID&amp;&amp;n.post_type){h[n.post_title]={ID:n.ID,object_type:n.post_type}}return n.post_title}}},k=function(l,p,m,o){if(l&amp;&amp;l[0]){var n=d.parseJSON(l[0]);if(n.post_title){return n.post_title}}},b=function(r,q){if(!r){return false}q=q||document;var m=[&quot;menu-item-db-id&quot;,&quot;menu-item-object-id&quot;,&quot;menu-item-object&quot;,&quot;menu-item-parent-id&quot;,&quot;menu-item-position&quot;,&quot;menu-item-type&quot;,&quot;menu-item-append&quot;,&quot;menu-item-title&quot;,&quot;menu-item-url&quot;,&quot;menu-item-description&quot;,&quot;menu-item-attr-title&quot;,&quot;menu-item-target&quot;,&quot;menu-item-classes&quot;,&quot;menu-item-xfn&quot;],l={},n=q.getElementsByTagName(&quot;input&quot;),p=n.length,o,s=document.getElementById(&quot;nav-menu-meta-object-id&quot;).value;while(p--){o=m.length;while(o--){if(n[p]&amp;&amp;n[p].name&amp;&amp;&quot;menu-item[&quot;+r+&quot;][&quot;+m[o]+&quot;]&quot;==n[p].name){l[m[o]]=n[p].value}}}return l},a=function(){g.find(&quot;.menu-item-data-position&quot;).val(function(l){return l+1})},e=function(l){return l*f},i=function(l){return Math.floor(l/f)},g;d.fn.extend({menuItemDepth:function(){return i(this.eq(0).css(&quot;margin-left&quot;).slice(0,-2))},updateDepthClass:function(m,l){return this.each(function(){var n=d(this);l=l||n.menuItemDepth();d(this).removeClass(&quot;menu-item-depth-&quot;+l).addClass(&quot;menu-item-depth-&quot;+m)})},shiftDepthClass:function(l){return this.each(function(){var m=d(this),n=m.menuItemDepth();d(this).removeClass(&quot;menu-item-depth-&quot;+n).addClass(&quot;menu-item-depth-&quot;+(n+l))})},childMenuItems:function(){var l=d();this.each(function(){var m=d(this),o=m.menuItemDepth(),n=m.next();while(n.length&amp;&amp;n.menuItemDepth()&gt;o){l=l.add(n);n=n.next()}});return l},updateParentMenuItemDBId:function(){return this.each(function(){var n=d(this),l=n.find(&quot;.menu-item-data-parent-id&quot;),o=n.menuItemDepth(),m=n.prev();if(o==0){l.val(0)}else{while(m.menuItemDepth()!=o-1){m=m.prev()}l.val(m.find(&quot;.menu-item-data-object-id&quot;).val())}})},hideAdvancedMenuItemFields:function(){return this.each(function(){var l=d(this);d(&quot;.hide-column-tog&quot;).not(&quot;:checked&quot;).each(function(){l.find(&quot;.field-&quot;+d(this).val()).addClass(&quot;hidden-field&quot;)})})},});return{init:function(){g=d(&quot;#menu-to-edit&quot;);this.attachMenuEditListeners();this.attachMenuMetaListeners(document.getElementById(&quot;nav-menu-meta&quot;));this.attachTabsPanelListeners();if(g.length){this.initSortables()}this.initToggles()},initToggles:function(){postboxes.add_postbox_toggles(&quot;nav-menus&quot;);columns.useCheckboxesForHidden();columns.checked=function(l){d(&quot;.field-&quot;+l).removeClass(&quot;hidden-field&quot;)};columns.unchecked=function(l){d(&quot;.field-&quot;+l).addClass(&quot;hidden-field&quot;)};g.hideAdvancedMenuItemFields()},initSortables:function(){var o=0,m,p,r,n=g.offset().left;g.sortable({handle:&quot; &gt; dl&quot;,placeholder:&quot;sortable-placeholder&quot;,start:function(w,x){var v,z,s,y,t,A,u=x.item.children(&quot;.menu-item-transport&quot;);m=x.item.menuItemDepth();l(x,m);y=(x.item.next()[0]==x.placeholder[0])?x.item.next():x.item;t=y.childMenuItems();u.append(t);q(x);z=u.outerHeight();z+=(z&gt;0)?(x.placeholder.css(&quot;margin-top&quot;).slice(0,-2)*1):0;z+=x.item.outerHeight();z-=2;x.placeholder.height(z);A=m;t.each(function(){var B=d(this).menuItemDepth();A=(B&gt;A)?B:A});s=x.item.find(&quot;dl dt&quot;).outerWidth();s+=e(A-m);s-=2;x.placeholder.width(s)},stop:function(v,u){var t,s=o-m;t=u.item.children(&quot;.menu-item-transport&quot;).children().insertAfter(u.item);if(s!=0){u.item.updateDepthClass(o);t.shiftDepthClass(s)}u.item.updateParentMenuItemDBId();a()},change:function(t,s){if(!s.placeholder.parent().hasClass(&quot;menu&quot;)){s.placeholder.appendTo(g)}q(s)},sort:function(t,s){var u=i(s.item.offset().left-n);if(u&lt;p){u=p}else{if(u&gt;r){u=r}}if(u!=o){l(s,u)}}});function q(u){var t=u.placeholder.prev(),s=u.placeholder.next(),v;if(t[0]==u.item[0]){t=t.prev()}if(s[0]==u.item[0]){s=s.next()}p=(s.length)?s.menuItemDepth():0;if(t.length){r=((v=t.menuItemDepth()+1)&gt;c)?c:v}else{r=0}}function l(s,t){s.placeholder.updateDepthClass(t,o);o=t}},attachMenuEditListeners:function(){var l=this;d(&quot;#update-nav-menu&quot;).bind(&quot;click&quot;,function(m){if(m.target&amp;&amp;m.target.className){if(-1!=m.target.className.indexOf(&quot;item-edit&quot;)){return l.eventOnClickEditLink(m.target)}else{if(-1!=m.target.className.indexOf(&quot;menu-delete&quot;)){return l.eventOnClickMenuDelete(m.target)}else{if(-1!=m.target.className.indexOf(&quot;item-delete&quot;)){return l.eventOnClickMenuItemDelete(m.target)}else{if(-1!=m.target.className.indexOf(&quot;item-close&quot;)){return l.eventOnClickCloseLink(m.target)}}}}}})},setupInputWithDefaultTitle:function(){var l=&quot;input-with-default-title&quot;;d(&quot;.&quot;+l).each(function(){var o=d(this),n=o.attr(&quot;title&quot;),m=o.val();o.data(l,n);if(&quot;&quot;==m){o.val(n)}else{if(n==m){return}else{o.removeClass(l)}}}).focus(function(){var m=d(this);if(m.val()==m.data(l)){m.val(&quot;&quot;).removeClass(l)}}).blur(function(){var m=d(this);if(&quot;&quot;==m.val()){m.val(m.data(l)).addClass(l)}})},attachMenuMetaListeners:function(l){if(!l){return}var m=this;this.setupInputWithDefaultTitle();d(&quot;input.quick-search&quot;).each(function(n,o){m.setupQuickSearchEventListeners(o)});d(l).bind(&quot;submit&quot;,function(n){return m.eventSubmitMetaForm.call(m,this,n)})},attachTabsPanelListeners:function(){d(&quot;#menu-settings-column&quot;).bind(&quot;click&quot;,function(q){if(q.target&amp;&amp;q.target.className&amp;&amp;-1!=q.target.className.indexOf(&quot;nav-tab-link&quot;)){var r,m=/#(.*)$/.exec(q.target.href),p,s=d(q.target).parents(&quot;.inside&quot;).first()[0],l=s?s.getElementsByTagName(&quot;input&quot;):[],n=l.length;while(n--){l[n].checked=false}d(&quot;.tabs-panel&quot;,s).each(function(){if(this.className){this.className=this.className.replace(&quot;tabs-panel-active&quot;,&quot;tabs-panel-inactive&quot;)}});d(&quot;.tabs&quot;,s).each(function(){this.className=this.className.replace(&quot;tabs&quot;,&quot;&quot;)});q.target.parentNode.className+=&quot; tabs&quot;;if(m&amp;&amp;m[1]){r=document.getElementById(m[1]);if(r){r.className=r.className.replace(&quot;tabs-panel-inactive&quot;,&quot;tabs-panel-active&quot;)}}return false}else{if(q.target&amp;&amp;q.target.className&amp;&amp;-1!=q.target.className.indexOf(&quot;select-all&quot;)){var o=/#(.*)$/.exec(q.target.href);if(o&amp;&amp;o[1]){d(&quot;#&quot;+o[1]+&quot; .tabs-panel-active input[type=checkbox]&quot;).attr(&quot;checked&quot;,&quot;checked&quot;);return false}}}})},setupQuickSearchEventListeners:function(l){var m=this;d(l).autocomplete(ajaxurl+&quot;?action=menu-quick-search&amp;type=&quot;+l.name,{delay:500,formatItem:j,formatResult:k,minchars:2,multiple:false}).bind(&quot;blur&quot;,function(p){var n=h[this.value],o=this;if(n){d.post(ajaxurl+&quot;?action=menu-quick-search&amp;type=get-post-item&amp;response-format=markup&quot;,n,function(q){m.processQuickSearchQueryResponse.call(m,q,n);h[o.value]=false})}})},eventOnClickEditLink:function(l){var n,m=/#(.*)$/.exec(l.href);if(m&amp;&amp;m[1]){n=d(&quot;#&quot;+m[1]);if(0!=n.length){if(n.hasClass(&quot;menu-item-edit-inactive&quot;)){n.slideDown(&quot;fast&quot;).siblings(&quot;dl&quot;).andSelf().removeClass(&quot;menu-item-edit-inactive&quot;).addClass(&quot;menu-item-edit-active&quot;)}else{n.slideUp(&quot;fast&quot;).siblings(&quot;dl&quot;).andSelf().removeClass(&quot;menu-item-edit-active&quot;).addClass(&quot;menu-item-edit-inactive&quot;)}return false}}},eventOnClickCloseLink:function(l){d(l).closest(&quot;.menu-item-settings&quot;).siblings(&quot;dl&quot;).find(&quot;.item-edit&quot;).click();return false},eventOnClickMenuDelete:function(l){if(confirm(navMenuL10n.warnDeleteMenu)){return true}else{return false}},eventOnClickMenuItemDelete:function(l){var o,n,m=this;if(confirm(navMenuL10n.warnDeleteMenuItem)){n=/_wpnonce=([a-zA-Z0-9]*)$/.exec(l.href);if(n&amp;&amp;n[1]){o=parseInt(l.id.replace(&quot;delete-&quot;,&quot;&quot;),10);d.post(ajaxurl,{action:&quot;delete-menu-item&quot;,&quot;menu-item&quot;:o,_wpnonce:n[1]},function(p){if(&quot;1&quot;==p){m.removeMenuItem(document.getElementById(&quot;menu-item-&quot;+o))}});return false}return true}else{return false}},eventSubmitMetaForm:function(m,s){var q=m.getElementsByTagName(&quot;input&quot;),p=q.length,o,u,l,r,n={},t=function(){},v=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;);m.className=m.className+&quot; processing&quot;,that=this;n.action=&quot;&quot;;while(p--){if(q[p].name&amp;&amp;-1!=q[p].name.indexOf(&quot;menu-item-object-id&quot;)&amp;&amp;q[p].checked||(&quot;undefined&quot;!=typeof q[p].id&amp;&amp;&quot;custom-menu-item-url&quot;==q[p].id&amp;&amp;&quot;&quot;!=q[p].value&amp;&amp;&quot;http://&quot;!=q[p].value)){n.action=&quot;add-menu-item&quot;;t=that.processAddMenuItemResponse;r=v.exec(q[p].name);l=&quot;undefined&quot;==typeof r[1]?0:parseInt(r[1],10);u=b(l);for(o in u){n[&quot;menu-item[&quot;+l+&quot;][&quot;+o+&quot;]&quot;]=u[o]}q[p].checked=false}else{if(&quot;&quot;==n.action&amp;&amp;&quot;&quot;!=q[p].value&amp;&amp;q[p].className&amp;&amp;-1!=q[p].className.search(/quick-search\b[^-]/)){n.action=&quot;menu-quick-search&quot;;n.q=q[p].value;n[&quot;response-format&quot;]=&quot;markup&quot;;n.type=q[p].name;t=that.processQuickSearchQueryResponse}}}n.menu=m.elements.menu.value;n[&quot;menu-settings-column-nonce&quot;]=m.elements[&quot;menu-settings-column-nonce&quot;].value;d.post(ajaxurl,n,function(w){t.call(that,w,n);m.className=m.className.replace(/processing/g,&quot;&quot;)});return false},processAddMenuItemResponse:function(l,m){d(l).hideAdvancedMenuItemFields().appendTo(g);d(&quot;#custom-menu-item-name&quot;).val(&quot;&quot;).blur();d(&quot;#custom-menu-item-url&quot;).val(&quot;http://&quot;)},processQuickSearchQueryResponse:function(p,u){if(!u){u={}}var m=document.createElement(&quot;ul&quot;),l=document.getElementById(&quot;nav-menu-meta&quot;),q,t,n,v,r,s=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;),o;n=s.exec(p);if(n&amp;&amp;n[1]){r=n[1];while(l.elements[&quot;menu-item[&quot;+r+&quot;][menu-item-type]&quot;]){r--}if(r!=n[1]){p=p.replace(new RegExp(&quot;menu-item\\[&quot;+n[1]+&quot;\\]&quot;,&quot;g&quot;),&quot;menu-item[&quot;+r+&quot;]&quot;)}}m.innerHTML=p;t=m.getElementsByTagName(&quot;li&quot;);if(t[0]&amp;&amp;u.object_type){o=document.getElementById(u.object_type+&quot;-search-checklist&quot;);if(o){o.appendChild(t[0])}}else{if(u.type){n=/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*)/.exec(u.type);if(n&amp;&amp;n[2]){o=document.getElementById(n[2]+&quot;-search-checklist&quot;);if(o){q=t.length;if(!q){v=document.createElement(&quot;li&quot;);v.appendChild(document.createTextNode(navMenuL10n.noResultsFound));o.appendChild(v)}while(q--){o.appendChild(t[q])}}}}}},removeMenuItem:function(m){m=d(m);var l=m.childMenuItems();m.addClass(&quot;deleting&quot;).fadeOut(350,function(){m.remove();l.shiftDepthClass(-1).updateParentMenuItemDBId();a()})}}};var wpNavMenu=new WPNavMenuHandler(jQuery);jQuery(function(){wpNavMenu.init()});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkwpadminnavmenusphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/nav-menus.php (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/nav-menus.php        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-admin/nav-menus.php        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -384,7 +384,7 @@
</span><span class="cx">                                                         &lt;div class=&quot;major-publishing-actions&quot;&gt;
</span><span class="cx">                                                                 &lt;label class=&quot;menu-name-label howto open-label&quot; for=&quot;menu-name&quot;&gt;
</span><span class="cx">                                                                         &lt;span&gt;&lt;?php _e('Menu Name'); ?&gt;&lt;/span&gt;
</span><del>-                                                                        &lt;input name=&quot;menu-name&quot; type=&quot;text&quot; class=&quot;menu-name regular-text menu-item-textbox label-with-default-title&quot; title=&quot;Enter menu name here.&quot; value=&quot;&lt;?php echo esc_attr( $nav_menu_selected_title  ); ?&gt;&quot; /&gt;
</del><ins>+                                                                        &lt;input name=&quot;menu-name&quot; type=&quot;text&quot; class=&quot;menu-name regular-text menu-item-textbox input-with-default-title&quot; title=&quot;Enter menu name here.&quot; value=&quot;&lt;?php echo esc_attr( $nav_menu_selected_title  ); ?&gt;&quot; /&gt;
</ins><span class="cx">                                                                         &lt;br class=&quot;clear&quot; /&gt;
</span><span class="cx">                                                                 &lt;/label&gt;
</span><span class="cx">                                                         
</span></span></pre></div>
<a id="trunkwpincludesscriptloaderphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/script-loader.php (14336 => 14337)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/script-loader.php        2010-05-02 18:41:10 UTC (rev 14336)
+++ trunk/wp-includes/script-loader.php        2010-05-02 19:09:10 UTC (rev 14337)
</span><span class="lines">@@ -393,7 +393,7 @@
</span><span class="cx">                 ) );
</span><span class="cx"> 
</span><span class="cx">                 // Custom Navigation
</span><del>-                $scripts-&gt;add( 'nav-menu', &quot;/wp-admin/js/nav-menu$suffix.js&quot;, false, '20100502' );
</del><ins>+                $scripts-&gt;add( 'nav-menu', &quot;/wp-admin/js/nav-menu$suffix.js&quot;, false, '20100502a' );
</ins><span class="cx">                 $scripts-&gt;localize( 'nav-menu', 'navMenuL10n', array(
</span><span class="cx">                         'custom' =&gt; _x('Custom', 'menu nav item type'),
</span><span class="cx">                         'thickbox' =&gt; _x('Edit Menu Item', 'Thickbox Title'),
</span><span class="lines">@@ -474,7 +474,7 @@
</span><span class="cx">         $styles-&gt;add( 'farbtastic', '/wp-admin/css/farbtastic.css', array(), '1.2' );
</span><span class="cx">         $styles-&gt;add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.css', array(), '0.9.8' );
</span><span class="cx">         $styles-&gt;add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.1' );
</span><del>-        $styles-&gt;add( 'nav-menu', &quot;/wp-admin/css/nav-menu$suffix.css&quot;, array(), '20100429a' );
</del><ins>+        $styles-&gt;add( 'nav-menu', &quot;/wp-admin/css/nav-menu$suffix.css&quot;, array(), '20100501a' );
</ins><span class="cx"> 
</span><span class="cx">         foreach ( $rtl_styles as $rtl_style ) {
</span><span class="cx">                 $styles-&gt;add_data( $rtl_style, 'rtl', true );
</span></span></pre>
</div>
</div>

</body>
</html>