File: autocomplete.js

package info (click to toggle)
wims 2%3A4.30%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 185,332 kB
  • sloc: xml: 366,687; javascript: 120,570; java: 62,170; ansic: 61,221; sh: 7,747; perl: 3,939; yacc: 3,217; cpp: 1,915; lex: 1,805; makefile: 1,084; lisp: 914; pascal: 601; python: 520; php: 318; asm: 7
file content (90 lines) | stat: -rw-r--r-- 2,812 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

/********* Autocomplete.js  ************************************************************************
    Autocompletion d'un champ texte
    ajoutez la classe "multicomplete" ou "autocomplete" au choix sur l'input, selon que vous
    souhaitez autoriser un ou plusieurs mot-cles.
    Puis lancez set_multicomplete, ou set_autocomplete avec la liste des mots cles en parametre
****************************************************************************************************/

/** String function to replace accented latin letters by their normal ones, using RegExp.
    based on js-replace-diacritics "https://github.com/yvg/js-replace-diacritics" **/
String.prototype.deAccent = function(){
  var accent = [
    /[\300-\306]/g, /[\340-\346]/g, // A, a
    /[\310-\313]/g, /[\350-\353]/g, // E, e
    /[\314-\317]/g, /[\354-\357]/g, // I, i
    /[\322-\330]/g, /[\362-\370]/g, // O, o
    /[\331-\334]/g, /[\371-\374]/g, // U, u
    /[\321]/g, /[\361]/g, // N, n
    /[\307]/g, /[\347]/g, // C, c
  ];
  var noaccent = [
    'A','a',
    'E','e',
    'I','i',
    'O','o',
    'U','u',
    'N','n',
    'C','c'];

  var str = this;
  for(var i = 0; i < accent.length; i++){
    str = str.replace(accent[i], noaccent[i]);
  }

  return str;
};


function comma_split( val ) {
  return val.split( /,\s*/ );
}

function extractLast( term ) {
  return comma_split( term ).pop();
}

function set_multicomplete(tags){
  $(".multicomplete")
    // don't navigate away from the field on tab when selecting an item
    .bind( "keydown", function( event ) {
      if (event.keyCode === $.ui.keyCode.TAB &&  $( this ).data( "ui-autocomplete" ).menu.active ) {
        event.preventDefault();
      }
    })
    //Adds Autocompletion
    .autocomplete({
      focus: function() {
        // prevent value inserted on focus
        return false;
      },
      source: function( request, response ) {
        // delegate back to autocomplete, but extract the last term
        keyword = extractLast( request.term ).deAccent();
        //alert(keyword);
        response( $.ui.autocomplete.filter(tags, keyword ) );
      },
      select: function( event, ui ) {
        var terms = comma_split( this.value );
        // remove the current input
        terms.pop();
        // add the selected item
        terms.push( ui.item.value );
        // add placeholder to get the comma-and-space at the end
        terms.push("");
        this.value = terms.join(", ");
        return false;
      }
    });
}

function set_autocomplete(tags){
  $(".autocomplete").autocomplete({
    source: function( request, response ) {
      var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( request.term ), "i" );
      response( $.grep( tags, function( item ){
        return matcher.test( item );
      }) );
    }
  });
}