2 $.extend(true, window, {
5 GroupItemMetadataProvider: GroupItemMetadataProvider
12 * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.
13 * This metadata overrides the default behavior and formatting of those rows so that they appear and function
14 * correctly when processed by the grid.
16 * This class also acts as a grid plugin providing event handlers to expand & collapse groups.
17 * If "grid.registerPlugin(...)" is not called, expand & collapse will not work.
19 * @class GroupItemMetadataProvider
21 * @namespace Slick.Data
25 function GroupItemMetadataProvider(options) {
28 groupCssClass: "slick-group",
29 groupTitleCssClass: "slick-group-title",
30 totalsCssClass: "slick-group-totals",
32 totalsFocusable: false,
33 toggleCssClass: "slick-group-toggle",
34 toggleExpandedCssClass: "expanded",
35 toggleCollapsedCssClass: "collapsed",
36 enableExpandCollapse: true
39 options = $.extend(true, {}, _defaults, options);
42 function defaultGroupCellFormatter(row, cell, value, columnDef, item) {
43 if (!options.enableExpandCollapse) {
47 var indentation = item.level * 15 + "px";
49 return "<span class='" + options.toggleCssClass + " " +
50 (item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) +
51 "' style='margin-left:" + indentation +"'>" +
53 "<span class='" + options.groupTitleCssClass + "' level='" + item.level + "'>" +
58 function defaultTotalsCellFormatter(row, cell, value, columnDef, item) {
59 return (columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef)) || "";
65 _grid.onClick.subscribe(handleGridClick);
66 _grid.onKeyDown.subscribe(handleGridKeyDown);
72 _grid.onClick.unsubscribe(handleGridClick);
73 _grid.onKeyDown.unsubscribe(handleGridKeyDown);
77 function handleGridClick(e, args) {
78 var item = this.getDataItem(args.row);
79 if (item && item instanceof Slick.Group && $(e.target).hasClass(options.toggleCssClass)) {
81 this.getData().expandGroup(item.groupingKey);
83 this.getData().collapseGroup(item.groupingKey);
86 e.stopImmediatePropagation();
91 // TODO: add -/+ handling
92 function handleGridKeyDown(e, args) {
93 if (options.enableExpandCollapse && (e.which == $.ui.keyCode.SPACE)) {
94 var activeCell = this.getActiveCell();
96 var item = this.getDataItem(activeCell.row);
97 if (item && item instanceof Slick.Group) {
99 this.getData().expandGroup(item.groupingKey);
101 this.getData().collapseGroup(item.groupingKey);
104 e.stopImmediatePropagation();
111 function getGroupRowMetadata(item) {
114 focusable: options.groupFocusable,
115 cssClasses: options.groupCssClass,
119 formatter: defaultGroupCellFormatter,
126 function getTotalsRowMetadata(item) {
129 focusable: options.totalsFocusable,
130 cssClasses: options.totalsCssClass,
131 formatter: defaultTotalsCellFormatter,
140 "getGroupRowMetadata": getGroupRowMetadata,
141 "getTotalsRowMetadata": getTotalsRowMetadata