summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Sumaran <alfredo@gitlab.com>2016-03-28 17:01:44 -0500
committerAlfredo Sumaran <alfredo@gitlab.com>2016-03-28 17:01:44 -0500
commit251240c026cf6153be0b8fc5b78dcc0b33deefe2 (patch)
treedeea300f97e8383c3dfcdb93f20edab1d2b73695
parenta5fb9980108909e2ba14c0238021735f362632f2 (diff)
downloadgitlab-ce-251240c026cf6153be0b8fc5b78dcc0b33deefe2.tar.gz
Refresh page according remaining todos
-rw-r--r--app/assets/javascripts/todos.js.coffee43
1 files changed, 43 insertions, 0 deletions
diff --git a/app/assets/javascripts/todos.js.coffee b/app/assets/javascripts/todos.js.coffee
index b6b4bd90e6a..e9652ee411f 100644
--- a/app/assets/javascripts/todos.js.coffee
+++ b/app/assets/javascripts/todos.js.coffee
@@ -1,4 +1,6 @@
class @Todos
+ PER_PAGE = 20
+
constructor: (@name) ->
@clearListeners()
@initBtnListeners()
@@ -24,6 +26,7 @@ class @Todos
dataType: 'json'
data: '_method': 'delete'
success: (data) =>
+ @redirectIfNeeded data.count
@clearDone $this.closest('li')
@updateBadges data
@@ -54,3 +57,43 @@ class @Todos
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