From 2ce9bda1a34c6d207077c9a7f86c559642730fbe Mon Sep 17 00:00:00 2001 From: Josh Barr Date: Tue, 22 Mar 2016 18:47:50 +1300 Subject: [PATCH] replace classic logical fallacy in touch event detection with the recommended solution. --- .../wagtailadmin/static_src/wagtailadmin/js/userbar.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/wagtail/wagtailadmin/static_src/wagtailadmin/js/userbar.js b/wagtail/wagtailadmin/static_src/wagtailadmin/js/userbar.js index 8bb382e0e..dd2e76a0c 100644 --- a/wagtail/wagtailadmin/static_src/wagtailadmin/js/userbar.js +++ b/wagtail/wagtailadmin/static_src/wagtailadmin/js/userbar.js @@ -6,7 +6,7 @@ document.addEventListener('DOMContentLoaded', function userBar(e) { var list = userbar.querySelector('.wagtail-userbar-items'); var className = 'is-active'; var hasTouch = 'ontouchstart' in window; - var clickEvent = hasTouch ? 'touchstart' : 'click'; + var clickEvent = 'click'; if (!'classList' in userbar) { return; @@ -14,6 +14,14 @@ document.addEventListener('DOMContentLoaded', function userBar(e) { if (hasTouch) { userbar.classList.add('touch'); + + // Bind to touchend event, preventDefault to prevent DELAY and CLICK + // in accordance with: https://hacks.mozilla.org/2013/04/detecting-touch-its-the-why-not-the-how/ + trigger.addEventListener('touchend', function preventSimulatedClick(e) { + e.preventDefault(); + toggleUserbar(); + }); + } else { userbar.classList.add('no-touch'); }