X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=htdocs%2Fjavascript%2Fsearch.js;h=c1d7875d6d3077389ddaf92d7bc15ce96de4d8ab;hb=84265b9e1b403303c2fa31090cab31ce14803c26;hp=feca64bc5ae4abcaae2de3f34c61398305824c4a;hpb=4aab50612c8e62a391df9a274e37b1e51bd240e9;p=platal.git diff --git a/htdocs/javascript/search.js b/htdocs/javascript/search.js index feca64b..c1d7875 100644 --- a/htdocs/javascript/search.js +++ b/htdocs/javascript/search.js @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2003-2011 Polytechnique.org * + * Copyright (C) 2003-2013 Polytechnique.org * * http://opensource.polytechnique.org/ * * * * This program is free software; you can redistribute it and/or modify * @@ -21,34 +21,35 @@ // {{{ Page initialization var baseurl = $.plURL('search/'); -var address_types = new Array('country', 'administrative_area_level_1', 'administrative_area_level_2', 'locality', 'sublocality'); +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); + } + } }); }); $('.autocomplete').change(function() { $(this).removeClass('hidden_valid'); }); if (request['country']) { - $("[name='country']").parent().load(baseurl + 'list/country', function() { - $("select[name='country']").attr('value', request['country']); - }); setAddress(0, 1, new Array(request['country'], request['administrative_area_level_1'], request['administrative_area_level_2'], request['locality'], - request['sublocality']) + request['postal_code']) ); } else { for (var i = 1; i < address_types_count; ++i) { @@ -90,13 +91,17 @@ function load_advanced_search(request) $('.delete_address_component').click(function() { var field_name = $(this).attr('href'); var hide = false; + var remove = false; for (var i = 1; i < address_types_count; ++i) { if (field_name == address_types[i]) { hide = true; } if (hide) { - delete_address_component(address_types[i]); + if (field_name != address_types[i]) { + remove = true; + } + delete_address_component(address_types[i], remove); } } @@ -119,10 +124,13 @@ function display_list(field_name) // }}} // {{{ Regexps to wipe out from search queries -var default_form_values = [ /&woman=0(&|$)/, /&subscriber=0(&|$)/, /&alive=0(&|$)/, /&egal[12]=[^&]*&promo[12]=(&|$)/g, /&networking_type=0(&|$)/, /&[^&=]+=(&|$)/g ]; +var default_form_values = [ /&woman=0(&|$)/, /&subscriber=0(&|$)/, /&alive=0(&|$)/, /&egal2=[^&]*&promo2=(&|$)/, + /&egal1=[^&]*&promo1=&edu_type=(?:Ing[^n]+nieur|Master|Doctorat)(&|$)/, /&networking_type=0(&|$)/, + /&origin_corps=0(&|$)/, /¤t_corps=0(&|$)/, + /corps_rank=0(&|$)/, /&has_email_redirect=0(&|$)/, /&[^&=]+=(&|$)/g ]; /** Uses javascript to clean form from all empty fields */ -function cleanForm(f) +function cleanForm(f, targeturl) { var query = $(f).formSerialize(); var old_query; @@ -135,37 +143,22 @@ function cleanForm(f) } while (old_query != query); } } - query = query.replace(/^&*(.*)&*$/, '$1'); + query = query.replace(/^(.*)&+$/, '$1'); + query = query.replace(/^&+(.*)$/, '$1'); + + // Removes "(n camarades)" if any of them are remaining. + query = query.replace(/\+\(\d+\+camarade(?:s)?\)/, ''); if (query == 'rechercher=Chercher') { alert("Aucun critère n'a été spécifié."); return false; } - document.location = baseurl + 'adv?' + query; + document.location = $.plURL(targeturl + '?' + query); return false; } // }}} // {{{ 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(); @@ -176,46 +169,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'); } // }}} @@ -227,15 +219,14 @@ function setAddress(i, j, values) var next_type = address_types[j]; var next_list = next_type + '_list'; - if (j == 3) { - $('tr#locality_text').hide() - $("select[name='locality_text']").attr('value', ''); - } - $('#' + next_list).load(baseurl + 'list/' + next_type, { previous:prev_type, value:values[i] }, function() { if ($("select[name='" + next_type + "']").children("option").size() > 1) { $("tr#" + next_type).show(); $("select[name='" + next_type + "']").attr('value', values[j]); + if (next_type == 'locality') { + $('tr#locality_text').hide(); + $("select[name='locality_text']").attr('value', ''); + } if (j < address_types_count) { setAddress(j, j + 1, values); } @@ -260,6 +251,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) { @@ -282,7 +277,7 @@ function changeAddressComponents(type, value) } for (var j = i + 1; j < address_types_count; ++j) { - delete_address_component(address_types[j]); + delete_address_component(address_types[j], true); } if (value != '' && i < address_types_count) { @@ -291,15 +286,19 @@ function changeAddressComponents(type, value) } } -function delete_address_component(field_name) +function delete_address_component(field_name, remove) { - $('tr#' + field_name).hide(); - $('#' + field_name + '_list').html(''); - $("input[name='" + field_name + "']").val(''); + if (remove || field_name == 'locality') { + $('tr#' + field_name).hide(); + $('#' + field_name + '_list').html(''); - if (field_name == 'locality') { - $("select[name='locality_text']").attr('value', ''); - $('tr#locality_text').show(); + if (field_name == 'locality') { + $("input[name='locality_text']").val(''); + $('tr#locality_text').show(); + } + } else { + $("select[name='" + field_name + "']").val(''); + $("input[name='" + field_name + "']").val(''); } } @@ -319,16 +318,6 @@ function changeSchool(schoolId, diploma) }); } -// when checking/unchecking "only_referent", disable/enable some fields -function changeOnlyReferent() -{ - if ($("#only_referent").is(':checked')) { - $("input[name='entreprise']").attr('disabled', true); - } else { - $("input[name='entreprise']").removeAttr('disabled'); - } -} - // when choosing a job term in tree, hide tree and set job term field function searchForJobTerm(treeid, jtid, full_name) { @@ -337,5 +326,14 @@ function searchForJobTerm(treeid, jtid, full_name) $("input[name='jobterm']").val(jtid); } +function addressesDump() +{ + if ($('#addresses_dump:checked').length > 0) { + $('#recherche').attr('action', 'search/adv/addresses').attr('method', 'post').removeAttr('onsubmit'); + } else { + $('#recherche').attr('action', 'search/adv').attr('method', 'get'); + } +} + // }}} // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: