fixed bug when dragging non-start event segment from all-day slot to timed-slot in agenda view

This commit is contained in:
Adam Shaw 2011-02-15 21:45:34 -08:00
parent 075df1d144
commit 6823f382e0

View file

@ -354,6 +354,7 @@ function AgendaEventRenderer() {
function draggableDayEvent(event, eventElement, isStart) { function draggableDayEvent(event, eventElement, isStart) {
if (!opt('disableDragging') && eventElement.draggable) { if (!opt('disableDragging') && eventElement.draggable) {
var origWidth; var origWidth;
var revert;
var allDay=true; var allDay=true;
var dayDelta; var dayDelta;
var dis = opt('isRTL') ? -1 : 1; var dis = opt('isRTL') ? -1 : 1;
@ -370,9 +371,9 @@ function AgendaEventRenderer() {
hideEvents(event, eventElement); hideEvents(event, eventElement);
origWidth = eventElement.width(); origWidth = eventElement.width();
hoverListener.start(function(cell, origCell, rowDelta, colDelta) { hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
eventElement.draggable('option', 'revert', !cell || !rowDelta && !colDelta);
clearOverlays(); clearOverlays();
if (cell) { if (cell) {
revert = false;
dayDelta = colDelta * dis; dayDelta = colDelta * dis;
if (!cell.row) { if (!cell.row) {
// on full-days // on full-days
@ -383,28 +384,43 @@ function AgendaEventRenderer() {
resetElement(); resetElement();
}else{ }else{
// mouse is over bottom slots // mouse is over bottom slots
if (isStart && allDay) { if (isStart) {
// convert event to temporary slot-event if (allDay) {
eventElement.width(colWidth - 10); // don't use entire width // convert event to temporary slot-event
setOuterHeight( eventElement.width(colWidth - 10); // don't use entire width
eventElement, setOuterHeight(
slotHeight * Math.round( eventElement,
(event.end ? ((event.end - event.start) / MINUTE_MS) : opt('defaultEventMinutes')) slotHeight * Math.round(
/ opt('slotMinutes') (event.end ? ((event.end - event.start) / MINUTE_MS) : opt('defaultEventMinutes'))
) / opt('slotMinutes')
); )
eventElement.draggable('option', 'grid', [colWidth, 1]); );
allDay = false; eventElement.draggable('option', 'grid', [colWidth, 1]);
allDay = false;
}
}else{
revert = true;
} }
} }
revert = revert || (allDay && !dayDelta);
}else{
revert = true;
} }
eventElement.draggable('option', 'revert', revert);
}, ev, 'drag'); }, ev, 'drag');
}, },
stop: function(ev, ui) { stop: function(ev, ui) {
var cell = hoverListener.stop(); hoverListener.stop();
clearOverlays(); clearOverlays();
trigger('eventDragStop', eventElement, event, ev, ui); trigger('eventDragStop', eventElement, event, ev, ui);
if (cell && (!allDay || dayDelta)) { if (revert) {
// hasn't moved or is out of bounds (draggable has already reverted)
resetElement();
if ($.browser.msie) {
eventElement.css('filter', ''); // clear IE opacity side-effects
}
showEvents(event, eventElement);
}else{
// changed! // changed!
eventElement.find('a').removeAttr('href'); // prevents safari from visiting the link eventElement.find('a').removeAttr('href'); // prevents safari from visiting the link
var minuteDelta = 0; var minuteDelta = 0;
@ -415,13 +431,6 @@ function AgendaEventRenderer() {
- (event.start.getHours() * 60 + event.start.getMinutes()); - (event.start.getHours() * 60 + event.start.getMinutes());
} }
eventDrop(this, event, dayDelta, minuteDelta, allDay, ev, ui); eventDrop(this, event, dayDelta, minuteDelta, allDay, ev, ui);
}else{
// hasn't moved or is out of bounds (draggable has already reverted)
resetElement();
if ($.browser.msie) {
eventElement.css('filter', ''); // clear IE opacity side-effects
}
showEvents(event, eventElement);
} }
} }
}); });