|
|
@@ -46,7 +46,7 @@ Grid.mixin({
|
|
|
|
|
|
// Unrenders all events currently rendered on the grid
|
|
|
unrenderEvents: function() {
|
|
|
- this.triggerSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
|
|
|
+ this.handleSegMouseout(); // trigger an eventMouseout if user's mouse is over an event
|
|
|
|
|
|
this.unrenderFgSegs();
|
|
|
this.unrenderBgSegs();
|
|
|
@@ -174,46 +174,36 @@ Grid.mixin({
|
|
|
|
|
|
// Attaches event-element-related handlers to the container element and leverage bubbling
|
|
|
bindSegHandlers: function() {
|
|
|
+ this.bindSegHandler('click', this.handleSegClick);
|
|
|
+ this.bindSegHandler('mouseenter', this.handleSegMouseover);
|
|
|
+ this.bindSegHandler('mouseleave', this.handleSegMouseout);
|
|
|
+ this.bindSegHandler('mousedown', this.handleSegMousedown);
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ // Executes a handler for any a user-interaction on a segment.
|
|
|
+ // Handler gets called with (seg, ev), and with the `this` context of the Grid
|
|
|
+ bindSegHandler: function(name, handler) {
|
|
|
var _this = this;
|
|
|
- var view = this.view;
|
|
|
|
|
|
- $.each(
|
|
|
- {
|
|
|
- mouseenter: function(seg, ev) {
|
|
|
- _this.triggerSegMouseover(seg, ev);
|
|
|
- },
|
|
|
- mouseleave: function(seg, ev) {
|
|
|
- _this.triggerSegMouseout(seg, ev);
|
|
|
- },
|
|
|
- click: function(seg, ev) {
|
|
|
- return view.trigger('eventClick', this, seg.event, ev); // can return `false` to cancel
|
|
|
- },
|
|
|
- mousedown: function(seg, ev) {
|
|
|
- if ($(ev.target).is('.fc-resizer') && view.isEventResizable(seg.event)) {
|
|
|
- _this.segResizeMousedown(seg, ev, $(ev.target).is('.fc-start-resizer'));
|
|
|
- }
|
|
|
- else if (view.isEventDraggable(seg.event)) {
|
|
|
- _this.segDragMousedown(seg, ev);
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- function(name, func) {
|
|
|
- // attach the handler to the container element and only listen for real event elements via bubbling
|
|
|
- _this.el.on(name, '.fc-event-container > *', function(ev) {
|
|
|
- var seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents
|
|
|
-
|
|
|
- // only call the handlers if there is not a drag/resize in progress
|
|
|
- if (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {
|
|
|
- return func.call(this, seg, ev); // `this` will be the event element
|
|
|
- }
|
|
|
- });
|
|
|
+ this.el.on(name, '.fc-event-container > *', function(ev) {
|
|
|
+ var seg = $(this).data('fc-seg'); // grab segment data. put there by View::renderEvents
|
|
|
+
|
|
|
+ // only call the handlers if there is not a drag/resize in progress
|
|
|
+ if (seg && !_this.isDraggingSeg && !_this.isResizingSeg) {
|
|
|
+ return handler.call(_this, seg, ev); // context will be the Grid
|
|
|
}
|
|
|
- );
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ handleSegClick: function(seg, ev) {
|
|
|
+ return this.view.trigger('eventClick', seg.el[0], seg.event, ev); // can return `false` to cancel
|
|
|
},
|
|
|
|
|
|
|
|
|
// Updates internal state and triggers handlers for when an event element is moused over
|
|
|
- triggerSegMouseover: function(seg, ev) {
|
|
|
+ handleSegMouseover: function(seg, ev) {
|
|
|
if (!this.mousedOverSeg) {
|
|
|
this.mousedOverSeg = seg;
|
|
|
this.view.trigger('eventMouseover', seg.el[0], seg.event, ev);
|
|
|
@@ -223,7 +213,7 @@ Grid.mixin({
|
|
|
|
|
|
// Updates internal state and triggers handlers for when an event element is moused out.
|
|
|
// Can be given no arguments, in which case it will mouseout the segment that was previously moused over.
|
|
|
- triggerSegMouseout: function(seg, ev) {
|
|
|
+ handleSegMouseout: function(seg, ev) {
|
|
|
ev = ev || {}; // if given no args, make a mock mouse event
|
|
|
|
|
|
if (this.mousedOverSeg) {
|
|
|
@@ -234,6 +224,16 @@ Grid.mixin({
|
|
|
},
|
|
|
|
|
|
|
|
|
+ handleSegMousedown: function(seg, ev) {
|
|
|
+ if ($(ev.target).is('.fc-resizer') && this.view.isEventResizable(seg.event)) {
|
|
|
+ this.segResizeMousedown(seg, ev, $(ev.target).is('.fc-start-resizer'));
|
|
|
+ }
|
|
|
+ else if (this.view.isEventDraggable(seg.event)) {
|
|
|
+ this.segDragMousedown(seg, ev);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
/* Event Dragging
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
@@ -268,7 +268,7 @@ Grid.mixin({
|
|
|
mouseFollower.start(ev);
|
|
|
},
|
|
|
dragStart: function(ev) {
|
|
|
- _this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
|
|
|
+ _this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
|
|
|
_this.segDragStart(seg, ev);
|
|
|
view.hideEvent(event); // hide all event segments. our mouseFollower will take over
|
|
|
},
|
|
|
@@ -552,7 +552,7 @@ Grid.mixin({
|
|
|
scroll: view.opt('dragScroll'),
|
|
|
subjectEl: el,
|
|
|
dragStart: function(ev) {
|
|
|
- _this.triggerSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
|
|
|
+ _this.handleSegMouseout(seg, ev); // ensure a mouseout on the manipulated event has been reported
|
|
|
_this.segResizeStart(seg, ev);
|
|
|
},
|
|
|
hitOver: function(hit, isOrig, origHit) {
|