rails_slickgrid 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +15 -1
- data/Rakefile +7 -0
- data/lib/generators/rails_slickgrid/install/javascripts/jquery.event.drag-2.0.min.js +6 -0
- data/lib/rails_slickgrid/action_view.rb +28 -1
- data/lib/rails_slickgrid/templates/grid.coffee +20 -0
- data/lib/rails_slickgrid/templates/grid.js +8 -0
- data/lib/rails_slickgrid/version.rb +1 -1
- metadata +6 -3
data/README.md
CHANGED
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
Rails Slickgrid is an effort to make the fast javascript grid/spreadsheet [SlickGrid](https://github.com/mleibman/SlickGrid) easier to use in rails.
|
4
4
|
|
5
|
-
|
5
|
+
## What It Can Do
|
6
|
+
1. Generates the static assets for slickgrid into your public directory
|
7
|
+
2. Provides a method to include these assets in your layout
|
8
|
+
3. Generates a slickgrid from an array of hashes
|
6
9
|
|
7
10
|
## Installation
|
8
11
|
|
@@ -11,6 +14,16 @@ It currently only generates the static assets into your `javascripts` and `style
|
|
11
14
|
3. `rails generate rails_slickgrid:install`
|
12
15
|
4. In your layout or view call `slickgrid_assets`
|
13
16
|
|
17
|
+
|
18
|
+
## SlickGrid Dependencies
|
19
|
+
|
20
|
+
1. You need to have jQuery loaded
|
21
|
+
2. You need to have jQuery UI as SlickGrid uses it
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
After installing, in your view simply `slickgrid(data)` where data is an array of hashes.
|
26
|
+
|
14
27
|
## TODO
|
15
28
|
1. Automatic grid generation
|
16
29
|
2. Column Detection
|
@@ -21,4 +34,5 @@ It currently only generates the static assets into your `javascripts` and `style
|
|
21
34
|
## Copyright
|
22
35
|
|
23
36
|
SlickGrid itself is Copyright (c) 2010 Michael Leibman, http://github.com/mleibman/slickgrid
|
37
|
+
|
24
38
|
Rails Slickgrid is Copyright (c) 2011 Joe Martinez, https://github.com/capitalist/rails_slickgrid
|
data/Rakefile
CHANGED
@@ -56,3 +56,10 @@ task :download_slickgrid do
|
|
56
56
|
RailsSlickgrid::Utils.curl url, '-o', path.gsub(/:name/,url.split('/').last)
|
57
57
|
end
|
58
58
|
end
|
59
|
+
|
60
|
+
desc 'Convert coffee scripts in templates to js'
|
61
|
+
task :brew_coffee do
|
62
|
+
Dir.glob('**/*.coffee').each do |fn|
|
63
|
+
`coffee --bare -c #{fn}`
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
/*!
|
2
|
+
* jquery.event.drag - v 2.0.0
|
3
|
+
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
|
4
|
+
* Open Source MIT License - http://threedubmedia.com/code/license
|
5
|
+
*/
|
6
|
+
;(function(f){f.fn.drag=function(b,a,d){var e=typeof b=="string"?b:"",k=f.isFunction(b)?b:f.isFunction(a)?a:null;if(e.indexOf("drag")!==0)e="drag"+e;d=(b==k?a:d)||{};return k?this.bind(e,d,k):this.trigger(e)};var i=f.event,h=i.special,c=h.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",livekey:"livedrag",add:function(b){var a=f.data(this,c.datakey),d=b.data||{};a.related+=1;if(!a.live&&b.selector){a.live=true;i.add(this,"draginit."+ c.livekey,c.delegate)}f.each(c.defaults,function(e){if(d[e]!==undefined)a[e]=d[e]})},remove:function(){f.data(this,c.datakey).related-=1},setup:function(){if(!f.data(this,c.datakey)){var b=f.extend({related:0},c.defaults);f.data(this,c.datakey,b);i.add(this,"mousedown",c.init,b);this.attachEvent&&this.attachEvent("ondragstart",c.dontstart)}},teardown:function(){if(!f.data(this,c.datakey).related){f.removeData(this,c.datakey);i.remove(this,"mousedown",c.init);i.remove(this,"draginit",c.delegate);c.textselect(true); this.detachEvent&&this.detachEvent("ondragstart",c.dontstart)}},init:function(b){var a=b.data,d;if(!(a.which>0&&b.which!=a.which))if(!f(b.target).is(a.not))if(!(a.handle&&!f(b.target).closest(a.handle,b.currentTarget).length)){a.propagates=1;a.interactions=[c.interaction(this,a)];a.target=b.target;a.pageX=b.pageX;a.pageY=b.pageY;a.dragging=null;d=c.hijack(b,"draginit",a);if(a.propagates){if((d=c.flatten(d))&&d.length){a.interactions=[];f.each(d,function(){a.interactions.push(c.interaction(this,a))})}a.propagates= a.interactions.length;a.drop!==false&&h.drop&&h.drop.handler(b,a);c.textselect(false);i.add(document,"mousemove mouseup",c.handler,a);return false}}},interaction:function(b,a){return{drag:b,callback:new c.callback,droppable:[],offset:f(b)[a.relative?"position":"offset"]()||{top:0,left:0}}},handler:function(b){var a=b.data;switch(b.type){case !a.dragging&&"mousemove":if(Math.pow(b.pageX-a.pageX,2)+Math.pow(b.pageY-a.pageY,2)<Math.pow(a.distance,2))break;b.target=a.target;c.hijack(b,"dragstart",a); if(a.propagates)a.dragging=true;case "mousemove":if(a.dragging){c.hijack(b,"drag",a);if(a.propagates){a.drop!==false&&h.drop&&h.drop.handler(b,a);break}b.type="mouseup"}case "mouseup":i.remove(document,"mousemove mouseup",c.handler);if(a.dragging){a.drop!==false&&h.drop&&h.drop.handler(b,a);c.hijack(b,"dragend",a)}c.textselect(true);if(a.click===false&&a.dragging){jQuery.event.triggered=true;setTimeout(function(){jQuery.event.triggered=false},20);a.dragging=false}break}},delegate:function(b){var a= [],d,e=f.data(this,"events")||{};f.each(e.live||[],function(k,j){if(j.preType.indexOf("drag")===0)if(d=f(b.target).closest(j.selector,b.currentTarget)[0]){i.add(d,j.origType+"."+c.livekey,j.origHandler,j.data);f.inArray(d,a)<0&&a.push(d)}});if(!a.length)return false;return f(a).bind("dragend."+c.livekey,function(){i.remove(this,"."+c.livekey)})},hijack:function(b,a,d,e,k){if(d){var j={event:b.originalEvent,type:b.type},n=a.indexOf("drop")?"drag":"drop",l,o=e||0,g,m;e=!isNaN(e)?e:d.interactions.length; b.type=a;b.originalEvent=null;d.results=[];do if(g=d.interactions[o])if(!(a!=="dragend"&&g.cancelled)){m=c.properties(b,d,g);g.results=[];f(k||g[n]||d.droppable).each(function(q,p){l=(m.target=p)?i.handle.call(p,b,m):null;if(l===false){if(n=="drag"){g.cancelled=true;d.propagates-=1}if(a=="drop")g[n][q]=null}else if(a=="dropinit")g.droppable.push(c.element(l)||p);if(a=="dragstart")g.proxy=f(c.element(l)||g.drag)[0];g.results.push(l);delete b.result;if(a!=="dropinit")return l});d.results[o]=c.flatten(g.results); if(a=="dropinit")g.droppable=c.flatten(g.droppable);a=="dragstart"&&!g.cancelled&&m.update()}while(++o<e);b.type=j.type;b.originalEvent=j.event;return c.flatten(d.results)}},properties:function(b,a,d){var e=d.callback;e.drag=d.drag;e.proxy=d.proxy||d.drag;e.startX=a.pageX;e.startY=a.pageY;e.deltaX=b.pageX-a.pageX;e.deltaY=b.pageY-a.pageY;e.originalX=d.offset.left;e.originalY=d.offset.top;e.offsetX=b.pageX-(a.pageX-e.originalX);e.offsetY=b.pageY-(a.pageY-e.originalY);e.drop=c.flatten((d.drop||[]).slice()); e.available=c.flatten((d.droppable||[]).slice());return e},element:function(b){if(b&&(b.jquery||b.nodeType==1))return b},flatten:function(b){return f.map(b,function(a){return a&&a.jquery?f.makeArray(a):a&&a.length?c.flatten(a):a})},textselect:function(b){f(document)[b?"unbind":"bind"]("selectstart",c.dontstart).attr("unselectable",b?"off":"on").css("MozUserSelect",b?"":"none")},dontstart:function(){return false},callback:function(){}};c.callback.prototype={update:function(){h.drop&&this.available.length&& f.each(this.available,function(b){h.drop.locate(this,b)})}};h.draginit=h.dragstart=h.dragend=c})(jQuery);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RailsSlickgrid
|
2
2
|
module ActionView
|
3
3
|
STYLESHEETS = %w(slick.columnpicker slick.grid slick.pager)
|
4
|
-
JAVASCRIPTS = %w(slick.columnpicker slick.editors slick.model slick.pager slick.grid)
|
4
|
+
JAVASCRIPTS = %w(jquery.event.drag-2.0.min slick.columnpicker slick.editors slick.model slick.pager slick.grid)
|
5
5
|
|
6
6
|
def slickgrid_assets
|
7
7
|
(slickgrid_stylesheets + slickgrid_javascripts).html_safe
|
@@ -18,5 +18,32 @@ module RailsSlickgrid
|
|
18
18
|
javascript_include_tag("slickgrid/#{ss}")
|
19
19
|
end.join("\n")
|
20
20
|
end
|
21
|
+
|
22
|
+
def slickgrid(data)
|
23
|
+
(slickgrid_div + slickgrid_script(data)).html_safe
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def slickgrid_div
|
28
|
+
content_tag(:div, ' '.html_safe, :id => 'slickgrid', :style => 'width: 400px; height: 400px')
|
29
|
+
end
|
30
|
+
|
31
|
+
def slickgrid_script(data)
|
32
|
+
content_tag(:script, slickgrid_function(data).html_safe , :type => 'text/javascript')
|
33
|
+
end
|
34
|
+
|
35
|
+
def slickgrid_function(data)
|
36
|
+
"\n" +
|
37
|
+
File.read( File.expand_path("../templates/grid.js", __FILE__) ).
|
38
|
+
gsub(/\'COLUMNS_MARKER\'/,columns_from_data(data)).
|
39
|
+
gsub(/\'DATA_MARKER\'/, data.to_json) +
|
40
|
+
"\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
def columns_from_data(data)
|
44
|
+
data.first.keys.collect do |kee|
|
45
|
+
{:id => kee, :name => kee.to_s.humanize, :field => kee}
|
46
|
+
end.to_json
|
47
|
+
end
|
21
48
|
end
|
22
49
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$ () ->
|
2
|
+
grid = new Slick.Grid(
|
3
|
+
$("#slickgrid"),
|
4
|
+
'DATA_MARKER',
|
5
|
+
'COLUMNS_MARKER',
|
6
|
+
enableCellNavigation: false, enableColumnReorder: false
|
7
|
+
)
|
8
|
+
$("#slickgrid").show()
|
9
|
+
#$.getJSON '/admin/users', {}, (results) ->
|
10
|
+
#users = (result.user for result in results)
|
11
|
+
#columns = [
|
12
|
+
#{id:"email", name:"Email", field:"email"},
|
13
|
+
#{id:"first_name", name:"First Name", field:"first_name"},
|
14
|
+
#]
|
15
|
+
#options = enableCellNavigation: false, enableColumnReorder: false
|
16
|
+
#dataView = new Slick.Data.DataView()
|
17
|
+
#grid = new Slick.Grid($("#myGrid"), dataView.rows, columns, options);
|
18
|
+
#var pager = new Slick.Controls.Pager(dataView, grid, $("#pager"));
|
19
|
+
#var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options);
|
20
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_slickgrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joe Martinez
|
@@ -29,6 +29,7 @@ extra_rdoc_files: []
|
|
29
29
|
|
30
30
|
files:
|
31
31
|
- lib/generators/rails_slickgrid/install/install_generator.rb
|
32
|
+
- lib/generators/rails_slickgrid/install/javascripts/jquery.event.drag-2.0.min.js
|
32
33
|
- lib/generators/rails_slickgrid/install/javascripts/slick.columnpicker.js
|
33
34
|
- lib/generators/rails_slickgrid/install/javascripts/slick.editors.js
|
34
35
|
- lib/generators/rails_slickgrid/install/javascripts/slick.grid.js
|
@@ -39,6 +40,8 @@ files:
|
|
39
40
|
- lib/generators/rails_slickgrid/install/stylesheets/slick.pager.css
|
40
41
|
- lib/rails_slickgrid/action_view.rb
|
41
42
|
- lib/rails_slickgrid/railtie.rb
|
43
|
+
- lib/rails_slickgrid/templates/grid.coffee
|
44
|
+
- lib/rails_slickgrid/templates/grid.js
|
42
45
|
- lib/rails_slickgrid/utils.rb
|
43
46
|
- lib/rails_slickgrid/version.rb
|
44
47
|
- lib/rails_slickgrid.rb
|