From 78fb93fd029ae2850deaae84e72aba8ede52e451 Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Fri, 10 Jan 2025 21:49:30 +0200 Subject: [PATCH] fix detection of unknown mobile IOS devices --- app/javascript/elements/download_button.js | 3 ++- app/javascript/submission_form/completed.vue | 3 ++- app/javascript/submission_form/form.vue | 8 ++++++-- app/javascript/template_builder/builder.vue | 4 +++- app/javascript/template_builder/page.vue | 4 +++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/javascript/elements/download_button.js b/app/javascript/elements/download_button.js index 1332d2ec..09e66902 100644 --- a/app/javascript/elements/download_button.js +++ b/app/javascript/elements/download_button.js @@ -20,7 +20,8 @@ export default targetable(class extends HTMLElement { fetch(this.dataset.src).then(async (response) => { if (response.ok) { const urls = await response.json() - const isSafariIos = /iPhone|iPad|iPod/i.test(navigator.userAgent) + const isMobileSafariIos = ('ontouchstart' in window || navigator.maxTouchPoints > 0) && /AppleWebKit/i.test(navigator.userAgent) + const isSafariIos = isMobileSafariIos || /iPhone|iPad|iPod/i.test(navigator.userAgent) if (isSafariIos && urls.length > 1) { this.downloadSafariIos(urls) diff --git a/app/javascript/submission_form/completed.vue b/app/javascript/submission_form/completed.vue index 6b21f77e..98358e90 100644 --- a/app/javascript/submission_form/completed.vue +++ b/app/javascript/submission_form/completed.vue @@ -215,7 +215,8 @@ export default { fetch(this.baseUrl + `/submitters/${this.submitterSlug}/download`).then(async (response) => { if (response.ok) { const urls = await response.json() - const isSafariIos = /iPhone|iPad|iPod/i.test(navigator.userAgent) + const isMobileSafariIos = ('ontouchstart' in window || navigator.maxTouchPoints > 0) && /AppleWebKit/i.test(navigator.userAgent) + const isSafariIos = isMobileSafariIos || /iPhone|iPad|iPod/i.test(navigator.userAgent) if (isSafariIos && urls.length > 1) { this.downloadSafariIos(urls) diff --git a/app/javascript/submission_form/form.vue b/app/javascript/submission_form/form.vue index 280275ad..e5293071 100644 --- a/app/javascript/submission_form/form.vue +++ b/app/javascript/submission_form/form.vue @@ -856,7 +856,9 @@ export default { }, computed: { isMobile () { - return /android|iphone|ipad/i.test(navigator.userAgent) + const isMobileSafariIos = ('ontouchstart' in window || navigator.maxTouchPoints > 0) && /AppleWebKit/i.test(navigator.userAgent) + + return isMobileSafariIos || /android|iphone|ipad/i.test(navigator.userAgent) }, readonlyConditionalFieldValues () { return this.readonlyConditionalFields.reduce((acc, f) => { @@ -1111,7 +1113,9 @@ export default { this.minimizeForm() } - if (/iPhone|iPad|iPod/i.test(navigator.userAgent)) { + const isMobileSafariIos = ('ontouchstart' in window || navigator.maxTouchPoints > 0) && /AppleWebKit/i.test(navigator.userAgent) + + if (isMobileSafariIos || /iPhone|iPad|iPod/i.test(navigator.userAgent)) { this.$nextTick(() => { const root = this.$root.$el.parentNode.getRootNode() const scrollbox = root.getElementById('scrollbox') diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index 1246803f..408eef21 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -703,7 +703,9 @@ export default { return this.locale.split('-')[0].toLowerCase() }, isMobile () { - return /android|iphone|ipad/i.test(navigator.userAgent) + const isMobileSafariIos = ('ontouchstart' in window || navigator.maxTouchPoints > 0) && /AppleWebKit/i.test(navigator.userAgent) + + return isMobileSafariIos || /android|iphone|ipad/i.test(navigator.userAgent) }, defaultDateFormat () { const isUsBrowser = Intl.DateTimeFormat().resolvedOptions().locale.endsWith('-US') diff --git a/app/javascript/template_builder/page.vue b/app/javascript/template_builder/page.vue index 2f5acfe0..11f0c41f 100644 --- a/app/javascript/template_builder/page.vue +++ b/app/javascript/template_builder/page.vue @@ -162,7 +162,9 @@ export default { } }, isMobile () { - return /android|iphone|ipad/i.test(navigator.userAgent) + const isMobileSafariIos = ('ontouchstart' in window || navigator.maxTouchPoints > 0) && /AppleWebKit/i.test(navigator.userAgent) + + return isMobileSafariIos || /android|iphone|ipad/i.test(navigator.userAgent) }, resizeDirectionClasses () { return {