jqr-helpers 1.0.40 → 1.0.41

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzA1ZGQxZTIzZjdlMzVmYTg4ZDc5ZDc0MmZkMzBlMDdiNTExZDA1Zg==
4
+ MDg3YTU0MDE3OGNkNTUyNTllN2IwYmYyNGI5NmZmMjY2NDE5ZDE5Nw==
5
5
  data.tar.gz: !binary |-
6
- MjAyZDQ0ZjgxNzcxODFlNDkxMGMzMjg5NWM2MjlmNzI3MDM4MTk1ZA==
6
+ NzY2OWUxNWJmYjY1MzAyNzU0ZjA2NTRkMGZmZmE0ZjY3MzNkOGYyZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MjhjNzFjYmE1OTBhZTAxOWFhN2FjNjExMTQ0NWRlZTViM2FmMjgwOTA1NzQz
10
- ZjdmZTZiMzBmYzJlYjVkNjhjNDE0NTE0ZTdjN2UzYjI5YWYyZWI2ZDg1OGM0
11
- ZWIzM2Q2ZTRkZGQ3MmJkMGIzNjk2NjJlODFjYzU0Y2M1OTc2MzY=
9
+ MjgzZDljNjI5OTBiNWEzMmZhZGYxN2M4NjE5ZGEwNmZkMTZlM2FjYjNlOTAz
10
+ YTQyNDVmOTEyM2M2N2RhODM5NzI3MDc0MTE4NDg1YzAxN2Y3NGJkZmZlNWNj
11
+ ZjVmZTcyNDEzNzhjYTlmYzQ2ZWIzMzUzOTk3NjNlZjYyNDVmNmM=
12
12
  data.tar.gz: !binary |-
13
- MzQ3ZTlhNjQxOWY2YmEzODM4ZjkyMTlhYjY5MmI3OGU3Nzg4MThhNjJjNGMw
14
- ZTVhNzNlYzkzY2ZjMTllMjFlMmYxZmJhOThjNTBhMzI4MWY5NmUwNDQ2YzNk
15
- NDFhYjViNzQyYTRjOGIyOWE1MjY5NWQ1NDNiZjgzYjVmOTI1NjA=
13
+ MWMyNTUzZWQ4ZTA0MTVkZjEyMDY4NDBkNGVmZGQ5Njg4YjRkNzBiOGY4NjFh
14
+ ZWIwNThhNzJiYjRmNWNlY2MxNmNjYTAxNDEyYjFjOGU3NjFhNWUxZDRkNWYx
15
+ MDc2ZTU3ODgxZWNlYzNhNTgwMjcyMWExYmVhN2MyMWY3NjdlNzg=
data/Readme.md CHANGED
@@ -58,6 +58,8 @@ they load a heck of a lot faster when you have dozens or hundreds of them.
58
58
  * `button_to_external` - create a working `button_to` button inside an existing form (!)
59
59
  * `will_paginate_ajax` - create a `will_paginate` interface that uses Ajax to
60
60
  replace the paginated contents.
61
+ * `ajax_change` - monitor any inputs inside the given block for changes
62
+ and send to the Ajax URL when they happen.
61
63
 
62
64
  There are two sets of options that recur throughout the methods here:
63
65
 
@@ -127,6 +129,8 @@ an ancestor of the button tag with the class of `my-parent`.
127
129
  Other Ajax options:
128
130
 
129
131
  * `:return_type` (String) - the expected return type, e.g. 'text' or 'html'.
132
+ * `:method` (String) - GET, POST, PUT, or DELETE, if the default is incorrect
133
+ (GET for links, POST for forms and buttons).
130
134
  * `:empty` (String) - the ID of an element which should be shown when the
131
135
  element you are appending/deleting from is empty. If you delete the last child
132
136
  from an element, that element will be hidden and the "empty" element will
@@ -168,17 +172,25 @@ page).
168
172
  of the screen. `:small` would be a small inline throbber next to the button or
169
173
  link that called the dialog, and `:none` shows no throbber at all.
170
174
 
175
+ ## Monitoring Fields ##
176
+
177
+ You can monitor a field for changes using the ``ajax_change`` method:
178
+
179
+ <%= ajax_change('/toggle_complete_url', :update => '.parent-row') do %>
180
+ <%= check_box_tag 'toggle_complete', 1, my_model.complete? %>
181
+ <% end %>
182
+
171
183
  ## Panel Renderers ##
172
184
 
173
185
  Tabs (and eventually accordion panes and menus) are rendered using a "panel renderer".
174
186
  This allows you to loop through the tabs in an intuitive and concise way.
175
187
 
