99 lines
2.4 KiB
HTML
Raw Normal View History

2018-01-11 17:38:01 -06:00
<%#
Copyright (C) 2017 Jian Chang <aa65535@live.com>
Licensed to the public under the GNU General Public License v3.
-%>
<%+cbi/valueheader%>
<%-
local values = self:formvalue(section)
if not values then
values = self:cfgvalue(section) or {self.default}
end
local function serialize_json(x, cb)
local rv, push = nil, cb
if not push then
rv = { }
push = function(tok) rv[#rv+1] = tok end
end
if x == nil then
push("null")
elseif type(x) == "table" then
push("[")
for k = 1, #x do
if k > 1 then
push(",")
end
serialize_json(x[k], push)
end
push("]")
else
push('"%s"' % tostring(x):gsub('["%z\1-\31\\]',
function(c) return '\\u%04x' % c:byte(1) end))
end
if not cb then
return table.concat(rv, "")
end
end
-%>
<div<%=attr("id", cbid .. ".value.field")%>></div>
<script type="text/javascript">//<![CDATA[
(function() {
var values = <%=serialize_json(values)%>;
var keylist = <%=serialize_json(self.keylist)%>;
var vallist = <%=serialize_json(self.vallist)%>;
var parent = document.getElementById("<%=cbid%>.value.field");
var dynamiclist_cbi_init = function() {
while (parent.firstChild) {
parent.removeChild(parent.firstChild);
}
for (var i = 0; i < values.length; i++) {
var sel = document.createElement("select");
sel.id = "<%=cbid%>." + (i + 1);
sel.name = "<%=cbid%>";
sel.index = i;
sel.className = "cbi-input-select";
sel.onchange = function() {
values[this.index] = this.value;
};
parent.appendChild(sel);
for (var j = 0; j < keylist.length; j++) {
var opt = document.createElement("option");
opt.value = keylist[j];
if (opt.value == values[i]) {
opt.selected = "selected";
}
opt.appendChild(document.createTextNode(vallist[j]));
sel.appendChild(opt);
}
var btn = document.createElement('img');
btn.src = "<%=resource%>" + ((i + 1) < values.length ? "/cbi/remove.gif" : "/cbi/add.gif");
btn.index = i;
btn.className = 'cbi-image-button';
btn.onclick = function() {
if (this.src.indexOf('remove') > -1) {
values.splice(this.index, 1);
} else {
values.push("<%=self.default%>");
}
dynamiclist_cbi_init();
return false;
};
parent.appendChild(btn);
parent.appendChild(document.createElement('br'));
}
};
dynamiclist_cbi_init();
}());
//]]></script>
<%+cbi/valuefooter%>