Skip to content

Commit 5ec0f7f

Browse files
authored
Merge pull request #159 from ghiscoding/feature/columnpicker
made column picker more functional
2 parents 2f547f2 + 145d729 commit 5ec0f7f

File tree

3 files changed

+48
-11
lines changed

3 files changed

+48
-11
lines changed

controls/slick.columnpicker.css

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,23 @@
55
-moz-box-shadow: 2px 2px 2px silver;
66
-webkit-box-shadow: 2px 2px 2px silver;
77
box-shadow: 2px 2px 2px silver;
8-
min-width: 100px;
8+
min-width: 150px;
99
cursor: default;
10+
position:absolute;
11+
z-index:20;
12+
overflow:auto;
13+
resize: both;
14+
}
15+
16+
.slick-columnpicker > .close {
17+
float: right;
18+
}
19+
20+
.slick-columnpicker .title {
21+
font-size: 16px;
22+
width: 60%;
23+
border-bottom: solid 1px #d6d6d6;
24+
margin-bottom: 10px;
1025
}
1126

1227
.slick-columnpicker li {

controls/slick.columnpicker.js

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,60 @@
11
(function ($) {
22
function SlickColumnPicker(columns, grid, options) {
3+
var $list;
34
var $menu;
45
var columnCheckboxes;
56

67
var defaults = {
7-
fadeSpeed:250
8+
fadeSpeed: 250
89
};
910

1011
function init() {
1112
grid.onHeaderContextMenu.subscribe(handleHeaderContextMenu);
1213
grid.onColumnsReordered.subscribe(updateColumnOrder);
1314
options = $.extend({}, defaults, options);
1415

15-
$menu = $("<span class='slick-columnpicker' style='display:none;position:absolute;z-index:20;overflow-y:scroll;' />").appendTo(document.body);
16+
$menu = $("<div class='slick-columnpicker' style='display:none' />").appendTo(document.body);
17+
$close = $("<button type='button' class='close' data-dismiss='slick-columnpicker' aria-label='Close'><span class='close' aria-hidden='true'>&times;</span></button>").appendTo($menu);
18+
19+
// user could pass a title on top of the columns list
20+
if(options.columnPickerTitle) {
21+
$title = $("<div class='title'/>").append(options.columnPickerTitle);
22+
$title.appendTo($menu);
23+
}
1624

17-
$menu.on("mouseleave", function (e) {
18-
$(this).fadeOut(options.fadeSpeed)
19-
});
2025
$menu.on("click", updateColumn);
26+
$list = $("<span class='slick-columnpicker-list' />");
2127

28+
// Hide the menu on outside click.
29+
$(document.body).on("mousedown", handleBodyMouseDown);
30+
31+
// destroy the picker if user leaves the page
32+
$(window).on("beforeunload", destroy);
2233
}
2334

2435
function destroy() {
2536
grid.onHeaderContextMenu.unsubscribe(handleHeaderContextMenu);
2637
grid.onColumnsReordered.unsubscribe(updateColumnOrder);
38+
$(document.body).off("mousedown", handleBodyMouseDown);
39+
$("div.slick-columnpicker").hide(options.fadeSpeed);
2740
$menu.remove();
2841
}
2942

43+
function handleBodyMouseDown(e) {
44+
if (($menu && $menu[0] != e.target && !$.contains($menu[0], e.target)) || e.target.className == "close") {
45+
$menu.hide(options.fadeSpeed);
46+
}
47+
}
48+
3049
function handleHeaderContextMenu(e, args) {
3150
e.preventDefault();
32-
$menu.empty();
51+
$list.empty();
3352
updateColumnOrder();
3453
columnCheckboxes = [];
3554

3655
var $li, $input;
3756
for (var i = 0; i < columns.length; i++) {
38-
$li = $("<li />").appendTo($menu);
57+
$li = $("<li />").appendTo($list);
3958
$input = $("<input type='checkbox' />").data("column-id", columns[i].id);
4059
columnCheckboxes.push($input);
4160

@@ -49,8 +68,8 @@
4968
.appendTo($li);
5069
}
5170

52-
$("<hr/>").appendTo($menu);
53-
$li = $("<li />").appendTo($menu);
71+
$("<hr/>").appendTo($list);
72+
$li = $("<li />").appendTo($list);
5473
$input = $("<input type='checkbox' />").data("option", "autoresize");
5574
$("<label />")
5675
.text("Force fit columns")
@@ -60,7 +79,7 @@
6079
$input.attr("checked", "checked");
6180
}
6281

63-
$li = $("<li />").appendTo($menu);
82+
$li = $("<li />").appendTo($list);
6483
$input = $("<input type='checkbox' />").data("option", "syncresize");
6584
$("<label />")
6685
.text("Synchronous resize")
@@ -75,6 +94,8 @@
7594
.css("left", e.pageX - 10)
7695
.css("max-height", $(window).height() - e.pageY -10)
7796
.fadeIn(options.fadeSpeed);
97+
98+
$list.appendTo($menu);
7899
}
79100

80101
function updateColumnOrder() {

examples/example4-model.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ <h2>View Source:</h2>
125125
];
126126

127127
var options = {
128+
columnPickerTitle: "Columns",
128129
editable: true,
129130
enableAddRow: true,
130131
enableCellNavigation: true,

0 commit comments

Comments
 (0)