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 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