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