From ea8b8472b56295cbffe3c1e758702a43dd559b59 Mon Sep 17 00:00:00 2001
From: Robert Lange <robert.lange@uni-leipzig.de>
Date: Fri, 15 Jan 2021 19:16:04 +0100
Subject: [PATCH] refs #18936 [finc] barf: overwrite bootstrap ranges-slider

* add aria-label for slider
* add aria-label for slider handles
** by javascript because slider is generated by js library without possibility to set attributes
---
 .../Recommend/SideFacets/range-slider.phtml   | 81 +++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100644 themes/finc/templates/Recommend/SideFacets/range-slider.phtml

diff --git a/themes/finc/templates/Recommend/SideFacets/range-slider.phtml b/themes/finc/templates/Recommend/SideFacets/range-slider.phtml
new file mode 100644
index 00000000000..8dc4975ac49
--- /dev/null
+++ b/themes/finc/templates/Recommend/SideFacets/range-slider.phtml
@@ -0,0 +1,81 @@
+<!-- finc - recommend - sidefacets - rangeslider -->
+<?php
+    /** this is a copy of the bootstrap3 version and adds an aria-label to the
+     * slider-container element
+     */
+?>
+<div class="facet">
+  <form name="<?=$this->escapeHtmlAttr($this->title)?>Filter" id="<?=$this->escapeHtmlAttr($this->title)?>Filter">
+    <?=$results->getUrlQuery()->asHiddenFields(['page' => "/./", 'filter' => "/^{$this->title}:.*/"])?>
+    <input type="hidden" name="<?=$this->escapeHtmlAttr($this->facet['type'])?>range[]" value="<?=$this->escapeHtmlAttr($this->title)?>"/>
+    <div class="date-fields">
+      <?php $extraInputAttribs = ($this->facet['type'] == 'date') ? 'maxlength="4" ' : ''; ?>
+      <div class="date-from">
+        <label id="from-label" for="<?=$this->escapeHtmlAttr($this->title)?>from">
+          <?=$this->transEsc('date_from')?>:
+        </label>
+        <input type="text" class="form-control" name="<?=$this->escapeHtmlAttr($this->title)?>from" id="<?=$this->escapeHtmlAttr($this->title)?>from" value="<?=isset($this->facet['values'][0]) ? $this->escapeHtmlAttr($this->facet['values'][0]) : ''?>" <?=$extraInputAttribs?>/>
+      </div>
+      <div class="date-to">
+        <label id="to-label" for="<?=$this->escapeHtmlAttr($this->title)?>to">
+          <?=$this->transEsc('date_to')?>:
+        </label>
+        <input type="text" class="form-control" name="<?=$this->escapeHtmlAttr($this->title)?>to" id="<?=$this->escapeHtmlAttr($this->title)?>to" value="<?=isset($this->facet['values'][1]) ? $this->escapeHtmlAttr($this->facet['values'][1]) : ''?>" <?=$extraInputAttribs?>/>
+      </div>
+    </div>
+    <?php if ($this->facet['type'] == 'date'): ?>
+    <?php /* next line finc specific, adds aria-label */?>
+      <div class="slider-container"><input type="text" class="hidden" id="<?=$this->escapeHtmlAttr($this->title)?><?=$this->escapeHtml($this->facet['type'])?>Slider" aria-label="<?=$this->transEsc('Range-from-to')?>"/></div>
+    <?php endif; ?>
+    <input class="btn btn-default" type="submit" value="<?=$this->transEsc('Set')?>"/>
+  </form>
+</div>
+<?php if ($this->facet['type'] == 'date'): ?>
+  <?php $this->headScript()->appendFile('vendor/bootstrap-slider.min.js'); ?>
+  <?php $this->headLink()->appendStylesheet('vendor/bootstrap-slider.min.css'); ?>
+  <?php
+    $min = !empty($this->facet['values'][0]) ? min($this->facet['values'][0], 1400) : 1400;
+    $future = date('Y', time() + 31536000); // next year
+    $max = !empty($this->facet['values'][1]) ? max($future, $this->facet['values'][1]) : $future;
+    $low = !empty($this->facet['values'][0]) ? $this->facet['values'][0] : $min;
+    $high = !empty($this->facet['values'][1]) ? $this->facet['values'][1] : $max;
+    $script = <<<JS
+$(document).ready(function() {
+  var fillTexts = function() {
+    var v = {$this->escapeHtmlAttr($this->title)}dateSlider.getValue();
+    $('#{$this->escapeHtmlAttr($this->title)}from').val(v[0]);
+    $('#{$this->escapeHtmlAttr($this->title)}to').val(v[1]);
+  };
+  var {$this->escapeHtmlAttr($this->title)}dateSlider = $('#{$this->escapeHtmlAttr($this->title)}dateSlider')
+    .slider({
+      'min':{$min},
+      'max':{$max},
+      'handle':"square",
+      'tooltip':"hide",
+      'value':[{$low},{$high}]
+    })
+    .on('change', fillTexts)
+    .data('slider');
+  
+    $(".slider-handle.min-slider-handle").attr("aria-labelledby", "from-label");
+    $(".slider-handle.max-slider-handle").attr("aria-labelledby", "to-label");
+});
+
+$('#{$this->escapeHtmlAttr($this->title)}from, #{$this->escapeHtmlAttr($this->title)}to').change(function () {
+  var fromValue = Number($('#{$this->escapeHtmlAttr($this->title)}from').val());
+  var toValue = Number($('#{$this->escapeHtmlAttr($this->title)}to').val());
+  $('#{$this->escapeHtmlAttr($this->title)}dateSlider').slider(
+    'setValue',
+    [
+      isNaN(fromValue) || fromValue <= 0 ? {$min} : fromValue,
+      isNaN(toValue) || toValue <= 0 ? {$max} : toValue
+    ],
+    true
+  );
+});
+
+JS;
+  ?>
+  <?=$this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $script, 'SET'); ?>
+<?php endif; ?>
+<!-- finc - recommend - sidefacets - rangeslider - END -->
-- 
GitLab