You are here

function views_handler_area_alpha_pagination::render in Views Alpha Pagination 7.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 views_handler_area::render

File

src/views_handler_area_alpha_pagination.inc, line 458

Class

views_handler_area_alpha_pagination
Views area handler to display alphabetic pagination.

Code

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 ($build = $character
      ->build(TRUE)) {
      $item = [
        'data' => $build,
      ];

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

      // 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 drupal_render($wrapper);
}