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))
+