diff options
Diffstat (limited to 'web/js/labitrack.d/39-pagination.coffee')
-rw-r--r-- | web/js/labitrack.d/39-pagination.coffee | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/web/js/labitrack.d/39-pagination.coffee b/web/js/labitrack.d/39-pagination.coffee new file mode 100644 index 0000000..ca50b9b --- /dev/null +++ b/web/js/labitrack.d/39-pagination.coffee @@ -0,0 +1,103 @@ +λ.pagination = (-> + link = (pg) -> '/browse' + (if pg > 1 then '/page/' + pg else '') + + class pgs + constructor: -> @pages = [] + dots: -> @pages.push { id: 'dots', label: '…', classes: 'disabled' } + page: (pgno) -> @pages.push { + id: pgno + link: link pgno + label: pgno + } + first: -> @pages.push { + id: 'first' + link: link 1 + label: '|←' + classes: 'prev' + } + prev: (pg) -> @pages.push { + id: 'prev' + link: link pg + label: '←' + } + next: (pg) -> @pages.push { + id: 'next' + link: link pg + label: '→' + } + last: (pg) -> @pages.push { + id: 'last' + link: link pg + label: '→|' + classes: 'next' + } + + return (page, cnt) -> + p = new pgs + first = page != 1 + prev = page > 2 + next = page + 1 < cnt + last = page < cnt + slots = 11 + + left = right = Math.floor(slots / 2) + + left -= first + prev + right -= next + last + + if page - left < 1 + right += left - page + 1 + left = page - 1 + + if page + right > cnt + oldright = right + right = cnt - page + left += oldright - right + + if page - left < 1 + left = page - 1 + + if page - left isnt 1 + ldots = true + left-- + + if page + right isnt cnt + rdots = true + right-- + + p.first() if first + p.prev page-1 if prev + p.dots() if ldots + while left > 0 + p.page page - left-- + p.pages[(p.page page)-1].classes += ' active' + while right-- > 0 + p.page page + ++left + p.dots() if rdots + p.next page+1 if next + p.last cnt if last + return p.pages +)() + +###cnt = parseInt process.argv[2], 10 + +str_repeat = (str, fac) -> new Array(fac + 1).join(str) + +for i in [1..cnt] + paging = pagination i, cnt + pgs = [] + k = 0 + for page, j in paging + if page.id is 'dots' + pgs.push '…' + else if typeof page.id is 'string' + pgs.push page.id[0] + else + str = page.id+'' + pgs.push str[str.length-1] + if page.id is i + k = j + console.log pgs.join ' ' + console.log str_repeat(' ', k)+'^' + ### + |