IE mouse event and mouse capture fixes
This commit is contained in:
parent
96e1618ec1
commit
7869795a1d
4 changed files with 74 additions and 46 deletions
|
|
@ -21,16 +21,17 @@
|
|||
|
||||
</div>
|
||||
|
||||
<script src="../src/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
|
||||
var el = document.getElementById("juhu");
|
||||
|
||||
el.addEventListener("mousedown", function(e) {
|
||||
el.innerHTML = e.pageX + " " + e.pageY;
|
||||
capture(
|
||||
ace.addListener(el, "mousedown", function(e) {
|
||||
el.innerHTML = ace.getDocumentX(e) + " " + ace.getDocumentY(e);
|
||||
ace.capture(
|
||||
el,
|
||||
function(e) {
|
||||
el.innerHTML = e.pageX + " " + e.pageY;
|
||||
el.innerHTML = ace.getDocumentX(e) + " " + ace.getDocumentY(e);
|
||||
}, function() {
|
||||
el.innerHTML = "";
|
||||
}
|
||||
|
|
@ -38,29 +39,6 @@ el.addEventListener("mousedown", function(e) {
|
|||
});
|
||||
|
||||
|
||||
function capture(el, eventHandler, releaseCaptureHandler)
|
||||
{
|
||||
function onMouseMove(e)
|
||||
{
|
||||
eventHandler(e);
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
function onMouseUp(e)
|
||||
{
|
||||
eventHandler && eventHandler(e);
|
||||
releaseCaptureHandler && releaseCaptureHandler();
|
||||
|
||||
document.removeEventListener("mousemove", onMouseMove, true);
|
||||
document.removeEventListener("mouseup", onMouseUp, true);
|
||||
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
document.addEventListener("mousemove", onMouseMove, true);
|
||||
document.addEventListener("mouseup", onMouseUp, true);
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ ace.provide("ace.Editor");
|
|||
|
||||
ace.Editor = function(renderer, doc, mode) {
|
||||
var container = renderer.getContainerElement();
|
||||
this.container = container;
|
||||
this.renderer = renderer;
|
||||
|
||||
this.setMode(mode || new ace.mode.Text());
|
||||
|
|
@ -26,6 +27,7 @@ ace.Editor = function(renderer, doc, mode) {
|
|||
this._initialized = true;
|
||||
};
|
||||
|
||||
|
||||
ace.Editor.prototype.setDocument = function(doc) {
|
||||
// TODO: document change is not yet supported
|
||||
if (this.doc) {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ ace.mixin(ace.TextDocument.prototype, ace.MEventEmitter);
|
|||
|
||||
|
||||
ace.TextDocument.prototype._split = function(text) {
|
||||
return text.split(/[\n\r]/);
|
||||
return text.split(/\r\n|\r|\n/);
|
||||
};
|
||||
|
||||
ace.TextDocument.prototype.toString = function() {
|
||||
|
|
@ -212,7 +212,7 @@ ace.TextDocument.prototype._insert = function(position, text) {
|
|||
|
||||
var newLines = this._split(text);
|
||||
|
||||
if (text == "\n") {
|
||||
if (this._isNewLine(text)) {
|
||||
var line = this.lines[position.row] || "";
|
||||
this.lines[position.row] = line.substring(0, position.column);
|
||||
this.lines.splice(position.row + 1, 0, line.substring(position.column));
|
||||
|
|
@ -251,6 +251,10 @@ ace.TextDocument.prototype._insert = function(position, text) {
|
|||
}
|
||||
};
|
||||
|
||||
ace.TextDocument.prototype._isNewLine = function(text) {
|
||||
return (text == "\r\n" || text == "\r" || text == "\n");
|
||||
};
|
||||
|
||||
ace.TextDocument.prototype.remove = function(range) {
|
||||
this._remove(range);
|
||||
|
||||
|
|
|
|||
78
src/ace.js
78
src/ace.js
|
|
@ -139,26 +139,70 @@ ace.bind = function(fcn, context) {
|
|||
};
|
||||
};
|
||||
|
||||
ace.capture = function(el, eventHandler, releaseCaptureHandler) {
|
||||
function onMouseMove(e) {
|
||||
eventHandler(e);
|
||||
e.stopPropagation();
|
||||
ace.getDocumentX = function(event) {
|
||||
if (event.clientX) {
|
||||
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
|
||||
return event.clientX + scrollLeft;
|
||||
} else {
|
||||
return event.pageX;
|
||||
}
|
||||
|
||||
function onMouseUp(e) {
|
||||
eventHandler && eventHandler(e);
|
||||
releaseCaptureHandler && releaseCaptureHandler();
|
||||
|
||||
document.removeEventListener("mousemove", onMouseMove, true);
|
||||
document.removeEventListener("mouseup", onMouseUp, true);
|
||||
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
document.addEventListener("mousemove", onMouseMove, true);
|
||||
document.addEventListener("mouseup", onMouseUp, true);
|
||||
};
|
||||
|
||||
ace.getDocumentY = function(event) {
|
||||
if (event.clientY) {
|
||||
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
||||
return event.clientY + scrollTop;
|
||||
} else {
|
||||
return event.pageX;
|
||||
}
|
||||
};
|
||||
|
||||
if (document.documentElement.setCapture) {
|
||||
ace.capture = function(el, eventHandler, releaseCaptureHandler) {
|
||||
function onMouseMove(e) {
|
||||
eventHandler(e);
|
||||
return ace.stopPropagation(e);
|
||||
}
|
||||
|
||||
function onReleaseCapture(e) {
|
||||
eventHandler && eventHandler(e);
|
||||
releaseCaptureHandler && releaseCaptureHandler();
|
||||
|
||||
ace.removeListener(el, "mousemove", eventHandler);
|
||||
ace.removeListener(el, "mouseup", onReleaseCapture);
|
||||
ace.removeListener(el, "losecapture", onReleaseCapture);
|
||||
|
||||
el.releaseCapture();
|
||||
}
|
||||
|
||||
ace.addListener(el, "mousemove", eventHandler);
|
||||
ace.addListener(el, "mouseup", onReleaseCapture);
|
||||
ace.addListener(el, "losecapture", onReleaseCapture);
|
||||
el.setCapture();
|
||||
};
|
||||
}
|
||||
else {
|
||||
ace.capture = function(el, eventHandler, releaseCaptureHandler) {
|
||||
function onMouseMove(e) {
|
||||
eventHandler(e);
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
function onMouseUp(e) {
|
||||
eventHandler && eventHandler(e);
|
||||
releaseCaptureHandler && releaseCaptureHandler();
|
||||
|
||||
document.removeEventListener("mousemove", onMouseMove, true);
|
||||
document.removeEventListener("mouseup", onMouseUp, true);
|
||||
|
||||
e.stopPropagation();
|
||||
}
|
||||
|
||||
document.addEventListener("mousemove", onMouseMove, true);
|
||||
document.addEventListener("mouseup", onMouseUp, true);
|
||||
};
|
||||
}
|
||||
|
||||
ace.addMouseWheelListener = function(el, callback) {
|
||||
var listener = function(e) {
|
||||
e.wheel = (e.wheelDelta) ? e.wheelDelta / 120
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue