Compass Web App Workarounds
After giving my Compass web app the ability to go full screen, it's working pretty much as I had imagined when I started this project. Except, of course, for the two problems that I believe to be browser bugs outside of my control. I've always known that real-world web projects have a lot of ugly workarounds for problems hiding across browser implementations, but I had thought I could avoid that by targeting a single browser. (Chrome on Android with experimental magnetometer API.) Sadly, no such luck. It is time to get hacking.
The vertical text issue is merely cosmetic and the easiest to fix. I want sideways-lr
but it doesn't work. Fortunately, vertical-lr
is also a vertical text layout, just rotated in the opposite direction from the one I wanted. Because I only have a single line of text, adding transform: rotate(180deg)
was enough to get the result I wanted. I believe there would be additional complications if there were more than one line of text, but that's a problem I don't have to deal with today. I opened a GitHub issue to track removing this workaround, but as a practical matter, there's no real harm leaving this workaround in place even if sideways-lr
starts working correctly.
The same could not be said of the magnetometer {referenceFrame: 'screen'}
problem, where landscape-left receives the result for landscape-right and vice versa. While the workaround is the same, adding transform: rotate(180deg)
to flip things around, I can't leave this workaround the same way as I could vertical text. As soon as the upstream browser bug is fixed, my workaround rotation would cause the display to be wrong again. And even worse, there's no way for me to determine within the app whether the workaround is applicable. I couldn't issue a CSS media query for whether this bug is fixed! I don't know of a graceful way to handle this, but at least I've opened an issue for it as well.
And finally for completeness, I opened an issue tracking the fact magnetometer API is a preview experiment. Because it is likely to change, this app could stop working at any time. I expect that magnetometer API would mature to become available across multiple platforms, not just Chrome on Android. Once adoption broadens, this app needs to be updated from experimental to standard API.