Add a (responsive) navbar

Change-Id: Ib7adcc5195461b1bedcc35b2810ca97f2f8e84f6
Reviewed-on: https://gerrit.causes.com/25842
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Rename `top_authors` to just `authors`

It returns all authors, so the `top_authors` name was somewhat
misleading.

Change-Id: Ia7c23a3a11e42bb72963de55ce4351a2ae1ac88a
Reviewed-on: https://gerrit.causes.com/25843
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Hack /teams to show truly team-centric view

With this hacky commit, we have /teams showing team-based stats
(individual author names are shown in a tool-tip, but all commits are
attributed on a per-team basis).

This is evidently pretty ugly, so I'll follow up with a polish commit
presently.

Change-Id: Iab115e7ae751b769ceb26be8475a154b0c09ccf6
Reviewed-on: https://gerrit.causes.com/25844
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Redirect / to /teams

The team comes first / There is no "I" in "team" / etc.

Or something like that.

Change-Id: Ia243c31ccdb0d4f23f80b4d5a1ef1efe7ba43406
Reviewed-on: https://gerrit.causes.com/25845
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Make minor readability improvements for CommitSet#teams

Extract `#author_to_commit_set` method for re-use, which in turn makes
the implementation of `CommitSet#teams` ever so slightly easier to read.
It could still be cleaned up further though, which I'll look at doing in
a subsequent commit.

Change-Id: I455857e9ac9f2a65744cb52c6590b023edf7304c
Reviewed-on: https://gerrit.causes.com/25846
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Add rudimentary /teams/:slug action

For now this is just a blank page that shows the team title. I want
something to link to so that I can DRY up the table rows in the
teams/index and authors/index templates, by making them substantially
the same.

In a little bit I'll put some actual content on this page.

Change-Id: I87ad2f4fa96096ae5cc68049196aea9960138c21
Reviewed-on: https://gerrit.causes.com/25847
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Add additional level to "Home / Authors / [Author]" breadcrumbs

Now that we have a home page, /authors page, and /teams page, nest the
latter two pages under the home page. Eventually the home page will
become an overall dashboard for everything that's happening in Twigg.

Change-Id: Icc16544d25950a981c0dfcf6bb7d54e0ee9087fb
Reviewed-on: https://gerrit.causes.com/25848
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Add replace.js

This corresponds to a pre-release version of replace.js, currently under
code review here:

  https://gerrit.causes.com/25809
  https://gerrit.causes.com/25810
  https://gerrit.causes.com/25811
  https://gerrit.causes.com/25812

These four commits will eventually be applied on top of the current HEAD
of master of replace.js (currently a455a4b37a735c91b8efa4e52).

This functionality will be used to build up the forthcoming dashboard
view, where we'll have a few potentially expensive components to render,
and want to bring them down asynchronously and in parallel.

Change-Id: I17da4ec92d7bee10cacdb9cc638aa5758266ac07
Reviewed-on: https://gerrit.causes.com/25849
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Show team and author info on dashboard

This is just a crude example of how we can use replace.js to get
multiple pieces of content to show up on a central dashboard, mounted at
/, with minimal effort. Eventually we'll provide much richer and more
diverse information on this view.

We don't need complicated controller actions; we can just point at our
existing endpoints and with minor modifications pull the data down
without layout.

This is one nice way of getting around Ruby's lack of useful
concurrency; we effectively let the browser handle the threading for us
(firing off multiple AJAX requests in parallel), while each web worker
process ends up doing its own share of the heavy lifting.

A subsequent commit will add a spinner so that there is some visible
notion of progress during the load.

Change-Id: I99eb9b0046036d6e2ae300135b4f6731820cced6
Reviewed-on: https://gerrit.causes.com/25850
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Use Bootstrap wells as placeholders for Ajaxed-in content

These provide a nice placeholder for content that will be Ajaxed in via
replace.js. We use a pseudo-elements to place "loading..." text in the
well while Replace is active.

Change-Id: I4f5e7651115927099741697f2a90f20ac34490f0
Reviewed-on: https://gerrit.causes.com/25851
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
DRY up commit-row rendering

The author and team views shared substantially similar markup for
rendering table rows. Pull that out into a partial for re-use.

Change-Id: I27b2afe43472508a8aaf6a7af2d1ac6ff2979d9e
Reviewed-on: https://gerrit.causes.com/25852
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>
Make tool-tips worked for Ajax-ed in content as well

This means that all content that comes in via Ajax (at least, via
replace.js) will have tool-tips set up as appropriate.

Change-Id: I99aee12996fecadae7a45e40344a20ee5c9e3f36
Reviewed-on: https://gerrit.causes.com/25853
Reviewed-by: Greg Hurrell <greg@causes.com>
Tested-by: Greg Hurrell <greg@causes.com>