refactor(ripple): adds support for non-fixed tabs

Closes #825.
Closes #460.
BTW, you are using `state.tabData.pages` everywhere (either directly or indirectly), but I think what you mean is `state.pages`. (`state.tabData` doesn't seem to have a `pages` property.)