[#2534] Améliorations à l'interface utilisateur du formulaire d'établissements.
[auf_django_references.git] / auf / django / references / static / references / etablissement-form.js
CommitLineData
652c5d02
EMS
1$(function() {
2
e5fdef4e
EMS
3 function set_ref_etablissement(form, id) {
4 form.find('[name=ref]').val(id);
5 $.get('/references/etablissements/' + id + '.json', function(data) {
6 for (field in data) {
7 if (field != 'id') {
8 var widget = form.find('[name=' + field + ']');
9 var value = $('<span class="etablissement-value"></span>');
10 value.insertBefore(widget);
11 if (widget.is(':checkbox')) {
12 value.append('<img src="/static/references/icon-' +
13 (data[field] ? 'yes' : 'no') + '.gif" alt="' +
14 (data[field] ? 'oui' : 'non') + '/>');
15 widget.attr('checked', data[field]);
652c5d02
EMS
16 }
17 else {
e5fdef4e
EMS
18 value.insertBefore(widget);
19 if (widget.is('select')) {
20 value.append(widget.find('option[value=' + data[field] + ']').text());
652c5d02
EMS
21 }
22 else {
e5fdef4e 23 value.append(data[field]);
652c5d02 24 }
e5fdef4e
EMS
25 widget.val(data[field]);
26 }
27
28 if (field == 'nom') {
29 var button = $(
30 '<button type="button" class="etablissement-change-button">Modifier</button>'
31 );
32 value.append(' ');
33 button.appendTo(value);
34 button.click(function() { unset_ref_etablissement(form); })
652c5d02 35 }
e5fdef4e
EMS
36 widget.addClass('etablissement-hidden').hide();
37 widget.next('.add-another,.datetimeshortcuts').addClass('etablissement-hidden').hide();
652c5d02 38 }
e5fdef4e
EMS
39 }
40 });
41 }
42
43 function unset_ref_etablissement(form) {
44 form.find('[name=ref]').val('');
45 form.find('[name=nom]').val('');
46 form.find('.etablissement-value').remove();
47 form.find('.etablissement-hidden').show();
652c5d02
EMS
48 }
49
50 $('input.etablissement-autocomplete').each(function() {
51 var form = $(this.form);
52
53 // Cacher le champ ref et son label
54 var ref_field = form.find('[name=ref]');
55 ref_field.hide();
56 var ref_field_id = ref_field.attr('id');
57 if (ref_field_id) {
58 form.find('label[for=' + ref_field_id + ']').hide();
59 }
60
61 // On vérifie si le champ pays se trouve avant le champ à auto-compléter.
62 // Si c'est le cas, on va filtrer l'auto-complétion avec le pays
63 // sélectionné.
64 var all_inputs = form.find(':input');
65 var pays_input = all_inputs.filter('[name=pays]');
66 var pays_index = all_inputs.index(pays_input);
67 var my_index = all_inputs.index(this);
e5fdef4e 68 var critere_pays = false;
652c5d02 69 if (pays_index != -1 && pays_index < my_index) {
e5fdef4e 70 var critere_pays = pays_input.get();
652c5d02
EMS
71 }
72
652c5d02 73 // Pré-remplir les champs si une référence est déjà indiquée
e5fdef4e
EMS
74 var ref_id = form.find('[name=ref]').val();
75 if (ref_id) {
76 set_ref_etablissement(form, ref_id);
77 }
652c5d02
EMS
78
79 // Mettre en place l'autocomplete
80 $(this).autocomplete({
e5fdef4e
EMS
81 source: function(request, response) {
82 if (critere_pays) {
83 request.pays = $(critere_pays).val();
84 }
85 $.getJSON('/references/autocomplete/etablissements.json', request, response);
86 },
87 select: function(event, ui) {
88 set_ref_etablissement(form, ui.item.id)
89 }
652c5d02 90 });
652c5d02
EMS
91 });
92
93});