You are here

tinymce.api.php in TinyMCE 7

Documentation for TinyMCE module APIs.

File

tinymce.api.php
View source
<?php

/**
 * @file
 * Documentation for TinyMCE module APIs.
 */

/**
 * @addtogroup hooks
 * @{
 */

/**
 * Provides a list of TinyMCE plugins.
 *
 * Each plugin for TinyMCE must provide an array of properties containing
 * information about the plugin. At minimum, plugins must provide a path and
 * file location so that TinyMCE may add the plugin. Available properties for
 * each plugin include:
 *
 * - location: Required for all external plugins. String path to the plugin
 *   directory relative to the Drupal installation root. Do not include a
 *   trailing slash.
 * - file: Required for all external plugins. String file name of the plugin in
 *   the "location" directory.
 * - internal: Boolean value indicating if the plugin is part of the compressed
 *   TinyMCE library package and already loaded on all instances. If TRUE,
 *   the "location" and "file" properties are not needed.
 * - css: An array of CSS files that should be added by TinyMCE. These files
 *   are used only when TinyMCE is using an iframe wrapper around its content.
 *   If a plugin needs to include CSS for inline and iframe versions, it should
 *   add its CSS via TinyMCE's JavaScript TinyMCE.addCss() method.
 * - enabled callback: String containing a function name that can determine if
 *   this plugin should be enabled based on the current editor configuration.
 *   See the hook_tinymce_PLUGIN_plugin_check() function for an example.
 * - buttons: An array of buttons that are provided by this plugin. Each button
 *   should by keyed by its TinyMCE button name, and should contain an array
 *   of button properties, including:
 *   - label: A human-readable, translated button name.
 *   - image: An image for the button to be used in the toolbar.
 *   - image_rtl: If the image needs to have a right-to-left version, specify
 *     an alternative file that will be used in RTL editors.
 *   - image_alternative: If this button does not render as an image, specify
 *     an HTML string representing the contents of this button. This alternative
 *     will only be used in the administrative section for assembling the
 *     toolbar.
 *   - attributes: An array of HTML attributes which should be added to this
 *     button when rendering the button in the administrative section for
 *     assembling the toolbar.
 *   - multiple: Boolean value indicating if this button may be added multiple
 *     times to the toolbar. This typically is only applicable for dividers and
 *     group indicators.
 *   - required_tags: If this button requires certain HTML tags to be allowed,
 *     specify an array of tags.
 * @return array
 *   An array of plugin definitions, keyed by the plugin name.
 *
 * @see tinymce_tinymce_plugins()
 * @see hook_tinymce_PLUGIN_plugin_check()
 */
function hook_tinymce_plugins() {

  // The drupalcaption plugin provides consistent behaviors for image captions.
  $plugins['myplugin'] = array(
    'path' => drupal_get_path('module', 'mymodule') . '/js/myplugin',
    'file' => 'plugin.js',
    'css' => array(
      drupal_get_path('module', 'mymodule') . '/css/myplugin.css',
    ),
    'enabled callback' => 'mymodule_myplugin_plugin_check',
  );
  return $plugins;
}

/**
 * Modify the list of available TinyMCE plugins.
 *
 * This hook may be used to modify plugin properties after they have been
 * specified by other modules.
 *
 * @param $plugins
 *   An array of all the existing plugin definitions, passed by reference.
 *
 * @see hook_tinymce_plugins()
 */
function hook_tinymce_plugins_alter(array &$plugins) {
  $plugins['someplugin']['enabled callback'] = 'mymodule_someplugin_enabled_callback';
}

/**
 * Modify the list of CSS files that will be added to a TinyMCE instance.
 *
 * Modules may use this hook to provide their own custom CSS file without
 * providing a TinyMCE plugin. This list of CSS files is only used in the
 * iframe versions of TinyMCE.
 *
 * Note that because this hook is only called for modules and the active theme,
 * front-end themes will not be able to use this hook to add their own CSS files
 * if a different admin theme is active. Instead, front-end themes and base
 * themes may specify CSS files to be used in iframe instances of TinyMCE
 * through an entry in their .info file:
 *
 * @code
 * tinymce_stylesheets[] = css/tinymce-iframe.css
 * @endcode
 *
 * @param $css
 *   An array of CSS files, passed by reference. This is a flat list of file
 *   paths relative to the Drupal root.
 * @param $editor
 *   The editor object as returned by editor_load(), for which these files are
 *   being loaded.
 * @param $format
 *   The corresponding text format object as returned by filter_format_load()
 *   for which the current text editor is being displayed.
 *
 * @see _tinymce_theme_css()
 */
function hook_tinymce_css_alter(array &$css, $editor, $format) {
  $css[] = drupal_get_path('module', 'mymodule') . '/css/mymodule-tinymce.css';
}

/**
 * @} End of "addtogroup hooks".
 */

/**
 * Enabled callback for hook_tinymce_plugins().
 *
 * Note: This is not really a hook. The function name is manually specified via
 * 'enabled callback' in hook_tinymce_plugins(), with this recommended callback
 * name pattern. It is called from tinymce_add_settings().
 *
 * This callback should determine if a plugin should be enabled for a TinyMCE
 * instance. Plugins may be enabled based off an explicit setting, or enable
 * themselves based on the configuration of another setting, such as enabling
 * based on a particular button being present in the toolbar.
 *
 * @param object $editor
 *   An editor instance as returned by editor_load(). The editor's settings may
 *   be found in $editor->settings.
 * @param string $plugin_name
 *   String name of the plugin that is being checked.
 *
 * @return boolean
 *   Boolean TRUE if the plugin should be enabled, FALSE otherwise.
 *
 * @see hook_tinymce_plugins()
 * @see tinymce_add_settings()
 */
function hook_tinymce_PLUGIN_plugin_check($editor, $plugin_name) {

  // Automatically enable this plugin if the Underline button is enabled.
  foreach ($editor->settings['toolbar']['buttons'] as $row) {
    if (in_array('Underline', $row)) {
      return TRUE;
    }
  }
}

Functions

Namesort descending Description
hook_tinymce_css_alter Modify the list of CSS files that will be added to a TinyMCE instance.
hook_tinymce_plugins Provides a list of TinyMCE plugins.
hook_tinymce_plugins_alter Modify the list of available TinyMCE plugins.
hook_tinymce_PLUGIN_plugin_check Enabled callback for hook_tinymce_plugins().