blob: 4822265f5820210d3ba92a0ba8957dbcf4543d76 [file] [log] [blame]
Copybara854996b2021-09-07 19:36:02 +00001<style>
2 #rules th, #rules td { padding-bottom: 1em }
3</style>
4
5[# If any value is supplied for arg0, the user will be able to set actions
6 that set default owner, set default status, and add CC users.]
7<h4 id="filters">Filter rules</h4>
8<div class="section">
9
10 <div class="closed">
11 <div>Filter rules can help you fill in defaults and stay organized.
12 <a class="ifClosed toggleHidden" href="#"
13 style="font-size:90%; margin-left:.5em">Learn more</a>
14 </div>
15
16 <div id="filterhelp" class="ifOpened help">
17 Filter rules can help your team triage issues by automatically
18 filling in default values based on other values. They can be used
19 in the same way that you might use message filters in an email client.
20 Filter rules are evaluated after each edit, not just on new items. And,
21 filter rules only add values or set default values, they never override
22 values that were explicitly set by a user.<br>
23 <br>
24 Note that exclusive prefixes still apply. So, if a user has set a label
25 with one of the exclusive prefixes, a rule that adds another label with
26 the same prefix will have no effect.
27 </div>
28 <br>
29
30 <table border="0" id="rules">
31 <tr>
32 <th></th>
33 <th style="text-align:left">If the issue matches this query:</th>
34 <th colspan="2" style="text-align:left">Then, [if-any arg0]do the following[else]add these labels[end]:</th>
35 <th></th>
36 </tr>
37
38 [for rules]
39 <tr>
40 <td style="text-align:right" width="20">[rules.idx].</td>
41 <td><input type="text" name="predicate[rules.idx]" size="60" value="[rules.predicate]"
42 autocomplete="off" id="predicate_existing_[rules.idx]" class="acob"></td>
43 <td>
44 [if-any arg0]
45 <select name="action_type[rules.idx]">
46 <option value="" disabled="disabled" [is rules.action_type ""]selected="selected"[end]>Choose...</option>
47 <option value="default_status" [is rules.action_type "default_status"]selected="selected"[end]>Set default status:</option>
48 <option value="default_owner" [is rules.action_type "default_owner"]selected="selected"[end]>Set default owner:</option>
49 <option value="add_ccs" [is rules.action_type "add_ccs"]selected="selected"[end]>Add Cc:</option>
50 <option value="add_labels" [is rules.action_type "add_labels"]selected="selected"[end]>Add labels:</option>
51 <option value="also_notify" [is rules.action_type "also_notify"]selected="selected"[end]>Also notify email:</option>
52 <option value="warning" [is rules.action_type "warning"]selected="selected"[end]>Show warning:</option>
53 </select>
54 [end]
55 </td>
56 <td>
57 <input type="text" name="action_value[rules.idx]" size="70" value="[rules.action_value]" class="acob">
58 </td>
59 <td></td>
60 </tr>
61 [end]
62
63 [for new_rule_indexes]
64 <tr id="newrow[new_rule_indexes]" [if-index new_rule_indexes first][else]style="display:none"[end]>
65 <td style="text-align:right" width="20">[new_rule_indexes].</td>
66 <td><input type="text" name="new_predicate[new_rule_indexes]" size="60" value=""
67 class="showNextRuleRow acob" data-index="[new_rule_indexes]"
68 autocomplete="off" id="predicate_new_[new_rule_indexes]"></td>
69 <td>
70 [if-any arg0]
71 <select name="new_action_type[new_rule_indexes]">
72 <option value="" disabled="disabled" selected="selected">Choose...</option>
73 <option value="default_status">Set default status:</option>
74 <option value="default_owner">Set default owner:</option>
75 <option value="add_ccs">Add Cc:</option>
76 <option value="add_labels">Add labels:</option>
77 <option value="also_notify">Also notify email:</option>
78 <option value="warning">Show warning:</option>
79 </select>
80 [end]
81 </td>
82 <td>
83 <input type="text" name="new_action_value[new_rule_indexes]" size="70" value="" class="acob">
84 [# TODO(jrobbins): figure out a way to display error messages on each rule. ]
85 </td>
86 <td width="40px">
87 [if-index new_rule_indexes last][else]
88 <span id="addrow[new_rule_indexes]" class="fakelink" class="fakelink" data-index="[new_rule_indexes]">Add a row</span
89 [end]
90 </td>
91 </tr>
92 [end]
93
94 </table>
95 </div>
96
97 [if-any errors.rules]
98 [for errors.rules]
99 <div class="fielderror">[errors.rules]</div>
100 [end]
101 <script type="text/javascript" nonce="[nonce]">
102runOnLoad(function() {
103 document.location.hash = 'filters';
104});
105 </script>
106 [end]
107
108</div>
109
110<script type="text/javascript" nonce="[nonce]">
111runOnLoad(function() {
112 function showNextRuleRow(i) {
113 if (i < [max_rules]) {
114 _showID('newrow' + (i + 1));
115 _hideID('addrow' + i);
116 }
117 }
118
119 var addARowLinks = document.getElementsByClassName("fakelink");
120 for (var i = 0; i < addARowLinks.length; ++i) {
121 var link = addARowLinks[[]i];
122 link.addEventListener("click", function(event) {
123 var index = Number(event.target.getAttribute("data-index"));
124 showNextRuleRow(index);
125 });
126 }
127
128 var typeToAddARow = document.getElementsByClassName("showNextRuleRow");
129 for (var i = 0; i < typeToAddARow.length; ++i) {
130 var el = typeToAddARow[[]i];
131 el.addEventListener("keydown", function(event) {
132 var index = Number(event.target.getAttribute("data-index"));
133 showNextRuleRow(index);
134 });
135 }
136
137 var acobElements = document.getElementsByClassName("acob");
138 for (var i = 0; i < acobElements.length; ++i) {
139 var el = acobElements[[]i];
140 el.addEventListener("focus", function(event) {
141 _acrob(null);
142 _acof(event);
143 });
144 }
145
146 var acobElements = document.getElementsByClassName("acob");
147 for (var i = 0; i < acobElements.length; ++i) {
148 var el = acobElements[[]i];
149 el.addEventListener("focus", function(event) {
150 _acrob(null);
151 _acof(event);
152 });
153 }
154});
155</script>