Ticket #23119: 23119.15.diff
File 23119.15.diff, 33.5 KB (added by , 11 years ago) |
---|
-
wp-admin/includes/list-table.php
23 23 'WP_Posts_List_Table' => 'posts', 24 24 'WP_Media_List_Table' => 'media', 25 25 'WP_Terms_List_Table' => 'terms', 26 'WP_Menus_List_Table' => 'menus', 26 27 'WP_Users_List_Table' => 'users', 27 28 'WP_Comments_List_Table' => 'comments', 28 29 'WP_Post_Comments_List_Table' => 'comments', -
wp-admin/includes/misc.php
346 346 case 'upload_per_page': 347 347 case 'edit_tags_per_page': 348 348 case 'plugins_per_page': 349 case 'nav_menus_per_page': 349 350 // Network admin 350 351 case 'sites_network_per_page': 351 352 case 'users_network_per_page': -
wp-admin/includes/class-wp-menus-list-table.php
1 <?php 2 3 /** 4 * Nav Menus List Table class. 5 * 6 * @package WordPress 7 * @subpackage List_Table 8 * @since 3.6 9 * @access private 10 */ 11 class WP_Menus_List_Table extends WP_List_Table { 12 13 function __construct( $args = array() ) { 14 15 parent::__construct( array( 16 'plural' => 'menus', 17 'singular' => 'menu', 18 'screen' => isset( $args['screen'] ) ? $args['screen'] : null, 19 ) ); 20 21 } 22 23 function ajax_user_can() { 24 return current_user_can( 'edit_theme_options' ); 25 } 26 27 function prepare_items() { 28 29 $args = array(); 30 31 // order & orderby 32 $valid_arg_options = array( 33 'orderby' => $this->get_sortable_columns(), 34 'order' => array( 'asc', 'desc' ), 35 ); 36 foreach ( $valid_arg_options as $arg_key => $valid_options ) { 37 if ( ! empty( $_REQUEST[$arg_key] ) && in_array( $_REQUEST[$arg_key], $valid_options ) ) 38 $args[$arg_key] = $_REQUEST[$arg_key]; 39 } 40 41 // search 42 if ( ! empty( $_REQUEST['s'] ) ) 43 $args['search'] = strip_tags( trim( $_REQUEST['s'] ) ); 44 45 // pagination 46 $per_page = apply_filters( 'nav_menus_per_page', $this->get_items_per_page( 'nav_menus_per_page' ) ); 47 $page = $this->get_pagenum(); 48 $total_items = wp_get_nav_menus( $args ); 49 50 $defaults = array( 51 'orderby' => 'name', 52 'order' => 'asc', 53 'offset' => ( $page - 1 ) * $per_page, 54 'number' => $per_page, 55 ); 56 $args = wp_parse_args( $args, $defaults ); 57 $args = apply_filters( 'nav_menus_table_list_prepare_items_args', $args ); 58 59 $_args_to_calc_total_items = $args; 60 unset( $_args_to_calc_total_items['offset'] ); 61 $_args_to_calc_total_items['fields'] = 'count'; 62 $total_items = absint( wp_get_nav_menus( $_args_to_calc_total_items ) ); 63 64 $this->items = wp_get_nav_menus( $args ); 65 66 $this->set_pagination_args( array( 67 'total_items' => $total_items, 68 'per_page' => $per_page, 69 ) ); 70 71 } 72 73 function get_bulk_actions() { 74 $actions = array(); 75 $actions['delete'] = __( 'Delete' ); 76 77 return apply_filters( 'nav_menus_bulk_actions', $actions ); 78 } 79 80 function current_action() { 81 if ( 'delete' == $_REQUEST['action'] || 'delete_menus' == $_REQUEST['action2'] ) 82 return 'bulk-delete'; 83 84 return parent::current_action(); 85 } 86 87 function get_columns() { 88 $columns = array( 89 'cb' => '<input type="checkbox" />', 90 'name' => __( 'Menu Name' ), 91 'count' => __( '# of links' ), 92 ); 93 94 return $columns; 95 } 96 97 function get_sortable_columns() { 98 $sortable_columns = array( 99 'name' => 'name', 100 'count' => 'count', 101 ); 102 103 return $sortable_columns; 104 } 105 106 107 function single_row( $nav_menu, $level = 0 ) { 108 static $row_class = ''; 109 $row_class = ( $row_class == '' ? ' class="alternate"' : '' ); 110 111 echo '<tr id="' . esc_attr( 'menu-' . $nav_menu->term_id ) . '"' . $row_class . '>'; 112 echo $this->single_row_columns( $nav_menu ); 113 echo '</tr>'; 114 } 115 116 function column_default( $nav_menu, $column_name ) { 117 return apply_filters( 'manage_nav_menu_custom_column', '', $column_name, $nav_menu->term_id ); 118 } 119 120 121 function column_cb( $nav_menu ) { 122 return '<label class="screen-reader-text" for="' . esc_attr( 'cb-select-' . $nav_menu->term_id . '">' . sprintf( __( 'Select %s' ), $nav_menu->name ) ) . '"></label>' . '<input type="checkbox" name="delete_menus[]" value="' . esc_attr( $nav_menu->term_id ) . '" id="' . esc_attr( 'cb-select-' . $nav_menu->term_id ) . '" />'; 123 124 return ' '; 125 } 126 127 function column_name( $nav_menu ) { 128 129 $edit_link = esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => absint( $nav_menu->term_id ) ) ) ); 130 $delete_link = wp_nonce_url( add_query_arg( array( 'action' => 'delete', 'menu' => absint( $nav_menu->term_id ) ) ) ); 131 132 $out = '<strong><a class="row-title" href="' . $edit_link . '" title="' . esc_attr( sprintf( __( 'Edit “%s”' ), $nav_menu->name ) ) . '">' . $nav_menu->name . '</a></strong><br />'; 133 134 $actions = array(); 135 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>'; 136 $actions['delete'] = "<a class='delete-menu' href='" . $delete_link . "'>" . __( 'Delete' ) . "</a>"; 137 138 139 $actions = apply_filters( 'nave_menu_row_actions', $actions, $nav_menu ); 140 141 $out .= $this->row_actions( $actions ); 142 143 return $out; 144 } 145 146 function column_count( $nav_menu ) { 147 return $nav_menu->count; 148 } 149 150 } 151 No newline at end of file -
wp-admin/includes/nav-menu.php
80 80 } 81 81 82 82 $title = empty( $item->label ) ? $title : $item->label; 83 84 $submenu_text = ''; 85 if (0 == $depth) 86 $submenu_text = 'style="display: none;"'; 83 87 84 88 ?> 85 89 <li id="menu-item-<?php echo $item_id; ?>" class="<?php echo implode(' ', $classes ); ?>"> 86 90 <dl class="menu-item-bar"> 87 91 <dt class="menu-item-handle"> 88 <span class="item-title"><?php echo esc_html( $title ); ?> </span>92 <span class="item-title"><?php echo esc_html( $title ); ?> <span class="is-submenu" <?php echo $submenu_text; ?>><?php _e( 'sub item' ); ?></span></span> 89 93 <span class="item-controls"> 90 94 <span class="item-type"><?php echo esc_html( $item->type_label ); ?></span> 91 95 <span class="item-order hide-if-js"> … … 382 386 **/ 383 387 function wp_nav_menu_setup() { 384 388 // Register meta boxes 385 if ( wp_get_nav_menus() ) 386 add_meta_box( 'nav-menu-theme-locations', __( 'Theme Locations' ), 'wp_nav_menu_locations_meta_box' , 'nav-menus', 'side', 'default' ); 387 add_meta_box( 'add-custom-links', __('Custom Links'), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); 388 wp_nav_menu_post_type_meta_boxes(); 389 wp_nav_menu_taxonomy_meta_boxes(); 389 if ( wp_get_nav_menus() && ! isset( $_POST['menu-name'] ) && ! isset( $_GET['action'] ) || isset( $_GET['_wpnonce'] ) ) 390 add_meta_box( 'nav-menu-theme-locations', __( 'Menus within your theme' ), 'wp_nav_menu_locations_meta_box' , 'nav-menus', 'side', 'default' ); 391 392 $nav_menus = wp_get_nav_menus( array('orderby' => 'name') ); 393 394 if ( empty( $nav_menus ) || isset( $_POST['menu-name'] ) || isset( $_GET['action'] ) && ! isset( $_GET['_wpnonce'] ) ) { 395 wp_nav_menu_post_type_meta_boxes(); 396 add_meta_box( 'add-common-links', __('Common Links'), 'wp_nav_menu_item_common_link_meta_box', 'nav-menus', 'side', 'core' ); 397 add_meta_box( 'add-custom-links', __('Custom Links'), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); 398 wp_nav_menu_taxonomy_meta_boxes(); 399 } 390 400 391 401 // Register advanced menu items (columns) 392 add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns'); 402 if ( empty( $nav_menus ) || isset( $_POST['menu-name'] ) || isset( $_GET['action'] ) && ! isset( $_GET['_wpnonce'] ) ) { 403 add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns'); 404 } 393 405 394 406 // If first time editing, disable advanced items by default. 395 407 if( false === get_user_option( 'managenav-menuscolumnshidden' ) ) { … … 411 423 if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array($wp_meta_boxes) ) 412 424 return; 413 425 414 $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add- custom-links', 'add-page', 'add-category' );426 $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add-page', 'add-common-links', 'add-custom-links', 'add-category' ); 415 427 $hidden_meta_boxes = array(); 416 428 417 429 foreach ( array_keys($wp_meta_boxes['nav-menus']) as $context ) { … … 445 457 $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type ); 446 458 if ( $post_type ) { 447 459 $id = $post_type->name; 448 add_meta_box( "add-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', ' default', $post_type );460 add_meta_box( "add-{$id}", $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'high', $post_type ); 449 461 } 450 462 } 451 463 } … … 489 501 $menu_locations = get_nav_menu_locations(); 490 502 $num_locations = count( array_keys($locations) ); 491 503 492 echo '<p class="howto">' . sprintf( _n('Your theme supports %s menu. Select which menu you would like to use.', 'Your theme supports %s menus. Select which menu appears in each location.', $num_locations ), number_format_i18n($num_locations)) . '</p>';504 echo '<p class="howto">' . _n('Select a menu to use within your theme.', 'Select the menus you will use in your theme.', $num_locations ) . '</p>'; 493 505 494 506 foreach ( $locations as $location => $description ) { 495 507 ?> … … 512 524 } 513 525 ?> 514 526 <p class="button-controls"> 515 <?php submit_button( __( 'Save' ), 'primary right', 'nav-menu-locations', false , disabled( $nav_menu_selected_id, 0, false )); ?>527 <?php submit_button( __( 'Save' ), 'primary right', 'nav-menu-locations', false ); ?> 516 528 <span class="spinner"></span> 517 529 </p> 518 530 <?php 519 531 } 520 532 521 533 /** 534 * Displays a metabox for the common links menu item. 535 * 536 * @since 3.0.0 537 */ 538 function wp_nav_menu_item_common_link_meta_box() { 539 global $blog_id, $_nav_menu_placeholder, $nav_menu_selected_id; 540 $_nav_menu_placeholder = 0 > $_nav_menu_placeholder ? $_nav_menu_placeholder - 1 : -1; 541 542 $removed_args = array( 543 'action', 544 'customlink-tab', 545 'edit-menu-item', 546 'menu-item', 547 'page-tab', 548 '_wpnonce', 549 ); 550 551 $common_links = array( 552 array( 553 'url' => get_site_url(), 554 'text' => __('Home') 555 ), 556 array( 557 'url' => get_site_url($blog_id, '/wp-login.php'), 558 'text' => __('Log in') 559 ) 560 ); 561 ?> 562 <div class="commonlinkdiv" id="commonlinkdiv"> 563 564 <div class="common-links"> 565 <?php foreach ( $common_links as $link ) { ?> 566 <label class="menu-item-title"><input type="checkbox" class="menu-item-checkbox" name="menu-item[<?php echo $_nav_menu_placeholder; ?>][menu-item-object-id]" value="<?php echo $link['url']; ?>" title="<?php echo $link['text']; ?>"> <?php echo $link['text']; ?></label> 567 <?php } ?> 568 </div> 569 570 <p class="button-controls"> 571 <span class="add-to-menu"> 572 <input type="submit"<?php disabled( $nav_menu_selected_id, 0 ); ?> class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="add-common-menu-item" id="submit-commonlinkdiv" /> 573 <span class="spinner"></span> 574 </span> 575 </p> 576 577 </div><!-- /.commonlinkdiv --> 578 <?php 579 } 580 581 /** 522 582 * Displays a metabox for the custom links menu item. 523 583 * 524 584 * @since 3.0.0 … … 554 614 555 615 <p id="menu-item-name-wrap"> 556 616 <label class="howto" for="custom-menu-item-name"> 557 <span><?php _e('L abel'); ?></span>617 <span><?php _e('Link Text'); ?></span> 558 618 <input id="custom-menu-item-name" name="menu-item[<?php echo $_nav_menu_placeholder; ?>][menu-item-title]" type="text" class="regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Menu Item'); ?>" /> 559 619 </label> 560 620 </p> … … 1086 1146 $menu_items = wp_get_nav_menu_items( $menu->term_id, array('post_status' => 'any') ); 1087 1147 $result = '<div id="menu-instructions" class="post-body-plain'; 1088 1148 $result .= ( ! empty($menu_items) ) ? ' menu-instructions-inactive">' : '">'; 1089 $result .= '<p>' . __(' Select menu items (pages, categories, links) from the boxes at left to begin building your custom menu.') . '</p>';1149 $result .= '<p>' . __('Next, add menu items (i.e. pages, links, categories) from the column on the left.') . '</p>'; 1090 1150 $result .= '</div>'; 1091 1151 1092 1152 if( empty($menu_items) ) … … 1158 1218 foreach( (array) $menu_items_to_delete as $menu_item_id ) 1159 1219 wp_delete_post( $menu_item_id, true ); 1160 1220 } 1161 1162 add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); 1221 add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); 1222 No newline at end of file -
wp-admin/js/nav-menu.js
46 46 this.initSortables(); 47 47 48 48 this.initToggles(); 49 50 this. initTabManager();49 50 this.messageFadeIn(); 51 51 }, 52 52 53 53 jQueryExtensions : function() { … … 222 222 } 223 223 }); 224 224 }, 225 226 messageFadeIn : function() { 227 var messages = $('#message'); 228 229 // Visual change when users save menus multiple times in a row 230 messages.slideDown('slow'); 231 }, 225 232 226 233 initToggles : function() { 227 234 // init postboxes … … 245 252 menuEdge = api.menuList.offset().left, 246 253 body = $('body'), maxChildDepth, 247 254 menuMaxDepth = initialMenuMaxDepth(); 255 256 if( 0 != $('#menu-to-edit li').length ) 257 $('.drag-instructions').show(); 248 258 249 259 // Use the right edge if RTL. 250 260 menuEdge += api.isRTL ? api.menuList.width() : 0; … … 307 317 308 318 // Return child elements to the list 309 319 children = transport.children().insertAfter(ui.item); 320 321 // Add "sub menu" description 322 var subMenuTitle = ui.item.find('.item-title .is-submenu'); 323 if (0 < currentDepth) 324 subMenuTitle.show(); 325 else 326 subMenuTitle.hide(); 310 327 311 328 // Update depth classes 312 329 if( depthChange != 0 ) { … … 327 344 ui.item[0].style.left = 'auto'; 328 345 ui.item[0].style.right = 0; 329 346 } 330 331 // The width of the tab bar might have changed. Just in case.332 api.refreshMenuTabs( true );333 347 }, 334 348 change: function(e, ui) { 335 349 // Make sure the placeholder is inside the menu. … … 433 447 $("#submit-customlinkdiv").click(); 434 448 } 435 449 }); 450 $('#submit-commonlinkdiv').click(function () { 451 api.addCommonLink(); 452 return false; 453 }); 436 454 }, 437 455 438 456 /** … … 461 479 if( '' == $t.val() ) 462 480 $t.addClass( name ).val( $t.data(name) ); 463 481 }); 482 483 $('.blank-slate .input-with-default-title').focus(); 464 484 }, 465 485 466 486 attachThemeLocationsListeners : function() { … … 474 494 loc.find('.spinner').show(); 475 495 $.post( ajaxurl, params, function(r) { 476 496 loc.find('.spinner').hide(); 497 $('.menu-location-success').slideDown('slow'); 477 498 }); 478 499 return false; 479 500 }); … … 521 542 api.processQuickSearchQueryResponse(menuMarkup, params, panel); 522 543 }); 523 544 }, 545 546 addCommonLink : function() { 547 548 $('#commonlinkdiv input[type="checkbox"]:checked').each(function( index ) { 549 var url = $(this).val(), 550 linkText = $(this).prop('title'), 551 processMethod = api.addMenuItemToTop; 524 552 553 // Show the ajax spinner 554 $('.commonlinkdiv .spinner').show(); 555 api.addLinkToMenu( url, linkText, processMethod, function() { 556 // Remove the ajax spinner 557 $('.commonlinkdiv .spinner').hide(); 558 }); 559 }); 560 }, 561 525 562 addCustomLink : function( processMethod ) { 526 563 var url = $('#custom-menu-item-url').val(), 527 564 label = $('#custom-menu-item-name').val(); … … 572 609 $.post( ajaxurl, params, function(menuMarkup) { 573 610 var ins = $('#menu-instructions'); 574 611 processMethod(menuMarkup, params); 612 // Make it stand out a bit more visually, by adding a fadeIn 613 $('li.pending').hide().fadeIn('slow'); 614 $('.drag-instructions').show(); 575 615 if( ! ins.hasClass('menu-instructions-inactive') && ins.siblings().length ) 576 616 ins.addClass('menu-instructions-inactive'); 577 617 callback(); … … 604 644 }; 605 645 } else { 606 646 // Make the post boxes read-only, as they can't be used yet 607 $('#menu-settings-column').find('input,select'). prop('disabled', true).end().find('a').attr('href', '#').unbind('click');647 $('#menu-settings-column').find('input,select').end().find('a').attr('href', '#').unbind('click'); 608 648 } 609 649 }, 610 650 … … 688 728 }); 689 729 }, 690 730 691 initTabManager : function() {692 var fixed = $('.nav-tabs-wrapper'),693 fluid = fixed.children('.nav-tabs'),694 active = fluid.children('.nav-tab-active'),695 tabs = fluid.children('.nav-tab'),696 tabsWidth = 0,697 fixedRight, fixedLeft,698 arrowLeft, arrowRight, resizeTimer, css = {},699 marginFluid = api.isRTL ? 'margin-right' : 'margin-left',700 marginFixed = api.isRTL ? 'margin-left' : 'margin-right',701 msPerPx = 2;702 703 /**704 * Refreshes the menu tabs.705 * Will show and hide arrows where necessary.706 * Scrolls to the active tab by default.707 *708 * @param savePosition {boolean} Optional. Prevents scrolling so709 * that the current position is maintained. Default false.710 **/711 api.refreshMenuTabs = function( savePosition ) {712 var fixedWidth = fixed.width(),713 margin = 0, css = {};714 fixedLeft = fixed.offset().left;715 fixedRight = fixedLeft + fixedWidth;716 717 if( !savePosition )718 active.makeTabVisible();719 720 // Prevent space from building up next to the last tab if there's more to show721 if( tabs.last().isTabVisible() ) {722 margin = fixed.width() - tabsWidth;723 margin = margin > 0 ? 0 : margin;724 css[marginFluid] = margin + 'px';725 fluid.animate( css, 100, "linear" );726 }727 728 // Show the arrows only when necessary729 if( fixedWidth > tabsWidth )730 arrowLeft.add( arrowRight ).hide();731 else732 arrowLeft.add( arrowRight ).show();733 }734 735 $.fn.extend({736 makeTabVisible : function() {737 var t = this.eq(0), left, right, css = {}, shift = 0;738 739 if( ! t.length ) return this;740 741 left = t.offset().left;742 right = left + t.outerWidth();743 744 if( right > fixedRight )745 shift = fixedRight - right;746 else if ( left < fixedLeft )747 shift = fixedLeft - left;748 749 if( ! shift ) return this;750 751 css[marginFluid] = "+=" + api.negateIfRTL * shift + 'px';752 fluid.animate( css, Math.abs( shift ) * msPerPx, "linear" );753 return this;754 },755 isTabVisible : function() {756 var t = this.eq(0),757 left = t.offset().left,758 right = left + t.outerWidth();759 return ( right <= fixedRight && left >= fixedLeft ) ? true : false;760 }761 });762 763 // Find the width of all tabs764 tabs.each(function(){765 tabsWidth += $(this).outerWidth(true);766 });767 768 // Set up fixed margin for overflow, unset padding769 css['padding'] = 0;770 css[marginFixed] = (-1 * tabsWidth) + 'px';771 fluid.css( css );772 773 // Build tab navigation774 arrowLeft = $('<div class="nav-tabs-arrow nav-tabs-arrow-left"><a>«</a></div>');775 arrowRight = $('<div class="nav-tabs-arrow nav-tabs-arrow-right"><a>»</a></div>');776 // Attach to the document777 fixed.wrap('<div class="nav-tabs-nav"/>').parent().prepend( arrowLeft ).append( arrowRight );778 779 // Set the menu tabs780 api.refreshMenuTabs();781 // Make sure the tabs reset on resize782 $(window).resize(function() {783 if( resizeTimer ) clearTimeout(resizeTimer);784 resizeTimer = setTimeout( api.refreshMenuTabs, 200);785 });786 787 // Build arrow functions788 $.each([{789 arrow : arrowLeft,790 next : "next",791 last : "first",792 operator : "+="793 },{794 arrow : arrowRight,795 next : "prev",796 last : "last",797 operator : "-="798 }], function(){799 var that = this;800 this.arrow.mousedown(function(){801 var marginFluidVal = Math.abs( parseInt( fluid.css(marginFluid) ) ),802 shift = marginFluidVal,803 css = {};804 805 if( "-=" == that.operator )806 shift = Math.abs( tabsWidth - fixed.width() ) - marginFluidVal;807 808 if( ! shift ) return;809 810 css[marginFluid] = that.operator + shift + 'px';811 fluid.animate( css, shift * msPerPx, "linear" );812 }).mouseup(function(){813 var tab, next;814 fluid.stop(true);815 tab = tabs[that.last]();816 while( (next = tab[that.next]()) && next.length && ! next.isTabVisible() ) {817 tab = next;818 }819 tab.makeTabVisible();820 });821 });822 },823 824 731 eventOnClickEditLink : function(clickedEl) { 825 732 var settings, item, 826 733 matchedSection = /#(.*)$/.exec(clickedEl.href); … … 945 852 var ins = $('#menu-instructions'); 946 853 el.remove(); 947 854 children.shiftDepthClass(-1).updateParentMenuItemDBId(); 948 if( ! ins.siblings().length ) 855 if( 0 == $('#menu-to-edit li').length ) { 856 $('.drag-instructions').hide(); 949 857 ins.removeClass('menu-instructions-inactive'); 858 } 950 859 }); 951 860 }, 952 861 -
wp-admin/nav-menus.php
27 27 if ( wp_is_mobile() ) 28 28 wp_enqueue_script( 'jquery-touch-punch' ); 29 29 30 // prep the table view 31 $wp_list_table = _get_list_table( 'WP_Menus_List_Table' ); 32 $pagenum = $wp_list_table->get_pagenum(); 33 $wp_list_table->prepare_items(); 34 30 35 // Container for any messages displayed to the user 31 36 $messages = array(); 32 37 … … 367 372 368 373 do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); 369 374 370 $messages[] = '<div id="message" class="updated"><p>' . sprintf( __(' The <strong>%s</strong> menu has been updated.'), $nav_menu_selected_title) . '</p></div>';375 $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('<strong>%s</strong> has been updated. Use this menu to <a href="%s">replace your sites main navigation</a>, or <a href="%s">within a widget</a>.'), $nav_menu_selected_title, admin_url( 'nav-menus.php' ), admin_url( 'widgets.php' ) ) . '</p></div>'; 371 376 unset( $menu_items, $unsorted_menu_items ); 372 377 } 373 378 } … … 434 439 if ( ! current_theme_supports( 'menus' ) && ! wp_get_nav_menus() ) 435 440 $messages[] = '<div id="message" class="updated"><p>' . __('The current theme does not natively support menus, but you can use the “Custom Menu” widget to add any menus you create here to the theme’s sidebar.') . '</p></div>'; 436 441 442 add_screen_option( 'per_page', array('label' => _x( 'Menus', 'nav menus per page (screen options)' )) ); 443 437 444 get_current_screen()->add_help_tab( array( 438 445 'id' => 'overview', 439 446 'title' => __('Overview'), … … 460 467 ?> 461 468 <div class="wrap"> 462 469 <?php screen_icon(); ?> 463 <h2><?php esc_html_e('Menus'); ?></h2> 470 <h2 class="nav-tab-wrapper"> 471 <a href="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-tab<?php if ( ! isset( $_POST['menu-name'] ) && ! isset( $_GET['action'] ) || isset( $_GET['_wpnonce'] ) ) echo ' nav-tab-active'; ?>"><?php esc_html_e('Manage Menus'); ?></a> 472 <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0, ), admin_url( 'nav-menus.php' ) ) ); ?>" class="nav-tab<?php if ( isset( $_GET['menu'] ) && '0' == $_GET['menu'] ) echo ' nav-tab-active'; ?>"><?php esc_html_e('Add Menu'); ?></a> 473 </h2> 464 474 <?php 465 475 foreach( $messages as $message ) : 466 476 echo $message . "\n"; 467 477 endforeach; 468 478 ?> 479 <div class="updated menu-location-success" style="display: none;"><p><?php echo sprintf( __('The menus within your theme have been updated. <a href="%s">Visit your site</a> to preview these changes.'), get_site_url() ); ?></p></div> 469 480 <div id="nav-menus-frame"> 470 <div id="menu-settings-column" class="metabox-holder<?php if ( !$nav_menu_selected_id) { echo ' metabox-holder-disabled'; } ?>">481 <div id="menu-settings-column" class="metabox-holder<?php if ( isset( $_GET['menu'] ) && '0' == $_GET['menu'] || empty( $nav_menus ) ) { echo ' metabox-holder-disabled'; } ?>"> 471 482 483 <?php if ( ! isset( $_POST['menu-name'] ) && ! isset( $_GET['action'] ) || isset( $_GET['_wpnonce'] ) ) : ?> 484 <form id="menu-search-form" action="" method="get"> 485 <?php $wp_list_table->search_box( __( 'Search Menus' ), 'menus' ); ?> 486 </form> 487 <?php endif; ?> 488 489 <div class="clear"></div> 490 472 491 <form id="nav-menu-meta" action="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-menu-meta" method="post" enctype="multipart/form-data"> 473 492 <input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> 474 493 <input type="hidden" name="action" value="add-menu-item" /> … … 479 498 </div><!-- /#menu-settings-column --> 480 499 <div id="menu-management-liquid"> 481 500 <div id="menu-management"> 482 <div id="select-nav-menu-container" class="hide-if-js"> 483 <form id="select-nav-menu" action=""> 484 <strong><label for="select-nav-menu"><?php esc_html_e( 'Select Menu:' ); ?></label></strong> 485 <select class="select-nav-menu" name="menu"> 486 <?php foreach( (array) $nav_menus as $_nav_menu ) : ?> 487 <option value="<?php echo esc_attr($_nav_menu->term_id) ?>" <?php selected($nav_menu_selected_id, $_nav_menu->term_id); ?>> 488 <?php echo esc_html( $_nav_menu->truncated_name ); ?> 489 </option> 490 <?php endforeach; ?> 491 <option value="0"><?php esc_html_e('Add New Menu'); ?></option> 492 </select> 493 <input type="hidden" name="action" value="edit" /> 494 <?php submit_button( __( 'Select' ), 'secondary', 'select_menu', false ); ?> 501 <?php if ( ! isset( $_POST['menu-name'] ) && ! empty( $nav_menus ) && ! isset( $_GET['action'] ) || ( isset( $_GET['_wpnonce'] ) && 0 != count( $nav_menus ) ) ) : ?> 502 503 <form id="menu-list-form" action="" method="get"> 504 505 <?php $wp_list_table->display(); ?> 506 507 <input type="hidden" name="_total" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg('total_items') ); ?>" /> 508 <input type="hidden" name="_per_page" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg('per_page') ); ?>" /> 509 <input type="hidden" name="_page" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg('page') ); ?>" /> 510 495 511 </form> 496 </div> 497 <div class="nav-tabs-wrapper"> 498 <div class="nav-tabs"> 499 <?php 500 foreach( (array) $nav_menus as $_nav_menu ) : 501 if ( $nav_menu_selected_id == $_nav_menu->term_id ) : ?><span class="nav-tab nav-tab-active"> 502 <?php echo esc_html( $_nav_menu->truncated_name ); ?> 503 </span><?php else : ?><a href="<?php 504 echo esc_url(add_query_arg( 505 array( 506 'action' => 'edit', 507 'menu' => $_nav_menu->term_id, 508 ), 509 admin_url( 'nav-menus.php' ) 510 )); 511 ?>" class="nav-tab hide-if-no-js"> 512 <?php echo esc_html( $_nav_menu->truncated_name ); ?> 513 </a><?php endif; 514 endforeach; 515 if ( 0 == $nav_menu_selected_id ) : ?><span class="nav-tab menu-add-new nav-tab-active"> 516 <?php printf( '<abbr title="%s">+</abbr>', esc_html__( 'Add menu' ) ); ?> 517 </span><?php else : ?><a href="<?php 518 echo esc_url(add_query_arg( 519 array( 520 'action' => 'edit', 521 'menu' => 0, 522 ), 523 admin_url( 'nav-menus.php' ) 524 )); 525 ?>" class="nav-tab menu-add-new"> 526 <?php printf( '<abbr title="%s">+</abbr>', esc_html__( 'Add menu' ) ); ?> 527 </a><?php endif; ?> 528 </div> 529 </div> 512 513 514 <?php else : ?> 530 515 <div class="menu-edit"> 531 516 <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> 532 517 <div id="nav-menu-header"> 533 518 <div id="submitpost" class="submitbox"> 534 <div class="major-publishing-actions ">519 <div class="major-publishing-actions <?php if ( isset( $_GET['menu'] ) && 0 == $_GET['menu'] || empty( $nav_menus ) ) echo 'blank-slate'; ?>"> 535 520 <label class="menu-name-label howto open-label" for="menu-name"> 536 521 <span><?php _e('Menu Name'); ?></span> 537 522 <input name="menu-name" id="menu-name" type="text" class="menu-name regular-text menu-item-textbox input-with-default-title" title="<?php esc_attr_e('Enter menu name here'); ?>" value="<?php echo esc_attr( $nav_menu_selected_title ); ?>" /> … … 551 536 <label class="howto"><input type="checkbox"<?php checked( $auto_add ); ?> name="auto-add-pages" value="1" /> <?php printf( __('Automatically add new top-level pages' ), esc_url( admin_url( 'edit.php?post_type=page' ) ) ); ?></label> 552 537 </div> 553 538 <?php endif; ?> 554 <br class="clear" />555 539 <div class="publishing-action"> 556 540 <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?> 557 541 </div><!-- END .publishing-action --> 558 542 559 <?php if ( ! empty( $nav_menu_selected_id ) ) : ?>560 <div class="delete-action">561 <a class="submitdelete deletion menu-delete" href="<?php echo esc_url( wp_nonce_url( admin_url('nav-menus.php?action=delete&menu=' . $nav_menu_selected_id), 'delete-nav_menu-' . $nav_menu_selected_id ) ); ?>"><?php _e('Delete Menu'); ?></a>562 </div><!-- END .delete-action -->563 <?php endif; ?>564 543 </div><!-- END .major-publishing-actions --> 565 544 </div><!-- END #submitpost .submitbox --> 566 545 <?php … … 574 553 <div id="post-body"> 575 554 <div id="post-body-content"> 576 555 <?php 577 if ( isset( $edit_markup ) ) { 556 $drag_instructions = ''; 557 if ( empty( $ordered_menu_items ) ) 558 $drag_instructions = 'style="display: none;"'; 559 560 if ( isset( $edit_markup ) ) { 561 echo '<div class="drag-instructions post-body-plain" ' . $drag_instructions . '>'; 562 echo '<p>' . __('Drag each item into the order you prefer. Click an item to reveal additional configuration options.') . '</p>'; 563 echo '</div>'; 564 578 565 if ( ! is_wp_error( $edit_markup ) ) 579 566 echo $edit_markup; 580 567 } else if ( empty( $nav_menu_selected_id ) ) { 581 568 echo '<div class="post-body-plain">'; 582 echo '<p>' . __('To create a custom menu, give it a name above and click Create Menu. Then choose items like pages, categories or custom links from the left column to add to this menu.') . '</p>'; 583 echo '<p>' . __('After you have added your items, drag and drop to put them in the order you want. You can also click each item to reveal additional configuration options.') . '</p>'; 584 echo '<p>' . __('When you have finished building your custom menu, make sure you click the Save Menu button.') . '</p>'; 569 echo '<p>' . __('Give your custom menu a name above, then click Create Menu.') . '</p>'; 585 570 echo '</div>'; 586 571 } 587 572 ?> … … 599 584 </div><!-- /#nav-menu-footer --> 600 585 </form><!-- /#update-nav-menu --> 601 586 </div><!-- /.menu-edit --> 587 <?php endif; ?> 602 588 </div><!-- /#menu-management --> 603 589 </div><!-- /#menu-management-liquid --> 604 590 </div><!-- /#nav-menus-frame --> -
wp-admin/css/wp-admin.css
2428 2428 .fixed .column-categories, 2429 2429 .fixed .column-tags, 2430 2430 .fixed .column-rel, 2431 .fixed .column-role { 2431 .fixed .column-role, 2432 .fixed .column-count { 2432 2433 width: 15%; 2433 2434 } 2434 2435 … … 6750 6751 6751 6752 /* nav-menu */ 6752 6753 6754 .nav-menus-php #message { 6755 display: none; 6756 } 6757 6758 .nav-menus-php .nav-tab-wrapper { 6759 margin-bottom: 20px; 6760 } 6761 6753 6762 #nav-menus-frame { 6754 6763 margin-left: 300px; 6764 margin-top: 20px; 6755 6765 } 6756 6766 6757 6767 #wpbody-content #menu-settings-column { … … 6760 6770 margin-left: -300px; 6761 6771 clear: both; 6762 6772 float: left; 6763 padding-top: 24px;6773 padding-top: 0; 6764 6774 } 6765 6775 6766 6776 .no-js #wpbody-content #menu-settings-column { … … 6785 6795 position: relative; 6786 6796 } 6787 6797 6798 .blank-slate br { 6799 display: none; 6800 } 6801 6802 .blank-slate .menu-name { 6803 height: 2em; 6804 } 6805 6806 .is-submenu { 6807 color: #999; 6808 font-style: italic; 6809 font-weight: normal; 6810 margin-left: 4px; 6811 } 6812 6813 .common-links { 6814 background: #fff; 6815 border: 1px solid #dfdfdf; 6816 line-height: 1.4em; 6817 min-height: 42px; 6818 padding: 0.9em; 6819 } 6820 6821 .common-links label { 6822 display: block; 6823 line-height: 19px; 6824 } 6825 6788 6826 /* Menu Container */ 6789 6827 #menu-management-liquid { 6790 6828 float: left; 6791 6829 min-width: 100%; 6830 margin-top: 3px; 6792 6831 } 6793 6832 6794 6833 #menu-management { … … 6802 6841 margin-bottom: 20px; 6803 6842 } 6804 6843 6844 #menu-settings-column p.search-box { 6845 margin: 9px 0; 6846 float: left; 6847 } 6848 6849 #menu-settings-column #menus-search-input { 6850 width: 175px; 6851 } 6852 6805 6853 .nav-menus-php #post-body { 6806 6854 padding: 10px; 6807 6855 border-width: 1px 0; … … 6835 6883 font-weight:bold; 6836 6884 } 6837 6885 6838 /* Menu Tabs */6839 6840 #menu-management .nav-tabs-nav {6841 margin: 0 20px;6842 }6843 6844 #menu-management .nav-tabs-arrow {6845 width: 10px;6846 padding: 0 5px 4px;6847 cursor: pointer;6848 position: absolute;6849 top: 0;6850 line-height: 22px;6851 font-size: 18px;6852 text-shadow: 0 1px 0 #fff;6853 }6854 6855 #menu-management .nav-tabs-arrow-left {6856 left: 0;6857 }6858 6859 #menu-management .nav-tabs-arrow-right {6860 right: 0;6861 text-align: right;6862 }6863 6864 #menu-management .nav-tabs-wrapper {6865 width: 100%;6866 height: 28px;6867 margin-bottom: -1px;6868 overflow: hidden;6869 }6870 6871 #menu-management .nav-tabs {6872 padding-left: 20px;6873 padding-right: 10px;6874 }6875 6876 .js #menu-management .nav-tabs {6877 float: left;6878 margin-left: 0px;6879 margin-right: -400px;6880 }6881 6882 #menu-management .nav-tab {6883 margin-bottom: 0;6884 font-size: 14px;6885 }6886 6887 6886 #select-nav-menu-container { 6888 6887 text-align: right; 6889 6888 padding: 0 10px 3px 10px; … … 7080 7079 } 7081 7080 7082 7081 #menu-to-edit { 7083 padding: 1em 0;7082 padding: 0.1em 0; 7084 7083 } 7085 7084 7086 7085 .menu ul { … … 7326 7325 margin: 5px 0 1px; 7327 7326 } 7328 7327 7328 .nav-menus-php .blank-slate .publishing-action { 7329 float: left; 7330 margin: 1px 0 0; 7331 } 7332 7329 7333 .nav-menus-php .major-publishing-actions .delete-action { 7330 7334 vertical-align: middle; 7331 7335 text-align: left;