webgui/www/extras/wobject/ProjectManager/taskEdit.js
Drake 5e7565d8df Major enhancement: add multiple-resource support for tasks in the project
management asset.  This should still integrate with the time tracker
properly, and the data migration across the schema change should be handled
by the upgrade script.
2006-09-06 22:37:00 +00:00

111 lines
3 KiB
JavaScript

var taskEdit_inited = 0;
var taskEdit_pending = null;
function taskEdit_getResourceListDiv() {
return document.getElementById('taskEdit_resourceList_div');
}
function taskEdit_searchPopup(url) {
window.open(url, null, 'status=1,toolbar=0,location=0,menubar=0,directories=0,resizable=1,height=350,width=400');
}
function taskEdit_getResources() {
var elts = taskEdit_getResourceListDiv().getElementsByTagName('input');
var resources = [];
for (var i = 0; i < elts.length; i++) {
if (elts[i].getAttribute('type') == 'hidden' &&
elts[i].getAttribute('name') == 'resources')
resources[i] = elts[i].getAttribute('value');
}
return resources;
}
function taskEdit_updateExclude(id, kind, resources) {
var elt = document.getElementById(id);
if (!elt) return;
var resourceIds = [];
for (var i = 0; i < resources.length; i++) {
var split = resources[i].split(' ', 2);
if (split[0] == kind)
resourceIds.push(split[1]);
}
var exclude = resourceIds.join(';');
var href = elt.getAttribute('href');
href = href.replace(/([?;&]exclude=)[^;&]*/, function(str, p1, offset, s) {
return p1 + encodeURIComponent(exclude);
});
elt.setAttribute('href', href);
}
function taskEdit_updateResources(resources) {
var div = taskEdit_getResourceListDiv();
var savedInnerHTML = div.innerHTML;
div.innerHTML = "<p>Please wait&#8230;</p>";
var component = encodeURIComponent(resources.join(';'));
var url = document.location.toString();
var queryIndex = url.indexOf('?');
if (queryIndex > -1) url = url.substr(0, queryIndex);
url += '?func=innerHtmlOfResources;resources=' + component;
taskEdit_updateExclude("taskEdit_resourceList_addUser_a", 'user', resources);
taskEdit_updateExclude("taskEdit_resourceList_addGroup_a", 'group', resources);
taskEdit_pending = [];
AjaxRequest.get({
'url' : url,
'onSuccess' : function(req) {
div.innerHTML = req.responseText;
taskEdit_doPending();
},
'onError' : function(req) {
// Buggo: need better error handling
div.innerHTML = savedInnerHTML;
taskEdit_doPending();
}
});
}
function taskEdit_doPending() {
for (var i = 0; i < taskEdit_pending.length; i++) {
taskEdit_pending[i]();
}
taskEdit_pending = null;
}
function taskEdit_addResource(kind, id) {
if (taskEdit_pending != null) {
taskEdit_pending.push(function() { taskEdit_addResource(kind, id) });
return;
}
var string = kind+' '+id;
var resources = taskEdit_getResources();
resources.push(string);
taskEdit_updateResources(resources);
}
function taskEdit_queueAddResource(kind, id) {
window.setTimeout(function() { taskEdit_addResource(kind, id) }, 0);
}
function taskEdit_deleteResource(kind, id) {
if (taskEdit_pending != null) {
taskEdit_pending.push(function() { taskEdit_deleteResource(kind, id) });
return;
}
var string = kind+' '+id;
var resources = taskEdit_getResources();
for (var i = 0; i < resources.length; i++) {
if (resources[i] == string) {
resources.splice(i, 1);
break;
}
}
taskEdit_updateResources(resources);
}