Skip to content

Commit

Permalink
Merge pull request atom#13493 from atom/fb-vjeux-find-tooltips
Browse files Browse the repository at this point in the history
Add atom.tooltips.findTooltips(target)
  • Loading branch information
lee-dohm authored Dec 23, 2016
2 parents 2958ad2 + 6404970 commit 3ca269e
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 2 deletions.
23 changes: 22 additions & 1 deletion spec/tooltip-manager-spec.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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()
26 changes: 25 additions & 1 deletion src/tooltip-manager.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -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.
#
Expand Down Expand Up @@ -129,19 +130,42 @@ class TooltipManager

tooltip = new Tooltip(target, options, @viewRegistry)

if not @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 isnt -1
tooltipsForTarget.splice(index, 1)
if tooltipsForTarget.length is 0
@tooltips.delete(target)

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()
else
[]

humanizeKeystrokes = (keystroke) ->
keystrokes = keystroke.split(' ')
keystrokes = (_.humanizeKeystroke(stroke) for stroke in keystrokes)
Expand Down

0 comments on commit 3ca269e

Please sign in to comment.