/*
|
* Internal drag zone implementation for the calendar components. This provides base functionality
|
* and is primarily for the month view -- DayViewDD adds day/week view-specific functionality.
|
*/
|
Ext.define('Ext.calendar.dd.DragZone', {
|
extend: 'Ext.dd.DragZone',
|
|
requires: [
|
'Ext.calendar.dd.StatusProxy',
|
'Ext.calendar.data.EventMappings'
|
],
|
|
ddGroup: 'CalendarDD',
|
eventSelector: '.ext-cal-evt',
|
|
constructor: function(el, config) {
|
if (!Ext.calendar._statusProxyInstance) {
|
Ext.calendar._statusProxyInstance = new Ext.calendar.dd.StatusProxy();
|
}
|
this.proxy = Ext.calendar._statusProxyInstance;
|
this.callParent(arguments);
|
},
|
|
getDragData: function(e) {
|
// Check whether we are dragging on an event first
|
var t = e.getTarget(this.eventSelector, 3);
|
if (t) {
|
var rec = this.view.getEventRecordFromEl(t);
|
return {
|
type: 'eventdrag',
|
ddel: t,
|
eventStart: rec.data[Ext.calendar.data.EventMappings.StartDate.name],
|
eventEnd: rec.data[Ext.calendar.data.EventMappings.EndDate.name],
|
proxy: this.proxy
|
};
|
}
|
|
// If not dragging an event then we are dragging on
|
// the calendar to add a new event
|
t = this.view.getDayAt(e.getPageX(), e.getPageY());
|
if (t.el) {
|
return {
|
type: 'caldrag',
|
start: t.date,
|
proxy: this.proxy
|
};
|
}
|
return null;
|
},
|
|
onInitDrag: function(x, y) {
|
if (this.dragData.ddel) {
|
var ghost = this.dragData.ddel.cloneNode(true),
|
child = Ext.fly(ghost).down('dl');
|
|
Ext.fly(ghost).setWidth('auto');
|
|
if (child) {
|
// for IE/Opera
|
child.setHeight('auto');
|
}
|
this.proxy.update(ghost);
|
this.onStartDrag(x, y);
|
}
|
else if (this.dragData.start) {
|
this.onStartDrag(x, y);
|
}
|
this.view.onInitDrag();
|
return true;
|
},
|
|
afterRepair: function() {
|
if (Ext.enableFx && this.dragData.ddel) {
|
Ext.fly(this.dragData.ddel).highlight(this.hlColor || 'c3daf9');
|
}
|
this.dragging = false;
|
},
|
|
getRepairXY: function(e) {
|
if (this.dragData.ddel) {
|
return Ext.fly(this.dragData.ddel).getXY();
|
}
|
},
|
|
afterInvalidDrop: function(e, id) {
|
Ext.select('.ext-dd-shim').hide();
|
}
|
});
|