diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php index 98e15cf88..e43cf0671 100644 --- a/wp-admin/admin-ajax.php +++ b/wp-admin/admin-ajax.php @@ -1004,7 +1004,7 @@ case 'closed-postboxes' : update_user_option($user->ID, "closedpostboxes_$page", $closed); if ( is_array($hidden) ) { - $hidden = array_diff( $hidden, array('submitdiv', 'linksubmitdiv') ); // postboxes that are always shown + $hidden = array_diff( $hidden, array('submitdiv', 'linksubmitdiv', 'manage-menu', 'create-menu') ); // postboxes that are always shown update_user_option($user->ID, "meta-box-hidden_$page", $hidden); } @@ -1395,6 +1395,33 @@ case 'set-post-thumbnail': } } die( '0' ); +case 'save-custom-link': + if ( ! current_user_can('manage_links') ) + die('-1'); + + $link_name = isset( $_POST['link_name'] ) ? esc_html($_POST['link_name']) : null; + $link_url = isset( $_POST['link_url'] ) ? esc_url_raw($_POST['link_url']) : null; + + if ( !$link_name || !$link_url ) + die('-1'); + + $post = array( + 'post_status' => 'draft', 'post_type' => 'nav_menu_item', 'ping_status' => 0, + 'post_author' => $user_ID, 'post_title' => $link_name, 'post_excerpt' => '', + 'post_parent' => 0, 'menu_order' => 0, 'post_content' => '', + ); + + $link_id = wp_insert_post( $post ); + + update_post_meta( $link_id, '_menu_item_type', 'custom' ); + update_post_meta( $link_id, '_menu_item_object_id', (int) $link_id ); + update_post_meta( $link_id, '_menu_item_object', 'custom' ); + update_post_meta( $link_id, '_menu_item_target', '_self' ); + update_post_meta( $link_id, '_menu_item_classes', '' ); + update_post_meta( $link_id, '_menu_item_xfn', '' ); + update_post_meta( $link_id, '_menu_item_url', $link_url ); + + die( json_encode($link_id) ); default : do_action( 'wp_ajax_' . $_POST['action'] ); die('0'); diff --git a/wp-admin/css/nav-menu.css b/wp-admin/css/nav-menu.css index 07c8034ac..d10885673 100644 --- a/wp-admin/css/nav-menu.css +++ b/wp-admin/css/nav-menu.css @@ -1 +1 @@ -#menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.button-controls{float:left;}.add-to-menu{float:right;}#manage-menu .inside{padding:0;}#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-textbox{float:right;width:220px;}.howto span{margin-top:4px;display:block;float:left;}.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 .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .menu-item-title{margin-left:14px;}.list li ul li ul li .menu-item-title{margin-left:28px;}.list li ul li ul li ul li .menu-item-title{margin-left:42px;}.list li ul li ul li ul li ul li .menu-item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .menu-item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-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 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 .menu-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;} \ No newline at end of file +#menu-management{clear:both;}#menu-management .inside{padding:0 10px;}#menu-container .submit{margin:0 0 10px;padding:0;}.submitdelete{font-size:11px;}#cancel-save{color:#f00;text-decoration:underline;font-size:11px;margin-left:20px;margin-top:5px;}#cancel-save:hover{background-color:#F00;color:#fff;}.list-controls{float:left;}.add-to-menu{float:right;}.button-controls{margin:10px 0;}.show-all,.hide-all{cursor:pointer;}.hide-all{display:none;}#create-menu-name{width:159px;}#manage-menu .inside{padding: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-textbox{float:right;width:220px;}.howto span{margin-top:4px;display:block;float:left;}.quick-search{width:190px;}.list-wrap{display:none;clear:both;margin-bottom:10px;}.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 .menu-item-title{cursor:pointer;display:block;}.list li .menu-item-title input{margin-right:3px;margin-top:-3px;}.list li ul li .menu-item-title{margin-left:14px;}.list li ul li ul li .menu-item-title{margin-left:28px;}.list li ul li ul li ul li .menu-item-title{margin-left:42px;}.list li ul li ul li ul li ul li .menu-item-title{margin-left:56px;}.list li ul li ul li ul li ul li ul li .menu-item-title{margin-left:70px;}.list li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:84px;}.list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title{margin-left:98px;}.list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-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-radius:6px;border-radius:6px;-moz-border-radius: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 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 .menu-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;}.button-controls:after,#menu-item-url-wrap:after,#menu-item-name-wrap:after{content:".";display:block;height:0;clear:both;visibility:hidden;}.button-controls,#menu-item-url-wrap,#menu-item-name-wrap{display:block;} \ No newline at end of file diff --git a/wp-admin/css/nav-menu.dev.css b/wp-admin/css/nav-menu.dev.css index 923857d9f..01333b359 100644 --- a/wp-admin/css/nav-menu.dev.css +++ b/wp-admin/css/nav-menu.dev.css @@ -20,28 +20,26 @@ #cancel-save:hover { background-color: #FF0000; color: #fff; } /* Button Secondary Actions */ -.button-controls { float: left; } +.list-controls { float: left; } .add-to-menu { float: right; } - -#manage-menu .inside { padding: 0px 0px; } +.button-controls { margin: 10px 0; } +.show-all, .hide-all { cursor: pointer; } +.hide-all { display: none; } /* Create Menu */ #create-menu-name { width: 159px; } +#manage-menu .inside { padding: 0px 0px; } /* Custom Links */ -#available-links { margin: 15px 0px 0px; } #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-textbox { float: right; width: 220px; } .howto span { margin-top: 4px; display: block; float: left; } -/* Pages/Categories */ -.show-all, .hide-all { cursor: pointer; } -.hide-all { display: none; } - +/* Menu item types */ .quick-search { width: 190px; } -.list-wrap { display: none; clear: both; } +.list-wrap { display: none; clear: both; margin-bottom: 10px; } .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; } @@ -60,12 +58,12 @@ .list li ul li ul li ul li ul li ul li ul li ul li .menu-item-title { margin-left: 98px; } .list li ul li ul li ul li ul li ul li ul li ul li ul li .menu-item-title { margin-left: 112px; } -/* Menu */ +/* Nav Menu */ #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 { -webkit-border-radius: 6px; border-radius: 6px; -moz-border-radius: 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 { } @@ -78,7 +76,7 @@ .dropzone { height: 7px; margin: 3px 0 3px 0; } .ui-draggable-dragging { width: 600px; } -/* Menu Controls */ +/* Menu item controls */ .item-type { text-transform: uppercase; font-size: 11px; color: #999999; padding-right: 10px; } .item-controls { font-size: 11px; position: absolute; right: 15px; top: -1px; } .item-controls a { text-decoration: none; } @@ -92,4 +90,8 @@ #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; } \ No newline at end of file +#update-menu-item:focus { color: #eaf2fa !important; border-color: #13455b !important; } + +/* Clearfix */ +.button-controls:after, #menu-item-url-wrap:after, #menu-item-name-wrap:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.button-controls, #menu-item-url-wrap, #menu-item-name-wrap { display: block; } \ No newline at end of file diff --git a/wp-admin/includes/nav-menu.php b/wp-admin/includes/nav-menu.php index 73e1443fb..0af3626df 100644 --- a/wp-admin/includes/nav-menu.php +++ b/wp-admin/includes/nav-menu.php @@ -1,10 +1,46 @@ ID, 'meta-box-hidden_nav-menus', $hidden_meta_boxes ); + + // returns all the hidden metaboxes to the js function: wpNavMenu.initial_meta_boxes() + return join( ',', $hidden_meta_boxes ); + } +} /** * Creates metaboxes for any post type menu item. @@ -15,15 +51,11 @@ function wp_nav_menu_post_type_metaboxes() { $post_types = get_post_types( array( 'public' => true ), 'object' ); if ( !$post_types ) - return false; + return; - $allowed_types = apply_filters('post_types_allowed_in_menus', array('page')); foreach ( $post_types as $post_type ) { - if ( !in_array($post_type->name, $allowed_types) ) - continue; $id = $post_type->name; - - add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'menus', 'side', 'default', $post_type ); + add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $post_type->singular_label ), 'wp_nav_menu_item_post_type_metabox', 'nav-menus', 'side', 'default', $post_type ); } } @@ -36,15 +68,12 @@ function wp_nav_menu_taxonomy_metaboxes() { $taxonomies = get_taxonomies( array( 'show_ui' => true ), 'object' ); if ( !$taxonomies ) - return false; + return; - $allowed_types = apply_filters('taxonomies_allowed_in_menus', array('category')); foreach ( $taxonomies as $tax ) { - if ( !in_array($tax->name, $allowed_types) ) - continue; $id = $tax->name; - add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'menus', 'side', 'default', $tax ); + add_meta_box( "add-{$id}", sprintf( __('Add an Existing %s'), $tax->singular_label ), 'wp_nav_menu_item_taxonomy_metabox', 'nav-menus', 'side', 'default', $tax ); } } @@ -98,11 +127,11 @@ function wp_nav_menu_create_metabox() { ?> * @since 3.0.0 */ function wp_nav_menu_item_link_metabox() { - $args = array( 'post_status' => 'any', 'post_type' => 'nav_menu_item', 'meta_value' => 'custom', 'showposts' => -1 ); + // @note: hacky query, see #12660 + $args = array( 'post_type' => 'nav_menu_item', 'post_status' => 'any', 'meta_key' => '_menu_item_type', 'numberposts' => -1, 'orderby' => 'title', ); // @todo transient caching of these results with proper invalidation on updating links - $query = new WP_Query( $args ); - + $links = get_posts( $args ); ?> -

- - + + + + + + + +

-

- -

$post_type['args']->name, 'post_status' => 'publish', 'showposts' => -1 ); - - if ( 'attachment' == $post_type['args']->name ) - $args['post_status'] = 'any'; + $args = array( 'post_type' => $post_type['args']->name, 'numberposts' => -1, 'orderby' => 'title', ); // @todo transient caching of these results with proper invalidation on updating of a post of this type - $query = new WP_Query( $args ); + $posts = get_posts( $args ); - if ( !$query->posts ) + if ( !$posts ) $error = '
  • '. sprintf( __( 'No %s exists' ), $post_type['args']->label ) .'
  • '; $pt_names = ''; - if ( is_array($query->posts) ) { - foreach ( $query->posts as $post ) { + if ( is_array($posts) ) { + foreach ( $posts as $post ) { if ( $post->post_title ) { $pt_names .= htmlentities( $post->post_title ) .'|'; - } else { - $pt_names = sprintf( __('No %s exists'), $post_type['args']->label ); } } } @@ -175,26 +201,29 @@ function wp_nav_menu_item_post_type_metabox( $object, $post_type ) {

    - - + + + + + + + +

    -

    - -


    @@ -227,8 +256,6 @@ function wp_nav_menu_item_taxonomy_metabox( $object, $taxonomy ) { foreach ( $terms as $term ) { if ( $term->name ) { $term_names .= htmlentities( $term->name ) .'|'; - } else { - $term_names = sprintf( __('No %s exists'), $taxonomy['args']->label ); } } } @@ -241,8 +268,14 @@ function wp_nav_menu_item_taxonomy_metabox( $object, $taxonomy ) {

    - - + + + + + + + +

    @@ -252,15 +285,12 @@ function wp_nav_menu_item_taxonomy_metabox( $object, $taxonomy ) {
    -

    - -


    @@ -290,15 +320,20 @@ function wp_nav_menu_get_items( $menu_items, $object_type, $object = null, $cont if ( !isset($menu_item->post_parent) ) $menu_item->post_parent = $menu_item->parent; - // Cleanest way to get all attachements - if ( 'attachment' == $object ) + // Get all attachements and links + if ( in_array($object, array( 'attachment', 'custom' )) ) $menu_item->post_parent = 0; if ( 0 == $menu_item->post_parent ) { // Set up the menu item $menu_item = wp_setup_nav_menu_item( $menu_item, $object_type, $object ); + + // No blank titles + if ( empty($menu_item->title) ) + continue; + $attributes = ( 'backend' == $context ) ? ' id="menu-item-'. $i .'" value="'. $i .'"' : ''; - + $output .= ''; $output .= wp_get_nav_menu_item( $menu_item, $object_type, $object ); $output .= wp_get_nav_menu_sub_items( $menu_item->ID, $object_type, $object, $context ); diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php index b3008ef19..fc7aba971 100644 --- a/wp-admin/includes/upgrade.php +++ b/wp-admin/includes/upgrade.php @@ -1105,13 +1105,26 @@ function upgrade_290() { * @since 3.0.0 */ function upgrade_300() { - global $wp_current_db_version; + global $wp_current_db_version, $wpdb; if ( $wp_current_db_version < 12751 ) { populate_roles_300(); if ( is_multisite() && is_main_site() && ! defined( 'MULTISITE' ) && get_site_option( 'siteurl' ) === false ) add_site_option( 'siteurl', '' ); } + + // 3.0-alpha nav menu postmeta changes. can be removed before release + if ( $wp_current_db_version >= 13226 && $wp_current_db_version < 13802 ) { + // remove old nav menu post meta keys + $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key IN( 'menu_type', 'object_id', 'menu_new_window', 'menu_link', '_menu_item_append', 'menu_item_append' )" ); + // update nav menu post meta keys to underscore prefixes + $wpdb->update( $wpdb->postmeta, array( 'meta_key' => '_menu_item_type' ), array( 'meta_key' => 'menu_item_type' ) ); + $wpdb->update( $wpdb->postmeta, array( 'meta_key' => '_menu_item_object_id' ), array( 'meta_key' => 'menu_item_object_id' ) ); + $wpdb->update( $wpdb->postmeta, array( 'meta_key' => '_menu_item_target' ), array( 'meta_key' => 'menu_item_target' ) ); + $wpdb->update( $wpdb->postmeta, array( 'meta_key' => '_menu_item_classes' ), array( 'meta_key' => 'menu_item_classes' ) ); + $wpdb->update( $wpdb->postmeta, array( 'meta_key' => '_menu_item_xfn' ), array( 'meta_key' => 'menu_item_xfn' ) ); + $wpdb->update( $wpdb->postmeta, array( 'meta_key' => '_menu_item_url' ), array( 'meta_key' => 'menu_item_url' ) ); + } } /** diff --git a/wp-admin/js/nav-menu.dev.js b/wp-admin/js/nav-menu.dev.js index 59bb36b3c..f418962c8 100644 --- a/wp-admin/js/nav-menu.dev.js +++ b/wp-admin/js/nav-menu.dev.js @@ -1,489 +1,491 @@ /** - * WordPress Administration Custom Navigation + * WordPress Administration Navigation Menu * Interface JS functions * - * @version 1.1.0 - * - * @package WordPress - * @subpackage Administration - */ - -function wp_nav_menu_autocomplete( id ) { - jQuery('#add-'+ id +' .quick-search').autocomplete(jQuery( '#add-'+ id +' .autocomplete' ).val().split('|')); - - jQuery('#add-'+ id +' .quick-search').result(function(event, data, formatted) { - jQuery('#add-'+ id +' .list-wrap').css( 'display', 'block' ); - jQuery("#add-"+ id +" .list-wrap li:contains('" + data + "')").css( 'display', 'block' ); - jQuery('#add-'+ id +' .show-all').hide(); - jQuery('#add-'+ id +' .hide-all').show(); - }); -} - -/** - * Populate the thickbox window with the selected menu items - * - * @param int id - the id of the menu li to edit. - */ -function wp_edit_menu_item( id ) { - var item_type = jQuery('#menu-item-type' + id).val(); - var item_title = jQuery('#menu-item-title' + id).val(); - var item_link = jQuery('#menu-item-url' + id).val(); - var item_attr_title = jQuery('#menu-item-attr-title' + id).val(); - var item_target = jQuery('#menu-item-target' + id).val(); - var item_description = jQuery('#menu-item-description' + id).val(); - var item_classes = jQuery('#menu-item-classes' + id).val(); - var item_xfn = jQuery('#menu-item-xfn' + id).val(); - - // Only allow custom links to be editable. - if ( 'custom' != item_type ) - jQuery( '#edit-menu-item-url' ).attr('disabled', 'disabled' ); - - // Populate the fields for thickbox - jQuery( '#edit-menu-item-id' ).val(id); - jQuery( '#edit-menu-item-title' ).val(item_title); - jQuery( '#edit-menu-item-url' ).val(item_link); - jQuery( '#edit-menu-item-attr-title' ).val(item_attr_title); - jQuery( '#edit-menu-item-target' ).val(item_target); - jQuery( "#edit-menu-item-target option[value='" + item_target + "']" ).attr('selected', 'selected'); - jQuery( '#edit-menu-item-description' ).val(item_description); - jQuery( '#edit-menu-item-classes' ).val(item_classes); - jQuery( '#edit-menu-item-xfn' ).val(item_xfn); - - // focus - jQuery( '#edit-menu-item-title' ).focus(); -}; - -/** - * Update the values for the menu item being editing - */ -function wp_update_menu_item() { - var id = jQuery('#edit-menu-item-id').val(); - var item_title = jQuery('#edit-menu-item-title').val(); - var item_link = jQuery('#edit-menu-item-url').val(); - var item_attr_title = jQuery('#edit-menu-item-attr-title').val(); - var item_target = jQuery('#edit-menu-item-target').val(); - var item_description = jQuery('#edit-menu-item-description').val(); - var item_classes = jQuery('#edit-menu-item-classes').val(); - var item_xfn = jQuery('#edit-menu-item-xfn').val(); - - // update menu item settings - jQuery('.menu #menu-item' + id).find('span.item-title').html(item_title); - jQuery('.menu #menu-item-title' + id).val(item_title); - jQuery('.menu #menu-item-url' + id).val(item_link); - jQuery('.menu #menu-item-attr-title' + id).val(item_attr_title); - jQuery('.menu #menu-item-target' + id).val(item_target); - jQuery('.menu #menu-item-description' + id).val(item_description); - jQuery('.menu #menu-item-classes' + id).val(item_classes); - jQuery('.menu #menu-item-xfn' + id).val(item_xfn); - - jQuery('.menu #menu-item' + id + ' dt:first').animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); -} - -/** - * Removes a menu item from current menu - * - * @param int o - the id of the menu li to remove. - */ -function wp_remove_menu_item( o ) { - var todelete = document.getElementById('menu-item' + o); - - if ( todelete ) { - // Give some feedback to the user - jQuery( todelete ).find('dt').each(function(){ - jQuery(this).animate( { backgroundColor: '#FF3333' }, { duration: 'normal', complete: function() { jQuery(this).parent().parent().remove() } } ); - }); - } -}; - -/** - * Adds the item to the menu - * - * @param string item_db_id - The menu item's db id. - * @param string item_object_id - The menu item's object id. - * @param string item_type - The menu item's object type. - * @param string item_append - The menu item's nice name. - * @param string item_parent_id - The menu item's parent id. - * @param string item_title - The menu item title. - * @param string item_url - The menu item url - * @param string item_description - The menu item description. - * @param string item_attr_title - The title attribute. - * @param string item_target - The target attribute. - * @param string item_classes - Optional. Additional CSS classes for the menu item - * @param string item_xfn - Optional. The rel attribute. - */ -function wp_add_item_to_menu( item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ) { - var randomnumber = wp_get_unique_menu_id(); - var hidden = wp_get_hidden_inputs( randomnumber, item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ); - - // Adds the item in the queue - jQuery('.menu').append(''); - - // Give some feedback to the user - jQuery( '.menu #menu-item' + randomnumber + ' dt:first' ).animate( { backgroundColor: '#FFFF33' }, { duration: 'normal', complete: function() { jQuery(this).css( 'backgroundColor', '' ); }}); - - // Enable drag-n-drop - wp_drag_and_drop(); - - // Reload thickbox - tb_init('a.thickbox, area.thickbox, input.thickbox'); -}; - -/** - * Grabs items from the queue and adds them to the menu. - * - * @param string button - a reference to the button that was clicked - */ -function wp_add_checked_items_to_menu( button ) { - // Grab checked items - var items = jQuery(button).siblings('.list-wrap').find(':checked'); - - // If nothing was checked, cancel - if ( 0 == items.length ) - return false; - - // Loop through each item, grab it's hidden data and add it to the menu. - jQuery(items).each(function(){ - var item_type = jQuery(this).parent().siblings('.menu-item-type').val(); - - if ( 'custom' == item_type ) { - var item_attr_title = jQuery(this).parent().siblings('.menu-item-attr-title').val(); - var item_target = jQuery(this).parent().siblings('.menu-item-target').val(); - var item_classes = jQuery(this).parent().siblings('.menu-item-classes').val(); - var item_xfn = jQuery(this).parent().siblings('.menu-item-xfn').val(); - } else { - var item_attr_title = ''; - var item_target = '_self'; - var item_classes = ''; - var item_xfn = ''; - }; - - var item_db_id = jQuery(this).parent().siblings('.menu-item-db-id').val(); - var item_object_id = jQuery(this).parent().siblings('.menu-item-object-id').val(); - var item_append = jQuery(this).parent().siblings('.menu-item-append').val(); - var item_parent_id = jQuery(this).parent().siblings('.menu-item-parent-id').val(); - var item_title = jQuery(this).parent().siblings('.menu-item-title').val(); - var item_url = jQuery(this).parent().siblings('.menu-item-url').val(); - var item_description = jQuery(this).parent().siblings('.menu-item-description').val(); - - if ( undefined == item_description ) { - item_description = ''; - }; - - // Add the menu item to the menu - wp_add_item_to_menu( item_db_id, item_object_id, item_type, item_append, item_parent_id, item_title, item_url, item_description, item_attr_title, item_target, item_classes, item_xfn ); - - // uncheck the menu item in the list - jQuery(this).attr( 'checked', false ); - }); -}; - -/** - * Makes the menu items drag and droppable. - */ -function wp_drag_and_drop() { - // Make sure all li's have dropzones - jQuery('.menu li').each(function(){ - if ( !jQuery(this).children('.dropzone').attr('class') ) { - jQuery(this).prepend('
    '); - }; - }); - - // make menu item draggable - jQuery('.menu li').draggable({ - handle: ' > dl', - opacity: .8, - addClasses: false, - helper: 'clone', - zIndex: 100 - }); - - // make menu item droppable - 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'); - - // Append UL to first child - if ( child && li.children('ul').length == 0 ) { - li.append( '