class MrDropModel extends AngularLinkModel

initialize: ->
  @_element().droppable = true
  @_element().addEventListener 'drop',      @_drop
  @_element().addEventListener 'dragover',  @_dragOver
  @_element().addEventListener 'dragenter', @_dragEnter
  @_element().addEventListener 'dragleave', @_dragLeave

_element: -> @$element[0]
_drop: (event) =>
  @$scope.$event = event
  event.stopPropagation?()
  @$element.removeClass('over')
  @$scope.$eval(@$attrs.mrDrop)
_dragOver: (event) =>
  @$scope.$event = event
  event.dataTransfer.dropEffect = 'move'
  event.preventDefault()
  @$element.addClass('over')
  @$scope.$eval(@$attrs.mrDragOver) if @$scope.$eval(@$attrs.mrDragOver)
_dragEnter: (event) =>
  @$scope.$event = event
  event.preventDefault()
  @$element.addClass('over')
  @$scope.$eval(@$attrs.mrDragEnter) if @$scope.$eval(@$attrs.mrDragEnter)
_dragLeave: (event) =>
  @$scope.$event = event
  @$element.removeClass('over')
  event.preventDefault()
  @$scope.$eval(@$attrs.mrDragLeave) if @$scope.$eval(@$attrs.mrDragLeave)
@register(Directives.MrDrop)