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 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
- It currently only generates the static assets into your `javascripts` and `stylesheets` but automatic grid generation is under development.
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, '&nbsp;'.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
+
@@ -0,0 +1,8 @@
1
+ $(function() {
2
+ var grid;
3
+ grid = new Slick.Grid($("#slickgrid"), 'DATA_MARKER', 'COLUMNS_MARKER', {
4
+ enableCellNavigation: false,
5
+ enableColumnReorder: false
6
+ });
7
+ return $("#slickgrid").show();
8
+ });
@@ -1,3 +1,3 @@
1
1
  module RailsSlickgrid
2
- VERSION = "0.0.1".freeze
2
+ VERSION = "0.0.2".freeze
3
3
  end
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: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
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