cruyff 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/SpecRunner.html CHANGED
@@ -8,10 +8,10 @@
8
8
  <script type="text/javascript" src="spec/js_lib/jquery-1.4.4.js"></script>
9
9
  <script type="text/javascript" src="spec/js_lib/jquery.ba-bbq-1.2.1.js"></script>
10
10
  <script type="text/javascript" src="spec/js_lib/jquery.form-2.52.js"></script>
11
- <script type="text/javascript" src="spec/js_lib/rails-11.01.12.js"></script>
12
11
  <script type="text/javascript" src="spec/js_lib/jasmine-jquery-1.1.3.js"></script>
13
12
 
14
- <script type="text/javascript" src="lib/generators/templates/jquery.cruyff.js"></script>
13
+ <script type="text/javascript" src="lib/generators/cruyff/templates/rails.js"></script>
14
+ <script type="text/javascript" src="lib/generators/cruyff/templates/jquery.cruyff.js"></script>
15
15
 
16
16
  <script type="text/javascript" src="spec/SpecHelper.js"></script>
17
17
  <script type="text/javascript" src="spec/js_lib/jasmine-fixture.js"></script>
@@ -24,6 +24,7 @@
24
24
  <script type="text/javascript">
25
25
  $(function() {
26
26
  /*
27
+ //this ajax call don't works on chrome. WTF???
27
28
  $.ajax({
28
29
  url: 'spec/fixtures/view.html',
29
30
  success: function(data, status, xhr) {
@@ -1,3 +1,3 @@
1
1
  module Cruyff
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/cruyff.rb ADDED
@@ -0,0 +1,20 @@
1
+ module Jquery
2
+ module Rails
3
+ class Railtie < ::Rails::Railtie
4
+
5
+ config.before_configuration do
6
+ require "jquery-rails/assert_select_jquery" if ::Rails.env.test?
7
+
8
+ if ::Rails.root.join("public/javascripts/jquery-ui.min.js").exist?
9
+ jq_defaults = %w(jquery jquery-ui)
10
+ jq_defaults.map!{|a| a + ".min" } if ::Rails.env.production?
11
+ else
12
+ jq_defaults = ::Rails.env.production? ? %w(jquery.min) : %w(jquery)
13
+ end
14
+
15
+ config.action_view.javascript_expansions[:defaults] = jq_defaults + %w(rails)
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,61 @@
1
+ module Cruyff
2
+ module Generators
3
+ class InstallGenerator < ::Rails::Generators::Base
4
+ desc "This generator downloads and installs jQuery, jQuery-ujs HEAD, and (optionally) the newest jQuery UI"
5
+ class_option :ui, :type => :boolean, :default => false, :desc => "Include jQueryUI"
6
+ class_option :version, :type => :string, :default => "1.4.4", :desc => "Which version of jQuery to fetch"
7
+ @@default_version = "1.4.4"
8
+
9
+ def remove_prototype
10
+ %w(controls.js dragdrop.js effects.js prototype.js).each do |js|
11
+ remove_file "public/javascripts/#{js}"
12
+ end
13
+ end
14
+
15
+ def download_jquery
16
+ say_status("fetching", "jQuery (#{options.version})", :green)
17
+ get_jquery(options.version)
18
+ rescue OpenURI::HTTPError
19
+ say_status("warning", "could not find jQuery (#{options.version})", :yellow)
20
+ say_status("fetching", "jQuery (#{@@default_version})", :green)
21
+ get_jquery(@@default_version)
22
+ end
23
+
24
+ def download_jquery_ui
25
+ if options.ui?
26
+ say_status("fetching", "jQuery UI (latest 1.x release)", :green)
27
+ get "http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.js", "public/javascripts/jquery-ui.js"
28
+ get "http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js", "public/javascripts/jquery-ui.min.js"
29
+ end
30
+ end
31
+
32
+ def download_ujs_driver
33
+ say_status("fetching", "jQuery UJS Cruyff adapter (github HEAD)", :green)
34
+ get "https://github.com/andref5/cruyff/raw/master/lib/generators/cruyff/templates/rails.js", "public/javascripts/rails.js"
35
+ end
36
+
37
+ def download_cruyff
38
+ say_status("fetching", "jQuery Cruyff plugin (github HEAD)", :green)
39
+ get "https://github.com/andref5/cruyff/raw/master/lib/generators/cruyff/templates/jquery.cruyff.js", "public/javascripts/jquery.cruyff.js"
40
+ end
41
+
42
+ def download_jquery_bbq
43
+ say_status("fetching", "jQuery BBQ plugin: Back Button & Query Library (github HEAD)", :green)
44
+ get "https://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js", "public/javascripts/jquery.ba-bbq.js"
45
+ end
46
+
47
+ def download_jquery_form
48
+ say_status("fetching", "jQuery Form plugin (github HEAD)", :green)
49
+ get "https://github.com/malsup/form/raw/master/jquery.form.js", "public/javascripts/jquery.form.js"
50
+ end
51
+
52
+ private
53
+
54
+ def get_jquery(version)
55
+ get "http://ajax.googleapis.com/ajax/libs/jquery/#{version}/jquery.js", "public/javascripts/jquery.js"
56
+ get "http://ajax.googleapis.com/ajax/libs/jquery/#{version}/jquery.min.js", "public/javascripts/jquery.min.js"
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,89 @@
1
+ (function($) {
2
+
3
+ var cruyffSettings = {
4
+ url: "",
5
+ method: "",
6
+ dataType: "",
7
+ data: "",
8
+ responseSelector: "#response",
9
+ response: [],
10
+ };
11
+
12
+ $.fn.handleRemoteCrud = function(element) {
13
+ var cs = this.cruyffSetup(element);
14
+
15
+ //call ajaxSubmit from jquery.form because provides a file upload mechanism.
16
+ element.ajaxSubmit({
17
+ url: cs.url,
18
+ type: cs.method || 'GET',
19
+ data: cs.data,
20
+ dataType: cs.dataType,
21
+ // stopping the "ajax:beforeSend" event will cancel the ajax request
22
+ beforeSend: function(xhr, settings) {
23
+ if (settings.dataType === undefined) {
24
+ xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);
25
+ }
26
+ return fire(element, 'ajax:beforeSend', [xhr, settings]);
27
+ },
28
+ success: function(data, status, xhr) {
29
+ element.trigger('ajax:success', [data, status, xhr]);
30
+ cs.response.html(data);
31
+ },
32
+ complete: function(xhr, status) {
33
+ element.trigger('ajax:complete', [xhr, status]);
34
+ },
35
+ error: function(xhr, status, error) {
36
+ element.trigger('ajax:error', [xhr, status, error]);
37
+ cs.response.html(error.toString());
38
+ }
39
+ });
40
+
41
+ $.bbq.pushState("app=" + cs.url);
42
+
43
+ };
44
+
45
+ $.fn.cruyffSetup = function(element) {
46
+ var cs = cruyffSettings;
47
+
48
+ cs.response = $(cs.responseSelector);
49
+
50
+ /**
51
+ * Rails.js Code 2011-01-12
52
+ **/
53
+ cs.dataType = element.attr('data-type') || ($.ajaxSettings && $.ajaxSettings.dataType);
54
+
55
+ if (element.is('form')) {
56
+ cs.method = element.attr('method');
57
+ cs.url = element.attr('action');
58
+ cs.data = element.serializeArray();
59
+ // memoized value from clicked submit button
60
+ var button = element.data('ujs:submit-button');
61
+ if (button) {
62
+ cs.data.push(button);
63
+ element.data('ujs:submit-button', null);
64
+ }
65
+ } else {
66
+ cs.method = element.attr('data-method');
67
+ cs.url = element.attr('href');
68
+ cs.data = null;
69
+ }
70
+ /**
71
+ * End Rails.js
72
+ **/
73
+
74
+ return cs;
75
+ };
76
+
77
+ //Override rails.js handleRemote
78
+ $.fn.handleRemote = function(element) {
79
+ this.handleRemoteCrud(element);
80
+ };
81
+
82
+ //Wrapper to rails.js fire function
83
+ function fire(obj, name, data) {
84
+ $.fn.fire(obj, name, data);
85
+ }
86
+
87
+ //$.fn.cruyffUrl = $.bbq.getState("app");
88
+
89
+ })( jQuery );
@@ -7,14 +7,22 @@
7
7
 
