Make WordPress Core

09/13/17 06:07:48 (5 months ago)

Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.

  • Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
  • The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
  • Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
  • When user lacks unfiltered_html the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
  • When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
  • The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
  • The CodeMirror library is included as wp.CodeMirror to prevent conflicts with any existing CodeMirror global.
  • An wp.codeEditor.initialize() API in JS is provided to convert a textarea into CodeMirror, with a wp_enqueue_code_editor() function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
  • A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
  • Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: conf, css, diff, patch, html, htm, http, js, json, jsx, less, md, php, phtml, php3, php4, php5, php7, phps, scss, sass, sh, bash, sql, svg, xml, yml, yaml, txt.

Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.

1 edited


  • trunk/src/wp-admin/theme-editor.php

    r38722 r41376  
    6464$allowed_files = $style_files = array(); 
    6565$has_templates = false; 
    66 $default_types = array( 'php', 'css' ); 
     66$default_types = array( 
     67    'bash', 
     68    'conf', 
     69    'css', 
     70    'diff', 
     71    'htm', 
     72    'html', 
     73    'http', 
     74    'inc', 
     75    'include', 
     76    'js', 
     77    'json', 
     78    'jsx', 
     79    'less', 
     80    'md', 
     81    'patch', 
     82    'php', 
     83    'php3', 
     84    'php4', 
     85    'php5', 
     86    'php7', 
     87    'phps', 
     88    'phtml', 
     89    'sass', 
     90    'scss', 
     91    'sh', 
     92    'sql', 
     93    'svg', 
     94    'text', 
     95    'txt', 
     96    'xml', 
     97    'yaml', 
     98    'yml', 
     162    $settings = wp_enqueue_code_editor( compact( 'file' ) ); 
     163    if ( ! empty( $settings ) ) { 
     164        wp_enqueue_script( 'wp-theme-plugin-editor' ); 
     165        wp_add_inline_script( 'wp-theme-plugin-editor', sprintf( 'jQuery( function() { wp.themePluginEditor.init( %s ); } )', wp_json_encode( $settings ) ) ); 
     166    } 
    129168    require_once( ABSPATH . 'wp-admin/admin-header.php' ); 
Note: See TracChangeset for help on using the changeset viewer.