Commit 135f6f88 authored by Thibaut Frain's avatar Thibaut Frain Committed by Jérome Perrin

drag and drop relative callbacks are linked with application promise tree

parent 7a141d97
...@@ -528,48 +528,51 @@ ...@@ -528,48 +528,51 @@
} }
function waitForDrop(gadget, config) { function waitForDrop(gadget, config) {
var callback;
var target = gadget.props.element
.querySelector('#main'),
callback;
function canceller() { function canceller() {
if (callback !== undefined) { if (callback !== undefined) {
target.removeEventListener('drop', callback, false); gadget.props.main.removeEventListener('drop', callback, false);
} }
} }
function nonResolvableTrap(resolve, reject) { /*jslint unparam: true*/
function itsANonResolvableTrap(resolve, reject) {
callback = function (evt) { callback = function (evt) {
var element = domParser.parseFromString( try {
evt.dataTransfer.getData('text/html'), var element = domParser.parseFromString(
'text/html' evt.dataTransfer.getData('text/html'),
).querySelector(".tool"), 'text/html'
offset = $(gadget.props.main).offset(), ).querySelector(".tool"),
box_top = evt.clientY - offset.top + "px", offset = $(gadget.props.main).offset(),
box_left = evt.clientX - offset.left + "px", box_top = evt.clientY - offset.top + "px",
element_class = element.id.replace('-', '.'), box_left = evt.clientX - offset.left + "px",
relative_position = convertToRelativePosition( element_class = element.id.replace('-', '.'),
gadget, relative_position = convertToRelativePosition(
box_left, gadget,
box_top box_left,
); box_top
newElement(gadget, { );
coordinate: { newElement(gadget, {
left: relative_position[0], coordinate: {
top: relative_position[1] left: relative_position[0],
top: relative_position[1]
},
"_class": element_class,
"name": element_class
}, },
"_class": element_class, config);
"name": element_class
}, } catch (e) {
config); reject(e);
}
}; };
target.addEventListener('drop', callback, false); gadget.props.main.addEventListener('drop', callback, false);
} }
return new RSVP.Promise(nonResolvableTrap, canceller); return new RSVP.Promise(itsANonResolvableTrap, canceller);
} }
initGadgetMixin(gadget_klass); initGadgetMixin(gadget_klass);
......
...@@ -8,16 +8,27 @@ ...@@ -8,16 +8,27 @@
tool_template = Handlebars.compile(tool_template_source); tool_template = Handlebars.compile(tool_template_source);
function waitForDragstart(tool) { function waitForDragstart(tool) {
var callback;
function canceller() {
if (callback !== undefined) {
tool.removeEventListener('dragstart', callback, false);
}
}
/*jslint unparam: true*/ /*jslint unparam: true*/
var callback = function (evt) { function itsANonResolvableTrap(resolve, reject) {
evt.dataTransfer.setData('text/html', tool.outerHTML);
}; callback = function (evt) {
try {
evt.dataTransfer.setData('text/html', tool.outerHTML);
} catch (e) {
reject(e);
}
};
return new RSVP.Promise(function (resolve, reject) {
tool.addEventListener('dragstart', callback, false); tool.addEventListener('dragstart', callback, false);
}, function () { }
tool.removeEventListener('dragstart', callback, false); return new RSVP.Promise(itsANonResolvableTrap, canceller);
});
} }
initGadgetMixin(gadget_klass); initGadgetMixin(gadget_klass);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment