/***************************************************************************
- * 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 *
// {{{ Page initialization
var baseurl = $.plURL('search/');
-var address_types = new Array('country', 'administrative_area_level_1', 'administrative_area_level_2', 'administrative_area_level_3', '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)
{
- $('.autocompleteTarget').hide();
+ $('.autocomplete_target').hide();
$('.autocomplete').show().each(function() {
- targeted = $('../.autocompleteTarget', this)[0];
-
- if (targeted && targeted.value) {
- me = $(this);
-
- $.get(baseurl + 'list/' + targeted.name + '/' + targeted.value, {}, function(textValue) {
- me.attr('value', textValue);
- me.addClass('hidden_valid');
- });
- }
-
- $(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['administrative_area_level_3'],
request['locality'],
- request['sublocality'])
+ request['postal_code'])
);
} else {
- for (var i = 1; i < 6; ++i) {
- $('tr#' + address_types[i] + '_list').hide();
+ for (var i = 1; i < address_types_count; ++i) {
+ $('tr#' + address_types[i]).hide();
}
}
- $(".autocomplete[name='schoolTxt']").change(function() { changeSchool('', ''); });
+ $(".autocomplete[name='school_text']").change(function() { changeSchool('', ''); });
changeSchool(request['school'], request['diploma']);
- $(".autocompleteToSelect").each(function() {
- var fieldName = $(this).attr('href');
+ $(".autocomplete_to_select").each(function() {
+ var field_name = $(this).attr('href');
- $(this).attr('href', baseurl + 'list/' + fieldName).click(function() {
- var oldval = $("input.autocompleteTarget[name='" + fieldName + "']")[0].value;
+ if ($(".autocomplete_target[name='" + field_name + "']").val()) {
+ display_list(field_name);
+ }
- $(".autocompleteTarget[name='" + fieldName + "']").parent().load(baseurl + 'list/' + fieldName, {}, function(selectBox) {
- $(".autocompleteTarget[name='" + fieldName + "']").remove();
- $(".autocomplete[name='" + fieldName + "Txt']").remove();
- $("select[name='" + fieldName + "']").attr('value', oldval);
- });
+ $(this).attr('href', baseurl + 'list/' + field_name).click(function() {
+ if ($(this).attr('title') == 'display') {
+ display_list(field_name);
+ } else {
+ var value = $("select[name='" + field_name + "']").val();
+ var text_value = $("select[name='" + field_name + "'] option:selected").text();
+ $('#' + field_name + '_list').html('');
+ $(".autocomplete[name='" + field_name + "_text']").show();
+ $('#' + field_name + '_table').attr('title', 'display');
+ if (value) {
+ $(".autocomplete_target[name='" + field_name + "']").val(value);
+ $(".autocomplete[name='" + field_name + "_text']").val(text_value).addClass('hidden_valid');
+ }
+ }
return false;
});
- }).parent().find('.autocomplete').change(function() {
- // If we change the value in the type="text" field, then the value in the 'integer id' field must not be used,
- // to ensure that, we unset it
- $(this).parent().find('.autocompleteTarget').val('');
});
$('#only_referent').change(function() { changeOnlyReferent(); });
+
+ $('.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) {
+ if (field_name != address_types[i]) {
+ remove = true;
+ }
+ delete_address_component(address_types[i], remove);
+ }
+ }
+
+ return false;
+ });
+}
+
+function display_list(field_name)
+{
+ var value = $("input.autocomplete_target[name='" + field_name + "']").val();
+
+ $('#' + field_name + '_list').load(baseurl + 'list/' + field_name, {}, function(selectBox) {
+ $(".autocomplete_target[name='" + field_name + "']").val('');
+ $(".autocomplete[name='" + field_name + "_text']").hide().val('').removeClass('hidden_valid');
+ $("select[name='" + field_name + "']").val(value);
+ $('#' + field_name + '_table').attr('title', 'hide');
+ });
}
// }}}
// {{{ 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;
} 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, '<strong>$1<\/strong>');
-
- if (row[1] === '-1') {
- return '…';
- }
- if (row[1] === '-2') {
- return '<em>aucun camarade trouvé pour '+row[0].htmlEntities()+'<\/em>';
- }
-
- mate = (row[1] > 1) ? 'camarades' : 'camarade';
- return name + '<em> - ' + row[1].htmlEntities() + ' ' + mate + '<\/em>';
- };
-}
-
function cancel_autocomplete(field, realfield)
{
$(".autocomplete[name='" + field + "']").removeClass('hidden_valid').val('').focus();
if (typeof(realfield) != 'undefined') {
- $(".autocompleteTarget[name='" + realfield + "']").val('');
+ $(".autocomplete_target[name='" + realfield + "']").val('');
}
return;
}
// when choosing autocomplete from list, must validate
-function select_autocomplete(name)
+function select_autocomplete(name, id)
{
- nameRealField = name.replace(/Txt$/, '');
-
- // nothing to do if field is not a text field for a list
- if (nameRealField == name) {
- return null;
+ 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);
}
- // When changing country or locality, open next address component.
- if (nameRealField == 'country' || nameRealField == 'locality') {
- return function(i) {
- nameRealField = name.replace(/Txt$/, '');
- if (i.extra[0] < 0) {
- cancel_autocomplete(name, nameRealField);
- i.extra[1] = '';
- }
- $("[name='" + nameRealField + "']").parent().load(baseurl + 'list/' + nameRealField, function() {
- $("select[name='" + nameRealField + "']").attr('value', i.extra[1]);
- });
- changeAddressComponents(nameRealField, i.extra[1]);
- }
+ // just display field as valid if field is not a text field for a list
+ if (field_name == name) {
+ $(".autocomplete[name='" + name + "']").addClass('hidden_valid');
+ return;
}
- if (nameRealField == 'school')
- return function(i) {
- if (i.extra[0] < 0) {
- cancel_autocomplete('schoolTxt', 'school');
- i.extra[1] = '';
- }
- changeSchool(i.extra[1], '');
+ // When changing country, locality or school, open next address component.
+ if (field_name == 'country' || field_name == 'locality' || field_name == 'school') {
+ if (id < 0) {
+ cancel_autocomplete(name, field_name);
+ id = '';
}
- // change field in list and display text field as valid
- return function(i) {
- nameRealField = this.field.replace(/Txt$/, '');
- if (i.extra[0] < 0) {
- cancel_autocomplete(this.field, nameRealField);
- return;
+ if (field_name == 'school') {
+ changeSchool(id, '');
+ } else {
+ changeAddressComponents(field_name, id);
}
- $(".autocompleteTarget[name='"+nameRealField+"']").attr('value',i.extra[1]);
- $(".autocomplete[name='"+this.field+"']").addClass('hidden_valid');
+ $(".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');
}
// }}}
var next_type = address_types[j];
var next_list = next_type + '_list';
- if (j == 3) {
- $('tr#locality_text').hide()
- $("select[name='localityTxt']").attr('value', '');
- }
-
- $("[name='" + next_type + "']").parent().load(baseurl + 'list/' + next_type, { previous:prev_type, value:values[i] }, function() {
+ $('#' + 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_list).show();
+ $("tr#" + next_type).show();
$("select[name='" + next_type + "']").attr('value', values[j]);
- if (j < 6) {
+ if (next_type == 'locality') {
+ $('tr#locality_text').hide();
+ $("select[name='locality_text']").attr('value', '');
+ }
+ if (j < address_types_count) {
setAddress(j, j + 1, values);
}
} else {
- $("tr#" + next_list).hide();
+ $("tr#" + next_type).hide();
$("select[name='" + next_type + "']").attr('value', '');
- if (j < 6) {
+ if (j < address_types_count) {
setAddress(i, j + 1, values);
}
}
var next_type = address_types[j];
var next_list = next_type + '_list';
- if (j == 3) {
+ if (next_type == 'locality') {
$('tr#locality_text').hide();
- $("select[name='localityTxt']").attr('value', '');
+ $("select[name='locality_text']").attr('value', '');
}
- $("[name='" + next_type + "']").parent().load(baseurl + 'list/' + next_type, { previous:prev_type, value:value }, function() {
+ 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) {
- $('tr#' + next_list).show();
+ $('tr#' + next_type).show();
} else {
- $('tr#' + next_list).hide();
- if (j < 6) {
+ $('tr#' + next_type).hide();
+ if (j < address_types_count) {
displayNextAddressComponent(i, j + 1, value);
}
}
function changeAddressComponents(type, value)
{
- var i = 0, j = 0;
+ var i = 0;
- while (address_types[i] != type && i < 6) {
+ while (address_types[i] != type && i < address_types_count) {
++i;
}
- j = i + 1;
- while (j < 6) {
- $("select[name='" + address_types[j] + "']").attr('value', '');
- $('tr#' + address_types[j] + '_list').hide();
- ++j;
+ for (var j = i + 1; j < address_types_count; ++j) {
+ delete_address_component(address_types[j], true);
}
- if (value != '' && i < 5) {
+ if (value != '' && i < address_types_count) {
$("select[name='" + type + "']").attr('value', value);
displayNextAddressComponent(i, i + 1, value);
}
}
+function delete_address_component(field_name, remove)
+{
+ if (remove || field_name == 'locality') {
+ $('tr#' + field_name).hide();
+ $('#' + field_name + '_list').html('');
+
+ if (field_name == 'locality') {
+ $("input[name='locality_text']").val('');
+ $('tr#locality_text').show();
+ }
+ } else {
+ $("select[name='" + field_name + "']").val('');
+ $("input[name='" + field_name + "']").val('');
+ }
+}
+
// when changing school, open diploma choice
function changeSchool(schoolId, diploma)
{
$(".autocompleteTarget[name='school']").attr('value', schoolId);
if (schoolId) {
- $(".autocomplete[name='schoolTxt']").addClass('hidden_valid');
+ $(".autocomplete[name='school_text']").addClass('hidden_valid');
} else {
- $(".autocomplete[name='schoolTxt']").removeClass('hidden_valid');
+ $(".autocomplete[name='school_text']").removeClass('hidden_valid');
}
$("[name='diploma']").parent().load(baseurl + 'list/diploma/', { school:schoolId }, function() {
});
}
-// 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)
{
$(".term_tree").remove();
- $("input[name='jobtermTxt']").val(full_name).addClass("hidden_valid").show();
+ $("input[name='jobterm_text']").val(full_name).addClass("hidden_valid").show();
$("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: