Pagination.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
  6. var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  7. var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props');
  8. var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
  9. var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
  10. var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
  11. var _vueTypes = require('../_util/vue-types');
  12. var _vueTypes2 = _interopRequireDefault(_vueTypes);
  13. var _BaseMixin = require('../_util/BaseMixin');
  14. var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
  15. var _propsUtil = require('../_util/props-util');
  16. var _Pager = require('./Pager');
  17. var _Pager2 = _interopRequireDefault(_Pager);
  18. var _Options = require('./Options');
  19. var _Options2 = _interopRequireDefault(_Options);
  20. var _zh_CN = require('./locale/zh_CN');
  21. var _zh_CN2 = _interopRequireDefault(_zh_CN);
  22. var _KeyCode = require('./KeyCode');
  23. var _KeyCode2 = _interopRequireDefault(_KeyCode);
  24. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  25. function noop() {}
  26. // 是否是正整数
  27. function isInteger(value) {
  28. return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;
  29. }
  30. function defaultItemRender(page, type, element) {
  31. return element;
  32. }
  33. function calculatePage(p, state, props) {
  34. var pageSize = p;
  35. if (typeof pageSize === 'undefined') {
  36. pageSize = state.statePageSize;
  37. }
  38. return Math.floor((props.total - 1) / pageSize) + 1;
  39. }
  40. exports['default'] = {
  41. name: 'Pagination',
  42. mixins: [_BaseMixin2['default']],
  43. model: {
  44. prop: 'current',
  45. event: 'change.current'
  46. },
  47. props: {
  48. disabled: _vueTypes2['default'].bool,
  49. prefixCls: _vueTypes2['default'].string.def('rc-pagination'),
  50. selectPrefixCls: _vueTypes2['default'].string.def('rc-select'),
  51. current: _vueTypes2['default'].number,
  52. defaultCurrent: _vueTypes2['default'].number.def(1),
  53. total: _vueTypes2['default'].number.def(0),
  54. pageSize: _vueTypes2['default'].number,
  55. defaultPageSize: _vueTypes2['default'].number.def(10),
  56. hideOnSinglePage: _vueTypes2['default'].bool.def(false),
  57. showSizeChanger: _vueTypes2['default'].bool.def(false),
  58. showLessItems: _vueTypes2['default'].bool.def(false),
  59. // showSizeChange: PropTypes.func.def(noop),
  60. selectComponentClass: _vueTypes2['default'].any,
  61. showPrevNextJumpers: _vueTypes2['default'].bool.def(true),
  62. showQuickJumper: _vueTypes2['default'].oneOfType([_vueTypes2['default'].bool, _vueTypes2['default'].object]).def(false),
  63. showTitle: _vueTypes2['default'].bool.def(true),
  64. pageSizeOptions: _vueTypes2['default'].arrayOf(_vueTypes2['default'].string),
  65. buildOptionText: _vueTypes2['default'].func,
  66. showTotal: _vueTypes2['default'].func,
  67. simple: _vueTypes2['default'].bool,
  68. locale: _vueTypes2['default'].object.def(_zh_CN2['default']),
  69. itemRender: _vueTypes2['default'].func.def(defaultItemRender),
  70. prevIcon: _vueTypes2['default'].any,
  71. nextIcon: _vueTypes2['default'].any,
  72. jumpPrevIcon: _vueTypes2['default'].any,
  73. jumpNextIcon: _vueTypes2['default'].any
  74. },
  75. data: function data() {
  76. var props = (0, _propsUtil.getOptionProps)(this);
  77. var hasOnChange = this.onChange !== noop;
  78. var hasCurrent = 'current' in props;
  79. if (hasCurrent && !hasOnChange) {
  80. console.warn('Warning: You provided a `current` prop to a Pagination component without an `onChange` handler. This will render a read-only component.'); // eslint-disable-line
  81. }
  82. var current = this.defaultCurrent;
  83. if ('current' in props) {
  84. current = this.current;
  85. }
  86. var pageSize = this.defaultPageSize;
  87. if ('pageSize' in props) {
  88. pageSize = this.pageSize;
  89. }
  90. current = Math.min(current, calculatePage(pageSize, undefined, props));
  91. return {
  92. stateCurrent: current,
  93. stateCurrentInputValue: current,
  94. statePageSize: pageSize
  95. };
  96. },
  97. watch: {
  98. current: function current(val) {
  99. this.setState({
  100. stateCurrent: val,
  101. stateCurrentInputValue: val
  102. });
  103. },
  104. pageSize: function pageSize(val) {
  105. var newState = {};
  106. var current = this.stateCurrent;
  107. var newCurrent = calculatePage(val, this.$data, this.$props);
  108. current = current > newCurrent ? newCurrent : current;
  109. if (!(0, _propsUtil.hasProp)(this, 'current')) {
  110. newState.stateCurrent = current;
  111. newState.stateCurrentInputValue = current;
  112. }
  113. newState.statePageSize = val;
  114. this.setState(newState);
  115. },
  116. stateCurrent: function stateCurrent(val, oldValue) {
  117. var _this = this;
  118. // When current page change, fix focused style of prev item
  119. // A hacky solution of https://github.com/ant-design/ant-design/issues/8948
  120. this.$nextTick(function () {
  121. if (_this.$refs.paginationNode) {
  122. var lastCurrentNode = _this.$refs.paginationNode.querySelector('.' + _this.prefixCls + '-item-' + oldValue);
  123. if (lastCurrentNode && document.activeElement === lastCurrentNode) {
  124. lastCurrentNode.blur();
  125. }
  126. }
  127. });
  128. },
  129. total: function total() {
  130. var newState = {};
  131. var newCurrent = calculatePage(this.pageSize, this.$data, this.$props);
  132. if ((0, _propsUtil.hasProp)(this, 'current')) {
  133. var current = Math.min(this.current, newCurrent);
  134. newState.stateCurrent = current;
  135. newState.stateCurrentInputValue = current;
  136. } else {
  137. var _current = this.stateCurrent;
  138. if (_current === 0 && newCurrent > 0) {
  139. _current = 1;
  140. } else {
  141. _current = Math.min(this.stateCurrent, newCurrent);
  142. }
  143. newState.stateCurrent = _current;
  144. }
  145. this.setState(newState);
  146. }
  147. },
  148. methods: {
  149. getJumpPrevPage: function getJumpPrevPage() {
  150. return Math.max(1, this.stateCurrent - (this.showLessItems ? 3 : 5));
  151. },
  152. getJumpNextPage: function getJumpNextPage() {
  153. return Math.min(calculatePage(undefined, this.$data, this.$props), this.stateCurrent + (this.showLessItems ? 3 : 5));
  154. },
  155. getItemIcon: function getItemIcon(icon) {
  156. var h = this.$createElement;
  157. var prefixCls = this.$props.prefixCls;
  158. var iconNode = (0, _propsUtil.getComponentFromProp)(this, icon, this.$props) || h('a', { 'class': prefixCls + '-item-link' });
  159. return iconNode;
  160. },
  161. getValidValue: function getValidValue(e) {
  162. var inputValue = e.target.value;
  163. var allPages = calculatePage(undefined, this.$data, this.$props);
  164. var stateCurrentInputValue = this.$data.stateCurrentInputValue;
  165. var value = void 0;
  166. if (inputValue === '') {
  167. value = inputValue;
  168. } else if (isNaN(Number(inputValue))) {
  169. value = stateCurrentInputValue;
  170. } else if (inputValue >= allPages) {
  171. value = allPages;
  172. } else {
  173. value = Number(inputValue);
  174. }
  175. return value;
  176. },
  177. isValid: function isValid(page) {
  178. return isInteger(page) && page !== this.stateCurrent;
  179. },
  180. shouldDisplayQuickJumper: function shouldDisplayQuickJumper() {
  181. var _$props = this.$props,
  182. showQuickJumper = _$props.showQuickJumper,
  183. pageSize = _$props.pageSize,
  184. total = _$props.total;
  185. if (total <= pageSize) {
  186. return false;
  187. }
  188. return showQuickJumper;
  189. },
  190. // calculatePage (p) {
  191. // let pageSize = p
  192. // if (typeof pageSize === 'undefined') {
  193. // pageSize = this.statePageSize
  194. // }
  195. // return Math.floor((this.total - 1) / pageSize) + 1
  196. // },
  197. handleKeyDown: function handleKeyDown(event) {
  198. if (event.keyCode === _KeyCode2['default'].ARROW_UP || event.keyCode === _KeyCode2['default'].ARROW_DOWN) {
  199. event.preventDefault();
  200. }
  201. },
  202. handleKeyUp: function handleKeyUp(e) {
  203. if (e.isComposing || e.target.composing) return;
  204. var value = this.getValidValue(e);
  205. var stateCurrentInputValue = this.stateCurrentInputValue;
  206. if (value !== stateCurrentInputValue) {
  207. this.setState({
  208. stateCurrentInputValue: value
  209. });
  210. }
  211. if (e.keyCode === _KeyCode2['default'].ENTER) {
  212. this.handleChange(value);
  213. } else if (e.keyCode === _KeyCode2['default'].ARROW_UP) {
  214. this.handleChange(value - 1);
  215. } else if (e.keyCode === _KeyCode2['default'].ARROW_DOWN) {
  216. this.handleChange(value + 1);
  217. }
  218. },
  219. changePageSize: function changePageSize(size) {
  220. var current = this.stateCurrent;
  221. var preCurrent = current;
  222. var newCurrent = calculatePage(size, this.$data, this.$props);
  223. current = current > newCurrent ? newCurrent : current;
  224. // fix the issue:
  225. // Once 'total' is 0, 'current' in 'onShowSizeChange' is 0, which is not correct.
  226. if (newCurrent === 0) {
  227. current = this.stateCurrent;
  228. }
  229. if (typeof size === 'number') {
  230. if (!(0, _propsUtil.hasProp)(this, 'pageSize')) {
  231. this.setState({
  232. statePageSize: size
  233. });
  234. }
  235. if (!(0, _propsUtil.hasProp)(this, 'current')) {
  236. this.setState({
  237. stateCurrent: current,
  238. stateCurrentInputValue: current
  239. });
  240. }
  241. }
  242. this.$emit('update:pageSize', size);
  243. this.$emit('showSizeChange', current, size);
  244. if (current !== preCurrent) {
  245. this.$emit('change.current', current, size);
  246. }
  247. },
  248. handleChange: function handleChange(p) {
  249. var disabled = this.$props.disabled;
  250. var page = p;
  251. if (this.isValid(page) && !disabled) {
  252. var currentPage = calculatePage(undefined, this.$data, this.$props);
  253. if (page > currentPage) {
  254. page = currentPage;
  255. } else if (page < 1) {
  256. page = 1;
  257. }
  258. if (!(0, _propsUtil.hasProp)(this, 'current')) {
  259. this.setState({
  260. stateCurrent: page,
  261. stateCurrentInputValue: page
  262. });
  263. }
  264. // this.$emit('input', page)
  265. this.$emit('change.current', page, this.statePageSize);
  266. this.$emit('change', page, this.statePageSize);
  267. return page;
  268. }
  269. return this.stateCurrent;
  270. },
  271. prev: function prev() {
  272. if (this.hasPrev()) {
  273. this.handleChange(this.stateCurrent - 1);
  274. }
  275. },
  276. next: function next() {
  277. if (this.hasNext()) {
  278. this.handleChange(this.stateCurrent + 1);
  279. }
  280. },
  281. jumpPrev: function jumpPrev() {
  282. this.handleChange(this.getJumpPrevPage());
  283. },
  284. jumpNext: function jumpNext() {
  285. this.handleChange(this.getJumpNextPage());
  286. },
  287. hasPrev: function hasPrev() {
  288. return this.stateCurrent > 1;
  289. },
  290. hasNext: function hasNext() {
  291. return this.stateCurrent < calculatePage(undefined, this.$data, this.$props);
  292. },
  293. runIfEnter: function runIfEnter(event, callback) {
  294. if (event.key === 'Enter' || event.charCode === 13) {
  295. for (var _len = arguments.length, restParams = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
  296. restParams[_key - 2] = arguments[_key];
  297. }
  298. callback.apply(undefined, (0, _toConsumableArray3['default'])(restParams));
  299. }
  300. },
  301. runIfEnterPrev: function runIfEnterPrev(event) {
  302. this.runIfEnter(event, this.prev);
  303. },
  304. runIfEnterNext: function runIfEnterNext(event) {
  305. this.runIfEnter(event, this.next);
  306. },
  307. runIfEnterJumpPrev: function runIfEnterJumpPrev(event) {
  308. this.runIfEnter(event, this.jumpPrev);
  309. },
  310. runIfEnterJumpNext: function runIfEnterJumpNext(event) {
  311. this.runIfEnter(event, this.jumpNext);
  312. },
  313. handleGoTO: function handleGoTO(event) {
  314. if (event.keyCode === _KeyCode2['default'].ENTER || event.type === 'click') {
  315. this.handleChange(this.stateCurrentInputValue);
  316. }
  317. }
  318. },
  319. render: function render() {
  320. var _ref;
  321. var h = arguments[0];
  322. var _$props2 = this.$props,
  323. prefixCls = _$props2.prefixCls,
  324. disabled = _$props2.disabled;
  325. // When hideOnSinglePage is true and there is only 1 page, hide the pager
  326. if (this.hideOnSinglePage === true && this.total <= this.statePageSize) {
  327. return null;
  328. }
  329. var props = this.$props;
  330. var locale = this.locale;
  331. var allPages = calculatePage(undefined, this.$data, this.$props);
  332. var pagerList = [];
  333. var jumpPrev = null;
  334. var jumpNext = null;
  335. var firstPager = null;
  336. var lastPager = null;
  337. var gotoButton = null;
  338. var goButton = this.showQuickJumper && this.showQuickJumper.goButton;
  339. var pageBufferSize = this.showLessItems ? 1 : 2;
  340. var stateCurrent = this.stateCurrent,
  341. statePageSize = this.statePageSize;
  342. var prevPage = stateCurrent - 1 > 0 ? stateCurrent - 1 : 0;
  343. var nextPage = stateCurrent + 1 < allPages ? stateCurrent + 1 : allPages;
  344. if (this.simple) {
  345. if (goButton) {
  346. if (typeof goButton === 'boolean') {
  347. gotoButton = h(
  348. 'button',
  349. {
  350. attrs: { type: 'button' },
  351. on: {
  352. 'click': this.handleGoTO,
  353. 'keyup': this.handleGoTO
  354. }
  355. },
  356. [locale.jump_to_confirm]
  357. );
  358. } else {
  359. gotoButton = h(
  360. 'span',
  361. {
  362. on: {
  363. 'click': this.handleGoTO,
  364. 'keyup': this.handleGoTO
  365. }
  366. },
  367. [goButton]
  368. );
  369. }
  370. gotoButton = h(
  371. 'li',
  372. {
  373. attrs: {
  374. title: this.showTitle ? '' + locale.jump_to + this.stateCurrent + '/' + allPages : null
  375. },
  376. 'class': prefixCls + '-simple-pager'
  377. },
  378. [gotoButton]
  379. );
  380. }
  381. var hasPrev = this.hasPrev();
  382. var hasNext = this.hasNext();
  383. return h(
  384. 'ul',
  385. { 'class': prefixCls + ' ' + prefixCls + '-simple' },
  386. [h(
  387. 'li',
  388. {
  389. attrs: {
  390. title: this.showTitle ? locale.prev_page : null,
  391. tabIndex: hasPrev ? 0 : null,
  392. 'aria-disabled': !this.hasPrev()
  393. },
  394. on: {
  395. 'click': this.prev,
  396. 'keypress': this.runIfEnterPrev
  397. },
  398. 'class': (hasPrev ? '' : prefixCls + '-disabled') + ' ' + prefixCls + '-prev' },
  399. [this.itemRender(prevPage, 'prev', this.getItemIcon('prevIcon'))]
  400. ), h(
  401. 'li',
  402. {
  403. attrs: {
  404. title: this.showTitle ? stateCurrent + '/' + allPages : null
  405. },
  406. 'class': prefixCls + '-simple-pager'
  407. },
  408. [h('input', (0, _babelHelperVueJsxMergeProps2['default'])([{
  409. attrs: {
  410. type: 'text',
  411. size: '3'
  412. },
  413. domProps: {
  414. 'value': this.stateCurrentInputValue
  415. },
  416. on: {
  417. 'keydown': this.handleKeyDown,
  418. 'keyup': this.handleKeyUp,
  419. 'input': this.handleKeyUp
  420. }
  421. }, {
  422. directives: [{
  423. name: 'ant-input'
  424. }]
  425. }])), h(
  426. 'span',
  427. { 'class': prefixCls + '-slash' },
  428. ['\uFF0F']
  429. ), allPages]
  430. ), h(
  431. 'li',
  432. {
  433. attrs: {
  434. title: this.showTitle ? locale.next_page : null,
  435. tabIndex: this.hasNext ? 0 : null,
  436. 'aria-disabled': !this.hasNext()
  437. },
  438. on: {
  439. 'click': this.next,
  440. 'keypress': this.runIfEnterNext
  441. },
  442. 'class': (hasNext ? '' : prefixCls + '-disabled') + ' ' + prefixCls + '-next' },
  443. [this.itemRender(nextPage, 'next', this.getItemIcon('nextIcon'))]
  444. ), gotoButton]
  445. );
  446. }
  447. if (allPages <= 5 + pageBufferSize * 2) {
  448. var pagerProps = {
  449. props: {
  450. locale: locale,
  451. rootPrefixCls: prefixCls,
  452. showTitle: props.showTitle,
  453. itemRender: props.itemRender
  454. },
  455. on: {
  456. click: this.handleChange,
  457. keypress: this.runIfEnter
  458. }
  459. };
  460. if (!allPages) {
  461. pagerList.push(h(_Pager2['default'], (0, _babelHelperVueJsxMergeProps2['default'])([pagerProps, { key: 'noPager', attrs: { page: allPages },
  462. 'class': prefixCls + '-disabled' }])));
  463. }
  464. for (var i = 1; i <= allPages; i++) {
  465. var active = stateCurrent === i;
  466. pagerList.push(h(_Pager2['default'], (0, _babelHelperVueJsxMergeProps2['default'])([pagerProps, { key: i, attrs: { page: i, active: active }
  467. }])));
  468. }
  469. } else {
  470. var prevItemTitle = this.showLessItems ? locale.prev_3 : locale.prev_5;
  471. var nextItemTitle = this.showLessItems ? locale.next_3 : locale.next_5;
  472. if (this.showPrevNextJumpers) {
  473. var jumpPrevClassString = prefixCls + '-jump-prev';
  474. if (props.jumpPrevIcon) {
  475. jumpPrevClassString += ' ' + prefixCls + '-jump-prev-custom-icon';
  476. }
  477. jumpPrev = h(
  478. 'li',
  479. {
  480. attrs: {
  481. title: this.showTitle ? prevItemTitle : null,
  482. tabIndex: '0'
  483. },
  484. key: 'prev',
  485. on: {
  486. 'click': this.jumpPrev,
  487. 'keypress': this.runIfEnterJumpPrev
  488. },
  489. 'class': jumpPrevClassString
  490. },
  491. [this.itemRender(this.getJumpPrevPage(), 'jump-prev', this.getItemIcon('jumpPrevIcon'))]
  492. );
  493. var jumpNextClassString = prefixCls + '-jump-next';
  494. if (props.jumpNextIcon) {
  495. jumpNextClassString += ' ' + prefixCls + '-jump-next-custom-icon';
  496. }
  497. jumpNext = h(
  498. 'li',
  499. {
  500. attrs: {
  501. title: this.showTitle ? nextItemTitle : null,
  502. tabIndex: '0'
  503. },
  504. key: 'next', on: {
  505. 'click': this.jumpNext,
  506. 'keypress': this.runIfEnterJumpNext
  507. },
  508. 'class': jumpNextClassString
  509. },
  510. [this.itemRender(this.getJumpNextPage(), 'jump-next', this.getItemIcon('jumpNextIcon'))]
  511. );
  512. }
  513. lastPager = h(_Pager2['default'], {
  514. attrs: {
  515. locale: locale,
  516. last: true,
  517. rootPrefixCls: prefixCls,
  518. page: allPages,
  519. active: false,
  520. showTitle: this.showTitle,
  521. itemRender: this.itemRender
  522. },
  523. on: {
  524. 'click': this.handleChange,
  525. 'keypress': this.runIfEnter
  526. },
  527. key: allPages });
  528. firstPager = h(_Pager2['default'], {
  529. attrs: {
  530. locale: locale,
  531. rootPrefixCls: prefixCls,
  532. page: 1,
  533. active: false,
  534. showTitle: this.showTitle,
  535. itemRender: this.itemRender
  536. },
  537. on: {
  538. 'click': this.handleChange,
  539. 'keypress': this.runIfEnter
  540. },
  541. key: 1 });
  542. var left = Math.max(1, stateCurrent - pageBufferSize);
  543. var right = Math.min(stateCurrent + pageBufferSize, allPages);
  544. if (stateCurrent - 1 <= pageBufferSize) {
  545. right = 1 + pageBufferSize * 2;
  546. }
  547. if (allPages - stateCurrent <= pageBufferSize) {
  548. left = allPages - pageBufferSize * 2;
  549. }
  550. for (var _i = left; _i <= right; _i++) {
  551. var _active = stateCurrent === _i;
  552. pagerList.push(h(_Pager2['default'], {
  553. attrs: {
  554. locale: locale,
  555. rootPrefixCls: prefixCls,
  556. page: _i,
  557. active: _active,
  558. showTitle: this.showTitle,
  559. itemRender: this.itemRender
  560. },
  561. on: {
  562. 'click': this.handleChange,
  563. 'keypress': this.runIfEnter
  564. },
  565. key: _i }));
  566. }
  567. if (stateCurrent - 1 >= pageBufferSize * 2 && stateCurrent !== 1 + 2) {
  568. pagerList[0] = h(_Pager2['default'], {
  569. attrs: {
  570. locale: locale,
  571. rootPrefixCls: prefixCls,
  572. page: left,
  573. active: false,
  574. showTitle: this.showTitle,
  575. itemRender: this.itemRender
  576. },
  577. on: {
  578. 'click': this.handleChange,
  579. 'keypress': this.runIfEnter
  580. },
  581. key: left, 'class': prefixCls + '-item-after-jump-prev' });
  582. pagerList.unshift(jumpPrev);
  583. }
  584. if (allPages - stateCurrent >= pageBufferSize * 2 && stateCurrent !== allPages - 2) {
  585. pagerList[pagerList.length - 1] = h(_Pager2['default'], {
  586. attrs: {
  587. locale: locale,
  588. rootPrefixCls: prefixCls,
  589. page: right,
  590. active: false,
  591. showTitle: this.showTitle,
  592. itemRender: this.itemRender
  593. },
  594. on: {
  595. 'click': this.handleChange,
  596. 'keypress': this.runIfEnter
  597. },
  598. key: right, 'class': prefixCls + '-item-before-jump-next' });
  599. pagerList.push(jumpNext);
  600. }
  601. if (left !== 1) {
  602. pagerList.unshift(firstPager);
  603. }
  604. if (right !== allPages) {
  605. pagerList.push(lastPager);
  606. }
  607. }
  608. var totalText = null;
  609. if (this.showTotal) {
  610. totalText = h(
  611. 'li',
  612. { 'class': prefixCls + '-total-text' },
  613. [this.showTotal(this.total, [this.total === 0 ? 0 : (stateCurrent - 1) * statePageSize + 1, stateCurrent * statePageSize > this.total ? this.total : stateCurrent * statePageSize])]
  614. );
  615. }
  616. var prevDisabled = !this.hasPrev() || !allPages;
  617. var nextDisabled = !this.hasNext() || !allPages;
  618. var buildOptionText = this.buildOptionText || this.$scopedSlots.buildOptionText;
  619. return h(
  620. 'ul',
  621. {
  622. 'class': (_ref = {}, (0, _defineProperty3['default'])(_ref, '' + prefixCls, true), (0, _defineProperty3['default'])(_ref, prefixCls + '-disabled', disabled), _ref),
  623. attrs: { unselectable: 'unselectable'
  624. },
  625. ref: 'paginationNode'
  626. },
  627. [totalText, h(
  628. 'li',
  629. {
  630. attrs: {
  631. title: this.showTitle ? locale.prev_page : null,
  632. tabIndex: prevDisabled ? null : 0,
  633. 'aria-disabled': prevDisabled
  634. },
  635. on: {
  636. 'click': this.prev,
  637. 'keypress': this.runIfEnterPrev
  638. },
  639. 'class': (!prevDisabled ? '' : prefixCls + '-disabled') + ' ' + prefixCls + '-prev' },
  640. [this.itemRender(prevPage, 'prev', this.getItemIcon('prevIcon'))]
  641. ), pagerList, h(
  642. 'li',
  643. {
  644. attrs: {
  645. title: this.showTitle ? locale.next_page : null,
  646. tabIndex: nextDisabled ? null : 0,
  647. 'aria-disabled': nextDisabled
  648. },
  649. on: {
  650. 'click': this.next,
  651. 'keypress': this.runIfEnterNext
  652. },
  653. 'class': (!nextDisabled ? '' : prefixCls + '-disabled') + ' ' + prefixCls + '-next' },
  654. [this.itemRender(nextPage, 'next', this.getItemIcon('nextIcon'))]
  655. ), h(_Options2['default'], {
  656. attrs: {
  657. disabled: disabled,
  658. locale: locale,
  659. rootPrefixCls: prefixCls,
  660. selectComponentClass: this.selectComponentClass,
  661. selectPrefixCls: this.selectPrefixCls,
  662. changeSize: this.showSizeChanger ? this.changePageSize : null,
  663. current: stateCurrent,
  664. pageSize: statePageSize,
  665. pageSizeOptions: this.pageSizeOptions,
  666. buildOptionText: buildOptionText || null,
  667. quickGo: this.shouldDisplayQuickJumper() ? this.handleChange : null,
  668. goButton: goButton
  669. }
  670. })]
  671. );
  672. }
  673. };