DnD tasksList

pull/48/head
Alexandre Cloutier 2014-07-24 13:35:14 -04:00
parent 5de51e8aa1
commit c389630d76
2 changed files with 100 additions and 38 deletions

View File

@ -1535,9 +1535,14 @@ DIV#calendarContent .alert-box span {
border:1px solid #8ed9f6; border:1px solid #8ed9f6;
} }
DIV#dragDropVisual DIV#DnDVisualEvents
{ background-image: url(event7.png); }
DIV#DnDVisualTasks
{ background-image: url(task.png); }
DIV#DnDVisualEvents, DIV#DnDVisualTasks
{ {
background-image: url(event7.png);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 4px 2px; background-position: 4px 2px;
width: 5px; width: 5px;

View File

@ -174,6 +174,14 @@ function updateEventFromDraggingCallback(http) {
} }
} }
function updateTaskFromDraggingCallback(http) {
if (http.readyState == 4) {
if (http.status == 200) {
refreshTasks();
}
}
}
function getSelectedFolder() { function getSelectedFolder() {
var folder; var folder;
var list = $("calendarList"); var list = $("calendarList");
@ -1105,7 +1113,7 @@ function eventsListCallback(http) {
} }
} }
} }
configureDraggables(); configureEventsDraggables();
} }
else else
log ("eventsListCallback Ajax error"); log ("eventsListCallback Ajax error");
@ -1182,6 +1190,7 @@ function tasksListCallback(http) {
row.setAttribute("id", calendar + "-" + cname); row.setAttribute("id", calendar + "-" + cname);
//listItem.addClassName(data[i][5]); // Classification //listItem.addClassName(data[i][5]); // Classification
row.addClassName(data[i][12]); // status row.addClassName(data[i][12]); // status
row.addClassName("taskRow");
row.calendar = calendar; row.calendar = calendar;
row.cname = cname; row.cname = cname;
row.erasable = data[i][10] || IsSuperUser; row.erasable = data[i][10] || IsSuperUser;
@ -1272,7 +1281,10 @@ function tasksListCallback(http) {
} }
else else
log ("tasksListCallback: no data"); log ("tasksListCallback: no data");
} }
configureTasksDraggables();
} }
else else
log ("tasksListCallback Ajax error"); log ("tasksListCallback Ajax error");
@ -3101,12 +3113,30 @@ function onMenuAllDayView(event) {
popupMenu(event, 'allDayViewMenu', getTarget(event)); popupMenu(event, 'allDayViewMenu', getTarget(event));
} }
function configureDraggables() { function configureEventsDraggables() {
if ($("eventsList")) { if ($("eventsList")) {
var rows = jQuery("tr.eventRow"); var rows = jQuery("tr.eventRow");
try { rows.draggable("destroy"); } catch (e) {} try { rows.draggable("destroy"); } catch (e) {}
rows.draggable({ rows.draggable({
helper: function (event) { return '<div id="dragDropVisual"></div>'; }, helper: function (event) { return '<div id="DnDVisualEvents"></div>'; },
start: startDragging,
drag: whileDragging,
stop: stopDragging,
appendTo: 'body',
cursorAt: { right: 25 },
scroll: false,
distance: 4,
zIndex: 20
});
}
}
function configureTasksDraggables() {
if ($("tasksList")) {
var rows = jQuery("tr.taskRow");
try { rows.draggable("destroy"); } catch (e) {}
rows.draggable({
helper: function (event) { return '<div id="DnDVisualTasks"></div>'; },
start: startDragging, start: startDragging,
drag: whileDragging, drag: whileDragging,
stop: stopDragging, stop: stopDragging,
@ -3128,12 +3158,21 @@ function startDragging(event, ui) {
var row = event.target; var row = event.target;
var handle = ui.helper; var handle = ui.helper;
var events = $('eventsList').getSelectedRowsId(); var events = $('eventsList').getSelectedRowsId();
var count = events.length; var tasks = $('tasksList').getSelectedRowsId();
if (events.length > 0)
var count = events.length;
else
var count = tasks.length;
if (count == 0 || events.indexOf(row.id) < 0) { if (count == 0 || events.indexOf(row.id) < 0) {
onRowClick(event, $(row.id)); onRowClick(event, $(row.id));
events = $("eventsList").getSelectedRowsId(); events = $("eventsList").getSelectedRowsId();
count = events.length; tasks = $("tasksList").getSelectedRowsId();
if (events.length > 0)
var count = events.length;
else
var count = tasks.length;
} }
handle.html(count); handle.html(count);
@ -3151,48 +3190,66 @@ function stopDragging(event, ui) {
} }
function dropAction(event, ui) { function dropAction(event, ui) {
var events = $("eventsList").getSelectedRowsId();
var tasks = $("tasksList").getSelectedRowsId();
var action = "adjust"; if(events.length > 0 || tasks.length > 0)
refreshEventsAndDisplay(); dropSelectedItems(this.id.substr(1));
dropSelectedEvents(action, this.id.substr(1));
} }
function dropSelectedEvents(action, toId) { function dropSelectedItems(toId) {
var selectedCalendars = $("calendarList").getElementsByTagName("li"); var eventIds = $('eventsList').getSelectedRowsId();
if (selectedCalendars.length > 0) { var taskIds = $('tasksList').getSelectedRowsId();
var eventIds = $('eventsList').getSelectedRowsId(); var itemIds = {};
for (var i = 0; i < eventIds.length; i++) {
if (eventIds.length > 0) {
itemIds.data = eventIds;
itemIds.type = "events";
}
else {
itemIds.data = taskIds;
itemIds.type = "tasks";
}
for (var i = 0; i < itemIds.data.length; i++) {
// Find the event ID (.ics) // Find the event ID (.ics)
if (!eventIds[i].endsWith("ics")) { if (!itemIds.data[i].endsWith("ics")) {
// If it is a repeated event, substract the occurence part // If it is a repeated event, substract the occurence part
if (eventIds[i].indexOf(".ics")) { if (itemIds.data[i].indexOf(".ics")) {
var x = eventIds[i].indexOf(".ics") + 4; var x = eventIds[i].indexOf(".ics") + 4;
eventIds[i] = eventIds[i].substr(0,x); itemIds.data[i] = itemIds.data[i].substr(0,x);
}
else {
log("Can't find the event(.ics) on the item dragged : " + eventIds[i]);
return false;
}
} }
// Distinction between personal calendar and a calendar with a reference ID (ex: 4535-7545-B-5D3J) else {
if (eventIds[i].search(toId+"-") == -1) { log("Can't find the event(.ics) on the item dragged : " + eventIds[i]);
var x = eventIds[i].indexOf('-'); return false;
if (eventIds[i].indexOf('-') == 4) { }
var regEx = new RegExp(/\w+\-\w+\-\w+\-\w+/); }
var fromId = regEx.exec(eventIds[i]); // Distinction between personal calendar and a calendar with a reference ID (ex: 4535-7545-B-5D3J)
var eventICS = eventIds[i].substr(fromId[0].length + 1); if (itemIds.data[i].search(toId+"-") == -1) {
} var x = itemIds.data[i].indexOf('-');
else { if (itemIds.data[i].indexOf('-') == 4) {
var regEx = new RegExp(/\w+/); var regEx = new RegExp(/\w+\-\w+\-\w+\-\w+/);
var fromId = regEx.exec(eventIds[i]); var fromId = regEx.exec(itemIds.data[i]);
var eventICS = eventIds[i].substr(fromId[0].length + 1); var eventICS = itemIds.data[i].substr(fromId[0].length + 1);
} }
else {
var regEx = new RegExp(/\w+/);
var fromId = regEx.exec(itemIds.data[i]);
var eventICS = itemIds.data[i].substr(fromId[0].length + 1);
}
if (itemIds.type == "events") {
var destinationCalendar = "destination=" + toId; var destinationCalendar = "destination=" + toId;
var params = destinationCalendar + "&days=0&start=0&duration=0"; var params = destinationCalendar + "&days=0&start=0&duration=0";
var urlstr = ApplicationBaseURL + "/" + fromId + "/" + eventICS + "/adjust?" + params; var urlstr = ApplicationBaseURL + "/" + fromId + "/" + eventICS + "/adjust?" + params;
triggerAjaxRequest(urlstr, updateEventFromDraggingCallback); triggerAjaxRequest(urlstr, updateEventFromDraggingCallback);
} }
else if (itemIds.type == "tasks") {
var params = "moveToCalendar=" + toId;
var urlstr = ApplicationBaseURL + "/" + fromId + "/" + eventICS + "/saveAsTask?" + params;
triggerAjaxRequest(urlstr, updateTaskFromDraggingCallback);
}
} }
} }
} }