IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

74 satır
2.0KB

  1. import { h, Component } from 'preact';
  2. class WBPagination extends Component {
  3. renderVisiblePages(numPages, activePage, chunkSize, onPageChanged) {
  4. let visible = {};
  5. let begActChnk = activePage - Math.floor(chunkSize / 2);
  6. let endActChnk = activePage + Math.floor(chunkSize / 2) + 1;
  7. for (let i = begActChnk; i < endActChnk; i++)
  8. visible[i] = true;
  9. for (let i = 0; i < chunkSize; i++)
  10. visible[i] = true;
  11. for (let i = Math.max(numPages - chunkSize, 0); i < numPages; i++)
  12. visible[i] = true;
  13. visible = Object.keys(visible).map(n => Number(n));
  14. let res = [];
  15. let prev = 0;
  16. res.push((
  17. <li class={ activePage === 0 ? "page-item disabled" : "page-item" }>
  18. <a class="page-link" href="#"
  19. onclick={ () => onPageChanged(activePage - 1) }>Previous</a>
  20. </li>
  21. ));
  22. for (let i in visible) {
  23. if (i > prev + 1)
  24. res.push((
  25. <li class="page-item">
  26. <a class="page-link" href="#"
  27. onclick={ () => onPageChanged(i - 1) }>...</a>
  28. </li>
  29. ));
  30. prev = i;
  31. res.push((
  32. <li class={ i === activePage ? "page-item active" : "page-item" }>
  33. <a class="page-link" href="#"
  34. onclick={ () => onPageChanged(i) }>{ i + 1 }</a>
  35. </li>
  36. ));
  37. }
  38. res.push((
  39. <li class={ activePage >= numPages - 1 ? "page-item disabled" : "page-item" }>
  40. <a class="page-link" href="#"
  41. onclick={ () => onPageChanged(activePage + 1) }>Next</a>
  42. </li>
  43. ));
  44. return res;
  45. }
  46. render({ numPages, activePage, chunkSize, onPageChanged }) {
  47. return (
  48. <nav aria-label="Pagination">
  49. <ul class="pagination">
  50. { this.renderVisiblePages(numPages, activePage, chunkSize, onPageChanged) }
  51. </ul>
  52. </nav>
  53. );
  54. }
  55. }
  56. WBPagination.defaultProps = {
  57. 'chunkSize': 5
  58. };
  59. export default WBPagination;