Impove opera blank drag image workaround (stolen from codemirror)

This commit is contained in:
DanyaPostfactum 2013-10-02 02:47:31 +10:00
commit 617d43bb13

View file

@ -43,15 +43,11 @@ function DragdropHandler(mouseHandler) {
var editor = mouseHandler.editor;
// Safari accepts either image or element (but it must present in the DOM)
var proxy = dom.createElement("img");
var blankImage = dom.createElement("img");
// Safari crashes without image data
proxy.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
if (useragent.isOpera) {
proxy.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;visibility:hidden";
editor.container.appendChild(proxy);
}
blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
if (useragent.isOpera)
blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;";
var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"];
@ -80,17 +76,19 @@ function DragdropHandler(mouseHandler) {
}, 0);
return e.preventDefault();
}
if (useragent.isOpera) {
proxy.style.visibility = "visible";
setTimeout(function(){
proxy.style.visibility = "hidden";
}, 0);
}
range = editor.getSelectionRange();
var dataTransfer = e.dataTransfer;
dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove";
dataTransfer.setDragImage && dataTransfer.setDragImage(proxy, 0, 0);
if (useragent.isOpera) {
editor.container.appendChild(blankImage);
// force layout
blankImage._top = blankImage.offsetTop;
}
dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0);
if (useragent.isOpera) {
editor.container.removeChild(blankImage);
}
// clear Opera garbage
dataTransfer.clearData();
dataTransfer.setData("Text", editor.session.getTextRange());