diff --git a/wp-admin/js/nav-menu.dev.js b/wp-admin/js/nav-menu.dev.js index 424ed784cf..56218680c9 100644 --- a/wp-admin/js/nav-menu.dev.js +++ b/wp-admin/js/nav-menu.dev.js @@ -8,92 +8,26 @@ * @subpackage Administration */ -var wpNavMenu, WPNavMenuHandler = function ($) { - var autoCompleteData = {}, +var wpNavMenu; - menuItemDepthPerLevel = 30, // Do not use directly. Use depthToPx and pxToDepth instead. - globalMaxDepth = 11, - - formatAutocompleteResponse = function( resultRow, pos, total, queryTerm ) { - if ( resultRow && resultRow[0] ) { - var data = $.parseJSON(resultRow[0]); - if ( data.post_title ) { - if ( data.ID && data.post_type ) - autoCompleteData[data.post_title] = {ID: data.ID, object_type: data.post_type}; - return data.post_title; - } - } - }, - - formatAutocompleteResult = function( resultRow, pos, total, queryTerm ) { - if ( resultRow && resultRow[0] ) { - var data = $.parseJSON(resultRow[0]); - if ( data.post_title ) - return data.post_title; - } - }, - - getListDataFromID = function(menuItemID, parentEl) { - if ( ! menuItemID ) - return false; - parentEl = parentEl || document; - var fields = [ - 'menu-item-db-id', - 'menu-item-object-id', - 'menu-item-object', - 'menu-item-parent-id', - 'menu-item-position', - 'menu-item-type', - 'menu-item-append', - 'menu-item-title', - 'menu-item-url', - 'menu-item-description', - 'menu-item-attr-title', - 'menu-item-target', - 'menu-item-classes', - 'menu-item-xfn' - ], - itemData = {}, - inputs = parentEl.getElementsByTagName('input'), - i = inputs.length, - j; - - while ( i-- ) { - j = fields.length; - while ( j-- ) { - if ( - inputs[i] && - inputs[i].name && - 'menu-item[' + menuItemID + '][' + fields[j] + ']' == inputs[i].name - ) { - itemData[fields[j]] = inputs[i].value; - } - } - } - - return itemData; - }, - - recalculateMenuItemPositions = function() { - menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } ); - }, - - depthToPx = function(depth) { - return depth * menuItemDepthPerLevel; - }, - - pxToDepth = function(px) { - return Math.floor(px / menuItemDepthPerLevel); - }, - - menuList, targetList, api; - - return api = { +(function($) { + + var api = wpNavMenu = { + + options : { + menuItemDepthPerLevel : 30, // Do not use directly. Use depthToPx and pxToDepth instead. + globalMaxDepth : 11 + }, + + menuList : undefined, // Set in init. + targetList : undefined, // Set in init. + + autoCompleteData : {}, // Functions that run on init. init : function() { - menuList = $('#menu-to-edit'); - targetList = menuList; + api.menuList = $('#menu-to-edit'); + api.targetList = api.menuList; this.jQueryExtensions(); @@ -107,7 +41,7 @@ var wpNavMenu, WPNavMenuHandler = function ($) { this.attachHomeLinkListener(); - if( menuList.length ) // If no menu, we're in the + tab. + if( api.menuList.length ) // If no menu, we're in the + tab. this.initSortables(); this.initToggles(); @@ -121,7 +55,7 @@ var wpNavMenu, WPNavMenuHandler = function ($) { // jQuery extensions $.fn.extend({ menuItemDepth : function() { - return pxToDepth( this.eq(0).css('margin-left').slice(0, -2) ); + return api.pxToDepth( this.eq(0).css('margin-left').slice(0, -2) ); }, updateDepthClass : function(current, prev) { return this.each(function(){ @@ -199,7 +133,7 @@ var wpNavMenu, WPNavMenuHandler = function ($) { $(checkboxes).each(function(){ var listItemDBIDMatch = re.exec( $(this).attr('name') ), listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10); - menuItems[listItemDBID] = getListDataFromID(listItemDBID); + menuItems[listItemDBID] = api.getListDataFromID(listItemDBID); }); // Add the items api.addItemToMenu(menuItems, processMethod, function(){ @@ -225,15 +159,15 @@ var wpNavMenu, WPNavMenuHandler = function ($) { $('.field-' + field).addClass('hidden-field'); } // hide fields - menuList.hideAdvancedMenuItemFields(); + api.menuList.hideAdvancedMenuItemFields(); }, initSortables : function() { var currentDepth = 0, originalDepth, minDepth, maxDepth, - menuLeft = menuList.offset().left, + menuLeft = api.menuList.offset().left, newItem, transport; - menuList.sortable({ + api.menuList.sortable({ handle: '.menu-item-handle', placeholder: 'sortable-placeholder', start: function(e, ui) { @@ -269,7 +203,7 @@ var wpNavMenu, WPNavMenuHandler = function ($) { maxChildDepth = (depth > maxChildDepth) ? depth : maxChildDepth; }); width = ui.helper.find('.menu-item-handle').outerWidth(); // Get original width - width += depthToPx(maxChildDepth - originalDepth); // Account for children + width += api.depthToPx(maxChildDepth - originalDepth); // Account for children width -= 2; // Subtract 2 for borders ui.placeholder.width(width); }, @@ -287,25 +221,25 @@ var wpNavMenu, WPNavMenuHandler = function ($) { // Update the item data. ui.item.updateParentMenuItemDBId(); // Update positions - recalculateMenuItemPositions(); + api.recalculateMenuItemPositions(); }, change: function(e, ui) { // Make sure the placeholder is inside the menu. // Otherwise fix it, or we're in trouble. if( ! ui.placeholder.parent().hasClass('menu') ) - ui.placeholder.appendTo(menuList); + ui.placeholder.appendTo(api.menuList); updateDepthRange(ui); }, sort: function(e, ui) { - var depth = pxToDepth(ui.helper.offset().left - menuLeft); + var depth = api.pxToDepth(ui.helper.offset().left - menuLeft); // Check and correct if depth is not within range. if ( depth < minDepth ) depth = minDepth; else if ( depth > maxDepth ) depth = maxDepth; if( depth != currentDepth ) updateCurrentDepth(ui, depth); - }, + } }); function updateDepthRange(ui) { @@ -319,7 +253,7 @@ var wpNavMenu, WPNavMenuHandler = function ($) { minDepth = (next.length) ? next.menuItemDepth() : 0; if( prev.length ) - maxDepth = ( (depth = prev.menuItemDepth() + 1) > globalMaxDepth ) ? globalMaxDepth : depth; + maxDepth = ( (depth = prev.menuItemDepth() + 1) > api.options.globalMaxDepth ) ? api.options.globalMaxDepth : depth; else maxDepth = 0; } @@ -492,16 +426,16 @@ var wpNavMenu, WPNavMenuHandler = function ($) { * @param object req The request arguments. */ addMenuItemToBottom : function( menuMarkup, req ) { - $(menuMarkup).hideAdvancedMenuItemFields().appendTo( targetList ); + $(menuMarkup).hideAdvancedMenuItemFields().appendTo( api.targetList ); }, addMenuItemToTop : function( menuMarkup, req ) { - $(menuMarkup).hideAdvancedMenuItemFields().prependTo( targetList ); + $(menuMarkup).hideAdvancedMenuItemFields().prependTo( api.targetList ); }, attachHomeLinkListener : function() { $('.add-home-link', '.customlinkdiv').click(function(e) { - api.addLinkToMenu( navMenuL10n.homeurl, navMenuL10n.home, api.addMenuItemToTop, recalculateMenuItemPositions ); + api.addLinkToMenu( navMenuL10n.homeurl, navMenuL10n.home, api.addMenuItemToTop, api.recalculateMenuItemPositions ); return false; }); }, @@ -666,13 +600,13 @@ var wpNavMenu, WPNavMenuHandler = function ($) { $(el).autocomplete( ajaxurl + '?action=menu-quick-search&type=' + el.name, { delay: 500, - formatItem: formatAutocompleteResponse, - formatResult: formatAutocompleteResult, + formatItem: api.formatAutocompleteResponse, + formatResult: api.formatAutocompleteResult, minchars: 2, multiple: false } ).bind('blur', function(e) { - var changedData = autoCompleteData[this.value], + var changedData = api.autoCompleteData[this.value], inputEl = this; if ( changedData ) { $.post( @@ -680,7 +614,7 @@ var wpNavMenu, WPNavMenuHandler = function ($) { changedData, function(r) { that.processQuickSearchQueryResponse.call(that, r, changedData); - autoCompleteData[inputEl.value] = false; + api.autoCompleteData[inputEl.value] = false; } ); } @@ -820,22 +754,92 @@ var wpNavMenu, WPNavMenuHandler = function ($) { el.addClass('deleting').fadeOut( 350 , function() { el.remove(); children.shiftDepthClass(-1).updateParentMenuItemDBId(); - recalculateMenuItemPositions(); + api.recalculateMenuItemPositions(); that.checkForEmptyMenu(); }); }, checkForEmptyMenu : function() { - if( menuList.children().length ) return; - menuList.height(80).one('sortstop', function(){ + if( api.menuList.children().length ) return; + api.menuList.height(80).one('sortstop', function(){ $(this).height('auto'); }); + }, + + formatAutocompleteResponse : function( resultRow, pos, total, queryTerm ) { + if ( resultRow && resultRow[0] ) { + var data = $.parseJSON(resultRow[0]); + if ( data.post_title ) { + if ( data.ID && data.post_type ) + api.autoCompleteData[data.post_title] = {ID: data.ID, object_type: data.post_type}; + return data.post_title; + } + } + }, + + formatAutocompleteResult : function( resultRow, pos, total, queryTerm ) { + if ( resultRow && resultRow[0] ) { + var data = $.parseJSON(resultRow[0]); + if ( data.post_title ) + return data.post_title; + } + }, + + getListDataFromID : function(menuItemID, parentEl) { + if ( ! menuItemID ) + return false; + parentEl = parentEl || document; + var fields = [ + 'menu-item-db-id', + 'menu-item-object-id', + 'menu-item-object', + 'menu-item-parent-id', + 'menu-item-position', + 'menu-item-type', + 'menu-item-append', + 'menu-item-title', + 'menu-item-url', + 'menu-item-description', + 'menu-item-attr-title', + 'menu-item-target', + 'menu-item-classes', + 'menu-item-xfn' + ], + itemData = {}, + inputs = parentEl.getElementsByTagName('input'), + i = inputs.length, + j; + + while ( i-- ) { + j = fields.length; + while ( j-- ) { + if ( + inputs[i] && + inputs[i].name && + 'menu-item[' + menuItemID + '][' + fields[j] + ']' == inputs[i].name + ) { + itemData[fields[j]] = inputs[i].value; + } + } + } + + return itemData; + }, + + recalculateMenuItemPositions : function() { + api.menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } ); + }, + + depthToPx : function(depth) { + return depth * api.options.menuItemDepthPerLevel; + }, + + pxToDepth : function(px) { + return Math.floor(px / api.options.menuItemDepthPerLevel); } - } -} -wpNavMenu = new WPNavMenuHandler(jQuery); + }; -jQuery(function() { - wpNavMenu.init(); -}); + $(document).ready(function(){ wpNavMenu.init(); }); + +})(jQuery); diff --git a/wp-admin/js/nav-menu.js b/wp-admin/js/nav-menu.js index 96ca2d6afd..ff0301e76d 100644 --- a/wp-admin/js/nav-menu.js +++ b/wp-admin/js/nav-menu.js @@ -1 +1 @@ -var wpNavMenu,WPNavMenuHandler=function(d){var i={},g=30,c=11,l=function(n,r,o,q){if(n&&n[0]){var p=d.parseJSON(n[0]);if(p.post_title){if(p.ID&&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&&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=["menu-item-db-id","menu-item-object-id","menu-item-object","menu-item-parent-id","menu-item-position","menu-item-type","menu-item-append","menu-item-title","menu-item-url","menu-item-description","menu-item-attr-title","menu-item-target","menu-item-classes","menu-item-xfn"],n={},p=s.getElementsByTagName("input"),r=p.length,q;while(r--){q=o.length;while(q--){if(p[r]&&p[r].name&&"menu-item["+t+"]["+o[q]+"]"==p[r].name){n[o[q]]=p[r].value}}}return n},a=function(){h.find(".menu-item-data-position").val(function(n){return n+1})},f=function(n){return n*g},j=function(n){return Math.floor(n/g)},h,k,e;return e={init:function(){h=d("#menu-to-edit");k=h;this.jQueryExtensions();this.attachMenuEditListeners();this.setupInputWithDefaultTitle();this.attachAddMenuItemListeners();this.attachQuickSearchListeners();this.attachTabsPanelListeners();this.attachHomeLinkListener();if(h.length){this.initSortables()}this.initToggles();this.initTabManager();this.checkForEmptyMenu()},jQueryExtensions:function(){d.fn.extend({menuItemDepth:function(){return j(this.eq(0).css("margin-left").slice(0,-2))},updateDepthClass:function(o,n){return this.each(function(){var p=d(this);n=n||p.menuItemDepth();d(this).removeClass("menu-item-depth-"+n).addClass("menu-item-depth-"+o)})},shiftDepthClass:function(n){return this.each(function(){var o=d(this),p=o.menuItemDepth();d(this).removeClass("menu-item-depth-"+p).addClass("menu-item-depth-"+(p+n))})},childMenuItems:function(){var n=d();this.each(function(){var o=d(this),q=o.menuItemDepth(),p=o.next();while(p.length&&p.menuItemDepth()>q){n=n.add(p);p=p.next()}});return n},updateParentMenuItemDBId:function(){return this.each(function(){var p=d(this),n=p.find(".menu-item-data-parent-id"),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(".menu-item-data-db-id").val())}})},hideAdvancedMenuItemFields:function(){return this.each(function(){var n=d(this);d(".hide-column-tog").not(":checked").each(function(){n.find(".field-"+d(this).val()).addClass("hidden-field")})})},addSelectedToMenu:function(n){return this.each(function(){var p=d(this),o={},r=p.find(".tabs-panel-active .categorychecklist li input:checked"),q=new RegExp("menu-item\\[([^\\]]*)");n=n||e.addMenuItemToBottom;if(!r.length){return false}p.find("img.waiting").show();d(r).each(function(){var s=q.exec(d(this).attr("name")),t="undefined"==typeof s[1]?0:parseInt(s[1],10);o[t]=b(t)});e.addItemToMenu(o,n,function(){r.removeAttr("checked");p.find("img.waiting").hide()})})}})},initToggles:function(){postboxes.add_postbox_toggles("nav-menus");columns.useCheckboxesForHidden();columns.checked=function(n){d(".field-"+n).removeClass("hidden-field")};columns.unchecked=function(n){d(".field-"+n).addClass("hidden-field")};h.hideAdvancedMenuItemFields()},initSortables:function(){var t=0,s,r,n,q=h.offset().left,u,p;h.sortable({handle:".menu-item-handle",placeholder:"sortable-placeholder",start:function(C,B){var w,A,z,x,y;p=B.item.children(".menu-item-transport");s=(u)?0:B.item.menuItemDepth();o(B,s);z=(B.item.next()[0]==B.placeholder[0])?B.item.next():B.item;x=z.childMenuItems();p.append(x);v(B);w=p.outerHeight();w+=(w>0)?(B.placeholder.css("margin-top").slice(0,-2)*1):0;w+=B.helper.outerHeight();w-=2;B.placeholder.height(w);y=s;x.each(function(){var D=d(this).menuItemDepth();y=(D>y)?D:y});A=B.helper.find(".menu-item-handle").outerWidth();A+=f(y-s);A-=2;B.placeholder.width(A)},stop:function(z,y){var x,w=t-s;x=p.children().insertAfter(y.item);if(w!=0){y.item.updateDepthClass(t);x.shiftDepthClass(w)}y.item.updateParentMenuItemDBId();a()},change:function(x,w){if(!w.placeholder.parent().hasClass("menu")){w.placeholder.appendTo(h)}v(w)},sort:function(x,w){var y=j(w.helper.offset().left-q);if(yn){y=n}}if(y!=t){o(w,y)}},});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)>c)?c:z}else{n=0}}function o(w,x){w.placeholder.updateDepthClass(x,t);t=x}},attachMenuEditListeners:function(){var n=this;d("#update-nav-menu").bind("click",function(o){if(o.target&&o.target.className){if(-1!=o.target.className.indexOf("item-edit")){return n.eventOnClickEditLink(o.target)}else{if(-1!=o.target.className.indexOf("menu-delete")){return n.eventOnClickMenuDelete(o.target)}else{if(-1!=o.target.className.indexOf("item-delete")){return n.eventOnClickMenuItemDelete(o.target)}else{if(-1!=o.target.className.indexOf("item-close")){return n.eventOnClickCloseLink(o.target)}}}}}})},setupInputWithDefaultTitle:function(){var n="input-with-default-title";d("."+n).each(function(){var q=d(this),p=q.attr("title"),o=q.val();q.data(n,p);if(""==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("").removeClass(n)}}).blur(function(){var o=d(this);if(""==o.val()){o.addClass(n).val(o.data(n))}})},attachAddMenuItemListeners:function(){var n=d("#nav-menu-meta");n.find(".add-to-menu input").click(function(){d(this).trigger("wp-add-menu-item",[e.addMenuItemToBottom]);return false});n.find(".customlinkdiv").bind("wp-add-menu-item",function(p,o){e.addCustomLink(o)});n.find(".posttypediv, .taxonomydiv").bind("wp-add-menu-item",function(p,o){d(this).addSelectedToMenu(o)})},attachQuickSearchListeners:function(){var o=this,n=d("#nav-menu-meta");d("input.quick-search").each(function(p,q){o.setupQuickSearchEventListeners(q)});n.find(".quick-search-submit").click(function(){d(this).trigger("wp-quick-search");return false});n.find(".inside").children().bind("wp-quick-search",function(){o.quickSearch(d(this).attr("id"))})},quickSearch:function(v){var p=d("#"+v+" .quick-search").attr("name"),s=d("#"+v+" .quick-search").val(),u=d("#menu").val(),o=d("#menu-settings-column-nonce").val(),t={},r=this,n=function(){};n=r.processQuickSearchQueryResponse;t={action:"menu-quick-search","response-format":"markup",menu:u,"menu-settings-column-nonce":o,q:s,type:p};d.post(ajaxurl,t,function(q){n.call(r,q,t)})},addCustomLink:function(n){var p=d("#custom-menu-item-url").val(),o=d("#custom-menu-item-name").val();n=n||e.addMenuItemToBottom;if(""==p||"http://"==p){return false}d(".customlinkdiv img.waiting").show();this.addLinkToMenu(p,o,n,function(){d(".customlinkdiv img.waiting").hide();d("#custom-menu-item-name").val("").blur();d("#custom-menu-item-url").val("http://")})},addLinkToMenu:function(p,o,n,q){n=n||e.addMenuItemToBottom;q=q||function(){};e.addItemToMenu({"-1":{"menu-item-type":"custom","menu-item-url":p,"menu-item-title":o}},n,q)},addItemToMenu:function(p,n,r){var q=d("#menu").val(),o=d("#menu-settings-column-nonce").val();n=n||function(){};r=r||function(){};params={action:"add-menu-item",menu:q,"menu-settings-column-nonce":o,"menu-item":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(".add-home-link",".customlinkdiv").click(function(n){e.addLinkToMenu(navMenuL10n.homeurl,navMenuL10n.home,e.addMenuItemToTop,a);return false})},attachTabsPanelListeners:function(){d("#menu-settings-column").bind("click",function(s){var r,t,o,u,n,q,p;if(s.target&&s.target.className&&-1!=s.target.className.indexOf("nav-tab-link")){o=/#(.*)$/.exec(s.target.href);u=d(s.target).parents(".inside").first()[0];n=u?u.getElementsByTagName("input"):[];q=n.length;while(q--){n[q].checked=false}d(".tabs-panel",u).each(function(){if(this.className){this.className=this.className.replace("tabs-panel-active","tabs-panel-inactive")}});d(".tabs",u).each(function(){this.className=this.className.replace("tabs","")});s.target.parentNode.className+=" tabs";if(o&&o[1]){t=document.getElementById(o[1]);if(t){t.className=t.className.replace("tabs-panel-inactive","tabs-panel-active")}}return false}else{if(s.target&&s.target.className&&-1!=s.target.className.indexOf("select-all")){r=/#(.*)$/.exec(s.target.href);if(r&&r[1]){p=d("#"+r[1]+" .tabs-panel-active .menu-item-title input");if(p.length===p.filter(":checked").length){p.removeAttr("checked")}else{p.attr("checked","checked")}return false}}}})},initTabManager:function(){var s=d(".nav-tabs-wrapper"),t=s.children(".nav-tabs"),r=t.children(".nav-tab-active"),w=t.children(".nav-tab"),p=0,x,q,v,o,u=false;function n(){q=s.offset().left;x=q+s.width();r.makeTabVisible()}d.fn.extend({makeTabVisible:function(){var z=this.eq(0),A,y;if(!z.length){return}A=z.offset().left;y=A+z.outerWidth();if(y>x){t.animate({"margin-left":"+="+(x-y)+"px"},"fast")}else{if(A=q)?true:false}});w.each(function(){p+=d(this).outerWidth(true)});if(p<=s.width()-t.css("padding-left").slice(0,-2)-t.css("padding-right").slice(0,-2)){return}t.css({"margin-right":(-1*p)+"px",padding:0});v=d('');o=d('');s.wrap('