libs/web: readd add/remove icons to dynamic list widgets

This commit is contained in:
Jo-Philipp Wich 2011-01-23 18:28:35 +00:00
parent e20ac8fed4
commit 2ae8c99606
2 changed files with 58 additions and 7 deletions

View file

@ -402,16 +402,24 @@ function cbi_filebrowser(id, url, defpath) {
browser.focus(); browser.focus();
} }
function cbi_dynlist_init(name) function cbi_dynlist_init(name, respath)
{ {
function cbi_dynlist_renumber(e) function cbi_dynlist_renumber(e)
{ {
var count = 1; /* in a perfect world, we could just getElementsByName() - but not if
var childs = e.parentNode.childNodes; * MSIE is involved... */
var inputs = [ ]; // = document.getElementsByName(name);
for (var i = 0; i < e.parentNode.childNodes.length; i++)
if (e.parentNode.childNodes[i].name == name)
inputs.push(e.parentNode.childNodes[i]);
for( var i = 0; i < childs.length; i++ ) for (var i = 0; i < inputs.length; i++)
if( childs[i].name == name ) {
childs[i].id = name + '.' + (count++); inputs[i].id = name + '.' + (i + 1);
inputs[i].nextSibling.src = respath + (
(i+1) < inputs.length ? '/cbi/remove.gif' : '/cbi/add.gif'
);
}
e.focus(); e.focus();
} }
@ -480,6 +488,7 @@ function cbi_dynlist_init(name)
if (se.value.length == 0 && jump) if (se.value.length == 0 && jump)
{ {
se.parentNode.removeChild(se.nextSibling.nextSibling);
se.parentNode.removeChild(se.nextSibling); se.parentNode.removeChild(se.nextSibling);
se.parentNode.removeChild(se); se.parentNode.removeChild(se);
@ -488,6 +497,9 @@ function cbi_dynlist_init(name)
if (ev.preventDefault) if (ev.preventDefault)
ev.preventDefault(); ev.preventDefault();
/* IE Quirk, needs double focus somehow */
jump.focus();
return false; return false;
} }
@ -499,17 +511,22 @@ function cbi_dynlist_init(name)
n.name = se.name; n.name = se.name;
n.type = se.type; n.type = se.type;
var b = document.createElement('img');
cbi_bind(n, 'keydown', cbi_dynlist_keydown); cbi_bind(n, 'keydown', cbi_dynlist_keydown);
cbi_bind(n, 'keypress', cbi_dynlist_keypress); cbi_bind(n, 'keypress', cbi_dynlist_keypress);
cbi_bind(b, 'click', cbi_dynlist_btnclick);
if (next) if (next)
{ {
se.parentNode.insertBefore(n, next); se.parentNode.insertBefore(n, next);
se.parentNode.insertBefore(b, next);
se.parentNode.insertBefore(document.createElement('br'), next); se.parentNode.insertBefore(document.createElement('br'), next);
} }
else else
{ {
se.parentNode.appendChild(n); se.parentNode.appendChild(n);
se.parentNode.appendChild(b);
se.parentNode.appendChild(document.createElement('br')); se.parentNode.appendChild(document.createElement('br'));
} }
@ -540,11 +557,45 @@ function cbi_dynlist_init(name)
return true; return true;
} }
function cbi_dynlist_btnclick(ev)
{
ev = ev ? ev : window.event;
var se = ev.target ? ev.target : ev.srcElement;
if (se.src.indexOf('remove') > -1)
{
se.previousSibling.value = '';
cbi_dynlist_keydown({
target: se.previousSibling,
keyCode: 8
});
}
else
{
cbi_dynlist_keydown({
target: se.previousSibling,
keyCode: 13
});
}
return false;
}
var inputs = document.getElementsByName(name); var inputs = document.getElementsByName(name);
for( var i = 0; i < inputs.length; i++ ) for( var i = 0; i < inputs.length; i++ )
{ {
var btn = document.createElement('img');
btn.src = respath + (
(i+1) < inputs.length ? '/cbi/remove.gif' : '/cbi/add.gif'
);
inputs[i].parentNode.insertBefore(btn, inputs[i].nextSibling);
cbi_bind(inputs[i], 'keydown', cbi_dynlist_keydown); cbi_bind(inputs[i], 'keydown', cbi_dynlist_keydown);
cbi_bind(inputs[i], 'keypress', cbi_dynlist_keypress); cbi_bind(inputs[i], 'keypress', cbi_dynlist_keypress);
cbi_bind(btn, 'click', cbi_dynlist_btnclick);
} }
} }

View file

@ -27,7 +27,7 @@ $Id$
<% end end %> <% end end %>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
cbi_dynlist_init('<%=cbid%>'); cbi_dynlist_init('<%=cbid%>', '<%=resource%>');
<% if self.datatype then -%> <% if self.datatype then -%>
<% if #self.keylist > 0 then -%> <% if #self.keylist > 0 then -%>
cbi_combobox_init('<%=cbid .. "." .. i%>', { cbi_combobox_init('<%=cbid .. "." .. i%>', {