diff options
Diffstat (limited to 'slick.groupitemmetadataprovider.js')
-rw-r--r-- | slick.groupitemmetadataprovider.js | 245 |
1 files changed, 122 insertions, 123 deletions
diff --git a/slick.groupitemmetadataprovider.js b/slick.groupitemmetadataprovider.js index 68430eb..2ad0137 100644 --- a/slick.groupitemmetadataprovider.js +++ b/slick.groupitemmetadataprovider.js @@ -1,140 +1,139 @@ -(function($) { - $.extend(true, window, { - Slick: { - Data: { - GroupItemMetadataProvider: GroupItemMetadataProvider - } - } - }); - - - /*** - * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView. - * This metadata overrides the default behavior and formatting of those rows so that they appear and function - * correctly when processed by the grid. - * - * This class also acts as a grid plugin providing event handlers to expand & collapse groups. - * If "grid.registerPlugin(...)" is not called, expand & collapse will not work. - * - * @class GroupItemMetadataProvider - * @module Data - * @namespace Slick.Data - * @constructor - * @param options - */ - function GroupItemMetadataProvider(options) { - var _grid; - var _defaults = { - groupCssClass: "slick-group", - totalsCssClass: "slick-group-totals", - groupFocusable: true, - totalsFocusable: false, - toggleCssClass: "slick-group-toggle", - toggleExpandedCssClass: "expanded", - toggleCollapsedCssClass: "collapsed", - enableExpandCollapse: true - }; - - options = $.extend(true, {}, _defaults, options); - - - function defaultGroupCellFormatter(row, cell, value, columnDef, item) { - if (!options.enableExpandCollapse) { - return item.title; - } +(function ($) { + $.extend(true, window, { + Slick:{ + Data:{ + GroupItemMetadataProvider:GroupItemMetadataProvider + } + } + }); + + + /*** + * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView. + * This metadata overrides the default behavior and formatting of those rows so that they appear and function + * correctly when processed by the grid. + * + * This class also acts as a grid plugin providing event handlers to expand & collapse groups. + * If "grid.registerPlugin(...)" is not called, expand & collapse will not work. + * + * @class GroupItemMetadataProvider + * @module Data + * @namespace Slick.Data + * @constructor + * @param options + */ + function GroupItemMetadataProvider(options) { + var _grid; + var _defaults = { + groupCssClass:"slick-group", + totalsCssClass:"slick-group-totals", + groupFocusable:true, + totalsFocusable:false, + toggleCssClass:"slick-group-toggle", + toggleExpandedCssClass:"expanded", + toggleCollapsedCssClass:"collapsed", + enableExpandCollapse:true + }; + + options = $.extend(true, {}, _defaults, options); + + + function defaultGroupCellFormatter(row, cell, value, columnDef, item) { + if (!options.enableExpandCollapse) { + return item.title; + } + + return "<span class='" + options.toggleCssClass + " " + + (item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) + + "'></span>" + item.title; + } - return "<span class='" + options.toggleCssClass + " " + - (item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) + - "'></span>" + item.title; - } + function defaultTotalsCellFormatter(row, cell, value, columnDef, item) { + return (columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef)) || ""; + } - function defaultTotalsCellFormatter(row, cell, value, columnDef, item) { - return (columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef)) || ""; - } + function init(grid) { + _grid = grid; + _grid.onClick.subscribe(handleGridClick); + _grid.onKeyDown.subscribe(handleGridKeyDown); - function init(grid) { - _grid = grid; - _grid.onClick.subscribe(handleGridClick); - _grid.onKeyDown.subscribe(handleGridKeyDown); + } - } + function destroy() { + if (_grid) { + _grid.onClick.unsubscribe(handleGridClick); + _grid.onKeyDown.unsubscribe(handleGridKeyDown); + } + } - function destroy() { - if (_grid) { - _grid.onClick.unsubscribe(handleGridClick); - _grid.onKeyDown.unsubscribe(handleGridKeyDown); - } + function handleGridClick(e, args) { + var item = this.getDataItem(args.row); + if (item && item instanceof Slick.Group && $(e.target).hasClass(options.toggleCssClass)) { + if (item.collapsed) { + this.getData().expandGroup(item.value); } - - function handleGridClick(e, args) { - var item = this.getDataItem(args.row); - if (item && item instanceof Slick.Group && $(e.target).hasClass(options.toggleCssClass)) { - if (item.collapsed) { - this.getData().expandGroup(item.value); - } - else { - this.getData().collapseGroup(item.value); - } - - e.stopImmediatePropagation(); - e.preventDefault(); - } + else { + this.getData().collapseGroup(item.value); } - // TODO: add -/+ handling - function handleGridKeyDown(e, args) { - if (options.enableExpandCollapse && (e.which == $.ui.keyCode.SPACE)) { - var activeCell = this.getActiveCell(); - if (activeCell) { - var item = this.getDataItem(activeCell.row); - if (item && item instanceof Slick.Group) { - if (item.collapsed) { - this.getData().expandGroup(item.value); - } - else { - this.getData().collapseGroup(item.value); - } - - e.stopImmediatePropagation(); - e.preventDefault(); - } - } + e.stopImmediatePropagation(); + e.preventDefault(); + } + } + + // TODO: add -/+ handling + function handleGridKeyDown(e, args) { + if (options.enableExpandCollapse && (e.which == $.ui.keyCode.SPACE)) { + var activeCell = this.getActiveCell(); + if (activeCell) { + var item = this.getDataItem(activeCell.row); + if (item && item instanceof Slick.Group) { + if (item.collapsed) { + this.getData().expandGroup(item.value); + } + else { + this.getData().collapseGroup(item.value); } - } - function getGroupRowMetadata(item) { - return { - selectable: false, - focusable: options.groupFocusable, - cssClasses: options.groupCssClass, - columns: { - 0: { - colspan: "*", - formatter: defaultGroupCellFormatter, - editor: null - } - } - }; + e.stopImmediatePropagation(); + e.preventDefault(); + } } + } + } - function getTotalsRowMetadata(item) { - return { - selectable: false, - focusable: options.totalsFocusable, - cssClasses: options.totalsCssClass, - formatter: defaultTotalsCellFormatter, - editor: null - }; + function getGroupRowMetadata(item) { + return { + selectable:false, + focusable:options.groupFocusable, + cssClasses:options.groupCssClass, + columns:{ + 0:{ + colspan:"*", + formatter:defaultGroupCellFormatter, + editor:null + } } + }; + } - - - return { - "init": init, - "destroy": destroy, - "getGroupRowMetadata": getGroupRowMetadata, - "getTotalsRowMetadata": getTotalsRowMetadata - }; + function getTotalsRowMetadata(item) { + return { + selectable:false, + focusable:options.totalsFocusable, + cssClasses:options.totalsCssClass, + formatter:defaultTotalsCellFormatter, + editor:null + }; } + + + return { + "init":init, + "destroy":destroy, + "getGroupRowMetadata":getGroupRowMetadata, + "getTotalsRowMetadata":getTotalsRowMetadata + }; + } })(jQuery);
\ No newline at end of file |