for the configuration of our server that refuses to pick files into
[old-projects.git] / philter / philter / philter.js
CommitLineData
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
9function text_onfocus(object,val) {
10 if(object.value == val)
11 object.value = '';
12}
13
14function text_onblur(object,val) {
15 if(object.value == '')
16 object.value = val;
17}
18
19function cleanChilds(Node, nbChilds) {
20 while(Node.childNodes.length>nbChilds)
21 Node.removeChild(Node.childNodes[nbChilds]);
22}
23
693b6ec6
PH
24function 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
34function 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
54function 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
74function 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
84var matches_list = new Array();
85var matches_func = new Array();
86
87var actions_list = new Array()
88var actions_func = new Array();
89
90var mail_pool = new Array();
91var filter = new Array();
92
93var current_rule;
94
95var actions_i = 0;
96var matches_i = 0;
97
98/********** RULE.ACTION FORM FUNCTIONS **********/
99
100function 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
117function 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
138function newAction() {
693b6ec6 139 createActionRow(getElement('actionsRow'), [-1]);
dd8de1ec
PH
140}
141
142/********** RULE.MATCH FORM FUNCTIONS **********/
143
144function 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
161function 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
182function newMatch() {
693b6ec6 183 createMatchRow(getElement('matchesRow'), [-1]);
dd8de1ec
PH
184}
185
186/********** RULE FORM FUNCTIONS **********/
187
188function changeRow(sel, funcs) {
189 var row = sel.parentNode;
190 cleanChilds(row,3);
191 funcs[sel.options[sel.selectedIndex].value](row,0);
192}
193
194function 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********************************************************************************/