1 #!/usr/bin/env python 2 3 "An example of recursive templates." 4 5 import WebStack.Generic 6 import XSLForms.Resources.WebResources 7 import XSLForms.Utils 8 import os 9 10 # Site map imports. 11 12 from WebStack.Resources.Selectors import EncodingSelector 13 14 # Configuration settings. 15 16 encoding = "utf-8" 17 18 # Resource classes. 19 20 class RecursiveResource(XSLForms.Resources.WebResources.XSLFormsResource): 21 22 "A resource providing a recursive hierarchy of editable fields." 23 24 resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") 25 template_resources = { 26 "recursive" : ("recursive_template.xhtml", "recursive_output.xsl") 27 } 28 init_resources = { 29 "recursive" : ("recursive_template.xhtml", "recursive_input.xsl") 30 } 31 32 def respond_to_form(self, trans, form): 33 34 """ 35 Respond to a request having the given transaction 'trans' and the given 36 'form' information. 37 """ 38 39 parameters = form.get_parameters() 40 documents = form.get_documents() 41 42 # Ensure the presence of a document. 43 44 if documents.has_key("recursive"): 45 recursive = documents["recursive"] 46 else: 47 recursive = form.new_instance("recursive") 48 49 # Add and remove elements according to the selectors found. 50 51 selectors = form.get_selectors() 52 XSLForms.Utils.remove_elements(selectors.get("remove")) 53 XSLForms.Utils.add_elements(selectors.get("add-list"), "list") 54 XSLForms.Utils.add_elements(selectors.get("add-item"), "item") 55 56 # Initialise the document, adding enumerations/ranges. 57 58 init_xsl = self.prepare_initialiser("recursive") 59 recursive = self.get_result([init_xsl], recursive) 60 #print recursive.toString("iso-8859-1") 61 62 # Start the response. 63 64 trans.set_content_type(WebStack.Generic.ContentType("application/xhtml+xml", encoding)) 65 66 # Ensure that an output stylesheet exists. 67 68 trans_xsl = self.prepare_output("recursive") 69 stylesheet_parameters = {} 70 71 # Complete the response. 72 73 self.send_output(trans, [trans_xsl], recursive, stylesheet_parameters) 74 75 # Site map initialisation. 76 77 def get_site(): 78 79 "Return a simple Web site resource." 80 81 # Get the main resource and the directory used by the application. 82 83 resource = RecursiveResource() 84 return EncodingSelector(resource, encoding) 85 86 # Resource preparation ahead of time - useful for making installations. 87 88 def prepare_resources(): 89 for cls in [RecursiveResource]: 90 XSLForms.Resources.WebResources.prepare_resources(cls) 91 92 # vim: tabstop=4 expandtab shiftwidth=4