Use native DOM APIs for window drag/drop listeners

Otherwise, these event handlers will interfere with other
event handlers bound using other versions of jQuery
This commit is contained in:
Max Brunsfeld
2014-12-03 20:25:42 -08:00
parent a7fc1c4138
commit 6a83246838
2 changed files with 21 additions and 14 deletions

View File

@@ -1,6 +1,7 @@
path = require 'path'
{$} = require './space-pen-extensions'
_ = require 'underscore-plus'
{Disposable} = require 'event-kit'
ipc = require 'ipc'
shell = require 'shell'
{Subscriber} = require 'emissary'
@@ -85,15 +86,13 @@ class WindowEventHandler
document.addEventListener 'keydown', @onKeydown
@subscribe $(document), 'drop', (e) ->
e.preventDefault()
e.stopPropagation()
pathsToOpen = _.pluck(e.originalEvent.dataTransfer.files, 'path')
atom.open({pathsToOpen}) if pathsToOpen.length > 0
document.addEventListener 'drop', @onDrop
@subscribe new Disposable =>
document.removeEventListener('drop', @onDrop)
@subscribe $(document), 'dragover', (e) ->
e.preventDefault()
e.stopPropagation()
document.addEventListener 'dragover', @onDragOver
@subscribe new Disposable =>
document.removeEventListener('dragover', @onKeydown)
@subscribe $(document), 'click', 'a', @openLink
@@ -124,6 +123,16 @@ class WindowEventHandler
atom.keymaps.handleKeyboardEvent(event)
event.stopImmediatePropagation()
onDrop: (event) ->
event.preventDefault()
event.stopPropagation()
pathsToOpen = _.pluck(event.dataTransfer.files, 'path')
atom.open({pathsToOpen}) if pathsToOpen.length > 0
onDragOver: (event) ->
event.preventDefault()
event.stopPropagation()
openLink: ({target, currentTarget}) ->
location = target?.getAttribute('href') or currentTarget?.getAttribute('href')
if location and location[0] isnt '#' and /^https?:\/\//.test(location)