mirror of
https://github.com/wassname/fullcalendar.git
synced 2026-07-21 12:30:17 +08:00
v1.4.1
This commit is contained in:
+37
-10
@@ -23,13 +23,23 @@ views.agendaWeek = function(element, options) {
|
||||
if (delta) {
|
||||
addDays(date, delta * 7);
|
||||
}
|
||||
var visStart = this.visStart = cloneDate(
|
||||
this.start = addDays(cloneDate(date), -((date.getDay() - options.firstDay + 7) % 7))
|
||||
),
|
||||
visEnd = this.visEnd = cloneDate(
|
||||
this.end = addDays(cloneDate(visStart), 7)
|
||||
);
|
||||
if (!options.weekends) {
|
||||
skipWeekend(visStart);
|
||||
skipWeekend(visEnd, -1, true);
|
||||
}
|
||||
this.title = formatDates(
|
||||
this.start = this.visStart = addDays(cloneDate(date), -((date.getDay() - options.firstDay + 7) % 7)),
|
||||
addDays(cloneDate(this.end = this.visEnd = addDays(cloneDate(this.start), 7)), -1),
|
||||
visStart,
|
||||
addDays(cloneDate(visEnd), -1),
|
||||
this.option('titleFormat'),
|
||||
options
|
||||
);
|
||||
this.renderAgenda(7, this.option('columnFormat'), fetchEvents);
|
||||
this.renderAgenda(options.weekends ? 7 : 5, this.option('columnFormat'), fetchEvents);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -39,6 +49,9 @@ views.agendaDay = function(element, options) {
|
||||
render: function(date, delta, fetchEvents) {
|
||||
if (delta) {
|
||||
addDays(date, delta);
|
||||
if (!options.weekends) {
|
||||
skipWeekend(date, delta < 0 ? -1 : 1);
|
||||
}
|
||||
}
|
||||
this.title = formatDate(date, this.option('titleFormat'), options);
|
||||
this.start = this.visStart = cloneDate(date, true);
|
||||
@@ -55,6 +68,7 @@ function Agenda(element, options, methods) {
|
||||
axisWidth, colWidth, slotHeight,
|
||||
cachedDaySegs, cachedSlotSegs,
|
||||
tm, firstDay,
|
||||
nwe, // no weekends (int)
|
||||
rtl, dis, dit, // day index sign / translate
|
||||
// ...
|
||||
|
||||
@@ -104,7 +118,8 @@ function Agenda(element, options, methods) {
|
||||
colCnt = c;
|
||||
|
||||
// update option-derived variables
|
||||
tm = options.theme ? 'ui' : 'fc';
|
||||
tm = options.theme ? 'ui' : 'fc';
|
||||
nwe = options.weekends ? 0 : 1;
|
||||
firstDay = options.firstDay;
|
||||
if (rtl = options.isRTL) {
|
||||
dis = -1;
|
||||
@@ -136,10 +151,13 @@ function Agenda(element, options, methods) {
|
||||
tm + '-state-default' +
|
||||
"'>" + formatDate(d, colFormat, options) + "</th>";
|
||||
addDays(d, dis);
|
||||
if (nwe) {
|
||||
skipWeekend(d, dis);
|
||||
}
|
||||
}
|
||||
s+= "<th class='" + tm + "-state-default'> </th></tr>";
|
||||
s += "<th class='" + tm + "-state-default'> </th></tr>";
|
||||
if (options.allDaySlot) {
|
||||
s+= "<tr class='fc-all-day'>" +
|
||||
s += "<tr class='fc-all-day'>" +
|
||||
"<th class='fc-axis fc-leftmost " + tm + "-state-default'>" + options.allDayText + "</th>" +
|
||||
"<td colspan='" + colCnt + "' class='" + tm + "-state-default'>" +
|
||||
"<div class='fc-day-content'><div> </div></div></td>" +
|
||||
@@ -152,7 +170,7 @@ function Agenda(element, options, methods) {
|
||||
head.find('td').click(slotClick);
|
||||
|
||||
// body
|
||||
d = new Date(1970, 0, 1);
|
||||
d = zeroDate();
|
||||
s = "<table>";
|
||||
for (i=0; d.getDate() != 2; i++) {
|
||||
minutes = d.getMinutes();
|
||||
@@ -183,6 +201,9 @@ function Agenda(element, options, methods) {
|
||||
(+d == +today ? tm + '-state-highlight fc-today' : 'fc-not-today') +
|
||||
"'><div class='fc-day-content'><div> </div></div></td>";
|
||||
addDays(d, dis);
|
||||
if (nwe) {
|
||||
skipWeekend(d, dis);
|
||||
}
|
||||
}
|
||||
s += "</tr></table></div>";
|
||||
bg = $(s).appendTo(element);
|
||||
@@ -196,6 +217,9 @@ function Agenda(element, options, methods) {
|
||||
$(this).text(formatDate(d, colFormat, options));
|
||||
this.className = this.className.replace(/^fc-\w+(?= )/, 'fc-' + dayIDs[d.getDay()]);
|
||||
addDays(d, dis);
|
||||
if (nwe) {
|
||||
skipWeekend(d, dis);
|
||||
}
|
||||
});
|
||||
|
||||
// change classes of background stripes
|
||||
@@ -214,6 +238,9 @@ function Agenda(element, options, methods) {
|
||||
.removeClass(tm + '-state-highlight');
|
||||
}
|
||||
addDays(d, dis);
|
||||
if (nwe) {
|
||||
skipWeekend(d, dis);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
@@ -226,7 +253,7 @@ function Agenda(element, options, methods) {
|
||||
|
||||
|
||||
function resetScroll() {
|
||||
var d0 = new Date(1970, 0, 1),
|
||||
var d0 = zeroDate(),
|
||||
scrollDate = cloneDate(d0);
|
||||
scrollDate.setHours(options.firstHour);
|
||||
var go = function() {
|
||||
@@ -394,13 +421,13 @@ function Agenda(element, options, methods) {
|
||||
}
|
||||
if (leftRounded) {
|
||||
className += 'fc-corner-left ';
|
||||
left = bg.find('td:eq('+(((leftDay-firstDay+colCnt)%colCnt)*dis+dit)+') div div').position().left + axisWidth;
|
||||
left = bg.find('td:eq('+(((leftDay-Math.max(firstDay,nwe)+colCnt)%colCnt)*dis+dit)+') div div').position().left + axisWidth;
|
||||
}else{
|
||||
left = axisWidth;
|
||||
}
|
||||
if (rightRounded) {
|
||||
className += 'fc-corner-right ';
|
||||
right = bg.find('td:eq('+(((rightDay-firstDay+colCnt)%colCnt)*dis+dit)+') div div');
|
||||
right = bg.find('td:eq('+(((rightDay-Math.max(firstDay,nwe)+colCnt)%colCnt)*dis+dit)+') div div');
|
||||
right = right.position().left + right.width() + axisWidth;
|
||||
}else{
|
||||
right = axisWidth + bg.width();
|
||||
|
||||
+41
-40
@@ -16,49 +16,50 @@
|
||||
options = options || {};
|
||||
|
||||
return function(start, end, callback) {
|
||||
$.getJSON(feedUrl + "?alt=json-in-script&callback=?",
|
||||
{
|
||||
'start-min': $.fullCalendar.formatDate(start, 'u'),
|
||||
'start-max': $.fullCalendar.formatDate(end, 'u'),
|
||||
'singleevents': true,
|
||||
'max-results': 9999
|
||||
},
|
||||
function(data) {
|
||||
var events = [];
|
||||
if (data.feed.entry) {
|
||||
$.each(data.feed.entry, function(i, entry) {
|
||||
var startStr = entry['gd$when'][0]['startTime'],
|
||||
start = $.fullCalendar.parseDate(startStr),
|
||||
end = $.fullCalendar.parseDate(entry['gd$when'][0]['endTime']),
|
||||
allDay = startStr.indexOf('T') == -1,
|
||||
classNames = [],
|
||||
url;
|
||||
$.each(entry.link, function() {
|
||||
if (this.type == 'text/html') {
|
||||
url = this.href;
|
||||
}
|
||||
});
|
||||
if (allDay) {
|
||||
end = new Date(end - 1); // make inclusive
|
||||
var params = {
|
||||
'start-min': $.fullCalendar.formatDate(start, 'u'),
|
||||
'start-max': $.fullCalendar.formatDate(end, 'u'),
|
||||
'singleevents': true,
|
||||
'max-results': 9999
|
||||
};
|
||||
if (options.currentTimezone) {
|
||||
params.ctz = options.currentTimezone.replace(' ', '_');
|
||||
}
|
||||
$.getJSON(feedUrl + "?alt=json-in-script&callback=?", params, function(data) {
|
||||
var events = [];
|
||||
if (data.feed.entry) {
|
||||
$.each(data.feed.entry, function(i, entry) {
|
||||
var startStr = entry['gd$when'][0]['startTime'],
|
||||
start = $.fullCalendar.parseISO8601(startStr, true),
|
||||
end = $.fullCalendar.parseISO8601(entry['gd$when'][0]['endTime'], true),
|
||||
allDay = startStr.indexOf('T') == -1,
|
||||
url;
|
||||
$.each(entry.link, function() {
|
||||
if (this.type == 'text/html') {
|
||||
url = this.href;
|
||||
}
|
||||
events.push({
|
||||
id: entry['gCal$uid']['value'],
|
||||
title: entry['title']['$t'],
|
||||
url: url,
|
||||
start: $.fullCalendar.parseDate(entry['gd$when'][0]['startTime']),
|
||||
end: end,
|
||||
allDay: allDay,
|
||||
location: entry['gd$where'][0]['valueString'],
|
||||
description: entry['content']['$t'],
|
||||
className: options.className,
|
||||
editable: options.editable || false
|
||||
});
|
||||
});
|
||||
}
|
||||
callback(events);
|
||||
});
|
||||
if (allDay) {
|
||||
$.fullCalendar.addDays(end, -1); // make inclusive
|
||||
}
|
||||
events.push({
|
||||
id: entry['gCal$uid']['value'],
|
||||
title: entry['title']['$t'],
|
||||
url: url,
|
||||
start: start,
|
||||
end: end,
|
||||
allDay: allDay,
|
||||
location: entry['gd$where'][0]['valueString'],
|
||||
description: entry['content']['$t'],
|
||||
className: options.className,
|
||||
editable: options.editable || false
|
||||
});
|
||||
});
|
||||
}
|
||||
callback(events);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})(jQuery);
|
||||
})(jQuery);
|
||||
|
||||
+76
-20
@@ -13,22 +13,39 @@ views.month = function(element, options) {
|
||||
addMonths(date, delta);
|
||||
date.setDate(1);
|
||||
}
|
||||
// start/end
|
||||
var start = this.start = cloneDate(date, true);
|
||||
start.setDate(1);
|
||||
this.title = formatDates(
|
||||
this.end = addMonths(cloneDate(start), 1);
|
||||
// visStart/visEnd
|
||||
var visStart = this.visStart = cloneDate(start),
|
||||
visEnd = this.visEnd = cloneDate(this.end),
|
||||
nwe = options.weekends ? 0 : 1;
|
||||
if (nwe) {
|
||||
skipWeekend(visStart);
|
||||
skipWeekend(visEnd, -1, true);
|
||||
}
|
||||
addDays(visStart, -((visStart.getDay() - Math.max(options.firstDay, nwe) + 7) % 7));
|
||||
addDays(visEnd, (7 - visEnd.getDay() + Math.max(options.firstDay, nwe)) % 7);
|
||||
// row count
|
||||
var rowCnt = Math.round((visEnd - visStart) / (DAY_MS * 7));
|
||||
if (options.weekMode == 'fixed') {
|
||||
addDays(visEnd, (6 - rowCnt) * 7);
|
||||
rowCnt = 6;
|
||||
}
|
||||
// title
|
||||
this.title = formatDate(
|
||||
start,
|
||||
addDays(cloneDate(this.end = addMonths(cloneDate(start), 1)), -1),
|
||||
this.option('titleFormat'),
|
||||
options
|
||||
);
|
||||
addDays(this.visStart = cloneDate(start), -((start.getDay() - options.firstDay + 7) % 7));
|
||||
addDays(this.visEnd = cloneDate(this.end), (7 - this.visEnd.getDay() + options.firstDay) % 7);
|
||||
var rowCnt = Math.round((this.visEnd - this.visStart) / (DAY_MS * 7));
|
||||
if (options.weekMode == 'fixed') {
|
||||
addDays(this.visEnd, (6 - rowCnt) * 7);
|
||||
rowCnt = 6;
|
||||
}
|
||||
this.renderGrid(rowCnt, 7, this.option('columnFormat'), true, fetchEvents);
|
||||
// render
|
||||
this.renderGrid(
|
||||
rowCnt, options.weekends ? 7 : 5,
|
||||
this.option('columnFormat'),
|
||||
true,
|
||||
fetchEvents
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -39,13 +56,28 @@ views.basicWeek = function(element, options) {
|
||||
if (delta) {
|
||||
addDays(date, delta * 7);
|
||||
}
|
||||
var visStart = this.visStart = cloneDate(
|
||||
this.start = addDays(cloneDate(date), -((date.getDay() - options.firstDay + 7) % 7))
|
||||
),
|
||||
visEnd = this.visEnd = cloneDate(
|
||||
this.end = addDays(cloneDate(visStart), 7)
|
||||
);
|
||||
if (!options.weekends) {
|
||||
skipWeekend(visStart);
|
||||
skipWeekend(visEnd, -1, true);
|
||||
}
|
||||
this.title = formatDates(
|
||||
this.start = this.visStart = addDays(cloneDate(date), -((date.getDay() - options.firstDay + 7) % 7)),
|
||||
addDays(cloneDate(this.end = this.visEnd = addDays(cloneDate(this.start), 7)), -1),
|
||||
visStart,
|
||||
addDays(cloneDate(visEnd), -1),
|
||||
this.option('titleFormat'),
|
||||
options
|
||||
);
|
||||
this.renderGrid(1, 7, this.option('columnFormat'), false, fetchEvents);
|
||||
this.renderGrid(
|
||||
1, options.weekends ? 7 : 5,
|
||||
this.option('columnFormat'),
|
||||
false,
|
||||
fetchEvents
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -55,6 +87,9 @@ views.basicDay = function(element, options) {
|
||||
render: function(date, delta, fetchEvents) {
|
||||
if (delta) {
|
||||
addDays(date, delta);
|
||||
if (!options.weekends) {
|
||||
skipWeekend(date, delta < 0 ? -1 : 1);
|
||||
}
|
||||
}
|
||||
this.title = formatDate(date, this.option('titleFormat'), options);
|
||||
this.start = this.visStart = cloneDate(date, true);
|
||||
@@ -73,6 +108,7 @@ var tdHeightBug, rtlLeftDiff;
|
||||
function Grid(element, options, methods) {
|
||||
|
||||
var tm, firstDay,
|
||||
nwe, // no weekends (int)
|
||||
rtl, dis, dit, // day index sign / translate
|
||||
rowCnt, colCnt,
|
||||
colWidth,
|
||||
@@ -115,7 +151,8 @@ function Grid(element, options, methods) {
|
||||
colCnt = c;
|
||||
|
||||
// update option-derived variables
|
||||
tm = options.theme ? 'ui' : 'fc';
|
||||
tm = options.theme ? 'ui' : 'fc';
|
||||
nwe = options.weekends ? 0 : 1;
|
||||
firstDay = options.firstDay;
|
||||
if (rtl = options.isRTL) {
|
||||
dis = -1;
|
||||
@@ -141,6 +178,9 @@ function Grid(element, options, methods) {
|
||||
(i==dit ? ' fc-leftmost' : '') +
|
||||
"'>" + formatDate(d, colFormat, options) + "</th>";
|
||||
addDays(d, 1);
|
||||
if (nwe) {
|
||||
skipWeekend(d);
|
||||
}
|
||||
}
|
||||
thead = $(s + "</tr></thead>").appendTo(table);
|
||||
|
||||
@@ -160,6 +200,9 @@ function Grid(element, options, methods) {
|
||||
(showNumbers ? "<div class='fc-day-number'>" + d.getDate() + "</div>" : '') +
|
||||
"<div class='fc-day-content'><div> </div></div></td>";
|
||||
addDays(d, 1);
|
||||
if (nwe) {
|
||||
skipWeekend(d);
|
||||
}
|
||||
}
|
||||
s += "</tr>";
|
||||
}
|
||||
@@ -187,6 +230,9 @@ function Grid(element, options, methods) {
|
||||
"<div class='fc-day-content'><div> </div></div>" +
|
||||
"</td>";
|
||||
addDays(d, 1);
|
||||
if (nwe) {
|
||||
skipWeekend(d);
|
||||
}
|
||||
}
|
||||
s += "</tr>";
|
||||
}
|
||||
@@ -216,6 +262,9 @@ function Grid(element, options, methods) {
|
||||
}
|
||||
td.find('div.fc-day-number').text(d.getDate());
|
||||
addDays(d, 1);
|
||||
if (nwe) {
|
||||
skipWeekend(d);
|
||||
}
|
||||
});
|
||||
|
||||
if (rowCnt == 1) { // more changes likely (week or day view)
|
||||
@@ -226,6 +275,9 @@ function Grid(element, options, methods) {
|
||||
$(this).text(formatDate(d, colFormat, options));
|
||||
this.className = this.className.replace(/^fc-\w+(?= )/, 'fc-' + dayIDs[d.getDay()]);
|
||||
addDays(d, 1);
|
||||
if (nwe) {
|
||||
skipWeekend(d);
|
||||
}
|
||||
});
|
||||
|
||||
// redo cell day-of-weeks
|
||||
@@ -233,6 +285,9 @@ function Grid(element, options, methods) {
|
||||
tbody.find('td').each(function() {
|
||||
this.className = this.className.replace(/^fc-\w+(?= )/, 'fc-' + dayIDs[d.getDay()]);
|
||||
addDays(d, 1);
|
||||
if (nwe) {
|
||||
skipWeekend(d);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
@@ -246,10 +301,11 @@ function Grid(element, options, methods) {
|
||||
|
||||
|
||||
function dayClick(ev) {
|
||||
var date = addDays(
|
||||
cloneDate(view.visStart),
|
||||
parseInt(this.className.match(/fc\-day(\d+)/)[1])
|
||||
);
|
||||
var n = parseInt(this.className.match(/fc\-day(\d+)/)[1]),
|
||||
date = addDays(
|
||||
cloneDate(view.visStart),
|
||||
Math.floor(n/colCnt) * 7 + n % colCnt
|
||||
);
|
||||
view.trigger('dayClick', this, date, true, ev);
|
||||
}
|
||||
|
||||
@@ -359,10 +415,10 @@ function Grid(element, options, methods) {
|
||||
event = seg.event;
|
||||
className = 'fc-event fc-event-hori ';
|
||||
startElm = seg.isStart ?
|
||||
tr.find('td:eq('+((seg.start.getDay()-firstDay+colCnt)%colCnt)+') div div') :
|
||||
tr.find('td:eq('+((seg.start.getDay()-Math.max(firstDay,nwe)+colCnt)%colCnt)+') div div') :
|
||||
tbody;
|
||||
endElm = seg.isEnd ?
|
||||
tr.find('td:eq('+((seg.end.getDay()-firstDay+colCnt-1)%colCnt)+') div div') :
|
||||
tr.find('td:eq('+((seg.end.getDay()-Math.max(firstDay,nwe)+colCnt-1)%colCnt)+') div div') :
|
||||
tbody;
|
||||
if (rtl) {
|
||||
left = endElm.position().left;
|
||||
|
||||
+9
-4
@@ -16,6 +16,7 @@ var defaults = {
|
||||
center: '',
|
||||
right: 'today prev,next'
|
||||
},
|
||||
weekends: true,
|
||||
|
||||
// editing
|
||||
//editable: false,
|
||||
@@ -159,10 +160,14 @@ $.fn.fullCalendar = function(options) {
|
||||
var date = new Date(),
|
||||
viewName, view, // the current view
|
||||
viewInstances = {};
|
||||
if (options.year != undefined) {
|
||||
date.setYear(options.year);
|
||||
|
||||
if (options.year != undefined && options.year != date.getFullYear()) {
|
||||
date.setDate(1);
|
||||
date.setMonth(0);
|
||||
date.setFullYear(options.year);
|
||||
}
|
||||
if (options.month != undefined) {
|
||||
if (options.month != undefined && options.month != date.getMonth()) {
|
||||
date.setDate(1);
|
||||
date.setMonth(options.month);
|
||||
}
|
||||
if (options.date != undefined) {
|
||||
@@ -396,7 +401,7 @@ $.fn.fullCalendar = function(options) {
|
||||
date = cloneDate(year); // provided 1 argument, a Date
|
||||
}else{
|
||||
if (year != undefined) {
|
||||
date.setYear(year);
|
||||
date.setFullYear(year);
|
||||
}
|
||||
if (month != undefined) {
|
||||
date.setMonth(month);
|
||||
|
||||
+17
@@ -47,6 +47,7 @@ function addDays(d, n, keepTime) { // deals with daylight savings
|
||||
}
|
||||
return d;
|
||||
}
|
||||
fc.addDays = addDays;
|
||||
|
||||
function addMinutes(d, n) {
|
||||
d.setMinutes(d.getMinutes() + n);
|
||||
@@ -68,6 +69,22 @@ function cloneDate(d, dontKeepTime) {
|
||||
return new Date(+d);
|
||||
}
|
||||
|
||||
function zeroDate() { // returns a Date with time 00:00:00 and dateOfMonth=1
|
||||
var i=0, d;
|
||||
do {
|
||||
d = new Date(1970, i++, 1);
|
||||
} while (d.getHours() != 0);
|
||||
return d;
|
||||
}
|
||||
|
||||
function skipWeekend(date, inc, excl) {
|
||||
inc = inc || 1;
|
||||
while (date.getDay()==0 || (excl && date.getDay()==1 || !excl && date.getDay()==6)) {
|
||||
addDays(date, inc);
|
||||
}
|
||||
return date;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Date Parsing
|
||||
|
||||
Reference in New Issue
Block a user