SrBuj 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -3,24 +3,41 @@ SrBuj
3
3
 
4
4
  Better Unobtrusive JavaScript Request (for Rails and jquery_ujs, twitter/bootstrap modal.js)
5
5
 
6
- - Do you need render a partial in your web with out reload?, and make a modal out of it?(depends on twitter/Bootstrap modal.js)
7
- - Do you need remove an element from a list?
8
- - Do you need replace an element after update?
9
-
6
+ SrBuj comes to cure a common illness in a life of every Rails developer (maybe other kind too):
7
+ - write the same code to rise up a modal
8
+ - render a partial on it.
9
+ - change an element in a view without reload the entire web page
10
+ - replace content of an element (GET)
11
+ - add an element (POST)
12
+ - remove an element (DELETE)
13
+ - replace an specific element (PUT/PATCH)
14
+ - bind a callback to run specific js function.
15
+
16
+ every time, we end up with a lot of code, ugly code, messy code...
17
+
18
+ And every time we end up doing an old and known .js.rb file, with the same 4 lines... Well enough it's enough!
19
+
20
+ This is the cure... and comes with a simple treatment too!
21
+ Steps:
22
+ 1. Bundle the gem
23
+ 2. required in your manifest
24
+ 3. add the magic data attributes to the element
25
+ 4. Enjoy de js-less ! :-)
10
26
 
11
27
  This unobtrusive scripting support file is developed for the Ruby on Rails framework, but is not strictly tied to any specific backend. You can drop this into any application to:
12
28
 
13
29
  - get modals out of the box, via js
14
30
  - make non-GET requests from hyperlinks
15
- - make forms or hyperlinks submit data asynchronously with Ajax and handle the response in a dry way;
31
+ - make any submit data asynchronously with Ajax and handle the response in a dry way.
16
32
 
17
33
  These features are achieved by adding certain ["data" attributes][data] to your HTML markup. In Rails, they are added by the framework's template helpers.
18
34
 
19
35
  Requirements
20
36
  ------------
21
37
 
