417 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			417 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * @file
 | 
						|
 * This file contains no working PHP code; it exists to provide additional documentation
 | 
						|
 * for doxygen as well as to document hooks in the standard Drupal manner.
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * @mainpage Skinr API Manual
 | 
						|
 *
 | 
						|
 * Topics:
 | 
						|
 * - @ref skinr_hooks
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * @defgroup skinr_hooks Skinrs hooks
 | 
						|
 * @{
 | 
						|
 * Hooks that can be implemented by other modules in order to implement the
 | 
						|
 * Skinr API.
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Configure Skinr for this module.
 | 
						|
 *
 | 
						|
 * This hook should be placed in MODULENAME.skinr.inc and it will be auto-loaded.
 | 
						|
 * This must either be in the same directory as the .module file or in a subdirectory
 | 
						|
 * named 'includes'.
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   An array of element types this module supports.
 | 
						|
 */
 | 
						|
function hook_skinr_config() {
 | 
						|
  return array('block');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Provide a list of all available theme hooks for a given element.
 | 
						|
 *
 | 
						|
 * @param $module
 | 
						|
 *   The module implementing given element.
 | 
						|
 * @param $element
 | 
						|
 *   An element.
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   An array of theme hooks.
 | 
						|
 */
 | 
						|
function hook_skinr_theme_hooks($module, $element) {
 | 
						|
  $theme_hooks = array();
 | 
						|
 | 
						|
  if ($module == 'node') {
 | 
						|
    $theme_hooks =  array(
 | 
						|
      'node_' . $element,
 | 
						|
      'node',
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  return $theme_hooks;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Perform alterations to theme hooks before widgets are rendered.
 | 
						|
 *
 | 
						|
 * @param $theme_hooks
 | 
						|
 *   An array of theme hooks.
 | 
						|
 * @param $module
 | 
						|
 *   The module implementing given element.
 | 
						|
 * @param $element
 | 
						|
 *   An element.
 | 
						|
 */
 | 
						|
function hook_skinr_theme_hooks_alter(&$theme_hooks, $module, $element) {
 | 
						|
  if ($module == 'node') {
 | 
						|
    array_unshift($theme_hooks, 'node_' . $element . '_custom');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Return an array of element ids.
 | 
						|
 *
 | 
						|
 * @todo Needs a better description.
 | 
						|
 *
 | 
						|
 * @param $variables
 | 
						|
 *   The variables array from skinr_preprocess().
 | 
						|
 * @param $hook
 | 
						|
 *   The name of the theme hook.
 | 
						|
 * @param $op
 | 
						|
 *   The operation being performed:
 | 
						|
 *   - 'preprocess'
 | 
						|
 *   - 'contextual_links'
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   An array of element arrays, keyed by element type. Example:
 | 
						|
 * @code
 | 
						|
 *   array(
 | 
						|
 *     'block' => array('system__navigation'),
 | 
						|
 *   );
 | 
						|
 * @endcode
 | 
						|
 *
 | 
						|
 * @see skinr_preprocess()
 | 
						|
 */
 | 
						|
function hook_skinr_elements(&$variables, $hook, $op) {
 | 
						|
  $elements = array();
 | 
						|
  if ($hook == 'block') {
 | 
						|
    $elements['block'] = array($variables['block']->module . '__' . $variables['block']->delta);
 | 
						|
  }
 | 
						|
  return $elements;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Define the API version of Skinr your code is compatible with.
 | 
						|
 *
 | 
						|
 * This is required when creating a new Skinr plugin. It checks to make sure
 | 
						|
 * your Skins are compatible with the installed version of Skinr and takes care
 | 
						|
 * of loading the include files.
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *   An associative array describing Skinr API integration:
 | 
						|
 *   - directory: (optional) The name of a sub-directory, in which include files
 | 
						|
 *     containing skin or group definitions may be found.
 | 
						|
 *   - path: (optional) The path to the directory containing the directory
 | 
						|
 *     specified in 'directory'. Defaults to the path of the module or theme
 | 
						|
 *     implementing the hook.
 | 
						|
 *   In case no Skinr plugin include files exist for your implementation, simply
 | 
						|
 *   define the function with an empty function body.
 | 
						|
 *
 | 
						|
 * The "hook" prefix is substituted with the name of the module or theme that
 | 
						|
 * implements it, e.g. THEME_skinr_api_VERSION() in template.php, or
 | 
						|
 * MODULE_skinr_api_VERSION() in MODULE.module.
 | 
						|
 *
 | 
						|
 * VERSION is normally identical to Skinr's major version; e.g., "2".
 | 
						|
 */
 | 
						|
function hook_skinr_api_VERSION() {
 | 
						|
  return array(
 | 
						|
    'path' => drupal_get_path('module', 'mymodule'),
 | 
						|
    'directory' => 'skins',
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Define the skin(s) for this Skinr plugin.
 | 
						|
 *
 | 
						|
 * Each skin definition consists of properties that define its form element and
 | 
						|
 * settings that are needed to make it work, such as the class(es) Skinr should
 | 
						|
 * apply, which files it should load, whether or not it should be disabled by
 | 
						|
 * default and which theme hook(s) it was designed to work with.
 | 
						|
 *
 | 
						|
 * Each skin name must be unique. Skins cannot have the same name even if they
 | 
						|
 * are located in different plugins. It is recommended to prefix the name of
 | 
						|
 * each skin with the name of the theme or module implementing it.
 | 
						|
 *
 | 
						|
 * Skin settings:
 | 
						|
 * - title (required): Title of the skin form element.
 | 
						|
 * - description (optional): Description of the skin form element.
 | 
						|
 * - group (optional): The group the skin is attached to; defaults to a Skinr
 | 
						|
 *   provided group labeled "General."
 | 
						|
 * - type (optional): The type of form element. Allowed values:
 | 
						|
 *   - checkboxes (default): Useful when single or multiple options can be
 | 
						|
 *     chosen. This type does not need to be set manually. Skinr will apply
 | 
						|
 *     it by default.
 | 
						|
 *   - select: Useful when a single option can be chosen, but many exist.
 | 
						|
 *   - radios: Useful when a single option can be chosen and only a few options
 | 
						|
 *     exist.
 | 
						|
 * - weight (discouraged): Sets the weight of the skin inside the group; NULL
 | 
						|
 *   by default. weight should not be set on each individual skin. Instead, it
 | 
						|
 *   should be used sparingly where positioning a skin at the very top or
 | 
						|
 *   bottom is desired.
 | 
						|
 * - attached (optional): A array containing information about CSS and
 | 
						|
 *   JavaScript files the skin requires. Each entry is an array keyed by type:
 | 
						|
 *   - css (optional): Maps to the functionality of drupal_add_css() with one
 | 
						|
 *     exception: paths are automatically assumed relative to the plugin
 | 
						|
 *     directory, unless external. Examples:
 | 
						|
 *     - Simple:
 | 
						|
 *       'css' => array('css/skin-name.css')
 | 
						|
 *     - Advanced:
 | 
						|
 *       'css' => array(
 | 
						|
 *         array('css/skin-name-ie.css', array(
 | 
						|
 *           'media' => 'screen',
 | 
						|
 *           'browsers' => array('IE' => 'lte IE 8'),
 | 
						|
 *         ),
 | 
						|
 *       )
 | 
						|
 *   - js (optional): Maps to the functionality of drupal_add_js() with one
 | 
						|
 *     exception: paths are automatically assumed as relative to the plugin
 | 
						|
 *     directory, unless external. Examples:
 | 
						|
 *     - Simple:
 | 
						|
 *       'js' => array('js/skin-name.js')
 | 
						|
 *     - Advanced:
 | 
						|
 *       'js' => array(
 | 
						|
 *         array(
 | 
						|
 *           'js/skin-name-advanced.js',
 | 
						|
 *           array(
 | 
						|
 *             'scope' => 'footer',
 | 
						|
 *             'group' => JS_THEME,
 | 
						|
 *         ),
 | 
						|
 *       )
 | 
						|
 * - options (required): An array containing one or more options (also arrays)
 | 
						|
 *   for the user to choose from when applying skins. Each option key should be
 | 
						|
 *   a machine name describing the option. An option should including the
 | 
						|
 *   following keys:
 | 
						|
 *   - title (required): The option label.
 | 
						|
 *   - class (required): An array containing one or more classes the skin
 | 
						|
 *     should apply. All classes should be entered as an array: For example:
 | 
						|
 *     'class' => array('class-b', 'class-b')
 | 
						|
 *   - attached (optional): Same syntax as above, but applies to a specific
 | 
						|
 *     option only.
 | 
						|
 * - theme hooks (optional): An array containing certain allowed theme hooks,
 | 
						|
 *   which allow you to limit where the skin can be used. Allowed options
 | 
						|
 *   include: block, block__MODULE, comment_wrapper,comment__wrapper_NODETYPE,
 | 
						|
 *   node, node__NODETYPE, region, region__REGIONNAME, panels_display,
 | 
						|
 *   panels_region, panels_pane, views_view, views_view__STYLENAME,
 | 
						|
 *   views_view__DISPLAYNAME, and views_view__VIEWNAME.
 | 
						|
 * - default status (optional): Skins are disabled by default to keep UI
 | 
						|
 *   clutter to a minimum. In some cases, like contrib themes, it makes sense to
 | 
						|
 *   enable skins which are required to make the theme work properly by default.
 | 
						|
 *   Setting this property to 1 will cause it to be enabled by default for all
 | 
						|
 *   installed themes.
 | 
						|
 * - status: (optional) An associative array whose keys are theme names and
 | 
						|
 *   whose corresponding values denote the desired default status for the
 | 
						|
 *   particular theme.
 | 
						|
 *
 | 
						|
 * The "hook" prefix is substituted with the name of the module or theme
 | 
						|
 * implementing it.
 | 
						|
 */
 | 
						|
function hook_skinr_skin_info() {
 | 
						|
  $skins['skinr_menus'] = array(
 | 
						|
    'title' => t('Menu styles'),
 | 
						|
    'description' => t('Select a style to use for the main navigation.'),
 | 
						|
    'type' => 'select',
 | 
						|
    'group' => 'skinr_menus',
 | 
						|
    'theme hooks' => array('block__menu', 'block__menu_block'),
 | 
						|
    'attached' => array(
 | 
						|
      'css' => array('css/nav.css'),
 | 
						|
    ),
 | 
						|
    'options' => array(
 | 
						|
      'one_level' => array(
 | 
						|
        'title' => t('Standard (1 level) - No colors'),
 | 
						|
        'class' => array('nav'),
 | 
						|
      ),
 | 
						|
      'menu_a' => array(
 | 
						|
        'title' => t('Standard (1 level) - Green'),
 | 
						|
        'class' => array('nav', 'nav-a'),
 | 
						|
        'attached' => array('css' => array('css/nav-colors.css')),
 | 
						|
      ),
 | 
						|
      'menu_b' => array(
 | 
						|
        'title' => t('Standard (1 level) - Blue'),
 | 
						|
        'class' => array('nav', 'nav-b'),
 | 
						|
        'attached' => array('css' => array('css/nav-colors.css')),
 | 
						|
      ),
 | 
						|
      'menu_c' => array(
 | 
						|
        'title' => t('Dropdowns - No colors'),
 | 
						|
        'class' => array('nav', 'nav-dd'),
 | 
						|
        'attached' => array(
 | 
						|
          'css' => array('css/nav-dd.css'),
 | 
						|
          'js' => array('js/dropdown.js'),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
      'menu_d' => array(
 | 
						|
        'title' => t('Dropdowns - Green'),
 | 
						|
        'class' => array('nav', 'nav-dd', 'nav-a'),
 | 
						|
        'attached' => array(
 | 
						|
          'css' => array('css/nav-dd.css'),
 | 
						|
          'js' => array('js/dropdown.js'),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
      'menu_e' => array(
 | 
						|
        'title' => t('Dropdowns - Blue'),
 | 
						|
        'class' => array('nav', 'nav-dd', 'nav-b'),
 | 
						|
        'attached' => array(
 | 
						|
          'css' => array('css/nav-dd.css'),
 | 
						|
          'js' => array('js/dropdown.js'),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    ),
 | 
						|
    // Optional: Specify a global default status for this skin, making it
 | 
						|
    // available or unavailable to all themes.
 | 
						|
    'default status' => 0,
 | 
						|
    // Optional: Specify a default status for a particular theme. This mainly
 | 
						|
    // makes sense for skins provided by themes only.
 | 
						|
    'status' => array(
 | 
						|
      'bartik' => 1,
 | 
						|
      'garland' => 0,
 | 
						|
      // In case you are registering a skin for your base theme, then you likely
 | 
						|
      // do not know which sub themes are going to use your base theme. By
 | 
						|
      // setting the global default status to 0 (as above) and enabling the skin
 | 
						|
      // for your base theme itself, the skin's status will be automatically
 | 
						|
      // inherited to all sub themes of your base theme.
 | 
						|
      'mybasetheme' => 1,
 | 
						|
    ),
 | 
						|
  );
 | 
						|
  return $skins;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Define one or more skins in an atomic Skinr plugin file.
 | 
						|
 *
 | 
						|
 * This hook works identically to hook_skinr_skin_info(), but allows to place
 | 
						|
 * one or more related skin definitions into a separate plugin file.
 | 
						|
 *
 | 
						|
 * For example, considering a module or theme with the name "extension" that
 | 
						|
 * contains an include file:
 | 
						|
 * @code
 | 
						|
 * extension/skins/example/example.inc
 | 
						|
 * @encode
 | 
						|
 * The "hook" prefix is substituted with the name of the module or theme
 | 
						|
 * implementing it ("extension"), and PLUGIN is substituted with the name of the
 | 
						|
 * include file ("example"), e.g., THEME_skinr_skin_PLUGIN_info() or
 | 
						|
 * MODULE_skinr_skin_PLUGIN_info(). For above example, the function name would
 | 
						|
 * be: extension_skinr_skin_example_info().
 | 
						|
 */
 | 
						|
function hook_skinr_skin_PLUGIN_info() {
 | 
						|
  $skins['extension_example_menus'] = array(
 | 
						|
    'title' => t('Example menu styles'),
 | 
						|
    'type' => 'select',
 | 
						|
    'group' => 'skinr_menus',
 | 
						|
    'theme hooks' => array('block__menu', 'block__menu_block'),
 | 
						|
    'attached' => array(
 | 
						|
      'css' => array('css/nav.css'),
 | 
						|
    ),
 | 
						|
    'options' => array(
 | 
						|
      'menu_a' => array(
 | 
						|
        'title' => t('Standard (1 level) - Green'),
 | 
						|
        'class' => array('nav', 'nav-a'),
 | 
						|
        'attached' => array('css' => array('css/nav-colors.css')),
 | 
						|
      ),
 | 
						|
      'menu_b' => array(
 | 
						|
        'title' => t('Standard (1 level) - Blue'),
 | 
						|
        'class' => array('nav', 'nav-b'),
 | 
						|
        'attached' => array('css' => array('css/nav-colors.css')),
 | 
						|
      ),
 | 
						|
    ),
 | 
						|
  );
 | 
						|
  return $skins;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Perform alterations on Skinr skins.
 | 
						|
 *
 | 
						|
 * @param $skins
 | 
						|
 *   An array of skin information exposed by hook_skinr_skin_info()
 | 
						|
 *   implementations.
 | 
						|
 */
 | 
						|
function hook_skinr_skin_info_alter(&$skins) {
 | 
						|
  // Remove restrictions on theme hooks the skin works with.
 | 
						|
  unset($skins['skinr_menus']['theme hooks']);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Defines group(s) that will contain skins.
 | 
						|
 *
 | 
						|
 * Groups are form element containers used to organize skins categorically. If
 | 
						|
 * you do not define a group, your skins will appear in Skinr's default group,
 | 
						|
 * which is labeled "General." Skinr implements 4 default groups, which may be
 | 
						|
 * used in any skin implementation. For more information, see skins/default.inc.
 | 
						|
 *
 | 
						|
 * Each group name must be unique. It is recommended to prefix the name of each
 | 
						|
 * group with the name of the theme or module name implementing it, followed by
 | 
						|
 * the name of the group. Note that you cannot define 2 groups with the same
 | 
						|
 * name, even if they are in different plugins.
 | 
						|
 *
 | 
						|
 * Group properties:
 | 
						|
 * - title (required): Brief title of the tab.
 | 
						|
 * - description (optional): Description of the group for administration page.
 | 
						|
 * - weight (discouraged): Weight of the tab group; 0 by default.
 | 
						|
 *
 | 
						|
 * The "hook" prefix is substituted with the name of the module or theme that
 | 
						|
 * implements it.
 | 
						|
 *
 | 
						|
 * @see skinr_default_skinr_group_info()
 | 
						|
 */
 | 
						|
function hook_skinr_group_info() {
 | 
						|
  $group['skinr_menus'] = array(
 | 
						|
    'title' => t('Menus'),
 | 
						|
    'description' => t('Menu and navigation styles.'),
 | 
						|
  );
 | 
						|
 | 
						|
  return $groups;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Define one or more skin groups in an atomic Skinr plugin file.
 | 
						|
 *
 | 
						|
 * This hook works identically to hook_skinr_group_info(), but allows to place
 | 
						|
 * one or more related skin group definitions into a separate plugin file.
 | 
						|
 *
 | 
						|
 * For example, considering a module or theme with the name "extension" that
 | 
						|
 * contains an include file:
 | 
						|
 * @code
 | 
						|
 * extension/skins/example/example.inc
 | 
						|
 * @encode
 | 
						|
 * The "hook" prefix is substituted with the name of the module or theme
 | 
						|
 * implementing it ("extension"), and PLUGIN is substituted with the name of the
 | 
						|
 * include file ("example"), e.g., THEME_skinr_group_PLUGIN_info() or
 | 
						|
 * MODULE_skinr_group_PLUGIN_info(). For above example, the function name would
 | 
						|
 * be: extension_skinr_group_example_info().
 | 
						|
 */
 | 
						|
function hook_skinr_group_PLUGIN_info() {
 | 
						|
  $group['extension_example_menus'] = array(
 | 
						|
    'title' => t('Menus'),
 | 
						|
    'description' => t('Menu and navigation styles.'),
 | 
						|
  );
 | 
						|
  return $groups;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Perform alterations on Skinr groups.
 | 
						|
 *
 | 
						|
 * @param $groups
 | 
						|
 *   An array of group information exposed by hook_skinr_group_info()
 | 
						|
 *   implementations.
 | 
						|
 */
 | 
						|
function hook_skinr_group_info_alter(&$groups) {
 | 
						|
  // Show this tab group at the top of the Skinr settings form.
 | 
						|
  $groups['skinr_menus']['weight'] = -1;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @}
 | 
						|
 */
 |