Make WordPress Core

Ticket #13220: 13220.adopt.wp.js.standard.1.patch

File 13220.adopt.wp.js.standard.1.patch, 10.3 KB (added by koopersmith, 14 years ago)
  • wp-admin/js/nav-menu.dev.js

     
    88 * @subpackage Administration
    99 */
    1010
    11 var wpNavMenu, WPNavMenuHandler = function ($) {
    12         var autoCompleteData = {},
     11var wpNavMenu;
    1312
    14         menuItemDepthPerLevel = 30, // Do not use directly. Use depthToPx and pxToDepth instead.
    15         globalMaxDepth = 11,
     13(function($) {
     14       
     15        var api = wpNavMenu = {
     16               
     17                options : {
     18                        menuItemDepthPerLevel : 30, // Do not use directly. Use depthToPx and pxToDepth instead.
     19                        globalMaxDepth : 11,
     20                },
     21               
     22                menuList : undefined,   // Set in init.
     23                targetList : undefined, // Set in init.
     24               
     25                autoCompleteData : {},
    1626
    17         formatAutocompleteResponse = function( resultRow, pos, total, queryTerm ) {
    18                 if ( resultRow && resultRow[0] ) {
    19                         var data = $.parseJSON(resultRow[0]);
    20                         if ( data.post_title ) {
    21                                 if ( data.ID && data.post_type )
    22                                         autoCompleteData[data.post_title] = {ID: data.ID, object_type: data.post_type};
    23                                 return data.post_title;
    24                         }
    25                 }
    26         },
    27 
    28         formatAutocompleteResult = function( resultRow, pos, total, queryTerm ) {
    29                 if ( resultRow && resultRow[0] ) {
    30                         var data = $.parseJSON(resultRow[0]);
    31                         if ( data.post_title )
    32                                 return data.post_title;
    33                 }
    34         },
    35 
    36         getListDataFromID = function(menuItemID, parentEl) {
    37                 if ( ! menuItemID )
    38                         return false;
    39                 parentEl = parentEl || document;
    40                 var fields = [
    41                         'menu-item-db-id',
    42                         'menu-item-object-id',
    43                         'menu-item-object',
    44                         'menu-item-parent-id',
    45                         'menu-item-position',
    46                         'menu-item-type',
    47                         'menu-item-append',
    48                         'menu-item-title',
    49                         'menu-item-url',
    50                         'menu-item-description',
    51                         'menu-item-attr-title',
    52                         'menu-item-target',
    53                         'menu-item-classes',
    54                         'menu-item-xfn'
    55                 ],
    56                 itemData = {},
    57                 inputs = parentEl.getElementsByTagName('input'),
    58                 i = inputs.length,
    59                 j;
    60 
    61                 while ( i-- ) {
    62                         j = fields.length;
    63                         while ( j-- ) {
    64                                 if (
    65                                         inputs[i] &&
    66                                         inputs[i].name &&
    67                                         'menu-item[' + menuItemID + '][' + fields[j] + ']' == inputs[i].name
    68                                 ) {
    69                                         itemData[fields[j]] = inputs[i].value;
    70                                 }
    71                         }
    72                 }
    73 
    74                 return itemData;
    75         },
    76 
    77         recalculateMenuItemPositions = function() {
    78                 menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } );
    79         },
    80 
    81         depthToPx = function(depth) {
    82                 return depth * menuItemDepthPerLevel;
    83         },
    84 
    85         pxToDepth = function(px) {
    86                 return Math.floor(px / menuItemDepthPerLevel);
    87         },
    88 
    89         menuList, targetList, api;
    90 
    91         return api = {
    92 
    9327                // Functions that run on init.
    9428                init : function() {
    95                         menuList = $('#menu-to-edit');
    96                         targetList = menuList;
     29                        api.menuList = $('#menu-to-edit');
     30                        api.targetList = api.menuList;
    9731
    9832                        this.jQueryExtensions();
    9933                       
     
    10741
    10842                        this.attachHomeLinkListener();
    10943
    110                         if( menuList.length ) // If no menu, we're in the + tab.
     44                        if( api.menuList.length ) // If no menu, we're in the + tab.
    11145                                this.initSortables();
    11246
    11347                        this.initToggles();
     
    12155                        // jQuery extensions
    12256                        $.fn.extend({
    12357                                menuItemDepth : function() {
    124                                         return pxToDepth( this.eq(0).css('margin-left').slice(0, -2) );
     58                                        return api.pxToDepth( this.eq(0).css('margin-left').slice(0, -2) );
    12559                                },
    12660                                updateDepthClass : function(current, prev) {
    12761                                        return this.each(function(){
     
    199133                                                $(checkboxes).each(function(){
    200134                                                        var listItemDBIDMatch = re.exec( $(this).attr('name') ),
    201135                                                                listItemDBID = 'undefined' == typeof listItemDBIDMatch[1] ? 0 : parseInt(listItemDBIDMatch[1], 10);
    202                                                         menuItems[listItemDBID] = getListDataFromID(listItemDBID);
     136                                                        menuItems[listItemDBID] = api.getListDataFromID(listItemDBID);
    203137                                                });
    204138                                                // Add the items
    205139                                                api.addItemToMenu(menuItems, processMethod, function(){
     
    225159                                $('.field-' + field).addClass('hidden-field');
    226160                        }
    227161                        // hide fields
    228                         menuList.hideAdvancedMenuItemFields();
     162                        api.menuList.hideAdvancedMenuItemFields();
    229163                },
    230164
    231165                initSortables : function() {
    232166                        var currentDepth = 0, originalDepth, minDepth, maxDepth,
    233                                 menuLeft = menuList.offset().left,
     167                                menuLeft = api.menuList.offset().left,
    234168                                newItem, transport;
    235169
    236                         menuList.sortable({
     170                        api.menuList.sortable({
    237171                                handle: '.menu-item-handle',
    238172                                placeholder: 'sortable-placeholder',
    239173                                start: function(e, ui) {
     
    269203                                                maxChildDepth = (depth > maxChildDepth) ? depth : maxChildDepth;
    270204                                        });
    271205                                        width = ui.helper.find('.menu-item-handle').outerWidth(); // Get original width
    272                                         width += depthToPx(maxChildDepth - originalDepth); // Account for children
     206                                        width += api.depthToPx(maxChildDepth - originalDepth); // Account for children
    273207                                        width -= 2; // Subtract 2 for borders
    274208                                        ui.placeholder.width(width);
    275209                                },
     
    287221                                        // Update the item data.
    288222                                        ui.item.updateParentMenuItemDBId();
    289223                                        // Update positions
    290                                         recalculateMenuItemPositions();
     224                                        api.recalculateMenuItemPositions();
    291225                                },
    292226                                change: function(e, ui) {
    293227                                        // Make sure the placeholder is inside the menu.
    294228                                        // Otherwise fix it, or we're in trouble.
    295229                                        if( ! ui.placeholder.parent().hasClass('menu') )
    296                                                 ui.placeholder.appendTo(menuList);
     230                                                ui.placeholder.appendTo(api.menuList);
    297231
    298232                                        updateDepthRange(ui);
    299233                                },
    300234                                sort: function(e, ui) {
    301                                         var depth = pxToDepth(ui.helper.offset().left - menuLeft);
     235                                        var depth = api.pxToDepth(ui.helper.offset().left - menuLeft);
    302236                                        // Check and correct if depth is not within range.
    303237                                        if ( depth < minDepth ) depth = minDepth;
    304238                                        else if ( depth > maxDepth ) depth = maxDepth;
    305239
    306240                                        if( depth != currentDepth )
    307241                                                updateCurrentDepth(ui, depth);
    308                                 },
     242                                }
    309243                        });
    310244
    311245                        function updateDepthRange(ui) {
     
    319253                                minDepth = (next.length) ? next.menuItemDepth() : 0;
    320254
    321255                                if( prev.length )
    322                                         maxDepth = ( (depth = prev.menuItemDepth() + 1) > globalMaxDepth ) ? globalMaxDepth : depth;
     256                                        maxDepth = ( (depth = prev.menuItemDepth() + 1) > api.options.globalMaxDepth ) ? api.options.globalMaxDepth : depth;
    323257                                else
    324258                                        maxDepth = 0;
    325259                        }
     
    492426                 * @param object req The request arguments.
    493427                 */
    494428                addMenuItemToBottom : function( menuMarkup, req ) {
    495                         $(menuMarkup).hideAdvancedMenuItemFields().appendTo( targetList );
     429                        $(menuMarkup).hideAdvancedMenuItemFields().appendTo( api.targetList );
    496430                },
    497431       
    498432                addMenuItemToTop : function( menuMarkup, req ) {
    499                         $(menuMarkup).hideAdvancedMenuItemFields().prependTo( targetList );
     433                        $(menuMarkup).hideAdvancedMenuItemFields().prependTo( api.targetList );
    500434                },
    501435       
    502436                attachHomeLinkListener : function() {
    503437                        $('.add-home-link', '.customlinkdiv').click(function(e) {
    504                                 api.addLinkToMenu( navMenuL10n.homeurl, navMenuL10n.home, api.addMenuItemToTop, recalculateMenuItemPositions );
     438                                api.addLinkToMenu( navMenuL10n.homeurl, navMenuL10n.home, api.addMenuItemToTop, api.recalculateMenuItemPositions );
    505439                                return false;
    506440                        });
    507441                },
     
    666600                        $(el).autocomplete( ajaxurl + '?action=menu-quick-search&type=' + el.name,
    667601                                {
    668602                                        delay: 500,
    669                                         formatItem: formatAutocompleteResponse,
    670                                         formatResult: formatAutocompleteResult,
     603                                        formatItem: api.formatAutocompleteResponse,
     604                                        formatResult: api.formatAutocompleteResult,
    671605                                        minchars: 2,
    672606                                        multiple: false
    673607                                }
    674608                        ).bind('blur', function(e) {
    675                                 var changedData = autoCompleteData[this.value],
     609                                var changedData = api.autoCompleteData[this.value],
    676610                                inputEl = this;
    677611                                if ( changedData ) {
    678612                                        $.post(
     
    680614                                                changedData,
    681615                                                function(r) {
    682616                                                        that.processQuickSearchQueryResponse.call(that, r, changedData);
    683                                                         autoCompleteData[inputEl.value] = false;
     617                                                        api.autoCompleteData[inputEl.value] = false;
    684618                                                }
    685619                                        );
    686620                                }
     
    820754                        el.addClass('deleting').fadeOut( 350 , function() {
    821755                                el.remove();
    822756                                children.shiftDepthClass(-1).updateParentMenuItemDBId();
    823                                 recalculateMenuItemPositions();
     757                                api.recalculateMenuItemPositions();
    824758                                that.checkForEmptyMenu();
    825759                        });
    826760                },
    827761       
    828762                checkForEmptyMenu : function() {
    829                         if( menuList.children().length ) return;
    830                         menuList.height(80).one('sortstop', function(){
     763                        if( api.menuList.children().length ) return;
     764                        api.menuList.height(80).one('sortstop', function(){
    831765                                $(this).height('auto');
    832766                        });
     767                },
     768               
     769                formatAutocompleteResponse : function( resultRow, pos, total, queryTerm ) {
     770                        if ( resultRow && resultRow[0] ) {
     771                                var data = $.parseJSON(resultRow[0]);
     772                                if ( data.post_title ) {
     773                                        if ( data.ID && data.post_type )
     774                                                api.autoCompleteData[data.post_title] = {ID: data.ID, object_type: data.post_type};
     775                                        return data.post_title;
     776                                }
     777                        }
     778                },
     779
     780                formatAutocompleteResult : function( resultRow, pos, total, queryTerm ) {
     781                        if ( resultRow && resultRow[0] ) {
     782                                var data = $.parseJSON(resultRow[0]);
     783                                if ( data.post_title )
     784                                        return data.post_title;
     785                        }
     786                },
     787
     788                getListDataFromID : function(menuItemID, parentEl) {
     789                        if ( ! menuItemID )
     790                                return false;
     791                        parentEl = parentEl || document;
     792                        var fields = [
     793                                'menu-item-db-id',
     794                                'menu-item-object-id',
     795                                'menu-item-object',
     796                                'menu-item-parent-id',
     797                                'menu-item-position',
     798                                'menu-item-type',
     799                                'menu-item-append',
     800                                'menu-item-title',
     801                                'menu-item-url',
     802                                'menu-item-description',
     803                                'menu-item-attr-title',
     804                                'menu-item-target',
     805                                'menu-item-classes',
     806                                'menu-item-xfn'
     807                        ],
     808                        itemData = {},
     809                        inputs = parentEl.getElementsByTagName('input'),
     810                        i = inputs.length,
     811                        j;
     812
     813                        while ( i-- ) {
     814                                j = fields.length;
     815                                while ( j-- ) {
     816                                        if (
     817                                                inputs[i] &&
     818                                                inputs[i].name &&
     819                                                'menu-item[' + menuItemID + '][' + fields[j] + ']' == inputs[i].name
     820                                        ) {
     821                                                itemData[fields[j]] = inputs[i].value;
     822                                        }
     823                                }
     824                        }
     825
     826                        return itemData;
     827                },
     828
     829                recalculateMenuItemPositions : function() {
     830                        api.menuList.find('.menu-item-data-position').val( function(index) { return index + 1; } );
     831                },
     832
     833                depthToPx : function(depth) {
     834                        return depth * api.options.menuItemDepthPerLevel;
     835                },
     836
     837                pxToDepth : function(px) {
     838                        return Math.floor(px / api.options.menuItemDepthPerLevel);
    833839                }
    834         }
    835 }
    836840
    837 wpNavMenu = new WPNavMenuHandler(jQuery);
     841        };
    838842
    839 jQuery(function() {
    840         wpNavMenu.init();
    841 });
     843        $(document).ready(function(){ wpNavMenu.init(); });
     844
     845})(jQuery);