207 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * @file
 | 
						|
 * API documentation for Wysiwyg module.
 | 
						|
 *
 | 
						|
 * To implement a "Drupal plugin" button, you need to write a Wysiwyg plugin:
 | 
						|
 * - Implement hook_wysiwyg_include_directory() to register the directory
 | 
						|
 *   containing plugin definitions.
 | 
						|
 * - In each plugin definition file, implement hook_INCLUDE_plugin().
 | 
						|
 * - For each plugin button, implement a JavaScript integration and an icon for
 | 
						|
 *   the button.
 | 
						|
 *
 | 
						|
 * @todo Icon: Recommended size and type of image.
 | 
						|
 *
 | 
						|
 * For example implementations you may want to look at
 | 
						|
 * - Image Assist (img_assist)
 | 
						|
 * - Teaser break plugin (plugins/break; part of WYSIWYG)
 | 
						|
 * - IMCE (imce_wysiwyg)
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Return an array of native editor plugins.
 | 
						|
 *
 | 
						|
 * Only to be used for native (internal) editor plugins.
 | 
						|
 *
 | 
						|
 * @see hook_wysiwyg_include_directory()
 | 
						|
 *
 | 
						|
 * @param $editor
 | 
						|
 *   The internal name of the currently processed editor.
 | 
						|
 * @param $version
 | 
						|
 *   The version of the currently processed editor.
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   An associative array having internal plugin names as keys and an array of
 | 
						|
 *   plugin meta-information as values.
 | 
						|
 */
 | 
						|
