diff options
Diffstat (limited to 'ishtar/furnitures/widgets.py')
-rw-r--r-- | ishtar/furnitures/widgets.py | 99 |
1 files changed, 98 insertions, 1 deletions
diff --git a/ishtar/furnitures/widgets.py b/ishtar/furnitures/widgets.py index dc00f8676..af22c7b3e 100644 --- a/ishtar/furnitures/widgets.py +++ b/ishtar/furnitures/widgets.py @@ -48,7 +48,6 @@ class JQueryDate(forms.TextInput): """ % (name, settings.COUNTRY)
return rendered
-
class JQueryAutoComplete(forms.TextInput):
def __init__(self, source, associated_model=None, options={}, attrs={}):
"""
@@ -121,3 +120,101 @@ objects.get(pk=value)) 'js' : self.render_js(name),
}
+class JQueryJqGrid(forms.RadioSelect):
+ COL_TPL = "{name:'%(idx)s', index:'%(idx)s', sortable:true}"
+ class Media:
+ js = ['%s/js/i18n/grid.locale-%s.js' % (settings.MEDIA_URL,
+ settings.COUNTRY),
+ '%s/js/jquery.jqGrid.min.js' % settings.MEDIA_URL,
+ ]
+ css = {'all':['%s/media/ui.jqgrid.css' % settings.MEDIA_URL]}
+
+ def __init__(self, source, form, cols, attrs={}):
+ self.source = source
+ self.form = form
+ self.attrs = attrs
+ self.cols = cols
+
+ def render(self, name, value=None, attrs=None):
+ rendered = unicode(self.form)
+ """
+ for k in self.form.fields:
+ field = self.form.fields[k]
+ print unicode(field)
+ print field.label_tag
+ rendered += u"<tr><td>%s</td><td>%s</td></tr>" % (field.label_tag,
+ unicode(field))
+ """
+ rendered += """
+</table>
+<button id='search_%s' class='submit'>%s</button>
+<h4>%s</h4>
+""" % (name, unicode(_("Search")), unicode(_("Search and select an item")))
+ extra_cols = []
+ col_names, col_idx = [], []
+ for k in self.form.fields:
+ field = self.form.fields[k]
+ col_idx.append(u'"%s"' % k)
+ if k in self.cols:
+ col_names.append(u'"%s"' % field.label)
+ extra_cols.append(self.COL_TPL % {'idx':k})
+ col_names = col_names and ",".join([""]+col_names) or ""
+ col_idx = col_idx and ",".join(col_idx) or ""
+ extra_cols = extra_cols and ",".join([""]+extra_cols) or ""
+ rendered += """<table id="grid_%s" class='jqgrid'></table>
+<div id="pager_%s"></div>
+<input type="hidden" id="hidden_%s" name="%s">""" % (name, name, name, name)
+ rendered += """
+<script type="text/javascript">
+var query_vars = new Array(%(col_idx)s);
+jQuery(document).ready(function(){
+jQuery("#submit_form").click(function (){
+ var mygrid = jQuery("#grid_%(name)s");
+ jQuery("#hidden_%(name)s").val(mygrid.getGridParam('selrow'));
+ return true;
+});
+jQuery("#search_%(name)s").click(function (){
+ var data = "";
+ for (idx in query_vars)
+ {
+ var key = query_vars[idx];
+ var val = jQuery("#id_"+key).val();
+ if (val){
+ if (data) data += "&";
+ data += key + "=" + val;
+ }
+ }
+ var mygrid = jQuery("#grid_%(name)s");
+ var url = "%(source)s?" + data;
+ mygrid.setGridParam({url:url});
+ mygrid.trigger("reloadGrid");
+ return false;
+});
+
+jQuery("#grid_%(name)s").jqGrid({
+ url:'%(source)s',
+ datatype: "json",
+ mtype: 'GET',
+ colNames:['id', '%(name_label)s'%(col_names)s],
+ colModel:[
+{name:'id', index:'id', hidden:true},
+{name:'value', index:'value'}%(extra_cols)s
+ ],
+ sortname: 'value',
+ viewrecords: true,
+ sortorder: "asc",
+ emptyrecords: "%(no_result)s",
+ loadtext: "%(loading)s",
+ pager: '#pager_%(name)s',
+ pgbuttons: false,
+ pginput: false,
+ width:500
+});
+});
+</script>
+""" % {'name':name, 'col_names':col_names, 'extra_cols':extra_cols,
+ 'name_label':unicode(_("Name")), 'source':unicode(self.source),
+ 'col_idx':col_idx, 'no_result':unicode(_("No results")),
+ 'loading':unicode(_("Loading..."))}
+ return rendered
+
|