   updateBadges: (data) ->
     $('.todos-pending .badge, .todos-pending-count').text data.count
     $('.todos-done .badge').text data.done_count
+
+  getRenderedPages: ->
+    $('.gl-pagination .page').length
+
+  getCurrentPage: ->
+    parseInt($.trim($('.gl-pagination .page.active').text()))
+
+  redirectIfNeeded: (total) ->
+    currPages = @getRenderedPages()
+    currPage = @getCurrentPage()
+
+    newPages = Math.ceil(total / PER_PAGE)
+    url = location.href # Includes query strings
+
+    # Refresh if no remaining Todos
+    if !total
+      location.reload()
+      return
+
+    # Do nothing if no pagination
+    return if !currPages
+
+    # If new total of pages if different than we have now
+    if newPages isnt currPages
+      # Redirect to previous page if there´s one available
+      if currPages > 1 and currPage is currPages
+        url = @updateQueryStringParameter(url, 'page', currPages - 1)
+
+      location.replace url
+
+  updateQueryStringParameter: (uri, key, value) ->
+    separator = if uri.indexOf('?') isnt -1 then "&" else "?"
+
+    # Matches key and value
+    regex = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i")
+
+    if uri.match(regex)
+      return uri.replace(regex, '$1' + key + "=" + value + '$2')
+
+    uri + separator + key + "=" + value

      dataType: 'json'
      data: '_method': 'delete'
      success: (data) =>
        @clearDone $this.closest('li')
        @updateBadges data


class @Todos
  PER_PAGE = 20

  constructor: (@name) ->
    @clearListeners()
    @initBtnListeners()
