From ca170b5d3de54c048a5c93dddc16257661d96893 Mon Sep 17 00:00:00 2001 From: Eric Arnold Date: Tue, 29 Apr 2014 17:15:25 -0700 Subject: [PATCH 1/3] Made and implemented Linking class for tracking eclipse-style identifier ctrl + clicks. Off by default. --- lib/ace/ace.js | 2 + lib/ace/linking.js | 66 ++++++++++++++++++++++++++++++++ lib/ace/mouse/linking_handler.js | 66 ++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 lib/ace/linking.js create mode 100644 lib/ace/mouse/linking_handler.js diff --git a/lib/ace/ace.js b/lib/ace/ace.js index a2261355..850f44f6 100644 --- a/lib/ace/ace.js +++ b/lib/ace/ace.js @@ -47,6 +47,7 @@ var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; var MultiSelect = require("./multi_select").MultiSelect; +var Linking = require("ace/linking").Linking; // The following require()s are for inclusion in the built ace file require("./worker/worker_client"); @@ -87,6 +88,7 @@ exports.edit = function(el) { var editor = new Editor(new Renderer(el)); new MultiSelect(editor); + new Linking(editor); editor.setSession(doc); var env = { diff --git a/lib/ace/linking.js b/lib/ace/linking.js new file mode 100644 index 00000000..cbd45d32 --- /dev/null +++ b/lib/ace/linking.js @@ -0,0 +1,66 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +define(function(require, exports, module) { + +var oop = require("./lib/oop"); +var EventEmitter = require("./lib/event_emitter").EventEmitter; +var onMouseDown = require("./mouse/linking_handler").onMouseDown; +var onMouseMove = require("./mouse/linking_handler").onMouseMove; +var Editor = require("./editor").Editor; + +// Linking(editor) +// adds linking support to the editor +function Linking(editor) { +} + +(function() { + oop.implement(this, EventEmitter); +}).call(Linking.prototype); + +exports.Linking = Linking; + +require("./config").defineOptions(Editor.prototype, "editor", { + enableLinking: { + set: function(val) { + Linking(this); + if (val) { + this.on("mousedown", onMouseDown); + this.on("mousemove", onMouseMove); + } else { + this.off("mousedown", onMouseDown); + this.off("mousemove", onMouseMove); + } + }, + value: false + } +}) + +}); diff --git a/lib/ace/mouse/linking_handler.js b/lib/ace/mouse/linking_handler.js new file mode 100644 index 00000000..c74272e8 --- /dev/null +++ b/lib/ace/mouse/linking_handler.js @@ -0,0 +1,66 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +define(function(require, exports, module) { + +var event = require("../lib/event"); + +function onMouseMove(e) { + var editor = e.editor; + var ctrl = e.getAccelKey(); + + if (ctrl) { + var editor = e.editor; + var docPos = e.getDocumentPosition(); + var session = editor.session; + var token = session.getTokenAt(docPos.row, docPos.column); + + editor._emit("link_hover", {position: docPos, token: token}); + } +} + +function onMouseDown(e) { + var ctrl = e.getAccelKey(); + var button = e.getButton(); + + if (button == 0 && ctrl) { + var editor = e.editor; + var docPos = e.getDocumentPosition(); + var session = editor.session; + var token = session.getTokenAt(docPos.row, docPos.column); + + editor._emit("link", {position: docPos, token: token}); + } +} + +exports.onMouseMove = onMouseMove; +exports.onMouseDown = onMouseDown; + +}); From 0582153019bdcb3d89fc848c69ce5457680fd618 Mon Sep 17 00:00:00 2001 From: Eric Arnold Date: Fri, 9 May 2014 16:24:02 -0700 Subject: [PATCH 2/3] Turned linking.js into extension. Merged linking_handler into linking.js. --- lib/ace/ace.js | 2 - .../linking_handler.js => ext/linking.js} | 21 +++++- lib/ace/linking.js | 66 ------------------- 3 files changed, 18 insertions(+), 71 deletions(-) rename lib/ace/{mouse/linking_handler.js => ext/linking.js} (84%) delete mode 100644 lib/ace/linking.js diff --git a/lib/ace/ace.js b/lib/ace/ace.js index 850f44f6..a2261355 100644 --- a/lib/ace/ace.js +++ b/lib/ace/ace.js @@ -47,7 +47,6 @@ var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; var MultiSelect = require("./multi_select").MultiSelect; -var Linking = require("ace/linking").Linking; // The following require()s are for inclusion in the built ace file require("./worker/worker_client"); @@ -88,7 +87,6 @@ exports.edit = function(el) { var editor = new Editor(new Renderer(el)); new MultiSelect(editor); - new Linking(editor); editor.setSession(doc); var env = { diff --git a/lib/ace/mouse/linking_handler.js b/lib/ace/ext/linking.js similarity index 84% rename from lib/ace/mouse/linking_handler.js rename to lib/ace/ext/linking.js index c74272e8..ccd3061e 100644 --- a/lib/ace/mouse/linking_handler.js +++ b/lib/ace/ext/linking.js @@ -3,7 +3,7 @@ * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright @@ -14,7 +14,7 @@ * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -30,7 +30,22 @@ define(function(require, exports, module) { -var event = require("../lib/event"); +var Editor = require("ace/editor").Editor; + +require("../config").defineOptions(Editor.prototype, "editor", { + enableLinking: { + set: function(val) { + if (val) { + this.on("mousedown", onMouseDown); + this.on("mousemove", onMouseMove); + } else { + this.off("mousedown", onMouseDown); + this.off("mousemove", onMouseMove); + } + }, + value: false + } +}) function onMouseMove(e) { var editor = e.editor; diff --git a/lib/ace/linking.js b/lib/ace/linking.js deleted file mode 100644 index cbd45d32..00000000 --- a/lib/ace/linking.js +++ /dev/null @@ -1,66 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Distributed under the BSD license: - * - * Copyright (c) 2010, Ajax.org B.V. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Ajax.org B.V. nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ***** END LICENSE BLOCK ***** */ - -define(function(require, exports, module) { - -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var onMouseDown = require("./mouse/linking_handler").onMouseDown; -var onMouseMove = require("./mouse/linking_handler").onMouseMove; -var Editor = require("./editor").Editor; - -// Linking(editor) -// adds linking support to the editor -function Linking(editor) { -} - -(function() { - oop.implement(this, EventEmitter); -}).call(Linking.prototype); - -exports.Linking = Linking; - -require("./config").defineOptions(Editor.prototype, "editor", { - enableLinking: { - set: function(val) { - Linking(this); - if (val) { - this.on("mousedown", onMouseDown); - this.on("mousemove", onMouseMove); - } else { - this.off("mousedown", onMouseDown); - this.off("mousemove", onMouseMove); - } - }, - value: false - } -}) - -}); From 19f1d99a985dbd55b442d2a346f612351bf1fcf6 Mon Sep 17 00:00:00 2001 From: Eric Arnold Date: Fri, 9 May 2014 16:30:35 -0700 Subject: [PATCH 3/3] Review fixes: Changed mousedown to click and changed event naming to use camelCase. Removed unnecessary exports --- lib/ace/ext/linking.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/ace/ext/linking.js b/lib/ace/ext/linking.js index ccd3061e..cfd333b2 100644 --- a/lib/ace/ext/linking.js +++ b/lib/ace/ext/linking.js @@ -36,10 +36,10 @@ require("../config").defineOptions(Editor.prototype, "editor", { enableLinking: { set: function(val) { if (val) { - this.on("mousedown", onMouseDown); + this.on("click", onClick); this.on("mousemove", onMouseMove); } else { - this.off("mousedown", onMouseDown); + this.off("click", onClick); this.off("mousemove", onMouseMove); } }, @@ -57,11 +57,11 @@ function onMouseMove(e) { var session = editor.session; var token = session.getTokenAt(docPos.row, docPos.column); - editor._emit("link_hover", {position: docPos, token: token}); + editor._emit("linkHover", {position: docPos, token: token}); } } -function onMouseDown(e) { +function onClick(e) { var ctrl = e.getAccelKey(); var button = e.getButton(); @@ -71,11 +71,8 @@ function onMouseDown(e) { var session = editor.session; var token = session.getTokenAt(docPos.row, docPos.column); - editor._emit("link", {position: docPos, token: token}); + editor._emit("linkClick", {position: docPos, token: token}); } } -exports.onMouseMove = onMouseMove; -exports.onMouseDown = onMouseDown; - });