2010-09-19 07:54:35 +02:00
|
|
|
|
|
|
|
function DayEventRenderer() {
|
|
|
|
var t = this;
|
|
|
|
|
|
|
|
|
|
|
|
// exports
|
|
|
|
t.renderDaySegs = renderDaySegs;
|
|
|
|
t.resizableDayEvent = resizableDayEvent;
|
|
|
|
|
|
|
|
|
|
|
|
// imports
|
|
|
|
var opt = t.opt;
|
|
|
|
var trigger = t.trigger;
|
2011-02-20 00:47:23 +01:00
|
|
|
var isEventDraggable = t.isEventDraggable;
|
|
|
|
var isEventResizable = t.isEventResizable;
|
2010-11-10 07:54:41 +01:00
|
|
|
var eventEnd = t.eventEnd;
|
2010-09-19 07:54:35 +02:00
|
|
|
var reportEventElement = t.reportEventElement;
|
|
|
|
var showEvents = t.showEvents;
|
|
|
|
var hideEvents = t.hideEvents;
|
|
|
|
var eventResize = t.eventResize;
|
|
|
|
var getRowCnt = t.getRowCnt;
|
|
|
|
var getColCnt = t.getColCnt;
|
|
|
|
var getColWidth = t.getColWidth;
|
2011-01-24 08:10:25 +01:00
|
|
|
var allDayRow = t.allDayRow;
|
2010-09-19 07:54:35 +02:00
|
|
|
var allDayBounds = t.allDayBounds;
|
|
|
|
var colContentLeft = t.colContentLeft;
|
|
|
|
var colContentRight = t.colContentRight;
|
|
|
|
var dayOfWeekCol = t.dayOfWeekCol;
|
2010-11-10 07:54:41 +01:00
|
|
|
var dateCell = t.dateCell;
|
|
|
|
var compileDaySegs = t.compileDaySegs;
|
2010-09-19 07:54:35 +02:00
|
|
|
var getDaySegmentContainer = t.getDaySegmentContainer;
|
|
|
|
var bindDaySeg = t.bindDaySeg; //TODO: streamline this
|
|
|
|
var formatDates = t.calendar.formatDates;
|
2010-11-10 07:54:41 +01:00
|
|
|
var renderDayOverlay = t.renderDayOverlay;
|
|
|
|
var clearOverlays = t.clearOverlays;
|
|
|
|
var clearSelection = t.clearSelection;
|
2010-09-19 07:54:35 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Rendering
|
|
|
|
-----------------------------------------------------------------------------*/
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
|
2010-09-19 07:54:35 +02:00
|
|
|
function renderDaySegs(segs, modifiedEventId) {
|
2010-11-10 07:54:41 +01:00
|
|
|
var segmentContainer = getDaySegmentContainer();
|
|
|
|
var rowDivs;
|
2010-11-15 07:12:31 +01:00
|
|
|
var rowCnt = getRowCnt();
|
|
|
|
var colCnt = getColCnt();
|
|
|
|
var i = 0;
|
2010-11-10 07:54:41 +01:00
|
|
|
var rowI;
|
|
|
|
var levelI;
|
2010-11-15 07:12:31 +01:00
|
|
|
var colHeights;
|
|
|
|
var j;
|
2010-11-10 07:54:41 +01:00
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
2010-11-15 07:12:31 +01:00
|
|
|
var top;
|
|
|
|
var k;
|
2010-11-10 07:54:41 +01:00
|
|
|
segmentContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
|
|
|
|
daySegElementResolve(segs, segmentContainer.children());
|
|
|
|
daySegElementReport(segs);
|
|
|
|
daySegHandlers(segs, segmentContainer, modifiedEventId);
|
|
|
|
daySegCalcHSides(segs);
|
|
|
|
daySegSetWidths(segs);
|
|
|
|
daySegCalcHeights(segs);
|
|
|
|
rowDivs = getRowDivs();
|
|
|
|
// set row heights, calculate event tops (in relation to row top)
|
2010-11-15 07:12:31 +01:00
|
|
|
for (rowI=0; rowI<rowCnt; rowI++) {
|
|
|
|
levelI = 0;
|
|
|
|
colHeights = [];
|
|
|
|
for (j=0; j<colCnt; j++) {
|
|
|
|
colHeights[j] = 0;
|
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
while (i<segCnt && (seg = segs[i]).row == rowI) {
|
2010-11-15 07:12:31 +01:00
|
|
|
// loop through segs in a row
|
|
|
|
top = arrayMax(colHeights.slice(seg.startCol, seg.endCol));
|
2010-11-10 07:54:41 +01:00
|
|
|
seg.top = top;
|
2010-11-15 07:12:31 +01:00
|
|
|
top += seg.outerHeight;
|
|
|
|
for (k=seg.startCol; k<seg.endCol; k++) {
|
|
|
|
colHeights[k] = top;
|
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
i++;
|
|
|
|
}
|
2010-11-15 07:12:31 +01:00
|
|
|
rowDivs[rowI].height(arrayMax(colHeights));
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
|
|
|
daySegSetTops(segs, getRowTops(rowDivs));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function renderTempDaySegs(segs, adjustRow, adjustTop) {
|
|
|
|
var tempContainer = $("<div/>");
|
|
|
|
var elements;
|
|
|
|
var segmentContainer = getDaySegmentContainer();
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var element;
|
|
|
|
tempContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
|
|
|
|
elements = tempContainer.children();
|
|
|
|
segmentContainer.append(elements);
|
|
|
|
daySegElementResolve(segs, elements);
|
|
|
|
daySegCalcHSides(segs);
|
|
|
|
daySegSetWidths(segs);
|
|
|
|
daySegCalcHeights(segs);
|
|
|
|
daySegSetTops(segs, getRowTops(getRowDivs()));
|
|
|
|
elements = [];
|
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
element = segs[i].element;
|
|
|
|
if (element) {
|
|
|
|
if (segs[i].row === adjustRow) {
|
|
|
|
element.css('top', adjustTop);
|
|
|
|
}
|
|
|
|
elements.push(element[0]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $(elements);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function daySegHTML(segs) { // also sets seg.left and seg.outerWidth
|
|
|
|
var rtl = opt('isRTL');
|
|
|
|
var i;
|
|
|
|
var segCnt=segs.length;
|
|
|
|
var seg;
|
|
|
|
var event;
|
2011-02-20 00:47:23 +01:00
|
|
|
var url;
|
2011-02-11 07:40:16 +01:00
|
|
|
var classes;
|
2010-11-10 07:54:41 +01:00
|
|
|
var bounds = allDayBounds();
|
|
|
|
var minLeft = bounds.left;
|
|
|
|
var maxLeft = bounds.right;
|
2010-11-15 07:12:31 +01:00
|
|
|
var cols = []; // don't really like this system (but have to do this b/c RTL works differently in basic vs agenda)
|
2010-11-10 07:54:41 +01:00
|
|
|
var left;
|
|
|
|
var right;
|
2011-02-11 07:40:16 +01:00
|
|
|
var skinCss;
|
2010-11-10 07:54:41 +01:00
|
|
|
var html = '';
|
2010-09-19 07:54:35 +02:00
|
|
|
// calculate desired position/dimensions, create html
|
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
|
|
|
event = seg.event;
|
2011-02-20 00:47:23 +01:00
|
|
|
classes = ['fc-event', 'fc-event-skin', 'fc-event-hori'];
|
|
|
|
if (isEventDraggable(event)) {
|
|
|
|
classes.push('fc-event-draggable');
|
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
if (rtl) {
|
|
|
|
if (seg.isStart) {
|
2011-02-11 07:40:16 +01:00
|
|
|
classes.push('fc-corner-right');
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
if (seg.isEnd) {
|
2011-02-11 07:40:16 +01:00
|
|
|
classes.push('fc-corner-left');
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2010-11-15 07:12:31 +01:00
|
|
|
cols[0] = dayOfWeekCol(seg.end.getDay()-1);
|
|
|
|
cols[1] = dayOfWeekCol(seg.start.getDay());
|
|
|
|
left = seg.isEnd ? colContentLeft(cols[0]) : minLeft;
|
|
|
|
right = seg.isStart ? colContentRight(cols[1]) : maxLeft;
|
2010-09-19 07:54:35 +02:00
|
|
|
}else{
|
|
|
|
if (seg.isStart) {
|
2011-02-11 07:40:16 +01:00
|
|
|
classes.push('fc-corner-left');
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
if (seg.isEnd) {
|
2011-02-11 07:40:16 +01:00
|
|
|
classes.push('fc-corner-right');
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2010-11-15 07:12:31 +01:00
|
|
|
cols[0] = dayOfWeekCol(seg.start.getDay());
|
|
|
|
cols[1] = dayOfWeekCol(seg.end.getDay()-1);
|
|
|
|
left = seg.isStart ? colContentLeft(cols[0]) : minLeft;
|
|
|
|
right = seg.isEnd ? colContentRight(cols[1]) : maxLeft;
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2011-02-11 07:40:16 +01:00
|
|
|
classes = classes.concat(event.className, event.source.className);
|
2011-02-20 00:47:23 +01:00
|
|
|
url = event.url;
|
2011-02-11 07:40:16 +01:00
|
|
|
skinCss = getSkinCss(event, opt);
|
2011-02-20 00:47:23 +01:00
|
|
|
if (url) {
|
|
|
|
html += "<a href='" + htmlEscape(url) + "'";
|
|
|
|
}else{
|
|
|
|
html += "<div";
|
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
html +=
|
2011-02-20 00:47:23 +01:00
|
|
|
" class='" + classes.join(' ') + "'" +
|
|
|
|
" style='position:absolute;z-index:8;left:"+left+"px;" + skinCss + "'" +
|
|
|
|
">" +
|
|
|
|
"<div" +
|
|
|
|
" class='fc-event-inner fc-event-skin'" +
|
|
|
|
(skinCss ? " style='" + skinCss + "'" : '') +
|
|
|
|
">";
|
|
|
|
if (!event.allDay && seg.isStart) {
|
|
|
|
html +=
|
|
|
|
"<span class='fc-event-time'>" +
|
|
|
|
htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
|
|
|
|
"</span>";
|
|
|
|
}
|
|
|
|
html +=
|
|
|
|
"<span class='fc-event-title'>" + htmlEscape(event.title) + "</span>" +
|
2010-09-19 07:54:35 +02:00
|
|
|
"</div>";
|
2011-02-20 00:47:23 +01:00
|
|
|
if (seg.isEnd && isEventResizable(event)) {
|
|
|
|
html +=
|
2011-02-20 02:49:19 +01:00
|
|
|
"<div class='ui-resizable-handle ui-resizable-" + (rtl ? 'w' : 'e') + "'>" +
|
|
|
|
" " + // makes hit area a lot better for IE6/7
|
|
|
|
"</div>";
|
2011-02-20 00:47:23 +01:00
|
|
|
}
|
|
|
|
html +=
|
|
|
|
"</" + (url ? "a" : "div" ) + ">";
|
2010-09-19 07:54:35 +02:00
|
|
|
seg.left = left;
|
|
|
|
seg.outerWidth = right - left;
|
2011-02-20 00:47:23 +01:00
|
|
|
cols.sort(cmp); // is this still needed now that cols are always left-to-right?
|
2010-11-15 07:12:31 +01:00
|
|
|
seg.startCol = cols[0];
|
|
|
|
seg.endCol = cols[1] + 1;
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
return html;
|
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function daySegElementResolve(segs, elements) { // sets seg.element
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var event;
|
|
|
|
var element;
|
|
|
|
var triggerRes;
|
2010-09-19 07:54:35 +02:00
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
|
|
|
event = seg.event;
|
2010-11-10 07:54:41 +01:00
|
|
|
element = $(elements[i]); // faster than .eq()
|
|
|
|
triggerRes = trigger('eventRender', event, event, element);
|
2010-09-19 07:54:35 +02:00
|
|
|
if (triggerRes === false) {
|
2010-11-10 07:54:41 +01:00
|
|
|
element.remove();
|
2010-09-19 07:54:35 +02:00
|
|
|
}else{
|
|
|
|
if (triggerRes && triggerRes !== true) {
|
2010-11-10 07:54:41 +01:00
|
|
|
triggerRes = $(triggerRes)
|
2010-09-19 07:54:35 +02:00
|
|
|
.css({
|
|
|
|
position: 'absolute',
|
|
|
|
left: seg.left
|
2010-11-10 07:54:41 +01:00
|
|
|
});
|
|
|
|
element.replaceWith(triggerRes);
|
|
|
|
element = triggerRes;
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
seg.element = element;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function daySegElementReport(segs) {
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var element;
|
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
|
|
|
element = seg.element;
|
|
|
|
if (element) {
|
|
|
|
reportEventElement(seg.event, element);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function daySegHandlers(segs, segmentContainer, modifiedEventId) {
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var element;
|
|
|
|
var event;
|
|
|
|
// retrieve elements, run through eventRender callback, bind handlers
|
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
|
|
|
element = seg.element;
|
|
|
|
if (element) {
|
|
|
|
event = seg.event;
|
2010-09-19 07:54:35 +02:00
|
|
|
if (event._id === modifiedEventId) {
|
2010-11-10 07:54:41 +01:00
|
|
|
bindDaySeg(event, element, seg);
|
2010-09-19 07:54:35 +02:00
|
|
|
}else{
|
2010-11-10 07:54:41 +01:00
|
|
|
element[0]._fci = i; // for lazySegBind
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
lazySegBind(segmentContainer, segs, bindDaySeg);
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function daySegCalcHSides(segs) { // also sets seg.key
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var element;
|
|
|
|
var key, val;
|
|
|
|
var hsideCache = {};
|
2010-09-19 07:54:35 +02:00
|
|
|
// record event horizontal sides
|
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
2010-11-10 07:54:41 +01:00
|
|
|
element = seg.element;
|
|
|
|
if (element) {
|
|
|
|
key = seg.key = cssKey(element[0]);
|
|
|
|
val = hsideCache[key];
|
|
|
|
if (val === undefined) {
|
2011-01-24 08:10:25 +01:00
|
|
|
val = hsideCache[key] = hsides(element, true);
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
|
|
|
seg.hsides = val;
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function daySegSetWidths(segs) {
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var element;
|
2010-09-19 07:54:35 +02:00
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
2010-11-10 07:54:41 +01:00
|
|
|
element = seg.element;
|
|
|
|
if (element) {
|
|
|
|
element[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px';
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function daySegCalcHeights(segs) {
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var element;
|
|
|
|
var key, val;
|
|
|
|
var vmarginCache = {};
|
2010-09-19 07:54:35 +02:00
|
|
|
// record event heights
|
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
2010-11-10 07:54:41 +01:00
|
|
|
element = seg.element;
|
|
|
|
if (element) {
|
|
|
|
key = seg.key; // created in daySegCalcHSides
|
|
|
|
val = vmarginCache[key];
|
|
|
|
if (val === undefined) {
|
2011-01-24 08:10:25 +01:00
|
|
|
val = vmarginCache[key] = vmargins(element);
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
|
|
|
seg.outerHeight = element[0].offsetHeight + val;
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function getRowDivs() {
|
|
|
|
var i;
|
|
|
|
var rowCnt = getRowCnt();
|
|
|
|
var rowDivs = [];
|
|
|
|
for (i=0; i<rowCnt; i++) {
|
2011-01-24 08:10:25 +01:00
|
|
|
rowDivs[i] = allDayRow(i)
|
2010-11-10 07:54:41 +01:00
|
|
|
.find('td:first div.fc-day-content > div'); // optimal selector?
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
return rowDivs;
|
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function getRowTops(rowDivs) {
|
|
|
|
var i;
|
|
|
|
var rowCnt = rowDivs.length;
|
|
|
|
var tops = [];
|
|
|
|
for (i=0; i<rowCnt; i++) {
|
2011-01-24 08:10:25 +01:00
|
|
|
tops[i] = rowDivs[i][0].offsetTop; // !!?? but this means the element needs position:relative if in a table cell!!!!
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2010-11-10 07:54:41 +01:00
|
|
|
return tops;
|
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
|
|
|
|
function daySegSetTops(segs, rowTops) { // also triggers eventAfterRender
|
|
|
|
var i;
|
|
|
|
var segCnt = segs.length;
|
|
|
|
var seg;
|
|
|
|
var element;
|
|
|
|
var event;
|
2010-09-19 07:54:35 +02:00
|
|
|
for (i=0; i<segCnt; i++) {
|
|
|
|
seg = segs[i];
|
2010-11-10 07:54:41 +01:00
|
|
|
element = seg.element;
|
|
|
|
if (element) {
|
|
|
|
element[0].style.top = rowTops[seg.row] + (seg.top||0) + 'px';
|
2010-09-19 07:54:35 +02:00
|
|
|
event = seg.event;
|
2010-11-10 07:54:41 +01:00
|
|
|
trigger('eventAfterRender', event, event, element);
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Resizing
|
|
|
|
-----------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
2010-11-10 07:54:41 +01:00
|
|
|
function resizableDayEvent(event, element, seg) {
|
2011-02-20 00:47:23 +01:00
|
|
|
var rtl = opt('isRTL');
|
|
|
|
var direction = rtl ? 'w' : 'e';
|
|
|
|
var handle = element.find('div.ui-resizable-' + direction);
|
|
|
|
var isResizing = false;
|
|
|
|
|
|
|
|
// TODO: look into using jquery-ui mouse widget for this stuff
|
|
|
|
disableTextSelection(element); // prevent native <a> selection for IE
|
|
|
|
element
|
|
|
|
.mousedown(function(ev) { // prevent native <a> selection for others
|
|
|
|
ev.preventDefault();
|
|
|
|
})
|
|
|
|
.click(function(ev) {
|
|
|
|
if (isResizing) {
|
|
|
|
ev.preventDefault(); // prevent link from being visited (only method that worked in IE6)
|
|
|
|
ev.stopImmediatePropagation(); // prevent fullcalendar eventClick handler from being called
|
|
|
|
// (eventElementHandlers needs to be bound after resizableDayEvent)
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
2011-02-20 00:47:23 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
handle.mousedown(function(ev) {
|
|
|
|
if (ev.which != 1) {
|
|
|
|
return; // needs to be left mouse button
|
|
|
|
}
|
|
|
|
isResizing = true;
|
|
|
|
var hoverListener = t.getHoverListener();
|
|
|
|
var rowCnt = getRowCnt();
|
|
|
|
var colCnt = getColCnt();
|
|
|
|
var dis = rtl ? -1 : 1;
|
|
|
|
var dit = rtl ? colCnt : 0;
|
|
|
|
var elementTop = element.css('top');
|
|
|
|
var dayDelta;
|
|
|
|
var helpers;
|
|
|
|
var eventCopy = $.extend({}, event);
|
|
|
|
var minCell = dateCell(event.start);
|
|
|
|
clearSelection();
|
|
|
|
$('body')
|
|
|
|
.css('cursor', direction + '-resize')
|
|
|
|
.one('mouseup', mouseup);
|
|
|
|
trigger('eventResizeStart', this, event, ev);
|
|
|
|
hoverListener.start(function(cell, origCell) {
|
|
|
|
if (cell) {
|
|
|
|
var r = Math.max(minCell.row, cell.row);
|
|
|
|
var c = cell.col;
|
|
|
|
if (rowCnt == 1) {
|
|
|
|
r = 0; // hack for all-day area in agenda views
|
|
|
|
}
|
|
|
|
if (r == minCell.row) {
|
|
|
|
if (rtl) {
|
|
|
|
c = Math.min(minCell.col, c);
|
2010-11-10 07:54:41 +01:00
|
|
|
}else{
|
2011-02-20 00:47:23 +01:00
|
|
|
c = Math.max(minCell.col, c);
|
2010-11-10 07:54:41 +01:00
|
|
|
}
|
|
|
|
}
|
2011-02-20 00:47:23 +01:00
|
|
|
dayDelta = (r*7 + c*dis+dit) - (origCell.row*7 + origCell.col*dis+dit);
|
|
|
|
var newEnd = addDays(eventEnd(event), dayDelta, true);
|
2010-09-19 07:54:35 +02:00
|
|
|
if (dayDelta) {
|
2011-02-20 00:47:23 +01:00
|
|
|
eventCopy.end = newEnd;
|
|
|
|
var oldHelpers = helpers;
|
|
|
|
helpers = renderTempDaySegs(compileDaySegs([eventCopy]), seg.row, elementTop);
|
|
|
|
helpers.find('*').css('cursor', direction + '-resize');
|
|
|
|
if (oldHelpers) {
|
|
|
|
oldHelpers.remove();
|
|
|
|
}
|
|
|
|
hideEvents(event);
|
|
|
|
}else{
|
|
|
|
if (helpers) {
|
|
|
|
showEvents(event);
|
|
|
|
helpers.remove();
|
|
|
|
helpers = null;
|
|
|
|
}
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2011-02-20 00:47:23 +01:00
|
|
|
clearOverlays();
|
|
|
|
renderDayOverlay(event.start, addDays(cloneDate(newEnd), 1)); // coordinate grid already rebuild at hoverListener.start
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
2011-02-20 00:47:23 +01:00
|
|
|
}, ev);
|
|
|
|
|
|
|
|
function mouseup(ev) {
|
|
|
|
trigger('eventResizeStop', this, event, ev);
|
|
|
|
$('body').css('cursor', '');
|
|
|
|
hoverListener.stop();
|
|
|
|
clearOverlays();
|
|
|
|
if (dayDelta) {
|
|
|
|
eventResize(this, event, dayDelta, 0, ev);
|
|
|
|
// event redraw will clear helpers
|
|
|
|
}
|
|
|
|
// otherwise, the drag handler already restored the old events
|
|
|
|
|
|
|
|
setTimeout(function() { // make this happen after the element's click event
|
|
|
|
isResizing = false;
|
|
|
|
},0);
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
2010-09-19 07:54:35 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|