<!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>[14464] trunk: Consolidate nav menu item ajax.</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.wordpress.org/changeset/14464">14464</a></dd>
<dt>Author</dt> <dd>nacin</dd>
<dt>Date</dt> <dd>2010-05-05 20:29:50 +0000 (Wed, 05 May 2010)</dd>
</dl>

<h3>Log Message</h3>
<pre>Consolidate nav menu item ajax. Other misc fixes. props koopersmith, see <a href="http://trac.wordpress.org/ticket/13204">#13204</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<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="#trunkwpincludesscriptloaderphp">trunk/wp-includes/script-loader.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadminjsnavmenudevjs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/nav-menu.dev.js (14463 => 14464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/nav-menu.dev.js        2010-05-05 18:43:54 UTC (rev 14463)
+++ trunk/wp-admin/js/nav-menu.dev.js        2010-05-05 20:29:50 UTC (rev 14464)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">                 return Math.floor(px / menuItemDepthPerLevel);
</span><span class="cx">         },
</span><span class="cx"> 
</span><del>-        menuList, targetList;
</del><ins>+        menuList, targetList, api;
</ins><span class="cx"> 
</span><span class="cx">         // jQuery extensions
</span><span class="cx">         $.fn.extend({
</span><span class="lines">@@ -166,10 +166,50 @@
</span><span class="cx">                                 else
</span><span class="cx">                                         t.selectItem();
</span><span class="cx">                         });
</span><del>-                }
</del><ins>+                },
+                /**
+                 * Adds selected menu items to the menu.
+                 *
+                 * @param jQuery metabox The metabox jQuery object.
+                 */
+                addSelectedToMenu : function(processMethod) {
+                        return this.each(function() {
+                                var t = $(this),
+                                        checked = t.find('.tabs-panel-active .categorychecklist li input:checked'),
+                                        re = new RegExp('menu-item\\[(\[^\\]\]*)');
+                        
+                                processMethod = processMethod || api.addMenuItemToBottom;
+                        
+                                // If no items are checked, bail.
+                                if ( !checked.length )
+                                        return false;
+                        
+                                // Show the ajax spinner
+                                t.find('img.waiting').show();
+
+                                // Retrieve menu item data
+                                $(checked).each(function(){
+                                        var checkbox = $(this),
+                                                item = checkbox.parent().prev();
+                                        listItemDBIDMatch = re.exec( checkbox.attr('name') );
+                                        listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10);
+                                        listItemData = getListDataFromID(listItemDBID);
+
+                                        menuItem = {};
+                                        menuItem[listItemDBID] = listItemData;
+
+                                        api.addItemToMenu(menuItem, processMethod, function(){
+                                                item.deselectItem();
+                                        });
+                                });
+
+                                // Remove the ajax spinner
+                                t.find('img.waiting').hide();
+                        });
+                },
</ins><span class="cx">         });
</span><span class="cx"> 
</span><del>-        return {
</del><ins>+        return api = {
</ins><span class="cx"> 
</span><span class="cx">                 // Functions that run on init.
</span><span class="cx">                 init : function() {
</span><span class="lines">@@ -177,9 +217,11 @@
</span><span class="cx">                         targetList = menuList;
</span><span class="cx"> 
</span><span class="cx">                         this.attachMenuEditListeners();
</span><ins>+                        
+                        this.setupInputWithDefaultTitle();
+                        this.attachAddMenuItemListeners();
+                        this.attachQuickSearchListeners();
</ins><span class="cx"> 
</span><del>-                        this.attachMenuMetaListeners(document.getElementById('nav-menu-meta'));
-
</del><span class="cx">                         this.attachTabsPanelListeners();
</span><span class="cx"> 
</span><span class="cx">                         this.attachHomeLinkListener();
</span><span class="lines">@@ -422,39 +464,40 @@
</span><span class="cx">                         }).blur( function(){
</span><span class="cx">                                 var $t = $(this);
</span><span class="cx">                                 if( '' == $t.val() )
</span><del>-                                        $t.val( $t.data(name) ).addClass( name );
</del><ins>+                                        $t.addClass( name ).val( $t.data(name) );
</ins><span class="cx">                         });
</span><span class="cx">                 },
</span><span class="cx"> 
</span><del>-                attachMenuMetaListeners : function(formEL) {
-                        if ( ! formEL )
-                                return;
-
-                        var that = this;
-                        this.setupInputWithDefaultTitle();
-
</del><ins>+                attachAddMenuItemListeners : function() {
+                        var form = $('#nav-menu-meta');
+                        
+                        form.find('.add-to-menu input').click(function(){
+                                $(this).trigger('wp-add-menu-item', [api.addMenuItemToBottom]);
+                                return false;
+                        });
+                        form.find('.customlinkdiv').bind('wp-add-menu-item', function(e, processMethod) {
+                                api.addCustomLink( processMethod );
+                        });
+                        form.find('.posttypediv, .taxonomydiv').bind('wp-add-menu-item', function(e, processMethod) {
+                                $(this).addSelectedToMenu( processMethod );
+                        });        
+                },
+                
+                attachQuickSearchListeners : function() {
+                        var that = this,
+                                form = $('#nav-menu-meta');
+                                
</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="cx">                         });
</span><del>-
-                        // If a &quot;Add to Menu&quot; button was clicked, submit that metabox ajax style.
-                        $(formEL).click(function(e) {
-                                // based on the input, call that function
-                                var divcontainer = $(e.target).parent().parent().parent();
-                        
-                                if ( $(e.target).is('input') &amp;&amp; $(e.target).hasClass('button-secondary') &amp;&amp; !$(e.target).hasClass('quick-search-submit') ) {
-                                        if ( $(divcontainer).hasClass('customlinkdiv') ) {
-                                                that.addCustomLink();
-                                        } else if ( $(divcontainer).hasClass('posttypediv') || $(divcontainer).hasClass('taxonomydiv') ) {
-                                                that.addItemsToMenu( $(divcontainer).attr('id') );
-                                        };
-                                        return false;
-                                } else if ( $(e.target).is('input') &amp;&amp; $(e.target).hasClass('quick-search-submit') ) {
-                                        that.quickSearch( $(divcontainer).attr('id') );
-                                        return false;
-                                };
</del><ins>+                        form.find('.quick-search-submit').click(function() {
+                                $(this).trigger('wp-quick-search');
+                                return false;
</ins><span class="cx">                         });
</span><ins>+                        form.find('.inside').children().bind('wp-quick-search', function() {
+                                that.quickSearch( $(this).attr('id') );
+                        });
</ins><span class="cx">                 },
</span><span class="cx">                 
</span><span class="cx">                 quickSearch : function(id) {
</span><span class="lines">@@ -482,57 +525,76 @@
</span><span class="cx">                         });
</span><span class="cx">                 },
</span><span class="cx">                 
</span><del>-                addCustomLink : function(url, label, addToTop) {
-                        var url = url || $('#custom-menu-item-url').val(),
-                        label = label || $('#custom-menu-item-name').val(),
-                        addToTop = addToTop || false,
-                        menu = $('#menu').val(),
-                        nonce = $('#menu-settings-column-nonce').val(),
-                        params = {},
-                        that = this,
-                        processMethod = function(){};
</del><ins>+                addCustomLink : function( processMethod ) {
+                        var url = $('#custom-menu-item-url').val(),
+                                label = $('#custom-menu-item-name').val();
+                                
+                        processMethod = processMethod || api.addMenuItemToBottom;
</ins><span class="cx">                         
</span><span class="cx">                         if ( '' == url || 'http://' == url )
</span><span class="cx">                                 return false;
</span><span class="cx">                         
</span><span class="cx">                         // Show the ajax spinner
</span><span class="cx">                         $('.customlinkdiv img.waiting').show();
</span><ins>+                        this.addLinkToMenu( url, label, processMethod, function() {
+                                // Remove the ajax spinner
+                                $('.customlinkdiv img.waiting').hide();
+                                // Set custom link form back to defaults
+                                $('#custom-menu-item-name').val('').blur();
+                                $('#custom-menu-item-url').val('http://');
+                        });
+                },
+                
+                addLinkToMenu : function(url, label, processMethod, callback) {
+                        processMethod = processMethod || api.addMenuItemToBottom;
+                        callback = callback || function(){};
</ins><span class="cx">                         
</span><ins>+                        api.addItemToMenu({
+                                '-1': {
+                                        'menu-item-type': 'custom',
+                                        'menu-item-url': url,
+                                        'menu-item-title': label
+                                }
+                        }, processMethod, callback);
+                },
+                
+                addItemToMenu : function(menuItem, processMethod, callback) {
+                        var menu = $('#menu').val(),
+                                nonce = $('#menu-settings-column-nonce').val();
+                                
+                        processMethod = processMethod || function(){};
+                        callback = callback || function(){};
+                        
</ins><span class="cx">                         params = {
</span><span class="cx">                                 'action': 'add-menu-item',
</span><span class="cx">                                 'menu': menu,
</span><span class="cx">                                 'menu-settings-column-nonce': nonce,
</span><del>-                                'menu-item': {
-                                        '-1': {
-                                                'menu-item-type': 'custom',
-                                                'menu-item-url': url,
-                                                'menu-item-title': label
-                                        }
-                                }
</del><ins>+                                'menu-item': menuItem,
</ins><span class="cx">                         };
</span><span class="cx">                         
</span><del>-                        processMethod = addToTop ? that.addMenuItemToTop : that.addMenuItemToBottom;
-
</del><span class="cx">                         $.post( ajaxurl, params, function(menuMarkup) {
</span><del>-                                processMethod.call(that, menuMarkup, params);
-                                
-                                // Remove the ajax spinner
-                                $('.customlinkdiv img.waiting').hide();
-
-                                // Reset the form
-                                wpNavMenu.resetCustomLinkForm();
</del><ins>+                                processMethod(menuMarkup, params);
+                                callback();
</ins><span class="cx">                         });
</span><span class="cx">                 },
</span><ins>+
+                /**
+                 * Process the add menu item request response into menu list item.
+                 *
+                 * @param string menuMarkup The text server response of menu item markup.
+                 * @param object req The request arguments.
+                 */
+                addMenuItemToBottom : function( menuMarkup, req ) {
+                        $(menuMarkup).hideAdvancedMenuItemFields().appendTo( targetList );
+                },
</ins><span class="cx">                 
</span><del>-                resetCustomLinkForm : function() {
-                        // set custom link form back to defaults
-                        $('#custom-menu-item-name').val('').blur();
-                        $('#custom-menu-item-url').val('http://');
</del><ins>+                addMenuItemToTop : function( menuMarkup, req ) {
+                        $(menuMarkup).hideAdvancedMenuItemFields().prependTo( targetList );
</ins><span class="cx">                 },
</span><span class="cx">                 
</span><span class="cx">                 attachHomeLinkListener : function() {
</span><span class="cx">                         $('.add-home-link', '.customlinkdiv').click(function(e) {
</span><del>-                                wpNavMenu.addCustomLink( navMenuL10n.homeurl, navMenuL10n.home, true);
</del><ins>+                                api.addLinkToMenu( navMenuL10n.homeurl, navMenuL10n.home, api.addMenuItemToTop, recalculateMenuItemPositions );
</ins><span class="cx">                                 return false;
</span><span class="cx">                         });
</span><span class="cx">                 },
</span><span class="lines">@@ -784,71 +846,6 @@
</span><span class="cx">                 },
</span><span class="cx"> 
</span><span class="cx">                 /**
</span><del>-                 * Adds menu items to the menu.
-                 *
-                 * @param string id The id of the metabox
-                 */
-                addItemsToMenu : function(id, addToTop) {
-                        var items = $( '.tabs-panel-active .categorychecklist li input:checked', '#' + id),
-                        menu = $('#menu').val(),
-                        nonce = $('#menu-settings-column-nonce').val(),
-                        params = {},
-                        that = this,
-                        addToTop = addToTop || false,
-                        processMethod = function(){},
-                        re = new RegExp('menu-item\\[(\[^\\]\]*)');
-                        
-                        processMethod = addToTop ? that.addMenuItemToTop : that.addMenuItemToBottom;
-                        
-                        // If no items are checked, bail.
-                        if ( !items.length )
-                                return false;
-                        
-                        // Show the ajax spinner
-                        $('#' + id + ' img.waiting').show();
-
-                        // do stuff
-                        $(items).each(function(){
-                                listItemDBIDMatch = re.exec( $(this).attr('name') );
-                                listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10);
-                                listItemData = getListDataFromID(listItemDBID);
-
-                                params = {
-                                        'action': 'add-menu-item',
-                                        'menu': menu,
-                                        'menu-settings-column-nonce': nonce,
-                                        'menu-item': {}
-                                };
-
-                                params['menu-item'][listItemDBID] = listItemData;
-
-                                $.post( ajaxurl, params, function(menuMarkup) {
-                                        processMethod.call(that, menuMarkup, params);
-                                });
-
-                                // Uncheck the item
-                                $(this).parent().prev().deselectItem();
-                        });
-
-                        // Remove the ajax spinner
-                        $('#' + id + ' img.waiting').hide();
-                },
-
-                /**
-                 * Process the add menu item request response into menu list item.
-                 *
-                 * @param string menuMarkup The text server response of menu item markup.
-                 * @param object req The request arguments.
-                 */
-                addMenuItemToBottom : function( menuMarkup, req ) {
-                        $(menuMarkup).hideAdvancedMenuItemFields().appendTo( targetList );
-                },
-                
-                addMenuItemToTop : function( menuMarkup, req ) {
-                        $(menuMarkup).hideAdvancedMenuItemFields().prependTo( targetList );
-                },
-
-                /**
</del><span class="cx">                  * Process the quick search response into a search result
</span><span class="cx">                  *
</span><span class="cx">                  * @param string resp The server response to the query.
</span></span></pre></div>
<a id="trunkwpadminjsnavmenujs"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/js/nav-menu.js (14463 => 14464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/js/nav-menu.js        2010-05-05 18:43:54 UTC (rev 14463)
+++ trunk/wp-admin/js/nav-menu.js        2010-05-05 20:29:50 UTC (rev 14464)
</span><span class="lines">@@ -1 +1 @@
</span><del>-var WPNavMenuHandler=function(d){var h={},f=30,c=11,k=function(m,q,n,p){if(m&amp;&amp;m[0]){var o=d.parseJSON(m[0]);if(o.post_title){if(o.ID&amp;&amp;o.post_type){h[o.post_title]={ID:o.ID,object_type:o.post_type}}return o.post_title}}},l=function(m,q,n,p){if(m&amp;&amp;m[0]){var o=d.parseJSON(m[0]);if(o.post_title){return o.post_title}}},b=function(s,r){if(!s){return false}r=r||document;var n=[&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;],m={},o=r.getElementsByTagName(&quot;input&quot;),q=o.length,p,t=document.getElementById(&quot;nav-menu-meta-object-id&quot;).value;while(q--){p=n.length;while(p--){if(o[q]&amp;&amp;o[q].name&amp;&amp;&quot;menu-item[&quot;+s+&quot;][&quot;+n[p]+&quot;]&quot;==o[q].name){m[n[p]]=o[q].value}}}return m},a=function(){g.find(&quot;.menu-item-data-position&quot;).val(function(m){return m+1})},e=function(m){return m*f},i=function(m){return Math.floor(m/f)},g,j;d.fn.extend({menuItemDepth:function(){return i(this.eq(0).css(&quot;margin-left&quot;).slice(0,-2))},updateDepthClass:function(n,m){return this.each(function(){var o=d(this);m=m||o.menuItemDepth();d(this).removeClass(&quot;menu-item-depth-&quot;+m).addClass(&quot;menu-item-depth-&quot;+n)})},shiftDepthClass:function(m){return this.each(function(){var n=d(this),o=n.menuItemDepth();d(this).removeClass(&quot;menu-item-depth-&quot;+o).addClass(&quot;menu-item-depth-&quot;+(o+m))})},childMenuItems:function(){var m=d();this.each(function(){var n=d(this),p=n.menuItemDepth(),o=n.next();while(o.length&amp;&amp;o.menuItemDepth()&gt;p){m=m.add(o);o=o.next()}});return m},updateParentMenuItemDBId:function(){return this.each(function(){var o=d(this),m=o.find(&quot;.menu-item-data-parent-id&quot;),p=o.menuItemDepth(),n=o.prev();if(p==0){m.val(0)}else{while(n.menuItemDepth()!=p-1){n=n.prev()}m.val(n.find(&quot;.menu-item-data-db-id&quot;).val())}})},hideAdvancedMenuItemFields:function(){return this.each(function(){var m=d(this);d(&quot;.hide-column-tog&quot;).not(&quot;:checked&quot;).each(function(){m.find(&quot;.field-&quot;+d(this).val()).addClass(&quot;hidden-field&quot;)})})},selectItem:function(){return this.each(function(){d(this).addClass(&quot;selected-menu-item&quot;).next().children(&quot;input&quot;).attr(&quot;checked&quot;,&quot;checked&quot;)})},deselectItem:function(){return this.each(function(){d(this).removeClass(&quot;selected-menu-item&quot;).next().children(&quot;input&quot;).removeAttr(&quot;checked&quot;)})},toggleItem:function(){return this.each(function(){var m=d(this);if(m.hasClass(&quot;selected-menu-item&quot;)){m.deselectItem()}else{m.selectItem()}})}});return{init:function(){g=d(&quot;#menu-to-edit&quot;);j=g;this.attachMenuEditListeners();this.attachMenuMetaListeners(document.getElementById(&quot;nav-menu-meta&quot;));this.attachTabsPanelListeners();this.attachHomeLinkListener();if(g.length){this.initSortables()}this.initToggles();this.initTabManager();this.initAddMenuItemDraggables();this.checkForEmptyMenu()},initToggles:function(){postboxes.add_postbox_toggles(&quot;nav-menus&quot;);columns.useCheckboxesForHidden();columns.checked=function(m){d(&quot;.field-&quot;+m).removeClass(&quot;hidden-field&quot;)};columns.unchecked=function(m){d(&quot;.field-&quot;+m).addClass(&quot;hidden-field&quot;)};g.hideAdvancedMenuItemFields()},initSortables:function(){var s=0,r,q,m,p=g.offset().left,t,o;g.sortable({handle:&quot;.menu-item-handle&quot;,placeholder:&quot;sortable-placeholder&quot;,start:function(C,B){var A,v,z,y,w,x;o=B.item.children(&quot;.menu-item-transport&quot;);t=(B.helper.hasClass(&quot;new-menu-item&quot;));r=(t)?0:B.item.menuItemDepth();n(B,r);if(!t){y=(B.item.next()[0]==B.placeholder[0])?B.item.next():B.item;w=y.childMenuItems();o.append(w)}u(B);v=o.outerHeight();v+=(v&gt;0)?(B.placeholder.css(&quot;margin-top&quot;).slice(0,-2)*1):0;v+=B.helper.outerHeight();v-=2;B.placeholder.height(v);x=r;if(!t){w.each(function(){var D=d(this).menuItemDepth();x=(D&gt;x)?D:x})}z=B.helper.find(&quot;.menu-item-handle&quot;).outerWidth();z+=e(x-r);z-=2;B.placeholder.width(z)},stop:function(y,x){var w,v=s-r;w=o.children().insertAfter(x.item);if(t){x.item.remove();if(v!=0){w.shiftDepthClass(v)}w.updateParentMenuItemDBId()}else{if(v!=0){x.item.updateDepthClass(s);w.shiftDepthClass(v)}x.item.updateParentMenuItemDBId()}a()},change:function(w,v){if(!v.placeholder.parent().hasClass(&quot;menu&quot;)){v.placeholder.appendTo(g)}u(v)},sort:function(w,v){var x=i(v.helper.offset().left-p);if(x&lt;q){x=q}else{if(x&gt;m){x=m}}if(x!=s){n(v,x)}},receive:function(w,v){o=v.sender.children(&quot;.menu-item-transport&quot;)}});function u(x){var w=x.placeholder.prev(),v=x.placeholder.next(),y;if(w[0]==x.item[0]){w=w.prev()}if(v[0]==x.item[0]){v=v.next()}q=(v.length)?v.menuItemDepth():0;if(w.length){m=((y=w.menuItemDepth()+1)&gt;c)?c:y}else{m=0}}function n(v,w){v.placeholder.updateDepthClass(w,s);s=w}},initAddMenuItemDraggables:function(){var m=d(&quot;.potential-menu-item&quot;);m.click(function(n){d(this).toggleItem()}).children().draggable({helper:&quot;clone&quot;,connectToSortable:&quot;ul#menu-to-edit&quot;,distance:5,zIndex:100,start:function(s,q){var r=d(s.target),p=r.parent(),n=p.parent(),o;p.selectItem();j=r.children(&quot;.menu-item-transport&quot;);o=n.parents(&quot;.tabs-panel&quot;).find(&quot;.selected-menu-item&quot;).children().not(q.helper).clone();q.helper.children(&quot;.additional-menu-items&quot;).append(o);q.helper.addClass(&quot;new-menu-item&quot;);q.helper.children(&quot;div&quot;).hide();o.first().css(&quot;margin-top&quot;,0);o.children(&quot;div&quot;).addClass(&quot;menu-item-handle&quot;);q.helper.children(&quot;div&quot;).addClass(&quot;hidden-handle&quot;);n.parents(&quot;.inside&quot;).find(&quot;.add-to-menu input&quot;).click();q.helper.width(q.helper.width());q.helper.height(q.helper.height())},stop:function(o,n){j=g;d(o.target).parents(&quot;.tabs-panel&quot;).find(&quot;.selected-menu-item&quot;).deselectItem()}})},attachMenuEditListeners:function(){var m=this;d(&quot;#update-nav-menu&quot;).bind(&quot;click&quot;,function(n){if(n.target&amp;&amp;n.target.className){if(-1!=n.target.className.indexOf(&quot;item-edit&quot;)){return m.eventOnClickEditLink(n.target)}else{if(-1!=n.target.className.indexOf(&quot;menu-delete&quot;)){return m.eventOnClickMenuDelete(n.target)}else{if(-1!=n.target.className.indexOf(&quot;item-delete&quot;)){return m.eventOnClickMenuItemDelete(n.target)}else{if(-1!=n.target.className.indexOf(&quot;item-close&quot;)){return m.eventOnClickCloseLink(n.target)}}}}}})},setupInputWithDefaultTitle:function(){var m=&quot;input-with-default-title&quot;;d(&quot;.&quot;+m).each(function(){var p=d(this),o=p.attr(&quot;title&quot;),n=p.val();p.data(m,o);if(&quot;&quot;==n){p.val(o)}else{if(o==n){return}else{p.removeClass(m)}}}).focus(function(){var n=d(this);if(n.val()==n.data(m)){n.val(&quot;&quot;).removeClass(m)}}).blur(function(){var n=d(this);if(&quot;&quot;==n.val()){n.val(n.data(m)).addClass(m)}})},attachMenuMetaListeners:function(m){if(!m){return}var n=this;this.setupInputWithDefaultTitle();d(&quot;input.quick-search&quot;).each(function(o,p){n.setupQuickSearchEventListeners(p)});d(m).click(function(p){var o=d(p.target).parent().parent().parent();if(d(p.target).is(&quot;input&quot;)&amp;&amp;d(p.target).hasClass(&quot;button-secondary&quot;)&amp;&amp;!d(p.target).hasClass(&quot;quick-search-submit&quot;)){if(d(o).hasClass(&quot;customlinkdiv&quot;)){n.addCustomLink()}else{if(d(o).hasClass(&quot;posttypediv&quot;)||d(o).hasClass(&quot;taxonomydiv&quot;)){n.addItemsToMenu(d(o).attr(&quot;id&quot;))}}return false}else{if(d(p.target).is(&quot;input&quot;)&amp;&amp;d(p.target).hasClass(&quot;quick-search-submit&quot;)){n.quickSearch(d(o).attr(&quot;id&quot;));return false}}})},quickSearch:function(u){var o=d(&quot;#&quot;+u+&quot; .quick-search&quot;).attr(&quot;name&quot;),r=d(&quot;#&quot;+u+&quot; .quick-search&quot;).val(),t=d(&quot;#menu&quot;).val(),n=d(&quot;#menu-settings-column-nonce&quot;).val(),s={},p=this,m=function(){};m=p.processQuickSearchQueryResponse;s={action:&quot;menu-quick-search&quot;,&quot;response-format&quot;:&quot;markup&quot;,menu:t,&quot;menu-settings-column-nonce&quot;:n,q:r,type:o};d.post(ajaxurl,s,function(q){m.call(p,q,s)})},addCustomLink:function(o,n,p){var o=o||d(&quot;#custom-menu-item-url&quot;).val(),n=n||d(&quot;#custom-menu-item-name&quot;).val(),p=p||false,t=d(&quot;#menu&quot;).val(),q=d(&quot;#menu-settings-column-nonce&quot;).val(),s={},r=this,m=function(){};if(&quot;&quot;==o||&quot;http://&quot;==o){return false}d(&quot;.customlinkdiv img.waiting&quot;).show();s={action:&quot;add-menu-item&quot;,menu:t,&quot;menu-settings-column-nonce&quot;:q,&quot;menu-item&quot;:{&quot;-1&quot;:{&quot;menu-item-type&quot;:&quot;custom&quot;,&quot;menu-item-url&quot;:o,&quot;menu-item-title&quot;:n}}};m=p?r.addMenuItemToTop:r.addMenuItemToBottom;d.post(ajaxurl,s,function(u){m.call(r,u,s);d(&quot;.customlinkdiv img.waiting&quot;).hide();wpNavMenu.resetCustomLinkForm()})},resetCustomLinkForm:function(){d(&quot;#custom-menu-item-name&quot;).val(&quot;&quot;).blur();d(&quot;#custom-menu-item-url&quot;).val(&quot;http://&quot;)},attachHomeLinkListener:function(){d(&quot;.add-home-link&quot;,&quot;.customlinkdiv&quot;).click(function(m){wpNavMenu.addCustomLink(navMenuL10n.homeurl,navMenuL10n.home,true);return false})},attachTabsPanelListeners:function(){d(&quot;#menu-settings-column&quot;).bind(&quot;click&quot;,function(r){if(r.target&amp;&amp;r.target.className&amp;&amp;-1!=r.target.className.indexOf(&quot;nav-tab-link&quot;)){var o,u=/#(.*)$/.exec(r.target.href),t,m=d(r.target).parents(&quot;.inside&quot;).first()[0],q=m?m.getElementsByTagName(&quot;input&quot;):[],p=q.length;while(p--){q[p].checked=false}d(&quot;.tabs-panel&quot;,m).each(function(){if(this.className){this.className=this.className.replace(&quot;tabs-panel-active&quot;,&quot;tabs-panel-inactive&quot;)}});d(&quot;.tabs&quot;,m).each(function(){this.className=this.className.replace(&quot;tabs&quot;,&quot;&quot;)});r.target.parentNode.className+=&quot; tabs&quot;;if(u&amp;&amp;u[1]){o=document.getElementById(u[1]);if(o){o.className=o.className.replace(&quot;tabs-panel-inactive&quot;,&quot;tabs-panel-active&quot;)}}return false}else{if(r.target&amp;&amp;r.target.className&amp;&amp;-1!=r.target.className.indexOf(&quot;select-all&quot;)){var n=/#(.*)$/.exec(r.target.href),s;if(n&amp;&amp;n[1]){s=d(&quot;#&quot;+n[1]+&quot; .tabs-panel-active .potential-menu-item&quot;);if(s.length===s.filter(&quot;.selected-menu-item&quot;).length){s.deselectItem()}else{s.selectItem()}return false}}}})},initTabManager:function(){var r=d(&quot;.nav-tabs-wrapper&quot;),s=r.children(&quot;.nav-tabs&quot;),q=s.children(&quot;.nav-tab-active&quot;),u=s.children(&quot;.nav-tab&quot;),o=0,v,p,t,n;resizing=false;function m(){p=r.offset().left;v=p+r.width();q.makeTabVisible()}d.fn.extend({makeTabVisible:function(){var x=this.eq(0),y,w;if(!x.length){return}y=x.offset().left;w=y+x.outerWidth();if(w&gt;v){s.animate({&quot;margin-left&quot;:&quot;+=&quot;+(v-w)+&quot;px&quot;,},&quot;fast&quot;)}else{if(y&lt;p){s.animate({&quot;margin-left&quot;:&quot;-=&quot;+(y-p)+&quot;px&quot;,},&quot;fast&quot;)}}return x},isTabVisible:function(){var x=this.eq(0),y=x.offset().left,w=y+x.outerWidth();return(w&lt;=v&amp;&amp;y&gt;=p)?true:false}});u.each(function(){o+=d(this).outerWidth(true)});if(o&lt;=r.width()-s.css(&quot;padding-left&quot;).slice(0,-2)-s.css(&quot;padding-right&quot;).slice(0,-2)){return}s.css({&quot;margin-right&quot;:(-1*o)+&quot;px&quot;,padding:0,});t=d('&lt;div class=&quot;nav-tabs-arrow nav-tabs-arrow-left&quot;&gt;&lt;a&gt;&amp;laquo;&lt;/a&gt;&lt;/div&gt;');n=d('&lt;div class=&quot;nav-tabs-arrow nav-tabs-arrow-right&quot;&gt;&lt;a&gt;&amp;raquo;&lt;/a&gt;&lt;/div&gt;');r.wrap('&lt;div class=&quot;nav-tabs-nav&quot;/&gt;').parent().prepend(t).append(n);m();d(window).resize(function(){if(resizing){return}resizing=true;setTimeout(function(){m();resizing=false},1000)});d.each([{arrow:t,next:&quot;next&quot;,last:&quot;first&quot;,operator:&quot;+=&quot;,},{arrow:n,next:&quot;prev&quot;,last:&quot;last&quot;,operator:&quot;-=&quot;,}],function(){var w=this;this.arrow.mousedown(function(){var y=u[w.last](),x=function(){if(!y.isTabVisible()){s.animate({&quot;margin-left&quot;:w.operator+&quot;90px&quot;,},300,&quot;linear&quot;,x)}};x()}).mouseup(function(){var y,x;s.stop(true);y=u[w.last]();while((x=y[w.next]())&amp;&amp;x.length&amp;&amp;!x.isTabVisible()){y=x}y.makeTabVisible()})})},setupQuickSearchEventListeners:function(m){var n=this;d(m).autocomplete(ajaxurl+&quot;?action=menu-quick-search&amp;type=&quot;+m.name,{delay:500,formatItem:k,formatResult:l,minchars:2,multiple:false}).bind(&quot;blur&quot;,function(q){var o=h[this.value],p=this;if(o){d.post(ajaxurl+&quot;?action=menu-quick-search&amp;type=get-post-item&amp;response-format=markup&quot;,o,function(s){n.processQuickSearchQueryResponse.call(n,s,o);h[p.value]=false})}})},eventOnClickEditLink:function(m){var o,n=/#(.*)$/.exec(m.href);if(n&amp;&amp;n[1]){o=d(&quot;#&quot;+n[1]);if(0!=o.length){if(o.hasClass(&quot;menu-item-edit-inactive&quot;)){o.slideDown(&quot;fast&quot;).siblings(&quot;dl&quot;).andSelf().removeClass(&quot;menu-item-edit-inactive&quot;).addClass(&quot;menu-item-edit-active&quot;)}else{o.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(m){d(m).closest(&quot;.menu-item-settings&quot;).siblings(&quot;dl&quot;).find(&quot;.item-edit&quot;).click();return false},eventOnClickMenuDelete:function(m){if(confirm(navMenuL10n.warnDeleteMenu)){return true}else{return false}},eventOnClickMenuItemDelete:function(m){var p,o,n=this;if(confirm(navMenuL10n.warnDeleteMenuItem)){o=/_wpnonce=([a-zA-Z0-9]*)$/.exec(m.href);if(o&amp;&amp;o[1]){p=parseInt(m.id.replace(&quot;delete-&quot;,&quot;&quot;),10);d.post(ajaxurl,{action:&quot;delete-menu-item&quot;,&quot;menu-item&quot;:p,_wpnonce:o[1]},function(q){if(&quot;1&quot;==q){n.removeMenuItem(document.getElementById(&quot;menu-item-&quot;+p))}});return false}return true}else{return false}},addItemsToMenu:function(n,m){var s=d(&quot;.tabs-panel-active .categorychecklist li input:checked&quot;,&quot;#&quot;+n),o=d(&quot;#menu&quot;).val(),r=d(&quot;#menu-settings-column-nonce&quot;).val(),p={},q=this,m=m||false,t=function(){},u=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;);t=m?q.addMenuItemToTop:q.addMenuItemToBottom;if(!s.length){return false}d(&quot;#&quot;+n+&quot; img.waiting&quot;).show();d(s).each(function(){listItemDBIDMatch=u.exec(d(this).attr(&quot;name&quot;));listItemDBID=&quot;undefined&quot;==typeof listItemDBIDMatch[1]?0:parseInt(listItemDBIDMatch[1],10);listItemData=b(listItemDBID);p={action:&quot;add-menu-item&quot;,menu:o,&quot;menu-settings-column-nonce&quot;:r,&quot;menu-item&quot;:{}};p[&quot;menu-item&quot;][listItemDBID]=listItemData;d.post(ajaxurl,p,function(v){t.call(q,v,p)});d(this).parent().prev().deselectItem()});d(&quot;#&quot;+n+&quot; img.waiting&quot;).hide()},addMenuItemToBottom:function(m,n){d(m).hideAdvancedMenuItemFields().appendTo(j)},addMenuItemToTop:function(m,n){d(m).hideAdvancedMenuItemFields().prependTo(j)},processQuickSearchQueryResponse:function(q,v){if(!v){v={}}var n=document.createElement(&quot;ul&quot;),m=document.getElementById(&quot;nav-menu-meta&quot;),r,u,o,w,s,t=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;),p;o=t.exec(q);if(o&amp;&amp;o[1]){s=o[1];while(m.elements[&quot;menu-item[&quot;+s+&quot;][menu-item-type]&quot;]){s--}if(s!=o[1]){q=q.replace(new RegExp(&quot;menu-item\\[&quot;+o[1]+&quot;\\]&quot;,&quot;g&quot;),&quot;menu-item[&quot;+s+&quot;]&quot;)}}n.innerHTML=q;u=n.getElementsByTagName(&quot;li&quot;);if(u[0]&amp;&amp;v.object_type){p=document.getElementById(v.object_type+&quot;-search-checklist&quot;);if(p){p.appendChild(u[0])}}else{if(v.type){o=/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*)/.exec(v.type);if(o&amp;&amp;o[2]){p=document.getElementById(o[2]+&quot;-search-checklist&quot;);if(p){r=u.length;if(!r){w=document.createElement(&quot;li&quot;);w.appendChild(document.createTextNode(navMenuL10n.noResultsFound));p.appendChild(w)}while(r--){p.appendChild(u[r])}}}}}},removeMenuItem:function(n){n=d(n);var m=n.childMenuItems();var o=this;n.addClass(&quot;deleting&quot;).fadeOut(350,function(){n.remove();m.shiftDepthClass(-1).updateParentMenuItemDBId();a();o.checkForEmptyMenu()})},checkForEmptyMenu:function(){if(g.children().length){return}g.height(80).one(&quot;sortstop&quot;,function(){d(this).height(&quot;auto&quot;)})}}};var wpNavMenu=new WPNavMenuHandler(jQuery);jQuery(function(){wpNavMenu.init()});
</del><span class="cx">\ No newline at end of file
</span><ins>+var WPNavMenuHandler=function(d){var i={},g=30,c=11,l=function(n,r,o,q){if(n&amp;&amp;n[0]){var p=d.parseJSON(n[0]);if(p.post_title){if(p.ID&amp;&amp;p.post_type){i[p.post_title]={ID:p.ID,object_type:p.post_type}}return p.post_title}}},m=function(n,r,o,q){if(n&amp;&amp;n[0]){var p=d.parseJSON(n[0]);if(p.post_title){return p.post_title}}},b=function(t,s){if(!t){return false}s=s||document;var o=[&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;],n={},p=s.getElementsByTagName(&quot;input&quot;),r=p.length,q,u=document.getElementById(&quot;nav-menu-meta-object-id&quot;).value;while(r--){q=o.length;while(q--){if(p[r]&amp;&amp;p[r].name&amp;&amp;&quot;menu-item[&quot;+t+&quot;][&quot;+o[q]+&quot;]&quot;==p[r].name){n[o[q]]=p[r].value}}}return n},a=function(){h.find(&quot;.menu-item-data-position&quot;).val(function(n){return n+1})},f=function(n){return n*g},j=function(n){return Math.floor(n/g)},h,k,e;d.fn.extend({menuItemDepth:function(){return j(this.eq(0).css(&quot;margin-left&quot;).slice(0,-2))},updateDepthClass:function(o,n){return this.each(function(){var p=d(this);n=n||p.menuItemDepth();d(this).removeClass(&quot;menu-item-depth-&quot;+n).addClass(&quot;menu-item-depth-&quot;+o)})},shiftDepthClass:function(n){return this.each(function(){var o=d(this),p=o.menuItemDepth();d(this).removeClass(&quot;menu-item-depth-&quot;+p).addClass(&quot;menu-item-depth-&quot;+(p+n))})},childMenuItems:function(){var n=d();this.each(function(){var o=d(this),q=o.menuItemDepth(),p=o.next();while(p.length&amp;&amp;p.menuItemDepth()&gt;q){n=n.add(p);p=p.next()}});return n},updateParentMenuItemDBId:function(){return this.each(function(){var p=d(this),n=p.find(&quot;.menu-item-data-parent-id&quot;),q=p.menuItemDepth(),o=p.prev();if(q==0){n.val(0)}else{while(o.menuItemDepth()!=q-1){o=o.prev()}n.val(o.find(&quot;.menu-item-data-db-id&quot;).val())}})},hideAdvancedMenuItemFields:function(){return this.each(function(){var n=d(this);d(&quot;.hide-column-tog&quot;).not(&quot;:checked&quot;).each(function(){n.find(&quot;.field-&quot;+d(this).val()).addClass(&quot;hidden-field&quot;)})})},selectItem:function(){return this.each(function(){d(this).addClass(&quot;selected-menu-item&quot;).next().children(&quot;input&quot;).attr(&quot;checked&quot;,&quot;checked&quot;)})},deselectItem:function(){return this.each(function(){d(this).removeClass(&quot;selected-menu-item&quot;).next().children(&quot;input&quot;).removeAttr(&quot;checked&quot;)})},toggleItem:function(){return this.each(function(){var n=d(this);if(n.hasClass(&quot;selected-menu-item&quot;)){n.deselectItem()}else{n.selectItem()}})},addSelectedToMenu:function(n){return this.each(function(){var o=d(this),q=o.find(&quot;.tabs-panel-active .categorychecklist li input:checked&quot;),p=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;);n=n||e.addMenuItemToBottom;if(!q.length){return false}o.find(&quot;img.waiting&quot;).show();d(q).each(function(){var s=d(this),r=s.parent().prev();listItemDBIDMatch=p.exec(s.attr(&quot;name&quot;));listItemDBID=&quot;undefined&quot;==typeof listItemDBIDMatch[1]?0:parseInt(listItemDBIDMatch[1],10);listItemData=b(listItemDBID);menuItem={};menuItem[listItemDBID]=listItemData;e.addItemToMenu(menuItem,n,function(){r.deselectItem()})});o.find(&quot;img.waiting&quot;).hide()})},});return e={init:function(){h=d(&quot;#menu-to-edit&quot;);k=h;this.attachMenuEditListeners();this.setupInputWithDefaultTitle();this.attachAddMenuItemListeners();this.attachQuickSearchListeners();this.attachTabsPanelListeners();this.attachHomeLinkListener();if(h.length){this.initSortables()}this.initToggles();this.initTabManager();this.initAddMenuItemDraggables();this.checkForEmptyMenu()},initToggles:function(){postboxes.add_postbox_toggles(&quot;nav-menus&quot;);columns.useCheckboxesForHidden();columns.checked=function(n){d(&quot;.field-&quot;+n).removeClass(&quot;hidden-field&quot;)};columns.unchecked=function(n){d(&quot;.field-&quot;+n).addClass(&quot;hidden-field&quot;)};h.hideAdvancedMenuItemFields()},initSortables:function(){var t=0,s,r,n,q=h.offset().left,u,p;h.sortable({handle:&quot;.menu-item-handle&quot;,placeholder:&quot;sortable-placeholder&quot;,start:function(D,C){var B,w,A,z,x,y;p=C.item.children(&quot;.menu-item-transport&quot;);u=(C.helper.hasClass(&quot;new-menu-item&quot;));s=(u)?0:C.item.menuItemDepth();o(C,s);if(!u){z=(C.item.next()[0]==C.placeholder[0])?C.item.next():C.item;x=z.childMenuItems();p.append(x)}v(C);w=p.outerHeight();w+=(w&gt;0)?(C.placeholder.css(&quot;margin-top&quot;).slice(0,-2)*1):0;w+=C.helper.outerHeight();w-=2;C.placeholder.height(w);y=s;if(!u){x.each(function(){var E=d(this).menuItemDepth();y=(E&gt;y)?E:y})}A=C.helper.find(&quot;.menu-item-handle&quot;).outerWidth();A+=f(y-s);A-=2;C.placeholder.width(A)},stop:function(z,y){var x,w=t-s;x=p.children().insertAfter(y.item);if(u){y.item.remove();if(w!=0){x.shiftDepthClass(w)}x.updateParentMenuItemDBId()}else{if(w!=0){y.item.updateDepthClass(t);x.shiftDepthClass(w)}y.item.updateParentMenuItemDBId()}a()},change:function(x,w){if(!w.placeholder.parent().hasClass(&quot;menu&quot;)){w.placeholder.appendTo(h)}v(w)},sort:function(x,w){var y=j(w.helper.offset().left-q);if(y&lt;r){y=r}else{if(y&gt;n){y=n}}if(y!=t){o(w,y)}},receive:function(x,w){p=w.sender.children(&quot;.menu-item-transport&quot;)}});function v(y){var x=y.placeholder.prev(),w=y.placeholder.next(),z;if(x[0]==y.item[0]){x=x.prev()}if(w[0]==y.item[0]){w=w.next()}r=(w.length)?w.menuItemDepth():0;if(x.length){n=((z=x.menuItemDepth()+1)&gt;c)?c:z}else{n=0}}function o(w,x){w.placeholder.updateDepthClass(x,t);t=x}},initAddMenuItemDraggables:function(){var n=d(&quot;.potential-menu-item&quot;);n.click(function(o){d(this).toggleItem()}).children().draggable({helper:&quot;clone&quot;,connectToSortable:&quot;ul#menu-to-edit&quot;,distance:5,zIndex:100,start:function(t,r){var s=d(t.target),q=s.parent(),o=q.parent(),p;q.selectItem();k=s.children(&quot;.menu-item-transport&quot;);p=o.parents(&quot;.tabs-panel&quot;).find(&quot;.selected-menu-item&quot;).children().not(r.helper).clone();r.helper.children(&quot;.additional-menu-items&quot;).append(p);r.helper.addClass(&quot;new-menu-item&quot;);r.helper.children(&quot;div&quot;).hide();p.first().css(&quot;margin-top&quot;,0);p.children(&quot;div&quot;).addClass(&quot;menu-item-handle&quot;);r.helper.children(&quot;div&quot;).addClass(&quot;hidden-handle&quot;);o.parents(&quot;.inside&quot;).find(&quot;.add-to-menu input&quot;).click();r.helper.width(r.helper.width());r.helper.height(r.helper.height())},stop:function(p,o){k=h;d(p.target).parents(&quot;.tabs-panel&quot;).find(&quot;.selected-menu-item&quot;).deselectItem()}})},attachMenuEditListeners:function(){var n=this;d(&quot;#update-nav-menu&quot;).bind(&quot;click&quot;,function(o){if(o.target&amp;&amp;o.target.className){if(-1!=o.target.className.indexOf(&quot;item-edit&quot;)){return n.eventOnClickEditLink(o.target)}else{if(-1!=o.target.className.indexOf(&quot;menu-delete&quot;)){return n.eventOnClickMenuDelete(o.target)}else{if(-1!=o.target.className.indexOf(&quot;item-delete&quot;)){return n.eventOnClickMenuItemDelete(o.target)}else{if(-1!=o.target.className.indexOf(&quot;item-close&quot;)){return n.eventOnClickCloseLink(o.target)}}}}}})},setupInputWithDefaultTitle:function(){var n=&quot;input-with-default-title&quot;;d(&quot;.&quot;+n).each(function(){var q=d(this),p=q.attr(&quot;title&quot;),o=q.val();q.data(n,p);if(&quot;&quot;==o){q.val(p)}else{if(p==o){return}else{q.removeClass(n)}}}).focus(function(){var o=d(this);if(o.val()==o.data(n)){o.val(&quot;&quot;).removeClass(n)}}).blur(function(){var o=d(this);if(&quot;&quot;==o.val()){o.addClass(n).val(o.data(n))}})},attachAddMenuItemListeners:function(){var n=d(&quot;#nav-menu-meta&quot;);n.find(&quot;.add-to-menu input&quot;).click(function(){d(this).trigger(&quot;wp-add-menu-item&quot;,[e.addMenuItemToBottom]);return false});n.find(&quot;.customlinkdiv&quot;).bind(&quot;wp-add-menu-item&quot;,function(p,o){e.addCustomLink(o)});n.find(&quot;.posttypediv, .taxonomydiv&quot;).bind(&quot;wp-add-menu-item&quot;,function(p,o){d(this).addSelectedToMenu(o)})},attachQuickSearchListeners:function(){var o=this,n=d(&quot;#nav-menu-meta&quot;);d(&quot;input.quick-search&quot;).each(function(p,q){o.setupQuickSearchEventListeners(q)});n.find(&quot;.quick-search-submit&quot;).click(function(){d(this).trigger(&quot;wp-quick-search&quot;);return false});n.find(&quot;.inside&quot;).children().bind(&quot;wp-quick-search&quot;,function(){o.quickSearch(d(this).attr(&quot;id&quot;))})},quickSearch:function(v){var p=d(&quot;#&quot;+v+&quot; .quick-search&quot;).attr(&quot;name&quot;),s=d(&quot;#&quot;+v+&quot; .quick-search&quot;).val(),u=d(&quot;#menu&quot;).val(),o=d(&quot;#menu-settings-column-nonce&quot;).val(),t={},r=this,n=function(){};n=r.processQuickSearchQueryResponse;t={action:&quot;menu-quick-search&quot;,&quot;response-format&quot;:&quot;markup&quot;,menu:u,&quot;menu-settings-column-nonce&quot;:o,q:s,type:p};d.post(ajaxurl,t,function(q){n.call(r,q,t)})},addCustomLink:function(n){var p=d(&quot;#custom-menu-item-url&quot;).val(),o=d(&quot;#custom-menu-item-name&quot;).val();n=n||e.addMenuItemToBottom;if(&quot;&quot;==p||&quot;http://&quot;==p){return false}d(&quot;.customlinkdiv img.waiting&quot;).show();this.addLinkToMenu(p,o,n,function(){d(&quot;.customlinkdiv img.waiting&quot;).hide();d(&quot;#custom-menu-item-name&quot;).val(&quot;&quot;).blur();d(&quot;#custom-menu-item-url&quot;).val(&quot;http://&quot;)})},addLinkToMenu:function(p,o,n,q){n=n||e.addMenuItemToBottom;q=q||function(){};e.addItemToMenu({&quot;-1&quot;:{&quot;menu-item-type&quot;:&quot;custom&quot;,&quot;menu-item-url&quot;:p,&quot;menu-item-title&quot;:o}},n,q)},addItemToMenu:function(p,n,r){var q=d(&quot;#menu&quot;).val(),o=d(&quot;#menu-settings-column-nonce&quot;).val();n=n||function(){};r=r||function(){};params={action:&quot;add-menu-item&quot;,menu:q,&quot;menu-settings-column-nonce&quot;:o,&quot;menu-item&quot;:p,};d.post(ajaxurl,params,function(s){n(s,params);r()})},addMenuItemToBottom:function(n,o){d(n).hideAdvancedMenuItemFields().appendTo(k)},addMenuItemToTop:function(n,o){d(n).hideAdvancedMenuItemFields().prependTo(k)},attachHomeLinkListener:function(){d(&quot;.add-home-link&quot;,&quot;.customlinkdiv&quot;).click(function(n){e.addLinkToMenu(navMenuL10n.homeurl,navMenuL10n.home,e.addMenuItemToTop,a);return false})},attachTabsPanelListeners:function(){d(&quot;#menu-settings-column&quot;).bind(&quot;click&quot;,function(s){if(s.target&amp;&amp;s.target.className&amp;&amp;-1!=s.target.className.indexOf(&quot;nav-tab-link&quot;)){var p,v=/#(.*)$/.exec(s.target.href),u,n=d(s.target).parents(&quot;.inside&quot;).first()[0],r=n?n.getElementsByTagName(&quot;input&quot;):[],q=r.length;while(q--){r[q].checked=false}d(&quot;.tabs-panel&quot;,n).each(function(){if(this.className){this.className=this.className.replace(&quot;tabs-panel-active&quot;,&quot;tabs-panel-inactive&quot;)}});d(&quot;.tabs&quot;,n).each(function(){this.className=this.className.replace(&quot;tabs&quot;,&quot;&quot;)});s.target.parentNode.className+=&quot; tabs&quot;;if(v&amp;&amp;v[1]){p=document.getElementById(v[1]);if(p){p.className=p.className.replace(&quot;tabs-panel-inactive&quot;,&quot;tabs-panel-active&quot;)}}return false}else{if(s.target&amp;&amp;s.target.className&amp;&amp;-1!=s.target.className.indexOf(&quot;select-all&quot;)){var o=/#(.*)$/.exec(s.target.href),t;if(o&amp;&amp;o[1]){t=d(&quot;#&quot;+o[1]+&quot; .tabs-panel-active .potential-menu-item&quot;);if(t.length===t.filter(&quot;.selected-menu-item&quot;).length){t.deselectItem()}else{t.selectItem()}return false}}}})},initTabManager:function(){var s=d(&quot;.nav-tabs-wrapper&quot;),t=s.children(&quot;.nav-tabs&quot;),r=t.children(&quot;.nav-tab-active&quot;),v=t.children(&quot;.nav-tab&quot;),p=0,w,q,u,o;resizing=false;function n(){q=s.offset().left;w=q+s.width();r.makeTabVisible()}d.fn.extend({makeTabVisible:function(){var y=this.eq(0),z,x;if(!y.length){return}z=y.offset().left;x=z+y.outerWidth();if(x&gt;w){t.animate({&quot;margin-left&quot;:&quot;+=&quot;+(w-x)+&quot;px&quot;,},&quot;fast&quot;)}else{if(z&lt;q){t.animate({&quot;margin-left&quot;:&quot;-=&quot;+(z-q)+&quot;px&quot;,},&quot;fast&quot;)}}return y},isTabVisible:function(){var y=this.eq(0),z=y.offset().left,x=z+y.outerWidth();return(x&lt;=w&amp;&amp;z&gt;=q)?true:false}});v.each(function(){p+=d(this).outerWidth(true)});if(p&lt;=s.width()-t.css(&quot;padding-left&quot;).slice(0,-2)-t.css(&quot;padding-right&quot;).slice(0,-2)){return}t.css({&quot;margin-right&quot;:(-1*p)+&quot;px&quot;,padding:0,});u=d('&lt;div class=&quot;nav-tabs-arrow nav-tabs-arrow-left&quot;&gt;&lt;a&gt;&amp;laquo;&lt;/a&gt;&lt;/div&gt;');o=d('&lt;div class=&quot;nav-tabs-arrow nav-tabs-arrow-right&quot;&gt;&lt;a&gt;&amp;raquo;&lt;/a&gt;&lt;/div&gt;');s.wrap('&lt;div class=&quot;nav-tabs-nav&quot;/&gt;').parent().prepend(u).append(o);n();d(window).resize(function(){if(resizing){return}resizing=true;setTimeout(function(){n();resizing=false},1000)});d.each([{arrow:u,next:&quot;next&quot;,last:&quot;first&quot;,operator:&quot;+=&quot;,},{arrow:o,next:&quot;prev&quot;,last:&quot;last&quot;,operator:&quot;-=&quot;,}],function(){var x=this;this.arrow.mousedown(function(){var z=v[x.last](),y=function(){if(!z.isTabVisible()){t.animate({&quot;margin-left&quot;:x.operator+&quot;90px&quot;,},300,&quot;linear&quot;,y)}};y()}).mouseup(function(){var z,y;t.stop(true);z=v[x.last]();while((y=z[x.next]())&amp;&amp;y.length&amp;&amp;!y.isTabVisible()){z=y}z.makeTabVisible()})})},setupQuickSearchEventListeners:function(n){var o=this;d(n).autocomplete(ajaxurl+&quot;?action=menu-quick-search&amp;type=&quot;+n.name,{delay:500,formatItem:l,formatResult:m,minchars:2,multiple:false}).bind(&quot;blur&quot;,function(r){var p=i[this.value],q=this;if(p){d.post(ajaxurl+&quot;?action=menu-quick-search&amp;type=get-post-item&amp;response-format=markup&quot;,p,function(s){o.processQuickSearchQueryResponse.call(o,s,p);i[q.value]=false})}})},eventOnClickEditLink:function(n){var p,o=/#(.*)$/.exec(n.href);if(o&amp;&amp;o[1]){p=d(&quot;#&quot;+o[1]);if(0!=p.length){if(p.hasClass(&quot;menu-item-edit-inactive&quot;)){p.slideDown(&quot;fast&quot;).siblings(&quot;dl&quot;).andSelf().removeClass(&quot;menu-item-edit-inactive&quot;).addClass(&quot;menu-item-edit-active&quot;)}else{p.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(n){d(n).closest(&quot;.menu-item-settings&quot;).siblings(&quot;dl&quot;).find(&quot;.item-edit&quot;).click();return false},eventOnClickMenuDelete:function(n){if(confirm(navMenuL10n.warnDeleteMenu)){return true}else{return false}},eventOnClickMenuItemDelete:function(n){var q,p,o=this;if(confirm(navMenuL10n.warnDeleteMenuItem)){p=/_wpnonce=([a-zA-Z0-9]*)$/.exec(n.href);if(p&amp;&amp;p[1]){q=parseInt(n.id.replace(&quot;delete-&quot;,&quot;&quot;),10);d.post(ajaxurl,{action:&quot;delete-menu-item&quot;,&quot;menu-item&quot;:q,_wpnonce:p[1]},function(r){if(&quot;1&quot;==r){o.removeMenuItem(document.getElementById(&quot;menu-item-&quot;+q))}});return false}return true}else{return false}},processQuickSearchQueryResponse:function(r,w){if(!w){w={}}var o=document.createElement(&quot;ul&quot;),n=document.getElementById(&quot;nav-menu-meta&quot;),s,v,p,x,t,u=new RegExp(&quot;menu-item\\[([^\\]]*)&quot;),q;p=u.exec(r);if(p&amp;&amp;p[1]){t=p[1];while(n.elements[&quot;menu-item[&quot;+t+&quot;][menu-item-type]&quot;]){t--}if(t!=p[1]){r=r.replace(new RegExp(&quot;menu-item\\[&quot;+p[1]+&quot;\\]&quot;,&quot;g&quot;),&quot;menu-item[&quot;+t+&quot;]&quot;)}}o.innerHTML=r;v=o.getElementsByTagName(&quot;li&quot;);if(v[0]&amp;&amp;w.object_type){q=document.getElementById(w.object_type+&quot;-search-checklist&quot;);if(q){q.appendChild(v[0])}}else{if(w.type){p=/quick-search-(posttype|taxonomy)-([a-zA-Z_-]*)/.exec(w.type);if(p&amp;&amp;p[2]){q=document.getElementById(p[2]+&quot;-search-checklist&quot;);if(q){s=v.length;if(!s){x=document.createElement(&quot;li&quot;);x.appendChild(document.createTextNode(navMenuL10n.noResultsFound));q.appendChild(x)}while(s--){q.appendChild(v[s])}}}}}},removeMenuItem:function(o){o=d(o);var n=o.childMenuItems();var p=this;o.addClass(&quot;deleting&quot;).fadeOut(350,function(){o.remove();n.shiftDepthClass(-1).updateParentMenuItemDBId();a();p.checkForEmptyMenu()})},checkForEmptyMenu:function(){if(h.children().length){return}h.height(80).one(&quot;sortstop&quot;,function(){d(this).height(&quot;auto&quot;)})}}};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="trunkwpincludesscriptloaderphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/script-loader.php (14463 => 14464)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/script-loader.php        2010-05-05 18:43:54 UTC (rev 14463)
+++ trunk/wp-includes/script-loader.php        2010-05-05 20:29:50 UTC (rev 14464)
</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, '20100504' );
</del><ins>+                $scripts-&gt;add( 'nav-menu', &quot;/wp-admin/js/nav-menu$suffix.js&quot;, false, '20100505' );
</ins><span class="cx">                 $scripts-&gt;localize( 'nav-menu', 'navMenuL10n', array(
</span><span class="cx">                         'home' =&gt; _x('Home', 'nav menu home label'),
</span><span class="cx">                         'homeurl' =&gt; home_url('/'),
</span></span></pre>
</div>
</div>

</body>
</html>