Customize: Allow menu creation in locations pane

Adds a link to the menu creation workflow from the locations selector in the nav menu control.

Props bpayton, westonruter, Travel_girl, melchoyce, celloexpressions.
Fixes #36279.

Built from https://develop.svn.wordpress.org/trunk@41899


git-svn-id: http://core.svn.wordpress.org/trunk@41733 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Konstantin Obenland 2017-10-18 14:51:47 +00:00
parent 97bab0459a
commit 261f0d8ef2
8 changed files with 62 additions and 15 deletions

View File

@ -32,8 +32,9 @@
color: #555; color: #555;
} }
/* The `edit-menu` button uses also the `button-link` class. */ /* The `edit-menu` and `create-menu` buttons also use the `button-link` class. */
.customize-control-nav_menu_location .edit-menu { .customize-control-nav_menu_location .edit-menu,
.customize-control-nav_menu_location .create-menu {
margin-right: 6px; margin-right: 6px;
vertical-align: middle; vertical-align: middle;
line-height: 28px; line-height: 28px;

File diff suppressed because one or more lines are too long

View File

@ -32,8 +32,9 @@
color: #555; color: #555;
} }
/* The `edit-menu` button uses also the `button-link` class. */ /* The `edit-menu` and `create-menu` buttons also use the `button-link` class. */
.customize-control-nav_menu_location .edit-menu { .customize-control-nav_menu_location .edit-menu,
.customize-control-nav_menu_location .create-menu {
margin-left: 6px; margin-left: 6px;
vertical-align: middle; vertical-align: middle;
line-height: 28px; line-height: 28px;

File diff suppressed because one or more lines are too long

View File

@ -1384,6 +1384,28 @@
// Focus on the new menu section. // Focus on the new menu section.
api.section( customizeId ).focus(); // @todo should we focus on the new menu's control and open the add-items panel? Thinking user flow... api.section( customizeId ).focus(); // @todo should we focus on the new menu's control and open the add-items panel? Thinking user flow...
},
/**
* Select a default location.
*
* This method selects a single location by default so we can support
* creating a menu for a specific menu location.
*
* @since 4.9.0
*
* @param {string|null} locationId - The ID of the location to select. `null` clears all selections.
* @returns {void}
*/
selectDefaultLocation: function( locationId ) {
var locationControl = api.control( this.id + '[locations]' ),
locationSelections = {};
if ( locationId !== null ) {
locationSelections[ locationId ] = true;
}
locationControl.setSelections( locationSelections );
} }
}); });
@ -1416,17 +1438,20 @@
} }
}; };
// Edit menu button. // Create and Edit menu buttons.
control.container.find( '.create-menu' ).on( 'click', function() {
var addMenuSection = api.section( 'add_menu' );
addMenuSection.selectDefaultLocation( this.dataset.locationId );
addMenuSection.focus();
} );
control.container.find( '.edit-menu' ).on( 'click', function() { control.container.find( '.edit-menu' ).on( 'click', function() {
var menuId = control.setting(); var menuId = control.setting();
api.section( 'nav_menu[' + menuId + ']' ).focus(); api.section( 'nav_menu[' + menuId + ']' ).focus();
}); });
control.setting.bind( 'change', function() { control.setting.bind( 'change', function() {
if ( 0 === control.setting() ) { var menuIsSelected = 0 !== control.setting();
control.container.find( '.edit-menu' ).addClass( 'hidden' ); control.container.find( '.create-menu' ).toggleClass( 'hidden', menuIsSelected );
} else { control.container.find( '.edit-menu' ).toggleClass( 'hidden', ! menuIsSelected );
control.container.find( '.edit-menu' ).removeClass( 'hidden' );
}
}); });
// Add/remove menus from the available options when they are added and removed. // Add/remove menus from the available options when they are added and removed.
@ -2350,6 +2375,24 @@
} ); } );
updateSelectedMenuLabel( navMenuLocationSetting.get() ); updateSelectedMenuLabel( navMenuLocationSetting.get() );
}); });
},
/**
* Set the selected locations.
*
* This method sets the selected locations and allows us to do things like
* set the default location for a new menu.
*
* @since 4.9.0
*
* @param {Object.<string,boolean>} selections - A map of location selections.
* @returns {void}
*/
setSelections: function( selections ) {
this.container.find( '.menu-location' ).each( function( i, checkboxNode ) {
var locationId = checkboxNode.dataset.locationId;
checkboxNode.checked = locationId in selections ? selections[ locationId ] : false;
} );
} }
}); });

File diff suppressed because one or more lines are too long

View File

@ -50,6 +50,7 @@ class WP_Customize_Nav_Menu_Location_Control extends WP_Customize_Control {
* Render content just like a normal select control. * Render content just like a normal select control.
* *
* @since 4.3.0 * @since 4.3.0
* @since 4.9.0 Added a button to create menus.
*/ */
public function render_content() { public function render_content() {
if ( empty( $this->choices ) ) { if ( empty( $this->choices ) ) {
@ -73,6 +74,7 @@ class WP_Customize_Nav_Menu_Location_Control extends WP_Customize_Control {
?> ?>
</select> </select>
</label> </label>
<button type="button" class="button-link create-menu<?php if ( $this->value() ) { echo ' hidden'; } ?>" data-location-id="<?php echo esc_attr( $this->location_id ); ?>" aria-label="<?php esc_attr_e( 'Create a menu for this location' ); ?>"><?php _e( '+ Create New Menu' ); ?></button>
<button type="button" class="button-link edit-menu<?php if ( ! $this->value() ) { echo ' hidden'; } ?>" aria-label="<?php esc_attr_e( 'Edit selected menu' ); ?>"><?php _e( 'Edit Menu' ); ?></button> <button type="button" class="button-link edit-menu<?php if ( ! $this->value() ) { echo ' hidden'; } ?>" aria-label="<?php esc_attr_e( 'Edit selected menu' ); ?>"><?php _e( 'Edit Menu' ); ?></button>
<?php <?php
} }

View File

@ -4,7 +4,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '4.9-beta2-41898'; $wp_version = '4.9-beta2-41899';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.