8
8
  (function($) {
9
9
  // Triggers an event on an element and returns the event result
10
- function fire(obj, name, data) {
10
+ function fire(obj, name, data) {
11
+ this.fire(obj, name, data);
12
+ }
13
+ // create a jQuery object to call from another context
14
+ $.fn.fire = function (obj, name, data) {
11
15
  var event = new $.Event(name);
12
16
  obj.trigger(event, data);
13
17
  return event.result !== false;
14
18
  }
15
19
 
16
20
  // Submits "remote" forms and links with ajax
17
- function handleRemote(element) {
21
+ function handleRemote(element) {
22
+ $.fn.handleRemote(element);
23
+ }
24
+ // create a jQuery object to override
25
+ $.fn.handleRemote = function (element) {
18
26
  var method, url, data,
19
27
  dataType = element.attr('data-type') || ($.ajaxSettings && $.ajaxSettings.dataType);
20
28
 
@@ -126,7 +134,7 @@
126
134
  var name = button.attr('name'), data = name ? {name:name, value:button.val()} : null;
127
135
  button.closest('form').data('ujs:submit-button', data);
128
136
  });
129
-
137
+
130
138
  $('form').live('ajax:beforeSend.rails', function(event) {
131
139
  if (this == event.target) disableFormElements($(this));
132
140
  });
@@ -135,3 +143,4 @@
135
143
  if (this == event.target) enableFormElements($(this));
136
144
  });
137
145
  })( jQuery );
