2011-08-03 12:19:00 +02:00
< ? php
/**
2011-11-22 22:47:01 +01:00
* Facilitates adding of the WordPress editor as used on the Write and Edit screens .
2011-08-03 12:19:00 +02:00
*
* @ package WordPress
2012-01-04 20:03:33 +01:00
* @ since 3.3 . 0
2011-08-03 12:19:00 +02:00
*
2011-11-22 22:47:01 +01:00
* Private , not included by default . See wp_editor () in wp - includes / general - template . php .
2011-08-03 12:19:00 +02:00
*/
2011-11-23 20:06:52 +01:00
final class _WP_Editors {
public static $mce_locale ;
private static $mce_settings = array ();
private static $qt_settings = array ();
private static $plugins = array ();
private static $qt_buttons = array ();
private static $ext_plugins ;
private static $baseurl ;
private static $first_init ;
private static $this_tinymce = false ;
private static $this_quicktags = false ;
private static $has_tinymce = false ;
private static $has_quicktags = false ;
private static $has_medialib = false ;
private static $editor_buttons_css = true ;
private function __construct () {}
public static function parse_settings ( $editor_id , $settings ) {
2011-08-03 12:19:00 +02:00
$set = wp_parse_args ( $settings , array (
'wpautop' => true , // use wpautop?
'media_buttons' => true , // show insert/upload button(s)
'textarea_name' => $editor_id , // set the textarea name to something different, square brackets [] can be used here
2012-09-26 05:30:21 +02:00
'textarea_rows' => 20 ,
2011-08-03 12:19:00 +02:00
'tabindex' => '' ,
2012-07-22 04:33:53 +02:00
'tabfocus_elements' => ':prev,:next' , // the previous and next element ID to move the focus to when pressing the Tab key in TinyMCE
2012-07-05 17:28:13 +02:00
'editor_css' => '' , // intended for extra styles for both visual and Text editors buttons, needs to include the <style> tags, can use "scoped".
2011-08-03 12:19:00 +02:00
'editor_class' => '' , // add extra class(es) to the editor textarea
'teeny' => false , // output the minimal editor config used in Press This
2011-09-24 06:43:19 +02:00
'dfw' => false , // replace the default fullscreen with DFW (needs specific DOM elements and css)
2011-11-23 23:49:17 +01:00
'tinymce' => true , // load TinyMCE, can be used to pass settings directly to TinyMCE using an array()
2011-08-03 12:19:00 +02:00
'quicktags' => true // load Quicktags, can be used to pass settings directly to Quicktags using an array()
) );
2011-11-23 23:49:17 +01:00
self :: $this_tinymce = ( $set [ 'tinymce' ] && user_can_richedit () );
2011-11-23 20:06:52 +01:00
self :: $this_quicktags = ( bool ) $set [ 'quicktags' ];
2011-11-22 22:47:01 +01:00
2011-11-23 20:06:52 +01:00
if ( self :: $this_tinymce )
self :: $has_tinymce = true ;
2011-11-22 22:47:01 +01:00
2011-11-23 20:06:52 +01:00
if ( self :: $this_quicktags )
self :: $has_quicktags = true ;
2011-11-22 22:47:01 +01:00
2012-09-26 05:30:21 +02:00
if ( empty ( $set [ 'editor_height' ] ) )
return $set ;
if ( 'content' === $editor_id ) {
// A cookie (set when a user resizes the editor) overrides the height.
$cookie = ( int ) get_user_setting ( 'ed_size' );
// Upgrade an old TinyMCE cookie if it is still around, and the new one isn't.
if ( ! $cookie && isset ( $_COOKIE [ 'TinyMCE_content_size' ] ) ) {
parse_str ( $_COOKIE [ 'TinyMCE_content_size' ], $cookie );
$cookie = $cookie [ 'ch' ];
}
if ( $cookie )
$set [ 'editor_height' ] = $cookie ;
}
if ( $set [ 'editor_height' ] < 50 )
$set [ 'editor_height' ] = 50 ;
2011-11-22 22:47:01 +01:00
return $set ;
}
/**
* Outputs the HTML for a single instance of the editor .
*
* @ param string $content The initial content of the editor .
* @ param string $editor_id ID for the textarea and TinyMCE and Quicktags instances ( can contain only ASCII letters and numbers ) .
2011-11-23 20:06:52 +01:00
* @ param array $settings See the _parse_settings () method for description .
2011-11-22 22:47:01 +01:00
*/
2011-11-23 20:06:52 +01:00
public static function editor ( $content , $editor_id , $settings = array () ) {
2011-11-22 22:47:01 +01:00
2011-11-23 20:06:52 +01:00
$set = self :: parse_settings ( $editor_id , $settings );
2011-08-03 12:19:00 +02:00
$editor_class = ' class="' . trim ( $set [ 'editor_class' ] . ' wp-editor-area' ) . '"' ;
$tabindex = $set [ 'tabindex' ] ? ' tabindex="' . ( int ) $set [ 'tabindex' ] . '"' : '' ;
$switch_class = 'html-active' ;
$toolbar = $buttons = '' ;
2012-09-26 05:30:21 +02:00
if ( ! empty ( $set [ 'editor_height' ] ) )
$height = ' style="height: ' . $set [ 'editor_height' ] . 'px"' ;
else
$height = ' rows="' . $set [ 'textarea_rows' ] . '"' ;
2011-08-03 12:19:00 +02:00
if ( ! current_user_can ( 'upload_files' ) )
$set [ 'media_buttons' ] = false ;
2011-11-23 20:06:52 +01:00
if ( self :: $this_quicktags && self :: $this_tinymce ) {
2011-08-03 12:19:00 +02:00
$switch_class = 'html-active' ;
2012-07-05 22:28:01 +02:00
// 'html' and 'switch-html' are used for the "Text" editor tab.
2011-11-23 20:06:52 +01:00
if ( 'html' == wp_default_editor () ) {
2011-08-03 12:19:00 +02:00
add_filter ( 'the_editor_content' , 'wp_htmledit_pre' );
} else {
add_filter ( 'the_editor_content' , 'wp_richedit_pre' );
$switch_class = 'tmce-active' ;
}
2012-07-05 17:19:01 +02:00
$buttons .= '<a id="' . $editor_id . '-html" class="hide-if-no-js wp-switch-editor switch-html" onclick="switchEditors.switchto(this);">' . __ ( 'Text' ) . " </a> \n " ;
2011-11-17 03:44:28 +01:00
$buttons .= '<a id="' . $editor_id . '-tmce" class="hide-if-no-js wp-switch-editor switch-tmce" onclick="switchEditors.switchto(this);">' . __ ( 'Visual' ) . " </a> \n " ;
2011-08-03 12:19:00 +02:00
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
echo '<div id="wp-' . $editor_id . '-wrap" class="wp-editor-wrap ' . $switch_class . '">' ;
2011-11-23 20:06:52 +01:00
if ( self :: $editor_buttons_css ) {
2012-03-31 18:32:47 +02:00
wp_print_styles ( 'editor-buttons' );
2011-11-23 20:06:52 +01:00
self :: $editor_buttons_css = false ;
2011-11-22 22:47:01 +01:00
}
2011-11-03 02:31:27 +01:00
2011-08-03 12:19:00 +02:00
if ( ! empty ( $set [ 'editor_css' ]) )
echo $set [ 'editor_css' ] . " \n " ;
2011-08-07 19:03:18 +02:00
if ( ! empty ( $buttons ) || $set [ 'media_buttons' ] ) {
2011-08-03 12:19:00 +02:00
echo '<div id="wp-' . $editor_id . '-editor-tools" class="wp-editor-tools">' ;
echo $buttons ;
if ( $set [ 'media_buttons' ] ) {
2011-11-23 20:06:52 +01:00
self :: $has_medialib = true ;
2011-09-28 09:26:34 +02:00
2011-08-03 12:19:00 +02:00
if ( ! function_exists ( 'media_buttons' ) )
include ( ABSPATH . 'wp-admin/includes/media.php' );
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
echo '<div id="wp-' . $editor_id . '-media-buttons" class="hide-if-no-js wp-media-buttons">' ;
do_action ( 'media_buttons' , $editor_id );
echo " </div> \n " ;
}
echo " </div> \n " ;
}
2012-09-26 05:30:21 +02:00
$the_editor = apply_filters ( 'the_editor' , '<div id="wp-' . $editor_id . '-editor-container" class="wp-editor-container"><textarea' . $editor_class . $height . $tabindex . ' cols="40" name="' . $set [ 'textarea_name' ] . '" id="' . $editor_id . '">%s</textarea></div>' );
2011-08-03 12:19:00 +02:00
$content = apply_filters ( 'the_editor_content' , $content );
printf ( $the_editor , $content );
echo " \n </div> \n \n " ;
2011-11-23 20:06:52 +01:00
self :: editor_settings ( $editor_id , $set );
2011-08-03 12:19:00 +02:00
}
2011-11-23 20:06:52 +01:00
public static function editor_settings ( $editor_id , $set ) {
2012-09-04 18:29:28 +02:00
global $editor_styles ;
2011-08-03 12:19:00 +02:00
$first_run = false ;
2011-11-23 20:06:52 +01:00
if ( empty ( self :: $first_init ) ) {
2011-11-22 22:47:01 +01:00
if ( is_admin () ) {
2011-11-23 20:06:52 +01:00
add_action ( 'admin_print_footer_scripts' , array ( __CLASS__ , 'editor_js' ), 50 );
add_action ( 'admin_footer' , array ( __CLASS__ , 'enqueue_scripts' ), 1 );
2011-11-22 22:47:01 +01:00
} else {
2011-11-23 20:06:52 +01:00
add_action ( 'wp_print_footer_scripts' , array ( __CLASS__ , 'editor_js' ), 50 );
add_action ( 'wp_footer' , array ( __CLASS__ , 'enqueue_scripts' ), 1 );
2011-11-22 22:47:01 +01:00
}
}
2011-11-23 20:06:52 +01:00
if ( self :: $this_quicktags ) {
2011-08-03 12:19:00 +02:00
$qtInit = array (
2011-08-05 06:09:22 +02:00
'id' => $editor_id ,
2011-11-05 17:00:38 +01:00
'buttons' => ''
2011-08-03 12:19:00 +02:00
);
2011-09-24 06:43:19 +02:00
if ( is_array ( $set [ 'quicktags' ]) )
$qtInit = array_merge ( $qtInit , $set [ 'quicktags' ]);
2011-11-05 17:00:38 +01:00
if ( empty ( $qtInit [ 'buttons' ]) )
$qtInit [ 'buttons' ] = 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,spell,close' ;
2011-09-24 06:43:19 +02:00
if ( $set [ 'dfw' ] )
2011-11-05 17:00:38 +01:00
$qtInit [ 'buttons' ] .= ',fullscreen' ;
$qtInit = apply_filters ( 'quicktags_settings' , $qtInit , $editor_id );
2011-11-23 20:06:52 +01:00
self :: $qt_settings [ $editor_id ] = $qtInit ;
2011-09-24 06:43:19 +02:00
2011-11-23 20:06:52 +01:00
self :: $qt_buttons = array_merge ( self :: $qt_buttons , explode ( ',' , $qtInit [ 'buttons' ]) );
2011-08-03 12:19:00 +02:00
}
2011-08-05 06:09:22 +02:00
2011-11-23 20:06:52 +01:00
if ( self :: $this_tinymce ) {
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
if ( empty ( self :: $first_init ) ) {
self :: $baseurl = includes_url ( 'js/tinymce' );
self :: $mce_locale = $mce_locale = ( '' == get_locale () ) ? 'en' : strtolower ( substr ( get_locale (), 0 , 2 ) ); // only ISO 639-1
2011-08-03 12:19:00 +02:00
$no_captions = ( bool ) apply_filters ( 'disable_captions' , '' );
Use the new media modal to insert galleries into TinyMCE and the text editor.
'''Galleries'''
* Gallery insertion from the new media modal (into TinyMCE, the text editor, etc).
* Gallery previews in TinyMCE now use the `wp.mce.views` API.
* Disables the TinyMCE `wpgallery` plugin.
* Gallery previews consist of the first image of the gallery and the appearance of a stack. This will later be fleshed out to include more images/functionality (including editing the gallery, gallery properties, and showing the number of images in the gallery).
* Multiple galleries can be added to a single post.
* The gallery MCE view provides a bridge between the `wp.shortcode` and `Attachments` representation of a gallery, which allows the existing collection to persist when a gallery is initially created (preventing a request to the server for the query).
'''Shortcodes'''
* Renames `wp.shortcode.Match` to `wp.shortcode` to better expose the shortcode constructor.
* The `wp.shortcode` constructor now accepts an object of options instead of a `wp.shortcode.regexp()` match.
* A `wp.shortcode` instance can be created from a `wp.shortcode.regexp()` match by calling `wp.shortcode.fromMatch( match )`.
* Adds `wp.shortcode.string()`, which takes a set of shortcode parameters and converts them into a string.* Renames `wp.shortcode.prototype.text()` to `wp.shortcode.prototype.string()`.
* Adds an additional capture group to `wp.shortcode.regexp()` that records whether or not the shortcode has a closing tag. This allows us to improve the accuracy of the syntax used when transforming a shortcode object back into a string.
'''Media Models'''
* Prevents media `Query` models from observing the central `Attachments.all` object when query args without corresponding filters are set (otherwise, queries quickly amass false positives).
* Adds `post__in`, `post__not_in`, and `post_parent` as acceptable JS attachment `Query` args.
* `Attachments.more()` always returns a `$.promise` object.
see #21390, #21809, #21812, #21815, #21817.
git-svn-id: https://develop.svn.wordpress.org/trunk@22120 602fd350-edb4-49c9-b593-d223f7449a82
2012-10-05 06:23:59 +02:00
$plugins = array ( 'inlinepopups' , 'spellchecker' , 'tabfocus' , 'paste' , 'media' , 'fullscreen' , 'wordpress' , 'wplink' , 'wpdialogs' , 'wpview' );
2011-08-03 12:19:00 +02:00
$first_run = true ;
2012-02-13 19:05:04 +01:00
$ext_plugins = '' ;
2011-08-03 12:19:00 +02:00
2011-09-24 06:43:19 +02:00
if ( $set [ 'teeny' ] ) {
2012-09-24 02:13:18 +02:00
self :: $plugins = $plugins = apply_filters ( 'teeny_mce_plugins' , array ( 'inlinepopups' , 'fullscreen' , 'wordpress' , 'wplink' , 'wpdialogs' , 'wpview' ), $editor_id );
2011-08-03 12:19:00 +02:00
} else {
/*
The following filter takes an associative array of external plugins for TinyMCE in the form 'plugin_name' => 'url' .
It adds the plugin 's name to TinyMCE' s plugins init and the call to PluginManager to load the plugin .
The url should be absolute and should include the js file name to be loaded . Example :
array ( 'myplugin' => 'http://my-site.com/wp-content/plugins/myfolder/mce_plugin.js' )
If the plugin uses a button , it should be added with one of the " $mce_buttons " filters .
*/
$mce_external_plugins = apply_filters ( 'mce_external_plugins' , array ());
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( ! empty ( $mce_external_plugins ) ) {
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
/*
The following filter loads external language files for TinyMCE plugins .
It takes an associative array 'plugin_name' => 'path' , where path is the
include path to the file . The language file should follow the same format as
/ tinymce / langs / wp - langs . php and should define a variable $strings that
holds all translated strings .
When this filter is not used , the function will try to load { mce_locale } . js .
If that is not found , en . js will be tried next .
*/
$mce_external_languages = apply_filters ( 'mce_external_languages' , array ());
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$loaded_langs = array ();
$strings = '' ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( ! empty ( $mce_external_languages ) ) {
foreach ( $mce_external_languages as $name => $path ) {
if ( @ is_file ( $path ) && @ is_readable ( $path ) ) {
include_once ( $path );
$ext_plugins .= $strings . " \n " ;
$loaded_langs [] = $name ;
}
}
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
foreach ( $mce_external_plugins as $name => $url ) {
2011-08-05 06:09:22 +02:00
2012-08-30 15:33:00 +02:00
$url = set_url_scheme ( $url );
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$plugins [] = '-' . $name ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$plugurl = dirname ( $url );
$strings = $str1 = $str2 = '' ;
if ( ! in_array ( $name , $loaded_langs ) ) {
2011-09-24 06:43:19 +02:00
$path = str_replace ( content_url (), '' , $plugurl );
2011-08-03 12:19:00 +02:00
$path = WP_CONTENT_DIR . $path . '/langs/' ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( function_exists ( 'realpath' ) )
$path = trailingslashit ( realpath ( $path ) );
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( @ is_file ( $path . $mce_locale . '.js' ) )
$strings .= @ file_get_contents ( $path . $mce_locale . '.js' ) . " \n " ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( @ is_file ( $path . $mce_locale . '_dlg.js' ) )
$strings .= @ file_get_contents ( $path . $mce_locale . '_dlg.js' ) . " \n " ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( 'en' != $mce_locale && empty ( $strings ) ) {
if ( @ is_file ( $path . 'en.js' ) ) {
$str1 = @ file_get_contents ( $path . 'en.js' );
$strings .= preg_replace ( '/([\'"])en\./' , '$1' . $mce_locale . '.' , $str1 , 1 ) . " \n " ;
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( @ is_file ( $path . 'en_dlg.js' ) ) {
$str2 = @ file_get_contents ( $path . 'en_dlg.js' );
$strings .= preg_replace ( '/([\'"])en\./' , '$1' . $mce_locale . '.' , $str2 , 1 ) . " \n " ;
}
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( ! empty ( $strings ) )
$ext_plugins .= " \n " . $strings . " \n " ;
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . " \n " ;
$ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . " \n " ;
}
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$plugins = array_unique ( apply_filters ( 'tiny_mce_plugins' , $plugins ) );
2011-08-19 03:14:56 +02:00
}
2011-08-03 12:19:00 +02:00
2011-09-24 06:43:19 +02:00
if ( $set [ 'dfw' ] )
2011-08-19 03:14:56 +02:00
$plugins [] = 'wpfullscreen' ;
2011-11-23 20:06:52 +01:00
self :: $plugins = $plugins ;
2012-02-13 19:05:04 +01:00
self :: $ext_plugins = $ext_plugins ;
2011-08-19 03:14:56 +02:00
2012-02-06 20:13:06 +01:00
/*
translators : These languages show up in the spellchecker drop - down menu , in the order specified , and with the first
language listed being the default language . They must be comma - separated and take the format of name = code , where name
is the language name ( which you may internationalize ), and code is a valid ISO 639 language code . Please test the
spellchecker with your values .
*/
$mce_spellchecker_languages = __ ( 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv' );
2011-08-19 03:14:56 +02:00
/*
The following filter allows localization scripts to change the languages displayed in the spellchecker ' s drop - down menu .
By default it uses Google ' s spellchecker API , but can be configured to use PSpell / ASpell if installed on the server .
2012-02-06 20:13:06 +01:00
The + sign marks the default language . More : http :// www . tinymce . com / wiki . php / Plugin : spellchecker .
2011-08-19 03:14:56 +02:00
*/
2012-02-06 20:13:06 +01:00
$mce_spellchecker_languages = apply_filters ( 'mce_spellchecker_languages' , '+' . $mce_spellchecker_languages );
2011-08-19 03:14:56 +02:00
2011-11-23 20:06:52 +01:00
self :: $first_init = array (
2011-08-19 03:14:56 +02:00
'mode' => 'exact' ,
'width' => '100%' ,
'theme' => 'advanced' ,
'skin' => 'wp_theme' ,
2011-11-23 20:06:52 +01:00
'language' => self :: $mce_locale ,
2011-08-19 03:14:56 +02:00
'spellchecker_languages' => $mce_spellchecker_languages ,
'theme_advanced_toolbar_location' => 'top' ,
'theme_advanced_toolbar_align' => 'left' ,
'theme_advanced_statusbar_location' => 'bottom' ,
'theme_advanced_resizing' => true ,
'theme_advanced_resize_horizontal' => false ,
'dialog_type' => 'modal' ,
'formats' => " {
alignleft : [
{ selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li' , styles : { textAlign : 'left' }},
{ selector : 'img,table' , classes : 'alignleft' }
],
aligncenter : [
{ selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li' , styles : { textAlign : 'center' }},
{ selector : 'img,table' , classes : 'aligncenter' }
],
alignright : [
{ selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li' , styles : { textAlign : 'right' }},
{ selector : 'img,table' , classes : 'alignright' }
],
strikethrough : { inline : 'del' }
} " ,
'relative_urls' => false ,
'remove_script_host' => false ,
'convert_urls' => false ,
'remove_linebreaks' => true ,
'gecko_spellcheck' => true ,
2011-12-25 18:27:39 +01:00
'fix_list_elements' => true ,
2011-08-19 03:14:56 +02:00
'keep_styles' => false ,
'entities' => '38,amp,60,lt,62,gt' ,
'accessibility_focus' => true ,
'media_strict' => false ,
'paste_remove_styles' => true ,
'paste_remove_spans' => true ,
'paste_strip_class_attributes' => 'all' ,
'paste_text_use_dialog' => true ,
2012-08-22 03:47:53 +02:00
'webkit_fake_resize' => false ,
2012-02-04 23:23:27 +01:00
'spellchecker_rpc_url' => self :: $baseurl . '/plugins/spellchecker/rpc.php' ,
2012-09-16 23:20:35 +02:00
'schema' => 'html5' ,
2011-08-19 03:14:56 +02:00
'wpeditimage_disable_captions' => $no_captions ,
2011-11-23 20:06:52 +01:00
'wp_fullscreen_content_css' => self :: $baseurl . '/plugins/wpfullscreen/css/wp-fullscreen.css' ,
2011-08-19 03:14:56 +02:00
'plugins' => implode ( ',' , $plugins )
);
// load editor_style.css if the current theme supports it
if ( ! empty ( $editor_styles ) && is_array ( $editor_styles ) ) {
$mce_css = array ();
2011-08-19 16:47:45 +02:00
$editor_styles = array_unique ( $editor_styles );
2011-08-19 03:14:56 +02:00
$style_uri = get_stylesheet_directory_uri ();
2012-03-01 01:18:26 +01:00
$style_dir = get_stylesheet_directory ();
if ( is_child_theme () ) {
2011-08-19 03:14:56 +02:00
$template_uri = get_template_directory_uri ();
$template_dir = get_template_directory ();
2011-08-19 16:56:34 +02:00
2012-04-03 00:26:11 +02:00
foreach ( $editor_styles as $key => $file ) {
2012-06-25 22:45:05 +02:00
if ( $file && file_exists ( " $template_dir / $file " ) )
2011-08-19 03:14:56 +02:00
$mce_css [] = " $template_uri / $file " ;
2011-08-19 16:56:34 +02:00
}
2011-08-03 12:19:00 +02:00
}
2012-03-01 01:18:26 +01:00
2012-04-03 00:26:11 +02:00
foreach ( $editor_styles as $file ) {
if ( $file && file_exists ( " $style_dir / $file " ) )
$mce_css [] = " $style_uri / $file " ;
}
2011-08-19 03:14:56 +02:00
$mce_css = implode ( ',' , $mce_css );
} else {
$mce_css = '' ;
}
2011-08-05 06:09:22 +02:00
2011-08-19 03:14:56 +02:00
$mce_css = trim ( apply_filters ( 'mce_css' , $mce_css ), ' ,' );
2011-08-05 06:09:22 +02:00
2011-08-19 03:14:56 +02:00
if ( ! empty ( $mce_css ) )
2011-11-23 20:06:52 +01:00
self :: $first_init [ 'content_css' ] = $mce_css ;
2011-08-03 12:19:00 +02:00
}
2011-09-24 06:43:19 +02:00
if ( $set [ 'teeny' ] ) {
2012-09-27 02:41:49 +02:00
$mce_buttons = apply_filters ( 'teeny_mce_buttons' , array ( 'bold' , 'italic' , 'underline' , 'blockquote' , 'strikethrough' , 'bullist' , 'numlist' , 'justifyleft' , 'justifycenter' , 'justifyright' , 'undo' , 'redo' , 'link' , 'unlink' , 'fullscreen' ), $editor_id );
2011-08-03 12:19:00 +02:00
$mce_buttons_2 = $mce_buttons_3 = $mce_buttons_4 = array ();
} else {
2012-09-27 02:41:49 +02:00
$mce_buttons = apply_filters ( 'mce_buttons' , array ( 'bold' , 'italic' , 'strikethrough' , 'bullist' , 'numlist' , 'blockquote' , 'justifyleft' , 'justifycenter' , 'justifyright' , 'link' , 'unlink' , 'wp_more' , 'spellchecker' , 'fullscreen' , 'wp_adv' ), $editor_id );
$mce_buttons_2 = apply_filters ( 'mce_buttons_2' , array ( 'formatselect' , 'underline' , 'justifyfull' , 'forecolor' , 'pastetext' , 'pasteword' , 'removeformat' , 'charmap' , 'outdent' , 'indent' , 'undo' , 'redo' , 'wp_help' ), $editor_id );
2011-08-03 12:19:00 +02:00
$mce_buttons_3 = apply_filters ( 'mce_buttons_3' , array (), $editor_id );
$mce_buttons_4 = apply_filters ( 'mce_buttons_4' , array (), $editor_id );
}
2012-02-13 08:22:45 +01:00
$body_class = $editor_id ;
2012-09-04 18:29:28 +02:00
if ( $post = get_post () )
$body_class .= ' post-type-' . $post -> post_type ;
2012-02-13 08:22:45 +01:00
if ( ! empty ( $set [ 'tinymce' ][ 'body_class' ]) ) {
$body_class .= ' ' . $set [ 'tinymce' ][ 'body_class' ];
unset ( $set [ 'tinymce' ][ 'body_class' ]);
}
2011-09-24 06:43:19 +02:00
if ( $set [ 'dfw' ] ) {
2011-10-18 09:08:55 +02:00
// replace the first 'fullscreen' with 'wp_fullscreen'
if ( ( $key = array_search ( 'fullscreen' , $mce_buttons )) !== false )
$mce_buttons [ $key ] = 'wp_fullscreen' ;
elseif ( ( $key = array_search ( 'fullscreen' , $mce_buttons_2 )) !== false )
$mce_buttons_2 [ $key ] = 'wp_fullscreen' ;
elseif ( ( $key = array_search ( 'fullscreen' , $mce_buttons_3 )) !== false )
2011-10-24 21:13:23 +02:00
$mce_buttons_3 [ $key ] = 'wp_fullscreen' ;
2011-10-18 09:08:55 +02:00
elseif ( ( $key = array_search ( 'fullscreen' , $mce_buttons_4 )) !== false )
$mce_buttons_4 [ $key ] = 'wp_fullscreen' ;
2011-08-03 12:19:00 +02:00
}
$mceInit = array (
'elements' => $editor_id ,
2011-09-24 06:43:19 +02:00
'wpautop' => ( bool ) $set [ 'wpautop' ],
'remove_linebreaks' => ( bool ) $set [ 'wpautop' ],
'apply_source_formatting' => ( bool ) ! $set [ 'wpautop' ],
2011-08-03 12:19:00 +02:00
'theme_advanced_buttons1' => implode ( $mce_buttons , ',' ),
'theme_advanced_buttons2' => implode ( $mce_buttons_2 , ',' ),
'theme_advanced_buttons3' => implode ( $mce_buttons_3 , ',' ),
2012-02-13 08:22:45 +01:00
'theme_advanced_buttons4' => implode ( $mce_buttons_4 , ',' ),
2012-07-22 04:33:53 +02:00
'tabfocus_elements' => $set [ 'tabfocus_elements' ],
2012-02-13 08:22:45 +01:00
'body_class' => $body_class
2011-08-03 12:19:00 +02:00
);
2011-08-05 06:09:22 +02:00
2012-09-26 05:30:21 +02:00
// The main editor doesn't use the TinyMCE resizing cookie.
$mceInit [ 'theme_advanced_resizing_use_cookie' ] = 'content' !== $editor_id || empty ( $set [ 'editor_height' ] );
2011-08-03 12:19:00 +02:00
if ( $first_run )
2011-11-23 20:06:52 +01:00
$mceInit = array_merge ( self :: $first_init , $mceInit );
2011-08-03 12:19:00 +02:00
2011-09-24 06:43:19 +02:00
if ( is_array ( $set [ 'tinymce' ]) )
$mceInit = array_merge ( $mceInit , $set [ 'tinymce' ]);
2011-08-03 12:19:00 +02:00
// For people who really REALLY know what they're doing with TinyMCE
// You can modify initArray to add, remove, change elements of the config before tinyMCE.init
// Setting "valid_elements", "invalid_elements" and "extended_valid_elements" can be done through this filter.
// Best is to use the default cleanup by not specifying valid_elements, as TinyMCE contains full set of XHTML 1.0.
2011-09-24 06:43:19 +02:00
if ( $set [ 'teeny' ] ) {
2011-08-03 12:19:00 +02:00
$mceInit = apply_filters ( 'teeny_mce_before_init' , $mceInit , $editor_id );
} else {
$mceInit = apply_filters ( 'tiny_mce_before_init' , $mceInit , $editor_id );
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( empty ( $mceInit [ 'theme_advanced_buttons3' ]) && ! empty ( $mceInit [ 'theme_advanced_buttons4' ]) ) {
$mceInit [ 'theme_advanced_buttons3' ] = $mceInit [ 'theme_advanced_buttons4' ];
$mceInit [ 'theme_advanced_buttons4' ] = '' ;
}
2011-11-23 20:06:52 +01:00
self :: $mce_settings [ $editor_id ] = $mceInit ;
} // end if self::$this_tinymce
2011-08-03 12:19:00 +02:00
}
2011-08-05 06:09:22 +02:00
2011-11-23 20:06:52 +01:00
private static function _parse_init ( $init ) {
2011-08-03 12:19:00 +02:00
$options = '' ;
foreach ( $init as $k => $v ) {
if ( is_bool ( $v ) ) {
$val = $v ? 'true' : 'false' ;
$options .= $k . ':' . $val . ',' ;
continue ;
} elseif ( ! empty ( $v ) && is_string ( $v ) && ( ( '{' == $v { 0 } && '}' == $v { strlen ( $v ) - 1 }) || ( '[' == $v { 0 } && ']' == $v { strlen ( $v ) - 1 }) || preg_match ( '/^\(?function ?\(/' , $v ) ) ) {
$options .= $k . ':' . $v . ',' ;
continue ;
}
$options .= $k . ':"' . $v . '",' ;
}
return '{' . trim ( $options , ' ,' ) . '}' ;
}
2011-08-05 06:09:22 +02:00
2011-11-23 20:06:52 +01:00
public static function enqueue_scripts () {
2011-08-03 12:19:00 +02:00
wp_enqueue_script ( 'word-count' );
2011-08-05 06:09:22 +02:00
2011-11-23 20:06:52 +01:00
if ( self :: $has_tinymce )
2011-09-24 06:43:19 +02:00
wp_enqueue_script ( 'editor' );
2011-11-23 20:06:52 +01:00
if ( self :: $has_quicktags )
2011-09-24 06:43:19 +02:00
wp_enqueue_script ( 'quicktags' );
2011-11-23 20:06:52 +01:00
if ( in_array ( 'wplink' , self :: $plugins , true ) || in_array ( 'link' , self :: $qt_buttons , true ) ) {
2011-09-24 06:43:19 +02:00
wp_enqueue_script ( 'wplink' );
wp_enqueue_script ( 'wpdialogs-popup' );
wp_enqueue_style ( 'wp-jquery-ui-dialog' );
}
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
if ( in_array ( 'wpfullscreen' , self :: $plugins , true ) || in_array ( 'fullscreen' , self :: $qt_buttons , true ) )
2011-08-03 12:19:00 +02:00
wp_enqueue_script ( 'wp-fullscreen' );
2011-11-23 20:06:52 +01:00
if ( self :: $has_medialib ) {
2011-09-28 09:26:34 +02:00
add_thickbox ();
wp_enqueue_script ( 'media-upload' );
}
2011-08-03 12:19:00 +02:00
}
2011-11-23 20:06:52 +01:00
public static function editor_js () {
2011-08-03 12:19:00 +02:00
global $tinymce_version , $concatenate_scripts , $compress_scripts ;
/**
* Filter " tiny_mce_version " is deprecated
*
* The tiny_mce_version filter is not needed since external plugins are loaded directly by TinyMCE .
* These plugins can be refreshed by appending query string to the URL passed to " mce_external_plugins " filter .
* If the plugin has a popup dialog , a query string can be added to the button action that opens it ( in the plugin ' s code ) .
*/
$version = 'ver=' . $tinymce_version ;
2011-11-23 20:06:52 +01:00
$tmce_on = ! empty ( self :: $mce_settings );
2011-08-03 12:19:00 +02:00
if ( ! isset ( $concatenate_scripts ) )
script_concat_settings ();
$compressed = $compress_scripts && $concatenate_scripts && isset ( $_SERVER [ 'HTTP_ACCEPT_ENCODING' ])
&& false !== stripos ( $_SERVER [ 'HTTP_ACCEPT_ENCODING' ], 'gzip' );
2011-11-23 20:06:52 +01:00
if ( $tmce_on && 'en' != self :: $mce_locale )
2011-08-03 12:19:00 +02:00
include_once ( ABSPATH . WPINC . '/js/tinymce/langs/wp-langs.php' );
$mceInit = $qtInit = '' ;
2011-08-05 06:09:22 +02:00
if ( $tmce_on ) {
2011-11-23 20:06:52 +01:00
foreach ( self :: $mce_settings as $editor_id => $init ) {
$options = self :: _parse_init ( $init );
2011-09-24 06:43:19 +02:00
$mceInit .= " ' $editor_id ': { $options } , " ;
2011-08-03 12:19:00 +02:00
}
2011-09-24 06:43:19 +02:00
$mceInit = '{' . trim ( $mceInit , ',' ) . '}' ;
2011-08-03 12:19:00 +02:00
} else {
$mceInit = '{}' ;
}
2011-11-23 20:06:52 +01:00
if ( ! empty ( self :: $qt_settings ) ) {
foreach ( self :: $qt_settings as $editor_id => $init ) {
$options = self :: _parse_init ( $init );
2011-09-24 06:43:19 +02:00
$qtInit .= " ' $editor_id ': { $options } , " ;
2011-08-03 12:19:00 +02:00
}
2011-09-24 06:43:19 +02:00
$qtInit = '{' . trim ( $qtInit , ',' ) . '}' ;
2011-08-03 12:19:00 +02:00
} else {
$qtInit = '{}' ;
}
$ref = array (
2011-11-23 20:06:52 +01:00
'plugins' => implode ( ',' , self :: $plugins ),
2011-08-03 12:19:00 +02:00
'theme' => 'advanced' ,
2011-11-23 20:06:52 +01:00
'language' => self :: $mce_locale
2011-08-03 12:19:00 +02:00
);
2012-02-18 07:43:47 +01:00
$suffix = ( defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '_src' : '' ;
2011-11-23 20:06:52 +01:00
do_action ( 'before_wp_tiny_mce' , self :: $mce_settings );
2011-08-03 12:19:00 +02:00
?>
< script type = " text/javascript " >
tinyMCEPreInit = {
2011-11-23 20:06:52 +01:00
base : " <?php echo self:: $baseurl ; ?> " ,
2012-02-18 07:43:47 +01:00
suffix : " <?php echo $suffix ; ?> " ,
2011-08-03 12:19:00 +02:00
query : " <?php echo $version ; ?> " ,
mceInit : < ? php echo $mceInit ; ?> ,
qtInit : < ? php echo $qtInit ; ?> ,
2011-11-23 20:06:52 +01:00
ref : < ? php echo self :: _parse_init ( $ref ); ?> ,
2011-08-03 12:19:00 +02:00
load_ext : function ( url , lang ){ var sl = tinymce . ScriptLoader ; sl . markDone ( url + '/langs/' + lang + '.js' ); sl . markDone ( url + '/langs/' + lang + '_dlg.js' );}
};
</ script >
< ? php
2011-11-23 20:06:52 +01:00
$baseurl = self :: $baseurl ;
2011-08-05 06:09:22 +02:00
if ( $tmce_on ) {
2011-08-03 12:19:00 +02:00
if ( $compressed )
2011-11-23 20:06:52 +01:00
echo " <script type='text/javascript' src=' { $baseurl } /wp-tinymce.php?c=1& $version '></script> \n " ;
2011-08-03 12:19:00 +02:00
else
2011-11-23 20:06:52 +01:00
echo " <script type='text/javascript' src=' { $baseurl } /tiny_mce.js? $version '></script> \n " ;
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
if ( 'en' != self :: $mce_locale && isset ( $lang ) )
2011-08-03 12:19:00 +02:00
echo " <script type='text/javascript'> \n $lang\n </script> \n " ;
else
2011-11-23 20:06:52 +01:00
echo " <script type='text/javascript' src=' { $baseurl } /langs/wp-langs-en.js? $version '></script> \n " ;
2011-08-03 12:19:00 +02:00
}
2012-09-26 05:30:21 +02:00
$mce = ( self :: $has_tinymce && wp_default_editor () == 'tinymce' ) || ! self :: $has_quicktags ;
2011-08-03 12:19:00 +02:00
?>
< script type = " text/javascript " >
2012-09-26 05:30:21 +02:00
var wpActiveEditor ;
2011-08-03 12:19:00 +02:00
( function (){
2012-09-26 05:30:21 +02:00
var init , ed , qt , first_init , DOM , el , i , mce = < ? php echo ( int ) $mce ; ?> ;
2011-08-03 12:19:00 +02:00
if ( typeof ( tinymce ) == 'object' ) {
2012-09-26 05:30:21 +02:00
DOM = tinymce . DOM ;
2011-12-01 22:27:19 +01:00
// mark wp_theme/ui.css as loaded
2012-09-26 05:30:21 +02:00
DOM . files [ tinymce . baseURI . getURI () + '/themes/advanced/skins/wp_theme/ui.css' ] = true ;
DOM . events . add ( DOM . select ( '.wp-editor-wrap' ), 'mousedown' , function ( e ){
if ( this . id )
wpActiveEditor = this . id . slice ( 3 , - 5 );
});
2011-12-01 22:27:19 +01:00
2011-08-03 12:19:00 +02:00
for ( ed in tinyMCEPreInit . mceInit ) {
if ( first_init ) {
init = tinyMCEPreInit . mceInit [ ed ] = tinymce . extend ( {}, first_init , tinyMCEPreInit . mceInit [ ed ] );
} else {
init = first_init = tinyMCEPreInit . mceInit [ ed ];
}
if ( mce )
2011-08-06 03:35:02 +02:00
try { tinymce . init ( init ); } catch ( e ){}
2011-08-03 12:19:00 +02:00
}
2012-09-26 05:30:21 +02:00
} else {
2012-10-17 00:01:30 +02:00
if ( tinyMCEPreInit . qtInit ) {
for ( i in tinyMCEPreInit . qtInit ) {
el = tinyMCEPreInit . qtInit [ i ] . id ;
if ( el )
document . getElementById ( 'wp-' + el + '-wrap' ) . onmousedown = function (){ wpActiveEditor = this . id . slice ( 3 , - 5 ); }
}
2012-09-26 05:30:21 +02:00
}
2011-08-03 12:19:00 +02:00
}
if ( typeof ( QTags ) == 'function' ) {
for ( qt in tinyMCEPreInit . qtInit ) {
2011-08-06 03:35:02 +02:00
try { quicktags ( tinyMCEPreInit . qtInit [ qt ] ); } catch ( e ){}
2011-08-03 12:19:00 +02:00
}
}
})();
2012-09-26 05:30:21 +02:00
< ? php
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
if ( self :: $ext_plugins )
echo self :: $ext_plugins . " \n " ;
2011-08-03 12:19:00 +02:00
2011-08-05 06:09:22 +02:00
if ( ! $compressed && $tmce_on ) {
2012-09-26 05:30:21 +02:00
?>
( function (){ var t = tinyMCEPreInit , sl = tinymce . ScriptLoader , ln = t . ref . language , th = t . ref . theme , pl = t . ref . plugins ; sl . markDone ( t . base + '/langs/' + ln + '.js' ); sl . markDone ( t . base + '/themes/' + th + '/langs/' + ln + '.js' ); sl . markDone ( t . base + '/themes/' + th + '/langs/' + ln + '_dlg.js' ); sl . markDone ( t . base + '/themes/advanced/skins/wp_theme/ui.css' ); tinymce . each ( pl . split ( ',' ), function ( n ){ if ( n && n . charAt ( 0 ) != '-' ){ sl . markDone ( t . base + '/plugins/' + n + '/langs/' + ln + '.js' ); sl . markDone ( t . base + '/plugins/' + n + '/langs/' + ln + '_dlg.js' );}});})();
< ? php
2011-08-03 12:19:00 +02:00
}
if ( ! is_admin () )
2012-02-08 17:12:11 +01:00
echo 'var ajaxurl = "' . admin_url ( 'admin-ajax.php' , 'relative' ) . '";' ;
2012-09-26 05:30:21 +02:00
?>
</ script >
< ? php
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
if ( in_array ( 'wplink' , self :: $plugins , true ) || in_array ( 'link' , self :: $qt_buttons , true ) )
self :: wp_link_dialog ();
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
if ( in_array ( 'wpfullscreen' , self :: $plugins , true ) || in_array ( 'fullscreen' , self :: $qt_buttons , true ) )
self :: wp_fullscreen_html ();
2011-08-03 12:19:00 +02:00
2011-11-23 20:06:52 +01:00
do_action ( 'after_wp_tiny_mce' , self :: $mce_settings );
2011-08-03 12:19:00 +02:00
}
2011-11-23 20:06:52 +01:00
public static function wp_fullscreen_html () {
2012-09-04 18:29:28 +02:00
global $content_width ;
$post = get_post ();
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$width = isset ( $content_width ) && 800 > $content_width ? $content_width : 800 ;
2011-09-13 22:03:28 +02:00
$width = $width + 22 ; // compensate for the padding and border
2011-08-03 12:19:00 +02:00
$dfw_width = get_user_setting ( 'dfw_width' , $width );
$save = isset ( $post -> post_status ) && $post -> post_status == 'publish' ? __ ( 'Update' ) : __ ( 'Save' );
?>
2012-03-10 00:23:10 +01:00
< div id = " wp-fullscreen-body " < ? php if ( is_rtl () ) echo ' class="rtl"' ; ?> >
2011-08-03 12:19:00 +02:00
< div id = " fullscreen-topbar " >
< div id = " wp-fullscreen-toolbar " >
< div id = " wp-fullscreen-close " >< a href = " # " onclick = " fullscreen.off();return false; " >< ? php _e ( 'Exit fullscreen' ); ?> </a></div>
< div id = " wp-fullscreen-central-toolbar " style = " width:<?php echo $width ; ?>px; " >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div id = " wp-fullscreen-mode-bar " >< div id = " wp-fullscreen-modes " >
2012-08-03 23:08:52 +02:00
< a href = " # " onclick = " fullscreen.switchmode('tinymce');return false; " >< ? php _e ( 'Visual' ); ?> </a>
< a href = " # " onclick = " fullscreen.switchmode('html');return false; " >< ? php _ex ( 'Text' , 'Name for the Text editor tab (formerly HTML)' ); ?> </a>
2011-08-03 12:19:00 +02:00
</ div ></ div >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div id = " wp-fullscreen-button-bar " >< div id = " wp-fullscreen-buttons " class = " wp_themeSkin " >
< ? php
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$buttons = array (
// format: title, onclick, show in both editors
'bold' => array ( 'title' => __ ( 'Bold (Ctrl + B)' ), 'onclick' => 'fullscreen.b();' , 'both' => false ),
'italic' => array ( 'title' => __ ( 'Italic (Ctrl + I)' ), 'onclick' => 'fullscreen.i();' , 'both' => false ),
'0' => 'separator' ,
'bullist' => array ( 'title' => __ ( 'Unordered list (Alt + Shift + U)' ), 'onclick' => 'fullscreen.ul();' , 'both' => false ),
'numlist' => array ( 'title' => __ ( 'Ordered list (Alt + Shift + O)' ), 'onclick' => 'fullscreen.ol();' , 'both' => false ),
'1' => 'separator' ,
2011-11-12 07:15:15 +01:00
'blockquote' => array ( 'title' => __ ( 'Blockquote (Alt + Shift + Q)' ), 'onclick' => 'fullscreen.blockquote();' , 'both' => false ),
2011-09-19 02:47:23 +02:00
'image' => array ( 'title' => __ ( 'Insert/edit image (Alt + Shift + M)' ), 'onclick' => " fullscreen.medialib(); " , 'both' => true ),
2011-08-03 12:19:00 +02:00
'2' => 'separator' ,
'link' => array ( 'title' => __ ( 'Insert/edit link (Alt + Shift + A)' ), 'onclick' => 'fullscreen.link();' , 'both' => true ),
'unlink' => array ( 'title' => __ ( 'Unlink (Alt + Shift + S)' ), 'onclick' => 'fullscreen.unlink();' , 'both' => false ),
'3' => 'separator' ,
'help' => array ( 'title' => __ ( 'Help (Alt + Shift + H)' ), 'onclick' => 'fullscreen.help();' , 'both' => false )
);
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$buttons = apply_filters ( 'wp_fullscreen_buttons' , $buttons );
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
foreach ( $buttons as $button => $args ) {
if ( 'separator' == $args ) { ?>
< div >< span aria - orientation = " vertical " role = " separator " class = " mceSeparator " ></ span ></ div >
< ? php continue ;
} ?>
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div < ? php if ( $args [ 'both' ] ) { ?> class="wp-fullscreen-both"<?php } ?>>
< a title = " <?php echo $args['title'] ; ?> " onclick = " <?php echo $args['onclick'] ; ?>return false; " class = " mceButton mceButtonEnabled mce_<?php echo $button ; ?> " href = " # " id = " wp_fs_<?php echo $button ; ?> " role = " button " aria - pressed = " false " >
< span class = " mceIcon mce_<?php echo $button ; ?> " ></ span >
</ a >
</ div >
< ? php
} ?>
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
</ div ></ div >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div id = " wp-fullscreen-save " >
2012-09-26 21:57:44 +02:00
< input type = " button " class = " button-primary right " value = " <?php echo $save ; ?> " onclick = " fullscreen.save(); " />
< span class = " spinner " ></ span >
< span class = " fs-saved " >< ? php if ( $post -> post_status == 'publish' ) _e ( 'Updated.' ); else _e ( 'Saved.' ); ?> </span>
2011-08-03 12:19:00 +02:00
</ div >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
</ div >
</ div >
</ div >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div id = " wp-fullscreen-wrap " style = " width:<?php echo $dfw_width ; ?>px; " >
2011-09-30 00:59:49 +02:00
< ? php if ( post_type_supports ( $post -> post_type , 'title' ) ) { ?>
2011-08-03 12:19:00 +02:00
< label id = " wp-fullscreen-title-prompt-text " for = " wp-fullscreen-title " >< ? php echo apply_filters ( 'enter_title_here' , __ ( 'Enter title here' ), $post ); ?> </label>
< input type = " text " id = " wp-fullscreen-title " value = " " autocomplete = " off " />
2011-09-30 00:59:49 +02:00
< ? php } ?>
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div id = " wp-fullscreen-container " >
< textarea id = " wp_mce_fullscreen " ></ textarea >
</ div >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div id = " wp-fullscreen-status " >
< div id = " wp-fullscreen-count " >< ? php printf ( __ ( 'Word count: %s' ), '<span class="word-count">0</span>' ); ?> </div>
< div id = " wp-fullscreen-tagline " >< ? php _e ( 'Just write.' ); ?> </div>
</ div >
</ div >
</ div >
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
< div class = " fullscreen-overlay " id = " fullscreen-overlay " ></ div >
< div class = " fullscreen-overlay fullscreen-fader fade-600 " id = " fullscreen-fader " ></ div >
< ? php
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
/**
* Performs post queries for internal linking .
*
* @ since 3.1 . 0
*
* @ param array $args Optional . Accepts 'pagenum' and 's' ( search ) arguments .
* @ return array Results .
*/
2011-11-23 20:06:52 +01:00
public static function wp_link_query ( $args = array () ) {
2011-08-03 12:19:00 +02:00
$pts = get_post_types ( array ( 'public' => true ), 'objects' );
$pt_names = array_keys ( $pts );
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$query = array (
'post_type' => $pt_names ,
'suppress_filters' => true ,
'update_post_term_cache' => false ,
'update_post_meta_cache' => false ,
'post_status' => 'publish' ,
'order' => 'DESC' ,
'orderby' => 'post_date' ,
'posts_per_page' => 20 ,
);
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$args [ 'pagenum' ] = isset ( $args [ 'pagenum' ] ) ? absint ( $args [ 'pagenum' ] ) : 1 ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
if ( isset ( $args [ 's' ] ) )
$query [ 's' ] = $args [ 's' ];
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$query [ 'offset' ] = $args [ 'pagenum' ] > 1 ? $query [ 'posts_per_page' ] * ( $args [ 'pagenum' ] - 1 ) : 0 ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
// Do main query.
$get_posts = new WP_Query ;
$posts = $get_posts -> query ( $query );
// Check if any posts were found.
if ( ! $get_posts -> post_count )
return false ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
// Build results.
$results = array ();
foreach ( $posts as $post ) {
if ( 'post' == $post -> post_type )
$info = mysql2date ( __ ( 'Y/m/d' ), $post -> post_date );
else
$info = $pts [ $post -> post_type ] -> labels -> singular_name ;
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
$results [] = array (
'ID' => $post -> ID ,
'title' => trim ( esc_html ( strip_tags ( get_the_title ( $post ) ) ) ),
'permalink' => get_permalink ( $post -> ID ),
'info' => $info ,
);
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
return $results ;
}
2011-08-05 06:09:22 +02:00
2011-08-03 12:19:00 +02:00
/**
* Dialog for internal linking .
*
* @ since 3.1 . 0
*/
2011-11-23 20:06:52 +01:00
public static function wp_link_dialog () {
2011-08-03 12:19:00 +02:00
?>
< div style = " display:none; " >
< form id = " wp-link " tabindex = " -1 " >
< ? php wp_nonce_field ( 'internal-linking' , '_ajax_linking_nonce' , false ); ?>
< div id = " link-selector " >
< div id = " link-options " >
< p class = " howto " >< ? php _e ( 'Enter the destination URL' ); ?> </p>
< div >
2012-07-24 02:15:15 +02:00
< label >< span >< ? php _e ( 'URL' ); ?> </span><input id="url-field" type="text" name="href" /></label>
2011-08-03 12:19:00 +02:00
</ div >
< div >
2012-07-24 02:15:15 +02:00
< label >< span >< ? php _e ( 'Title' ); ?> </span><input id="link-title-field" type="text" name="linktitle" /></label>
2011-08-03 12:19:00 +02:00
</ div >
< div class = " link-target " >
2012-07-24 02:15:15 +02:00
< label >< input type = " checkbox " id = " link-target-checkbox " /> < ? php _e ( 'Open link in a new window/tab' ); ?> </label>
2011-08-03 12:19:00 +02:00
</ div >
</ div >
< ? php $show_internal = '1' == get_user_setting ( 'wplink' , '0' ); ?>
< p class = " howto toggle-arrow <?php if ( $show_internal ) echo 'toggle-arrow-active'; ?> " id = " internal-toggle " >< ? php _e ( 'Or link to existing content' ); ?> </p>
< div id = " search-panel " < ? php if ( ! $show_internal ) echo ' style="display:none"' ; ?> >
< div class = " link-search-wrapper " >
< label >
2012-09-26 21:57:44 +02:00
< span class = " search-label " >< ? php _e ( 'Search' ); ?> </span>
2012-07-24 02:15:15 +02:00
< input type = " search " id = " search-field " class = " link-search-field " autocomplete = " off " />
2012-09-26 21:57:44 +02:00
< span class = " spinner " ></ span >
2011-08-03 12:19:00 +02:00
</ label >
</ div >
< div id = " search-results " class = " query-results " >
< ul ></ ul >
< div class = " river-waiting " >
2012-09-26 21:57:44 +02:00
< span class = " spinner " ></ span >
2011-08-03 12:19:00 +02:00
</ div >
</ div >
< div id = " most-recent-results " class = " query-results " >
< div class = " query-notice " >< em >< ? php _e ( 'No search term specified. Showing recent items.' ); ?> </em></div>
< ul ></ ul >
< div class = " river-waiting " >
2012-09-26 21:57:44 +02:00
< span class = " spinner " ></ span >
2011-08-03 12:19:00 +02:00
</ div >
</ div >
</ div >
</ div >
< div class = " submitbox " >
< div id = " wp-link-update " >
2012-07-24 02:15:15 +02:00
< input type = " submit " value = " <?php esc_attr_e( 'Add Link' ); ?> " class = " button-primary " id = " wp-link-submit " name = " wp-link-submit " >
2011-08-03 12:19:00 +02:00
</ div >
2012-10-16 23:38:35 +02:00
< div id = " wp-link-cancel " >
< a class = " submitdelete deletion " href = " # " >< ? php _e ( 'Cancel' ); ?> </a>
</ div >
2011-08-03 12:19:00 +02:00
</ div >
</ form >
</ div >
< ? php
}
}