X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=htdocs%2Fjavascript%2Fsearch.js;h=52870adc0030221b427bbb40e34d07b0fc58cc93;hb=07d0a10adbc2578f9b85875e551a03b99d3650e8;hp=29ba340fda000952efda184b05f7f27ff2bca802;hpb=3ccb060db98c00b4de687f0d262132e89293103c;p=platal.git diff --git a/htdocs/javascript/search.js b/htdocs/javascript/search.js index 29ba340..52870ad 100644 --- a/htdocs/javascript/search.js +++ b/htdocs/javascript/search.js @@ -23,18 +23,22 @@ var baseurl = $.plURL('search/'); var address_types = new Array('country', 'administrative_area_level_1', 'administrative_area_level_2', 'locality', 'postal_code'); var address_types_count = address_types.length; +var autocomplete_sub = {'country': 'locality_text'}; function load_advanced_search(request) { $('.autocomplete_target').hide(); $('.autocomplete').show().each(function() { - $(this).autocomplete(baseurl + 'autocomplete/' + this.name, { - selectOnly: 1, - formatItem: make_format_autocomplete(this), - field: this.name, - onItemSelect: select_autocomplete(this.name), - matchSubset: 0, - width: $(this).width() + $(this).autocomplete({ + source: baseurl + 'autocomplete/' + this.name, + select: function(event, ui) { + select_autocomplete(this.name, ui.item.id); + }, + change: function(event, ui) { + if (ui.item != null && ui.item.field != null) { + $(this).val(ui.item.field); + } + } }); }); @@ -148,25 +152,6 @@ function cleanForm(f, targeturl) // }}} // {{{ Autocomplete related functions. -// display an autocomplete row : blabla (nb of found matches) -function make_format_autocomplete(block) -{ - return function(row) { - regexp = new RegExp('(' + RegExp.escape(block.value) + ')', 'i'); - name = row[0].htmlEntities().replace(regexp, '$1<\/strong>'); - - if (row[1] === '-1') { - return '…'; - } - if (row[1] === '-2') { - return 'aucun camarade trouvé pour '+row[0].htmlEntities()+'<\/em>'; - } - - mate = (row[1] > 1) ? 'camarades' : 'camarade'; - return name + '  -  ' + row[1].htmlEntities() + ' ' + mate + '<\/em>'; - }; -} - function cancel_autocomplete(field, realfield) { $(".autocomplete[name='" + field + "']").removeClass('hidden_valid').val('').focus(); @@ -177,46 +162,45 @@ function cancel_autocomplete(field, realfield) } // when choosing autocomplete from list, must validate -function select_autocomplete(name) +function select_autocomplete(name, id) { var field_name = name.replace(/_text$/, ''); + if (autocomplete_sub[field_name] != null) { + $(".autocomplete[name='" + autocomplete_sub[field_name] + "']").autocomplete('option', 'source', baseurl + 'autocomplete/' + autocomplete_sub[field_name] + '/' + id); + } // just display field as valid if field is not a text field for a list if (field_name == name) { - return function(i) { - $(".autocomplete[name='" + name + "']").addClass('hidden_valid'); - } + $(".autocomplete[name='" + name + "']").addClass('hidden_valid'); + return; } // When changing country, locality or school, open next address component. if (field_name == 'country' || field_name == 'locality' || field_name == 'school') { - return function(i) { - if (i.extra[0] < 0) { - cancel_autocomplete(name, field_name); - i.extra[1] = ''; - } - - if (field_name == 'school') { - changeSchool(i.extra[1], ''); - } else { - changeAddressComponents(field_name, i.extra[1]); - } - - $(".autocomplete_target[name='" + field_name + "']").attr('value', i.extra[1]); - $(".autocomplete[name='" + name + "']").addClass('hidden_valid'); + if (id < 0) { + cancel_autocomplete(name, field_name); + id = ''; } - } - // change field in list and display text field as valid - return function(i) { - if (i.extra[0] < 0) { - cancel_autocomplete(this.field, field_name); - return; + if (field_name == 'school') { + changeSchool(id, ''); + } else { + changeAddressComponents(field_name, id); } - $(".autocomplete_target[name='" + field_name + "']").attr('value', i.extra[1]); + $(".autocomplete_target[name='" + field_name + "']").attr('value', id); $(".autocomplete[name='" + name + "']").addClass('hidden_valid'); + return; } + + // change field in list and display text field as valid + if (id < 0) { + cancel_autocomplete(this.field, field_name); + return; + } + + $(".autocomplete_target[name='" + field_name + "']").attr('value', id); + $(".autocomplete[name='" + name + "']").addClass('hidden_valid'); } // }}} @@ -260,6 +244,10 @@ function displayNextAddressComponent(i, j, value) $("select[name='locality_text']").attr('value', ''); } + if (autocomplete_sub[prev_type] != null) { + $(".autocomplete[name='" + autocomplete_sub[prev_type] + "']").autocomplete('option', 'source', baseurl + 'autocomplete/' + autocomplete_sub[prev_type] + '/' + value); + } + $('#' + next_list).load(baseurl + 'list/' + next_type, { previous:prev_type, value:value }, function() { $("select[name='" + next_type + "']").attr('value', ''); if ($("select[name='" + next_type + "']").children('option').size() > 1) {