diff --git a/.gitignore b/.gitignore
index 6edcb2956..f148e9ff2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,7 @@
.gitk*
.idea/*
*.orig
+.project
.DS_Store
.settings/
-.project
.idea
diff --git a/README.md b/README.md
index 7994a2719..4b247bd72 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,11 @@
-# Welcome to SlickGrid
+[SlickGrid](https://github.com/jlynch7/SlickGrid/wiki) - A lightning fast JavaScript grid/spreadsheet
+==================================================
-Find documentation and examples in [the wiki](https://github.com/mleibman/SlickGrid/wiki).
+This Fork's Features
+--------------------------------------
-## SlickGrid is an advanced JavaScript grid/spreadsheet component
-
-Some highlights:
-
-* Adaptive virtual scrolling (handle hundreds of thousands of rows with extreme responsiveness)
-* Extremely fast rendering speed
-* Supports jQuery UI Themes
-* Background post-rendering for richer cells
-* Configurable & customizable
-* Full keyboard navigation
-* Column resize/reorder/show/hide
-* Column autosizing & force-fit
-* Pluggable cell formatters & editors
-* Support for editing and creating new rows.
-* Grouping, filtering, custom aggregators, and more!
-* Advanced detached & multi-field editors with undo/redo support.
-* “GlobalEditorLock” to manage concurrent edits in cases where multiple Views on a page can edit the same data.
-* Support for [millions of rows](http://stackoverflow.com/a/2569488/1269037)
+Frozen Rows (top & bottom)
+Frozen Columns (left only, right coming soon)
+Horizontal scrolling of frozen viewport with mousewheel
+Scroll viewport during row drag
+Scroll viewport during column drag
diff --git a/bower.json b/bower.json
new file mode 100644
index 000000000..6cd7b656b
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,12 @@
+{
+ "name": "SlickGrid-revionics",
+ "version": "2.2.1",
+ "main": ["slick.core.js", "slick.grid.js", "slick.grid.css"],
+ "keywords": ["SlickGrid", "grid", "frozen", "fix", "columns", "spreadsheet"],
+ "ignore": [
+ ],
+ "dependencies": {
+ },
+ "devDependencies": {
+ }
+}
\ No newline at end of file
diff --git a/controls/slick.columnpicker.js b/controls/slick.columnpicker.js
index be0dc066d..7026d4587 100644
--- a/controls/slick.columnpicker.js
+++ b/controls/slick.columnpicker.js
@@ -1,41 +1,41 @@
-(function ($) {
- function SlickColumnPicker(columns, grid, options) {
- var $menu;
- var columnCheckboxes;
+(function($) {
+ function SlickColumnPicker(columns, grid, options) {
+ var $menu;
+ var columnCheckboxes;
- var defaults = {
- fadeSpeed:250
- };
+ var defaults = {
+ fadeSpeed: 250
+ };
- function init() {
- grid.onHeaderContextMenu.subscribe(handleHeaderContextMenu);
+ function init() {
+ grid.onHeaderContextMenu.subscribe(handleHeaderContextMenu);
grid.onColumnsReordered.subscribe(updateColumnOrder);
- options = $.extend({}, defaults, options);
-
- $menu = $("").appendTo(document.body);
+ options = $.extend({}, defaults, options);
- $menu.bind("mouseleave", function (e) {
- $(this).fadeOut(options.fadeSpeed)
- });
- $menu.bind("click", updateColumn);
+ $menu = $("").appendTo(document.body);
- }
+ $menu
+ .bind("mouseleave", function(e) {
+ $(this).fadeOut(options.fadeSpeed)
+ })
+ .bind("click", updateColumn);
+ }
- function handleHeaderContextMenu(e, args) {
- e.preventDefault();
- $menu.empty();
+ function handleHeaderContextMenu(e, args) {
+ e.preventDefault();
+ $menu.empty();
updateColumnOrder();
- columnCheckboxes = [];
+ columnCheckboxes = [];
- var $li, $input;
- for (var i = 0; i < columns.length; i++) {
- $li = $("
").appendTo($menu);
- $input = $("").data("column-id", columns[i].id);
- columnCheckboxes.push($input);
+ var $li, $input;
+ for (var i = 0; i < columns.length; i++) {
+ $li = $("").appendTo($menu);
+ $input = $("").data("column-id", columns[i].id);
+ columnCheckboxes.push($input);
- if (grid.getColumnIndex(columns[i].id) != null) {
- $input.attr("checked", "checked");
- }
+ if (grid.getColumnIndex(columns[i].id) != null) {
+ $input.attr("checked", "checked");
+ }
$("")
.text(columns[i].name)
@@ -92,54 +92,67 @@
columns = ordered;
}
- function updateColumn(e) {
- if ($(e.target).data("option") == "autoresize") {
- if (e.target.checked) {
- grid.setOptions({forceFitColumns:true});
- grid.autosizeColumns();
- } else {
- grid.setOptions({forceFitColumns:false});
- }
- return;
- }
-
- if ($(e.target).data("option") == "syncresize") {
- if (e.target.checked) {
- grid.setOptions({syncColumnCellResize:true});
- } else {
- grid.setOptions({syncColumnCellResize:false});
- }
- return;
- }
-
- if ($(e.target).is(":checkbox")) {
- var visibleColumns = [];
- $.each(columnCheckboxes, function (i, e) {
- if ($(this).is(":checked")) {
- visibleColumns.push(columns[i]);
- }
- });
-
- if (!visibleColumns.length) {
- $(e.target).attr("checked", "checked");
- return;
- }
-
- grid.setColumns(visibleColumns);
- }
- }
+ function updateColumn(e) {
+ if ($(e.target).data("option") == "autoresize") {
+ if (e.target.checked) {
+ grid.setOptions({
+ forceFitColumns: true
+ });
+ grid.autosizeColumns();
+ } else {
+ grid.setOptions({
+ forceFitColumns: false
+ });
+ }
+ return;
+ }
+
+ if ($(e.target).data("option") == "syncresize") {
+ if (e.target.checked) {
+ grid.setOptions({
+ syncColumnCellResize: true
+ });
+ } else {
+ grid.setOptions({
+ syncColumnCellResize: false
+ });
+ }
+ return;
+ }
+
+ if ($(e.target).is(":checkbox")) {
+ var visibleColumns = [];
+ $.each(columnCheckboxes, function(i, e) {
+ if ($(this).is(":checked")) {
+ visibleColumns.push(columns[i]);
+ }
+ });
+
+ if (!visibleColumns.length) {
+ $(e.target).attr("checked", "checked");
+ return;
+ }
+
+ grid.setColumns(visibleColumns);
+ }
+ }
function getAllColumns() {
return columns;
}
-
- init();
+ init();
return {
"getAllColumns": getAllColumns
};
- }
-
- // Slick.Controls.ColumnPicker
- $.extend(true, window, { Slick:{ Controls:{ ColumnPicker:SlickColumnPicker }}});
-})(jQuery);
+ }
+
+ // Slick.Controls.ColumnPicker
+ $.extend(true, window, {
+ Slick: {
+ Controls: {
+ ColumnPicker: SlickColumnPicker
+ }
+ }
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/css/smoothness/jquery-ui-1.8.16.custom.css b/css/smoothness/jquery-ui-1.8.24.custom.css
similarity index 94%
rename from css/smoothness/jquery-ui-1.8.16.custom.css
rename to css/smoothness/jquery-ui-1.8.24.custom.css
index 0f1a7e770..cd166a6b7 100644
--- a/css/smoothness/jquery-ui-1.8.16.custom.css
+++ b/css/smoothness/jquery-ui-1.8.24.custom.css
@@ -1,7 +1,7 @@
-/*
- * jQuery UI CSS Framework 1.8.16
+/*!
+ * jQuery UI CSS Framework 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -13,12 +13,9 @@
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
-.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
-.ui-helper-clearfix { display: inline-block; }
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix { height:1%; }
-.ui-helper-clearfix { display:block; }
-/* end clearfix */
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
@@ -41,10 +38,10 @@
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
-/*
- * jQuery UI CSS Framework 1.8.16
+/*!
+ * jQuery UI CSS Framework 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -287,17 +284,17 @@
/* Overlays */
.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
-.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
- * jQuery UI Resizable 1.8.16
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*!
+ * jQuery UI Resizable 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizable#theming
*/
.ui-resizable { position: relative;}
-.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
+.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
@@ -306,20 +303,20 @@
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
-.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
- * jQuery UI Selectable 1.8.16
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
+ * jQuery UI Selectable 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectable#theming
*/
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
-/*
- * jQuery UI Accordion 1.8.16
+/*!
+ * jQuery UI Accordion 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -335,10 +332,10 @@
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
.ui-accordion .ui-accordion-content-active { display: block; }
-/*
- * jQuery UI Autocomplete 1.8.16
+/*!
+ * jQuery UI Autocomplete 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -350,7 +347,7 @@
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
/*
- * jQuery UI Menu 1.8.16
+ * jQuery UI Menu 1.8.24
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
@@ -388,10 +385,10 @@
font-weight: normal;
margin: -1px;
}
-/*
- * jQuery UI Button 1.8.16
+/*!
+ * jQuery UI Button 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -426,10 +423,10 @@ input.ui-button { padding: .4em 1em; }
/* workarounds */
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
-/*
- * jQuery UI Dialog 1.8.16
+/*!
+ * jQuery UI Dialog 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -447,10 +444,10 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
.ui-draggable .ui-dialog-titlebar { cursor: move; }
-/*
- * jQuery UI Slider 1.8.16
+/*!
+ * jQuery UI Slider 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -470,10 +467,10 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
-.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
- * jQuery UI Tabs 1.8.16
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
+ * jQuery UI Tabs 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -488,10 +485,10 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
.ui-tabs .ui-tabs-hide { display: none !important; }
-/*
- * jQuery UI Datepicker 1.8.16
+/*!
+ * jQuery UI Datepicker 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
@@ -546,8 +543,6 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
- display: none; /*sorry for IE5*/
- display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
@@ -555,14 +550,14 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
-}/*
- * jQuery UI Progressbar 1.8.16
+}/*!
+ * jQuery UI Progressbar 1.8.24
*
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar#theming
*/
-.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/examples/example-checkbox-row-select.html b/examples/example-checkbox-row-select.html
index 4ad6e9be0..67ea0cad8 100644
--- a/examples/example-checkbox-row-select.html
+++ b/examples/example-checkbox-row-select.html
@@ -3,7 +3,7 @@
-
+
+
+
+
+
+
+
+
Demonstrates:
+
+ - Virtual scrolling on both rows and columns.
+ - Select a range of cells with a mouse
+ - Use Ctrl-C and Ctrl-V keyboard shortcuts to cut and paste cells
+ - Use Esc to cancel a copy and paste operation
+ - Edit the cell and select a cell range to paste the range
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+