diff --git a/src/agenda.js b/src/agenda.js index defa293..6a4986c 100644 --- a/src/agenda.js +++ b/src/agenda.js @@ -21,7 +21,7 @@ setDefaults({ views.agendaWeek = function(element, options) { return new Agenda(element, options, { - render: function(date, delta, height, fetchEvents) { + render: function(date, delta, width, height, fetchEvents) { if (delta) { addDays(date, delta * 7); } @@ -41,14 +41,19 @@ views.agendaWeek = function(element, options) { this.option('titleFormat'), options ); - this.renderAgenda(options.weekends ? 7 : 5, this.option('columnFormat'), height, fetchEvents); + this.renderAgenda( + options.weekends ? 7 : 5, + this.option('columnFormat'), + width, height, + fetchEvents + ); } }); }; views.agendaDay = function(element, options) { return new Agenda(element, options, { - render: function(date, delta, height, fetchEvents) { + render: function(date, delta, width, height, fetchEvents) { if (delta) { addDays(date, delta); if (!options.weekends) { @@ -58,7 +63,12 @@ views.agendaDay = function(element, options) { this.title = formatDate(date, this.option('titleFormat'), options); this.start = this.visStart = cloneDate(date, true); this.end = this.visEnd = addDays(cloneDate(this.start), 1); - this.renderAgenda(1, this.option('columnFormat'), height, fetchEvents); + this.renderAgenda( + 1, + this.option('columnFormat'), + width, height, + fetchEvents + ); } }); }; @@ -68,18 +78,26 @@ function Agenda(element, options, methods) { var head, body, bodyContent, bodyTable, bg, colCnt, axisWidth, colWidth, slotHeight, - cachedDaySegs=[], cachedSlotSegs=[], - cachedHeight, + viewWidth, viewHeight, + cachedEvents=[], + daySegmentContainer, + daySegments=[], + slotSegmentContainer, + slotSegments=[], tm, firstDay, nwe, // no weekends (int) rtl, dis, dit, // day index sign / translate minMinute, maxMinute, + colContentPositions = new HorizontalPositionCache(function(col) { + return bg.find('td:eq(' + col + ') div div'); + }), // ... view = $.extend(this, viewMethods, methods, { renderAgenda: renderAgenda, renderEvents: renderEvents, rerenderEvents: rerenderEvents, + clearEvents: clearEvents, updateSize: updateSize, shown: resetScroll, defaultEventEnd: function(event) { @@ -88,21 +106,6 @@ function Agenda(element, options, methods) { return start; } return addMinutes(start, options.defaultEventMinutes); - }, - visEventEnd: function(event) { - if (event.allDay) { - if (event.end) { - var end = cloneDate(event.end); - return (event.allDay || end.getHours() || end.getMinutes()) ? addDays(end, 1) : end; - }else{ - return addDays(cloneDate(event.start), 1); - } - } - if (event.end) { - return cloneDate(event.end); - }else{ - return addMinutes(cloneDate(event.start), options.defaultEventMinutes); - } } }); view.init(element, options); @@ -118,7 +121,7 @@ function Agenda(element, options, methods) { element.disableSelection(); } - function renderAgenda(c, colFormat, height, fetchEvents) { + function renderAgenda(c, colFormat, width, height, fetchEvents) { colCnt = c; // update option-derived variables @@ -175,6 +178,9 @@ function Agenda(element, options, methods) { head = $(s).appendTo(element); head.find('td').click(slotClick); + // all-day event container + daySegmentContainer = $("
").appendTo(head); + // body d = zeroDate(); var maxd = addMinutes(cloneDate(d), maxMinute); @@ -197,6 +203,9 @@ function Agenda(element, options, methods) { .appendTo(element); body.find('td').click(slotClick); + // slot event container + slotSegmentContainer = $("
").appendTo(bodyContent); + // background stripes d = cloneDate(d0); s = "
" + @@ -218,7 +227,7 @@ function Agenda(element, options, methods) { }else{ // skeleton already built, just modify it - view.clearEvents(); + clearEvents(); // redo column header text and class head.find('tr:first th').slice(1, -1).each(function() { @@ -253,7 +262,7 @@ function Agenda(element, options, methods) { } - updateSize(height); + updateSize(width, height); resetScroll(); fetchEvents(renderEvents); @@ -276,19 +285,19 @@ function Agenda(element, options, methods) { } - function updateSize(height) { - cachedHeight = height; + function updateSize(width, height) { + viewWidth = width; + viewHeight = height; + colContentPositions.clear(); - bodyTable.width(''); + body.width(width); body.height(height - head.height()); - - // need this for IE6/7. triggers clientWidth to be calculated for - // later user in this function. this is ridiculous - body[0].clientWidth; + bodyTable.width(''); var topTDs = head.find('tr:first th'), stripeTDs = bg.find('td'), - contentWidth = body[0].clientWidth; + contentWidth = slotSegmentContainer.width(); // body[0].clientWidth isn't reliable here in IE6 + bodyTable.width(contentWidth); // time-axis width @@ -316,10 +325,6 @@ function Agenda(element, options, methods) { }); slotHeight = body.find('tr:first div').height() + 1; - - // TODO: - //reportTBody(bodyTable.find('tbody')); - // Opera 9.25 doesn't detect the bug when called from agenda } function slotClick(ev) { @@ -342,10 +347,8 @@ function Agenda(element, options, methods) { /* Event Rendering -----------------------------------------------------------------------------*/ - function renderEvents(events) { - view.reportEvents(events); - + view.reportEvents(cachedEvents = events); var i, len=events.length, dayEvents=[], slotEvents=[]; @@ -356,30 +359,32 @@ function Agenda(element, options, methods) { slotEvents.push(events[i]); } } - - renderDaySegs(cachedDaySegs = stackSegs(view.sliceSegs(dayEvents, view.visStart, view.visEnd))); - renderSlotSegs(cachedSlotSegs = compileSlotSegs(slotEvents)); + renderDaySegs(daySegments = stackSegs(view.sliceSegs(dayEvents, $.map(dayEvents, visEventEnd), view.visStart, view.visEnd))); + renderSlotSegs(slotSegments = compileSlotSegs(slotEvents)); } - function rerenderEvents(skipCompile) { - view.clearEvents(); - if (skipCompile) { - renderDaySegs(cachedDaySegs); - renderSlotSegs(cachedSlotSegs); - }else{ - renderEvents(view.cachedEvents); - } + function rerenderEvents() { + clearEvents(); + renderEvents(cachedEvents); + } + + + function clearEvents() { + daySegmentContainer.empty(); + slotSegmentContainer.empty(); + view._clearEvents(); // only clears the hashes } function compileSlotSegs(events) { var d = addMinutes(cloneDate(view.visStart), minMinute), + ends = $.map(events, visEventEnd), levels, segCols = [], i=0; for (; i") - .append(anchorElement = $("") - .append($("") - .text(event.title))); - if (event.url) { - anchorElement.attr('href', event.url); - } - triggerRes = view.trigger('eventRender', event, event, eventElement); - if (triggerRes !== false) { - if (triggerRes && typeof triggerRes != 'boolean') { - eventElement = $(triggerRes); - } - eventElement - .css({ - position: 'absolute', - top: top, - left: left, - zIndex: 8 - }) - .appendTo(head); - setOuterWidth(eventElement, right-left, true); - view.eventElementHandlers(event, eventElement); - if (event.editable || event.editable == undefined && options.editable) { - draggableDayEvent(event, eventElement, seg.isStart); - if (seg.isEnd) { - view.resizableDayEvent(event, eventElement, colWidth); - } - } - view.reportEventElement(event, eventElement); - view.trigger('eventAfterRender', event, event, eventElement); - levelHeight = Math.max(levelHeight, eventElement.outerHeight(true)); - } - } - top += levelHeight; - rowContentHeight += levelHeight; - } - tdInner.height(rowContentHeight); - updateSize(cachedHeight); // tdInner might have pushed the body down, so resize + _renderDaySegs( + [segRow], + view, + axisWidth, + viewWidth, + function() { + return head.find('tr.fc-all-day') + }, + function(dayOfWeek) { + return axisWidth + colContentPositions.left(day2col(dayOfWeek)); + }, + function(dayOfWeek) { + return axisWidth + colContentPositions.right(day2col(dayOfWeek)); + }, + daySegmentContainer, + bootstrapDayEventHandlers + ); + updateSize(viewWidth, viewHeight); // might have pushed the body down, so resize } } @@ -485,94 +425,182 @@ function Agenda(element, options, methods) { // renders events in the 'time slots' at the bottom function renderSlotSegs(segCols) { - var colI, colLen=segCols.length, col, - levelI, level, - segI, seg, - forward, - event, - top, bottom, - tdInner, - width, left, + + var event, className, - eventElement, anchorElement, timeElement, titleElement, - triggerRes; - for (colI=0; colI") - .append(anchorElement = $("") - .append(timeElement = $("") - .text(formatDates(event.start, event.end, view.option('timeFormat')))) - .append(titleElement = $("") - .text(event.title))) - if (event.url) { - anchorElement.attr('href', event.url); - } - triggerRes = view.trigger('eventRender', event, event, eventElement); - if (triggerRes !== false) { - if (triggerRes && typeof triggerRes != 'boolean') { - eventElement = $(triggerRes); - } - eventElement - .css({ - position: 'absolute', - zIndex: 8, - top: top, - left: left - }) - .appendTo(bodyContent); - setOuterWidth(eventElement, width, true); - setOuterHeight(eventElement, bottom-top, true); - if (eventElement.height() - titleElement.position().top < 10) { - // event title doesn't have enough room, put next to the time - timeElement.text(formatDate(event.start, view.option('timeFormat')) + ' - ' + event.title); - titleElement.remove(); - } - view.eventElementHandlers(event, eventElement); - if (event.editable || event.editable == undefined && options.editable) { - draggableSlotEvent(event, eventElement, timeElement); - if (seg.isEnd) { - resizableSlotEvent(event, eventElement, timeElement); - } - } - } - view.reportEventElement(event, eventElement); - view.trigger('eventAfterRender', event, event, eventElement); + top, + bottom, + leftmost, + availWidth, + forward, + width, + left, + eventTops=[], + eventLefts=[], + eventOuterWidths=[], + eventOuterHeights=[], + html='', + eventElements, + eventElement, + triggerRes, + eventVSides=[], + eventHSides=[], + eventTitleTops=[], + height; + + // calculate desired position/dimensions, create html + eachLeaf(segCols, function(l, seg, segI, levelI, colI) { + event = seg.event; + className = 'fc-event fc-event-vert '; + if (seg.isStart) { + className += 'fc-corner-top '; + } + if (seg.isEnd) { + className += 'fc-corner-bottom '; + } + top = timePosition(seg.start, seg.start); + bottom = timePosition(seg.start, seg.end); + leftmost = axisWidth + colContentPositions.left(colI*dis + dit); + availWidth = axisWidth + colContentPositions.right(colI*dis + dit) - leftmost; + availWidth = Math.min(availWidth-6, availWidth*.95); // TODO: move this to CSS + forward = seg.forward || 0; + if (levelI) { + // indented and thin + width = availWidth / (levelI + forward + 1); + }else{ + if (forward) { + // moderately wide, aligned left still + width = ((availWidth / (forward + 1)) - (12/2)) * 2; // 12 is the predicted width of resizer = + }else{ + // can be entire width, aligned left + width = availWidth; } } + left = leftmost + // leftmost possible + (availWidth / (levelI + forward + 1) * levelI) // indentation + * dis + (rtl ? availWidth - width : 0); // rtl + eventTops[l] = top; + eventLefts[l] = left; + eventOuterWidths[l] = width; + eventOuterHeights[l] = bottom - top; + html += + "
" + + "" + + "" + 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(); + + // retrieve elements, run through eventRender callback, record outer-edge dimensions + eachLeaf(segCols, function(l, seg) { + event = seg.event; + eventElement = eventElements.eq(l); + triggerRes = view.trigger('eventRender', event, event, eventElement); + if (triggerRes === false) { + eventElement.remove(); + }else{ + if (triggerRes && triggerRes !== true) { + eventElement.remove(); + eventElement = $(triggerRes) + .css({ + top: eventTops[l], + left: eventLefts[l] + }) + .appendTo(slotSegmentContainer); + } + seg.element = eventElement; + eventVSides[l] = vsides(eventElement, true); + eventHSides[l] = hsides(eventElement, true); + eventTitleTops[l] = eventElement.find('span.fc-event-title').position().top; + bootstrapSlotEventHandlers(event, seg, eventElement); + view.reportEventElement(event, eventElement); + } + }); + + // set all positions/dimensions at once + eachLeaf(segCols, function(l, seg) { + if (eventElement = seg.element) { + eventElement + .width(eventOuterWidths[l] - eventHSides[l]) + .height(height = eventOuterHeights[l] - eventVSides[l]); + event = seg.event; + if (height - eventTitleTops[l] < 10) { + // not enough room for title, put it in the time header + eventElement.find('span.fc-event-time') + .text(formatDate(event.start, view.option('timeFormat')) + ' - ' + event.title); + eventElement.find('span.fc-event-title') + .remove(); + } + view.trigger('eventAfterRender', event, event, eventElement); + } + }); + + } + + + + + + function visEventEnd(event) { // returns exclusive 'visible' end, for rendering + if (event.allDay) { + if (event.end) { + var end = cloneDate(event.end); + return (event.allDay || end.getHours() || end.getMinutes()) ? addDays(end, 1) : end; + }else{ + return addDays(cloneDate(event.start), 1); + } } + if (event.end) { + return cloneDate(event.end); + }else{ + return addMinutes(cloneDate(event.start), options.defaultEventMinutes); + } + } + + + + function bootstrapDayEventHandlers(event, seg, eventElement) { + var attached = false; + eventElement.mouseover(function(ev) { + if (!attached) { + view.eventElementHandlers(event, eventElement); + if (event.editable || event.editable == undefined && options.editable) { + draggableDayEvent(event, eventElement, seg.isStart); + if (seg.isEnd) { + view.resizableDayEvent(event, eventElement, colWidth); + } + } + attached = true; + view.trigger('eventMouseover', this, event, ev); + } + }); + } + + + + function bootstrapSlotEventHandlers(event, seg, eventElement) { + var attached = false; + eventElement.mouseover(function(ev) { + if (!attached) { + view.eventElementHandlers(event, eventElement); + if (event.editable || event.editable == undefined && options.editable) { + var timeElement = eventElement.find('span.fc-event-time'); + draggableSlotEvent(event, eventElement, timeElement); + if (seg.isEnd) { + resizableSlotEvent(event, eventElement, timeElement); + } + } + attached = true; + view.trigger('eventMouseover', this, event, ev); + } + }); } @@ -798,7 +826,9 @@ function Agenda(element, options, methods) { var slotDelta, prevSlotDelta; eventElement .resizable({ - handles: 's', + handles: { + s: 'div.ui-resizable-s' + }, grid: slotHeight, start: function(ev, ui) { slotDelta = prevSlotDelta = 0; @@ -834,15 +864,11 @@ function Agenda(element, options, methods) { // BUG: if event was really short, need to put title back in span } } - }) - .find('div.ui-resizable-s').text('='); + }); } } - // ALL-DAY event resizing w/ 'view' methods... - - /* Misc @@ -865,9 +891,16 @@ function Agenda(element, options, methods) { td = tr.find('td'), innerDiv = td.find('div'); return Math.max(0, Math.round( - safePosition(innerDiv, td, tr, tr.parent()).top - 1 + slotHeight * ((minutes % slotMinutes) / slotMinutes) + innerDiv.position().top + topCorrect(td) - 1 + slotHeight * ((minutes % slotMinutes) / slotMinutes) )); } + + + + function day2col(dayOfWeek) { + return ((dayOfWeek - Math.max(firstDay,nwe)+colCnt) % colCnt)*dis+dit; + } + } diff --git a/src/grid.js b/src/grid.js index de07640..f5edf15 100644 --- a/src/grid.js +++ b/src/grid.js @@ -8,7 +8,7 @@ setDefaults({ views.month = function(element, options) { return new Grid(element, options, { - render: function(date, delta, height, fetchEvents) { + render: function(date, delta, width, height, fetchEvents) { if (delta) { addMonths(date, delta); date.setDate(1); @@ -44,7 +44,7 @@ views.month = function(element, options) { rowCnt, options.weekends ? 7 : 5, this.option('columnFormat'), true, - height, + width, height, fetchEvents ); } @@ -53,7 +53,7 @@ views.month = function(element, options) { views.basicWeek = function(element, options) { return new Grid(element, options, { - render: function(date, delta, height, fetchEvents) { + render: function(date, delta, width, height, fetchEvents) { if (delta) { addDays(date, delta * 7); } @@ -77,7 +77,7 @@ views.basicWeek = function(element, options) { 1, options.weekends ? 7 : 5, this.option('columnFormat'), false, - height, + width, height, fetchEvents ); } @@ -86,7 +86,7 @@ views.basicWeek = function(element, options) { views.basicDay = function(element, options) { return new Grid(element, options, { - render: function(date, delta, height, fetchEvents) { + render: function(date, delta, width, height, fetchEvents) { if (delta) { addDays(date, delta); if (!options.weekends) { @@ -96,7 +96,13 @@ views.basicDay = function(element, options) { this.title = formatDate(date, this.option('titleFormat'), options); this.start = this.visStart = cloneDate(date, true); this.end = this.visEnd = addDays(cloneDate(this.start), 1); - this.renderGrid(1, 1, this.option('columnFormat'), false, height, fetchEvents); + this.renderGrid( + 1, 1, + this.option('columnFormat'), + false, + width, height, + fetchEvents + ); } }); } @@ -104,7 +110,7 @@ views.basicDay = function(element, options) { // rendering bugs -var tdHeightBug, rtlLeftDiff; +var tdHeightBug; function Grid(element, options, methods) { @@ -112,27 +118,27 @@ function Grid(element, options, methods) { var tm, firstDay, nwe, // no weekends (int) rtl, dis, dit, // day index sign / translate + viewWidth, viewHeight, rowCnt, colCnt, colWidth, thead, tbody, - cachedSegs=[], //... + cachedEvents=[], + segments=[], + segmentContainer, + dayContentPositions = new HorizontalPositionCache(function(dayOfWeek) { + return tbody.find('td:eq(' + ((dayOfWeek - Math.max(firstDay,nwe)+colCnt) % colCnt) + ') div div') + }), + // ... // initialize superclass view = $.extend(this, viewMethods, methods, { renderGrid: renderGrid, renderEvents: renderEvents, rerenderEvents: rerenderEvents, + clearEvents: clearEvents, updateSize: updateSize, defaultEventEnd: function(event) { // calculates an end if event doesnt have one, mostly for resizing return cloneDate(event.start); - }, - visEventEnd: function(event) { // returns exclusive 'visible' end, for rendering - if (event.end) { - var end = cloneDate(event.end); - return (event.allDay || end.getHours() || end.getMinutes()) ? addDays(end, 1) : end; - }else{ - return addDays(cloneDate(event.start), 1); - } } }); view.init(element, options); @@ -148,7 +154,7 @@ function Grid(element, options, methods) { element.disableSelection(); } - function renderGrid(r, c, colFormat, showNumbers, height, fetchEvents) { + function renderGrid(r, c, colFormat, showNumbers, width, height, fetchEvents) { rowCnt = r; colCnt = c; @@ -210,10 +216,12 @@ function Grid(element, options, methods) { } tbody = $(s + "").appendTo(table); tbody.find('td').click(dayClick); + + segmentContainer = $("
").appendTo(element); }else{ // NOT first time, reuse as many cells as possible - view.clearEvents(); + clearEvents(); var prevRowCnt = tbody.find('tr').length; if (rowCnt < prevRowCnt) { @@ -296,7 +304,7 @@ function Grid(element, options, methods) { } - updateSize(height); + updateSize(width, height); fetchEvents(renderEvents); }; @@ -312,10 +320,13 @@ function Grid(element, options, methods) { } - function updateSize(height) { + function updateSize(width, height) { // does not render/position the events + viewWidth = width; + viewHeight = height; + dayContentPositions.clear(); var leftTDs = tbody.find('tr td:first-child'), - tbodyHeight = height - thead.height(), + tbodyHeight = viewHeight - thead.height(), rowHeight1, rowHeight2; if (options.weekMode == 'variable') { @@ -325,8 +336,6 @@ function Grid(element, options, methods) { rowHeight2 = tbodyHeight - rowHeight1*(rowCnt-1); } - reportTBody(tbody); - if (tdHeightBug == undefined) { // bug in firefox where cell height includes padding var tr = tbody.find('tr:first'), @@ -345,11 +354,11 @@ function Grid(element, options, methods) { setOuterWidth( thead.find('th').slice(0, -1), - colWidth = Math.floor(element.width() / colCnt) + colWidth = Math.floor(viewWidth / colCnt) ); } - + /* Event Rendering @@ -357,18 +366,20 @@ function Grid(element, options, methods) { function renderEvents(events) { - view.reportEvents(events); - renderSegs(cachedSegs = compileSegs(events)); + view.reportEvents(cachedEvents = events); + renderSegs(segments = compileSegs(events)); } - function rerenderEvents(skipCompile) { - view.clearEvents(); - if (skipCompile) { - renderSegs(cachedSegs); - }else{ - renderEvents(view.cachedEvents); - } + function rerenderEvents() { + clearEvents(); + renderSegs(segments = compileSegs(cachedEvents)); + } + + + function clearEvents() { + view._clearEvents(); // only clears the hashes + segmentContainer.empty(); } @@ -378,7 +389,7 @@ function Grid(element, options, methods) { rows = [], i=0; for (; i") - .append(eventAnchor = $("") - .append(event.allDay || !seg.isStart ? null : - $("") - .html(formatDates(event.start, event.end, view.option('timeFormat'), options))) - .append($("") - .text(event.title))); - if (event.url) { - eventAnchor.attr('href', event.url); - } - triggerRes = view.trigger('eventRender', event, event, eventElement); - if (triggerRes !== false) { - if (triggerRes && typeof triggerRes != 'boolean') { - eventElement = $(triggerRes); - } - eventElement - .css({ - position: 'absolute', - top: top, - left: left + (rtlLeftDiff||0), - zIndex: 8 - }) - .appendTo(element); - setOuterWidth(eventElement, right-left, true); - if (rtl && rtlLeftDiff == undefined) { - // bug in IE6 where offsets are miscalculated with direction:rtl - rtlLeftDiff = left - eventElement.position().left; - if (rtlLeftDiff) { - eventElement.css('left', left + rtlLeftDiff); - } - } - view.eventElementHandlers(event, eventElement); - if (event.editable || event.editable == undefined && options.editable) { - draggableEvent(event, eventElement); - if (seg.isEnd) { - view.resizableDayEvent(event, eventElement, colWidth); - } - } - view.reportEventElement(event, eventElement); - view.trigger('eventAfterRender', event, event, eventElement); - levelHeight = Math.max(levelHeight, eventElement.outerHeight(true)); + + function renderSegs(segCols) { + _renderDaySegs( + segCols, + view, + 0, + viewWidth, + function(i) { + return tbody.find('tr:eq('+i+')'); + }, + dayContentPositions.left, + dayContentPositions.right, + segmentContainer, + bootstrapEventHandlers + ); + } + + + + function visEventEnd(event) { // returns exclusive 'visible' end, for rendering + if (event.end) { + var end = cloneDate(event.end); + return (event.allDay || end.getHours() || end.getMinutes()) ? addDays(end, 1) : end; + }else{ + return addDays(cloneDate(event.start), 1); + } + } + + + + function bootstrapEventHandlers(event, seg, eventElement) { + var attached = false; + eventElement.mouseover(function(ev) { + if (!attached) { + view.eventElementHandlers(event, eventElement); + if (event.editable || event.editable == undefined && options.editable) { + draggableEvent(event, eventElement); + if (seg.isEnd) { + view.resizableDayEvent(event, eventElement, colWidth); } } - rowContentHeight += levelHeight; - top += levelHeight; + attached = true; + view.trigger('eventMouseover', this, event, ev); // TODO: make sure this isn't being fired twice } - innerDiv.height(rowContentHeight); - } + }); } @@ -553,3 +507,131 @@ function Grid(element, options, methods) { }; + +function _renderDaySegs(segRows, view, minLeft, maxLeft, getTr, dayContentLeft, dayContentRight, segmentContainer, bootstrapEventHandlers) { + + var options=view.options, + rtl=options.isRTL, + event, + className, + left, + right, + eventLefts=[], + eventRights=[], + html='', + eventElements, + eventElement, + triggerRes, + eventOuterHeights=[], + eventHSides=[], + l=0, + i=0, len=segRows.length, levels, + tr, + td, + innerDiv, + top, + rowContentHeight, + j, segs, + k, seg; + + // calculate desired position/dimensions, create html + eachLeaf(segRows, function(l, seg) { + event = seg.event; + className = 'fc-event fc-event-hori '; + if (rtl) { + if (seg.isStart) { + className += 'fc-corner-right '; + } + if (seg.isEnd) { + className += 'fc-corner-left '; + } + left = seg.isEnd ? dayContentLeft(seg.end.getDay()-1) : minLeft; + right = seg.isStart ? dayContentRight(seg.start.getDay()) : maxLeft; + }else{ + if (seg.isStart) { + className += 'fc-corner-left '; + } + if (seg.isEnd) { + className += 'fc-corner-right '; + } + left = seg.isStart ? dayContentLeft(seg.start.getDay()) : minLeft; + right = seg.isEnd ? dayContentRight(seg.end.getDay()-1) : maxLeft; + } + eventLefts[l] = left; + eventRights[l] = right; + html += + ""; + }); + segmentContainer.html(html); + eventElements = segmentContainer.children(); + + // retrieve elements, run through eventRender callback, record outer-edge dimensions + eachLeaf(segRows, function(l, seg) { + event = seg.event; + eventElement = eventElements.eq(l); + triggerRes = view.trigger('eventRender', event, event, eventElement); + if (triggerRes === false) { + eventElement.remove(); + }else{ + if (triggerRes && triggerRes !== true) { + eventElement.remove(); + eventElement = $(triggerRes) + .css('left', eventLefts[l]) + .appendTo(segmentContainer); + } + seg.element = eventElement; + eventOuterHeights[l] = eventElement.outerHeight(true); + eventHSides[l] = hsides(eventElement, true); + bootstrapEventHandlers(event, seg, eventElement); + view.reportEventElement(event, eventElement); + } + }); + + // set all positions/dimensions at once + for (; i)[^>]*$|^#([\w-]+)$/, + // Is it a simple selector + isSimple = /^.[^:#\[\.,]*$/; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + // Make sure that a selection was provided + selector = selector || document; + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this[0] = selector; + this.length = 1; + this.context = selector; + return this; + } + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + var match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) + selector = jQuery.clean( [ match[1] ], context ); + + // HANDLE: $("#id") + else { + var elem = document.getElementById( match[3] ); + + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem && elem.id != match[3] ) + return jQuery().find( selector ); + + // Otherwise, we inject the element directly into the jQuery object + var ret = jQuery( elem || [] ); + ret.context = document; + ret.selector = selector; + return ret; + } + + // HANDLE: $(expr, [context]) + // (which is just equivalent to: $(content).find(expr) + } else + return jQuery( context ).find( selector ); + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) + return jQuery( document ).ready( selector ); + + // Make sure that old selector state is passed along + if ( selector.selector && selector.context ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return this.setArray(jQuery.isArray( selector ) ? + selector : + jQuery.makeArray(selector)); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.3.2", + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num === undefined ? + + // Return a 'clean' array + Array.prototype.slice.call( this ) : + + // Return just the object + this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = jQuery( elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) + ret.selector = this.selector + (this.selector ? " " : "") + selector; + else if ( name ) + ret.selector = this.selector + "." + name + "(" + selector + ")"; + + // Return the newly-formed element set + return ret; + }, + + // Force the current matched set of elements to become + // the specified array of elements (destroying the stack in the process) + // You should use pushStack() in order to do this, but maintain the stack + setArray: function( elems ) { + // Resetting the length to 0, then using the native Array push + // is a super-fast way to populate an object with array-like properties + this.length = 0; + Array.prototype.push.apply( this, elems ); + + return this; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem && elem.jquery ? elem[0] : elem + , this ); + }, + + attr: function( name, value, type ) { + var options = name; + + // Look for the case where we're accessing a style value + if ( typeof name === "string" ) + if ( value === undefined ) + return this[0] && jQuery[ type || "attr" ]( this[0], name ); + + else { + options = {}; + options[ name ] = value; + } + + // Check to see if we're setting style values + return this.each(function(i){ + // Set all the styles + for ( name in options ) + jQuery.attr( + type ? + this.style : + this, + name, jQuery.prop( this, options[ name ], type, i, name ) + ); + }); + }, + + css: function( key, value ) { + // ignore negative width and height values + if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) + value = undefined; + return this.attr( key, value, "curCSS" ); + }, + + text: function( text ) { + if ( typeof text !== "object" && text != null ) + return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); + + var ret = ""; + + jQuery.each( text || this, function(){ + jQuery.each( this.childNodes, function(){ + if ( this.nodeType != 8 ) + ret += this.nodeType != 1 ? + this.nodeValue : + jQuery.fn.text( [ this ] ); + }); + }); + + return ret; + }, + + wrapAll: function( html ) { + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).clone(); + + if ( this[0].parentNode ) + wrap.insertBefore( this[0] ); + + wrap.map(function(){ + var elem = this; + + while ( elem.firstChild ) + elem = elem.firstChild; + + return elem; + }).append(this); + } + + return this; + }, + + wrapInner: function( html ) { + return this.each(function(){ + jQuery( this ).contents().wrapAll( html ); + }); + }, + + wrap: function( html ) { + return this.each(function(){ + jQuery( this ).wrapAll( html ); + }); + }, + + append: function() { + return this.domManip(arguments, true, function(elem){ + if (this.nodeType == 1) + this.appendChild( elem ); + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function(elem){ + if (this.nodeType == 1) + this.insertBefore( elem, this.firstChild ); + }); + }, + + before: function() { + return this.domManip(arguments, false, function(elem){ + this.parentNode.insertBefore( elem, this ); + }); + }, + + after: function() { + return this.domManip(arguments, false, function(elem){ + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + }, + + end: function() { + return this.prevObject || jQuery( [] ); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: [].push, + sort: [].sort, + splice: [].splice, + + find: function( selector ) { + if ( this.length === 1 ) { + var ret = this.pushStack( [], "find", selector ); + ret.length = 0; + jQuery.find( selector, this[0], ret ); + return ret; + } else { + return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ + return jQuery.find( selector, elem ); + })), "find", selector ); + } + }, + + clone: function( events ) { + // Do the clone + var ret = this.map(function(){ + if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { + // IE copies events bound via attachEvent when + // using cloneNode. Calling detachEvent on the + // clone will also remove the events from the orignal + // In order to get around this, we use innerHTML. + // Unfortunately, this means some modifications to + // attributes in IE that are actually only stored + // as properties will not be copied (such as the + // the name attribute on an input). + var html = this.outerHTML; + if ( !html ) { + var div = this.ownerDocument.createElement("div"); + div.appendChild( this.cloneNode(true) ); + html = div.innerHTML; + } + + return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; + } else + return this.cloneNode(true); + }); + + // Copy the events from the original to the clone + if ( events === true ) { + var orig = this.find("*").andSelf(), i = 0; + + ret.find("*").andSelf().each(function(){ + if ( this.nodeName !== orig[i].nodeName ) + return; + + var events = jQuery.data( orig[i], "events" ); + + for ( var type in events ) { + for ( var handler in events[ type ] ) { + jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); + } + } + + i++; + }); + } + + // Return the cloned set + return ret; + }, + + filter: function( selector ) { + return this.pushStack( + jQuery.isFunction( selector ) && + jQuery.grep(this, function(elem, i){ + return selector.call( elem, i ); + }) || + + jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ + return elem.nodeType === 1; + }) ), "filter", selector ); + }, + + closest: function( selector ) { + var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, + closer = 0; + + return this.map(function(){ + var cur = this; + while ( cur && cur.ownerDocument ) { + if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { + jQuery.data(cur, "closest", closer); + return cur; + } + cur = cur.parentNode; + closer++; + } + }); + }, + + not: function( selector ) { + if ( typeof selector === "string" ) + // test special case where just one selector is passed in + if ( isSimple.test( selector ) ) + return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); + else + selector = jQuery.multiFilter( selector, this ); + + var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; + return this.filter(function() { + return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; + }); + }, + + add: function( selector ) { + return this.pushStack( jQuery.unique( jQuery.merge( + this.get(), + typeof selector === "string" ? + jQuery( selector ) : + jQuery.makeArray( selector ) + ))); + }, + + is: function( selector ) { + return !!selector && jQuery.multiFilter( selector, this ).length > 0; + }, + + hasClass: function( selector ) { + return !!selector && this.is( "." + selector ); + }, + + val: function( value ) { + if ( value === undefined ) { + var elem = this[0]; + + if ( elem ) { + if( jQuery.nodeName( elem, 'option' ) ) + return (elem.attributes.value || {}).specified ? elem.value : elem.text; + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type == "select-one"; + + // Nothing was selected + if ( index < 0 ) + return null; + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) + return value; + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + } + + // Everything else, we just grab the value + return (elem.value || "").replace(/\r/g, ""); + + } + + return undefined; + } + + if ( typeof value === "number" ) + value += ''; + + return this.each(function(){ + if ( this.nodeType != 1 ) + return; + + if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) + this.checked = (jQuery.inArray(this.value, value) >= 0 || + jQuery.inArray(this.name, value) >= 0); + + else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(value); + + jQuery( "option", this ).each(function(){ + this.selected = (jQuery.inArray( this.value, values ) >= 0 || + jQuery.inArray( this.text, values ) >= 0); + }); + + if ( !values.length ) + this.selectedIndex = -1; + + } else + this.value = value; + }); + }, + + html: function( value ) { + return value === undefined ? + (this[0] ? + this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : + null) : + this.empty().append( value ); + }, + + replaceWith: function( value ) { + return this.after( value ).remove(); + }, + + eq: function( i ) { + return this.slice( i, +i + 1 ); + }, + + slice: function() { + return this.pushStack( Array.prototype.slice.apply( this, arguments ), + "slice", Array.prototype.slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function(elem, i){ + return callback.call( elem, i, elem ); + })); + }, + + andSelf: function() { + return this.add( this.prevObject ); + }, + + domManip: function( args, table, callback ) { + if ( this[0] ) { + var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), + scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), + first = fragment.firstChild; + + if ( first ) + for ( var i = 0, l = this.length; i < l; i++ ) + callback.call( root(this[i], first), this.length > 1 || i > 0 ? + fragment.cloneNode(true) : fragment ); + + if ( scripts ) + jQuery.each( scripts, evalScript ); + } + + return this; + + function root( elem, cur ) { + return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? + (elem.getElementsByTagName("tbody")[0] || + elem.appendChild(elem.ownerDocument.createElement("tbody"))) : + elem; + } + } +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +function evalScript( i, elem ) { + if ( elem.src ) + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + + else + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + + if ( elem.parentNode ) + elem.parentNode.removeChild( elem ); +} + +function now(){ + return +new Date; +} + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) + target = {}; + + // extend jQuery itself if only one argument is passed + if ( length == i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) + // Extend the base object + for ( var name in options ) { + var src = target[ name ], copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) + continue; + + // Recurse if we're merging object values + if ( deep && copy && typeof copy === "object" && !copy.nodeType ) + target[ name ] = jQuery.extend( deep, + // Never move original objects, clone them + src || ( copy.length != null ? [ ] : { } ) + , copy ); + + // Don't bring in undefined values + else if ( copy !== undefined ) + target[ name ] = copy; + + } + + // Return the modified object + return target; +}; + +// exclude the following css properties to add px +var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, + // cache defaultView + defaultView = document.defaultView || {}, + toString = Object.prototype.toString; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) + window.jQuery = _jQuery; + + return jQuery; + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return toString.call(obj) === "[object Function]"; + }, + + isArray: function( obj ) { + return toString.call(obj) === "[object Array]"; + }, + + // check if an element is in a (or is an) XML document + isXMLDoc: function( elem ) { + return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || + !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument ); + }, + + // Evalulates a script in a global context + globalEval: function( data ) { + if ( data && /\S/.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + if ( jQuery.support.scriptEval ) + script.appendChild( document.createTextNode( data ) ); + else + script.text = data; + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, length = object.length; + + if ( args ) { + if ( length === undefined ) { + for ( name in object ) + if ( callback.apply( object[ name ], args ) === false ) + break; + } else + for ( ; i < length; ) + if ( callback.apply( object[ i++ ], args ) === false ) + break; + + // A special, fast, case for the most common use of each + } else { + if ( length === undefined ) { + for ( name in object ) + if ( callback.call( object[ name ], name, object[ name ] ) === false ) + break; + } else + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} + } + + return object; + }, + + prop: function( elem, value, type, i, name ) { + // Handle executable functions + if ( jQuery.isFunction( value ) ) + value = value.call( elem, i ); + + // Handle passing in a number to a CSS property + return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? + value + "px" : + value; + }, + + className: { + // internal only, use addClass("class") + add: function( elem, classNames ) { + jQuery.each((classNames || "").split(/\s+/), function(i, className){ + if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) + elem.className += (elem.className ? " " : "") + className; + }); + }, + + // internal only, use removeClass("class") + remove: function( elem, classNames ) { + if (elem.nodeType == 1) + elem.className = classNames !== undefined ? + jQuery.grep(elem.className.split(/\s+/), function(className){ + return !jQuery.className.has( classNames, className ); + }).join(" ") : + ""; + }, + + // internal only, use hasClass("class") + has: function( elem, className ) { + return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; + } + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var old = {}; + // Remember the old values, and insert the new ones + for ( var name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + callback.call( elem ); + + // Revert the old values + for ( var name in options ) + elem.style[ name ] = old[ name ]; + }, + + css: function( elem, name, force, extra ) { + if ( name == "width" || name == "height" ) { + var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; + + function getWH() { + val = name == "width" ? elem.offsetWidth : elem.offsetHeight; + + if ( extra === "border" ) + return; + + jQuery.each( which, function() { + if ( !extra ) + val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; + if ( extra === "margin" ) + val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; + else + val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; + }); + } + + if ( elem.offsetWidth !== 0 ) + getWH(); + else + jQuery.swap( elem, props, getWH ); + + return Math.max(0, Math.round(val)); + } + + return jQuery.curCSS( elem, name, force ); + }, + + curCSS: function( elem, name, force ) { + var ret, style = elem.style; + + // We need to handle opacity special in IE + if ( name == "opacity" && !jQuery.support.opacity ) { + ret = jQuery.attr( style, "opacity" ); + + return ret == "" ? + "1" : + ret; + } + + // Make sure we're using the right name for getting the float value + if ( name.match( /float/i ) ) + name = styleFloat; + + if ( !force && style && style[ name ] ) + ret = style[ name ]; + + else if ( defaultView.getComputedStyle ) { + + // Only "float" is needed here + if ( name.match( /float/i ) ) + name = "float"; + + name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); + + var computedStyle = defaultView.getComputedStyle( elem, null ); + + if ( computedStyle ) + ret = computedStyle.getPropertyValue( name ); + + // We should always get a number back from opacity + if ( name == "opacity" && ret == "" ) + ret = "1"; + + } else if ( elem.currentStyle ) { + var camelCase = name.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + + ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { + // Remember the original values + var left = style.left, rsLeft = elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + elem.runtimeStyle.left = elem.currentStyle.left; + style.left = ret || 0; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + elem.runtimeStyle.left = rsLeft; + } + } + + return ret; + }, + + clean: function( elems, context, fragment ) { + context = context || document; + + // !context.createElement fails in IE with an error but returns typeof 'object' + if ( typeof context.createElement === "undefined" ) + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { + var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); + if ( match ) + return [ context.createElement( match[1] ) ]; + } + + var ret = [], scripts = [], div = context.createElement("div"); + + jQuery.each(elems, function(i, elem){ + if ( typeof elem === "number" ) + elem += ''; + + if ( !elem ) + return; + + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ + return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? + all : + front + ">"; + }); + + // Trim whitespace, otherwise indexOf won't work as expected + var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); + + var wrap = + // option or optgroup + !tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && + [ 1, "", "
" ] || + + !tags.indexOf("", "" ] || + + // matched above + (!tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + // IE can't serialize and + + + + + +
+ + diff --git a/tests/many_agenda_events_json.txt b/tests/many_agenda_events_json.txt new file mode 100644 index 0000000..6728fcc --- /dev/null +++ b/tests/many_agenda_events_json.txt @@ -0,0 +1,2046 @@ +[ +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13' +}, +{ + title: 'event', + start: '2009-12-13 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-13 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14' +}, +{ + title: 'event', + start: '2009-12-14 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-14 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15' +}, +{ + title: 'event', + start: '2009-12-15 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-15 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16' +}, +{ + title: 'event', + start: '2009-12-16 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-16 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17' +}, +{ + title: 'event', + start: '2009-12-17 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-17 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18' +}, +{ + title: 'event', + start: '2009-12-18 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-18 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19' +}, +{ + title: 'event', + start: '2009-12-19 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 23:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 00:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 01:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 02:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 03:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 04:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 05:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 06:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 07:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 08:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 09:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 10:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 11:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 12:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 13:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 14:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 15:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 16:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 17:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 18:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 19:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 20:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 21:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 22:00:00', + allDay: false +}, +{ + title: 'event', + start: '2009-12-19 23:00:00', + allDay: false +} +] diff --git a/tests/many_events.html b/tests/many_events.html index 446be34..73b4c76 100644 --- a/tests/many_events.html +++ b/tests/many_events.html @@ -7,19 +7,16 @@