WordPress.org

Make WordPress Core

Changeset 10607


Ignore:
Timestamp:
02/20/09 20:00:09 (5 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.