responsive_menus.module in Responsive Menus 7
Same filename and directory in other branches
Responsify menus in Drupal.
File
responsive_menus.moduleView source
<?php
/**
* @file
* Responsify menus in Drupal.
*/
/**
* Implements hook_menu().
*/
function responsive_menus_menu() {
$items = array();
$items['admin/config/user-interface/responsive_menus'] = array(
'title' => 'Responsive Menus',
'description' => 'Settings for Responsive Menus module',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'responsive_menus_admin_form',
),
'access arguments' => array(
'administer responsive menus',
),
);
return $items;
}
/**
* Implements hook_permission().
*/
function responsive_menus_permission() {
return array(
'administer responsive menus' => array(
'title' => t('Administer Responsive Menus'),
'description' => t('Configure settings for responsive menus module.'),
'restrict access' => TRUE,
),
);
}
/**
* Implements hook_help().
*/
function responsive_menus_help($path, $arg) {
switch ($path) {
// On the help overview page.
case 'admin/help#responsive_menus':
return '<p>' . t('Responsify your menus! Using any jQuery compatible selector, make elements mobile friendly. Technically you could use this on more than menus... The <a href="@admin">administration page</a> provides settings to control which menus to control, what screen size to react to, and a few other options.', array(
'@admin' => url('admin/config/user-interface/responsive_menus'),
)) . '</p>';
// On the admin settings page.
case 'admin/config/user-interface/responsive_menus':
return '<p>' . t('This page provides configuration options for responsive menus. You may configure any amount of menus to respond to any screen size by simply adding a jQuery compatible selector to the list below. There is also an option to ignore admin pages where you might not want responsive menus.') . '</p>';
}
}
/**
* Implements hook_ctools_plugin_api().
*/
function responsive_menus_ctools_plugin_api($module, $api) {
if ($module == 'context' && $api == 'plugins') {
return array(
'version' => 3,
);
}
}
/**
* Implements hook_context_registry().
*/
function responsive_menus_context_registry() {
$registry = array();
$registry['reactions'] = array(
'responsive_menus_general' => array(
'title' => t('Responsive Menus'),
'description' => t('Add & configure a Responsive Menus module reaction.'),
'plugin' => 'responsive_menus_context_reaction_general',
),
);
return $registry;
}
/**
* Implements hook_context_plugins().
*/
function responsive_menus_context_plugins() {
$plugins = array();
$plugins['responsive_menus_context_reaction_general'] = array(
'handler' => array(
'path' => drupal_get_path('module', 'responsive_menus') . '/plugins/context',
'file' => 'responsive_menus_context_reaction_general.inc',
'class' => 'responsive_menus_context_reaction_general',
'parent' => 'context_reaction',
),
);
return $plugins;
}
/**
* Implements hook_libraries_info().
* @note : Libraries 2.x
*/
function responsive_menus_libraries_info() {
$libraries['ResponsiveMultiLevelMenu'] = array(
'name' => 'ResponsiveMultiLevelMenu (codrops)',
'vendor url' => 'http://tympanus.net/Development/ResponsiveMultiLevelMenu/',
'download url' => 'http://tympanus.net/Development/ResponsiveMultiLevelMenu/ResponsiveMultiLevelMenu.zip',
'version arguments' => array(
'file' => 'js/jquery.dlmenu.js',
'pattern' => '/v([\\d\\.]+)/',
'lines' => 3,
'columns' => 40,
),
'files' => array(
'js' => array(
'js/modernizr.custom.js',
'js/jquery.dlmenu.js',
),
'css' => array(
'css/component.css',
),
),
'integration files' => array(
'responsive_menus' => array(
'js' => array(
'styles/ResponsiveMultiLevelMenu/js/responsive_menus_codrops_responsive_multi.js',
),
),
),
);
$libraries['sidr'] = array(
'name' => 'Sidr',
'vendor url' => 'http://www.berriart.com/sidr',
'download url' => 'https://github.com/artberri/sidr-package/archive/1.2.1.zip',
'version arguments' => array(
'file' => 'jquery.sidr.min.js',
'pattern' => '/v([\\d\\.]+)/',
'lines' => 1,
'columns' => 40,
),
'files' => array(
'js' => array(
'jquery.sidr.min.js',
),
'css' => array(
'stylesheets/jquery.sidr.dark.css',
),
),
'integration files' => array(
'responsive_menus' => array(
'js' => array(
'styles/sidr/js/responsive_menus_sidr.js',
),
),
),
);
$sidr_theme = variable_get('responsive_menus_sidr_menu_theme', 'dark');
if ($sidr_theme == 'light') {
$libraries['sidr']['files']['css'] = array(
'stylesheets/jquery.sidr.light.css',
);
}
elseif ($sidr_theme == 'custom') {
unset($libraries['sidr']['files']['css']);
}
$libraries['GoogleNexusWebsiteMenu'] = array(
'name' => 'Google Nexus (codrops)',
'vendor url' => 'http://tympanus.net/codrops/2013/07/30/google-nexus-website-menu/',
'download url' => 'http://tympanus.net/Tutorials/GoogleNexusWebsiteMenu/GoogleNexusWebsiteMenu.zip',
'version arguments' => array(
'file' => 'js/gnmenu.js',
'pattern' => '/v([\\d\\.]+)/',
'lines' => 2,
'columns' => 40,
),
'files' => array(
'js' => array(
'js/gnmenu.js',
'js/classie.js',
),
'css' => array(
'css/component.css',
),
),
'integration files' => array(
'responsive_menus' => array(
'js' => array(
'styles/google_nexus/js/responsive_menus_google_nexus.js',
),
'css' => array(
'styles/google_nexus/css/responsive_menus_google_nexus.css',
),
),
),
);
return $libraries;
}
/**
* Admin settings form for which menus to responsify.
*/
function responsive_menus_admin_form($form, &$form_state) {
// Gather enabled styles.
$styles = responsive_menus_styles();
foreach ($styles as $style => $values) {
$style_options[$style] = $values['name'];
}
// Get style settings form elements from ajax or the currently enabled style.
if (!empty($form_state['values']['responsive_menus_style'])) {
$current_style = $form_state['values']['responsive_menus_style'];
}
else {
$current_style = variable_get('responsive_menus_style', 'responsive_menus_simple');
}
// Reminders about jQuery requirements if applicable.
$form['responsive_menus_no_jquery_update'] = array(
'#type' => 'checkboxes',
'#description' => t("If the style you want requires newer jQuery version and you don't want to use jquery_update module."),
'#options' => array(
1 => t('I will provide my own jQuery library.'),
),
'#default_value' => variable_get('responsive_menus_no_jquery_update', array(
1 => 0,
)),
);
// Ignore admin pages option.
$form['responsive_menus_ignore_admin'] = array(
'#type' => 'checkboxes',
'#options' => array(
1 => t('Ignore admin pages?'),
),
'#default_value' => variable_get('responsive_menus_ignore_admin', array(
1 => 1,
)),
);
$jq_update_ignore = $form['responsive_menus_no_jquery_update']['#default_value'];
$style_info = responsive_menus_style_load($current_style, $jq_update_ignore);
$form['responsive_menus_style'] = array(
'#type' => 'select',
'#title' => t('Responsive menu style'),
'#options' => $style_options,
'#default_value' => $current_style,
'#ajax' => array(
'callback' => 'responsive_menus_style_settings_form',
'wrapper' => 'rm-style-options',
'method' => 'replace',
'effect' => 'fade',
),
);
$form['responsive_menus_style_settings'] = array(
'#title' => t('Style settings'),
'#description' => t('Settings for chosen menu style.'),
'#prefix' => '<div id="rm-style-options">',
'#suffix' => '</div>',
'#type' => 'fieldset',
'#tree' => TRUE,
);
// Which selector to use info.
if (!empty($style_info['selector'])) {
$form['responsive_menus_style_settings']['selector_info'] = array(
'#type' => 'item',
'#title' => t('Selector(s) to use for this style:'),
'#markup' => '<div class="messages status">' . $style_info['selector'] . '</div>',
);
}
// Build additional style settings from style plugins.
if (!empty($styles[$current_style]['form']) && function_exists($styles[$current_style]['form'])) {
$styles_function = $styles[$current_style]['form'];
foreach ($styles_function() as $name => $element) {
$form['responsive_menus_style_settings'][$name] = $element;
}
}
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save configuration'),
);
if (!empty($_POST) && form_get_errors()) {
drupal_set_message(t('The settings have not been saved because of the errors.'), 'error');
}
$form['#submit'][] = 'responsive_menus_admin_form_submit';
return $form;
}
/**
* Ajax callback for switching styles.
*/
function responsive_menus_style_settings_form($form, $form_state) {
return $form['responsive_menus_style_settings'];
}
/**
* Submit handler for responsive_menus_admin_form.
*/
function responsive_menus_admin_form_submit($form, &$form_state) {
// Exclude unnecessary elements.
form_state_values_clean($form_state);
// Which field types to run filter_xss() on.
$filter_types = array(
'textfield',
'textarea',
);
foreach ($form_state['values'] as $key => $value) {
if (is_array($value) && isset($form_state['values']['array_filter'])) {
$value = array_keys(array_filter($value));
}
if ($key == 'responsive_menus_style_settings') {
foreach ($value as $style_key => $style_value) {
// If the field is a type we should filter.
if (in_array($form['responsive_menus_style_settings'][$style_key]['#type'], $filter_types, TRUE)) {
variable_set($style_key, filter_xss($style_value));
}
else {
variable_set($style_key, $style_value);
}
}
}
else {
variable_set($key, $value);
}
}
// Clear libraries cache if Sidr style in use to allow theme to be updated.
if ($form_state['values']['responsive_menus_style'] == 'sidr') {
cache_clear_all('*', 'cache_libraries', TRUE);
}
drupal_set_message(t('The configuration options have been saved.'));
}
/**
* Gather available styles for Responsive Menus.
*
* @return array
* Array of available styles.
*/
function responsive_menus_styles() {
$data =& drupal_static(__FUNCTION__, array());
if (!isset($data['styles'])) {
$data['styles'] = module_invoke_all('responsive_menus_style_info');
drupal_alter('responsive_menus_styles', $data['styles']);
}
return $data['styles'];
}
/**
* Load a single style.
*
* @param string $style
* Style id to be loaded.
*/
function responsive_menus_style_load($style, $jq_update_ignore) {
$styles = responsive_menus_styles();
$data =& drupal_static(__FUNCTION__, array());
if (!isset($data[$style]) && !empty($styles[$style])) {
$style_info = $styles[$style];
// @todo module_load_include() the .inc file for the style being loaded.
// Check for this style's requirements.
if (!empty($style_info['jquery_version'])) {
if (!$jq_update_ignore[1]) {
if (!module_exists('jquery_update')) {
// jQuery Update not installed.
drupal_set_message(t('@style style requires !link set to version !version or higher. Please enable jquery_update.', array(
'@style' => $style_info['name'],
'!link' => l(t('jQuery Update'), 'http://drupal.org/project/jquery_update'),
'!version' => $style_info['jquery_version'],
)), 'warning');
$error = TRUE;
}
elseif (version_compare(variable_get('jquery_update_jquery_version', '1.5'), $style_info['jquery_version'], '<')) {
// jQuery Update version not high enough.
drupal_set_message(t('@style style requires !link set to version !version or higher.', array(
'@style' => $style_info['name'],
'!version' => $style_info['jquery_version'],
'!link' => l(t('jQuery Update'), 'admin/config/development/jquery_update', array(
'query' => array(
'destination' => 'admin/config/user-interface/responsive_menus',
),
)),
)), 'warning');
$error = TRUE;
}
}
else {
drupal_set_message(t('@style style requires !link library version !version or higher, but you have opted to provide your own library. Please ensure you have the proper version of jQuery included. (note: this is not an error)', array(
'@style' => $style_info['name'],
'!link' => l(t('jQuery'), 'http://jquery.com'),
'!version' => $style_info['jquery_version'],
)), 'warning');
}
}
// For integration with Libraries.
if (isset($style_info['use_libraries'])) {
// Try libraries module.
if (module_exists('libraries')) {
if ($library = libraries_load($style_info['library'])) {
if (!empty($library['error']) || empty($library['loaded'])) {
drupal_set_message(t('!message !link and extract to your libraries directory as "@library_name". Example: sites/all/libraries/@library_name. If you are getting "version detection" errors, check file permissions on the library.', array(
'!message' => $library['error message'],
'@library_name' => $style_info['library'],
'!link' => l(t('Download it'), $library['download url']),
)), 'error');
$error = TRUE;
}
}
}
else {
// Libraries module not installed.
drupal_set_message(t('@style style requires !link module enabled.', array(
'@style' => $style_info['name'],
'!link' => l(t('Libraries 2.x'), 'http://drupal.org/project/libraries'),
)), 'warning');
$error = TRUE;
}
}
// Check for errors and load into $data if there are none.
if (!isset($error)) {
$data[$style] = $style_info;
return $data[$style];
}
else {
// Something was wrong loading this style.
drupal_set_message(t('Responsive Menus found a problem. Please check the errors.'), 'error');
return FALSE;
}
}
else {
// This style is already loaded.
return $data[$style];
}
return FALSE;
}
/**
* Implements hook_responsive_menus_style_info().
*/
function responsive_menus_responsive_menus_style_info() {
$path = drupal_get_path('module', 'responsive_menus') . '/styles';
$styles = array(
'responsive_menus_simple' => array(
'name' => t('Simple expanding'),
'form' => 'responsive_menus_simple_style_settings',
'js_files' => array(
$path . '/responsive_menus_simple/js/responsive_menus_simple.js',
),
'css_files' => array(
$path . '/responsive_menus_simple/css/responsive_menus_simple.css',
),
'js_settings' => 'responsive_menus_simple_style_js_settings',
'file' => $path . '/responsive_menus_simple/responsive_menus_simple.inc',
'selector' => t('Anything. Example: Given <code>@code</code> you could use !use', array(
'@ul' => '<ul>',
'@code' => '<div id="parent-div"> <ul class="menu"> </ul> </div>',
'!use' => '<strong>#parent-div or .menu</strong>',
)),
),
'mean_menu' => array(
'name' => t('Mean Menu'),
'form' => 'responsive_menus_mean_menu_style_settings',
'js_files' => array(
$path . '/meanMenu/jquery.meanmenu.min.js',
$path . '/meanMenu/responsive_menus_mean_menu.js',
),
'css_files' => array(
$path . '/meanMenu/meanmenu.min.css',
),
'js_settings' => 'responsive_menus_mean_menu_style_js_settings',
'jquery_version' => 1.7,
'file' => $path . '/meanMenu/meanMenu.inc',
'selector' => t('Parent of the @ul. Example: Given <code>@code</code> you would use !use', array(
'@ul' => '<ul>',
'@code' => '<div id="parent-div"> <ul class="menu"> </ul> </div>',
'!use' => '<strong>#parent-div</strong>',
)),
),
'codrops_responsive_multi' => array(
'name' => t('ResponsiveMultiLevelMenu (codrops)'),
'form' => 'responsive_menus_codrops_responsive_multi_style_settings',
'js_settings' => 'responsive_menus_codrops_responsive_multi_style_js_settings',
'use_libraries' => TRUE,
'library' => 'ResponsiveMultiLevelMenu',
'jquery_version' => 1.7,
'file' => $path . '/ResponsiveMultiLevelMenu/ResponsiveMultiLevelMenu.inc',
'selector' => t('Parent of the @ul. Example: Given <code>@code</code> you would use !use', array(
'@ul' => '<ul>',
'@code' => '<div id="parent-div"> <ul class="menu"> </ul> </div>',
'!use' => '<strong>#parent-div</strong>',
)),
),
'sidr' => array(
'name' => t('Sidr'),
'form' => 'responsive_menus_sidr_style_settings',
'js_settings' => 'responsive_menus_sidr_style_js_settings',
'use_libraries' => TRUE,
'library' => 'sidr',
'file' => $path . '/sidr/sidr.inc',
'selector' => t('Anything (parent of ul preferred). Example: Given <code>@code</code> you could use !use', array(
'@ul' => '<ul>',
'@code' => '<div id="parent-div"> <ul class="menu"> </ul> </div>',
'!use' => '<strong>#parent-div or .menu</strong>',
)),
),
'google_nexus' => array(
'name' => t('Google Nexus (codrops)'),
'form' => 'responsive_menus_google_nexus_style_settings',
'js_settings' => 'responsive_menus_google_nexus_style_js_settings',
'use_libraries' => TRUE,
'library' => 'GoogleNexusWebsiteMenu',
'file' => $path . '/google_nexus/google_nexus.inc',
'selector' => t('The @ul. Example: Given <code>@code</code> you would use !use', array(
'@ul' => '<ul>',
'@code' => '<div id="parent-div"> <ul class="menu"> </ul> </div>',
'!use' => '<strong>.menu</strong>',
)),
),
'mlpm' => array(
'name' => t('Multi Level Push Menu'),
'form' => 'responsive_menus_mlpm_style_settings',
'js_settings' => 'responsive_menus_mlpm_style_js_settings',
'css_files' => _responsive_menus_mlpm_get_css(),
'js_files' => array(
'//oss.maxcdn.com/libs/modernizr/2.6.2/modernizr.min.js',
$path . '/mlpm/js/jquery.multilevelpushmenu.min.js',
$path . '/mlpm/js/mlpm.js',
),
'jquery_version' => 1.1,
'file' => $path . '/mlpm/mlpm.inc',
'selector' => t('Parent of the @ul. Example: Given <code>@code</code> you would use !use', array(
'@ul' => '<ul>',
'@code' => '<div id="parent-div"> <ul class="menu"> </ul> </div>',
'!use' => '<strong>#parent-div</strong>',
)),
),
);
return $styles;
}
/**
* Form callback from hook_responsive_menus_style_info().
*
* @return array
* Drupal FAPI formatted array.
*/
function responsive_menus_simple_style_settings() {
$form['responsive_menus_simple_absolute'] = array(
'#type' => 'checkboxes',
'#options' => array(
1 => t('Use absolute positioning?'),
),
'#default_value' => variable_get('responsive_menus_simple_absolute', array(
1 => 1,
)),
'#description' => t('Using absolute, the menu will open over the page rather than pushing it down.'),
);
$form['responsive_menus_disable_mouse_events'] = array(
'#type' => 'checkboxes',
'#options' => array(
1 => t('Disable other mouse events?'),
),
'#default_value' => variable_get('responsive_menus_disable_mouse_events', array(
1 => 0,
)),
'#description' => t('Disable things like drop-down menus on hover.'),
);
$form['responsive_menus_remove_attributes'] = array(
'#type' => 'checkboxes',
'#options' => array(
1 => t('Remove other classes & IDs when responded?'),
),
'#default_value' => variable_get('responsive_menus_remove_attributes', array(
1 => 1,
)),
'#description' => t('Helps to ensure styling of menu.'),
);
$form['responsive_menus_css_selectors'] = array(
'#type' => 'textarea',
'#title' => t('Selectors for which menus to responsify'),
'#default_value' => variable_get('responsive_menus_css_selectors', '#main-menu'),
'#description' => t('Enter CSS/jQuery selectors of menus to responsify. Comma separated or 1 per line'),
);
$form['responsive_menus_simple_text'] = array(
'#type' => 'textarea',
'#title' => t('Text or HTML for the menu toggle button'),
'#default_value' => variable_get('responsive_menus_simple_text', '☰ Menu'),
);
$form['responsive_menus_media_size'] = array(
'#type' => 'textfield',
'#title' => t('Screen width to respond to'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_media_size', 768),
'#description' => t('Width when we swap out responsive menu e.g. 768'),
);
$form['responsive_menus_media_unit'] = array(
'#type' => 'select',
'#title' => t('Width unit'),
'#default_value' => variable_get('responsive_menus_media_unit', 'px'),
'#options' => array(
'px' => 'px',
'em' => 'em',
),
'#description' => t('Unit for the width above'),
);
return $form;
}
/**
* JS callback from hook_responsive_menus_style_info().
*/
function responsive_menus_simple_style_js_settings($js_defaults = array()) {
$js_settings = array(
'toggler_text' => responsive_menus_var_get('responsive_menus_simple_text', '☰ Menu', $js_defaults),
'selectors' => responsive_menus_explode_list('responsive_menus_css_selectors', '#main-menu', $js_defaults),
'media_size' => responsive_menus_var_get('responsive_menus_media_size', 768, $js_defaults),
'media_unit' => responsive_menus_var_get('responsive_menus_media_unit', 'px', $js_defaults),
);
$absolute = responsive_menus_var_get('responsive_menus_simple_absolute', array(
1 => 1,
), $js_defaults);
$disable_mouse = responsive_menus_var_get('responsive_menus_disable_mouse_events', array(
1 => 0,
), $js_defaults);
$remove_attributes = responsive_menus_var_get('responsive_menus_remove_attributes', array(
1 => 1,
), $js_defaults);
if ($absolute[1]) {
$js_settings['absolute'] = TRUE;
}
if ($disable_mouse[1]) {
$js_settings['disable_mouse_events'] = TRUE;
}
if ($remove_attributes[1]) {
$js_settings['remove_attributes'] = TRUE;
}
return $js_settings;
}
/**
* Form callback from hook_responsive_menus_style_info().
*
* @return array
* Drupal FAPI formatted array.
*/
function responsive_menus_mean_menu_style_settings() {
$form['responsive_menus_mean_menu_css_selectors'] = array(
'#type' => 'textfield',
'#title' => t('CSS selectors for which menu to responsify'),
'#default_value' => variable_get('responsive_menus_mean_menu_css_selectors', '#main-menu'),
'#description' => t('Enter CSS/jQuery selector of menus to responsify.'),
);
$form['responsive_menus_mean_menu_container'] = array(
'#type' => 'textfield',
'#title' => t('CSS selector for where to attach the menu on the page'),
'#default_value' => variable_get('responsive_menus_mean_menu_container', 'body'),
'#description' => t('Enter CSS/jQuery selector of where MeanMenu gets attached.'),
);
$form['responsive_menus_mean_menu_trigger_txt'] = array(
'#type' => 'textarea',
'#title' => t('Text or HTML for trigger button'),
'#default_value' => variable_get('responsive_menus_mean_menu_trigger_txt', '<span /><span /><span />'),
'#description' => t('Default of 3 spans will show the triple bars (!bars).', array(
'!bars' => '☰',
)),
);
$form['responsive_menus_mean_menu_close_txt'] = array(
'#type' => 'textarea',
'#title' => t('Text or HTML for close button'),
'#default_value' => variable_get('responsive_menus_mean_menu_close_txt', 'X'),
);
$form['responsive_menus_mean_menu_close_size'] = array(
'#type' => 'textfield',
'#title' => t('Size of close button'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_mean_menu_close_size', '18px'),
'#description' => t('Size in px, em, %'),
);
$form['responsive_menus_mean_menu_position'] = array(
'#type' => 'select',
'#title' => t('Position of the open/close buttons'),
'#options' => array(
'right' => t('right'),
'left' => t('left'),
'center' => t('center'),
),
'#default_value' => variable_get('responsive_menus_mean_menu_position', 'right'),
);
$form['responsive_menus_mean_menu_media_size'] = array(
'#type' => 'textfield',
'#title' => t('Screen width to respond to'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_mean_menu_media_size', 480),
'#description' => t('Width in pixels when we swap out responsive menu e.g. 768'),
);
$form['responsive_menus_mean_menu_show_children'] = array(
'#type' => 'select',
'#title' => t('Allow multi-level menus'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_mean_menu_show_children', 1),
);
$form['responsive_menus_mean_menu_expand_children'] = array(
'#type' => 'select',
'#title' => t('Ability to expand & collapse children'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_mean_menu_expand_children', 1),
);
$form['responsive_menus_mean_menu_expand_txt'] = array(
'#type' => 'textfield',
'#title' => t('Text for the expand children button'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_mean_menu_expand_txt', '+'),
);
$form['responsive_menus_mean_menu_contract_txt'] = array(
'#type' => 'textfield',
'#title' => t('Text for the collapse children button'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_mean_menu_contract_txt', '-'),
);
$form['responsive_menus_mean_menu_remove_attrs'] = array(
'#type' => 'select',
'#title' => t('Temporarily remove other classes & IDs (Recommended)'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_mean_menu_remove_attrs', 1),
'#description' => t('This will help ensure the style of Mean Menus.'),
);
return $form;
}
/**
* JS callback from hook_responsive_menus_style_info().
*/
function responsive_menus_mean_menu_style_js_settings($js_defaults = array()) {
$js_settings = array(
'selectors' => responsive_menus_var_get('responsive_menus_mean_menu_css_selectors', '#main-menu', $js_defaults),
'container' => responsive_menus_var_get('responsive_menus_mean_menu_container', 'body', $js_defaults),
'trigger_txt' => responsive_menus_var_get('responsive_menus_mean_menu_trigger_txt', '<span /><span /><span />', $js_defaults),
'close_txt' => responsive_menus_var_get('responsive_menus_mean_menu_close_txt', 'X', $js_defaults),
'close_size' => responsive_menus_var_get('responsive_menus_mean_menu_close_size', '18px', $js_defaults),
'position' => responsive_menus_var_get('responsive_menus_mean_menu_position', 'right', $js_defaults),
'media_size' => responsive_menus_var_get('responsive_menus_mean_menu_media_size', 480, $js_defaults),
'show_children' => responsive_menus_var_get('responsive_menus_mean_menu_show_children', 1, $js_defaults),
'expand_children' => responsive_menus_var_get('responsive_menus_mean_menu_expand_children', 1, $js_defaults),
'expand_txt' => responsive_menus_var_get('responsive_menus_mean_menu_expand_txt', '+', $js_defaults),
'contract_txt' => responsive_menus_var_get('responsive_menus_mean_menu_contract_txt', '-', $js_defaults),
'remove_attrs' => responsive_menus_var_get('responsive_menus_mean_menu_remove_attrs', 1, $js_defaults),
);
return $js_settings;
}
/**
* Form callback from hook_responsive_menus_style_info().
*
* @return array
* Drupal FAPI formatted array.
*/
function responsive_menus_codrops_responsive_multi_style_settings() {
$form['responsive_menus_codrops_responsive_multi_css_selectors'] = array(
'#type' => 'textfield',
'#title' => t('CSS selectors for which menu to responsify'),
'#default_value' => variable_get('responsive_menus_codrops_responsive_multi_css_selectors', '#main-menu'),
'#description' => t('Enter CSS/jQuery selector of menus to responsify.'),
);
$form['responsive_menus_codrops_responsive_multi_media_size'] = array(
'#type' => 'textfield',
'#title' => t('Screen width to respond to'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_codrops_responsive_multi_media_size', 768),
'#description' => t('Width in pixels when we swap out responsive menu e.g. 768'),
);
$form['responsive_menus_codrops_responsive_multi_ani_in'] = array(
'#type' => 'select',
'#title' => t('In-animation'),
'#options' => array(
'dl-animate-in-1' => t('One'),
'dl-animate-in-2' => t('Two'),
'dl-animate-in-3' => t('Three'),
'dl-animate-in-4' => t('Four'),
'dl-animate-in-5' => t('Five'),
),
'#default_value' => variable_get('responsive_menus_codrops_responsive_multi_ani_in', 'dl-animate-in-1'),
);
$form['responsive_menus_codrops_responsive_multi_ani_out'] = array(
'#type' => 'select',
'#title' => t('Out-animation'),
'#options' => array(
'dl-animate-out-1' => t('One'),
'dl-animate-out-2' => t('Two'),
'dl-animate-out-3' => t('Three'),
'dl-animate-out-4' => t('Four'),
'dl-animate-out-5' => t('Five'),
),
'#default_value' => variable_get('responsive_menus_codrops_responsive_multi_ani_out', 'dl-animate-out-1'),
);
return $form;
}
/**
* JS callback from hook_responsive_menus_style_info().
*/
function responsive_menus_codrops_responsive_multi_style_js_settings($js_defaults = array()) {
$js_settings = array(
'selectors' => responsive_menus_var_get('responsive_menus_codrops_responsive_multi_css_selectors', '#main-menu', $js_defaults),
'media_size' => responsive_menus_var_get('responsive_menus_codrops_responsive_multi_media_size', 768, $js_defaults),
'animation_in' => responsive_menus_var_get('responsive_menus_codrops_responsive_multi_ani_in', 'dl-animate-in-1', $js_defaults),
'animation_out' => responsive_menus_var_get('responsive_menus_codrops_responsive_multi_ani_out', 'dl-animate-out-1', $js_defaults),
);
return $js_settings;
}
/**
* Form callback from hook_responsive_menus_style_info().
*
* @return array
* Drupal FAPI formatted array.
*/
function responsive_menus_sidr_style_settings() {
$form['responsive_menus_sidr_css_selectors'] = array(
'#type' => 'textarea',
'#title' => t('CSS selectors for which menu to responsify'),
'#default_value' => variable_get('responsive_menus_sidr_css_selectors', '#main-menu'),
'#description' => t('Enter CSS/jQuery selectors of menus to responsify. Comma separated or 1 per line'),
);
$form['responsive_menus_sidr_trigger_txt'] = array(
'#type' => 'textarea',
'#title' => t('Text or HTML for trigger button'),
'#default_value' => variable_get('responsive_menus_sidr_trigger_txt', t('Menu')),
);
$form['responsive_menus_sidr_menu_side'] = array(
'#type' => 'select',
'#title' => t('Position of the menu (left/right)'),
'#options' => array(
'left' => t('Left'),
'right' => t('Right'),
),
'#default_value' => variable_get('responsive_menus_sidr_menu_side', array(
'left' => 'Left',
)),
);
$form['responsive_menus_sidr_menu_theme'] = array(
'#type' => 'select',
'#title' => t('Theme'),
'#options' => array(
'dark' => t('Dark'),
'light' => t('Light'),
'custom' => t('Custom'),
),
'#default_value' => variable_get('responsive_menus_sidr_menu_theme', 'dark'),
'#description' => t('Select which <a href="@theme">theme</a> will be used to style the menu. If "Custom" is selected, no CSS will be added; you will need to add your own styles.', array(
'@theme' => 'http://www.berriart.com/sidr/#themes',
)),
);
$form['responsive_menus_sidr_animation_speed'] = array(
'#type' => 'textfield',
'#title' => t('Sidr animation speed'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_sidr_animation_speed', 200),
'#description' => t('Speed (in milliseconds) of menu open/close. 1000 = 1 second.'),
);
$form['responsive_menus_sidr_media_size'] = array(
'#type' => 'textfield',
'#title' => t('Screen width to respond to'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_sidr_media_size', 768),
'#description' => t('Width in pixels when we swap out responsive menu e.g. 768'),
);
$form['responsive_menus_sidr_displace'] = array(
'#type' => 'select',
'#title' => t('Displace body content?'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_sidr_displace', 1),
'#description' => t('This setting controls whether the page is pushed when menu is opened.'),
);
$form['responsive_menus_sidr_renaming'] = array(
'#type' => 'select',
'#title' => t('Rename classes'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_sidr_renaming', 1),
'#description' => t('Controls whether Sidr will rename classes within the the selectors specified.'),
);
$form['responsive_menus_sidr_on_open'] = array(
'#type' => 'textarea',
'#title' => t('onOpen callback (function)'),
'#description' => t("Enter Javacript to be called when the menu is opened. Example: alert('Great job'); See !documentation for examples.", array(
'!documentation' => l(t('Sidr documentation'), 'http://www.berriart.com/sidr/#documentation'),
)),
'#default_value' => variable_get('responsive_menus_sidr_on_open', ''),
);
$form['responsive_menus_sidr_on_close'] = array(
'#type' => 'textarea',
'#title' => t('onClose callback (function)'),
'#description' => t("Enter Javacript to be called when the menu is closed. Example: alert('Great job'); See !documentation for examples.", array(
'!documentation' => l(t('Sidr documentation'), 'http://www.berriart.com/sidr/#documentation'),
)),
'#default_value' => variable_get('responsive_menus_sidr_on_close', ''),
);
/*
* Other sidr attributes not implemented:
renaming (Boolean) Default: true
When filling the sidr with existing content, choose to rename or not the classes and ids.
body (String) Default: 'body' [ Version 1.1.0 an above ]
For doing the page movement the 'body' element is animated by default, you can select another element to animate with this option.
displace (Boolean) Default: true [ Version 1.2.0 an above ]
Displace the body content or not.
*/
return $form;
}
/**
* JS callback from hook_responsive_menus_style_info().
*/
function responsive_menus_sidr_style_js_settings($js_defaults = array()) {
$js_settings = array(
'selectors' => responsive_menus_explode_list('responsive_menus_sidr_css_selectors', '#main-menu', $js_defaults),
'trigger_txt' => responsive_menus_var_get('responsive_menus_sidr_trigger_txt', t('Menu'), $js_defaults),
'side' => responsive_menus_var_get('responsive_menus_sidr_menu_side', array(
'left' => 'Left',
), $js_defaults),
'speed' => responsive_menus_var_get('responsive_menus_sidr_animation_speed', 200, $js_defaults),
'media_size' => responsive_menus_var_get('responsive_menus_sidr_media_size', 768, $js_defaults),
'displace' => responsive_menus_var_get('responsive_menus_sidr_displace', 1, $js_defaults),
'renaming' => responsive_menus_var_get('responsive_menus_sidr_renaming', 1, $js_defaults),
'onOpen' => responsive_menus_var_get('responsive_menus_sidr_on_open', '', $js_defaults),
'onClose' => responsive_menus_var_get('responsive_menus_sidr_on_close', '', $js_defaults),
);
return $js_settings;
}
/**
* Form callback from hook_responsive_menus_style_info().
*
* @return array
* Drupal FAPI formatted array.
*/
function responsive_menus_google_nexus_style_settings() {
$form['responsive_menus_google_nexus_css_selectors'] = array(
'#type' => 'textfield',
'#title' => t('CSS selectors for which menu to responsify'),
'#default_value' => variable_get('responsive_menus_google_nexus_css_selectors', '#main-menu'),
'#description' => t('Enter CSS/jQuery selector of menus to responsify.'),
);
$form['responsive_menus_google_nexus_use_ecoicons'] = array(
'#type' => 'select',
'#title' => t('Use ecofonts font-family'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_google_nexus_use_ecoicons', 1),
'#description' => t('Uses the ecofonts font-family included with GoogleNexusWebsiteMenu library for icons.'),
);
$form['responsive_menus_google_nexus_icons'] = array(
'#type' => 'textarea',
'#title' => t('Icons for menu items'),
'#default_value' => variable_get('responsive_menus_google_nexus_icons', "\\ue005\n\\ue006"),
'#description' => t('Enter 1 per-line or comma-separated. See !documentation for examples.', array(
'!documentation' => l(t('Unicode Character Table'), 'http://unicode-table.com/en/'),
)),
);
$form['responsive_menus_google_nexus_icon_fallback'] = array(
'#type' => 'textfield',
'#title' => t('Fallback icon for extra menu items'),
'#default_value' => variable_get('responsive_menus_google_nexus_icon_fallback', ''),
'#description' => t('This icon will be used for any number of menu items beyond the amount of icons you specified above. See !documentation for examples.', array(
'!documentation' => l(t('Unicode Character Table'), 'http://unicode-table.com/en/'),
)),
);
return $form;
}
/**
* JS callback from hook_responsive_menus_style_info().
*/
function responsive_menus_google_nexus_style_js_settings($js_defaults = array()) {
$js_settings = array(
'selectors' => responsive_menus_var_get('responsive_menus_google_nexus_css_selectors', '#main-menu', $js_defaults),
'use_ecoicons' => responsive_menus_var_get('responsive_menus_google_nexus_use_ecoicons', 1, $js_defaults),
'icons' => responsive_menus_explode_list('responsive_menus_google_nexus_icons', "\\ue005\n\\ue006", $js_defaults),
'icon_fallback' => responsive_menus_var_get('responsive_menus_google_nexus_icon_fallback', '', $js_defaults),
);
return $js_settings;
}
/**
* Form callback from hook_responsive_menus_style_info().
*
* @return array
* Drupal FAPI formatted array.
*/
function responsive_menus_mlpm_style_settings() {
$form['responsive_menus_mlpm_css_selectors'] = array(
'#type' => 'textfield',
'#title' => t('CSS selectors for which menu to responsify'),
'#default_value' => variable_get('responsive_menus_mlpm_css_selectors', '#main-menu'),
'#description' => t('Enter CSS/jQuery selector of menus to responsify.'),
);
$form['responsive_menus_mlpm_media_size'] = array(
'#type' => 'textfield',
'#title' => t('Screen width to respond to'),
'#size' => 5,
'#default_value' => variable_get('responsive_menus_mlpm_media_size', 768),
'#description' => t('Width in pixels when we swap out responsive menu e.g. 768 (0 means the responsive menu will always show)'),
);
$form['responsive_menus_mlpm_move_to'] = array(
'#type' => 'textfield',
'#title' => t('CSS selector to move menu to'),
'#default_value' => variable_get('responsive_menus_mlpm_move_to', '#page-wrapper'),
'#description' => t('Enter a CSS/JQuery selector of the container the nav menu will be moved to. This is useful when using a theme you don\'t want to alter.'),
);
$form['responsive_menus_mlpm_nav_block'] = array(
'#type' => 'select',
'#title' => t('Add nav block?'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#default_value' => variable_get('responsive_menus_mlpm_nav_block', 1),
'#description' => t('MLPM requires a nav block to be in place. This can be added using javascript if you don\'t want to alter your theme.'),
);
$form['responsive_menus_mlpm_nav_block_name'] = array(
'#type' => 'textfield',
'#title' => t('Id for nav block'),
'#default_value' => variable_get('responsive_menus_mlpm_nav_block_name', 'mlpm-menu'),
'#description' => t('Enter the id of nav block.'),
);
$form['responsive_menus_mlpm_push'] = array(
'#type' => 'textarea',
'#title' => t('CSS selectors of containers to push'),
'#default_value' => variable_get('responsive_menus_mlpm_push', '#page'),
'#description' => t('CSS/jQuery selectors of the elements that need to be pushed when expading the MLPM (one per line)'),
);
$form['responsive_menus_mlpm_menu_height'] = array(
'#type' => 'textfield',
'#title' => 'Menu height',
'#description' => "Menu height (integer, '%', 'px', 'em').",
'#default_value' => variable_get('responsive_menus_mlpm_menu_height', '100%'),
);
$form['responsive_menus_mlpm_direction'] = array(
'#type' => 'select',
'#title' => t('Sliding direction'),
'#options' => array(
'ltr' => t('Left to right'),
'rtl' => t('Right to left'),
),
'#description' => '',
'#default_value' => variable_get('responsive_menus_mlpm_direction', 'ltr'),
);
$form['responsive_menus_mlpm_mode'] = array(
'#type' => 'select',
'#title' => t('Menu sliding mode'),
'#options' => array(
'overlap' => t('Overlap'),
'cover' => t('Cover'),
),
'#description' => '',
'#default_value' => variable_get('responsive_menus_mlpm_mode', 'overlap'),
);
$form['responsive_menus_mlpm_collapsed'] = array(
'#type' => 'select',
'#title' => t('How to load the menu'),
'#options' => array(
1 => t('Collapsed'),
0 => t('Expanded'),
),
'#description' => 'Initialize menu in collapsed/expanded mode',
'#default_value' => variable_get('responsive_menus_mlpm_collapsed', 1),
);
$form['responsive_menus_mlpm_full_collapse'] = array(
'#type' => 'select',
'#title' => t('Full collapse'),
'#options' => array(
1 => t('Yes'),
0 => t('No'),
),
'#description' => 'Do you want to fully hide base level holder when collapsed?',
'#default_value' => variable_get('responsive_menus_mlpm_full_collapse', 0),
);
$form['responsive_menus_mlpm_swipe'] = array(
'#type' => 'select',
'#title' => t('Swipe mode'),
'#options' => array(
'both' => t('Both'),
'desktop' => t('Desktop'),
'touchscreen' => t('Touchscreen'),
),
'#description' => '',
'#default_value' => variable_get('responsive_menus_mlpm_swipe', 'both'),
);
$form['responsive_menus_mlpm_decoration'] = array(
'#type' => 'fieldset',
'#title' => t('Menu decoration'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$style = variable_get('responsive_menus_mlpm_decoration', array());
$form['responsive_menus_mlpm_decoration']['font_awesome'] = array(
'#type' => 'checkbox',
'#title' => t('Include font awesome'),
'#description' => t('By default font awesome is used for the menu icons'),
'#default_value' => 1,
);
$form['responsive_menus_mlpm_decoration']['google_fonts'] = array(
'#type' => 'checkbox',
'#title' => t('Include google fonts'),
'#description' => t('By default google fonts are used to style this menu.'),
'#default_value' => 1,
);
$form['responsive_menus_mlpm_decoration']['back_text'] = array(
'#type' => 'textfield',
'#title' => t('Back text'),
'#description' => t('The text that will appear on the back links leading you to previous levels of the menu.'),
'#default_value' => isset($style['back_text']) ? $style['back_text'] : 'Back',
);
$form['responsive_menus_mlpm_decoration']['back_class'] = array(
'#type' => 'textfield',
'#title' => t('Back item class'),
'#description' => t('The class of the back link that leads to the pervious levels of the menu.'),
'#default_value' => isset($style['back_class']) ? $style['back_class'] : 'backItemClass',
);
$form['responsive_menus_mlpm_decoration']['back_icon'] = array(
'#type' => 'textfield',
'#title' => t('Back item icon'),
'#description' => t('The icon used for the back link that leads to previous levels of the menu (default requires font awesome).'),
'#default_value' => isset($style['back_icon']) ? $style['back_icon'] : 'fa fa-angle-right',
);
$form['responsive_menus_mlpm_decoration']['group_icon'] = array(
'#type' => 'textfield',
'#title' => t('Group icon'),
'#description' => t('The icon used on menu links that lead into new layers of the menu (default requires font awesome).'),
'#default_value' => isset($style['group_icon']) ? $style['group_icon'] : 'fa fa-angle-left',
);
$form['responsive_menus_mlpm_toggle'] = array(
'#type' => 'fieldset',
'#title' => t('Toggle control'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$toggle = variable_get('responsive_menus_mlpm_toggle', array());
$form['responsive_menus_mlpm_toggle']['container'] = array(
'#type' => 'textfield',
'#title' => t('Menu toggle control container'),
'#description' => t('The CSS/jQuery selector you would like an anchor tag that will toggle the menu open and closed (leave blank for no control).'),
'#default_value' => isset($toggle['container']) ? $toggle['container'] : '',
);
$form['responsive_menus_mlpm_toggle']['text'] = array(
'#type' => 'textarea',
'#title' => t('Menu toggle control text'),
'#description' => t('The text/filtered html you would like inside the toggle control'),
'#default_value' => isset($toggle['text']) ? $toggle['text'] : '',
);
$form['responsive_menus_mlpm_toggle']['off_menu'] = array(
'#type' => 'textfield',
'#title' => t('Container to detect off menu clicks'),
'#description' => t('The CSS/jQuery selector that will close the menu when clicked. This is useful for when you want to be able to close the menu by clicking off of the menu.'),
'#default_value' => isset($toggle['off_menu']) ? $toggle['off_menu'] : '',
);
return $form;
}
/**
* JS callback from hook_responsive_menus_style_info().
*/
function responsive_menus_mlpm_style_js_settings($js_defaults = array()) {
$toggle = variable_get('responsive_menus_mlpm_toggle', array());
$style = variable_get('responsive_menus_mlpm_decoration', array());
$js_settings = array(
'selectors' => responsive_menus_var_get('responsive_menus_mlpm_css_selectors', '#main-menu', $js_defaults),
'media_size' => responsive_menus_var_get('responsive_menus_mlpm_media_size', 768, $js_defaults),
'move_to' => responsive_menus_var_get('responsive_menus_mlpm_move_to', '#page-wrapper', $js_defaults),
'nav_block' => variable_get('responsive_menus_mlpm_nav_block', 1, $js_defaults),
'nav_block_name' => variable_get('responsive_menus_mlpm_nav_block_name', 'mlpm-menu', $js_defaults),
'push' => explode("\n", variable_get('responsive_menus_mlpm_push', '#page', $js_defaults)),
'menu_height' => variable_get('responsive_menus_mlpm_menu_height', '100%', $js_defaults),
'direction' => variable_get('responsive_menus_mlpm_direction', 'ltr', $js_defaults),
'mode' => variable_get('responsive_menus_mlpm_mode', 'overlap', $js_defaults),
'collapsed' => variable_get('responsive_menus_mlpm_collapsed', 1, $js_defaults),
'full_collapse' => variable_get('responsive_menus_mlpm_full_collapse', 0, $js_defaults),
'swipe' => variable_get('responsive_menus_mlpm_swipe', 'both', $js_defaults),
'toggle_container' => isset($toggle['container']) ? $toggle['container'] : '',
'toggle_text' => isset($toggle['text']) ? check_markup($toggle['text'], 'filtered_html') : '',
'off_menu' => isset($toggle['off_menu']) ? $toggle['off_menu'] : '',
'back_text' => isset($style['back_text']) ? $style['back_text'] : 'Back',
'back_class' => isset($style['back_class']) ? $style['back_class'] : 'backItemClass',
'back_icon' => isset($style['back_icon']) ? $style['back_icon'] : 'fa fa-angle-right',
'group_icon' => isset($style['group_icon']) ? $style['group_icon'] : 'fa fa-angle-left',
);
return $js_settings;
}
/**
* Slight modification of variable_get for context and other usage.
*
* @param string $name
* Name of the variable.
* @param mixed $default
* The variable's default fallback value.
* @param array $rm_defaults
* The array of values that context (and possibly others) will pass.
*/
function responsive_menus_var_get($name, $default, $rm_defaults = array()) {
if (!empty($rm_defaults) && !empty($rm_defaults[$name])) {
return $rm_defaults[$name];
}
return variable_get($name, $default);
}
/**
* Return array of selectors for JS settings.
*
* @return array
* Array of settings to pass with drupal_add_js().
*/
function responsive_menus_explode_list($style_var, $default, $js_defaults = array()) {
$selectors = responsive_menus_var_get($style_var, $default, $js_defaults);
$delimiter = ', ';
// Strip out carriage returns.
$selectors = str_replace("\r", '', $selectors);
// Replace new lines with delimiter.
$selectors = str_replace("\n", $delimiter, $selectors);
// Explode to include original delimited.
$values = explode($delimiter, $selectors);
$values = array_filter($values);
return $values;
}
/**
* Recursively glob for directories.
*
* @param string $directory
* Directory to glob.
* @param array $directories
* Increasing array of matching directories.
*/
function responsive_menus_glob_recursive($directory, &$directories = array()) {
foreach (glob($directory, GLOB_ONLYDIR | GLOB_NOSORT) as $folder) {
$directories[] = $folder;
responsive_menus_glob_recursive("{$folder}/*", $directories);
}
}
/**
* Recursively search through directories for files with given extension.
*
* @param string $directory
* Directory to search.
* @param string $extension
* File extensions to look for.
*
* @return array
* Array of matching files.
*/
function responsive_menus_glob_files($directory, $extension) {
$directories = empty($directories) ? array() : $directories;
responsive_menus_glob_recursive($directory, $directories);
$files = array();
foreach ($directories as $directory) {
$files = array_merge($files, glob("{$directory}/*.{$extension}"));
}
return $files;
}
/**
* Implements hook_page_build().
*/
function responsive_menus_page_build(&$page) {
// Context rules.
if (module_exists('context')) {
if ($plugin = context_get_plugin('reaction', 'responsive_menus_general')) {
$plugin
->execute();
}
}
// Non-context additions.
responsive_menus_execute();
}
/**
* Final execution for Responsive Menus. Add any js/css and settings required.
*/
function responsive_menus_execute($style = NULL, $js_defaults = array()) {
// Load our style.
if (!isset($style)) {
$ignore_admin = variable_get('responsive_menus_ignore_admin', array(
1 => 1,
));
if ($ignore_admin[1] && path_is_admin(current_path())) {
return;
}
$style = variable_get('responsive_menus_style', 'responsive_menus_simple');
}
$jq_update_ignore = variable_get('responsive_menus_no_jquery_update', array(
1 => 0,
));
$style_info = responsive_menus_style_load($style, $jq_update_ignore);
if (!$style_info) {
return;
}
$data =& drupal_static(__FUNCTION__, array());
if (!isset($data['execute_index'])) {
$data['execute_index'] = -1;
}
$data['execute_index']++;
$js_settings = array();
$js_files = array();
$css_files = array();
// Load JS files from folder.
if (!empty($style_info['js_folder'])) {
$js_files = responsive_menus_glob_files($style_info['js_folder'], 'js');
}
// Load CSS files from folder.
if (!empty($style_info['css_folder'])) {
$css_files = responsive_menus_glob_files($style_info['css_folder'], 'css');
}
// Load individual JS files.
if (!empty($style_info['js_files'])) {
$js_files = array_unique(array_merge($js_files, $style_info['js_files']));
}
// Load individual CSS files.
if (!empty($style_info['css_files'])) {
$css_files = array_unique(array_merge($css_files, $style_info['css_files']));
}
// Add JS files.
if (!empty($js_files)) {
foreach ($js_files as $js_file) {
drupal_add_js($js_file);
}
}
// Add CSS files.
if (!empty($css_files)) {
foreach ($css_files as $css_file) {
drupal_add_css($css_file);
}
}
$filtered_settings = array();
foreach ($style_info['js_settings']($js_defaults) as $setting_index => $setting) {
if (!is_array($setting)) {
$filtered_settings[$setting_index] = filter_xss_admin($setting);
}
else {
foreach ($setting as $sub_index => $sub_value) {
$filtered_settings[$setting_index][$sub_index] = filter_xss_admin($sub_value);
}
}
}
if (!isset($filtered_settings['selectors'])) {
$filtered_settings['selectors'] = array();
}
// Add JS settings.
$js_settings[$data['execute_index']] = $filtered_settings;
$js_settings[$data['execute_index']]['responsive_menus_style'] = $style;
drupal_alter('responsive_menus_execute', $js_settings);
drupal_add_js(array(
'responsive_menus' => $js_settings,
), 'setting');
}
/**
* Get the css to include for the multi-level-push menu based on the configuration.
*/
function _responsive_menus_mlpm_get_css() {
$path = drupal_get_path('module', 'responsive_menus') . '/styles';
$style = variable_get('responsive_menus_mlpm_decoration', array(
'font_awesome' => 1,
'google_fonts' => 1,
));
$mlpm_css = array();
if (!isset($style['google_fonts']) || $style['google_fonts']) {
$mlpm_css[] = '//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,300italic,700&subset=latin,cyrillic-ext,latin-ext,cyrillic';
}
if (!isset($style['font_awesome']) || $style['font_awesome']) {
$mlpm_css[] = '//netdna.bootstrapcdn.com/font-awesome/4.0.1/css/font-awesome.min.css?the-file-wont-load-without-a-parameter';
}
$mlpm_css[] = $path . '/mlpm/css/jquery.multilevelpushmenu.css';
return $mlpm_css;
}