22
- - [jQuery 1.7.x or higher][jquery];
23
- - [twitter/bootstrap modal.js plugin]
38
+ - [jQuery 1.7.x or higher](http://jquery.com/);
39
+ - [jquery_ujs](https://github.com/rails/jquery-ujs)
40
+ - [twitter/bootstrap modal.js plugin](http://twitter.github.com/bootstrap/javascript.html#modals) or any .modal()/.modal('toggle') function attached to the jquery element.
24
41
  - HTML5 doctype (optional).
25
42
 
26
43
  If you don't use HTML5, adding "data" attributes to your HTML4 or XHTML pages might make them fail [W3C markup validation][validator]. However, this shouldn't create any issues for web browsers or other user agents.
@@ -48,19 +65,26 @@ a. For Rails 3.1, add these lines to the top of your app/assets/javascripts/appl
48
65
  //= require SrBuj
49
66
  ```
50
67
 
51
- Use
68
+ Use and Options
52
69
  ---
53
- data[target] = id Element in to render the response before success
54
- data[modal] = true|false if you wish that repsonse execute in modal (default false)
55
- data[error] = id Element In a form data[error] is the holder in witch de form re renders to show the errors
56
- data[replace] = true|false if you wish replace de data[target] element with the response content on success (default false)
57
- data[remote] && data[target] = combined the success response execute a remove() over the target element
58
-
70
+ - target( data[target] ): depending on the type of request(GET/PUT/POST/DELETE) is used to alter the Dom. it represent the element that we want to alter in the view after an succceded request (needed)
71
+ - modal( data[modal] ): if you wish that the response ends up in a modal. value: true|false (default false)
72
+ - error (data[error]): id Element In a form data[error] is the holder in witch de form re renders to show the errors
73
+ - replace(data[replace]): if you wish to replace de data[target] element with the response content on success. represent the PUT/PATCH action for SrBuj. value: true|false (default false)
74
+ - remove (data[method:delete] && data[target]): if these are combined the success response execute a remove() over the data[target] element.
75
+ - nochange (data[nochange]): do all but don't change the document in any way.
76
+ - callback(data[callback]) = after a successeded request, call this function.
77
+ - data[custom] = just proxy the response to my custom function in callback, nothing more.
78
+ - jqueryselector(data[jqueryselector]): Change the data[target] & data[error] for selectors in jquery and find the element!
79
+
80
+ You can use it with any element available. (links forms tables divs anything).
59
81
 
60
82
  Example
61
- ---
83
+ =======
62
84
 
63
- in your view (example with a link)
85
+ modal
86
+ ----
87
+ in your view (example with a link and haml)
64
88
 
65
89
  ````haml
66
90
  = link_to 'add Element' elements_path, remote: true, data: {target: 'partial-id', modal: true}
@@ -75,7 +99,8 @@ in your controller
75
99
  ```` ruby
76
100
  def new
77
101
  @element= Element.new
78
- render partial: 'new', content_type: 'text/html'
102
+ render partial: 'new', content_type: 'text/html' #=> the content_type stands for telling the js request that everything ends up
103
+ fine.
79
104
  end
80
105
  ````
81
106
 
data/lib/SrBuj/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SrBuj
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -8,9 +8,26 @@
8
8
  * Released under the MIT license
9
9
  *
10
10
  */
11
+ $.fn.present = function(){
12
+ return this.length === 1 && this
13
+ };
11
14
  var SrBuj;
12
15
  $.SrBuj = SrBuj = {
13
16
  selector: '[data-remote][data-target]',
17
+ defaults: {
18
+ '$el': undefined,
19
+ target: undefined,
20
+ onError: undefined,
21
+ wrapper: undefined,
22
+ method: 'GET',
23
+ modal: false,
24
+ custom: false,
25
+ change: true,
26
+ custom: false,
27
+ replace: false,
28
+ callback: false,
29
+ jqueryselector: false
30
+ },
14
31
  changeDom: function(method,$target,data){
15
32
  switch(method){
16
33
  case 'POST':
@@ -30,42 +47,65 @@
30
47
  },
31
48
  getVerb: function($el){
32
49
  var dataVerb = $el.data('method'),
33
- replace = $el.data('replace') || false,
34
- proto = $el.attr('method') || 'GET';
50
+ replace = $el.data('replace'),
51
+ proto = $el.attr('method');
35
52
  if( dataVerb )
36
- return dataVerb.toUpperCase()
53
+ return dataVerb.toUpperCase();
37
54
  else
38
- return ( replace && proto.toUpperCase() == 'POST' ) ? 'PUT' : proto.toUpperCase();
55
+ if (proto) return replace ? 'PUT' : proto.toUpperCase();
56
+ },
57
+ getOptions: function(el, user_options){
58
+ var options = {},
59
+ $el = $( user_options['el'] || el ).present(),
60
+ el_options = {
61
+ '$el': $el,
62
+ 'target': $el.data('target'),
63
+ 'method': $.SrBuj.getVerb($el),
64
+ 'onError': $el.data('error'),
65
+ 'callback': $el.data('callback'),
66
+ 'change': ! ( $el.data('nochange') || false ),
67
+ 'jqueryselector': $el.data('jqueryselector'),
68
+ 'modal': $el.data('modal'),
69
+ 'wrapper': $el.data('error'),
70
+ 'custom': $el.data('custom'),
71
+ 'replace': $el.data('replace')
72
+ };
73
+ for(var attr in this.defaults){
74
+ options[attr] = user_options[attr] || el_options[attr] || this.defaults[attr];
75
+ }
76
+ return options;
39
77
  },
40
- success: function(e, data){
41
- var $el = $(e.target),
42
- isModal = $el.data('modal') || false,
43
- method = $.SrBuj.getVerb($el),
44
- change = ! ( $el.data('nochange') || false ),
45
- fn = $el.data('callback'),
46
- custom = $el.data('custom') || false,
47
- callback = (typeof fn == 'function') ? fn : window[fn],
48
- target = document.getElementById($el.data('target')),
49
- wrapper = document.getElementById($el.data('error')),
50
- $target = $(target);
78
+ success: function(e, data,status,user_options){
79
+ var options = $.SrBuj.getOptions(e.target, user_options),
80
+ $el = options['$el'],
81
+ $target = options['jqueryselector'] ? $(options['target']).present() : $(document.getElementById(options['target'])) ,
82
+ $wrapper = options['jqueryselector'] ? $(options['wrapper']) : $(document.getElementById(options['wrapper']));
51
83
 
52
- if( !custom ){
53
- if(change) $.SrBuj.changeDom(method,$target,data);
54
- if(isModal) wrapper ? $(wrapper).modal('toggle') : $target.modal('toggle');
84
+ if(!options['custom']){
85
+ if(options['change'])
86
+ $.SrBuj.changeDom(options['method'],$target,data);
87
+ if(options['modal'])
88
+ options['wrapper'] ? $wrapper.modal('toggle') : $target.modal('toggle');
55
89
  }
56
- if(callback) callback.apply(this,[e, data]);
90
+ if(options['callback'])
91
+ callback = (typeof options['callback'] == 'function') ? options['callback'] : window[options['callback']],
92
+ callback.apply(this,[e, data, status]);
57
93
  },
58
- fail: function(e, data){
59
- var $el = $(e.target),
60
- error = document.getElementById($el.data('error'));
61
- if( error )
62
- $.SrBuj.changeDom('ERROR', $(error), data.responseText);
94
+ fail: function(e, data, status, user_options){
95
+ var $el = $(e.target).present(),
96
+ error = $el.data('error'),
97
+ jqueryselector = $el.data('jqueryselector'),
98
+ $error = jqueryselector ? $(error) :$(document.getElementById(error));
99
+ if( error ){
100
+ $.SrBuj.changeDom('ERROR', $error, data.responseText);
101
+ }
63
102
  else
64
- throw 'cant find data-error target on element';
103
+ throw 'cant find data-error on element';
65
104
  },
66
- bind: function(){
67
- $(document).on('ajax:success', this.selector, this.success);
68
- $(document).on('ajax:error', this.selector, this.fail);
105
+ bind: function(selector){
106
+ var selector = selector || this.selector;
107
+ $(document).on('ajax:success', selector, this.success);
108
+ $(document).on('ajax:error', selector, this.fail);
69
109
  }
70
110
  }
71
111
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: SrBuj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-04 00:00:00.000000000 Z
12
+ date: 2013-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: &70331793353320 !ruby/object:Gem::Requirement
16
+ requirement: &70140467388800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '1.3'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70331793353320
24
+ version_requirements: *70140467388800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: railties
27
- requirement: &70331793352560 !ruby/object:Gem::Requirement
27
+ requirement: &70140467388300 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.1'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70331793352560
35
+ version_requirements: *70140467388300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70331793352180 !ruby/object:Gem::Requirement
38
+ requirement: &70140467387880 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70331793352180
46
+ version_requirements: *70140467387880
47
47
  description: Better Unobtrusive JavaScript Request in asset pipeline
48
48
  email:
49
49
  - xeroice@gmail.com