Advertisement
Guest User

slickgrid grouping

a guest
Apr 10th, 2013
473
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.74 KB | None | 0 0
  1.  
  2. <script type="text/javascript">
  3. var ajaxFileURL="{$url}";
  4. var ajaxUpdateURL="update";
  5. {literal}
  6. function populateList(ajaxFileURL){
  7. var grid;
  8. var columns = [
  9. //id='id', name='nama di field', field='data yang diisikan', option lain
  10. {id: "id", name: "ID", field: "id", sortable: true, width: 30},
  11. {id: "username", name: "Username", field: "username", sortable: true, editor: Slick.Editors.Text},
  12. {id: "age", name: "Age", field: "age", sortable: true, editor: Slick.Editors.Text, width: 30},
  13. {id: "city", name: "City", field: "city", sortable: true, editor: Slick.Editors.Text},
  14. {id: "country", name: "Country", field: "country", sortable: true, editor: Slick.Editors.LongText},
  15. {id: "gender", name: "Gender", field: "gender", sortable: true, editor: Slick.Editors.Text, width:30}
  16. ];
  17. var options = {
  18. editable: true,
  19. enableAddRow: false,
  20. asyncEditorLoading: false,
  21. autoEdit: false,
  22. forceFitColumns: true,
  23. enableRowReordering: true,
  24. enableCellNavigation: true,
  25. enableColumnReorder: false,
  26. multiColumnSort: true
  27. };
  28.  
  29. //yo yo yo
  30. var sortcol = "username";
  31. var sortdir = 1;
  32. var percentCompleteThreshold = 0;
  33. var prevPercentCompleteThreshold = 0;
  34.  
  35. //not sure whether is important for my case?!
  36. function avgTotalsFormatter(totals, columnDef){
  37. return 'avg: '+ Math.round(totals.avg[columnDef.field]) + '%';
  38. }
  39.  
  40. function myFilter(item, args){
  41. return item["percentComplete"] >= args.percentComplete;
  42. }
  43.  
  44. function percentCompleteSort(a, b){
  45. return a["percentComplete"] - b["percentComplete"];
  46. }
  47.  
  48. function comparer(a, b){
  49. var x = a[sortcol], y = b[sortcol];
  50. return (x==y?0:(x>y?1:-1));
  51. }
  52.  
  53. function collapseAllGroups(){
  54. dataView.beginUpdate();
  55. for(var i=0; i<dataView.getGroups().length; i++){
  56. dataView.collapseGroup(dataView.getGroups()[i].value);
  57. }
  58. dataView.endUpdate();
  59. }
  60.  
  61. function expandAllGroups(){
  62. dataView.beginUpdate();
  63. for(var i=0; i<dataView.getGroups().length; i++){
  64. dataView.expandGroup(dataView.getGroups()[i].value);
  65. }
  66. dataView.endUpdate();
  67. }
  68.  
  69. function clearGrouping(){
  70. dataView.groupBy(null);
  71. }
  72.  
  73. function groupByDuration(){
  74. dataView.groupBy(
  75. "country",
  76. function (g){
  77. return "Country: "+ g.value +"<span style='color: green'>("+ g.count +" daftar)</span>";
  78. },
  79. function (a,b){
  80. return a.value - b.value;
  81. });
  82. dataView.setAggregators([
  83. new Slick.Data.Aggregators.Avg("percentComplete")], false);
  84. }
  85.  
  86. function groupByDurationOrderByCount(){
  87. dataView.groupBy(
  88. "duration",
  89. function (g){
  90. return "Duration: "+g.value+" <span style='color: green'>("+g.count+" items)</span>";
  91. },
  92. function (a,b){
  93. return a.count - b.count;
  94. }
  95. );
  96. dataView.setAggregators([
  97. new Slick.Data.Aggregators.Avg("percentComplete")], false);
  98. }
  99.  
  100. function groupByDurationOrderByCountGroupCollapsed(){
  101. dataView.groupBy(
  102. "duration",
  103. function(g){
  104. return "Duration: "+g.value+" span style='color: green'>(" +g.count+ " items)</span>";
  105. },
  106. function(a,b){
  107. return a.count-b.count;
  108. }
  109. );
  110. dataView.setAggregators([
  111. new Slick.Data.Aggregators.Avg("percentComplete")
  112. ], true);
  113. }
  114.  
  115.  
  116.  
  117. $.getJSON(ajaxFileURL,ajaxUpdateURL,function(data){
  118.  
  119. //yo yo baru lagi nih dari BARI
  120. var groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();
  121. dataView = new Slick.Data.DataView({
  122. groupItemMetadataProvider: groupItemMetadataProvider, inlineFilters: true
  123. });
  124. grid = new Slick.Grid("#myGrid", dataView, columns, options);
  125. grid.registerPlugin(groupItemMetadataProvider);
  126. grid.setSelectionModel(new Slick.CellSelectionModel());
  127.  
  128. var pager = new Slick.Controls.Pager(dataView, grid, $("#pager"));
  129. var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options);
  130.  
  131. grid.onSort.subscribe(function(e, args){
  132. sortdir = args.sortAsc ? 1:-1;
  133. sortcol = args.sortCol.field;
  134.  
  135. if($.browser.msie && $.browser.version <= 8){
  136. var percentCompleteValueFn = function(){
  137. var val = this["percentComplete"];
  138. if(val<10){
  139. return "00" + val;
  140. }else if(val<100){
  141. return "0" + val;
  142. }else{
  143. return val;
  144. }
  145. };
  146. dataView.fastSort((sortcol == "percentComplete") ? percentCompleteValueFn : sortcol, args.sortAsc);
  147. }else{
  148. dataView.sort(comparer, args.sortAsc);
  149. }
  150. });
  151.  
  152. dataView.onRowCountChanged.subscribe(function (e, args){
  153. grid.updateRowCount();
  154. grid.render();
  155. });
  156.  
  157. dataView.onRowsChanged.subscribe(function (e, args) {
  158. grid.invalidateRows(args.rows);
  159. grid.render();
  160. });
  161.  
  162. var h_runfilters = null;
  163.  
  164. function filterAndUpdate(){
  165. var isNarrowing = percentCompleteThreshold > prevPercentCompleteThreshold;
  166. var isExpanding = percentCompleteThreshold < prevPercentCompleteThreshold;
  167. var renderedRange = grid.getRenderedRange();
  168.  
  169. dataView.setFilterArgs({
  170. percentComplete: percentCompleteThreshold
  171. });
  172. dataView.setRefreshHints({
  173. ignoreDiffsBefore: renderedRange.top,
  174. ignoreDiffsAfter: renderedRange.bottom +1,
  175. isFilterNarrowing: isNarrowing,
  176. isFilterExpanding: isExpanding
  177. });
  178. dataView.refresh();
  179.  
  180. prevPercentCompleteThreshold = percentCompleteThreshold;
  181. }
  182. dataView.beginUpdate();
  183. dataView.setItems(data);
  184. //kalo di set filter malah gak jalan
  185. //dataView.setFilter(myFilter);
  186. //dataView.setFilterArgs({
  187. // percentComplete: percentCompleteThreshold
  188. //});
  189. dataView.groupBy(
  190. "country",
  191. function(g){
  192. return "Negara satu grup: "+g.value+" <span style='color: green'>("+g.count+" Daftar)</span>";
  193. },
  194. function(a,b){
  195. return a.value-b.value;
  196. }
  197. );
  198. //i commented one line below cos i think it's for average calculation
  199. //dataView.setAggregators([new Slick.Data.Aggregators.Avg("percentComplete")], false);
  200. dataView.collapseGroup(0);
  201. collapseAllGroups();
  202. dataView.endUpdate();
  203. });
  204. };
  205.  
  206. jQuery(document).ready(function($) {
  207. // Stuff to do as soon as the DOM is ready;
  208. populateList(ajaxFileURL);
  209. });
  210. </script>
  211. {/literal}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement