WordPress.org

Make WordPress Core

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

File 13220.adopt.wp.js.standard.1.2.patch, 10.3 KB (added by koopersmith, 4 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);