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 {