From 7ececb24f5dd59a26c1b3f41da439d6a1f3f488c Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Wed, 9 Mar 2016 21:40:27 +0000 Subject: [PATCH] Customize: Fix persistence of toggles for displayed nav menu item properties. * Eliminates need to click more than one checkbox to have preferences saved. * Adds debouncing to saving user-selected menu item properties. * Also removes discrepancies between available nav menu item properties on admin page vs Customizer. Fixes #35273. Props afercia, westonruter. git-svn-id: https://develop.svn.wordpress.org/trunk@36908 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/nav-menu.php | 16 +++++----- src/wp-admin/js/customize-nav-menus.js | 32 +++++++++++-------- .../class-wp-customize-nav-menus-panel.php | 21 ++++-------- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/src/wp-admin/includes/nav-menu.php b/src/wp-admin/includes/nav-menu.php index 53eaec0218..d8947d86ee 100644 --- a/src/wp-admin/includes/nav-menu.php +++ b/src/wp-admin/includes/nav-menu.php @@ -937,17 +937,17 @@ function wp_get_nav_menu_to_edit( $menu_id = 0 ) { * * @since 3.0.0 * - * @return string|WP_Error $output The menu formatted to edit or error object on failure. + * @return array Columns. */ function wp_nav_menu_manage_columns() { return array( - '_title' => __('Show advanced menu properties'), - 'cb' => '', - 'title-attribute' => __('Title Attribute'), - 'link-target' => __('Link Target'), - 'css-classes' => __('CSS Classes'), - 'xfn' => __('Link Relationship (XFN)'), - 'description' => __('Description'), + '_title' => __( 'Show advanced menu properties' ), + 'cb' => '', + 'link-target' => __( 'Link Target' ), + 'attr-title' => __( 'Title Attribute' ), + 'css-classes' => __( 'CSS Classes' ), + 'xfn' => __( 'Link Relationship (XFN)' ), + 'description' => __( 'Description' ), ); } diff --git a/src/wp-admin/js/customize-nav-menus.js b/src/wp-admin/js/customize-nav-menus.js index cad39c64ad..7f0925336b 100644 --- a/src/wp-admin/js/customize-nav-menus.js +++ b/src/wp-admin/js/customize-nav-menus.js @@ -218,7 +218,7 @@ .prop( 'tabIndex', -1 ) .removeClass( 'is-visible' ); } - + this.searchTerm = event.target.value; this.pages.search = 1; this.doSearch( 1 ); @@ -614,15 +614,21 @@ }); }, - saveManageColumnsState: function() { - var hidden = this.hidden(); - $.post( wp.ajax.settings.url, { - action: 'hidden-columns', - hidden: hidden, + saveManageColumnsState: _.debounce( function() { + var panel = this; + if ( panel._updateHiddenColumnsRequest ) { + panel._updateHiddenColumnsRequest.abort(); + } + + panel._updateHiddenColumnsRequest = wp.ajax.post( 'hidden-columns', { + hidden: panel.hidden(), screenoptionnonce: $( '#screenoptionnonce' ).val(), page: 'nav-menus' - }); - }, + } ); + panel._updateHiddenColumnsRequest.always( function() { + panel._updateHiddenColumnsRequest = null; + } ); + }, 2000 ), checked: function( column ) { this.container.addClass( 'field-' + column + '-active' ); @@ -633,12 +639,10 @@ }, hidden: function() { - this.hidden = function() { - return $( '.hide-column-tog' ).not( ':checked' ).map( function() { - var id = this.id; - return id.substring( id, id.length - 5 ); - }).get().join( ',' ); - }; + return $( '.hide-column-tog' ).not( ':checked' ).map( function() { + var id = this.id; + return id.substring( 0, id.length - 5 ); + }).get().join( ',' ); } } ); diff --git a/src/wp-includes/customize/class-wp-customize-nav-menus-panel.php b/src/wp-includes/customize/class-wp-customize-nav-menus-panel.php index b581d56f1f..adb19ee390 100644 --- a/src/wp-includes/customize/class-wp-customize-nav-menus-panel.php +++ b/src/wp-includes/customize/class-wp-customize-nav-menus-panel.php @@ -34,8 +34,9 @@ class WP_Customize_Nav_Menus_Panel extends WP_Customize_Panel { * @access public */ public function render_screen_options() { - // Essentially adds the screen options. - add_filter( 'manage_nav-menus_columns', array( $this, 'wp_nav_menu_manage_columns' ) ); + // Adds the screen options. + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + add_filter( 'manage_nav-menus_columns', 'wp_nav_menu_manage_columns' ); // Display screen options. $screen = WP_Screen::get( 'nav-menus.php' ); @@ -48,20 +49,12 @@ class WP_Customize_Nav_Menus_Panel extends WP_Customize_Panel { * Link title attribute added as it's a relatively advanced concept for new users. * * @since 4.3.0 - * @access public - * - * @return array The advanced menu properties. + * @deprecated 4.5.0 Deprecated in favor of wp_nav_menu_manage_columns(). */ public function wp_nav_menu_manage_columns() { - return array( - '_title' => __( 'Show advanced menu properties' ), - 'cb' => '', - 'link-target' => __( 'Link Target' ), - 'attr-title' => __( 'Title Attribute' ), - 'css-classes' => __( 'CSS Classes' ), - 'xfn' => __( 'Link Relationship (XFN)' ), - 'description' => __( 'Description' ), - ); + _deprecated_function( __METHOD__, '4.5.0', 'wp_nav_menu_manage_columns' ); + require_once ABSPATH . 'wp-admin/includes/nav-menu.php'; + return wp_nav_menu_manage_columns(); } /**