You are here

public function AlphaPaginationArea::render in Views Alpha Pagination 8.2

Render the alphabetic pagination.

Parameters

bool $empty: If this area should be empty, then return it as empty.

Return value

string A string representing the complete pagination including linked and unlinked options.

Overrides AreaPluginBase::render

File

src/Plugin/views/area/AlphaPaginationArea.php, line 583

Class

AlphaPaginationArea
Views area handler to display alphabetic pagination.

Namespace

Drupal\alpha_pagination\Plugin\views\area

Code

public function render($empty = FALSE) {

  // Create the wrapper.
  $wrapper = [
    '#theme_wrappers' => [
      'container__alpha_pagination__wrapper',
    ],
    '#attributes' => [],
    '#attached' => [
      'library' => [
        'alpha_pagination/alpha_pagination',
      ],
    ],
  ];
  $this->alphaPagination
    ->addClasses($this->alphaPagination
    ->getOption('paginate_class'), $wrapper['#attributes']);

  // Iterate over the alphabet and populate the items for the item list.
  $items = [];
  foreach ($this->alphaPagination
    ->getCharacters() as $character) {

    // Add special numeric divider.
    if ($character
      ->getValue() === '-' && $this->alphaPagination
      ->getOption('paginate_view_numbers') !== '2' && $this->alphaPagination
      ->getOption('paginate_numeric_divider')) {

      // Add an empty list item.
      $item = [
        'data' => '',
      ];
      $this->alphaPagination
        ->addClasses($this->alphaPagination
        ->getOption('paginate_numeric_divider_class'), $item);
      $items[] = $item;
    }
    elseif ($item = $character
      ->build()) {
      $item['#wrapper_attributes'] = [];

      // Add the necessary classes for item.
      if ($character
        ->isAll()) {
        $this->alphaPagination
          ->addClasses($this->alphaPagination
          ->getOption('paginate_all_class'), $item['#wrapper_attributes']);
      }
      if ($character
        ->isNumeric()) {
        $this->alphaPagination
          ->addClasses($this->alphaPagination
          ->getOption('paginate_numeric_class'), $item['#wrapper_attributes']);
      }
      if ($character
        ->isActive()) {
        $this->alphaPagination
          ->addClasses($this->alphaPagination
          ->getOption('paginate_active_class'), $item['#wrapper_attributes']);
      }
      elseif (!$character
        ->isEnabled()) {
        $this->alphaPagination
          ->addClasses($this->alphaPagination
          ->getOption('paginate_inactive_class'), $item['#wrapper_attributes']);
      }

      // Add the constructed item to the list.
      $items[] = $item;
    }
  }

  // Sanitize any classes provided for the item list.
  $item_list = [
    '#theme' => 'item_list__alpha_pagination',
    '#attributes' => [],
    '#items' => $items,
  ];
  $this->alphaPagination
    ->addClasses($this->alphaPagination
    ->getOption('paginate_list_class'), $item_list['#attributes']);

  // Append the item list to the wrapper.
  $wrapper[] = $item_list;
  return $wrapper;
}