From 561e4b91239216ff8abc21425d502e056941eb04 Mon Sep 17 00:00:00 2001 From: Matthias Dailey <matthias.dailey@ccri.com> Date: Mon, 23 Jan 2017 14:04:46 -0500 Subject: [PATCH] fix(tooltip): clean up keypress listener to avoid memory leaks Addresses #6405 --- src/tooltip/tooltip.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/tooltip/tooltip.js b/src/tooltip/tooltip.js index 6749a4f4bc..b171fc165d 100644 --- a/src/tooltip/tooltip.js +++ b/src/tooltip/tooltip.js @@ -348,7 +348,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s if (tooltip) { tooltip.remove(); - + tooltip = null; if (adjustmentTimeout) { $timeout.cancel(adjustmentTimeout); @@ -356,7 +356,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s } openedTooltips.remove(ttScope); - + if (tooltipLinkedScope) { tooltipLinkedScope.$destroy(); tooltipLinkedScope = null; @@ -496,6 +496,13 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s } } + // KeyboardEvent handler to hide the tooltip on Escape key press + function hideOnEscapeKey(e) { + if (e.which === 27) { + hideTooltipBind(); + } + } + var unregisterTriggers = function() { triggers.show.forEach(function(trigger) { if (trigger === 'outsideClick') { @@ -504,6 +511,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s element.off(trigger, showTooltipBind); element.off(trigger, toggleTooltipBind); } + element.off('keypress', hideOnEscapeKey); }); triggers.hide.forEach(function(trigger) { if (trigger === 'outsideClick') { @@ -543,12 +551,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s element.on(trigger, showTooltipBind); element.on(triggers.hide[idx], hideTooltipBind); } - - element.on('keypress', function(e) { - if (e.which === 27) { - hideTooltipBind(); - } - }); + element.on('keypress', hideOnEscapeKey); }); } }