templates/Lenord/Main/espacedoc.html.twig line 1

Open in your IDE?
  1. {% extends 'Lenord/base.html.twig' %}
  2. {% block header_epingles %}
  3.   {{ include('Lenord/Main/parts/epingles.html.twig') }}
  4. {% endblock %}
  5. {% block header_breadcrumb %}
  6.   {% include 'Nordinfo/Main/parts/breadcrumb.html.twig' with {'variation':'le-nord'} %}
  7. {% endblock %}
  8. {% block header_breadcrumb_pdf %}
  9.   {% include 'Nordinfo/Main/parts/breadcrumb.html.twig' with {'variation':'le-nord'} %}
  10. {% endblock %}
  11. {% block body %}
  12.   <main tabindex="-1" role="main" id="mainContent">
  13.     {% include 'Nordinfo/Main/parts/back_btn.html.twig' with {'back_btn_class':'--leNord --barHeading --barHeadingIcon --blueMedium'} %}
  14.     <div class="barHeading --leNord --icon --documents">
  15.       <h1>
  16.         <span class="__icon">{{ source('svg/icons/icon-file.svg') }}</span>
  17.         <span class="__text">Espace documentaire</span>
  18.       </h1>
  19.     </div>
  20.     <div class="barSearch --documents">
  21.       <form action="{{ path('espacedoc') }}" method="GET" class="__form">
  22.         <div class="__rowInput">
  23.           <div class="container">
  24.             <label for="inputSearchDoc" hidden="">Rechercher</label>
  25.             <div class="containerInputSearch">
  26.               <input value="{{ search }}" name="search" title="Je recherche" type="text" id="inputSearchDoc"
  27.                      data-tabindex-mobile="5" placeholder="Je recherche un document" class="form-control __input">
  28.               <button type="submit" class="__btn">
  29.                 <img src="{{ asset('img/brandmaster/icon-search-le-nord.svg') }}" alt="" aria-hidden="true">
  30.                 <span class="sr-only">Recherche</span>
  31.               </button>
  32.             </div>
  33.           </div>
  34.         </div>
  35.         <div class="__rowFilters">
  36.           <div class="container">
  37.             <fieldset class="__inner filter_doc">
  38.               <legend>Type de document :</legend>
  39.               <div>
  40.                 <div>
  41.                   {% for type in types_document %}
  42.                     <div class="__col">
  43.                       <div class="__wrapperCheckbox">
  44.                         <div>
  45.                           <input {% if filters is not null and type.id in filters %}checked{% endif %}
  46.                                  class="__input-checkbox"
  47.                                  data-filter-checkbox=""
  48.                                  aria-label="{{ type.titre }}, mise à jour des résultats"
  49.                                  type="checkbox" id="{{ type.id }}" data-id="{{ type.id }}">
  50.                         </div>
  51.                         <div>
  52.                           <label for="{{ type.id }}">{{ type.titre }}</label>
  53.                         </div>
  54.                       </div>
  55.                     </div>
  56.                   {% endfor %}
  57.                 </div>
  58.               </div>
  59.             </fieldset>
  60.           </div>
  61.         </div>
  62.       </form>
  63.     </div>
  64.     <div class="container pT">
  65.       <h3 class="headingSection mB--imp">{{ pagination.totalItemCount }} documents
  66.         {% if search is not null or filters is not empty %}pour
  67.           {% if search is not null %}
  68.             "{{ search }}"
  69.             {% if filters is not empty %}
  70.               dans
  71.               {% for libelle in types_libelle %}
  72.                 {% if loop.index > 1 %}, {% endif %}{{ libelle }}
  73.               {% endfor %}
  74.             {% endif %}
  75.           {% else %}
  76.             {% for libelle in types_libelle %}
  77.               {% if loop.index > 1 %}, {% endif %}{{ libelle }}
  78.             {% endfor %}
  79.           {% endif %}{% endif %}
  80.       </h3>
  81.       <form class="containerSearchResultsDocs">
  82.         {% if pagination.totalItemCount > 0 %}
  83.           <div class="__rowFilters">
  84.             <div>
  85.               <label for="sort_filter">Mode de tri</label>
  86.               <select id="sort_filter" class="form-control">
  87.                 <option {% if app.request.query.get('sort') == 'd.titre' and app.request.query.get('direction') == 'asc' %}selected{% endif %} value='alpha'>De A à Z
  88.                 </option>
  89.                 <option {% if app.request.query.get('sort') == 'd.titre' and app.request.query.get('direction') == 'desc' %}selected{% endif %} value='reversealpha'>De Z à A
  90.                 </option>
  91.                 <option {% if app.request.query.get('sort') == 'd.date_publication' and app.request.query.get('direction') == 'desc' or app.request.query.get('sort') is null %}selected{% endif %} value='date'>Plus récent en premier
  92.                 </option>
  93.                 <option {% if app.request.query.get('sort') == 'd.date_publication' and app.request.query.get('direction') == 'asc' %}selected{% endif %} value='reversedate'>Plus ancien en premier
  94.                 </option>
  95.               </select>
  96.             </div>
  97.             <div>
  98.               <label for="result_filter">Nombre de résultats par page</label>
  99.               <select id="result_filter" class="form-control">
  100.                 <option {% if app.request.query.get('_items_per_page') == 24 %}selected{% endif %} value="24">24 résultats
  101.                   par page
  102.                 </option>
  103.                 <option {% if app.request.query.get('_items_per_page') == 48 %}selected{% endif %} value="48">48 résultats
  104.                   par page
  105.                 </option>
  106.                 <option {% if app.request.query.get('_items_per_page') == 72 %}selected{% endif %} value="72">72 résultats
  107.                   par page
  108.                 </option>
  109.               </select>
  110.             </div>
  111.           </div>
  112.         {% endif %}
  113.         <div class="__rowPagination">
  114.           <div class="containerPagination">
  115.             {{ knp_pagination_render(pagination) }}
  116.           </div>
  117.         </div>
  118.         <div class="gridResultsSearchDocs">
  119.           {% for document in pagination %}
  120.             <div class="__col">
  121.               <a href="{{ path('document', {'slug':document.aliasUrl}) }}" class="__item">
  122.                 <div class="__inner">
  123.                   <div class="__icon">
  124.                     {{ source('svg/icons/icon-file.svg') }}
  125.                   </div>
  126.                   <div class="__details">
  127.                     <p class="__title">{{ document.titre }}</p>
  128.                     {% if document.formatFile|length > 0 %}
  129.                       {% if document.fichierName2 is null %}
  130.                         <p class="__type">
  131.                           {{ document.formatFile|upper }}&nbsp;
  132.                           {% if document.poids is not null %}
  133.                             {% set poids_arr = document.poids|split(' ') %}
  134.                             {{ poids_arr[0] }} <abbr title="mégaoctet">{{ poids_arr[1] }}</abbr>
  135.                           {% endif %}
  136.                         </p>
  137.                       {% endif %}
  138.                     {% endif %}
  139.                     <p class="__date">{{ document.datePublication|date('d')~' '~trans_month_hash[document.datePublication|date('F')]~' '~document.datePublication|date('Y') }}</p>
  140.                   </div>
  141.                 </div>
  142.               </a>
  143.             </div>
  144.           {% endfor %}
  145.         </div>
  146.         <div class="__rowPagination">
  147.           <div class="containerPagination">
  148.             {{ knp_pagination_render(pagination) }}
  149.           </div>
  150.         </div>
  151.       </form>
  152.     </div>
  153.   </main>
  154. {% endblock %}
  155. {% block footer_top %}
  156.   {% include 'Nordinfo/Main/parts/our-websites.html.twig' %}
  157. {% endblock %}
  158. {% block include_js %}
  159.   <script>
  160.     $(function () {
  161.       const elemsCheckboxFilters = document.querySelectorAll('[data-filter-checkbox]');
  162.       const inputSearch = document.getElementById('inputSearchDoc');
  163.       const urlParams = new URLSearchParams(window.location.search);
  164.       const lastCheckboxId =  urlParams.get('last_elem');
  165.       if (lastCheckboxId) {
  166.         const checkboxToFocus = document.getElementById(lastCheckboxId);
  167.         if (checkboxToFocus) {
  168.           checkboxToFocus.focus();
  169.         }
  170.       }
  171.       
  172.       function setFilter() {
  173.         var url = new URL(window.location.href);
  174.         url.searchParams.delete('types[]');
  175.         url.searchParams.delete('sort');
  176.         url.searchParams.delete('direction');
  177.         $(".filter_doc input:checked").each(function () {
  178.           url.searchParams.append('types[]', $(this).attr('data-id'));
  179.           url.searchParams.set('page', '1');
  180.         });
  181.         if ($('#form_filter #inputSearch').val() !== undefined) {
  182.           url.searchParams.set('search', $('#form_filter #inputSearch').val());
  183.         }
  184.         if ($('#sort_filter').val() !== '') {
  185.           if ($('#sort_filter').val() == 'alpha') {
  186.             url.searchParams.set('sort', 'd.titre');
  187.             url.searchParams.set('direction', 'asc');
  188.           }
  189.           if($('#sort_filter').val() == 'reversealpha'){
  190.             url.searchParams.set('sort', 'd.titre');
  191.             url.searchParams.set('direction', 'desc');
  192.           }
  193.           if ($('#sort_filter').val() == 'date') {
  194.             url.searchParams.set('sort', 'd.date_publication');
  195.             url.searchParams.set('direction', 'desc');
  196.           }
  197.           if ($('#sort_filter').val() == 'reversedate') {
  198.             url.searchParams.set('sort', 'd.date_publication');
  199.             url.searchParams.set('direction', 'asc');
  200.           }
  201.         }
  202.         if ($('#result_filter').val() !== '' && $('#result_filter').val() !== undefined) {
  203.           url.searchParams.set('_items_per_page', $('#result_filter').val());
  204.         }
  205.         return url;
  206.       }
  207.       $('#sort_filter').on('change', function () {
  208.         const url = new URL(window.location.href);
  209.         url.searchParams.set('last_elem', 'sort_filter');
  210.         history.pushState({}, '', url.toString());
  211.         setTimeout(() => {
  212.           window.location.href = setFilter().toString();
  213.         }, 500);
  214.       });
  215.       $('#result_filter').on('change', function () {
  216.         const url = new URL(window.location.href);
  217.         url.searchParams.set('last_elem', 'result_filter');
  218.         history.pushState({}, '', url.toString());
  219.         setTimeout(() => {
  220.           window.location.href = setFilter().toString();
  221.         }, 500);
  222.       });
  223.       $('#filter_search').on('click', function () {
  224.         setTimeout(() => {
  225.           window.location.href = setFilter().toString();
  226.         }, 500);
  227.       })
  228.       $('.filter_doc').on('click', function () {
  229.         setTimeout(() => {
  230.           window.location.href = setFilter().toString();
  231.         }, 500);
  232.       });
  233.       
  234.       elemsCheckboxFilters.forEach((el) => {
  235.         el.addEventListener('change', function(ev) {
  236.           const idTarget = ev.target.getAttribute('data-id');
  237.           const url = new URL(window.location.href);
  238.           url.searchParams.set('last_elem', idTarget);
  239.           history.pushState({}, '', url.toString());
  240.         });
  241.       });
  242.       
  243.       if (document.body.contains(inputSearch)) {
  244.         inputSearch.addEventListener('input', () => {
  245.           const url = new URL(window.location.href);
  246.           url.searchParams.set('last_elem', 'inputSearchDoc');
  247.           history.pushState({}, '', url.toString());
  248.         });
  249.       }
  250.       
  251.     });
  252.   </script>
  253. {% endblock %}