mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-02-22 04:30:33 +09:00
34 lines
915 B
JavaScript
34 lines
915 B
JavaScript
import { Controller } from "@hotwired/stimulus"
|
|
import { nextEventNamed } from "helpers/timing_helpers"
|
|
import { isTouchDevice } from "helpers/navigator_helpers"
|
|
|
|
export default class extends Controller {
|
|
static get shouldLoad() {
|
|
return isTouchDevice()
|
|
}
|
|
|
|
// Use a fake input to trigger the soft keyboard on actions that load async content
|
|
// See https://gist.github.com/cathyxz/73739c1bdea7d7011abb236541dc9aaa
|
|
async open(event) {
|
|
const fakeInput = this.#focusOnFakeInput()
|
|
this.#removeOnFocusOut(fakeInput)
|
|
}
|
|
|
|
#focusOnFakeInput() {
|
|
const fakeInput = document.createElement("input")
|
|
|
|
fakeInput.setAttribute("type", "text")
|
|
fakeInput.setAttribute("class", "input--invisible")
|
|
|
|
this.element.appendChild(fakeInput)
|
|
fakeInput.focus()
|
|
|
|
return fakeInput
|
|
}
|
|
|
|
async #removeOnFocusOut(element) {
|
|
await nextEventNamed("focusout", element)
|
|
element.remove()
|
|
}
|
|
}
|