Forráskód Böngészése

external dropping now ExternalDropping interaction class

Adam Shaw 8 éve
szülő
commit
bb363c8237

+ 1 - 1
src.json

@@ -26,8 +26,8 @@
     "common/CoordChronoComponentMixin.day-selection.js",
     "common/CoordChronoComponentMixin.day-selection.js",
     "common/CoordChronoComponentMixin.event-dragging.js",
     "common/CoordChronoComponentMixin.event-dragging.js",
     "common/CoordChronoComponentMixin.event-resizing.js",
     "common/CoordChronoComponentMixin.event-resizing.js",
-    "common/CoordChronoComponentMixin.js",
     "common/CoordChronoComponentMixin.external-dropping.js",
     "common/CoordChronoComponentMixin.external-dropping.js",
+    "common/CoordChronoComponentMixin.js",
     "common/FillSystem.js",
     "common/FillSystem.js",
     "common/EventRenderUtils.js",
     "common/EventRenderUtils.js",
     "common/SegChronoComponentMixin.js",
     "common/SegChronoComponentMixin.js",

+ 54 - 17
src/common/CoordChronoComponentMixin.external-dropping.js

@@ -1,15 +1,48 @@
 
 
-/*
-Wired up by calling
-externalDragStart
-*/
-$.extend(CoordChronoComponentMixin, {
+var ExternalDropping = Class.extend(ListenerMixin, {
+
+	view: null,
+	component: null, // CoordComponent
+	dragListener: null,
+	isDragging: false, // jqui-dragging an external element? boolean
+
+
+	/*
+	component impements:
+		- registerDragListener
+		- unregisterDragListener
+		- eventRangesToEventFootprints
+		- isEventInstanceGroupAllowed
+		- isExternalInstanceGroupAllowed
+		- renderDrag
+		- unrenderDrag
+	*/
+	constructor: function(component) {
+		this.view = component.view;
+		this.component = component;
+	},
+
+
+	opt: function(name) {
+		return this.view.opt(name);
+	},
 
 
-	isDraggingExternal: false, // jqui-dragging an external element? boolean
+
+	bindToDocument: function() {
+		this.listenTo($(document), {
+			dragstart: this.handleDragStart, // jqui
+			sortstart: this.handleDragStart // jqui
+		});
+	},
+
+
+	unbindFromDocument: function() {
+		this.stopListeningTo($(document));
+	},
 
 
 
 
 	// Called when a jQuery UI drag is initiated anywhere in the DOM
 	// Called when a jQuery UI drag is initiated anywhere in the DOM
-	externalDragStart: function(ev, ui) {
+	handleDragStart: function(ev, ui) {
 		var el;
 		var el;
 		var accept;
 		var accept;
 
 
@@ -20,7 +53,7 @@ $.extend(CoordChronoComponentMixin, {
 			// FYI, the default is "*" (matches all)
 			// FYI, the default is "*" (matches all)
 			accept = this.opt('dropAccept');
 			accept = this.opt('dropAccept');
 			if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {
 			if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {
-				if (!this.isDraggingExternal) { // prevent double-listening if fired twice
+				if (!this.isDragging) { // prevent double-listening if fired twice
 					this.listenToExternalDrag(el, ev, ui);
 					this.listenToExternalDrag(el, ev, ui);
 				}
 				}
 			}
 			}
@@ -31,14 +64,15 @@ $.extend(CoordChronoComponentMixin, {
 	// Called when a jQuery UI drag starts and it needs to be monitored for dropping
 	// Called when a jQuery UI drag starts and it needs to be monitored for dropping
 	listenToExternalDrag: function(el, ev, ui) {
 	listenToExternalDrag: function(el, ev, ui) {
 		var _this = this;
 		var _this = this;
+		var component = this.component;
 		var view = this.view;
 		var view = this.view;
 		var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create
 		var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create
 		var singleEventDef; // a null value signals an unsuccessful drag
 		var singleEventDef; // a null value signals an unsuccessful drag
 
 
 		// listener that tracks mouse movement over date-associated pixel regions
 		// listener that tracks mouse movement over date-associated pixel regions
-		var dragListener = _this.externalDragListener = new HitDragListener(this, {
+		var dragListener = _this.dragListener = new HitDragListener(component, {
 			interactionStart: function() {
 			interactionStart: function() {
-				_this.isDraggingExternal = true;
+				_this.isDragging = true;
 			},
 			},
 			hitOver: function(hit) {
 			hitOver: function(hit) {
 				var isAllowed = true;
 				var isAllowed = true;
@@ -53,8 +87,8 @@ $.extend(CoordChronoComponentMixin, {
 							singleEventDef.buildInstances()
 							singleEventDef.buildInstances()
 						);
 						);
 						isAllowed = meta.eventProps ? // isEvent?
 						isAllowed = meta.eventProps ? // isEvent?
-							_this.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :
-							_this.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);
+							component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :
+							component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);
 					}
 					}
 					else {
 					else {
 						isAllowed = false;
 						isAllowed = false;
@@ -70,8 +104,8 @@ $.extend(CoordChronoComponentMixin, {
 				}
 				}
 
 
 				if (singleEventDef) {
 				if (singleEventDef) {
-					_this.renderDrag( // called without a seg parameter
-						_this.eventRangesToEventFootprints(
+					component.renderDrag( // called without a seg parameter
+						component.eventRangesToEventFootprints(
 							mutatedEventInstanceGroup.sliceRenderRanges(view.renderUnzonedRange, view.calendar)
 							mutatedEventInstanceGroup.sliceRenderRanges(view.renderUnzonedRange, view.calendar)
 						)
 						)
 					);
 					);
@@ -82,7 +116,7 @@ $.extend(CoordChronoComponentMixin, {
 			},
 			},
 			hitDone: function() { // Called after a hitOut OR before a dragEnd
 			hitDone: function() { // Called after a hitOut OR before a dragEnd
 				enableCursor();
 				enableCursor();
-				_this.unrenderDrag();
+				component.unrenderDrag();
 			},
 			},
 			interactionEnd: function(ev) {
 			interactionEnd: function(ev) {
 
 
@@ -95,11 +129,14 @@ $.extend(CoordChronoComponentMixin, {
 					);
 					);
 				}
 				}
 
 
-				_this.isDraggingExternal = false;
-				_this.externalDragListener = null;
+				_this.isDragging = false;
+				_this.dragListener = null;
+				component.unregisterDragListener(dragListener);
 			}
 			}
 		});
 		});
 
 
+		component.registerDragListener(dragListener);
+
 		dragListener.startDrag(ev); // start listening immediately
 		dragListener.startDrag(ev); // start listening immediately
 	},
 	},
 
 

+ 6 - 12
src/common/CoordChronoComponentMixin.js

@@ -9,8 +9,6 @@ var CoordChronoComponentMixin = {
 	// TODO: port isTimeScale into same system?
 	// TODO: port isTimeScale into same system?
 	largeUnit: null,
 	largeUnit: null,
 
 
-	externalDragListener: null,
-
 	hitsNeededDepth: 0, // necessary because multiple callers might need the same hits
 	hitsNeededDepth: 0, // necessary because multiple callers might need the same hits
 
 
 	// self-config, overridable by subclasses
 	// self-config, overridable by subclasses
@@ -27,9 +25,13 @@ var CoordChronoComponentMixin = {
 	eventResizingClass: EventResizing,
 	eventResizingClass: EventResizing,
 	eventResizing: null,
 	eventResizing: null,
 
 
+	externalDroppingClass: ExternalDropping,
+	externalDropping: null,
+
 
 
 	initCoordChronoComponent: function() {
 	initCoordChronoComponent: function() {
 		this.dragListeners = [];
 		this.dragListeners = [];
+		this.externalDropping = new this.externalDroppingClass(this);
 	},
 	},
 
 
 
 
@@ -55,11 +57,6 @@ var CoordChronoComponentMixin = {
 		for (i = 0; i < dragListeners.length; i++) {
 		for (i = 0; i < dragListeners.length; i++) {
 			dragListeners[i].endInteraction();
 			dragListeners[i].endInteraction();
 		}
 		}
-
-		// TODO: get these to start using registerDragListener()
-		if (this.externalDragListener) {
-			this.externalDragListener.endInteraction(); // will clear this.externalDragListener
-		}
 	},
 	},
 
 
 
 
@@ -109,10 +106,7 @@ var CoordChronoComponentMixin = {
 	bindGlobalHandlers: function() {
 	bindGlobalHandlers: function() {
 		ChronoComponent.prototype.bindGlobalHandlers.apply(this, arguments);
 		ChronoComponent.prototype.bindGlobalHandlers.apply(this, arguments);
 
 
-		this.listenTo($(document), {
-			dragstart: this.externalDragStart, // jqui
-			sortstart: this.externalDragStart // jqui
-		});
+		this.externalDropping.bindToDocument();
 	},
 	},
 
 
 
 
@@ -120,7 +114,7 @@ var CoordChronoComponentMixin = {
 	unbindGlobalHandlers: function() {
 	unbindGlobalHandlers: function() {
 		ChronoComponent.prototype.unbindGlobalHandlers.apply(this, arguments);
 		ChronoComponent.prototype.unbindGlobalHandlers.apply(this, arguments);
 
 
-		this.stopListeningTo($(document));
+		this.externalDropping.unbindFromDocument();
 	},
 	},