Make WordPress Core

Changeset 13512


Ignore:
Timestamp:
02/28/2010 08:00:49 PM (15 years ago)
Author:
ryan
Message:

Menu enhancements. Props ptahdunbar. fixes #11817

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/css/nav-menu.css

    r13473 r13512  
    1 #menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{color:#f00;text-decoration:underline;font-size:11px;float:left;margin-top:5px;}.submitdelete:hover{background-color:#F00;color:#fff;}.save{float:right;}.button-controls{float:left;}.add-to-menu{float:right;}#create-menu-name{width:159px;}#available-links{margin:15px 0 0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}#menu-item-url,#menu-item-name{float:right;width:220px;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{margin:0;}.list dt{display:none;margin:0;overflow:hidden;margin-bottom:5px;}.list li .item-title{cursor:pointer;display:block;}.list li .item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .item-title{margin-left:14px;}.list li ul li ul li .item-title{margin-left:28px;}.list li ul li ul li ul li .item-title{margin-left:42px;}.list li ul li ul li ul li ul li .item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}#menu ul{width:100%;}#menu li{margin:0;}#menu li dl dt{-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border:1px solid #E6E6E6;position:relative;padding-left:10px;background-color:#f1f1f1;height:35px;line-height:35px;}#menu li dl dt:hover{cursor:move;}#menu li .item-title{background:url(../images/ico-arrow.png) no-repeat 4px 5px;background-position:center left;padding-left:15px;}#menu li ul li{margin-left:20px;opacity:.7;}#menu li ul li ul li{opacity:.9;}#menu li ul li ul li ul li{opacity:.9;}#menu li ul li ul li ul li ul li{opacity:.95;}.dropzone{height:7px;margin:3px 0 3px 0;}.ui-draggable-dragging{width:600px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:15px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-delete:hover{color:#f00;}#menu-item-settings{display:none;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.hide{display:none;}
     1#menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{color:#f00;text-decoration:underline;font-size:11px;float:left;margin-top:5px;}.submitdelete:hover{background-color:#F00;color:#fff;}.save{float:right;}.button-controls{float:left;}.add-to-menu{float:right;}#create-menu-name{width:159px;}#available-links{margin:15px 0 0;}#available-links dt{display:block;}#add-custom-link .howto{font-size:11px;}#add-custom-link label span{display:block;float:left;margin-top:5px;padding-right:5px;}#menu-item-url,#menu-item-name{float:right;width:220px;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;}.list-container{max-height:200px;overflow-y:auto;padding:10px 10px 5px;border:1px solid #DFDFDF;-moz-border-radius:4px;}.postbox p.submit{margin-bottom:0;}.list li{display:none;margin:0;margin-bottom:5px;}.list li .item-title{cursor:pointer;display:block;}.list li .item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .item-title{margin-left:14px;}.list li ul li ul li .item-title{margin-left:28px;}.list li ul li ul li ul li .item-title{margin-left:42px;}.list li ul li ul li ul li ul li .item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .item-title{margin-left:112px;}#menu-container .inside{padding-bottom:10px;}.menu ul{width:100%;}.menu li{margin:0;}.menu li dl dt{-webkit-border-bottom-left-radius:6px;-webkit-border-bottom-right-radius:6px;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:6px;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top-left-radius:6px;border-top-right-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-bottomright:6px;-moz-border-radius-topleft:6px;-moz-border-radius-topright:6px;border:1px solid #E6E6E6;position:relative;padding-left:10px;background-color:#f1f1f1;height:35px;line-height:35px;}.menu li dl dt:hover{cursor:move;}.menu li .item-title{background:url(../images/ico-arrow.png) no-repeat 4px 5px;background-position:center left;padding-left:15px;}.menu li ul li{margin-left:20px;opacity:.7;}.menu li ul li ul li{opacity:.9;}.menu li ul li ul li ul li{opacity:.9;}.menu li ul li ul li ul li ul li{opacity:.95;}.dropzone{height:7px;margin:3px 0 3px 0;}.ui-draggable-dragging{width:600px;}.item-type{text-transform:uppercase;font-size:11px;color:#999;padding-right:10px;}.item-controls{font-size:11px;position:absolute;right:15px;top:-1px;}.item-controls a{text-decoration:none;}.item-controls a:hover{cursor:pointer;}.item-controls .item-delete:hover{color:#f00;}#menu-item-settings{display:none;}#cancel-save{cursor:pointer;}#cancel-save:hover{color:#fff!important;}#update-menu-item{color:#fff!important;}#update-menu-item:hover,#update-menu-item:active,#update-menu-item:focus{color:#eaf2fa!important;border-color:#13455b!important;}.hide{display:none;}
  • trunk/wp-admin/css/nav-menu.dev.css

    r13473 r13512  
    2323.add-to-menu { float: right; }
    2424
    25 /* CSS for switching the columns *//*
     25/* CSS for switching the main columns *//*
    2626#menu-settings-column { clear: none; float: left; }
    2727#menu-management #post-body { float: right; margin-left: -340px; margin-right: 0px; }
     
    4949
    5050/* Listings */
    51 .list li { margin: 0; }
    52 .list dt { display: none; margin: 0; overflow: hidden; margin-bottom: 5px; }
     51.list li { display: none; margin: 0; margin-bottom: 5px; }
    5352
    5453.list li .item-title { cursor: pointer; display: block; }
     
    6766#menu-container .inside { padding-bottom: 10px; }
    6867
    69 #menu ul { width: 100%; }
    70 #menu li { margin: 0; }
    71 #menu li dl dt { -webkit-border-bottom-left-radius: 6px; -webkit-border-bottom-right-radius: 6px; -webkit-border-top-left-radius: 6px; -webkit-border-top-right-radius: 6px; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; border-top-left-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomleft: 6px; -moz-border-radius-bottomright: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-topright: 6px; border: 1px solid #E6E6E6;position: relative; padding-left:10px; background-color: #f1f1f1; height: 35px; line-height: 35px; }
    72 #menu li dl dt:hover { cursor: move; }
     68.menu ul { width: 100%; }
     69.menu li { margin: 0; }
     70.menu li dl dt { -webkit-border-bottom-left-radius: 6px; -webkit-border-bottom-right-radius: 6px; -webkit-border-top-left-radius: 6px; -webkit-border-top-right-radius: 6px; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; border-top-left-radius: 6px; border-top-right-radius: 6px; -moz-border-radius-bottomleft: 6px; -moz-border-radius-bottomright: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-topright: 6px; border: 1px solid #E6E6E6;position: relative; padding-left:10px; background-color: #f1f1f1; height: 35px; line-height: 35px; }
     71.menu li dl dt:hover { cursor: move; }
    7372
    74 #menu li .item-title { background: url(../images/ico-arrow.png) no-repeat 4px 5px; background-position: center left; padding-left: 15px; }
    75 #menu li ul li { margin-left: 20px; opacity: .7;}
    76 #menu li ul li ul li { opacity: .9;}
    77 #menu li ul li ul li ul li { opacity: .9;}
    78 #menu li ul li ul li ul li ul li { opacity: .95; }
     73.menu li .item-title { background: url(../images/ico-arrow.png) no-repeat 4px 5px; background-position: center left; padding-left: 15px; }
     74.menu li ul li { margin-left: 20px; opacity: .7;}
     75.menu li ul li ul li { opacity: .9;}
     76.menu li ul li ul li ul li { opacity: .9;}
     77.menu li ul li ul li ul li ul li { opacity: .95; }
    7978
    8079/* Drag and Drop */
  • trunk/wp-admin/includes/nav-menu.php

    r13473 r13512  
    11<?php
    22
    3 /*-----------------------------------------------------------------------------------*/
    4 /* Custom Navigation Functions */
    5 /* wp_custom_navigation_output() displays the menu in the back/frontend
    6 /* wp_custom_nav_get_pages()
    7 /* wp_custom_nav_get_categories()
    8 /* wp_custom_navigation_default_sub_items() is a recursive sub menu item function
    9 /*-----------------------------------------------------------------------------------*/
    10 
    11 // Outputs All Pages and Sub Items
    12 function wp_nav_menu_get_pages($counter, $type) {
    13 
     3/**
     4 * Displays a list of links and thier sub items.
     5 *
     6 * @since 3.0.0
     7 *
     8 * @param string $counter
     9 * @param string $context
     10 */
     11function wp_nav_menu_get_custom_links( $counter, $context ) {
     12    $available_links = new WP_Query(  );
     13   
     14    $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom' );
     15    $link_objects = new WP_Query( $args );
     16   
     17    $items_counter = $counter;
     18
     19    if ( !$link_objects->posts ) {
     20        _e('Not Found');
     21        return $items_counter;
     22    }
     23   
     24    // Display Loop
     25    foreach ( $link_objects->posts as $item ) {
     26        if ( 0 == $item->parent ) {
     27            $item = wp_setup_nav_menu_item( $item, 'item', $items_counter );
     28           
     29            switch ( $context ) {
     30                case 'menu':
     31                    ?>
     32                    <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>">
     33                        <?php
     34                            echo wp_get_nav_menu_item( $item, 'menu' );
     35                            $parentli = $item->ID;
     36                            $items_counter++;
     37                            $items_counter = wp_nav_menu_sub_items( $item->ID, $items_counter, $parentli, 'categories', 'menu' );
     38                        ?>
     39                    </li>
     40                    <?php
     41                    break;
     42               
     43                case 'default':
     44                    ?>
     45                    <li>
     46                        <?php
     47                            echo wp_get_nav_menu_item( $item, 'default' );
     48                            $parentli = $item->ID;
     49                            $items_counter++;
     50                            $items_counter = wp_nav_menu_sub_items( $item->ID, $items_counter, $parentli, 'categories', 'default' );
     51                        ?>
     52                    </li>
     53                    <?php
     54                    break;
     55            }
     56        }
     57    }
     58    return $items_counter;
     59}
     60
     61/**
     62 * Displays a list of pages and thier sub items.
     63 *
     64 * @since 3.0.0
     65 *
     66 * @param string $counter
     67 * @param string $context
     68 */
     69function wp_nav_menu_get_pages( $counter, $context ) {
    1470    $pages_args = array(
    1571            'child_of' => 0,
     
    2783            'offset' => 0 );
    2884
    29     //GET all pages
    30     $pages_array = get_pages($pages_args);
     85    // Get all pages
     86    $pages_array = get_pages( $pages_args );
    3187
    3288    $items_counter = $counter;
     
    4197    foreach ( $pages_array as $post ) {
    4298        if ( $post->post_parent == 0 ) {
    43             $post = wp_setup_nav_menu_item($post, 'page', $items_counter);
    44             if ( $type == 'menu' ) {
    45                 ?>
    46 
     99            $post = wp_setup_nav_menu_item( $post, 'page', $items_counter );
     100            if ( $context == 'menu' ) {
     101                ?>
    47102                <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>">
    48103                    <?php
    49                         wp_print_nav_menu_item($post, 'menu', $items_counter);
     104                        echo wp_get_nav_menu_item( $post, 'menu', $items_counter );
    50105                        $parentli = $post->ID;
    51106                        $items_counter++;
    52                         $items_counter = wp_custom_navigation_default_sub_items($post->ID, $items_counter, $parentli, 'pages', 'menu');
    53                     ?>
    54                 </li>
    55 
    56                 <?php
    57             } elseif ( $type == 'default' ) {
     107                        $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'menu' );
     108                    ?>
     109                </li>
     110                <?php
     111            } elseif ( $context == 'default' ) {
    58112                // Sidebar Menu
    59113                ?>
    60114                 <li>
    61115                    <?php
    62                         wp_print_nav_menu_item($post, 'default');
     116                        echo wp_get_nav_menu_item( $post, 'default' );
    63117                        $parentli = $post->ID;
    64118                        $items_counter++;
    65                         $items_counter = wp_nav_menu_sub_items($post->ID, $items_counter, $parentli, 'pages', 'default');
     119                        $items_counter = wp_nav_menu_sub_items( $post->ID, $items_counter, $parentli, 'pages', 'default' );
    66120                     ?>
    67121                </li>
    68 
    69                 <?php
    70             }
    71         }
    72     }
    73 
     122                <?php
     123            }
     124        }
     125    }
    74126    return $items_counter;
    75127}
    76128
    77 // Outputs All Categories and Sub Items
    78 function wp_nav_menu_get_categories($counter, $type) {
    79 
     129/**
     130 * Displays a list of categories and thier sub items.
     131 *
     132 * @since 3.0.0
     133 *
     134 * @param string $counter
     135 * @param string $context
     136 */
     137function wp_nav_menu_get_categories( $counter, $context ) {
    80138    $category_args = array(
    81139            'type'                     => 'post',
     
    94152
    95153    // Get all categories
    96     $categories_array = get_categories($category_args);
     154    $categories_array = get_categories( $category_args );
    97155
    98156    if ( !$categories_array ) {
     
    104162    foreach ( $categories_array as $cat_item ) {
    105163        if ( $cat_item->parent == 0 ) {
    106             $cat_item = wp_setup_nav_menu_item($cat_item, 'category', $items_counter);
     164            $cat_item = wp_setup_nav_menu_item( $cat_item, 'category', $items_counter );
    107165            // Custom Menu
    108             if ( $type == 'menu' ) {
    109                 ?>
    110 
     166            if ( $context == 'menu' ) {
     167                ?>
    111168                <li id="menu-<?php echo $items_counter; ?>" value="<?php echo $items_counter; ?>">
    112169                    <?php
    113                         wp_print_nav_menu_item($cat_item, 'menu');
     170                        echo wp_get_nav_menu_item($cat_item, 'menu');
    114171                        $parentli = $cat_item->cat_ID;
    115172                        $items_counter++;
    116                         $items_counter = wp_nav_menu_sub_items($cat_item->cat_ID, $items_counter, $parentli, 'categories', 'menu');
    117                     ?>
    118 
    119                 </li>
    120 
    121                 <?php
    122             } elseif ( $type == 'default' ) {
     173                        $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'menu' );
     174                    ?>
     175                </li>
     176                <?php
     177            } elseif ( $context == 'default' ) {
    123178                // Sidebar Menu
    124179                ?>
    125180                <li>
    126181                    <?php
    127                         wp_print_nav_menu_item($cat_item, 'default');
     182                        echo wp_get_nav_menu_item( $cat_item, 'default' );
    128183                        $parentli = $cat_item->cat_ID;
    129184                        $items_counter++;
    130                         $items_counter = wp_nav_menu_sub_items($cat_item->cat_ID, $items_counter, $parentli, 'categories', 'default');
    131                     ?>
    132 
    133                 </li>
    134 
    135                 <?php
    136             }
    137         }
    138     }
    139 
     185                        $items_counter = wp_nav_menu_sub_items( $cat_item->cat_ID, $items_counter, $parentli, 'categories', 'default' );
     186                    ?>
     187                </li>
     188                <?php
     189            }
     190        }
     191    }
    140192    return $items_counter;
    141193}
    142194
    143 //RECURSIVE Sub Menu Items of default categories and pages
    144 function wp_nav_menu_sub_items($childof, $items_counter, $parentli, $type, $output_type) {
    145 
     195/**
     196 * Recursive function that gets sub menu items.
     197 *
     198 * @since 3.0.0
     199 *
     200 * @param string $childof
     201 * @param string $items_counter
     202 * @param string $parentli
     203 * @param string $context
     204 * @param string $output_type
     205 */
     206function wp_nav_menu_sub_items( $childof, $items_counter, $parentli, $context, $output_type ) {
    146207    $counter = $items_counter;
    147208
     
    160221    }
    161222
    162     if ( $type == 'categories' ) {
     223    if ( $context == 'categories' ) {
    163224        // Get Sub Category Items
    164225        $item_type = 'category';
    165226        $sub_array = get_categories($sub_args);
    166     } elseif ($type == 'pages') {
     227    } elseif ($context == 'pages') {
    167228        // Get Sub Page Items
    168229        $item_type = 'page';
     
    173234    }
    174235
    175 
    176236    if ( $sub_array ) {
    177237        ?>
    178         <ul id="sub-menu-<?php echo $type ?>">
    179 
     238        <ul id="sub-menu-<?php echo $context ?>">
    180239        <?php
    181240        // Display Loop
    182241        foreach ( $sub_array as $sub_item ) {
    183             $sub_item = wp_setup_nav_menu_item($sub_item, $item_type, $counter);
    184 
     242            $sub_item = wp_setup_nav_menu_item( $sub_item, $item_type, $counter );
    185243            if ( $output_type == 'menu' ) {
    186244                ?>
    187245                <li id="menu-<?php echo $counter; ?>" value="<?php echo $counter; ?>">
    188246                    <?php
    189                         wp_print_nav_menu_item($sub_item, 'menu');
     247                        echo wp_get_nav_menu_item( $sub_item, 'menu' );
    190248                        $counter++;
    191                         $counter = wp_nav_menu_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'menu');
    192                     ?>
    193 
     249                        $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'menu' );
     250                    ?>
    194251                </li>
    195252                <?php
     
    199256                <li>
    200257                    <?php
    201                         wp_print_nav_menu_item($sub_item, 'default');
     258                        echo wp_get_nav_menu_item( $sub_item, 'default' );
    202259                        //$counter++;
    203                         $counter = wp_nav_menu_sub_items($sub_item->ID, $counter, $sub_item->ID, $type, 'default');
     260                        $counter = wp_nav_menu_sub_items( $sub_item->ID, $counter, $sub_item->ID, $context, 'default' );
    204261                    ?>
    205262                </li>
     
    209266        }
    210267        ?>
    211 
    212268        </ul>
    213 
    214269    <?php
    215270    }
    216 
    217271    return $counter;
    218272}
    219 /*
    220 function wp_nav_menu_setup($override = false) {
    221     // Custom Navigation Menu Setup
    222 
    223     // Override for menu descriptions
    224     update_option('wp_settings_nav_menu_advanced_options', 'yes');
    225 
    226     $menus = wp_get_nav_menus();
    227     if ( !empty( $menus ) ) {
    228         foreach ( $menus as $menu ) {
    229             wp_delete_nav_menu( $menu->term_id );
    230         }
    231     }
    232 
    233     wp_create_nav_menu( __('Main') );
    234 }
    235 /**/
    236273?>
  • trunk/wp-admin/js/nav-menu-default-items.dev.js

    r13473 r13512  
    1414jQuery(document).ready(function($){
    1515   
     16    wp_drag_and_drop();
     17   
     18    wp_update_post_data();
     19   
    1620    // Handle Save Button Clicks
    1721    $('#save_menu').click(function(){
    18         wp_update_post_data();
     22        return wp_update_post_data();
    1923    });
    2024       
     
    3135    // Edit menu item
    3236    $('#menu-container .item-edit').click(function(){
    33         wp_edit_menu_item( $(this).attr('value') );
     37        return wp_edit_menu_item( $(this).attr('value') );
    3438    });
    3539   
    3640    // Delete menu item
    3741    $('#menu-container .item-delete').live( 'click', function(){
    38         wp_remove_menu_item( $(this).attr('value') );
     42        return wp_remove_menu_item( $(this).attr('value') );
    3943    });
    4044   
     
    5155    // Close thickbox
    5256    $('#cancel-save').click(function(){
    53         tb_remove();
     57        return tb_remove();
    5458    });
    5559   
     
    5963        $(this).offsetParent().find('.list-wrap').css( 'display','block' );
    6064        $(this).siblings('.quick-search').attr( 'value', '' );     
    61         $(this).offsetParent().find('.list-wrap dt').css( 'display', 'block' );
     65        $(this).offsetParent().find('.list-wrap li').css( 'display', 'block' );
    6266        $(this).hide();
    6367        $(this).siblings('.hide-all').show();
     
    6973        $(this).offsetParent().find('.list-wrap').css( 'display','none' );
    7074        $(this).siblings('.quick-search').attr( 'value', 'Search' );
    71         $(this).offsetParent().find('.list-wrap dt').css( 'display', 'none' );
     75        $(this).offsetParent().find('.list-wrap li').css( 'display', 'none' );
    7276        $(this).hide();
    7377        $(this).siblings('.show-all').show();
    7478    });
    7579   
     80    // Add menu item to queue
     81    $('.list input').click(function(){
     82       
     83        var item_type = jQuery(this).parent().siblings('.item-type').val();
     84        var item_title = jQuery(this).parent().siblings('.item-title').val();
     85        var item_url = jQuery(this).parent().siblings('.item-url').val();
     86        var item_id = jQuery(this).parent().siblings('.item-id').val();
     87        var item_parent_id = jQuery(this).parent().siblings('.item-parent-id').val();
     88        var item_description = jQuery(this).parent().siblings('.item-description').val();
     89       
     90        return wp_update_queue( $(this), item_type, item_title, item_url, item_id, item_parent_id, item_description );
     91    });
     92   
    7693    // Add queued menu items into the menu
    7794    $('.enqueue a').click(function(){
    78         wp_add_queued_items_to_menu(this);
     95        return wp_add_queued_items_to_menu(this);
    7996    });
    8097   
     
    83100        var link_url = $(this).offsetParent().find('#menu-item-url').val();
    84101        var link_name = $(this).offsetParent().find('#menu-item-name').val();
    85         var links = $(this).offsetParent().find('#available-links input:checked');
    86102       
    87         // If links are checked in the available links section, add them to the menu
    88         if ( links ) {
    89             for (var i = 0; i < links.length; i++) {
    90                 wp_add_item_to_menu( 'Custom', links[i].name, links[i].value, links[i].id.substring( 5, links[i].id.length ), 0, '' );
    91             };
    92            
    93             // Reset the checkboxes;
    94             $(links).attr('checked', false);
    95         };
     103        wp_add_queued_items_to_menu( this );
    96104               
    97105        // Don't save the link if it was left with it's default settings
     
    120128        }, 'json');
    121129    });
    122    
    123     // Add dropzones
    124     $('#menu li').prepend('<div class="dropzone"></div>');
    125 
    126     // Make menu items draggable
    127     $('#menu li').draggable({
    128             handle: ' > dl',
    129             opacity: .8,
    130             addClasses: false,
    131             helper: 'clone',
    132             zIndex: 100
    133     });
    134 
    135     // Make items droppable
    136     $('#menu dl, #menu .dropzone').droppable({
    137         accept: '#menu li',
    138         tolerance: 'pointer',
    139        
    140         drop: function(e, ui) {
    141             var li = $(this).parent();
    142             var child = !$(this).hasClass('dropzone');
    143            
    144             // Add UL to first child
    145             if ( child && li.children('ul').length == 0 ) {
    146                 li.append('<ul id="sub-menu" />');
    147             }
    148             // Make it draggable
    149             if ( child ) {
    150                 li.children('ul').append( ui.draggable );
    151             } else {
    152                 li.before( ui.draggable );
    153             }
    154 
    155             li.find('dl,.dropzone').css({ backgroundColor: '', borderColor: '' });
    156 
    157             var draggablevalue = ui.draggable.attr('value');
    158             var droppablevalue = li.attr('value');
    159            
    160             li.find('#menu-' + draggablevalue).find('#parent' + draggablevalue).val(droppablevalue);
    161             $(this).parent().find('dt').removeAttr('style');
    162            
    163             $(this).parent().find('div:first').removeAttr('style');
    164         },
    165        
    166         over: function() {
    167            
    168             if ( 'dropzone ui-droppable' == $(this).attr('class') ) {
    169                 // Add child
    170                 $(this).parent().find('dt:first').css('background', 'none').css('height', '50px');
    171                
    172             } else if ($(this).attr('class') == 'ui-droppable') {
    173                 // Add above
    174                 $(this).parent().find('dt:first').css('background', '#d8d8d8');
    175                
    176             } else {
    177                 // do nothing
    178             }
    179             var parentid = $(this).parent().attr('id');
    180         },
    181         out: function() {
    182             $(this).parent().find('dt').removeAttr('style');
    183             $(this).parent().find('div:first').removeAttr('style');
    184             $(this).filter('.dropzone').css({ borderColor: '' });
    185         },
    186         deactivate: function() {
    187             //
    188         }
    189     });
    190130});
  • trunk/wp-admin/js/nav-menu-default-items.js

    r13473 r13512  
    1 jQuery(document).ready(function($){$("#save_menu").click(function(){wp_update_post_data()});$(".quick-search").click(function(){$(this).attr("value","")});$(".quick-search-submit").click(function(){$(this).siblings(".quick-search").search()});$("#menu-container .item-edit").click(function(){wp_edit_menu_item($(this).attr("value"))});$("#menu-container .item-delete").live("click",function(){wp_remove_menu_item($(this).attr("value"))});$("#update-menu-item").click(function(){wp_update_menu_item();tb_remove();var id=$("#edit-item-id").val();$("#menu-"+id+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});$("#cancel-save").click(function(){tb_remove()});$(".show-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 10px;");$(this).offsetParent().find(".list-wrap").css("display","block");$(this).siblings(".quick-search").attr("value","");$(this).offsetParent().find(".list-wrap dt").css("display","block");$(this).hide();$(this).siblings(".hide-all").show()});$(".hide-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 0px;");$(this).offsetParent().find(".list-wrap").css("display","none");$(this).siblings(".quick-search").attr("value","Search");$(this).offsetParent().find(".list-wrap dt").css("display","none");$(this).hide();$(this).siblings(".show-all").show()});$(".enqueue a").click(function(){wp_add_queued_items_to_menu(this)});$("#add-custom-link .add-to-menu a").click(function(){var link_url=$(this).offsetParent().find("#menu-item-url").val();var link_name=$(this).offsetParent().find("#menu-item-name").val();var links=$(this).offsetParent().find("#available-links input:checked");if(links){for(var i=0;i<links.length;i++){wp_add_item_to_menu("Custom",links[i].name,links[i].value,links[i].id.substring(5,links[i].id.length),0,"")}$(links).attr("checked",false)}if("http://"==link_url||"Menu Item"==link_name){return}params={action:"add-menu-link",link_url:link_url,link_name:link_name,};$.post(ajaxurl,params,function(response){if(null==response||"-1"==response){return false}params.link_id=response;wp_add_item_to_menu("Custom",params.link_name,params.link_url,params.link_id,0,"")},"json")});$("#menu li").prepend('<div class="dropzone"></div>');$("#menu li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100});$("#menu dl, #menu .dropzone").droppable({accept:"#menu li",tolerance:"pointer",drop:function(e,ui){var li=$(this).parent();var child=!$(this).hasClass("dropzone");if(child&&li.children("ul").length==0){li.append('<ul id="sub-menu" />')}if(child){li.children("ul").append(ui.draggable)}else{li.before(ui.draggable)}li.find("dl,.dropzone").css({backgroundColor:"",borderColor:""});var draggablevalue=ui.draggable.attr("value");var droppablevalue=li.attr("value");li.find("#menu-"+draggablevalue).find("#parent"+draggablevalue).val(droppablevalue);$(this).parent().find("dt").removeAttr("style");$(this).parent().find("div:first").removeAttr("style")},over:function(){if("dropzone ui-droppable"==$(this).attr("class")){$(this).parent().find("dt:first").css("background","none").css("height","50px")}else{if($(this).attr("class")=="ui-droppable"){$(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var parentid=$(this).parent().attr("id")},out:function(){$(this).parent().find("dt").removeAttr("style");$(this).parent().find("div:first").removeAttr("style");$(this).filter(".dropzone").css({borderColor:""})},deactivate:function(){}})});
     1jQuery(document).ready(function($){wp_drag_and_drop();wp_update_post_data();$("#save_menu").click(function(){return wp_update_post_data()});$(".quick-search").click(function(){$(this).attr("value","")});$(".quick-search-submit").click(function(){$(this).siblings(".quick-search").search()});$("#menu-container .item-edit").click(function(){return wp_edit_menu_item($(this).attr("value"))});$("#menu-container .item-delete").live("click",function(){return wp_remove_menu_item($(this).attr("value"))});$("#update-menu-item").click(function(){wp_update_menu_item();tb_remove();var id=$("#edit-item-id").val();$("#menu-"+id+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});$("#cancel-save").click(function(){return tb_remove()});$(".show-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 10px;");$(this).offsetParent().find(".list-wrap").css("display","block");$(this).siblings(".quick-search").attr("value","");$(this).offsetParent().find(".list-wrap li").css("display","block");$(this).hide();$(this).siblings(".hide-all").show()});$(".hide-all").click(function(){$(this).offsetParent().find("#add-buttons-actions").attr("style","margin-bottom: 0px;");$(this).offsetParent().find(".list-wrap").css("display","none");$(this).siblings(".quick-search").attr("value","Search");$(this).offsetParent().find(".list-wrap li").css("display","none");$(this).hide();$(this).siblings(".show-all").show()});$(".list input").click(function(){var item_type=jQuery(this).parent().siblings(".item-type").val();var item_title=jQuery(this).parent().siblings(".item-title").val();var item_url=jQuery(this).parent().siblings(".item-url").val();var item_id=jQuery(this).parent().siblings(".item-id").val();var item_parent_id=jQuery(this).parent().siblings(".item-parent-id").val();var item_description=jQuery(this).parent().siblings(".item-description").val();return wp_update_queue($(this),item_type,item_title,item_url,item_id,item_parent_id,item_description)});$(".enqueue a").click(function(){return wp_add_queued_items_to_menu(this)});$("#add-custom-link .add-to-menu a").click(function(){var link_url=$(this).offsetParent().find("#menu-item-url").val();var link_name=$(this).offsetParent().find("#menu-item-name").val();wp_add_queued_items_to_menu(this);if("http://"==link_url||"Menu Item"==link_name){return}params={action:"add-menu-link",link_url:link_url,link_name:link_name,};$.post(ajaxurl,params,function(response){if(null==response||"-1"==response){return false}params.link_id=response;wp_add_item_to_menu("Custom",params.link_name,params.link_url,params.link_id,0,"")},"json")})});
  • trunk/wp-admin/js/nav-menu-dynamic-functions.dev.js

    r13473 r13512  
    2525
    2626/**
    27  * Removes a menu item from current menu
    28  *
    29  * @param int o - the id of the menu li to remove.
    30  */
    31 function wp_remove_menu_item( o ) {
    32     var todelete = document.getElementById('menu-' + o);
    33    
    34     if ( todelete ) {
    35         // Give some feedback to the user
    36         jQuery( todelete ).find('dt').each(function(){
    37             jQuery(this).animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { jQuery(this).parent().parent().remove() } } );
    38         });
    39        
    40         wp_update_post_data();
    41     }
    42 };
    43 
    44 /**
    4527 * Populate the thickbox window with the selected menu items
    4628 *
     
    4830 */
    4931function wp_edit_menu_item( id ) {
    50     console.log('wp_edit_menu_item');
    51    
     32    var itemType = jQuery('#item-type' + id).val();
    5233    var itemTitle = jQuery('#item-title' + id).val();
    5334    var itemURL = jQuery('#item-url' + id).val();
     
    5637    var itemDesc = jQuery('#item-description' + id).val();
    5738   
    58     console.log(id);
    59     console.log(itemTitle);
    60     console.log(itemURL);
    61     console.log(itemAttrTitle);
    62     console.log(itemTarget);
    63     console.log(itemDesc);
     39    // Disable the ability to edit the url for page and category items
     40    if ( 'page' == itemType || 'category' == itemType )
     41        jQuery( '#edit-item-url' ).attr('disabled', 'disabled' );
    6442   
    6543    // Populate the fields for thickbox
     
    8462    var itemDesc = jQuery('#edit-item-description').val();
    8563   
    86     console.log(id);
    87     console.log(itemTitle);
    88     console.log(itemURL);
    89     console.log(itemAttrTitle);
    90     console.log(itemTarget);
    91     console.log(itemDesc);
    92    
    9364    // update menu item settings   
    9465    jQuery('#menu-' + id).find('.item-title:first').html(itemTitle);
     
    10172
    10273/**
     74 * Removes a menu item from current menu
     75 *
     76 * @param int o - the id of the menu li to remove.
     77 */
     78function wp_remove_menu_item( o ) {
     79    var todelete = document.getElementById('menu-' + o);
     80   
     81    if ( todelete ) {
     82        // Give some feedback to the user
     83        jQuery( todelete ).find('dt').each(function(){
     84            jQuery(this).animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { jQuery(this).parent().parent().remove() } } );
     85        });
     86       
     87        wp_update_post_data();
     88    }
     89};
     90
     91/**
    10392 * Prepares menu items for POST
    10493 */
     
    10695    var i = 0;
    10796   
    108      jQuery('#menu li').each(function(i) {
     97     jQuery('.menu li').each(function(i) {
    10998        i = i + 1;
    11099        var j = jQuery(this).attr('value');
    111100
    112         jQuery(this).find('#position' + j).attr('value', i);
     101        jQuery(this).find('#item-position' + j).attr('value', i);
    113102        jQuery(this).attr('id','menu-' + i);
    114103        jQuery(this).attr('value', i);
    115104
    116         jQuery(this).find('#dbid' + j).attr('name','dbid' + i);
    117         jQuery(this).find('#dbid' + j).attr('id','dbid' + i);
    118 
    119         jQuery(this).find('#postmenu' + j).attr('name','postmenu' + i);
    120         jQuery(this).find('#postmenu' + j).attr('id','postmenu' + i);
    121 
    122         var p = jQuery(this).find('#parent' + j).parent().parent().parent().attr('value');
    123 
    124         jQuery(this).find('#parent' + j).attr('name','parent' + i);
    125         jQuery(this).find('#parent' + j).attr('id','parent' + i);
     105        jQuery(this).find('#item-dbid' + j).attr('name','item-dbid' + i);
     106        jQuery(this).find('#item-dbid' + j).attr('id','item-dbid' + i);
     107
     108        jQuery(this).find('#item-postmenu' + j).attr('name','item-postmenu' + i);
     109        jQuery(this).find('#item-postmenu' + j).attr('id','item-postmenu' + i);
     110
     111        var p = jQuery(this).find('#item-parent' + j).parent().parent().parent().attr('value');
     112
     113        jQuery(this).find('#item-parent' + j).attr('name','item-parent' + i);
     114        jQuery(this).find('#item-parent' + j).attr('id','item-parent' + i);
    126115       
    127116        if (p) {
     
    132121        }
    133122
    134         jQuery(this).find('#parent' + j).attr('value', p);
     123        jQuery(this).find('#item-parent' + j).attr('value', p);
    135124
    136125        jQuery(this).find('#item-title' + j).attr('name','item-title' + i);
     
    149138        jQuery(this).find('#item-target' + j).attr('id','item-target' + i);
    150139
    151         jQuery(this).find('#position' + j).attr('name', 'position' + i);
    152         jQuery(this).find('#position' + j).attr('id', 'position' + i);
    153 
    154         jQuery(this).find('#linktype' + j).attr('name', 'linktype' + i);
    155         jQuery(this).find('#linktype' + j).attr('id', 'linktype' + i);
     140        jQuery(this).find('#item-position' + j).attr('name', 'item-position' + i);
     141        jQuery(this).find('#item-position' + j).attr('id', 'item-position' + i);
     142
     143        jQuery(this).find('#item-type' + j).attr('name', 'item-type' + i);
     144        jQuery(this).find('#item-type' + j).attr('id', 'item-type' + i);
    156145
    157146        jQuery('#li-count').attr( 'value', i );
     
    170159 * @param string itemdescription - the description of the menu item.
    171160 */
    172 function wp_add_item_to_menu( additemtype, itemtext, itemurl, itemid, itemparentid, itemdescription ) {
    173     var inputvaluevarname = '';
    174     var inputvaluevarurl = '';
    175     var inputitemid = '';
    176     var inputparentid= '';
    177     var inputdescription = '';
     161function wp_add_item_to_menu( item_type, item_title, item_url, item_id, item_parent_id, item_description ) {
    178162    var randomnumber = wp_get_unique_menu_id();
    179 
    180     inputvaluevarname = htmlentities(itemtext.toString());
    181     inputvaluevarurl = itemurl.toString();
    182     inputitemid = itemid;
    183     inputparentid = itemparentid;
    184     inputlinktype = 'custom';
    185     inputdescription = htmlentities(itemdescription.toString());
    186163   
    187164    // Adds the item in the queue
    188     jQuery('#menu').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + inputvaluevarname + '</span><span class="item-controls"><span class="item-type">' + additemtype + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl><a class="hide" href="' + inputvaluevarurl + '">' + inputvaluevarname + '</a><input type="hidden" name="postmenu' + randomnumber + '" id="postmenu' + randomnumber + '" value="' + inputitemid + '" /><input type="hidden" name="parent' + randomnumber + '" id="parent' + randomnumber + '" value="' + inputparentid + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + inputvaluevarurl + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + inputdescription + '" /><input type="hidden" name="position' + randomnumber + '" id="position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="linktype' + randomnumber + '" id="linktype' + randomnumber + '" value="' + inputlinktype + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /></li>');
     165    jQuery('.menu').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + item_title + '</span><span class="item-controls"><span class="item-type">' + item_type + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu' + randomnumber + '" id="item-postmenu' + randomnumber + '" value="' + item_id + '" /><input type="hidden" name="item-parent' + randomnumber + '" id="item-parent' + randomnumber + '" value="' + item_parent_id + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + item_url + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + item_description + '" /><input type="hidden" name="item-position' + randomnumber + '" id="item-position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="item-type' + randomnumber + '" id="item-type' + randomnumber + '" value="' + item_type + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /></li>');
    189166   
    190167    // Give some feedback to the user
    191     jQuery( '#menu #menu-' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }});
     168    jQuery( '.menu #menu-' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }});
    192169   
    193170    // Enable drag-n-drop
    194171    wp_drag_and_drop();
    195172   
     173    wp_update_post_data();
     174   
    196175    // Reload thickbox
    197176    tb_init('a.thickbox, area.thickbox, input.thickbox');
     
    201180 * Queues items in perperation for appendToList
    202181 *
    203  * @param string id - The menu item's id
    204  * @param string additemtype - Page, Category, or Custom.
    205  * @param string itemtext - menu text.
    206  * @param string itemurl - url of the menu.
    207  * @param int itemid - menu id.
    208  * @param int itemparentid - default 0.
    209  * @param string itemdescription - the description of the menu item.
     182 * @param string type - Page, Category, or Custom.
     183 * @param string link - menu text.
     184 * @param string url - url of the menu.
     185 * @param int id - menu id.
     186 * @param int parent_id - default 0.
     187 * @param string description - the description of the menu item.
    210188*/
    211 function wp_update_queue( additemtype, itemtext, itemurl, itemid, itemparentid, itemdescription ) {
    212     var inputvaluevarname = '';
    213     var inputvaluevarurl = '';
    214     var inputitemid = '';
    215     var inputparentid= '';
    216     var inputdescription = '';
     189function wp_update_queue( e, item_type, item_title, item_url, item_id, item_parent_id, item_description ) {
    217190    var randomnumber = wp_get_unique_menu_id();
    218 
    219     if ( additemtype == navMenuL10n.page ) {
    220         inputvaluevarname = htmlentities(itemtext.toString());
    221         inputvaluevarurl = itemurl.toString();
    222         inputitemid = itemid.toString();
    223         inputparentid = '0';
    224         inputlinktype = 'page';
    225         inputdescription = htmlentities(itemdescription.toString());
    226 
    227     } else if ( additemtype == navMenuL10n.category ) {
    228         inputvaluevarname = htmlentities(itemtext.toString());
    229         inputvaluevarurl = itemurl.toString();
    230         inputitemid = itemid.toString();
    231         inputparentid = '0';
    232         inputlinktype = 'category';
    233         inputdescription = htmlentities(itemdescription.toString());
    234     }
    235            
    236     // Adds or removes the item from the queue
    237     if ( jQuery(menu_item_id = '#menu-item-' + inputitemid).attr('checked') ) {
    238        
     191    var menu_item_id = jQuery(e).attr('id');
     192   
     193    if ( jQuery(e).attr('checked') ) {
    239194        // Add menu item to the queue
    240         jQuery('#queue').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + inputvaluevarname + '</span><span class="item-controls"><span class="item-type">' + additemtype + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl><a class="hide" href="' + inputvaluevarurl + '">' + inputvaluevarname + '</a><input type="hidden" name="postmenu' + randomnumber + '" id="postmenu' + randomnumber + '" value="' + inputitemid + '" /><input type="hidden" name="parent' + randomnumber + '" id="parent' + randomnumber + '" value="' + inputparentid + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + inputvaluevarurl + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + inputdescription + '" /><input type="hidden" name="position' + randomnumber + '" id="position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="linktype' + randomnumber + '" id="linktype' + randomnumber + '" value="' + inputlinktype + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + inputvaluevarname + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /></li>');
     195        jQuery('#queue').append('<li id="menu-' + randomnumber + '" value="' + randomnumber + '"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">' + item_title + '</span><span class="item-controls"><span class="item-type">' + item_type + '</span><a class="item-edit thickbox" id="edit' + randomnumber + '" value="' + randomnumber +'" onClick="wp_edit_menu_item('+ randomnumber +')" title="' + navMenuL10n.thickbox + '" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">' + navMenuL10n.edit + '</a> | <a class="item-delete" id="delete' + randomnumber + '" value="' + randomnumber +'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu' + randomnumber + '" id="item-postmenu' + randomnumber + '" value="' + item_id + '" /><input type="hidden" name="item-parent' + randomnumber + '" id="item-parent' + randomnumber + '" value="' + item_parent_id + '" /><input type="hidden" name="item-title' + randomnumber + '" id="item-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-url' + randomnumber + '" id="item-url' + randomnumber + '" value="' + item_url + '" /><input type="hidden" name="item-description' + randomnumber + '" id="item-description' + randomnumber + '" value="' + item_description + '" /><input type="hidden" name="item-position' + randomnumber + '" id="item-position' + randomnumber + '" value="' + randomnumber + '" /><input type="hidden" name="item-type' + randomnumber + '" id="item-type' + randomnumber + '" value="' + item_type + '" /><input type="hidden" name="item-attr-title' + randomnumber + '" id="item-attr-title' + randomnumber + '" value="' + item_title + '" /><input type="hidden" name="item-target' + randomnumber + '" id="item-target' + randomnumber + '" value="0" /><input type="hidden" name="item-id' + randomnumber + '" id="item-id' + randomnumber + '" value="'+ menu_item_id +'" /></li>');
     196       
    241197    } else {
    242        
    243         // Get the item in the queue
    244         for ( var i = 0; i < jQuery('#queue li input[name^="postmenu"]').length; i++ ) {
    245             if ( itemid == jQuery('#queue li input[name^="postmenu"]')[i].value ) {
    246                 var menu_queue_id = jQuery('#queue li input[name^="postmenu"]')[i].name.substring( 8, jQuery('#queue li input[name^="postmenu"]')[i].name.length );
    247             };
     198        // Remove the item from the queue
     199        if ( menu_item_id == jQuery('#queue li input[name^="item-id"]' ).val() ) {
     200            jQuery('#queue li input[name^="item-id"]' ).parent().remove()
    248201        };
    249        
    250         // Removes the item from the queue
    251         jQuery('#queue li#menu-' + menu_queue_id).remove();
    252202    };
    253203};
     
    266216       
    267217    // Appends HTML to the menu
    268     jQuery('#menu').append( items );
     218    jQuery('.menu').append( items );
    269219
    270220    // Give some feedback to the user
     
    289239 */
    290240function wp_drag_and_drop() {
     241    // Make sure all li's have dropzones
     242    jQuery('.menu li').each(function(){
     243        if ( !jQuery(this).children('.dropzone').attr('class') ) {
     244            jQuery(this).prepend('<div class="dropzone"></div>');
     245        };
     246    });
     247
    291248    // make menu item draggable
    292     jQuery('#menu li').draggable({
     249    jQuery('.menu li').draggable({
    293250        handle: ' > dl',
    294251        opacity: .8,
    295252        addClasses: false,
    296253        helper: 'clone',
    297         zIndex: 100
     254        zIndex: 100,
    298255    });
    299256
    300257    // make menu item droppable
    301     jQuery('#menu li dl, #menu li .dropzone').droppable({
    302         accept: '#menu li',
     258    jQuery('.menu li dl, .menu li .dropzone').droppable({
     259        accept: '.menu li',
    303260        tolerance: 'pointer',
    304261        drop: function(e, ui) {
     
    308265            // Append UL to first child
    309266            if ( child && li.children('ul').length == 0 ) {
    310                 li.append( '<ul/>' );
     267                li.append( '<ul class="sub-menu" />' );
    311268            }
    312269            // Make it draggable
     
    323280           
    324281            li.find('#menu-' + draggablevalue).find('#parent' + draggablevalue).val(droppablevalue);
    325             jQuery(this).parent().find("dt").removeAttr('style');
    326             jQuery(this).parent().find("div:first").removeAttr('style');
     282            jQuery(this).parent().find('dt').removeAttr('style');
     283            jQuery(this).parent().find('div:first').removeAttr('style');
    327284
    328285        },
     
    330287                // Add child
    331288                if ( jQuery(this).attr('class') == 'dropzone ui-droppable' ) {
    332                     jQuery(this).parent().find("div:first").css('background', 'none').css('height', '50px');
     289                    jQuery(this).parent().find('div:first').css('background', 'none').css('height', '50px');
    333290                }
    334291                // Add above
    335292                else if ( jQuery(this).attr('class') == 'ui-droppable' ) {
    336                     jQuery(this).parent().find("dt:first").css('background', '#d8d8d8');
     293                    jQuery(this).parent().find('dt:first').css('background', '#d8d8d8');
    337294                } else {
    338295                    // do nothing
     
    342299            },
    343300            out: function() {
    344                 jQuery(this).parent().find("dt").removeAttr('style');
    345                 jQuery(this).parent().find("div:first").removeAttr('style');
     301                jQuery(this).parent().find('dt').removeAttr('style');
     302                jQuery(this).parent().find('div:first').removeAttr('style');
    346303                jQuery(this).filter('.dropzone').css({ borderColor: '' });
    347304            }
     
    354311 */
    355312function wp_get_unique_menu_id() {
    356     var count = document.getElementById('menu').getElementsByTagName('li').length + 1;
     313    var count = jQuery('.menu li').length + 1;
    357314    var randomnumber = count;
    358315    var validatetest = 0;
  • trunk/wp-admin/js/nav-menu-dynamic-functions.js

    r13473 r13512  
    1 function wp_update_links_list(e){var link='<li><dl><dt><label class="item-title"><input type="checkbox" id="link-'+e.link_id+'" name="'+e.link_name+'" value="'+e.link_url+'" />'+e.link_name+"</label></dt></dl></li>";jQuery("#available-links .list").prepend(link);jQuery("#available-links .list #link-"+e.link_id).parent().animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})}function wp_remove_menu_item(o){var todelete=document.getElementById("menu-"+o);if(todelete){jQuery(todelete).find("dt").each(function(){jQuery(this).animate({backgroundColor:"#FF3333"},{duration:"normal",complete:function(){jQuery(this).parent().parent().remove()}})});wp_update_post_data()}}function wp_edit_menu_item(id){console.log("wp_edit_menu_item");var itemTitle=jQuery("#item-title"+id).val();var itemURL=jQuery("#item-url"+id).val();var itemAttrTitle=jQuery("#item-attr-title"+id).val();var itemTarget=jQuery("#item-target"+id).val();var itemDesc=jQuery("#item-description"+id).val();console.log(id);console.log(itemTitle);console.log(itemURL);console.log(itemAttrTitle);console.log(itemTarget);console.log(itemDesc);jQuery("#edit-item-id").val(id);jQuery("#edit-item-title").val(itemTitle);jQuery("#edit-item-url").val(itemURL);jQuery("#edit-item-attr-title").val(itemAttrTitle);jQuery("#edit-item-target").val(itemTarget);jQuery("#edit-item-target option[value='"+itemTarget+"']").attr("selected","selected");jQuery("#edit-item-description").val(itemDesc)}function wp_update_menu_item(){var id=jQuery("#edit-item-id").val();var itemTitle=jQuery("#edit-item-title").val();var itemURL=jQuery("#edit-item-url").val();var itemAttrTitle=jQuery("#edit-item-attr-title").val();var itemTarget=jQuery("#edit-item-target").val();var itemDesc=jQuery("#edit-item-description").val();console.log(id);console.log(itemTitle);console.log(itemURL);console.log(itemAttrTitle);console.log(itemTarget);console.log(itemDesc);jQuery("#menu-"+id).find(".item-title:first").html(itemTitle);jQuery("#item-title"+id).val(itemTitle);jQuery("#item-url"+id).val(itemURL);jQuery("#item-attr-title"+id).val(itemAttrTitle);jQuery("#item-target"+id).val(itemTarget);jQuery("#item-description"+id).val(itemDesc)}function wp_update_post_data(){var i=0;jQuery("#menu li").each(function(i){i=i+1;var j=jQuery(this).attr("value");jQuery(this).find("#position"+j).attr("value",i);jQuery(this).attr("id","menu-"+i);jQuery(this).attr("value",i);jQuery(this).find("#dbid"+j).attr("name","dbid"+i);jQuery(this).find("#dbid"+j).attr("id","dbid"+i);jQuery(this).find("#postmenu"+j).attr("name","postmenu"+i);jQuery(this).find("#postmenu"+j).attr("id","postmenu"+i);var p=jQuery(this).find("#parent"+j).parent().parent().parent().attr("value");jQuery(this).find("#parent"+j).attr("name","parent"+i);jQuery(this).find("#parent"+j).attr("id","parent"+i);if(p){}else{p=0}jQuery(this).find("#parent"+j).attr("value",p);jQuery(this).find("#item-title"+j).attr("name","item-title"+i);jQuery(this).find("#item-title"+j).attr("id","item-title"+i);jQuery(this).find("#item-url"+j).attr("name","item-url"+i);jQuery(this).find("#item-url"+j).attr("id","item-url"+i);jQuery(this).find("#item-description"+j).attr("name","item-description"+i);jQuery(this).find("#item-description"+j).attr("id","item-description"+i);jQuery(this).find("#item-attr-title"+j).attr("name","item-attr-title"+i);jQuery(this).find("#item-attr-title"+j).attr("id","item-attr-title"+i);jQuery(this).find("#item-target"+j).attr("name","item-target"+i);jQuery(this).find("#item-target"+j).attr("id","item-target"+i);jQuery(this).find("#position"+j).attr("name","position"+i);jQuery(this).find("#position"+j).attr("id","position"+i);jQuery(this).find("#linktype"+j).attr("name","linktype"+i);jQuery(this).find("#linktype"+j).attr("id","linktype"+i);jQuery("#li-count").attr("value",i)})}function wp_add_item_to_menu(additemtype,itemtext,itemurl,itemid,itemparentid,itemdescription){var inputvaluevarname="";var inputvaluevarurl="";var inputitemid="";var inputparentid="";var inputdescription="";var randomnumber=wp_get_unique_menu_id();inputvaluevarname=htmlentities(itemtext.toString());inputvaluevarurl=itemurl.toString();inputitemid=itemid;inputparentid=itemparentid;inputlinktype="custom";inputdescription=htmlentities(itemdescription.toString());jQuery("#menu").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+inputvaluevarname+'</span><span class="item-controls"><span class="item-type">'+additemtype+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl><a class="hide" href="'+inputvaluevarurl+'">'+inputvaluevarname+'</a><input type="hidden" name="postmenu'+randomnumber+'" id="postmenu'+randomnumber+'" value="'+inputitemid+'" /><input type="hidden" name="parent'+randomnumber+'" id="parent'+randomnumber+'" value="'+inputparentid+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+inputvaluevarurl+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+inputdescription+'" /><input type="hidden" name="position'+randomnumber+'" id="position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="linktype'+randomnumber+'" id="linktype'+randomnumber+'" value="'+inputlinktype+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /></li>');jQuery("#menu #menu-"+randomnumber+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}});wp_drag_and_drop();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_update_queue(additemtype,itemtext,itemurl,itemid,itemparentid,itemdescription){var inputvaluevarname="";var inputvaluevarurl="";var inputitemid="";var inputparentid="";var inputdescription="";var randomnumber=wp_get_unique_menu_id();if(additemtype==navMenuL10n.page){inputvaluevarname=htmlentities(itemtext.toString());inputvaluevarurl=itemurl.toString();inputitemid=itemid.toString();inputparentid="0";inputlinktype="page";inputdescription=htmlentities(itemdescription.toString())}else{if(additemtype==navMenuL10n.category){inputvaluevarname=htmlentities(itemtext.toString());inputvaluevarurl=itemurl.toString();inputitemid=itemid.toString();inputparentid="0";inputlinktype="category";inputdescription=htmlentities(itemdescription.toString())}}if(jQuery(menu_item_id="#menu-item-"+inputitemid).attr("checked")){jQuery("#queue").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+inputvaluevarname+'</span><span class="item-controls"><span class="item-type">'+additemtype+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl><a class="hide" href="'+inputvaluevarurl+'">'+inputvaluevarname+'</a><input type="hidden" name="postmenu'+randomnumber+'" id="postmenu'+randomnumber+'" value="'+inputitemid+'" /><input type="hidden" name="parent'+randomnumber+'" id="parent'+randomnumber+'" value="'+inputparentid+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+inputvaluevarurl+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+inputdescription+'" /><input type="hidden" name="position'+randomnumber+'" id="position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="linktype'+randomnumber+'" id="linktype'+randomnumber+'" value="'+inputlinktype+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+inputvaluevarname+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /></li>')}else{for(var i=0;i<jQuery('#queue li input[name^="postmenu"]').length;i++){if(itemid==jQuery('#queue li input[name^="postmenu"]')[i].value){var menu_queue_id=jQuery('#queue li input[name^="postmenu"]')[i].name.substring(8,jQuery('#queue li input[name^="postmenu"]')[i].name.length)}}jQuery("#queue li#menu-"+menu_queue_id).remove()}}function wp_add_queued_items_to_menu(button){var items=jQuery("#queue").children();jQuery("#queue").empty();jQuery("#menu").append(items);jQuery(items).each(function(){jQuery(this).find("dt").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});jQuery(button).offsetParent().find(".list-container input").attr("checked",false);wp_update_post_data();wp_drag_and_drop();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_drag_and_drop(){jQuery("#menu li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100});jQuery("#menu li dl, #menu li .dropzone").droppable({accept:"#menu li",tolerance:"pointer",drop:function(e,ui){var li=jQuery(this).parent();var child=!jQuery(this).hasClass("dropzone");if(child&&li.children("ul").length==0){li.append("<ul/>")}if(child){li.children("ul").append(ui.draggable)}else{li.before(ui.draggable)}li.find("dl,.dropzone").css({backgroundColor:"",borderColor:""});var draggablevalue=ui.draggable.attr("value");var droppablevalue=li.attr("value");li.find("#menu-"+draggablevalue).find("#parent"+draggablevalue).val(droppablevalue);jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style")},over:function(){if(jQuery(this).attr("class")=="dropzone ui-droppable"){jQuery(this).parent().find("div:first").css("background","none").css("height","50px")}else{if(jQuery(this).attr("class")=="ui-droppable"){jQuery(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var parentid=jQuery(this).parent().attr("id")},out:function(){jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style");jQuery(this).filter(".dropzone").css({borderColor:""})}})}function wp_get_unique_menu_id(){var count=document.getElementById("menu").getElementsByTagName("li").length+1;var randomnumber=count;var validatetest=0;try{var test=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}while(validatetest==0){randomnumber=randomnumber+1;try{var test2=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}}return randomnumber};
     1function wp_update_links_list(e){var link='<li><dl><dt><label class="item-title"><input type="checkbox" id="link-'+e.link_id+'" name="'+e.link_name+'" value="'+e.link_url+'" />'+e.link_name+"</label></dt></dl></li>";jQuery("#available-links .list").prepend(link);jQuery("#available-links .list #link-"+e.link_id).parent().animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})}function wp_edit_menu_item(id){var itemType=jQuery("#item-type"+id).val();var itemTitle=jQuery("#item-title"+id).val();var itemURL=jQuery("#item-url"+id).val();var itemAttrTitle=jQuery("#item-attr-title"+id).val();var itemTarget=jQuery("#item-target"+id).val();var itemDesc=jQuery("#item-description"+id).val();if("page"==itemType||"category"==itemType){jQuery("#edit-item-url").attr("disabled","disabled")}jQuery("#edit-item-id").val(id);jQuery("#edit-item-title").val(itemTitle);jQuery("#edit-item-url").val(itemURL);jQuery("#edit-item-attr-title").val(itemAttrTitle);jQuery("#edit-item-target").val(itemTarget);jQuery("#edit-item-target option[value='"+itemTarget+"']").attr("selected","selected");jQuery("#edit-item-description").val(itemDesc)}function wp_update_menu_item(){var id=jQuery("#edit-item-id").val();var itemTitle=jQuery("#edit-item-title").val();var itemURL=jQuery("#edit-item-url").val();var itemAttrTitle=jQuery("#edit-item-attr-title").val();var itemTarget=jQuery("#edit-item-target").val();var itemDesc=jQuery("#edit-item-description").val();jQuery("#menu-"+id).find(".item-title:first").html(itemTitle);jQuery("#item-title"+id).val(itemTitle);jQuery("#item-url"+id).val(itemURL);jQuery("#item-attr-title"+id).val(itemAttrTitle);jQuery("#item-target"+id).val(itemTarget);jQuery("#item-description"+id).val(itemDesc)}function wp_remove_menu_item(o){var todelete=document.getElementById("menu-"+o);if(todelete){jQuery(todelete).find("dt").each(function(){jQuery(this).animate({backgroundColor:"#FF3333"},{duration:"normal",complete:function(){jQuery(this).parent().parent().remove()}})});wp_update_post_data()}}function wp_update_post_data(){var i=0;jQuery(".menu li").each(function(i){i=i+1;var j=jQuery(this).attr("value");jQuery(this).find("#item-position"+j).attr("value",i);jQuery(this).attr("id","menu-"+i);jQuery(this).attr("value",i);jQuery(this).find("#item-dbid"+j).attr("name","item-dbid"+i);jQuery(this).find("#item-dbid"+j).attr("id","item-dbid"+i);jQuery(this).find("#item-postmenu"+j).attr("name","item-postmenu"+i);jQuery(this).find("#item-postmenu"+j).attr("id","item-postmenu"+i);var p=jQuery(this).find("#item-parent"+j).parent().parent().parent().attr("value");jQuery(this).find("#item-parent"+j).attr("name","item-parent"+i);jQuery(this).find("#item-parent"+j).attr("id","item-parent"+i);if(p){}else{p=0}jQuery(this).find("#item-parent"+j).attr("value",p);jQuery(this).find("#item-title"+j).attr("name","item-title"+i);jQuery(this).find("#item-title"+j).attr("id","item-title"+i);jQuery(this).find("#item-url"+j).attr("name","item-url"+i);jQuery(this).find("#item-url"+j).attr("id","item-url"+i);jQuery(this).find("#item-description"+j).attr("name","item-description"+i);jQuery(this).find("#item-description"+j).attr("id","item-description"+i);jQuery(this).find("#item-attr-title"+j).attr("name","item-attr-title"+i);jQuery(this).find("#item-attr-title"+j).attr("id","item-attr-title"+i);jQuery(this).find("#item-target"+j).attr("name","item-target"+i);jQuery(this).find("#item-target"+j).attr("id","item-target"+i);jQuery(this).find("#item-position"+j).attr("name","item-position"+i);jQuery(this).find("#item-position"+j).attr("id","item-position"+i);jQuery(this).find("#item-type"+j).attr("name","item-type"+i);jQuery(this).find("#item-type"+j).attr("id","item-type"+i);jQuery("#li-count").attr("value",i)})}function wp_add_item_to_menu(item_type,item_title,item_url,item_id,item_parent_id,item_description){var randomnumber=wp_get_unique_menu_id();jQuery(".menu").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+item_title+'</span><span class="item-controls"><span class="item-type">'+item_type+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu'+randomnumber+'" id="item-postmenu'+randomnumber+'" value="'+item_id+'" /><input type="hidden" name="item-parent'+randomnumber+'" id="item-parent'+randomnumber+'" value="'+item_parent_id+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+item_url+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+item_description+'" /><input type="hidden" name="item-position'+randomnumber+'" id="item-position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="item-type'+randomnumber+'" id="item-type'+randomnumber+'" value="'+item_type+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /></li>');jQuery(".menu #menu-"+randomnumber+" dt:first").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}});wp_drag_and_drop();wp_update_post_data();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_update_queue(e,item_type,item_title,item_url,item_id,item_parent_id,item_description){var randomnumber=wp_get_unique_menu_id();var menu_item_id=jQuery(e).attr("id");if(jQuery(e).attr("checked")){jQuery("#queue").append('<li id="menu-'+randomnumber+'" value="'+randomnumber+'"><div class="dropzone ui-droppable"></div><dl class="ui-droppable"><dt><span class="item-title">'+item_title+'</span><span class="item-controls"><span class="item-type">'+item_type+'</span><a class="item-edit thickbox" id="edit'+randomnumber+'" value="'+randomnumber+'" onClick="wp_edit_menu_item('+randomnumber+')" title="'+navMenuL10n.thickbox+'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'+navMenuL10n.edit+'</a> | <a class="item-delete" id="delete'+randomnumber+'" value="'+randomnumber+'">Delete</a></span></dt></dl><input type="hidden" name="item-postmenu'+randomnumber+'" id="item-postmenu'+randomnumber+'" value="'+item_id+'" /><input type="hidden" name="item-parent'+randomnumber+'" id="item-parent'+randomnumber+'" value="'+item_parent_id+'" /><input type="hidden" name="item-title'+randomnumber+'" id="item-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-url'+randomnumber+'" id="item-url'+randomnumber+'" value="'+item_url+'" /><input type="hidden" name="item-description'+randomnumber+'" id="item-description'+randomnumber+'" value="'+item_description+'" /><input type="hidden" name="item-position'+randomnumber+'" id="item-position'+randomnumber+'" value="'+randomnumber+'" /><input type="hidden" name="item-type'+randomnumber+'" id="item-type'+randomnumber+'" value="'+item_type+'" /><input type="hidden" name="item-attr-title'+randomnumber+'" id="item-attr-title'+randomnumber+'" value="'+item_title+'" /><input type="hidden" name="item-target'+randomnumber+'" id="item-target'+randomnumber+'" value="0" /><input type="hidden" name="item-id'+randomnumber+'" id="item-id'+randomnumber+'" value="'+menu_item_id+'" /></li>')}else{if(menu_item_id==jQuery('#queue li input[name^="item-id"]').val()){jQuery('#queue li input[name^="item-id"]').parent().remove()}}}function wp_add_queued_items_to_menu(button){var items=jQuery("#queue").children();jQuery("#queue").empty();jQuery(".menu").append(items);jQuery(items).each(function(){jQuery(this).find("dt").animate({backgroundColor:"#FFFF33"},{duration:"normal",complete:function(){jQuery(this).css("backgroundColor","")}})});jQuery(button).offsetParent().find(".list-container input").attr("checked",false);wp_update_post_data();wp_drag_and_drop();tb_init("a.thickbox, area.thickbox, input.thickbox")}function wp_drag_and_drop(){jQuery(".menu li").each(function(){if(!jQuery(this).children(".dropzone").attr("class")){jQuery(this).prepend('<div class="dropzone"></div>')}});jQuery(".menu li").draggable({handle:" > dl",opacity:0.8,addClasses:false,helper:"clone",zIndex:100,});jQuery(".menu li dl, .menu li .dropzone").droppable({accept:".menu li",tolerance:"pointer",drop:function(e,ui){var li=jQuery(this).parent();var child=!jQuery(this).hasClass("dropzone");if(child&&li.children("ul").length==0){li.append('<ul class="sub-menu" />')}if(child){li.children("ul").append(ui.draggable)}else{li.before(ui.draggable)}li.find("dl,.dropzone").css({backgroundColor:"",borderColor:""});var draggablevalue=ui.draggable.attr("value");var droppablevalue=li.attr("value");li.find("#menu-"+draggablevalue).find("#parent"+draggablevalue).val(droppablevalue);jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style")},over:function(){if(jQuery(this).attr("class")=="dropzone ui-droppable"){jQuery(this).parent().find("div:first").css("background","none").css("height","50px")}else{if(jQuery(this).attr("class")=="ui-droppable"){jQuery(this).parent().find("dt:first").css("background","#d8d8d8")}else{}}var parentid=jQuery(this).parent().attr("id")},out:function(){jQuery(this).parent().find("dt").removeAttr("style");jQuery(this).parent().find("div:first").removeAttr("style");jQuery(this).filter(".dropzone").css({borderColor:""})}})}function wp_get_unique_menu_id(){var count=jQuery(".menu li").length+1;var randomnumber=count;var validatetest=0;try{var test=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}while(validatetest==0){randomnumber=randomnumber+1;try{var test2=document.getElementById("menu-"+randomnumber.toString()).value}catch(err){validatetest=1}}return randomnumber};
  • trunk/wp-admin/nav-menus.php

    r13473 r13512  
    4343$updated = false;
    4444$advanced_option_descriptions = 'no';
    45 
    46 // Get all menu link items
    47 $available_links = new WP_Query( array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_key' => 'menu_type', 'meta_value' => 'custom' ) );
    4845
    4946// Check which menu is selected and if menu is in edit already
     
    128125    // Loop through all POST variables
    129126    for ( $k = 1; $k <= $post_counter; $k++ ) {
    130         $db_id = isset( $_POST['dbid'.$k] )? $_POST['dbid'.$k] : 0;
    131         $object_id = isset( $_POST['postmenu'.$k] )? $_POST['postmenu'.$k] : 0;
    132         $parent_id = isset( $_POST['parent'.$k] )? $_POST['parent'.$k] : 0;
     127        $db_id = isset( $_POST['item-dbid'.$k] )? $_POST['item-dbid'.$k] : 0;
     128        $object_id = isset( $_POST['item-postmenu'.$k] )? $_POST['item-postmenu'.$k] : 0;
     129        $parent_id = isset( $_POST['item-parent'.$k] )? $_POST['item-parent'.$k] : 0;
    133130        $custom_title = isset( $_POST['item-title'.$k] )?  $_POST['item-title'.$k] : '';
    134131        $custom_linkurl = ( isset( $_POST['item-url'.$k] ) && 'custom' == $_POST['linktype'.$k] ) ? $_POST['item-url'.$k] : '';
    135132        $custom_description = isset( $_POST['item-description'.$k] )? $_POST['item-description'.$k] : '';
     133       
    136134        // doesn't seem to be used by UI
    137         $icon = isset( $_POST['icon'.$k] )? $_POST['icon'.$k] : 0;
    138         $position = isset( $_POST['position'.$k] )? $_POST['position'.$k] : 0;
    139         $linktype = isset( $_POST['linktype'.$k] )? $_POST['linktype'.$k] : 'custom';
     135        $position = isset( $_POST['item-position'.$k] )? $_POST['item-position'.$k] : 0;
     136        $linktype = isset( $_POST['item-type'.$k] )? $_POST['item-type'.$k] : 'custom';
    140137        $custom_anchor_title  = isset( $_POST['item-attr-title'.$k] )? $_POST['item-attr-title'.$k] : $custom_title;
    141138        $new_window = isset( $_POST['item-target'.$k] )? $_POST['item-target'.$k] : 0;
     
    210207                                <input type="hidden" name="li-count" id="li-count" value="0" />
    211208                                <input type="hidden" name="menu-id-in-edit" id="menu-id-in-edit" value="<?php echo esc_attr( $menu_selected_id ); ?>" />
    212 
    213                                 <ul id="menu">
    214209                                <?php
    215                                 if ( $menu_selected_id > 0 ) {
    216                                     wp_print_nav_menu( array( 'type' => 'backend', 'name' => $menu_title, 'id' => $menu_selected_id ) );
    217                                 }
     210                                if ( $menu_selected_id > 0 )
     211                                    echo wp_get_nav_menu( array( 'type' => 'backend', 'menu' => $menu_selected_id, 'ul_class' => 'menu' ) );
    218212                                ?>
    219                                 </ul><!-- /#menu-->
    220213                               
    221214                                <div id="queue" class="hide">
     
    266259                            </p>
    267260                           
    268                     <?php if ( $available_links->posts ) : ?>
    269261                            <p class="button-controls">
    270262                                <a class="show-all button"><?php _e('View All'); ?></a>
     
    274266                                <div class="list-container">
    275267                                    <ul class="list">
    276                                     <?php
    277                                     foreach ( $available_links->posts as $link ) :
    278                                     $url = get_post_meta( $link->ID, 'menu_link' );
    279                                     ?>
    280                                         <li>
    281                                             <dl>
    282                                                 <dt>
    283                                                     <label class="item-title"><input type="checkbox" id="link-<?php echo esc_attr($link->ID); ?>" name="<?php echo esc_attr($link->post_title); ?>" value="<?php echo esc_attr($url[0]); ?>" /><?php echo esc_html($link->post_title); ?></label>
    284                                                 </dt>
    285                                             </dl>
    286                                         </li>
    287                                     <?php
    288                                     endforeach;
    289                                     ?>
     268                                    <?php $items_counter = wp_nav_menu_get_custom_links( 0, 'default' ); ?>
    290269                                    </ul>
    291270                                </div><!-- /.list-container-->
    292271                            </div><!-- /#available-links-->
    293                     <?php endif; ?>
    294272                            <p class="add-to-menu">
    295273                                <a class="button"><?php _e('Add to Menu'); ?></a>
     
    326304                                    jQuery('#add-pages .quick-search').result(function(event, data, formatted) {
    327305                                        jQuery('#add-pages .list-wrap').css('display','block');
    328                                         jQuery("#add-pages .list-wrap dt:contains('" + data + "')").css('display','block');
     306                                        jQuery("#add-pages .list-wrap li:contains('" + data + "')").css('display','block');
    329307                                        jQuery('#add-pages .show-all').hide();
    330308                                        jQuery('#add-pages .hide-all').show();
     
    345323                                <div class="list-container">
    346324                                    <ul class="list">
    347                                     <?php $items_counter = wp_nav_menu_get_pages( 0, 'default' ); ?>
     325                                    <?php $items_counter = wp_nav_menu_get_pages( $items_counter, 'default' ); ?>
    348326                                    </ul>
    349327                                </div><!-- /.list-container-->
     
    388366                                    jQuery('#add-categories .quick-search').result(function(event, data, formatted) {
    389367                                        jQuery('#add-categories .list-wrap').css('display','block');
    390                                         jQuery("#add-categories .list-wrap dt:contains('" + data + "')").css('display','block');
     368                                        jQuery("#add-categories .list-wrap li:contains('" + data + "')").css('display','block');
    391369                                        jQuery('#add-categories .show-all').hide();
    392370                                        jQuery('#add-categories .hide-all').show();
  • trunk/wp-content/themes/twentyten/header.php

    r13498 r13512  
    22<html <?php language_attributes(); ?>>
    33<head>
    4     <title><?php
    5         if ( is_single() ) {
     4    <title><?php
     5        if ( is_single() ) {
    66            single_post_title(); echo ' | '; bloginfo('name');
    77        } elseif ( is_home() || is_front_page() ) {
     
    1616            wp_title(''); echo ' | '; bloginfo('name'); twentyten_the_page_number();
    1717        }
    18     ?></title>
     18    ?></title>
    1919
    2020    <meta http-equiv="content-type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
  • trunk/wp-includes/default-widgets.php

    r13473 r13512  
    10451045
    10461046    function WP_Nav_Menu_Widget() {
    1047         $widget_ops = array('description' => __('Use this widget to add one of your navigation menus as a widget.') );
    1048         parent::WP_Widget( false, __('Navigation Menu'), $widget_ops );
    1049     }
    1050 
     1047        $widget_ops = array( 'description' => __('Use this widget to add one of your navigation menus as a widget.') );
     1048        parent::WP_Widget( 'nav_menu', __('Navigation Menu'), $widget_ops );
     1049    }
     1050   
    10511051    function widget($args, $instance) {
    1052         $navmenu = $instance['navmenu'];
    1053         $navtitle = $instance['navtitle'];
    1054         $navdeveloper = strtolower($instance['navdeveloper']);
    1055         $navdiv = strtolower($instance['navdiv']);
    1056         $navul = strtolower($instance['navul']);
    1057         $navdivid = $instance['navdivid'];
    1058         $navdivclass = $instance['navdivclass'];
    1059         $navulid = $instance['navulid'];
    1060         $navulclass = $instance['navulclass'];
    1061 
    1062         // Override for menu descriptions
    1063         $advanced_option_descriptions = get_option('wp_settings_nav_menu_advanced_options');
    1064         if ( $advanced_option_descriptions == 'no' ) {
    1065             $navwidgetdescription = 2;
    1066         } else {
    1067             $navwidgetdescription = $instance['navwidgetdescription'];
    1068         }
    1069 
    10701052        // Get menu
    1071         if ( $navmenu > 0 ) {
    1072             $custom_menu = get_term( (int) $nav_menu, 'nav_menu' );
    1073             $wp_custom_nav_menu_name = $custom_menu->name;
    1074             $menuexists = true;
    1075         } else {
    1076             $menuexists = false;
    1077         }
    1078 
    1079         if ( $navdeveloper == 'yes' ) {
    1080             // DISPLAY Custom DIV
    1081             if ( $navdiv == 'yes' ) {
    1082             ?>
    1083                 <div id="<?php echo $navdivid;  ?>" class="<?php echo $navdivclass; ?>">
    1084             <?php
    1085                 }
    1086             } else {
    1087                 //DISPLAY default DIV
    1088                 ?>
    1089                 <div class="widget">
    1090                 <?php
     1053        $nav_menu = wp_get_nav_menu_object( $instance['nav_menu'] );
     1054       
     1055        if ( !$nav_menu )
     1056            return;     
     1057       
     1058        echo $args['before_widget'];
     1059       
     1060        if ( isset($instance['title']) )
     1061            echo $args['before_title'] . $instance['title'] . $args['after_title'];
     1062       
     1063        wp_nav_menu( array( 'menu' => $nav_menu ) );
     1064       
     1065        echo $args['after_widget'];
     1066    }
     1067
     1068    function update( $new_instance, $old_instance ) {
     1069        $instance['title'] = strip_tags( stripslashes($new_instance['title']) );
     1070        $instance['nav_menu'] = (int) $new_instance['nav_menu'];
     1071        return $instance;
     1072    }
     1073
     1074    function form( $instance ) {
     1075        $title = isset( $instance['title'] ) ? $instance['title'] : '';
     1076        $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';
     1077       
     1078        // Get menus
     1079        $menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) );
     1080       
     1081        // If no menus exists, direct the user to go and create some.
     1082        if ( !$menus ) {
     1083            echo '<p>'. sprintf( __('No menus have been created yet. <a href="%s">Creat some</a>.'), admin_url('nav-menus.php') ) .'</p>';
     1084            return;
     1085        }
     1086        ?>
     1087        <p>
     1088            <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
     1089            <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" />
     1090        </p>
     1091        <p>
     1092            <label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label>
     1093            <select id="<?php echo $this->get_field_id('nav_menu'); ?>" name="<?php echo $this->get_field_name('nav_menu'); ?>">
     1094        <?php
     1095            foreach ( $menus as $menu ) {
     1096                $selected = $nav_menu == $menu->term_id ? ' selected="selected"' : '';
     1097                echo '<option'. $selected .' value="'. $menu->term_id .'">'. $menu->name .'</option>';
    10911098            }
    10921099        ?>
    1093 
    1094         <h3><?php echo $navtitle; ?></h3>
    1095         <?php
    1096         if ( $menuexists ) {
    1097             if ( $navdeveloper == 'yes' ) {
    1098                 //DISPLAY Custom UL
    1099                 if ( $navul == 'yes' ) {
    1100                     ?>
    1101                     <ul id="<?php echo $navulid;  ?>" class="<?php echo $navulclass; ?>">
    1102                     <?php
    1103                 }
    1104             } else {
    1105                 // DISPLAY default UL
    1106                 ?>
    1107                 <ul class="menu">
    1108                 <?php
    1109             }
    1110             wp_nav_menu( array('id' => $navmenu, 'name' => $wp_custom_nav_menu_name, 'desc' => $navwidgetdescription, 'format' => 'widget') );
    1111             if ( $navdeveloper == 'yes' ) {
    1112                 // DISPLAY Custom UL
    1113                 if ( $navul == 'yes' ) {
    1114                     ?>
    1115                     </ul>
    1116                     <?php
    1117                 }
    1118             } else {
    1119                 // DISPLAY default UL
    1120                 ?>
    1121                 </ul>
    1122                 <?php
    1123             }
    1124         } else {
    1125             _e('You have not setup the custom navigation widget correctly, please check your settings in the backend.');
    1126         }
    1127 
    1128         //DEVELOPER settings enabled
    1129         if ($navdeveloper == 'yes') {
    1130             // DISPLAY Custom DIV
    1131             if ( $navdiv == 'yes' ) {
    1132                 ?>
    1133                 </div>
    1134                 <?php
    1135             }
    1136         } else {
    1137             // DISPLAY default DIV
    1138             ?>
    1139             </div>
    1140             <?php
    1141         }
    1142         ?><!-- /#nav-container -->
    1143         <?php
    1144     }
    1145 
    1146     function update($new_instance, $old_instance) {
    1147         return $new_instance;
    1148     }
    1149 
    1150     function form($instance) {
    1151         $navmenu = esc_attr($instance['navmenu']);
    1152         $navtitle = esc_attr($instance['navtitle']);
    1153         $navdeveloper = esc_attr($instance['navdeveloper']);
    1154         $navdiv = esc_attr($instance['navdiv']);
    1155         $navul = esc_attr($instance['navul']);
    1156         $navdivid = esc_attr($instance['navdivid']);
    1157         $navdivclass = esc_attr($instance['navdivclass']);
    1158         $navulid = esc_attr($instance['navulid']);
    1159         $navulclass = esc_attr($instance['navulclass']);
    1160         $navwidgetdescription = esc_attr($instance['navwidgetdescription']);
    1161 
    1162         global $wpdb;
    1163 
    1164         // Get menus
    1165         $custom_menus = get_terms( 'nav_menu', array( 'hide_empty' => false ) );
    1166 
    1167         if ( !$custom_menus) {
    1168         ?>
    1169             <p>
    1170                 <label><?php printf(__('No menus have been created yet.  <a href="%s">Creat some</a>.'), admin_url('nav-menus.php')); ?></label>
    1171             </p>
    1172         <?php
    1173             return;
    1174         }
    1175         ?>
    1176 
    1177         <p>
    1178             <label for="<?php echo $this->get_field_id('navmenu'); ?>"><?php _e('Select Menu:'); ?></label>
    1179 
    1180             <select id="<?php echo $this->get_field_id('navmenu'); ?>" name="<?php echo $this->get_field_name('navmenu'); ?>">
    1181                 <?php
    1182                 foreach ( $custom_menus as $menu ) {
    1183                     if ( $navmenu == $menu->term_id )
    1184                         $selected_option = 'selected="selected"';
    1185                     else
    1186                         $selected_option = '';
    1187                     ?>
    1188                     <option value="<?php echo $menu->term_id; ?>" <?php echo $selected_option; ?>><?php echo $menu->name; ?></option>
    1189                     <?php
    1190                 }
    1191                 ?>
    11921100            </select>
    11931101        </p>
    1194 
    1195         <p>
    1196             <label for="<?php echo $this->get_field_id('navtitle'); ?>"><?php _e('Title:'); ?></label>
    1197             <input type="text" name="<?php echo $this->get_field_name('navtitle'); ?>" value="<?php echo $navtitle; ?>" class="widefat" id="<?php echo $this->get_field_id('navtitle'); ?>" />
    1198         </p>
    1199 
    1200         <?php $checked = strtolower($navdeveloper); ?>
    1201         <p>
    1202             <label for="<?php echo $this->get_field_id('navdeveloper'); ?>"><?php _e('Advanced Options:'); ?></label><br />
    1203             <span class="checkboxes">
    1204                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navdeveloper'); ?>" name="<?php echo $this->get_field_name('navdeveloper'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
    1205                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navdeveloper'); ?>" name="<?php echo $this->get_field_name('navdeveloper'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
    1206             </span><!-- /.checkboxes -->
    1207         </p>
    1208 
    12091102        <?php
    1210         // Advanced settings
    1211         if ( $checked == 'yes' ) :
    1212         ?>
    1213         <p>
    1214         <?php $checked = strtolower($navdiv); ?>
    1215             <label for="<?php echo $this->get_field_id('navdiv'); ?>"><?php _e('Wrap in container DIV:'); ?></label><br />
    1216             <span class="checkboxes">
    1217                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navdiv'); ?>" name="<?php echo $this->get_field_name('navdiv'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
    1218                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navdiv'); ?>" name="<?php echo $this->get_field_name('navdiv'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
    1219             </span><!-- /.checkboxes -->
    1220         </p>
    1221         <?php
    1222         if ( $checked == 'yes' ) {
    1223         ?>
    1224 
    1225             <p>
    1226                 <label for="<?php echo $this->get_field_id('navdivid'); ?>"><?php _e('DIV id:'); ?></label>
    1227                 <input type="text" name="<?php echo $this->get_field_name('navdivid'); ?>" value="<?php echo $navdivid; ?>" class="widefat" id="<?php echo $this->get_field_id('navdivid'); ?>" />
    1228             </p>
    1229             <p>
    1230                 <label for="<?php echo $this->get_field_id('navdivclass'); ?>"><?php _e('DIV class:'); ?></label>
    1231                 <input type="text" name="<?php echo $this->get_field_name('navdivclass'); ?>" value="<?php echo $navdivclass; ?>" class="widefat" id="<?php echo $this->get_field_id('navdivclass'); ?>" />
    1232             </p>
    1233         <?php
    1234         }
    1235        
    1236         $checked = strtolower($navul);
    1237         ?>
    1238 
    1239         <p>
    1240             <label for="<?php echo $this->get_field_id('navul'); ?>"><?php _e('Wrap in container UL:'); ?></label><br />
    1241             <span class="checkboxes">
    1242                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navul'); ?>" name="<?php echo $this->get_field_name('navul'); ?>" value="yes" <?php if ($checked=='yes') { echo 'checked="checked"'; } ?> />
    1243                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navul'); ?>" name="<?php echo $this->get_field_name('navul'); ?>" value="no" <?php if ($checked=='yes') { } else { echo 'checked="checked"'; } ?> />
    1244             </span><!-- /.checkboxes -->
    1245         </p>
    1246 
    1247         <?php
    1248         if ( $checked == 'yes' ) {
    1249         ?>
    1250             <p>
    1251                 <label for="<?php echo $this->get_field_id('navulid'); ?>"><?php _e('UL id:'); ?></label>
    1252                 <input type="text" name="<?php echo $this->get_field_name('navulid'); ?>" value="<?php echo $navulid; ?>" class="widefat" id="<?php echo $this->get_field_id('navulid'); ?>" />
    1253             </p>
    1254             <p>
    1255                 <label for="<?php echo $this->get_field_id('navulclass'); ?>"><?php _e('UL class:'); ?></label>
    1256                 <input type="text" name="<?php echo $this->get_field_name('navulclass'); ?>" value="<?php echo $navulclass; ?>" class="widefat" id="<?php echo $this->get_field_id('navulclass'); ?>" />
    1257             </p>
    1258         <?php
    1259         }
    1260         $advanced_option_descriptions = get_option('wp_settings_nav_menu_advanced_options');
    1261         ?>
    1262         <p <?php if ($advanced_option_descriptions == 'no') { ?>style="display:none;"<?php } ?>>
    1263            <?php $checked = strtolower($navwidgetdescription); ?>
    1264             <label for="<?php echo $this->get_field_id('navwidgetdescription'); ?>"><?php _e('Show Top Level Descriptions:'); ?></label><br />
    1265             <span class="checkboxes">
    1266                 <label>Yes</label><input type="radio" id="<?php echo $this->get_field_name('navwidgetdescription'); ?>" name="<?php echo $this->get_field_name('navwidgetdescription'); ?>" value="1" <?php if ($checked=='1') { echo 'checked="checked"'; } ?> />
    1267                 <label>No</label><input type="radio" id="<?php echo $this->get_field_name('navwidgetdescription'); ?>" name="<?php echo $this->get_field_name('navwidgetdescription'); ?>" value="2" <?php if ($checked=='1') { } else { echo 'checked="checked"'; } ?> />
    1268             </span><!-- /.checkboxes -->
    1269         </p>
    1270         <?php
    1271         endif;
    12721103    }
    12731104}
  • trunk/wp-includes/nav-menu-template.php

    r13473 r13512  
    11<?php
    2 
    32/**
    4  * Outputs a navigation menu.
     3 * Displays a navigation menu.
    54 *
    65 * Optional $args contents:
     
    1110 * format - Whether to format the ul. Defaults to 'div'.
    1211 * fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'.
     12 * before_link - Output text before the link.
     13 * after_link - Output text after the link.
     14 * before_title - Output text before the link text.
     15 * before_title - Output text after the link text.
     16 * echo - Whether to echo the menu or return it. Defaults to echo.
    1317 *
    1418 * TODO:
    1519 * show_home - If you set this argument, then it will display the link to the home page. The show_home argument really just needs to be set to the value of the text of the link.
    16  * link_before - Text before show_home argument text.
    17  * link_after - Text after show_home argument text.
    18  * echo - Whether to echo the menu or return it. Defaults to echo.
    1920 *
    2021 * @since 3.0.0
     
    2324 */
    2425function wp_nav_menu( $args = array() ) {
    25     $defaults = array( 'id' => '', 'slug' => '', 'menu_class' => 'menu', 'format' => 'div', 'fallback_cb' => 'wp_page_menu', 'echo' => true, 'link_before' => '', 'link_after' => '' );
     26    $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'format' => 'div', 'echo' => true,
     27    'fallback_cb' => 'wp_page_menu', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', );
     28   
    2629    $args = wp_parse_args( $args, $defaults );
     30    $args = apply_filters( 'wp_nav_menu_args', $args );
    2731    $args = (object) $args;
    2832   
    29     // Get the menu
    30     $menu = null;
    31     if ( !empty($args->id) ) {
    32         $menu = wp_get_nav_menu( $args->id );
    33     } elseif ( !empty($args->slug) ) {
    34         $menu = get_term_by( 'slug', $args->slug, 'nav_menu' );
    35     } else {
     33    // Get the nav menu
     34    $menu = wp_get_nav_menu_object( $args->menu );
     35       
     36    // If we couldn't find a menu based off the name, id or slug,
     37    // get the first menu that has items.
     38    if ( !$menu ) {
    3639        $menus = wp_get_nav_menus();
    3740        foreach ( $menus as $menu_maybe ) {
     
    4346    }
    4447   
    45     // If the menu doesn't exists, call the fallback_cb
    46     if ( !$menu || is_wp_error($menu) )
    47         return call_user_func($args->fallback_cb, $args );
    48 
     48    $args->menu = $menu->term_id;
     49    $nav_menu = '';
     50   
    4951    if ( 'div' == $args->format )
    50         echo '<div class="' . esc_attr($args->menu_class) . '"><ul>';
    51 
    52     $args->id = $menu->term_id;
    53 
    54     wp_print_nav_menu($args);
    55        
     52        $nav_menu .= '<div id="menu-'. $menu->slug .'" class="' . esc_attr($args->menu_class) . '">';
     53   
     54    $nav_menu .= wp_get_nav_menu( $args );
     55   
    5656    if ( 'div' == $args->format )
    57         echo '</ul></div>';
     57        $nav_menu .= '</div>';
     58   
     59    $nav_menu = apply_filters( 'wp_nav_menu', $nav_menu );
     60   
     61    return $args->echo ? print $nav_menu : $nav_menu;
    5862}
    5963
    60 function wp_print_nav_menu( $args = array() ) {
    61         // Defaults
    62         $defaults = array( 'type' => 'frontend', 'name' => 'Menu 1', 'id' => 0, 'desc' => 2, 'before_title' => '', 'after_title' => '');
    63 
    64         $args = wp_parse_args($args, $defaults);
    65         extract($args, EXTR_SKIP);
    66 
    67         $menu_items = wp_get_nav_menu_items( $id );
    68 
    69         $parent_stack = array();
    70         $current_parent = 0;
    71         $parent_menu_order = array();
    72         // Setup parentage
    73         foreach ( $menu_items as $menu_item ) {
    74             $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order;
     64/**
     65 * Returns a Navigation Menu.
     66 *
     67 * See wp_nav_menu() for args.
     68 *
     69 * @since 3.0.0
     70 *
     71 * @param array $args Arguments
     72 * @return mixed $output False if menu doesn't exists, else, returns the menu.
     73 **/
     74function wp_get_nav_menu( $args = array() ) {
     75    $defaults = array( 'menu' => '', 'menu_class' => 'menu', 'ul_class' => '', 'format' => 'div', 'type' => 'frontend',
     76    'fallback_cb' => '', 'link_before' => '', 'link_after' => '', 'before_link' => '', 'after_link' => '', );
     77   
     78    $args = wp_parse_args( $args, $defaults );
     79    $args = apply_filters( 'wp_get_nav_menu_args', $args );
     80    $args = (object) $args;
     81   
     82    $menu = wp_get_nav_menu_object( $args->menu );
     83   
     84    // If no menu was found, call the fallback_cb
     85    if ( !$menu || is_wp_error($menu) ) {
     86        if ( function_exists($args->fallback_cb) )
     87            return call_user_func( $args->fallback_cb, $args );
     88    }
     89   
     90    $menu_items = wp_get_nav_menu_items( $menu->term_id );
     91    $nav_menu = '';
     92    $parent_stack = array();
     93    $current_parent = 0;
     94    $parent_menu_order = array();
     95   
     96    // Setup parentage
     97    foreach ( $menu_items as $menu_item )
     98        $parent_menu_order[ $menu_item->ID ] = $menu_item->menu_order;
     99   
     100    $ul_class = isset($args->ul_class) ? ' class="'. $args->ul_class .'"' : '';
     101    $nav_menu .= '<ul'. $ul_class .'>';
     102   
     103    // Display Loop
     104    foreach ( $menu_items as $key => $menu_item ) :
     105        // Setup the $menu_item variables
     106        $menu_item = wp_setup_nav_menu_item( $menu_item );
     107       
     108        $maybe_value = 'frontend' == $args->type ? '' : ' value="'. $menu_item->ID .'"';
     109        $classes = 'frontend' == $args->type ? 'class="menu-item-'. $menu_item->type . $menu_item->li_class .'"' : '';
     110       
     111        $nav_menu .= '<li id="menu-item-'. $menu_item->ID .'"'. $maybe_value . $classes .'>';
     112        $nav_menu .= wp_get_nav_menu_item( $menu_item, $args->type, $args );
     113       
     114        // Indent children
     115        $last_item = ( count( $menu_items ) == $menu_item->menu_order );
     116        if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) {
     117            if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) {
     118                $nav_menu .= '</li>';
     119                while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) {
     120                    $nav_menu .= '</ul></li>';
     121                    $current_parent = array_pop( $parent_stack );
     122                }
     123            } else {
     124                array_push( $parent_stack, $current_parent );
     125                $current_parent = $menu_item->ID;
     126                $nav_menu .= '<ul>';
     127            }
     128        } else {
     129            $nav_menu .= '</li>';
    75130        }
    76 
    77         // Display Loop
    78         foreach ( $menu_items as $key => $menu_item ) {
    79             $menu_item = wp_setup_nav_menu_item($menu_item);
    80             // List Items
    81             ?><li id="menu-<?php echo $menu_item->ID; ?>" value="<?php echo $menu_item->ID; ?>" <?php echo $menu_item->li_class; ?>><?php
    82             wp_print_nav_menu_item($menu_item, $type, $args);
    83             // Indent children
    84             $last_item = ( count( $menu_items ) == $menu_item->menu_order );
    85             if ( $last_item || $current_parent != $menu_items[ $key + 1 ]->post_parent ) {
    86                 if ( $last_item || in_array( $menu_items[ $key + 1 ]->post_parent, $parent_stack ) ) { ?>
    87         </li>
    88 <?php                   while ( !empty( $parent_stack ) && ($last_item || $menu_items[ $key + 1 ]->post_parent != $current_parent ) ) { ?>
    89             </ul>
    90         </li>
    91 <?php                   $current_parent = array_pop( $parent_stack );
    92                     } ?>
    93 <?php               } else {
    94                     array_push( $parent_stack, $current_parent );
    95                     $current_parent = $menu_item->ID; ?>
    96             <ul>
    97 <?php               }
    98             } else { ?>
    99         </li>
    100 <?php       }
    101     }
     131       
     132    endforeach;
     133   
     134    $nav_menu .= '</ul>';
     135   
     136    return apply_filters( 'wp_get_nav_menu', $nav_menu );
    102137}
    103138
    104 function wp_print_nav_menu_item( $menu_item, $context, $args = array() ) {
     139/**
     140 * Returns a menu item.
     141 *
     142 * @since 3.0.0
     143 *
     144 * @param object $menu_item The menu item
     145 * @param string $context frontend|backend|default
     146 * @param array $args See wp_get_nav_menu().
     147 **/
     148function wp_get_nav_menu_item( $menu_item, $context, $args = array() ) {
     149    $item = '';
    105150    switch ( $context ) {
     151        case 'frontend':
     152            $attr_title = ( isset($menu_item->anchor_title) && '' != $menu_item->anchor_title ) ? ' title="'. esc_attr($menu_item->anchor_title) .'"' : '';
     153            $href = isset($menu_item->link) ? ' href="'. esc_url($menu_item->link) .'"' : '';
     154           
     155            $item .= '<a'. $attr_title . $href . $menu_item->target .'>';
     156            $item .= $args->before_link . esc_html( $menu_item->title ) . $args->after_link;
     157            $item .= '</a>';
     158           
     159            break;
     160       
    106161        case 'backend':
    107         case 'menu':
    108 ?>
    109                         <dl>
    110                             <dt>
    111                                 <span class="item-title"><?php echo esc_html($menu_item->title); ?></span>
    112                                 <span class="item-controls">
    113                                     <span class="item-type"><?php echo esc_html($menu_item->type); ?></span>
    114                                     <a class="item-edit thickbox" id="edit<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->menu_order ); ?>" title="<?php _e('Edit Menu Item'); ?>" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings"><?php _e('Edit'); ?></a> |
    115                                     <a class="item-delete" id="delete<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->menu_order ); ?>"><?php _e('Delete'); ?></a>
    116                                 </span>
    117                             </dt>
    118                         </dl>
    119                         <?php if ( 'backend' == $context ) { ?>
    120                         <a><span class=""></span></a>
    121                         <?php } else { ?>
    122                         <a class="hide" href="<?php echo $menu_item->link; ?>"><?php echo esc_html( $menu_item->title ); ?></a>
    123                         <?php } ?>
    124                         <input type="hidden" name="dbid<?php echo esc_attr( $menu_item->menu_order ); ?>" id="dbid<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->ID ); ?>" />
    125                         <input type="hidden" name="postmenu<?php echo esc_attr( $menu_item->menu_order ); ?>" id="postmenu<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( get_post_meta( $menu_item->ID, 'object_id', true ) ); ?>" />
    126                         <input type="hidden" name="parent<?php echo esc_attr( $menu_item->menu_order ); ?>" id="parent<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->parent_item ); ?>" />
    127                         <input type="hidden" name="icon<?php echo esc_attr( $menu_item->menu_order ); ?>" id="icon<?php echo esc_attr( $menu_item->menu_order ); ?>" value="0" />
    128                         <input type="hidden" name="position<?php echo esc_attr( $menu_item->menu_order ); ?>" id="position<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->menu_order ); ?>" />
    129                         <input type="hidden" name="linktype<?php echo esc_attr( $menu_item->menu_order ); ?>" id="linktype<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( get_post_meta( $menu_item->ID, 'menu_type', true ) ); ?>" />
    130                         <input type="hidden" name="item-title<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-title<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->title ); ?>" />
    131                         <input type="hidden" name="item-url<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-url<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->link ); ?>" />
    132                         <input type="hidden" name="item-description<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-description<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->description ); ?>" />
    133                         <input type="hidden" name="item-attr-title<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-attr-title<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo esc_attr( $menu_item->post_excerpt ); ?>" />
    134                         <input type="hidden" name="item-target<?php echo esc_attr( $menu_item->menu_order ); ?>" id="item-target<?php echo esc_attr( $menu_item->menu_order ); ?>" value="<?php echo ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ? '1' : '0' ); ?>" />
    135 <?php
    136         break;
    137 
    138         case 'frontend':
    139             // Override for menu descriptions
    140             $advanced_option_descriptions = get_option('wp_settings_nav_menu_advanced_options');
    141             if ( $advanced_option_descriptions == 'no' )
    142                 $args['desc'] = 2;
    143 ?>
    144             <a title="<?php echo esc_attr( $menu_item->anchor_title ); ?>" href="<?php echo esc_url( $menu_item->link ); ?>" <?php echo $menu_item->target; ?>><?php echo $args['before_title'] . esc_html( $menu_item->title ) . $args['after_title']; ?><?php
    145 
    146                             if ( $advanced_option_descriptions == 'no' ) {
    147                                 // 2 widget override do NOT display descriptions
    148                                 // 1 widget override display descriptions
    149                                 // 0 widget override not set
    150                                 if ( ($args['desc'] == 1) || ($args['desc'] == 0) ) {
    151                                     ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php
    152                                 }
    153                             } else {
    154                                 // 2 widget override do NOT display descriptions
    155                                 // 1 widget override display descriptions
    156                                 // 0 widget override not set
    157                                 if ( $args['desc'] == 1 ) {
    158                                     ?><span class="nav-description"><?php echo $menu_item->description; ?></span><?php
    159                                 }
    160                             }
    161                         ?></a>
    162 <?php
    163         break;
    164 
     162            $item .= '<dl><dt>';
     163            $item .= '<span class="item-title">'. esc_html($menu_item->title) .'</span>';
     164            $item .= '<span class="item-controls">';
     165            $item .= '<span class="item-type">'. esc_html($menu_item->type) .'</span>';
     166           
     167            // Actions
     168            $item .= '<a class="item-edit thickbox" id="edit'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'" title="'. __('Edit Menu Item') .'" href="#TB_inline?height=380&width=300&inlineId=menu-item-settings">'. __('Edit') .'</a> | ';
     169            $item .= '<a class="item-delete" id="delete'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'">'. __('Delete') .'</a>';
     170           
     171            $item .= '</dt></dl>';
     172           
     173            // Menu Item Settings
     174            $item .= '<input type="hidden" id="item-dbid'. esc_attr( $menu_item->menu_order ) .'" name="item-dbid'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->ID ) .'" />';
     175            $item .= '<input type="hidden" id="item-postmenu'. esc_attr( $menu_item->menu_order ) .'" name="item-postmenu'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( get_post_meta( $menu_item->ID, 'object_id', true ) ) .'" />';
     176            $item .= '<input type="hidden" id="item-parent'. esc_attr( $menu_item->menu_order ) .'" name="item-parent'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->parent_item ) .'" />';
     177            $item .= '<input type="hidden" id="item-position'. esc_attr( $menu_item->menu_order ) .'" name="item-position'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->menu_order ) .'" />';
     178            $item .= '<input type="hidden" id="item-type'. esc_attr( $menu_item->menu_order ) .'" name="item-type'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( get_post_meta( $menu_item->ID, 'menu_type', true ) ) .'" />';
     179            $item .= '<input type="hidden" id="item-title'. esc_attr( $menu_item->menu_order ) .'" name="item-title'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->title ) .'" />';
     180            $item .= '<input type="hidden" id="item-url'. esc_attr( $menu_item->menu_order ) .'" name="item-url'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->link ) .'" />';
     181            $item .= '<input type="hidden" id="item-description'. esc_attr( $menu_item->menu_order ) .'" name="item-description'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( $menu_item->description ) .'" />';
     182            $item .= '<input type="hidden" id="item-attr-title'. esc_attr( $menu_item->menu_order ) .'" name="item-attr-title'. esc_attr( $menu_item->menu_order ) .'" value="'.esc_attr( $menu_item->post_excerpt )  .'" />';
     183            $item .= '<input type="hidden" id="item-target'. esc_attr( $menu_item->menu_order ) .'" name="item-target'. esc_attr( $menu_item->menu_order ) .'" value="'. esc_attr( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ? '1' : '0' ) .'" />';
     184            break;
     185           
    165186        case 'default':
    166187            $menu_id = 'menu-item-' . $menu_item->ID;
     188            $item .= '<label class="item-title"><input type="checkbox" id="'. esc_attr($menu_id) .'" name="'. esc_attr( $menu_item->title ) .'" value="'. esc_attr( $menu_item->link ) .'" />'. $menu_item->title .'</label>';
     189           
     190            // Menu Item Settings
     191            $item .= '<input type="hidden" class="item-type" value="'. esc_attr( $menu_item->append ) .'" />';
     192            $item .= '<input type="hidden" class="item-title" value="'. esc_attr( $menu_item->title ) .'" />';
     193            $item .= '<input type="hidden" class="item-url" value="'. esc_attr( $menu_item->link ) .'" />';
     194            $item .= '<input type="hidden" class="item-dbid" value="'. esc_attr( $menu_item->ID ) .'" />';
     195            $item .= '<input type="hidden" class="item-parent" value="'. esc_attr( $menu_item->parent_item ) .'" />';
     196            $item .= '<input type="hidden" class="item-description" value="'. esc_attr( $menu_item->description ) .'" />';
     197            break;
     198    }
     199    return apply_filters( 'wp_get_nav_menu_item', $item );
     200}
    167201?>
    168                     <dl>
    169                         <dt>
    170                             <label class="item-title"><input type="checkbox" id="<?php echo esc_attr($menu_id); ?>" onclick="wp_update_queue('<?php echo esc_js( $menu_item->append ); ?>','<?php echo esc_js( $menu_item->title ); ?>','<?php echo esc_js( $menu_item->link ); ?>','<?php echo esc_js( $menu_item->ID ); ?>','<?php echo esc_js( $menu_item->parent_item ); ?>','<?php echo esc_js( $menu_item->description ); ?>')" name="<?php echo esc_attr( $menu_item->title ); ?>" value="<?php echo esc_attr( $menu_item->link ); ?>" /><?php echo $menu_item->title; ?></label>
    171                         </dt>
    172                     </dl>
    173 <?php
    174         break;
    175     }
    176 }
    177 
    178 ?>
  • trunk/wp-includes/nav-menu.php

    r13473 r13512  
    88 */
    99
    10 // Deletes a nav menu
    11 function wp_delete_nav_menu( $menu_id ) {
    12     $menu_id = (int) $menu_id;
    13     if ( !$menu_id  )
     10/**
     11 * Returns a Navigation Menu object
     12 *
     13 * @since 3.0.0
     14 *
     15 * @param string $menu Menu id
     16 * @return mixed $menu|false
     17 */
     18function wp_get_nav_menu_object( $menu ) {
     19    return is_nav_menu( $menu );
     20}
     21
     22/**
     23 * Check if Menu exists.
     24 *
     25 * Returns the menu object, or false if the term doesn't exist.
     26 *
     27 * @since 3.0.0
     28 *
     29 * @param int|string $menu The menu to check
     30 * @return mixed Menu Object, if exists.
     31 */
     32function is_nav_menu( $menu ) {
     33    if ( $menu ) {
     34        $menu = get_term( $menu, 'nav_menu' );
     35    } elseif ( !$menu ) {
     36        $menu = get_term_by( 'slug', $menu, 'nav_menu' );
     37    } elseif( !$menu ) {
     38        $menu = get_term_by( 'name', $menu, 'nav_menu' );
     39    } else {
     40        $menu = false;
     41    }
     42       
     43    return $menu;
     44}
     45
     46/**
     47 * Returns all Navigation Menu objects.
     48 *
     49 * @since 3.0.0
     50 *
     51 * @return array menu objects
     52 */
     53function wp_get_nav_menus() {
     54    return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
     55}
     56
     57/**
     58 * Creates a navigation menu.
     59 *
     60 * Optional args:
     61 * slug - the url friendly version of the nav menu.
     62 *
     63 * @since 3.0.0
     64 *
     65 * @param string $menu_name Menu Name
     66 * @param string $args Optional.
     67 * @return mixed Menu object|WP_Error
     68 */
     69function wp_create_nav_menu( $menu_name, $args = array() ) {
     70    $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' );
     71
     72    if ( $menu_exists )
     73        return new WP_Error( 'menu_exists', sprintf( __('A menu named &#8220;%s&#8221; already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
     74
     75    if ( isset($args['slug']) )
     76        $slug = $args['slug'];
     77    else
     78        $slug = $menu_name;
     79
     80    $menu = wp_insert_term( $menu_name, 'nav_menu', array('slug' => $slug) );
     81
     82    if ( is_wp_error($menu) )
     83        return $menu;
     84
     85    return get_term( $menu['term_id'], 'nav_menu') ;
     86}
     87
     88/**
     89 * Deletes a navigation menu.
     90 *
     91 * @since 3.0.0
     92 *
     93 * @param string $menu name|id|slug
     94 * @return bool true on success, else false.
     95 */
     96function wp_delete_nav_menu( $menu ) {
     97    $menu = wp_get_nav_menu_object( $menu );
     98    if ( !$menu  )
    1499        return false;
    15100
    16     $menu_objects = get_objects_in_term( $menu_id, 'nav_menu' );
     101    $menu_objects = get_objects_in_term( $menu->term_id, 'nav_menu' );
    17102    if ( !empty( $menu_objects ) ) {
    18103        foreach ( $menu_objects as $item ) {
     
    23108}
    24109
    25 // Creates a new nav menu
    26 function wp_create_nav_menu( $menu_name, $args = array() ) {
    27     $menu_exists = get_term_by( 'name', $menu_name, 'nav_menu' );
    28 
    29     if ( $menu_exists )
    30         return new WP_Error( 'menu_exists', sprintf( __('A menu named &#8220;%s&#8221; already exists; please try another name.'), esc_html( $menu_exists->name ) ) );
    31 
    32     if ( isset($args['slug']) )
    33         $slug = $args['slug'];
    34     else
    35         $slug = $menu_name;
    36 
    37     $menu = wp_insert_term( $menu_name, 'nav_menu', array('slug' => $slug) );
    38 
    39     if ( is_wp_error($menu) )
    40         return $menu;
    41 
    42     return get_term( $menu['term_id'], 'nav_menu');
    43 }
    44 
    45 // Creates a default menu if none exists
     110/**
     111 * Creates a nav menu named 'Menu 1'.
     112 *
     113 * This function is called if the user doesn't have any nav menus.
     114 * It grabs the first 14 pages, and creates a new default menu.
     115 *
     116 * @since 3.0.0
     117 */
    46118function wp_create_default_nav_menu() {
    47119    $menu = wp_create_nav_menu( __('Menu 1'), array('slug' => 'menu-1') );
     
    62134}
    63135
    64 // Get nav menu by id
    65 function wp_get_nav_menu( $menu ) {
    66     return get_term( (int) $menu, 'nav_menu' );
    67 }
    68 
    69 // Get all nav menus
    70 function wp_get_nav_menus() {
    71     return get_terms( 'nav_menu', array( 'hide_empty' => false, 'orderby' => 'id' ) );
    72 }
    73 
    74 // Get the nav menu items
     136/**
     137 * Returns the menu items of a navigation menu.
     138 *
     139 * @since 3.0.0
     140 *
     141 * @param string $menu menu name, id, or slug
     142 * @param string $args
     143 * @return mixed $items array of menu items, else false.
     144 */
    75145function wp_get_nav_menu_items( $menu, $args = array() ) {
    76     $items = get_objects_in_term( (int) $menu, 'nav_menu' );
     146    $menu = wp_get_nav_menu_object( $menu );
     147   
     148    if ( !$menu )
     149        return false;
     150   
     151    $items = get_objects_in_term( $menu->term_id, 'nav_menu' );
    77152
    78153    if ( ! empty( $items ) ) {
    79154        $defaults = array( 'orderby' => 'menu_order', 'post_type' => 'nav_menu_item', 'post_status' => 'publish', 'output' => ARRAY_A, 'output_key' => 'menu_order' );
    80         $args = wp_parse_args($args, $defaults);
     155        $args = wp_parse_args( $args, $defaults );
    81156        if ( count( $items ) > 1 ) 
    82157            $args['include'] = implode( ',', $items );
     
    91166                $output[$item->$args['output_key']] = $item;
    92167            }
    93             unset($items);
    94             ksort($output);
     168            unset( $items );
     169            ksort( $output );
    95170            return $output;
    96171        }
     
    99174}
    100175
    101 // wp_setup_nav_menu_item()
    102 function wp_setup_nav_menu_item($menu_item, $type = 'item', $position = 0) {
     176/**
     177 * Returns a menu item with all it's nessecary data populated.
     178 *
     179 * @since 3.0.0
     180 *
     181 * @param string $menu_item Menu item.
     182 * @param string $type item|category|page.
     183 * @param string $position position of the menu item.
     184 * @return $menu_item
     185 */
     186function wp_setup_nav_menu_item( $menu_item, $type = 'item', $position = 0 ) {
    103187    global $parent_menu_order;
    104188
    105189    if ( 'item' == $type ) {
    106         $menu_item->type = get_post_meta($menu_item->ID, 'menu_type', true);
    107         $menu_item->object_id = get_post_meta($menu_item->ID, 'object_id', true);
     190        $menu_item->type = get_post_meta( $menu_item->ID, 'menu_type', true );
     191        $menu_item->object_id = get_post_meta( $menu_item->ID, 'object_id', true );
    108192        $menu_item->target = ( get_post_meta( $menu_item->ID, 'menu_new_window', true ) ) ? 'target="_blank"' : '';
    109193        if ( isset( $parent_menu_order[ $menu_item->post_parent ] ) )
     
    166250    $menu_item->li_class = '';
    167251    global $wp_query;
    168     if ( $menu_item->ID == $wp_query->get_queried_object_id() )
    169         $menu_item->li_class = 'class="current_page_item"';
     252   
     253    if ( $menu_item->object_id == $wp_query->get_queried_object_id() )
     254        $menu_item->li_class = ' current_page_item';
    170255
    171256    $menu_item->anchor_title = '';
     
    196281    return $menu_item;
    197282}
    198 
    199283?>
Note: See TracChangeset for help on using the changeset viewer.