Adding in a way to refresh the resources collection

This commit is contained in:
sean kenny
2014-07-21 14:02:48 +01:00
parent e7bc336487
commit 1732e05f38
10 changed files with 53 additions and 48 deletions
+25 -18
View File
@@ -218,9 +218,9 @@ function Calendar(element, options, eventSources) {
EventManager.call(t, options, eventSources);
var isFetchNeeded = t.isFetchNeeded;
var fetchEvents = t.fetchEvents;
ResourceManager.call(t, options);
// locals
var _element = element[0];
var header;
@@ -479,7 +479,6 @@ function Calendar(element, options, eventSources) {
-----------------------------------------------------------------------------*/
// TODO: going forward, most of this stuff should be directly handled by the view
function refetchEvents() { // can be called as an API method
clearEvents();
fetchAndRenderEvents();
@@ -881,6 +880,7 @@ function Header(calendar, options) {
}
;;
/// <reference path="../build/out/fullcalendar.min.js" />
fc.sourceNormalizers = [];
fc.sourceFetchers = [];
@@ -1309,28 +1309,33 @@ function ResourceManager(options) {
var t = this;
// exports
t.fetchResources = fetchResources;
t.setResources = setResources;
// locals
var resourceSources = [];
var cache;
// initialize the resources.
addResourceSources(options.resources);
setResources(options.resources);
// add the resource sources
function addResourceSources(sources) {
var resource = {};
function setResources(sources) {
resourceSources = [];
var resource;
if ($.isFunction(sources)) {
// is it a function?
resource = {
resources: sources
};
resourceSources.push(resource);
cache = undefined;
} else if (typeof sources == 'string') {
// is it a URL string?
resource = {
url: sources
};
resourceSources.push(resource);
} else if (typeof sources == 'object') {
cache = undefined;
} else if (typeof sources == 'object' && sources != null) {
// is it json object?
for (var i = 0; i < sources.length; i++) {
var s = sources[i];
@@ -1340,6 +1345,7 @@ function ResourceManager(options) {
};
resourceSources.push(resource);
}
cache = undefined;
}
}
/**
@@ -1365,6 +1371,7 @@ function ResourceManager(options) {
return cache;
}
}
/**
* ----------------------------------------------------------------
* Fetch resources from each source. If source is a function, call
@@ -4554,7 +4561,7 @@ function ResourceDayView(element, calendar) {
t.start = t.visStart = start;
t.end = t.visEnd = end;
renderResource(getResources.length);
renderResource(getResources().length);
}
@@ -4618,7 +4625,7 @@ function ResourceView(element, calendar, viewName) {
t.reportDayClick = reportDayClick; // selection mousedown hack
t.dragStart = dragStart;
t.dragStop = dragStop;
t.getResources = calendar.fetchResources();
t.getResources = calendar.fetchResources;
// imports
View.call(t, element, calendar, viewName);
@@ -4901,13 +4908,13 @@ function ResourceView(element, calendar, viewName) {
for (col=0; col<colCnt; col++) {
var classNames = [
'fc-col' + col,
resources[col].className,
resources()[col].className,
headerClass
];
html +=
"<th class='" + classNames.join(' ') + "'>" +
htmlEscape(resources[col].name) +
htmlEscape(resources()[col].name) +
"</th>";
}
@@ -4944,7 +4951,7 @@ function ResourceView(element, calendar, viewName) {
classNames = [
'fc-col' + col,
resources[col].className,
resources()[col].className,
contentClass
];
if (+date == +today) {
@@ -5111,7 +5118,7 @@ function ResourceView(element, calendar, viewName) {
var date = cellToDate(0, 0);
var rowMatch = this.parentNode.className.match(/fc-slot(\d+)/); // TODO: maybe use data
ev.data = resources[col];
ev.data = resources()[col];
if (rowMatch) {
var mins = parseInt(rowMatch[1]) * opt('slotMinutes');
@@ -5453,7 +5460,7 @@ function ResourceView(element, calendar, viewName) {
var cell = hoverListener.stop();
clearOverlays();
if (cell) {
ev.data = resources[cell.col];
ev.data = resources()[cell.col];
trigger('drop', _dragElement, realCellToDate(cell), getIsCellAllDay(cell), ev, ui);
}
}
@@ -5549,7 +5556,7 @@ function ResourceEventRenderer() {
function compileSlotSegs(events) {
var colCnt = getColCnt(),
var colCnt = getColCnt(),
minMinute = getMinMinute(),
maxMinute = getMaxMinute(),
d,
@@ -5563,7 +5570,7 @@ function ResourceEventRenderer() {
d = cloneDate(t.visStart);
addMinutes(d, minMinute);
var resourceEvents = eventsForResource(resources[i], events);
var resourceEvents = eventsForResource(resources()[i], events);
visEventEnds = $.map(resourceEvents, slotEventEnd);
col = stackAgendaSegs(
sliceSegs(
@@ -6050,7 +6057,7 @@ function ResourceEventRenderer() {
//if (isInBounds && (isAllDay || dayDelta || minuteDelta)) { // changed!
if (isInBounds && (isAllDay || resourceDelta || minuteDelta)) { // changed!
event.resources = resources[origCell.col + resourceDelta].id;
event.resources = resources()[origCell.col + resourceDelta].id;
eventDrop(this, event, dayDelta, isAllDay ? 0 : minuteDelta, isAllDay, ev, ui);
}
else { // either no change or out-of-bounds (draggable has already reverted)
@@ -6958,7 +6965,7 @@ function DayEventRenderer() {
// Generate an array of "segments" for all events.
function buildSegments(events) {
var resources = t.getResources;
var resources = t.getResources();
if (typeof resources === 'undefined'){
return buildSegmentsTEMP(events); // TEMP!
+2 -2
View File
File diff suppressed because one or more lines are too long
+2 -3
View File
@@ -34,9 +34,9 @@ function Calendar(element, options, eventSources) {
EventManager.call(t, options, eventSources);
var isFetchNeeded = t.isFetchNeeded;
var fetchEvents = t.fetchEvents;
ResourceManager.call(t, options);
// locals
var _element = element[0];
var header;
@@ -295,7 +295,6 @@ function Calendar(element, options, eventSources) {
-----------------------------------------------------------------------------*/
// TODO: going forward, most of this stuff should be directly handled by the view
function refetchEvents() { // can be called as an API method
clearEvents();
fetchAndRenderEvents();
+1
View File
@@ -1,3 +1,4 @@
/// <reference path="../build/out/fullcalendar.min.js" />
fc.sourceNormalizers = [];
fc.sourceFetchers = [];
+11 -4
View File
@@ -2,28 +2,33 @@ function ResourceManager(options) {
var t = this;
// exports
t.fetchResources = fetchResources;
t.setResources = setResources;
// locals
var resourceSources = [];
var cache;
// initialize the resources.
addResourceSources(options.resources);
setResources(options.resources);
// add the resource sources
function addResourceSources(sources) {
var resource = {};
function setResources(sources) {
resourceSources = [];
var resource;
if ($.isFunction(sources)) {
// is it a function?
resource = {
resources: sources
};
resourceSources.push(resource);
cache = undefined;
} else if (typeof sources == 'string') {
// is it a URL string?
resource = {
url: sources
};
resourceSources.push(resource);
} else if (typeof sources == 'object') {
cache = undefined;
} else if (typeof sources == 'object' && sources != null) {
// is it json object?
for (var i = 0; i < sources.length; i++) {
var s = sources[i];
@@ -33,6 +38,7 @@ function ResourceManager(options) {
};
resourceSources.push(resource);
}
cache = undefined;
}
}
/**
@@ -58,6 +64,7 @@ function ResourceManager(options) {
return cache;
}
}
/**
* ----------------------------------------------------------------
* Fetch resources from each source. If source is a function, call
+1 -1
View File
@@ -169,7 +169,7 @@ function DayEventRenderer() {
// Generate an array of "segments" for all events.
function buildSegments(events) {
var resources = t.getResources;
var resources = t.getResources();
if (typeof resources === 'undefined'){
return buildSegmentsTEMP(events); // TEMP!
+1 -1
View File
@@ -34,7 +34,7 @@ function ResourceDayView(element, calendar) {
t.start = t.visStart = start;
t.end = t.visEnd = end;
renderResource(getResources.length);
renderResource(getResources().length);
}
+3 -3
View File
@@ -85,7 +85,7 @@ function ResourceEventRenderer() {
function compileSlotSegs(events) {
var colCnt = getColCnt(),
var colCnt = getColCnt(),
minMinute = getMinMinute(),
maxMinute = getMaxMinute(),
d,
@@ -99,7 +99,7 @@ function ResourceEventRenderer() {
d = cloneDate(t.visStart);
addMinutes(d, minMinute);
var resourceEvents = eventsForResource(resources[i], events);
var resourceEvents = eventsForResource(resources()[i], events);
visEventEnds = $.map(resourceEvents, slotEventEnd);
col = stackAgendaSegs(
sliceSegs(
@@ -586,7 +586,7 @@ function ResourceEventRenderer() {
//if (isInBounds && (isAllDay || dayDelta || minuteDelta)) { // changed!
if (isInBounds && (isAllDay || resourceDelta || minuteDelta)) { // changed!
event.resources = resources[origCell.col + resourceDelta].id;
event.resources = resources()[origCell.col + resourceDelta].id;
eventDrop(this, event, dayDelta, isAllDay ? 0 : minuteDelta, isAllDay, ev, ui);
}
else { // either no change or out-of-bounds (draggable has already reverted)
+6 -6
View File
@@ -56,7 +56,7 @@ function ResourceView(element, calendar, viewName) {
t.reportDayClick = reportDayClick; // selection mousedown hack
t.dragStart = dragStart;
t.dragStop = dragStop;
t.getResources = calendar.fetchResources();
t.getResources = calendar.fetchResources;
// imports
View.call(t, element, calendar, viewName);
@@ -339,13 +339,13 @@ function ResourceView(element, calendar, viewName) {
for (col=0; col<colCnt; col++) {
var classNames = [
'fc-col' + col,
resources[col].className,
resources()[col].className,
headerClass
];
html +=
"<th class='" + classNames.join(' ') + "'>" +
htmlEscape(resources[col].name) +
htmlEscape(resources()[col].name) +
"</th>";
}
@@ -382,7 +382,7 @@ function ResourceView(element, calendar, viewName) {
classNames = [
'fc-col' + col,
resources[col].className,
resources()[col].className,
contentClass
];
if (+date == +today) {
@@ -549,7 +549,7 @@ function ResourceView(element, calendar, viewName) {
var date = cellToDate(0, 0);
var rowMatch = this.parentNode.className.match(/fc-slot(\d+)/); // TODO: maybe use data
ev.data = resources[col];
ev.data = resources()[col];
if (rowMatch) {
var mins = parseInt(rowMatch[1]) * opt('slotMinutes');
@@ -891,7 +891,7 @@ function ResourceView(element, calendar, viewName) {
var cell = hoverListener.stop();
clearOverlays();
if (cell) {
ev.data = resources[cell.col];
ev.data = resources()[cell.col];
trigger('drop', _dragElement, realCellToDate(cell), getIsCellAllDay(cell), ev, ui);
}
}
+1 -10
View File
@@ -93,8 +93,6 @@
<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>
@@ -107,20 +105,13 @@
$(document).ready(function() {
cal = $('#calendar').fullCalendar({
// editable: true,
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: [