Skip to content

Commit 0a9e4f0

Browse files
Refactor hashbang URLs
Change selection queue to prevent a bug with the dropdowns
1 parent 4eb34e4 commit 0a9e4f0

File tree

1 file changed

+77
-46
lines changed

1 file changed

+77
-46
lines changed

static/js/index.js

Lines changed: 77 additions & 46 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,25 @@ 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');
680+
function changerSelection(parametre, valeur, finale) {
681+
console.log(parametre, valeur, finale, mapRendered);
688682

689-
// Verifier s'il y a les options
690-
if(selecteur.children) {
691-
// Si oui, changer le valuer
692-
selecteur.value = valeur;
683+
// Placer le selection dans la file
684+
fileSelections.push([parametre, valeur]);
693685

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];
686+
// Verifier si c'est la finale selection
687+
if (finale) {
688+
// Si oui, réinitialiser le parametre
689+
var nom = parametre[0].toUpperCase() + parametre.slice(1);
690+
var fonction = window['reset' + nom];
698691

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

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

@@ -734,8 +722,9 @@ function changerLienPartageable() {
734722
lienPartageable += '/' + idSection.slice(-5).replace(/^0+/, '');
735723
}
736724

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

@@ -748,6 +737,48 @@ function changerLienPartageable() {
748737
location.hash = lienPartageable;
749738
}
750739

740+
function traiterFileSelections() {
741+
// S'il n'y a pas une prochaine selection, quitter
742+
if (!fileSelections.length) {
743+
return;
744+
}
745+
746+
// Recuperer le parametre et le valuer de la file d'attente
747+
var selection = fileSelections.shift();
748+
var parametre = selection[0];
749+
var valeur = selection[1];
750+
751+
// Obtenir le boite selection
752+
var selecteur = $('#' + parametre + 's');
753+
754+
// Si la valeur ne doit changer pas, traiter la prochaine selection
755+
if (valeur === selecteur.val()) {
756+
return traiterFileSelections();
757+
}
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[0].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
}

0 commit comments

Comments
 (0)