1 | <!--! |
---|
2 | Copyright (C) 2010-2014 Rob Guttman <guttman@alum.mit.edu> |
---|
3 | All rights reserved. |
---|
4 | |
---|
5 | This software is licensed as described in the file COPYING, which |
---|
6 | you should have received as part of this distribution. |
---|
7 | --> |
---|
8 | <script type="text/javascript" xmlns="http://www.w3.org/1999/xhtml" |
---|
9 | xmlns:xi="http://www.w3.org/2001/XInclude" |
---|
10 | xmlns:py="http://genshi.edgewall.org/" py:strip=""> |
---|
11 | |
---|
12 | var get_triggers = function(){ |
---|
13 | if (window.dynfields_rules == undefined) |
---|
14 | window.dynfields_rules = new Object(); |
---|
15 | |
---|
16 | var triggers = new Object(); |
---|
17 | <py:for each="trigger,specs in data.triggers.items()" > |
---|
18 | triggers['${trigger}'] = new Array(); |
---|
19 | |
---|
20 | // determine field selector; 'owner' field is special case |
---|
21 | var selector = '#field-${trigger}'; |
---|
22 | if ('${trigger}' == 'owner'){ |
---|
23 | if (jQuery(selector).length != 1){ |
---|
24 | if (jQuery('#action_assign_reassign_owner').length){ |
---|
25 | selector = '#action_assign_reassign_owner'; |
---|
26 | } else { |
---|
27 | selector = '#action_reassign_reassign_owner'; |
---|
28 | } |
---|
29 | } |
---|
30 | } |
---|
31 | triggers['${trigger}'].selector = selector; |
---|
32 | |
---|
33 | <py:for each="spec in specs" > |
---|
34 | var spec = new Object(); |
---|
35 | <py:for each="key,val in spec.items()" > |
---|
36 | spec['${key}'] = '${val}'; |
---|
37 | </py:for> |
---|
38 | spec['rule'] = window.dynfields_rules[spec.rule_name]; |
---|
39 | triggers['${trigger}'].push(spec); |
---|
40 | </py:for> |
---|
41 | </py:for> |
---|
42 | return triggers; |
---|
43 | } |
---|
44 | |
---|
45 | var apply_rules = function(){ |
---|
46 | var input = $(this); |
---|
47 | var triggers = get_triggers(); |
---|
48 | |
---|
49 | // execute the rule lifecycle... |
---|
50 | |
---|
51 | // setup each rule |
---|
52 | jQuery.each(triggers, function(trigger,specs){ |
---|
53 | jQuery.each(specs, function(i,spec){ |
---|
54 | spec.rule.setup(input, spec); |
---|
55 | }); |
---|
56 | }); |
---|
57 | |
---|
58 | // apply each rule |
---|
59 | jQuery.each(triggers, function(trigger,specs){ |
---|
60 | jQuery.each(specs, function(i,spec){ |
---|
61 | if (input.attr('id') != specs.selector.slice(1)) |
---|
62 | return; |
---|
63 | spec.rule.apply(input, spec); |
---|
64 | }); |
---|
65 | }); |
---|
66 | |
---|
67 | // complete each rule |
---|
68 | jQuery.each(triggers, function(trigger,specs){ |
---|
69 | jQuery.each(specs, function(i,spec){ |
---|
70 | if (input.attr('id') != specs.selector.slice(1)) |
---|
71 | return; |
---|
72 | spec.rule.complete(input, spec); |
---|
73 | }); |
---|
74 | }); |
---|
75 | } |
---|
76 | |
---|
77 | jQuery(document).ready(function($){ |
---|
78 | var triggers = get_triggers(); // trigger fields |
---|
79 | var inputs = new Array(); |
---|
80 | |
---|
81 | // collect all input fields that trigger rules |
---|
82 | jQuery.each(triggers, function(trigger,specs){ |
---|
83 | var input = jQuery(specs.selector).get(0); |
---|
84 | inputs.push(input); |
---|
85 | }); |
---|
86 | inputs = jQuery.unique(inputs); |
---|
87 | |
---|
88 | // attach change event to each input and trigger first change |
---|
89 | jQuery.each(inputs, function(obj){ |
---|
90 | $(this).change(apply_rules).change(); |
---|
91 | }); |
---|
92 | }); |
---|
93 | </script> |
---|