{% extends 'Lenord/base.html.twig' %}
{% block header_epingles %}
{{ include('Lenord/Main/parts/epingles.html.twig') }}
{% endblock %}
{% block header_breadcrumb %}
{% include 'Nordinfo/Main/parts/breadcrumb.html.twig' with {'variation':'le-nord'} %}
{% endblock %}
{% block header_breadcrumb_pdf %}
{% include 'Nordinfo/Main/parts/breadcrumb.html.twig' with {'variation':'le-nord'} %}
{% endblock %}
{% block body %}
<main tabindex="-1" role="main" id="mainContent">
{% include 'Nordinfo/Main/parts/back_btn.html.twig' with {'back_btn_class':'--leNord --barHeading --barHeadingIcon --blueMedium'} %}
<div class="barHeading --leNord --icon">
<h1>
<span class="__icon">{{ source('svg/icons/icon-map.svg') }}</span>
<span class="__text">Cartographie</span>
</h1>
</div>
<form class="containerFiltersMap">
<div class="barFilter --top">
<div class="container">
<div class="__inner">
<div id="blockFilter1" class="">
<div>
<div><select id="dropdown_thematique" class="form-control" aria-label="Thématiques, mise à jour de la carte des services du Département du Nord">
<option value="thematique" selected class="__first">THÉMATIQUE</option>
{% for categorie in array_thematiques %}
<option
value="{{ categorie.slug| replace({ 'á':'a', 'é':'e', 'í':'i', 'ó':'o', 'ú':'u' }) }}">{{ categorie.name|capitalize|replace({ '-':' ' }) }}</option>
{% endfor %}
</select></div>
<div><select id="dropdown_besoin" disabled class="form-control" aria-label="Besoin, mise à jour de la carte des services du Département du Nord">
<option selected value="besoin" class="__first">BESOIN</option>
{% for categorie in array_besoins %}
<option style="display:none;" class="option_besoin {{ categorie.parent }}"
data-parent="{{ categorie.parent }}"
value="{{ categorie.slug }}">{{ categorie.name }}</option>
{% endfor %}
</select></div>
</div>
</div>
<div id="blockFilter2" class="">
<div>
<select id="dropdown_final" class="form-control" aria-label="Type d'établissement, mise à jour de la carte des services du Département du Nord">
<option value="type" selected class="__first">TYPE D'ÉTABLISSEMENT</option>
{% for categorie in array_etablissements %}
<option value="{{ categorie.slug }}">{{ categorie.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div id="blockFilter3" class="">
<div class="formSearchMain _header form --leNord">
<label for="inputSearchPoints" hidden>Rechercher</label>
<div class="__input-wrapper">
<input required name="search" title="Je recherche" type="text" id="inputSearchPoints"
placeholder="Je recherche" class="form-control __input-search">
<button class="__btn-search" id="btnSubmitFormFilterSearch">
<img src="{{ asset('img/brandmaster/icon-search-le-nord.svg') }}" alt="" aria-hidden="true">
<span class="sr-only">Recherche</span>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="barFilter --bottom">
<div class="container">
<div class="__inner">
<div>
<button type="button" class="btn btnMain --icon" id="btnGetLocation">
<span class="__icon">{{ source('svg/icons/icon-target.svg') }}</span>
<span class="__text">Près de moi</span>
</button>
</div>
<div id="blockFilterRegion">
<select class="form-control" id="dropdown_region" aria-label="Territoire, mise à jour de la carte des services du Département du Nord">
<option selected value="region">Tout le département</option>
{% for categorie in array_territoires %}
<option value="{{ categorie.slug }}">{{ categorie.name|capitalize|replace({ '-':' ' }) }}</option>
{% endfor %}
</select>
</div>
<div>
<button type="button" class="btn btnMain --transparent" data-toggle="collapse"
data-target="#collapseSearch" aria-expanded="false" aria-controls="collapseSearch">
<span class="__text">Je ne connais pas mon lieu de vie</span>
<span class="__icon">{{ source('svg/icons/icon-chevron.svg') }}</span>
</button>
</div>
</div>
</div>
</div>
</form>
<div class="collapse collapseSearch" id="collapseSearch">
<div class="card card-body">
<div class="container">
<div class="__title">Je ne connais pas mon lieu de vie</div>
<div class="__search">
<form action="" id="search_territory" method="POST" class="formSearchMain _header form --leNord">
<label for="inputCollapseSearch" hidden>Rechercher</label>
<div class="__input-wrapper">
<div class="containerAutocomplete">
{% if false %}
<input required name="search"
title="Je recherche"
type="text"
id="inputCollapseSearch"
aria-expanded="false"
placeholder="Je recherche"
class="form-control __input-search"
role="combobox"
aria-controls="autoComplete_list"
autocomplete="off">
{% endif %}
<label for="inputAddress" hidden>
<span class="label-text">Votre commune</span>
</label>
<div id="autocomplete" class="autocomplete --map">
<input class="autocomplete-input --no-icon"
placeholder="Je saisis ma commune"
aria-label="Je saisis ma commune"
id="inputCollapseSearch"
>
<ul class="autocomplete-result-list"></ul>
</div>
<script>
(() => {
new Autocomplete('#autocomplete', {
search: input => {
return new Promise(resolve => {
if (input.length < 3) {
return resolve([]);
}
fetch("{{ asset('json/autocomplete_vos_lieux.json') }}")
.then(response => response.json())
.then(data => {
let results = data
.map((result, index) => {
return { ...result, index };
})
.filter(result => result.name.toLowerCase().includes(input.toLowerCase()))
.sort((a, b) => {
if (a.match < b.match) return -1;
if (a.match > b.match) return 1;
return 0;
});
results = results.slice(0, 5);
resolve(results);
})
})
},
debounceTime: 0,
submitOnEnter: true,
renderResult: (result, props) => {
return `
<li ${props}>
${result.name}
</li>
`
},
getResultValue: result => {
return result.name;
},
onSubmit: result => {
console.log(result);
}
})
})();
</script>
</div>
<div>
<button type="submit"
class="btn btnMain --icon"
aria-controls="autoComplete_list"
id="btnSubmitAutocomplete">
<span class="__icon" aria-hidden="true">
<img src="{{ asset('img/brandmaster/icon-search-1.svg') }}" alt="" aria-hidden="true">
</span>
<span class="sr-only">Recherche</span>
</button>
</div>
</div>
</form>
</div>
<div style="min-height:24px;display:none;" class="__containerResult" id="containerResultTerritory"
aria-live="polite">
<p id='myTerritory' class="__result" aria-hidden="true" style="display:none;height:0;"></p>
<p id="loadingSearchTerritory" class="loaderContainer __loader" aria-hidden="true"
style="display:none;height:0;">
<span class="loader">Chargement en cours</span>
</p>
</div>
</div>
</div>
<button type="button" class="__btnClose" data-toggle="collapse" data-target="#collapseSearch"
aria-expanded="false" aria-controls="collapseSearch">
<span class="__icon">{{ source('svg/icons/icon-chevron.svg') }}</span>
</button>
</div>
<div class="container pBMd pTMd" aria-live="polite">
<h2 class="headingSection" id="containerCountResults" style="display:none;"><span id="countResults">Aucun filtre ou lieu actif</span>
</h2>
<div class="containerLoadingSpinner" style="display:block;min-height:54px;" id="containerLoader"
aria-hidden="true">
<div class="loader"></div>
</div>
<div class="containerAnchorReset pT mB" id="containerAnchorReset">
<button class="btn btnMain --transparent --underlineDefault" id="anchorResetFilters"><span class="__text">Rénitialiser ma recherche</span>
</button>
</div>
<p class="py-2 m-0"><a href="#skipmap" id="backmap" class="sr-only sr-only-focusable bg-white">Passer la carte</a></p>
<div>
<button type="button" class="btn btnMain btnShowCollapseMap" data-toggle="collapse" data-target="#collapseMap"
aria-expanded="true" aria-controls="collapseMap" id="btnShowCollapseMap">
<span class="__text">Masquer la carte</span>
<span class="__text --hide">Déplier la carte</span>
<span class="__icon">{{ source('svg/icons/icon-chevron.svg') }}</span>
</button>
</div>
<div class="collapse collapseMap show" id="collapseMap">
<div class="card card-body">
<div id='map-container' style="height:31.25em;"></div>
</div>
</div>
<p class="py-2 m-0"><a href="#backmap" id="skipmap" class="sr-only sr-only-focusable bg-white no-after">Revenir avant la carte</a></p>
</div>
{# knp_pagination_render(pagination) #}
<ul class="listResultsMap" id="containerResults">
<div class="container pBMd pTMd"><p class="__messageNoResults">Pour afficher un résultat de recherche, activez
l'un filtres ou l'une des options mis à votre disposition ci-avant</p></div>
{% if false %}
{% for poi in pois %}
<li class="__item {% if loop.index is odd %}--dark{% endif %}">
<div class="container">
<div class="__inner">
<div>
<div class="__img">
<img src="{{ poi.image_url }}" alt="">
</div>
</div>
<div>
<div class="__details">
<h3>{{ poi.name }}</h3>
<p>{{ poi.address }}</p>
<div>
{% if poi.phone is not null %}<a href="tel:+33{{ poi.pĥone }}">+33
(0){{poi.phone}}</a>{% endif %}
</div>
</div>
</div>
<div>
<a href="https://www.google.com/maps/dir/?api=1&destination={{ poi.latitude }},{{ poi.longitude }}"
target="_blank" data-open-point="{{ poi.id }}">
<span class="__icon">{{ source('svg/icons/icon-send.svg') }}</span>
<span class="__text">Y aller</span>
</a>
</div>
{% if poi.description|length > 0 %}
<div>
<button type="button" class="btn btnMain btnShowCollapseInfoResult" data-toggle="collapse"
data-target="#collapseInfoResultMap{{ poi.id }}" aria-expanded="false"
aria-controls="collapseInfoResultMap{{ poi.id }}">
<span class="__text">Plus d'information</span>
<span class="__text --hide">Moins d'informations</span>
<span class="__icon">{{ source('svg/icons/icon-chevron.svg') }}</span>
</button>
<div class="collapse collapseInfoResultMap" id="collapseInfoResultMap{{ poi.id }}">
<div class="card card-body">
<div class="__inner">
{{ poi.description|raw }}
</div>
</div>
</div>
</div>
{% endif %}
</div>
</div>
</li>
{% endfor %}
{% endif %}
</ul>
{# knp_pagination_render(pagination) #}
</main>
{% endblock %}
{% block footer_top %}
{% if is_preview != 1 %}
<div class="container pB pT">
{% include 'Nordinfo/Main/parts/article-actions.html.twig' with {'post_title':'test', 'post_id':'test', 'is_nord_services':true} %}
</div>
{% endif %}
{% include 'Nordinfo/Main/parts/our-websites.html.twig' %}
{% endblock %}
{% block include_js %}
<script type='application/javascript' src='https://livemap.getwemap.com/js/sdk.min.js'></script>
<script>
$(function () {
var container = document.getElementById('map-container');
var btnGetLocation = document.getElementById('btnGetLocation');
var inputSearch = document.getElementById('inputSearchPoints');
var btnInputSearch = document.getElementById('btnSubmitFormFilterSearch');
var anchorResetFilters = document.getElementById('anchorResetFilters');
var containerResults = document.getElementById('containerResults');
var countResults = document.getElementById('countResults');
var containerCountResults = document.getElementById('containerCountResults');
var containerLoader = document.getElementById('containerLoader');
var blockFilter1 = document.getElementById('blockFilter1');
var blockFilter2 = document.getElementById('blockFilter2');
var blockFilter3 = document.getElementById('blockFilter3');
var blockFilterRegion = document.getElementById('blockFilterRegion');
var containerAnchorReset = document.getElementById('containerAnchorReset');
var dropdownThematique = document.getElementById('dropdown_thematique');
var dropdownBesoin = document.getElementById('dropdown_besoin');
var optionsBesoin = document.querySelectorAll('#dropdown_besoin option');
var dropdownFinal = document.getElementById('dropdown_final');
var dropdownRegion = document.getElementById('dropdown_region');
var btnShareUrl = document.getElementById('btnShareUrl');
if (document.body.contains(btnShareUrl)) {
btnShareUrl.setAttribute('data-clipboard-text', window.location.href);
}
var options = {
emmid: 22215,
token: '3GU8S4LI8EBXP87HGQBYBC21Z'
};
var livemap = wemap.v1.createLivemap(container, options);
var tag1 = '';
var tag2 = '';
var tags = [];
var query = '';
var filters = {};
var htmlResults = '';
var isActiveDropdownBesoin = false;
var isActiveDropdownFinal = false;
var isActiveDropdownRegion = false;
var isActiveInputSearch = false;
var isActiveInputSearchTemp = false;
var centerDefault = {latitude: 50.5450398, longitude: 2.9768406};
var zoomDefault = 8.39;
var htmlNoResults = `<div class="container pBMd pTMd"><p class="__messageNoResults">Pour afficher un résultat de recherche, activez l'un filtres ou l'une des options mis à votre disposition ci-avant</p></div>`;
$('#dropdown_thematique').on('change', function () {
resetSearch(true, false, false, false, true, true, true);
var parent = $(this).val();
blockFilter1.classList.remove('--active');
if ($(this).val() === 'thematique') {
$('#dropdown_besoin').prop("disabled", true);
} else {
containerAnchorReset.classList.add('--active');
$('#dropdown_besoin').prop("disabled", false);
}
if (!hasFilters()) {
resetSearch(true, false, false, false, false, false, false);
}
$('#dropdown_besoin option').each(function () {
if ($(this).val() !== "besoin") {
$(this).hide();
}
});
$('#dropdown_besoin').find('.' + parent).each(function () {
$(this).show();
});
$('#dropdown_besoin')[0].selectedIndex = 0;
$('#dropdown_final')[0].selectedIndex = 0;
tags = [];
tag1 = '';
tag2 = '';
filters = {
tags: tags,
query: query
};
livemap.setFilters(filters);
livemap.centerTo(centerDefault, zoomDefault);
});
$('#dropdown_besoin').on('change', function () {
containerCountResults.style.display = 'none';
containerLoader.style.display = 'block';
resetSearch(false, true, false, false, true, true, true);
if ($(this).val() === 'besoin') {
tag1 = ''
blockFilter1.classList.remove('--active');
isActiveDropdownBesoin = false;
if (!hasFilters()) {
resetSearch();
}
} else {
tag1 = $(this).val()
blockFilter1.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveDropdownBesoin = true;
}
tags = [];
if (tag1 !== '') {
tags.push(tag1);
}
if (tag2 !== '') {
tags.push(tag2);
}
filters = {
tags: tags,
query: query
};
livemap.setFilters(filters);
});
$('#dropdown_final').on('change', function () {
containerCountResults.style.display = 'none';
containerLoader.style.display = 'block';
resetSearch(false, false, true, false, true, true, true);
if ($(this).val() === 'type') {
tag2 = '';
blockFilter2.classList.remove('--active');
isActiveDropdownFinal = false;
if (!hasFilters()) {
resetSearch();
}
} else {
tag2 = $(this).val();
blockFilter2.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveDropdownFinal = true;
}
tags = [];
if (tag2 !== '') {
tags.push(tag2);
}
filters = {
tags: tags,
query: query
};
livemap.setFilters(filters);
});
$('#dropdown_region').on('change', function () {
containerCountResults.style.display = 'none';
containerLoader.style.display = 'block';
containerAnchorReset.classList.add('--active');
if ($(this).val() === 'region') {
isActiveDropdownRegion = false;
blockFilterRegion.classList.remove('--active');
if (!hasFilters()) {
resetSearch();
} else {
livemap.centerTo(centerDefault, zoomDefault);
}
} else {
isActiveDropdownRegion = true;
blockFilterRegion.classList.add('--active');
}
var center = {};
var zoom = 0;
switch ($(this).val()) {
case "douaisis":
center = {latitude: 50.3859531, longitude: 3.1599802};
zoom = 10.64;
livemap.centerTo(center, zoom);
break;
case "valenciennois":
center = {latitude: 50.3836017, longitude: 3.4548478};
zoom = 10.62;
livemap.centerTo(center, zoom);
break;
case "avesnois":
center = {latitude: 50.1677594, longitude: 3.9007506};
zoom = 10.31;
livemap.centerTo(center, zoom);
break;
case "cambrésis":
center = {latitude: 50.1442189, longitude: 3.3595081};
zoom = 10.66;
livemap.centerTo(center, zoom);
break;
case "flandre-intérieure":
center = {latitude: 50.8189520, longitude: 2.5221642};
zoom = 10.22;
livemap.centerTo(center, zoom);
break;
case "métropole":
center = {latitude: 50.6142362, longitude: 3.0592083};
zoom = 10.40;
livemap.centerTo(center, zoom);
break;
case "flandre-maritime":
center = {latitude: 50.9769493, longitude: 2.3545548};
zoom = 10.89;
livemap.centerTo(center, zoom);
break;
}
filters = {
tags: tags,
query: " "
};
if (query !== '') {
filters = {
tags: tags,
query: query
};
}
livemap.setFilters(filters);
});
function isOdd(num) {
return num % 2;
}
btnGetLocation.addEventListener('click', function () {
containerAnchorReset.classList.add('--active');
livemap.aroundMe().then(function () {
livemap.getUserLocation().then(function (location) {
//rechercher territoire
if (location != null) {
$.ajax({
url: "https://api-adresse.data.gouv.fr/reverse/?lon=" + location.lng + "&lat=" + location.lat,
success: function (response) {
if (response.features.length > 0) {
$.ajax({
url: "{{ path('ajax_territory_lenord') }}",
data: {
'search': response.features[0].properties.city
},
type: "POST",
success: function (response) {
if (response.error === false) {
var name = response.t.name;
name = name.toLowerCase();
name = name.replace(" ", "-");
$('#dropdown_region').val(name);
}
}
});
} else {
$('#dropdown_region').val('region');
}
}
});
}
});
});
});
btnInputSearch.addEventListener('click', function (e) {
e.preventDefault();
containerCountResults.style.display = 'none';
containerLoader.style.display = 'block';
handleInputSearch();
});
inputSearch.addEventListener("keyup", function (event) {
if (event.key === "Enter") {
handleInputSearch();
}
});
function handleInputSearch() {
let valueInputSearch = '';
if (inputSearch.value.length > 2) {
valueInputSearch = inputSearch.value;
resetSearch(false, false, false, true, true, true, true);
blockFilter3.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveInputSearch = true;
} else {
valueInputSearch = '';
blockFilter3.classList.remove('--active');
isActiveInputSearch = false;
resetSearch(false, false, false, true, false, false, false);
}
filters = {
tags: tags,
query: valueInputSearch,
};
livemap.setFilters(filters);
}
livemap.addEventListener('contentUpdated', function (data) {
if (data.query.query) {
inputSearch.value = data.query.query;
// resetSearch(false, false, false, true, true, true, true);
if (data.query.query.length > 2) {
blockFilter3.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveInputSearch = true;
} else {
blockFilter3.classList.remove('--active');
isActiveInputSearch = false;
countResults.innerText = 'Aucun filtre ou lieu actif';
}
isActiveInputSearchTemp = true;
} else {
inputSearch.value = '';
blockFilter3.classList.remove('--active');
if (isActiveInputSearchTemp) {
// resetSearch(false, false, false, true, false, false, false);
isActiveInputSearchTemp = false;
}
isActiveInputSearch = false;
}
if (hasFilters()) {
htmlResults = ``;
var classDark = '';
var htmlAnchorTel = ``;
var htmlAnchorEmail = ``;
containerResults.innerHTML = ``;
if (data.items.length > 0) {
data.items.forEach(function (el, index) {
if (el.phone) {
const one = el.phone.slice(0, 3);
const two = ' <span class="font-weight-bold">0' + el.phone.slice(3, 4) + ' ';
const three = ' ' + el.phone.slice(4, 6) + ' ';
const four = ' ' + el.phone.slice(6, 8) + ' ';
const five = ' ' + el.phone.slice(8, 10) + ' ';
const six = ' ' + el.phone.slice(10, 12) + '</span>';
const phone = one + two + three + four + five + six;
htmlAnchorTel = `<a href="tel:` + el.phone + `"><span class="__icon">{{ source('svg/icons/icon-telephone.svg') }}</span><span class="__text">` + phone + `</span></a>`;
}
if (el.external_data != null) {
htmlAnchorEmail = `<a href="mailto::` + el.external_data + `"><span class="__icon">{{ source('svg/icons/icon-envelope.svg') }}</span><span class="__text"><b>` + el.external_data + `</b></span></a>`;
}
if (isOdd(index)) {
classDark = '--dark';
} else {
classDark = '';
}
var htmlMoreInfo = `
<div class="__colMoreDetails">
<button type="button" class="btn btnMain btnShowCollapseInfoResult" data-toggle="collapse" data-target="#collapseInfoResultMap${el.id}" aria-expanded="false" aria-controls="collapseInfoResultMap${el.id}">
<span class="__text">Plus d'information</span>
<span class="__text --hide">Moins d'informations</span>
<span class="__icon">{{ source('svg/icons/icon-chevron.svg') }}</span>
</button>
<div class="collapse collapseInfoResultMap" id="collapseInfoResultMap${el.id}">
<div class="card card-body">
<div class="__inner">
${el.description}
</div>
</div>
</div>
</div>
`;
if (el.description.length === 0) {
htmlMoreInfo = '';
}
htmlResults += `
<li class="__item ${classDark}">
<div class="container">
<div class="__inner">
<div class="__colImg">
<div class="__img">
<img src="${el.image_url}" alt="">
</div>
</div>
<div class="__colDetails">
<div class="__details">
<h3>${el.name}</h3>
<p>${el.address}</p>
<div class="__buttons">
${htmlAnchorTel}
${htmlAnchorEmail}
</div>
</div>
</div>
${htmlMoreInfo}
<div class="__colAnchor">
<a href="https://www.google.com/maps/dir/?api=1&destination=${el.latitude},${el.longitude}" target="_blank" data-open-point="${el.id}" title="Aller à ${el.name} (ouvre un autre onglet)">
<span class="__icon">{{ source('svg/icons/icon-send.svg') }}</span>
<span class="__text">
<span>Y aller</span>
<span>{{ source('svg/icons/icon-external.svg') }}</span>
</span>
</a>
</div>
</div>
</div>
</li>
`;
});
} else {
htmlResults += htmlNoResults
}
containerResults.innerHTML = htmlResults;
var str_lieu = ' lieux';
if (data.items.length === 1) {
str_lieu = ' lieu';
}
if ($('#dropdown_thematique').val() !== "thematique" && $('#dropdown_besoin').val() !== 'besoin') {
str_lieu += ' pour "' + $('#dropdown_thematique option:selected').text() + '", "' + $('#dropdown_besoin option:selected').text() + '"';
} else if ($('#dropdown_final').val() !== "type") {
str_lieu += ' pour "' + $('#dropdown_final option:selected').text() + '"';
}
if ($('#dropdown_region').val() !== "region") {
str_lieu += ' en ' + $('#dropdown_region option:selected').text();
}
if (inputSearch.value.length > 0 && inputSearch.value !== ' ') {
str_lieu += ' pour "' + inputSearch.value + '"';
}
countResults.innerText = data.items.length.toString() + str_lieu;
}
btnShareUrl.setAttribute('data-clipboard-text', window.location.href);
containerCountResults.style.display = 'block';
containerLoader.style.display = 'none';
});
anchorResetFilters.addEventListener('click', function (e) {
e.preventDefault();
resetSearch();
});
livemap.waitForReady().then(function() {
const iframes = document.querySelectorAll('iframe');
iframes.forEach((el) => {
if (el.getAttribute('title') === 'Interactive map') {
el.setAttribute('title', 'Carte interactive');
}
})
});
function resetSearch(
keepDropdownThematique = false,
keepDropdownBesoin = false,
keepDropdownFinal = false,
keepInputSearch = false,
keepDropdownRegion = false,
keepMapPosition = false,
keepResultsText = false
) {
isActiveDropdownBesoin = false;
isActiveDropdownFinal = false;
isActiveDropdownRegion = false;
isActiveInputSearch = false;
tags = [];
query = '';
if (keepDropdownBesoin === false && keepDropdownThematique === false) {
$('#dropdown_besoin')[0].selectedIndex = 0;
$('#dropdown_thematique')[0].selectedIndex = 0;
$('#dropdown_besoin').prop("disabled", true);
blockFilter1.classList.remove('--active');
}
if (keepDropdownBesoin === true) {
tags.push($('#dropdown_besoin').val());
}
if (keepDropdownFinal === false) {
$('#dropdown_final')[0].selectedIndex = 0;
blockFilter2.classList.remove('--active');
} else {
tags.push($('#dropdown_final').val());
}
if (keepInputSearch === false) {
blockFilter3.classList.remove('--active');
inputSearch.value = '';
} else {
query = inputSearch.value;
}
if (keepDropdownRegion === false) {
$('#dropdown_region')[0].selectedIndex = 0;
}
filters = {
tags: tags,
query: query,
};
livemap.setFilters(filters);
if (keepMapPosition === false) {
livemap.centerTo(centerDefault, zoomDefault);
}
containerAnchorReset.classList.remove('--active');
if (keepResultsText === false) {
containerResults.innerHTML = '';
countResults.innerText = 'Aucun filtre ou lieu actif';
}
containerResults.innerHTML = htmlNoResults;
}
function hasFilters() {
return isActiveDropdownRegion || isActiveInputSearch || isActiveDropdownFinal || isActiveDropdownBesoin;
}
function updateFromUrl() {
let hash = '#/search@50.5432363,3.0645499,2.00'
if (window.location.hash !== '') {
hash = window.location.hash
}
const queryString = hash.replace('#/search?', '').split("@")[0]
const queryStringLatLongZoom = hash.replace('#/search?', '').split("@")[1].split(",")
const queryLat = parseFloat(queryStringLatLongZoom[0])
const queryLong = parseFloat(queryStringLatLongZoom[1])
const queryZoom = parseFloat(queryStringLatLongZoom[2])
const urlParams = new URLSearchParams(queryString)
let urlParamQuery = urlParams.get('query')
const urlParamTags = urlParams.get('tags')
if (urlParamTags) {
let isTagTypeBesoin = false;
for (let i = 0; i < optionsBesoin.length; i++) {
optionsBesoin[i].style.display = 'block';
if (urlParamTags === optionsBesoin[i].value) {
isTagTypeBesoin = true;
}
}
if (isTagTypeBesoin) {
dropdownBesoin.value = urlParamTags;
dropdownBesoin.disabled = false;
const optionSelected = dropdownBesoin.options[dropdownBesoin.selectedIndex];
const categoryParent = optionSelected.getAttribute('data-parent');
dropdownThematique.value = categoryParent;
for (let i = 0; i < optionsBesoin.length; i++) {
if (optionsBesoin[i].getAttribute('data-parent') !== categoryParent && optionsBesoin[i].value !== 'besoin') {
optionsBesoin[i].style.display = 'none';
}
}
blockFilter1.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveDropdownBesoin = true;
} else {
dropdownFinal.value = urlParamTags;
blockFilter2.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveDropdownFinal = true;
}
filters = {
tags: [urlParamTags],
query: ''
};
} else if (urlParamQuery) {
if (urlParamQuery === ' ') {
filters = {
tags: [],
query: ' '
};
} else {
if (urlParamQuery.length < 3) {
urlParamQuery = ''
} else {
inputSearch.value = urlParamQuery;
blockFilter3.classList.add('--active');
containerAnchorReset.classList.add('--active');
isActiveInputSearch = true;
}
filters = {
tags: [],
query: urlParamQuery
};
}
}
setTimeout(function () {
const center = {latitude: queryLat + 0.00000001, longitude: queryLong};
const zoom = queryZoom;
if (urlParamQuery !== null) {
isActiveDropdownRegion = true;
}
if (queryLat === 50.3902713 && queryLong === 3.1783104 && queryZoom === 10.42) {
dropdownRegion.value = 'douaisis';
dropdownRegion.selectedIndex = 1;
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
} else if (queryLat === 50.3791889 && queryLong === 3.4514666 && queryZoom === 10.18) {
dropdownRegion.value = 'valenciennois';
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
} else if (queryLat === 50.1635116 && queryLong === 3.8820791 && queryZoom === 9.87) {
dropdownRegion.value = 'avesnois';
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
} else if (queryLat === 50.1488014 && queryLong === 3.5250235 && queryZoom === 10.44) {
dropdownRegion.value = 'cambrésis';
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
} else if (queryLat === 50.9742106 && queryLong === 2.3248100 && queryZoom === 10.58) {
dropdownRegion.value = 'flandres';
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
} else if (queryLat === 50.6164147 && queryLong === 3.0590916 && queryZoom === 10.00) {
dropdownRegion.value = 'métropole-lille';
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
} else if (queryLat === 50.8139616 && queryLong === 2.5300312 && queryZoom === 9.80) {
dropdownRegion.value = 'métropole-roubaix-tourcoing';
containerAnchorReset.classList.add('--active');
blockFilterRegion.classList.add('--active');
}
livemap.setCenter(center, zoom);
livemap.setFilters(filters);
containerCountResults.style.display = 'block';
containerLoader.style.display = 'none';
}, 1500)
}
updateFromUrl();
});
</script>
{% if false %}
<script>
(function() {
{% set autocomplete_selector = 'inputCollapseSearch' %}
const inputCollapseSearch = document.getElementById('inputCollapseSearch');
const btnSubmitAutocomplete = document.getElementById('btnSubmitAutocomplete');
const autoCompletejs = new autoComplete({
data: {
src: async function () {
document.querySelector("#{{ autocomplete_selector }}");
const source = await fetch("{{ asset('json/autocomplete_vos_lieux.json') }}");
return await source.json();
},
key: ["name"],
},
sort: function (a, b) {
if (a.match < b.match) {
return -1;
}
if (a.match > b.match) {
return 1;
}
return 0;
},
query: {
manipulate: function (query) {
return query.replace("@pizza", "burger");
},
},
trigger: {
event: ["input", "focusin", "focusout"],
condition: function (query) {
return !!query.replace(/ /g, "").length && query !== "hamburger";
},
},
placeHolder: "Je saisis ma commune",
selector: "#{{ autocomplete_selector }}",
debounce: 0,
searchEngine: "loose",
highlight: true,
maxResults: 5,
resultsList: {
render: true,
container: function (source) {
source.setAttribute("id", "autoComplete_list");
source.setAttribute('role', 'listbox');
source.setAttribute('aria-label', 'territoires');
},
element: "ul",
destination: document.querySelector("#{{ autocomplete_selector }}"),
position: "afterend",
},
resultItem: {
content: function (data, source) {
source.innerHTML = data.match;
source.setAttribute('role', 'option');
},
element: "li",
},
noResults: function () {
const result = document.createElement("li");
result.setAttribute("class", "no_result");
result.setAttribute("tabindex", "1");
result.innerHTML = "Aucun territoire trouvé";
document.querySelector("#autoComplete_list").appendChild(result);
},
onSelection: function (feedback) {
document.querySelector("#{{ autocomplete_selector }}").blur();
document.querySelector("#{{ autocomplete_selector }}").value = feedback.selection.value.name;
document.querySelector("#{{ autocomplete_selector }}").setAttribute("placeholder", "Je saisis ma commune");
}
});
["focus", "blur"].forEach(function (eventType) {
const resultsList = document.querySelector("#autoComplete_list");
document.querySelector("#{{ autocomplete_selector }}").addEventListener(eventType, function () {
if (eventType === "blur") {
resultsList.style.display = "none";
} else if (eventType === "focus") {
resultsList.style.display = "block";
}
});
});
inputCollapseSearch.addEventListener('blur', () => {
inputCollapseSearch.setAttribute('aria-expanded', 'false');
btnSubmitAutocomplete.setAttribute('aria-expanded', 'false');
});
inputCollapseSearch.addEventListener('focus', () => {
inputCollapseSearch.setAttribute('aria-expanded', 'true');
btnSubmitAutocomplete.setAttribute('aria-expanded', 'true');
});
inputCollapseSearch.addEventListener('keyup', (e) => {
if (e.key === 'Escape' || e.keyCode === 27) {
inputCollapseSearch.blur();
}
});
})();
</script>
{% endif %}
<script>
(function () {
$('#search_territory').on('submit', function (event) {
event.preventDefault();
$('#containerResultTerritory').fadeIn();
$('#loadingSearchTerritory').fadeIn();
$('#myTerritory').fadeOut();
$('#loadingSearchTerritory')[0].setAttribute('aria-hidden', 'true');
$('#myTerritory')[0].setAttribute('aria-hidden', 'true');
$.ajax({
url: "{{ path('ajax_territory_lenord') }}",
data: {
'search': $('#inputCollapseSearch').val()
},
type: "POST",
success: function (response) {
$('#loadingSearchTerritory').fadeOut();
$('#loadingSearchTerritory')[0].setAttribute('aria-hidden', 'true');
if (response.error === false) {
$('#myTerritory').empty().append("Mon territoire : " + response.t.name);
} else {
$('#myTerritory').empty().append(response.error);
}
$('#myTerritory').fadeIn();
$('#myTerritory')[0].setAttribute('aria-hidden', 'false');
}
});
return false;
});
})();
</script>
{% endblock %}