Trac CustomFieldAdminPlugin - Component Dependable by s0undt3ch
Language: Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | # -*- coding: utf-8 -*- """ Injects the needed javascript to make custom fields depend on selected component. License: BSD (c) 2008 ::: UfSoft.org - Pedro Algarvio(ufs@ufsoft.org) """ from trac.core import * from trac.web.api import ITemplateStreamFilter from genshi.filters.transform import Transformer from genshi.builder import tag from api import CustomFields class ComponentDependableCustomTickets(Component): implements(ITemplateStreamFilter) def filter_stream(self, req, method, filename, stream, data): if not (req.path_info.startswith('/newticket') or \ req.path_info.startswith('/ticket')): return stream cfapi = CustomFields(self.env) fields = {} for f in cfapi.get_custom_fields(self.env): components_field = '%s.components' % f['name'] self.env.log.debug("Gathering components from field %s", components_field) components = self.config.get('ticket-custom', components_field, '').split('|') self.env.log.debug("Gathered %r", components) fields["field-%s" % f['name']] = components js = """\ jQuery(document).ready( function() { jQuery("#field-component").change( function() { switch (this.value) { """ for f in fields.keys(): for c in fields[f]: js +=' case "%s":\n' % c js +=' jQuery("#%s").enable(true);\n' % f for k in fields.keys(): if k != f: js += ' jQuery("#%s").enable(false);\n' % k js += ' break;\n' js += ' default:\n' for f in fields.keys(): js += ' jQuery("#%s").enable(false);\n' % f js += ' };\n' js += ' });\n' js += ' jQuery("#field-component").change();\n' js += ' jQuery("#field-component").submit( function() {\n' for f in fields.keys(): js += ' jQuery("#%s").enable(true);\n' % f js += ' });\n' js += '});\n' return stream | Transformer('body').\ append(tag.script(js, type="text/javascript")) |