diff --git a/src/ace/Editor.js b/src/ace/Editor.js index 91c88bbb..4c5b571c 100644 --- a/src/ace/Editor.js +++ b/src/ace/Editor.js @@ -8,6 +8,7 @@ require.def("ace/Editor", [ "ace/ace", + "ace/lib/event", "ace/TextInput", "ace/KeyBinding", "ace/Document", @@ -15,7 +16,7 @@ require.def("ace/Editor", "ace/BackgroundTokenizer", "ace/Range", "ace/MEventEmitter" - ], function(ace, TextInput, KeyBinding, Document, Search, BackgroundTokenizer, Range, MEventEmitter) { + ], function(ace, event, TextInput, KeyBinding, Document, Search, BackgroundTokenizer, Range, MEventEmitter) { var Editor = function(renderer, doc) { var container = renderer.getContainerElement(); @@ -265,9 +266,12 @@ var Editor = function(renderer, doc) { this.onMouseDown = function(e) { - var pageX = ace.getDocumentX(e); - var pageY = ace.getDocumentY(e); + var pageX = event.getDocumentX(e); + var pageY = event.getDocumentY(e); + if (event.getButton(e) != 0) + return; + var pos = this.renderer.screenToTextCoordinates(pageX, pageY); pos.row = Math.max(0, Math.min(pos.row, this.doc.getLength()-1)); @@ -281,8 +285,8 @@ var Editor = function(renderer, doc) { var mousePageX, mousePageY; var onMouseSelection = function(e) { - mousePageX = ace.getDocumentX(e); - mousePageY = ace.getDocumentY(e); + mousePageX = event.getDocumentX(e); + mousePageY = event.getDocumentY(e); }; var onMouseSelectionEnd = function() { @@ -317,10 +321,10 @@ var Editor = function(renderer, doc) { self.renderer.scrollCursorIntoView(); }; - ace.capture(this.container, onMouseSelection, onMouseSelectionEnd); + event.capture(this.container, onMouseSelection, onMouseSelectionEnd); var timerId = setInterval(onSelectionInterval, 20); - return ace.preventDefault(e); + return event.preventDefault(e); }; this.onMouseDoubleClick = function(e) { @@ -337,7 +341,7 @@ var Editor = function(renderer, doc) { this.onMouseWheel = function(e) { this.renderer.scrollBy(e.wheelX, e.wheelY); - return ace.preventDefault(e); + return event.preventDefault(e); }; this.getCopyText = function() { diff --git a/src/ace/lib/event.js b/src/ace/lib/event.js index 1bfc7f7a..3fbbb2e0 100644 --- a/src/ace/lib/event.js +++ b/src/ace/lib/event.js @@ -54,24 +54,38 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) { e.returnValue = false; }; - event.getDocumentX = function(event) { - if (event.clientX) { + event.getDocumentX = function(e) { + if (e.clientX) { var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; - return event.clientX + scrollLeft; + return e.clientX + scrollLeft; } else { - return event.pageX; + return e.pageX; } }; - event.getDocumentY = function(event) { - if (event.clientY) { + event.getDocumentY = function(e) { + if (e.clientY) { var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; - return event.clientY + scrollTop; + return e.clientY + scrollTop; } else { - return event.pageX; + return e.pageX; } }; + /** + * @return {Number} 0 for left button, 1 for middle button, 2 for right button + */ + event.getButton = function(e) { + // DOM Event + if (e.preventDefault) { + return e.button; + } + // old IE + else { + return Math.max(e.button - 1, 2) + } + }; + if (document.documentElement.setCapture) { event.capture = function(el, eventHandler, releaseCaptureHandler) { function onMouseMove(e) {