axpager
v1.2.4
Published
a simple paginator support ajax request and array paging.
Downloads
35
Maintainers
Readme
ajax-paginator
A useful paginator supports ajax request and static array data paging.
Installation
ES2015 via npm
npm install axpagerWeb via script link
<script src="dist/axpager.umd.js"></script>Themes
<link rel="stylesheet" href="dist/themes/axpager.theme.light.css">Usage
ES2015
import {Paginator} from 'axpager';UMD
const {Paginator} = axpager;Example
Rewrite function PageConfig#getPagedResource to adapt ajax request paging if your response data format cannot match {data: any[], length: number} :
// Bulit-in default implementation.
getPagedResource: response => ({data: response.data, length: response.pager.recordCount})const paginator = Paginator.init(document.getElementById('pager'), {
getPagedResource: // adapt response data for ajax
});
// paginator.ajax(url, requestOption)
// paginator.resource(array, requestOption)
paginator.of(url | array, {
success: (list, event, req) => {
// ...
}
});Ajax request paging
const paginator = Paginator.init(document.getElementById('pager'));
paginator.of('http://localhost:8080/users', {
data:{
username: 'jack'
},
before: init => {
// send cookie to server
// default xhr: init.withCredentials = true;
// fetch api: init.credentials = 'include'
},
success: (list, event, req) => {
// GET: actually request url: 'http://localhost:8080/users?page=1&size=10&username=jack'
},
error: err => {
}
});Array data paging
const paginator = Paginator.init(document.getElementById('pager'));
paginator.of([1,2,3,4,5,6,7,8,9], {
data: {
num: 5
},
success: (list, event, req) => {
// list: [5]
// req: {num: 5}
},
filter: (item, req) => {
// item: each num of array.
// req: {num: 5}
return item === req.num;
}
});Above examples both are default PageConfig and RequestOption.
Get into dist/example/index.html demo preview.
Constructor
Paginator(container: HTMLElement, config?: PageConfig)
Static method: init(container: HTMLElement, config?: PageConfig)
Instance properties
pages
readonlyTotal pages.
pageParams
readonlyAjax paging request page params.
pageEvent
readonlyPaging event data.
Instance methods
ajax(url: string, option?: RequestOption)
Ajax request paging.
resource(data: any[], option?: RequestOption)
Static array data paging.
of(target: string | any[], option?: RequestOption)
Request paging, ajax or resource will be called depends on target type.
refresh()
Refresh current page's data.
disable(isDisable: boolean)
If true disable all actions (select, buttons, actions events and paging action).
goto(page: number)
Goto target page number.
Configuration
PageConfig
Properties
itemsPerPageLabel
optionalItems per page lebel text, default
每页条数.hidePageSize
optionalHide page size panel( items per page babel and page size options), default
false.showPageSizeOptions
optionalShow page size options, default
true.showFirstLastButtons
optionalShow first and last button, default
true.initPageNumber
optionalInstance init page number, default
1.initPageSize
optionalInstance init page size, default
pageSizeOptions[0]or10.pageSizeOptions
optionalPage size options, default
[10, 15, 30].pageRadius
optionalHalf of page numbers length, default
0.// current page: 5 // 2 [3, 4, 5, 6] // 3 [2, 3, 4, 5, 6, 7]pageNumbersType
optionalPage numbers element type, default
button, supportselect, working whenpageRadius > 1.// pageRadius: 2 // select example: // |< < [ ] > >| // [3] // [4] // [5] // [6] // button example: // |< < (3) (4) (5) (6) > >|firstPageLabel
optionalFirst page button title text, default
第一页.previousPageLabel
optionalPrevious page button title text, default
上一页.nextPageLabel
optionalNext page button title text, default
下一页.lastPageLabel
optionalLast page button title text, default
最后一页.
Methods
ajaxAdapter
optionalajaxAjax request adapter, custom ajax request implementation, default:
() => new XMLHttpRequestAdapter()getRangeLabel
optionalGet range label text, default:
(page: number, size: number, pages: number, length: number) => `第${page}/${pages}页,共${length}条`getPageParams
optionalajaxGet necessary ajax request page params, default:
(page: number, size: number) => ({page: page, size: size})getPagedResource
optionalajaxGet custom paged resource format from ajax request response, default:
(response: any) => ({data: response.data, length: response.pager.recordCount})changes
optionalBefore paging action request changes callback, default:
(pageEvent, eventTarget) => void (0)
RequestOption
Properties
method
optionalajaxinitAJAX request method, default
GET, supportPOST.data
optionalinitRequest params such as query parameters from form, default
{}, support{}andFormData, data will be parsed:GET:
{}->form-urlencodePOST:
{}->form-urlencode(default){}->json(Content-Type:application/json){}->FormData(Content-Type:multipart/form-data)FormData->FormData
headers
optionalajaxinitHttp headers.
timeout
optionalajaxinitAjax request timeout, default
-1.
Methods
before
optionalinitBefore request paging callback, default:
(init: XMLHttpRequest | RequestInit | any) => void (0)success
Paging request success callback, default:
(data: any[], pageEvent: PageEvent, requestData: {} | FormData | any) => void(0)error
optionalajaxPaging request error callback, default:
(error: any) => void(0)finish
optionalPaging request finished callback, default:
() => void(0)filter
optionalresourceStatic array data paging filter, such as
Array#filter, default:(item: any, requestData: {} | FormData | any) => true
AjaxAdapter
Basic ajax request adapter, built-in:
XMLHttpRequestAdapter
defaultBase on XMLHttpRequest default implementation.
FetchAdapter
Based on fetch api adapter.
AjaxAdapter
Methods
request
(url: string, pageParams: {}, reqOption: RequestInitOption): Promise<any>Request method, resolve response and reject exception.
Example
class MyAdapter implements AjaxAdapter {
request(url: string, pageParams: {}, reqOption: RequestInitOption): Promise<any> {
return new Promise((resolve, reject) => {
fetch(url, option)
.then(response => {
if (response.ok) {
response.json().then(resolve);
return;
}
reject(response.status + ': ' + (response.statusText || 'request failed.'));
}).catch(reject);
});
}
}