Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

aui-tree-paginator-debug.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. AUI.add('aui-tree-paginator', function(A) {
  2. var Lang = A.Lang,
  3. isObject = Lang.isObject,
  4. isValue = Lang.isValue,
  5. getCN = A.getClassName,
  6. CHILDREN = 'children',
  7. CONTAINER = 'container',
  8. END = 'end',
  9. IO = 'io',
  10. LIMIT = 'limit',
  11. MORE_RESULTS_LABEL = 'Load more results',
  12. NODE = 'node',
  13. OWNER_TREE = 'ownerTree',
  14. PAGINATOR = 'paginator',
  15. START = 'start',
  16. TREE = 'tree',
  17. TREE_NODE_IO = 'tree-node-io',
  18. EV_TREE_NODE_PAGINATOR_CLICK = 'paginatorClick',
  19. CSS_TREE_NODE_PAGINATOR = getCN(TREE, NODE, PAGINATOR),
  20. TPL_PAGINATOR = '<a class="' + CSS_TREE_NODE_PAGINATOR + '" href="javascript:void(0);">{moreResultsLabel}</a>';
  21. function TreeViewPaginator(config) {
  22. var instance = this;
  23. A.after(instance._bindPaginatorUI, this, 'bindUI');
  24. A.after(instance._syncPaginatorUI, this, 'syncUI');
  25. }
  26. TreeViewPaginator.ATTRS = {
  27. paginator: {
  28. setter: function(value) {
  29. var instance = this;
  30. var paginatorNode = A.Node.create(
  31. Lang.sub(
  32. TPL_PAGINATOR,
  33. {
  34. moreResultsLabel: value.moreResultsLabel || MORE_RESULTS_LABEL
  35. }
  36. )
  37. );
  38. return A.merge(
  39. {
  40. alwaysVisible: false,
  41. autoFocus: true,
  42. element: paginatorNode,
  43. endParam: END,
  44. limitParam: LIMIT,
  45. start: 0,
  46. startParam: START
  47. },
  48. value
  49. );
  50. },
  51. validator: isObject
  52. }
  53. };
  54. TreeViewPaginator.prototype = {
  55. /**
  56. * Bind events to the paginator "show more" link.
  57. *
  58. * @method _bindPaginatorUI
  59. * @protected
  60. */
  61. _bindPaginatorUI: function() {
  62. var instance = this;
  63. var paginator = instance.get(PAGINATOR);
  64. if (paginator) {
  65. paginator.element.on('click', A.bind(instance._handlePaginatorClickEvent, instance));
  66. }
  67. instance._createEvents();
  68. },
  69. /**
  70. * Create custom events.
  71. *
  72. * @method _createEvents
  73. * @private
  74. */
  75. _createEvents: function() {
  76. var instance = this;
  77. instance.publish(
  78. EV_TREE_NODE_PAGINATOR_CLICK,
  79. {
  80. defaultFn: instance._defPaginatorClickFn,
  81. prefix: TREE_NODE_IO
  82. }
  83. );
  84. },
  85. /**
  86. * Default paginatorClick event handler. Increment the
  87. * <code>paginator.start</code> to the next <code>paginator.limit</code>.
  88. *
  89. * @method _defPaginatorClickFn
  90. * @param {EventFacade} event The Event object
  91. * @protected
  92. */
  93. _defPaginatorClickFn: function(event) {
  94. var instance = this;
  95. var paginator = instance.get(PAGINATOR);
  96. if (isValue(paginator.limit)) {
  97. paginator.start = instance.getChildrenLength();
  98. }
  99. if (instance.get(IO)) {
  100. instance.initIO();
  101. }
  102. },
  103. /**
  104. * Fires the paginatorClick event.
  105. *
  106. * @method _handlePaginatorClickEvent
  107. * @param {EventFacade} event paginatorClick event facade
  108. * @protected
  109. */
  110. _handlePaginatorClickEvent: function(event) {
  111. var instance = this;
  112. var output = instance.getEventOutputMap(instance);
  113. instance.fire(EV_TREE_NODE_PAGINATOR_CLICK, output);
  114. event.halt();
  115. },
  116. /**
  117. * Adds two extra IO data parameter to the request to handle the
  118. * paginator. By default these parameters are <code>limit</code> and
  119. * <code>start</code>.
  120. *
  121. * @method _syncPaginatorIOData
  122. * @protected
  123. */
  124. _syncPaginatorIOData: function(io) {
  125. var instance = this;
  126. var paginator = instance.get(PAGINATOR);
  127. if (paginator && isValue(paginator.limit)) {
  128. var data = io.cfg.data || {};
  129. data[ paginator.limitParam ] = paginator.limit;
  130. data[ paginator.startParam ] = paginator.start;
  131. data[ paginator.endParam ] = (paginator.start + paginator.limit);
  132. io.cfg.data = data;
  133. }
  134. },
  135. /**
  136. * Sync the paginator link UI.
  137. *
  138. * @method _syncPaginatorUI
  139. * @protected
  140. */
  141. _syncPaginatorUI: function(newNodes) {
  142. var instance = this;
  143. var paginator = instance.get(PAGINATOR);
  144. if (paginator) {
  145. var hasMoreData = true;
  146. if (newNodes) {
  147. hasMoreData = (newNodes.length > 0);
  148. }
  149. var childrenLength = instance.getChildrenLength();
  150. var start = paginator.start;
  151. var total = paginator.total || childrenLength;
  152. var showPaginator = childrenLength && hasMoreData && (total > childrenLength);
  153. if (paginator.alwaysVisible || showPaginator) {
  154. instance.get(CONTAINER).append(
  155. paginator.element.show()
  156. );
  157. if (paginator.autoFocus) {
  158. try {
  159. paginator.element.focus();
  160. }
  161. catch(e) {}
  162. }
  163. }
  164. else {
  165. paginator.element.hide();
  166. }
  167. }
  168. }
  169. };
  170. A.TreeViewPaginator = TreeViewPaginator;
  171. }, '@VERSION@' ,{requires:['aui-base'], skinnable:false});