diff options
-rw-r--r-- | examples/example-header-row.html | 39 | ||||
-rw-r--r-- | examples/example4-model.html | 6 | ||||
-rw-r--r-- | plugins/slick.headerbuttons.js | 12 | ||||
-rw-r--r-- | plugins/slick.headermenu.js | 12 | ||||
-rw-r--r-- | slick.grid.js | 82 |
5 files changed, 78 insertions, 73 deletions
diff --git a/examples/example-header-row.html b/examples/example-header-row.html index d5d64ca..6f309bc 100644 --- a/examples/example-header-row.html +++ b/examples/example-header-row.html @@ -55,7 +55,8 @@ var options = { enableCellNavigation: true, showHeaderRow: true, - headerRowHeight: 30 + headerRowHeight: 30, + explicitInitialization: true }; var columns = []; var columnFilters = {}; @@ -70,19 +71,6 @@ } - function updateHeaderRow() { - for (var i = 0; i < columns.length; i++) { - if (columns[i].id !== "selector") { - var header = grid.getHeaderRowColumn(columns[i].id); - $(header).empty(); - $("<input type='text'>") - .data("columnId", columns[i].id) - .val(columnFilters[columns[i].id]) - .appendTo(header); - } - } - } - function filter(item) { for (var columnId in columnFilters) { if (columnId !== undefined && columnFilters[columnId] !== "") { @@ -118,26 +106,29 @@ grid.render(); }); + $(grid.getHeaderRow()).delegate(":input", "change keyup", function (e) { - columnFilters[$(this).data("columnId")] = $.trim($(this).val()); - dataView.refresh(); + var columnId = $(this).data("columnId"); + if (columnId != null) { + columnFilters[columnId] = $.trim($(this).val()); + dataView.refresh(); + } }); - - grid.onColumnsReordered.subscribe(function (e, args) { - updateHeaderRow(); + grid.onHeaderRowCellRendered.subscribe(function(e, args) { + $(args.node).empty(); + $("<input type='text'>") + .data("columnId", args.column.id) + .val(columnFilters[args.column.id]) + .appendTo(args.node); }); - grid.onColumnsResized.subscribe(function (e, args) { - updateHeaderRow(); - }); + grid.init(); dataView.beginUpdate(); dataView.setItems(data); dataView.setFilter(filter); dataView.endUpdate(); - - updateHeaderRow(); }) </script> </body> diff --git a/examples/example4-model.html b/examples/example4-model.html index ce62c0b..8feaf7e 100644 --- a/examples/example4-model.html +++ b/examples/example4-model.html @@ -161,11 +161,7 @@ function comparer(a, b) { } function toggleFilterRow() { - if ($(grid.getTopPanel()).is(":visible")) { - grid.hideTopPanel(); - } else { - grid.showTopPanel(); - } + grid.setTopPanelVisibility(!grid.getOptions().showTopPanel); } diff --git a/plugins/slick.headerbuttons.js b/plugins/slick.headerbuttons.js index 16024e5..8e61273 100644 --- a/plugins/slick.headerbuttons.js +++ b/plugins/slick.headerbuttons.js @@ -75,8 +75,8 @@ options = $.extend(true, {}, _defaults, options); _grid = grid; _handler - .subscribe(_grid.onHeaderRendered, handleHeaderRendered) - .subscribe(_grid.onBeforeHeaderDestroy, handleBeforeHeaderDestroy); + .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered) + .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy); // Force the grid to re-render the header now that the events are hooked up. _grid.setColumns(_grid.getColumns()); @@ -88,7 +88,7 @@ } - function handleHeaderRendered(e, args) { + function handleHeaderCellRendered(e, args) { var column = args.column; if (column.header && column.header.buttons) { @@ -127,20 +127,20 @@ btn .bind("click", handleButtonClick) - .appendTo(args.headerNode); + .appendTo(args.node); } } } - function handleBeforeHeaderDestroy(e, args) { + function handleBeforeHeaderCellDestroy(e, args) { var column = args.column; if (column.header && column.header.buttons) { // Removing buttons via jQuery will also clean up any event handlers and data. // NOTE: If you attach event handlers directly or using a different framework, // you must also clean them up here to avoid memory leaks. - $(args.headerNode).find("." + options.buttonCssClass).remove(); + $(args.node).find("." + options.buttonCssClass).remove(); } } diff --git a/plugins/slick.headermenu.js b/plugins/slick.headermenu.js index 9a94bf5..77df1ce 100644 --- a/plugins/slick.headermenu.js +++ b/plugins/slick.headermenu.js @@ -93,8 +93,8 @@ options = $.extend(true, {}, _defaults, options); _grid = grid; _handler - .subscribe(_grid.onHeaderRendered, handleHeaderRendered) - .subscribe(_grid.onBeforeHeaderDestroy, handleBeforeHeaderDestroy); + .subscribe(_grid.onHeaderCellRendered, handleHeaderCellRendered) + .subscribe(_grid.onBeforeHeaderCellDestroy, handleBeforeHeaderCellDestroy); // Force the grid to re-render the header now that the events are hooked up. _grid.setColumns(_grid.getColumns()); @@ -126,7 +126,7 @@ } } - function handleHeaderRendered(e, args) { + function handleHeaderCellRendered(e, args) { var column = args.column; var menu = column.header && column.header.menu; @@ -150,16 +150,16 @@ $el .bind("click", showMenu) - .appendTo(args.headerNode); + .appendTo(args.node); } } - function handleBeforeHeaderDestroy(e, args) { + function handleBeforeHeaderCellDestroy(e, args) { var column = args.column; if (column.header && column.header.menu) { - $(args.headerNode).find(".slick-header-menubutton").remove(); + $(args.node).find(".slick-header-menubutton").remove(); } } diff --git a/slick.grid.js b/slick.grid.js index 72ed3dd..c24db21 100644 --- a/slick.grid.js +++ b/slick.grid.js @@ -471,8 +471,8 @@ if (typeof Slick === "undefined") { columns[idx].toolTip = toolTip; } - trigger(self.onBeforeHeaderDestroy, { - "headerNode": $header[0], + trigger(self.onBeforeHeaderCellDestroy, { + "node": $header[0], "column": columnDef }); @@ -480,8 +480,8 @@ if (typeof Slick === "undefined") { .attr("title", toolTip || "") .children().eq(0).html(title); - trigger(self.onHeaderRendered, { - "headerNode": $header[0], + trigger(self.onHeaderCellRendered, { + "node": $header[0], "column": columnDef }); } @@ -510,15 +510,25 @@ if (typeof Slick === "undefined") { .each(function() { var columnDef = $(this).data("column"); if (columnDef) { - trigger(self.onBeforeHeaderDestroy, { - "headerNode": this, + trigger(self.onBeforeHeaderCellDestroy, { + "node": this, "column": columnDef }); } }); - $headers.empty(); $headers.width(getHeadersWidth()); + + $headerRow.find(".slick-headerrow-column") + .each(function() { + var columnDef = $(this).data("column"); + if (columnDef) { + trigger(self.onBeforeHeaderRowCellDestroy, { + "node": this, + "column": columnDef + }); + } + }); $headerRow.empty(); for (var i = 0; i < columns.length; i++) { @@ -540,14 +550,20 @@ if (typeof Slick === "undefined") { header.append("<span class='slick-sort-indicator' />"); } - trigger(self.onHeaderRendered, { - "headerNode": header[0], + trigger(self.onHeaderCellRendered, { + "node": header[0], "column": m }); if (options.showHeaderRow) { - $("<div class='ui-state-default slick-headerrow-column l" + i + " r" + i + "'></div>") + var headerRowCell = $("<div class='ui-state-default slick-headerrow-column l" + i + " r" + i + "'></div>") + .data("column", m) .appendTo($headerRow); + + trigger(self.onHeaderRowCellRendered, { + "node": headerRowCell[0], + "column": m + }); } } @@ -1241,24 +1257,26 @@ if (typeof Slick === "undefined") { return $topPanel[0]; } - function showTopPanel() { - options.showTopPanel = true; - $topPanelScroller.slideDown("fast", resizeCanvas); - } - - function hideTopPanel() { - options.showTopPanel = false; - $topPanelScroller.slideUp("fast", resizeCanvas); - } - - function showHeaderRowColumns() { - options.showHeaderRow = true; - $headerRowScroller.slideDown("fast", resizeCanvas); + function setTopPanelVisibility(visible) { + if (options.showTopPanel != visible) { + options.showTopPanel = visible; + if (visible) { + $topPanelScroller.slideDown("fast", resizeCanvas); + } else { + $topPanelScroller.slideUp("fast", resizeCanvas); + } + } } - function hideHeaderRowColumns() { - options.showHeaderRow = false; - $headerRowScroller.slideUp("fast", resizeCanvas); + function setHeaderRowVisibility(visible) { + if (options.showHeaderRow != visible) { + options.showHeaderRow = visible; + if (visible) { + $headerRowScroller.slideDown("fast", resizeCanvas); + } else { + $headerRowScroller.slideUp("fast", resizeCanvas); + } + } } ////////////////////////////////////////////////////////////////////////////////////////////// @@ -3087,8 +3105,10 @@ if (typeof Slick === "undefined") { "onHeaderMouseLeave": new Slick.Event(), "onHeaderContextMenu": new Slick.Event(), "onHeaderClick": new Slick.Event(), - "onHeaderRendered": new Slick.Event(), - "onBeforeHeaderDestroy": new Slick.Event(), + "onHeaderCellRendered": new Slick.Event(), + "onBeforeHeaderCellDestroy": new Slick.Event(), + "onHeaderRowCellRendered": new Slick.Event(), + "onBeforeHeaderRowCellDestroy": new Slick.Event(), "onMouseEnter": new Slick.Event(), "onMouseLeave": new Slick.Event(), "onClick": new Slick.Event(), @@ -3173,10 +3193,8 @@ if (typeof Slick === "undefined") { "navigateRight": navigateRight, "gotoCell": gotoCell, "getTopPanel": getTopPanel, - "showTopPanel": showTopPanel, - "hideTopPanel": hideTopPanel, - "showHeaderRowColumns": showHeaderRowColumns, - "hideHeaderRowColumns": hideHeaderRowColumns, + "setTopPanelVisibility": setTopPanelVisibility, + "setHeaderRowVisibility": setHeaderRowVisibility, "getHeaderRow": getHeaderRow, "getHeaderRowColumn": getHeaderRowColumn, "getGridPosition": getGridPosition, |