Thursday, February 28, 2008

UI metaphors 2.0

One site I visit from time to time allows you to restrict the date range of the query it's built from. The default range is about a month, but you can restrict it to as little as a day if you like, and I often do. The site uses a script to present the date range on a calendar instead of as plain text boxes. It's a nice convenience, particularly in places like travel sites, where you're likely to want to consult a calendar when filling in a date.

Generally, if you want to see if the content of a web page has changed, you just re-load it. But in this case if I restrict the query range to a single day, then reload, I don't see the new results for that day. I see the new results for the month.

The script that allows me to set the date from a calendar has its own state. When I reset the date range, I change that state, but it doesn't get saved anywhere (the site in question could use cookies to track this, but it doesn't). When I reload the page, the calendar goes back to its default state.

This breaks the fundamental "reload if you want to see the latest data" behavior of web pages. There's nothing wrong with changing this behavior, per se. It's often great when pages are able to update themselves, instead of waiting for me to poll again. But that's not what's happening here.

A query page represents a view of the data. If you reload a vanilla query page, you see the same view of the new data. Likewise for an asynchronous page that updates itself without being asked. In the case I'm describing, reloading doesn't just show the new data. It resets the view, disrupting the "view" metaphor.

This isn't a major breakage, but it's annoying, and it points out that moving intelligence from the server into the browser comes at a price: You have to consider issues that are already considered for you when you just color within the lines with plain old HTML.

I also notice that the mouse wheel doesn't work when the cursor is over certain parts of the page in question, presumably because those parts look at the mouse wheel events and don't give them back when they're done looking. So if I want to scroll that page up with the mouse wheel, I have to reposition the cursor when that part of the page scrolls under the cursor and the scrolling stops. Again, changing the behavior of the mouse wheel can be useful, as when you want to scroll a text box in a page and not the whole page it's on. But in the page I'm describing the change is annoying. It's a minor annoyance, but an annoyance nonetheless.

No comments: