best_in_place 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5e84415483a33f06ae8ad58a61c1659b185568e
4
- data.tar.gz: eb2b9be33ed3f859f29222028b4143ec05b8c582
3
+ metadata.gz: 84ce49122f38b9152cae6c9ce661307dd0f3d528
4
+ data.tar.gz: ad3e88ba32e9c656706661ef05e807f9fdfc7fb3
5
5
  SHA512:
6
- metadata.gz: 5403e603dd30cd6d28be3e39ba6bec7a2c407918a7b8759da50712fcdce2fd9af5b59e69eacde956d21086c6ccbbee7980aa1fe2d1d0dbeaeb2c1f8c68269e92
7
- data.tar.gz: ea7dc137ed0816109d9debb3b7782349d6fcf7a587c66725eab2e6ddc3a5ac1006dba2170e2c8ca7a6e8a58b990c86dcb530d104d6f85c79b043f8f2b818971f
6
+ metadata.gz: 1502b356495066e3c08541b068e8af62bd58bcc0c32d0ff84b5fdb570ffdd663fb9fa864ea2f78c77326ff0d359cf42b9819402a5052bf1245a5f47c19e11993
7
+ data.tar.gz: db75bf52797e26f7bb11253b4cadaaaede87ec84d46dfe736bfead6960469c76bc10fa5fb7284f211241f48da035f63d792a1197a8d2d79cb84ab458eb31d3a5
@@ -1,5 +1,8 @@
1
1
  #Changelog
2
2
 
3
+ - v.3.0.3 :
4
+ - Pass all callback arguments on $.ajax
5
+
3
6
  - v.3.0.0 :
4
7
  - Expect syntax for spec
5
8
  - Deprecated option[:path] in favor of option[:url]
data/README.md CHANGED
@@ -76,7 +76,7 @@ Params:
76
76
 
77
77
  Options:
78
78
 
79
- - **:type** It can be only [:input, :textarea, :select, :checkbox, :date (>= 1.0.4)] or if undefined it defaults to :input.
79
+ - **:as** It can be only [:input, :textarea, :select, :checkbox, :date] or if undefined it defaults to :input.
80
80
  - **:collection**: If you are using the :select type then you must specify the collection of values it takes as a hash where values represent the display text and keys are the option's value when selected. If you are using the :checkbox type you can specify the two values it can take, or otherwise they will default to Yes and No.
81
81
  - **:url**: URL to which the updating action will be sent. If not defined it defaults to the :object path.
82
82
  - **:place_holder**: The nil param defines the content displayed in case no value is defined for that field. It can be something like "click me to edit".
@@ -92,7 +92,6 @@ Options:
92
92
  - **:display_as**: A **model** method which will be called in order to display this field. Cannot be used when using `display_with`.
93
93
  - **:display_with**: A **helper** method or proc will be called in order to display this field. Cannot be used with `display_as`.
94
94
  - **:helper_options**: A hash of parameters to be sent to the helper method specified by `display_with`.
95
- - **:as**: Used for overriding the default params key used for the object (the data-object attribute). Useful for e.g. STI scenarios where best_in_place should post to a common controller for different models.
96
95
  - **:data**: Hash of custom data attributes to be added to span. Can be used to provide data to the ajax:success callback.
97
96
  - **:class**: Additional classes to apply to the best_in_place span. Accepts either a string or Array of strings
