Rather than putting templates in DOM nodes, output JS functions
themselves.
This fixes transpiling for IE11, where ES6 parts of the templates
wouldn't get passed through Babel.
- Move controls to the "controls/" directory
- Make controls interface look similar to each other
- Prefix "private" methods and attributes with underscore
This commit introduces timer-less retry system:
1. Any change to URL is going to stop listening to any messages.
2. If a message is sent and there's no handler that could pick it up,
the message gets enqueued.
3. The message is sent again to the first handler that attaches itself
to given event type.
While in theory this is full of holes (no control over the first
handler), in practice, it works quite well.
Additionally, views.listenToMessages was attaching to completely wrong
DOM node; this commit fixes this as well.
- Change page number indicator
- Remove most of the scrolling cruft as it has no chance of working
anyway, thanks to our benevolent browsers
- Scroll to page header if the page is not the first one (I'm surprised
this even works)
- Use promises rather than timers
- Simplify top page detection using .elementFromPoint rather than
iterating over all pages. Coincidentally, this seems to work slightly
better
This is to let user log in if their login cookie is broken (for example
when it refers to a non existing user). Normally, the client should
treat errors caused by cookie logins as temporary server failures,
inform the user about it and leave the cookie, so that when the server
is up again, all user needs to do is to reload the page rather than
logging again.