Added UI to remove multiple config options on config.html

This commit is contained in:
Anders Betnér 2006-05-16 23:12:40 +00:00
parent 95f5d64b96
commit 733f7fffef

View File

@ -111,75 +111,70 @@ var Config = {
} }
}, },
_buildItem: function(section,itemId) { _buildItem: function(section,itemId) {
var ret; var frag = document.createDocumentFragment();
var href; var href;
var span; var span;
var item = ConfigXML.getOption(section,itemId); var item = ConfigXML.getOption(section,itemId);
var postId = item.config_section + ':' + itemId; var postId = item.config_section + ':' + itemId;
var inputSize = 80;
var noBrowse = false;
switch(item.type) { switch(item.type) {
case 'short_text': case 'short_text':
ret = BuildElement.input(postId, inputSize = 20;
item.name, // Yes, we're falling through
Config._getConfigOptionValue(itemId),20,
item.short_description,
'');
break;
case 'long_text': case 'long_text':
ret = BuildElement.input(postId, frag.appendChild(BuildElement.input(postId,
item.name, item.name,
Config._getConfigOptionValue(itemId),80, Config._getConfigOptionValue(itemId),
inputSize,
item.short_description, item.short_description,
''); ''));
frag.appendChild(Builder.node('br'));
break; break;
case 'short_text_multiple': case 'short_text_multiple':
ret = document.createDocumentFragment(); inputSize = 20;
Config._getConfigOptionValue(itemId,true).each(function (value,i) { noBrowse = true;
var span = document.createElement('span'); // Yes, we're falling through
span.appendChild(BuildElement.input(postId+i,
item.name,
value,20,
item.short_description
));
ret.appendChild(span);
});
href = Builder.node('a',{href:'javascript://',className:'addItemHref'},
item.add_item_text);
ret.appendChild(href);
Event.observe(href,'click',Config._addItem);
ret.appendChild(Builder.node('div',{style:'clear: both'}));
break;
case 'long_text_multiple': case 'long_text_multiple':
//###TODO Do something smart instead of just copying
ret = document.createDocumentFragment();
Config._getConfigOptionValue(itemId,true).each(function (value,i) { Config._getConfigOptionValue(itemId,true).each(function (value,i) {
var span = document.createElement('span'); var span = document.createElement('span');
span.appendChild(BuildElement.input(postId+i, span.appendChild(BuildElement.input(postId+i,
item.name, item.name,
value,80, value,inputSize,
item.short_description item.short_description
)); ));
ret.appendChild(span); if (!noBrowse) {
href = Builder.node('a',{href: 'javascript://'},'Browse');
Event.observe(href,'click',Config._browse);
span.appendChild(href);
}
span.appendChild(document.createTextNode('\u00a0\u00a0'));
href = Builder.node('a',{href: 'javascript://'},'Remove');
Event.observe(href,'click',Config._removeItem);
span.appendChild(href);
span.appendChild(Builder.node('br'));
frag.appendChild(span);
}); });
href = Builder.node('a',{href:'javascript://',className:'addItemHref'}, href = Builder.node('a',{href:'javascript://',className:'addItemHref'},
item.add_item_text); item.add_item_text);
ret.appendChild(href); frag.appendChild(href);
Event.observe(href,'click',Config._addItem); Event.observe(href,'click',Config._addItem);
ret.appendChild(Builder.node('div',{style:'clear: both'})); frag.appendChild(Builder.node('div',{style:'clear: both'}));
break; break;
case 'select': case 'select':
var value = Config._getConfigOptionValue(itemId); var value = Config._getConfigOptionValue(itemId);
if (!value) { if (!value) {
value = item.default_value; value = item.default_value;
} }
ret = BuildElement.select(postId, frag.appendChild(BuildElement.select(postId,
item.name, item.name,
item.options, item.options,
value, value,
item.short_description item.short_description));
); frag.appendChild(Builder.node('br'));
break; break;
} }
return ret; return frag;
}, },
_addItem: function(e) { _addItem: function(e) {
var span = Event.element(e); var span = Event.element(e);
@ -191,10 +186,34 @@ var Config = {
span.getElementsByTagName('label')[0].setAttribute('for','hej'); span.getElementsByTagName('label')[0].setAttribute('for','hej');
span.getElementsByTagName('input')[0].id = 'hej'; span.getElementsByTagName('input')[0].id = 'hej';
span.getElementsByTagName('input')[0].value = ''; span.getElementsByTagName('input')[0].value = '';
var hrefs = span.getElementsByTagName('a');
if ('Netscape' == navigator.appName) {
// Firefox et al doesn't copy registered events on an element deep clone
// Don't know if that is w3c or if IE has it right
if (hrefs.legth == 1) {
Event.observe(hrefs[0],'click',Config._removeItem);
} else {
Event.observe(hrefs[0],'click',Config._browse);
Event.observe(hrefs[1],'click',Config._removeItem);
}
}
var src = Event.element(e); var src = Event.element(e);
src.parentNode.insertBefore(span,src); src.parentNode.insertBefore(span,src);
},
_removeItem: function(e) {
var span = Event.element(e);
while (span.nodeName.toLowerCase() != 'span') {
span = span.parentNode;
}
if ((span.previousSibling && span.previousSibling.nodeName.toLowerCase() == 'span')||
(span.nextSibling.nodeName.toLowerCase() == 'span')) {
Element.remove(span);
} else {
span.getElementsByTagName('input')[0].value='';
}
},
_browse: function(e) {
alert('Browse directories');
} }
} }
var BuildElement = { var BuildElement = {
@ -211,7 +230,6 @@ var BuildElement = {
value: value,size: size})); value: value,size: size}));
frag.appendChild(document.createTextNode('\u00a0')); frag.appendChild(document.createTextNode('\u00a0'));
frag.appendChild(document.createTextNode(short_description)); frag.appendChild(document.createTextNode(short_description));
frag.appendChild(Builder.node('br'));
return frag; return frag;
}, },
@ -231,7 +249,6 @@ var BuildElement = {
frag.appendChild(select); frag.appendChild(select);
frag.appendChild(document.createTextNode('\u00a0')); frag.appendChild(document.createTextNode('\u00a0'));
frag.appendChild(document.createTextNode(short_description)); frag.appendChild(document.createTextNode(short_description));
frag.appendChild(Builder.node('br'));
return frag; return frag;
} }