portal_footer.html
1 <@cTpl>
2 <footer class="mt-5">
3 <div class="container">
4 <div class="row">
5 <div class="col-12 col-md-6 col-lg-4">
6 <form class="form-inline mx-5 mx-md-0 mb-3 mb-md-0" action="jsp/site/Portal.jsp" method="get">
7 <input name="page" type="hidden" value="search" >
8 <div class="input-group">
9 <input id="query" class="form-control input-lg" name="query" type="text" placeholder="Rechercher" />
10 <button type="submit" class="btn btn-light btn-lg" title="#i18n{portal.site.page_menu_tools.labelSearch}">
11 <i class="ti ti-search"></i> <span class="visually-hidden">#i18n{portal.site.page_menu_tools.labelSearch}</span>
12 </button>
13 </div>
14 </form>
15 </div>
16 <div class="col-12 col-md-3 col-lg-4 ps-5">
17 <h3 class="ms-5">#i18n{portal.site.portal_footer.labelTitle}</h3>
18 <ul class="list-unstyled ms-5">
19 <li><a href="#home" class="page-scroll text-capitalize">#i18n{portal.site.page_home.label}</a></li>
20 <li><a href="jsp/site/Portal.jsp?page=map" data-bs-info="#i18n{portal.site.site_map.pageTitle}" data-bs-toggle="modal" data-bs-target="#lutece-modal" >#i18n{portal.site.site_map.pageTitle}</a></li>
21 <li><a href="jsp/site/PopupCredits.jsp" data-bs-info="#i18n{portal.site.portal_footer.labelCredits}" data-bs-toggle="modal" data-bs-target="#lutece-modal" title="[#i18n{portal.site.portal_footer.newWindow}] #i18n{portal.site.portal_footer.labelCredits}" target="info_credit">#i18n{portal.site.portal_footer.labelCredits}</a></li>
22 <li><a href="jsp/site/PopupLegalInfo.jsp" data-bs-info="#i18n{portal.site.portal_footer.labelInfo}" data-bs-toggle="modal" data-bs-target="#lutece-modal" title="[#i18n{portal.site.portal_footer.newWindow}] #i18n{portal.site.portal_footer.labelInfo}" target="info_legal">#i18n{portal.site.portal_footer.labelInfo}</a></li>
23 </ul>
24 </div>
25 <div class="col-12 col-md-3 col-lg-4 mt-3">
26 <p class="text-sm-center text-md-end">
27 <a class="text-decoration-none" href="http://lutece.paris.fr/" title="Lutece [Open in new window]" target="_blank">
28 <span class="me-2">Powered by</span>
29 <img src="images/logo-footer.png" alt="Powered by Lutece" class="logo-footer" >
30 </a>
31 </p>
32 </div>
33 </div>
34 <!-- <div class="row mt-3">
35 <div class="col-sm-12 col-md-3 col-lg-3 mt-3">
36 <p class="text-sm-center text-md-start">
37 <a class="text-decoration-none" href="http://lutece.paris.fr/" title="Lutece [Open in new window]" target="_blank">
38 <span class="me-2">Powered by</span>
39 <img src="images/logo-footer.png" alt="Powered by Lutece" class="logo-footer" >
40 </a>
41 </p>
42 </div>
43 <div class="col-sm-12 col-md-9 col-lg-9 mt-3">
44 <p class="mb-3 text-center">2025 - Coded by the <a href="https://github.com/orgs/lutece-platform/people" title="Lutece Github [Open in new window]">Lutece Dev Team</a> on <a href="https://github.com/lutece-platform/lutece-core" title="Lutece Github [Open in new window]"> Lutece core 7 </a></p>
45 </div>
46 </div>
47 </div> -->
48 </footer>
49 <div class="modal" tabindex="-1" id="lutece-modal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="lutece-mdoal-label" aria-hidden="true">
50 <div class="modal-dialog modal-dialog-scrollable modal-dialog-centered" role="document">
51 <div class="modal-content">
52 <div class="modal-header">
53 <h5 class="modal-title" id="lutece-mdoal-label"></h5>
54 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="#i18n{portal.util.labelClose}"></button>
55 </div>
56 <div class="modal-body">
57 </div>
58 <div class="modal-footer">
59 <button type="button" class="btn me-auto" data-bs-dismiss="modal">#i18n{portal.util.labelClose}</button>
60 </div>
61 </div>
62 </div>
63 </div>
64 <#noparse>
65 <script>
66 function loadModalContent( url, body, sel ) {
67 const xhr = new XMLHttpRequest();
68 xhr.open('GET', url, true);
69 xhr.onreadystatechange = () => {
70 if (xhr.readyState == 4 && xhr.status == 200) {
71 const response = xhr.responseText;
72 // Convert the response to a temporary div to manipulate as DOM
73 const qDiv = document.createElement('div');
74 qDiv.innerHTML = response;
75 // Use querySelector or getElementsByClassName to select elements
76 body.innerHTML = qDiv.querySelector( sel ).innerHTML;
77 }
78 }
79 xhr.send();
80 };
81
82 // Load content in modal on activation
83 document.addEventListener("DOMContentLoaded", function() {
84 const luteceModal = document.getElementById('lutece-modal')
85
86 luteceModal.addEventListener('show.bs.modal', event => {
87 // Button that triggered the modal
88 const button = event.relatedTarget
89 // Extract info from data-bs-* attributes
90 const title = button.getAttribute('data-bs-info')
91 const modalTitle = luteceModal.querySelector('.modal-title')
92 // Update the modal's content.
93 const url = button.getAttribute('href')
94 const modalBody = luteceModal.querySelector('.modal-body')
95 const content = loadModalContent( url, modalBody, '.main-content' );
96 modalTitle.textContent = `${title}`
97 modalBody.innerHTML = content;
98 })
99 });
100 </script>
101 </#noparse>
102 </@cTpl>