Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 1.29 KB

File metadata and controls

54 lines (38 loc) · 1.29 KB

Drop

(($) ->
  $.event.fix = ((originalFix) ->
    (event) ->
      event = originalFix.apply(this, arguments)

      if event.type.indexOf('drag') == 0 || event.type.indexOf('drop') == 0
        event.dataTransfer = event.originalEvent.dataTransfer

      event

  )($.event.fix)

  defaults =
    callback: $.noop
    matchType: /image.*/

  $.fn.dropImageReader = (options) ->
    if typeof options == "function"
      options =
        callback: options

    options = $.extend({}, defaults, options)

    stopFn = (event) ->
      event.stopPropagation()
      event.preventDefault()

    this.each ->
      element = this
      $this = $(this)

      $this.bind 'dragenter dragover dragleave', stopFn

      $this.bind 'drop', (event) ->
        stopFn(event)

        Array::forEach.call event.dataTransfer.files, (file) ->
          return unless file.type.match(options.matchType)

          reader = new FileReader()

          reader.onload = (evt) ->
            options.callback.call element,
              dataURL: evt.target.result
              event: evt
              file: file
              name: file.name

          reader.readAsDataURL(file)

)(jQuery)