1 #!/usr/bin/env python 2 3 "A WebStack questionnaire application." 4 5 import WebStack.Generic 6 from XSLForms.Resources.WebResources import \ 7 XSLFormsResource, output, resources, prepare_resources as xslforms_prepare_resources 8 import os 9 10 # Site map imports. 11 12 from WebStack.Resources.ResourceMap import MapResource 13 from WebStack.Resources.Selectors import EncodingSelector 14 from WebStack.Resources.Static import DirectoryResource 15 16 # Configuration settings. 17 18 encoding = "utf-8" 19 20 # Resource classes. 21 22 class QuestionnaireEditorResource(XSLFormsResource): 23 24 "A resource providing a questionnaire editor." 25 26 resource_dir = resources(__file__) 27 template_resources = { 28 "questionnaire" : output("question_template.xhtml") 29 } 30 31 def select_activity(self, trans, form): 32 form.set_activity("questionnaire") 33 34 def respond_to_input(self, trans, form): 35 36 parameters = form.get_parameters() 37 selectors = form.get_selectors() 38 questionnaire = form.get_document() 39 40 self.remove_elements(selectors.get("remove-question")) 41 self.add_elements(selectors.get("add-choice"), "choice") 42 self.remove_elements(selectors.get("remove-choice")) 43 44 # Add questions using the normal request parameter. 45 46 if parameters.has_key("add-question"): 47 new_question = questionnaire.ownerDocument.createElementNS(None, "question") 48 questionnaire.xpath("questionnaire")[0].appendChild(new_question) 49 50 # Send a response according to certain parameters. 51 # When exported, an XML version of the data is returned. 52 53 if parameters.has_key("export"): 54 trans.set_content_type(WebStack.Generic.ContentType("text/xml", encoding)) 55 questionnaire.toStream(trans.get_response_stream(), trans.get_response_stream_encoding()) 56 raise WebStack.Generic.EndOfResponse 57 58 # Site map initialisation. 59 60 def get_site(): 61 62 "Return a simple Web site resource." 63 64 # Get the main resource and the directory used by the application. 65 66 questionnaire_resource = QuestionnaireEditorResource() 67 directory = questionnaire_resource.resource_dir 68 69 # Make a simple Web site. 70 71 resource = MapResource({ 72 # Static resources: 73 "styles" : DirectoryResource(os.path.join(directory, "styles"), {"css" : "text/css"}), 74 # Main page: 75 "" : questionnaire_resource 76 }) 77 78 return EncodingSelector(resource, encoding) 79 80 # Resource preparation ahead of time - useful for making installations. 81 82 def prepare_resources(): 83 for cls in [QuestionnaireEditorResource]: 84 xslforms_prepare_resources(cls) 85 86 # vim: tabstop=4 expandtab shiftwidth=4