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>
|
</div>
|
||||||
|
|
||||||
|
<script src="../src/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script type="text/javascript" charset="utf-8">
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
|
||||||
var el = document.getElementById("juhu");
|
var el = document.getElementById("juhu");
|
||||||
|
|
||||||
el.addEventListener("mousedown", function(e) {
|
ace.addListener(el, "mousedown", function(e) {
|
||||||
el.innerHTML = e.pageX + " " + e.pageY;
|
el.innerHTML = ace.getDocumentX(e) + " " + ace.getDocumentY(e);
|
||||||
capture(
|
ace.capture(
|
||||||
el,
|
el,
|
||||||
function(e) {
|
function(e) {
|
||||||
el.innerHTML = e.pageX + " " + e.pageY;
|
el.innerHTML = ace.getDocumentX(e) + " " + ace.getDocumentY(e);
|
||||||
}, function() {
|
}, function() {
|
||||||
el.innerHTML = "";
|
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>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ ace.provide("ace.Editor");
|
||||||
|
|
||||||
ace.Editor = function(renderer, doc, mode) {
|
ace.Editor = function(renderer, doc, mode) {
|
||||||
var container = renderer.getContainerElement();
|
var container = renderer.getContainerElement();
|
||||||
|
this.container = container;
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
|
|
||||||
this.setMode(mode || new ace.mode.Text());
|
this.setMode(mode || new ace.mode.Text());
|
||||||
|
|
@ -26,6 +27,7 @@ ace.Editor = function(renderer, doc, mode) {
|
||||||
this._initialized = true;
|
this._initialized = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
ace.Editor.prototype.setDocument = function(doc) {
|
ace.Editor.prototype.setDocument = function(doc) {
|
||||||
// TODO: document change is not yet supported
|
// TODO: document change is not yet supported
|
||||||
if (this.doc) {
|
if (this.doc) {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ ace.mixin(ace.TextDocument.prototype, ace.MEventEmitter);
|
||||||
|
|
||||||
|
|
||||||
ace.TextDocument.prototype._split = function(text) {
|
ace.TextDocument.prototype._split = function(text) {
|
||||||
return text.split(/[\n\r]/);
|
return text.split(/\r\n|\r|\n/);
|
||||||
};
|
};
|
||||||
|
|
||||||
ace.TextDocument.prototype.toString = function() {
|
ace.TextDocument.prototype.toString = function() {
|
||||||
|
|
@ -212,7 +212,7 @@ ace.TextDocument.prototype._insert = function(position, text) {
|
||||||
|
|
||||||
var newLines = this._split(text);
|
var newLines = this._split(text);
|
||||||
|
|
||||||
if (text == "\n") {
|
if (this._isNewLine(text)) {
|
||||||
var line = this.lines[position.row] || "";
|
var line = this.lines[position.row] || "";
|
||||||
this.lines[position.row] = line.substring(0, position.column);
|
this.lines[position.row] = line.substring(0, position.column);
|
||||||
this.lines.splice(position.row + 1, 0, line.substring(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) {
|
ace.TextDocument.prototype.remove = function(range) {
|
||||||
this._remove(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) {
|
ace.getDocumentX = function(event) {
|
||||||
function onMouseMove(e) {
|
if (event.clientX) {
|
||||||
eventHandler(e);
|
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
|
||||||
e.stopPropagation();
|
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) {
|
ace.addMouseWheelListener = function(el, callback) {
|
||||||
var listener = function(e) {
|
var listener = function(e) {
|
||||||
e.wheel = (e.wheelDelta) ? e.wheelDelta / 120
|
e.wheel = (e.wheelDelta) ? e.wheelDelta / 120
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue