(function($) { $.fn.autocomplete = function(params) { params = $.extend({ id: '#autocomplete', forms: '#suggestion_form', elemId: '.single-suggest-results', activeClass: 'suggest-active', textMax: 10, resultMax: 10, timeout: true, timeoutTime: 200, }, params); var id = params['id']; var position = 0; var query; var previousSuggest = ""; //var site_id = 'netsbe'; var suggest = null; var timer = null; /*if (site_id == 'netsbe') { var suggest_url = '/search/suggest?access=p&format=rich&site=default_collection&client=bred&callback=?&max='+params['textMax']; } else {*/ var suggest_url = '/search/suggest?access=p&format=rich&site=default_collection&client=bred&callback=?&max='+params['textMax']; /*}*/ var search_url = '/search/search?access=p&client=bred&output=xml_no_dtd&proxystylesheet=bred&sort=date%3AD%3AL%3Ad1&wc=200&wc_mc=1&oe=UTF-8&ie=UTF-8&ud=1&entqr=3&entqrm=2&filter=p&getfields=*&site=default_collection' $(window).on("resize", function() { $(id).rePosition($(this)); }); $(window).on("click", function() { if($(id).length > 0) { $(id).remove(); previousSuggest = ""; } }); $(this).keydown(function(e) { var returnCode = true; switch(e.keyCode) { case 38: // Haut case 40: // Bas case 13: e.preventDefault(); returnCode = false; break; default: break; } return returnCode; }); $(this).keyup(function(e) { switch(e.keyCode) { case 16: // Shift case 17: // Control case 37: // Gauche case 39: // Droit case 18: // Alt case 91: // Windows case 224: // Cmd break; case 38: // Haut $(id).each(function() { var elem = $(params['elemId'], this); if(position > 1 ) { position--; var current = position - 1; if(position < elem.length && position >= 0) $(elem.get(position)).removeClass(params['activeClass']); $(elem.get(current)).addClass(params['activeClass']); } }); break; case 40: // Bas $(id).each(function() { var elem = $(params['elemId'], this); if(position < elem.length) { var prec = position - 1; if(prec >= 0 && prec < elem.length ) $(elem.get(prec)).removeClass(params['activeClass']); $(elem.get(position)).addClass(params['activeClass']); position++; } }); break; case 13: if($(id).length > 0 && $(id).is(':visible')) { $(id).each(function() { var elem = $(params['elemId'], $(id)); goTo = $(elem.get(position - 1)).children("a").attr('href'); if (goTo){window.location = $(elem.get(position - 1)).children("a").attr('href');} else { tid = params['forms'].replace('#',''); //newValue = $('#canon_'+tid).val();//+' '+$('input[name="dnavs"]').val(); //$('.qspare').val(newValue); $(params['forms']).submit();} }); } else { tid = params['forms'].replace('#',''); newValue = $('#canon_'+tid).val();//+' '+$('input[name="dnavs"]').val(); $('.qspare').val(newValue); $(params['forms']).submit(); } break; default: if($(this).val() == "") { $(id).remove(); } if($(id).length > 0) { $(id).rePosition($(this)); } if($(this).val() != query && $(this).val().length >= 1) { query = $(this).val(); if(params['timeout']) { if(timer != null) { clearTimeout(timer); } var input = $(this); timer = setTimeout(function() { autocomplete(input); }, params['timeoutTime'] ); } else { autocomplete($(this)); } } break; } }); function autocomplete(input) { //NPE: commenter pour simuler: if(suggest != null) { suggest.abort(); } if($(id).length == 0) { input.after('
'); $(id).rePosition(input); } if(input.val() != "") { getSuggest(input.val()); } else { $(id).hide(); } } function getSuggest(q) { suggest = $.get(suggest_url, {q:q}, function(data) { //NPE: simuler //data = {"query":"épar","results":[{"name":"épargne","type":"suggest"},{"name":"pret","type":"suggest"}]}; if(!(typeof data.results == "undefined")) { if(data.results.length > 0) { var result_suggest = data.results[0].name; if(typeof(data.results[0].name) != 'undefined') { $(id).show(); $("div"+params['elemId']).each(function() { $(this).remove(); }); handleResultSuggest(data); previousSuggest = result_suggest; } } else { $(id).hide(); } } else { $(id).hide(); } }, "jsonp" ); } function handleResultSuggest(data) { var e = ""; for(var i = 0; i < data.results.length; i++) { e +='' } console.log(e); $(e).prependTo(id); } }; })(jQuery); (function($) { $.fn.rePosition = function(selector) { $(this).css({ marginTop:selector.outerHeight(), width: selector.outerWidth() }); }; })(jQuery);