ArrayEventSource.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. var ArrayEventSource = EventSource.extend({
  2. rawEventDefs: null, // unparsed
  3. eventDefs: null,
  4. currentTimezone: null,
  5. constructor: function(calendar) {
  6. EventSource.apply(this, arguments); // super-constructor
  7. this.eventDefs = []; // for if setRawEventDefs is never called
  8. },
  9. setRawEventDefs: function(rawEventDefs) {
  10. this.rawEventDefs = rawEventDefs;
  11. this.eventDefs = this.parseEventDefs(rawEventDefs);
  12. },
  13. fetch: function(start, end, timezone) {
  14. var eventDefs = this.eventDefs;
  15. var i;
  16. if (
  17. this.currentTimezone &&
  18. this.currentTimezone !== timezone
  19. ) {
  20. for (i = 0; i < eventDefs.length; i++) {
  21. if (eventDefs[i] instanceof SingleEventDef) {
  22. eventDefs[i].rezone();
  23. }
  24. }
  25. }
  26. this.currentTimezone = timezone;
  27. return Promise.resolve(eventDefs);
  28. },
  29. addEventDef: function(eventDef) {
  30. this.eventDefs.push(eventDef);
  31. },
  32. /*
  33. eventDefId already normalized to a string
  34. */
  35. removeEventDefsById: function(eventDefId) {
  36. return removeMatching(this.eventDefs, function(eventDef) {
  37. return eventDef.id === eventDefId;
  38. });
  39. },
  40. getPrimitive: function() {
  41. return this.rawEventDefs;
  42. }
  43. });
  44. ArrayEventSource.parse = function(rawInput, calendar) {
  45. var rawEventDefs;
  46. var rawOtherProps;
  47. var source;
  48. if ($.isArray(rawInput)) {
  49. rawEventDefs = rawInput;
  50. rawOtherProps = {};
  51. }
  52. else if ($.isArray(rawInput.events)) {
  53. rawOtherProps = $.extend({}, rawInput); // copy
  54. rawEventDefs = pluckProp(rawOtherProps, 'events');
  55. }
  56. if (rawEventDefs) {
  57. source = EventSource.parseAndPluck.call(this, rawOtherProps, calendar);
  58. source.setRawEventDefs(rawEventDefs);
  59. return source;
  60. }
  61. };
  62. EventSourceParser.registerClass(ArrayEventSource);
  63. FC.ArrayEventSource = ArrayEventSource;