diff --git a/VERSION b/VERSION
index 7c1c59b3..5124d553 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-Version 2.00.0 (2012-06-25 14:31:49) dev
+Version 2.00.0 (2012-06-25 14:35:08) dev
diff --git a/gluon/contrib/spreadsheet.py b/gluon/contrib/spreadsheet.py
index 902eea5f..09a00e34 100644
--- a/gluon/contrib/spreadsheet.py
+++ b/gluon/contrib/spreadsheet.py
@@ -1,43 +1,21 @@
+# -*- coding: utf-8 -*-
+
"""
Developed by Massimo Di Pierro, optional component of web2py, GPL2 license.
"""
+
import re
import pickle
import copy
-
+import simplejson
def quote(text):
return str(text).replace('\\', '\\\\').replace("'", "\\'")
class Node:
- """
- Example::
-
- # controller
- from gluon.contrib.spreadsheet import Sheet
-
- def callback():
- return cache.ram('sheet1', lambda: None, None).process(request)
-
- def index():
- sheet = cache.ram('sheet1',
- lambda: Sheet(10, 10, URL(r=request, f='callback')), 0)
- #sheet.cell('r0c3', value='=r0c0+r0c1+r0c2', readonly=True)
- return dict(sheet=sheet)
-
- # view
- {{extend 'layout.html'}}
- {{=sheet}}
-
- or insert invidivual cells via
-
- {{=sheet.nodes['r0c0']}}
-
- """
-
def __init__(self, name, value, url='.', readonly=False, active=True,
- onchange=None):
+ onchange=None, **kwarg):
self.url = url
self.name = name
self.value = str(value)
@@ -49,7 +27,7 @@ class Node:
self.onchange = onchange
self.size = 4
self.locked = False
-
+
def xml(self):
return """",
+ "text",
+ readable=False, writable=False,
+ formname=""))
+ # submit button label
+ form.elements("input [type=submit]").attributes["_value"] = \
+ T("Update database")
+ form.elements("textarea")[0].attributes["_style"] = "display: none;"
+
+ w2p_spreadsheet_update_script = SCRIPT('''
+ jQuery(
+ function(){
+ jQuery("").submit(function(){
+ jQuery("[name=]").val(JSON.stringify(
+ w2p_spreadsheet_data)
+ );
+ });
+ }
+ );
+ ''')
+
+ # retrieve changes
+ if form.process().accepted:
+ data = form.vars.
+ changes = Sheet.updated(data)
+
+ # Do db I/O:
+ for table, rows in changes.iteritems():
+ for row, values in rows.iteritems():
+ db[table][row].update_record(**values)
+
+ # the action view should expose {{=form}}, {{=sheet}}, {{=myscript}}
+ return dict(form=form, sheet=sheet,
+ myscript=w2p_spreadseet_update_script)
+
+ Second method: Sending data updates with .ajax()
+
+ -spreadsheet page's view:
+
+ {{
+ =INPUT(_type="button", _value="update data",
+ _id="w2p_spreadsheet_update_data")
+ }}
+
+ {{=SCRIPT('''
+ jQuery(function(){
+ jQuery("#w2p_spreadsheet_update_data").click(
+ function(){
+ jQuery.ajax({url: "%s",
+ type: "POST",
+ data:
+ {data:
+ JSON.stringify(w2p_spreadsheet_data)}
+ }
+ );
+ }
+ );
+ });
+ ''' % URL(c="default", f="modified"))}}
+
+ -controller: modified function
+ def modified():
+ data = request.vars.data
+ changes = Sheet.updated(data)
+ # (for db I/O see first method)
+ return "ok"
+
+
+ Third method:
+ When creating a Sheet instance, pass a kwarg update_button=