source: dynamicfieldsplugin/0.12/dynfields/templates/dynfields.html

Last change on this file was 14003, checked in by Ryan J Ollos, 10 years ago

Changed license to 3-Clause BSD with permission of author. Refs #11832.

  • Property svn:executable set to *
File size: 2.9 KB
Line 
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
12var 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
45var 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
77jQuery(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>
Note: See TracBrowser for help on using the repository browser.