Skip to content

Commit e01d01b

Browse files
Refactor hashbang URLs
Change selection queue system to work correctly in all scenarios
1 parent 4eb34e4 commit e01d01b

File tree

1 file changed

+80
-48
lines changed

1 file changed

+80
-48
lines changed

static/js/index.js

Lines changed: 80 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ function selectionnerDepartement(interactif = true) {
345345

346346
entrerDansDepartement(sonCode);
347347

348-
if(interactif) {
348+
if (interactif) {
349349
changerLienPartageable();
350350
}
351351
};
@@ -357,7 +357,7 @@ function selectionnerCommune(interactif = true) {
357357

358358
entrerDansCommune(sonCode);
359359

360-
if(interactif) {
360+
if (interactif) {
361361
changerLienPartageable();
362362
}
363363
}
@@ -369,7 +369,7 @@ function selectionnerSection(interactif = true) {
369369

370370
entrerDansSection(newIdSection);
371371

372-
if(interactif) {
372+
if (interactif) {
373373
changerLienPartageable();
374374
}
375375
}
@@ -381,7 +381,7 @@ function selectionnerParcelle(interactif = true) {
381381

382382
entrerDansParcelle(sonCode);
383383

384-
if(interactif) {
384+
if (interactif) {
385385
changerLienPartageable();
386386
}
387387
}
@@ -563,18 +563,6 @@ function onDepartementClick(event) {
563563
changerLienPartageable();
564564
};
565565

566-
function onMapIdle(event) {
567-
// Indiquer que la carte est rendu complètement
568-
if (!mapRendered) {
569-
mapRendered = true;
570-
}
571-
572-
// Exécuter l'étape suivante de la file d'attente
573-
if (selection = fileSelections.shift()) {
574-
changerSelection(...selection, true);
575-
}
576-
};
577-
578566
function onHashChange(event) {
579567
// Si l'URL n'a changer pas, faire rien
580568
if (location.hash == lienPartageable) {
@@ -605,13 +593,13 @@ function onHashChange(event) {
605593
if (!piece) {
606594
return;
607595
}
608-
596+
609597
// Definer le format de la code, et l'analyser
610598
var format = /^(\d{2})(?:(\d{3})(?:([0A-Z]{4}[A-Z])(\d{4})?)?)?$/;
611599
var correspondances = format.exec(piece);
612600

613601
// Si les codes ne se conformant le format correct, quitter
614-
if(!correspondances) {
602+
if (!correspondances) {
615603
return;
616604
}
617605

@@ -629,10 +617,10 @@ function onHashChange(event) {
629617

630618
// Verifier s'il y a un troisième correspondance
631619
if (typeof correspondances[2] === 'string') {
632-
// Si oui, utiliser les trois premier correspondances comme le ID de section
620+
// Si oui, utiliser les trois premier correspondances comme l'ID de section
633621
changerSelection('section', correspondances.slice(0, 3).join(''), !pieces.length && !correspondances[3]);
634622
} else if (piece = pieces.shift()) {
635-
// Si non, utiliser la prochaine piece d'URL comme le ID de section
623+
// Si non, utiliser la prochaine piece d'URL comme l'ID de section
636624
code += piece.padStart(5, '0');
637625
changerSelection('section', code, !pieces.length);
638626
}
@@ -646,7 +634,16 @@ function onHashChange(event) {
646634
code += piece.padStart(4, '0');
647635
changerSelection('parcelle', code, !pieces.length);
648636
}
649-
};
637+
}
638+
639+
function onMapIdle(event)
640+
{
641+
if (!mapRendered) {
642+
mapRendered = true;
643+
}
644+
645+
traiterFileSelections();
646+
}
650647

651648
function changerPeriode(depuis, jusqua) {
652649
// Verifier que le début et fin sont les strings, ou quitter
@@ -680,34 +677,24 @@ function changerPeriode(depuis, jusqua) {
680677
picker.setEndDate(new Date(jusqua));
681678
}
682679

683-
function changerSelection(parametre, valeur, animer) {
684-
// Verifier si la carte a fini de charger
685-
if (mapRendered) {
686-
// Obtenir le boite selection
687-
var selecteur = document.getElementById(parametre + 's');
688-
689-
// Verifier s'il y a les options
690-
if(selecteur.children) {
691-
// Si oui, changer le valuer
692-
selecteur.value = valeur;
680+
function changerSelection(parametre, valeur, finale) {
681+
// Placer le selection dans la file
682+
fileSelections.push([parametre, valeur]);
693683

694-
// Selectioner et déplacer le camera si c'est la dernière parametre, ou si c'était en file d'attente
695-
if (animer) {
696-
var nom = parametre[0].toUpperCase() + parametre.slice(1);
697-
var fonction = window['selectionner' + nom];
684+
// Verifier si c'est la finale selection
685+
if (finale) {
686+
// Si oui, obtenir la fonction pour réinitialiser le parametre
687+
var nom = parametre[0].toUpperCase() + parametre.slice(1);
688+
var fonction = window['reset' + nom];
698689

699-
fonction.call(this, false);
700-
}
701-
} else {
702-
// Si non, remettre le selection dans la file
703-
fileSelections.unshift([parametre, valeur]);
690+
// Executer la fonction
691+
fonction.call(this);
704692

705-
// Attends un seconde avant de réessayer
706-
setTimeout(onMapIdle, 1000);
693+
// Verifier si la carte est déjà rendu
694+
if (mapRendered) {
695+
// Si oui, commencer le traitement manuellement
696+
traiterFileSelections();
707697
}
708-
} else {
709-
// Si la carte se charger toujours, placer le selection dans la file
710-
fileSelections.push([parametre, valeur]);
711698
}
712699
}
713700

@@ -734,8 +721,9 @@ function changerLienPartageable() {
734721
lienPartageable += '/' + idSection.slice(-5).replace(/^0+/, '');
735722
}
736723

737-
// Verifier s'il y a un code de parceller, correspondant le ID de section
738-
if (codeParcelle && codeParcelle.startsWith(idSection)) {
724+
// Verifier s'il y a un code de parcelle, correspondant l'ID de section
725+
if (codeParcelle && codeParcelle.startsWith(idSection)) {
726+
// Si oui, ajoutez-le à l'URL
739727
lienPartageable += '/' + codeParcelle.slice(-4);
740728
}
741729

@@ -748,6 +736,50 @@ function changerLienPartageable() {
748736
location.hash = lienPartageable;
749737
}
750738

739+
function traiterFileSelections() {
740+
// Initialiser les variables
741+
var selection, parametre, valeur, selecteur;
742+
743+
do {
744+
// S'il n'y a pas une prochaine selection, quitter
745+
if (!fileSelections.length) {
746+
return;
747+
}
748+
749+
// Recuperer le parametre et le valuer de la file d'attente
750+
selection = fileSelections.shift();
751+
parametre = selection[0];
752+
valeur = selection[1];
753+
754+
// Obtenir le boite selection
755+
selecteur = $('#' + parametre + 's');
756+
757+
// Continuer si la valeur ne doit changer pas
758+
} while(valeur === selecteur.val());
759+
760+
// Chercher l'option de la valeur
761+
var option = selecteur.children(`option[value="${valeur}"]`);
762+
763+
// Verifier s'il y a l'option
764+
if (option.length === 1) {
765+
// Si oui, changer le valeur
766+
selecteur.prop('selectedIndex', option.index());
767+
768+
// Obtenir le fonction pour traiter le selection
769+
var nom = parametre[0].toUpperCase() + parametre.slice(1);
770+
var fonction = window['selectionner' + nom];
771+
772+
// Forcer le traitement de la nouvelle valuer
773+
fonction.call(this, false);
774+
} else {
775+
// Réajouter le selection à le file d'attente
776+
fileSelections.unshift(selection);
777+
778+
// Attends un seconde avant de réessayer
779+
setTimeout(traiterFileSelections, 1000);
780+
}
781+
}
782+
751783
function toggleLeftBar() {
752784
vue.fold_left = !vue.fold_left;
753785
}
@@ -996,4 +1028,4 @@ function communeFilter() {
9961028

9971029
function departementsFilter() {
9981030
map.setFilter('departements-layer', ['!=', ['get', 'code'], codeDepartement])
999-
}
1031+
}

0 commit comments

Comments
 (0)