gremmie@1: """ gremmie@1: Various useful widgets for the GPP application. gremmie@1: """ gremmie@1: gremmie@1: from django import forms gremmie@1: from django.utils.safestring import mark_safe gremmie@1: from django.core.urlresolvers import reverse bgneal@6: from django.conf import settings gremmie@1: gremmie@1: gremmie@1: class AutoCompleteUserInput(forms.TextInput): gremmie@1: gremmie@1: def render(self, name, value, attrs=None): bgneal@149: url = reverse('core-ajax_users') gremmie@1: output = super(AutoCompleteUserInput, self).render(name, value, attrs) bgneal@186: return output + mark_safe(u"""\ gremmie@1: <script type="text/javascript"> bgneal@186: $(function() { bgneal@186: var cache = {}; bgneal@186: var cacheSize = 0; bgneal@186: $("#id_%s").autocomplete({ bgneal@186: delay: 400, bgneal@326: minLength: 1, bgneal@186: source: function(request, response) { bgneal@186: if (cache[request.term]) { bgneal@186: response(cache[request.term]); bgneal@186: return; bgneal@186: } bgneal@186: $.ajax({ bgneal@186: url: "%s", bgneal@186: type: "GET", bgneal@186: data: { bgneal@186: q: request.term, bgneal@326: limit: 15 bgneal@186: }, bgneal@186: dataType: "json", bgneal@186: success: function(data, textStatus) { bgneal@326: if (cacheSize >= 32) { bgneal@186: cache = {}; bgneal@186: cacheSize = 0; bgneal@186: } bgneal@186: cache[request.term] = data; bgneal@186: ++cacheSize; bgneal@186: response(data); bgneal@186: }, bgneal@186: error: function(xhr, textStatus, ex) { bgneal@186: alert('Oops, an error occurred. ' + xhr.statusText + ' - ' + bgneal@186: xhr.responseText); bgneal@186: } bgneal@186: }); bgneal@186: } bgneal@186: }); gremmie@1: }); bgneal@186: </script>""" % (name, url)) gremmie@1: