diff --git a/app/javascript/application.js b/app/javascript/application.js
index 647378b0..0bcc7418 100644
--- a/app/javascript/application.js
+++ b/app/javascript/application.js
@@ -57,6 +57,7 @@ import BarChart from './elements/bar_chart'
import FieldCondition from './elements/field_condition'
import ConfirmUpload from './elements/confirm_upload'
import ScrollFade from './elements/scroll_fade'
+import ConvertModalLinks from './elements/convert_modal_links'
import * as TurboInstantClick from './lib/turbo_instant_click'
@@ -152,6 +153,7 @@ safeRegisterElement('bar-chart', BarChart)
safeRegisterElement('field-condition', FieldCondition)
safeRegisterElement('confirm-upload', ConfirmUpload)
safeRegisterElement('scroll-fade', ScrollFade)
+safeRegisterElement('convert-modal-links', ConvertModalLinks)
safeRegisterElement('template-builder', class extends HTMLElement {
connectedCallback () {
diff --git a/app/javascript/elements/convert_modal_links.js b/app/javascript/elements/convert_modal_links.js
new file mode 100644
index 00000000..b31e3108
--- /dev/null
+++ b/app/javascript/elements/convert_modal_links.js
@@ -0,0 +1,15 @@
+export default class extends HTMLElement {
+ connectedCallback () {
+ if (!this.isMobile()) return
+
+ document.querySelectorAll('a[data-turbo-frame="modal"]').forEach((link) => {
+ link.dataset.turboFrame = '_top'
+ })
+ }
+
+ isMobile () {
+ const isTouchWebkit = 'ontouchstart' in window && navigator.maxTouchPoints > 0 && /AppleWebKit|android/i.test(navigator.userAgent)
+
+ return isTouchWebkit || /iPhone|iPad|iPod/i.test(navigator.userAgent)
+ }
+}
diff --git a/app/javascript/elements/turbo_modal.js b/app/javascript/elements/turbo_modal.js
index 69c20549..7642386c 100644
--- a/app/javascript/elements/turbo_modal.js
+++ b/app/javascript/elements/turbo_modal.js
@@ -6,7 +6,7 @@ export default actionable(class extends HTMLElement {
document.addEventListener('keyup', this.onEscKey)
- document.addEventListener('turbo:before-cache', this.close)
+ document.addEventListener('turbo:before-cache', this.onBeforeCache)
if (this.dataset.closeAfterSubmit !== 'false') {
document.addEventListener('turbo:submit-end', this.onSubmit)
@@ -18,7 +18,7 @@ export default actionable(class extends HTMLElement {
document.removeEventListener('keyup', this.onEscKey)
document.removeEventListener('turbo:submit-end', this.onSubmit)
- document.removeEventListener('turbo:before-cache', this.close)
+ document.removeEventListener('turbo:before-cache', this.onBeforeCache)
}
onSubmit = (e) => {
@@ -33,9 +33,19 @@ export default actionable(class extends HTMLElement {
}
}
+ onBeforeCache = () => {
+ if (this.closest('turbo-frame')?.src) {
+ this.remove()
+ }
+ }
+
close = (e) => {
e?.preventDefault()
- this.remove()
+ if (!this.closest('turbo-frame')?.src && window.history.length > 1) {
+ window.history.back()
+ } else {
+ this.remove()
+ }
}
})
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 09cfb218..cb372271 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -27,6 +27,7 @@
<% end %>
<% end %>
+
<%= render 'shared/navbar' %>
<% if flash.present? %><%= render 'shared/flash' %><% end %>