7. Saving events
• Input changed
• User clicks
• User (or user’s cat) hits key
• Every x seconds
Friday, October 21, 2011
8. Saving form - local
• Use localstorage
• Fake dictionaries
[my_form][an_input] = ’10’
[my_form][multi_input][count] = ‘2’
[my_form][multi_input][values][0] = ‘bli’
[my_form][multi_input][values][1] = ‘bla’
Friday, October 21, 2011
9. Saving form - remote
• Every 10 local saves
• jQuery Ajax call
• data saved as annotations in
portal_autosaveform
[my_form][an_input] = ’10’
[my_form][multi_input][values] = [‘bli’, ‘bla’]
Friday, October 21, 2011
10. Loading form
• compare local/remote database versions
• use most recent
• fills the form with saved data
Friday, October 21, 2011
11. Using autosave form
1 - register form
from collective.autosaveform import config
from Products.CMFCore.utils import
getToolByName
tool = getToolByName(context,
'portal_autosaveform')
try:
tool.register_form('my_saved_form',
{'text_field': config.TEXT,
'radio_field': config.RADIO})
except:
pass
Friday, October 21, 2011
12. Using autosave form
2 - enable loading
<script type="text/javascript">
jq('#my_saved_form').autosaveform();
</script>
Friday, October 21, 2011
13. Using autosave form
3 - mark form
def process_form(...):
# Process the form ...
tool = getToolByName(context,
'portal_autosaveform'
tool.mark_form_processed(
'my_saved_form')
Friday, October 21, 2011
15. Limitations
• Only works with logged-in users
• Only tested with custom forms (no
Archetypes forms or z3cforms)
• Do not support file inputs
Friday, October 21, 2011
16. Advantages
• Configurable
• Server friendly
• User friendly
• Multi-browsers
• Supports all HTML inputs
Friday, October 21, 2011