+/*
+ LuCI - Lua Configuration Interface
+
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2009 Jo-Philipp Wich <xm@subsignal.org>
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ $Id$
+*/
+
var cbi_d = [];
+var cbi_t = [];
+var cbi_c = [];
function cbi_d_add(field, dep, next) {
var obj = document.getElementById(field);
"deps": []
};
cbi_d.unshift(entry);
- }
+ }
entry.deps.push(dep)
}
}
function cbi_d_checkvalue(target, ref) {
var t = document.getElementById(target);
var value;
-
- if (!t || !t.value) {
+
+ if (!t) {
+ var tl = document.getElementsByName(target);
+
+ if( tl.length > 0 && tl[0].type == 'radio' )
+ for( var i = 0; i < tl.length; i++ )
+ if( tl[i].checked ) {
+ value = tl[i].value;
+ break;
+ }
+
+ value = value ? value : "";
+ } else if (!t.value) {
value = "";
} else {
value = t.value;
-
+
if (t.type == "checkbox") {
value = t.checked ? value : "";
}
}
-
+
return (value == ref)
}
function cbi_d_check(deps) {
+ var reverse;
+ var def = false;
for (var i=0; i<deps.length; i++) {
- var istat = true
+ var istat = true;
+ reverse = false;
for (var j in deps[i]) {
- istat = (istat && cbi_d_checkvalue(j, deps[i][j]))
+ if (j == "!reverse") {
+ reverse = true;
+ } else if (j == "!default") {
+ def = true;
+ istat = false;
+ } else {
+ istat = (istat && cbi_d_checkvalue(j, deps[i][j]))
+ }
}
if (istat) {
- return true
+ return !reverse;
}
- }
+ }
+ return def;
}
function cbi_d_update() {
if (node && node.parentNode && !cbi_d_check(entry.deps)) {
node.parentNode.removeChild(node);
- state = (state || !node.parentNode)
+ state = true;
+ if( entry.parent )
+ cbi_c[entry.parent]--;
} else if ((!node || !node.parentNode) && cbi_d_check(entry.deps)) {
if (!next) {
parent.appendChild(entry.node);
} else {
next.parentNode.insertBefore(entry.node, next);
- }
- state = (state || (node && node.parentNode))
+ }
+ state = true;
+ if( entry.parent )
+ cbi_c[entry.parent]++;
}
}
+
+ if (entry.parent) {
+ cbi_t_update();
+ }
+
if (state) {
cbi_d_update();
}
}
function cbi_combobox(id, values, def, man) {
- var selid = "cbi.combobox." + id
+ var selid = "cbi.combobox." + id;
if (document.getElementById(selid)) {
return
}
var obj = document.getElementById(id)
var sel = document.createElement("select");
- sel.id = selid
+ sel.id = selid;
+ sel.className = 'cbi-input-select';
if (obj.nextSibling) {
- obj.parentNode.insertBefore(sel, obj.nextSibling);
+ obj.parentNode.insertBefore(sel, obj.nextSibling);
} else {
obj.parentNode.appendChild(sel);
}
} else {
obj.value = sel.options[sel.selectedIndex].value;
}
+
+ try {
+ cbi_d_update();
+ } catch (e) {
+ //Do nothing
+ }
})
}
cbi_combobox(id, values, def, man)
});
cbi_combobox(id, values, def, man);
-}
\ No newline at end of file
+}
+
+function cbi_filebrowser(id, url, defpath) {
+ var field = document.getElementById(id);
+ var browser = window.open(
+ url + ( field.value || defpath || '' ) + '?field=' + id,
+ "luci_filebrowser", "width=300,height=400,left=100,top=200,scrollbars=yes"
+ );
+
+ browser.focus();
+}
+
+//Hijacks the CBI form to send via XHR (requires Prototype)
+function cbi_hijack_forms(layer, win, fail, load) {
+ var forms = layer.getElementsByTagName('form');
+ for (var i=0; i<forms.length; i++) {
+ $(forms[i]).observe('submit', function(event) {
+ // Prevent the form from also submitting the regular way
+ event.stop();
+
+ // Submit via XHR
+ event.element().request({
+ onSuccess: win,
+ onFailure: fail
+ });
+
+ if (load) {
+ load();
+ }
+ });
+ }
+}
+
+
+function cbi_t_add(section, tab) {
+ var t = document.getElementById('tab.' + section + '.' + tab);
+ var c = document.getElementById('container.' + section + '.' + tab);
+
+ if( t && c ) {
+ cbi_t[section] = (cbi_t[section] || [ ]);
+ cbi_t[section][tab] = { 'tab': t, 'container': c, 'cid': c.id };
+ }
+}
+
+function cbi_t_switch(section, tab) {
+ if( cbi_t[section] && cbi_t[section][tab] ) {
+ var o = cbi_t[section][tab];
+ var h = document.getElementById('tab.' + section);
+ for( var tid in cbi_t[section] ) {
+ var o2 = cbi_t[section][tid];
+ if( o.tab.id != o2.tab.id ) {
+ o2.tab.className = o2.tab.className.replace(/(^| )cbi-tab( |$)/, " cbi-tab-disabled ");
+ o2.container.style.display = 'none';
+ }
+ else {
+ if(h) h.value = tab;
+ o2.tab.className = o2.tab.className.replace(/(^| )cbi-tab-disabled( |$)/, " cbi-tab ");
+ o2.container.style.display = 'block';
+ }
+ }
+ }
+ return false
+}
+
+function cbi_t_update() {
+ for( var sid in cbi_t )
+ for( var tid in cbi_t[sid] )
+ if( cbi_c[cbi_t[sid][tid].cid] == 0 ) {
+ cbi_t[sid][tid].tab.style.display = 'none';
+ }
+ else if( cbi_t[sid][tid].tab && cbi_t[sid][tid].tab.style.display == 'none' ) {
+ cbi_t[sid][tid].tab.style.display = '';
+
+ var t = cbi_t[sid][tid].tab;
+ window.setTimeout(function() { t.className = t.className.replace(/ cbi-tab-highlighted/g, '') }, 750);
+ cbi_t[sid][tid].tab.className += ' cbi-tab-highlighted';
+ }
+}
+