/* Methods & Utilities for All Views -----------------------------------------------------------------------------*/ var viewMethods = { // TODO: maybe change the 'vis' variables to 'excl' /* * Objects inheriting these methods must implement the following properties/methods: * - title * - start * - end * - visStart * - visEnd * - defaultEventEnd(event) * - render(events) * - rerenderEvents() * * * z-index reservations: * 3 - day-overlay * 8 - events * 9 - dragging/resizing events * */ init: function(element, options) { this.element = element; this.options = options; this.eventsByID = {}; this.eventElements = []; this.eventElementsByID = {}; }, // triggers an event handler, always append view as last arg trigger: function(name, thisObj) { if (this.options[name]) { return this.options[name].apply(thisObj || this, Array.prototype.slice.call(arguments, 2).concat([this])); } }, // returns a Date object for an event's end eventEnd: function(event) { return event.end ? cloneDate(event.end) : this.defaultEventEnd(event); // TODO: make sure always using copies }, // report when view receives new events reportEvents: function(events) { // events are already normalized at this point var i, len=events.length, event, eventsByID = this.eventsByID = {}; for (i=0; i