rails_slickgrid 0.0.1 → 0.0.2
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.
- 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
|