slickgrid-bootstrap-rails 0.0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +34 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +158 -0
- data/Rakefile +1 -0
- data/lib/slickgrid-bootstrap-rails/version.rb +7 -0
- data/lib/slickgrid-bootstrap-rails.rb +11 -0
- data/slickgrid-bootstrap-rails.gemspec +21 -0
- data/vendor/assets/images/actions.gif +0 -0
- data/vendor/assets/images/ajax-loader-small.gif +0 -0
- data/vendor/assets/images/arrow_redo.png +0 -0
- data/vendor/assets/images/arrow_right_peppermint.png +0 -0
- data/vendor/assets/images/arrow_right_spearmint.png +0 -0
- data/vendor/assets/images/arrow_undo.png +0 -0
- data/vendor/assets/images/bullet_blue.png +0 -0
- data/vendor/assets/images/bullet_star.png +0 -0
- data/vendor/assets/images/bullet_toggle_minus.png +0 -0
- data/vendor/assets/images/bullet_toggle_plus.png +0 -0
- data/vendor/assets/images/calendar.gif +0 -0
- data/vendor/assets/images/collapse.gif +0 -0
- data/vendor/assets/images/comment_yellow.gif +0 -0
- data/vendor/assets/images/down.gif +0 -0
- data/vendor/assets/images/drag-handle.png +0 -0
- data/vendor/assets/images/editor-helper-bg.gif +0 -0
- data/vendor/assets/images/expand.gif +0 -0
- data/vendor/assets/images/header-bg.gif +0 -0
- data/vendor/assets/images/header-columns-bg.gif +0 -0
- data/vendor/assets/images/header-columns-over-bg.gif +0 -0
- data/vendor/assets/images/help.png +0 -0
- data/vendor/assets/images/info.gif +0 -0
- data/vendor/assets/images/listview.gif +0 -0
- data/vendor/assets/images/pencil.gif +0 -0
- data/vendor/assets/images/row-over-bg.gif +0 -0
- data/vendor/assets/images/sort-asc.gif +0 -0
- data/vendor/assets/images/sort-asc.png +0 -0
- data/vendor/assets/images/sort-desc.gif +0 -0
- data/vendor/assets/images/sort-desc.png +0 -0
- data/vendor/assets/images/stripes.png +0 -0
- data/vendor/assets/images/tag_red.png +0 -0
- data/vendor/assets/images/tick.png +0 -0
- data/vendor/assets/images/user_identity.gif +0 -0
- data/vendor/assets/images/user_identity_plus.gif +0 -0
- data/vendor/assets/javascripts/bootstrap/slick.bootstrap.js +86 -0
- data/vendor/assets/javascripts/plugins/slick.autotooltips.js +48 -0
- data/vendor/assets/javascripts/plugins/slick.cellcopymanager.js +86 -0
- data/vendor/assets/javascripts/plugins/slick.cellrangedecorator.js +64 -0
- data/vendor/assets/javascripts/plugins/slick.cellrangeselector.js +111 -0
- data/vendor/assets/javascripts/plugins/slick.cellselectionmodel.js +92 -0
- data/vendor/assets/javascripts/plugins/slick.checkboxselectcolumn.js +153 -0
- data/vendor/assets/javascripts/plugins/slick.headerbuttons.js +177 -0
- data/vendor/assets/javascripts/plugins/slick.headermenu.js +272 -0
- data/vendor/assets/javascripts/plugins/slick.rowmovemanager.js +138 -0
- data/vendor/assets/javascripts/plugins/slick.rowselectionmodel.js +187 -0
- data/vendor/assets/javascripts/slick.core.js +430 -0
- data/vendor/assets/javascripts/slick.dataview.js +917 -0
- data/vendor/assets/javascripts/slick.editors.js.erb +512 -0
- data/vendor/assets/javascripts/slick.formatters.js.erb +55 -0
- data/vendor/assets/javascripts/slick.grid.js +3294 -0
- data/vendor/assets/javascripts/slick.groupitemmetadataprovider.js +139 -0
- data/vendor/assets/javascripts/slick.remotemodel.js +164 -0
- data/vendor/assets/javascripts/slickgrid-bootstrap-rails.js +13 -0
- data/vendor/assets/stylesheets/plugins/slick.headerbuttons.css +38 -0
- data/vendor/assets/stylesheets/plugins/slick.headermenu.css +58 -0
- data/vendor/assets/stylesheets/slick.grid.css.erb +157 -0
- data/vendor/assets/stylesheets/slickgrid-bootstrap-rails.css +4 -0
- data/vendor/assets/stylesheets/slickgrid-bootstrap.less +159 -0
- metadata +143 -0
data/.gitignore
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
.idea/
|
2
|
+
*.gem
|
3
|
+
*.rbc
|
4
|
+
.bundle
|
5
|
+
.config
|
6
|
+
.yardoc
|
7
|
+
Gemfile.lock
|
8
|
+
InstalledFiles
|
9
|
+
_yardoc
|
10
|
+
coverage
|
11
|
+
doc/
|
12
|
+
lib/bundler/man
|
13
|
+
pkg
|
14
|
+
rdoc
|
15
|
+
spec/reports
|
16
|
+
test/tmp
|
17
|
+
test/version_tmp
|
18
|
+
tmp
|
19
|
+
.DS_Store
|
20
|
+
*.sassc
|
21
|
+
.sass-cache
|
22
|
+
capybara-*.html
|
23
|
+
.rspec
|
24
|
+
/.bundle
|
25
|
+
/vendor/bundle
|
26
|
+
/log/*
|
27
|
+
/tmp/*
|
28
|
+
/db/*.sqlite3
|
29
|
+
/public/system/*
|
30
|
+
/coverage/
|
31
|
+
/spec/tmp/*
|
32
|
+
**.orig
|
33
|
+
rerun.txt
|
34
|
+
pickle-email-*.html
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Aki Atoji
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
# slickgrid-bootstrap-rails
|
2
|
+
|
3
|
+
SlickGrid rails integration with Bootstrap support.
|
4
|
+
|
5
|
+
Integrates mleibman/SlickGrid into your rails app.
|
6
|
+
SlickGrid is a superb editable grid, but integration into Rails was
|
7
|
+
a bit messy and jQuery UI themes didn't always look too great. With this gem,
|
8
|
+
you can
|
9
|
+
|
10
|
+
* Fixes hardcoded pathing in SlickGrid that breaks Rails asset pipeline
|
11
|
+
* Eases jquery.drag.drag/drop integration (with akiatoji/jquery-dragdrop-rails)
|
12
|
+
* Requires less based integration with Bootstrap (with seyhunak/twitter-bootstrap-rails)
|
13
|
+
* Bootstrap styling with minimal markup changes (credits to reeblazs/SlickGrid-touch)
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your application's Gemfile:
|
18
|
+
|
19
|
+
```
|
20
|
+
gem 'slickgrid-bootstrap-rails'
|
21
|
+
```
|
22
|
+
|
23
|
+
Then execute:
|
24
|
+
|
25
|
+
```
|
26
|
+
$ bundle
|
27
|
+
```
|
28
|
+
|
29
|
+
|
30
|
+
## Usage
|
31
|
+
|
32
|
+
Pre-requisite
|
33
|
+
-------------
|
34
|
+
|
35
|
+
SlickGrid uses jQuery UI so you need it in your assets.
|
36
|
+
slickgrid-bootstrap-rails doesn't have any direct support to pull-in jQuery UI.
|
37
|
+
This is so that you can add themed jQuery UI assets yourself.
|
38
|
+
|
39
|
+
Alternatively, you can use joliss/jquery-ui-rails.
|
40
|
+
|
41
|
+
|
42
|
+
In your bootstrap enabled Rails app:
|
43
|
+
====================================
|
44
|
+
|
45
|
+
application.js
|
46
|
+
--------------
|
47
|
+
Bring in SlickGrid
|
48
|
+
```
|
49
|
+
//= require slickgrid-bootstrap-rails
|
50
|
+
```
|
51
|
+
|
52
|
+
application.css
|
53
|
+
---------------
|
54
|
+
Bring in SlickGrid styles
|
55
|
+
|
56
|
+
```
|
57
|
+
/*= slickgrid-bootstrap-rails
|
58
|
+
```
|
59
|
+
|
60
|
+
bootstrap_and_overrides.css.less
|
61
|
+
--------------------------------
|
62
|
+
Enable Bootstrap styling for SlickGrid.
|
63
|
+
|
64
|
+
```
|
65
|
+
@import "slickgrid-bootstrap";
|
66
|
+
```
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
In your HTML
|
72
|
+
-----------------
|
73
|
+
|
74
|
+
```HTML
|
75
|
+
<div id="myGrid" class="bootstrap-slickgrid" style="height: 400px"></div>
|
76
|
+
```
|
77
|
+
|
78
|
+
The class bootstrap-slickgrid applies Bootstrap styling.
|
79
|
+
You can leave it off if you just want jQuery UI theme.
|
80
|
+
|
81
|
+
|
82
|
+
Sample CoffeeScript that populates above grid:
|
83
|
+
|
84
|
+
```coffeescript
|
85
|
+
formatter = (row, cell, value, columnDef, dataContext) ->
|
86
|
+
value
|
87
|
+
grid = undefined
|
88
|
+
data = []
|
89
|
+
columns = [
|
90
|
+
id: "title"
|
91
|
+
name: "Title"
|
92
|
+
field: "title"
|
93
|
+
minWidth: 30
|
94
|
+
formatter: formatter
|
95
|
+
,
|
96
|
+
id: "duration"
|
97
|
+
name: "Duration"
|
98
|
+
field: "duration"
|
99
|
+
minWidth: 30
|
100
|
+
,
|
101
|
+
id: "%"
|
102
|
+
name: "% Complete"
|
103
|
+
field: "percentComplete"
|
104
|
+
width: 100
|
105
|
+
resizable: false
|
106
|
+
formatter: Slick.Formatters.PercentCompleteBar
|
107
|
+
,
|
108
|
+
id: "start"
|
109
|
+
name: "Start"
|
110
|
+
field: "start"
|
111
|
+
minWidth: 60
|
112
|
+
,
|
113
|
+
id: "finish"
|
114
|
+
name: "Finish"
|
115
|
+
field: "finish"
|
116
|
+
minWidth: 60
|
117
|
+
,
|
118
|
+
id: "effort-driven"
|
119
|
+
name: "Effort Driven"
|
120
|
+
sortable: false
|
121
|
+
width: 120
|
122
|
+
minWidth: 60
|
123
|
+
maxWidth: 120
|
124
|
+
cssClass: "cell-effort-driven"
|
125
|
+
field: "effortDriven"
|
126
|
+
formatter: Slick.Formatters.Checkmark
|
127
|
+
]
|
128
|
+
options =
|
129
|
+
enableCellNavigation: true
|
130
|
+
enableColumnReorder: false
|
131
|
+
forceFitColumns: true
|
132
|
+
rowHeight: 35
|
133
|
+
|
134
|
+
$ ->
|
135
|
+
i = 0
|
136
|
+
while i < 5
|
137
|
+
d = (data[i] = {})
|
138
|
+
d["title"] = "<a href='#' tabindex='0'>Task</a> " + i
|
139
|
+
d["duration"] = "5 days"
|
140
|
+
d["percentComplete"] = Math.min(100, Math.round(Math.random() * 110))
|
141
|
+
d["start"] = "01/01/2009"
|
142
|
+
d["finish"] = "01/05/2009"
|
143
|
+
d["effortDriven"] = (i % 5 is 0)
|
144
|
+
i++
|
145
|
+
grid = new Slick.Grid("#myGrid", data, columns, options)
|
146
|
+
```
|
147
|
+
|
148
|
+
## Contributing
|
149
|
+
|
150
|
+
1. Fork it
|
151
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
152
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
153
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
154
|
+
5. Create new Pull Request
|
155
|
+
|
156
|
+
## Credits
|
157
|
+
|
158
|
+
Bootstrap integration is from reeblazs/SlickGrid-touch
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'slickgrid-bootstrap-rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "slickgrid-bootstrap-rails"
|
8
|
+
gem.version = Slickgrid::Bootstrap::Rails::VERSION
|
9
|
+
gem.authors = ["Aki Atoji"]
|
10
|
+
gem.email = ["akiatoji@gmail.com"]
|
11
|
+
gem.description = %q{Rails 3.x integration of SlickGrid with Bootstrap}
|
12
|
+
gem.summary = %q{Rails 3.x integration of SlickGrid with Bootstrap}
|
13
|
+
gem.homepage = "http://github.com/akiatoji/slickgrid-bootstrap-rails"
|
14
|
+
|
15
|
+
gem.add_dependency "railties", "~> 3.0"
|
16
|
+
gem.add_dependency "jquery-dragdrop-rails"
|
17
|
+
gem.files = `git ls-files`.split($/)
|
18
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
19
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
20
|
+
gem.require_paths = ["lib"]
|
21
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,86 @@
|
|
1
|
+
|
2
|
+
(function ($) {
|
3
|
+
|
4
|
+
"use strict"; // jshint ;_;
|
5
|
+
|
6
|
+
/*global Slick: true*/
|
7
|
+
|
8
|
+
/* SlickGrid PUBLIC CLASS DEFINITION
|
9
|
+
* ================================= */
|
10
|
+
|
11
|
+
var SlickGrid = function ( element, options ) {
|
12
|
+
element = $(element);
|
13
|
+
var cookedOptions = $.extend(true, {},
|
14
|
+
$.fn.slickgrid.defaults, options);
|
15
|
+
this.init('slickgrid', element, cookedOptions);
|
16
|
+
};
|
17
|
+
|
18
|
+
SlickGrid.prototype = {
|
19
|
+
|
20
|
+
constructor: SlickGrid,
|
21
|
+
|
22
|
+
init: function (type, element, options) {
|
23
|
+
var self = this;
|
24
|
+
this.element = $(element);
|
25
|
+
this.wrapperOptions = options;
|
26
|
+
this.postInit();
|
27
|
+
},
|
28
|
+
|
29
|
+
postInit: function () {
|
30
|
+
// Call the provided hook to post-process.
|
31
|
+
(this.wrapperOptions.handleCreate || this.handleCreate).apply(this);
|
32
|
+
},
|
33
|
+
|
34
|
+
handleCreate: function () {
|
35
|
+
// Create a simple grid configuration.
|
36
|
+
//
|
37
|
+
// This handler will run after the options
|
38
|
+
// have been preprocessed. It can be overridden by passing
|
39
|
+
// the handleCreate option at creation time.
|
40
|
+
//
|
41
|
+
// Variables you can access from this handler:
|
42
|
+
//
|
43
|
+
// this: will equal to the SlickGrid object instance
|
44
|
+
// this.element: the element to bind the grid to
|
45
|
+
// this.wrapperOptions: options passed to this object at creation
|
46
|
+
//
|
47
|
+
// this.wrapperOptions.slickGridOptions: options for Slick.Grid
|
48
|
+
//
|
49
|
+
var o = this.wrapperOptions;
|
50
|
+
var grid = new Slick.Grid(this.element, o.data,
|
51
|
+
o.columns, o.slickGridOptions);
|
52
|
+
}
|
53
|
+
|
54
|
+
};
|
55
|
+
|
56
|
+
/* SlickGrid PLUGIN DEFINITION */
|
57
|
+
|
58
|
+
$.fn.slickgrid = function (option) {
|
59
|
+
return this.each(function () {
|
60
|
+
var $this = $(this),
|
61
|
+
data = $this.data('slickgrid'),
|
62
|
+
options = typeof option == 'object' && option;
|
63
|
+
if (!data) {
|
64
|
+
$this.data('slickgrid', (data = new SlickGrid(this, options)));
|
65
|
+
}
|
66
|
+
if (typeof option == 'string') {
|
67
|
+
data[option]();
|
68
|
+
}
|
69
|
+
});
|
70
|
+
};
|
71
|
+
|
72
|
+
$.fn.slickgrid.Constructor = SlickGrid;
|
73
|
+
|
74
|
+
$.fn.slickgrid.defaults = {
|
75
|
+
slickGridOptions: {},
|
76
|
+
columns: [], // Column meta data in SlickGrid's format.
|
77
|
+
handleCreate: null // This handler is called after the grid is created,
|
78
|
+
// and it can be used to customize the grid.
|
79
|
+
// Variables you can access from this handler:
|
80
|
+
//
|
81
|
+
// this: will equal to the SlickGrid object instance
|
82
|
+
// this.element: the element to bind the grid to
|
83
|
+
// this.wrapperOptions: options passed to this object at creation
|
84
|
+
};
|
85
|
+
|
86
|
+
})(window.jQuery);
|
@@ -0,0 +1,48 @@
|
|
1
|
+
(function ($) {
|
2
|
+
// register namespace
|
3
|
+
$.extend(true, window, {
|
4
|
+
"Slick": {
|
5
|
+
"AutoTooltips": AutoTooltips
|
6
|
+
}
|
7
|
+
});
|
8
|
+
|
9
|
+
|
10
|
+
function AutoTooltips(options) {
|
11
|
+
var _grid;
|
12
|
+
var _self = this;
|
13
|
+
var _defaults = {
|
14
|
+
maxToolTipLength: null
|
15
|
+
};
|
16
|
+
|
17
|
+
function init(grid) {
|
18
|
+
options = $.extend(true, {}, _defaults, options);
|
19
|
+
_grid = grid;
|
20
|
+
_grid.onMouseEnter.subscribe(handleMouseEnter);
|
21
|
+
}
|
22
|
+
|
23
|
+
function destroy() {
|
24
|
+
_grid.onMouseEnter.unsubscribe(handleMouseEnter);
|
25
|
+
}
|
26
|
+
|
27
|
+
function handleMouseEnter(e, args) {
|
28
|
+
var cell = _grid.getCellFromEvent(e);
|
29
|
+
if (cell) {
|
30
|
+
var node = _grid.getCellNode(cell.row, cell.cell);
|
31
|
+
if ($(node).innerWidth() < node.scrollWidth) {
|
32
|
+
var text = $.trim($(node).text());
|
33
|
+
if (options.maxToolTipLength && text.length > options.maxToolTipLength) {
|
34
|
+
text = text.substr(0, options.maxToolTipLength - 3) + "...";
|
35
|
+
}
|
36
|
+
$(node).attr("title", text);
|
37
|
+
} else {
|
38
|
+
$(node).attr("title", "");
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
$.extend(this, {
|
44
|
+
"init": init,
|
45
|
+
"destroy": destroy
|
46
|
+
});
|
47
|
+
}
|
48
|
+
})(jQuery);
|
@@ -0,0 +1,86 @@
|
|
1
|
+
(function ($) {
|
2
|
+
// register namespace
|
3
|
+
$.extend(true, window, {
|
4
|
+
"Slick": {
|
5
|
+
"CellCopyManager": CellCopyManager
|
6
|
+
}
|
7
|
+
});
|
8
|
+
|
9
|
+
|
10
|
+
function CellCopyManager() {
|
11
|
+
var _grid;
|
12
|
+
var _self = this;
|
13
|
+
var _copiedRanges;
|
14
|
+
|
15
|
+
function init(grid) {
|
16
|
+
_grid = grid;
|
17
|
+
_grid.onKeyDown.subscribe(handleKeyDown);
|
18
|
+
}
|
19
|
+
|
20
|
+
function destroy() {
|
21
|
+
_grid.onKeyDown.unsubscribe(handleKeyDown);
|
22
|
+
}
|
23
|
+
|
24
|
+
function handleKeyDown(e, args) {
|
25
|
+
var ranges;
|
26
|
+
if (!_grid.getEditorLock().isActive()) {
|
27
|
+
if (e.which == $.ui.keyCode.ESCAPE) {
|
28
|
+
if (_copiedRanges) {
|
29
|
+
e.preventDefault();
|
30
|
+
clearCopySelection();
|
31
|
+
_self.onCopyCancelled.notify({ranges: _copiedRanges});
|
32
|
+
_copiedRanges = null;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
if (e.which == 67 && (e.ctrlKey || e.metaKey)) {
|
37
|
+
ranges = _grid.getSelectionModel().getSelectedRanges();
|
38
|
+
if (ranges.length != 0) {
|
39
|
+
e.preventDefault();
|
40
|
+
_copiedRanges = ranges;
|
41
|
+
markCopySelection(ranges);
|
42
|
+
_self.onCopyCells.notify({ranges: ranges});
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
if (e.which == 86 && (e.ctrlKey || e.metaKey)) {
|
47
|
+
if (_copiedRanges) {
|
48
|
+
e.preventDefault();
|
49
|
+
clearCopySelection();
|
50
|
+
ranges = _grid.getSelectionModel().getSelectedRanges();
|
51
|
+
_self.onPasteCells.notify({from: _copiedRanges, to: ranges});
|
52
|
+
_copiedRanges = null;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
}
|
57
|
+
|
58
|
+
function markCopySelection(ranges) {
|
59
|
+
var columns = _grid.getColumns();
|
60
|
+
var hash = {};
|
61
|
+
for (var i = 0; i < ranges.length; i++) {
|
62
|
+
for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {
|
63
|
+
hash[j] = {};
|
64
|
+
for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {
|
65
|
+
hash[j][columns[k].id] = "copied";
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
_grid.setCellCssStyles("copy-manager", hash);
|
70
|
+
}
|
71
|
+
|
72
|
+
function clearCopySelection() {
|
73
|
+
_grid.removeCellCssStyles("copy-manager");
|
74
|
+
}
|
75
|
+
|
76
|
+
$.extend(this, {
|
77
|
+
"init": init,
|
78
|
+
"destroy": destroy,
|
79
|
+
"clearCopySelection": clearCopySelection,
|
80
|
+
|
81
|
+
"onCopyCells": new Slick.Event(),
|
82
|
+
"onCopyCancelled": new Slick.Event(),
|
83
|
+
"onPasteCells": new Slick.Event()
|
84
|
+
});
|
85
|
+
}
|
86
|
+
})(jQuery);
|
@@ -0,0 +1,64 @@
|
|
1
|
+
(function ($) {
|
2
|
+
// register namespace
|
3
|
+
$.extend(true, window, {
|
4
|
+
"Slick": {
|
5
|
+
"CellRangeDecorator": CellRangeDecorator
|
6
|
+
}
|
7
|
+
});
|
8
|
+
|
9
|
+
/***
|
10
|
+
* Displays an overlay on top of a given cell range.
|
11
|
+
*
|
12
|
+
* TODO:
|
13
|
+
* Currently, it blocks mouse events to DOM nodes behind it.
|
14
|
+
* Use FF and WebKit-specific "pointer-events" CSS style, or some kind of event forwarding.
|
15
|
+
* Could also construct the borders separately using 4 individual DIVs.
|
16
|
+
*
|
17
|
+
* @param {Grid} grid
|
18
|
+
* @param {Object} options
|
19
|
+
*/
|
20
|
+
function CellRangeDecorator(grid, options) {
|
21
|
+
var _elem;
|
22
|
+
var _defaults = {
|
23
|
+
selectionCss: {
|
24
|
+
"zIndex": "9999",
|
25
|
+
"border": "2px dashed red"
|
26
|
+
}
|
27
|
+
};
|
28
|
+
|
29
|
+
options = $.extend(true, {}, _defaults, options);
|
30
|
+
|
31
|
+
|
32
|
+
function show(range) {
|
33
|
+
if (!_elem) {
|
34
|
+
_elem = $("<div></div>", {css: options.selectionCss})
|
35
|
+
.css("position", "absolute")
|
36
|
+
.appendTo(grid.getCanvasNode());
|
37
|
+
}
|
38
|
+
|
39
|
+
var from = grid.getCellNodeBox(range.fromRow, range.fromCell);
|
40
|
+
var to = grid.getCellNodeBox(range.toRow, range.toCell);
|
41
|
+
|
42
|
+
_elem.css({
|
43
|
+
top: from.top - 1,
|
44
|
+
left: from.left - 1,
|
45
|
+
height: to.bottom - from.top - 2,
|
46
|
+
width: to.right - from.left - 2
|
47
|
+
});
|
48
|
+
|
49
|
+
return _elem;
|
50
|
+
}
|
51
|
+
|
52
|
+
function hide() {
|
53
|
+
if (_elem) {
|
54
|
+
_elem.remove();
|
55
|
+
_elem = null;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
$.extend(this, {
|
60
|
+
"show": show,
|
61
|
+
"hide": hide
|
62
|
+
});
|
63
|
+
}
|
64
|
+
})(jQuery);
|