|
|
@@ -1,8 +1,6 @@
|
|
|
|
|
|
Grid.mixin({
|
|
|
|
|
|
- segs: null, // the *event* segments currently rendered in the grid. TODO: rename to `eventSegs`
|
|
|
-
|
|
|
// derived from options
|
|
|
// TODO: move initialization from Grid.js
|
|
|
eventTimeFormat: null,
|
|
|
@@ -10,27 +8,8 @@ Grid.mixin({
|
|
|
displayEventEnd: null,
|
|
|
|
|
|
|
|
|
- // Generates the format string used for event time text, if not explicitly defined by 'timeFormat'
|
|
|
- computeEventTimeFormat: function() {
|
|
|
- return this.opt('smallTimeFormat');
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventTime'.
|
|
|
- // Only applies to non-all-day events.
|
|
|
- computeDisplayEventTime: function() {
|
|
|
- return true;
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventEnd'
|
|
|
- computeDisplayEventEnd: function() {
|
|
|
- return true;
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
// Updates values that rely on options and also relate to range
|
|
|
- processEventRenderingOptions: function() {
|
|
|
+ initEventRenderingOptions: function() {
|
|
|
var displayEventTime;
|
|
|
var displayEventEnd;
|
|
|
|
|
|
@@ -54,102 +33,25 @@ Grid.mixin({
|
|
|
},
|
|
|
|
|
|
|
|
|
- renderEventsPayload: function(eventsPayload) {
|
|
|
- var id, eventInstanceGroup;
|
|
|
- var eventRenderRanges;
|
|
|
- var eventFootprints;
|
|
|
- var eventSegs;
|
|
|
- var bgSegs = [];
|
|
|
- var fgSegs = [];
|
|
|
-
|
|
|
- for (id in eventsPayload) {
|
|
|
- eventInstanceGroup = eventsPayload[id];
|
|
|
-
|
|
|
- eventRenderRanges = eventInstanceGroup.sliceRenderRanges(this.view.activeUnzonedRange);
|
|
|
- eventFootprints = this.eventRangesToEventFootprints(eventRenderRanges);
|
|
|
- eventSegs = this.eventFootprintsToSegs(eventFootprints);
|
|
|
-
|
|
|
- if (eventInstanceGroup.getEventDef().hasBgRendering()) {
|
|
|
- bgSegs.push.apply(bgSegs, // append
|
|
|
- eventSegs
|
|
|
- );
|
|
|
- }
|
|
|
- else {
|
|
|
- fgSegs.push.apply(fgSegs, // append
|
|
|
- eventSegs
|
|
|
- );
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- this.segs = [].concat( // record all segs
|
|
|
- this.renderBgSegs(bgSegs) || bgSegs,
|
|
|
- this.renderFgSegs(fgSegs) || fgSegs
|
|
|
- );
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Unrenders all events currently rendered on the grid
|
|
|
- unrenderEvents: function() {
|
|
|
- this.handleSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
|
|
|
- this.clearDragListeners();
|
|
|
-
|
|
|
- this.unrenderFgSegs();
|
|
|
- this.unrenderBgSegs();
|
|
|
-
|
|
|
- this.segs = null;
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Retrieves all rendered segment objects currently rendered on the grid
|
|
|
- getEventSegs: function() {
|
|
|
- return this.segs || [];
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Background Segment Rendering
|
|
|
- // ---------------------------------------------------------------------------------------------------------------
|
|
|
- // TODO: move this to ChronoComponent, but without fill
|
|
|
-
|
|
|
-
|
|
|
- // Renders the given background event segments onto the grid.
|
|
|
- // Returns a subset of the segs that were actually rendered.
|
|
|
- renderBgSegs: function(segs) {
|
|
|
- return this.renderFill('bgEvent', segs);
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Unrenders all the currently rendered background event segments
|
|
|
- unrenderBgSegs: function() {
|
|
|
- this.unrenderFill('bgEvent');
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
- // Renders a background event element, given the default rendering. Called by the fill system.
|
|
|
- bgEventSegEl: function(seg, el) {
|
|
|
- return this.filterEventRenderEl(seg.footprint, el);
|
|
|
+ // Generates the format string used for event time text, if not explicitly defined by 'timeFormat'
|
|
|
+ computeEventTimeFormat: function() {
|
|
|
+ return this.opt('smallTimeFormat');
|
|
|
},
|
|
|
|
|
|
|
|
|
- // Generates an array of classNames to be used for the default rendering of a background event.
|
|
|
- // NEEDED BY FILL SYSTEM, fillSegHtml :(
|
|
|
- bgEventSegClasses: function(seg) {
|
|
|
- return this.getBgEventFootprintClasses(seg.footprint);
|
|
|
+ // Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventTime'.
|
|
|
+ // Only applies to non-all-day events.
|
|
|
+ computeDisplayEventTime: function() {
|
|
|
+ return true;
|
|
|
},
|
|
|
|
|
|
|
|
|
- // Generates a semicolon-separated CSS string to be used for the default rendering of a background event.
|
|
|
- // NEEDED BY FILL SYSTEM, fillSegHtml :(
|
|
|
- bgEventSegCss: function(seg) {
|
|
|
- return {
|
|
|
- 'background-color': this.getEventFootprintSkinCss(seg.footprint)['background-color']
|
|
|
- };
|
|
|
+ // Determines whether events should have their end times displayed, if not explicitly defined by 'displayEventEnd'
|
|
|
+ computeDisplayEventEnd: function() {
|
|
|
+ return true;
|
|
|
},
|
|
|
|
|
|
|
|
|
- /* Rendering Utils
|
|
|
- ------------------------------------------------------------------------------------------------------------------*/
|
|
|
-
|
|
|
-
|
|
|
// Compute the text that should be displayed on an event's element.
|
|
|
// `range` can be the Event object itself, or something range-like, with at least a `start`.
|
|
|
// If event times are disabled, or the event has no time, will return a blank string.
|
|
|
@@ -193,35 +95,6 @@ Grid.mixin({
|
|
|
},
|
|
|
|
|
|
|
|
|
- // Generic utility for generating the HTML classNames for an event segment's element
|
|
|
- getSegClasses: function(seg, isDraggable, isResizable) {
|
|
|
- var view = this.view;
|
|
|
- var classes = [
|
|
|
- 'fc-event',
|
|
|
- seg.isStart ? 'fc-start' : 'fc-not-start',
|
|
|
- seg.isEnd ? 'fc-end' : 'fc-not-end'
|
|
|
- ].concat(this.getEventFootprintClasses(seg.footprint));
|
|
|
-
|
|
|
- if (isDraggable) {
|
|
|
- classes.push('fc-draggable');
|
|
|
- }
|
|
|
- if (isResizable) {
|
|
|
- classes.push('fc-resizable');
|
|
|
- }
|
|
|
-
|
|
|
- // event is currently selected? attach a className.
|
|
|
- if (view.isEventDefSelected(seg.footprint.eventDef)) {
|
|
|
- classes.push('fc-selected');
|
|
|
- }
|
|
|
-
|
|
|
- return classes;
|
|
|
- },
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
getBgEventFootprintClasses: function(eventFootprint) {
|
|
|
var classNames = this.getEventFootprintClasses(eventFootprint);
|
|
|
|
|
|
@@ -307,6 +180,136 @@ Grid.mixin({
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ segs: null, // the *event* segments currently rendered in the grid. TODO: rename to `eventSegs`
|
|
|
+
|
|
|
+
|
|
|
+ renderEventsPayload: function(eventsPayload) {
|
|
|
+ var id, eventInstanceGroup;
|
|
|
+ var eventRenderRanges;
|
|
|
+ var eventFootprints;
|
|
|
+ var eventSegs;
|
|
|
+ var bgSegs = [];
|
|
|
+ var fgSegs = [];
|
|
|
+
|
|
|
+ for (id in eventsPayload) {
|
|
|
+ eventInstanceGroup = eventsPayload[id];
|
|
|
+
|
|
|
+ eventRenderRanges = eventInstanceGroup.sliceRenderRanges(this.view.activeUnzonedRange);
|
|
|
+ eventFootprints = this.eventRangesToEventFootprints(eventRenderRanges);
|
|
|
+ eventSegs = this.eventFootprintsToSegs(eventFootprints);
|
|
|
+
|
|
|
+ if (eventInstanceGroup.getEventDef().hasBgRendering()) {
|
|
|
+ bgSegs.push.apply(bgSegs, // append
|
|
|
+ eventSegs
|
|
|
+ );
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ fgSegs.push.apply(fgSegs, // append
|
|
|
+ eventSegs
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.segs = [].concat( // record all segs
|
|
|
+ this.renderBgSegs(bgSegs) || bgSegs,
|
|
|
+ this.renderFgSegs(fgSegs) || fgSegs
|
|
|
+ );
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Unrenders all events currently rendered on the grid
|
|
|
+ unrenderEvents: function() {
|
|
|
+ this.handleSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
|
|
|
+ this.clearDragListeners();
|
|
|
+
|
|
|
+ this.unrenderFgSegs();
|
|
|
+ this.unrenderBgSegs();
|
|
|
+
|
|
|
+ this.segs = null;
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Retrieves all rendered segment objects currently rendered on the grid
|
|
|
+ getEventSegs: function() {
|
|
|
+ return this.segs || [];
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Background Segment Rendering
|
|
|
+ // ---------------------------------------------------------------------------------------------------------------
|
|
|
+ // TODO: move this to ChronoComponent, but without fill
|
|
|
+
|
|
|
+
|
|
|
+ // Renders the given background event segments onto the grid.
|
|
|
+ // Returns a subset of the segs that were actually rendered.
|
|
|
+ renderBgSegs: function(segs) {
|
|
|
+ return this.renderFill('bgEvent', segs);
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Unrenders all the currently rendered background event segments
|
|
|
+ unrenderBgSegs: function() {
|
|
|
+ this.unrenderFill('bgEvent');
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Renders a background event element, given the default rendering. Called by the fill system.
|
|
|
+ bgEventSegEl: function(seg, el) {
|
|
|
+ return this.filterEventRenderEl(seg.footprint, el);
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Generates an array of classNames to be used for the default rendering of a background event.
|
|
|
+ // NEEDED BY FILL SYSTEM, fillSegHtml :(
|
|
|
+ bgEventSegClasses: function(seg) {
|
|
|
+ return this.getBgEventFootprintClasses(seg.footprint);
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Generates a semicolon-separated CSS string to be used for the default rendering of a background event.
|
|
|
+ // NEEDED BY FILL SYSTEM, fillSegHtml :(
|
|
|
+ bgEventSegCss: function(seg) {
|
|
|
+ return {
|
|
|
+ 'background-color': this.getEventFootprintSkinCss(seg.footprint)['background-color']
|
|
|
+ };
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ /* Utils
|
|
|
+ ------------------------------------------------------------------------------------------------------------------*/
|
|
|
+
|
|
|
+
|
|
|
+ // Generic utility for generating the HTML classNames for an event segment's element
|
|
|
+ getSegClasses: function(seg, isDraggable, isResizable) {
|
|
|
+ var view = this.view;
|
|
|
+ var classes = [
|
|
|
+ 'fc-event',
|
|
|
+ seg.isStart ? 'fc-start' : 'fc-not-start',
|
|
|
+ seg.isEnd ? 'fc-end' : 'fc-not-end'
|
|
|
+ ].concat(this.getEventFootprintClasses(seg.footprint));
|
|
|
+
|
|
|
+ if (isDraggable) {
|
|
|
+ classes.push('fc-draggable');
|
|
|
+ }
|
|
|
+ if (isResizable) {
|
|
|
+ classes.push('fc-resizable');
|
|
|
+ }
|
|
|
+
|
|
|
+ // event is currently selected? attach a className.
|
|
|
+ if (view.isEventDefSelected(seg.footprint.eventDef)) {
|
|
|
+ classes.push('fc-selected');
|
|
|
+ }
|
|
|
+
|
|
|
+ return classes;
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
sortEventSegs: function(segs) {
|
|
|
segs.sort(proxy(this, 'compareEventSegs'));
|
|
|
},
|