1 /********************************************************************************
2 * include/philter.js : philter javascript functions
5 * This file is part of the philter distribution
6 * Copyright: See COPYING files that comes with this distribution
7 ********************************************************************************/
9 function text_onfocus(object
,val
) {
10 if(object
.value
== val
)
14 function text_onblur(object
,val
) {
15 if(object
.value
== '')
19 function cleanChilds(Node
, nbChilds
) {
20 while(Node
.childNodes
.length
>nbChilds
)
21 Node
.removeChild(Node
.childNodes
[nbChilds
]);
24 function getElement(obj
, index
) {
25 if(document
.getElementById
)
26 return document
.getElementById(obj
);
28 return document
.all
[obj
];
31 /********** ORDER FORM FUNCTIONS **********/
34 form
= document
.forms
['order'];
35 select
= form
.elements
['order[select]'];
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
;
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;
48 form
.elements
['order['+value1
+']'].value
= i
-1;
49 form
.elements
['order['+value2
+']'].value
= i
;
54 form
= document
.forms
['order'];
55 select
= form
.elements
['order[select]'];
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
;
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;
68 form
.elements
['order['+value1
+']'].value
= i
+1;
69 form
.elements
['order['+value2
+']'].value
= i
;
73 function 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';
81 /********** RULE FORM GLOBALS **********/
83 var matches_list
= new Array();
84 var matches_func
= new Array();
86 var actions_list
= new Array()
87 var actions_func
= new Array();
89 var mail_pool
= new Array();
90 var filter
= new Array();
97 /********** RULE.ACTION FORM FUNCTIONS **********/
99 function createActionSelect(data
,base
) {
101 var select
= document
.createElement("select");
103 select
.name
= base
+'[0]';
105 for(i
=0, j
=0; i
<actions_list
.length
; i
++) {
107 if(actions_list
[i
]) select
.options
[j
++] = new Option(actions_list
[i
],i
,false,(data
==i
));
110 select
.selectedIndex
= sel
;
111 select
.onchange
= function () { changeRow(this,actions_func
); };
116 function createActionRow(Node
,data
) {
117 var div
= document
.createElement("div");
118 div
.className
= 'row';
119 div
.name
= 'rule[actions]['+actions_i
+']';
121 Node
.appendChild(div
);
123 var del
= document
.createElement("input");
124 del
.setAttribute("type", "submit");
125 del
.setAttribute("value", "Del");
126 del
.onclick
= function () { del
.parentNode
.parentNode
.removeChild(del
.parentNode
); };
127 div
.appendChild(del
);
129 div
.appendChild(document
.createTextNode(" "));
131 var select
= createActionSelect(data
[0],div
.name
);
132 div
.appendChild(select
);
134 actions_func
[select
.options
[select
.selectedIndex
].value
](div
,data
);
137 function newAction() {
138 createActionRow(getElement('actionsRow'), [-1]);
141 /********** RULE.MATCH FORM FUNCTIONS **********/
143 function createMatchSelect(data
,base
) {
145 var select
= document
.createElement("select");
147 select
.name
= base
+'[0]';
149 for(i
=0, j
=0; i
<matches_list
.length
; i
++) {
151 if(matches_list
[i
]) select
.options
[j
++] = new Option(matches_list
[i
],i
,false,(data
==i
));
154 select
.selectedIndex
= sel
;
155 select
.onchange
= function () { changeRow(this,matches_func
); };
160 function createMatchRow(Node
,data
) {
161 var div
= document
.createElement("div");
162 div
.className
= 'row';
163 div
.name
= 'rule[matches]['+actions_i
+']';
165 Node
.appendChild(div
);
167 var del
= document
.createElement("input");
168 del
.setAttribute("type", "submit");
169 del
.setAttribute("value", "Del");
170 del
.onclick
= function () { del
.parentNode
.parentNode
.removeChild(del
.parentNode
); };
171 div
.appendChild(del
);
173 div
.appendChild(document
.createTextNode(" "));
175 var select
= createMatchSelect(data
[0],div
.name
);
176 div
.appendChild(select
);
178 matches_func
[select
.options
[select
.selectedIndex
].value
](div
,data
);
181 function newMatch() {
182 createMatchRow(getElement('matchesRow'), [-1]);
185 /********** RULE FORM FUNCTIONS **********/
187 function changeRow(sel
, funcs
) {
188 var row
= sel
.parentNode
;
190 funcs
[sel
.options
[sel
.selectedIndex
].value
](row
,0);
193 function createRuleForm() {
195 var sel
= getElement('order[select]');
196 var index
= sel
.options
[sel
.selectedIndex
].value
;
198 actions_i
= matches_i
= 0;
199 current_rule
= filter
[index
];
201 getElement('rule[id]').value
= index
;
202 getElement('rule[name]').value
= current_rule
.name
;
203 var c
= (current_rule
.all
? '1' : '0');
204 getElement('rule[all'+c
+']').checked
= true;
205 getElement('rule[block]').checked
= current_rule
.block
;
207 var mr
= getElement('matchesRow');
209 for(i
=0; i
<current_rule
.matches
.length
; i
++)
210 createMatchRow(mr
, current_rule
.matches
[i
]);
212 var ar
= getElement('actionsRow');
214 for(i
=0; i
<current_rule
.actions
.length
; i
++)
215 createActionRow(ar
, current_rule
.actions
[i
]);
218 /********************************************************************************
220 * vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100:
221 ********************************************************************************/