share/collection.js: Improve the search suggestion behavior.
[collection4.git] / share / collection.js
1 function format_instance(inst)
2 {
3   return ("<li class=\"instance\"><a href=\"" + location.pathname
4       + "?action=show_graph;" + inst.params + "\">" + inst.description
5       + "</a></li>");
6 }
7
8 function format_instance_list(instances)
9 {
10   var ret = "<ul class=\"instance_list\">";
11   var i;
12
13   if (instances.length == 0)
14     return ("");
15
16   for (i = 0; i < instances.length; i++)
17     ret += format_instance (instances[i]);
18   
19   ret += "</ul>";
20
21   return (ret);
22 }
23
24 function format_graph(graph)
25 {
26   return ("<li class=\"graph\">" + graph.title + format_instance_list (graph.instances) + "</li>");
27 }
28
29 function update_search_suggestions ()
30 {
31   var term = $("#search-input").val ();
32   if (term.length < 2)
33   {
34     $("#search-suggest").hide ();
35     return (true);
36   }
37
38   $("#search-suggest").show ();
39   $.getJSON ("collection.fcgi",
40     { "action": "search_json", "q": term},
41     function(data)
42     {
43       var i;
44       $("#search-suggest").html ("");
45       for (i = 0; i < data.length; i++)
46       {
47         var graph = data[i];
48         $("#search-suggest").append (format_graph (graph));
49       }
50     }
51   );
52 } /* update_search_suggestions */
53
54 $(document).ready(function() {
55     /* $("#layout-middle-right").html ("<ul id=\"search-suggest\" class=\"graph_list\"></ul>"); */
56     $("#search-form").append ("<ul id=\"search-suggest\" class=\"graph_list\"></ul>");
57     $("#search-suggest").hide ();
58
59     $("#search-input").blur (function()
60     {
61       $("#search-suggest").hide ();
62     });
63
64     $("#search-input").focus (function()
65     {
66       var term = $("#search-input").val ();
67       if (term.length < 2)
68       {
69         $("#search-suggest").hide ();
70       }
71       else
72       {
73         $("#search-suggest").show ();
74       }
75     });
76
77     $("#search-input").keyup (function()
78     {
79       update_search_suggestions ();
80     });
81 });
82
83 /* vim: set sw=2 sts=2 et fdm=marker : */