|
|
@@ -12,8 +12,8 @@ var eventGUID = 1;
|
|
|
|
|
|
function EventManager() { // assumed to be a calendar
|
|
|
var t = this;
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// exports
|
|
|
t.isFetchNeeded = isFetchNeeded;
|
|
|
t.fetchEvents = fetchEvents;
|
|
|
@@ -26,18 +26,20 @@ function EventManager() { // assumed to be a calendar
|
|
|
t.removeEventSource = removeEventSource;
|
|
|
t.removeEventSources = removeEventSources;
|
|
|
t.updateEvent = updateEvent;
|
|
|
+ t.updateEvents = updateEvents;
|
|
|
t.renderEvent = renderEvent;
|
|
|
+ t.renderEvents = renderEvents;
|
|
|
t.removeEvents = removeEvents;
|
|
|
t.clientEvents = clientEvents;
|
|
|
t.mutateEvent = mutateEvent;
|
|
|
t.normalizeEventDates = normalizeEventDates;
|
|
|
t.normalizeEventTimes = normalizeEventTimes;
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// imports
|
|
|
var reportEvents = t.reportEvents;
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
// locals
|
|
|
var stickySource = { events: [] };
|
|
|
var sources = [ stickySource ];
|
|
|
@@ -55,9 +57,9 @@ function EventManager() { // assumed to be a calendar
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/* Fetching
|
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
|
|
@@ -67,8 +69,8 @@ function EventManager() { // assumed to be a calendar
|
|
|
return !rangeStart || // nothing has been fetched yet?
|
|
|
start < rangeStart || end > rangeEnd; // is part of the new range outside of the old range?
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
function fetchEvents(start, end) {
|
|
|
rangeStart = start;
|
|
|
rangeEnd = end;
|
|
|
@@ -168,8 +170,8 @@ function EventManager() { // assumed to be a calendar
|
|
|
reportEvents(cache);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
function _fetchEventSource(source, callback) {
|
|
|
var i;
|
|
|
var fetchers = FC.sourceFetchers;
|
|
|
@@ -278,9 +280,9 @@ function EventManager() { // assumed to be a calendar
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/* Sources
|
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
|
|
@@ -479,26 +481,39 @@ function EventManager() { // assumed to be a calendar
|
|
|
return true; // keep
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/* Manipulation
|
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
// Only ever called from the externally-facing API
|
|
|
function updateEvent(event) {
|
|
|
+ updateEvents([event]);
|
|
|
+ }
|
|
|
|
|
|
- // massage start/end values, even if date string values
|
|
|
- event.start = t.moment(event.start);
|
|
|
- if (event.end) {
|
|
|
- event.end = t.moment(event.end);
|
|
|
- }
|
|
|
- else {
|
|
|
- event.end = null;
|
|
|
+
|
|
|
+ // Only ever called from the externally-facing API
|
|
|
+ function updateEvents(events) {
|
|
|
+ var event;
|
|
|
+ var i;
|
|
|
+
|
|
|
+ for(i = 0; i < events.length; i++) {
|
|
|
+ event = events[i];
|
|
|
+
|
|
|
+ // massage start/end values, even if date string values
|
|
|
+ event.start = t.moment(event.start);
|
|
|
+ if (event.end) {
|
|
|
+ event.end = t.moment(event.end);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ event.end = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ mutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization
|
|
|
}
|
|
|
|
|
|
- mutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization
|
|
|
reportEvents(cache); // reports event modifications (so we can redraw)
|
|
|
}
|
|
|
|
|
|
@@ -523,37 +538,48 @@ function EventManager() { // assumed to be a calendar
|
|
|
return !/^_|^(id|allDay|start|end)$/.test(name);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
// returns the expanded events that were created
|
|
|
function renderEvent(eventInput, stick) {
|
|
|
- var abstractEvent = buildEventFromInput(eventInput);
|
|
|
- var events;
|
|
|
- var i, event;
|
|
|
+ return renderEvents([eventInput], stick);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // returns the expanded events that were created
|
|
|
+ function renderEvents (eventInput, stick) {
|
|
|
+ var renderedEvents = [];
|
|
|
+ var renderableEvents;
|
|
|
+ var abstractEvent;
|
|
|
+ var i, j, event;
|
|
|
+
|
|
|
+ for(i = 0; i < eventInput.length; i++) {
|
|
|
+ abstractEvent = buildEventFromInput(eventInput[i]);
|
|
|
|
|
|
- if (abstractEvent) { // not false (a valid input)
|
|
|
- events = expandEvent(abstractEvent);
|
|
|
+ if (abstractEvent) { // not false (a valid input)
|
|
|
+ renderableEvents = expandEvent(abstractEvent);
|
|
|
|
|
|
- for (i = 0; i < events.length; i++) {
|
|
|
- event = events[i];
|
|
|
+ for (j = 0; j < renderableEvents.length; j++) {
|
|
|
+ event = renderableEvents[j];
|
|
|
|
|
|
- if (!event.source) {
|
|
|
- if (stick) {
|
|
|
- stickySource.events.push(event);
|
|
|
- event.source = stickySource;
|
|
|
+ if (!event.source) {
|
|
|
+ if (stick) {
|
|
|
+ stickySource.events.push(event);
|
|
|
+ event.source = stickySource;
|
|
|
+ }
|
|
|
+ cache.push(event);
|
|
|
}
|
|
|
- cache.push(event);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- reportEvents(cache);
|
|
|
|
|
|
- return events;
|
|
|
+ renderedEvents = renderedEvents.concat(renderableEvents);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- return [];
|
|
|
+ reportEvents(cache);
|
|
|
+
|
|
|
+ return renderedEvents;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
function removeEvents(filter) {
|
|
|
var eventID;
|
|
|
var i;
|
|
|
@@ -583,7 +609,7 @@ function EventManager() { // assumed to be a calendar
|
|
|
reportEvents(cache);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
function clientEvents(filter) {
|
|
|
if ($.isFunction(filter)) {
|
|
|
return $.grep(cache, filter);
|
|
|
@@ -623,8 +649,8 @@ function EventManager() { // assumed to be a calendar
|
|
|
}
|
|
|
backupEventDates(event);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
/* Event Normalization
|
|
|
-----------------------------------------------------------------------------*/
|
|
|
|