simple usage in browser:
RiotControl.trigger('updatePage', 1, 10, 100);
<paging> | |
<div class="row"> | |
<div class="col-sm-5"> | |
<div aria-live="polite" role="status" id="table_info" class="dataTables_info"> | |
With | |
<select name="selectPageLength" id="selectPageLength" class="form-control" onchange={updatePageLength} disabled> | |
<option value="10">10</option> | |
<option value="20">20</option> | |
<option value="40">40</option> | |
</select> | |
entries/page: Showing {beginRange()} to {endRange()} of {total} entries | |
</div> | |
</div> | |
<div id="pagination" class="dataTables_paginate paging_simple_numbers"> | |
<ul class="pagination"> | |
<li each={pageList} class="paginate_button {disabled:!enabled} {active:selected}"> | |
<a href="javascript:void(0)" onclick={changePage}>{name}</a> | |
</li> | |
</ul> | |
</div> | |
</div> | |
</div> | |
<script> | |
var self = this | |
this.currentPage = 1 | |
this.totalPages = 1 | |
this.total = 1 | |
this.left = 1 | |
this.right = 1 | |
this.innerWindow = 2 | |
this.pageLength = 10 | |
this.pageList = [] | |
beginRange() { | |
return self.currentPage * self.pageLength - self.pageLength + 1 | |
} | |
endRange() { | |
var endRangeNumber = self.currentPage * self.pageLength | |
return endRangeNumber > self.total ? self.total : endRangeNumber | |
} | |
changePage(elem) { | |
var item = elem.item | |
if(item.enabled && !_.isEqual(item.name, self.currentPage)) { | |
var targetPage = item.name | |
if (item.name === 'Previous') { | |
targetPage = self.currentPage - 1 | |
} else if (item.name === 'Next') { | |
targetPage = self.currentPage + 1 | |
} | |
RiotControl.trigger('querydata', targetPage); | |
} | |
} | |
updatePageLength(e) { | |
self.pageLength = e.target.value | |
RiotControl.trigger('queryWithLength', e.target.value) | |
} | |
RiotControl.on('triggerPaging', function (flag) { | |
self.pageList.forEach(function (page) { | |
page.enabled = flag | |
}) | |
$('#resetfilter').prop('disabled', !flag) | |
$('#selectPageLength').prop('disabled', !flag) | |
}) | |
this.on('mount', function () { | |
self.pageList = [ | |
{name:'Previous', enabled: false, selected: false}, | |
{name:'Next', enabled: false, selected: false} | |
] | |
self.update() | |
}) | |
updateView() { | |
self.left = 1 | |
self.right = 1 | |
self.pageList = [ | |
{name:'Previous', enabled: self.currentPage > 1, selected: false} | |
] | |
self.right = self.totalPages - self.right | |
for (var i = 1; i <= self.totalPages; i++) { | |
if (self.is.number(i, self.left, self.right, self.currentPage, self.innerWindow)) { | |
var item = { | |
name: i, | |
selected: self.currentPage == i, | |
enabled: true | |
} | |
self.pageList.push(item) | |
} else if (self.is.dotted(i, self.left, self.right, self.currentPage, self.innerWindow, self.pageList.length)) { | |
var item = ({ | |
name: '...', | |
selected: false, | |
enabled: false | |
}); | |
self.pageList.push(item); | |
} | |
} | |
self.pageList.push({name:'Next', enabled: self.currentPage < self.totalPages, selected: false}) | |
self.update() | |
} | |
RiotControl.on('updatePage', function (page, totalPages, total) { | |
var ceil = Math.ceil(totalPages) | |
self.totalPages = totalPages > ceil ? ceil + 1 : ceil | |
self.currentPage = Number(page) | |
self.total = total | |
self.updateView() | |
}) | |
this.is = { | |
number: function(i, left, right, currentPage, innerWindow) { | |
return this.left(i, left) || this.right(i, right) || this.innerWindow(i, currentPage, innerWindow); | |
}, | |
left: function(i, left) { | |
return (i <= left); | |
}, | |
right: function(i, right) { | |
return (i > right); | |
}, | |
innerWindow: function(i, currentPage, innerWindow) { | |
return ( i >= (currentPage - innerWindow) && i <= (currentPage + innerWindow)); | |
}, | |
dotted: function(i, left, right, currentPage, innerWindow, currentPageItem) { | |
return this.dottedLeft(i, left, right, currentPage, innerWindow) || (this.dottedRight(i, left, right, currentPage, innerWindow, currentPageItem)); | |
}, | |
dottedLeft: function(i, left, right, currentPage, innerWindow) { | |
return ((i == (left + 1)) && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right)); | |
}, | |
dottedRight: function(i, left, right, currentPage, innerWindow, currentPageItem) { | |
if (self.pageList[currentPageItem-1].name === '...') { | |
return false; | |
} else { | |
return ((i == (right)) && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right)); | |
} | |
} | |
} | |
</script> | |
</paging> |
var RiotControl = { | |
_stores: [], | |
addStore: function(store) { | |
this._stores.push(store); | |
} | |
}; | |
['on','one','off','trigger'].forEach(function(api){ | |
RiotControl[api] = function() { | |
var args = [].slice.call(arguments); | |
this._stores.forEach(function(el){ | |
el[api].apply(el, args); | |
}); | |
}; | |
}); | |
if (typeof(module) !== 'undefined') module.exports = RiotControl; |