WordPress.org

Make WordPress Core

Ticket #19136: groups.diff

File groups.diff, 12.4 KB (added by koopersmith, 4 years ago)
  • wp-includes/admin-bar.php

     
    9090 
    9191        // Add WordPress.org link 
    9292        $wp_admin_bar->add_menu( array( 
    93                 'parent'    => 'wp-logo', 
    94                 'secondary' => true, 
     93                'parent'    => 'wp-logo-external', 
    9594                'id'        => 'wporg', 
    9695                'title'     => __('WordPress.org'), 
    9796                'href'      => __('http://wordpress.org'), 
     
    9998 
    10099        // Add codex link 
    101100        $wp_admin_bar->add_menu( array( 
    102                 'parent'    => 'wp-logo', 
    103                 'secondary' => true, 
     101                'parent'    => 'wp-logo-external', 
    104102                'id'        => 'documentation', 
    105103                'title'     => __('Documentation'), 
    106104                'href'      => __('http://codex.wordpress.org'), 
     
    108106 
    109107        // Add forums link 
    110108        $wp_admin_bar->add_menu( array( 
    111                 'parent'    => 'wp-logo', 
    112                 'secondary' => true, 
     109                'parent'    => 'wp-logo-external', 
    113110                'id'        => 'support-forums', 
    114111                'title'     => __('Support Forums'), 
    115112                'href'      => __('http://wordpress.org/support/'), 
     
    117114 
    118115        // Add feedback link 
    119116        $wp_admin_bar->add_menu( array( 
    120                 'parent'    => 'wp-logo', 
    121                 'secondary' => true, 
     117                'parent'    => 'wp-logo-external', 
    122118                'id'        => 'feedback', 
    123119                'title'     => __('Feedback'), 
    124120                'href'      => __('http://wordpress.org/support/forum/requests-and-feedback'), 
     
    143139 
    144140                $wp_admin_bar->add_menu( array( 
    145141                        'id'        => 'my-account', 
    146                         'secondary' => true, 
     142                        'parent'    => 'top-secondary', 
    147143                        'title'     => $howdy . $avatar, 
    148144                        'href'      => $profile_url, 
    149145                        'meta'      => array( 
     
    165161                        'title'  => $user_info, 
    166162                        'href'   => $profile_url, 
    167163                        'meta'   => array( 
    168                                 'class' => 'user-info user-info-item', 
    169164                                'tabindex' => -1 
    170165                        ), 
    171166                ) ); 
     
    174169                        'id'     => 'edit-profile', 
    175170                        'title'  => __( 'Edit My Profile' ), 
    176171                        'href' => $profile_url, 
    177                         'meta'   => array( 
    178                                 'class' => 'user-info-item', 
    179                         ), 
    180172                ) ); 
    181173                $wp_admin_bar->add_menu( array( 
    182174                        'parent' => 'my-account', 
    183175                        'id'     => 'logout', 
    184176                        'title'  => __( 'Log Out' ), 
    185177                        'href'   => wp_logout_url(), 
    186                         'meta'   => array( 
    187                                 'class' => 'user-info-item', 
    188                         ), 
    189178                ) ); 
    190179        } 
    191180} 
     
    278267        if ( is_super_admin() ) { 
    279268                $wp_admin_bar->add_menu( array( 
    280269                        'parent' => 'my-sites', 
     270                        'id'     => 'my-sites-super-admin', 
     271                        'group'  => true, 
     272                ) ); 
     273 
     274                $wp_admin_bar->add_menu( array( 
     275                        'parent' => 'my-sites-super-admin', 
    281276                        'id'     => 'network-admin', 
    282277                        'title'  => __('Network Admin'), 
    283278                        'href'   => network_admin_url(), 
     
    309304                ) ); 
    310305        } 
    311306 
    312         // Add blog links 
     307        // Add site links 
     308        $wp_admin_bar->add_menu( array( 
     309                'parent' => 'my-sites', 
     310                'id'     => 'my-sites-list', 
     311                'group'  => true, 
     312                'meta'   => array( 
     313                        'class' => is_super_admin() ? 'ab-sub-secondary' : '', 
     314                ), 
     315        ) ); 
     316 
    313317        $blue_wp_logo_url = includes_url('images/wpmini-blue.png'); 
    314318 
    315319        foreach ( (array) $wp_admin_bar->user->blogs as $blog ) { 
     
    321325                $menu_id  = 'blog-' . $blog->userblog_id; 
    322326 
    323327                $wp_admin_bar->add_menu( array( 
    324                         'parent'    => 'my-sites', 
    325                         'secondary' => is_super_admin(), 
     328                        'parent'    => 'my-sites-list', 
    326329                        'id'        => $menu_id, 
    327330                        'title'     => $blavatar . $blogname, 
    328331                        'href'      => get_admin_url( $blog->userblog_id ), 
     
    599602} 
    600603 
    601604/** 
     605 * Add secondary menus. 
     606 * 
     607 * @since 3.3.0 
     608 */ 
     609function wp_admin_bar_add_secondary_groups( $wp_admin_bar ) { 
     610        $wp_admin_bar->add_menu( array( 
     611                'id'     => 'top-secondary', 
     612                'group'  => true, 
     613                'meta'   => array( 
     614                        'class' => 'ab-top-secondary', 
     615                ), 
     616        ) ); 
     617 
     618        $wp_admin_bar->add_menu( array( 
     619                'parent' => 'wp-logo', 
     620                'id'     => 'wp-logo-external', 
     621                'group'  => true, 
     622                'meta'   => array( 
     623                        'class' => 'ab-sub-secondary', 
     624                ), 
     625        ) ); 
     626 
     627        // $wp_admin_bar->add_menu( array( 
     628        //      'parent' => '', 
     629        //      'id'     => '-secondary', 
     630        //      'group'  => true, 
     631        //      'meta'   => array( 
     632        //              'class' => 'ab-sub-secondary', 
     633        //      ), 
     634        // ) ); 
     635} 
     636 
     637/** 
    602638 * Style and scripts for the admin bar. 
    603639 * 
    604640 * @since 3.1.0 
  • wp-includes/css/admin-bar.dev.css

     
    135135        margin: 0 -1px 0 0; 
    136136} 
    137137 
     138#wpadminbar .ab-sub-wrapper > .ab-submenu:first-child { 
     139        border-top: none; 
     140} 
     141 
    138142#wpadminbar .ab-submenu { 
    139143        padding: 6px 0; 
     144        border-top: 1px solid #dfdfdf; 
    140145} 
    141146 
    142147#wpadminbar .selected .shortlink-input { 
     
    247252        position: relative; 
    248253        right: auto; 
    249254        margin: 0; 
    250         border: 0; 
    251255 
    252256        background: #eee; 
    253         border-top: 1px solid #dfdfdf; 
    254257 
    255258        -moz-box-shadow: none; 
    256259        -webkit-box-shadow: none; 
     
    310313        min-width: 270px; 
    311314} 
    312315 
    313 #wpadminbar #wp-admin-bar-my-account .user-info-item { 
     316#wpadminbar #wp-admin-bar-my-account-default li { 
    314317        margin-left: 16px; 
    315318        margin-right: 16px; 
    316319} 
    317320 
    318 #wpadminbar #wp-admin-bar-my-account.with-avatar .user-info-item { 
     321#wpadminbar #wp-admin-bar-my-account.with-avatar #wp-admin-bar-my-account-default li { 
    319322        margin-left: 88px; 
    320323} 
    321324 
    322 #wpadminbar #wp-admin-bar-my-account .user-info-item > a { 
     325#wpadminbar #wp-admin-bar-my-account-default li > a { 
    323326        padding-left: 8px; 
    324327} 
    325328 
    326 #wpadminbar #wp-admin-bar-my-account .user-info { 
     329#wpadminbar #wp-admin-bar-user-info { 
    327330        margin-top: 6px; 
    328331        margin-bottom: 15px; 
    329332        height: auto; 
    330333        background: none; 
    331334} 
    332335 
    333 #wp-admin-bar-my-account .user-info .avatar { 
     336#wp-admin-bar-user-info .avatar { 
    334337        position: absolute; 
    335338        left: -72px; 
    336339        top: 4px; 
    337340} 
    338341 
    339 #wpadminbar #wp-admin-bar-my-account .user-info a { 
     342#wpadminbar #wp-admin-bar-user-info a { 
    340343        height: auto; 
    341344} 
    342345 
    343 #wpadminbar #wp-admin-bar-my-account .user-info span { 
     346#wpadminbar #wp-admin-bar-user-info span { 
    344347        background: none; 
    345348        padding: 0; 
    346349        height: 18px; 
    347350} 
    348351 
    349 #wpadminbar #wp-admin-bar-my-account .user-info .display-name, 
    350 #wpadminbar #wp-admin-bar-my-account .user-info .username { 
     352#wpadminbar #wp-admin-bar-user-info .display-name, 
     353#wpadminbar #wp-admin-bar-user-info .username { 
    351354        text-shadow: none; 
    352355        display: block; 
    353356} 
    354 #wpadminbar #wp-admin-bar-my-account .user-info .display-name { 
     357#wpadminbar #wp-admin-bar-user-info .display-name { 
    355358        color: #333; 
    356359} 
    357360 
    358 #wpadminbar #wp-admin-bar-my-account .user-info .username { 
     361#wpadminbar #wp-admin-bar-user-info .username { 
    359362        color: #999; 
    360363        font-size: 11px; 
    361364} 
  • wp-includes/class-wp-admin-bar.php

     
    1212                        $this->proto = 'https://'; 
    1313 
    1414                $this->user = new stdClass; 
    15                 $this->root = new stdClass; 
    16                 $this->root->children  = (object) array( 
    17                         'primary'   => array(), 
    18                         'secondary' => array(), 
     15                $this->root = (object) array( 
     16                        'id'       => 'root', 
     17                        'group'    => false, 
     18                        'children' => array(), 
    1919                ); 
    2020 
    2121                if ( is_user_logged_in() ) { 
     
    7777                        $args = array_merge( array( 'parent' => func_get_arg(0) ), func_get_arg(2) ); 
    7878 
    7979                // Ensure we have a valid title. 
    80                 if ( empty( $args['title'] ) ) 
    81                         return false; 
     80                if ( empty( $args['id'] ) ) { 
     81                        if ( empty( $args['title'] ) ) 
     82                                return; 
    8283 
    83                 if ( empty( $args['id'] ) ) { 
    8484                        _doing_it_wrong( __METHOD__, __( 'The menu ID should not be empty.' ), '3.3' ); 
     85                        // Deprecated: Generate an ID from the title. 
    8586                        $args['id'] = esc_attr( sanitize_title( trim( $args['title'] ) ) ); 
    8687                } 
    8788 
    8889                $defaults = array( 
    89                         'id'        => false, 
    90                         'title'     => false, 
    91                         'parent'    => false, 
    92                         'href'      => false, 
    93                         'secondary' => false, 
    94                         'meta'      => array(), 
     90                        'id'     => false, 
     91                        'title'  => false, 
     92                        'parent' => false, 
     93                        'href'   => false, 
     94                        'group' => false, 
     95                        'meta'   => array(), 
    9596                ); 
    9697 
    9798                // If the node already exists, keep any data that isn't provided. 
     
    99100                        $defaults = (array) $this->nodes[ $args['id'] ]; 
    100101 
    101102                $args = wp_parse_args( $args, $defaults ); 
    102                 $args['children'] = (object) array( 
    103                         'primary'   => array(), 
    104                         'secondary' => array(), 
    105                 ); 
     103                $args['children'] = array(); 
    106104 
    107105                $this->nodes[ $args['id'] ] = (object) $args; 
    108106        } 
     
    136134                                $parent = $this->nodes[ $node->parent ]; 
    137135                        } 
    138136 
    139                         if ( $node->secondary ) 
    140                                 $parent->children->secondary[] = $node; 
    141                         else 
    142                                 $parent->children->primary[] = $node; 
     137 
     138                        // Ensure that our tree is of the form "item -> group -> item -> group -> ..." 
     139                        if ( ! $parent->group && ! $node->group ) { // Both are items. 
     140                                // The default group is added here to allow groups that are 
     141                                // added before standard menu items to render first. 
     142                                if ( ! isset( $parent->children['default'] ) ) { 
     143                                        $parent->children['default'] = (object) array( 
     144                                                'id'       => "{$parent->id}-default", 
     145                                                'parent'   => $parent->id, 
     146                                                'group'    => true, 
     147                                                'children' => array(), 
     148                                        ); 
     149                                } 
     150                                $parent = $parent->children['default']; 
     151                        } 
     152 
     153                        // Update the parent ID (it might have changed). 
     154                        $node->parent = $parent->id; 
     155 
     156                        // Add the node to the tree. 
     157                        $parent->children[] = $node; 
    143158                } 
    144159 
    145160                // Add browser classes. 
     
    159174                ?> 
    160175                <div id="wpadminbar" class="<?php echo $class; ?>"> 
    161176                        <div class="quicklinks"> 
    162                                 <ul class="ab-top-menu"><?php 
    163  
    164                                         foreach ( $this->root->children->primary as $node ) { 
    165                                                 $this->recursive_render( $node ); 
    166                                         } 
    167  
    168                                 ?></ul> 
    169                                 <ul class="ab-top-menu ab-top-secondary"><?php 
    170  
    171                                         foreach ( $this->root->children->secondary as $node ) { 
    172                                                 $this->recursive_render( $node ); 
    173                                         } 
    174  
    175                                 ?></ul> 
     177                                <?php foreach ( $this->root->children as $group ) { 
     178                                        $this->render_group( $group, 'ab-top-menu' ); 
     179                                } ?> 
    176180                        </div> 
    177181                </div> 
    178182 
    179183                <?php 
    180184        } 
    181185 
    182         function recursive_render( $node ) { 
    183                 if ( ! $node->children->primary && $node->children->secondary ) { 
    184                         $node->children->primary = $node->children->secondary; 
    185                         $node->children->secondary = array(); 
     186        private function render_group( $node, $class = '' ) { 
     187                if ( ! $node->group ) 
     188                        return; 
     189 
     190                // Check for groups within groups. 
     191                $groups = array(); 
     192                foreach ( $node->children as $child ) { 
     193                        if ( $child->group ) { 
     194                                $groups[] = $child; 
     195                        } else { 
     196                                if ( ! isset( $default ) ) { 
     197                                        // Create a default proxy item to be used in the case of nested groups. 
     198                                        $default  = (object) wp_parse_args( array( 'children' => array() ), (array) $node ); 
     199                                        $groups[] = $default; 
     200                                } 
     201                                $default->children[] = $child; 
     202                        } 
    186203                } 
    187204 
    188                 $is_parent = (bool) $node->children->primary; 
     205                // If we don't have any subgroups, render the group. 
     206                if ( count( $groups ) === 1 ): 
     207 
     208                        if ( ! empty( $node->meta['class'] ) ) 
     209                                $class .= ' ' . $node->meta['class']; 
     210 
     211                        ?><ul id="<?php echo esc_attr( "wp-admin-bar-{$node->id}" ); ?>" class="<?php echo esc_attr( $class ); ?>"><?php 
     212                                foreach ( $node->children as $item ) { 
     213                                        $this->render_item( $item ); 
     214                                } 
     215                        ?></ul><?php 
     216 
     217                // Wrap the subgroups in a div and render each individual subgroup. 
     218                else: 
     219                        ?><div id="<?php echo esc_attr( "wp-admin-bar-{$node->id}-container" ); ?>" class="ab-group-container"><?php 
     220                                foreach ( $groups as $group ) { 
     221                                        $this->render_group( $group, $class ); 
     222                                } 
     223                        ?></div><?php 
     224                endif; 
     225        } 
     226 
     227        private function render_item( $node ) { 
     228                if ( $node->group ) 
     229                        return; 
     230 
     231                $is_parent = (bool) $node->children; 
    189232                $has_link  = (bool) $node->href; 
    190233 
    191234                $menuclass = $is_parent ? 'menupop' : ''; 
     
    222265 
    223266                        if ( $is_parent ) : 
    224267                                ?><div class="ab-sub-wrapper"><?php 
    225  
    226                                         // Render primary submenu 
    227                                         ?><ul class="ab-submenu"><?php 
    228                                         foreach ( $node->children->primary as $child_node ) { 
    229                                                 $this->recursive_render( $child_node ); 
     268                                        foreach ( $node->children as $group ) { 
     269                                                $this->render_group( $group, 'ab-submenu' ); 
    230270                                        } 
    231                                         ?></ul><?php 
    232  
    233                                         // Render secondary submenu 
    234                                         if ( ! empty( $node->children->secondary ) ): 
    235                                                 ?><ul class="ab-submenu ab-sub-secondary"><?php 
    236                                                 foreach ( $node->children->secondary as $child_node ) { 
    237                                                         $this->recursive_render( $child_node ); 
    238                                                 } 
    239                                                 ?></ul><?php 
    240                                         endif; 
    241  
    242271                                ?></div><?php 
    243272                        endif; 
    244273 
     
    247276 
    248277                        ?> 
    249278                </li><?php 
     279        } 
    250280 
     281        function recursive_render( $node ) { 
     282                $this->render_item( $node ); 
    251283        } 
    252284 
    253285        function add_menus() { 
     
    271303                if ( ! is_admin() ) 
    272304                        add_action( 'admin_bar_menu', 'wp_admin_bar_search_menu', 100 ); 
    273305 
     306                add_action( 'admin_bar_menu', 'wp_admin_bar_add_secondary_groups', 200 ); 
     307 
    274308                do_action( 'add_admin_bar_menus' ); 
    275309        } 
    276310}