summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/examples.css2
-rw-r--r--plugins/slick.rowselectionmodel.js46
-rw-r--r--slick-default-theme.css (renamed from examples/slick-default-theme.css)10
-rw-r--r--slick.dataview.js2
-rw-r--r--slick.grid.js67
-rw-r--r--tests/init benchmark.html57
6 files changed, 126 insertions, 58 deletions
diff --git a/examples/examples.css b/examples/examples.css
index a0caa7d..24bc4a2 100644
--- a/examples/examples.css
+++ b/examples/examples.css
@@ -1,4 +1,4 @@
-@import url('slick-default-theme.css');
+@import url('../slick-default-theme.css');
* {
font-family: arial;
diff --git a/plugins/slick.rowselectionmodel.js b/plugins/slick.rowselectionmodel.js
index 28e7e43..0de8dd3 100644
--- a/plugins/slick.rowselectionmodel.js
+++ b/plugins/slick.rowselectionmodel.js
@@ -134,34 +134,34 @@
return false;
}
+ if (!_grid.getOptions().multiSelect || (
+ !e.ctrlKey && !e.shiftKey && !e.metaKey)) {
+ return false;
+ }
+
var selection = rangesToRows(_ranges);
var idx = $.inArray(cell.row, selection);
- if (!e.ctrlKey && !e.shiftKey && !e.metaKey) {
- return false;
- }
- else if (_grid.getOptions().multiSelect) {
- if (idx === -1 && (e.ctrlKey || e.metaKey)) {
- selection.push(cell.row);
- _grid.setActiveCell(cell.row, cell.cell);
- } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {
- selection = $.grep(selection, function (o, i) {
- return (o !== cell.row);
- });
- _grid.setActiveCell(cell.row, cell.cell);
- } else if (selection.length && e.shiftKey) {
- var last = selection.pop();
- var from = Math.min(cell.row, last);
- var to = Math.max(cell.row, last);
- selection = [];
- for (var i = from; i <= to; i++) {
- if (i !== last) {
- selection.push(i);
- }
+ if (idx === -1 && (e.ctrlKey || e.metaKey)) {
+ selection.push(cell.row);
+ _grid.setActiveCell(cell.row, cell.cell);
+ } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {
+ selection = $.grep(selection, function (o, i) {
+ return (o !== cell.row);
+ });
+ _grid.setActiveCell(cell.row, cell.cell);
+ } else if (selection.length && e.shiftKey) {
+ var last = selection.pop();
+ var from = Math.min(cell.row, last);
+ var to = Math.max(cell.row, last);
+ selection = [];
+ for (var i = from; i <= to; i++) {
+ if (i !== last) {
+ selection.push(i);
}
- selection.push(last);
- _grid.setActiveCell(cell.row, cell.cell);
}
+ selection.push(last);
+ _grid.setActiveCell(cell.row, cell.cell);
}
_ranges = rowsToRanges(selection);
diff --git a/examples/slick-default-theme.css b/slick-default-theme.css
index 6efd255..efc7415 100644
--- a/examples/slick-default-theme.css
+++ b/slick-default-theme.css
@@ -6,17 +6,17 @@ classes should alter those!
*/
.slick-header-columns {
- background: url('../images/header-columns-bg.gif') repeat-x center bottom;
+ background: url('images/header-columns-bg.gif') repeat-x center bottom;
border-bottom: 1px solid silver;
}
.slick-header-column {
- background: url('../images/header-columns-bg.gif') repeat-x center bottom;
+ background: url('images/header-columns-bg.gif') repeat-x center bottom;
border-right: 1px solid silver;
}
.slick-header-column:hover, .slick-header-column-active {
- background: white url('../images/header-columns-over-bg.gif') repeat-x center bottom;
+ background: white url('images/header-columns-over-bg.gif') repeat-x center bottom;
}
.slick-headerrow {
@@ -61,11 +61,11 @@ classes should alter those!
}
.slick-group-toggle.expanded {
- background: url(../images/collapse.gif) no-repeat center center;
+ background: url(images/collapse.gif) no-repeat center center;
}
.slick-group-toggle.collapsed {
- background: url(../images/expand.gif) no-repeat center center;
+ background: url(images/expand.gif) no-repeat center center;
}
.slick-group-totals {
diff --git a/slick.dataview.js b/slick.dataview.js
index 5bee4ff..2dabd87 100644
--- a/slick.dataview.js
+++ b/slick.dataview.js
@@ -457,7 +457,7 @@
var group;
var val;
var groups = [];
- var groupsByVal = [];
+ var groupsByVal = {};
var r;
var level = parentGroup ? parentGroup.level + 1 : 0;
var gi = groupingInfos[level];
diff --git a/slick.grid.js b/slick.grid.js
index a9a9efc..e5c7a89 100644
--- a/slick.grid.js
+++ b/slick.grid.js
@@ -133,7 +133,6 @@ if (typeof Slick === "undefined") {
var headerColumnWidthDiff = 0, headerColumnHeightDiff = 0, // border+padding
cellWidthDiff = 0, cellHeightDiff = 0;
var absoluteColumnMinWidth;
- var numberOfRows = 0;
var tabbingDirection = 1;
var activePosX;
@@ -668,8 +667,8 @@ if (typeof Slick === "undefined") {
tolerance: "intersection",
helper: "clone",
placeholder: "slick-sortable-placeholder ui-state-default slick-header-column",
- forcePlaceholderSize: true,
start: function (e, ui) {
+ ui.placeholder.width(ui.helper.outerWidth() - headerColumnWidthDiff);
$(ui.helper).addClass("slick-header-column-active");
},
beforeStop: function (e, ui) {
@@ -880,23 +879,27 @@ if (typeof Slick === "undefined") {
el = $("<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>").appendTo($headers);
headerColumnWidthDiff = headerColumnHeightDiff = 0;
- $.each(h, function (n, val) {
- headerColumnWidthDiff += parseFloat(el.css(val)) || 0;
- });
- $.each(v, function (n, val) {
- headerColumnHeightDiff += parseFloat(el.css(val)) || 0;
- });
+ if (el.css("box-sizing") != "border-box" && el.css("-moz-box-sizing") != "border-box" && el.css("-webkit-box-sizing") != "border-box") {
+ $.each(h, function (n, val) {
+ headerColumnWidthDiff += parseFloat(el.css(val)) || 0;
+ });
+ $.each(v, function (n, val) {
+ headerColumnHeightDiff += parseFloat(el.css(val)) || 0;
+ });
+ }
el.remove();
var r = $("<div class='slick-row' />").appendTo($canvas);
el = $("<div class='slick-cell' id='' style='visibility:hidden'>-</div>").appendTo(r);
cellWidthDiff = cellHeightDiff = 0;
- $.each(h, function (n, val) {
- cellWidthDiff += parseFloat(el.css(val)) || 0;
- });
- $.each(v, function (n, val) {
- cellHeightDiff += parseFloat(el.css(val)) || 0;
- });
+ if (el.css("box-sizing") != "border-box" && el.css("-moz-box-sizing") != "border-box" && el.css("-webkit-box-sizing") != "border-box") {
+ $.each(h, function (n, val) {
+ cellWidthDiff += parseFloat(el.css(val)) || 0;
+ });
+ $.each(v, function (n, val) {
+ cellHeightDiff += parseFloat(el.css(val)) || 0;
+ });
+ }
r.remove();
absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);
@@ -1593,9 +1596,10 @@ if (typeof Slick === "undefined") {
}
function updateRowCount() {
- var dataLength = getDataLength();
if (!initialized) { return; }
- numberOfRows = getDataLengthIncludingAddNew() +
+
+ var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ var numberOfRows = dataLengthIncludingAddNew +
(options.leaveSpaceForNewRows ? numVisibleRows - 1 : 0);
var oldViewportHasVScroll = viewportHasVScroll;
@@ -1604,7 +1608,7 @@ if (typeof Slick === "undefined") {
// remove the rows that are now outside of the data range
// this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows
- var l = getDataLengthIncludingAddNew() - 1;
+ var l = dataLengthIncludingAddNew - 1;
for (var i in rowsCache) {
if (i >= l) {
removeRowFromCache(i);
@@ -1997,10 +2001,11 @@ if (typeof Slick === "undefined") {
}
function asyncPostProcessRows() {
+ var dataLength = getDataLength();
while (postProcessFromRow <= postProcessToRow) {
var row = (vScrollDir >= 0) ? postProcessFromRow++ : postProcessToRow--;
var cacheEntry = rowsCache[row];
- if (!cacheEntry || row >= getDataLength()) {
+ if (!cacheEntry || row >= dataLength) {
continue;
}
@@ -2171,10 +2176,10 @@ if (typeof Slick === "undefined") {
}
cancelEditAndSetFocus();
} else if (e.which == 34) {
- scrollPageDown();
+ navigatePageDown();
handled = true;
} else if (e.which == 33) {
- scrollPageUp();
+ navigatePageUp();
handled = true;
} else if (e.which == 37) {
handled = navigateLeft();
@@ -2486,13 +2491,14 @@ if (typeof Slick === "undefined") {
}
function isCellPotentiallyEditable(row, cell) {
+ var dataLength = getDataLength();
// is the data for this row loaded?
- if (row < getDataLength() && !getDataItem(row)) {
+ if (row < dataLength && !getDataItem(row)) {
return false;
}
// are we in the Add New row? can we create new from this cell?
- if (columns[cell].cannotTriggerInsert && row >= getDataLength()) {
+ if (columns[cell].cannotTriggerInsert && row >= dataLength) {
return false;
}
@@ -2716,8 +2722,9 @@ if (typeof Slick === "undefined") {
if (options.enableCellNavigation && activeRow != null) {
var row = activeRow + deltaRows;
- if (row >= getDataLengthIncludingAddNew()) {
- row = getDataLengthIncludingAddNew() - 1;
+ var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ if (row >= dataLengthIncludingAddNew) {
+ row = dataLengthIncludingAddNew - 1;
}
if (row < 0) {
row = 0;
@@ -2741,11 +2748,11 @@ if (typeof Slick === "undefined") {
}
}
- function scrollPageDown() {
+ function navigatePageDown() {
scrollPage(1);
}
- function scrollPageUp() {
+ function navigatePageUp() {
scrollPage(-1);
}
@@ -2839,8 +2846,9 @@ if (typeof Slick === "undefined") {
function gotoDown(row, cell, posX) {
var prevCell;
+ var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
while (true) {
- if (++row >= getDataLengthIncludingAddNew()) {
+ if (++row >= dataLengthIncludingAddNew) {
return null;
}
@@ -2901,7 +2909,8 @@ if (typeof Slick === "undefined") {
}
var firstFocusableCell = null;
- while (++row < getDataLengthIncludingAddNew()) {
+ var dataLengthIncludingAddNew = getDataLengthIncludingAddNew();
+ while (++row < dataLengthIncludingAddNew) {
firstFocusableCell = findFirstFocusableCell(row);
if (firstFocusableCell !== null) {
return {
@@ -3340,6 +3349,8 @@ if (typeof Slick === "undefined") {
"navigateDown": navigateDown,
"navigateLeft": navigateLeft,
"navigateRight": navigateRight,
+ "navigatePageUp": navigatePageUp,
+ "navigatePageDown": navigatePageDown,
"gotoCell": gotoCell,
"getTopPanel": getTopPanel,
"setTopPanelVisibility": setTopPanelVisibility,
diff --git a/tests/init benchmark.html b/tests/init benchmark.html
new file mode 100644
index 0000000..8b41c84
--- /dev/null
+++ b/tests/init benchmark.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>SlickGrid Initialization Benchmark</title>
+ <link rel="stylesheet" href="../slick.grid.css" type="text/css" media="screen" charset="utf-8" />
+ <link rel="stylesheet" href="../css/smoothness/jquery-ui-1.8.16.custom.css" type="text/css" media="screen" charset="utf-8" />
+ <link rel="stylesheet" href="../examples/examples.css" type="text/css" media="screen" charset="utf-8" />
+ </head>
+ <body>
+ <script src="http://code.jquery.com/jquery-1.7.2.js"></script>
+ <script src="../lib/jquery-ui-1.8.16.custom.min.js"></script>
+ <script src="../lib/jquery.event.drag-2.2.js"></script>
+
+ <script src="../slick.core.js"></script>
+ <script src="../slick.grid.js"></script>
+ <script src="../slick.formatters.js"></script>
+
+ <button onclick="bench(false)">Run w/o disposing</button>
+ <button onclick="bench(true)">Run w/ disposing</button>
+
+ <hr/>
+
+ <div id="container" style="width:600px;height:100000px;"></div>
+
+ <script>
+ function bench(dispose) {
+ var startTime = new Date();
+ var container = $("#container");
+ for (var i = 0; i < 20; i++) {
+ var parentEl = $("<div style='width:600px;height:400px;'></div>").appendTo(container);
+ var grid = createGrid(parentEl);
+ if (dispose) {
+ grid.destroy();
+ parentEl.remove();
+ }
+ }
+ alert((new Date() - startTime));
+ }
+
+ function createGrid(parentEl) {
+ var data = [{}, {}, {}];
+ var columns = [];
+ for (var i = 0; i < 20; i++) {
+ columns.push({id: "field" + i, name: "field" + i, field: "field" + i});
+ }
+
+ var options = {
+ enableCellNavigation: true,
+ enableColumnReorder: false
+ };
+
+ return new Slick.Grid(parentEl, data, columns, options);
+ }
+ </script>
+ </body>
+</html>