Cross-platform Javascript Input Abstraction Layer