From 161151c2aef67c9a52007bec9251a3703a8f2fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Pluchino?= Date: Tue, 9 Oct 2012 10:17:20 +0300 Subject: [PATCH 001/138] Bugfix init Jquery UI Sortable Widget +1.9 --- slick.grid.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slick.grid.js b/slick.grid.js index 279019d9a..0c94230d6 100644 --- a/slick.grid.js +++ b/slick.grid.js @@ -649,6 +649,8 @@ if (typeof Slick === "undefined") { } function setupColumnReorder() { + // force init jquery ui sortable +1.9 + $headers.sortable(); $headers.sortable("destroy"); $headers.sortable({ containment: "parent", From 4746f81de5ebda06d6a8d73afed2af8265cac708 Mon Sep 17 00:00:00 2001 From: Zoco Date: Thu, 8 Nov 2012 08:58:57 -0800 Subject: [PATCH 002/138] Delete .DS_Store, create README --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 3 ++- README.md | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) delete mode 100644 .DS_Store create mode 100644 README.md diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 81ef9d18645cc5fce5062569cf6f495fb0395487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}T>S5Z-O8Zcrf?p~uB@k(Ma!!9xfYJPIlFU_}#BXdpJFNvTky!HbXM+xR@r z?5@RPdKJ+bnEhtwXLs{K_J=XXy+zbv%w~)UP(+SKg`m4KR5QsO5ERCkv4o9T7A~_{ z#X!H&g=-hE<_8wA`>*Q{lQe|bTR2PNEN{2pd9B{q+1(SCB@RZzcp9ZkFI`Nd?Ao8C zOFxdrVKBc@b{^!5%nRl!auwtgh$wrIrU}?1lRb>1d~$0yS1ZRkYspT}DOz&X?Y3L; z)aez4C4^iFKnxHA#K0B?%poH7x5UX! z3=jkVmjT=#Bq*Y5u+*rw4rtU90I&gWC1B%Q0&Ao}*I=m;A|PCs0_sw3o)}!0gI}6F z*I=npmou(rhH=cypN|)=W(U7i>5RJ?sU-%8flUVLx@+V4e*wQt Date: Fri, 9 Nov 2012 15:53:46 -0800 Subject: [PATCH 003/138] Stop the grid from trapping keyboard focus. --- slick.grid.js | 88 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/slick.grid.js b/slick.grid.js index 279019d9a..3f41c34f3 100644 --- a/slick.grid.js +++ b/slick.grid.js @@ -2139,23 +2139,22 @@ if (typeof Slick === "undefined") { } cancelEditAndSetFocus(); } else if (e.which == 37) { - navigateLeft(); + handled = navigateLeft(); } else if (e.which == 39) { - navigateRight(); + handled = navigateRight(); } else if (e.which == 38) { - navigateUp(); + handled = navigateUp(); } else if (e.which == 40) { - navigateDown(); + handled = navigateDown(); } else if (e.which == 9) { - navigateNext(); + handled = navigateNext(); } else if (e.which == 13) { if (options.editable) { if (currentEditor) { // adding new row if (activeRow === getDataLength()) { navigateDown(); - } - else { + } else { commitEditAndSetFocus(); } } else { @@ -2164,25 +2163,24 @@ if (typeof Slick === "undefined") { } } } - } else { - return; + handled = true; } } else if (e.which == 9 && e.shiftKey && !e.ctrlKey && !e.altKey) { - navigatePrev(); - } else { - return; + handled = navigatePrev(); } } - // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it - e.stopPropagation(); - e.preventDefault(); - try { - e.originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.) - } + if (handled) { + // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it + e.stopPropagation(); + e.preventDefault(); + try { + e.originalEvent.keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.) + } // ignore exceptions - setting the original event's keycode throws access denied exception for "Ctrl" // (hitting control key only, nothing else), "Shift" (maybe others) - catch (error) { + catch (error) { + } } } @@ -2794,6 +2792,17 @@ if (typeof Slick === "undefined") { } function gotoNext(row, cell, posX) { + if (row == null && cell == null) { + row = cell = posX = 0; + if (canCellBeActive(row, cell)) { + return { + "row": row, + "cell": cell, + "posX": cell + }; + } + } + var pos = gotoRight(row, cell, posX); if (pos) { return pos; @@ -2814,6 +2823,18 @@ if (typeof Slick === "undefined") { } function gotoPrev(row, cell, posX) { + if (row == null && cell == null) { + row = getDataLength() + (options.enableAddRow ? 1 : 0) - 1; + cell = posX = columns.length - 1; + if (canCellBeActive(row, cell)) { + return { + "row": row, + "cell": cell, + "posX": cell + }; + } + } + var pos; var lastSelectableCell; while (!pos) { @@ -2839,35 +2860,44 @@ if (typeof Slick === "undefined") { } function navigateRight() { - navigate("right"); + return navigate("right"); } function navigateLeft() { - navigate("left"); + return navigate("left"); } function navigateDown() { - navigate("down"); + return navigate("down"); } function navigateUp() { - navigate("up"); + return navigate("up"); } function navigateNext() { - navigate("next"); + return navigate("next"); } function navigatePrev() { - navigate("prev"); + return navigate("prev"); } + /** + * @param {string} dir Navigation direction. + * @return {boolean} Whether navigation resulted in a change of active cell. + */ function navigate(dir) { - if (!activeCellNode || !options.enableCellNavigation) { - return; + if (!options.enableCellNavigation) { + return false; + } + + if (!activeCellNode && dir != "prev" && dir != "next") { + return false; } + if (!getEditorLock().commitCurrentEdit()) { - return; + return true; } setFocus(); @@ -2887,8 +2917,10 @@ if (typeof Slick === "undefined") { scrollCellIntoView(pos.row, pos.cell); setActiveCellInternal(getCellNode(pos.row, pos.cell), isAddNewRow || options.autoEdit); activePosX = pos.posX; + return true; } else { setActiveCellInternal(getCellNode(activeRow, activeCell), (activeRow == getDataLength()) || options.autoEdit); + return false; } } From 86ce1e1c9d42ba5e10f8f335876e9a8ad03a5f2c Mon Sep 17 00:00:00 2001 From: Michael Leibman Date: Thu, 29 Nov 2012 15:05:45 -0800 Subject: [PATCH 004/138] Fix keyboard focus getting trapped when cell has tabbable elements. Added another focus sink just after the grid content and set focus depending on the direction of keyboard navigation. --- examples/example2-formatters.html | 16 +++++++++++++--- slick.grid.js | 23 ++++++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/examples/example2-formatters.html b/examples/example2-formatters.html index fd1b366de..476b75a51 100644 --- a/examples/example2-formatters.html +++ b/examples/example2-formatters.html @@ -17,6 +17,9 @@ + + +
@@ -32,6 +35,8 @@

Demonstrates:

+ + @@ -43,10 +48,15 @@

Demonstrates:

+ @@ -81,6 +83,8 @@

Demonstrates:

grid = new Slick.Grid("#myGrid", data, columns, options); grid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: false})); grid.registerPlugin(checkboxSelector); + + var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options); }) diff --git a/slick.dataview.js b/slick.dataview.js index 960ecee14..bed91c6b6 100644 --- a/slick.dataview.js +++ b/slick.dataview.js @@ -564,20 +564,22 @@ } } - function flattenGroupedRows(groups) { + function flattenGroupedRows(groups, level) { + level = level || 0; + var gi = groupingInfos[level]; var groupedRows = [], rows, gl = 0, g; for (var i = 0, l = groups.length; i < l; i++) { g = groups[i]; groupedRows[gl++] = g; if (!g.collapsed) { - rows = g.groups ? flattenGroupedRows(g.groups) : g.rows; + rows = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows; for (var j = 0, jj = rows.length; j < jj; j++) { groupedRows[gl++] = rows[j]; } } - if (g.totals && (!g.collapsed || groupingInfos[g.level].aggregateCollapsed)) { + if (g.totals && (!g.collapsed || gi.aggregateCollapsed)) { groupedRows[gl++] = g.totals; } } From 8367d302876c22c322c7676d0938fb4bf49cf88e Mon Sep 17 00:00:00 2001 From: Sean Vieira Date: Fri, 8 Mar 2013 15:19:01 -0500 Subject: [PATCH 029/138] Add option to hide totals row. Allow groups to exclude the subtotals from the rendered grid. This is to allow using group formatters to display aggregate information in the group header rather than in a footer section (if desired). I'm sure there are other uses as well, I just haven't been able to think of any. Also added a new groupingInfoOption: * displayTotalsRow (defaults to true). We'll see if Github is smart enough to update the existing pull request. --- slick.dataview.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/slick.dataview.js b/slick.dataview.js index bed91c6b6..a4dcdd41b 100644 --- a/slick.dataview.js +++ b/slick.dataview.js @@ -59,7 +59,8 @@ aggregateEmpty: false, aggregateCollapsed: false, aggregateChildGroups: false, - collapsed: false + collapsed: false, + displayTotalsRow: true }; var groupingInfos = []; var groups = []; @@ -579,7 +580,7 @@ } } - if (g.totals && (!g.collapsed || gi.aggregateCollapsed)) { + if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) { groupedRows[gl++] = g.totals; } } @@ -1059,4 +1060,4 @@ // TODO: add more built-in aggregators // TODO: merge common aggregators in one to prevent needles iterating -})(jQuery); \ No newline at end of file +})(jQuery); From a2d91ce80907714e554492f4f75c80c72124cbc1 Mon Sep 17 00:00:00 2001 From: "adam j. sontag" Date: Mon, 18 Mar 2013 17:14:40 -0400 Subject: [PATCH 030/138] Update internal column cache when columns are reordered --- controls/slick.columnpicker.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/controls/slick.columnpicker.js b/controls/slick.columnpicker.js index ecd0d4dcc..0978933f7 100644 --- a/controls/slick.columnpicker.js +++ b/controls/slick.columnpicker.js @@ -9,6 +9,7 @@ function init() { grid.onHeaderContextMenu.subscribe(handleHeaderContextMenu); + grid.onColumnsReordered.subscribe(handleColumnsReordered); options = $.extend({}, defaults, options); $menu = $("