function hook_wysiwyg_plugin($editor, $version) {
 | 
						|
  switch ($editor) {
 | 
						|
    case 'tinymce':
 | 
						|
      if ($version > 3) {
 | 
						|
        return array(
 | 
						|
          'myplugin' => array(
 | 
						|
            // A URL to the plugin's homepage.
 | 
						|
            'url' => 'http://drupal.org/project/img_assist',
 | 
						|
            // The full path to the native editor plugin, no trailing slash.
 | 
						|
            // Ignored when 'internal' is set to TRUE below.
 | 
						|
            'path' => drupal_get_path('module', 'img_assist') . '/drupalimage',
 | 
						|
            // The name of the plugin's main JavaScript file.
 | 
						|
            // Ignored when 'internal' is set to TRUE below.
 | 
						|
            // Default value depends on which editor the plugin is for.
 | 
						|
            'filename' => 'editor_plugin.js',
 | 
						|
            // A list of buttons provided by this native plugin. The key has to
 | 
						|
            // match the corresponding JavaScript implementation. The value is
 | 
						|
            // is displayed on the editor configuration form only.
 | 
						|
            'buttons' => array(
 | 
						|
              'img_assist' => t('Image Assist'),
 | 
						|
            ),
 | 
						|
            // A list of editor extensions provided by this native plugin.
 | 
						|
            // Extensions are not displayed as buttons and touch the editor's
 | 
						|
            // internals, so you should know what you are doing.
 | 
						|
            'extensions' => array(
 | 
						|
              'imce' => t('IMCE'),
 | 
						|
            ),
 | 
						|
            // A list of global, native editor configuration settings to
 | 
						|
            // override. To be used rarely and only when required.
 | 
						|
            'options' => array(
 | 
						|
              'file_browser_callback' => 'imceImageBrowser',
 | 
						|
              'inline_styles' => TRUE,
 | 
						|
            ),
 | 
						|
            // Boolean whether the editor needs to load this plugin. When TRUE,
 | 
						|
            // the editor will automatically load the plugin based on the 'path'
 | 
						|
            // variable provided. If FALSE, the plugin either does not need to
 | 
						|
            // be loaded or is already loaded by something else on the page.
 | 
						|
            // Most plugins should define TRUE here.
 | 
						|
            'load' => TRUE,
 | 
						|
            // Boolean whether this plugin is a native plugin, i.e. shipped with
 | 
						|
            // the editor. Definition must be ommitted for plugins provided by
 | 
						|
            // other modules. TRUE means 'path' and 'filename' above are ignored
 | 
						|
            // and the plugin is instead loaded from the editor's plugin folder.
 | 
						|
            'internal' => TRUE,
 | 
						|
            // TinyMCE-specific: Additional HTML elements to allow in the markup.
 | 
						|
            'extended_valid_elements' => array(
 | 
						|
              'img[class|src|border=0|alt|title|width|height|align|name|style]',
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
        );
 | 
						|
      }
 | 
						|
      break;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Register a directory containing Wysiwyg plugins.
 | 
						|
 *
 | 
						|
 * @param $type
 | 
						|
 *   The type of objects being collected: either 'plugins' or 'editors'.
 | 
						|
 * @return
 | 
						|
 *   A sub-directory of the implementing module that contains the corresponding
 | 
						|
 *   plugin files. This directory must only contain integration files for
 | 
						|
 *   Wysiwyg module.
 | 
						|
 */
 | 
						|
function hook_wysiwyg_include_directory($type) {
 | 
						|
  switch ($type) {
 | 
						|
    case 'plugins':
 | 
						|
      // You can just return $type, if you place your Wysiwyg plugins into a
 | 
						|
      // sub-directory named 'plugins'.
 | 
						|
      return $type;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Define a Wysiwyg plugin.
 | 
						|
 *
 | 
						|
 * Supposed to be used for "Drupal plugins" (cross-editor plugins) only.
 | 
						|
 *
 | 
						|
 * @see hook_wysiwyg_plugin()
 | 
						|
 *
 | 
						|
 * Each plugin file in the specified plugin directory of a module needs to
 | 
						|
 * define meta information about the particular plugin provided.
 | 
						|
 * The plugin's hook implementation function name is built out of the following:
 | 
						|
 * - 'hook': The name of the module providing the plugin.
 | 
						|
 * - 'INCLUDE': The basename of the file containing the plugin definition.
 | 
						|
 * - 'plugin': Static.
 | 
						|
 *
 | 
						|
 * For example, if your module's name is 'mymodule' and
 | 
						|
 * mymodule_wysiwyg_include_directory() returned 'plugins' as plugin directory,
 | 
						|
 * and this directory contains an "awesome" plugin file named 'awesome.inc', i.e.
 | 
						|
 *   sites/all/modules/mymodule/plugins/awesome.inc
 | 
						|
 * then the corresponding plugin hook function name is:
 | 
						|
 *   mymodule_awesome_plugin()
 | 
						|
 *
 | 
						|
 * @see hook_wysiwyg_include_directory()
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   Meta information about the buttons provided by this plugin.
 | 
						|
 */
 | 
						|
function hook_INCLUDE_plugin() {
 | 
						|
  $plugins['awesome'] = array(
 | 
						|
    // The plugin's title; defaulting to its internal name ('awesome').
 | 
						|
    'title' => t('Awesome plugin'),
 | 
						|
    // The (vendor) homepage of this plugin; defaults to ''.
 | 
						|
    'vendor url' => 'http://drupal.org/project/wysiwyg',
 | 
						|
    // The path to the button's icon; defaults to
 | 
						|
    // '/[path-to-module]/[plugins-directory]/[plugin-name]/images'.
 | 
						|
    'icon path' => 'path to icon',
 | 
						|
    // The button image filename; defaults to '[plugin-name].png'.
 | 
						|
    'icon file' => 'name of the icon file with extension',
 | 
						|
    // The button title to display on hover.
 | 
						|
    'icon title' => t('Do something'),
 | 
						|
    // An alternative path to the integration JavaScript; defaults to
 | 
						|
    // '[path-to-module]/[plugins-directory]/[plugin-name]'.
 | 
						|
    'js path' => drupal_get_path('module', 'mymodule') . '/awesomeness',
 | 
						|
    // An alternative filename of the integration JavaScript; defaults to
 | 
						|
    // '[plugin-name].js'.
 | 
						|
    'js file' => 'awesome.js',
 | 
						|
    // An alternative path to the integration stylesheet; defaults to
 | 
						|
    // '[path-to-module]/[plugins-directory]/[plugin-name]'.
 | 
						|
    'css path' => drupal_get_path('module', 'mymodule') . '/awesomeness',
 | 
						|
    // An alternative filename of the integration stylesheet; defaults to
 | 
						|
    // '[plugin-name].css'.
 | 
						|
    'css file' => 'awesome.css',
 | 
						|
    // An array of settings for this button. Required, but API is still in flux.
 | 
						|
    'settings' => array(
 | 
						|
    ),
 | 
						|
    // TinyMCE-specific: Additional HTML elements to allow in the markup.
 | 
						|
    'extended_valid_elements' => array(
 | 
						|
      'tag1[attribute1|attribute2]',
 | 
						|
      'tag2[attribute3|attribute4]',
 | 
						|
    ),
 | 
						|
  );
 | 
						|
  return $plugins;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Act on editor profile settings.
 | 
						|
 *
 | 
						|
 * This hook is invoked from wysiwyg_get_editor_config() after the JavaScript
 | 
						|
 * settings have been generated for an editor profile and before the settings
 | 
						|
 * are added to the page. The settings may be customized or enhanced; typically
 | 
						|
 * with options that cannot be controlled through Wysiwyg module's
 | 
						|
 * administrative UI currently.
 | 
						|
 *
 | 
						|
 * Modules implementing this hook to enforce settings that can also be
 | 
						|
 * controlled through the UI should also implement
 | 
						|
 * hook_form_wysiwyg_profile_form_alter() to adjust or at least indicate on the
 | 
						|
 * editor profile configuration form that certain/affected settings cannot be
 | 
						|
 * changed.
 | 
						|
 *
 | 
						|
 * @param $settings
 | 
						|
 *   An associative array of JavaScript settings to pass to the editor.
 | 
						|
 * @param $context
 | 
						|
 *   An associative array containing additional context information:
 | 
						|
 *   - editor: The plugin definition array of the editor.
 | 
						|
 *   - profile: The editor profile object, as loaded from the database.
 | 
						|
 *   - theme: The name of the editor theme/skin.
 | 
						|
 */
 | 
						|
function hook_wysiwyg_editor_settings_alter(&$settings, $context) {
 | 
						|
  // Each editor has its own collection of native settings that may be extended
 | 
						|
  // or overridden. Please consult the respective official vendor documentation
 | 
						|
  // for details.
 | 
						|
  if ($context['profile']->editor == 'tinymce') {
 | 
						|
    // Supported values to JSON data types.
 | 
						|
    $settings['cleanup_on_startup'] = TRUE;
 | 
						|
  }
 | 
						|
}
 |