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 ta_onfocus(obj
) {
10 obj
.setAttribute('rows', '10');
13 function ta_onblur(obj
) {
14 obj
.setAttribute('rows', '2');
17 function text_onfocus(object
,val
) {
18 if(object
.value
== val
)
22 function text_onblur(object
,val
) {
23 if(object
.value
== '')
27 function cleanChilds(Node
, nbChilds
) {
28 while(Node
.childNodes
.length
>nbChilds
)
29 Node
.removeChild(Node
.childNodes
[nbChilds
]);
32 function getElement(obj
, index
) {
33 if(document
.getElementById
)
34 return document
.getElementById(obj
);
36 return document
.all
[obj
];
39 /********** ORDER FORM FUNCTIONS **********/
42 form
= document
.forms
['order'];
43 select
= form
.elements
['order[select]'];
45 if(select
.selectedIndex
>1) {
46 i
= select
.selectedIndex
;
47 value1
= select
.options
[i
].value
;
48 text1
= select
.options
[i
].text
;
49 value2
= select
.options
[i
-1].value
;
50 text2
= select
.options
[i
-1].text
;
52 select
.options
[i
] = new Option(text2
,value2
,false,false);
53 select
.options
[i
-1] = new Option(text1
,value1
,false,false);
54 select
.selectedIndex
= i
-1;
56 form
.elements
['order['+value1
+']'].value
= i
-1;
57 form
.elements
['order['+value2
+']'].value
= i
;
62 form
= document
.forms
['order'];
63 select
= form
.elements
['order[select]'];
65 if(select
.selectedIndex
>0 && select
.selectedIndex
<select
.length
-1) {
66 i
= select
.selectedIndex
;
67 value1
= select
.options
[i
].value
;
68 text1
= select
.options
[i
].text
;
69 value2
= select
.options
[i
+1].value
;
70 text2
= select
.options
[i
+1].text
;
72 select
.options
[i
] = new Option(text2
,value2
,false,false);
73 select
.options
[i
+1] = new Option(text1
,value1
,false,false);
74 select
.selectedIndex
= i
+1;
76 form
.elements
['order['+value1
+']'].value
= i
+1;
77 form
.elements
['order['+value2
+']'].value
= i
;
81 function order_submit(obj
) {
82 if(obj
.name
== 'order[submit]')
83 obj
.form
.elements
['order[action]'].value
= 'submit';
84 if(obj
.name
== 'order[delete]')
85 obj
.form
.elements
['order[action]'].value
= 'delete';
89 /********** RULE FORM GLOBALS **********/
91 var matches_list
= new Array();
92 var matches_func
= new Array();
94 var actions_list
= new Array()
95 var actions_func
= new Array();
97 var mail_pool
= new Array();
98 var filter
= new Array();
105 /********** RULE.ACTION FORM FUNCTIONS **********/
107 function createActionSelect(data
,base
) {
109 var select
= document
.createElement("select");
110 select
.name
= base
+'[0]';
112 for(i
=0, j
=0; i
<actions_list
.length
; i
++)
114 select
.options
[j
++] = new Option(actions_list
[i
],i
,false,(data
==i
));
116 select
.setAttribute("onchange", "changeRow(this,actions_func)");
118 if(select
.selectedIndex
<0)
119 select
.selectedIndex
= 0;
123 function createActionRow(Node
,data
) {
124 var div
= document
.createElement("div");
125 div
.className
= 'row';
126 div
.name
= 'rule[actions]['+actions_i
+']';
128 Node
.appendChild(div
);
130 var del
= document
.createElement("input");
131 del
.setAttribute("type", "submit");
132 del
.setAttribute("value", "Del");
133 del
.setAttribute("onclick", "parentNode.parentNode.removeChild(parentNode)");
134 div
.appendChild(del
);
136 div
.appendChild(document
.createTextNode(" "));
138 var select
= createActionSelect(data
[0],div
.name
);
139 div
.appendChild(select
);
141 actions_func
[select
.options
[select
.selectedIndex
].value
](div
,data
);
144 function newAction() {
145 createActionRow(getElement('actionsRow'), [-1]);
148 /********** RULE.MATCH FORM FUNCTIONS **********/
150 function createMatchSelect(data
,base
) {
152 var select
= document
.createElement("select");
153 select
.name
= base
+'[0]';
155 for(i
=0, j
=0; i
<matches_list
.length
; i
++)
157 select
.options
[j
++] = new Option(matches_list
[i
],i
,false,(data
==i
));
159 select
.setAttribute("onchange", "changeRow(this,matches_func)");
161 if(select
.selectedIndex
<0)
162 select
.selectedIndex
= 0;
166 function createMatchRow(Node
,data
) {
167 var div
= document
.createElement("div");
168 div
.className
= 'row';
169 div
.name
= 'rule[matches]['+actions_i
+']';
171 Node
.appendChild(div
);
173 var del
= document
.createElement("input");
174 del
.setAttribute("type", "submit");
175 del
.setAttribute("value", "Del");
176 del
.setAttribute("onclick", "parentNode.parentNode.removeChild(parentNode)");
177 div
.appendChild(del
);
179 div
.appendChild(document
.createTextNode(" "));
181 var select
= createMatchSelect(data
[0],div
.name
);
182 div
.appendChild(select
);
184 matches_func
[select
.options
[select
.selectedIndex
].value
](div
,data
);
187 function newMatch() {
188 createMatchRow(getElement('matchesRow'), [-1]);
191 /********** RULE FORM FUNCTIONS **********/
193 function changeRow(sel
, funcs
) {
194 var row
= sel
.parentNode
;
196 funcs
[sel
.options
[sel
.selectedIndex
].value
](row
,0);
199 function createRuleForm() {
201 var sel
= getElement('order[select]');
202 var index
= sel
.options
[sel
.selectedIndex
].value
;
204 actions_i
= matches_i
= 0;
205 current_rule
= filter
[index
];
207 getElement('rule[id]').value
= index
;
208 getElement('rule[name]').value
= current_rule
.name
;
209 var c
= (current_rule
.all
? '1' : '0');
210 getElement('rule[all'+c
+']').checked
= true;
211 getElement('rule[block]').checked
= current_rule
.block
;
213 var mr
= getElement('matchesRow');
215 for(i
=0; i
<current_rule
.matches
.length
; i
++)
216 createMatchRow(mr
, current_rule
.matches
[i
]);
218 var ar
= getElement('actionsRow');
220 for(i
=0; i
<current_rule
.actions
.length
; i
++)
221 createActionRow(ar
, current_rule
.actions
[i
]);
224 /********************************************************************************
226 * vim: set expandtab shiftwidth=4 tabstop=4 softtabstop=4 textwidth=100:
227 ********************************************************************************/