diff --git a/src/agenda.js b/src/agenda.js index 85eb95a..63d058e 100644 --- a/src/agenda.js +++ b/src/agenda.js @@ -89,6 +89,7 @@ function Agenda(element, options, methods) { colContentPositions = new HorizontalPositionCache(function(col) { return bg.find('td:eq(' + col + ') div div'); }), + slotTopCache = {}, // ... view = $.extend(this, viewMethods, methods, { @@ -167,7 +168,7 @@ function Agenda(element, options, methods) { s += "" + "" + options.allDayText + "" + "" + - "
 
" + + "
 
" + " " + "
"; @@ -177,7 +178,7 @@ function Agenda(element, options, methods) { head.find('td').click(slotClick); // all-day event container - daySegmentContainer = $("
").appendTo(head); + daySegmentContainer = $("
").appendTo(head); // body d = zeroDate(); @@ -191,7 +192,7 @@ function Agenda(element, options, methods) { "'>" + ((!slotNormal || minutes==0) ? formatDate(d, options.axisFormat) : ' ') + "
 
"; + tm + "-state-default'>
 
"; addMinutes(d, options.slotMinutes); } s += ""; @@ -287,6 +288,7 @@ function Agenda(element, options, methods) { viewWidth = width; viewHeight = height; colContentPositions.clear(); + slotTopCache = {}; body.width(width); body.height(height - head.height()); @@ -357,7 +359,7 @@ function Agenda(element, options, methods) { slotEvents.push(events[i]); } } - renderDaySegs(stackSegs(view.sliceSegs(dayEvents, $.map(dayEvents, visEventEnd), view.visStart, view.visEnd))); + renderDaySegs(compileDaySegs(dayEvents)); renderSlotSegs(compileSlotSegs(slotEvents)); } @@ -375,19 +377,49 @@ function Agenda(element, options, methods) { } + + + + function compileDaySegs(events) { + var levels = stackSegs(view.sliceSegs(events, $.map(events, visEventEnd), view.visStart, view.visEnd)), + i, levelCnt=levels.length, level, + j, seg, + segs=[]; + for (i=0; i" + "" + + "" + "" + htmlEscape(formatDates(event.start, event.end, view.option('timeFormat'))) + "" + "" + htmlEscape(event.title) + "" + - "" + "" + ((event.editable || event.editable == undefined && options.editable) && !options.disableResizing && $.fn.resizable ? "
=
" : '') + "
"; - }); - slotSegmentContainer.html(html); - eventElements = slotSegmentContainer.children(); + } + slotSegmentContainer[0].innerHTML = html; + _eventElements = $.makeArray(slotSegmentContainer[0].childNodes); // TODO: look at .children() again - // retrieve elements, run through eventRender callback, record outer-edge dimensions - eachLeaf(segCols, function(l, seg) { + // retrieve elements, run through eventRender callback, bind event handlers + for (i=0; i" + (showNumbers ? "
" + d.getDate() + "
" : '') + - "
 
"; + "
 
"; addDays(d, 1); if (nwe) { skipWeekend(d); @@ -216,7 +216,7 @@ function Grid(element, options, methods) { tbody = $(s + "").appendTo(table); tbody.find('td').click(dayClick); - segmentContainer = $("
").appendTo(element); + segmentContainer = $("
").appendTo(element); // style='position:absolute;top:0;left:0' // made it a little slower for some reason }else{ // NOT first time, reuse as many cells as possible @@ -236,7 +236,7 @@ function Grid(element, options, methods) { tm + '-state-default fc-new fc-day' + (i*colCnt+j) + (j==dit ? ' fc-leftmost' : '') + "'>" + (showNumbers ? "
" : '') + - "
 
" + + "
 
" + ""; addDays(d, 1); if (nwe) { @@ -385,31 +385,42 @@ function Grid(element, options, methods) { function compileSegs(events) { var d1 = cloneDate(view.visStart), d2 = addDays(cloneDate(d1), colCnt), - rows = [], - i=0; - for (; i" + "" + @@ -569,14 +573,17 @@ function _renderDaySegs(segRows, view, minLeft, maxLeft, getTr, dayContentLeft, "" + htmlEscape(event.title) + "" + "" + "
"; - }); - segmentContainer.html(html); - eventElements = segmentContainer.children(); + seg.left = left; + seg.outerWidth = right - left; + } + segmentContainer[0].innerHTML = html; + _eventElements = $.makeArray(segmentContainer[0].childNodes); // TODO: look at .children() again - // retrieve elements, run through eventRender callback, record outer-edge dimensions - eachLeaf(segRows, function(l, seg) { + // retrieve elements, run through eventRender callback, bind handlers + for (i=0; i div') // > is optimal??? + .height(top + levelHeight); + } + + // calculate row tops + for (rowI=0; rowI= view.visEnd) { // !view.date means it hasn't been rendered yet + if (inc || !view.date || date < view.start || date >= view.end) { // !view.date means it hasn't been rendered yet fixContentSize(); view.render(date, inc || 0, contentWidth, contentHeight, function(callback) { // dont refetch if new view contains the same events (or a subset) @@ -307,7 +307,7 @@ $.fn.fullCalendar = function(options) { return options.contentHeight; } else if (options.height) { - return options.height - (header ? header.height() : 0) - vsides(content); + return options.height - (header ? header.height() : 0) - vsides(content[0]); } return Math.round(contentWidth / Math.max(options.aspectRatio, .5)); } diff --git a/src/util.js b/src/util.js index f075e59..a633eb2 100644 --- a/src/util.js +++ b/src/util.js @@ -298,37 +298,42 @@ var dateFormatters = { -----------------------------------------------------------------------------*/ function setOuterWidth(element, width, includeMargins) { - element.each(function() { - var e = $(this); - e.width(width - hsides(e, includeMargins)); + element.each(function(i, _element) { + _element.style.width = width - hsides(_element, includeMargins) + 'px'; }); } -function hsides(e, includeMargins) { - return (parseInt(e.css('border-left-width')) || 0) + - (parseInt(e.css('padding-left')) || 0) + - (parseInt(e.css('padding-right')) || 0) + - (parseInt(e.css('border-right-width')) || 0) + - (includeMargins ? - (parseInt(e.css('margin-left')) || 0) + (parseInt(e.css('margin-right')) || 0) - : 0); -} - function setOuterHeight(element, height, includeMargins) { - element.each(function() { - var e = $(this); - e.height(height - vsides(e, includeMargins)); + element.each(function(i, _element) { + _element.style.height = height - vsides(_element, includeMargins) + 'px'; }); } -function vsides(e, includeMargins) { - return (parseInt(e.css('border-top-width')) || 0) + - (parseInt(e.css('padding-top')) || 0) + - (parseInt(e.css('padding-bottom')) || 0) + - (parseInt(e.css('border-bottom-width')) || 0) + - (includeMargins ? - (parseInt(e.css('margin-top')) || 0) + (parseInt(e.css('margin-bottom')) || 0) - : 0); + +function hsides(_element, includeMargins) { + return (parseFloat(jQuery.curCSS(_element, 'paddingLeft', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'paddingRight', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'borderLeftWidth', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'borderRightWidth', true)) || 0) + + (includeMargins ? hmargins(_element) : 0); +} + +function hmargins(_element) { + return (parseFloat(jQuery.curCSS(_element, 'marginLeft', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'marginRight', true)) || 0); +} + +function vsides(_element, includeMargins) { + return (parseFloat(jQuery.curCSS(_element, 'paddingTop', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'paddingBottom', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'borderTopWidth', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'borderBottomWidth', true)) || 0) + + (includeMargins ? vmargins(_element) : 0); +} + +function vmargins(_element) { + return (parseFloat(jQuery.curCSS(_element, 'marginTop', true)) || 0) + + (parseFloat(jQuery.curCSS(_element, 'marginBottom', true)) || 0); } @@ -455,18 +460,6 @@ function htmlEscape(s) { .replace(/"/g, '"') } -function eachLeaf(node, callback, leafIndex, indexTrail) { - if (node.pop == arrayPop) { // is an array? - for (var i=0, len=node.length; i").text(event.title); + return $("
").text(event.title); } else if (event.id == 999) { element.css('border-color', 'red'); //console.log('renderEvent (' + event.title + ') - ' + view.title); } }, - eventAfterRender: function(event, element, view) { //console.log('after render for "' + event.title + '":'); //console.log(element); @@ -99,9 +98,9 @@ console.log(dayDelta + ' days'); console.log(minuteDelta + ' minutes'); console.log('allday: ' + allDay); - /*setTimeout(function() { - revertFunc(); - }, 2000);*/ + //setTimeout(function() { + // revertFunc(); + //}, 2000); //console.log(jsEvent); //console.log(ui); //console.log(view.title); @@ -120,9 +119,9 @@ console.log('RESIZE!! ' + event.title); console.log(dayDelta + ' days'); console.log(minuteDelta + ' minutes'); - /*setTimeout(function() { - revertFunc(); - }, 2000);*/ + //setTimeout(function() { + // revertFunc(); + //}, 2000); //console.log(jsEvent); //console.log(ui); //console.log(view.title); diff --git a/version.txt b/version.txt index 428b770..1c99cf0 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.4.3 +1.4.4