From 78471317f6fb0e1c7f9268c47d365d5732a0f630 Mon Sep 17 00:00:00 2001 From: nightwing Date: Fri, 6 Jul 2012 13:15:09 +0400 Subject: [PATCH] do not use event.target for determining clicked gutter region breakpoints/numbers/foldwidgets --- lib/ace/ext/textarea.js | 1 - lib/ace/layer/gutter.js | 20 ++++++++++++++++++++ lib/ace/mouse/default_gutter_handler.js | 8 ++------ lib/ace/mouse/fold_handler.js | 7 +++++-- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/ace/ext/textarea.js b/lib/ace/ext/textarea.js index c46579d8..918e8ebd 100644 --- a/lib/ace/ext/textarea.js +++ b/lib/ace/ext/textarea.js @@ -193,7 +193,6 @@ exports.transformTextarea = function(element, loader) { var settingOpener = document.createElement("div"); applyStyles(settingOpener, { position: "absolute", - width: "15px", right: "0px", bottom: "0px", background: "red", diff --git a/lib/ace/layer/gutter.js b/lib/ace/layer/gutter.js index be72a172..d30c4ba3 100644 --- a/lib/ace/layer/gutter.js +++ b/lib/ace/layer/gutter.js @@ -174,12 +174,32 @@ var Gutter = function(parentEl) { dom.removeCssClass(this.element, "ace_folding-enabled"); this.$showFoldWidgets = show; + this.$padding = null; }; this.getShowFoldWidgets = function() { return this.$showFoldWidgets; }; + this.$computePadding = function() { + if (!this.element.firstChild) + return {left: 0, right: 0}; + var style = dom.computedStyle(this.element.firstChild); + this.$padding = {} + this.$padding.left = parseInt(style.paddingLeft) + 1; + this.$padding.right = parseInt(style.paddingRight); + return this.$padding; + }; + + this.getRegion = function(point) { + var padding = this.$padding || this.$computePadding(); + var rect = this.element.getBoundingClientRect(); + if (point.x < padding.left + rect.left) + return "markers"; + if (this.$showFoldWidgets && point.x > rect.right - padding.right) + return "foldWidgets"; + }; + }).call(Gutter.prototype); exports.Gutter = Gutter; diff --git a/lib/ace/mouse/default_gutter_handler.js b/lib/ace/mouse/default_gutter_handler.js index e7e005bd..0fbadfb7 100644 --- a/lib/ace/mouse/default_gutter_handler.js +++ b/lib/ace/mouse/default_gutter_handler.js @@ -44,15 +44,11 @@ function GutterHandler(mouseHandler) { var editor = mouseHandler.editor; mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { - var target = e.domEvent.target || e.domEvent.srcElement; - if (target.className.indexOf("ace_gutter-cell") == -1) - return; - if (!editor.isFocused()) return; + var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); - var padding = parseInt(dom.computedStyle(target).paddingLeft); - if (e.x < padding + target.getBoundingClientRect().left + 1) + if (gutterRegion) return; var row = e.getDocumentPosition().row; diff --git a/lib/ace/mouse/fold_handler.js b/lib/ace/mouse/fold_handler.js index ecde7769..2064660e 100644 --- a/lib/ace/mouse/fold_handler.js +++ b/lib/ace/mouse/fold_handler.js @@ -58,9 +58,12 @@ function FoldHandler(editor) { }); editor.on("gutterclick", function(e) { - if (e.domEvent.target.className.indexOf("ace_fold-widget") != -1) { + var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); + + if (gutterRegion == "foldWidgets") { var row = e.getDocumentPosition().row; - editor.session.onFoldWidgetClick(row, e.domEvent); + if (editor.session.foldWidgets[row]) + editor.session.onFoldWidgetClick(row, e); e.stop(); } });