3120 |
delphine |
1 |
/**
|
|
|
2 |
* Constructeur WidgetSaisie par défaut
|
|
|
3 |
*/
|
|
|
4 |
function WidgetSaisie() {
|
|
|
5 |
this.langue = 'fr';
|
|
|
6 |
this.obsNbre = 0;
|
|
|
7 |
this.nbObsEnCours = 1;
|
|
|
8 |
this.totalObsATransmettre = 0;
|
|
|
9 |
this.nbObsTransmises = 0;
|
|
|
10 |
this.debug = null;
|
|
|
11 |
this.html5 = null;
|
|
|
12 |
this.tagProjet = null;
|
|
|
13 |
this.tagImg = null;
|
|
|
14 |
this.tagObs = null;
|
|
|
15 |
this.separationTagImg = null;
|
|
|
16 |
this.separationTagObs = null;
|
|
|
17 |
this.obsId = null;
|
|
|
18 |
this.serviceSaisieUrl = null;
|
|
|
19 |
this.serviceObsUrl = null;
|
|
|
20 |
this.nomSciReferentiel = null;
|
|
|
21 |
this.especeImposee = false;
|
|
|
22 |
this.infosEspeceImposee = null;
|
|
|
23 |
this.autocompletionElementsNbre = null;
|
|
|
24 |
this.referentielImpose = null;
|
|
|
25 |
this.serviceAutocompletionNomSciUrl = null;
|
|
|
26 |
this.serviceAutocompletionNomSciUrlTpl = null;
|
|
|
27 |
this.obsMaxNbre = null;
|
|
|
28 |
this.dureeMessage = null;
|
|
|
29 |
this.serviceAnnuaireIdUrl = null;
|
|
|
30 |
this.serviceNomCommuneUrl = null;
|
|
|
31 |
this.serviceNomCommuneUrlAlt = null;
|
|
|
32 |
this.chargementIconeUrl = null;
|
|
|
33 |
this.chargementImageIconeUrl = null;
|
|
|
34 |
this.calendrierIconeUrl = null;
|
|
|
35 |
this.pasDePhotoIconeUrl = null;
|
|
|
36 |
}
|
|
|
37 |
|
|
|
38 |
/**
|
|
|
39 |
* Initialisation du widget
|
|
|
40 |
*/
|
|
|
41 |
WidgetSaisie.prototype.init = function() {
|
|
|
42 |
this.initForm();
|
|
|
43 |
this.initEvts();
|
|
|
44 |
this.requeterIdentite();
|
|
|
45 |
};
|
|
|
46 |
|
|
|
47 |
/**
|
|
|
48 |
* Initialise le formulaire, les validateurs, les listes de complétion...
|
|
|
49 |
*/
|
|
|
50 |
WidgetSaisie.prototype.initForm = function() {
|
|
|
51 |
if (this.obsId != '') {
|
|
|
52 |
//this.chargerInfoObs();
|
|
|
53 |
}
|
|
|
54 |
|
|
|
55 |
this.configurerDatePicker('#date');
|
|
|
56 |
this.ajouterAutocompletionNoms();
|
|
|
57 |
//this.configurerFormValidator();
|
|
|
58 |
//this.definirReglesFormValidator();
|
|
|
59 |
|
|
|
60 |
if(this.especeImposee) {
|
|
|
61 |
$("#taxon").attr("disabled", "disabled");
|
|
|
62 |
$("#taxon-input-groupe").attr("title","");
|
|
|
63 |
// Bricolage cracra pour avoir le nom retenu avec auteur (nom_retenu.libelle ne le mentionne pas)
|
|
|
64 |
var nomRetenuComplet = this.infosEspeceImposee["nom_retenu_complet"],
|
|
|
65 |
debutAnneRefBiblio = nomRetenuComplet.indexOf(" [");
|
|
|
66 |
if (debutAnneRefBiblio != -1) {
|
|
|
67 |
nomRetenuComplet = nomRetenuComplet.substr(0, debutAnneRefBiblio);
|
|
|
68 |
}
|
|
|
69 |
// fin bricolage cracra
|
|
|
70 |
var infosAssociee = {
|
|
|
71 |
label : this.infosEspeceImposee.nom_sci_complet,
|
|
|
72 |
value : this.infosEspeceImposee.nom_sci_complet,
|
|
|
73 |
nt : this.infosEspeceImposee.num_taxonomique,
|
|
|
74 |
nomSel : this.infosEspeceImposee.nom_sci,
|
|
|
75 |
nomSelComplet : this.infosEspeceImposee.nom_sci_complet,
|
|
|
76 |
numNomSel : this.infosEspeceImposee.id,
|
|
|
77 |
nomRet : nomRetenuComplet,
|
|
|
78 |
numNomRet : this.infosEspeceImposee["nom_retenu.id"],
|
|
|
79 |
famille : this.infosEspeceImposee.famille,
|
|
|
80 |
retenu : (this.infosEspeceImposee.retenu == 'false') ? false : true
|
|
|
81 |
};
|
|
|
82 |
$("#taxon").data(infosAssociee);
|
|
|
83 |
}
|
|
|
84 |
};
|
|
|
85 |
|
|
|
86 |
/**
|
|
|
87 |
* Initialise les écouteurs d'événements
|
|
|
88 |
*/
|
|
|
89 |
WidgetSaisie.prototype.initEvts = function() {
|
|
|
90 |
var lthis = this;
|
|
|
91 |
$('body').on('click', '.effacer-miniature', function() {
|
|
|
92 |
$(this).parent().remove();
|
|
|
93 |
});
|
|
|
94 |
$("#fichier").bind('change', function (e) {
|
|
|
95 |
arreter(e);
|
|
|
96 |
var options = {
|
|
|
97 |
success: lthis.afficherMiniature.bind(lthis), // post-submit callback
|
|
|
98 |
dataType: 'xml', // 'xml', 'script', or 'json' (expected server response type)
|
|
|
99 |
resetForm: true // reset the form after successful submit
|
|
|
100 |
};
|
|
|
101 |
$("#miniature").append('<img id="miniature-chargement" class="miniature" alt="chargement" src="'+this.chargementImageIconeUrl+'"/>');
|
|
|
102 |
$("#ajouter-obs").attr('disabled', 'disabled');
|
|
|
103 |
if(lthis.verifierFormat($("#fichier").val())) {
|
|
|
104 |
$("#form-upload").ajaxSubmit(options);
|
|
|
105 |
} else {
|
|
|
106 |
$('#form-upload')[0].reset();
|
|
|
107 |
window.alert("Le format de fichier n'est pas supporté, les formats acceptés sont "+ $("#fichier").attr("accept"));
|
|
|
108 |
}
|
|
|
109 |
return false;
|
|
|
110 |
});
|
|
|
111 |
// identité
|
|
|
112 |
$("#courriel").on('blur', this.requeterIdentite.bind(this));
|
|
|
113 |
$("#courriel").on('keypress', this.testerLancementRequeteIdentite.bind(this));
|
|
|
114 |
$(".alert .close").on('click', this.fermerPanneauAlert);
|
|
|
115 |
$(".has-tooltip").tooltip('enable');
|
|
|
116 |
$("#btn-aide").on('click', this.basculerAffichageAide);
|
|
|
117 |
$("#prenom").on("change", this.formaterPrenom.bind(this));
|
|
|
118 |
$("#nom").on("change", this.formaterNom.bind(this));
|
|
|
119 |
|
|
|
120 |
$("#courriel_confirmation").on('paste', this.bloquerCopierCollerCourriel.bind(this));
|
|
|
121 |
/*$("#ajouter-obs").on('click', this.ajouterObs.bind(this));
|
|
|
122 |
$(".obs-nbre").on('changement', this.surChangementNbreObs.bind(this));
|
|
|
123 |
$("body").on('click', ".supprimer-obs", function() {
|
|
|
124 |
var that = this,
|
|
|
125 |
suppObs = lthis.supprimerObs.bind(lthis);
|
|
|
126 |
// bricolage pour avoir les deux contextes en même temps (objet et elt. du DOM)
|
|
|
127 |
suppObs(that);
|
|
|
128 |
});
|
|
|
129 |
$("#transmettre-obs").on('click', this.transmettreObs.bind(this));
|
|
|
130 |
$("#referentiel").on('change', this.surChangementReferentiel.bind(this));
|
|
|
131 |
|
|
|
132 |
$("body").on('click', ".defilement-miniatures-gauche", function(event) {
|
|
|
133 |
event.preventDefault();
|
|
|
134 |
lthis.defilerMiniatures($(this));
|
|
|
135 |
});
|
|
|
136 |
$("body").on('click', ".defilement-miniatures-droite", function(event) {
|
|
|
137 |
event.preventDefault();
|
|
|
138 |
lthis.defilerMiniatures($(this));
|
|
|
139 |
});
|
|
|
140 |
*/
|
|
|
141 |
// fermeture fenêtre
|
|
|
142 |
if (this.debug == false) {
|
|
|
143 |
$(window).on('beforeunload', function(event) {
|
|
|
144 |
return 'Êtes vous sûr de vouloir quiter la page?\nLes observations saisies mais non transmises seront perdues.';
|
|
|
145 |
});
|
|
|
146 |
}
|
|
|
147 |
|
|
|
148 |
};
|
|
|
149 |
|
|
|
150 |
/**
|
|
|
151 |
* Retourne true si l'extension de l'image "nom" est .jpg ou .jpeg
|
|
|
152 |
*/
|
|
|
153 |
WidgetSaisie.prototype.verifierFormat = function(nom) {
|
|
|
154 |
var parts = nom.split('.');
|
|
|
155 |
extension = parts[parts.length - 1];
|
|
|
156 |
return (extension.toLowerCase() == 'jpeg' || extension.toLowerCase() == 'jpg');
|
|
|
157 |
};
|
|
|
158 |
|
|
|
159 |
/**
|
|
|
160 |
* Affiche la miniature d'une image temporaire (formulaire) qu'on a ajoutée à l'obs
|
|
|
161 |
*/
|
|
|
162 |
WidgetSaisie.prototype.afficherMiniature = function(reponse) {
|
|
|
163 |
if (this.debug) {
|
|
|
164 |
var debogage = $("debogage", reponse).text();
|
|
|
165 |
//console.log("Débogage upload : "+debogage);
|
|
|
166 |
}
|
|
|
167 |
var message = $("message", reponse).text();
|
|
|
168 |
if (message != '') {
|
|
|
169 |
$("#miniature-msg").append(message);
|
|
|
170 |
} else {
|
|
|
171 |
$("#miniatures").append(this.creerWidgetMiniature(reponse));
|
|
|
172 |
}
|
|
|
173 |
$('#ajouter-obs').removeAttr('disabled');
|
|
|
174 |
};
|
|
|
175 |
|
|
|
176 |
/**
|
|
|
177 |
* Crée la miniature d'une image temporaire (formulaire), avec le bouton pour l'effacer
|
|
|
178 |
*/
|
|
|
179 |
WidgetSaisie.prototype.creerWidgetMiniature = function(reponse) {
|
|
|
180 |
var miniatureUrl = $("miniature-url", reponse).text();
|
|
|
181 |
var imgNom = $("image-nom", reponse).text();
|
|
|
182 |
var html =
|
|
|
183 |
'<div class="miniature">'+
|
|
|
184 |
'<img class="miniature-img" class="miniature" alt="'+imgNom+'" src="'+miniatureUrl+'"/>'+
|
|
|
185 |
'<button class="effacer-miniature" type="button">Effacer</button>'+
|
|
|
186 |
'</div>'
|
|
|
187 |
return html;
|
|
|
188 |
};
|
|
|
189 |
|
|
|
190 |
/**
|
|
|
191 |
* Efface une miniature (formulaire)
|
|
|
192 |
*/
|
|
|
193 |
WidgetSaisie.prototype.supprimerMiniature = function(miniature) {
|
|
|
194 |
miniature.parents('.miniature').remove();
|
|
|
195 |
};
|
|
|
196 |
|
|
|
197 |
/**
|
|
|
198 |
* Efface toutes les miniatures (formulaire)
|
|
|
199 |
*/
|
|
|
200 |
WidgetSaisie.prototype.supprimerMiniatures = function() {
|
|
|
201 |
$("#miniatures").empty();
|
|
|
202 |
$("#miniature-msg").empty();
|
|
|
203 |
};
|
|
|
204 |
|
|
|
205 |
/* Observateur */
|
|
|
206 |
WidgetSaisie.prototype.testerLancementRequeteIdentite = function(event) {
|
|
|
207 |
if (event.which == 13) {
|
|
|
208 |
this.requeterIdentite();
|
|
|
209 |
this.event.preventDefault();
|
|
|
210 |
this.event.stopPropagation();
|
|
|
211 |
}
|
|
|
212 |
};
|
|
|
213 |
|
|
|
214 |
WidgetSaisie.prototype.requeterIdentite = function() {
|
|
|
215 |
var lthis = this;
|
|
|
216 |
var courriel = $("#courriel").val();
|
|
|
217 |
var urlAnnuaire = this.serviceAnnuaireIdUrl + courriel;
|
|
|
218 |
if (courriel != '') {
|
|
|
219 |
$.ajax({
|
|
|
220 |
url : urlAnnuaire,
|
|
|
221 |
type : "GET",
|
|
|
222 |
success : function(data, textStatus, jqXHR) {
|
|
|
223 |
if (lthis.debug) {
|
|
|
224 |
console.log('SUCCESS: '+textStatus);
|
|
|
225 |
}
|
|
|
226 |
if (data != undefined && data[courriel] != undefined) {
|
|
|
227 |
var infos = data[courriel];
|
|
|
228 |
lthis.surSuccesCompletionCourriel(infos, courriel);
|
|
|
229 |
} else {
|
|
|
230 |
lthis.surErreurCompletionCourriel();
|
|
|
231 |
}
|
|
|
232 |
},
|
|
|
233 |
error : function(jqXHR, textStatus, errorThrown) {
|
|
|
234 |
if (lthis.debug) {
|
|
|
235 |
console.log('ERREUR: '+textStatus);
|
|
|
236 |
}
|
|
|
237 |
lthis.surErreurCompletionCourriel();
|
|
|
238 |
},
|
|
|
239 |
complete : function(jqXHR, textStatus) {
|
|
|
240 |
if (lthis.debug) {
|
|
|
241 |
console.log('COMPLETE: '+textStatus);
|
|
|
242 |
}
|
|
|
243 |
// @TODO harmoniser class="hidden" VS style="display:none;"
|
|
|
244 |
$("#zone-prenom-nom").removeClass("hidden").show();
|
|
|
245 |
$("#zone-courriel-confirmation").removeClass("hidden").show();
|
|
|
246 |
}
|
|
|
247 |
});
|
|
|
248 |
}
|
|
|
249 |
};
|
|
|
250 |
|
|
|
251 |
WidgetSaisie.prototype.surSuccesCompletionCourriel = function(infos, courriel) {
|
|
|
252 |
$("#id_utilisateur").val(infos.id);
|
|
|
253 |
$("#prenom").val(infos.prenom);
|
|
|
254 |
$("#nom").val(infos.nom);
|
|
|
255 |
$("#courriel_confirmation").val(courriel);
|
|
|
256 |
$("#prenom, #nom, #courriel_confirmation").attr('disabled', 'disabled');
|
|
|
257 |
this.focusChampFormulaire();
|
|
|
258 |
this.masquerPanneau("#dialogue-courriel-introuvable");
|
|
|
259 |
};
|
|
|
260 |
|
|
|
261 |
WidgetSaisie.prototype.surErreurCompletionCourriel = function() {
|
|
|
262 |
$("#prenom, #nom, #courriel_confirmation").val('');
|
|
|
263 |
$("#prenom, #nom, #courriel_confirmation").removeAttr('disabled');
|
|
|
264 |
this.afficherPanneau("#dialogue-courriel-introuvable");
|
|
|
265 |
};
|
|
|
266 |
|
|
|
267 |
WidgetSaisie.prototype.formaterNom = function() {
|
|
|
268 |
$(this).val($(this).val().toUpperCase());
|
|
|
269 |
};
|
|
|
270 |
|
|
|
271 |
WidgetSaisie.prototype.formaterPrenom = function() {
|
|
|
272 |
var prenom = new Array();
|
|
|
273 |
var mots = $(this).val().split(' ');
|
|
|
274 |
for (var i = 0; i < mots.length; i++) {
|
|
|
275 |
var mot = mots[i];
|
|
|
276 |
if (mot.indexOf('-') >= 0) {
|
|
|
277 |
var prenomCompose = new Array();
|
|
|
278 |
var motsComposes = mot.split('-');
|
|
|
279 |
for (var j = 0; j < motsComposes.length; j++) {
|
|
|
280 |
var motSimple = motsComposes[j];
|
|
|
281 |
var motMajuscule = motSimple.charAt(0).toUpperCase() + motSimple.slice(1);
|
|
|
282 |
prenomCompose.push(motMajuscule);
|
|
|
283 |
}
|
|
|
284 |
prenom.push(prenomCompose.join('-'));
|
|
|
285 |
} else {
|
|
|
286 |
var motMajuscule = mot.charAt(0).toUpperCase() + mot.slice(1);
|
|
|
287 |
prenom.push(motMajuscule);
|
|
|
288 |
}
|
|
|
289 |
}
|
|
|
290 |
$(this).val(prenom.join(' '));
|
|
|
291 |
};
|
|
|
292 |
|
|
|
293 |
WidgetSaisie.prototype.bloquerCopierCollerCourriel = function() {
|
|
|
294 |
this.afficherPanneau("#dialogue-bloquer-copier-coller");
|
|
|
295 |
return false;
|
|
|
296 |
};
|
|
|
297 |
|
|
|
298 |
WidgetSaisie.prototype.focusChampFormulaire = function() {
|
|
|
299 |
$("#date").focus();
|
|
|
300 |
};
|
|
|
301 |
|
|
|
302 |
/* calendrier */
|
|
|
303 |
WidgetSaisie.prototype.configurerDatePicker = function(selector) {
|
|
|
304 |
$.datepicker.setDefaults($.datepicker.regional[this.langue]);
|
|
|
305 |
$(selector).datepicker({
|
|
|
306 |
dateFormat: "dd/mm/yy",
|
|
|
307 |
maxDate: new Date,
|
|
|
308 |
onSelect: function(date) {
|
|
|
309 |
$(this).valid();
|
|
|
310 |
}
|
|
|
311 |
});
|
|
|
312 |
$(selector + ' + img.ui-datepicker-trigger').appendTo(selector + '-icone.add-on');
|
|
|
313 |
};
|
|
|
314 |
|
|
|
315 |
/* auto completion nom sci */
|
|
|
316 |
WidgetSaisie.prototype.ajouterAutocompletionNoms = function() {
|
|
|
317 |
var lthis = this;
|
|
|
318 |
$('#taxon').autocomplete({
|
|
|
319 |
source: function(requete, add){
|
|
|
320 |
// la variable de requête doit être vidée car sinon le parametre "term" est ajouté
|
|
|
321 |
requete = "";
|
|
|
322 |
if($("#referentiel").val() != "autre") {
|
|
|
323 |
var url = lthis.getUrlAutocompletionNomsSci();console.log(url);
|
|
|
324 |
$.getJSON(url, requete, function(data) {
|
|
|
325 |
var suggestions = lthis.traiterRetourNomsSci(data);
|
|
|
326 |
add(suggestions);
|
|
|
327 |
});
|
|
|
328 |
}
|
|
|
329 |
},
|
|
|
330 |
html: true
|
|
|
331 |
});
|
|
|
332 |
|
|
|
333 |
$("#taxon").bind("autocompleteselect", this.surAutocompletionTaxon);
|
|
|
334 |
};
|
|
|
335 |
|
|
|
336 |
WidgetSaisie.prototype.surAutocompletionTaxon = function(event, ui) {
|
|
|
337 |
$("#taxon").data(ui.item);
|
|
|
338 |
if (ui.item.retenu == true) {
|
|
|
339 |
$("#taxon").addClass('ns-retenu');
|
|
|
340 |
} else {
|
|
|
341 |
$("#taxon").removeClass('ns-retenu');
|
|
|
342 |
}
|
|
|
343 |
};
|
|
|
344 |
|
|
|
345 |
WidgetSaisie.prototype.getUrlAutocompletionNomsSci = function() {
|
|
|
346 |
var mots = $('#taxon').val();
|
|
|
347 |
var url = this.serviceAutocompletionNomSciUrlTpl.replace('{referentiel}', this.nomSciReferentiel);
|
|
|
348 |
url = url.replace('{masque}', mots);
|
|
|
349 |
return url;
|
|
|
350 |
};
|
|
|
351 |
|
|
|
352 |
WidgetSaisie.prototype.traiterRetourNomsSci = function(data) {
|
|
|
353 |
var suggestions = [];
|
|
|
354 |
if (data.resultat != undefined) {
|
|
|
355 |
$.each(data.resultat, function(i, val) {
|
|
|
356 |
val.nn = i;
|
|
|
357 |
var nom = {label : '', value : '', nt : '', nomSel : '', nomSelComplet : '', numNomSel : '',
|
|
|
358 |
nomRet : '', numNomRet : '', famille : '', retenu : false
|
|
|
359 |
};
|
|
|
360 |
if (suggestions.length >= this.autocompletionElementsNbre) {
|
|
|
361 |
nom.label = "...";
|
|
|
362 |
nom.value = $('#taxon').val();
|
|
|
363 |
suggestions.push(nom);
|
|
|
364 |
return false;
|
|
|
365 |
} else {
|
|
|
366 |
nom.label = val.nom_sci_complet;
|
|
|
367 |
nom.value = val.nom_sci_complet;
|
|
|
368 |
nom.nt = val.num_taxonomique;
|
|
|
369 |
nom.nomSel = val.nom_sci;
|
|
|
370 |
nom.nomSelComplet = val.nom_sci_complet;
|
|
|
371 |
nom.numNomSel = val.nn;
|
|
|
372 |
nom.nomRet = val.nom_retenu_complet;
|
|
|
373 |
nom.numNomRet = val["nom_retenu.id"];
|
|
|
374 |
nom.famille = val.famille;
|
|
|
375 |
// Tester dans ce sens, permet de considérer "absent" comme "false" => est-ce opportun ?
|
|
|
376 |
// en tout cas c'est harmonisé avec le CeL
|
|
|
377 |
nom.retenu = (val.retenu == 'true') ? true : false;
|
|
|
378 |
|
|
|
379 |
suggestions.push(nom);
|
|
|
380 |
}
|
|
|
381 |
});
|
|
|
382 |
}
|
|
|
383 |
|
|
|
384 |
return suggestions;
|
|
|
385 |
};
|
|
|
386 |
|
|
|
387 |
WidgetSaisie.prototype.afficherPanneau = function(selecteur) {
|
|
|
388 |
$(selecteur).fadeIn("slow").delay(this.dureeMessage).fadeOut("slow");
|
|
|
389 |
};
|
|
|
390 |
|