API Docs for: 1.0.0
Show:

File: src/gallery-paginator/js/ValidationPageLinks.js

  1. /**
  2. * @module gallery-paginator
  3. */
  4.  
  5. /**********************************************************************
  6. * Adds per-page error notification to Paginator.ui.PageLinks.
  7. *
  8. * @class Paginator.ui.ValidationPageLinks
  9. * @constructor
  10. * @param p {Pagintor} Paginator instance to attach to
  11. */
  12.  
  13. Paginator.ui.ValidationPageLinks = function(
  14. /* Paginator */ p)
  15. {
  16. Paginator.ui.ValidationPageLinks.superclass.constructor.call(this, p);
  17.  
  18. p.after('pageStatusChange', this.rebuild, this);
  19. };
  20.  
  21. var vpl_status_prefix = 'yui3-has';
  22.  
  23. /**
  24. * Array of status strings for each page. If the status value for a page
  25. * is not empty, it is used to build a CSS class for the page:
  26. * yui3-has<status>
  27. *
  28. * @attribute pageStatus
  29. */
  30. Paginator.ATTRS.pageStatus =
  31. {
  32. value: [],
  33. validator: Y.Lang.isArray
  34. };
  35.  
  36. /**
  37. * Templates for generating page links.
  38. * @property templates
  39. * @static
  40. */
  41. Paginator.ui.ValidationPageLinks.templates =
  42. {
  43. currentPageLink: '<span class="{link} {curr} {status}">{label}</span>',
  44. pageLink: '<a href="#" class="{link} {status}" page="{page}">{label}</a>',
  45. disabledPageLink: '<span class="{link} disabled {status}" page="{page}">{label}</span>'
  46. };
  47.  
  48. Y.extend(Paginator.ui.ValidationPageLinks, Paginator.ui.PageLinks,
  49. {
  50. update: function(e)
  51. {
  52. if (e && e.prevVal === e.newVal)
  53. {
  54. return;
  55. }
  56.  
  57. var currentPage = this.paginator.getCurrentPage();
  58.  
  59. if (this.current !== currentPage || !currentPage || e.rebuild)
  60. {
  61. var linkClass = this.paginator.get('pageLinkClass'),
  62. status = this.paginator.get('pageStatus'),
  63. labelBuilder = this.paginator.get('pageLabelBuilder'),
  64. totalPages = this.paginator.getTotalPages(),
  65. linkMarkup = this.paginator.get('disabled') ?
  66. Paginator.ui.ValidationPageLinks.templates.disabledPageLink :
  67. Paginator.ui.ValidationPageLinks.templates.pageLink;
  68.  
  69. var range =
  70. Paginator.ui.PageLinks.calculateRange(
  71. currentPage, totalPages, this.paginator.get('pageLinks'));
  72.  
  73. var content = '';
  74.  
  75. if (0 < range[0] && range[0] <= range[1])
  76. {
  77. if (range[0] > 1)
  78. {
  79. range[0]++;
  80. content += Y.Lang.sub(linkMarkup,
  81. {
  82. link: linkClass,
  83. curr: '',
  84. status: status[0] ? vpl_status_prefix + status[0] : '',
  85. page: 1,
  86. label: labelBuilder(1, this.paginator)
  87. });
  88. content += '&hellip;'
  89. }
  90.  
  91. if (range[1] < totalPages)
  92. {
  93. range[1]--;
  94. var showLast = true;
  95. }
  96.  
  97. for (var i=range[0]; i<=range[1]; i++)
  98. {
  99. content += Y.Lang.sub(i === currentPage ? Paginator.ui.ValidationPageLinks.templates.currentPageLink : linkMarkup,
  100. {
  101. link: linkClass,
  102. curr: (i === currentPage ? this.paginator.get('currentPageClass') : ''),
  103. status: status[i-1] ? vpl_status_prefix + status[i-1] : '',
  104. page: i,
  105. label: labelBuilder(i, this.paginator)
  106. });
  107. }
  108.  
  109. if (showLast)
  110. {
  111. content += '&hellip;';
  112. content += Y.Lang.sub(linkMarkup,
  113. {
  114. link: linkClass,
  115. curr: '',
  116. status: status[totalPages-1] ? vpl_status_prefix + status[totalPages-1] : '',
  117. page: totalPages,
  118. label: labelBuilder(totalPages, this.paginator)
  119. });
  120. }
  121. }
  122.  
  123. this.container.set('innerHTML', content);
  124. }
  125. }
  126.  
  127. });
  128.