176
- <%= tab_container {:collapsible => true}, {:class => 'my-tabs}' do |r| %>
177
- <% r.panel 'Tab 1' do %>
178
- My tab content here
179
- <% end %>
180
- <% r.panel 'Tab 2', 'http://www.foobar.com/' %>
181
- <% end %>
188
+ <%= tab_container {:collapsible => true}, {:class => 'my-tabs}' do |r| %>
189
+ <% r.panel 'Tab 1' do %>
190
+ My tab content here
191
+ <% end %>
192
+ <% r.panel 'Tab 2', 'http://www.foobar.com/' %>
193
+ <% end %>
182
194
 
183
195
  ## jQuery Events ##
184
196
 
@@ -1,5 +1,5 @@
1
1
  (function($) {
2
- function showThrobber(element) {
2
+ function showThrobber(element, noDisable) {
3
3
  switch ($(element).data('throbber')) {
4
4
  case 'none':
5
5
  return;
@@ -9,7 +9,9 @@
9
9
  default: // small or not given
10
10
  $(element).after("<img src='/images/jqr-helpers/throbber.gif' class='throbber'/>");
11
11
  }
12
- $(element).attr('disabled', 'disabled');
12
+ if (!noDisable) {
13
+ $(element).attr('disabled', 'disabled');
14
+ }
13
15
  // refresh disabled state
14
16
  $(element).attr('autocomplete', 'off');
15
17
  }
@@ -194,7 +196,11 @@
194
196
  else
195
197
  $(element).data('throbber', 'large');
196
198
  }
197
- showThrobber(element);
199
+ // can't disable form fields because then they won't receive
200
+ // the success event
201
+ var name = element.prop('tagName').toUpperCase();
202
+ showThrobber(element,
203
+ (name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'));
198
204
  }
199
205
 
200
206
  function ujsAjaxSuccess(evt, data, status, xhr) {
@@ -428,6 +434,24 @@
428
434
  $(this).tabs(options);
429
435
  });
430
436
 
437
+ // observe fields
438
+ $('.ujs-ajax-change').each(function() {
439
+ var dataAttrs = ['type', 'callback', 'refresh', 'redirect', 'scroll-to',
440
+ 'throbber', 'empty', 'container', 'selector', 'result-method', 'url',
441
+ 'method', 'params'];
442
+ var dataMap = {};
443
+ var element = $(this);
444
+ $.each(dataAttrs, function(index, val) {
445
+ dataMap[val] = element.data(val);
446
+ element.removeAttr('data-' + val);
447
+ });
448
+ element.removeClass('ujs-ajax');
449
+ // we have to set a data-remote attribute because Rails uses [data-remote]
450
+ // as a selector rather than checking the actual data in the element
451
+ $(this).find('input, select').data(dataMap).addClass('ujs-ajax').
452
+ attr('data-remote', 'true');
453
+ });
454
+
431
455
  }
432
456
 
433
457
  $(function() {
data/jqr-helpers.gemspec CHANGED
@@ -1,8 +1,8 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jqr-helpers'
3
3
  s.require_paths = %w(. lib lib/jqr-helpers)
4
- s.version = '1.0.40'
5
- s.date = '2014-04-09'
4
+ s.version = '1.0.41'
5
+ s.date = '2014-05-16'
6
6
  s.summary = 'Helpers to print unobtrusive jQuery-UI tags.'
7
7
  s.description = <<-EOF
8
8
  This gem adds helper methods to create unobtrusive jQuery code. It outputs
@@ -385,6 +385,18 @@ module JqrHelpers
385
385
  content_tag(:button, content, options)
386
386
  end
387
387
 
388
+ # Observe a field for changes.
389
+ # On change, post to the Ajax URL and calculate callbacks.
390
+ # @param url [String] the URL to send to.
391
+ # @param options [Hash] Ajax options - see above.
392
+ # @return [String]
393
+ def ajax_change(url, options={}, &block)
394
+ options[:class] = 'ujs-ajax-change'
395
+ options = _process_ajax_options(options)
396
+ options['data-url'] = url
397
+ content_tag :span, options, &block
398
+ end
399
+
388
400
  # Generate a random string for IDs.
389
401
  # @return [String]
390
402
  # @private
@@ -536,6 +548,15 @@ module JqrHelpers
536
548
  new_options[:'data-throbber'] = options.delete(:throbber) || 'small'
537
549
  new_options[:'data-empty'] = options.delete(:empty)
538
550
  new_options[:'data-container'] = options.delete(:container)
551
+ method = options[:method]
552
+ if method
553
+ if method == 'put' || method == 'delete'
554
+ new_options[:'data-params'] = "_method=#{method}"
555
+ new_options[:'data-method'] = 'post'
556
+ else
557
+ new_options[:'data-method'] = method
558
+ end
559
+ end
539
560
 
540
561
  [:update, :append, :delete].each do |result_method|
541
562
  selector = options.delete(result_method)
@@ -1,6 +1,6 @@
1
1
  module JqrHelpers
2
2
  # @private
3
3
  module Rails
4
- VERSION = '1.0.40'
4
+ VERSION = '1.0.41'
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jqr-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.40
4
+ version: 1.0.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Orner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-09 00:00:00.000000000 Z
11
+ date: 2014-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement