200 lines
5.6 KiB
JavaScript
200 lines
5.6 KiB
JavaScript
// Really only used by the Template editor, but it doesn't belong in perl
|
|
// code. It's too long.
|
|
|
|
if ( typeof WebGUI == "undefined" ) {
|
|
WebGUI = {};
|
|
}
|
|
if ( typeof WebGUI.TemplateAttachments == "undefined" ) {
|
|
WebGUI.TemplateAttachments = {};
|
|
}
|
|
|
|
var addClick = (function() {
|
|
var uniqueId = 1;
|
|
var count = 0;
|
|
var urls = {};
|
|
var types = {};
|
|
var addAnchor = document.getElementById('addAnchor');
|
|
var displayTable = document.getElementById('attachmentDisplay');
|
|
|
|
var nodes = {
|
|
table: '',
|
|
index: 'Index',
|
|
type: 'Type',
|
|
url: 'Url'
|
|
};
|
|
|
|
function init() {
|
|
displayTable.style.display = 'none';
|
|
|
|
for (var k in nodes) {
|
|
var id = 'addBox' + nodes[k];
|
|
nodes[k] = document.getElementById(id);
|
|
}
|
|
|
|
var opts = nodes.type.options;
|
|
for (var i = 0; i < opts.length; i++) {
|
|
var o = opts[i];
|
|
types[o.value] = o.text;
|
|
}
|
|
|
|
var query = YAHOO.util.Dom.getElementsByClassName;
|
|
var existing = query('existingAttachment', 'tr');
|
|
for (var i = 0; i < existing.length; i++) {
|
|
var node = existing[i];
|
|
var d = {
|
|
index: query('index', 'td', node)[0].innerHTML,
|
|
type: query('type', 'td', node)[0].innerHTML,
|
|
url: query('url', 'td', node)[0].innerHTML
|
|
};
|
|
add(d);
|
|
node.parentNode.removeChild(node);
|
|
}
|
|
}
|
|
|
|
// When an original box gets changed
|
|
function updater(u) {
|
|
return function() {
|
|
obj = urls[u];
|
|
nameFields(u);
|
|
};
|
|
}
|
|
|
|
// Give the fields for an attachment entry some names so that they'll get
|
|
// posted to the backend.
|
|
function nameFields(u) {
|
|
var id = uniqueId++;
|
|
var obj = urls[u];
|
|
if (!obj.index.name) {
|
|
obj.index.name = 'attachmentIndex' + id;
|
|
}
|
|
if (!obj.type.name) {
|
|
obj.type.name = 'attachmentType' + id;
|
|
}
|
|
if (!obj.url.name) {
|
|
obj.url.name = 'attachmentUrl' + id;
|
|
}
|
|
}
|
|
|
|
// Make a function which will remove an attachment (remove the table row
|
|
// and insertHidden if necesary)
|
|
function remover(u) {
|
|
return function() {
|
|
var tr = urls[u].tr;
|
|
|
|
tr.parentNode.removeChild(tr);
|
|
delete urls[u];
|
|
|
|
if (--count == 0) {
|
|
displayTable.style.display = 'none';
|
|
}
|
|
};
|
|
}
|
|
|
|
// Add a new attachment (proper table row, etc). Attachments that already
|
|
// existed (originals) will have unnamed fields so they don't get posted
|
|
// to the backend.
|
|
function add(d) {
|
|
if (urls[d.url]) {
|
|
alert(WebGUI.TemplateAttachments.i18n.get('Asset_Template','Already attached!'));
|
|
return;
|
|
}
|
|
|
|
if (++count == 1) {
|
|
displayTable.style.display = 'block';
|
|
}
|
|
|
|
var index = document.createElement('input');
|
|
index.size = 2;
|
|
index.value = d.index;
|
|
|
|
var type = document.createElement('select');
|
|
|
|
for (var k in types) {
|
|
var o = document.createElement('option');
|
|
o.value = k;
|
|
o.text = types[k];
|
|
if (k == d.type) {
|
|
o.selected = true;
|
|
}
|
|
type.appendChild(o);
|
|
}
|
|
|
|
var url = document.createElement('input');
|
|
url.size = 40;
|
|
|
|
var update = updater(d.url);
|
|
url.value = d.url;
|
|
url.oldValue = d.url;
|
|
url.onchange = function() {
|
|
var newValue = url.value;
|
|
var oldValue = url.oldValue;
|
|
if (urls[newValue]) {
|
|
url.value = oldValue;
|
|
alert(WebGUI.TemplateAttachments.i18n.get('Asset_Template','Already attached!'));
|
|
}
|
|
else {
|
|
url.oldValue = newValue;
|
|
var d = urls[oldValue];
|
|
update();
|
|
|
|
delete urls[oldValue];
|
|
urls[newValue] = d;
|
|
}
|
|
};
|
|
|
|
var btn = document.createElement('input');
|
|
btn.type = 'button';
|
|
btn.value = WebGUI.TemplateAttachments.i18n.get('Asset_Template','attachment header remove');
|
|
btn.onclick = remover(d.url);
|
|
|
|
var tr = document.createElement('tr');
|
|
var data = [index, type, url, btn];
|
|
for (var i = 0; i < data.length; i++) {
|
|
var td = document.createElement('td');
|
|
td.appendChild(data[i]);
|
|
tr.appendChild(td);
|
|
}
|
|
|
|
urls[d.url] = {
|
|
tr : tr,
|
|
index : index,
|
|
type : type,
|
|
url : url
|
|
};
|
|
|
|
nameFields(d.url);
|
|
|
|
addAnchor.appendChild(tr);
|
|
}
|
|
|
|
if ( typeof WebGUI.TemplateAttachments.i18n == "undefined" ) {
|
|
WebGUI.TemplateAttachments.i18n = new WebGUI.i18n( {
|
|
namespaces : {
|
|
'Asset_Template' : [
|
|
"attachment header remove",
|
|
"Already attached!",
|
|
"No url!"
|
|
]
|
|
},
|
|
onpreload : {
|
|
fn : init
|
|
}
|
|
} );
|
|
}
|
|
|
|
return function() {
|
|
var d = {
|
|
index: nodes.index.value,
|
|
type: nodes.type.value,
|
|
url: nodes.url.value
|
|
};
|
|
|
|
d.url = d.url.replace(/^\s+|\s+$/g, '');
|
|
if (d.url == '') {
|
|
alert(WebGUI.TemplateAttachments.i18n.get('Asset_Template','No url!'));
|
|
return;
|
|
}
|
|
add(d);
|
|
nodes.url.value = '';
|
|
};
|
|
})();
|