Mercurial > public > sg101
diff core/widgets.py @ 581:ee87ea74d46b
For Django 1.4, rearranged project structure for new manage.py.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 05 May 2012 17:10:48 -0500 |
parents | gpp/core/widgets.py@5453aedf95fd |
children | 678a1a2ef55a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/widgets.py Sat May 05 17:10:48 2012 -0500 @@ -0,0 +1,55 @@ +""" +Various useful widgets for the GPP application. +""" + +from django import forms +from django.utils.safestring import mark_safe +from django.core.urlresolvers import reverse +from django.conf import settings + + +class AutoCompleteUserInput(forms.TextInput): + + def render(self, name, value, attrs=None): + url = reverse('core-ajax_users') + output = super(AutoCompleteUserInput, self).render(name, value, attrs) + return output + mark_safe(u"""\ +<script type="text/javascript"> +$(function() { + var cache = {}; + var cacheSize = 0; + $("#id_%s").autocomplete({ + delay: 400, + minLength: 1, + source: function(request, response) { + if (cache[request.term]) { + response(cache[request.term]); + return; + } + $.ajax({ + url: "%s", + type: "GET", + data: { + q: request.term, + limit: 15 + }, + dataType: "json", + success: function(data, textStatus) { + if (cacheSize >= 32) { + cache = {}; + cacheSize = 0; + } + cache[request.term] = data; + ++cacheSize; + response(data); + }, + error: function(xhr, textStatus, ex) { + alert('Oops, an error occurred. ' + xhr.statusText + ' - ' + + xhr.responseText); + } + }); + } + }); +}); +</script>""" % (name, url)) +