From 7d0e60f6743517db3c05a38e966fb9fb5052fa03 Mon Sep 17 00:00:00 2001 From: sculove Date: Tue, 12 Jan 2016 10:54:08 +0900 Subject: [PATCH] fix(Manager): Hammer.defaults.cssProps are restored on destory --- src/manager.js | 13 ++++++++++++- tests/unit/test_hammer.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/manager.js b/src/manager.js index 175b8947b..d42232b52 100644 --- a/src/manager.js +++ b/src/manager.js @@ -15,6 +15,7 @@ function Manager(element, options) { this.handlers = {}; this.session = {}; this.recognizers = []; + this.oldCssProps = {}; this.element = element; this.input = createInputInstance(this); @@ -272,9 +273,19 @@ function toggleCssProps(manager, add) { if (!element.style) { return; } + var prop; each(manager.options.cssProps, function(value, name) { - element.style[prefixed(element.style, name)] = add ? value : ''; + prop = prefixed(element.style, name); + if (add) { + manager.oldCssProps[prop] = element.style[prop]; + element.style[prop] = value; + } else { + element.style[prop] = manager.oldCssProps[prop] || ''; + } }); + if (!add) { + manager.oldCssProps = {}; + } } /** diff --git a/tests/unit/test_hammer.js b/tests/unit/test_hammer.js index cf66e2e60..da50006ab 100644 --- a/tests/unit/test_hammer.js +++ b/tests/unit/test_hammer.js @@ -157,3 +157,31 @@ test('Remove non-existent recognizer.', function() { equal(1, hammer.recognizers.length); }); + +test('check whether Hammer.defaults.cssProps is restored', function() { + var beforeCssProps = { + userSelect: 'text', + touchSelect: 'grippers', + touchCallout: 'default', + contentZooming: 'chained', + userDrag: 'element', + tapHighlightColor: 'rgba(0, 1, 0, 0)' + }; + var prop; + Hammer.each(Hammer.defaults.cssProps, function(value, name) { + prop = Hammer.prefixed(el.style, name); + if (prop) { + el.style[prop] = beforeCssProps[name]; + } + }); + + hammer = Hammer(el); + hammer.destroy(); + hammer = null; + Hammer.each(Hammer.defaults.cssProps, function(value, name) { + prop = Hammer.prefixed(el.style, name); + if (prop) { + equal(el.style[prop], beforeCssProps[name], "check if " + name + " is restored"); + } + }); +});