98
97
  - **:value**: Customize the starting value of the inline input (defaults to to the field's value)
@@ -120,11 +119,11 @@ condition, is satisfied. Specifically:
120
119
 
121
120
  Say we have something like
122
121
 
123
- <%= best_in_place_if condition, @user, :name, :type => :input %>
122
+ <%= best_in_place_if condition, @user, :name, :as => :input %>
124
123
 
125
124
  In case *condition* is satisfied, the outcome will be just the same as:
126
125
 
127
- <%= best_in_place @user, :name, :type => :input %>
126
+ <%= best_in_place @user, :name, :as => :input %>
128
127
 
129
128
  Otherwise, we will have the same outcome as:
130
129
 
@@ -140,36 +139,36 @@ Examples (code in the views):
140
139
 
141
140
  ### Input
142
141
 
143
- <%= best_in_place @user, :name, :type => :input %>
142
+ <%= best_in_place @user, :name, :as => :input %>
144
143
 
145
- <%= best_in_place @user, :name, :type => :input, :nil => "Click me to add content!" %>
144
+ <%= best_in_place @user, :name, :as => :input, :nil => "Click me to add content!" %>
146
145
 
147
146
  ### Textarea
148
147
 
149
- <%= best_in_place @user, :description, :type => :textarea %>
148
+ <%= best_in_place @user, :description, :as => :textarea %>
150
149
 
151
- <%= best_in_place @user, :favorite_books, :type => :textarea, :ok_button => 'Save', :cancel_button => 'Cancel' %>
150
+ <%= best_in_place @user, :favorite_books, :as => :textarea, :ok_button => 'Save', :cancel_button => 'Cancel' %>
152
151
 
153
152
  ### Select
154
153
 
155
- <%= best_in_place @user, :country, :type => :select, :collection => {"1" => "Spain", "2" => "Italy", "3" => "Germany", "4" => "France"} %>
156
- <%= best_in_place @user, :country, :type => :select, :collection => { es: 'Spain', it: 'Italy', de: 'Germany', fr: 'France' } %>
157
- <%= best_in_place @user, :country, :type => :select, :collection => %w(Spain Italy Germany France) %>
158
- <%= best_in_place @user, :country, :type => :select, :collection => [[1, 'Spain'], [3, 'Germany'], [2, 'Italy'], [4, 'France']] %>
154
+ <%= best_in_place @user, :country, :as => :select, :collection => {"1" => "Spain", "2" => "Italy", "3" => "Germany", "4" => "France"} %>
155
+ <%= best_in_place @user, :country, :as => :select, :collection => { es: 'Spain', it: 'Italy', de: 'Germany', fr: 'France' } %>
156
+ <%= best_in_place @user, :country, :as => :select, :collection => %w(Spain Italy Germany France) %>
157
+ <%= best_in_place @user, :country, :as => :select, :collection => [[1, 'Spain'], [3, 'Germany'], [2, 'Italy'], [4, 'France']] %>
159
158
 
160
159
  Of course it can take an instance or global variable for the collection, just remember the structure is a hash.
161
160
  The value will always be converted to a string for display.
162
161
 
163
162
  ### Checkbox
164
163
 
165
- <%= best_in_place @user, :receive_emails, :type => :checkbox, :collection => ["No, thanks", "Yes, of course!"] %>
164
+ <%= best_in_place @user, :receive_emails, :as => :checkbox, :collection => ["No, thanks", "Yes, of course!"] %>
166
165
 
167
166
  The first value is always the negative boolean value and the second the positive. Structure: `["false value", "true value"]`.
168
167
  If not defined, it will default to *Yes* and *No* options.
169
168
 
170
169
  ### Date
171
170
 
172
- <%= best_in_place @user, :birth_date, :type => :date %>
171
+ <%= best_in_place @user, :birth_date, :as => :date %>
173
172
 
174
173
  With the :date type the input field will be initialized as a datepicker input.
175
174
  In order to provide custom options to the datepicker initialization you must
@@ -206,7 +205,7 @@ the :json format. This is a simple example showing an update action using it:
206
205
  As of best in place 1.0.3 you can use custom methods in your model in order to
207
206
  decide how a certain field has to be displayed. You can write something like:
208
207
 
209
- = best_in_place @user, :description, :type => :textarea, :display_as => :mk_description
208
+ = best_in_place @user, :description, :as => :textarea, :display_as => :mk_description
210
209
 
211
210
  Then instead of using `@user.description` to show the actual value, best in
212
211
  place will call `@user.mk_description`. This can be used for any kind of
@@ -286,7 +285,7 @@ In the view, we'd do:
286
285
  th= size
287
286
  - flavours.each do |flavour|
288
287
  - v = @ice_cream.get_stock(flavour: flavour, size: size)
289
- td= best_in_place v, :to_i, type: :input, url: set_stock_ice_cream_path(flavour: flavour, size: size)
288
+ td= best_in_place v, :to_i, as: :input, url: set_stock_ice_cream_path(flavour: flavour, size: size)
290
289
 
291
290
  Now we need a route to which send the stock updates:
292
291
 
@@ -106,8 +106,8 @@ BestInPlaceEditor.prototype = {
106
106
  "type": BestInPlaceEditor.defaults.ajaxMethod,
107
107
  "dataType": BestInPlaceEditor.defaults.ajaxDataType,
108
108
  "data": editor.requestData(),
109
- "success": function (data) {
110
- editor.loadSuccessCallback(data);
109
+ "success": function (data, status, xhr) {
110
+ editor.loadSuccessCallback(data, status, xhr);
111
111
  },
112
112
  "error": function (request, error) {
113
113
  editor.loadErrorCallback(request, error);
@@ -120,15 +120,11 @@ BestInPlaceEditor.prototype = {
120
120
  this.previousCollectionValue = value;
121
121
 
122
122
  // search for the text for the span
123
- var key, val, _i, _len, _ref, a;
124
- for (_i = 0, a = this.values, _len = a.length; _i < _len; _i++) {
125
- _ref = a[_i], key = _ref[0], val = _ref[1];
126
- if (String(value) === String(key)) editor.element.html(val);
127
- };
123
+ editor.element.html(this.arrayToObject(this.values)[value]);
128
124
  break;
129
125
 
130
126
  case "checkbox":
131
- editor.element.html(this.values[value]);
127
+ editor.element.html(this.arrayToObject(this.values)[value]);
132
128
  break;
133
129
 
134
130
  default:
@@ -240,6 +236,19 @@ BestInPlaceEditor.prototype = {
240
236
  alert(BestInPlaceEditor.defaults.locales[''].uninitializedForm);
241
237
  },
242
238
 
239
+ arrayToObject: function(list, values) {
240
+ if (list == null) return {};
241
+ var result = {};
242
+ for (var i = 0, length = list.length; i < length; i++) {
243
+ if (values) {
244
+ result[list[i]] = values[i];
245
+ } else {
246
+ result[list[i][0]] = list[i][1];
247
+ }
248
+ }
249
+ return result;
250
+ },
251
+
243
252
  // Trim and Strips HTML from text
244
253
  sanitizeValue: function (s) {
245
254
  'use strict';
@@ -273,7 +282,7 @@ BestInPlaceEditor.prototype = {
273
282
 
274
283
  // Handlers ////////////////////////////////////////////////////////////////
275
284
 
276
- loadSuccessCallback: function (data) {
285
+ loadSuccessCallback: function (data, status, xhr) {
277
286
  'use strict';
278
287
  data = jQuery.trim(data);
279
288
  //Update original content with current text.
@@ -289,13 +298,11 @@ BestInPlaceEditor.prototype = {
289
298
  this.element.data('bip-original-content', this.element.text());
290
299
  this.element.html(response.display_as);
291
300
  }
292
-
293
- this.element.trigger(jQuery.Event("best_in_place:success"), data);
294
- this.element.trigger(jQuery.Event("ajax:success"), data);
295
- } else {
296
- this.element.trigger(jQuery.Event("best_in_place:success"));
297
- this.element.trigger(jQuery.Event("ajax:success"));
298
301
  }
302
+
303
+ this.element.trigger(jQuery.Event("best_in_place:success"), [data, status, xhr]);
304
+ this.element.trigger(jQuery.Event("ajax:success"), [data, status, xhr]);
305
+
299
306
  // Binding back after being clicked
300
307
  jQuery(this.activator).bind('click', {editor: this}, this.clickHandler);
301
308
  this.element.trigger(jQuery.Event("best_in_place:deactivate"));
@@ -392,7 +399,9 @@ BestInPlaceEditor.forms = {
392
399
  if (this.cancelButton) {
393
400
  this.element.find("input[type='button']").bind('click', {editor: this}, BestInPlaceEditor.forms.input.cancelButtonHandler);
394
401
  }
395
- this.element.find("input[type='text']").bind('blur', {editor: this}, BestInPlaceEditor.forms.input.inputBlurHandler);
402
+ if (!this.okButton) {
403
+ this.element.find("input[type='text']").bind('blur', {editor: this}, BestInPlaceEditor.forms.input.inputBlurHandler);
404
+ }
396
405
  this.element.find("input[type='text']").bind('keyup', {editor: this}, BestInPlaceEditor.forms.input.keyupHandler);
397
406
  this.blurTimer = null;
398
407
  this.userClicked = false;
@@ -459,15 +468,14 @@ BestInPlaceEditor.forms = {
459
468
  select_elt = jQuery(document.createElement('select'))
460
469
  .attr('class', this.inner_class !== null ? this.inner_class : ''),
461
470
  currentCollectionValue = this.collectionValue,
462
- a, key, value, _i, _len, _ref;
463
- for (_i = 0, a = this.values, _len = a.length; _i < _len; _i++) {
464
- _ref = a[_i], key = _ref[0], value = _ref[1];
471
+ key, value,
472
+ a = this.arrayToObject(this.values);
473
+ for (key in a) {
474
+ value = a[key];
465
475
  var option_elt = jQuery(document.createElement('option'))
466
476
  .val(key)
467
477
  .html(value);
468
- if (String(key) === String(currentCollectionValue)) {
469
- option_elt.attr('selected', 'selected');
470
- };
478
+ if (String(key) === String(currentCollectionValue)) option_elt.attr('selected', 'selected');
471
479
  select_elt.append(option_elt);
472
480
  };
473
481
  output.append(select_elt);
@@ -50,7 +50,7 @@ module BestInPlace
50
50
  if yield
51
51
  return true
52
52
  else
53
- sleep(0.1)
53
+ sleep(0.2)
54
54
  next
55
55
  end
56
56
  end
@@ -1,3 +1,3 @@
1
1
  module BestInPlace
2
- VERSION = '3.0.2'
2
+ VERSION = '3.0.3'
3
3
  end
@@ -149,6 +149,8 @@ describe "JS behaviour", :js => true do
149
149
 
150
150
  bip_text @user, :email, "new@email.com"
151
151
 
152
+ expect(find('#email')).to have_content('new@email.com')
153
+
152
154
  visit user_path(@user)
153
155
  expect(find('#email')).to have_content('new@email.com')
154
156
  end
@@ -193,6 +195,8 @@ describe "JS behaviour", :js => true do
193
195
 
194
196
  bip_select @user, :country, "France"
195
197
 
198
+ expect(find('#country')).to have_content('France')
199
+
196
200
  visit user_path(@user)
197
201
 
198
202
  expect(find('#country')).to have_content('France')
@@ -215,6 +219,8 @@ describe "JS behaviour", :js => true do
215
219
 
216
220
  bip_text @user, :birth_date, (today - 1.days)
217
221
 
222
+ expect(find('#birth_date')).to have_content(today - 1.days)
223
+
218
224
  visit user_path(@user)
219
225
 
220
226
  expect(find('#birth_date')).to have_content(today - 1.days)
@@ -234,6 +240,8 @@ describe "JS behaviour", :js => true do
234
240
  JS
235
241
  wait_for_ajax
236
242
 
243
+ expect(find('#birth_date')).to have_content(today.beginning_of_month.strftime('%d-%m-%Y'))
244
+
237
245
  visit user_path(@user)
238
246
 
239
247
  expect(find('#birth_date')).to have_content(today.beginning_of_month)
@@ -265,6 +273,8 @@ describe "JS behaviour", :js => true do
265
273
 
266
274
  bip_bool @user, :receive_email
267
275
 
276
+ expect(find('#receive_email')).to have_content('Yes of course')
277
+
268
278
  visit user_path(@user)
269
279
 
270
280
  expect(find('#receive_email')).to have_content('Yes of course')
@@ -279,6 +289,8 @@ describe "JS behaviour", :js => true do
279
289
 
280
290
  bip_bool @user, :receive_email_image
281
291
 
292
+ expect(find('#receive_email_image')).to have_xpath("//img[contains(@src,'yes.png')]")
293
+
282
294
  visit user_path(@user)
283
295
 
284
296
  expect(find('#receive_email_image')).to have_xpath("//img[contains(@src,'yes.png')]")
@@ -300,6 +312,8 @@ describe "JS behaviour", :js => true do
300
312
  find("##{id} input[type='submit']").click
301
313
  wait_for_ajax
302
314
 
315
+ expect(find('#favorite_color')).to have_content('Blue')
316
+
303
317
  visit user_path(@user)
304
318
 
305
319
  expect(find('#favorite_color')).to have_content('Blue')
@@ -350,7 +364,8 @@ describe "JS behaviour", :js => true do
350
364
  execute_script <<-JS
351
365
  $("##{id} input[name='favorite_color']").blur();
352
366
  JS
353
- wait_for_ajax
367
+ sleep 0.5
368
+ expect(page).to have_css("##{id} input[type='submit']")
354
369
 
355
370
  visit user_path(@user)
356
371
 
@@ -371,6 +386,8 @@ describe "JS behaviour", :js => true do
371
386
  execute_script("$('##{id} input[name=\"favorite_color\"]').blur()")
372
387
  wait_for_ajax
373
388
 
389
+ expect(find('#favorite_color')).to have_content('Blue')
390
+
374
391
  visit user_path(@user)
375
392
 
376
393
  expect(find('#favorite_color')).to have_content('Blue')
@@ -789,6 +806,9 @@ describe "JS behaviour", :js => true do
789
806
  visit double_init_user_path(@user)
790
807
 
791
808
  bip_area @user, :description, "A <a href=\"http://google.es\">link in this text</a> not sanitized."
809
+
810
+ expect(page).to have_link("link in this text", :href => "http://google.es")
811
+
792
812
  visit double_init_user_path(@user)
793
813
 
794
814
  expect(page).to have_link("link in this text", :href => "http://google.es")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: best_in_place
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernat Farrero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-20 00:00:00.000000000 Z
11
+ date: 2015-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack