slickgrid-bootstrap-rails 0.0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. data/.gitignore +34 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +158 -0
  5. data/Rakefile +1 -0
  6. data/lib/slickgrid-bootstrap-rails/version.rb +7 -0
  7. data/lib/slickgrid-bootstrap-rails.rb +11 -0
  8. data/slickgrid-bootstrap-rails.gemspec +21 -0
  9. data/vendor/assets/images/actions.gif +0 -0
  10. data/vendor/assets/images/ajax-loader-small.gif +0 -0
  11. data/vendor/assets/images/arrow_redo.png +0 -0
  12. data/vendor/assets/images/arrow_right_peppermint.png +0 -0
  13. data/vendor/assets/images/arrow_right_spearmint.png +0 -0
  14. data/vendor/assets/images/arrow_undo.png +0 -0
  15. data/vendor/assets/images/bullet_blue.png +0 -0
  16. data/vendor/assets/images/bullet_star.png +0 -0
  17. data/vendor/assets/images/bullet_toggle_minus.png +0 -0
  18. data/vendor/assets/images/bullet_toggle_plus.png +0 -0
  19. data/vendor/assets/images/calendar.gif +0 -0
  20. data/vendor/assets/images/collapse.gif +0 -0
  21. data/vendor/assets/images/comment_yellow.gif +0 -0
  22. data/vendor/assets/images/down.gif +0 -0
  23. data/vendor/assets/images/drag-handle.png +0 -0
  24. data/vendor/assets/images/editor-helper-bg.gif +0 -0
  25. data/vendor/assets/images/expand.gif +0 -0
  26. data/vendor/assets/images/header-bg.gif +0 -0
  27. data/vendor/assets/images/header-columns-bg.gif +0 -0
  28. data/vendor/assets/images/header-columns-over-bg.gif +0 -0
  29. data/vendor/assets/images/help.png +0 -0
  30. data/vendor/assets/images/info.gif +0 -0
  31. data/vendor/assets/images/listview.gif +0 -0
  32. data/vendor/assets/images/pencil.gif +0 -0
  33. data/vendor/assets/images/row-over-bg.gif +0 -0
  34. data/vendor/assets/images/sort-asc.gif +0 -0
  35. data/vendor/assets/images/sort-asc.png +0 -0
  36. data/vendor/assets/images/sort-desc.gif +0 -0
  37. data/vendor/assets/images/sort-desc.png +0 -0
  38. data/vendor/assets/images/stripes.png +0 -0
  39. data/vendor/assets/images/tag_red.png +0 -0
  40. data/vendor/assets/images/tick.png +0 -0
  41. data/vendor/assets/images/user_identity.gif +0 -0
  42. data/vendor/assets/images/user_identity_plus.gif +0 -0
  43. data/vendor/assets/javascripts/bootstrap/slick.bootstrap.js +86 -0
  44. data/vendor/assets/javascripts/plugins/slick.autotooltips.js +48 -0
  45. data/vendor/assets/javascripts/plugins/slick.cellcopymanager.js +86 -0
  46. data/vendor/assets/javascripts/plugins/slick.cellrangedecorator.js +64 -0
  47. data/vendor/assets/javascripts/plugins/slick.cellrangeselector.js +111 -0
  48. data/vendor/assets/javascripts/plugins/slick.cellselectionmodel.js +92 -0
  49. data/vendor/assets/javascripts/plugins/slick.checkboxselectcolumn.js +153 -0
  50. data/vendor/assets/javascripts/plugins/slick.headerbuttons.js +177 -0
  51. data/vendor/assets/javascripts/plugins/slick.headermenu.js +272 -0
  52. data/vendor/assets/javascripts/plugins/slick.rowmovemanager.js +138 -0
  53. data/vendor/assets/javascripts/plugins/slick.rowselectionmodel.js +187 -0
  54. data/vendor/assets/javascripts/slick.core.js +430 -0
  55. data/vendor/assets/javascripts/slick.dataview.js +917 -0
  56. data/vendor/assets/javascripts/slick.editors.js.erb +512 -0
  57. data/vendor/assets/javascripts/slick.formatters.js.erb +55 -0
  58. data/vendor/assets/javascripts/slick.grid.js +3294 -0
  59. data/vendor/assets/javascripts/slick.groupitemmetadataprovider.js +139 -0
  60. data/vendor/assets/javascripts/slick.remotemodel.js +164 -0
  61. data/vendor/assets/javascripts/slickgrid-bootstrap-rails.js +13 -0
  62. data/vendor/assets/stylesheets/plugins/slick.headerbuttons.css +38 -0
  63. data/vendor/assets/stylesheets/plugins/slick.headermenu.css +58 -0
  64. data/vendor/assets/stylesheets/slick.grid.css.erb +157 -0
  65. data/vendor/assets/stylesheets/slickgrid-bootstrap-rails.css +4 -0
  66. data/vendor/assets/stylesheets/slickgrid-bootstrap.less +159 -0
  67. metadata +143 -0
@@ -0,0 +1,139 @@
1
+ (function ($) {
2
+ $.extend(true, window, {
3
+ Slick: {
4
+ Data: {
5
+ GroupItemMetadataProvider: GroupItemMetadataProvider
6
+ }
7
+ }
8
+ });
9
+
10
+
11
+ /***
12
+ * Provides item metadata for group (Slick.Group) and totals (Slick.Totals) rows produced by the DataView.
13
+ * This metadata overrides the default behavior and formatting of those rows so that they appear and function
14
+ * correctly when processed by the grid.
15
+ *
16
+ * This class also acts as a grid plugin providing event handlers to expand & collapse groups.
17
+ * If "grid.registerPlugin(...)" is not called, expand & collapse will not work.
18
+ *
19
+ * @class GroupItemMetadataProvider
20
+ * @module Data
21
+ * @namespace Slick.Data
22
+ * @constructor
23
+ * @param options
24
+ */
25
+ function GroupItemMetadataProvider(options) {
26
+ var _grid;
27
+ var _defaults = {
28
+ groupCssClass: "slick-group",
29
+ totalsCssClass: "slick-group-totals",
30
+ groupFocusable: true,
31
+ totalsFocusable: false,
32
+ toggleCssClass: "slick-group-toggle",
33
+ toggleExpandedCssClass: "expanded",
34
+ toggleCollapsedCssClass: "collapsed",
35
+ enableExpandCollapse: true
36
+ };
37
+
38
+ options = $.extend(true, {}, _defaults, options);
39
+
40
+
41
+ function defaultGroupCellFormatter(row, cell, value, columnDef, item) {
42
+ if (!options.enableExpandCollapse) {
43
+ return item.title;
44
+ }
45
+
46
+ return "<span class='" + options.toggleCssClass + " " +
47
+ (item.collapsed ? options.toggleCollapsedCssClass : options.toggleExpandedCssClass) +
48
+ "'></span>" + item.title;
49
+ }
50
+
51
+ function defaultTotalsCellFormatter(row, cell, value, columnDef, item) {
52
+ return (columnDef.groupTotalsFormatter && columnDef.groupTotalsFormatter(item, columnDef)) || "";
53
+ }
54
+
55
+
56
+ function init(grid) {
57
+ _grid = grid;
58
+ _grid.onClick.subscribe(handleGridClick);
59
+ _grid.onKeyDown.subscribe(handleGridKeyDown);
60
+
61
+ }
62
+
63
+ function destroy() {
64
+ if (_grid) {
65
+ _grid.onClick.unsubscribe(handleGridClick);
66
+ _grid.onKeyDown.unsubscribe(handleGridKeyDown);
67
+ }
68
+ }
69
+
70
+ function handleGridClick(e, args) {
71
+ var item = this.getDataItem(args.row);
72
+ if (item && item instanceof Slick.Group && $(e.target).hasClass(options.toggleCssClass)) {
73
+ if (item.collapsed) {
74
+ this.getData().expandGroup(item.value);
75
+ }
76
+ else {
77
+ this.getData().collapseGroup(item.value);
78
+ }
79
+
80
+ e.stopImmediatePropagation();
81
+ e.preventDefault();
82
+ }
83
+ }
84
+
85
+ // TODO: add -/+ handling
86
+ function handleGridKeyDown(e, args) {
87
+ if (options.enableExpandCollapse && (e.which == $.ui.keyCode.SPACE)) {
88
+ var activeCell = this.getActiveCell();
89
+ if (activeCell) {
90
+ var item = this.getDataItem(activeCell.row);
91
+ if (item && item instanceof Slick.Group) {
92
+ if (item.collapsed) {
93
+ this.getData().expandGroup(item.value);
94
+ }
95
+ else {
96
+ this.getData().collapseGroup(item.value);
97
+ }
98
+
99
+ e.stopImmediatePropagation();
100
+ e.preventDefault();
101
+ }
102
+ }
103
+ }
104
+ }
105
+
106
+ function getGroupRowMetadata(item) {
107
+ return {
108
+ selectable: false,
109
+ focusable: options.groupFocusable,
110
+ cssClasses: options.groupCssClass,
111
+ columns: {
112
+ 0: {
113
+ colspan: "*",
114
+ formatter: defaultGroupCellFormatter,
115
+ editor: null
116
+ }
117
+ }
118
+ };
119
+ }
120
+
121
+ function getTotalsRowMetadata(item) {
122
+ return {
123
+ selectable: false,
124
+ focusable: options.totalsFocusable,
125
+ cssClasses: options.totalsCssClass,
126
+ formatter: defaultTotalsCellFormatter,
127
+ editor: null
128
+ };
129
+ }
130
+
131
+
132
+ return {
133
+ "init": init,
134
+ "destroy": destroy,
135
+ "getGroupRowMetadata": getGroupRowMetadata,
136
+ "getTotalsRowMetadata": getTotalsRowMetadata
137
+ };
138
+ }
139
+ })(jQuery);
@@ -0,0 +1,164 @@
1
+ (function ($) {
2
+ /***
3
+ * A sample AJAX data store implementation.
4
+ * Right now, it's hooked up to load all Apple-related Digg stories, but can
5
+ * easily be extended to support and JSONP-compatible backend that accepts paging parameters.
6
+ */
7
+ function RemoteModel() {
8
+ // private
9
+ var PAGESIZE = 50;
10
+ var data = {length: 0};
11
+ var searchstr = "apple";
12
+ var sortcol = null;
13
+ var sortdir = 1;
14
+ var h_request = null;
15
+ var req = null; // ajax request
16
+
17
+ // events
18
+ var onDataLoading = new Slick.Event();
19
+ var onDataLoaded = new Slick.Event();
20
+
21
+
22
+ function init() {
23
+ }
24
+
25
+
26
+ function isDataLoaded(from, to) {
27
+ for (var i = from; i <= to; i++) {
28
+ if (data[i] == undefined || data[i] == null) {
29
+ return false;
30
+ }
31
+ }
32
+
33
+ return true;
34
+ }
35
+
36
+
37
+ function clear() {
38
+ for (var key in data) {
39
+ delete data[key];
40
+ }
41
+ data.length = 0;
42
+ }
43
+
44
+
45
+ function ensureData(from, to) {
46
+ if (req) {
47
+ req.abort();
48
+ for (var i = req.fromPage; i <= req.toPage; i++)
49
+ data[i * PAGESIZE] = undefined;
50
+ }
51
+
52
+ if (from < 0) {
53
+ from = 0;
54
+ }
55
+
56
+ var fromPage = Math.floor(from / PAGESIZE);
57
+ var toPage = Math.floor(to / PAGESIZE);
58
+
59
+ while (data[fromPage * PAGESIZE] !== undefined && fromPage < toPage)
60
+ fromPage++;
61
+
62
+ while (data[toPage * PAGESIZE] !== undefined && fromPage < toPage)
63
+ toPage--;
64
+
65
+ if (fromPage > toPage || ((fromPage == toPage) && data[fromPage * PAGESIZE] !== undefined)) {
66
+ // TODO: look-ahead
67
+ return;
68
+ }
69
+
70
+ var url = "http://services.digg.com/search/stories?query=" + searchstr + "&offset=" + (fromPage * PAGESIZE) + "&count=" + (((toPage - fromPage) * PAGESIZE) + PAGESIZE) + "&appkey=http://slickgrid.googlecode.com&type=javascript";
71
+
72
+ switch (sortcol) {
73
+ case "diggs":
74
+ url += ("&sort=" + ((sortdir > 0) ? "digg_count-asc" : "digg_count-desc"));
75
+ break;
76
+ }
77
+
78
+ if (h_request != null) {
79
+ clearTimeout(h_request);
80
+ }
81
+
82
+ h_request = setTimeout(function () {
83
+ for (var i = fromPage; i <= toPage; i++)
84
+ data[i * PAGESIZE] = null; // null indicates a 'requested but not available yet'
85
+
86
+ onDataLoading.notify({from: from, to: to});
87
+
88
+ req = $.jsonp({
89
+ url: url,
90
+ callbackParameter: "callback",
91
+ cache: true, // Digg doesn't accept the autogenerated cachebuster param
92
+ success: onSuccess,
93
+ error: function () {
94
+ onError(fromPage, toPage)
95
+ }
96
+ });
97
+ req.fromPage = fromPage;
98
+ req.toPage = toPage;
99
+ }, 50);
100
+ }
101
+
102
+
103
+ function onError(fromPage, toPage) {
104
+ alert("error loading pages " + fromPage + " to " + toPage);
105
+ }
106
+
107
+ function onSuccess(resp) {
108
+ var from = this.fromPage * PAGESIZE, to = from + resp.count;
109
+ data.length = parseInt(resp.total);
110
+
111
+ for (var i = 0; i < resp.stories.length; i++) {
112
+ data[from + i] = resp.stories[i];
113
+ data[from + i].index = from + i;
114
+ }
115
+
116
+ req = null;
117
+
118
+ onDataLoaded.notify({from: from, to: to});
119
+ }
120
+
121
+
122
+ function reloadData(from, to) {
123
+ for (var i = from; i <= to; i++)
124
+ delete data[i];
125
+
126
+ ensureData(from, to);
127
+ }
128
+
129
+
130
+ function setSort(column, dir) {
131
+ sortcol = column;
132
+ sortdir = dir;
133
+ clear();
134
+ }
135
+
136
+ function setSearch(str) {
137
+ searchstr = str;
138
+ clear();
139
+ }
140
+
141
+
142
+ init();
143
+
144
+ return {
145
+ // properties
146
+ "data": data,
147
+
148
+ // methods
149
+ "clear": clear,
150
+ "isDataLoaded": isDataLoaded,
151
+ "ensureData": ensureData,
152
+ "reloadData": reloadData,
153
+ "setSort": setSort,
154
+ "setSearch": setSearch,
155
+
156
+ // events
157
+ "onDataLoading": onDataLoading,
158
+ "onDataLoaded": onDataLoaded
159
+ };
160
+ }
161
+
162
+ // Slick.Data.RemoteModel
163
+ $.extend(true, window, { Slick: { Data: { RemoteModel: RemoteModel }}});
164
+ })(jQuery);
@@ -0,0 +1,13 @@
1
+ //= require jquery-dragdrop-rails
2
+ //= require slick.core
3
+ //= require slick.dataview
4
+ //= require slick.editors
5
+ //= require slick.formatters
6
+ //= require slick.grid
7
+ //= require slick.groupitemmetadataprovider
8
+ //= require slick.remotemodel
9
+ //= require_dir ./plugins
10
+ //= require_dir ./bootstrap
11
+
12
+
13
+
@@ -0,0 +1,38 @@
1
+ .slick-column-name {
2
+ /**
3
+ * This makes all "float:right" elements after it that spill over to the next line
4
+ * display way below the lower boundary of the column thus hiding them.
5
+ */
6
+ display: inline-block;
7
+ float: left;
8
+ margin-bottom: 100px;
9
+ }
10
+
11
+ .slick-header-button {
12
+ display: inline-block;
13
+ float: right;
14
+ vertical-align: top;
15
+ margin: 1px;
16
+ /**
17
+ * This makes all "float:right" elements after it that spill over to the next line
18
+ * display way below the lower boundary of the column thus hiding them.
19
+ */
20
+ margin-bottom: 100px;
21
+ height: 15px;
22
+ width: 15px;
23
+ background-repeat: no-repeat;
24
+ background-position: center center;
25
+ cursor: pointer;
26
+ }
27
+
28
+ .slick-header-button-hidden {
29
+ width: 0;
30
+
31
+ -webkit-transition: 0.2s width;
32
+ -ms-transition: 0.2s width;
33
+ transition: 0.2s width;
34
+ }
35
+
36
+ .slick-header-column:hover > .slick-header-button {
37
+ width: 15px;
38
+ }
@@ -0,0 +1,58 @@
1
+ /* Menu button */
2
+ .slick-header-menubutton {
3
+ position: absolute;
4
+ right: 0;
5
+ top: 0;
6
+ bottom: 0;
7
+ width: 14px;
8
+ background-repeat: no-repeat;
9
+ background-position: left center;
10
+ cursor: pointer;
11
+
12
+ display: none;
13
+ border-left: thin ridge silver;
14
+ }
15
+
16
+ .slick-header-column:hover > .slick-header-menubutton,
17
+ .slick-header-column-active .slick-header-menubutton {
18
+ display: inline-block;
19
+ }
20
+
21
+ /* Menu */
22
+ .slick-header-menu {
23
+ position: absolute;
24
+ display: inline-block;
25
+ margin: 0;
26
+ padding: 2px;
27
+ cursor: default;
28
+ }
29
+
30
+
31
+ /* Menu items */
32
+ .slick-header-menuitem {
33
+ list-style: none;
34
+ margin: 0;
35
+ padding: 0;
36
+ cursor: pointer;
37
+ }
38
+
39
+ .slick-header-menuicon {
40
+ display: inline-block;
41
+ width: 16px;
42
+ height: 16px;
43
+ vertical-align: middle;
44
+ margin-right: 4px;
45
+ background-repeat: no-repeat;
46
+ background-position: center center;
47
+ }
48
+
49
+ .slick-header-menucontent {
50
+ display: inline-block;
51
+ vertical-align: middle;
52
+ }
53
+
54
+
55
+ /* Disabled */
56
+ .slick-header-menuitem-disabled {
57
+ color: silver;
58
+ }
@@ -0,0 +1,157 @@
1
+ /*
2
+ IMPORTANT:
3
+ In order to preserve the uniform grid appearance, all cell styles need to have padding, margin and border sizes.
4
+ No built-in (selected, editable, highlight, flashing, invalid, loading, :focus) or user-specified CSS
5
+ classes should alter those!
6
+ */
7
+
8
+ .slick-header.ui-state-default, .slick-headerrow.ui-state-default {
9
+ width: 100%;
10
+ overflow: hidden;
11
+ border-left: 0px;
12
+ }
13
+
14
+ .slick-header-columns, .slick-headerrow-columns {
15
+ position: relative;
16
+ white-space: nowrap;
17
+ cursor: default;
18
+ overflow: hidden;
19
+ }
20
+
21
+ .slick-header-column.ui-state-default {
22
+ position: relative;
23
+ display: inline-block;
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ height: 16px;
27
+ line-height: 16px;
28
+ margin: 0;
29
+ padding: 4px;
30
+ border-right: 1px solid silver;
31
+ border-left: 0px;
32
+ border-top: 0px;
33
+ border-bottom: 0px;
34
+ float: left;
35
+ }
36
+
37
+ .slick-headerrow-column.ui-state-default {
38
+ padding: 4px;
39
+ }
40
+
41
+ .slick-header-column-sorted {
42
+ font-style: italic;
43
+ }
44
+
45
+ .slick-sort-indicator {
46
+ display: inline-block;
47
+ width: 8px;
48
+ height: 5px;
49
+ margin-left: 4px;
50
+ }
51
+
52
+ .slick-sort-indicator-desc {
53
+ background: url(<%= asset_path 'sort-desc.gif' %>);
54
+ }
55
+
56
+ .slick-sort-indicator-asc {
57
+ background: url(<%= asset_path 'sort-asc.gif' %>);
58
+ }
59
+
60
+ .slick-resizable-handle {
61
+ position: absolute;
62
+ font-size: 0.1px;
63
+ display: block;
64
+ cursor: col-resize;
65
+ width: 4px;
66
+ right: 0px;
67
+ top: 0;
68
+ height: 100%;
69
+ }
70
+
71
+ .slick-sortable-placeholder {
72
+ background: silver;
73
+ }
74
+
75
+ .grid-canvas {
76
+ position: relative;
77
+ outline: 0;
78
+ }
79
+
80
+ .slick-row.ui-widget-content, .slick-row.ui-state-active {
81
+ position: absolute;
82
+ border: 0px;
83
+ width: 100%;
84
+ }
85
+
86
+ .slick-cell, .slick-headerrow-column {
87
+ position: absolute;
88
+
89
+ border: 1px solid transparent;
90
+ border-right: 1px dotted silver;
91
+ border-bottom-color: silver;
92
+
93
+ overflow: hidden;
94
+ text-overflow: ellipsis;
95
+ white-space: nowrap;
96
+ vertical-align: middle;
97
+ z-index: 1;
98
+ padding: 1px 2px 2px 1px;
99
+ margin: 0;
100
+
101
+ white-space: nowrap;
102
+
103
+ cursor: default;
104
+ }
105
+
106
+ .slick-group {
107
+ }
108
+
109
+ .slick-group-toggle {
110
+ display: inline-block;
111
+ }
112
+
113
+ .slick-cell.highlighted {
114
+ background: lightskyblue;
115
+ background: rgba(0, 0, 255, 0.2);
116
+ -webkit-transition: all 0.5s;
117
+ -moz-transition: all 0.5s;
118
+ transition: all 0.5s;
119
+ }
120
+
121
+ .slick-cell.flashing {
122
+ border: 1px solid red !important;
123
+ }
124
+
125
+ .slick-cell.editable {
126
+ z-index: 11;
127
+ overflow: visible;
128
+ background: white;
129
+ border-color: black;
130
+ border-style: solid;
131
+ }
132
+
133
+ .slick-cell:focus {
134
+ outline: none;
135
+ }
136
+
137
+ .slick-reorder-proxy {
138
+ display: inline-block;
139
+ background: blue;
140
+ opacity: 0.15;
141
+ filter: alpha(opacity = 15);
142
+ cursor: move;
143
+ }
144
+
145
+ .slick-reorder-guide {
146
+ display: inline-block;
147
+ height: 2px;
148
+ background: blue;
149
+ opacity: 0.7;
150
+ filter: alpha(opacity = 70);
151
+ }
152
+
153
+ .slick-selection {
154
+ z-index: 10;
155
+ position: absolute;
156
+ border: 2px dashed black;
157
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ *= require slick.grid
3
+ *= require_tree ./plugins
4
+ */