From 4b43816bb662f807f9c91e760f5e0121399c596e Mon Sep 17 00:00:00 2001 From: Penar Musaraj Date: Mon, 4 Nov 2019 22:16:31 -0500 Subject: [PATCH] FIX: Skip composer blur event when switching apps in iOS --- .../javascripts/discourse/lib/safari-hacks.js.es6 | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 b/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 index ac64d26461..257a704c13 100644 --- a/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 +++ b/app/assets/javascripts/discourse/lib/safari-hacks.js.es6 @@ -112,9 +112,15 @@ function positioningWorkaround($fixedElement) { // document.activeElement is also unreliable (iOS does not mark buttons as focused) // so instead, we store the last touched element and check against it + // cancel blur event if user is: + // - switching to another iOS app + // - invoking a select-kit dropdown + // - invoking mentions + // - invoking a toolbar button if ( lastTouchedElement && - ($(lastTouchedElement).hasClass("select-kit-header") || + (document.visibilityState === "hidden" || + $(lastTouchedElement).hasClass("select-kit-header") || $(lastTouchedElement).closest(".autocomplete").length || ["span", "svg", "button"].includes( lastTouchedElement.nodeName.toLowerCase() @@ -227,6 +233,11 @@ function positioningWorkaround($fixedElement) { }; const observer = new MutationObserver(checkForInputs); observer.observe(fixedElement, config); + + // document.addEventListener("visibilitychange", () => { + // console.log(document.visibilityState); + // console.log(lastTouchedElement); + // }); } export default positioningWorkaround;