From a33ab44966b4a01360e6f8ec78886febbc702ffd Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Thu, 22 Dec 2016 23:01:42 +0000 Subject: [PATCH 1/3] Add atom.tooltips.findTooltips(target) Right now, it is not possible to hide a tooltip programatically. This is useful when we know better than the tooltip implementation that we did an action that should hide it. After discussing with @lee-dohm, he suggested the findTooltips API that mimicks the KeyMapManager API. Released under CC0 --- spec/tooltip-manager-spec.coffee | 23 ++++++++++++++++++++++- src/tooltip-manager.coffee | 21 ++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/spec/tooltip-manager-spec.coffee b/spec/tooltip-manager-spec.coffee index a7e8ccb1f..51ac61c00 100644 --- a/spec/tooltip-manager-spec.coffee +++ b/spec/tooltip-manager-spec.coffee @@ -185,8 +185,29 @@ describe "TooltipManager", -> describe "when the window is resized", -> it "hides the tooltips", -> - manager.add element, title: "Title" + disposable = manager.add element, title: "Title" hover element, -> expect(document.body.querySelector(".tooltip")).not.toBeNull() window.dispatchEvent(new CustomEvent('resize')) expect(document.body.querySelector(".tooltip")).toBeNull() + disposable.dispose() + + describe "findTooltips", -> + it "adds and remove tooltips correctly", -> + expect(manager.findTooltips(element).length).toBe(0) + disposable1 = manager.add element, title: "elem1" + expect(manager.findTooltips(element).length).toBe(1) + disposable2 = manager.add element, title: "elem2" + expect(manager.findTooltips(element).length).toBe(2) + disposable1.dispose() + expect(manager.findTooltips(element).length).toBe(1) + disposable2.dispose() + expect(manager.findTooltips(element).length).toBe(0) + + it "lets us hide tooltips programatically", -> + disposable = manager.add element, title: "Title" + hover element, -> + expect(document.body.querySelector(".tooltip")).not.toBeNull() + manager.findTooltips(element)[0].hide(); + expect(document.body.querySelector(".tooltip")).toBeNull() + disposable.dispose() diff --git a/src/tooltip-manager.coffee b/src/tooltip-manager.coffee index 4419ec740..d9f060113 100644 --- a/src/tooltip-manager.coffee +++ b/src/tooltip-manager.coffee @@ -56,6 +56,7 @@ class TooltipManager {delay: {show: 1000, hide: 100}} constructor: ({@keymapManager, @viewRegistry}) -> + @tooltips = new Map() # Essential: Add a tooltip to the given element. # @@ -129,19 +130,37 @@ class TooltipManager tooltip = new Tooltip(target, options, @viewRegistry) + if !@tooltips.has(target) + @tooltips.set(target, []) + @tooltips.get(target).push(tooltip) + hideTooltip = -> tooltip.leave(currentTarget: target) tooltip.hide() window.addEventListener('resize', hideTooltip) - disposable = new Disposable -> + disposable = new Disposable => window.removeEventListener('resize', hideTooltip) hideTooltip() tooltip.destroy() + if @tooltips.has(target) + tooltipsForTarget = @tooltips.get(target) + index = tooltipsForTarget.indexOf(tooltip) + if index != -1 + tooltipsForTarget.splice(index, 1) + if tooltipsForTarget.length == 0 + @tooltips.delete(target) + disposable + findTooltips: (target) -> + if @tooltips.has(target) + @tooltips.get(target).slice() + else + [] + humanizeKeystrokes = (keystroke) -> keystrokes = keystroke.split(' ') keystrokes = (_.humanizeKeystroke(stroke) for stroke in keystrokes) From fd5feab5b32173d69aba12d1b1760e929ae8314a Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Thu, 22 Dec 2016 16:05:10 -0800 Subject: [PATCH 2/3] :memo: Add documentation for findTooltips --- src/tooltip-manager.coffee | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/tooltip-manager.coffee b/src/tooltip-manager.coffee index d9f060113..79116e5c1 100644 --- a/src/tooltip-manager.coffee +++ b/src/tooltip-manager.coffee @@ -155,6 +155,11 @@ class TooltipManager disposable + # Extended: Find the tooltips that have been applied to the given element. + # + # * `target` The `HTMLElement` to find tooltips on. + # + # Returns an {Array} of `Tooltip` objects that match the `target`. findTooltips: (target) -> if @tooltips.has(target) @tooltips.get(target).slice() From 640497081e7e9ed8c0273b3dffceb41ae75638c5 Mon Sep 17 00:00:00 2001 From: Lee Dohm Date: Thu, 22 Dec 2016 16:39:40 -0800 Subject: [PATCH 3/3] :shirt: --- spec/tooltip-manager-spec.coffee | 2 +- src/tooltip-manager.coffee | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/tooltip-manager-spec.coffee b/spec/tooltip-manager-spec.coffee index 51ac61c00..35e563dae 100644 --- a/spec/tooltip-manager-spec.coffee +++ b/spec/tooltip-manager-spec.coffee @@ -208,6 +208,6 @@ describe "TooltipManager", -> disposable = manager.add element, title: "Title" hover element, -> expect(document.body.querySelector(".tooltip")).not.toBeNull() - manager.findTooltips(element)[0].hide(); + manager.findTooltips(element)[0].hide() expect(document.body.querySelector(".tooltip")).toBeNull() disposable.dispose() diff --git a/src/tooltip-manager.coffee b/src/tooltip-manager.coffee index 79116e5c1..03630c87f 100644 --- a/src/tooltip-manager.coffee +++ b/src/tooltip-manager.coffee @@ -130,7 +130,7 @@ class TooltipManager tooltip = new Tooltip(target, options, @viewRegistry) - if !@tooltips.has(target) + if not @tooltips.has(target) @tooltips.set(target, []) @tooltips.get(target).push(tooltip) @@ -148,9 +148,9 @@ class TooltipManager if @tooltips.has(target) tooltipsForTarget = @tooltips.get(target) index = tooltipsForTarget.indexOf(tooltip) - if index != -1 + if index isnt -1 tooltipsForTarget.splice(index, 1) - if tooltipsForTarget.length == 0 + if tooltipsForTarget.length is 0 @tooltips.delete(target) disposable