You are here

function scrollreveal_admin in Scroll Reveal 7

Same name and namespace in other branches
  1. 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;
}