Skip to content

Commit 1bdb3b5

Browse files
committed
pagination 增加 mini 选项
1 parent f11a3b6 commit 1bdb3b5

File tree

5 files changed

+55
-20
lines changed

5 files changed

+55
-20
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ publish
1111
*.sh
1212
*.log
1313
/components
14+
/coverage

docs/src/js/pages/pagination.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export default class Page extends React.Component {
1313
size: 20,
1414
total: 1000,
1515
pages: 10,
16+
mini: false,
1617
jumper: false
1718
}
1819

@@ -36,6 +37,7 @@ export default class Page extends React.Component {
3637
pages={int} // 显示的页码数, 默认为 10
3738
total={int} // 总条目数,默认为 0
3839
jumper={bool} // 是否可以输入页码,默认为 false
40+
mini={bool} // 是否简化版本
3941
onChange={function} // 页码点击时触发事件,参数为页码
4042
/>`}
4143
</pre>
@@ -46,13 +48,15 @@ export default class Page extends React.Component {
4648
size={this.state.size}
4749
total={this.state.total}
4850
pages={this.state.pages}
51+
mini={this.state.mini}
4952
onChange={this.onChange.bind(this)}
5053
jumper={this.state.jumper} />
5154

5255
<p>index: <Input value={this.state.index} onChange={v => this.setState({index: parseInt(v)})} /></p>
5356
<p>size: <Input value={this.state.size} onChange={v => this.setState({size: parseInt(v)})} /></p>
5457
<p>total: <Input value={this.state.total} onChange={v => this.setState({total: parseInt(v)})} /></p>
5558
<p>pages: <Input value={this.state.pages} onChange={v => this.setState({pages: parseInt(v)})} /></p>
59+
<p><Checkbox text="mini" onChange={mini => this.setState({mini})} value={this.state.mini} /></p>
5660
<p><Checkbox text="jumper" onChange={jumper => this.setState({jumper})} value={this.state.jumper} /></p>
5761
</div>
5862
</div>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "rctui",
33
"author": "[email protected]",
4-
"version": "0.5.0",
4+
"version": "0.5.1",
55
"description": "a collection of components for React",
66
"main": "./src/index.js",
77
"scripts": {

src/Pagination.js

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
'use strict'
22

3-
import React from 'react'
3+
import { Component, PropTypes } from 'react'
44
import classnames from 'classnames'
55
import { forEach } from './utils/objects'
66

77
import { requireCss } from './themes'
88
requireCss('pagination')
99

10-
export default class Pagination extends React.Component {
10+
export default class Pagination extends Component {
1111
static displayName = 'Pagination'
1212

1313
static propTypes = {
14-
className: React.PropTypes.string,
15-
index: React.PropTypes.number,
16-
jumper: React.PropTypes.bool,
17-
onChange: React.PropTypes.func,
18-
pages: React.PropTypes.number,
19-
size: React.PropTypes.number,
20-
style: React.PropTypes.object,
21-
total: React.PropTypes.number
14+
className: PropTypes.string,
15+
index: PropTypes.number,
16+
jumper: PropTypes.bool,
17+
mini: PropTypes.bool,
18+
onChange: PropTypes.func,
19+
pages: PropTypes.number,
20+
size: PropTypes.number,
21+
style: PropTypes.object,
22+
total: PropTypes.number
2223
}
2324

2425
static defaultProps = {
@@ -52,7 +53,11 @@ export default class Pagination extends React.Component {
5253

5354
let value = this.refs.input.value
5455
value = parseInt(value)
55-
if (!value) {
56+
if (isNaN(value)) {
57+
return
58+
}
59+
if (value < 1) {
60+
this.handleChange(1)
5661
return
5762
}
5863

@@ -64,6 +69,9 @@ export default class Pagination extends React.Component {
6469

6570
handleChange (index) {
6671
this.setIndex(index)
72+
if (this.refs.input) {
73+
this.refs.input.value = index
74+
}
6775
if (this.props.onChange) {
6876
this.props.onChange(index)
6977
}
@@ -115,6 +123,7 @@ export default class Pagination extends React.Component {
115123

116124
render () {
117125
let index = this.state.index,
126+
{mini} = this.props,
118127
{pages, max} = this.getPages(),
119128
items = []
120129

@@ -125,13 +134,22 @@ export default class Pagination extends React.Component {
125134
</li>
126135
)
127136

128-
forEach(pages, function (i) {
137+
if (mini) {
129138
items.push(
130-
<li onClick={this.handleChange.bind(this, i)} className={classnames({ active: i === index })} key={i}>
131-
<a>{i}</a>
132-
</li>
139+
<form key="i" onSubmit={this.setInput.bind(this)}>
140+
<input ref="input" defaultValue={this.state.index} type="text" className="rct-form-control" />
141+
</form>
133142
)
134-
}, this)
143+
items.push(<span key="s"> / {max}</span>)
144+
} else {
145+
forEach(pages, function (i) {
146+
items.push(
147+
<li onClick={this.handleChange.bind(this, i)} className={classnames({ active: i === index })} key={i}>
148+
<a>{i}</a>
149+
</li>
150+
)
151+
}, this)
152+
}
135153

136154
// Next
137155
items.push(
@@ -142,18 +160,19 @@ export default class Pagination extends React.Component {
142160

143161
let className = classnames(
144162
this.props.className,
145-
"rct-pagination-wrap"
163+
"rct-pagination-wrap",
164+
{ "rct-pagination-mini": mini }
146165
)
147166
return (
148167
<div style={this.props.style} className={className}>
149168
<ul className="rct-pagination">
150169
{items}
151170
</ul>
152171
{
153-
this.props.jumper &&
172+
this.props.jumper && !mini &&
154173
<form onSubmit={this.setInput.bind(this)}>
155174
<div className="rct-input-group">
156-
<input ref="input" type="text" className="rct-form-control" />
175+
<input ref="input" defaultValue={this.state.index} type="text" className="rct-form-control" />
157176
<span onClick={this.setInput.bind(this)} className="addon">go</span>
158177
</div>
159178
</form>

src/themes/pure/pagination.less

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,15 @@
6262
border-right-width: 1px;
6363
}
6464
}
65+
66+
&.rct-pagination-mini {
67+
li:first-child a {
68+
border-radius: 4px;
69+
}
70+
71+
li:last-child a {
72+
margin-left: 10px;
73+
border-radius: 4px;
74+
}
75+
}
6576
}

0 commit comments

Comments
 (0)