# -*- 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"))