<!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>[14283] trunk: More nav menu fixes.</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/14283">14283</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2010-04-28 18:30:32 +0000 (Wed, 28 Apr 2010)</dd>
</dl>

<h3>Log Message</h3>
<pre>More nav menu fixes. props filosofo. see <a href="http://trac.wordpress.org/ticket/13148">#13148</a>. fixes <a href="http://trac.wordpress.org/ticket/13155">#13155</a>, fixes <a href="http://trac.wordpress.org/ticket/13157">#13157</a>, fixes <a href="http://trac.wordpress.org/ticket/13138">#13138</a>, see <a href="http://trac.wordpress.org/ticket/13134">#13134</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<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="#trunkwpincludesdefaultfiltersphp">trunk/wp-includes/default-filters.php</a></li>
<li><a href="#trunkwpincludesnavmenutemplatephp">trunk/wp-includes/nav-menu-template.php</a></li>
<li><a href="#trunkwpincludesnavmenuphp">trunk/wp-includes/nav-menu.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="trunkwpadminincludesnavmenuphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/includes/nav-menu.php (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/includes/nav-menu.php        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-admin/includes/nav-menu.php        2010-04-28 18:30:32 UTC (rev 14283)
</span><span class="lines">@@ -305,12 +305,15 @@
</span><span class="cx"> function wp_nav_menu_post_type_meta_boxes() {
</span><span class="cx">         $post_types = get_post_types( array( 'public' =&gt; true ), 'object' );
</span><span class="cx"> 
</span><del>-        if ( !$post_types )
</del><ins>+        if ( ! $post_types )
</ins><span class="cx">                 return;
</span><span class="cx"> 
</span><span class="cx">         foreach ( $post_types as $post_type ) {
</span><del>-                $id = $post_type-&gt;name;
-                add_meta_box( &quot;add-{$id}&quot;, $post_type-&gt;label, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'default', $post_type );
</del><ins>+                $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type );
+                if ( $post_type ) {
+                        $id = $post_type-&gt;name;
+                        add_meta_box( &quot;add-{$id}&quot;, $post_type-&gt;label, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'default', $post_type );
+                }
</ins><span class="cx">         }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -326,8 +329,11 @@
</span><span class="cx">                 return;
</span><span class="cx"> 
</span><span class="cx">         foreach ( $taxonomies as $tax ) {
</span><del>-                $id = $tax-&gt;name;
-                add_meta_box( &quot;add-{$id}&quot;, $tax-&gt;label, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax );
</del><ins>+                $tax = apply_filters( 'nav_menu_meta_box_object', $tax );
+                if ( $tax ) {
+                        $id = $tax-&gt;name;
+                        add_meta_box( &quot;add-{$id}&quot;, $tax-&gt;label, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax );
+                }
</ins><span class="cx">         }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -337,8 +343,8 @@
</span><span class="cx">  * @since 3.0.0
</span><span class="cx">  */
</span><span class="cx"> function wp_nav_menu_item_link_meta_box() {
</span><del>-        static $_placeholder;
-        $_placeholder = 0 &gt; $_placeholder ? $_placeholder - 1 : -1;
</del><ins>+        global $_nav_menu_placeholder;
+        $_nav_menu_placeholder = 0 &gt; $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1;
</ins><span class="cx"> 
</span><span class="cx">         // @note: hacky query, see #12660
</span><span class="cx">         $args = array( 'post_type' =&gt; 'nav_menu_item', 'post_status' =&gt; 'any', 'meta_key' =&gt; '_menu_item_type', 'numberposts' =&gt; -1, 'orderby' =&gt; 'title', );
</span><span class="lines">@@ -364,39 +370,27 @@
</span><span class="cx">         &lt;div class=&quot;customlinkdiv&quot;&gt;
</span><span class="cx">                 &lt;ul id=&quot;customlink-tabs&quot; class=&quot;customlink-tabs add-menu-item-tabs&quot;&gt;
</span><span class="cx">                         &lt;li &lt;?php echo ( 'create' == $current_tab ? ' class=&quot;tabs&quot;' : '' ); ?&gt;&gt;&lt;a class=&quot;menu-tab-link&quot; href=&quot;&lt;?php echo add_query_arg('customlink-tab', 'create', remove_query_arg($removed_args)); ?&gt;#tabs-panel-create-custom&quot;&gt;&lt;?php _e('Create New'); ?&gt;&lt;/a&gt;&lt;/li&gt;
</span><del>-                        &lt;li &lt;?php echo ( 'all' == $current_tab ? ' class=&quot;tabs&quot;' : '' ); ?&gt;&gt;&lt;a class=&quot;menu-tab-link&quot; href=&quot;&lt;?php echo add_query_arg('customlink-tab', 'all', remove_query_arg($removed_args)); ?&gt;#tabs-panel-all-custom&quot;&gt;&lt;?php _e('View All'); ?&gt;&lt;/a&gt;&lt;/li&gt;
</del><span class="cx">                 &lt;/ul&gt;
</span><span class="cx"> 
</span><span class="cx">                 &lt;div class=&quot;tabs-panel &lt;?php 
</span><span class="cx">                         echo ( 'create' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' );
</span><span class="cx">                 ?&gt;&quot; id=&quot;tabs-panel-create-custom&quot;&gt;
</span><del>-                        &lt;input type=&quot;hidden&quot; value=&quot;custom&quot; name=&quot;menu-item[&lt;?php echo $_placeholder; ?&gt;][menu-item-type]&quot; /&gt;
</del><ins>+                        &lt;input type=&quot;hidden&quot; value=&quot;custom&quot; name=&quot;menu-item[&lt;?php echo $_nav_menu_placeholder; ?&gt;][menu-item-type]&quot; /&gt;
</ins><span class="cx">                         &lt;p id=&quot;menu-item-url-wrap&quot;&gt;
</span><span class="cx">                                 &lt;label class=&quot;howto&quot; for=&quot;custom-menu-item-url&quot;&gt;
</span><span class="cx">                                         &lt;span&gt;&lt;?php _e('URL'); ?&gt;&lt;/span&gt;
</span><del>-                                        &lt;input id=&quot;custom-menu-item-url&quot; name=&quot;menu-item[&lt;?php echo $_placeholder; ?&gt;][menu-item-url]&quot; type=&quot;text&quot; class=&quot;code menu-item-textbox&quot; value=&quot;http://&quot; /&gt;
</del><ins>+                                        &lt;input id=&quot;custom-menu-item-url&quot; name=&quot;menu-item[&lt;?php echo $_nav_menu_placeholder; ?&gt;][menu-item-url]&quot; type=&quot;text&quot; class=&quot;code menu-item-textbox&quot; value=&quot;http://&quot; /&gt;
</ins><span class="cx">                                 &lt;/label&gt;
</span><span class="cx">                         &lt;/p&gt;
</span><span class="cx"> 
</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 $_placeholder; ?&gt;][menu-item-title]&quot; type=&quot;text&quot; class=&quot;regular-text menu-item-textbox&quot; value=&quot;&lt;?php echo esc_attr( __('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&quot; value=&quot;&lt;?php echo esc_attr( __('Menu Item') ); ?&gt;&quot; /&gt;
</ins><span class="cx">                                 &lt;/label&gt;
</span><span class="cx">                         &lt;/p&gt;
</span><span class="cx">                 &lt;/div&gt;&lt;!-- /.tabs-panel --&gt;
</span><span class="cx"> 
</span><del>-                &lt;div class=&quot;tabs-panel &lt;?php 
-                        echo ( 'all' == $current_tab ? 'tabs-panel-active' : 'tabs-panel-inactive' );
-                ?&gt;&quot; id=&quot;tabs-panel-all-custom&quot;&gt;
-                        &lt;ul id=&quot;customlinkchecklist&quot; class=&quot;list:customlink customlinkchecklist form-no-clear&quot;&gt;
-                                &lt;?php
-                                $args['walker'] = new Walker_Nav_Menu_Checklist;
-                                echo walk_nav_menu_tree( array_map('wp_setup_nav_menu_item', $links), 0, (object) $args );
-                                ?&gt;
-                        &lt;/ul&gt;
-                &lt;/div&gt;&lt;!-- /.tabs-panel --&gt;
-
</del><span class="cx">                 &lt;p class=&quot;button-controls&quot;&gt;
</span><span class="cx">                         &lt;span class=&quot;add-to-menu&quot;&gt;
</span><span class="cx">                                 &lt;input type=&quot;submit&quot; class=&quot;button-secondary&quot; value=&quot;&lt;?php esc_attr_e('Add to Menu'); ?&gt;&quot; name=&quot;add-custom-menu-item&quot; /&gt;
</span><span class="lines">@@ -433,6 +427,9 @@
</span><span class="cx">                 'suppress_filters' =&gt; true, 
</span><span class="cx">         );
</span><span class="cx"> 
</span><ins>+        if ( isset( $post_type['args']-&gt;_default_query ) )
+                $args = array_merge($args, (array) $post_type['args']-&gt;_default_query );
+
</ins><span class="cx">         // @todo transient caching of these results with proper invalidation on updating of a post of this type
</span><span class="cx">         $get_posts = new WP_Query;
</span><span class="cx">         $posts = $get_posts-&gt;query( $args );
</span><span class="lines">@@ -810,6 +807,48 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Adds custom arguments to some of the meta box object types.
+ *
+ * @since 3.0.0
+ * 
+ * @access private
+ *
+ * @param object $object The post type or taxonomy meta-object.
+ * @return object The post type of taxonomy object.
+ */
+function _wp_nav_menu_meta_box_object( $object = null ) {
+        if ( isset( $object-&gt;name ) ) {
+                // don't show media meta box
+                if ( 'attachment' == $object-&gt;name )
+                        return false;
+        
+                // pages should show most recent
+                if ( 'page' == $object-&gt;name ) {
+                        $object-&gt;_default_query = array(
+                                'orderby' =&gt; 'post_date',
+                                'order' =&gt; 'DESC',
+                                'post_status' =&gt; 'publish',
+                        );
+
+                // posts should show only published items
+                } elseif ( 'post' == $object-&gt;name ) {
+                        $object-&gt;_default_query = array(
+                                'post_status' =&gt; 'publish',
+                        );
+
+                // cats should be in reverse chronological order
+                } elseif ( 'category' == $object-&gt;name ) {
+                        $object-&gt;_default_query = array(
+                                'orderby' =&gt; 'id',
+                                'order' =&gt; 'DESC',
+                        );
+                }
+        }
+        
+        return $object;
+}
+
+/**
</ins><span class="cx">  * Returns the menu item formatted to edit.
</span><span class="cx">  *
</span><span class="cx">  * @since 3.0.0
</span><span class="lines">@@ -818,8 +857,6 @@
</span><span class="cx">  * @return string|WP_Error $output The menu formatted to edit or error object on failure.
</span><span class="cx">  */
</span><span class="cx"> function wp_get_nav_menu_to_edit( $menu_item_id = 0 ) {
</span><del>-        static $_placeholder;
-        
</del><span class="cx">         $menu = wp_get_nav_menu_object( $menu_item_id );
</span><span class="cx">         
</span><span class="cx">         // If the menu exists, get its items.
</span></span></pre></div>
<a id="trunkwpadminjsnavmenudevjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/nav-menu.dev.js (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/nav-menu.dev.js        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-admin/js/nav-menu.dev.js        2010-04-28 18:30:32 UTC (rev 14283)
</span><span class="lines">@@ -159,8 +159,16 @@
</span><span class="cx">                 if ( ! list )
</span><span class="cx">                         return;
</span><span class="cx"> 
</span><del>-                var menuListItems = list.getElementsByTagName('li'),
</del><ins>+                var dummyListItem = document.getElementById(list.id + '-dummy-list-item'),
+                menuListItems = list.getElementsByTagName('li'),
</ins><span class="cx">                 i = menuListItems.length;
</span><ins>+
+                if ( ! dummyListItem ) {
+                        dummyListItem = document.createElement('li');
+                        dummyListItem.id = list.id + '-dummy-list-item';
+                        list.appendChild(dummyListItem);
+                        this.setupListItemDragAndDrop(dummyListItem);
+                }
</ins><span class="cx">                 
</span><span class="cx">                 while ( i-- )
</span><span class="cx">                         this.setupListItemDragAndDrop(menuListItems[i]);
</span><span class="lines">@@ -234,19 +242,23 @@
</span><span class="cx">                 attachTabsPanelListeners : function() {
</span><span class="cx">                         $('#menu-settings-column').bind('click', function(e) {
</span><span class="cx">                                 if ( e.target &amp;&amp; e.target.className &amp;&amp; -1 != e.target.className.indexOf('menu-tab-link') ) {
</span><del>-                                        var i = e.target.parentNode,
-                                        activePanel,
</del><ins>+                                        var activePanel,
</ins><span class="cx">                                         panelIdMatch = /#(.*)$/.exec(e.target.href),
</span><del>-                                        tabPanels;
-                                        while ( ! i.className || -1 == i.className.indexOf('inside') ) {
-                                                i = i.parentNode;
-                                        }
-                                        $('.tabs-panel', i).each(function() {
</del><ins>+                                        tabPanels,
+                                        wrapper = getParentWrapper(e.target, 'inside'),
+                                        inputs = wrapper ? wrapper.getElementsByTagName('input') : [],
+                                        i = inputs.length;
+
+                                        // upon changing tabs, we want to uncheck all checkboxes
+                                        while( i-- ) 
+                                                inputs[i].checked = false;
+
+                                        $('.tabs-panel', wrapper).each(function() {
</ins><span class="cx">                                                 if ( this.className )
</span><span class="cx">                                                         this.className = this.className.replace('tabs-panel-active', 'tabs-panel-inactive');
</span><span class="cx">                                         });
</span><span class="cx"> 
</span><del>-                                        $('.tabs', i).each(function() {
</del><ins>+                                        $('.tabs', wrapper).each(function() {
</ins><span class="cx">                                                 this.className = this.className.replace('tabs', '');
</span><span class="cx">                                         });
</span><span class="cx"> 
</span><span class="lines">@@ -396,7 +408,7 @@
</span><span class="cx">                                         if ( that != currentDropzone || ( ! activeHovering &amp;&amp; that.className &amp;&amp; -1 != that.className.indexOf('sortable-placeholder') ) ) {
</span><span class="cx">                                                 that.className = that.className.replace(/sortable-placeholder/g, '');
</span><span class="cx">                                         }
</span><del>-                                }, 500);
</del><ins>+                                }, 800);
</ins><span class="cx">                         })(dropEl);
</span><span class="cx">                 },
</span><span class="cx"> 
</span><span class="lines">@@ -563,6 +575,7 @@
</span><span class="cx">                         if ( ! req )
</span><span class="cx">                                 req = {};
</span><span class="cx">                         var dropZone,
</span><ins>+                        dummyListItem = document.getElementById(menuList.id + '-dummy-list-item'),
</ins><span class="cx">                         i,
</span><span class="cx">                         listElements,
</span><span class="cx">                         wrap = document.createElement('ul');
</span><span class="lines">@@ -572,9 +585,14 @@
</span><span class="cx">                         i = listElements.length;
</span><span class="cx">                         while ( i-- ) {
</span><span class="cx">                                 this.setupListItemDragAndDrop(listElements[i]);
</span><del>-                                menuList.appendChild(listElements[i]);
</del><ins>+                                if ( dummyListItem )
+                                        menuList.insertBefore(listElements[i], dummyListItem);
+                                else
+                                        menuList.appendChild(listElements[i]);
</ins><span class="cx">                         }
</span><span class="cx"> 
</span><ins>+                        this.recalculateSortOrder(menuList);
+
</ins><span class="cx">                         /* set custom link form back to defaults */
</span><span class="cx">                         if ( customLinkNameInput &amp;&amp; customLinkURLInput ) { 
</span><span class="cx">                                 customLinkNameInput.value = customLinkNameDefault;
</span></span></pre></div>
<a id="trunkwpadminjsnavmenujs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/nav-menu.js (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/nav-menu.js        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-admin/js/nav-menu.js        2010-04-28 18:30:32 UTC (rev 14283)
</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(r){if(!r){return}var p=r.getElementsByTagName(&quot;li&quot;),q=p.length;while(q--){this.setupListItemDragAndDrop(p[q])}};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);postboxes.add_postbox_toggles(&quot;nav-menus&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)}}}}})},attachMenuMetaListeners:function(p){if(!p){return}var q=this;g=document.getElementById(&quot;custom-menu-item-name&quot;);d=document.getElementById(&quot;custom-menu-item-url&quot;);if(g){m=&quot;undefined&quot;!=typeof g.defaultValue?g.defaultValue:g.getAttribute(&quot;value&quot;);i=&quot;undefined&quot;!=typeof d.defaultValue?d.defaultValue:d.getAttribute(&quot;value&quot;);h(g).bind(&quot;focus&quot;,function(r){this.value=m==this.value?&quot;&quot;:this.value});h(g).bind(&quot;blur&quot;,function(r){this.value=&quot;&quot;==this.value?m:this.value})}h(&quot;input.quick-search&quot;).each(function(r,s){q.setupQuickSearchEventListeners(s)});h(p).bind(&quot;submit&quot;,function(r){return q.eventSubmitMetaForm.call(q,this,r)})},attachTabsPanelListeners:function(){h(&quot;#menu-settings-column&quot;).bind(&quot;click&quot;,function(t){if(t.target&amp;&amp;t.target.className&amp;&amp;-1!=t.target.className.indexOf(&quot;menu-tab-link&quot;)){var q=t.target.parentNode,u,p=/#(.*)$/.exec(t.target.href),s;while(!q.className||-1==q.className.indexOf(&quot;inside&quot;)){q=q.parentNode}h(&quot;.tabs-panel&quot;,q).each(function(){if(this.className){this.className=this.className.replace(&quot;tabs-panel-active&quot;,&quot;tabs-panel-inactive&quot;)}});h(&quot;.tabs&quot;,q).each(function(){this.className=this.className.replace(&quot;tabs&quot;,&quot;&quot;)});t.target.parentNode.className+=&quot; tabs&quot;;if(p&amp;&amp;p[1]){u=document.getElementById(p[1]);if(u){u.className=u.className.replace(&quot;tabs-panel-inactive&quot;,&quot;tabs-panel-active&quot;)}}return false}else{if(t.target&amp;&amp;t.target.className&amp;&amp;-1!=t.target.className.indexOf(&quot;select-all&quot;)){var r=/#(.*)$/.exec(t.target.href);if(r&amp;&amp;r[1]){h(&quot;#&quot;+r[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=document.getElementById(q[1]);if(r){if(-1!=r.className.indexOf(&quot;menu-item-edit-inactive&quot;)){r.className=r.className.replace(&quot;menu-item-edit-inactive&quot;,&quot;menu-item-edit-active&quot;)}else{r.className=r.className.replace(&quot;menu-item-edit-active&quot;,&quot;menu-item-edit-inactive&quot;)}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;)}},500)})(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;);q.className=q.className+&quot; processing&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);q.className=q.className.replace(/processing/g,&quot;&quot;)});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,t){if(!t){t={}}var u,r,q,s=document.createElement(&quot;ul&quot;);s.innerHTML=p;q=s.getElementsByTagName(&quot;li&quot;);r=q.length;while(r--){this.setupListItemDragAndDrop(q[r]);k.appendChild(q[r])}if(g&amp;&amp;d){g.value=m;d.value=i}},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,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-([a-zA-Z_-]*)/.exec(y.type);if(r&amp;&amp;r[1]){s=document.getElementById(r[1]+&quot;-search-checklist&quot;);if(s){u=x.length;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(){var i=jQuery,a=false,k=null,h,d,n,j,m={},o=function(q,u,r,t){if(q&amp;&amp;q[0]){var s=i.parseJSON(q[0]);if(s.post_title){if(s.ID&amp;&amp;s.post_type){m[s.post_title]={ID:s.ID,object_type:s.post_type}}return s.post_title}}},p=function(q,u,r,t){if(q&amp;&amp;q[0]){var s=i.parseJSON(q[0]);if(s.post_title){return s.post_title}}},b=function(w,v){if(!w){return false}v=v||document;var r=[&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;],q={},s=v.getElementsByTagName(&quot;input&quot;),u=s.length,t,x=document.getElementById(&quot;nav-menu-meta-object-id&quot;).value;while(u--){t=r.length;while(t--){if(s[u]&amp;&amp;s[u].name&amp;&amp;&quot;menu-item[&quot;+w+&quot;][&quot;+r[t]+&quot;]&quot;==s[u].name){q[r[t]]=s[u].value}}}return q},c=function(){var u=this.getElementsByTagName(&quot;input&quot;),r=u.length,q,t,s;while(r--){if(-1!=u[r].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;)){u[r].value=0}else{if(&quot;LI&quot;==this.parentNode.parentNode.nodeName&amp;&amp;-1!=this.parentNode.parentNode.id.indexOf(&quot;menu-item-&quot;)){t=this.parentNode.parentNode;s=t.getElementsByTagName(&quot;input&quot;);q=s.length;while(q--){if(s[q].name&amp;&amp;-1!=s[q].name.indexOf(&quot;menu-item-object-id[&quot;+parseInt(t.id.replace(&quot;menu-item-&quot;,&quot;&quot;),10)+&quot;]&quot;)){u[r].value=parseInt(s[q].value,10);break}}}}break}}},e=function(r,t){var s=document.getElementById(&quot;nav-menu-meta&quot;),q;while(r.parentNode&amp;&amp;(!r.className||-1==r.className.indexOf(t))&amp;&amp;r.parentNode!=s){r=r.parentNode}return r},f=function(q){var r=this;i(q).droppable({accept:&quot;.menu li&quot;,tolerance:&quot;pointer&quot;,drop:function(t,s){r.eventOnDrop(s.draggable[0],this,s,t)},over:function(t,s){r.eventOnDragOver(s.draggable[0],this,s,t)},out:function(t,s){r.eventOnDragOut(s.draggable[0],this,s,t)}})},l,g=function(t){if(!t){return}var r=document.getElementById(t.id+&quot;-dummy-list-item&quot;),q=t.getElementsByTagName(&quot;li&quot;),s=q.length;if(!r){r=document.createElement(&quot;li&quot;);r.id=t.id+&quot;-dummy-list-item&quot;;t.appendChild(r);this.setupListItemDragAndDrop(r)}while(s--){this.setupListItemDragAndDrop(q[s])}};return{init:function(){l=document.getElementById(&quot;menu-to-edit&quot;);this.attachMenuEditListeners();this.attachMenuMetaListeners(document.getElementById(&quot;nav-menu-meta&quot;));this.attachTabsPanelListeners();g.call(this,l);postboxes.add_postbox_toggles(&quot;nav-menus&quot;)},attachMenuEditListeners:function(){var q=this;i(&quot;#update-nav-menu&quot;).bind(&quot;click&quot;,function(r){if(r.target&amp;&amp;r.target.className){if(-1!=r.target.className.indexOf(&quot;item-edit&quot;)){return q.eventOnClickEditLink(r.target)}else{if(-1!=r.target.className.indexOf(&quot;menu-delete&quot;)){return q.eventOnClickMenuDelete(r.target)}else{if(-1!=r.target.className.indexOf(&quot;item-delete&quot;)){return q.eventOnClickMenuItemDelete(r.target)}}}}})},attachMenuMetaListeners:function(q){if(!q){return}var r=this;h=document.getElementById(&quot;custom-menu-item-name&quot;);d=document.getElementById(&quot;custom-menu-item-url&quot;);if(h){n=&quot;undefined&quot;!=typeof h.defaultValue?h.defaultValue:h.getAttribute(&quot;value&quot;);j=&quot;undefined&quot;!=typeof d.defaultValue?d.defaultValue:d.getAttribute(&quot;value&quot;);i(h).bind(&quot;focus&quot;,function(s){this.value=n==this.value?&quot;&quot;:this.value});i(h).bind(&quot;blur&quot;,function(s){this.value=&quot;&quot;==this.value?n:this.value})}i(&quot;input.quick-search&quot;).each(function(s,t){r.setupQuickSearchEventListeners(t)});i(q).bind(&quot;submit&quot;,function(s){return r.eventSubmitMetaForm.call(r,this,s)})},attachTabsPanelListeners:function(){i(&quot;#menu-settings-column&quot;).bind(&quot;click&quot;,function(v){if(v.target&amp;&amp;v.target.className&amp;&amp;-1!=v.target.className.indexOf(&quot;menu-tab-link&quot;)){var w,r=/#(.*)$/.exec(v.target.href),u,x=e(v.target,&quot;inside&quot;),q=x?x.getElementsByTagName(&quot;input&quot;):[],s=q.length;while(s--){q[s].checked=false}i(&quot;.tabs-panel&quot;,x).each(function(){if(this.className){this.className=this.className.replace(&quot;tabs-panel-active&quot;,&quot;tabs-panel-inactive&quot;)}});i(&quot;.tabs&quot;,x).each(function(){this.className=this.className.replace(&quot;tabs&quot;,&quot;&quot;)});v.target.parentNode.className+=&quot; tabs&quot;;if(r&amp;&amp;r[1]){w=document.getElementById(r[1]);if(w){w.className=w.className.replace(&quot;tabs-panel-inactive&quot;,&quot;tabs-panel-active&quot;)}}return false}else{if(v.target&amp;&amp;v.target.className&amp;&amp;-1!=v.target.className.indexOf(&quot;select-all&quot;)){var t=/#(.*)$/.exec(v.target.href);if(t&amp;&amp;t[1]){i(&quot;#&quot;+t[1]+&quot; .tabs-panel-active input[type=checkbox]&quot;).attr(&quot;checked&quot;,&quot;checked&quot;);return false}}}})},setupListItemDragAndDrop:function(s){var q=s.getElementsByTagName(&quot;dl&quot;),t=this.makeListItemDropzone(s),r=q.length;f.call(this,t);this.makeListItemDraggable(s);while(r--){f.call(this,q[r])}},setupQuickSearchEventListeners:function(q){var r=this;i(q).autocomplete(ajaxurl+&quot;?action=menu-quick-search&amp;type=&quot;+q.name,{delay:500,formatItem:o,formatResult:p,minchars:2,multiple:false}).bind(&quot;blur&quot;,function(u){var s=m[this.value],t=this;if(s){i.post(ajaxurl+&quot;?action=menu-quick-search&amp;type=get-post-item&amp;response-format=markup&quot;,s,function(v){r.processQuickSearchQueryResponse.call(r,v,s);m[t.value]=false})}})},eventOnClickEditLink:function(q){var s,r=/#(.*)$/.exec(q.href);if(r&amp;&amp;r[1]){s=document.getElementById(r[1]);if(s){if(-1!=s.className.indexOf(&quot;menu-item-edit-inactive&quot;)){s.className=s.className.replace(&quot;menu-item-edit-inactive&quot;,&quot;menu-item-edit-active&quot;)}else{s.className=s.className.replace(&quot;menu-item-edit-active&quot;,&quot;menu-item-edit-inactive&quot;)}return false}}},eventOnClickMenuDelete:function(q){if(confirm(navMenuL10n.warnDeleteMenu)){return true}else{return false}},eventOnClickMenuItemDelete:function(q){var t,s,r=this;if(confirm(navMenuL10n.warnDeleteMenuItem)){s=/_wpnonce=([a-zA-Z0-9]*)$/.exec(q.href);if(s&amp;&amp;s[1]){t=parseInt(q.id.replace(&quot;delete-&quot;,&quot;&quot;),10);i.post(ajaxurl,{action:&quot;delete-menu-item&quot;,&quot;menu-item&quot;:t,_wpnonce:s[1]},function(u){if(&quot;1&quot;==u){r.removeMenuItem(document.getElementById(&quot;menu-item-&quot;+t))}});return false}return true}else{return false}},eventOnDragOver:function(q,r){a=true;k=r;r.className+=&quot; sortable-placeholder&quot;},eventOnDragOut:function(q,r){a=false;(function(s){setTimeout(function(){if(s!=k||(!a&amp;&amp;s.className&amp;&amp;-1!=s.className.indexOf(&quot;sortable-placeholder&quot;))){s.className=s.className.replace(/sortable-placeholder/g,&quot;&quot;)}},800)})(r)},eventOnDrop:function(t,w){var u=!!(-1==w.className.indexOf(&quot;dropzone&quot;)),r=w.parentNode.getElementsByTagName(&quot;ul&quot;),v=false,s=r.length,q;a=false;w.className=w.className.replace(/sortable-placeholder/g,&quot;&quot;);if(u){while(s--){if(r[s]&amp;&amp;1!=r[s].className.indexOf(&quot;sub-menu&quot;)){v=true;q=r[s]}}if(!v){q=document.createElement(&quot;ul&quot;);q.className=&quot;sub-menu&quot;;w.parentNode.appendChild(q)}q.appendChild(t)}else{w.parentNode.parentNode.insertBefore(t,w.parentNode)}this.recalculateSortOrder(l);c.call(t)},eventSubmitMetaForm:function(r,y){var v,w=r.getElementsByTagName(&quot;input&quot;),u=w.length,t,A,q,x,s={},z=function(){},B=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;);that=this;s.action=&quot;&quot;;while(u--){if(w[u].name&amp;&amp;-1!=w[u].name.indexOf(&quot;menu-item-object-id&quot;)&amp;&amp;w[u].checked||(&quot;undefined&quot;!=typeof w[u].id&amp;&amp;&quot;custom-menu-item-url&quot;==w[u].id&amp;&amp;&quot;&quot;!=w[u].value&amp;&amp;&quot;http://&quot;!=w[u].value)){s.action=&quot;add-menu-item&quot;;z=that.processAddMenuItemResponse;x=B.exec(w[u].name);q=&quot;undefined&quot;==typeof x[1]?0:parseInt(x[1],10);A=b(q);for(t in A){s[&quot;menu-item[&quot;+q+&quot;][&quot;+t+&quot;]&quot;]=A[t]}v=e(w[u],&quot;inside&quot;);w[u].checked=false}else{if(&quot;&quot;==s.action&amp;&amp;&quot;&quot;!=w[u].value&amp;&amp;w[u].className&amp;&amp;-1!=w[u].className.search(/quick-search\b[^-]/)){v=e(w[u],&quot;inside&quot;);s.action=&quot;menu-quick-search&quot;;s.q=w[u].value;s[&quot;response-format&quot;]=&quot;markup&quot;;s.type=w[u].name;z=that.processQuickSearchQueryResponse}}}if(v){v.className=v.className+&quot; processing&quot;,s.menu=r.elements.menu.value}s[&quot;menu-settings-column-nonce&quot;]=r.elements[&quot;menu-settings-column-nonce&quot;].value;i.post(ajaxurl,s,function(C){z.call(that,C,s);v.className=v.className.replace(/processing/g,&quot;&quot;)});return false},makeListItemDraggable:function(q){i(q).draggable({handle:&quot; &gt; dl&quot;,opacity:0.8,addClasses:false,helper:&quot;clone&quot;,zIndex:100})},makeListItemDropzone:function(s){if(!s){return false}var r=s.getElementsByTagName(&quot;div&quot;),q=r.length,t=document.createElement(&quot;div&quot;);while(q--){if(r[q].className&amp;&amp;-1!=r[q].className.indexOf(&quot;dropzone&quot;)&amp;&amp;(s==r[q].parentNode)){return r[q]}}t.className=&quot;dropzone&quot;;s.insertBefore(t,s.firstChild);return t},processAddMenuItemResponse:function(q,v){if(!v){v={}}var w,r=document.getElementById(l.id+&quot;-dummy-list-item&quot;),t,s,u=document.createElement(&quot;ul&quot;);u.innerHTML=q;s=u.getElementsByTagName(&quot;li&quot;);t=s.length;while(t--){this.setupListItemDragAndDrop(s[t]);if(r){l.insertBefore(s[t],r)}else{l.appendChild(s[t])}}this.recalculateSortOrder(l);if(h&amp;&amp;d){h.value=n;d.value=j}},processQuickSearchQueryResponse:function(u,z){if(!z){z={}}var r=document.createElement(&quot;ul&quot;),q=document.getElementById(&quot;nav-menu-meta&quot;),v,y,s,w,x=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;),t;s=x.exec(u);if(s&amp;&amp;s[1]){w=s[1];while(q.elements[&quot;menu-item[&quot;+w+&quot;][menu-item-type]&quot;]){w--}if(w!=s[1]){u=u.replace(new RegExp(&quot;menu-item\\[&quot;+s[1]+&quot;\\]&quot;,&quot;g&quot;),&quot;menu-item[&quot;+w+&quot;]&quot;)}}r.innerHTML=u;y=r.getElementsByTagName(&quot;li&quot;);if(y[0]&amp;&amp;z.object_type){t=document.getElementById(z.object_type+&quot;-search-checklist&quot;);if(t){t.innerHTML=&quot;&quot;;t.appendChild(y[0])}}else{if(z.type){s=/quick-search-posttype-([a-zA-Z_-]*)/.exec(z.type);if(s&amp;&amp;s[1]){t=document.getElementById(s[1]+&quot;-search-checklist&quot;);if(t){t.innerHTML=&quot;&quot;;v=y.length;while(v--){t.appendChild(y[v])}}}}}},recalculateSortOrder:function(s){var t=s.getElementsByTagName(&quot;input&quot;),r,q=0;for(r=0;r&lt;t.length;r++){if(t[r].name&amp;&amp;-1!=t[r].name.indexOf(&quot;menu-item-position&quot;)){t[r].value=++q}}},removeMenuItem:function(s){if(!s){return false}var t=s.getElementsByTagName(&quot;ul&quot;),r,q;if(t[0]){r=t[0].getElementsByTagName(&quot;li&quot;);for(q=0;q&lt;r.length;q++){if(r[q].id&amp;&amp;-1!=r[q].id.indexOf(&quot;menu-item-&quot;)&amp;&amp;r[q].parentNode==t[0]){s.parentNode.insertBefore(r[q],s)}}}s.className+=&quot; deleting&quot;;i(s).fadeOut(350,function(){this.parentNode.removeChild(this)});this.recalculateSortOrder(l)}}};var wpNavMenu=new WPNavMenuHandler();jQuery(function(){wpNavMenu.init()});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkwpincludesdefaultfiltersphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/default-filters.php (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/default-filters.php        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-includes/default-filters.php        2010-04-28 18:30:32 UTC (rev 14283)
</span><span class="lines">@@ -169,6 +169,7 @@
</span><span class="cx"> add_filter( 'comments_open',        '_close_comments_for_old_post', 10, 2 );
</span><span class="cx"> add_filter( 'pings_open',           '_close_comments_for_old_post', 10, 2 );
</span><span class="cx"> add_filter( 'editable_slug',        'urldecode'                           );
</span><ins>+add_filter( 'nav_menu_meta_box_object', '_wp_nav_menu_meta_box_object'    );
</ins><span class="cx"> 
</span><span class="cx"> // Atom SSL support
</span><span class="cx"> add_filter( 'atom_service_url','atom_service_url_filter' );
</span></span></pre></div>
<a id="trunkwpincludesnavmenutemplatephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/nav-menu-template.php (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/nav-menu-template.php        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-includes/nav-menu-template.php        2010-04-28 18:30:32 UTC (rev 14283)
</span><span class="lines">@@ -132,10 +132,12 @@
</span><span class="cx">          * @param object $args
</span><span class="cx">          */
</span><span class="cx">         function start_el(&amp;$output, $item, $depth, $args) {
</span><del>-                static $_placeholder;
-                $_placeholder = 0 &gt; $_placeholder ? $_placeholder - 1 : -1;
-                $possible_object_id = isset( $item-&gt;post_type ) &amp;&amp; 'nav_menu_item' == $item-&gt;post_type ? $item-&gt;object_id : $_placeholder;
</del><ins>+                global $_nav_menu_placeholder;
+
+                $_nav_menu_placeholder = ( 0 &gt; $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1;
+                $possible_object_id = isset( $item-&gt;post_type ) &amp;&amp; 'nav_menu_item' == $item-&gt;post_type ? $item-&gt;object_id : $_nav_menu_placeholder;
</ins><span class="cx">                 $possible_db_id = ( ! empty( $item-&gt;ID ) ) &amp;&amp; ( 0 &lt; $possible_object_id ) ? (int) $item-&gt;ID : 0;
</span><ins>+                $possible_parent_id = ( ! empty( $item-&gt;ID ) ) &amp;&amp; ( 0 &lt; $possible_object_id ) ? (int) $item-&gt;post_parent : 0;
</ins><span class="cx"> 
</span><span class="cx">                 $indent = ( $depth ) ? str_repeat( &quot;\t&quot;, $depth ) : '';
</span><span class="cx"> 
</span><span class="lines">@@ -147,7 +149,7 @@
</span><span class="cx">                 // Menu item hidden fields
</span><span class="cx">                 $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-db-id&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-db-id]&quot; value=&quot;' . $possible_db_id . '&quot; /&gt;';
</span><span class="cx">                 $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-object&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-object]&quot; value=&quot;'. esc_attr( $item-&gt;object ) .'&quot; /&gt;';
</span><del>-                $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-parent-id&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-parent-id]&quot; value=&quot;'. esc_attr( $item-&gt;post_parent ) .'&quot; /&gt;';
</del><ins>+                $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-parent-id&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-parent-id]&quot; value=&quot;'. $possible_parent_id .'&quot; /&gt;';
</ins><span class="cx">                 $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-type&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-type]&quot; value=&quot;'. esc_attr( $item-&gt;type ) .'&quot; /&gt;';
</span><span class="cx">                 $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-append&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-append]&quot; value=&quot;'. esc_attr( $item-&gt;append ) .'&quot; /&gt;';
</span><span class="cx">                 $output .= '&lt;input type=&quot;hidden&quot; class=&quot;menu-item-title&quot; name=&quot;menu-item[' . $possible_object_id . '][menu-item-title]&quot; value=&quot;'. esc_attr( $item-&gt;title ) .'&quot; /&gt;';
</span></span></pre></div>
<a id="trunkwpincludesnavmenuphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/nav-menu.php (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/nav-menu.php        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-includes/nav-menu.php        2010-04-28 18:30:32 UTC (rev 14283)
</span><span class="lines">@@ -50,7 +50,12 @@
</span><span class="cx">         
</span><span class="cx">         $menu_obj = wp_get_nav_menu_object( $menu );
</span><span class="cx"> 
</span><del>-        if ( $menu_obj &amp;&amp; ! is_wp_error( $menu_obj ) &amp;&amp; ! empty( $menu_obj-&gt;term_id ) ) 
</del><ins>+        if ( 
+                $menu_obj &amp;&amp; 
+                ! is_wp_error( $menu_obj ) &amp;&amp; 
+                ! empty( $menu_obj-&gt;taxonomy ) &amp;&amp;
+                'nav_menu' == $menu_obj-&gt;taxonomy
+        ) 
</ins><span class="cx">                 return true;
</span><span class="cx">         
</span><span class="cx">         return false;
</span><span class="lines">@@ -143,7 +148,7 @@
</span><span class="cx">  *
</span><span class="cx">  * @param int $menu_id The ID of the menu
</span><span class="cx">  * @param array $menu_data The array of menu data.
</span><del>- * @return int The menu's ID.
</del><ins>+ * @return int|error object The menu's ID or WP_Error object.
</ins><span class="cx">  */
</span><span class="cx"> function wp_update_nav_menu_object( $menu_id = 0, $menu_data = array() ) {
</span><span class="cx">         $menu_id = (int) $menu_id;
</span><span class="lines">@@ -151,11 +156,13 @@
</span><span class="cx">         $_menu = wp_get_nav_menu_object( $menu_id );
</span><span class="cx"> 
</span><span class="cx">         // menu doesn't already exist
</span><del>-        if ( ! $_menu || is_wp_error( $_menu ) ) {
</del><ins>+        if ( ! $_menu || is_wp_error( $_menu ) )
</ins><span class="cx">                 $_menu = wp_create_nav_menu( $menu_data['menu-name'] );
</span><del>-        }
</del><span class="cx"> 
</span><del>-        if ( $_menu &amp;&amp; isset( $_menu-&gt;term_id ) &amp;&amp; ! is_wp_error( $_menu ) ) {
</del><ins>+        if ( is_wp_error( $_menu ) )
+                return $_menu;
+
+        if ( $_menu &amp;&amp; isset( $_menu-&gt;term_id ) ) {
</ins><span class="cx">                 $args = array( 
</span><span class="cx">                         'description' =&gt; ( isset( $menu_data['description'] ) ? $menu_data['description'] : '' ), 
</span><span class="cx">                         'name' =&gt; ( isset( $menu_data['menu-name'] ) ? $menu_data['menu-name'] : '' ), 
</span><span class="lines">@@ -167,9 +174,10 @@
</span><span class="cx"> 
</span><span class="cx">                 $update_response = wp_update_term( $menu_id, 'nav_menu', $args );
</span><span class="cx"> 
</span><del>-                if ( ! is_wp_error( $update_response ) ) {
</del><ins>+                if ( ! is_wp_error( $update_response ) )
</ins><span class="cx">                         return $menu_id;
</span><del>-                }
</del><ins>+                else
+                        return $update_response;
</ins><span class="cx">         } else {
</span><span class="cx">                 return 0;
</span><span class="cx">         }
</span><span class="lines">@@ -237,6 +245,32 @@
</span><span class="cx">                 }
</span><span class="cx">         }
</span><span class="cx">         
</span><ins>+        if ( 'custom' != $args['menu-item-type'] ) {
+                /* if non-custom menu item, then:
+                        * use original object's URL
+                        * blank default title to sync with original object's
+                */
+
+                $args['menu-item-url'] = '';
+
+                $original_title = '';
+                if ( 'taxonomy' == $args['menu-item-type'] ) {
+                        $original_title = get_term_field( 'name', $args['menu-item-object-id'], $args['menu-item-object'], 'raw' );
+                } elseif ( 'post_type' == $args['menu-item-type'] ) {
+                        $original_object = get_post( $args['menu-item-object-id'] );
+                        $original_title = $original_object-&gt;post_title;
+                }
+
+                if ( empty( $args['menu-item-title'] ) || $args['menu-item-title'] == $original_title ) {
+                        $args['menu-item-title'] = '';
+
+                        // hack to get wp to create a post object when too many properties are empty
+                        if ( empty( $args['menu-item-description'] ) ) {
+                                $args['menu-item-description'] = ' ';
+                        }
+                }
+        }
+
</ins><span class="cx">         // Populate the menu item object
</span><span class="cx">         $post = array(
</span><span class="cx">                 'menu_order' =&gt; $args['menu-item-position'],
</span><span class="lines">@@ -363,6 +397,12 @@
</span><span class="cx"> 
</span><span class="cx">                 $items = get_posts( $args );
</span><span class="cx"> 
</span><ins>+                if ( is_wp_error( $items ) || ! is_array( $items ) ) {
+                        return false;
+                }
+
+                $items = array_map( 'wp_setup_nav_menu_item', $items );
+
</ins><span class="cx">                 if ( ARRAY_A == $args['output'] ) {
</span><span class="cx">                         $GLOBALS['_menu_item_sort_prop'] = $args['output_key'];
</span><span class="cx">                         usort($items, '_sort_nav_menu_items');
</span><span class="lines">@@ -410,18 +450,25 @@
</span><span class="cx">                                 $object = get_post_type_object( $menu_item-&gt;object );
</span><span class="cx">                                 $menu_item-&gt;append = $object-&gt;singular_label;
</span><span class="cx">                                 $menu_item-&gt;url = get_permalink( $menu_item-&gt;object_id );
</span><ins>+                        
+                                $original_object = get_post( $menu_item-&gt;object_id );
+                                $original_title = $original_object-&gt;post_title;
+                                $menu_item-&gt;title = '' == $menu_item-&gt;post_title ? $original_title : $menu_item-&gt;post_title;
</ins><span class="cx"> 
</span><span class="cx">                         } elseif ( 'taxonomy' == $menu_item-&gt;type ) {
</span><span class="cx">                                 $object = get_taxonomy( $menu_item-&gt;object );
</span><span class="cx">                                 $menu_item-&gt;append = $object-&gt;singular_label;
</span><span class="cx">                                 $menu_item-&gt;url = get_term_link( (int) $menu_item-&gt;object_id, $menu_item-&gt;object );
</span><span class="cx"> 
</span><ins>+                                $original_title = get_term_field( 'name', $menu_item-&gt;object_id, $menu_item-&gt;object, 'raw' );
+                                $menu_item-&gt;title = '' == $menu_item-&gt;post_title ? $original_title : $menu_item-&gt;post_title;
+
</ins><span class="cx">                         } else {
</span><span class="cx">                                 $menu_item-&gt;append = __('Custom');
</span><ins>+                                $menu_item-&gt;title = $menu_item-&gt;post_title;
</ins><span class="cx">                                 $menu_item-&gt;url = get_post_meta( $menu_item-&gt;ID, '_menu_item_url', true );
</span><span class="cx">                         }
</span><span class="cx">                         
</span><del>-                        $menu_item-&gt;title = $menu_item-&gt;post_title;
</del><span class="cx">                         $menu_item-&gt;target = get_post_meta( $menu_item-&gt;ID, '_menu_item_target', true );
</span><span class="cx"> 
</span><span class="cx">                         $menu_item-&gt;attr_title = strip_tags( $menu_item-&gt;post_excerpt );
</span></span></pre></div>
<a id="trunkwpincludesscriptloaderphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/script-loader.php (14282 => 14283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/script-loader.php        2010-04-28 17:17:42 UTC (rev 14282)
+++ trunk/wp-includes/script-loader.php        2010-04-28 18:30:32 UTC (rev 14283)
</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, '20100426' );
</del><ins>+                $scripts-&gt;add( 'nav-menu', &quot;/wp-admin/js/nav-menu$suffix.js&quot;, false, '20100428' );
</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></pre>
</div>
</div>

</body>
</html>