You are here

selectmenu.module in jQuery UI selectmenu 7

Same filename and directory in other branches
  1. 7.2 selectmenu.module

File

selectmenu.module
View source
<?php

/**
 * Implements hook_init().
 */
function selectmenu_init() {
  if (variable_get('selectmenu_enabled', TRUE)) {
    _selectmenu_add_libs();
  }
}

/**
 * Implements hook_menu().
 */
function selectmenu_menu() {
  $items = array();
  $items['admin/config/user-interface/selectmenu'] = array(
    'title' => 'jQuery UI selectmenu',
    'description' => 'Configure jQuery UI selectmenu settings.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'selectmenu_admin_form',
    ),
    'access arguments' => array(
      'administer jquery ui selectmenu',
    ),
    'file' => 'selectmenu.admin.inc',
  );
  return $items;
}

/**
 * Implements hook_permission().
 */
function selectmenu_permission() {
  return array(
    'administer jquery ui selectmenu' => array(
      'title' => t('Administer jQuery UI Selectmenu'),
      'description' => t('Perform administration tasks for jQuery UI Selectmenu.'),
    ),
  );
}

/**
 * Get a list of CSS ids from a textarea and prepare them for use.
 *
 * @return $css_ids
 *  An iterative array of string CSS ids.
 */
function _selectmenu_prepare_ids($config_string) {

  // Prepare CSS form ids.
  if (!isset($css_ids)) {
    $css_ids = explode("\n", $config_string);
    $css_ids = array_filter(array_map('trim', $css_ids));
  }
  return $css_ids;
}

/**
 * Put necessary JS related settings into Drupal.settings. Force load required
 *  jQuery plugins.
 */
function _selectmenu_add_libs() {

  // Building a Drupal.settings entry.
  $settings = array(
    'selectmenu_css_whitelist' => implode(', ', _selectmenu_prepare_ids(variable_get('selectmenu_css_whitelist', ''))),
    'form_id_exceptions' => _selectmenu_prepare_ids(variable_get('selectmenu_form_id_exceptions', '')),
    'ignore_system_settings_forms' => variable_get('selectmenu_ignore_system_settings_forms', TRUE),
    'ignore_overlay_forms' => variable_get('selectmenu_ignore_overlay_forms', TRUE),
    'ignore_node_add_forms' => variable_get('selectmenu_ignore_node_add_forms', TRUE),
    'disable_for_admin_theme' => variable_get('selectmenu_disable_for_admin_theme', FALSE),
  );

  // Process and add script options accordingly.
  $selectmenu_script_options = array_filter(variable_get('selectmenu_script_options', array()), 'trim');
  if (!empty($selectmenu_script_options)) {
    $settings['options'] = $selectmenu_script_options;
  }

  // Check to see if we are using the admin theme and if selectmenu should be disabled according to preference.
  global $theme;
  if ($theme == variable_get('admin_theme') && variable_get('selectmenu_disable_for_admin_theme', FALSE)) {

    // Making sure the admin_theme isn't the sidewide default theme either.
    if ($theme != variable_get('theme_default', '')) {
      return;
    }
  }
  $libs_loc = _selectmenu_find_libs();
  if ($libs_loc) {
    drupal_add_library('system', 'ui.core');
    drupal_add_library('system', 'ui.widget');
    drupal_add_library('system', 'ui.position');
    drupal_add_js($libs_loc . '/jquery.ui.selectmenu.js');
    drupal_add_css($libs_loc . '/jquery.ui.selectmenu.css');
    drupal_add_js(array(
      'selectmenu' => $settings,
    ), 'setting');
    drupal_add_js(drupal_get_path('module', 'selectmenu') . '/js/selectmenu.js');
  }
}

/**
 * Return the path of jQuery UI Selectmeu plugin.
 *
 * @return string
 *  Path for the jquery.ui.selectmenu jQuery plugin, relative to Drupal root.
 *
 * @todo Support the Libraries module.
 * @todo Check for multiple possible locations for the presence of the Selectmenu plugin.
 * @todo Check for versions of the Selectmenu plugin.
 */
function _selectmenu_find_libs() {
  return drupal_get_path('module', 'selectmenu') . '/js/jquery.ui.selectmenu';
}

Functions

Namesort descending Description
selectmenu_init Implements hook_init().
selectmenu_menu Implements hook_menu().
selectmenu_permission Implements hook_permission().
_selectmenu_add_libs Put necessary JS related settings into Drupal.settings. Force load required jQuery plugins.
_selectmenu_find_libs Return the path of jQuery UI Selectmeu plugin.
_selectmenu_prepare_ids Get a list of CSS ids from a textarea and prepare them for use.