blob: 3e2a9c6c61276f97035a9200cc3ce5ad262f103c [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var hg = require('mercury');
var BaseEvent = require('mercury').BaseEvent;
module.exports = BaseEvent(dragHandler); // jshint ignore:line
function dragHandler(ev, broadcast) {
var delegator = hg.Delegator();
var events = ['dragstart', 'dragenter', 'dragover', 'drop',
'dragend', 'dragleave'];
function onstart(ev2) {
// get the dataTransfer object out of the underlying event
var dt = ev2._rawEvent.dataTransfer;
// Set the data type to something unique to ensure our device cannot
// be dragged to anything else. Despite the name, no real data is
// being transferred here.
dt.setData('application/vnd.vanadium.device', 'vanadium device');
// Set the drag effect
dt.effectAllowed = 'move';
// Remove the drag start listener
delegator.removeGlobalEventListener('dragstart', onstart);
}
function oncomplete(ev2) {
// Merges passed in data and broadcasts
broadcast(this.data);
events.forEach(function(arg) { delegator.unlistenTo(arg); });
delegator.removeGlobalEventListener('mouseup', oncomplete);
delegator.removeGlobalEventListener('dragend', oncomplete);
delegator.removeGlobalEventListener('dragstart', onstart);
}
events.forEach(function(arg) { delegator.listenTo(arg); });
delegator.addGlobalEventListener('dragstart', onstart);
delegator.addGlobalEventListener('mouseup', oncomplete);
delegator.addGlobalEventListener('dragend', oncomplete);
}