You are here

public function ShowMore::buildOptionsForm in Views Show More 8

Options form overwrite.

Overrides SqlBase::buildOptionsForm

File

src/Plugin/views/pager/ShowMore.php, line 79

Class

ShowMore
The plugin to handle show more pager.

Namespace

Drupal\views_show_more\Plugin\views\pager

Code

public function buildOptionsForm(&$form, FormStateInterface $form_state) {
  parent::buildOptionsForm($form, $form_state);
  $exclude = [
    'total_pages',
    'expose',
    'tags',
  ];
  foreach ($exclude as $ex) {
    unset($form[$ex]['#title']);
    unset($form[$ex]['#description']);
    $form[$ex]['#attributes'] = [
      'class' => [
        'visually-hidden',
      ],
    ];
  }

  // Result display method.
  $form['result_display_method'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Result display method'),
    '#description' => $this
      ->t('<strong>Append</strong> result display method append the new content after the existing content on the page in ajax mode and in no-ajax mode replace the content by page refresh. <strong>Replace</strong> result display method replace the content with new content both in ajax and no-ajax mode. In no-ajax mode it refresh the page.'),
    '#options' => [
      'append' => $this
        ->t('Append'),
      'html' => $this
        ->t('Replace'),
    ],
    '#default_value' => $this->options['result_display_method'] ? $this->options['result_display_method'] : 'append',
    '#weight' => 0,
  ];

  // Option for users to specify the text used on the 'show more' button.
  $form['show_more_text'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Show more pager link text'),
    '#description' => $this
      ->t('Text for the button which used to load more items. Like "Show More".'),
    '#default_value' => $this->options['show_more_text'] ? $this->options['show_more_text'] : $this
      ->t('Show more'),
    '#required' => TRUE,
    '#weight' => 1,
  ];

  // Option for users to specify the text used on the 'show more' button
  // when no mor result is found.
  $form['show_more_empty_text'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Show more pager link text when empty'),
    '#description' => $this
      ->t('Empty text when no more items exist to load. Like "No more results".'),
    '#default_value' => $this->options['show_more_empty_text'] ? $this->options['show_more_empty_text'] : '',
    '#weight' => 2,
  ];

  // Initial items count.
  $form['initial'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Initial items'),
    '#description' => $this
      ->t('The number of items to display initially. Enter 0 for use same as items per page (show more click).'),
    '#default_value' => $this->options['initial'] ? $this->options['initial'] : 0,
    '#weight' => 3,
    '#min' => 0,
  ];

  // Twick item per page description and weight.
  $form['items_per_page']['#description'] = $this
    ->t('The number of items to display per show more click.');
  $form['items_per_page']['#weight'] = 4;

  // Twick offset weight.
  $form['offset']['#weight'] = 5;

  // Twick pager id weight.
  $form['id']['#weight'] = 5;

  // Effects for loading adds new rows.
  $form['effects'] = [
    '#type' => 'details',
    '#open' => FALSE,
    '#tree' => TRUE,
    '#title' => $this
      ->t('Animation'),
    '#input' => TRUE,
    '#weight' => 7,
  ];
  $form['effects']['type'] = [
    '#type' => 'select',
    '#options' => [
      'none' => $this
        ->t('None'),
      'fade' => $this
        ->t('FadeIn'),
      'scroll' => $this
        ->t('Scroll to New Content'),
      'scroll_fade' => $this
        ->t('Scroll to New Content & FadeIn'),
    ],
    '#default_vaue' => 'none',
    '#title' => $this
      ->t('Animation Type'),
    '#default_value' => $this->options['effects']['type'],
  ];
  $form['effects']['speed_type'] = [
    '#type' => 'select',
    '#options' => [
      'slow' => $this
        ->t('Slow'),
      'fast' => $this
        ->t('Fast'),
      'custom' => $this
        ->t('Custom'),
    ],
    '#states' => [
      'invisible' => [
        ':input[name="pager_options[effects][type]"]' => [
          [
            'value' => 'none',
          ],
        ],
      ],
    ],
    '#title' => $this
      ->t('Animation Speed'),
    '#default_value' => $this->options['effects']['speed_type'],
  ];
  $form['effects']['speed_value'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Animation speed in ms'),
    '#states' => [
      'visible' => [
        ':input[name="pager_options[effects][speed_type]"]' => [
          'value' => 'custom',
        ],
      ],
    ],
    '#min' => 0,
    '#default_value' => $this->options['effects']['speed_value'],
  ];
  $form['effects']['scroll_offset'] = [
    '#type' => 'number',
    '#title' => t('Scroll Offset'),
    '#states' => [
      'visible' => [
        ':input[name="pager_options[effects][type]"]' => [
          [
            'value' => 'scroll',
          ],
          [
            'value' => 'scroll_fade',
          ],
        ],
      ],
    ],
    '#min' => 0,
    '#default_value' => $this->options['effects']['scroll_offset'],
  ];

  // Advanced options, override default selectors.
  $form['advance'] = [
    '#type' => 'details',
    '#open' => FALSE,
    '#tree' => TRUE,
    '#title' => $this
      ->t('Advanced Options'),
    '#input' => TRUE,
    '#weight' => 9,
  ];

  // Option to specify the content_selector, which is the wrapping div for
  // views rows. This allows the JS to both find new rows on next pages and
  // know where to put them in the page.
  $form['advance']['content_selector'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Content jquery selector'),
    '#description' => $this
      ->t('jQuery selector for the rows wrapper, relative to the view container. Use when you override the views markup. Views Show More pager requires a wrapping element for the rows. Default is <strong><code>".view-content"</code></strong>.'),
    '#default_value' => $this->options['advance']['content_selector'],
  ];

  // Option to specify the pager_selector, which is the pager relative to the
  // view container.
  $form['advance']['pager_selector'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Pager jquery selector'),
    '#description' => $this
      ->t('jQuery selector for the pager, relative to the view container. Use when you override the pager markup. Default is <strong><code>".pager-show-more"</code></strong>.'),
    '#default_value' => $this->options['advance']['pager_selector'],
  ];
}