2 LuCI - Lua Configuration Interface
4 Copyright 2008 Steven Barth <steven@midlink.org>
5 Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
11 http://www.apache.org/licenses/LICENSE-2.0
18 function cbi_d_add(field
, dep
, next
) {
19 var obj
= document
.getElementById(field
);
22 for (var i
=0; i
<cbi_d
.length
; i
++) {
23 if (cbi_d
[i
].id
== field
) {
32 "parent": obj
.parentNode
.id
,
42 function cbi_d_checkvalue(target
, ref
) {
43 var t
= document
.getElementById(target
);
51 if (t
.type
== "checkbox") {
52 value
= t
.checked
? value
: "";
59 function cbi_d_check(deps
) {
60 for (var i
=0; i
<deps
.length
; i
++) {
62 for (var j
in deps
[i
]) {
63 istat
= (istat
&& cbi_d_checkvalue(j
, deps
[i
][j
]))
71 function cbi_d_update() {
73 for (var i
=0; i
<cbi_d
.length
; i
++) {
75 var next
= document
.getElementById(entry
.next
)
76 var node
= document
.getElementById(entry
.id
)
77 var parent
= document
.getElementById(entry
.parent
)
79 if (node
&& node
.parentNode
&& !cbi_d_check(entry
.deps
)) {
80 node
.parentNode
.removeChild(node
);
81 state
= (state
|| !node
.parentNode
)
82 } else if ((!node
|| !node
.parentNode
) && cbi_d_check(entry
.deps
)) {
84 parent
.appendChild(entry
.node
);
86 next
.parentNode
.insertBefore(entry
.node
, next
);
88 state
= (state
|| (node
&& node
.parentNode
))
96 function cbi_bind(obj
, type
, callback
, mode
) {
97 if (typeof mode
== "undefined") {
100 if (!obj
.addEventListener
) {
101 ieCallback = function(){
102 var e
= window
.event
;
103 if (!e
.target
&& e
.srcElement
) {
104 e
.target
= e
.srcElement
;
106 e
.target
['_eCB' + type
+ callback
] = callback
;
107 e
.target
['_eCB' + type
+ callback
](e
);
108 e
.target
['_eCB' + type
+ callback
] = null;
110 obj
.attachEvent('on' + type
, ieCallback
);
112 obj
.addEventListener(type
, callback
, mode
);
117 function cbi_combobox(id
, values
, def
, man
) {
118 var selid
= "cbi.combobox." + id
;
119 if (document
.getElementById(selid
)) {
123 var obj
= document
.getElementById(id
)
124 var sel
= document
.createElement("select");
126 sel
.className
= 'cbi-input-select';
127 if (obj
.nextSibling
) {
128 obj
.parentNode
.insertBefore(sel
, obj
.nextSibling
);
130 obj
.parentNode
.appendChild(sel
);
133 if (!values
[obj
.value
]) {
134 if (obj
.value
== "") {
135 var optdef
= document
.createElement("option");
137 optdef
.appendChild(document
.createTextNode(def
));
138 sel
.appendChild(optdef
);
140 var opt
= document
.createElement("option");
141 opt
.value
= obj
.value
;
142 opt
.selected
= "selected";
143 opt
.appendChild(document
.createTextNode(obj
.value
));
144 sel
.appendChild(opt
);
148 for (var i
in values
) {
149 var opt
= document
.createElement("option");
152 if (obj
.value
== i
) {
153 opt
.selected
= "selected";
156 opt
.appendChild(document
.createTextNode(values
[i
]));
157 sel
.appendChild(opt
);
160 var optman
= document
.createElement("option");
162 optman
.appendChild(document
.createTextNode(man
));
163 sel
.appendChild(optman
);
165 obj
.style
.display
= "none";
167 cbi_bind(sel
, "change", function() {
168 if (sel
.selectedIndex
== sel
.options
.length
- 1) {
169 obj
.style
.display
= "inline";
170 sel
.parentNode
.removeChild(sel
);
173 obj
.value
= sel
.options
[sel
.selectedIndex
].value
;
178 function cbi_combobox_init(id
, values
, def
, man
) {
179 var obj
= document
.getElementById(id
);
180 cbi_bind(obj
, "blur", function() {
181 cbi_combobox(id
, values
, def
, man
)
183 cbi_combobox(id
, values
, def
, man
);
186 function cbi_filebrowser(id
, url
, defpath
) {
187 var field
= document
.getElementById(id
);
188 var browser
= window
.open(
189 url
+ ( field
.value
|| defpath
|| '' ) + '?field=' + id
,
190 "luci_filebrowser", "width=300,height=400,left=100,top=200,scrollbars=yes"
196 //Hijacks the CBI form to send via XHR (requires Prototype)
197 function cbi_hijack_forms(layer
, win
, fail
, load
) {
198 var forms
= layer
.getElementsByTagName('form');
199 for (var i
=0; i
<forms
.length
; i
++) {
200 $(forms
[i
]).observe('submit', function(event
) {
201 // Prevent the form from also submitting the regular way
205 event
.element().request({