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: