From 843e7d9549b72e46bd3b6187e98264adad2a0080 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 2 Feb 2011 08:04:49 +0100 Subject: [PATCH] editor should emit focus and blur events --- lib/ace/editor.js | 130 ++++++---------------------------------------- support/pilot | 2 +- 2 files changed, 16 insertions(+), 116 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index acef5313..bac6dadc 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -45,7 +45,10 @@ require("pilot/fixoldbrowsers"); var oop = require("pilot/oop"); var event = require("pilot/event"); var lang = require("pilot/lang"); +var useragent = require("pilot/useragent"); var TextInput = require("ace/keyboard/textinput").TextInput; +var MouseHandler = require("ace/mouse_handler").MouseHandler; +var TouchHandler = require("ace/touch_handler").TouchHandler; var KeyBinding = require("ace/keyboard/keybinding").KeyBinding; var EditSession = require("ace/edit_session").EditSession; var Search = require("ace/search").Search; @@ -60,20 +63,12 @@ var Editor =function(renderer, session) { this.textInput = new TextInput(renderer.getTextAreaContainer(), this); this.keyBinding = new KeyBinding(this); - var self = this; - event.addListener(container, "mousedown", function(e) { - self.focus(); - return event.preventDefault(e); - }); - event.addListener(container, "selectstart", function(e) { - return event.preventDefault(e); - }); - - var mouseTarget = renderer.getMouseEventTarget(); - event.addListener(mouseTarget, "mousedown", this.onMouseDown.bind(this)); - event.addMultiMouseDownListener(mouseTarget, 0, 2, 500, this.onMouseDoubleClick.bind(this)); - event.addMultiMouseDownListener(mouseTarget, 0, 3, 600, this.onMouseTripleClick.bind(this)); - event.addMouseWheelListener(mouseTarget, this.onMouseWheel.bind(this)); + + // TODO detect touch event support + if (useragent.isIPad) + this.$mouseHandler = new TouchHandler(this); + else + this.$mouseHandler = new MouseHandler(this); this.$selectionMarker = null; this.$highlightLineMarker = null; @@ -253,11 +248,13 @@ var Editor =function(renderer, session) { this.onFocus = function() { this.renderer.showCursor(); this.renderer.visualizeFocus(); + this._dispatchEvent("focus"); }; this.onBlur = function() { this.renderer.hideCursor(); this.renderer.visualizeBlur(); + this._dispatchEvent("blur"); }; this.onDocumentChange = function(e) { @@ -350,100 +347,6 @@ var Editor =function(renderer, session) { this.renderer.setTokenizer(this.bgTokenizer); }; - - this.onMouseDown = function(e) { - var pageX = event.getDocumentX(e); - var pageY = event.getDocumentY(e); - - var pos = this.renderer.screenToTextCoordinates(pageX, pageY); - pos.row = Math.max(0, Math.min(pos.row, this.session.getLength()-1)); - - var button = event.getButton(e) - if (button != 0) { - var isEmpty = this.selection.isEmpty() - if (isEmpty) { - this.moveCursorToPosition(pos); - } - if(button == 2) { - this.textInput.onContextMenu({x: pageX, y: pageY}, isEmpty); - event.capture(this.container, function(){}, this.textInput.onContextMenuClose); - } - return; - } - - if (e.shiftKey) - this.selection.selectToPosition(pos) - else { - this.moveCursorToPosition(pos); - if (!this.$clickSelection) - this.selection.clearSelection(pos.row, pos.column); - } - - this.renderer.scrollCursorIntoView(); - - var self = this; - var mousePageX, mousePageY; - - var onMouseSelection = function(e) { - mousePageX = event.getDocumentX(e); - mousePageY = event.getDocumentY(e); - }; - - var onMouseSelectionEnd = function() { - clearInterval(timerId); - self.$clickSelection = null; - }; - - var onSelectionInterval = function() { - if (mousePageX === undefined || mousePageY === undefined) - return; - - var cursor = self.renderer.screenToTextCoordinates(mousePageX, mousePageY); - cursor.row = Math.max(0, Math.min(cursor.row, self.session.getLength()-1)); - - if (self.$clickSelection) { - if (self.$clickSelection.contains(cursor.row, cursor.column)) { - self.selection.setSelectionRange(self.$clickSelection); - } else { - if (self.$clickSelection.compare(cursor.row, cursor.column) == -1) { - var anchor = self.$clickSelection.end; - } else { - var anchor = self.$clickSelection.start; - } - self.selection.setSelectionAnchor(anchor.row, anchor.column); - self.selection.selectToPosition(cursor); - } - } - else { - self.selection.selectToPosition(cursor); - } - - self.renderer.scrollCursorIntoView(); - }; - - event.capture(this.container, onMouseSelection, onMouseSelectionEnd); - var timerId = setInterval(onSelectionInterval, 20); - - return event.preventDefault(e); - }; - - this.onMouseDoubleClick = function(e) { - this.selection.selectWord(); - this.$clickSelection = this.getSelectionRange(); - }; - - this.onMouseTripleClick = function(e) { - this.selection.selectLine(); - this.$clickSelection = this.getSelectionRange(); - }; - - this.onMouseWheel = function(e) { - var speed = this.$scrollSpeed * 2; - - this.renderer.scrollBy(e.wheelX * speed, e.wheelY * speed); - return event.preventDefault(e); - }; - this.getCopyText = function() { if (!this.selection.isEmpty()) { return this.session.getTextRange(this.getSelectionRange()); @@ -568,15 +471,13 @@ var Editor =function(renderer, session) { this.setOverwrite(!this.$overwrite); }; - - this.$scrollSpeed = 1; this.setScrollSpeed = function(speed) { - this.$scrollSpeed = speed; - } + this.$mouseHandler.setScrollSpeed(speed); + }; this.getScrollSpeed = function() { - return this.$scrollSpeed; - } + return this.$mouseHandler.getScrollSpeed() + }; this.$selectionStyle = "line"; this.setSelectionStyle = function(style) { @@ -587,7 +488,6 @@ var Editor =function(renderer, session) { this._dispatchEvent("changeSelectionStyle", {data: style}); }; - this.getSelectionStyle = function() { return this.$selectionStyle; }; diff --git a/support/pilot b/support/pilot index 9e4505f4..67a38030 160000 --- a/support/pilot +++ b/support/pilot @@ -1 +1 @@ -Subproject commit 9e4505f43d57a27a60cd05c6f0d68d5ea31c8e33 +Subproject commit 67a380309e5b139a9603334ad9d9f917659f04bc