Verified Commit 2f060c96 authored by Dave Long's avatar Dave Long
Browse files

Issue #2952488 by smustgrave, pminf, dcgoodwin, andypost, pau1_m, sim_1,...

Issue #2952488 by smustgrave, pminf, dcgoodwin, andypost, pau1_m, sim_1, boulaffasae, idebr, jmickela, barone, mgifford, jgloverattronedotcom, andrewmacpherson, DuaelFr, larowlan, lauriii, RachelOlivero: Use aria-current=page in pagination links

(cherry picked from commit 38e90839)
parent 720d213c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
 */

use Drupal\Component\Render\FormattableMarkup;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Url;
use Drupal\Component\Serialization\Json;
use Drupal\Component\Utility\Crypt;
@@ -1827,6 +1828,7 @@ function template_preprocess_pager(&$variables) {
    $items['pages'][$i]['attributes'] = new Attribute();
    if ($i == $pager_current) {
      $variables['current'] = $i;
      $items['pages'][$i]['attributes']->setAttribute('aria-current', new TranslatableMarkup('Current page'));
    }
  }
  // Add an ellipsis if there are further next pages.
+28 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace Drupal\Tests\system\Unit\Pager;

use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Template\AttributeString;
use Drupal\Tests\UnitTestCase;

/**
@@ -39,6 +40,8 @@ protected function setUp(): void {
    $container = new ContainerBuilder();
    $container->set('pager.manager', $pager_manager);
    $container->set('url_generator', $url_generator);
    // template_preprocess_pager() renders translatable attribute values.
    $container->set('string_translation', $this->getStringTranslationStub());
    \Drupal::setContainer($container);
  }

@@ -63,4 +66,29 @@ public function testQuantityNotSet() {
    $this->assertEquals(['first', 'previous'], array_keys($variables['items']));
  }

  /**
   * Tests template_preprocess_pager() when a #quantity value is passed.
   *
   * @covers ::template_preprocess_pager
   */
  public function testQuantitySet() {
    require_once $this->root . '/core/includes/theme.inc';
    $variables = [
      'pager' => [
        '#element' => '2',
        '#parameters' => [],
        '#quantity' => '2',
        '#route_name' => '',
        '#tags' => '',
      ],
    ];
    template_preprocess_pager($variables);

    $this->assertEquals(['first', 'previous', 'pages'], array_keys($variables['items']));
    /** @var \Drupal\Core\Template\AttributeString $attribute */
    $attribute = $variables['items']['pages']['2']['attributes']->offsetGet('aria-current');
    $this->assertInstanceOf(AttributeString::class, $attribute);
    $this->assertEquals('Current page', $attribute->value());
  }

}