From 7a2fa50d94c9a00771c33d28dfd8c58600aacd41 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke <marijn@haverbeke.nl> Date: Mon, 17 Jul 2017 11:59:03 +0200 Subject: [PATCH] [tern addon] Make argument hint tooltip vanish on blur/scroll/etc Issue #3059 --- addon/tern/tern.js | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/addon/tern/tern.js b/addon/tern/tern.js index efdf2ed62..644e495f6 100644 --- a/addon/tern/tern.js +++ b/addon/tern/tern.js @@ -334,7 +334,11 @@ tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")")); if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype)); var place = cm.cursorCoords(null, "page"); - ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip); + var tooltip = ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip) + setTimeout(function() { + tooltip.clear = onEditorActivity(cm, function() { + if (ts.activeArgHints == tooltip) closeArgHints(ts) }) + }, 20) } function parseFnType(text) { @@ -604,11 +608,8 @@ } function clear() { cm.state.ternTooltip = null; - if (!tip.parentNode) return; - cm.off("cursorActivity", clear); - cm.off('blur', clear); - cm.off('scroll', clear); - fadeOut(tip); + if (tip.parentNode) fadeOut(tip) + clearActivity() } var mouseOnTip = false, old = false; CodeMirror.on(tip, "mousemove", function() { mouseOnTip = true; }); @@ -619,9 +620,20 @@ } }); setTimeout(maybeClear, ts.options.hintDelay ? ts.options.hintDelay : 1700); - cm.on("cursorActivity", clear); - cm.on('blur', clear); - cm.on('scroll', clear); + var clearActivity = onEditorActivity(cm, clear) + } + + function onEditorActivity(cm, f) { + cm.on("cursorActivity", f) + cm.on("blur", f) + cm.on("scroll", f) + cm.on("setDoc", f) + return function() { + cm.off("cursorActivity", f) + cm.off("blur", f) + cm.off("scroll", f) + cm.off("setDoc", f) + } } function makeTooltip(x, y, content) { @@ -650,7 +662,11 @@ } function closeArgHints(ts) { - if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; } + if (ts.activeArgHints) { + if (ts.activeArgHints.clear) ts.activeArgHints.clear() + remove(ts.activeArgHints) + ts.activeArgHints = null + } } function docValue(ts, doc) { -- GitLab