mirror of
https://github.com/wassname/fullcalendar.git
synced 2026-06-27 16:10:13 +08:00
Fixed current day class issue. Added ability to add resource classnames. Updated to reflect latest core updates. Fixed some IE7 issues around indexOf
This commit is contained in:
+3
-1
@@ -8,4 +8,6 @@ dist
|
||||
node_modules
|
||||
|
||||
# for bower
|
||||
components
|
||||
components
|
||||
|
||||
.DS_Store
|
||||
@@ -376,6 +376,14 @@ function EventManager(options, _sources) {
|
||||
}else{
|
||||
event.className = [];
|
||||
}
|
||||
|
||||
if (event.resources) {
|
||||
if (typeof event.resources == 'string') {
|
||||
event.resources = event.resources.split(/\s+/);
|
||||
}
|
||||
}else{
|
||||
event.resources = [];
|
||||
}
|
||||
// TODO: if there is no start date, return false to indicate an invalid event
|
||||
}
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ function DayEventRenderer() {
|
||||
function buildSegments(events) {
|
||||
var resources = t.getResources;
|
||||
|
||||
if (resources.length === 0){
|
||||
if (typeof resources === 'undefined'){
|
||||
return buildSegmentsTEMP(events); // TEMP!
|
||||
} else {
|
||||
var segments = [];
|
||||
@@ -193,7 +193,7 @@ function DayEventRenderer() {
|
||||
function eventsForResource(resource, events) {
|
||||
var resourceEvents = [];
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
if (events[i].resource && events[i].resource.indexOf(resource.id) >= 0) {
|
||||
if (events[i].resources && $.inArray(resource.id, events[i].resources) >= 0) {
|
||||
resourceEvents.push(events[i])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,28 +1,41 @@
|
||||
|
||||
fcViews.resourceDay = ResourceDayView;
|
||||
|
||||
function ResourceDayView(element, calendar) {
|
||||
var t = this;
|
||||
// exports
|
||||
t.render = render;
|
||||
// imports
|
||||
ResourceView.call(t, element, calendar, 'resourceDay');
|
||||
var opt = t.opt;
|
||||
var renderResource = t.renderResource;
|
||||
//var skipHiddenDays = t.skipHiddenDays;
|
||||
var formatDate = calendar.formatDate;
|
||||
var getResources = t.getResources;
|
||||
|
||||
function render(date, delta) {
|
||||
if (delta) {
|
||||
addDays(date, delta);
|
||||
}
|
||||
//skipHiddenDays(date, delta < 0 ? -1 : 1);
|
||||
var start = cloneDate(date, true);
|
||||
var end = addDays(cloneDate(start), 1);
|
||||
t.title = formatDate(date, opt('titleFormat'));
|
||||
t.start = t.visStart = start;
|
||||
t.end = t.visEnd = end;
|
||||
|
||||
renderResource(getResources.length);
|
||||
}
|
||||
function ResourceDayView(element, calendar) {
|
||||
var t = this;
|
||||
|
||||
|
||||
// exports
|
||||
t.render = render;
|
||||
|
||||
|
||||
// imports
|
||||
ResourceView.call(t, element, calendar, 'resourceDay');
|
||||
var opt = t.opt;
|
||||
var renderResource = t.renderResource;
|
||||
var skipHiddenDays = t.skipHiddenDays;
|
||||
var formatDate = calendar.formatDate;
|
||||
var getResources = t.getResources;
|
||||
|
||||
|
||||
function render(date, delta) {
|
||||
|
||||
if (delta) {
|
||||
addDays(date, delta);
|
||||
}
|
||||
skipHiddenDays(date, delta < 0 ? -1 : 1);
|
||||
|
||||
var start = cloneDate(date, true);
|
||||
var end = addDays(cloneDate(start), 1);
|
||||
|
||||
t.title = formatDate(date, opt('titleFormat'));
|
||||
|
||||
t.start = t.visStart = start;
|
||||
t.end = t.visEnd = end;
|
||||
|
||||
renderResource(getResources.length);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -24,6 +24,7 @@ function ResourceEventRenderer() {
|
||||
var getMaxMinute = t.getMaxMinute;
|
||||
var getMinMinute = t.getMinMinute;
|
||||
var timePosition = t.timePosition;
|
||||
var getIsCellAllDay = t.getIsCellAllDay;
|
||||
var colContentLeft = t.colContentLeft;
|
||||
var colContentRight = t.colContentRight;
|
||||
var cellToDate = t.cellToDate;
|
||||
@@ -44,7 +45,9 @@ function ResourceEventRenderer() {
|
||||
var calendar = t.calendar;
|
||||
var formatDate = calendar.formatDate;
|
||||
var formatDates = calendar.formatDates;
|
||||
var resources = t.getResources; // imported from ResourceView.js
|
||||
var resources = t.getResources;
|
||||
|
||||
|
||||
// overrides
|
||||
t.draggableDayEvent = draggableDayEvent;
|
||||
|
||||
@@ -74,6 +77,7 @@ function ResourceEventRenderer() {
|
||||
renderSlotSegs(compileSlotSegs(slotEvents), modifiedEventId);
|
||||
}
|
||||
|
||||
|
||||
function clearEvents() {
|
||||
getDaySegmentContainer().empty();
|
||||
getSlotSegmentContainer().empty();
|
||||
@@ -92,16 +96,13 @@ function ResourceEventRenderer() {
|
||||
segs = [];
|
||||
for (i=0; i<colCnt; i++) {
|
||||
|
||||
d = cloneDate(t.visStart); //cellToDate(0, i);
|
||||
|
||||
//d = cellToDate(0, i);
|
||||
d = cloneDate(t.visStart);
|
||||
addMinutes(d, minMinute);
|
||||
|
||||
// get events for this resource
|
||||
var resourceEvents = eventsForResource(resources[i], events); //$.map(eventsForResource(resources[i], events), slotEventEnd);
|
||||
var resourceEvents = eventsForResource(resources[i], events);
|
||||
col = stackAgendaSegs(
|
||||
sliceSegs(
|
||||
resourceEvents, //events,
|
||||
resourceEvents,
|
||||
visEventEnds,
|
||||
d,
|
||||
addMinutes(cloneDate(d), maxMinute-minMinute)
|
||||
@@ -122,15 +123,6 @@ function ResourceEventRenderer() {
|
||||
return segs;
|
||||
}
|
||||
|
||||
function eventsForResource(resource, events) {
|
||||
var resourceEvents = [];
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
if (events[i].resource && events[i].resource.indexOf(resource.id) >= 0) {
|
||||
resourceEvents.push(events[i])
|
||||
}
|
||||
}
|
||||
return resourceEvents;
|
||||
}
|
||||
|
||||
function sliceSegs(events, visEventEnds, start, end) {
|
||||
var segs = [],
|
||||
@@ -169,57 +161,16 @@ function ResourceEventRenderer() {
|
||||
}
|
||||
return segs.sort(segmentCompare);
|
||||
}
|
||||
|
||||
// event rendering calculation utilities
|
||||
function compileDaySegs(events) {
|
||||
var levels = stackSegs(sliceSegs(events, $.map(events, exclEndDay), t.visStart, t.visEnd)),
|
||||
i, levelCnt = levels.length,
|
||||
level,
|
||||
j, seg,
|
||||
segs = [];
|
||||
for (i = 0; i < levelCnt; i++) {
|
||||
level = levels[i];
|
||||
for (j = 0; j < level.length; j++) {
|
||||
seg = level[j];
|
||||
seg.row = 0;
|
||||
seg.level = i; // not needed anymore
|
||||
segs.push(seg);
|
||||
}
|
||||
}
|
||||
return segs;
|
||||
}
|
||||
function stackSegs(segs) {
|
||||
var levels = [],
|
||||
i, len = segs.length,
|
||||
seg,
|
||||
j, collide, k;
|
||||
for (i = 0; i < len; i++) {
|
||||
seg = segs[i];
|
||||
j = 0; // the level index where seg should belong
|
||||
while (true) {
|
||||
collide = false;
|
||||
if (levels[j]) {
|
||||
for (k = 0; k < levels[j].length; k++) {
|
||||
if (segsCollide(levels[j][k], seg)) {
|
||||
collide = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (collide) {
|
||||
j++;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (levels[j]) {
|
||||
levels[j].push(seg);
|
||||
} else {
|
||||
levels[j] = [seg];
|
||||
}
|
||||
}
|
||||
return levels;
|
||||
}
|
||||
|
||||
function eventsForResource(resource, events) {
|
||||
var resourceEvents = [];
|
||||
for (var i = 0; i < events.length; i++) {
|
||||
if (events[i].resources && $.inArray(resource.id, events[i].resources) >= 0) {
|
||||
resourceEvents.push(events[i])
|
||||
}
|
||||
}
|
||||
return resourceEvents;
|
||||
}
|
||||
|
||||
function slotEventEnd(event) {
|
||||
if (event.end) {
|
||||
@@ -387,14 +338,20 @@ function ResourceEventRenderer() {
|
||||
}
|
||||
html +=
|
||||
" class='" + classes.join(' ') + "'" +
|
||||
" style='position:absolute;z-index:8;top:" + seg.top + "px;left:" + seg.left + "px;" + skinCss + "'" +
|
||||
" style=" +
|
||||
"'" +
|
||||
"position:absolute;" +
|
||||
"top:" + seg.top + "px;" +
|
||||
"left:" + seg.left + "px;" +
|
||||
skinCss +
|
||||
"'" +
|
||||
">" +
|
||||
"<div class='fc-event-inner'>" +
|
||||
"<div class='fc-event-time'>" +
|
||||
htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
|
||||
"</div>" +
|
||||
"<div class='fc-event-title'>" +
|
||||
htmlEscape(event.title) +
|
||||
htmlEscape(event.title || '') +
|
||||
"</div>" +
|
||||
"</div>" +
|
||||
"<div class='fc-event-bg'></div>";
|
||||
@@ -441,7 +398,6 @@ function ResourceEventRenderer() {
|
||||
var snapMinutes = getSnapMinutes();
|
||||
var minMinute = getMinMinute();
|
||||
eventElement.draggable({
|
||||
zIndex: 9,
|
||||
opacity: opt('dragOpacity', 'month'), // use whatever the month view was using
|
||||
revertDuration: opt('dragRevertDuration'),
|
||||
start: function(ev, ui) {
|
||||
@@ -527,80 +483,147 @@ function ResourceEventRenderer() {
|
||||
// when event starts out IN TIMESLOTS
|
||||
|
||||
function draggableSlotEvent(event, eventElement, timeElement) {
|
||||
var origPosition;
|
||||
var allDay = false;
|
||||
var dayDelta;
|
||||
var minuteDelta;
|
||||
var prevMinuteDelta;
|
||||
var hoverListener = getHoverListener();
|
||||
var coordinateGrid = t.getCoordinateGrid();
|
||||
var colCnt = getColCnt();
|
||||
var colWidth = getColWidth();
|
||||
var snapHeight = getSnapHeight();
|
||||
var snapMinutes = getSnapMinutes();
|
||||
|
||||
// states
|
||||
var origPosition; // original position of the element, not the mouse
|
||||
var origCell;
|
||||
var isInBounds, prevIsInBounds;
|
||||
var isAllDay, prevIsAllDay;
|
||||
var colDelta, prevColDelta;
|
||||
var dayDelta; // derived from colDelta
|
||||
var minuteDelta, prevMinuteDelta;
|
||||
|
||||
eventElement.draggable({
|
||||
zIndex: 9,
|
||||
scroll: false,
|
||||
grid: [colWidth, snapHeight],
|
||||
grid: [ colWidth, snapHeight ],
|
||||
axis: colCnt==1 ? 'y' : false,
|
||||
opacity: opt('dragOpacity'),
|
||||
revertDuration: opt('dragRevertDuration'),
|
||||
start: function(ev, ui) {
|
||||
|
||||
trigger('eventDragStart', eventElement, event, ev, ui);
|
||||
hideEvents(event, eventElement);
|
||||
|
||||
coordinateGrid.build();
|
||||
|
||||
// initialize states
|
||||
origPosition = eventElement.position();
|
||||
origCell = coordinateGrid.cell(ev.pageX, ev.pageY);
|
||||
isInBounds = prevIsInBounds = true;
|
||||
isAllDay = prevIsAllDay = getIsCellAllDay(origCell);
|
||||
colDelta = prevColDelta = 0;
|
||||
dayDelta = 0;
|
||||
minuteDelta = prevMinuteDelta = 0;
|
||||
hoverListener.start(function(cell, origCell) {
|
||||
eventElement.draggable('option', 'revert', !cell);
|
||||
clearOverlays();
|
||||
if (cell) {
|
||||
var origDate = cellToDate(0, origCell.col);
|
||||
var date = cellToDate(0, cell.col);
|
||||
dayDelta = dayDiff(date, origDate);
|
||||
if (opt('allDaySlot') && !cell.row) {
|
||||
// over full days
|
||||
if (!allDay) {
|
||||
// convert to temporary all-day event
|
||||
allDay = true;
|
||||
timeElement.hide();
|
||||
eventElement.draggable('option', 'grid', null);
|
||||
}
|
||||
renderDayOverlay(
|
||||
addDays(cloneDate(event.start), dayDelta),
|
||||
addDays(exclEndDay(event), dayDelta)
|
||||
);
|
||||
}else{
|
||||
// on slots
|
||||
resetElement();
|
||||
}
|
||||
}
|
||||
}, ev, 'drag');
|
||||
|
||||
},
|
||||
drag: function(ev, ui) {
|
||||
minuteDelta = Math.round((ui.position.top - origPosition.top) / snapHeight) * snapMinutes;
|
||||
if (minuteDelta != prevMinuteDelta) {
|
||||
if (!allDay) {
|
||||
updateTimeText(minuteDelta);
|
||||
|
||||
// NOTE: this `cell` value is only useful for determining in-bounds and all-day.
|
||||
// Bad for anything else due to the discrepancy between the mouse position and the
|
||||
// element position while snapping. (problem revealed in PR #55)
|
||||
//
|
||||
// PS- the problem exists for draggableDayEvent() when dragging an all-day event to a slot event.
|
||||
// We should overhaul the dragging system and stop relying on jQuery UI.
|
||||
var cell = coordinateGrid.cell(ev.pageX, ev.pageY);
|
||||
|
||||
// update states
|
||||
isInBounds = !!cell;
|
||||
if (isInBounds) {
|
||||
isAllDay = getIsCellAllDay(cell);
|
||||
|
||||
// calculate column delta
|
||||
colDelta = Math.round((ui.position.left - origPosition.left) / colWidth);
|
||||
if (colDelta != prevColDelta) {
|
||||
// calculate the day delta based off of the original clicked column and the column delta
|
||||
var origDate = cellToDate(0, origCell.col);
|
||||
var col = origCell.col + colDelta;
|
||||
col = Math.max(0, col);
|
||||
col = Math.min(colCnt-1, col);
|
||||
var date = cellToDate(0, col);
|
||||
dayDelta = dayDiff(date, origDate);
|
||||
}
|
||||
|
||||
// calculate minute delta (only if over slots)
|
||||
if (!isAllDay) {
|
||||
minuteDelta = Math.round((ui.position.top - origPosition.top) / snapHeight) * snapMinutes;
|
||||
}
|
||||
}
|
||||
|
||||
// any state changes?
|
||||
if (
|
||||
isInBounds != prevIsInBounds ||
|
||||
isAllDay != prevIsAllDay ||
|
||||
colDelta != prevColDelta ||
|
||||
minuteDelta != prevMinuteDelta
|
||||
) {
|
||||
|
||||
updateUI();
|
||||
|
||||
// update previous states for next time
|
||||
prevIsInBounds = isInBounds;
|
||||
prevIsAllDay = isAllDay;
|
||||
prevColDelta = colDelta;
|
||||
prevMinuteDelta = minuteDelta;
|
||||
}
|
||||
|
||||
// if out-of-bounds, revert when done, and vice versa.
|
||||
eventElement.draggable('option', 'revert', !isInBounds);
|
||||
|
||||
},
|
||||
stop: function(ev, ui) {
|
||||
var cell = hoverListener.stop();
|
||||
|
||||
clearOverlays();
|
||||
trigger('eventDragStop', eventElement, event, ev, ui);
|
||||
if (cell && (dayDelta || minuteDelta || allDay)) {
|
||||
// changed!
|
||||
eventDrop(this, event, dayDelta, allDay ? 0 : minuteDelta, allDay, ev, ui);
|
||||
}else{
|
||||
// either no change or out-of-bounds (draggable has already reverted)
|
||||
resetElement();
|
||||
|
||||
if (isInBounds && (isAllDay || dayDelta || minuteDelta)) { // changed!
|
||||
eventDrop(this, event, dayDelta, isAllDay ? 0 : minuteDelta, isAllDay, ev, ui);
|
||||
}
|
||||
else { // either no change or out-of-bounds (draggable has already reverted)
|
||||
|
||||
// reset states for next time, and for updateUI()
|
||||
isInBounds = true;
|
||||
isAllDay = false;
|
||||
colDelta = 0;
|
||||
dayDelta = 0;
|
||||
minuteDelta = 0;
|
||||
|
||||
updateUI();
|
||||
eventElement.css('filter', ''); // clear IE opacity side-effects
|
||||
eventElement.css(origPosition); // sometimes fast drags make event revert to wrong position
|
||||
updateTimeText(0);
|
||||
|
||||
// sometimes fast drags make event revert to wrong position, so reset.
|
||||
// also, if we dragged the element out of the area because of snapping,
|
||||
// but the *mouse* is still in bounds, we need to reset the position.
|
||||
eventElement.css(origPosition);
|
||||
|
||||
showEvents(event, eventElement);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function updateUI() {
|
||||
clearOverlays();
|
||||
if (isInBounds) {
|
||||
if (isAllDay) {
|
||||
timeElement.hide();
|
||||
eventElement.draggable('option', 'grid', null); // disable grid snapping
|
||||
renderDayOverlay(
|
||||
addDays(cloneDate(event.start), dayDelta),
|
||||
addDays(exclEndDay(event), dayDelta)
|
||||
);
|
||||
}
|
||||
else {
|
||||
updateTimeText(minuteDelta);
|
||||
timeElement.css('display', ''); // show() was causing display=inline
|
||||
eventElement.draggable('option', 'grid', [colWidth, snapHeight]); // re-enable grid snapping
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateTimeText(minuteDelta) {
|
||||
var newStart = addMinutes(cloneDate(event.start), minuteDelta);
|
||||
var newEnd;
|
||||
@@ -609,14 +632,7 @@ function ResourceEventRenderer() {
|
||||
}
|
||||
timeElement.text(formatDates(newStart, newEnd, opt('timeFormat')));
|
||||
}
|
||||
function resetElement() {
|
||||
// convert back to original slot-event
|
||||
if (allDay) {
|
||||
timeElement.css('display', ''); // show() was causing display=inline
|
||||
eventElement.draggable('option', 'grid', [colWidth, snapHeight]);
|
||||
allDay = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -637,7 +653,6 @@ function ResourceEventRenderer() {
|
||||
start: function(ev, ui) {
|
||||
snapDelta = prevSnapDelta = 0;
|
||||
hideEvents(event, eventElement);
|
||||
eventElement.css('z-index', 9);
|
||||
trigger('eventResizeStart', this, event, ev, ui);
|
||||
},
|
||||
resize: function(ev, ui) {
|
||||
@@ -660,7 +675,6 @@ function ResourceEventRenderer() {
|
||||
if (snapDelta) {
|
||||
eventResize(this, event, 0, snapMinutes*snapDelta, ev, ui);
|
||||
}else{
|
||||
eventElement.css('z-index', 8);
|
||||
showEvents(event, eventElement);
|
||||
// BUG: if event was really short, need to put title back in span
|
||||
}
|
||||
|
||||
+855
-713
File diff suppressed because it is too large
Load Diff
Vendored
BIN
Binary file not shown.
@@ -20,7 +20,7 @@
|
||||
},
|
||||
editable: true,
|
||||
events: {
|
||||
url: "many_events_json.txt",
|
||||
url: "many_events_json.php",
|
||||
data: function() {
|
||||
var custom_data = { q: 'custom data value' }; // should see this in Networking
|
||||
console.log('setting custom_data as part of the eventSource fetch');
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
$('#calendar').fullCalendar({
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
left: 'prev next today',
|
||||
center: 'title',
|
||||
right: 'month,agendaWeek,basicWeek,agendaDay,basicDay'
|
||||
},
|
||||
@@ -27,7 +27,7 @@
|
||||
month: 6, // july
|
||||
|
||||
//weekNumbers: true,
|
||||
isRTL: true,
|
||||
isRTL: false,
|
||||
//selectable: true,
|
||||
//firstDay: 2,
|
||||
//weekends: false,
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
a {
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="tests"></div>
|
||||
<script>
|
||||
var tests = [
|
||||
'data_as_a_function.html',
|
||||
'day_render.html',
|
||||
'dbclick.html',
|
||||
'droppable.html',
|
||||
'event_data_transform.html',
|
||||
'fullheight.html',
|
||||
'gcal.html',
|
||||
'hiddenDays.html',
|
||||
'iframe.html',
|
||||
'issue_206_parseDate_dst.html',
|
||||
'issue_220_buttons_ie6.html',
|
||||
'issue_221_quick_remove_source.html',
|
||||
'issue_230_height_json_events.html',
|
||||
'issue_244_aspectRatio_0.html',
|
||||
'issue_251_empty_end_date.html',
|
||||
'issue_333_blinking.html',
|
||||
'issue_417_refetchEvents.html',
|
||||
'issue_429_gotoDate.html',
|
||||
'issue_477_event_width.html',
|
||||
'issue_517_js_error_ie.html',
|
||||
'issue_554.html',
|
||||
'issue_586_refetchEvents.html',
|
||||
'issue_616.html',
|
||||
'issue_679.html',
|
||||
'issue_688_parseInt.html',
|
||||
'issue_740_event_resizing.html',
|
||||
'issue_750.html',
|
||||
'issue_757_removeEvents.html',
|
||||
'liquidwidth.html',
|
||||
'locale.html',
|
||||
'long_event_titles.html',
|
||||
'many_agenda_events.html',
|
||||
'many_events.html',
|
||||
'method_destroy.html',
|
||||
'methods.html',
|
||||
'no_event_titles.html',
|
||||
'options.html',
|
||||
'past_future_classNames.html',
|
||||
'plain.html',
|
||||
'resourceDayView.html',
|
||||
'selectable.html',
|
||||
'short_agenda.html',
|
||||
'skip-redraw-test.html',
|
||||
'snap.html',
|
||||
'sources.html',
|
||||
'sources_new.html',
|
||||
'stacking.html',
|
||||
'tabs.html',
|
||||
'theming.html',
|
||||
'triggers.html',
|
||||
'triggers_view.html',
|
||||
'week_numbers.html'
|
||||
];
|
||||
|
||||
var html = '';
|
||||
var div = document.getElementById('tests');
|
||||
for(var i = 0; i < tests.length; i++){
|
||||
var a = document.createElement('a');
|
||||
a.href = tests[i];
|
||||
a.innerHTML = tests[i];
|
||||
div.appendChild(a);
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -16,7 +16,7 @@
|
||||
//date: 22,
|
||||
//defaultView: 'agendaWeek', // error also occured with month view
|
||||
editable: true,
|
||||
events: "../demos/json-events.php"
|
||||
events: "../demos/json-events.json"
|
||||
});
|
||||
|
||||
$('#calendar').fullCalendar('option', 'height', $(window).height()-80);
|
||||
|
||||
@@ -56,6 +56,12 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
- click on day button
|
||||
- click refetchEvents
|
||||
- click on month button
|
||||
event shouldn't disappear!!!
|
||||
</p>
|
||||
<button onclick="$('#calendar').fullCalendar('refetchEvents')">refetchEvents</button>
|
||||
<div id='calendar'></div>
|
||||
</body>
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p>// need to change to GMT+2 to recreate this bug!!!!</p>
|
||||
<div id='calendar'></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+208
-186
@@ -1,209 +1,231 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link href='../build/out/fullcalendar.css' rel='stylesheet' />
|
||||
<link href='../build/out/fullcalendar.print.css' rel='stylesheet' media='print' />
|
||||
<link href='../build/out/fullcalendar.css' rel='stylesheet' />
|
||||
<link href='../build/out/fullcalendar.print.css' rel='stylesheet' media='print' />
|
||||
|
||||
<style>
|
||||
<style>
|
||||
|
||||
button {
|
||||
font-size: 11px;
|
||||
}
|
||||
button {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</style>
|
||||
</head>
|
||||
<body style='font-size:12px'>
|
||||
<p>
|
||||
<p>
|
||||
|
||||
<!-- <button onclick="cal.fullCalendar('prev')">prev</button>
|
||||
<button onclick="cal.fullCalendar('next')">next</button>
|
||||
<button onclick="cal.fullCalendar('today')">today</button>
|
||||
<button onclick="cal.fullCalendar('gotoDate', 1999, 9, 31)">Oct 31 1999</button>
|
||||
<button onclick="cal.fullCalendar('gotoDate', new Date(1999, 9, 30))">Oct 30 1999 (Date)</button>
|
||||
<button onclick="cal.fullCalendar('incrementDate', 1, 1, 1)">+1 +1 +1</button>
|
||||
<button onclick="cal.fullCalendar('incrementDate', -1, -1, -1)">-1 -1 -1</button>
|
||||
<button onclick="cal.fullCalendar('prev')">prev</button>
|
||||
<button onclick="cal.fullCalendar('next')">next</button>
|
||||
<button onclick="cal.fullCalendar('today')">today</button>
|
||||
<button onclick="cal.fullCalendar('gotoDate', 1999, 9, 31)">Oct 31 1999</button>
|
||||
<button onclick="cal.fullCalendar('gotoDate', new Date(1999, 9, 30))">Oct 30 1999 (Date)</button>
|
||||
<button onclick="cal.fullCalendar('incrementDate', 1, 1, 1)">+1 +1 +1</button>
|
||||
<button onclick="cal.fullCalendar('incrementDate', -1, -1, -1)">-1 -1 -1</button>
|
||||
|
||||
<button onclick="updateEventStart()">update event start</button>
|
||||
<button onclick="updateRepeatingEvent()">update repeating event</button>
|
||||
<button onclick="renderEvent(false)">render new event</button>
|
||||
<button onclick="renderEvent(true)">render new sticky event</button>
|
||||
<br />
|
||||
<button onclick="updateEventStart()">update event start</button>
|
||||
<button onclick="updateRepeatingEvent()">update repeating event</button>
|
||||
<button onclick="renderEvent(false)">render new event</button>
|
||||
<button onclick="renderEvent(true)">render new sticky event</button>
|
||||
<br />
|
||||
|
||||
<button onclick="cal.fullCalendar('removeEvents')">remove all</button>
|
||||
<button onclick="cal.fullCalendar('removeEvents', 999)">remove repeating events</button>
|
||||
<button onclick="cal.fullCalendar('removeEvents', function(e){return !e.allDay})">remove timed events</button>
|
||||
<button onclick="console.log(cal.fullCalendar('clientEvents'))">log events</button>
|
||||
<button onclick="console.log(cal.fullCalendar('clientEvents', '999'))">log repeating events</button>
|
||||
<button onclick="console.log(cal.fullCalendar('clientEvents', function(e){return e.allDay}))">log all-day events</button>
|
||||
<br />
|
||||
<button onclick="cal.fullCalendar('removeEvents')">remove all</button>
|
||||
<button onclick="cal.fullCalendar('removeEvents', 999)">remove repeating events</button>
|
||||
<button onclick="cal.fullCalendar('removeEvents', function(e){return !e.allDay})">remove timed events</button>
|
||||
<button onclick="console.log(cal.fullCalendar('clientEvents'))">log events</button>
|
||||
<button onclick="console.log(cal.fullCalendar('clientEvents', '999'))">log repeating events</button>
|
||||
<button onclick="console.log(cal.fullCalendar('clientEvents', function(e){return e.allDay}))">log all-day events</button>
|
||||
<br />
|
||||
|
||||
<button onclick="cal.fullCalendar('addEventSource', staticEvents)">+ static events</button>
|
||||
<button onclick="cal.fullCalendar('removeEventSource', staticEvents)">- static events</button>
|
||||
<button onclick="cal.fullCalendar('addEventSource', gcalFeed)">+ gcal</button>
|
||||
<button onclick="cal.fullCalendar('removeEventSource', gcalFeed)">- gcal</button>
|
||||
<button onclick="cal.fullCalendar('addEventSource', jsonFeed)">+ json</button>
|
||||
<button onclick="cal.fullCalendar('removeEventSource', jsonFeed)">- json</button>
|
||||
<button onclick="cal.fullCalendar('addEventSource', staticEvents)">+ static events</button>
|
||||
<button onclick="cal.fullCalendar('removeEventSource', staticEvents)">- static events</button>
|
||||
<button onclick="cal.fullCalendar('addEventSource', gcalFeed)">+ gcal</button>
|
||||
<button onclick="cal.fullCalendar('removeEventSource', gcalFeed)">- gcal</button>
|
||||
<button onclick="cal.fullCalendar('addEventSource', jsonFeed)">+ json</button>
|
||||
<button onclick="cal.fullCalendar('removeEventSource', jsonFeed)">- json</button>
|
||||
|
||||
<button onclick="cal.fullCalendar('rerenderEvents')">rerender events</button>
|
||||
<button onclick="cal.fullCalendar('refetchEvents')">refetch events</button>
|
||||
<br />
|
||||
<button onclick="cal.fullCalendar('rerenderEvents')">rerender events</button>
|
||||
<button onclick="cal.fullCalendar('refetchEvents')">refetch events</button>
|
||||
<br />
|
||||
|
||||
<button onclick="cal.fullCalendar('changeView', 'month')">change to month</button>
|
||||
<button onclick="cal.fullCalendar('changeView', 'basicWeek')">change to basicWeek</button>
|
||||
<button onclick="cal.fullCalendar('changeView', 'basicDay')">change to basicDay</button>
|
||||
<button onclick="getView()">getView</button>
|
||||
<button onclick="getDate()">getDate</button>
|
||||
<button onclick="optionGetter()">option getter</button>
|
||||
<button onclick="cal.width(1100)">change width (passive)</button>
|
||||
<button onclick="cal.fullCalendar('render')">render</button>
|
||||
<button onclick="cal.fullCalendar('option', 'height', 1000)">change height</button> -->
|
||||
</p>
|
||||
<!-- <div id='loading' style='position:absolute;display:none'>loading...</div>-->
|
||||
<button onclick="cal.fullCalendar('changeView', 'month')">change to month</button>
|
||||
<button onclick="cal.fullCalendar('changeView', 'basicWeek')">change to basicWeek</button>
|
||||
<button onclick="cal.fullCalendar('changeView', 'basicDay')">change to basicDay</button>
|
||||
<button onclick="getView()">getView</button>
|
||||
<button onclick="getDate()">getDate</button>
|
||||
<button onclick="optionGetter()">option getter</button>
|
||||
<button onclick="cal.width(1100)">change width (passive)</button>
|
||||
<button onclick="cal.fullCalendar('render')">render</button>
|
||||
<button onclick="cal.fullCalendar('option', 'height', 1000)">change height</button>
|
||||
</p>
|
||||
<!-- <div id='loading' style='position:absolute;display:none'>loading...</div>-->
|
||||
<div id='calendar' style='width:70%;margin:20px auto 0;font-family:arial'></div>
|
||||
|
||||
|
||||
<script src='../build/out/jquery.js'></script>
|
||||
<script src='../build/out/jquery-ui.js'></script>
|
||||
|
||||
<!--<script src='../src/intro.js'></script> -->
|
||||
<script src='../src/defaults.js'></script>
|
||||
<script src='../src/main.js'></script>
|
||||
<script src='../src/Calendar.js'></script>
|
||||
<script src='../src/Header.js'></script>
|
||||
<script src='../src/EventManager.js'></script>
|
||||
<script src='../src/ResourceManager.js'></script>
|
||||
<script src='../src/date_util.js'></script>
|
||||
<script src='../src/util.js'></script>
|
||||
<script src='../src/basic/MonthView.js'></script>
|
||||
<script src='../src/basic/BasicWeekView.js'></script>
|
||||
<script src='../src/basic/BasicDayView.js'></script>
|
||||
<script src='../src/basic/BasicView.js'></script>
|
||||
<script src='../src/basic/BasicEventRenderer.js'></script>
|
||||
<script src='../src/agenda/AgendaWeekView.js'></script>
|
||||
<script src='../src/agenda/AgendaDayView.js'></script>
|
||||
<script src='../src/agenda/AgendaView.js'></script>
|
||||
<!-- <script src='../src/agenda/AgendaEventRenderer.js'></script>-->
|
||||
<script src='../src/resource/ResourceDayView.js'></script>
|
||||
<script src='../src/resource/ResourceView.js'></script>
|
||||
<script src='../src/resource/ResourceEventRenderer.js'></script>
|
||||
<script src='../src/common/View.js'></script>
|
||||
<script src='../src/common/DayEventRenderer.js'></script>
|
||||
<script src='../src/common/SelectionManager.js'></script>
|
||||
<script src='../src/common/OverlayManager.js'></script>
|
||||
<script src='../src/common/CoordinateGrid.js'></script>
|
||||
<script src='../src/common/HoverListener.js'></script>
|
||||
<script src='../src/common/HorizontalPositionCache.js'></script>
|
||||
<!--<script src='../src/outro.js'></script>-->
|
||||
<!-- <script src='../build/out/fullcalendar.js'></script> -->
|
||||
<script src='../build/out/gcal.js'></script>
|
||||
<script>
|
||||
<script src='../build/out/jquery.js'></script>
|
||||
<script src='../build/out/jquery-ui.js'></script>
|
||||
|
||||
<!--<script src='../src/intro.js'></script> -->
|
||||
<script src='../src/defaults.js'></script>
|
||||
<script src='../src/main.js'></script>
|
||||
<script src='../src/Calendar.js'></script>
|
||||
<script src='../src/Header.js'></script>
|
||||
<script src='../src/EventManager.js'></script>
|
||||
<script src='../src/ResourceManager.js'></script>
|
||||
<script src='../src/date_util.js'></script>
|
||||
<script src='../src/util.js'></script>
|
||||
<script src='../src/basic/MonthView.js'></script>
|
||||
<script src='../src/basic/BasicWeekView.js'></script>
|
||||
<script src='../src/basic/BasicDayView.js'></script>
|
||||
<script src='../src/basic/BasicView.js'></script>
|
||||
<script src='../src/basic/BasicEventRenderer.js'></script>
|
||||
<script src='../src/agenda/AgendaWeekView.js'></script>
|
||||
<script src='../src/agenda/AgendaDayView.js'></script>
|
||||
<script src='../src/agenda/AgendaView.js'></script>
|
||||
<script src='../src/agenda/AgendaEventRenderer.js'></script>
|
||||
<script src='../src/resource/ResourceDayView.js'></script>
|
||||
<script src='../src/resource/ResourceView.js'></script>
|
||||
<script src='../src/resource/ResourceEventRenderer.js'></script>
|
||||
<script src='../src/common/View.js'></script>
|
||||
<script src='../src/common/DayEventRenderer.js'></script>
|
||||
<script src='../src/common/SelectionManager.js'></script>
|
||||
<script src='../src/common/OverlayManager.js'></script>
|
||||
<script src='../src/common/CoordinateGrid.js'></script>
|
||||
<script src='../src/common/HoverListener.js'></script>
|
||||
<script src='../src/common/HorizontalPositionCache.js'></script>
|
||||
<!--<script src='../src/outro.js'></script>-->
|
||||
<!-- <script src='../build/out/fullcalendar.js'></script> -->
|
||||
<script src='../build/out/gcal.js'></script>
|
||||
<script>
|
||||
|
||||
var cal, staticEvents;
|
||||
|
||||
var date = new Date();
|
||||
var d = date.getDate();
|
||||
var m = date.getMonth();
|
||||
var y = date.getFullYear();
|
||||
var cal, staticEvents;
|
||||
|
||||
var date = new Date();
|
||||
var d = date.getDate();
|
||||
var m = date.getMonth();
|
||||
var y = date.getFullYear();
|
||||
|
||||
$(document).ready(function() {
|
||||
cal = $('#calendar').fullCalendar({
|
||||
// editable: true,
|
||||
// weekends: false,
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'month,agendaWeek,basicWeek,agendaDay,basicDay'
|
||||
},
|
||||
// loading: function(bool) {
|
||||
// if (bool) {
|
||||
// $('#loading').show();
|
||||
// }else{
|
||||
// $('#loading').hide();
|
||||
// }
|
||||
// },
|
||||
defaultView: 'resourceDay',
|
||||
resources: [{"id":"resource1","name":"Resource 1"},{"id":"resource2", "name":"Resource 2"},{"id":"resource3", "name":"Resource 3"}],
|
||||
events: [
|
||||
{
|
||||
title: 'R1-R2: Lunch 12.15-14.45',
|
||||
start: new Date(y, m, d, 12, 15),
|
||||
end: new Date(y, m, d, 14, 45),
|
||||
allDay: false,
|
||||
resource: ['resource1','resource2']
|
||||
},
|
||||
{
|
||||
title: 'R1: All day',
|
||||
start: new Date(y, m, d, 10, 30),
|
||||
end: new Date(y, m, d, 11, 00),
|
||||
allDay: true,
|
||||
resource: 'resource1'
|
||||
},
|
||||
{
|
||||
title: 'R2: Meeting 11.00',
|
||||
start: new Date(y, m, d, 11, 00),
|
||||
allDay: true,
|
||||
resource: 'resource2'
|
||||
},
|
||||
{
|
||||
title: 'R1/R2: Lunch 12-14',
|
||||
start: new Date(y, m, d, 12, 0),
|
||||
end: new Date(y, m, d, 14, 0),
|
||||
allDay: false,
|
||||
resource: ['resource1','resource2']
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
// function updateEventStart() {
|
||||
// var event = cal.fullCalendar('clientEvents', 777)[0];
|
||||
// event.start = new Date(y, m, d, 13, 30);
|
||||
// event.end = new Date(y, m, d, 14, 50);
|
||||
// //event.start = new Date(y, m, 25, 10, 30); // move big days
|
||||
// //event.end = new Date(y, m, 26);
|
||||
// //event.allDay = true;
|
||||
// cal.fullCalendar('updateEvent', event);
|
||||
// }
|
||||
|
||||
// function updateRepeatingEvent() {
|
||||
// var event = cal.fullCalendar('clientEvents', 999)[0];
|
||||
// event.start = new Date(y, m, 4, 13, 30);
|
||||
// event.end = new Date(y, m, 5, 2, 0);
|
||||
// event.allDay = true;
|
||||
// event.title = "repeat yo";
|
||||
// //event.editable = false;
|
||||
// event.url = "http://google.com/";
|
||||
// event.color = 'red';
|
||||
// event.textColor = 'green';
|
||||
// cal.fullCalendar('updateEvent', event);
|
||||
// //console.log(cal.fullCalendar('clientEvents', 2));
|
||||
// }
|
||||
|
||||
// function renderEvent(stick) {
|
||||
// cal.fullCalendar('renderEvent', {
|
||||
// start: new Date(y, m, 17),
|
||||
// title: 'heyman'
|
||||
// }, stick);
|
||||
// }
|
||||
|
||||
// function getView() {
|
||||
// var view = cal.fullCalendar('getView');
|
||||
// console.log(view.start + ' --- ' + view.end + ' "' + view.title + '"');
|
||||
// }
|
||||
|
||||
// function getDate() {
|
||||
// console.log(cal.fullCalendar('getDate'));
|
||||
// }
|
||||
|
||||
// function optionGetter() {
|
||||
// console.log(cal.fullCalendar('option', 'editable'));
|
||||
// }
|
||||
|
||||
// var gcalFeed = $.fullCalendar.gcalFeed("http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic");
|
||||
|
||||
// var jsonFeed = "../demos/json-events.php";
|
||||
$(document).ready(function() {
|
||||
cal = $('#calendar').fullCalendar({
|
||||
// editable: true,
|
||||
// weekends: false,
|
||||
header: {
|
||||
left: 'prev,next today',
|
||||
center: 'title',
|
||||
right: 'month,agendaWeek,basicWeek,agendaDay,basicDay,resourceDay'
|
||||
},
|
||||
// loading: function(bool) {
|
||||
// if (bool) {
|
||||
// $('#loading').show();
|
||||
// }else{
|
||||
// $('#loading').hide();
|
||||
// }
|
||||
// },
|
||||
defaultView: 'resourceDay',
|
||||
resources: [{'id':'resource1','name':'Resource 1', 'className': 'css-class-as-string'},{'id':'resource2', 'name':'Resource 2', 'className': ['green', 'another-css-class-name']},{'id':'resource3', 'name':'Resource 3'}],
|
||||
events: [
|
||||
{
|
||||
title: 'R1-R2: Lunch 12.15-14.45',
|
||||
start: new Date(y, m, d, 12, 15),
|
||||
end: new Date(y, m, d, 14, 45),
|
||||
allDay: false,
|
||||
resources: ['resource1','resource2']
|
||||
},
|
||||
{
|
||||
title: 'R1: All day',
|
||||
start: new Date(y, m, d, 10, 30),
|
||||
end: new Date(y, m, d, 11, 00),
|
||||
allDay: true,
|
||||
resources: 'resource1'
|
||||
},
|
||||
{
|
||||
title: 'R2: Meeting 11.00',
|
||||
start: new Date(y, m, d, 11, 00),
|
||||
allDay: true,
|
||||
resources: 'resource2'
|
||||
},
|
||||
{
|
||||
title: 'R1/R2: Lunch 12-14',
|
||||
start: new Date(y, m, d, 12, 0),
|
||||
end: new Date(y, m, d, 14, 0),
|
||||
allDay: false,
|
||||
resources: ['resource1','resource2']
|
||||
},
|
||||
{
|
||||
id: 777,
|
||||
title: 'Lunch',
|
||||
start: new Date(y, m, d, 12, 0),
|
||||
end: new Date(y, m, d, 14, 0),
|
||||
allDay: false,
|
||||
resources: ['resource1']
|
||||
},
|
||||
{
|
||||
id: 999,
|
||||
title: 'Repeating Event',
|
||||
start: new Date(y, m, d-3, 16, 0),
|
||||
allDay: false,
|
||||
resources: 'resource2'
|
||||
},
|
||||
{
|
||||
id: 999,
|
||||
title: 'Repeating Event',
|
||||
start: new Date(y, m, d+4, 16, 0),
|
||||
allDay: false,
|
||||
resources: 'resource2'
|
||||
}
|
||||
]
|
||||
});
|
||||
});
|
||||
|
||||
function updateEventStart() {
|
||||
var event = cal.fullCalendar('clientEvents', 777)[0];
|
||||
event.start = new Date(y, m, d, 13, 30);
|
||||
event.end = new Date(y, m, d, 14, 50);
|
||||
//event.start = new Date(y, m, 25, 10, 30); // move big days
|
||||
//event.end = new Date(y, m, 26);
|
||||
//event.allDay = true;
|
||||
cal.fullCalendar('updateEvent', event);
|
||||
}
|
||||
|
||||
function updateRepeatingEvent() {
|
||||
var event = cal.fullCalendar('clientEvents', 999)[0];
|
||||
event.start = new Date(y, m, 4, 13, 30);
|
||||
event.end = new Date(y, m, 5, 2, 0);
|
||||
event.allDay = true;
|
||||
event.title = "repeat yo";
|
||||
//event.editable = false;
|
||||
event.url = "http://google.com/";
|
||||
event.color = 'red';
|
||||
event.textColor = 'green';
|
||||
cal.fullCalendar('updateEvent', event);
|
||||
//console.log(cal.fullCalendar('clientEvents', 2));
|
||||
}
|
||||
|
||||
function renderEvent(stick) {
|
||||
cal.fullCalendar('renderEvent', {
|
||||
start: new Date(y, m, 17),
|
||||
title: 'heyman'
|
||||
}, stick);
|
||||
}
|
||||
|
||||
function getView() {
|
||||
var view = cal.fullCalendar('getView');
|
||||
console.log(view.start + ' --- ' + view.end + ' "' + view.title + '"');
|
||||
}
|
||||
|
||||
function getDate() {
|
||||
console.log(cal.fullCalendar('getDate'));
|
||||
}
|
||||
|
||||
function optionGetter() {
|
||||
console.log(cal.fullCalendar('option', 'editable'));
|
||||
}
|
||||
|
||||
var gcalFeed = $.fullCalendar.gcalFeed("http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic");
|
||||
|
||||
var jsonFeed = "../demos/json-events.php";
|
||||
|
||||
</script>
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user