Type.registerNamespace('Sys.Extended.UI');
Sys.Extended.UI.DraggableListItem = function(e) {
Sys.Extended.UI.DraggableListItem.initializeBase(this, [e]);
this._data = null;
this._handle = null;
this._dragVisualTemplate = null;
this._dragVisualTemplateInstance = null;
this._mouseDownHandler = null;
}
Sys.Extended.UI.DraggableListItem.prototype = {
dispose: function() {
var e = this.get_element();
this.set_handle(null);
Sys.Extended.UI.DraggableListItem.callBaseMethod(this, 'dispose');
},
get_data: function() {
if(this._data == null) {
var dragSource = this._findDragSource();
if(dragSource != null && Sys.Extended.UI.DragDropList.IsValidDataType(dragSource.get_dragDataType()))
return this.get_element();
}
return this._data;
},
set_data: function(value) {
if(this._data != value) {
this._data = value;
this.raisePropertyChanged('data');
}
},
get_handle: function() {
return this._handle;
},
set_handle: function(value) {
if(this._handle != null) {
$removeHandler(this._handle, "mousedown", this.get_mouseDownHandler());
this._handle.__draggableBehavior = null;
}
if(value) {
if(value.element)
value = value.element;
this._handle = value;
this.raisePropertyChanged('handle');
this._handle.__draggableBehavior = this;
$addHandler(this._handle, "mousedown", this.get_mouseDownHandler());
this._handle.__draggableBehavior = this;
}
else
this._handle = null;
},
get_mouseDownHandler: function() {
if(this._mouseDownHandler == null)
this._mouseDownHandler = Function.createDelegate(this, this._onMouseDown);
return this._mouseDownHandler;
},
get_dragVisualTemplate: function() {
return this._dragVisualTemplate;
},
set_dragVisualTemplate: function(value) {
if(this._dragVisualTemplate != value) {
this._dragVisualTemplate = value;
this.raisePropertyChanged('dragVisualTemplate');
}
},
_onMouseDown: function(ev) {
window._event = ev.rawEvent;
this._handle.__draggableBehavior._mouseDownHandlerInternal(ev);
},
_mouseDownHandlerInternal: function(ev) {
var ev = window.testEvent ? window.testEvent : ev;
if(ev.button <= 1) {
var dragSource = this._findDragSource();
if(dragSource != null) {
var dragVisual = this._createDragVisual();
dragSource.startDragDrop(this.get_element(), this.get_data(), dragVisual);
ev.returnValue = false;
}
}
},
_createDragVisual: function() {
var ev = window.testEvent ? window.testEvent : window.event;
if(this._dragVisualTemplate != null) {
if(this._dragVisualTemplateInstance == null)
this._dragVisualTemplateInstance = this._dragVisualTemplate.cloneElement();
else if(!Sys.UI.DragDropManager._getInstance().hasParent(this._dragVisualTemplateInstance))
this.get_element().appendChild(this._dragVisualTemplateInstance);
var location = { x: ev.clientX, y: ev.clientY };
location = Sys.UI.DragDropManager._getInstance().addPoints(location, Sys.UI.DragDropManager._getInstance().getScrollOffset(document.body, true));
$common.setLocation(this._dragVisualTemplateInstance, location);
}
return this._dragVisualTemplateInstance;
},
_findDragSource: function() {
var element = this.get_element();
while(element != null) {
if(element.__dragDropList != null)
return element.__dragDropList;
element = element.parentNode;
}
return null;
}
}
Sys.Extended.UI.DraggableListItem.registerClass('Sys.Extended.UI.DraggableListItem', Sys.Extended.UI.BehaviorBase);