Ticket #23119: 23119.24.diff
File 23119.24.diff, 51.7 KB (added by , 11 years ago) |
---|
-
wp-admin/includes/nav-menu.php
81 81 82 82 $title = empty( $item->label ) ? $title : $item->label; 83 83 84 $submenu_text = ''; 85 if (0 == $depth) 86 $submenu_text = 'style="display: none;"'; 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"> … … 383 387 function wp_nav_menu_setup() { 384 388 // Register meta boxes 385 389 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' );390 // add_meta_box( 'nav-menu-theme-locations', __( 'Menus within your theme' ), 'wp_nav_menu_locations_meta_box' , 'nav-menus', 'side', 'default' ); 391 // todo: if we stick with the theme location checkboxes then remove the metabox code all togehter 388 392 wp_nav_menu_post_type_meta_boxes(); 393 add_meta_box( 'add-custom-links', __('Add Links'), 'wp_nav_menu_item_link_meta_box', 'nav-menus', 'side', 'default' ); 389 394 wp_nav_menu_taxonomy_meta_boxes(); 390 395 391 396 // Register advanced menu items (columns) … … 411 416 if ( get_user_option( 'metaboxhidden_nav-menus' ) !== false || ! is_array($wp_meta_boxes) ) 412 417 return; 413 418 414 $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add- custom-links', 'add-page', 'add-category' );419 $initial_meta_boxes = array( 'nav-menu-theme-locations', 'add-page', 'add-custom-links', 'add-category' ); 415 420 $hidden_meta_boxes = array(); 416 421 417 422 foreach ( array_keys($wp_meta_boxes['nav-menus']) as $context ) { … … 445 450 $post_type = apply_filters( 'nav_menu_meta_box_object', $post_type ); 446 451 if ( $post_type ) { 447 452 $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 );453 add_meta_box( "add-{$id}", __('Add ') . $post_type->labels->name, 'wp_nav_menu_item_post_type_meta_box', 'nav-menus', 'side', 'default', $post_type ); 449 454 } 450 455 } 451 456 } … … 465 470 $tax = apply_filters( 'nav_menu_meta_box_object', $tax ); 466 471 if ( $tax ) { 467 472 $id = $tax->name; 468 add_meta_box( "add-{$id}", $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax );473 add_meta_box( "add-{$id}", __('Add ') . $tax->labels->name, 'wp_nav_menu_item_taxonomy_meta_box', 'nav-menus', 'side', 'default', $tax ); 469 474 } 470 475 } 471 476 } … … 489 494 $menu_locations = get_nav_menu_locations(); 490 495 $num_locations = count( array_keys($locations) ); 491 496 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>';497 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 498 494 499 foreach ( $locations as $location => $description ) { 495 500 ?> … … 554 559 555 560 <p id="menu-item-name-wrap"> 556 561 <label class="howto" for="custom-menu-item-name"> 557 <span><?php _e('L abel'); ?></span>562 <span><?php _e('Link Text'); ?></span> 558 563 <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 564 </label> 560 565 </p> … … 1084 1089 // If the menu exists, get its items. 1085 1090 if ( is_nav_menu( $menu ) ) { 1086 1091 $menu_items = wp_get_nav_menu_items( $menu->term_id, array('post_status' => 'any') ); 1087 $result = '<div id="menu-instructions" class="post-body-plain'; 1088 $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>'; 1090 $result .= '</div>'; 1092 $result = ''; 1091 1093 1092 1094 if( empty($menu_items) ) 1093 1095 return $result . ' <ul class="menu" id="menu-to-edit"> </ul>'; … … 1158 1160 foreach( (array) $menu_items_to_delete as $menu_item_id ) 1159 1161 wp_delete_post( $menu_item_id, true ); 1160 1162 } 1163 add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); 1161 1164 1162 add_action('admin_head-nav-menus.php', '_wp_delete_orphaned_draft_menu_items'); 1165 /** 1166 * Delete nav menus from the nav menu management screen 1167 * 1168 * @access private 1169 * @since 3.6 1170 */ 1171 function _wp_delete_nav_menu( $nav_menu_id ) { 1172 1173 if ( ! is_nav_menu( $nav_menu_id ) ) 1174 return; 1175 1176 $deleted_nav_menu = wp_get_nav_menu_object( $nav_menu_id ); 1177 $delete_nav_menu = wp_delete_nav_menu( $nav_menu_id ); 1178 1179 if ( is_wp_error( $delete_nav_menu ) ) 1180 return $delete_nav_menu; 1181 1182 // Remove this menu from any locations. 1183 $locations = get_theme_mod( 'nav_menu_locations' ); 1184 foreach ( (array) $locations as $location => $menu_id ) { 1185 if ( $menu_id == $nav_menu_id ) 1186 $locations[ $location ] = 0; 1187 } 1188 set_theme_mod( 'nav_menu_locations', $locations ); 1189 return true; 1190 } 1191 1192 /** 1193 * Saves nav menu items 1194 * 1195 * @since 3.6 1196 */ 1197 function wp_nav_menu_update_menu_items ($nav_menu_selected_id, $nav_menu_selected_title) { 1198 $unsorted_menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish') ); 1199 1200 $menu_items = array(); 1201 // Index menu items by db ID 1202 foreach( $unsorted_menu_items as $_item ) 1203 $menu_items[$_item->db_id] = $_item; 1204 1205 $post_fields = array( 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', 'menu-item-title', 'menu-item-url', 'menu-item-description', 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' ); 1206 wp_defer_term_counting(true); 1207 // Loop through all the menu items' POST variables 1208 if ( ! empty( $_POST['menu-item-db-id'] ) ) { 1209 foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) { 1210 1211 // Menu item title can't be blank 1212 if ( empty( $_POST['menu-item-title'][$_key] ) ) 1213 continue; 1214 1215 $args = array(); 1216 foreach ( $post_fields as $field ) 1217 $args[$field] = isset( $_POST[$field][$_key] ) ? $_POST[$field][$_key] : ''; 1218 1219 $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args ); 1220 1221 if ( is_wp_error( $menu_item_db_id ) ) 1222 $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>'; 1223 elseif ( isset( $menu_items[$menu_item_db_id] ) ) 1224 unset( $menu_items[$menu_item_db_id] ); 1225 } 1226 } 1227 1228 // Remove menu items from the menu that weren't in $_POST 1229 if ( ! empty( $menu_items ) ) { 1230 foreach ( array_keys( $menu_items ) as $menu_item_id ) { 1231 if ( is_nav_menu_item( $menu_item_id ) ) { 1232 wp_delete_post( $menu_item_id ); 1233 } 1234 } 1235 } 1236 1237 // Store 'auto-add' pages. 1238 $auto_add = ! empty( $_POST['auto-add-pages'] ); 1239 $nav_menu_option = (array) get_option( 'nav_menu_options' ); 1240 if ( ! isset( $nav_menu_option['auto_add'] ) ) 1241 $nav_menu_option['auto_add'] = array(); 1242 if ( $auto_add ) { 1243 if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) 1244 $nav_menu_option['auto_add'][] = $nav_menu_selected_id; 1245 } else { 1246 if ( false !== ( $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) ) 1247 unset( $nav_menu_option['auto_add'][$key] ); 1248 } 1249 // Remove nonexistent/deleted menus 1250 $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) ); 1251 update_option( 'nav_menu_options', $nav_menu_option ); 1252 1253 wp_defer_term_counting(false); 1254 1255 do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); 1256 1257 $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('<strong>%1$s</strong> has been updated.'), $nav_menu_selected_title ) . '</p></div>'; 1258 unset( $menu_items, $unsorted_menu_items ); 1259 1260 return $messages; 1261 } 1262 No newline at end of file -
wp-admin/js/nav-menu.js
45 45 if( api.menuList.length ) // If no menu, we're in the + tab. 46 46 this.initSortables(); 47 47 48 if( oneThemeLocationNoMenus ) 49 $('#posttype-page').addSelectedToMenu( api.addMenuItemToBottom ); 50 48 51 this.initToggles(); 49 50 this.initTabManager(); 52 53 this.messageFadeIn(); 54 55 this.initSelectMenuDropdown(); 56 this.initAccessibility(); 51 57 }, 52 58 53 59 jQueryExtensions : function() { … … 84 90 }); 85 91 return result; 86 92 }, 93 shiftHorizontally : function(dir) { 94 return this.each(function(){ 95 var t = $(this), 96 depth = t.menuItemDepth(), 97 newDepth = depth + dir; 98 99 // Change .menu-item-depth-n class 100 t.moveHorizontally(newDepth, depth); 101 }); 102 }, 103 moveHorizontally : function(newDepth, depth) { 104 return this.each(function(){ 105 var t = $(this), 106 children = t.childMenuItems(), 107 diff = newDepth - depth, 108 subItemText = t.find('.is-submenu'); 109 110 // Change .menu-item-depth-n class 111 t.updateDepthClass(newDepth, depth).updateParentMenuItemDBId(); 112 113 // If it has children, move those too 114 if (children) { 115 children.each(function( index ) { 116 var thisDepth = $(this).menuItemDepth(), 117 newDepth = thisDepth + diff; 118 $(this).updateDepthClass(newDepth, thisDepth).updateParentMenuItemDBId(); 119 }); 120 } 121 122 // Show "Sub item" helper text 123 if (0 === newDepth) 124 subItemText.hide(); 125 else 126 subItemText.show(); 127 }); 128 }, 87 129 updateParentMenuItemDBId : function() { 88 130 return this.each(function(){ 89 131 var item = $(this), 90 132 input = item.find('.menu-item-data-parent-id'), 91 depth = item.menuItemDepth(), 92 parent = item.prev(); 133 depth = parseInt(item.menuItemDepth()), 134 parentDepth = depth - 1; 135 parent = item.prevAll('.menu-item-depth-' + parentDepth).first(); 93 136 94 137 if( depth == 0 ) { // Item is on the top level, has no parent 95 138 input.val(0); 96 139 } else { // Find the parent item, and retrieve its object id. 97 while( ! parent[0] || ! parent[0].className || -1 == parent[0].className.indexOf('menu-item') || ( parent.menuItemDepth() != depth - 1 ) )98 parent = parent.prev();99 140 input.val( parent.find('.menu-item-data-db-id').val() ); 100 141 } 101 142 }); … … 120 161 121 162 return this.each(function() { 122 163 var t = $(this), menuItems = {}, 123 checkboxes = t.find('.tabs-panel-active .categorychecklist li input:checked'),164 checkboxes = ( oneThemeLocationNoMenus ) ? t.find('#page-all li input[type="checkbox"]') : t.find('.tabs-panel-active .categorychecklist li input:checked'), 124 165 re = new RegExp('menu-item\\[(\[^\\]\]*)'); 125 166 126 167 processMethod = processMethod || api.addMenuItemToBottom; … … 222 263 } 223 264 }); 224 265 }, 266 267 initSelectMenuDropdown : function () { 268 var menuSelector = $('.manage-menus select'); 225 269 270 menuSelector.on('change', function () { 271 var url = $(this).val(); 272 273 if (url && '--' !== url) { 274 $('.menu-selector .spinner').show(); 275 window.location = url; 276 } 277 }); 278 }, 279 280 initAccessibility : function() { 281 $('.item-edit').on('focus', function () { 282 $(this).on('keydown', function (e) { 283 284 // Bail if it's not an arrow key 285 if (e.which !== 37 && e.which !== 38 && e.which !== 39 && e.which !== 40) 286 return; 287 288 // Avoid multiple keydown events 289 $(this).off('keydown'); 290 291 var menuItems = $('#menu-to-edit li'); 292 menuItemsCount = menuItems.length, 293 thisItem = $(this).parents('li.menu-item'), 294 thisItemChildren = thisItem.childMenuItems(), 295 thisItemData = thisItem.getItemData(), 296 thisItemDepth = parseInt(thisItem.menuItemDepth()), 297 thisItemPosition = parseInt(thisItem.index()), 298 nextItem = thisItem.next(), 299 nextItemChildren = nextItem.childMenuItems(), 300 nextItemDepth = parseInt(nextItem.menuItemDepth()) + 1, 301 prevItem = thisItem.prev(), 302 prevItemDepth = parseInt(prevItem.menuItemDepth()), 303 prevItemId = prevItem.getItemData()['menu-item-db-id']; 304 305 // Bail if there is only one menu item 306 if (1 === menuItemsCount) 307 return; 308 309 // If RTL, swap left/right arrows 310 var arrows = { '38' : 'up', '40' : 'down', '37' : 'left', '39' : 'right' }; 311 if ($('body').hasClass('rtl')) 312 arrows = { '38' : 'up', '40' : 'down', '39' : 'left', '37' : 'right' }; 313 314 switch (arrows[e.which]) { 315 case 'up': 316 var newItemPosition = thisItemPosition - 1; 317 318 // Already at top 319 if (0 === thisItemPosition) 320 break; 321 322 // If a sub item is moved to top, shift it to 0 depth 323 if (0 === newItemPosition && 0 !== thisItemDepth) 324 thisItem.moveHorizontally(0, thisItemDepth); 325 326 // If prev item is sub item, shift to match depth 327 if (0 !== prevItemDepth) 328 thisItem.moveHorizontally(prevItemDepth, thisItemDepth); 329 330 // Does this item have sub items? 331 if (thisItemChildren) { 332 var items = thisItem.add(thisItemChildren); 333 // Move the entire block 334 items.detach().insertBefore(menuItems.eq(newItemPosition)); 335 } else { 336 thisItem.detach().insertBefore(menuItems.eq(newItemPosition)); 337 } 338 break; 339 case 'down': 340 // Does this item have sub items? 341 if (thisItemChildren) { 342 var items = thisItem.add(thisItemChildren), 343 nextItem = menuItems.eq(items.length + thisItemPosition), 344 nextItemChildren = 0 !== nextItem.childMenuItems().length; 345 346 if (nextItemChildren) { 347 var newDepth = parseInt(nextItem.menuItemDepth()) + 1; 348 thisItem.moveHorizontally(newDepth, thisItemDepth); 349 } 350 351 // Have we reached the bottom? 352 if (menuItemsCount === thisItemPosition + items.length) 353 break; 354 355 items.detach().insertAfter(menuItems.eq(thisItemPosition + items.length)); 356 } else { 357 // If next item has sub items, shift depth 358 if (0 !== nextItemChildren.length) 359 thisItem.moveHorizontally(nextItemDepth, thisItemDepth); 360 361 // Have we reached the bottom 362 if (menuItemsCount === thisItemPosition + 1) 363 break; 364 thisItem.detach().insertAfter(menuItems.eq(thisItemPosition + 1)); 365 } 366 break; 367 case 'left': 368 // As far left as possible 369 if (0 === thisItemDepth) 370 break; 371 thisItem.shiftHorizontally(-1); 372 break; 373 case 'right': 374 // Can't be sub item at top 375 if (0 === thisItemPosition) 376 break; 377 // Already sub item of prevItem 378 if (thisItemData['menu-item-parent-id'] === prevItemId) 379 break; 380 thisItem.shiftHorizontally(1); 381 break; 382 } 383 api.registerChange(); 384 // Put focus back on same menu item 385 $('#edit-' + thisItemData['menu-item-db-id']).focus(); 386 return false; 387 }); 388 }).blur(function () { 389 $(this).off('keydown'); 390 }); 391 }, 392 393 messageFadeIn : function() { 394 var messages = $('#message'); 395 396 // Visual change when users save menus multiple times in a row 397 messages.slideDown('slow'); 398 }, 399 226 400 initToggles : function() { 227 401 // init postboxes 228 402 postboxes.add_postbox_toggles('nav-menus'); … … 245 419 menuEdge = api.menuList.offset().left, 246 420 body = $('body'), maxChildDepth, 247 421 menuMaxDepth = initialMenuMaxDepth(); 422 423 if( 0 != $('#menu-to-edit li').length ) 424 $('.drag-instructions').show(); 248 425 249 426 // Use the right edge if RTL. 250 427 menuEdge += api.isRTL ? api.menuList.width() : 0; … … 307 484 308 485 // Return child elements to the list 309 486 children = transport.children().insertAfter(ui.item); 487 488 // Add "sub menu" description 489 var subMenuTitle = ui.item.find('.item-title .is-submenu'); 490 if (0 < currentDepth) 491 subMenuTitle.show(); 492 else 493 subMenuTitle.hide(); 310 494 311 495 // Update depth classes 312 496 if( depthChange != 0 ) { … … 327 511 ui.item[0].style.left = 'auto'; 328 512 ui.item[0].style.right = 0; 329 513 } 330 331 // The width of the tab bar might have changed. Just in case.332 api.refreshMenuTabs( true );333 514 }, 334 515 change: function(e, ui) { 335 516 // Make sure the placeholder is inside the menu. … … 461 642 if( '' == $t.val() ) 462 643 $t.addClass( name ).val( $t.data(name) ); 463 644 }); 645 646 $('.blank-slate .input-with-default-title').focus(); 464 647 }, 465 648 466 649 attachThemeLocationsListeners : function() { … … 572 755 $.post( ajaxurl, params, function(menuMarkup) { 573 756 var ins = $('#menu-instructions'); 574 757 processMethod(menuMarkup, params); 758 // Make it stand out a bit more visually, by adding a fadeIn 759 $('li.pending').hide().fadeIn('slow'); 760 $('.drag-instructions').show(); 575 761 if( ! ins.hasClass('menu-instructions-inactive') && ins.siblings().length ) 576 762 ins.addClass('menu-instructions-inactive'); 577 763 callback(); … … 604 790 }; 605 791 } else { 606 792 // 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');793 $('#menu-settings-column').find('input,select').end().find('a').attr('href', '#').unbind('click'); 608 794 } 609 795 }, 610 796 … … 688 874 }); 689 875 }, 690 876 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 877 eventOnClickEditLink : function(clickedEl) { 825 878 var settings, item, 826 879 matchedSection = /#(.*)$/.exec(clickedEl.href); … … 945 998 var ins = $('#menu-instructions'); 946 999 el.remove(); 947 1000 children.shiftDepthClass(-1).updateParentMenuItemDBId(); 948 if( ! ins.siblings().length ) 1001 if( 0 == $('#menu-to-edit li').length ) { 1002 $('.drag-instructions').hide(); 949 1003 ins.removeClass('menu-instructions-inactive'); 1004 } 950 1005 }); 951 1006 }, 952 1007 -
wp-admin/nav-menus.php
221 221 if ( is_nav_menu_item( $menu_item_id ) && wp_delete_post( $menu_item_id, true ) ) 222 222 $messages[] = '<div id="message" class="updated"><p>' . __('The menu item has been successfully deleted.') . '</p></div>'; 223 223 break; 224 224 225 case 'delete': 225 226 check_admin_referer( 'delete-nav_menu-' . $nav_menu_selected_id ); 226 227 227 if ( is_nav_menu( $nav_menu_selected_id ) ) { 228 $deleted_nav_menu = wp_get_nav_menu_object( $nav_menu_selected_id ); 229 $delete_nav_menu = wp_delete_nav_menu( $nav_menu_selected_id ); 230 231 if ( is_wp_error($delete_nav_menu) ) { 232 $messages[] = '<div id="message" class="error"><p>' . $delete_nav_menu->get_error_message() . '</p></div>'; 233 } else { 234 // Remove this menu from any locations. 235 $locations = get_theme_mod( 'nav_menu_locations' ); 236 foreach ( (array) $locations as $location => $menu_id ) { 237 if ( $menu_id == $nav_menu_selected_id ) 238 $locations[ $location ] = 0; 239 } 240 set_theme_mod( 'nav_menu_locations', $locations ); 241 $messages[] = '<div id="message" class="updated"><p>' . __('The menu has been successfully deleted.') . '</p></div>'; 242 // Select the next available menu 243 $nav_menu_selected_id = 0; 244 $_nav_menus = wp_get_nav_menus( array('orderby' => 'name') ); 245 foreach( $_nav_menus as $index => $_nav_menu ) { 246 if ( strcmp( $_nav_menu->name, $deleted_nav_menu->name ) >= 0 247 || $index == count( $_nav_menus ) - 1 ) { 248 $nav_menu_selected_id = $_nav_menu->term_id; 249 break; 250 } 251 } 252 } 253 unset( $delete_nav_menu, $deleted_nav_menu, $_nav_menus ); 228 $deletion = _wp_delete_nav_menu( $nav_menu_selected_id ); 254 229 } else { 255 230 // Reset the selected menu 256 231 $nav_menu_selected_id = 0; 257 232 unset( $_REQUEST['menu'] ); 258 233 } 234 235 if ( ! isset( $deletion ) ) 236 break; 237 238 if ( is_wp_error( $deletion ) ) 239 $messages[] = '<div id="message" class="error"><p>' . $deletion->get_error_message() . '</p></div>'; 240 else 241 $messages[] = '<div id="message" class="updated"><p>' . __( 'The menu has been successfully deleted.' ) . '</p></div>'; 259 242 break; 260 243 244 case 'delete_menus': 245 check_admin_referer( 'nav_menus_bulk_actions' ); 246 foreach ( $_REQUEST['delete_menus'] as $menu_id_to_delete ) { 247 if ( ! is_nav_menu( $menu_id_to_delete ) ) 248 continue; 249 250 $deletion = _wp_delete_nav_menu( $menu_id_to_delete ); 251 if ( is_wp_error( $deletion ) ) { 252 $messages[] = '<div id="message" class="error"><p>' . $deletion->get_error_message() . '</p></div>'; 253 $deletion_error = true; 254 } 255 } 256 257 if ( empty( $deletion_error ) ) 258 $messages[] = '<div id="message" class="updated"><p>' . __( 'Selected menus have been successfully deleted.' ) . '</p></div>'; 259 break; 260 261 261 case 'update': 262 262 check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' ); 263 263 264 264 // Update menu theme locations 265 if ( isset( $_POST['menu-locations'] ) ) 265 if ( isset( $_POST['menu-locations'] ) ) { 266 266 set_theme_mod( 'nav_menu_locations', array_map( 'absint', $_POST['menu-locations'] ) ); 267 } else { 268 // remove menu locations that have been unchecked 269 $locations = get_registered_nav_menus(); 270 $menu_locations = get_nav_menu_locations(); 271 foreach ( $locations as $location => $description ) { 272 if ( $menu_locations[ $location ] == $nav_menu_selected_id ) 273 unset( $menu_locations[ $location ] ); 274 } 275 set_theme_mod( 'nav_menu_locations', array_map( 'absint', $menu_locations ) ); 276 } 267 277 278 268 279 // Add Menu 269 280 if ( 0 == $nav_menu_selected_id ) { 270 281 $new_menu_title = trim( esc_html( $_POST['menu-name'] ) ); … … 278 289 $_menu_object = wp_get_nav_menu_object( $_nav_menu_selected_id ); 279 290 $nav_menu_selected_id = $_nav_menu_selected_id; 280 291 $nav_menu_selected_title = $_menu_object->name; 281 $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been successfully created.'), $nav_menu_selected_title ) . '</p></div>'; 292 if ( isset( $_REQUEST['menu-item'] ) ) 293 wp_save_nav_menu_items( $nav_menu_selected_id, $_REQUEST['menu-item'] ); 294 if ( isset( $_REQUEST['zero-menu-state'] ) ) { 295 // If there are menu items, add them 296 wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title ); 297 // Auto-save nav_menu_locations 298 $locations = get_theme_mod( 'nav_menu_locations' ); 299 foreach ( (array) $locations as $location => $menu_id ) { 300 $locations[ $location ] = $nav_menu_selected_id; 301 break; // There should only be 1 302 } 303 set_theme_mod( 'nav_menu_locations', $locations ); 304 } 305 $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('<strong>%s</strong> has been created. Next, add menu items (i.e. pages, links, categories) from the column on the left.'), $nav_menu_selected_title ) . '</p></div>'; 282 306 } 283 307 } else { 284 308 $messages[] = '<div id="message" class="error"><p>' . __('Please enter a valid menu name.') . '</p></div>'; … … 309 333 // Update menu items 310 334 311 335 if ( ! is_wp_error( $_menu_object ) ) { 312 $unsorted_menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('orderby' => 'ID', 'output' => ARRAY_A, 'output_key' => 'ID', 'post_status' => 'draft,publish') ); 313 $menu_items = array(); 314 // Index menu items by db ID 315 foreach( $unsorted_menu_items as $_item ) 316 $menu_items[$_item->db_id] = $_item; 317 318 $post_fields = array( 'menu-item-db-id', 'menu-item-object-id', 'menu-item-object', 'menu-item-parent-id', 'menu-item-position', 'menu-item-type', 'menu-item-title', 'menu-item-url', 'menu-item-description', 'menu-item-attr-title', 'menu-item-target', 'menu-item-classes', 'menu-item-xfn' ); 319 wp_defer_term_counting(true); 320 // Loop through all the menu items' POST variables 321 if ( ! empty( $_POST['menu-item-db-id'] ) ) { 322 foreach( (array) $_POST['menu-item-db-id'] as $_key => $k ) { 323 324 // Menu item title can't be blank 325 if ( empty( $_POST['menu-item-title'][$_key] ) ) 326 continue; 327 328 $args = array(); 329 foreach ( $post_fields as $field ) 330 $args[$field] = isset( $_POST[$field][$_key] ) ? $_POST[$field][$_key] : ''; 331 332 $menu_item_db_id = wp_update_nav_menu_item( $nav_menu_selected_id, ( $_POST['menu-item-db-id'][$_key] != $_key ? 0 : $_key ), $args ); 333 334 if ( is_wp_error( $menu_item_db_id ) ) 335 $messages[] = '<div id="message" class="error"><p>' . $menu_item_db_id->get_error_message() . '</p></div>'; 336 elseif ( isset( $menu_items[$menu_item_db_id] ) ) 337 unset( $menu_items[$menu_item_db_id] ); 338 } 339 } 340 341 // Remove menu items from the menu that weren't in $_POST 342 if ( ! empty( $menu_items ) ) { 343 foreach ( array_keys( $menu_items ) as $menu_item_id ) { 344 if ( is_nav_menu_item( $menu_item_id ) ) { 345 wp_delete_post( $menu_item_id ); 346 } 347 } 348 } 349 350 // Store 'auto-add' pages. 351 $auto_add = ! empty( $_POST['auto-add-pages'] ); 352 $nav_menu_option = (array) get_option( 'nav_menu_options' ); 353 if ( ! isset( $nav_menu_option['auto_add'] ) ) 354 $nav_menu_option['auto_add'] = array(); 355 if ( $auto_add ) { 356 if ( ! in_array( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) 357 $nav_menu_option['auto_add'][] = $nav_menu_selected_id; 358 } else { 359 if ( false !== ( $key = array_search( $nav_menu_selected_id, $nav_menu_option['auto_add'] ) ) ) 360 unset( $nav_menu_option['auto_add'][$key] ); 361 } 362 // Remove nonexistent/deleted menus 363 $nav_menu_option['auto_add'] = array_intersect( $nav_menu_option['auto_add'], wp_get_nav_menus( array( 'fields' => 'ids' ) ) ); 364 update_option( 'nav_menu_options', $nav_menu_option ); 365 366 wp_defer_term_counting(false); 367 368 do_action( 'wp_update_nav_menu', $nav_menu_selected_id ); 369 370 $messages[] = '<div id="message" class="updated"><p>' . sprintf( __('The <strong>%s</strong> menu has been updated.'), $nav_menu_selected_title ) . '</p></div>'; 371 unset( $menu_items, $unsorted_menu_items ); 336 $messages = array_merge( $messages, wp_nav_menu_update_menu_items( $nav_menu_selected_id, $nav_menu_selected_title ) ); 372 337 } 373 338 } 374 339 break; … … 376 341 377 342 // Get all nav menus 378 343 $nav_menus = wp_get_nav_menus( array('orderby' => 'name') ); 344 $menu_count = count( $nav_menus ); 379 345 346 // Are we on the add new screen? 347 $add_new_screen = ( isset( $_GET['menu'] ) && 0 == $_GET['menu'] ) ? true : false; 348 349 // If we have one theme location, and zero menus, we take them right into editing their first menu 350 $one_theme_location_no_menus = ( 1 == count( get_registered_nav_menus() ) && ! $add_new_screen && empty($nav_menus) && 0 < count(get_pages()) ) ? true : false; 351 352 // Redirect to add screen if there are no menus and this users has either zero, or more than 1 theme locations 353 if ( 0 == $menu_count && ! $add_new_screen && ! $one_theme_location_no_menus ) 354 wp_redirect( admin_url( 'nav-menus.php?action=edit&menu=0' ) ); 355 380 356 // Get recently edited nav menu 381 357 $recently_edited = (int) get_user_option( 'nav_menu_recently_edited' ); 382 383 // If there was no recently edited menu, and $nav_menu_selected_id is a nav menu, update recently edited menu. 384 if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) { 358 if ( !$recently_edited && is_nav_menu( $nav_menu_selected_id ) ) 385 359 $recently_edited = $nav_menu_selected_id; 386 360 387 // Else if $nav_menu_selected_id is not a menu and not requesting that we create a new menu, but $recently_edited is a menu, grab that one.388 } elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && is_nav_menu( $recently_edited ) ) { 361 // Use $recently_edited if none are selected 362 if ( 0 == $nav_menu_selected_id && ! isset( $_GET['menu'] ) && is_nav_menu( $recently_edited ) ) 389 363 $nav_menu_selected_id = $recently_edited; 390 364 391 // Else try to grab the first menu from the menus list392 } elseif ( 0 == $nav_menu_selected_id && ! isset( $_REQUEST['menu'] ) && ! empty($nav_menus) ) { 365 // On deletion of menu, if another menu exists, show it 366 if ( ! $add_new_screen && 0 < $menu_count && isset( $_GET['action'] ) && 'delete' == $_GET['action'] ) 393 367 $nav_menu_selected_id = $nav_menus[0]->term_id; 394 } 368 369 if ( $one_theme_location_no_menus ) 370 $nav_menu_selected_id = 0; 395 371 396 372 // Update the user's setting 397 373 if ( $nav_menu_selected_id != $recently_edited && is_nav_menu( $nav_menu_selected_id ) ) … … 418 394 $_wp_nav_menu_max_depth = 0; 419 395 420 396 // Calling wp_get_nav_menu_to_edit generates $_wp_nav_menu_max_depth 421 if ( is_nav_menu( $nav_menu_selected_id ) ) 397 if ( is_nav_menu( $nav_menu_selected_id ) ) { 398 $menu_items = wp_get_nav_menu_items( $nav_menu_selected_id, array('post_status' => 'any') ); 422 399 $edit_markup = wp_get_nav_menu_to_edit( $nav_menu_selected_id ); 400 } 423 401 424 402 function wp_nav_menu_max_depth($classes) { 425 403 global $_wp_nav_menu_max_depth; … … 460 438 ?> 461 439 <div class="wrap"> 462 440 <?php screen_icon(); ?> 463 <h2> <?php esc_html_e('Menus'); ?></h2>441 <h2>Menus <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'edit', 'menu' => 0, ), admin_url( 'nav-menus.php' ) ) ); ?>" class="add-new-h2">Add New</a></h2> 464 442 <?php 465 443 foreach( $messages as $message ) : 466 444 echo $message . "\n"; 467 445 endforeach; 468 446 ?> 447 <?php if ( 1 < $menu_count ) : ?> 448 <div class="manage-menus"> 449 <span><?php _e('Selected menu'); ?></span> 450 <select> 451 <?php 452 foreach( (array) $nav_menus as $_nav_menu ) : ?> 453 <option value="<?php echo esc_url(add_query_arg( array( 'action' => 'edit', 'menu' => $_nav_menu->term_id, ), admin_url( 'nav-menus.php' ) )); ?>" <?php if ( $nav_menu_selected_id == $_nav_menu->term_id ) echo 'selected="selected"'; ?>> 454 <?php echo esc_html( $_nav_menu->truncated_name ); ?> 455 </option> 456 <?php endforeach; ?> 457 </select> 458 <span class="spinner"></span> 459 </div> 460 <?php endif; ?> 469 461 <div id="nav-menus-frame"> 470 <div id="menu-settings-column" class="metabox-holder<?php if ( !$nav_menu_selected_id) { echo ' metabox-holder-disabled'; } ?>">462 <div id="menu-settings-column" class="metabox-holder<?php if ( isset( $_GET['menu'] ) && '0' == $_GET['menu'] ) { echo ' metabox-holder-disabled'; } ?>"> 471 463 464 <div class="clear"></div> 465 472 466 <form id="nav-menu-meta" action="<?php echo admin_url( 'nav-menus.php' ); ?>" class="nav-menu-meta" method="post" enctype="multipart/form-data"> 473 467 <input type="hidden" name="menu" id="nav-menu-meta-object-id" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> 474 468 <input type="hidden" name="action" value="add-menu-item" /> … … 479 473 </div><!-- /#menu-settings-column --> 480 474 <div id="menu-management-liquid"> 481 475 <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 ); ?> 495 </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> 530 <div class="menu-edit"> 531 <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> 476 <form id="update-nav-menu" action="<?php echo admin_url( 'nav-menus.php' ); ?>" method="post" enctype="multipart/form-data"> 477 <div class="menu-edit <?php if ( $add_new_screen ) echo 'blank-slate'; ?>"> 478 <?php 479 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); 480 wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); 481 wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' ); 482 ?> 483 <?php if ( $one_theme_location_no_menus ) { ?> 484 <input type="hidden" name="zero-menu-state" value="true" /> 485 <?php } ?> 486 <input type="hidden" name="action" value="update" /> 487 <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> 532 488 <div id="nav-menu-header"> 533 <div id="submitpost" class="submitbox"> 534 <div class="major-publishing-actions"> 535 <label class="menu-name-label howto open-label" for="menu-name"> 536 <span><?php _e('Menu Name'); ?></span> 537 <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 ); ?>" /> 538 </label> 539 <?php if ( !empty( $nav_menu_selected_id ) ) : 540 if ( ! isset( $auto_add ) ) { 541 $auto_add = get_option( 'nav_menu_options' ); 542 if ( ! isset( $auto_add['auto_add'] ) ) 543 $auto_add = false; 544 elseif ( false !== array_search( $nav_menu_selected_id, $auto_add['auto_add'] ) ) 545 $auto_add = true; 546 else 547 $auto_add = false; 548 } 549 ?> 550 <div class="auto-add-pages"> 551 <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 </div> 489 <div class="major-publishing-actions"> 490 <h2><?php if ( $one_theme_location_no_menus ) { _e('Menu 1'); } else { echo esc_attr( $nav_menu_selected_title ); } ?></h2> 491 <div class="publishing-action"> 492 <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?> 493 </div><!-- END .publishing-action --> 494 </div><!-- END .major-publishing-actions --> 495 </div><!-- END .nav-menu-header --> 496 <div id="post-body"> 497 <div id="post-body-content"> 498 <div class="menu-settings" <?php if ( $one_theme_location_no_menus ) { ?>style="display: none;"<?php } ?>> 499 <h3 class="settings-header"><?php _e('Settings'); ?></strong></h3> 500 <?php if ( $add_new_screen ) : ?> 501 <h3><?php _e('Add a new menu'); ?></strong></h3> 502 <p class="post-body-plain"><?php _e('Give your menu a name, then click Create Menu.'); ?></p> 553 503 <?php endif; ?> 554 <br class="clear" /> 555 <div class="publishing-action"> 556 <?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 </div><!-- END .publishing-action --> 504 <dl> 505 <dt class="howto"><label class="menu-name-label" for="menu-name"><?php _e('Menu Name'); ?></label></dt> 506 <dd> 507 <?php if ( $one_theme_location_no_menus ) { ?> 508 <input name="menu-name" id="menu-name" type="hidden" class="menu-name regular-text menu-item-textbox input-with-default-title" value="<?php _e('Menu 1'); ?>" /> 509 <?php } else { ?> 510 <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 ); ?>" /> 511 <?php } ?> 512 </dd> 513 </dl> 514 <?php 515 if ( ! isset( $auto_add ) ) { 516 $auto_add = get_option( 'nav_menu_options' ); 517 if ( ! isset( $auto_add['auto_add'] ) ) 518 $auto_add = false; 519 elseif ( false !== array_search( $nav_menu_selected_id, $auto_add['auto_add'] ) ) 520 $auto_add = true; 521 else 522 $auto_add = false; 523 } ?> 558 524 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 --> 525 <dl class="auto-add-pages"> 526 <dt class="howto"><?php _e('Auto add pages'); ?></dt> 527 <dd class="checkbox-input"><input type="checkbox"<?php checked( $auto_add ); ?> name="auto-add-pages" id="auto-add-pages" value="1" /> <label for="auto-add-pages"><?php printf( __('Automatically add new top-level pages' ), esc_url( admin_url( 'edit.php?post_type=page' ) ) ); ?></label></dd> 528 </dl> 529 530 <?php if ( current_theme_supports( 'menus' ) ) : 531 $locations = get_registered_nav_menus(); 532 $menu_locations = get_nav_menu_locations(); 533 ?> 534 535 <dl class="menu-theme-locations"> 536 <dt class="howto"><?php _e( 'Theme locations to use this menu in' ); ?></dt> 537 <dd class="checkbox-input"> 538 539 <?php foreach ( $locations as $location => $description ) : ?> 540 <input type="checkbox"<?php checked( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] == $nav_menu_selected_id ); ?> name="menu-locations[<?php echo esc_attr( $location ); ?>]" id="locations-<?php echo esc_attr( $location ); ?>" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> <label for="locations-<?php echo esc_attr( $location ); ?>"><?php echo $description; ?></label> 541 <?php if ( isset( $menu_locations[ $location ] ) && $menu_locations[ $location ] != $nav_menu_selected_id ) : ?> 542 <p></p><small><?php printf( __( "Note: the '%s' menu is currently assigned to this location." ), wp_get_nav_menu_object( $menu_locations[ $location ] )->name ); ?> </small></p> 543 <?php endif; ?> 544 545 <?php endforeach; ?> 546 547 </dd> 548 </dl> 549 563 550 <?php endif; ?> 564 </div><!-- END .major-publishing-actions --> 565 </div><!-- END #submitpost .submitbox --> 566 <?php 567 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); 568 wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); 569 wp_nonce_field( 'update-nav_menu', 'update-nav-menu-nonce' ); 570 ?> 571 <input type="hidden" name="action" value="update" /> 572 <input type="hidden" name="menu" id="menu" value="<?php echo esc_attr( $nav_menu_selected_id ); ?>" /> 573 </div><!-- END #nav-menu-header --> 574 <div id="post-body"> 575 <div id="post-body-content"> 551 552 </div> 553 <?php if ( ! $add_new_screen ) : ?> 554 <h3><?php _e('Menu Structure'); ?></strong></h3> 555 <?php $starter_copy = ( $one_theme_location_no_menus ) ? __("Edit your default menu by adding or removing items. Drag each item into the order you prefer. Click Create Menu to save your changes.") : __('Drag each item into the order you prefer. Click an item to reveal additional configuration options.') ; ?> 556 <div class="drag-instructions post-body-plain" <?php if ( isset( $menu_items ) && 0 == count( $menu_items ) ) { ?>style="display: none;"<?php } ?>> 557 <p><?php echo $starter_copy; ?></p> 558 </div> 576 559 <?php 577 if ( isset( $edit_markup ) ) { 578 if ( ! is_wp_error( $edit_markup ) ) 579 echo $edit_markup; 580 } else if ( empty( $nav_menu_selected_id ) ) { 581 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>'; 585 echo '</div>'; 586 } 560 if ( isset( $edit_markup ) && ! is_wp_error( $edit_markup ) ) { 561 echo $edit_markup; 562 } else { 587 563 ?> 564 <ul class="menu" id="menu-to-edit"></ul> 565 <?php } ?> 566 <?php endif; ?> 588 567 </div><!-- /#post-body-content --> 589 568 </div><!-- /#post-body --> 590 569 <div id="nav-menu-footer"> 591 570 <div class="major-publishing-actions"> 592 <div class="publishing-action"> 593 <?php 594 if ( ! empty( $nav_menu_selected_id ) ) 595 submit_button( __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_footer' ) ); 596 ?> 597 </div> 598 </div> 571 <?php if ( 0 != $menu_count && ! $add_new_screen ) : ?> 572 <span class="delete-action"> 573 <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> 574 </span><!-- END .delete-action --> 575 <?php endif; ?> 576 <div class="publishing-action"> 577 <?php submit_button( empty( $nav_menu_selected_id ) ? __( 'Create Menu' ) : __( 'Save Menu' ), 'button-primary menu-save', 'save_menu', false, array( 'id' => 'save_menu_header' ) ); ?> 578 </div><!-- END .publishing-action --> 579 </div><!-- END .major-publishing-actions --> 599 580 </div><!-- /#nav-menu-footer --> 600 </ form><!-- /#update-nav-menu-->601 </ div><!-- /.menu-edit-->581 </div><!-- /.menu-edit --> 582 </form><!-- /#update-nav-menu --> 602 583 </div><!-- /#menu-management --> 603 584 </div><!-- /#menu-management-liquid --> 604 585 </div><!-- /#nav-menus-frame --> 605 586 </div><!-- /.wrap--> 606 587 <script type="text/javascript">var oneThemeLocationNoMenus = <?php if ( $one_theme_location_no_menus ) { echo 'true'; } else { echo 'false'; } ?>;</script> 607 588 <?php include( './admin-footer.php' ); ?> -
wp-admin/css/wp-admin.css
2433 2433 .fixed .column-categories, 2434 2434 .fixed .column-tags, 2435 2435 .fixed .column-rel, 2436 .fixed .column-role { 2436 .fixed .column-role, 2437 .fixed .column-count { 2437 2438 width: 15%; 2438 2439 } 2439 2440 … … 6760 6761 6761 6762 /* nav-menu */ 6762 6763 6764 .nav-menus-php #message { 6765 display: none; 6766 } 6767 6768 .nav-menus-php .nav-tab-wrapper { 6769 margin-bottom: 20px; 6770 } 6771 6763 6772 #nav-menus-frame { 6764 6773 margin-left: 300px; 6774 margin-top: 20px; 6765 6775 } 6766 6776 6767 6777 #wpbody-content #menu-settings-column { … … 6770 6780 margin-left: -300px; 6771 6781 clear: both; 6772 6782 float: left; 6773 padding-top: 24px;6783 padding-top: 0; 6774 6784 } 6775 6785 6776 6786 .no-js #wpbody-content #menu-settings-column { … … 6795 6805 position: relative; 6796 6806 } 6797 6807 6808 .blank-slate br { 6809 display: none; 6810 } 6811 6812 .blank-slate .menu-name { 6813 height: 2em; 6814 } 6815 6816 .is-submenu { 6817 color: #999; 6818 font-style: italic; 6819 font-weight: normal; 6820 margin-left: 4px; 6821 } 6822 6823 .manage-menus { 6824 border: 1px solid #eee; 6825 background: #fbfbfb; 6826 margin-top: 13px; 6827 padding: 10px; 6828 overflow: hidden; 6829 -webkit-border-radius: 3px; 6830 border-radius: 3px; 6831 } 6832 6833 .manage-menus select { 6834 float: left; 6835 min-width: 180px; 6836 } 6837 6838 .manage-menus .spinner { 6839 float: left; 6840 } 6841 6842 .manage-menus span { 6843 float: left; 6844 margin: 4px 6px 0 0; 6845 } 6846 6847 .menu-edit p { 6848 margin: .3em 0 .6em; 6849 } 6850 6851 .menu-settings { 6852 overflow: hidden; 6853 } 6854 6855 .menu-settings dl { 6856 margin: 0; 6857 overflow: hidden; 6858 } 6859 6860 .menu-settings dd { 6861 float: left; 6862 margin: 0; 6863 width: 60%; 6864 } 6865 6866 .menu-settings dt { 6867 clear: both; 6868 display: inline; 6869 float: left; 6870 padding: 3px 0 13px; 6871 width: 170px; 6872 } 6873 6874 .menu-edit .checkbox-input { 6875 margin-top: 4px; 6876 } 6877 6798 6878 /* Menu Container */ 6799 6879 #menu-management-liquid { 6800 6880 float: left; 6801 6881 min-width: 100%; 6882 margin-top: 3px; 6802 6883 } 6803 6884 6804 6885 #menu-management { … … 6812 6893 margin-bottom: 20px; 6813 6894 } 6814 6895 6896 #menu-management p.search-box { 6897 margin: 5px 0; 6898 } 6899 6815 6900 .nav-menus-php #post-body { 6816 padding: 10px;6901 padding: 0 10px; 6817 6902 border-width: 1px 0; 6818 6903 border-style: solid; 6819 6904 } … … 6827 6912 border-bottom: 1px solid; 6828 6913 } 6829 6914 6915 #nav-menu-header h2 { 6916 float: left; 6917 line-height: 18px; 6918 margin: 0; 6919 padding: 6px 0 0 0; 6920 font-size: 18px; 6921 } 6922 6830 6923 #nav-menu-footer { 6831 6924 border-top: 1px solid; 6832 6925 } … … 6845 6938 font-weight:bold; 6846 6939 } 6847 6940 6848 /* Menu Tabs */6849 6850 #menu-management .nav-tabs-nav {6851 margin: 0 20px;6852 }6853 6854 #menu-management .nav-tabs-arrow {6855 width: 10px;6856 padding: 0 5px 4px;6857 cursor: pointer;6858 position: absolute;6859 top: 0;6860 line-height: 22px;6861 font-size: 18px;6862 text-shadow: 0 1px 0 #fff;6863 }6864 6865 #menu-management .nav-tabs-arrow-left {6866 left: 0;6867 }6868 6869 #menu-management .nav-tabs-arrow-right {6870 right: 0;6871 text-align: right;6872 }6873 6874 #menu-management .nav-tabs-wrapper {6875 width: 100%;6876 height: 28px;6877 margin-bottom: -1px;6878 overflow: hidden;6879 }6880 6881 #menu-management .nav-tabs {6882 padding-left: 20px;6883 padding-right: 10px;6884 }6885 6886 .js #menu-management .nav-tabs {6887 float: left;6888 margin-left: 0px;6889 margin-right: -400px;6890 }6891 6892 #menu-management .nav-tab {6893 margin-bottom: 0;6894 font-size: 14px;6895 }6896 6897 6941 #select-nav-menu-container { 6898 6942 text-align: right; 6899 6943 padding: 0 10px 3px 10px; … … 7090 7134 } 7091 7135 7092 7136 #menu-to-edit { 7093 padding: 1em 0; 7137 margin: 0; 7138 padding: 0.1em 0; 7094 7139 } 7095 7140 7096 7141 .menu ul { … … 7106 7151 clear:both; 7107 7152 line-height:1.5em; 7108 7153 position:relative; 7109 margin : 13px 0 0 0;7154 margin-top: 9px; 7110 7155 } 7111 7156 7112 7157 .menu-item-handle { … … 7333 7378 text-align: right; 7334 7379 float: right; 7335 7380 line-height: 23px; 7336 margin: 5px 0 1px;7381 margin: 2px 0 1px; 7337 7382 } 7338 7383 7339 .nav-menus-php . major-publishing-actions .delete-action {7340 vertical-align: middle; 7341 text-align: left; 7342 float: left; 7343 padding-right: 15px; 7344 margin-top: 5px;7384 .nav-menus-php .blank-slate .auto-add-pages, 7385 .nav-menus-php .blank-slate .settings-header, 7386 .nav-menus-php .blank-slate dt, 7387 .nav-menus-php .blank-slate .auto-add-pages, 7388 .nav-menus-php .blank-slate .menu-theme-locations { 7389 display: none; 7345 7390 } 7346 7391 7347 .menu-name-label span, 7348 .auto-add-pages label { 7349 font-size: 12px; 7350 font-style: normal; 7392 .nav-menus-php .delete-action { 7393 float: left; 7394 margin-top: 2px; 7351 7395 } 7352 7396 7353 . menu-name-label{7354 margin-right: 15px;7397 .nav-menus-php .delete-action a { 7398 color: #999; 7355 7399 } 7356 7400 7357 .auto-add-pages input {7358 margin-top: 0;7359 }7360 7361 .auto-add-pages {7362 margin-top: 4px;7363 float: left;7364 }7365 7366 7401 .nav-menus-php .submitbox .submitcancel { 7367 7402 border-bottom: 1px solid; 7368 7403 padding: 1px 2px;