146
+
data/spec/CruyffSpec.js CHANGED
@@ -6,6 +6,12 @@ describe('Cruyff',function() {
6
6
  $.jasmine.inject('<div id="response"></div>');
7
7
  });
8
8
 
9
+ it('should override rails handleRemote function',function(){
10
+ spyOn($.fn, 'handleRemoteCrud');
11
+ $.fn.handleRemote('element');
12
+ expect($.fn.handleRemoteCrud).wasCalled();
13
+ })
14
+
9
15
  describe('Setup from hyperlink', function() {
10
16
  beforeEach(function() {
11
17
  $.jasmine.inject('<a href="spec/fixtures/view.html"\
@@ -110,7 +116,7 @@ describe('Cruyff',function() {
110
116
 
111
117
  it('should render success response',function(){
112
118
  runs(function() {
113
- $.fn.handleRemoteCrud(element);
119
+ element.trigger('click');
114
120
  });
115
121
  waits(100);
116
122
  runs(function() {
@@ -121,7 +127,7 @@ describe('Cruyff',function() {
121
127
  it('should render error response',function(){
122
128
  element.attr('href', 'bad/url');
123
129
  runs(function() {
124
- $.fn.handleRemoteCrud(element);
130
+ element.trigger('click');
125
131
  });
126
132
  waits(100);
127
133
  runs(function() {
@@ -141,7 +147,7 @@ describe('Cruyff',function() {
141
147
 
142
148
  it('should bookmark',function() {
143
149
  runs(function() {
144
- $.fn.handleRemoteCrud(element);
150
+ element.trigger('click');
145
151
  });
146
152
  waits(100);
147
153
  runs(function() {
@@ -149,7 +155,7 @@ describe('Cruyff',function() {
149
155
  });
150
156
  });
151
157
 
152
- it('should load browser url',function() {
158
+ xit('should load browser url',function() {
153
159
  $.bbq.pushState('app=spec/fixtures/view.html');
154
160
  expect($.fn.cruyffUrl).toEqual('spec/fixtures/view.html');
155
161
  });
metadata CHANGED
@@ -1,40 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cruyff
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 1
9
- version: 0.0.1
4
+ prerelease:
5
+ version: 0.1.0
10
6
  platform: ruby
11
7
  authors:
12
- - Charger Tec
8
+ - Charger Tec
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-01-20 00:00:00 -02:00
13
+ date: 2011-01-21 00:00:00 -02:00
18
14
  default_executable:
19
15
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: jquery-rails
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 2
31
- - 6
32
- version: 0.2.6
33
- type: :runtime
34
- version_requirements: *id001
16
+ - !ruby/object:Gem::Dependency
17
+ name: jquery-rails
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 0.2.6
25
+ type: :runtime
26
+ version_requirements: *id001
35
27
  description: Cruyff is a Ajax CRUD solution for Rails applications.
36
28
  email:
37
- - DM @andrefarina
29
+ - DM @andrefarina
38
30
  executables: []
39
31
 
40
32
  extensions: []
@@ -42,27 +34,28 @@ extensions: []
42
34
  extra_rdoc_files: []
43
35
 
44
36
  files:
45
- - .gitignore
46
- - Gemfile
47
- - Rakefile
48
- - Readme.md
49
- - SpecRunner.html
50
- - cruyff.gemspec
51
- - lib/cruyff/version.rb
52
- - lib/generators/cruyff_generator.rb
53
- - lib/generators/templates/jquery.cruyff.js
54
- - spec/CruyffSpec.js
55
- - spec/SpecHelper.js
56
- - spec/fixtures/view.html
57
- - spec/js_lib/jasmine-1.0.1/jasmine-html.js
58
- - spec/js_lib/jasmine-1.0.1/jasmine.css
59
- - spec/js_lib/jasmine-1.0.1/jasmine.js
60
- - spec/js_lib/jasmine-fixture.js
61
- - spec/js_lib/jasmine-jquery-1.1.3.js
62
- - spec/js_lib/jquery-1.4.4.js
63
- - spec/js_lib/jquery.ba-bbq-1.2.1.js
64
- - spec/js_lib/jquery.form-2.52.js
65
- - spec/js_lib/rails-11.01.12.js
37
+ - .gitignore
38
+ - Gemfile
39
+ - Rakefile
40
+ - Readme.md
41
+ - SpecRunner.html
42
+ - cruyff.gemspec
43
+ - lib/cruyff.rb
44
+ - lib/cruyff/version.rb
45
+ - lib/generators/cruyff/install/install_generator.rb
46
+ - lib/generators/cruyff/templates/jquery.cruyff.js
47
+ - lib/generators/cruyff/templates/rails.js
48
+ - spec/CruyffSpec.js
49
+ - spec/SpecHelper.js
50
+ - spec/fixtures/view.html
51
+ - spec/js_lib/jasmine-1.0.1/jasmine-html.js
52
+ - spec/js_lib/jasmine-1.0.1/jasmine.css
53
+ - spec/js_lib/jasmine-1.0.1/jasmine.js
54
+ - spec/js_lib/jasmine-fixture.js
55
+ - spec/js_lib/jasmine-jquery-1.1.3.js
56
+ - spec/js_lib/jquery-1.4.4.js
57
+ - spec/js_lib/jquery.ba-bbq-1.2.1.js
58
+ - spec/js_lib/jquery.form-2.52.js
66
59
  has_rdoc: true
67
60
  homepage: https://github.com/andref5/cruyff
68
61
  licenses: []
@@ -71,29 +64,35 @@ post_install_message:
71
64
  rdoc_options: []
72
65
 
73
66
  require_paths:
74
- - lib
67
+ - lib
75
68
  required_ruby_version: !ruby/object:Gem::Requirement
76
69
  none: false
77
70
  requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- segments:
81
- - 0
82
- version: "0"
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
83
74
  required_rubygems_version: !ruby/object:Gem::Requirement
84
75
  none: false
85
76
  requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- segments:
89
- - 0
90
- version: "0"
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
91
80
  requirements: []
92
81
 
93
82
  rubyforge_project:
94
- rubygems_version: 1.3.7
83
+ rubygems_version: 1.4.2
95
84
  signing_key:
96
85
  specification_version: 3
97
86
  summary: Ajax CRUD solution for Rails applications.
98
- test_files: []
99
-
87
+ test_files:
88
+ - spec/CruyffSpec.js
89
+ - spec/SpecHelper.js
90
+ - spec/fixtures/view.html
91
+ - spec/js_lib/jasmine-1.0.1/jasmine-html.js
92
+ - spec/js_lib/jasmine-1.0.1/jasmine.css
93
+ - spec/js_lib/jasmine-1.0.1/jasmine.js
94
+ - spec/js_lib/jasmine-fixture.js
95
+ - spec/js_lib/jasmine-jquery-1.1.3.js
96
+ - spec/js_lib/jquery-1.4.4.js
97
+ - spec/js_lib/jquery.ba-bbq-1.2.1.js
98
+ - spec/js_lib/jquery.form-2.52.js
@@ -1,14 +0,0 @@
1
- require 'rails/generators'
2
-
3
- class CruyffGenerator < Rails::Generators::Base
4
- def self.source_root
5
- File.join(File.dirname(__FILE__), 'templates')
6
- end
7
-
8
- def install_cruyff
9
- copy_file(
10
- 'jquery.cruyff.js',
11
- 'public/javascripts/jquery.cruyff.js'
12
- )
13
- end
14
- end
@@ -1,174 +0,0 @@
1
- (function($) {
2
-
3
- var cruyffSettings = {
4
- url: "",
5
- method: "",
6
- dataType: "",
7
- data: "",
8
- responseSelector: "#response",
9
- response: [],
10
- };
11
-
12
- $.fn.handleRemoteCrud = function(element) {
13
- var cs = this.cruyffSetup(element);
14
-
15
- //call ajaxSubmit from jquery.form because provides a file upload mechanism.
16
- element.ajaxSubmit({
17
- url: cs.url,
18
- type: cs.method || 'GET',
19
- data: cs.data,
20
- dataType: cs.dataType,
21
- // stopping the "ajax:beforeSend" event will cancel the ajax request
22
- beforeSend: function(xhr, settings) {
23
- if (settings.dataType === undefined) {
24
- xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script);
25
- }
26
- return fire(element, 'ajax:beforeSend', [xhr, settings]);
27
- },
28
- success: function(data, status, xhr) {
29
- element.trigger('ajax:success', [data, status, xhr]);
30
- cs.response.html(data);
31
- },
32
- complete: function(xhr, status) {
33
- element.trigger('ajax:complete', [xhr, status]);
34
- },
35
- error: function(xhr, status, error) {
36
- element.trigger('ajax:error', [xhr, status, error]);
37
- cs.response.html(error.toString());
38
- }
39
- });
40
-
41
- $.bbq.pushState("app=" + cs.url);
42
-
43
- };
44
- function handleRemote(element) {
45
- $.fn.handleRemoteCrud(element);
46
- }
47
-
48
- $.fn.cruyffSetup = function(element) {
49
- var cs = cruyffSettings;
50
-
51
- cs.response = $(cs.responseSelector);
52
-
53
- /**
54
- * Rails.js Code 2011-01-12
55
- **/
56
- cs.dataType = element.attr('data-type') || ($.ajaxSettings && $.ajaxSettings.dataType);
57
-
58
- if (element.is('form')) {
59
- cs.method = element.attr('method');
60
- cs.url = element.attr('action');
61
- cs.data = element.serializeArray();
62
- // memoized value from clicked submit button
63
- var button = element.data('ujs:submit-button');
64
- if (button) {
65
- cs.data.push(button);
66
- element.data('ujs:submit-button', null);
67
- }
68
- } else {
69
- cs.method = element.attr('data-method');
70
- cs.url = element.attr('href');
71
- cs.data = null;
72
- }
73
- /**
74
- * End Rails.js $.bbq.getState
75
- **/
76
-
77
- return cs;
78
- };
79
-
80
- $.fn.cruyffUrl = $.bbq.getState("app");
81
-
82
- console.log($.fn.cruyffUrl);
83
-
84
- /**
85
- * Rails.js Code 2011-01-12. I don't know yet how to override inner functions.
86
- **/
87
- function fire(obj, name, data) {
88
- var event = new $.Event(name);
89
- obj.trigger(event, data);
90
- return event.result !== false;
91
- }
92
- // Handles "data-method" on links such as:
93
- // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
94
- function handleMethod(link) {
95
- var href = link.attr('href'),
96
- method = link.attr('data-method'),
97
- csrf_token = $('meta[name=csrf-token]').attr('content'),
98
- csrf_param = $('meta[name=csrf-param]').attr('content'),
99
- form = $('<form method="post" action="' + href + '"></form>'),
100
- metadata_input = '<input name="_method" value="' + method + '" type="hidden" />';
101
-
102
- if (csrf_param !== undefined && csrf_token !== undefined) {
103
- metadata_input += '<input name="' + csrf_param + '" value="' + csrf_token + '" type="hidden" />';
104
- }
105
-
106
- form.hide().append(metadata_input).appendTo('body');
107
- form.submit();
108
- }
109
-
110
- function disableFormElements(form) {
111
- form.find('input[data-disable-with]').each(function() {
112
- var input = $(this);
113
- input.data('ujs:enable-with', input.val())
114
- .val(input.attr('data-disable-with'))
115
- .attr('disabled', 'disabled');
116
- });
117
- }
118
-
119
- function enableFormElements(form) {
120
- form.find('input[data-disable-with]').each(function() {
121
- var input = $(this);
122
- input.val(input.data('ujs:enable-with')).removeAttr('disabled');
123
- });
124
- }
125
-
126
- function allowAction(element) {
127
- var message = element.attr('data-confirm');
128
- return !message || (fire(element, 'confirm') && confirm(message));
129
- }
130
-
131
- $('a[data-confirm], a[data-method], a[data-remote]').die('click.rails').live('click.rails', function(e) {
132
- var link = $(this);
133
- if (!allowAction(link)) return false;
134
-
135
- if (link.attr('data-remote')) {
136
- handleRemote(link);
137
- return false;
138
- } else if (link.attr('data-method')) {
139
- handleMethod(link);
140
- return false;
141
- }
142
- });
143
-
144
- $('form').die('submit.rails').live('submit.rails', function(e) {
145
- var form = $(this);
146
- if (!allowAction(form)) return false;
147
-
148
- if (form.attr('data-remote')) {
149
- handleRemote(form);
150
- return false;
151
- } else {
152
- disableFormElements(form);
153
- }
154
- });
155
-
156
- $('form input[type=submit], form button[type=submit], form button:not([type])').die('click.rails').live('click.rails', function() {
157
- var button = $(this);
158
- if (!allowAction(button)) return false;
159
- // register the pressed submit button
160
- var name = button.attr('name'), data = name ? {name:name, value:button.val()} : null;
161
- button.closest('form').data('ujs:submit-button', data);
162
- });
163
-
164
- $('form').live('ajax:beforeSend.rails', function(event) {
165
- if (this == event.target) disableFormElements($(this));
166
- });
167
-
168
- $('form').live('ajax:complete.rails', function(event) {
169
- if (this == event.target) enableFormElements($(this));
170
- });
171
- /**
172
- * End Rails.js
173
- **/
174
- })( jQuery );