Make WordPress Core

Changeset 10607


Ignore:
Timestamp:
02/20/2009 08:00:09 PM (16 years ago)
Author:
ryan
Message:

Add documentation lookup shortcuts to Theme and Plugin Editors. Props beaulebens. fixes #9184

Location:
trunk/wp-admin
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/css/theme-editor.css

    r9918 r10607  
    6565    margin-right: 210px;
    6666}
     67
     68#documentation {
     69    margin-top: 10px;
     70}
     71#documentation label {
     72    line-height: 22px;
     73    vertical-align: top;
     74    font-weight: bold;
     75}
  • trunk/wp-admin/includes/misc.php

    r9249 r10607  
    239239}
    240240
     241function wp_doc_link_parse( $content ) {
     242    if ( !is_string( $content ) || empty( $content ) )
     243        return array();
     244       
     245    $tokens = token_get_all( $content );
     246    $functions = array();
     247    $ignore_functions = array();
     248    for ( $t = 0, $count = count( $tokens ); $t < $count; $t++ ) {
     249        if ( !is_array( $tokens[$t] ) ) continue;
     250        if ( T_STRING == $tokens[$t][0] && ( '(' == $tokens[ $t + 1 ] || '(' == $tokens[ $t + 2 ] ) ) {
     251            // If it's a function or class defined locally, there's not going to be any docs available
     252            if ( 'class' == $tokens[ $t - 2 ][1] || 'function' == $tokens[ $t - 2 ][1] || T_OBJECT_OPERATOR == $tokens[ $t - 1 ][0] ) {
     253                $ignore_functions[] = $tokens[$t][1];
     254            }
     255            // Add this to our stack of unique references
     256            $functions[] = $tokens[$t][1];
     257        }
     258    }
     259   
     260    $functions = array_unique( $functions );
     261    sort( $functions );
     262    $ignore_functions = apply_filters( 'documentation_ignore_functions', $ignore_functions );
     263    $ignore_functions = array_unique( $ignore_functions );
     264   
     265    $out = array();
     266    foreach ( $functions as $function ) {
     267        if ( in_array( $function, $ignore_functions ) )
     268            continue;
     269        $out[] = $function;
     270    }
     271   
     272    return $out;
     273}
     274
    241275?>
  • trunk/wp-admin/plugin-editor.php

    r10150 r10607  
    8282        $error = 1;
    8383
    84     if ( ! $error )
    85         $content = htmlspecialchars(file_get_contents($real_file));
     84    if ( ! $error ) {
     85        $content = file_get_contents( $real_file );
     86       
     87        if ( 'php' == mb_substr( $real_file, mb_strrpos( $real_file, '.' ) + 1 ) ) {
     88            $functions = wp_doc_link_parse( $content );
     89           
     90            $docs_select = '<select name="docs-list" id="docs-list">';
     91            $docs_select .= '<option value="">' . __( 'Function Name...' ) . '</option>';
     92            foreach ( $functions as $function) {
     93                $docs_select .= '<option value="' . urlencode( $function ) . '">' . htmlspecialchars( $function ) . '()</option>';
     94            }
     95            $docs_select .= '</select>';
     96        }
     97       
     98        $content = htmlspecialchars( $content );
     99    }
    86100
    87101    ?>
     
    125139    <ul>
    126140<?php foreach($plugin_files as $plugin_file) : ?>
    127         <li><a href="plugin-editor.php?file=<?php echo $plugin_file; ?>"><?php echo $plugins[$plugin_file]['Name']; ?></a></li>
     141        <li<?php echo $file == $plugin_file ? ' class="highlight"' : ''; ?>><a href="plugin-editor.php?file=<?php echo $plugin_file; ?>"><?php echo $plugins[$plugin_file]['Name']; ?></a></li>
    128142<?php endforeach; ?>
    129143    </ul>
     
    136150        <input type="hidden" name="file" value="<?php echo $file ?>" />
    137151        </div>
     152        <?php if ( count( $functions ) ) : ?>
     153        <div id="documentation"><label for="docs-list">Documentation:</label> <?php echo $docs_select ?> <input type="button" class="button" value=" <?php _e( 'Lookup' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'http://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&locale=<?php echo urlencode( get_locale() ) ?>&version=<?php echo urlencode( $wp_version ) ?>&redirect=true'); }" /></div>
     154        <?php endif; ?>
    138155<?php if ( is_writeable($real_file) ) : ?>
    139156    <?php if ( in_array($file, (array) get_option('active_plugins')) ) { ?>
  • trunk/wp-admin/theme-editor.php

    r10194 r10607  
    8888        $f = fopen($real_file, 'r');
    8989        $content = fread($f, filesize($real_file));
    90         $content = htmlspecialchars($content);
     90
     91        if ( 'php' == mb_substr( $real_file, mb_strrpos( $real_file, '.' ) + 1 ) ) {
     92            $functions = wp_doc_link_parse( $content );
     93           
     94            $docs_select = '<select name="docs-list" id="docs-list">';
     95            $docs_select .= '<option value="">' . __( 'Function Name...' ) . '</option>';
     96            foreach ( $functions as $function) {                   
     97                $docs_select .= '<option value="' . urlencode( $function ) . '">' . htmlspecialchars( $function ) . '()</option>';
     98            }
     99            $docs_select .= '</select>';
     100        }
     101
     102        $content = htmlspecialchars( $content );
    91103    }
    92104
     
    188200         <input type="hidden" name="theme" value="<?php echo $theme ?>" />
    189201         </div>
     202        <?php if ( count( $functions ) ) : ?>
     203        <div id="documentation"><label for="docs-list">Documentation:</label> <?php echo $docs_select ?> <input type="button" class="button" value=" <?php _e( 'Lookup' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'http://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&locale=<?php echo urlencode( get_locale() ) ?>&version=<?php echo urlencode( $wp_version ) ?>&redirect=true'); }" /></div>
     204        <?php endif; ?>
    190205
    191206        <div>
Note: See TracChangeset for help on using the changeset viewer.