Add secondary flag to admin bar. fixes #19136.

git-svn-id: http://svn.automattic.com/wordpress/trunk@19230 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
koopersmith 2011-11-09 19:12:48 +00:00
parent a57f6b0271
commit 4de1815c67
5 changed files with 123 additions and 135 deletions

View File

@ -91,46 +91,40 @@ function wp_admin_bar_wp_menu( $wp_admin_bar ) {
) );
}
// Add secondary menu.
$wp_admin_bar->add_menu( array(
'parent' => 'wp-logo',
'id' => 'wp-logo-secondary',
'title' => ' ',
'meta' => array(
'class' => 'secondary',
),
) );
// Add WordPress.org link
$wp_admin_bar->add_menu( array(
'parent' => 'wp-logo-secondary',
'id' => 'wporg',
'title' => __('WordPress.org'),
'href' => __('http://wordpress.org'),
'parent' => 'wp-logo',
'secondary' => true,
'id' => 'wporg',
'title' => __('WordPress.org'),
'href' => __('http://wordpress.org'),
) );
// Add codex link
$wp_admin_bar->add_menu( array(
'parent' => 'wp-logo-secondary',
'id' => 'documentation',
'title' => __('Documentation'),
'href' => __('http://codex.wordpress.org'),
'parent' => 'wp-logo',
'secondary' => true,
'id' => 'documentation',
'title' => __('Documentation'),
'href' => __('http://codex.wordpress.org'),
) );
// Add forums link
$wp_admin_bar->add_menu( array(
'parent' => 'wp-logo-secondary',
'id' => 'support-forums',
'title' => __('Support Forums'),
'href' => __('http://wordpress.org/support/'),
'parent' => 'wp-logo',
'secondary' => true,
'id' => 'support-forums',
'title' => __('Support Forums'),
'href' => __('http://wordpress.org/support/'),
) );
// Add feedback link
$wp_admin_bar->add_menu( array(
'parent' => 'wp-logo-secondary',
'id' => 'feedback',
'title' => __('Feedback'),
'href' => __('http://wordpress.org/support/forum/requests-and-feedback'),
'parent' => 'wp-logo',
'secondary' => true,
'id' => 'feedback',
'title' => __('Feedback'),
'href' => __('http://wordpress.org/support/forum/requests-and-feedback'),
) );
}
@ -150,17 +144,15 @@ function wp_admin_bar_my_account_menu( $wp_admin_bar ) {
/* Add the 'My Account' menu */
$avatar = get_avatar( $user_id, 28 );
$howdy = sprintf( __('Howdy, %1$s'), $user_identity );
$class = 'opposite';
if ( ! empty( $avatar ) )
$class .= ' with-avatar';
$class = empty( $avatar ) ? '' : 'with-avatar';
$wp_admin_bar->add_menu( array(
'id' => 'my-account',
'title' => $howdy . $avatar,
'href' => $profile_url,
'meta' => array(
'class' => $class,
'id' => 'my-account',
'secondary' => true,
'title' => $howdy . $avatar,
'href' => $profile_url,
'meta' => array(
'class' => $class,
),
) );
@ -322,17 +314,6 @@ function wp_admin_bar_my_sites_menu( $wp_admin_bar ) {
) );
}
if ( $wp_admin_bar->user->blogs ) {
$wp_admin_bar->add_menu( array(
'parent' => 'my-sites',
'id' => 'my-sites-secondary',
'title' => ' ',
'meta' => array(
'class' => 'secondary',
),
) );
}
// Add blog links
$blue_wp_logo_url = includes_url('images/wpmini-blue.png');
@ -345,10 +326,11 @@ function wp_admin_bar_my_sites_menu( $wp_admin_bar ) {
$menu_id = 'blog-' . $blog->userblog_id;
$wp_admin_bar->add_menu( array(
'parent' => 'my-sites-secondary',
'id' => $menu_id,
'title' => $blavatar . $blogname,
'href' => get_admin_url( $blog->userblog_id ),
'parent' => 'my-sites',
'secondary' => true,
'id' => $menu_id,
'title' => $blavatar . $blogname,
'href' => get_admin_url( $blog->userblog_id ),
) );
$wp_admin_bar->add_menu( array(
@ -473,23 +455,23 @@ function wp_admin_bar_edit_menu( $wp_admin_bar ) {
* @since 3.1.0
*/
function wp_admin_bar_new_content_menu( $wp_admin_bar ) {
$primary = $secondary = array();
$actions = array();
$cpts = (array) get_post_types( array( 'show_in_admin_bar' => true ), 'objects' );
if ( isset( $cpts['post'] ) && current_user_can( $cpts['post']->cap->edit_posts ) ) {
$primary[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
$actions[ 'post-new.php' ] = array( $cpts['post']->labels->name_admin_bar, 'new-post' );
unset( $cpts['post'] );
}
if ( current_user_can( 'upload_files' ) )
$primary[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
$actions[ 'media-new.php' ] = array( _x( 'Media', 'add new from admin bar' ), 'new-media' );
if ( current_user_can( 'manage_links' ) )
$primary[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
$actions[ 'link-add.php' ] = array( _x( 'Link', 'add new from admin bar' ), 'new-link' );
if ( isset( $cpts['page'] ) && current_user_can( $cpts['page']->cap->edit_posts ) ) {
$primary[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
$actions[ 'post-new.php?post_type=page' ] = array( $cpts['page']->labels->name_admin_bar, 'new-page' );
unset( $cpts['page'] );
}
@ -499,47 +481,32 @@ function wp_admin_bar_new_content_menu( $wp_admin_bar ) {
continue;
$key = 'post-new.php?post_type=' . $cpt->name;
$primary[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
$actions[ $key ] = array( $cpt->labels->name_admin_bar, 'new-' . $cpt->name );
}
if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) )
$secondary[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user' );
$actions[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user', true );
if ( ! $primary && ! $secondary )
if ( ! $actions )
return;
$wp_admin_bar->add_menu( array(
'id' => 'new-content',
'title' => _x( 'Add New', 'admin bar menu group label' ),
'href' => admin_url( current( array_keys( $primary ) ) ),
'href' => admin_url( current( array_keys( $actions ) ) ),
) );
$items = array(
'new-content' => $primary,
'new-content-secondary' => $secondary,
);
foreach ( $actions as $link => $action ) {
list( $title, $id ) = $action;
$secondary = ! empty( $action[2] );
foreach ( $items as $parent => $actions ) {
if ( ! empty( $actions ) && $parent == 'new-content-secondary' ) {
$wp_admin_bar->add_menu( array(
'parent' => 'new-content',
'id' => 'new-content-secondary',
'title' => ' ',
'meta' => array(
'class' => 'secondary',
),
) );
}
foreach ( $actions as $link => $action ) {
$wp_admin_bar->add_menu( array(
'parent' => $parent,
'id' => $action[1],
'title' => $action[0],
'href' => admin_url( $link )
) );
}
$wp_admin_bar->add_menu( array(
'parent' => 'new-content',
'secondary' => $secondary,
'id' => $id,
'title' => $title,
'href' => admin_url( $link )
) );
}
}

View File

@ -12,6 +12,11 @@ class WP_Admin_Bar {
$this->proto = 'https://';
$this->user = new stdClass;
$this->root = new stdClass;
$this->root->children = (object) array(
'primary' => array(),
'secondary' => array(),
);
if ( is_user_logged_in() ) {
/* Populate settings we need for the menu based on the current user. */
@ -59,11 +64,12 @@ class WP_Admin_Bar {
* Add a node to the menu.
*
* @param array $args - The arguments for each node.
* - id - string - The ID of the item.
* - title - string - The title of the node.
* - parent - string - The ID of the parent node. Optional.
* - href - string - The link for the item. Optional.
* - meta - array - Meta data including the following keys: html, class, onclick, target, title.
* - id - string - The ID of the item.
* - title - string - The title of the node.
* - parent - string - The ID of the parent node. Optional.
* - href - string - The link for the item. Optional.
* - secondary - boolean - If the item should be part of a secondary menu. Optional. Default false.
* - meta - array - Meta data including the following keys: html, class, onclick, target, title.
*/
public function add_node( $args ) {
// Shim for old method signature: add_node( $parent_id, $menu_obj, $args )
@ -80,11 +86,12 @@ class WP_Admin_Bar {
}
$defaults = array(
'id' => false,
'title' => false,
'parent' => false,
'href' => false,
'meta' => array(),
'id' => false,
'title' => false,
'parent' => false,
'href' => false,
'secondary' => false,
'meta' => array(),
);
// If the node already exists, keep any data that isn't provided.
@ -92,6 +99,10 @@ class WP_Admin_Bar {
$defaults = (array) $this->nodes[ $args['id'] ];
$args = wp_parse_args( $args, $defaults );
$args['children'] = (object) array(
'primary' => array(),
'secondary' => array(),
);
$this->nodes[ $args['id'] ] = (object) $args;
}
@ -106,19 +117,20 @@ class WP_Admin_Bar {
// Handle root menu items
if ( empty( $node->parent ) ) {
$this->root[] = $node;
continue;
}
$parent = $this->root;
// If the parent node isn't registered, ignore the node.
if ( ! isset( $this->nodes[ $node->parent ] ) )
} elseif ( ! isset( $this->nodes[ $node->parent ] ) ) {
continue;
$parent = $this->nodes[ $node->parent ];
if ( ! isset( $parent->children ) )
$parent->children = array();
} else {
$parent = $this->nodes[ $node->parent ];
}
$parent->children[] = $node;
if ( $node->secondary )
$parent->children->secondary[] = $node;
else
$parent->children->primary[] = $node;
}
?>
@ -126,10 +138,19 @@ class WP_Admin_Bar {
<div class="quicklinks">
<ul class="ab-top-menu"><?php
foreach ( $this->root as $node ) {
foreach ( $this->root->children->primary as $node ) {
$this->recursive_render( $node );
}
if ( ! empty( $this->root->children->secondary ) ):
?><ul class="top-secondary"><?php
foreach ( $this->root->children->secondary as $node ) {
$this->recursive_render( $node );
}
?></ul><?php
endif;
?></ul>
</div>
</div>
@ -138,7 +159,7 @@ class WP_Admin_Bar {
}
function recursive_render( $node ) {
$is_parent = ! empty( $node->children );
$is_parent = ! empty( $node->children->primary );
$menuclass = $is_parent ? 'menupop' : '';
if ( ! empty( $node->meta['class'] ) )
@ -173,16 +194,22 @@ class WP_Admin_Bar {
?></a>
<?php if ( $is_parent ) : ?>
<ul><?php
// Render children.
foreach ( $node->children as $child_node ) {
<?php
if ( $is_parent ) :
?><ul><?php
foreach ( $node->children->primary as $child_node ) {
$this->recursive_render( $child_node );
}
?></ul>
<?php endif;
if ( ! empty( $node->children->secondary ) ):
?><ul class="sub-secondary"><?php
foreach ( $node->children->secondary as $child_node ) {
$this->recursive_render( $child_node );
}
?></ul><?php
endif;
?></ul><?php
endif;
if ( ! empty( $node->meta['html'] ) )
echo $node->meta['html'];

File diff suppressed because one or more lines are too long

View File

@ -78,12 +78,13 @@
border-right: 1px solid #333;
}
#wpadminbar .quicklinks > ul > li.opposite {
#wpadminbar .quicklinks .top-secondary > li {
border-left: 1px solid #333;
border-right: 0;
float: right;
}
#wpadminbar .quicklinks > ul > li.opposite > a {
#wpadminbar .quicklinks .top-secondary > li > a {
border-left: 1px solid #555;
border-right: 0;
}
@ -117,7 +118,7 @@
border-color: #dfdfdf;
}
#wpadminbar .quicklinks .opposite.menupop ul {
#wpadminbar .quicklinks .top-secondary .menupop ul {
right: 0;
margin: 0 -1px 0 0;
}
@ -166,8 +167,8 @@
border-width: 1px;
}
#wpadminbar .quicklinks .opposite.menupop li:hover > ul,
#wpadminbar .quicklinks .opposite.menupop li.hover > ul {
#wpadminbar .quicklinks .top-secondary .menupop li:hover > ul,
#wpadminbar .quicklinks .top-secondary .menupop li.hover > ul {
margin-left: 0;
left: inherit;
right: 100%;
@ -232,37 +233,30 @@
padding: 0 1.5em 0 0;
}
#wpadminbar .opposite.menupop li a > span {
#wpadminbar .top-secondary .menupop li a > span {
background-position: -28px -31px;
padding: 0 0 0 1.5em;
}
#wpadminbar .quicklinks .menupop .secondary {
background: #eee;
margin: 6px 0 -6px;
border-top: 1px solid #dfdfdf;
}
#wpadminbar .quicklinks .menupop .secondary > a {
display: none;
}
#wpadminbar .quicklinks .menupop li.secondary > ul,
#wpadminbar .quicklinks .opposite.menupop li.secondary > ul {
#wpadminbar .quicklinks .menupop ul.sub-secondary {
display: block;
position: relative;
right: auto;
margin: 0;
border: 0;
background: #eee;
margin: 6px 0 -6px;
border-top: 1px solid #dfdfdf;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
#wpadminbar .quicklinks .menupop li.secondary > ul > li:hover,
#wpadminbar .quicklinks .menupop li.secondary > ul > li.hover,
#wpadminbar .quicklinks .menupop li.secondary > ul > li a:focus {
#wpadminbar .quicklinks .menupop .sub-secondary > li:hover,
#wpadminbar .quicklinks .menupop .sub-secondary > li.hover,
#wpadminbar .quicklinks .menupop .sub-secondary > li a:focus {
background: #dfdfdf;
}
@ -283,7 +277,7 @@
color: #000;
}
#wpadminbar li.opposite {
#wpadminbar .top-secondary {
float: right;
}

View File

@ -452,7 +452,7 @@ function wp_default_styles( &$styles ) {
$styles->add( 'farbtastic', '/wp-admin/css/farbtastic.css', array(), '1.3u1' );
$styles->add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.css', array(), '0.9.8' );
$styles->add( 'imgareaselect', '/wp-includes/js/imgareaselect/imgareaselect.css', array(), '0.9.1' );
$styles->add( 'admin-bar', "/wp-includes/css/admin-bar$suffix.css", array(), '20111108a' );
$styles->add( 'admin-bar', "/wp-includes/css/admin-bar$suffix.css", array(), '20111109' );
$styles->add( 'wp-jquery-ui-dialog', "/wp-includes/css/jquery-ui-dialog$suffix.css", array(), '20111107' );
$styles->add( 'editor-buttons', "/wp-includes/css/editor-buttons$suffix.css", array(), '20111107' );
$styles->add( 'wp-pointer', "/wp-includes/css/wp-pointer$suffix.css", array(), '20111017' );