return files
+ def autocomplete(self, query, limit=8):
+ res = self.db.query("SELECT DISTINCT name FROM packages \
+ WHERE packages.name LIKE %s AND packages.type = %s \
+ ORDER BY packages.name LIMIT %s", "%%%s%%" % query, "source", limit)
+
+ return [row.name for row in res]
+
def get_avg_build_times(self, name):
query = "SELECT jobs.arch_id AS arch_id, \
AVG(UNIX_TIMESTAMP(jobs.time_finished) - UNIX_TIMESTAMP(jobs.time_started)) AS build_time \
// Activate tooltips.
$("a[rel=tooltip]").tooltip();
$("span[rel=tooltip]").tooltip();
+
+ $(".typeahead-packages-autocomplete").typeahead({
+ source: function(query, process) {
+ $.get("/api/packages/autocomplete", { q: query }, function(data) {
+ if (data.query == query) {
+ process(data.packages);
+ }
+ });
+ },
+ });
});
function getCookie(name) {
</ul>
<form class="navbar-search pull-right" method="GET" action="/search">
- <input type="text" class="search-query" id="search" placeholder="{{ _("Search...") }}" name="q">
+ <input type="text" class="search-query typeahead-packages-autocomplete" id="search" placeholder="{{ _("Search...") }}" name="q" autocomplete="off">
</form>
</div>
</div>
<div class="span4 offset4">
<form class="well ac" method="GET" action="/search">
<div class="input-append">
- <input type="text" class="input-large" name="q" placeholder="{{ _("Search") }}"
- value="{{ pattern }}"><button type="submit" class="btn">{{ _("Go!") }}</button>
+ <input type="text" class="input-large typeahead-packages-autocomplete" name="q" placeholder="{{ _("Search") }}"
+ value="{{ pattern }}" autocomplete="off"><button type="submit" class="btn">{{ _("Go!") }}</button>
</div>
</form>
</div>
from handlers import *
from ui_modules import *
+import handlers_api
+
BASEDIR = os.path.join(os.path.dirname(__file__), "..", "data")
# Enable logging
# Sessions
(r"/sessions", SessionsHandler),
+ # API handlers
+ (r"/api/packages/autocomplete", handlers_api.ApiPackagesAutocomplete),
+
] + static_handlers + [
# Everything else is catched by the 404 handler.
--- /dev/null
+#!/usr/bin/python
+
+import tornado.web
+
+from handlers_base import *
+
+class ApiBaseHandler(BaseHandler):
+ pass
+
+
+class ApiPackagesAutocomplete(BaseHandler):
+ def get(self):
+ query = self.get_argument("q")
+ if not query:
+ raise tornado.web.HTTPError(400)
+
+ # Query database.
+ packages = self.pakfire.packages.autocomplete(query, limit=8)
+
+ res = {
+ "query" : query,
+ "packages" : packages,
+ }
+
+ self.write(res)