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