¿Cómo detecta/infiere Discourse los teclados virtuales?

Tengo un proyecto no relacionado con Discourse en el que realmente me gustaría poder detectar si el teclado virtual de un navegador móvil está activo o no. Me acabo de dar cuenta, después de días de pensar y buscar soluciones, de que el foro de Discourse que visito todos los días tiene una interfaz muy fluida para teclados virtuales móviles. Es genial cómo detecta de manera confiable el teclado y cambia el cuadro de respuesta para llenar el espacio restante, solo para volver al modo normal si cierras el teclado.

No he encontrado otras soluciones fáciles para detectar el teclado virtual (la mayoría de Stack Overflow solo dice que no lo intentes), pero lo que sea que haga Discourse parece funcionar bien. Sin embargo, la base de código es grande y compleja, y no sé dónde buscar en ella el código relevante. Así que esperaba que alguien familiarizado con la interfaz móvil de Discourse pudiera señalarme el código o darme una explicación de qué heurísticas utiliza Discourse.

2 Me gusta

Usamos la API de visual viewport: Visual Viewport API - Web APIs | MDN.

Puedes buscar en los archivos JS de nuestro repositorio de código visualViewport. Hay algunas peculiaridades en iOS debido a la ubicación del compositor, por lo que usamos algunas anulaciones más complejas allí, el archivo relevante es app/assets/javascripts/discourse/app/lib/safari-hacks.js.

5 Me gusta

¡Gracias por esos consejos!

2 Me gusta