Making WordPress.org

Changeset 12050


Ignore:
Timestamp:
09/05/2022 05:14:31 AM (2 years ago)
Author:
dufresnesteven
Message:

wporg-developer: Sync with https://github.com/WordPress/wporg-developer/commit/790d402933d2725374de0d19e6bf6a576c8b15d2

Location:
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer
Files:
10 added
31 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/content-reference.php

    r4902 r12050  
    2424        ) );
    2525
    26         $content = '<div class="content-toc">' . $TOC->add_toc( $content ) . '</div>';
     26        $content = $TOC->add_toc( $content );
    2727
    2828    endif;
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/functions.php

    r11903 r12050  
    148148add_action( 'widgets_init', __NAMESPACE__ . '\\widgets_init' );
    149149
     150/**
     151 * Set up the theme.
     152 */
    150153function init() {
    151154
     
    165168
    166169    // Modify default breadcrumbs.
    167     add_filter( 'breadcrumb_trail_items',  __NAMESPACE__ . '\\breadcrumb_trail_items_for_hooks', 10, 2 );
    168     add_filter( 'breadcrumb_trail_items',  __NAMESPACE__ . '\\breadcrumb_trail_items_for_handbook_root', 10, 2 );
    169 
    170     add_filter( 'syntaxhighlighter_htmlresult', __NAMESPACE__ . '\\syntaxhighlighter_htmlresult' );
     170    add_filter( 'breadcrumb_trail_items', __NAMESPACE__ . '\\breadcrumb_trail_items_for_hooks', 10, 2 );
     171    add_filter( 'breadcrumb_trail_items', __NAMESPACE__ . '\\breadcrumb_trail_items_for_handbook_root', 10, 2 );
     172
     173    add_filter( 'mkaz_code_syntax_force_loading', '__return_true' );
     174    add_filter( 'mkaz_prism_css_path', __NAMESPACE__ . '\\update_prism_css_path' );
    171175}
    172176
     
    178182 * be shown.
    179183 *
    180  * @param  array $items The breadcrumb trail items
    181  * @param  array $args  Original args
     184 * @param  array $items The breadcrumb trail items.
     185 * @param  array $args  Original args.
    182186 * @return array
    183187 */
     
    186190
    187191    // Bail early when not the single archive for hook
    188     if ( ! is_singular() || $post_type !== get_post_type() || ! isset( $items[4] ) ) {
     192    if ( ! is_singular() || get_post_type() !== $post_type || ! isset( $items[4] ) ) {
    189193        return $items;
    190194    }
     
    209213 * item is already the unlinked handbook name, which is sufficient.
    210214 *
    211  * @param  array $items The breadcrumb trail items
    212  * @param  array $args  Original args
     215 * @param  array $items The breadcrumb trail items.
     216 * @param  array $args  Original args.
    213217 * @return array
    214218 */
     
    226230
    227231/**
    228  * widgets_init function.
     232 * Register widget areas.
    229233 *
    230234 * @access public
     
    232236 */
    233237function widgets_init() {
    234     register_sidebar( array(
    235         'name'          => __( 'Sidebar', 'wporg' ),
    236         'id'            => 'sidebar-1',
    237         'before_widget' => '<aside id="%1$s" class="box gray widget %2$s">',
    238         'after_widget'  => '</div></aside>',
    239         'before_title'  => '<h1 class="widget-title">',
    240         'after_title'   => '</h1><div class="widget-content">',
    241     ) );
    242 
    243     register_sidebar( array(
    244         'name'          => __( 'Landing Page Footer - Left', 'wporg' ),
    245         'id'            => 'landing-footer-1',
    246         'description'   => __( 'Appears in footer of the primary landing page', 'wporg' ),
    247         'before_widget' => '<div id="%1$s" class="widget box %2$s">',
    248         'after_widget'  => '</div>',
    249         'before_title'  => '<h4 class="widget-title">',
    250         'after_title'   => '</h4>',
    251     ) );
    252 
    253     register_sidebar( array(
    254         'name'          => __( 'Landing Page Footer - Center', 'wporg' ),
    255         'id'            => 'landing-footer-2',
    256         'description'   => __( 'Appears in footer of the primary landing page', 'wporg' ),
    257         'before_widget' => '<div id="%1$s" class="widget box %2$s">',
    258         'after_widget'  => '</div>',
    259         'before_title'  => '<h4 class="widget-title">',
    260         'after_title'   => '</h4>',
    261     ) );
    262 
    263     register_sidebar( array(
    264         'name'          => __( 'Landing Page Footer - Right', 'wporg' ),
    265         'id'            => 'landing-footer-3',
    266         'description'   => __( 'Appears in footer of the primary landing page', 'wporg' ),
    267         'before_widget' => '<div id="%1$s" class="widget box %2$s">',
    268         'after_widget'  => '</div>',
    269         'before_title'  => '<h4 class="widget-title">',
    270         'after_title'   => '</h4>',
    271     ) );
    272 }
    273 
    274 /**
     238    register_sidebar(
     239        array(
     240            'name'          => __( 'Sidebar', 'wporg' ),
     241            'id'            => 'sidebar-1',
     242            'before_widget' => '<aside id="%1$s" class="box gray widget %2$s">',
     243            'after_widget'  => '</div></aside>',
     244            'before_title'  => '<h1 class="widget-title">',
     245            'after_title'   => '</h1><div class="widget-content">',
     246        )
     247    );
     248
     249    register_sidebar(
     250        array(
     251            'name'          => __( 'Landing Page Footer - Left', 'wporg' ),
     252            'id'            => 'landing-footer-1',
     253            'description'   => __( 'Appears in footer of the primary landing page', 'wporg' ),
     254            'before_widget' => '<div id="%1$s" class="widget box %2$s">',
     255            'after_widget'  => '</div>',
     256            'before_title'  => '<h4 class="widget-title">',
     257            'after_title'   => '</h4>',
     258        )
     259    );
     260
     261    register_sidebar(
     262        array(
     263            'name'          => __( 'Landing Page Footer - Center', 'wporg' ),
     264            'id'            => 'landing-footer-2',
     265            'description'   => __( 'Appears in footer of the primary landing page', 'wporg' ),
     266            'before_widget' => '<div id="%1$s" class="widget box %2$s">',
     267            'after_widget'  => '</div>',
     268            'before_title'  => '<h4 class="widget-title">',
     269            'after_title'   => '</h4>',
     270        )
     271    );
     272
     273    register_sidebar(
     274        array(
     275            'name'          => __( 'Landing Page Footer - Right', 'wporg' ),
     276            'id'            => 'landing-footer-3',
     277            'description'   => __( 'Appears in footer of the primary landing page', 'wporg' ),
     278            'before_widget' => '<div id="%1$s" class="widget box %2$s">',
     279            'after_widget'  => '</div>',
     280            'before_title'  => '<h4 class="widget-title">',
     281            'after_title'   => '</h4>',
     282        )
     283    );
     284}
     285
     286/**
     287 * Modify the default query.
     288 *
    275289 * @param \WP_Query $query
    276290 */
     
    289303}
    290304
     305/**
     306 * Regiser navigation menu area.
     307 */
    291308function register_nav_menus() {
    292 
    293     \register_nav_menus( array(
    294         'devhub-menu' => __( 'Developer Resources Menu', 'wporg' ),
    295         'devhub-cli-menu' => __( 'WP-CLI Commands Menu', 'wporg' ),
    296         'reference-home-api' => __( 'Reference API Menu', 'wporg' ),
    297     ) );
     309    \register_nav_menus(
     310        array(
     311            'devhub-menu' => __( 'Developer Resources Menu', 'wporg' ),
     312            'devhub-cli-menu' => __( 'WP-CLI Commands Menu', 'wporg' ),
     313            'reference-home-api' => __( 'Reference API Menu', 'wporg' ),
     314        )
     315    );
    298316}
    299317
     
    319337}
    320338
     339/**
     340 * Filer the permalink for a taxonomy.
     341 */
    321342function taxonomy_permalink( $link, $term, $taxonomy ) {
    322343    global $wp_rewrite;
     
    326347    }
    327348
    328     if ( $taxonomy === 'wp-parser-source-file' ) {
     349    if ( 'wp-parser-source-file' === $taxonomy ) {
    329350        $slug = $term->slug;
    330351        if ( substr( $slug, -4 ) === '-php' ) {
     
    333354        }
    334355        $link = home_url( user_trailingslashit( "reference/files/$slug" ) );
    335     } elseif ( $taxonomy === 'wp-parser-since' ) {
     356    } elseif ( 'wp-parser-since' === $taxonomy ) {
    336357        $link = str_replace( $term->slug, str_replace( '-', '.', $term->slug ), $link );
    337358    }
     359
    338360    return $link;
    339361}
     
    354376}
    355377
     378/**
     379 * Register and enqueue the theme assets.
     380 */
    356381function theme_scripts_styles() {
    357382    wp_enqueue_style( 'dashicons' );
     383    // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
    358384    wp_enqueue_style( 'open-sans', '//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,400,300,600' );
    359     wp_enqueue_style( 'wporg-developer-style', get_stylesheet_uri(), array(), '4' );
     385    wp_enqueue_style( 'wporg-developer-style', get_stylesheet_uri(), array(), filemtime( __DIR__ . '/style.css' ) );
    360386    wp_enqueue_style(
    361387        'wp-dev-sass-compiled',
     
    364390        filemtime( __DIR__ . '/stylesheets/main.css' )
    365391    );
    366     wp_enqueue_script( 'wporg-developer-navigation', get_template_directory_uri() . '/js/navigation.js', array(), '20181209', true );
    367     wp_enqueue_script( 'wporg-developer-skip-link-focus-fix', get_template_directory_uri() . '/js/skip-link-focus-fix.js', array(), '20130115', true );
    368     wp_enqueue_script( 'wporg-developer-search', get_template_directory_uri() . '/js/search.js', array(), '20150430', true );
    369     wp_enqueue_script( 'wporg-developer-chapters', get_template_directory_uri() . '/js/chapters.js', array( 'jquery' ), '20190603' );
    370     wp_enqueue_script( 'wporg-developer-menu', get_template_directory_uri() . '/js/menu.js', array( 'jquery' ), '20180201', true );
     392    wp_enqueue_script( 'wporg-developer-navigation', get_stylesheet_directory_uri() . '/js/navigation.js', array(), filemtime( __DIR__ . '/js/navigation.js' ), true );
     393    wp_enqueue_script( 'wporg-developer-chapters', get_stylesheet_directory_uri() . '/js/chapters.js', array( 'jquery' ), filemtime( __DIR__ . '/js/chapters.js' ) );
     394    wp_enqueue_script( 'wporg-developer-menu', get_stylesheet_directory_uri() . '/js/menu.js', array( 'jquery' ), filemtime( __DIR__ . '/js/menu.js' ), true );
    371395}
    372396
     
    385409
    386410/**
    387  * If a syntax highlighted code block exceeds a given number of lines, wrap the
    388  * markup with other markup to trigger the code expansion/collapse JS handling
    389  * already implemented for the code reference.
    390  *
    391  * @param string  $text The pending result of the syntax highlighting.
     411 * Customize the syntax highlighter style.
     412 * See https://github.com/PrismJS/prism-themes.
     413 *
     414 * @param string $path Path to the file to override, relative to the theme.
    392415 * @return string
    393416 */
    394 function syntaxhighlighter_htmlresult( $text ) {
    395 
    396     // is_admin() is true in front end AJAX requests.
    397     if ( is_admin() && !( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
    398         return $text;
    399     }
    400 
    401     $new_text      = '';
    402     // Collapse is handled for >10 lines. But just go ahead and show the full
    403     // code if that is just barely being exceeded (no one wants to expand to
    404     // see one or two more lines).
    405     $lines_to_show = 12;
    406     $do_collapse   = ( substr_count( $text, "\n" ) - 1 ) > $lines_to_show;
    407 
    408     if ( $do_collapse )  {
    409         $new_text .= '<section class="source-content">';
    410         $new_text .= '<div class="source-code-container">';
    411     }
    412 
    413     $new_text .= $text;
    414 
    415     if ( $do_collapse ) {
    416         $new_text .= '</div>';
    417         $new_text .= '<p class="source-code-links"><span>';
    418         $new_text .= '<a href="#" class="show-complete-source">' . __( 'Expand full source code', 'wporg' ) . '</a>';
    419         $new_text .= '<a href="#" class="less-complete-source">' . __( 'Collapse full source code', 'wporg' ) . '</a>';
    420         $new_text .= '</span></p>';
    421         $new_text .= '</section>';
    422     }
    423 
    424     return $new_text;
    425 }
     417function update_prism_css_path( $path ) {
     418    return '/stylesheets/prism.css';
     419}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/header.php

    r11496 r12050  
    88 */
    99
     10\WordPressdotorg\skip_to( '#content' );
     11
    1012echo do_blocks( '<!-- wp:wporg/global-header /-->' );
     13
     14$show_search = DevHub\should_show_search_bar();
     15
     16// When to show the masthead
     17$show_masthead = is_front_page() || is_page( 'reference' );
    1118
    1219?>
    1320
    14 <header id="masthead" class="site-header<?php if ( is_front_page() ) { echo ' home'; } ?>" role="banner">
     21<header id="masthead" class="site-header<?php if ( $show_masthead ) { echo ' home'; } ?>" role="banner">
    1522    <?php if ( function_exists( 'wporg_is_handbook' ) && wporg_is_handbook() && ! is_search() ) : ?>
    1623        <a href="#" id="secondary-toggle" onclick="return false;"><strong><?php _e( 'Menu', 'wporg' ); ?></strong></a>
    1724    <?php endif; ?>
    18     <div class="site-branding">
     25    <div class="site-branding<?php echo ! $show_masthead && $show_search ? ' has-actions': '' ?>">
     26
    1927        <h1 class="site-title">
    2028            <a href="<?php echo esc_url( DevHub\get_site_section_url() ); ?>" rel="home"><?php echo DevHub\get_site_section_title(); ?></a>
     
    2533        <?php endif; ?>
    2634
    27         <nav id="site-navigation" class="main-navigation" role="navigation">
    28             <button class="menu-toggle dashicons dashicons-arrow-down-alt2" aria-controls="primary-menu" aria-expanded="false" aria-label="<?php esc_attr_e( 'Primary Menu', 'wporg' ); ?>"></button>
    29             <?php
    30             $active_menu = is_post_type_archive( 'command' ) || is_singular( 'command' ) ? 'devhub-cli-menu' : 'devhub-menu';
    31             wp_nav_menu( array(
    32                 'theme_location'  => $active_menu,
    33                 'container_class' => 'menu-container',
    34                 'container_id'    => 'primary-menu',
    35             ) ); ?>
    36         </nav>
     35        <div>
     36            <?php if ( $show_search ) : ?>
     37                <?php get_search_form(); ?>
     38            <?php endif; ?>
     39
     40            <?php if ( ! $show_masthead ) : ?>
     41            <nav id="site-navigation" class="main-navigation" role="navigation">
     42                <button class="menu-toggle dashicons dashicons-arrow-down-alt2" aria-controls="primary-menu" aria-expanded="false" aria-label="<?php esc_attr_e( 'Primary Menu', 'wporg' ); ?>"></button>
     43                <?php
     44                $active_menu = is_post_type_archive( 'command' ) || is_singular( 'command' ) ? 'devhub-cli-menu' : 'devhub-menu';
     45                wp_nav_menu( array(
     46                    'theme_location'  => $active_menu,
     47                    'container_class' => 'menu-container',
     48                    'container_id'    => 'primary-menu',
     49                ) ); ?>
     50            </nav>
     51            <?php endif; ?>
     52        </div>
    3753    </div>
    3854</header><!-- #masthead -->
    3955
    4056<div id="page" class="hfeed site devhub-wrap">
    41     <a href="#main" class="screen-reader-text"><?php _e( 'Skip to content', 'wporg' ); ?></a>
    42 
    4357    <?php do_action( 'before' ); ?>
    44     <?php
    45     if ( DevHub\should_show_search_bar() ) : ?>
    46         <div id="inner-search">
    47             <?php get_search_form(); ?>
    48             <div id="inner-search-icon-container">
    49                 <div id="inner-search-icon">
    50                     <div class="dashicons dashicons-search"><span class="screen-reader-text"><?php _e( 'Search', 'wporg' ); ?></span></div>
    51                 </div>
    52             </div>
    53         </div>
    54 
    55     <?php endif; ?>
    5658    <div id="content" class="site-content">
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/autocomplete.php

    r6301 r12050  
    4343        wp_enqueue_script( 'awesomplete' );
    4444
    45         wp_register_script( 'autocomplete', get_template_directory_uri() . '/js/autocomplete.js', array( 'awesomplete' ), '20160524', true );
     45        wp_register_script( 'autocomplete', get_stylesheet_directory_uri() . '/js/autocomplete.js', array( 'awesomplete' ), filemtime( dirname( __DIR__ ) . '/js/autocomplete.js' ), true );
    4646        wp_localize_script( 'autocomplete', 'autocomplete', array(
    4747                'ajaxurl' => admin_url( 'admin-ajax.php' ),
     
    100100            'search_orderby_title' => 1,
    101101            'order'                => 'ASC',
     102            '_autocomplete_search' => true,
    102103        );
    103104
    104105        $search = get_posts( $args );
    105106
    106         if ( !empty( $search ) ) {
    107             $titles = wp_list_pluck( $search, 'post_title' );
    108             $form_data['posts'] = array_values( array_unique( $titles ) );
     107        if ( ! empty( $search ) ) {
     108            $post_types_function_like = array( 'wp-parser-function', 'wp-parser-method' );
     109
     110            foreach ( $search as $post ) {
     111                $permalink = get_permalink( $post->ID );
     112                $title     = $post->post_title;
     113
     114                if ( in_array( $post->post_type, $post_types_function_like ) ) {
     115                    $title .= '()';
     116                }
     117
     118                if ( $post->post_type == 'wp-parser-class' ) {
     119                    $title =  'class ' . $title . ' {}';
     120                }
     121
     122                $form_data['posts'][ $title ] = $permalink;
     123            }
    109124        }
    110125
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/cli-commands.php

    r11949 r12050  
    102102        }
    103103
    104         // Determine importing user's ID. 
     104        // Determine importing user's ID.
    105105        $user = get_user_by( 'id', $user_id );
    106106        if ( ! $user ) {
     
    113113            'posts-to-posts' => 'posts-to-posts/posts-to-posts.php',
    114114        ];
    115 
    116         // Get the phpdoc-parser plugin if not installed.
    117         $all_plugins = get_plugins();
    118         if ( ! in_array( $plugins['phpdoc-parser'], array_keys( $all_plugins ) ) ) {
    119             WP_CLI::log( "Installing phpdoc-parser plugin..." );
    120             WP_CLI::runcommand( 'plugin install https://github.com/WordPress/phpdoc-parser/archive/master.zip' );
    121             touch( WP_PLUGIN_DIR . '/phpdoc-parser/.devhub-parser-installed' );
    122         }
    123 
    124         // Verify the phpdoc-parser plugin is available locally.
    125         wp_cache_set( 'plugins', [], 'plugins' ); // Reset cache of plugins.
    126         $all_plugins = get_plugins();
    127         if ( ! in_array( $plugins['phpdoc-parser'], array_keys( $all_plugins ) ) ) {
    128             WP_CLI::error( 'The PHPDoc-Parser plugin (from https://github.com/WordPress/phpdoc-parser) could not be automatically installed locally in ' . WP_PLUGIN_DIR . '/. Please do so manually.' );
    129         }
    130115
    131116        // Install phpdoc-parser plugin dependencies if not installed.
     
    189174
    190175        // 3. Run the parser.
     176        // If running locally, run a quick parse which skips DB replication-lag sleep()'s
     177        $quick = in_array( wp_get_environment_type(), array( 'local', 'development' ) ) ? '--quick' : '';
    191178        WP_CLI::log( 'Running the parser (this will take awhile)...' );
    192         WP_CLI::runcommand( "parser create {$path} --user={$user_id}" );
     179        WP_CLI::runcommand( "parser create {$path} --user={$user_id} {$quick}" );
    193180
    194181        // 4. Deactivate phpdoc-parser plugin.
     
    279266        }
    280267
    281         // Remove the phpdoc-parser plugin.
    282         // @todo Add argument to facilitate disabling this step, or do a git checkout and only delete if no local changes.
    283         $plugin = 'phpdoc-parser';
    284         $all_plugins = get_plugins();
    285         if ( in_array( $plugin . '/plugin.php', array_keys( $all_plugins ) ) ) {
    286             // Only delete the plugin if it was automatically installed via parse command.
    287             if ( file_exists( WP_PLUGIN_DIR . '/phpdoc-parser/.devhub-parser-installed' ) ) {
    288                 WP_CLI::log( "Deleting plugin {$plugin}..." );
    289                 WP_CLI::runcommand( "plugin delete {$plugin}" );
    290             } else {
    291                 WP_CLI::log( "Plugin {$plugin} present but was manually installed or looks to have customizations so it must be deleted manually, if so desired." );
    292             }
    293         } else {
    294             WP_CLI::log( "Plugin {$plugin} not present so it can't be deleted." );
    295         }
    296 
    297268        WP_CLI::success( 'Clean-up is complete.' );
    298269    }
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/formatting.php

    r10493 r12050  
    4040        add_filter( 'devhub-format-description', array( __CLASS__, 'fix_param_hash_formatting' ), 9 );
    4141        add_filter( 'devhub-format-description', array( __CLASS__, 'fix_param_description_html_as_code' ) );
     42        add_filter( 'devhub-format-description', array( __CLASS__, 'fix_param_description_quotes_to_code' ) );
    4243        add_filter( 'devhub-format-description', array( __CLASS__, 'convert_lists_to_markup' ) );
    4344
    4445        add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'autolink_references' ) );
    4546        add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'fix_param_description_parsedown_bug' ) );
     47        add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'fix_param_description_quotes_to_code' ) );
     48        add_filter( 'devhub-format-hash-param-description', array( __CLASS__, 'convert_lists_to_markup' ) );
    4649
    4750        add_filter( 'devhub-function-return-type', array( __CLASS__, 'autolink_references' ) );
    4851
    49         add_filter( 'syntaxhighlighter_htmlresult', array( __CLASS__, 'fix_code_entity_encoding' ), 20 );
    50     }
    51 
    52     /**
    53      * Fixes bug in (or at least in using) SyntaxHighlighter code shortcodes that
    54      * causes double-encoding of `>` character.
    55      *
    56      * @param string $content The text being handled as code.
    57      * @return string
    58      */
    59     public static function fix_code_entity_encoding( $content ) {
    60         return str_replace( '&amp;gt;', '&gt;', $content );
     52        add_shortcode( 'php', array( __CLASS__, 'do_shortcode_php' ) );
     53        add_shortcode( 'js', array( __CLASS__, 'do_shortcode_js' ) );
     54        add_shortcode( 'css', array( __CLASS__, 'do_shortcode_css' ) );
     55        add_shortcode( 'code', array( __CLASS__, 'do_shortcode_code' ) );
     56
     57        add_filter(
     58            'no_texturize_shortcodes',
     59            function ( $shortcodes ) {
     60                $shortcodes[] = 'php';
     61                $shortcodes[] = 'js';
     62                $shortcodes[] = 'css';
     63                $shortcodes[] = 'code';
     64                return $shortcodes;
     65            }
     66        );
    6167    }
    6268
     
    314320        // Note: This precludes them from being able to be used in an encoded fashion
    315321        // within a parameter description.
    316         $allowable_tags = array( 'code' );
     322        $allowable_tags = array( 'code', 'br' );
    317323        foreach ( $allowable_tags as $tag ) {
    318324            $text = str_replace( array( "&lt;{$tag}&gt;", "&lt;/{$tag}&gt;" ), array( "<{$tag}>", "</{$tag}>" ), $text );
     
    379385
    380386                // Only if the text contains something that might be a function.
    381                 if ( false !== strpos( $content, '()' ) ) {
     387                if ( str_contains( $content, '()' ) || str_contains( $content, '::' ) || str_contains( $content, '->' ) ) {
    382388
    383389                    // Detect references to class methods, e.g. WP_Query::query()
     
    385391                    $content = preg_replace_callback(
    386392                        '~
    387                             (?!<.*?)       # Non-capturing check to ensure not matching what looks like the inside of an HTML tag.
    388                             (              # 1: The full method or function name.
    389                                 ((\w+)::)? # 2: The class prefix, if a method reference.
    390                                 (\w+)      # 3: The method or function name.
     393                            (?!<.*?)                  # Non-capturing check to ensure not matching what looks like the inside of an HTML tag.
     394                            (?P<name>
     395                                (?P<class>
     396                                    (\w+)             # Class Name
     397                                    (::|->|-&gt;)     # Object reference
     398                                    (\w+)             # Method
     399                                    (?P<after>\(\)| ) # () or whitespace to terminate.
     400                                )
     401                                |
     402                                (?P<function>\w+\(\)) # Functions must always end in ().
    391403                            )
    392                             \(\)           # The () that signifies either a method or function.
    393                             (?![^<>]*?>)   # Non-capturing check to ensure not matching what looks like the inside of an HTML tag.
     404                            (?![^<>]*?>)              # Non-capturing check to ensure not matching what looks like the inside of an HTML tag.
    394405                        ~x',
    395                         function ( $matches ) {
     406                        function( $matches ) {
     407                            $name  = rtrim( $matches['name'], '() ' );
     408                            $after = ( '()' === $matches['after'] ? '' : ' ' );
     409
    396410                            // Reference to a class method.
    397                             if ( $matches[2] ) {
     411                            if ( $matches['class'] ) {
     412                                $name = str_replace( array( '->', '-&gt;' ), '::', $name );
     413
    398414                                // Only link actually parsed methods.
    399                                 if ( $post = get_page_by_title( $matches[1], OBJECT, 'wp-parser-method' ) ) {
     415                                if ( $post = get_page_by_title( $name, OBJECT, 'wp-parser-method' ) ) {
    400416                                    return sprintf(
    401                                         '<a href="%s">%s</a>',
     417                                        '<a href="%s" rel="method">%s</a>' . $after,
    402418                                        get_permalink( $post->ID ),
    403                                         $matches[0]
     419                                        $name . '()'
    404420                                    );
    405421                                }
     
    408424                            } else {
    409425                                // Only link actually parsed functions.
    410                                 if ( $post = get_page_by_title( $matches[1], OBJECT, 'wp-parser-function' ) ) {
     426                                if ( $post = get_page_by_title( $name, OBJECT, 'wp-parser-function' ) ) {
    411427                                    return sprintf(
    412                                         '<a href="%s">%s</a>',
     428                                        '<a href="%s" rel="function">%s</a>' . $after,
    413429                                        get_permalink( $post->ID ),
    414                                         $matches[0]
     430                                        $name . '()'
    415431                                    );
    416432                                }
     
    452468                        if ( $post = get_page_by_title( $matches[0], OBJECT, 'wp-parser-class' ) ) {
    453469                            return sprintf(
    454                                 '<a href="%s">%s</a>',
     470                                '<a href="%s" rel="class">%s</a>',
    455471                                get_permalink( $post->ID ),
    456472                                $matches[0]
     
    484500     *
    485501     * Recognizes lists where list items are denoted with an asterisk or dash.
     502     * Examples:
     503     * - https://developer.wordpress.org/reference/functions/add_menu_page/
     504     * - https://developer.wordpress.org/reference/classes/wp_term_query/__construct/
     505     * - https://developer.wordpress.org/reference/hooks/password_change_email/
     506     * - https://developer.wordpress.org/reference/classes/WP_Query/parse_query/
    486507     *
    487508     * Does not handle nesting of lists.
     
    491512     */
    492513    public static function convert_lists_to_markup( $text ) {
    493         $inline_list = false;
    494         $li = '<br /> * ';
    495 
    496         // Convert asterisks to a list.
    497         // Example: https://developer.wordpress.org/reference/functions/add_menu_page/
    498         if ( false !== strpos( $text, ' * ' ) )  {
    499             // Display as simple plaintext list.
    500             $text = str_replace( ' * ', "\n" . $li, $text );
    501             $inline_list = true;
    502         }
    503 
    504         // Convert dashes to a list.
    505         // Example: https://developer.wordpress.org/reference/classes/wp_term_query/__construct/
    506         // Example: https://developer.wordpress.org/reference/hooks/password_change_email/
    507         if ( false !== strpos( $text, ' - ' ) )  {
    508             // Display as simple plaintext list.
    509             $text = str_replace( ' - ', "\n" . $li, $text );
    510             $inline_list = true;
    511         }
    512 
    513         // If list detected.
    514         if ( $inline_list ) {
    515             // Replace first item, ensuring the opening 'ul' tag is prepended.
    516             $text = preg_replace( '~^' . preg_quote( $li ) . '(.+)$~mU', "<ul><li>\$1</li>\n", $text, 1 );
    517             // Wrap subsequent list items in 'li' tags.
    518             $text = preg_replace( '~^' . preg_quote( $li ) . '(.+)$~mU', "<li>\$1</li>\n", $text );
    519             $text = trim( $text );
    520 
    521             // Close the list if it hasn't been closed before start of next hash parameter.
    522             //$text = preg_replace( '~(</li>)(\s+</li>)~smU', '$1</ul>$2', $text );
    523             $text = preg_replace( '~(</li>)(\s*</li>)~smU', '$1</ul>$2', $text );
    524 
    525             // Closethe list if it hasn't been closed and it's the end of the description.
    526             if ( '</li>' === substr( trim( $text ), -5 ) ) {
    527                 $text .= '</ul>';
    528             }
    529         }
     514        // Expand new lines for ease of matching.
     515        $text = preg_replace( '!<br>\s*!', "<br>\n", $text );
     516
     517        // Trim any trailing <br>s on strings.
     518        $text = preg_replace( '/<br>\s*$/s', '', $text );
     519
     520        // Add line items
     521        $text = preg_replace( '!^\s*[*-] (.+?)(<br>)*$!m', '<li>$1</li>', $text, -1, $replacements_made );
     522
     523        if ( ! $replacements_made ) {
     524            return $text;
     525        }
     526
     527        // Wrap in a `ul`.
     528        $text = substr_replace( $text, '<ul><li>', strpos( $text, '<li>' ), 4 ); // First instance
     529        $text = substr_replace( $text, '</li></ul>', strrpos( $text, '</li>' ), 5 ); // Last instance.
    530530
    531531        return $text;
     
    598598                }
    599599                if ( $name ) {
    600                     $new_text .= "<b>'{$name}'</b><br />";
    601                 }
    602                 $new_text .= "<i><span class='type'>({$type})</span></i> {$description}";
     600                    $new_text .= "<code>{$name}</code>";
     601                }
     602                $new_text .= "<span class='type'>{$type}</span><div class='desc'>{$description}</div>";
    603603                if ( ! $skip_closing_li ) {
    604604                    $new_text .= '</li>';
     
    671671    }
    672672
     673    /**
     674     * Wraps code-like references within 'code' tags.
     675     *
     676     * Example: https://developer.wordpress.org/reference/classes/wp_term_query/__construct/
     677     *
     678     * @param string $text Text.
     679     * @return string
     680     */
     681    public static function fix_param_description_quotes_to_code( $text ) {
     682        // Don't do anything if this is a hash notation string.
     683        if ( ! $text || str_starts_with( $text, '{' ) || str_contains( $text, '<ul class="param-hash">' ) ) {
     684            return $text;
     685        }
     686
     687        $textarr     = preg_split( '/(<[^<>]+>)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // split out HTML tags
     688        $text        = '';
     689        $within_code = false;
     690        foreach ( $textarr as $piece ) {
     691            // HTML tags are untouched.
     692            if ( str_starts_with( $piece, '<' ) || $within_code ) {
     693                $text .= $piece;
     694
     695                if ( str_starts_with( $piece, '</code' ) ) {
     696                    $within_code = false;
     697                } elseif ( ! $within_code ) {
     698                    $within_code = str_starts_with( $piece, '<code' );
     699                }
     700
     701                continue;
     702            }
     703
     704            // Pipe delimited types inline.
     705            $piece = preg_replace( "/(([\w'\[\]]+\|)+[\w'\[\]]+)/", '<code>$1</code>', $piece, -1 );
     706
     707            // Quoted strings.
     708            $piece = preg_replace( "/('[^' ]*')/", '<code>$1</code>', $piece, -1 );
     709
     710            // Replace ###PARAM### too.
     711            // Example: http://localhost:8888/reference/hooks/password_change_email/
     712            $piece = preg_replace( "/((#{2,})\w+\\2)/", '<code>$1</code>', $piece );
     713
     714            $text .= $piece;
     715        }
     716
     717        return $text;
     718    }
     719
     720    /**
     721     * Render the php shortcode using the Code Syntax Block syntax.
     722     *
     723     * This is a workaround for user-submitted code, which used the php shortcode from Syntax Highlighter Evolved.
     724     *
     725     * @param array|string $attr    Shortcode attributes array or empty string.
     726     * @param string       $content Shortcode content.
     727     * @param string       $tag     Shortcode name.
     728     * @return string
     729     */
     730    public static function do_shortcode_php( $attr, $content, $tag ) {
     731        $attr = is_array( $attr ) ? $attr : array();
     732        $attr['lang'] = 'php';
     733
     734        return self::do_shortcode_code( $attr, $content, $tag );
     735    }
     736
     737    /**
     738     * Render the js shortcode using the Code Syntax Block syntax.
     739     *
     740     * This is a workaround for user-submitted code, which used the js shortcode from Syntax Highlighter Evolved.
     741     *
     742     * @param array|string $attr    Shortcode attributes array or empty string.
     743     * @param string       $content Shortcode content.
     744     * @param string       $tag     Shortcode name.
     745     * @return string
     746     */
     747    public static function do_shortcode_js( $attr, $content, $tag ) {
     748        $attr = is_array( $attr ) ? $attr : array();
     749        $attr['lang'] = 'js';
     750
     751        return self::do_shortcode_code( $attr, $content, $tag );
     752    }
     753
     754    /**
     755     * Render the css shortcode using the Code Syntax Block syntax.
     756     *
     757     * This is a new shortcode, but built to mirror the above two, `js` & `php`.
     758     *
     759     * @param array|string $attr    Shortcode attributes array or empty string.
     760     * @param string       $content Shortcode content.
     761     * @param string       $tag     Shortcode name.
     762     * @return string
     763     */
     764    public static function do_shortcode_css( $attr, $content, $tag ) {
     765        $attr = is_array( $attr ) ? $attr : array();
     766        $attr['lang'] = 'css';
     767
     768        return self::do_shortcode_code( $attr, $content, $tag );
     769    }
     770
     771    /**
     772     * Render the code shortcode using the Code Syntax Block syntax.
     773     *
     774     * This is used in the handbooks content.
     775     *
     776     * @param array|string $attr    Shortcode attributes array or empty string.
     777     * @param string       $content Shortcode content.
     778     * @param string       $tag     Shortcode name.
     779     * @return string
     780     */
     781    public static function do_shortcode_code( $attr, $content, $tag ) {
     782        // Use an allowedlist of languages, falling back to PHP.
     783        // This should account for all languages used in the handbooks.
     784        $lang_list = [ 'js', 'json', 'sh', 'bash', 'html', 'css', 'scss', 'php', 'markdown', 'yaml' ];
     785        $lang = in_array( $attr['lang'], $lang_list ) ? $attr['lang'] : 'php';
     786
     787        $content = self::_trim_code( $content );
     788        // Hides numbers if <= 4 lines of code (last line has no linebreak).
     789        $show_line_numbers = substr_count( $content, "\n" ) > 3;
     790
     791        // Shell is flagged with `sh` or `bash` in the handbooks, but Prism uses `shell`.
     792        if ( 'sh' === $lang || 'bash' === $lang ) {
     793            $lang = 'shell';
     794        }
     795
     796        return do_blocks(
     797            sprintf(
     798                '<!-- wp:code {"lineNumbers":$3$s} --><pre class="wp-block-code"><code lang="%1$s" class="language-%1$s %4$s">%2$s</code></pre><!-- /wp:code -->',
     799                $lang,
     800                $content,
     801                $show_line_numbers ? 'true' : 'false',
     802                $show_line_numbers ? 'line-numbers' : ''
     803            )
     804        );
     805    }
     806
     807    /**
     808     * Trim off any extra space, including initial new lines.
     809     * Strip out <br /> and <p> added by WordPress.
     810     *
     811     * @param string $content Shortcode content.
     812     * @return string
     813     */
     814    public static function _trim_code( $content ) {
     815        $content = preg_replace( '/<br \/>/', '', $content );
     816        $content = preg_replace( '/<\/p>\s*<p>/', "\n\n", $content );
     817        // Trim everything except leading spaces.
     818        $content = trim( $content, "\n\r\t\v\x00" );
     819        return $content;
     820    }
    673821} // DevHub_Formatting
    674822
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/import-block-editor.php

    r11422 r12050  
    2121        add_filter( 'wporg_markdown_after_transform',  array( $this, 'wporg_markdown_after_transform' ), 10, 2 );
    2222        add_filter( 'wporg_markdown_edit_link',        array( $this, 'wporg_markdown_edit_link' ), 10, 2 );
    23 
    24         add_filter( 'syntaxhighlighter_htmlresult',    array( $this, 'fix_code_entity_encoding' ) );
    2523
    2624        add_action( 'pre_post_update', function( $post_id, $data ) {
     
    144142
    145143    /**
    146      * Fixes unwarranted HTML entity encoding within code shortcodes.
    147      *
    148      * @param string $content Post content.
    149      * @return string
    150      */
    151     public function fix_code_entity_encoding( $content ) {
    152         if ( $this->get_post_type() !== get_post_type() ) {
    153             return $content;
    154         }
    155 
    156         if ( false !== mb_strpos( $content, '&amp;' ) ) {
    157             $content = preg_replace_callback(
    158                 '|(<pre class="brush[^>]+)(.+)(</pre)|Us',
    159                 function( $matches ) {
    160                     return $matches[1] . html_entity_decode( $matches[2], ENT_QUOTES | ENT_HTML401 ) . $matches[3];
    161                 },
    162                 $content
    163             );
    164         }
    165 
    166         return $content;
    167     }
    168 
    169     /**
    170144     * Fixes fetched value of markdown_source meta field to not be the
    171145     * raw.githubcontent.com domain that is currently incorrectly used
     
    343317     */
    344318    public function wporg_markdown_edit_link( $link, $post_id ) {
    345         if ( $this->get_post_type() === get_post_type( $post_id ) ) {
     319        if ( $this->get_post_type() === get_post_type( $post_id ) && defined( 'WP_CORE_STABLE_BRANCH' ) ) {
    346320            $link = str_replace( '/wp/' . WP_CORE_STABLE_BRANCH . '/', '/trunk/', $link );
    347321        }
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/loop-pagination.php

    r8233 r12050  
    5555        'current'      => $current,
    5656        'prev_next'    => true,
    57         //'prev_text'  => __( '&laquo; Previous' ), // This is the WordPress default.
    58         //'next_text'  => __( 'Next &raquo;' ), // This is the WordPress default.
     57        'prev_text'    => __( 'Previous', 'wporg' ),
     58        'next_text'    => __( 'Next', 'wporg' ),
    5959        'show_all'     => false,
    60         'end_size'     => 1,
     60        'end_size'     => 2,
    6161        'mid_size'     => 1,
    6262        'add_fragment' => '',
     
    111111}
    112112
    113 ?>
     113
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/registrations.php

    r8869 r12050  
    7575        ) );
    7676
    77         // Methods
     77        // Rewrite rules. The more specific rules like `/embed` must be first, to override the more generic rules.
    7878        add_rewrite_rule( 'reference/classes/page/([0-9]{1,})/?$', 'index.php?post_type=wp-parser-class&paged=$matches[1]', 'top' );
     79        add_rewrite_rule( 'reference/classes/([^/]+)/embed/?$', 'index.php?post_type=wp-parser-class&name=$matches[1]&embed=true', 'top' );
     80        add_rewrite_rule( 'reference/classes/([^/]+)/([^/]+)/embed/?$', 'index.php?post_type=wp-parser-method&name=$matches[1]-$matches[2]&embed=true', 'top' );
    7981        add_rewrite_rule( 'reference/classes/([^/]+)/([^/]+)/?$', 'index.php?post_type=wp-parser-method&name=$matches[1]-$matches[2]', 'top' );
    8082
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/search.php

    r9866 r12050  
    6969    public static function pre_get_posts( $query ) {
    7070        // Don't modify anything if not a non-admin main search query.
    71         if ( ! ( ! is_admin() && $query->is_main_query() && $query->is_search() ) ) {
     71        if (
     72            (
     73                // Not the admin
     74                is_admin() ||
     75                // Not non-main queries / non-searches
     76                ( ! $query->is_main_query() || ! $query->is_search() )
     77            ) &&
     78            // but yes if it's the autocomplete search (which is admin, and not the main query).
     79            ! $query->get( '_autocomplete_search' )
     80        ) {
    7281            return;
    7382        }
     
    8695            // If user has '()' at end of a search string, assume they want a specific function/method.
    8796            $s = htmlentities( $query->get( 's' ) );
    88             if ( '()' === substr( $s, -2 ) ) {
     97            if ( '()' === substr( $s, -2 ) || '(' == substr( $s, -1 ) ) {
    8998                // Enable exact search.
    9099                $query->set( 'exact',     true );
    91100                // Modify the search query to omit the parentheses.
    92                 $query->set( 's',         substr( $s, 0, -2 ) ); // remove '()'
     101                $query->set( 's',         trim( $s, '()' ) );
    93102                // Restrict search to function-like content.
    94103                $query->set( 'post_type', array( 'wp-parser-function', 'wp-parser-method' ) );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/template-tags.php

    r11311 r12050  
    114114            // Check if the current page is a reply to a note.
    115115            $reply_id = 0;
    116             if ( isset( $_GET['replytocom'] ) && $_GET['replytocom'] ) {       
     116            if ( isset( $_GET['replytocom'] ) && $_GET['replytocom'] ) {
    117117                /* Javascript uses preventDefault() when clicking links with '?replytocom={comment_ID}'
    118118                 * We assume Javascript is disabled when visiting a page with this query var.
     
    176176            $can_user_post_note = DevHub\can_user_post_note( true, get_the_ID() );
    177177            $is_user_verified   = $is_user_logged_in && $can_user_post_note;
    178        
     178
    179179            $args['updated_note'] = 0;
    180180            if ( isset( $_GET['updated-note'] ) && $_GET['updated-note'] ) {
     
    621621     */
    622622    function get_site_section_url() {
    623         $parts = explode( '/', $GLOBALS['wp']->request );
    624         switch ( $parts[0] ) {
    625             case 'reference':
    626             case 'plugins':
    627             case 'themes':
    628                 return home_url( '/' . $parts[0] . '/' );
    629             case 'cli':
    630                 return home_url( '/cli/commands/' );
    631             default:
    632                 return home_url( '/' );
    633         }
     623        return home_url( '/' );
    634624    }
    635625
     
    645635            case 'resource':
    646636                return sprintf( __( 'Developer Resources: %s', 'wporg' ), get_the_title() );
    647             case 'reference':
    648                 return __( 'Code Reference', 'wporg' );
    649             case 'plugins':
    650                 return __( 'Plugin Handbook', 'wporg' );
    651             case 'themes':
    652                 return __( 'Theme Handbook', 'wporg' );
    653             case 'apis':
    654                 return __( 'Common APIs Handbook', 'wporg' );
    655             case 'block-editor':
    656                 return __( 'Block Editor Handbook', 'wporg' );
    657             case 'cli':
    658                 return __( 'WP-CLI Commands', 'wporg' );
    659             case 'coding-standards':
    660                 return __( 'Coding Standards Handbook', 'wporg' );
    661             case 'rest-api':
    662                 return __( 'REST API Handbook', 'wporg' );
    663637            default:
     638                if( is_page( 'reference' ) ) {
     639                    return __( 'Code Reference', 'wporg' );
     640                }
     641
    664642                return __( 'Developer Resources', 'wporg' );
    665643        }
     
    685663        }
    686664        return $name;
     665    }
     666
     667    /**
     668     * Returns the hook string.
     669     *
     670     * @param int $post_id
     671     *
     672     * @return string
     673     */
     674    function get_hook_type_name( $post_id ) {
     675        $hook_type = get_post_meta( $post_id, '_wp-parser_hook_type', true );
     676        if ( false !== strpos( $hook_type, 'action' ) ) {
     677            if ( 'action_reference' === $hook_type ) {
     678                $hook_type = 'do_action_ref_array';
     679            } elseif ( 'action_deprecated' === $hook_type ) {
     680                $hook_type = 'do_action_deprecated';
     681            } else {
     682                $hook_type = 'do_action';
     683            }
     684        } else {
     685            if ( 'filter_reference' === $hook_type ) {
     686                $hook_type = 'apply_filters_ref_array';
     687            } elseif ( 'filter_deprecated' === $hook_type ) {
     688                $hook_type = 'apply_filters_deprecated';
     689            } else {
     690                $hook_type = 'apply_filters';
     691            }
     692        }
     693
     694        return $hook_type;
    687695    }
    688696
     
    708716
    709717        if ( 'wp-parser-class' === get_post_type( $post_id ) ) {
    710             return $signature;
     718            return '<span class="keyword">class</span> ' . $signature . ' {}';
    711719        }
    712720
     
    726734            }
    727735
    728             $hook_type = get_post_meta( $post_id, '_wp-parser_hook_type', true );
    729             if ( false !== strpos( $hook_type, 'action' ) ) {
    730                 if ( 'action_reference' === $hook_type ) {
    731                     $hook_type = 'do_action_ref_array';
    732                 } elseif ( 'action_deprecated' === $hook_type ) {
    733                     $hook_type = 'do_action_deprecated';
    734                 } else {
    735                     $hook_type = 'do_action';
    736                 }
    737             } else {
    738                 if ( 'filter_reference' === $hook_type ) {
    739                     $hook_type = 'apply_filters_ref_array';
    740                 } elseif ( 'filter_deprecated' === $hook_type ) {
    741                     $hook_type = 'apply_filters_deprecated';
    742                 } else {
    743                     $hook_type = 'apply_filters';
    744                 }
    745             }
     736            $hook_type = get_hook_type_name( $post_id );
    746737
    747738            $delimiter = false !== strpos( $signature, '$' ) ? '"' : "'";
     
    783774        $signature .= ')';
    784775
     776        $return = get_return( $post_id, false );
     777        if ( $return ) {
     778            $signature .= ': ' . $return;
     779        }
     780
    785781        return wp_kses_post( $signature );
    786782    }
     
    805801            $encountered_optional = false;
    806802            foreach ( $tags as $tag ) {
    807                 // Fix unintended markup introduced by parser.
    808                 $tag = str_replace( array( '<strong>', '</strong>' ), '__', $tag );
    809 
    810803                if ( ! empty( $tag['name'] ) && 'param' == $tag['name'] ) {
    811804                    $params[ $tag['variable'] ] = $tag;
     
    872865                    }
    873866                }
    874 
    875867            }
    876868        }
     
    878870        return $params;
    879871    }
     872
     873    /**
     874     * Recurse through parameters that referer to arguments in other functions or methods, and find the innermost parameter description.
     875     * For example the description for the wp_count_terms( $args ) parameter refers to get_terms( $args ) which in turn refers to WP_Term_Query::__construct( $query ).
     876     * Given the wp_count_terms( $args ) parameter, this will find and return the one for WP_Term_Query::__construct( $query ).
     877     *
     878     * @param array $param A single parameter array as found in `_wp-parser_args` postmeta.
     879     * @param int   $recursion_limit Maximum number of levels to recurse through.
     880     *
     881     * @return array|null
     882     */
     883
     884    function get_param_reference( $param, $recursion_limit = 3 ) {
     885        if ( $recursion_limit > 0 && preg_match_all( '#rel="(function|method)">([^<>()]+)[(][)]</a>#', $param[ 'content' ], $matches, PREG_SET_ORDER ) ) {
     886            foreach ( $matches as $match ) {
     887                if ( $_post = get_page_by_title( $match[2], OBJECT, 'wp-parser-' . $match[1] ) ) {
     888                    if ( $_params = get_params( $_post->ID ) ) {
     889
     890                        $arg_names_to_try = array_unique([
     891                            $param['variable'], // An exact match for the name eg $args
     892                            '$args',
     893                            '$query', // For example get_terms( $args ) -> WP_Term_Query::__construct( $query )
     894                        ]);
     895
     896                        foreach ( $arg_names_to_try as $variable_name ) {
     897                            if ( isset( $_params[ $variable_name ] ) ) {
     898                                // Sometimes the referenced doc page has another level of indirection!
     899                                $recurse = get_param_reference( $_params[ $variable_name ], $recursion_limit - 1 );
     900                                if ( $recurse ) {
     901                                    $recurse[ 'parent' ] = $_post->post_title;
     902                                    $recurse[ 'parent_var' ] = $variable_name;
     903                                    return $recurse;
     904                                } else {
     905                                    $result = $_params[ $variable_name ];
     906                                    $result[ 'parent' ] = $_post->post_title;
     907                                    $result[ 'parent_var' ] = $variable_name;
     908                                    return $result;
     909                                }
     910                            }
     911                        }
     912                    }
     913                }
     914            }
     915        }
     916
     917        return null;
     918    }
     919
    880920
    881921    /**
     
    916956     * @return string
    917957     */
    918     function get_return( $post_id = null ) {
     958    function get_return( $post_id = null, $include_description = true ) {
    919959
    920960        if ( empty( $post_id ) ) {
     
    935975        $type        = apply_filters( 'devhub-function-return-type', $type, $post_id );
    936976
    937         return "<span class='return-type'>({$type})</span> $description";
     977        if ( $include_description ) {
     978            return "<span class='return-type'>{$type}</span> $description";
     979        } else {
     980            return "<span class='return-type'>{$type}</span>";
     981        }
    938982    }
    939983
     
    12461290     */
    12471291    function post_type_has_uses_info( $post_type = null ) {
     1292        $post_type            = $post_type ? $post_type : get_post_type();
     1293        $post_types_with_uses = array( 'wp-parser-function', 'wp-parser-method', 'wp-parser-class' );
     1294
     1295        return in_array( $post_type, $post_types_with_uses );
     1296    }
     1297
     1298    /**
     1299     * Does the post type support hooks information?
     1300     *
     1301     * @param string $post_type Optional. The post type name. If blank, assumes current post type.
     1302     *
     1303     * @return boolean
     1304     */
     1305    function post_type_has_hooks_info( $post_type = null ) {
    12481306        $post_type             = $post_type ? $post_type : get_post_type();
    1249         $post_types_with_uses  = array( 'wp-parser-function', 'wp-parser-method', 'wp-parser-class' );
    1250 
    1251         return in_array( $post_type, $post_types_with_uses );
     1307        $post_types_with_hooks = array( 'wp-parser-function', 'wp-parser-method' );
     1308
     1309        return in_array( $post_type, $post_types_with_hooks );
    12521310    }
    12531311
     
    12731331            return $connected;
    12741332        } elseif ( 'wp-parser-function' === $post_type ) {
    1275             $connection_types = array( 'functions_to_functions', 'functions_to_methods', 'functions_to_hooks' );
     1333            $connection_types = array( 'functions_to_functions', 'functions_to_methods' );
    12761334        } else {
    1277             $connection_types = array( 'methods_to_functions', 'methods_to_methods', 'methods_to_hooks' );
     1335            $connection_types = array( 'methods_to_functions', 'methods_to_methods' );
    12781336        }
    12791337
    12801338        $connected = new \WP_Query( array(
    1281             'post_type'           => array( 'wp-parser-function', 'wp-parser-method', 'wp-parser-hook' ),
     1339            'post_type'           => array( 'wp-parser-function', 'wp-parser-method' ),
    12821340            'connected_type'      => $connection_types,
    1283             'connected_direction' => array( 'from', 'from', 'from' ),
     1341            'connected_direction' => array( 'from', 'from' ),
     1342            'connected_items'     => $post_id,
     1343            'nopaging'            => true,
     1344        ) );
     1345
     1346        return $connected;
     1347    }
     1348
     1349    /**
     1350     * Retrieves a WP_Query object for the hook posts that the current post is linked to.
     1351     *
     1352     * @param int|WP_Post|null $post Optional. Post ID or post object. Default is global $post.
     1353     * @return WP_Query|null   The WP_Query if the post's post type supports 'uses', null otherwise.
     1354     */
     1355    function get_hooks( $post = null ) {
     1356        $post_id   = get_post_field( 'ID', $post );
     1357        $post_type = get_post_type( $post );
     1358
     1359        if ( 'wp-parser-function' === $post_type ) {
     1360            $connection_types = array( 'functions_to_hooks' );
     1361        } else {
     1362            $connection_types = array( 'methods_to_hooks' );
     1363        }
     1364
     1365        $connected = new \WP_Query( array(
     1366            'post_type'           => 'wp-parser-hook',
     1367            'connected_type'      => $connection_types,
     1368            'connected_direction' => array( 'from' ),
    12841369            'connected_items'     => $post_id,
    12851370            'nopaging'            => true,
     
    13371422
    13381423    /**
     1424     * Find functions & methods that are often used by other functions and methods.
     1425     */
     1426    function _get_functions_to_exclude_from_uses() {
     1427        global $wpdb;
     1428
     1429        $ids = get_transient( __METHOD__ );
     1430        if ( $ids ) {
     1431            return $ids;
     1432        }
     1433
     1434        $ids = $wpdb->get_col(
     1435            "SELECT p2p_to
     1436            FROM {$wpdb->p2p} p2p
     1437            WHERE p2p_type IN ( 'methods_to_functions', 'functions_to_functions', 'methods_to_methods', 'functions_to_methods' )
     1438            GROUP BY p2p_to
     1439            HAVING COUNT(*) > 50"
     1440        );
     1441
     1442        set_transient( __METHOD__, $ids, DAY_IN_SECONDS );
     1443
     1444        return $ids;
     1445    }
     1446
     1447    /**
     1448     * Rearrange the results of get_uses() so that frequent functions are pushed to the bottom.
     1449     * Sorts the array in-place.
     1450     *
     1451     * @return int The number of infrequent items in the list (ie the cutoff point for show/hide).
     1452     */
     1453    function split_uses_by_frequent_funcs( &$posts ) {
     1454
     1455        $frequent_funcs = _get_functions_to_exclude_from_uses();
     1456
     1457        // Sort the posts array so frequently used functions are at the end
     1458        usort( $posts, function( $a, $b ) use ( $frequent_funcs ) {
     1459            return (int) in_array( $a->ID, $frequent_funcs ) - (int) in_array( $b->ID, $frequent_funcs );
     1460        } );
     1461
     1462        $infrequent_count = 0;
     1463        foreach ( $posts as $i => $post ) {
     1464            if ( in_array( $post->ID, $frequent_funcs ) ) {
     1465                break;
     1466            }
     1467            $infrequent_count = $i + 1;
     1468        }
     1469
     1470        return $infrequent_count;
     1471    }
     1472
     1473    /**
    13391474     * Returns the array of post types that have source code.
    13401475     *
     
    13421477     */
    13431478    function get_post_types_with_source_code() {
    1344         return array( 'wp-parser-class', 'wp-parser-method', 'wp-parser-function' );
     1479        return array( 'wp-parser-class', 'wp-parser-method', 'wp-parser-function', 'wp-parser-hook' );
    13451480    }
    13461481
     
    14281563            }
    14291564            fclose( $handle );
     1565        }
     1566
     1567        // Trim leading whitespace.
     1568        if ( preg_match_all( "!^([\t ]*).+$!m", $source_code, $m ) ) {
     1569            $strip_prefix = min( array_map( 'strlen', $m[1] ) );
     1570            if ( $strip_prefix ) {
     1571                $source_code = preg_replace( "!^[\t ]{" . $strip_prefix . "}!m", '$1', $source_code );
     1572            }
    14301573        }
    14311574
     
    15941737        $description = $post->post_content;
    15951738
     1739        // Replace code blocks generated by Markdown with wp:code blocks.
     1740        $description = str_replace( '<pre><code>', '[code lang="php"]', $description );
     1741        $description = str_replace( '</code></pre>', '[/code]', $description );
     1742
    15961743        if ( $description ) {
    15971744            $description = apply_filters( 'the_content', apply_filters( 'get_the_content' , $description ) );
     
    16241771        $taxonomies = array( 'wp-parser-since', 'wp-parser-package', 'wp-parser-source-file' );
    16251772
    1626         return ! ( is_search() || is_404() ) && ( is_singular( $post_types ) || is_post_type_archive( $post_types ) || is_tax( $taxonomies ) );
     1773        return ! ( is_search() || is_404() ) && ( is_singular( $post_types ) || is_post_type_archive( $post_types ) || is_tax( $taxonomies ) || is_page( 'reference' ) );
     1774    }
     1775
     1776    /**
     1777     * Should the search bar filters be shown?
     1778     *
     1779     * @return bool True if search bar filters should be shown.
     1780     */
     1781    function should_show_search_filters() {
     1782        $is_handbook = $GLOBALS['wp_query']->is_handbook;
     1783        return ( is_page( 'reference' ) || is_search() ) && ! $is_handbook;
    16271784    }
    16281785
     
    18592016            'return',
    18602017            'explanation',
     2018            'methods',
    18612019            'source',
     2020            'hooks',
    18622021            'related',
    1863             'methods',
    18642022            'changelog',
    18652023            'notes'
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/inc/user-content.php

    r11765 r12050  
    5555        // Customize allowed tags
    5656        add_filter( 'wp_kses_allowed_html',            array( __CLASS__, 'wp_kses_allowed_html' ), 10, 2 );
    57 
    58         // Make 'php' the default language
    59         add_filter( 'syntaxhighlighter_shortcodeatts', array( __CLASS__, 'syntaxhighlighter_shortcodeatts' ) );
    60 
    61         // Tweak code contained in shortcode
    62         add_filter( 'syntaxhighlighter_precode',       array( __CLASS__, 'syntaxhighlighter_precode' ) );
    6357
    6458        // Allowed HTML for a new child comment
     
    170164    public static function scripts_and_styles() {
    171165        if ( is_singular() ) {
    172             wp_enqueue_script( 'wporg-developer-function-reference', get_template_directory_uri() . '/js/function-reference.js', array( 'jquery', 'syntaxhighlighter-core', 'syntaxhighlighter-brush-php' ), '20180724', true );
    173             wp_enqueue_style( 'syntaxhighlighter-core' );
    174             wp_enqueue_style( 'syntaxhighlighter-theme-default' );
    175 
    176             wp_enqueue_script( 'wporg-developer-user-notes', get_template_directory_uri() . '/js/user-notes.js', array( 'jquery', 'quicktags' ), '20200110', true );
    177             wp_enqueue_script( 'wporg-developer-user-notes-feedback', get_template_directory_uri() . '/js/user-notes-feedback.js', array( 'jquery', 'quicktags' ), '20181023', true );
    178             wp_localize_script( 'wporg-developer-user-notes-feedback', 'wporg_note_feedback', array(
    179                 'show'             => __( 'Show Feedback', 'wporg' ),
    180                 'hide'             => __( 'Hide Feedback', 'wporg' ),
    181             ) );
    182         }
    183     }
    184 
    185     /**
    186      * Sets the default language for SyntaxHighlighter shortcode.
    187      *
    188      * @param array $atts Shortcode attributes.
    189      * @return array
    190      */
    191     public static function syntaxhighlighter_shortcodeatts( $atts ) {
    192         $atts['language'] = 'php';
    193         return $atts;
    194     }
    195 
    196     /**
    197      * Subverts capital_P_dangit for SyntaxHighlighter shortcode.
    198      *
    199      * @param string $code
    200      * @return string
    201      */
    202     public static function syntaxhighlighter_precode( $code ) {
    203         return str_replace( 'Wordpress', 'Word&#112;ress', $code );
     166            wp_enqueue_script(
     167                'wporg-developer-function-reference',
     168                get_template_directory_uri() . '/js/function-reference.js',
     169                array( 'jquery', 'wp-a11y' ),
     170                filemtime( dirname( __DIR__ ) . '/js/function-reference.js' ),
     171                true
     172            );
     173            wp_localize_script(
     174                'wporg-developer-function-reference',
     175                'wporgFunctionReferenceI18n',
     176                array(
     177                    'copy'   => __( 'Copy', 'wporg' ),
     178                    'copied' => __( 'Code copied', 'wporg' ),
     179                    'expand'   => __( 'Expand code', 'wporg' ),
     180                    'collapse' => __( 'Collapse code', 'wporg' ),
     181                )
     182            );
     183
     184            wp_enqueue_script(
     185                'wporg-developer-user-notes',
     186                get_template_directory_uri() . '/js/user-notes.js',
     187                array( 'jquery', 'quicktags' ),
     188                filemtime( dirname( __DIR__ ) . '/js/user-notes.js' ),
     189                true
     190            );
     191
     192            wp_enqueue_script(
     193                'wporg-developer-user-notes-feedback',
     194                get_template_directory_uri() . '/js/user-notes-feedback.js',
     195                array( 'jquery', 'quicktags' ),
     196                filemtime( dirname( __DIR__ ) . '/js/user-notes-feedback.js' ),
     197                true
     198            );
     199            wp_localize_script(
     200                'wporg-developer-user-notes-feedback',
     201                'wporg_note_feedback',
     202                array(
     203                    'show' => __( 'Show Feedback', 'wporg' ),
     204                    'hide' => __( 'Hide Feedback', 'wporg' ),
     205                )
     206            );
     207        }
    204208    }
    205209
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/autocomplete.js

    r3244 r12050  
    1919    var searchfield = $( '#search-field', form ),
    2020        processing = false,
    21         search = '';
     21        search = '',
     22        autocompleteResults = {};
    2223
    2324    var awesome = new Awesomplete( searchfield.get( 0 ), {
     
    6364            return false;
    6465        },
     66        replace: function( text ) {
     67            searchfield.val( text );
     68
     69            if ( text in autocompleteResults ) {
     70                window.location = autocompleteResults[ text ];
     71            }
     72        }
    6573    } );
    6674
     
    102110                }
    103111
    104                 if ( ( response.success === true ) && response.data.posts.length ) {
     112                if ( response.success === true && Object.values( response.data.posts ).length ) {
     113                    autocompleteResults = response.data.posts;
     114
    105115                    // Update the autocomplete list
    106                     awesome.list = response.data.posts;
     116                    awesome.list = Object.keys( response.data.posts );
    107117                }
    108118            } )
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/function-reference.js

    r7491 r12050  
     1/* global jQuery, Prism, wporgFunctionReferenceI18n */
    12/**
    23 * function-reference.js
     
    45 * Handles all interactivity on the single function page
    56 */
    6 var wporg_developer = ( function( $ ) {
    7     'use strict';
    87
    9     var $sourceCollapsedHeight;
     8// eslint-disable-next-line id-length -- $ OK.
     9jQuery( function ( $ ) {
     10    // 22.5px (line height) * 15 for 15 lines + 15px top padding + 10px extra.
     11    // The extra 10px added to partially show next line so it's clear there is more.
     12    const MIN_HEIGHT = 22.5 * 15 + 15 + 10;
    1013
    11     var $usesList, $usedByList, $showMoreUses, $hideMoreUses, $showMoreUsedBy, $hideMoreUsedBy;
    12 
    13     function onLoad() {
    14         sourceCodeHighlightInit();
    15 
    16         toggleUsageListInit();
     14    function collapseCodeBlock( $element, $button ) {
     15        $button.text( wporgFunctionReferenceI18n.expand );
     16        $button.attr( 'aria-expanded', 'false' );
     17        // This uses `css()` instead of `height()` to prevent jQuery from adding
     18        // in the padding. We want to add in just the top padding, since the
     19        // bottom is intentionally cut off.
     20        $element.css( { height: MIN_HEIGHT + 'px' } );
    1721    }
    1822
    19     function sourceCodeHighlightInit() {
     23    function expandCodeBlock( $element, $button ) {
     24        $button.text( wporgFunctionReferenceI18n.collapse );
     25        $button.attr( 'aria-expanded', 'true' );
     26        // { height: auto; } can't be used here or the transition effect won't work.
     27        $element.height( $element.data( 'height' ) );
     28    }
    2029
    21         // We require the SyntaxHighlighter javascript library
    22         if ( undefined === window.SyntaxHighlighter ) {
    23             return;
     30    // For each code block, add the copy button & expanding functionality.
     31    $( '.wp-block-code' ).each( function ( i, element ) {
     32        const $element = $( element );
     33        let timeoutId;
     34
     35        const $copyButton = $( document.createElement( 'button' ) );
     36        $copyButton.text( wporgFunctionReferenceI18n.copy );
     37        $copyButton.on( 'click', function () {
     38            clearTimeout( timeoutId );
     39            const code = $element.find( 'code' ).text();
     40            if ( ! code ) {
     41                return;
     42            }
     43
     44            // This returns a promise which will resolve if the copy suceeded,
     45            // and we can set the button text to tell the user it worked.
     46            // We don't do anything if it fails.
     47            window.navigator.clipboard.writeText( code ).then( function () {
     48                $copyButton.text( wporgFunctionReferenceI18n.copied );
     49                wp.a11y.speak( wporgFunctionReferenceI18n.copied );
     50
     51                // After 5 seconds, reset the button text.
     52                timeoutId = setTimeout( function () {
     53                    $copyButton.text( wporgFunctionReferenceI18n.copy );
     54                }, 5000 );
     55            } );
     56        } );
     57
     58        const $container = $( document.createElement( 'div' ) );
     59        $container.addClass( 'wp-code-block-button-container' );
     60
     61        $container.append( $copyButton );
     62
     63        // Check code block height, and if it's larger, add in the collapse
     64        // button, and set it to be collapsed differently.
     65        const originalHeight = $element.height();
     66        if ( originalHeight > MIN_HEIGHT ) {
     67            $element.data( 'height', originalHeight );
     68
     69            const $expandButton = $( document.createElement( 'button' ) );
     70            $expandButton.on( 'click', function () {
     71                if ( 'true' === $expandButton.attr( 'aria-expanded' ) ) {
     72                    collapseCodeBlock( $element, $expandButton );
     73                } else {
     74                    expandCodeBlock( $element, $expandButton );
     75                }
     76            } );
     77
     78            collapseCodeBlock( $element, $expandButton );
     79            $container.append( $expandButton );
    2480        }
    2581
    26         SyntaxHighlighter.highlight();
     82        $element.before( $container );
     83    } );
    2784
    28         // 1em (margin) + 10 * 17px + 10. Lines are 1.1em which rounds to 17px: calc( 1em + 17px * 10 + 10 ).
    29         // Extra 10px added to partially show next line so it's clear there is more.
    30         $sourceCollapsedHeight = 196;
    31         sourceCodeDisplay();
    32     }
    33 
    34     function sourceCodeDisplay( element ) {
    35 
    36         if ( element !== undefined ) {
    37             // Find table inside a specific source code element if passed.
    38             var sourceCode = $( '.source-content', element ).find( 'table' );
    39         } else {
    40             // Find table inside all source code elements.
    41             var sourceCode = $( '.source-content' ).find( 'table' );
    42         }
    43 
    44         if ( !sourceCode.length ) {
    45             return;
    46         }
    47 
    48         sourceCode.each( function( t ) {
    49             if ( ( $sourceCollapsedHeight - 12 ) < $( this ).height() ) {
    50 
    51                 var sourceContent = $( this ).closest( '.source-content' );
    52 
    53                 // Do this with javascript so javascript-less can enjoy the total sourcecode
    54                 sourceContent.find( '.source-code-container' ).css( {
    55                     height: $sourceCollapsedHeight + 'px'
    56                 } );
    57 
    58                 sourceContent.find( '.source-code-links' ).find( 'span:first' ).show();
    59                 sourceContent.find( '.show-complete-source' ).show();
    60                 sourceContent.find( '.show-complete-source' ).off( 'click.togglesource' ).on( 'click.togglesource', toggleCompleteSource );
    61                 sourceContent.find( '.less-complete-source' ).off( 'click.togglesource' ).on( 'click.togglesource', toggleCompleteSource );
    62             }
    63         } );
    64     }
    65 
    66     function toggleCompleteSource( e ) {
    67         e.preventDefault();
    68 
    69         var sourceContent = $( this ).closest( '.source-content' );
    70 
    71         if ( $( this ).parent().find( '.show-complete-source' ).is( ':visible' ) ) {
    72             var heightGoal = sourceContent.find( 'table' ).height() + 45; // takes into consideration potential x-scrollbar
    73         } else {
    74             var heightGoal = $sourceCollapsedHeight;
    75         }
    76 
    77         sourceContent.find( '.source-code-container:first' ).animate( { height: heightGoal + 'px' } );
    78 
    79         $( this ).parent().find( 'a' ).toggle();
    80     }
     85    let $usesList, $usedByList, $showMoreUses, $hideMoreUses, $showMoreUsedBy, $hideMoreUsedBy;
    8186
    8287    function toggleUsageListInit() {
     88        var usesToShow = $( '#uses-table' ).data( 'show' ),
     89            usedByToShow = $( '#used-by-table' ).data( 'show' );
    8390
    8491        // We only expect one used_by and uses per document
    8592        $usedByList = $( 'tbody tr', '#used-by-table' );
    86         $usesList   = $( 'tbody tr', '#uses-table' );
     93        $usesList = $( 'tbody tr', '#uses-table' );
    8794
    88         if ( $usedByList.length > 5 ) {
    89             $usedByList = $usedByList.slice( 5 ).hide();
     95        if ( $usedByList.length > usedByToShow ) {
     96            $usedByList = $usedByList.slice( usedByToShow ).hide();
    9097
    9198            $showMoreUsedBy = $( '.used-by .show-more' ).show().on( 'click', toggleMoreUsedBy );
     
    93100        }
    94101
    95         if ( $usesList.length > 5 ) {
    96             $usesList = $usesList.slice( 5 ).hide();
     102        if ( $usesList.length > usesToShow ) {
     103            $usesList = $usesList.slice( usesToShow ).hide();
    97104
    98105            $showMoreUses = $( '.uses .show-more' ).show().on( 'click', toggleMoreUses );
     
    101108    }
    102109
    103     function toggleMoreUses( e ) {
    104         e.preventDefault();
     110    function toggleMoreUses( event ) {
     111        event.preventDefault();
    105112
    106113        $usesList.toggle();
     
    110117    }
    111118
    112     function toggleMoreUsedBy( e ) {
    113         e.preventDefault();
     119    function toggleMoreUsedBy( event ) {
     120        event.preventDefault();
    114121
    115122        $usedByList.toggle();
     
    119126    }
    120127
    121     $( onLoad );
     128    toggleUsageListInit();
    122129
    123     // Expose the sourceCodeDisplay() function for usage outside of this function.
    124     return {
    125         sourceCodeDisplay: sourceCodeDisplay
    126     };
     130    // Runs before the highlight parsing is run.
     131    // `env` is defined here: https://github.com/PrismJS/prism/blob/2815f699970eb8387d741e3ac886845ce5439afb/prism.js#L583-L588
     132    Prism.hooks.add( 'before-highlight', function ( env ) {
     133        // If the code starts with `<`, it's either already got an opening tag,
     134        // or it starts with HTML. Either way, we don't want to inject here.
     135        if ( 'php' === env.language && ! env.code.startsWith( '<' ) ) {
     136            env.code = '<? ' + env.code;
     137            env.hasAddedTag = true;
     138        }
     139    } );
    127140
    128 } )( jQuery );
     141    // Runs before `highlightedCode` is set to the `innerHTML` of the container.
     142    Prism.hooks.add( 'before-insert', function ( env ) {
     143        if ( env.hasAddedTag ) {
     144            env.highlightedCode = env.highlightedCode.replace(
     145                '<span class="token delimiter important">&lt;?</span> ',
     146                ''
     147            );
     148        }
     149    } );
     150} );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/js/user-notes-preview.js

    r9391 r12050  
    116116    }
    117117
    118     // Add toggle links to source code in preview if needed.
    119     function updateSourceCode() {
    120         if ( undefined !== wporg_developer ) {
    121             wporg_developer.sourceCodeDisplay( preview );
    122         }
    123     }
    124 
    125118    function updatePreview_HTML( content ) {
    126119        // Update preview content
    127120        previewContent.html( content );
    128121
    129         if ( undefined !== window.SyntaxHighlighter ) {
    130             SyntaxHighlighter.highlight();
    131         }
    132 
    133         // Add toggle link to source code in preview if needed.
    134         updateSourceCode();
    135122        spinner.hide();
    136123    }
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/package.json

    r11195 r12050  
    11{
    22    "name": "wporg-developer",
     3    "version": "1.0.0",
    34    "description": "Theme for WordPress Developer Resources",
    45    "repository": {
     
    1415        "matchdep": "~2.0.0",
    1516        "node-sass": "^6.0.1"
     17    },
     18    "scripts": {
     19        "start": "grunt watch",
     20        "build": "grunt"
    1621    }
    1722}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/page-home-landing.php

    r11903 r12050  
    1717
    1818                <div class="box box-code-ref">
    19                     <h3 class="widget-title"><div class="dashicons dashicons-editor-code"></div><?php _e( 'Code Reference', 'wporg' ); ?></h3>
     19                    <h3><a href="<?php echo esc_url( home_url( '/reference' ) ); ?>" class="widget-title"><div class="dashicons dashicons-editor-code"></div><?php _e( 'Code Reference', 'wporg' ); ?></a></h3>
    2020                    <p class="widget-description"><?php _e( 'Looking for documentation for the codebase?', 'wporg' ); ?></p>
    2121                    <a href="<?php echo esc_url( home_url( '/reference' ) ); ?>" class="go"><?php _e( 'Visit the reference', 'wporg' ); ?></a>
     
    2323
    2424                <div class="box box-coding-standards">
    25                     <h3 class="widget-title"><div class="dashicons dashicons-code-standards"></div><?php _e( 'Coding Standards', 'wporg' ); ?></h3>
     25                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'wpcs-handbook' ) ); ?>" class="widget-title"><div class="dashicons dashicons-code-standards"></div><?php _e( 'Coding Standards', 'wporg' ); ?></a></h3>
    2626                    <p class="widget-description"><?php _e( 'Looking to ensure your code meets the standards?', 'wporg' ); ?></p>
    2727                    <a href="<?php echo esc_url( get_post_type_archive_link( 'wpcs-handbook' ) ); ?>" class="go"><?php _e( 'Follow Standards ', 'wporg' ); ?></a>
     
    2929
    3030                <div class="box box-block-editor">
    31                     <h3 class="widget-title"><div class="dashicons dashicons-edit"></div><?php _e( 'Block Editor', 'wporg' ); ?></h3>
     31                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'blocks-handbook' ) ); ?>" class="widget-title"><div class="dashicons dashicons-edit"></div><?php _e( 'Block Editor', 'wporg' ); ?></a></h3>
    3232                    <p class="widget-description"><?php _e( 'Creating the building blocks of WordPress?', 'wporg' ); ?></p>
    3333                    <a href="<?php echo esc_url( get_post_type_archive_link( 'blocks-handbook' ) ); ?>" class="go"><?php _e( 'Build Blocks ', 'wporg' ); ?></a>
     
    3535
    3636                <div class="box box-apis">
    37                     <h3 class="widget-title"><div class="dashicons dashicons-admin-site-alt3"></div><?php _e( 'Common APIs', 'wporg' ); ?></h3>
     37                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'apis-handbook' ) ); ?>" class="widget-title"><div class="dashicons dashicons-admin-site-alt3"></div><?php _e( 'Common APIs', 'wporg' ); ?></a></h3>
    3838                    <p class="widget-description"><?php _e( 'Interested in interacting with various APIs?', 'wporg' ); ?></p>
    3939                    <a href="<?php echo esc_url( get_post_type_archive_link( 'apis-handbook' ) ); ?>" class="go"><?php _e( 'Utilize APIs', 'wporg' ); ?></a>
     
    4141
    4242                <div class="box box-themes">
    43                     <h3 class="widget-title"><div class="dashicons dashicons-admin-appearance"></div><?php _e( 'Themes', 'wporg' ); ?></h3>
     43                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'theme-handbook' ) ); ?>" class="widget-title"><div class="dashicons dashicons-admin-appearance"></div><?php _e( 'Themes', 'wporg' ); ?></a></h3>
    4444                    <p class="widget-description"><?php _e( 'Want to learn how to start theming WordPress?', 'wporg' ); ?></p>
    4545                    <a href="<?php echo esc_url( get_post_type_archive_link( 'theme-handbook' ) ); ?>" class="go"><?php _e( 'Develop Themes ', 'wporg' ); ?></a>
     
    4747
    4848                <div class="box box-plugins">
    49                     <h3 class="widget-title"><div class="dashicons dashicons-admin-plugins"></div><?php _e( 'Plugins', 'wporg' ); ?></h3>
     49                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'plugin-handbook' ) ); ?>" class="widget-title"><div class="dashicons dashicons-admin-plugins"></div><?php _e( 'Plugins', 'wporg' ); ?></a></h3>
    5050                    <p class="widget-description"><?php _e( 'Ready to dive deep into the world of plugin authoring?', 'wporg' ); ?></p>
    5151                    <a href="<?php echo esc_url( get_post_type_archive_link( 'plugin-handbook' ) ); ?>" class="go"><?php _e( 'Develop Plugins ', 'wporg' ); ?></a>
     
    5353
    5454                <div class="box box-rest-api">
    55                     <h3 class="widget-title"><div class="dashicons dashicons-rest-api"></div><?php _e( 'REST API', 'wporg' ); ?></h3>
     55                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'rest-api-handbook' ) ); ?>" class="widget-title"><div class="dashicons dashicons-rest-api"></div><?php _e( 'REST API', 'wporg' ); ?></a></h3>
    5656                    <p class="widget-description"><?php _e( 'Getting started on making WordPress applications?', 'wporg' ); ?></p>
    5757                    <a href="<?php echo esc_url( get_post_type_archive_link( 'rest-api-handbook' ) ); ?>" class="go"><?php _e( 'Make Applications ', 'wporg' ); ?></a>
     
    5959
    6060                <div class="box box-wp-cli">
    61                     <h3 class="widget-title"><div class="dashicons dashicons-arrow-right-alt2"></div><?php _e( 'WP-CLI', 'wporg' ); ?></h3>
     61                    <h3><a href="<?php echo esc_url( get_post_type_archive_link( 'command' ) ); ?>" class="widget-title"><div class="dashicons dashicons-arrow-right-alt2"></div><?php _e( 'WP-CLI', 'wporg' ); ?></a></h3>
    6262                    <p class="widget-description"><?php _e( 'Want to accelerate your workflow managing WordPress?', 'wporg' ); ?></p>
    6363                    <a href="<?php echo esc_url( get_post_type_archive_link( 'command' ) ); ?>" class="go"><?php _e( 'Run Commands ', 'wporg' ); ?></a>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/page-reference-landing.php

    r9325 r12050  
    1414        <div id="content-area">
    1515            <?php breadcrumb_trail(); ?>
     16
     17            <main id="main" class="site-main" role="main">
     18                <div class="reference-landing">
     19                    <div class="new-in-guide two-columns clear">
     20                        <div class="widget box gray">
     21                        <?php $version = DevHub\get_current_version_term(); ?>
     22                        <?php if ( $version && ! is_wp_error( $version ) ) : ?>
     23                            <h3 class="widget-title"><?php printf( __( 'New &amp; Updated in WordPress %s:', 'wporg' ), substr( $version->name, 0, -2 ) ); ?></h3>
     24                            <div class="widget-content">
     25                                <ul class="unordered-list no-bullets">
     26                                    <?php
     27
     28                                    $list = new WP_Query( array(
     29                                        'posts_per_page' => 15,
     30                                        'post_type'      => DevHub\get_parsed_post_types(),
     31                                        'orderby'        => 'title',
     32                                        'order'          => 'ASC',
     33                                        'tax_query'      => array( array(
     34                                            'taxonomy' => 'wp-parser-since',
     35                                            'field'    => 'ids',
     36                                            'terms'    => $version->term_id,
     37                                        ) ),
     38                                    ) );
     39
     40                                    while ( $list->have_posts() ) : $list->the_post();
     41                                    ?>
     42
     43                                        <li>
     44                                            <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
     45                                                <?php the_title(); ?>
     46                                            </a>
     47                                        </li>
     48
     49                                    <?php endwhile; ?>
     50                                    <li class="view-all-new-in"><a href="<?php echo esc_attr( get_term_link( $version, 'wp-parser-since' ) ); ?>"><?php _e( 'View all&hellip;', 'wporg' ); ?></a></li>
     51                                </ul>
     52                            </div>
     53                        <?php endif; ?>
     54                        </div>
     55                        <div class="widget box gray">
     56                            <h3 class="widget-title"><?php _e( 'API', 'wporg' ); ?></h3>
     57                            <div class="widget-content">
     58                            <?php
     59
     60                            if ( has_nav_menu( 'reference-home-api' ) ) :
     61                                wp_nav_menu(
     62                                    [
     63                                        'theme_location' => 'reference-home-api',
     64                                        'menu_class'     => 'unordered-list no-bullets',
     65                                    ]
     66                                );
     67                            else:
     68                            ?>
     69
     70                                <ul class="unordered-list no-bullets">
     71                                    <li><a href="https://codex.wordpress.org/Dashboard_Widgets_API"><?php _e( 'Dashboard widgets', 'wporg'); ?></a></li>
     72                                    <li><a href="https://codex.wordpress.org/Database_API"><?php _e( 'Database', 'worg' ); ?></a></li>
     73                                    <li><a href="https://codex.wordpress.org/HTTP_API"><?php _e( 'HTTP API', 'wporg' ); ?></a></li>
     74                                    <li><a href="https://codex.wordpress.org/Filesystem_API"><?php _e( 'Filesystem', 'wporg' ); ?></a></li>
     75                                    <li><a href="https://codex.wordpress.org/Global_Variables"><?php _e( 'Global Variables', 'wporg' ); ?></a></li>
     76                                    <li><a href="https://codex.wordpress.org/Metadata_API"><?php _e( 'Metadata', 'wporg' ); ?></a></li>
     77                                    <li><a href="https://codex.wordpress.org/Options_API"><?php _e( 'Options', 'wporg' ); ?></a></li>
     78                                    <li><a href="https://developer.wordpress.org/plugins/"><?php _e( 'Plugins', 'wporg' ); ?></a></li>
     79                                    <li><a href="https://codex.wordpress.org/Quicktags_API"><?php _e( 'Quicktags', 'wporg' ); ?></a></li>
     80                                    <li><a href="https://developer.wordpress.org/rest-api/"><?php _e( 'REST API', 'wporg' ); ?></a></li>
     81                                    <li><a href="https://codex.wordpress.org/Rewrite_API"><?php _e( 'Rewrite', 'wporg' ); ?></a></li>
     82                                    <li><a href="https://codex.wordpress.org/Settings_API"><?php _e( 'Settings', 'wporg' ); ?></a></li>
     83                                    <li><a href="https://codex.wordpress.org/Shortcode_API"><?php _e( 'Shortcode', 'wporg' ); ?></a></li>
     84                                    <li><a href="https://developer.wordpress.org/themes/"><?php _e( 'Theme Modification', 'wporg' ); ?></a></li>
     85                                    <li><a href="https://codex.wordpress.org/Transients_API"><?php _e( 'Transients', 'wporg' ); ?></a></li>
     86                                    <li><a href="https://codex.wordpress.org/XML-RPC_WordPress_API"><?php _e( 'XML-RPC', 'wporg' ); ?></a></li>
     87                                </ul>
     88                            <?php endif; ?>
     89
     90                            </div>
     91                        </div>
     92                    </div><!-- /new-in-guide -->
     93
     94                </div><!-- /reference-landing -->
     95
     96            </main><!-- #main -->
    1697        </div>
    17 
    18         <main id="main" class="site-main" role="main">
    19             <div class="reference-landing">
    20                 <div class="search-guide section clear">
    21                     <h4 class="ref-intro"><?php _e( 'Want to know what&#39;s going on inside WordPress? Search the Code Reference for more information about WordPress&#39; functions, classes, methods, and hooks.', 'wporg' ); ?></h4>
    22                     <h3 class="search-intro"><?php _e( 'Try it out:', 'wporg' ); ?></h3>
    23                     <?php get_search_form(); ?>
    24                 </div><!-- /search-guide -->
    25 
    26                 <div class="topic-guide section">
    27                     <h4><?php _e( 'Or browse through topics:', 'wporg' ); ?></h4>
    28                     <ul class="unordered-list horizontal-list no-bullets">
    29                         <li><a href="<?php echo get_post_type_archive_link( 'wp-parser-function' ) ?>"><?php _e( 'Functions', 'wporg' ); ?></a></li>
    30                         <li><a href="<?php echo get_post_type_archive_link( 'wp-parser-hook' ) ?>"><?php _e( 'Hooks', 'wporg' ); ?></a></li>
    31                         <li><a href="<?php echo get_post_type_archive_link( 'wp-parser-class' ) ?>"><?php _e( 'Classes', 'wporg' ); ?></a></li>
    32                         <li><a href="<?php echo get_post_type_archive_link( 'wp-parser-method' ) ?>"><?php _e( 'Methods', 'wporg' ); ?></a></li>
    33                     </ul>
    34                 </div><!-- /topic-guide -->
    35 
    36                 <div class="new-in-guide section two-columns clear">
    37                     <div class="widget box gray">
    38                     <?php $version = DevHub\get_current_version_term(); ?>
    39                     <?php if ( $version && ! is_wp_error( $version ) ) : ?>
    40                         <h3 class="widget-title"><?php printf( __( 'New &amp; Updated in WordPress %s:', 'wporg' ), substr( $version->name, 0, -2 ) ); ?></h3>
    41                         <div class="widget-content">
    42                             <ul class="unordered-list no-bullets">
    43                                 <?php
    44 
    45                                 $list = new WP_Query( array(
    46                                     'posts_per_page' => 15,
    47                                     'post_type'      => DevHub\get_parsed_post_types(),
    48                                     'orderby'        => 'title',
    49                                     'order'          => 'ASC',
    50                                     'tax_query'      => array( array(
    51                                         'taxonomy' => 'wp-parser-since',
    52                                         'field'    => 'ids',
    53                                         'terms'    => $version->term_id,
    54                                     ) ),
    55                                 ) );
    56 
    57                                 while ( $list->have_posts() ) : $list->the_post();
    58                                 ?>
    59 
    60                                     <li>
    61                                         <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
    62                                             <?php the_title(); ?>
    63                                         </a>
    64                                     </li>
    65 
    66                                 <?php endwhile; ?>
    67                                 <li class="view-all-new-in"><a href="<?php echo esc_attr( get_term_link( $version, 'wp-parser-since' ) ); ?>"><?php _e( 'View all&hellip;', 'wporg' ); ?></a></li>
    68                             </ul>
    69                         </div>
    70                     <?php endif; ?>
    71                     </div>
    72                     <div class="widget box gray">
    73                         <h3 class="widget-title"><?php _e( 'API', 'wporg' ); ?></h3>
    74                         <div class="widget-content">
    75                         <?php
    76 
    77                         if ( has_nav_menu( 'reference-home-api' ) ) :
    78                             wp_nav_menu(
    79                                 [
    80                                     'theme_location' => 'reference-home-api',
    81                                     'menu_class'     => 'unordered-list no-bullets',
    82                                 ]
    83                             );
    84                         else:
    85                         ?>
    86 
    87                             <ul class="unordered-list no-bullets">
    88                                 <li><a href="https://codex.wordpress.org/Dashboard_Widgets_API"><?php _e( 'Dashboard widgets', 'wporg'); ?></a></li>
    89                                 <li><a href="https://codex.wordpress.org/Database_API"><?php _e( 'Database', 'worg' ); ?></a></li>
    90                                 <li><a href="https://codex.wordpress.org/HTTP_API"><?php _e( 'HTTP API', 'wporg' ); ?></a></li>
    91                                 <li><a href="https://codex.wordpress.org/Filesystem_API"><?php _e( 'Filesystem', 'wporg' ); ?></a></li>
    92                                 <li><a href="https://codex.wordpress.org/Global_Variables"><?php _e( 'Global Variables', 'wporg' ); ?></a></li>
    93                                 <li><a href="https://codex.wordpress.org/Metadata_API"><?php _e( 'Metadata', 'wporg' ); ?></a></li>
    94                                 <li><a href="https://codex.wordpress.org/Options_API"><?php _e( 'Options', 'wporg' ); ?></a></li>
    95                                 <li><a href="https://developer.wordpress.org/plugins/"><?php _e( 'Plugins', 'wporg' ); ?></a></li>
    96                                 <li><a href="https://codex.wordpress.org/Quicktags_API"><?php _e( 'Quicktags', 'wporg' ); ?></a></li>
    97                                 <li><a href="https://developer.wordpress.org/rest-api/"><?php _e( 'REST API', 'wporg' ); ?></a></li>
    98                                 <li><a href="https://codex.wordpress.org/Rewrite_API"><?php _e( 'Rewrite', 'wporg' ); ?></a></li>
    99                                 <li><a href="https://codex.wordpress.org/Settings_API"><?php _e( 'Settings', 'wporg' ); ?></a></li>
    100                                 <li><a href="https://codex.wordpress.org/Shortcode_API"><?php _e( 'Shortcode', 'wporg' ); ?></a></li>
    101                                 <li><a href="https://developer.wordpress.org/themes/"><?php _e( 'Theme Modification', 'wporg' ); ?></a></li>
    102                                 <li><a href="https://codex.wordpress.org/Transients_API"><?php _e( 'Transients', 'wporg' ); ?></a></li>
    103                                 <li><a href="https://codex.wordpress.org/XML-RPC_WordPress_API"><?php _e( 'XML-RPC', 'wporg' ); ?></a></li>
    104                             </ul>
    105                         <?php endif; ?>
    106 
    107                         </div>
    108                     </div>
    109                 </div><!-- /new-in-guide -->
    110 
    111             </div><!-- /reference-landing -->
    112 
    113         </main><!-- #main -->
    11498    </div><!-- #primary -->
    11599
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/reference/template-params.php

    r9823 r12050  
    1717            <?php foreach ( $params as $param ) : ?>
    1818                <?php if ( ! empty( $param['variable'] ) ) : ?>
    19                     <dt><?php echo esc_html( $param['variable'] ); ?></dt>
     19                    <dt>
     20                        <code><?php echo esc_html( $param['variable'] ); ?></code>
     21                        <?php if ( ! empty( $param['types'] ) ) : ?>
     22                            <span class="type"><?php echo wp_kses_post( $param['types'] ); ?></span>
     23                        <?php endif; ?>
     24                        <?php if ( ! empty( $param['required'] ) && 'wp-parser-hook' !== get_post_type() ) : ?>
     25                            <span class="required"><?php echo esc_html( $param['required'] ); ?></span>
     26                        <?php endif; ?>
     27                    </dt>
    2028                <?php endif; ?>
    2129                <dd>
    22                     <p class="desc">
    23                         <?php if ( ! empty( $param['types'] ) ) : ?>
    24                             <span class="type"><?php printf( __( '(%s)', 'wporg' ), wp_kses_post( $param['types'] ) ); ?></span>
     30                    <div class="desc">
     31                        <?php if ( ! empty( $param['content'] ) ) : ?>
     32                            <?php if ( $extra = get_param_reference( $param ) ) : ?>
     33                                <span class="description"><?php echo wp_kses_post( $param['content'] ); ?></span>
     34                                <details class="extended-description">
     35                                    <summary>
     36                                        <?php echo esc_html( sprintf( __( 'More Arguments from %s( ... %s )', 'wporg' ), $extra[ 'parent' ], $extra['parent_var'] ) ); ?>
     37                                    </summary>
     38                                    <span class="description"><?php echo wp_kses_post( $extra['content'] ); ?></span>
     39                                </details>
     40                            <?php else : ?>
     41                                <span class="description"><?php echo wp_kses_post( $param['content'] ); ?></span>
     42                            <?php endif; ?>
    2543                        <?php endif; ?>
    26                         <?php if ( ! empty( $param['required'] ) && 'wp-parser-hook' !== get_post_type() ) : ?>
    27                             <span class="required"><?php printf( __( '(%s)', 'wporg' ), esc_html( $param['required'] ) ); ?></span>
    28                         <?php endif; ?>
    29                         <?php if ( ! empty( $param['content'] ) ) : ?>
    30                             <span class="description"><?php echo wp_kses_post( $param['content'] ); ?></span>
    31                         <?php endif; ?>
    32                     </p>
     44                    </div>
    3345                    <?php if ( ! empty( $param['default'] ) ) : ?>
    34                         <p class="default"><?php _e( 'Default value:', 'wporg' );?> <?php echo htmlentities( $param['default'] ); ?></p>
     46                        <p class="default"><?php _e( 'Default:', 'wporg' );?> <code><?php echo htmlentities( $param['default'] ); ?></code></p>
    3547                    <?php endif; ?>
    3648                </dd>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/reference/template-related.php

    r7491 r12050  
    1717    $used_by_to_show = 5;
    1818
     19    if ( $has_uses ) {
     20        $uses_to_show = min( $uses_to_show, split_uses_by_frequent_funcs( $uses->posts ) );
     21    }
     22
    1923    if ( $has_uses || $has_used_by ) :
    2024    ?>
     
    2630            <article class="uses">
    2731                <h3><?php _e( 'Uses', 'wporg' ); ?></h3>
    28                 <table id="uses-table">
     32                <table id="uses-table" data-show="<?php echo esc_attr( $uses_to_show ) ?>">
    2933                    <caption class="screen-reader-text"><?php esc_html_e( 'Uses', 'wporg' ); ?></caption>
    3034                    <thead>
     
    3741                        <?php while ( $uses->have_posts() ) : $uses->the_post(); ?>
    3842                        <tr>
    39                             <td>
    40                                 <span><?php echo esc_attr( get_source_file() ); ?>:</span>
     43                            <td class="related-title">
    4144                                <a href="<?php the_permalink(); ?>"><?php the_title(); ?><?php if ( ! in_array( get_post_type(), array( 'wp-parser-class', 'wp-parser-hook' ), true ) ) : ?>()<?php endif; ?></a>
     45                                <span><?php echo esc_attr( get_source_file() ); ?></span>
    4246                            </td>
    4347                            <td class="related-desc">
     
    5256                <a href="#" class="show-more"><?php
    5357                    /* translators: %d: remaining 'uses' count */
    54                     printf( _n( 'Show %d more use', 'Show %d more uses', $uses->post_count - $uses_to_show, 'wporg' ),
     58                    printf( _n( 'Show %s more use', 'Show %s more uses', $uses->post_count - $uses_to_show, 'wporg' ),
    5559                        number_format_i18n( $uses->post_count - $uses_to_show )
    5660                    );
     
    6670            <article class="used-by">
    6771                <h3><?php esc_html_e( 'Used By', 'wporg' ); ?></h3>
    68                 <table id="used-by-table">
     72                <table id="used-by-table" data-show="<?php echo esc_attr( $used_by_to_show ) ?>">
    6973                    <caption class="screen-reader-text"><?php esc_html_e( 'Used By', 'wporg' ); ?></caption>
    7074                    <thead>
     
    7781                        <?php while ( $used_by->have_posts() ) : $used_by->the_post(); ?>
    7882                        <tr>
    79                             <td>
    80                                 <span><?php echo esc_attr( get_source_file() ); ?>:</span>
     83                            <td class="related-title">
    8184                                <a href="<?php the_permalink(); ?>"><?php the_title(); ?><?php if ( ! in_array( get_post_type(), array( 'wp-parser-class', 'wp-parser-hook' ), true ) ) : ?>()<?php endif; ?></a>
     85                                    <span><?php echo esc_attr( get_source_file() ); ?></span>
    8286                            </td>
    8387                            <td class="related-desc">
     
    9296                <a href="#" class="show-more"><?php
    9397                    /* translators: %d: remaining 'used by' count */
    94                     printf( _n( 'Show %d more used by', 'Show %d more used by', $used_by->post_count - $used_by_to_show, 'wporg' ),
     98                    printf( _n( 'Show %s more used by', 'Show %s more used by', $used_by->post_count - $used_by_to_show, 'wporg' ),
    9599                        number_format_i18n( $used_by->post_count - $used_by_to_show )
    96100                    );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/reference/template-source.php

    r11311 r12050  
    1111$source_file = get_source_file();
    1212if ( ! empty( $source_file ) ) :
     13    $source_code = post_type_has_source_code() ? get_source_code() : '';
    1314    ?>
    1415    <hr />
     
    1617        <h2><?php _e( 'Source', 'wporg' ); ?></h2>
    1718        <p>
    18             <?php printf( __( 'File: %s', 'wporg' ),
    19                 '<a href="' . esc_url( get_source_file_archive_link( $source_file ) ) . '">' . esc_html( $source_file ) . '</a>'
    20             ); ?>
     19            <?php
     20            printf(
     21                __( 'File: %s.', 'wporg' ),
     22                '<code>' . esc_html( $source_file ) . '</code>'
     23            );
     24            ?>
     25
     26            <?php
     27            printf(
     28                '<a href="%s">%s</a>',
     29                esc_url( get_source_file_archive_link( $source_file ) ),
     30                __( 'View all references', 'wporg' )
     31            );
     32            ?>
    2133        </p>
    2234
    23         <?php if ( post_type_has_source_code() ) : ?>
    24             <div class="source-code-container">
    25                 <pre class="brush: php; toolbar: false; first-line: <?php echo esc_attr( get_post_meta( get_the_ID(), '_wp-parser_line_num', true ) ); ?>"><?php echo htmlentities( get_source_code() ); ?></pre>
    26             </div>
     35        <?php if ( ! empty( $source_code ) ) : ?>
     36            <?php
     37                echo do_blocks(
     38                    sprintf(
     39                        '<!-- wp:code {"lineNumbers":true} --><pre class="wp-block-code" data-start="%1$s" aria-label="%2$s"><code lang="php" class="language-php line-numbers">%3$s</code></pre><!-- /wp:code -->',
     40                        esc_attr( get_post_meta( get_the_ID(), '_wp-parser_line_num', true ) ),
     41                        __( 'Function source code', 'wporg' ),
     42                        htmlentities( $source_code )
     43                    )
     44                );
     45            ?>
     46
    2747            <p class="source-code-links">
    28                 <span>
    29                     <a href="#" class="show-complete-source"><?php _e( 'Expand full source code', 'wporg' ); ?></a>
    30                     <a href="#" class="less-complete-source"><?php _e( 'Collapse full source code', 'wporg' ); ?></a>
    31                 </span>
    3248                <span><a href="<?php echo get_source_file_link(); ?>"><?php _e( 'View on Trac', 'wporg' ); ?></a></span>
    3349                <span><a href="<?php echo get_github_source_file_link(); ?>"><?php _e( 'View on GitHub', 'wporg' ); ?></a></span>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/admin.scss

    r7816 r12050  
     1// stylelint-disable selector-id-pattern -- These are generated names.
     2
    13/* =Admin CSS
    24----------------------------------------------- */
     
    2527
    2628/* Explanations */
    27 
    2829.fixed {
    2930    .column-has_explanation {
     
    4041        margin-top: 4px;
    4142
    42         &:focus, &:hover {
     43        &:focus,
     44        &:hover {
    4345            color: #0073aa;
    4446        }
     
    4951
    5052        .screen-reader-text {
     53
    5154            @media screen and (max-width: 782px) {
    5255                position: static;
     
    5962        }
    6063
    61         & [aria-hidden="true"] {
     64        [aria-hidden="true"] {
     65
    6266            @media screen and (max-width: 782px) {
    6367                display: none;
     
    8185            padding-left: 0;
    8286        }
     87
    8388        &:nth-child(n+2) {
    8489            padding-left: 8px;
     
    8994
    9095.status {
    91     font-weight: bold;
     96    font-weight: 700;
    9297
    9398    &.pending {
    94         color: red;
     99        color: #f00;
    95100    }
    96101
    97102    &.publish {
    98         color: green;
     103        color: #008000;
    99104    }
    100105}
     106
    101107.post-type-wp-parser-function,
    102108.post-type-wp-parser-class,
     
    108114            padding-bottom: 10px;
    109115        }
     116
    110117        td {
    111118            padding: 10px;
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-developer/scss/main.scss

    r11910 r12050  
     1// stylelint-disable no-duplicate-selectors -- duplicates OK when nested.
     2// stylelint-disable max-line-length -- Comments may be longer.
     3// stylelint-disable font-family-no-missing-generic-family-keyword -- dashicons OK.
     4// stylelint-disable function-url-quotes -- Allow quotes in `url("…")`.
     5
    16@import "reset";
    27@import "global";
    38
    49.home .devhub-wrap {
    5     h1, h2, h3, h4, h5, h6 {
     10    h1,
     11    h2,
     12    h3,
     13    h4,
     14    h5,
     15    h6 {
    616        font-family: "Open Sans", sans-serif;
    717    }
    818    padding-bottom: 0;
     19
    920    #content {
    1021        padding: 0;
     
    1425.devhub-wrap {
    1526    padding-bottom: 1.5em;
     27
    1628    *,
    17     *:before,
    18     *:after {
     29    *::before,
     30    *::after {
    1931        -moz-box-sizing: border-box;
    2032        -webkit-box-sizing: border-box;
     
    2436    /* Override inline style from wporg-markdown plugin. */
    2537    a.github-edit {
    26         padding: 0 .6em 0;
    27     }
    28 
    29     #content, #content-area {
    30         padding: 0 #{"max( 20px, 2% )"};
    31 
    32         .toc-heading {
    33             clear: left;
    34         }
     38        padding: 0 0.6em 0;
     39    }
     40
     41    #content,
     42    #content-area {
     43        padding: 0 12px; // Matches .site-branding padding
    3544
    3645        table {
    3746            border: 1px solid #f0f0f0;
    38             @media ( max-width: 991px ) {
    39                 overflow-x: scroll;
    40                 display: block;
    41             }
     47
    4248            th {
    4349                padding: 1em;
     
    4551                background: #f0f0f0;
    4652            }
     53
    4754            td {
    4855                padding: 0.8em 1em;
     
    5158        }
    5259    }
     60
     61    @media ( min-width: 889px ) {
     62        #content {
     63            padding: 0;
     64        }
     65
     66        #content-area {
     67            padding: 0 24px;
     68        }
     69    }
     70
    5371    #content-area,
    5472    .inner-wrap {
    5573        margin: 2rem auto 0;
    56         max-width: 60em;
    57     }
     74        max-width: $devhub-wrap-content-width;
     75    }
     76
    5877    .page-header {
    5978        margin-top: 1em;
     
    89108        font-weight: 300;
    90109        font-size: 28px;
    91         line-height: 1em;
    92         text-shadow: #fff 0px 1px 0px;
     110        line-height: 1;
     111        text-shadow: #fff 0 1px 0;
    93112        font-family: $header-font;
    94113    }
    95114
    96115    h1 {
    97         font-size: 28px;
    98116        font-size: 3rem;
    99         line-height: 32px;
    100         line-height: 3.2rem;
     117        line-height: 1.067;
    101118        font-weight: 300;
    102119        margin-bottom: 1.5rem;
    103120    }
     121
    104122    h2 {
    105         font-size: 22px;
    106123        font-size: 2.2rem;
    107         line-height: 26px;
    108         line-height: 2.6rem;
     124        line-height: 1.18;
    109125        font-weight: 300;
    110126    }
     127
    111128    h3 {
    112         font-size: 20px;
    113129        font-size: 2rem;
    114         line-height: 24px;
    115         line-height: 2.4rem;
     130        line-height: 1.2;
    116131        font-weight: 300;
    117132    }
     133
    118134    h4 {
    119         font-size: 18px;
    120135        font-size: 1.8rem;
    121         line-height: 22px;
    122         line-height: 2.2rem;
     136        line-height: 1.2;
    123137        border-bottom: none;
    124138        font-weight: 300;
    125139
    126140        .dashicons {
    127             font-size: 22px;
    128141            font-size: 2.2rem;
    129             line-height: 22px;
    130             line-height: 2.2rem;
    131             height: 22px;
    132             width: 22px;
    133             height: 2.2rem;
    134             width: 2.2rem;
     142            line-height: 1;
     143            height: 1em;
     144            width: 1em;
    135145        }
    136146    }
     
    151161        border-radius: 3px;
    152162        background: #fff;
    153         color: rgba(0, 0, 0, .8);
     163        color: rgba(0, 0, 0, 0.8);
    154164        cursor: pointer; /* Improves usability and consistency of cursor style between image-type 'input' and others */
    155         font-size: 16px;
    156165        font-size: 1.6rem;
    157166        line-height: 1.1;
    158167        float: none;
    159168        height: auto;
    160         padding: .6em 1.8em;
     169        padding: 0.6em 1.8em;
    161170        text-decoration: none;
    162171        -webkit-appearance: button; /* Corrects inability to style clickable 'input' types in iOS */
     172
    163173        &:hover {
    164174            border-color: #ccc #bbb #aaa #bbb;
    165175            background: #f0f0f0;
    166176        }
    167         &:focus, &:active {
     177
     178        &:focus,
     179        &:active {
    168180            border-color: #aaa #bbb #bbb #bbb;
    169181            background: #f0f0f0;
    170             -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4);
    171             box-shadow: inset 0 1px 0 rgba(120,200,230,0.6), 1px 1px 2px rgba(0,0,0,0.4);
    172         }
     182            box-shadow: 0 0 3px get-color(blue-40);
     183        }
     184
    173185        &.shiny-blue {
    174             background-color: #21759b;
    175             background-image: -webkit-gradient(linear, left top, left bottom, from(#2a95c5), to(#21759b));
    176             background-image: -webkit-linear-gradient(top, #2a95c5, #21759b);
    177             background-image:    -moz-linear-gradient(top, #2a95c5, #21759b);
    178             background-image:     -ms-linear-gradient(top, #2a95c5, #21759b);
    179             background-image:      -o-linear-gradient(top, #2a95c5, #21759b);
    180             background-image:   linear-gradient(to bottom, #2a95c5, #21759b);
    181             border-color: #21759b;
    182             border-bottom-color: #1e6a8d;
    183             -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
    184             box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
     186            background-color: get-color(blue-50);
     187            border-color: get-color(blue-50);
     188            border-bottom-color: get-color(blue-70);
    185189            color: #fff;
    186190            text-decoration: none;
    187             text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
    188             padding: 3px 8px;
    189             &:hover {
    190                 background-color: #278ab7;
    191                 background-image: -webkit-gradient(linear, left top, left bottom, from(#2e9fd2), to(#21759b));
    192                 background-image: -webkit-linear-gradient(top, #2e9fd2, #21759b);
    193                 background-image:    -moz-linear-gradient(top, #2e9fd2, #21759b);
    194                 background-image:     -ms-linear-gradient(top, #2e9fd2, #21759b);
    195                 background-image:      -o-linear-gradient(top, #2e9fd2, #21759b);
    196                 background-image:   linear-gradient(to bottom, #2e9fd2, #21759b);
    197                 border-color: #1b607f;
    198                 -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
    199                 box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
     191
     192            &:hover,
     193            &:focus,
     194            &:active {
     195                background-color: get-color(blue-60);
     196                border-color: get-color(blue-80);
    200197                color: #fff;
    201                 text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
    202             }
    203         }
     198            }
     199
     200            &:focus,
     201            &:active {
     202                box-shadow: 0 0 3px 1px get-color(yellow-30);
     203            }
     204        }
     205
    204206        .dashicons {
     207            transform: scale(-1, 1);
    205208            vertical-align: text-bottom;
    206209        }
     
    210213        .three-columns a.button {
    211214            max-width: 100%;
    212             padding: .6em 1em;
    213             font-size: 14px;
     215            padding: 0.6em 1em;
    214216            font-size: 1.4rem;
    215217        }
     218
    216219        .three-columns .dashicons {
    217220            width: 16px;
     
    226229        padding: 0; /* Addresses excess padding in IE8/9 */
    227230    }
     231
    228232    input[type="search"] {
    229233        -webkit-appearance: textfield; /* Addresses appearance set to searchfield in S5, Chrome */
    230         -webkit-box-sizing: content-box; /* Addresses box sizing set to border-box in S5, Chrome (include -moz to future-proof) */
    231         -moz-box-sizing:    content-box;
    232         box-sizing:         content-box;
    233     }
    234     input[type="search"]::-webkit-search-decoration { /* Corrects inner padding displayed oddly in S5, Chrome on OSX */
    235         -webkit-appearance: none;
    236     }
    237     button::-moz-focus-inner,
    238     input::-moz-focus-inner { /* Corrects inner padding and border displayed oddly in FF3/4 www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ */
    239         border: 0;
    240         padding: 0;
    241     }
     234        box-sizing: content-box;
     235    }
     236
     237    input[type="search"]::-webkit-search-decoration {
     238        -webkit-appearance: none; /* Corrects inner padding displayed oddly in S5, Chrome on OSX */
     239    }
     240
    242241    input[type="text"],
    243242    input[type="email"],
     
    250249        border: 1px solid #ccc;
    251250        border-radius: 3px;
     251
    252252        &:focus {
    253253            color: #111;
    254254        }
    255255    }
     256
    256257    textarea {
    257258        overflow: auto; /* Removes default vertical scrollbar in IE6/7/8/9 */
     
    263264    }
    264265
    265     /* Text meant only for screen readers */
    266     .screen-reader-text {
    267         clip: rect(1px, 1px, 1px, 1px);
    268         position: absolute !important;
    269     }
    270 
    271     .screen-reader-text:hover,
    272     .screen-reader-text:active,
    273     .screen-reader-text:focus {
    274         background-color: #f1f1f1;
     266    select {
     267        appearance: none;
     268        background-color: $color-white;
     269        background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' width='24' height='24' aria-hidden='true'%3E%3Cpath d='M17.5 11.6 12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z'/%3E%3C/svg%3E%0A");
     270        background-position: right center;
     271        background-repeat: no-repeat;
     272        background-size: 1.5em 1.5em;
     273        padding-right: 2em;
     274        color: get-color(gray-70);
     275        border: 1px solid get-color(gray-70);
    275276        border-radius: 3px;
    276         box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
    277         clip: auto !important;
    278         color: #21759b;
    279         display: block;
    280         font-size: 14px;
    281         font-weight: bold;
    282         height: auto;
    283         left: 5px;
    284         line-height: normal;
    285         padding: 15px 23px 14px;
    286         text-decoration: none;
    287         top: 5px;
    288         width: auto;
    289         z-index: 100000; /* Above WP toolbar */
    290277    }
    291278
    292279    /* Clearing */
    293     .clear:before,
    294     .clear:after,
    295     .entry-content:before,
    296     .entry-content:after,
    297     .comment-content:before,
    298     .comment-content:after,
    299     .site-content:before,
    300     .site-content:after,
    301     .site-footer:before,
    302     .site-footer:after {
    303         content: '';
     280    .clear::before,
     281    .clear::after,
     282    .entry-content::before,
     283    .entry-content::after,
     284    .comment-content::before,
     285    .comment-content::after,
     286    .site-content::before,
     287    .site-content::after,
     288    .site-footer::before,
     289    .site-footer::after,
     290    section::after {
     291        content: "";
    304292        display: table;
    305293    }
    306294
    307     .clear:after,
    308     .entry-content:after,
    309     .comment-content:after,
    310     .site-content:after,
    311     .site-footer:after {
     295    .clear::after,
     296    .entry-content::after,
     297    .comment-content::after,
     298    .site-content::after,
     299    .site-footer::after,
     300    section::after {
    312301        clear: both;
    313302    }
     
    315304    /* =Content
    316305    ----------------------------------------------- */
     306
    317307    .hentry {
    318308        margin: 0;
    319309    }
     310
    320311    .byline,
    321312    .updated {
    322313        display: none;
    323314    }
     315
    324316    .single .byline,
    325317    .group-blog .byline {
    326318        display: inline;
    327319    }
     320
    328321    .page-content,
    329322    .entry-content,
     
    331324        margin: 1.5em 0 0;
    332325    }
     326
    333327    .page-links {
    334328        clear: both;
     
    342336        margin: 0;
    343337    }
     338
    344339    .tablist li {
    345340        display: inline-block;
    346341        list-style: none;
    347342    }
     343
    348344    .tablist a {
    349         border-color: none;
     345        border-color: transparent;
    350346        background-color: transparent;
    351         border-color: transparent;
    352347        border-image: none;
    353348        border-style: solid solid none;
    354349        border-width: 1px 1px 0;
    355350        display: inline-block;
    356         padding: .5em 1em;
    357         margin-bottom:-1px;
    358     }
     351        padding: 0.5em 1em;
     352        margin-bottom: -1px;
     353    }
     354
    359355    .tablist a[aria-selected],
    360356    .tablist a:focus {
     
    364360        color: #333;
    365361    }
     362
    366363    .tab-section {
    367364        margin-top: 0;
     
    369366        border: none;
    370367    }
     368
    371369    .tab-section[aria-hidden="true"] {
    372370        display: none;
    373371    }
     372
    374373    .tab-section:focus {
    375374        background: #eee;
     
    388387        padding: 0;
    389388    }
     389
    390390    .wp-caption {
    391391        border: 1px solid #ccc;
     
    393393        max-width: 100%;
    394394    }
     395
    395396    .wp-caption img[class*="wp-image-"] {
    396397        display: block;
     
    398399        max-width: 98%;
    399400    }
     401
    400402    .wp-caption-text {
    401403        text-align: center;
    402404    }
     405
    403406    .wp-caption .wp-caption-text {
    404407        margin: 0.8075em 0;
    405408    }
     409
    406410    .site-main .gallery {
    407411        margin-bottom: 1.5em;
    408412    }
     413
    409414    .site-main .gallery a img {
    410415        border: none;
     
    412417        max-width: 90%;
    413418    }
     419
    414420    .site-main .gallery dd {
    415421        margin: 0;
     
    437443    }
    438444
    439     .widget-area .search-section.hide-if-js {
    440         display: block;
    441     }
    442 
    443445    /* =Infinite Scroll
    444446    ----------------------------------------------- */
     
    456458
    457459
    458 
    459460    /*
    460461     * Header area
     
    468469        font-size: 1.3rem;
    469470    }
     471
    470472    .breadcrumb-trail {
    471473        margin-bottom: 2rem;
     
    475477        }
    476478    }
     479
    477480    h1.entry-title,
    478481    h1.page-title {
    479482        font-weight: 300;
    480         font-size: 37px;
    481483        font-size: 3.7rem;
    482484        color: #606060;
    483485        text-align: center;
     486
    484487        a {
    485488            text-decoration: none;
     
    491494    h2.entry-title {
    492495        text-align: left;
    493         font-size: 30px;
    494496        font-size: 3rem;
    495         padding: 0 0 24px;
    496497        padding: 0 0 2.4rem;
    497498
     
    507508
    508509    .home-landing .section {
    509         padding: 50px 0 10px;
    510510        padding: 5rem 0 1rem;
    511         margin-top: 60px;
    512511        margin-top: 6rem;
    513512        overflow: auto;
     
    515514        .no-bullets {
    516515            li {
    517                 line-height: 20px;
    518                 line-height: 2rem;
    519                 margin-bottom: 12.5px;
     516                line-height: 1.5;
    520517                margin-bottom: 1.25rem;
    521518
     
    528525
    529526        .widget-title {
    530             line-height: 60px;
    531             line-height: 6rem;
     527            line-height: 2.4;
     528            cursor: pointer;
     529            text-decoration: none;
     530            color: inherit;
     531            font-weight: inherit;
    532532        }
    533533
     
    542542
    543543    }
     544
    544545    .color.section {
    545546        color: #fff;
    546547    }
     548
    547549    .section {
     550
    548551        /*background: #0073aa;*/
    549         padding: 30px 0;
    550552        padding: 3rem 0;
    551553
    552554        .box {
    553555            text-align: center;
    554 
    555             padding: 0 30px 90px;
    556556            padding: 0 3rem 9rem;
    557557            width: 320px;
     
    559559            .widget-description {
    560560                padding: 1em 0 0;
    561                 margin-bottom: 5px;
    562561                margin-bottom: 1rem;
    563562            }
    564563        }
     564
    565565        &.search-guide {
    566             padding-top: 60px;
    567566            padding-top: 6rem;
    568567            margin-top: 0;
     
    574573
    575574        .widget-title {
    576 
    577             font-size: 25px;
    578575            font-size: 2.5rem;
    579             line-height: 20px;
    580             line-height: 2rem;
     576            line-height: 0.8;
     577
    581578            .dashicons {
    582579                color: #222;
    583                 font-size: 108px;
    584580                font-size: 10.8rem;
    585                 line-height: 84px;
    586                 line-height: 8.4rem;
    587                 height: 84px;
    588                 width: 84px;
     581                line-height: 0.778;
    589582                height: 8.4rem;
    590583                width: 8.4rem;
    591                 display: block;
    592584                margin: 0 auto;
    593585                opacity: 0.4;
     586                display: flex;
     587                align-items: center;
     588                flex-direction: column;
    594589
    595590                &.dashicons-rest-api {
    596                     font-size:90px;
    597                     font-size:9rem;
     591                    font-size: 9rem;
    598592                }
    599593            }
    600594        }
     595
    601596        .three-columns .widget-title {
     597
    602598            @media ( min-width: 43em ) and ( max-width: 915px ) {
    603                 font-size: 35px;
    604599                font-size: 3.5rem;
    605600            }
     
    611606        background: #797878;
    612607        color: #fff;
     608
    613609        h2,
    614610        h3,
     
    616612            color: #fff;
    617613        }
     614
    618615        .inner-wrap {
    619             max-width: 760px;
    620616            max-width: 76rem;
    621617            margin: 1.2em auto 0;
     
    627623                text-align: center;
    628624            }
     625
    629626            .code-ref-right {
    630627                float: left;
     
    644641                    text-align: center;
    645642                }
     643
    646644                .code-ref-left .widget-description {
    647645                    margin-left: 0;
     
    658656        .widget-title {
    659657            font-weight: 300;
    660             font-size: 50px;
    661658            font-size: 5rem;
    662             line-height: 68px;
    663             line-height: 6.8rem;
     659            line-height: 1.36;
     660
    664661            .dashicons {
    665                 font-size: 68px;
    666662                font-size: 6.8rem;
    667                 line-height: 68px;
    668                 line-height: 6.8rem;
    669                 height: 6.8px;
    670                 width: 6.8px;
     663                line-height: 1;
    671664                height: 6.8rem;
    672665                width: 6.8rem;
    673666            }
     667
    674668            @media ( min-width: 43em ) and ( max-width: 915px ) {
    675                 font-size: 35px;
    676669                font-size: 3.5rem;
    677670            }
    678671        }
     672
    679673        .widget-description {
    680             margin-left: 85px;
    681674            margin-left: 8.5rem;
    682675        }
     
    687680        background: #f2f2f2;
    688681        color: #606060;
     682
    689683        .widget-title {
    690684            color: #606060;
     
    692686
    693687            a {
    694                 color: #2D96C2;
    695             }
    696         }
     688                color: #2d96c2;
     689            }
     690        }
     691
    697692        a {
    698693            color: #606060;
    699694            text-decoration: none;
    700695
    701             &.make-wp-link:after {
     696            &.make-wp-link::after {
    702697                content: "\f345";
    703                 font-family: 'dashicons';
     698                font-family: dashicons;
    704699                margin-left: 4px;
    705700                vertical-align: middle;
     
    709704
    710705    .section .home-primary-content {
    711         max-width: 600px;
    712706        max-width: 60rem;
    713707        margin: 0 auto;
     
    715709
    716710    .box {
    717         padding: 30px;
    718711        padding: 3rem;
    719712        float: left;
    720713        clear: none;
    721714    }
     715
    722716    .three-columns .box {
     717
    723718        @media ( min-width: 43em ) and ( max-width: 915px ) {
    724             padding: 30px 20px;
    725719            padding: 3rem 2rem;
    726         }
    727     }
    728 
    729     .reference-landing .section.search-section {
    730         padding-top: 0;
    731     }
    732 
    733     div#inner-search {
    734         background-color: #666;
    735         margin-bottom: 1em;
    736         padding-top: 2px;
    737         .section.search-section {
    738             color: #ffffff;
    739         }
    740         div#inner-search-icon-container {
    741             margin: 0 auto;
    742             max-width: 60em;
    743             cursor: pointer;
    744             div#inner-search-icon {
    745                 background-color: #666;
    746                 color: #ffffff;
    747                 text-align: center;
    748                 margin-right: 26px;
    749                 margin-left: 4px;
    750                 float: right;
    751                 padding: 5px;
    752                 -webkit-border-bottom-right-radius: 5px;
    753                 -webkit-border-bottom-left-radius: 5px;
    754                 -moz-border-radius-bottomright: 5px;
    755                 -moz-border-radius-bottomleft: 5px;
    756                 border-bottom-right-radius: 5px;
    757                 border-bottom-left-radius: 5px;
    758                 .dashicons-search {
    759                     height: auto;
    760                     width: auto;
    761                     &:before {
    762                         font-size: 36px;
    763                         line-height: 36px;
    764                     }
    765                 }
    766             }
    767720        }
    768721    }
     
    771724        margin: 5rem 0;
    772725        font-size: 1.5rem;
     726        line-height: 1.5;
     727
     728        select,
    773729        input[type="submit"] {
    774             margin-left: .5em;
    775             padding: 0.2em 0.5em;
    776             line-height: 1;
    777             font-size: 1.5rem;
    778         }
    779     }
    780 
    781     .searchform {
    782         overflow: hidden;
    783         height: auto;
    784         position: relative;
    785         input[type="text"] {
    786             border-radius: 0;
    787             margin: 0 auto;
    788             padding: 0.5em;
    789             width: 100%;
    790         }
    791         .button-search {
    792             background: transparent;
    793             border: none;
    794             border-radius: 0;
    795             box-shadow: none;
    796             color: #32373c;
    797             display: block;
    798             height: 40px;
    799             padding: 0.5rem 1rem;
    800             position: absolute;
    801             right: 0;
    802             top: 0;
    803             text-shadow: none;
    804         }
    805         label {
    806             width: 560px;
    807             width: 56rem;
    808             max-width: 100%;
    809             margin-right: 15px;
    810             display: inline-block;
    811             float: left;
    812             .search-field input[type="text"] {
    813                 width: 100%;
    814             }
    815         }
    816         div {
    817             overflow: auto;
    818         }
    819         .search-post-type {
    820             margin-top: 1em;
    821 
    822             label {
    823                 border-right: 1px solid #ccc;
    824                 float: none;
    825                 width: inherit;
    826                 margin-left: 1em;
    827                 margin-right: 0;
    828                 padding-left: 0;
    829                 padding-right: 1.3em;
    830                 input {
    831                     margin-bottom: 6px;
    832                     padding-left: 0.5em;
    833                     vertical-align: middle;
    834                 }
    835             }
    836             label:last-child {
    837                 border-right-width: 0;
    838             }
    839 
    840             @media ( max-width: 688px ) {
    841                 span {
    842                     display: block;
    843                 }
    844 
    845                 label {
    846                     margin-left: 0;
    847                     margin-right: 1em;
    848                     width: 130px;
    849 
    850                     &:last-child {
    851                         margin-right: 0;
    852                         padding-right: 0;
    853                         width: initial;
    854                     }
    855                 }
    856             }
     730            margin: 0 0 0 0.5em;
     731            padding: 0.333em 1em;
     732            font-size: inherit;
     733            line-height: inherit;
     734        }
     735
     736        select {
     737            padding-right: 2em;
    857738        }
    858739    }
    859740
    860741    .search-results-summary {
    861         font-style: italic;
    862742        margin-bottom: 1em;
    863     }
    864 
    865     .reference-landing .section, .search-section {
    866         max-width: 970px;
     743        padding: 2rem;
     744        background: get-color(gray-2);
     745        border-radius: 2px;
     746        font-size: 14px;
     747    }
     748
     749    .reference-landing .section {
    867750        max-width: 97rem;
    868751        margin: 0 auto;
     
    884767                margin-bottom: 0;
    885768            }
     769
    886770            &.search-guide {
    887771                padding-bottom: 0;
    888772            }
    889             &.section.topic-guide, &.section.new-in-guide  {
     773
     774            &.section.topic-guide,
     775            &.section.new-in-guide {
    890776                padding-top: 0;
    891777            }
     
    896782    .sidebar .box {
    897783        padding: 0;
    898         border: 2px solid #cccccc;
    899         background-color: #eeeeee;
     784        border: 2px solid #ccc;
     785        background-color: #eee;
     786
    900787        ul {
    901788            padding: 2em;
     
    904791
    905792        .widget-title {
    906             padding: 10px 30px;
    907793            padding: 1rem 30px;
    908             font-size: 16px;
    909794            font-size: 1.6rem;
    910795        }
     796
    911797        .widget-content {
    912             padding: 16px 30px;
    913798            padding: 1.6rem 3rem;
    914799        }
     
    924809        width: 31%;
    925810        margin: 1.15%;
     811
    926812        @media ( min-width: 43em ) and ( max-width: 915px ) {
    927813            margin: 1% 0;
     
    931817    .two-columns .box {
    932818        width: 48%;
    933         margin: 1% 1% 1% 0;
     819        margin-top: 1%;
     820        margin-bottom: 1%;
    934821    }
    935822
    936823    .new-in-guide.two-columns .box {
    937         width: 43%;
     824        margin-left: 1%;
     825
    938826        @media ( max-width: 688px ) {
    939827            width: 100%;
    940         }
    941     }
     828            margin-left: 0;
     829        }
     830    }
     831
    942832    .new-in-guide.two-columns .box:first-child {
    943         width: 53%;
     833        width: 48%;
     834        margin-right: 1%;
     835        margin-left: 0;
     836
    944837        @media ( max-width: 688px ) {
    945838            width: 100%;
     
    954847        padding: 0;
    955848    }
     849
    956850    .horizontal-list {
    957851        display: block;
     
    960854        margin: 0;
    961855        padding: 0;
    962         text-align: center;
    963     }
     856    }
     857
    964858    .horizontal-list li {
    965859        display: inline;
    966860    }
     861
    967862    .horizontal-list li a {
    968         padding: 0px 40px;
    969863        padding: 0 4rem;
    970864        border-left: 1px solid #ccc;
    971865    }
     866
    972867    .horizontal-list li:first-child a {
    973868        padding-left: 0;
     
    993888        background: #fff;
    994889        border: 1px solid #d8d8d8;
     890
    995891        .widget-title {
    996             color: #666666;
     892            color: #666;
    997893            background: #d8d8d8;
    998894            text-transform: uppercase;
     
    1005901        padding: 0;
    1006902        margin: 0;
    1007         font-size: 13px;
    1008903        font-size: 1.3rem;
    1009         line-height: 30px;
    1010         line-height: 3rem;
     904        line-height: 2.3;
    1011905    }
    1012906
     
    1014908        font-weight: 400;
    1015909    }
     910
    1016911    .go {
    1017912        color: #4ca6cf;
     
    1022917            margin: 24px 0;
    1023918            font-size: 20px;
    1024             font-weight: normal;
    1025         }
    1026     }
    1027     .wp-parser-class, .wp-parser-function, .wp-parser-hook, .wp-parser-method {
     919            font-weight: 400;
     920        }
     921    }
     922
     923    .wp-parser-class,
     924    .wp-parser-function,
     925    .wp-parser-hook,
     926    .wp-parser-method {
    1028927        border-bottom: 1px solid #dfdfdf;
    1029928
     
    1032931            padding-left: 100px;
    1033932            text-indent: -100px;
    1034             color: #24831d;
    1035             font-family: $code-font;
    1036933            font-size: 20px;
    1037             .hook-func {
    1038                 color: #888888;
    1039             }
    1040             .arg-type {
    1041                 color: #cd2f23;
    1042                 font-style: italic;
    1043             }
    1044             .arg-name {
    1045                 color: #0f55c8;
    1046             }
    1047             .arg-default {
    1048                 color: #000000;
    1049             }
    1050             a:hover {
    1051                 border-bottom: 1px dotted #21759b;
    1052             }
    1053         }
     934            line-height: 1.6;
     935        }
     936
    1054937        h2 {
    1055938            font-family: $serif-font;
    1056             margin-bottom: .5em;
    1057         }
    1058         .return-type {
    1059             font-style: italic;
    1060         }
    1061         .parameters {
     939            margin-bottom: 0.5em;
     940        }
     941
     942        .toc-header {
     943            margin-top: 0 !important;
     944        }
     945
     946        h1,
     947        .signature-highlight {
     948            color: get-color(green-50);
     949            font-family: $code-font;
     950            font-weight: 400;
     951
     952            .hook-func,
     953            .keyword {
     954                color: get-color(gray-50);
     955            }
     956
     957            .arg-type {
     958                color: get-color(red-50);
     959                font-style: italic;
     960                font-size: 0.9em;
     961            }
     962
     963            .arg-name {
     964                color: get-color(blue-60);
     965            }
     966
     967            .arg-default {
     968                color: $color-black;
     969            }
     970
     971            a {
     972                text-decoration: none;
     973                color: inherit;
     974
     975                &:hover {
     976                    border-bottom: 1px dotted get-color(blue-50);
     977                }
     978            }
     979        }
     980
     981        .return .return-type {
     982            margin-right: 8px;
     983            font-size: 14px;
     984        }
     985
     986        .return-type,
     987        .return .type,
     988        .parameters .type {
     989            color: get-color(red-50);
     990
     991            a {
     992                color: inherit;
     993                text-decoration: none;
     994                border-bottom: 1px dotted get-color(gray-70);
     995
     996                &:hover {
     997                    border-bottom-style: solid;
     998                }
     999            }
     1000        }
     1001
     1002        .parameters,
     1003        .return {
    10621004            p {
    10631005                margin-bottom: 0;
    10641006            }
     1007
     1008            dt code {
     1009                font-weight: 400;
     1010            }
     1011
    10651012            dd {
    1066                 .desc {
    1067                     .type, .required {
    1068                         font-style: italic;
     1013                margin-bottom: 2em;
     1014
     1015                ul {
     1016                    margin-left: 2.5rem;
     1017
     1018                    ul {
     1019                        margin-bottom: 0.5em;
    10691020                    }
    10701021                }
    1071                 .default {
    1072                     font-style: italic;
     1022
     1023                code {
     1024                    background: #efefef;
     1025                    border-radius: 4px;
     1026                    padding: 2px 6px;
    10731027                }
    1074 
    1075                 ul {
    1076                     margin-left: 25px;
    1077                     margin-left: 2.5rem;
    1078                 }
    1079             }
     1028            }
     1029
     1030            dd:last-child {
     1031                margin-bottom: 0;
     1032            }
     1033
    10801034            .param-hash {
    10811035                margin-left: 1.2em;
    10821036                margin-bottom: 0.5em;
     1037
     1038                .desc {
     1039                    margin-left: 1.5em;
     1040                }
     1041
    10831042                > li {
    1084                     margin-top: 1em;
     1043                    margin-top: 1.5em;
     1044
     1045                    > code {
     1046                        background: transparent;
     1047                        padding: unset;
     1048                    }
    10851049                }
     1050
    10861051                li li {
    10871052                    list-style-type: circle;
    10881053                }
     1054
    10891055                .param-hash > li {
    10901056                    list-style-type: disc;
    10911057                }
    10921058            }
    1093         }
     1059
     1060            .desc {
     1061                margin: 1rem 0 0.5rem;
     1062            }
     1063
     1064            .extended-description {
     1065                margin: 1.5em 0 1.5em 1.2em;
     1066
     1067                summary + .description {
     1068                    display: block;
     1069                    margin-top: 1em;
     1070                }
     1071
     1072                summary {
     1073                    color: #21759b;
     1074                    text-decoration: underline;
     1075                }
     1076            }
     1077
     1078            .type,
     1079            .required {
     1080                margin: 0 4px;
     1081                font-weight: 400;
     1082            }
     1083
     1084            .type {
     1085                margin-left: 8px;
     1086                font-size: 14px;
     1087                font-style: 400;
     1088            }
     1089
     1090            .required {
     1091                font-size: 12px;
     1092            }
     1093        }
     1094
    10941095        .learn-more {
    10951096            background-color: #f1f1f1;
     
    10981099            padding: 20px;
    10991100        }
     1101
    11001102        .deprecated,
    11011103        .private-access {
    11021104            margin-top: 30px;
    11031105            padding: 20px;
     1106
    11041107            p {
    1105                 margin-bottom: 0px;
    1106             }
    1107         }
     1108                margin-bottom: 0;
     1109            }
     1110        }
     1111
    11081112        .deprecated {
    11091113            background-color: #fbeaea;
    11101114            border: 1px solid #dc3232;
    11111115        }
     1116
    11121117        .deprecated-method {
    11131118            color: #be2423;
    11141119            font-style: italic;
    11151120        }
     1121
    11161122        .private-access {
    11171123            border: 1px solid #ffb900;
    11181124            background-color: #fff8e5;
    11191125        }
     1126
    11201127        .callout {
    11211128            margin-top: 30px;
    11221129        }
    1123         .toc-jump {
    1124             display: inline-block;
    1125             float: right;
    1126         }
    1127     }
    1128 
    1129     .callout:before {
     1130    }
     1131
     1132    .callout::before {
    11301133        top: 0.4em;
    11311134    }
    11321135
    1133     &.archive, &.search {
    1134         .wp-parser-class, .wp-parser-function, .wp-parser-hook, .wp-parser-method {
     1136    &.archive,
     1137    &.search {
     1138        .wp-parser-class,
     1139        .wp-parser-function,
     1140        .wp-parser-hook,
     1141        .wp-parser-method {
    11351142            h1 {
    11361143                font-family: $body-font;
    11371144                color: #21759b;
    1138                 font-weight: normal;
    1139             }
     1145                font-weight: 400;
     1146            }
     1147
    11401148            div {
    11411149                &.sourcefile {
    1142                     color: #999999;
     1150                    color: #999;
    11431151                    font-style: italic;
    11441152                }
     
    11481156
    11491157    .single {
    1150         .wp-parser-class, .wp-parser-function, .wp-parser-hook, .wp-parser-method {
     1158        .wp-parser-class,
     1159        .wp-parser-function,
     1160        .wp-parser-hook,
     1161        .wp-parser-method {
    11511162            border-bottom-style: none;
    11521163        }
     
    11551166    /* = Related
    11561167    ----------------------------------------------- */
     1168
    11571169    .related {
    1158         .show-more, .hide-more {
     1170        .show-more,
     1171        .hide-more {
    11591172            display: none;
    11601173        }
     
    11621175        /* Hide the title and toc links (same as .screen-reader-text)
    11631176           this allows for linking from the toc. */
    1164         h3, .uses .toc-jump, .used-by .toc-jump {
     1177
     1178        h3,
     1179        .uses .toc-jump,
     1180        .used-by .toc-jump {
    11651181            height: 0;
    11661182            margin-bottom: 0;
     
    11691185        }
    11701186
    1171         .used-by, .uses {
     1187        .used-by,
     1188        .uses {
    11721189            overflow-x: auto;
    11731190            clear: right;
    11741191        }
    11751192
    1176         td p  {
     1193        td p {
    11771194            margin-bottom: 0;
    11781195        }
    11791196
    1180         th, td {
     1197        th,
     1198        td {
    11811199            width: 50%;
    11821200        }
    11831201
     1202        .used-by,
     1203        .uses {
     1204            td.related-title span {
     1205                display: block;
     1206                color: #666;
     1207            }
     1208        }
     1209
    11841210        @media (max-width: 43em) {
    1185             .related-desc, span {
     1211            .related-desc,
     1212            span {
    11861213                display: none;
    11871214            }
    11881215        }
    1189     }
    1190 
    1191     .source-content {
    1192         overflow: auto;
    11931216    }
    11941217
     
    11961219        margin-left: 2em;
    11971220        margin-top: 1em;
    1198     }
    1199 
    1200     .source-code-links span {
    1201         border-left: 1px solid #999;
    1202         margin-left: 1em;
    1203         padding-left: 1em;
    1204     }
    1205 
    1206     .source-code-links span:first-child {
    1207         display: none;
    1208         border-left: 0;
    1209         margin-left: 1em;
    1210         padding-left: 0;
     1221
     1222        span {
     1223            border-right: 1px solid #999;
     1224            margin-right: 1em;
     1225            padding-right: 1em;
     1226
     1227            &:last-of-type {
     1228                border-right: none;
     1229            }
     1230        }
    12111231    }
    12121232
     
    12161236    }
    12171237
    1218     .show-complete-source, .less-complete-source {
     1238    .show-complete-source,
     1239    .less-complete-source {
    12191240        display: none;
    12201241    }
     
    12251246            width: 10%;
    12261247        }
     1248
    12271249        .changelog-desc {
    12281250            width: 90%;
     
    12301252    }
    12311253
     1254
    12321255    .loop-pagination {
    1233         text-align: center;
    1234         font-size: 18px;
    1235         margin-bottom: 20px;
     1256        display: flex;
     1257        margin: 3rem 0;
     1258        list-style: none;
     1259        justify-content: center;
     1260        align-items: center;
     1261        gap: 0.75rem;
     1262
     1263        .page-numbers {
     1264            display: inline-block;
     1265            padding: 1rem 1.25rem;
     1266            background: $color-white;
     1267            border: 1px solid get-color(gray-5);
     1268            border-radius: 2px;
     1269            line-height: 1;
     1270            text-decoration: none;
     1271
     1272            &:hover,
     1273            &:active {
     1274                color: $wp4--link-color--hover;
     1275            }
     1276
     1277            &.current {
     1278                border: 1px solid get-color(gray-90);
     1279                background: get-color(gray-90);
     1280                color: $color-white;
     1281            }
     1282
     1283            &.dots {
     1284                border: none;
     1285            }
     1286        }
    12361287    }
    12371288
     
    12411292    }
    12421293
    1243     // User contributed notes
    1244     .single-wp-parser-function, .single-wp-parser-method, .single-wp-parser-hook, .single-wp-parser-class {
    1245 
     1294    /* User contributed notes*/
     1295    .single-wp-parser-function,
     1296    .single-wp-parser-method,
     1297    .single-wp-parser-hook,
     1298    .single-wp-parser-class {
    12461299        .bad-note .comment-content {
    1247             opacity: .6;
     1300            opacity: 0.6;
    12481301        }
    12491302
     
    12551308        .comment-edited {
    12561309            background-color: #fff8e5;
    1257             padding: .2em .5em;
    1258             margin-right: .5em;
     1310            padding: 0.2em 0.5em;
     1311            margin-right: 0.5em;
    12591312            border-radius: 3px;
    12601313            border: 1px solid #ffb900;
     
    12921345        }
    12931346
    1294         // Feedback
     1347        /* Feedback*/
    12951348        .comment-list li.depth-2 {
    12961349            border-top: 1px solid #dfdfdf;
     
    12991352
    13001353            .comment-content {
    1301                 padding: .9em 0;
    1302             }
     1354                padding: 0.9em 0;
     1355            }
     1356
    13031357            .comment-content p {
    13041358                margin-bottom: 0;
    1305                 font-size: .9em;
     1359                font-size: 0.9em;
    13061360            }
    13071361        }
     
    13281382            font-size: 1.8rem;
    13291383            font-weight: 300;
    1330             line-height: 2.2rem;
     1384            line-height: 1.222;
    13311385            margin-bottom: 1em;
    13321386        }
     
    13571411        }
    13581412
    1359         label[for=comment],
     1413        label[for="comment"],
    13601414        .comment-form-comment,
    13611415        .comment-preview {
     
    13641418
    13651419        .js & .comment-form-comment {
    1366             padding: 0 .7em .7em;
     1420            padding: 0 0.7em 0.7em;
    13671421        }
    13681422
     
    13811435            border: 1px solid #eee;
    13821436        }
     1437
    13831438        .comment-meta {
    1384             padding: .5em 1em;
     1439            padding: 0.5em 1em;
    13851440            background-color: #f7f7f7;
    13861441            overflow: auto;
     
    13881443
    13891444        .comment-content {
    1390             margin-left: 60px;
    1391             margin-left: 3.75rem;
    13921445            margin-left: 0;
    13931446            clear: both;
    1394             padding: 2rem 1.5rem .5rem;
     1447            padding: 2rem 1.5rem 0.5rem;
    13951448        }
    13961449
    13971450        .comment-content ol {
    13981451            list-style: decimal inside;
    1399             margin: 0 0 1.5em 0;
    1400             border-top: none;
    14011452            margin: 0 0 1.5em 1.5em;
    14021453            padding: 0;
     1454            border-top: none;
    14031455        }
    14041456
    14051457        .comment-content ul {
    14061458            list-style: square inside;
    1407             margin: 0 0 1.5em 0;
    1408             border-top: none;
    14091459            margin: 0 0 1.5em 1.5em;
    14101460            padding: 0;
     1461            border-top: none;
    14111462        }
    14121463
     
    14511502        }
    14521503
    1453         .comment-form ul, .feedback-form ul {
     1504        .comment-form ul,
     1505        .feedback-form ul {
    14541506            margin-left: 1.5em;
    14551507        }
     
    15081560     *
    15091561     */
     1562
    15101563    #content-area.has-sidebar {
    15111564        float: none;
    15121565        margin: 0 auto;
    1513         width: 60em;
     1566        width: $devhub-wrap-content-width;
    15141567    }
    15151568
    15161569    .has-sidebar {
    1517 
    15181570        main {
    15191571            float: right;
     
    15211573            margin: 0;
    15221574            clear: none;
    1523             padding: 0 12px;
    15241575            padding: 0 1.2rem;
    15251576        }
     1577
    15261578        .widget-area {
    15271579            float: left;
    15281580            overflow: hidden;
    15291581            width: 27%;
    1530             margin-left: -55px;
    15311582            margin: 0;
    15321583            clear: none;
     
    15451596            width: 49%;
    15461597            display: inline-block;
     1598
    15471599            &[rel="prev"] {
    15481600                text-align: left;
    15491601            }
     1602
    15501603            &[rel="next"] {
    15511604                text-align: right;
     
    15611614        margin-right: 10px;
    15621615    }
    1563     .user-note-voting-up .dashicons, .user-note-voting-down .dashicons {
     1616
     1617    .user-note-voting-up .dashicons,
     1618    .user-note-voting-down .dashicons {
    15641619        font-size: 30px;
    15651620        height: 30px;
     
    15671622        color: #000;
    15681623    }
     1624
    15691625    .site-main {
    1570         .user-note-voting-down, .user-note-voting-up {
     1626        .user-note-voting-down,
     1627        .user-note-voting-up {
    15711628            text-decoration: none;
    15721629        }
    15731630    }
     1631
    15741632    .user-note-voting-up {
    15751633        margin-left: -9px;
     
    15841642        margin-right: -2px;
    15851643    }
     1644
    15861645    .user-voted.user-note-voting-up .dashicons {
    1587         color: green;
    1588     }
     1646        color: color(green-50);
     1647    }
     1648
    15891649    .user-voted.user-note-voting-down .dashicons {
    1590         color: red;
    1591     }
     1650        color: color(red-50);
     1651    }
     1652
    15921653    .user-submitted-note .dashicons {
    1593         color: grey;
    1594     }
    1595 
    1596     .syntaxhighlighter {
    1597         /* These are !important due to use of !important in SyntaxHighlighter Evolved plugin. */
    1598         max-width: 100% !important;
    1599         width: inherit !important;
    1600         padding-bottom: 0.5rem !important;
    1601     }
    1602 
    1603     &.archive, &.blog {
     1654        color: color(gray-50);
     1655    }
     1656
     1657    &.archive,
     1658    &.blog {
    16041659        .hentry {
    16051660            padding: 0 0 1.5em 0;
     
    16091664}
    16101665
     1666/** Fix screen-reader-text font size. **/
     1667a.screen-reader-text:focus,
     1668.screen-reader-text:focus {
     1669    font-size: 1.4rem;
     1670}
     1671
    16111672/** Site Header **/
    1612 
    16131673.site-header {
    16141674    background: #0073aa;
    16151675    float: none;
    1616     margin: 0 0 4em;
     1676    margin: 0;
    16171677    padding: 18px 0;
    16181678    width: auto;
    1619     margin: 0;
    1620 }
     1679}
     1680
    16211681.site-branding {
    1622     height: 32px;
    16231682    box-sizing: border-box;
    16241683    margin: 0 auto;
    16251684    max-width: 960px;
    1626     padding: 0 10px;
     1685    padding: 0 24px;
    16271686    position: relative;
    1628 }
     1687
     1688    &.has-actions {
     1689        display: flex;
     1690        justify-content: space-between;
     1691        align-items: center;
     1692
     1693        @media screen and (max-width: 500px) {
     1694            flex-direction: column;
     1695        }
     1696
     1697        .site-title {
     1698
     1699            @media screen and (max-width: 500px) {
     1700                margin-bottom: 2rem;
     1701            }
     1702
     1703            a {
     1704                font-size: 28px;
     1705            }
     1706        }
     1707    }
     1708}
     1709
    16291710.site-title {
    16301711    line-height: 1;
    16311712    margin: 0;
    16321713    padding: 0;
    1633     font-family: 'Open Sans', sans-serif;
     1714    font-family: "Open Sans", sans-serif;
    16341715    display: inline-block;
    16351716    text-align: left;
    1636     color: black;
     1717    color: #000;
    16371718
    16381719    a {
     
    16561737    }
    16571738}
     1739
    16581740.site-header.home {
    1659     padding: 28px 20px;
    1660     padding: 2.8rem 2.0rem;
     1741    padding: 2.8rem 2rem;
    16611742    text-align: center;
    16621743
     
    16681749        max-width: none;
    16691750        font-weight: 300;
    1670         margin: 36px 0 11.25px;
    16711751        margin: 3.6rem 0 1.125rem;
    16721752        text-align: center;
     
    16751755
    16761756        a {
    1677             font-size: 68.6646px;
    16781757            font-size: 6.86646rem;
    16791758
     
    16861765
    16871766    .site-description {
    1688         color: hsla(0,0%,100%,.8);
     1767        color: hsla(0, 0%, 100%, 0.8);
    16891768        font-size: 2.25rem;
    16901769        font-weight: 300;
     
    17151794        display: block;
    17161795        text-decoration: none;
    1717         font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", sans-serif;
     1796        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
    17181797        font-size: 12.8px;
    17191798
     
    17551834    }
    17561835}
     1836
    17571837.main-navigation {
    17581838    clear: both;
     
    17821862    -webkit-appearance: none;
    17831863}
    1784 .toggled .menu-toggle.dashicons:before {
     1864
     1865.toggled .menu-toggle.dashicons::before {
    17851866    content: "\f343";
    17861867}
     
    17901871        display: none;
    17911872    }
     1873
    17921874    .main-navigation {
    17931875        float: right;
     
    18241906
    18251907/** WP editor link button modal **/
    1826 
    18271908#wp-link-wrap {
    18281909    height: 210px !important;
     
    18431924
    18441925/** Handbook **/
    1845 
    18461926aside[id^="handbook"] .widget-title,
    18471927aside[id^="nav_menu"] .widget-title {
     
    18641944    margin-right: 4%;
    18651945}
     1946
    18661947.handbook-header {
    1867     line-height: 2em;
     1948    line-height: 2;
    18681949
    18691950    h1 {
     
    18731954
    18741955.single-handbook {
    1875     font-size: 13px;
    18761956    font-size: 1.3rem;
    18771957
    1878     p, ol, ul {
     1958    p,
     1959    ol,
     1960    ul {
    18791961        line-height: 1.6;
    18801962    }
    18811963
    18821964    .site-main {
    1883         p, ol, ul {
     1965        p,
     1966        ol,
     1967        ul {
    18841968            font-size: 1.05em;
    18851969            color: #555;
     
    19192003
    19202004/** Table of Contents */
    1921 
    1922 .site-main .table-of-contents {
    1923     float: right;
    1924     width: 250px;
    1925     border: 1px solid #eee;
    1926     margin: 0 0 15px 15px;
    1927     z-index: 1;
    1928     position: relative;
    1929     color: #555d66;
    1930     background-color: #fff;
    1931     box-shadow: 0 0 8px rgba(0,0,0,0.1);
    1932     border-radius: 3px;
    1933 
    1934     @media (min-width: 971px) {
    1935         margin: 0 -30px 15px 15px;
    1936     }
    1937 
    1938     h2 {
    1939         margin: 0;
    1940         padding: 0.7rem 1.2rem;
    1941         font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif;
    1942         font-size: 1.3em;
    1943         color: #32373c;
    1944         text-transform: uppercase;
    1945         border-bottom: 1px solid #eee;
    1946         margin-bottom: 0;
     2005.site-main {
     2006    .table-of-contents {
     2007        display: flex;
     2008        flex-direction: column;
     2009        min-width: 230px;
     2010        border: 1px solid #eee;
     2011        margin: 30px 0;
     2012        z-index: 1;
     2013        position: relative;
     2014        color: #555d66;
     2015        background-color: #fff;
     2016        box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
     2017        border-radius: 3px;
     2018
     2019        .code-reference & {
     2020            float: right;
     2021            margin-top: 15px;
     2022            margin-left: 15px;
     2023        }
     2024
     2025        h2 {
     2026            margin: 0;
     2027            padding: 0.7rem 1.2rem;
     2028            font-family: HelveticaNeue-Light, "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif;
     2029            font-size: 1.3em;
     2030            color: #32373c;
     2031            text-transform: uppercase;
     2032            border-bottom: 1px solid #eee;
     2033            margin-bottom: 0;
     2034        }
     2035
     2036        .items {
     2037            overflow-y: scroll;
     2038        }
    19472039    }
    19482040}
     
    19642056                color: #0073aa;
    19652057                text-decoration: underline;
    1966             };
     2058            }
    19672059        }
    19682060
     
    19752067}
    19762068
    1977 /* Highlight current heading and adjust scroll position for fixed toolbar */
    1978 .toc-heading:target {
    1979     position: initial;
    1980     padding-top: 50px;
    1981     margin-top: -50px;
    1982 }
    1983 
    1984 /* Remove negative margin because there is no jump link before these headlines */
    1985 .entry-content h2.toc-heading:first-of-type:target,
    1986 .entry-content h3.toc-heading:first-of-type:target,
    1987 h2.toc-heading + h3.toc-heading:target {
    1988     margin-top: 0;
    1989 }
    1990 
    1991 .toc-heading:target:before {
    1992     content: '';
    1993     position: absolute;
    1994     left: -10px;
    1995     top: 50px;
    1996     border-left: 5px solid #0073aa;
    1997     height: 50%;
    1998     height: calc(100% - 50px);
    1999 }
    2000 
    2001 .toc-jump {
     2069.toc-header {
     2070    margin-bottom: 1em;
     2071}
     2072
     2073.toc-heading {
    20022074    position: relative;
    2003     height: 50px;
    2004 }
    2005 
    2006 .toc-jump:after {
    2007     content: '';
    2008     display: table;
    2009     clear: both;
    2010 }
    2011 
    2012 .toc-jump a {
    2013     z-index: 1;
    2014 }
    2015 
    2016 @media (max-width: 480px) {
    2017     .table-of-contents {
    2018         display: none;
    2019     }
     2075}
     2076
     2077.toc-heading a::before {
     2078    color: get-color(gray-30);
     2079}
     2080
     2081.toc-heading:target a::before {
     2082    color: inherit;
     2083}
     2084
     2085.toc-heading a:hover::before,
     2086.toc-heading a:active::before,
     2087.toc-heading a:focus::before {
     2088    color: get-color(blue-50);
    20202089}
    20212090
    20222091/** Menu */
    2023 
    20242092#secondary aside.widget_wporg_handbook_pages,
    20252093#secondary aside.widget_nav_menu {
     
    20322100.widget_nav_menu h1 {
    20332101    font-size: 1.6em;
    2034     font-weight: bold;
     2102    font-weight: 700;
    20352103    margin-bottom: 0.6em;
    20362104}
     
    20422110        outline: 0;
    20432111    }
     2112
    20442113    ul {
    20452114        margin-left: 0;
     
    20672136                background-color: #fafafa;
    20682137                border: 0;
    2069                 border-left: 1px solid rgba(0,0,0,0.05);
     2138                border-left: 1px solid rgba(0, 0, 0, 0.05);
    20702139                border-radius: 0;
    20712140                box-shadow: none;
     
    20812150            &.open > div > .dashicons {
    20822151                transform: rotate(180deg);
    2083                 border-right: 1px solid rgba(0,0,0,0.05);
     2152                border-right: 1px solid rgba(0, 0, 0, 0.05);
    20842153                border-left: none;
    20852154            }
     
    21022171                background-color: #0073aa;
    21032172            }
     2173
    21042174            &.active {
    21052175                color: #555;
    21062176                background-color: #fff;
    2107                 font-weight: bold;
     2177                font-weight: 700;
    21082178            }
    21092179        }
     
    21132183        }
    21142184    }
    2115     & > ul > li {
     2185
     2186    > ul > li {
    21162187        &.open > div > a {
    21172188            &:not(:focus) {
    21182189                color: #0073aa;
    21192190            }
     2191
    21202192            &:hover {
    21212193                color: #fff;
     
    21242196        }
    21252197    }
     2198
    21262199    .current-menu-item ul,
    21272200    .current-menu-ancestor ul {
    21282201        display: block;
    21292202    }
     2203
    21302204    .current-menu-ancestor:not(.open) .expandable .dashicons:not(:focus),
    21312205    .current-menu-item > .expandable .dashicons:not(:focus) {
     
    21332207        color: #0073aa;
    21342208    }
     2209
    21352210    .current-menu-ancestor .expandable .dashicons:hover,
    21362211    .current-menu-item .expandable .dashicons:hover {
     
    21382213        color: #fff !important;
    21392214    }
     2215
    21402216    .children,
    21412217    .sub-menu {
     
    21532229                position: relative;
    21542230            }
     2231
    21552232            ul {
    21562233                margin-left: 12px;
     
    21712248
    21722249    #content {
    2173         max-width: 960px;
     2250        max-width: $single-handbook-content-width;
    21742251        margin: 0 auto;
    21752252        display: flex;
    2176         padding-top: 0;
     2253        padding: 0 #{"max( 20px, 2% )"};
    21772254    }
    21782255
     
    21942271        background: #fff;
    21952272        box-sizing: border-box;
    2196         width: 72%;
    2197 
    2198         @media(max-width: 876px) {
     2273        width: $single-handbook-content-primary-width * 100%;
     2274
     2275        @media (max-width: 876px) {
    21992276            padding: 4rem 20px;
    22002277            width: 100%;
     
    22102287        top: 10px;
    22112288    }
     2289
    22122290    .make-welcome {
    22132291        margin: 0 !important;
    22142292    }
    22152293}
     2294
    22162295/** Handbook **/
    2217 
    22182296.rest-api-handbook-reference {
    2219 
    22202297    .table-of-contents {
    22212298        float: none;
     
    22292306
    22302307            &::after {
    2231                 content: '; ';
     2308                content: "; ";
    22322309            }
    22332310
    22342311            &:last-child::after {
    2235                 content: '';
     2312                content: "";
    22362313            }
    22372314        }
     
    22412318
    22422319/* Menu toggle */
    2243 
    22442320#secondary-toggle {
    22452321    display: none;
    22462322}
     2323
    22472324body.responsive-show {
    22482325    position: fixed;
     
    22532330        overflow-y: scroll;
    22542331        z-index: 500;
    2255 
    2256         .search-section {
    2257             margin-top: 32px;
    2258             width: 100%;
    2259         }
    2260     }
     2332    }
     2333
    22612334    #secondary-toggle {
    22622335        height: 32px;
     
    22642337        width: 100%;
    22652338    }
     2339
    22662340    #primary-modal {
    22672341        display: block;
    22682342    }
     2343
    22692344    #o2-expand-editor {
    22702345        display: none;
    22712346    }
    22722347}
     2348
    22732349@media only screen and (max-width: 782px) {
    22742350    body.responsive-show {
     
    22832359    }
    22842360}
     2361
    22852362@media (max-width: 876px) {
    22862363    #secondary {
    22872364        position: fixed;
    22882365        z-index: 10;
    2289         bottom: 0px;
     2366        bottom: 0;
    22902367        overflow-y: auto;
    2291         transition: all .25s ease;
     2368        transition: all 0.25s ease;
    22922369        top: 32px;
    22932370        left: -100%;
     
    23082385        z-index: 1;
    23092386
    2310         &:before {
    2311             content: '\f333';
     2387        &::before {
     2388            content: "\f333";
    23122389            -webkit-font-smoothing: antialiased;
    2313             font: normal 32px/1 'dashicons';
     2390            font: 400 32px/1 dashicons;
    23142391            position: relative;
    23152392            top: 0;
    23162393            color: #fff;
    23172394        }
     2395
    23182396        strong {
    23192397            display: none;
    23202398        }
    23212399    }
     2400
    23222401    #page {
    23232402        overflow-x: hidden;
    23242403    }
     2404
    23252405    body.responsive-show {
    23262406        overflow-y: visible;
     
    23302410            overflow-x: visible;
    23312411        }
    2332         #secondary-toggle:before {
     2412
     2413        #secondary-toggle::before {
    23332414            color: #0073aa;
    23342415        }
     
    23462427
    23472428@media ( max-width: 59.999999em ) {
    2348 
    23492429    .devhub-wrap {
    23502430        max-width: 100%;
     
    23552435            padding: 0 13px;
    23562436        }
     2437
    23572438        #content-area,
    23582439        .inner-wrap {
     
    23622443        }
    23632444
    2364         &.archive, &.search {
     2445        &.archive,
     2446        &.search {
    23652447            .meta {
    23662448                font-size: 100%;
     
    23732455        }
    23742456    }
    2375 
     2457}
     2458
     2459@media (min-width: 90em) {
     2460    .site-main .table-of-contents {
     2461        position: fixed;
     2462        width: 15vw;
     2463
     2464        .code-reference & {
     2465            margin-left: 0;
     2466            left: calc( #{ $devhub-wrap-content-width } + ( ( 100vw - #{ $devhub-wrap-content-width } ) / 2 ) );
     2467            top: $devhub-wrap-toc-position-top;
     2468            max-height: calc(90vh - #{ $devhub-wrap-toc-position-top });
     2469        }
     2470
     2471        // Pages with sidebar
     2472        .widget-area + & {
     2473            left: calc( #{ $single-handbook-content-width } + ( ( 100vw - #{ $single-handbook-content-width } ) / 2 ) );
     2474            top: $single-handbook-toc-position-top;
     2475            max-height: calc(90vh - #{ $single-handbook-toc-position-top });
     2476        }
     2477    }
     2478}
     2479
     2480@media (min-width: 877px) {
     2481    // Pages which are not code reference and without a sidebar
     2482    .site-main .table-of-contents:not(.code-reference .site-main .table-of-contents):not(.widget-area + .site-main .table-of-contents) {
     2483        position: fixed;
     2484        width: 15vw;
     2485        top: $single-handbook-toc-position-top;
     2486        left: calc(
     2487            #{ $single-handbook-content-width } * #{ $single-handbook-content-primary-width }
     2488            + ( ( 100vw - #{ $single-handbook-content-width } ) / 2 )
     2489            + 15px
     2490        );
     2491        max-height: calc(90vh - #{ $single-handbook-toc-position-top });
     2492    }
    23762493}
    23772494
    23782495@media ( min-width: 43em ) {
    23792496    .devhub-wrap {
    2380         &.archive, &.search {
     2497        &.archive,
     2498        &.search {
    23812499            .meta {
    23822500                float: right;
     
    23902508}
    23912509
     2510// Matches global header breakpoint
     2511@media ( max-width: 889px ) {
     2512    .code-reference .site-main .table-of-contents {
     2513        float: none;
     2514        margin-left: 0;
     2515        width: 100%;
     2516    }
     2517}
     2518
    23922519@media ( max-width: 43em ) {
    2393 
    23942520    #content-area.has-sidebar {
    2395 
    23962521        main {
    23972522            float: right;
     
    23992524            margin: 0 auto;
    24002525            clear: both;
    2401             padding: 0 12px;
    24022526            padding: 0 1.2rem;
    24032527        }
     2528
    24042529        .widget-area {
    24052530            float: none;
     
    24272552            display: block;
    24282553        }
     2554
    24292555        .reference-landing .section .box,
    24302556        .sidebar .box {
     
    24322558            margin-bottom: 1.5em;
    24332559        }
     2560
    24342561        .home-primary-content .entry-content,
    24352562        .reference-landing .section {
     
    24462573
    24472574        .horizontal-list li:first-child a {
    2448             padding: 0 40px;
    24492575            padding: 0 4rem;
    24502576        }
    24512577
    2452         .reference-landing .searchform {
    2453             text-align: center;
    2454         }
    2455 
    2456         .reference-landing .searchform input[type="text"],
    2457         .reference-landing .searchform input[type="submit"] {
    2458             width: 100%;
    2459             margin-right: 0;
    2460             margin-bottom: 1em;
    2461             float: none;
    2462             clear: both;
    2463         }
    2464 
    2465         .wp-parser-class, .wp-parser-function, .wp-parser-hook, .wp-parser-method {
     2578        .wp-parser-class,
     2579        .wp-parser-function,
     2580        .wp-parser-hook,
     2581        .wp-parser-method {
    24662582            h1 {
    24672583                padding-left: 45px;
     
    24782594@media (max-width: 32em) {
    24792595