Commit | Line | Data |
---|---|---|
dd8de1ec PH |
1 | /******************************************************************************** |
2 | * include/philter.js : philter javascript functions | |
3 | * ------------------ | |
4 | * | |
5 | * This file is part of the philter distribution | |
6 | * Copyright: See COPYING files that comes with this distribution | |
7 | ********************************************************************************/ | |
8 | ||
9 | function text_onfocus(object,val) { | |
10 | if(object.value == val) | |
11 | object.value = ''; | |
12 | } | |
13 | ||
14 | function text_onblur(object,val) { | |
15 | if(object.value == '') | |
16 | object.value = val; | |
17 | } | |
18 | ||
19 | function cleanChilds(Node, nbChilds) { | |
20 | while(Node.childNodes.length>nbChilds) | |
21 | Node.removeChild(Node.childNodes[nbChilds]); | |
22 | } | |
23 | ||
693b6ec6 PH |
24 | function getElement(obj, index) { |
25 | if(document.getElementById) | |
26 | return document.getElementById(obj); | |
3e328a2d | 27 | if(document.all) |
693b6ec6 | 28 | return document.all[obj]; |
1b874dc4 | 29 | return false; |
0aa1a917 PH |
30 | } |
31 | ||
dd8de1ec PH |
32 | /********** ORDER FORM FUNCTIONS **********/ |
33 | ||
34 | function order_up() { | |
35 | form = document.forms['order']; | |
36 | select = form.elements['order[select]']; | |
37 | ||
38 | if(select.selectedIndex>1) { | |
39 | i = select.selectedIndex; | |
40 | value1 = select.options[i].value; | |
41 | text1 = select.options[i].text; | |
42 | value2 = select.options[i-1].value; | |
43 | text2 = select.options[i-1].text; | |
44 | ||
45 | select.options[i] = new Option(text2,value2,false,false); | |
46 | select.options[i-1] = new Option(text1,value1,false,false); | |
47 | select.selectedIndex = i-1; | |
48 | ||
49 | form.elements['order['+value1+']'].value = i-1; | |
50 | form.elements['order['+value2+']'].value = i; | |
51 | } | |
52 | } | |
53 | ||
54 | function order_dn() { | |
55 | form = document.forms['order']; | |
56 | select = form.elements['order[select]']; | |
57 | ||
58 | if(select.selectedIndex>0 && select.selectedIndex<select.length-1) { | |
59 | i = select.selectedIndex; | |
60 | value1 = select.options[i].value; | |
61 | text1 = select.options[i].text; | |
62 | value2 = select.options[i+1].value; | |
63 | text2 = select.options[i+1].text; | |
64 | ||
65 | select.options[i] = new Option(text2,value2,false,false); | |
66 | select.options[i+1] = new Option(text1,value1,false,false); | |
67 | select.selectedIndex = i+1; | |
68 | ||
69 | form.elements['order['+value1+']'].value = i+1; | |
70 | form.elements['order['+value2+']'].value = i; | |
71 | } | |
72 | } | |
73 | ||
74 | function order_submit(obj) { | |
75 | if(obj.name == 'order[submit]') | |
76 | obj.form.elements['order[action]'].value = 'submit'; | |
77 | if(obj.name == 'order[delete]') | |
78 | obj.form.elements['order[action]'].value = 'delete'; | |
79 | obj.form.submit(); | |
80 | } | |
81 | ||
82 | /********** RULE FORM GLOBALS **********/ | |
83 | ||
84 | var matches_list = new Array(); | |
85 | var matches_func = new Array(); | |
86 | ||
87 | var actions_list = new Array() | |
88 | var actions_func = new Array(); | |
89 | ||
90 | var mail_pool = new Array(); | |
91 | var filter = new Array(); | |
92 | ||
93 | var current_rule; | |
94 | ||
95 | var actions_i = 0; | |
96 | var matches_i = 0; | |
97 | ||
98 | /********** RULE.ACTION FORM FUNCTIONS **********/ | |
99 | ||
100 | function createActionSelect(data,base) { | |
101 | var i,j; | |
102 | var select = document.createElement("select"); | |
8294c7d2 | 103 | var sel = 0; |
dd8de1ec PH |
104 | select.name = base+'[0]'; |
105 | ||
8294c7d2 PH |
106 | for(i=0, j=0; i<actions_list.length; i++) { |
107 | if(data==i) sel = j; | |
108 | if(actions_list[i]) select.options[j++] = new Option(actions_list[i],i,false,(data==i)); | |
109 | } | |
dd8de1ec | 110 | |
8294c7d2 PH |
111 | select.selectedIndex = sel; |
112 | select.onchange = function () { changeRow(this,actions_func); }; | |
113 | ||
dd8de1ec PH |
114 | return select; |
115 | } | |
116 | ||
117 | function createActionRow(Node,data) { | |
118 | var div = document.createElement("div"); | |
119 | div.className = 'row'; | |
120 | div.name = 'rule[actions]['+actions_i+']'; | |
121 | actions_i++; | |
122 | Node.appendChild(div); | |
123 | ||
124 | var del = document.createElement("input"); | |
125 | del.setAttribute("type", "submit"); | |
126 | del.setAttribute("value", "Del"); | |
8294c7d2 | 127 | del.onclick = function () { del.parentNode.parentNode.removeChild(del.parentNode); }; |
dd8de1ec PH |
128 | div.appendChild(del); |
129 | ||
130 | div.appendChild(document.createTextNode(" ")); | |
131 | ||
132 | var select = createActionSelect(data[0],div.name); | |
133 | div.appendChild(select); | |
134 | ||
135 | actions_func[select.options[select.selectedIndex].value](div,data); | |
136 | } | |
137 | ||
138 | function newAction() { | |
693b6ec6 | 139 | createActionRow(getElement('actionsRow'), [-1]); |
dd8de1ec PH |
140 | } |
141 | ||
142 | /********** RULE.MATCH FORM FUNCTIONS **********/ | |
143 | ||
144 | function createMatchSelect(data,base) { | |
145 | var i,j; | |
146 | var select = document.createElement("select"); | |
8294c7d2 | 147 | var sel = 0; |
dd8de1ec PH |
148 | select.name = base+'[0]'; |
149 | ||
8294c7d2 PH |
150 | for(i=0, j=0; i<matches_list.length; i++) { |
151 | if(data==i) sel = j; | |
152 | if(matches_list[i]) select.options[j++] = new Option(matches_list[i],i,false,(data==i)); | |
153 | } | |
dd8de1ec | 154 | |
8294c7d2 PH |
155 | select.selectedIndex = sel; |
156 | select.onchange = function () { changeRow(this,matches_func); }; | |
dd8de1ec | 157 | |
dd8de1ec PH |
158 | return select; |
159 | } | |
160 | ||
161 | function createMatchRow(Node,data) { | |
162 | var div = document.createElement("div"); | |
163 | div.className = 'row'; | |
164 | div.name = 'rule[matches]['+actions_i+']'; | |
165 | actions_i++; | |
166 | Node.appendChild(div); | |
167 | ||
168 | var del = document.createElement("input"); | |
169 | del.setAttribute("type", "submit"); | |
170 | del.setAttribute("value", "Del"); | |
8294c7d2 | 171 | del.onclick = function () { del.parentNode.parentNode.removeChild(del.parentNode); }; |
dd8de1ec PH |
172 | div.appendChild(del); |
173 | ||
174 | div.appendChild(document.createTextNode(" ")); | |
175 | ||
176 | var select = createMatchSelect(data[0],div.name); | |
177 | div.appendChild(select); | |
178 | ||
179 | matches_func[select.options[select.selectedIndex].value](div,data); | |
180 | } | |
181 | ||
182 | function newMatch() { | |
693b6ec6 | 183 | createMatchRow(getElement('matchesRow'), [-1]); |
dd8de1ec PH |
184 | } |
185 | ||
186 | /********** RULE FORM FUNCTIONS **********/ | |
187 | ||
188 | function changeRow(sel, funcs) { | |
189 | var row = sel.parentNode; | |
190 | cleanChilds(row,3); | |
191 | funcs[sel.options[sel.selectedIndex].value](row,0); | |
192 | } | |
193 | ||
194 | function createRuleForm() { | |
195 | var i; | |
0aa1a917 | 196 | var sel = getElement('order[select]'); |
dd8de1ec PH |
197 | var index = sel.options[sel.selectedIndex].value; |
198 | ||
199 | actions_i = matches_i = 0; | |
200 | current_rule = filter[index]; | |
201 | ||
0aa1a917 PH |
202 | getElement('rule[id]').value = index; |
203 | getElement('rule[name]').value = current_rule.name; | |
693b6ec6 PH |
204 | var c = (current_rule.all ? '1' : '0'); |
205 | getElement('rule[all'+c+']').checked = true; | |
0aa1a917 | 206 | getElement('rule[block]').checked = current_rule.block; |
dd8de1ec | 207 | |
693b6ec6 | 208 | var mr = getElement('matchesRow'); |
dd8de1ec PH |
209 | cleanChilds(mr,0); |
210 | for(i=0; i<current_rule.matches.length; i++) | |
211 | createMatchRow(mr, current_rule.matches[i]); | |
212 | ||
693b6ec6 | 213 | var ar = getElement('actionsRow'); |
dd8de1ec PH |
214 | cleanChilds(ar,0); |
215 | for(i=0; i<current_rule.actions.length; i++) | |
216 | createActionRow(ar, current_rule.actions[i]); | |
217 | } | |
218 | ||
219 | /******************************************************************************** | |
220 | * $Id$ | |
221 | * vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100: | |
222 | ********************************************************************************/ |