function scrollreveal_admin in Scroll Reveal 7
Same name and namespace in other branches
- 7.2 scrollreveal.module \scrollreveal_admin()
Callback function for admin setting.
1 string reference to 'scrollreveal_admin'
- scrollreveal_menu in ./
scrollreveal.module - Implementation of hook_menu().
File
- ./
scrollreveal.module, line 70 - Basic Module file.
Code
function scrollreveal_admin($form, &$form_state) {
// This module will not work if used in overlay paths such as
// admin/* , node/add etc if user has overlay access.
// Since the form builder is called after every AJAX request, we rebuild
// the form based on $form_state.
$settings = variable_get('scrollreveal_settings');
$num_elements = isset($settings['triggers_fieldset']) ? count($settings['triggers_fieldset']) + 1 : 1;
$form_state['triggers'] = $num_elements;
$themes = list_themes();
$active_themes = array();
foreach ($themes as $theme) {
if ($theme->status) {
$active_themes[$theme->name] = $theme->info['name'];
}
}
$options['helper'] = array(
'#markup' => t('<h3>Scroll Reveal Options</h3>
<p>A simple way to create and maintain how elements fade in, triggered when they enter the viewport. An open-source experiment from <a href="https://twitter.com/julianlloyd">@JulianLloyd</a></p>'),
);
$options['config'] = array(
'#type' => 'fieldset',
'#title' => t('Default Settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$options['config']["enter"] = array(
'#type' => 'select',
'#title' => "Enter",
'#default_value' => 0,
'#description' => "Controls the vector origin of your reveal animation.",
'#options' => array(
'top' => t('Top'),
'bottom' => t('Bottom'),
'right' => t('Right'),
'left' => t('Left'),
),
'#default_value' => isset($settings['config']["enter"]) ? $settings['config']["enter"] : 'bottom',
);
$options['config']["move"] = array(
'#type' => 'textfield',
'#title' => "Move",
'#description' => "The distance your revealing element travels in pixels.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
'#default_value' => isset($settings['config']["move"]) ? $settings['config']["move"] : 24,
);
$options['config']["over"] = array(
'#type' => 'textfield',
'#title' => "Over",
'#description' => "The duration of your reveal animation in seconds.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
'#default_value' => isset($settings['config']["over"]) ? $settings['config']["over"] : 0.66,
);
$options['config']["after"] = array(
'#type' => 'textfield',
'#title' => "After",
'#description' => "The duration before your reveal begins in seconds.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
'#default_value' => isset($settings['config']["after"]) ? $settings['config']["after"] : 0,
);
$options['config']['easing'] = array(
'#type' => 'select',
'#title' => t('Easing effect'),
'#options' => array(
'ease' => t('Ease'),
'ease-in' => t('Ease In'),
'ease-out' => t('Ease Out'),
'ease-in-out' => t('Ease In Out'),
),
'#default_value' => isset($settings['config']["easing"]) ? $settings['config']["easing"] : 'ease',
);
$options['config']['reset'] = array(
'#type' => 'select',
'#title' => t('Reset effect'),
'#description' => t("Replay reveal animations every time elements enter the viewport."),
'#options' => array(
'false' => t('False'),
'true' => t('True'),
),
'#default_value' => isset($settings['config']["reset"]) ? $settings['config']["reset"] : 'false',
);
$options['config']["viewportFactor"] = array(
'#type' => 'textfield',
'#title' => "Viewport",
'#description' => t("If set to 0, the element is considered in the viewport as soon as it enters.</br>If set to 1, the element is considered in the viewport when it is fully visible."),
'#size' => 6,
'#maxlength' => 4,
'#default_value' => isset($settings['config']["viewportFactor"]) ? $settings['config']["viewportFactor"] : 0.33,
);
$options['triggers_fieldset'] = array(
'#tree' => TRUE,
'#title' => t("Target elements"),
// The prefix/suffix provide the div that we're replacing, named by
// #ajax['wrapper'] above.
'#prefix' => '<div id="triggers-div">',
'#suffix' => '</div>',
'#type' => 'vertical_tabs',
'#description' => t('Elements where Parallax Effect will be added'),
);
$i = 1;
$triggers = isset($settings['triggers_fieldset']) ? $settings['triggers_fieldset'] : array();
foreach ($triggers as $trigger) {
$options['triggers_fieldset']["trigger{$i}"] = array(
'#type' => 'fieldset',
'#title' => isset($trigger["element"]) ? $trigger["element"] : t('New element'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#group' => 'triggers_fieldset',
);
$options['triggers_fieldset']["trigger{$i}"]["element"] = array(
'#type' => 'textfield',
'#default_value' => isset($trigger["element"]) ? $trigger["element"] : '',
'#title' => "Valid jQuery selector",
'#required' => TRUE,
'#description' => "A jQuery selector to identify the element(s) that will appear with the Scroll Reveal. For example for a list of items in a view you could use #block-views-services-block .views-row.",
);
$options['triggers_fieldset']["trigger{$i}"]["enter"] = array(
'#type' => 'select',
'#title' => "Enter",
'#default_value' => isset($trigger["enter"]) ? $trigger["enter"] : 'top',
'#description' => "Controls the vector origin of your reveal animation.",
'#options' => array(
'top' => t('Top'),
'bottom' => t('Bottom'),
'right' => t('Right'),
'left' => t('Left'),
),
);
$options['triggers_fieldset']["trigger{$i}"]["move"] = array(
'#type' => 'textfield',
'#title' => "Move",
'#description' => "The distance your revealing element travels in pixels.",
'#default_value' => isset($trigger["move"]) ? $trigger["move"] : 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]["over"] = array(
'#type' => 'textfield',
'#title' => "Over",
'#description' => "The duration of your reveal animation in seconds.",
'#default_value' => isset($trigger["over"]) ? $trigger["over"] : 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]["after"] = array(
'#type' => 'textfield',
'#title' => "After",
'#description' => "The duration before your reveal begins in seconds.",
'#default_value' => isset($trigger["after"]) ? $trigger["after"] : 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]["wait"] = array(
'#type' => 'textfield',
'#title' => "Move",
'#description' => "The duration before your reveal begins in seconds.",
'#default_value' => isset($trigger["wait"]) ? $trigger["wait"] : 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]['delete'] = array(
'#type' => 'button',
'#value' => t('Delete element'),
'#name' => 'delete-' . $i,
'#submit' => array(
'scrollreveal_delete_submit',
),
);
$i++;
}
$options['triggers_fieldset']["trigger{$i}"] = array(
'#type' => 'fieldset',
'#title' => t('New element'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#group' => 'triggers_fieldset',
);
$options['triggers_fieldset']["trigger{$i}"]["element"] = array(
'#type' => 'textfield',
'#default_value' => NULL,
'#title' => "Valid jQuery selector",
'#description' => "A jQuery selector to identify the element(s) that will appear with the Scroll Reveal. For example for a list of items in a view you could use #block-views-services-block .views-row.",
'#required' => FALSE,
);
$options['triggers_fieldset']["trigger{$i}"]["enter"] = array(
'#type' => 'select',
'#title' => "Enter",
'#default_value' => 0,
'#description' => "Controls the vector origin of your reveal animation.",
'#options' => array(
'top' => t('Top'),
'bottom' => t('Bottom'),
'right' => t('Right'),
'left' => t('Left'),
),
);
$options['triggers_fieldset']["trigger{$i}"]["move"] = array(
'#type' => 'textfield',
'#title' => "Move",
'#description' => "The distance your revealing element travels in pixels.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]["over"] = array(
'#type' => 'textfield',
'#title' => "Over",
'#description' => "The duration of your reveal animation in seconds.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]["after"] = array(
'#type' => 'textfield',
'#title' => "After",
'#description' => "The duration before your reveal begins in seconds.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['triggers_fieldset']["trigger{$i}"]["wait"] = array(
'#type' => 'textfield',
'#title' => "Move",
'#description' => "The duration before your reveal begins in seconds.",
'#default_value' => 0,
'#size' => 6,
'#maxlength' => 4,
);
$options['pages'] = array(
'#type' => 'fieldset',
'#title' => t('Pages Visibility'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$options['pages']['visibility'] = array(
'#type' => 'radios',
'#title' => t('Activate on specific pages'),
'#options' => array(
0 => t('All pages except those listed'),
1 => t('Only the listed pages'),
),
'#default_value' => $settings['pages']['visibility'],
);
$options['pages']['pages'] = array(
'#type' => 'textarea',
'#title' => 'List of pages to activate',
'#default_value' => $settings['pages']['pages'],
'#description' => t("Specify pages by using their paths. Enter one path per line. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array(
'%blog' => 'blog',
'%blog-wildcard' => 'blog/*',
'%front' => '<front>',
)),
);
// Per-path visibility.
$options['theme'] = array(
'#type' => 'fieldset',
'#title' => t('Themes Visibility'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$options['theme']['visibility'] = array(
'#type' => 'radios',
'#title' => t('Activate on specific themes'),
'#options' => array(
0 => t('All themes except those listed'),
1 => t('Only the listed themes'),
),
'#default_value' => $settings['theme']['visibility'],
);
$options['theme']['themes'] = array(
'#type' => 'select',
'#title' => 'List of themes where library will be loaded.',
'#options' => $active_themes,
'#multiple' => TRUE,
'#default_value' => $settings['theme']['themes'],
'#description' => t("Specify in which themes you wish the library to load."),
);
$options['#tree'] = TRUE;
$form['scrollreveal_settings'] = $options;
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save configuration'),
);
$form['#submit'][] = 'scrollreveal_admin_form_submit';
// Disable automatic defaults, which don't work with nested values.
return $form;
}