Skip to content

Commit 6fdc909

Browse files
MetroConductorPim Stoit
authored andcommitted
Refactor hashbang URLs
Change selection queue system to work correctly in all scenarios
1 parent 4eb34e4 commit 6fdc909

File tree

1 file changed

+79
-48
lines changed

1 file changed

+79
-48
lines changed

static/js/index.js

Lines changed: 79 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,23 @@ 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, 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+
fonction.call(this);
704691

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

@@ -734,8 +720,9 @@ function changerLienPartageable() {
734720
lienPartageable += '/' + idSection.slice(-5).replace(/^0+/, '');
735721
}
736722

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

@@ -748,6 +735,50 @@ function changerLienPartageable() {
748735
location.hash = lienPartageable;
749736
}
750737

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

9971028
function departementsFilter() {
9981029
map.setFilter('departements-layer', ['!=', ['get', 'code'], codeDepartement])
999-
}
1030+
}

0 commit comments

Comments
 (0)