formize 0.0.20 → 0.0.21

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.20
1
+ 0.0.21
@@ -59,30 +59,32 @@ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '<上月'
59
59
  (function ($) {
60
60
  // Replaces `$(selector).live("ready", handler)` which don't work
61
61
  // It rebinds automatically after each ajax request all not-binded.
62
+ $.behavioursCount = 0;
62
63
  $.behaviours = [];
63
64
  $.behave = function (selector, events, handler) {
64
- events = events.split(/\s+/ig);
65
- for (var i = 0; i < events.length; i += 1) {
66
- event = events[i];
65
+ events = events.split(/\s+/ig);
66
+ for (var i = 0; i < events.length; i += 1) {
67
+ var event = events[i];
67
68
  if (event === "load") {
68
- $(document).ready(function(event) {
69
+ var index = $.behavioursCount; $.behavioursCount += 1;
70
+ $.behaviours.push({selector: selector, handler: handler, index: index});
71
+ $(document).ready(function(event) {
69
72
  $(selector).each(handler);
70
- $(selector).prop('alreadyBound', true);
71
- });
72
- $.behaviours.push({selector: selector, handler: handler});
73
+ $(selector).prop('alreadyBound'+index, true);
74
+ });
73
75
  } else {
74
- $(selector).live(event, handler);
76
+ $(selector).live(event, handler);
75
77
  }
76
- }
78
+ }
77
79
  }
78
80
  // Rebinds unbound elements on each ajax request.
79
81
  $(document).ajaxComplete(function () {
80
82
  for (var behaviour in $.behaviours) {
81
83
  behaviour = $.behaviours[behaviour];
82
84
  $(behaviour.selector).each(function(index, element){
83
- if ($(element).prop('alreadyBound') !== true) {
85
+ if ($(element).prop('alreadyBound'+behaviour.index) !== true) {
84
86
  behaviour.handler.call($(element));
85
- $(element).prop('alreadyBound', true);
87
+ $(element).prop('alreadyBound'+behaviour.index, true);
86
88
  }
87
89
  });
88
90
  }
@@ -94,25 +96,40 @@ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '&#x3c;上月'
94
96
  $.ajaxDialog = function (url, settings) {
95
97
  var frame_id = "dialog-" + $.ajaxDialogCount, width = $(document).width();
96
98
  var defaultSettings = {
97
- header: "X-Return-Code"
99
+ header: "X-Return-Code",
100
+ width: 0.6,
101
+ height: 0.8
98
102
  };
99
103
  if (settings === null || settings === undefined) { settings = {}; }
100
104
  settings = $.extend({}, defaultSettings, settings);
101
105
  $.ajax(url, {
102
106
  data: {dialog: frame_id},
103
107
  success: function(data, textStatus, jqXHR) {
104
- var frame = $(document.createElement('div'));
108
+ var frame = $(document.createElement('div')), width, height;
105
109
  frame.attr({id: frame_id, 'class': 'dialog ajax-dialog', style: 'display:none;'});
106
110
  $('body').append(frame);
107
111
  frame.html(data);
108
112
  frame.prop("dialogSettings", settings);
113
+ if (settings.width === 0) {
114
+ width = 'auto';
115
+ } else if (settings.width < 1) {
116
+ width = $(window).width() * settings.width;
117
+ } else {
118
+ width = settings.width;
119
+ }
120
+ if (settings.height === 0) {
121
+ height = 'auto';
122
+ } else if (settings.height < 1) {
123
+ height = $(window).height() * settings.height;
124
+ } else {
125
+ height = settings.height;
126
+ }
109
127
  frame.dialog({
110
128
  autoOpen: false,
111
129
  show: 'fade',
112
130
  modal: true,
113
- width: 'auto',
114
- // height: 'auto',
115
- height: $(window).height()*0.8
131
+ width: width,
132
+ height: height
116
133
  });
117
134
  $.ajaxDialogInitialize(frame);
118
135
  frame.dialog("open");
@@ -142,7 +159,7 @@ $.datepicker.regional['zh-TW'] = { closeText: '關閉', prevText: '&#x3c;上月'
142
159
  $("#" + frame_id + " form").each(function (index, form) {
143
160
  $(form).attr('data-dialog', frame_id);
144
161
  });
145
-
162
+
146
163
  };
147
164
 
148
165
  $.submitAjaxForm = function () {
@@ -200,28 +217,28 @@ Formize.refreshDependents = function (event) {
200
217
  var element = $(this);
201
218
  var params = {};
202
219
  if (element.val() !== null && element.val() !== undefined) {
203
- var dependents = element.attr('data-dependents');
204
- var paramName = element.attr('data-parameter-name') || element.attr('id') || 'value';
220
+ var dependents = element.attr('data-dependents');
221
+ var paramName = element.attr('data-parameter-name') || element.attr('id') || 'value';
205
222
  params[paramName] = element.val();
206
223
  $(dependents).each(function(index, item) {
207
224
  // Replaces element
208
225
  var url = $(item).attr('data-refresh');
209
- var mode = $(item).attr('data-refresh-mode') || 'replace';
226
+ var mode = $(item).attr('data-refresh-mode') || 'replace';
210
227
  if (url !== null) {
211
228
  $.ajax(url, {
212
229
  data: params,
213
230
  success: function(data, textStatus, response) {
214
- if (mode == 'update') {
215
- $(item).html(response.responseText);
216
- } else if (mode == 'update-value') {
217
- if (element.data("attribute")) {
218
- $(item).val($.parseJSON(data)[element.data("attribute")]);
219
- } else {
220
- $(item).val(response.responseText);
221
- }
222
- } else {
231
+ if (mode == 'update') {
232
+ $(item).html(response.responseText);
233
+ } else if (mode == 'update-value') {
234
+ if (element.data("attribute")) {
235
+ $(item).val($.parseJSON(data)[element.data("attribute")]);
236
+ } else {
237
+ $(item).val(response.responseText);
238
+ }
239
+ } else {
223
240
  $(item).replaceWith(response.responseText);
224
- }
241
+ }
225
242
  },
226
243
  error: function(jqXHR, textStatus, errorThrown) {
227
244
  alert("FAILURE (Error "+textStatus+"): "+errorThrown);
@@ -237,11 +254,11 @@ Formize.refreshDependents = function (event) {
237
254
  Formize.toggleCheckboxes = function () {
238
255
  var checkable = $(this);
239
256
  if (checkable.prop("checked")) {
240
- $(checkable.attr('data-show')).slideDown();
241
- $(checkable.attr('data-hide')).slideUp();
257
+ $(checkable.attr('data-show')).slideDown();
258
+ $(checkable.attr('data-hide')).slideUp();
242
259
  } else {
243
- $(checkable.attr('data-show')).slideUp();
244
- $(checkable.attr('data-hide')).slideDown();
260
+ $(checkable.attr('data-show')).slideUp();
261
+ $(checkable.attr('data-hide')).slideDown();
245
262
  }
246
263
  };
247
264
 
@@ -356,17 +373,17 @@ $.behave("a[data-add-item]", "click", function() {
356
373
  return false;
357
374
  });
358
375
 
359
- $.behave("input[data-autocomplete]", "load", function () {
376
+ $.behave("input[data-autocompletion]", "load", function () {
360
377
  var element = $(this);
361
378
  element.autocomplete({
362
- source: element.data("autocomplete"),
363
- minLength: parseInt(element.data("min-length") || 1)
379
+ source: element.data("autocompletion"),
380
+ minLength: parseInt(element.data("min-length") || 1)
364
381
  });
365
382
  });
366
383
 
367
384
  // Refresh dependents on changes
368
- $.behave("*[data-dependents]", "change", Formize.refreshDependents);
369
- $.behave("*[data-dependents]", "emulated:change", Formize.refreshDependents);
385
+ $.behave("*[data-dependents]", "change emulated:change", Formize.refreshDependents);
386
+ // $.behave("*[data-dependents]", "emulated:change", Formize.refreshDependents);
370
387
  // Compensate for changes made with keyboard
371
388
  $.behave("select[data-dependents]", "keypress", Formize.refreshDependents);
372
389
 
@@ -3,30 +3,32 @@
3
3
  (function ($) {
4
4
  // Replaces `$(selector).live("ready", handler)` which don't work
5
5
  // It rebinds automatically after each ajax request all not-binded.
6
+ $.behavioursCount = 0;
6
7
  $.behaviours = [];
7
8
  $.behave = function (selector, events, handler) {
8
- events = events.split(/\s+/ig);
9
- for (var i = 0; i < events.length; i += 1) {
10
- event = events[i];
9
+ events = events.split(/\s+/ig);
10
+ for (var i = 0; i < events.length; i += 1) {
11
+ var event = events[i];
11
12
  if (event === "load") {
12
- $(document).ready(function(event) {
13
+ var index = $.behavioursCount; $.behavioursCount += 1;
14
+ $.behaviours.push({selector: selector, handler: handler, index: index});
15
+ $(document).ready(function(event) {
13
16
  $(selector).each(handler);
14
- $(selector).prop('alreadyBound', true);
15
- });
16
- $.behaviours.push({selector: selector, handler: handler});
17
+ $(selector).prop('alreadyBound'+index, true);
18
+ });
17
19
  } else {
18
- $(selector).live(event, handler);
20
+ $(selector).live(event, handler);
19
21
  }
20
- }
22
+ }
21
23
  }
22
24
  // Rebinds unbound elements on each ajax request.
23
25
  $(document).ajaxComplete(function () {
24
26
  for (var behaviour in $.behaviours) {
25
27
  behaviour = $.behaviours[behaviour];
26
28
  $(behaviour.selector).each(function(index, element){
27
- if ($(element).prop('alreadyBound') !== true) {
29
+ if ($(element).prop('alreadyBound'+behaviour.index) !== true) {
28
30
  behaviour.handler.call($(element));
29
- $(element).prop('alreadyBound', true);
31
+ $(element).prop('alreadyBound'+behaviour.index, true);
30
32
  }
31
33
  });
32
34
  }
@@ -38,25 +40,40 @@
38
40
  $.ajaxDialog = function (url, settings) {
39
41
  var frame_id = "dialog-" + $.ajaxDialogCount, width = $(document).width();
40
42
  var defaultSettings = {
41
- header: "X-Return-Code"
43
+ header: "X-Return-Code",
44
+ width: 0.6,
45
+ height: 0.8
42
46
  };
43
47
  if (settings === null || settings === undefined) { settings = {}; }
44
48
  settings = $.extend({}, defaultSettings, settings);
45
49
  $.ajax(url, {
46
50
  data: {dialog: frame_id},
47
51
  success: function(data, textStatus, jqXHR) {
48
- var frame = $(document.createElement('div'));
52
+ var frame = $(document.createElement('div')), width, height;
49
53
  frame.attr({id: frame_id, 'class': 'dialog ajax-dialog', style: 'display:none;'});
50
54
  $('body').append(frame);
51
55
  frame.html(data);
52
56
  frame.prop("dialogSettings", settings);
57
+ if (settings.width === 0) {
58
+ width = 'auto';
59
+ } else if (settings.width < 1) {
60
+ width = $(window).width() * settings.width;
61
+ } else {
62
+ width = settings.width;
63
+ }
64
+ if (settings.height === 0) {
65
+ height = 'auto';
66
+ } else if (settings.height < 1) {
67
+ height = $(window).height() * settings.height;
68
+ } else {
69
+ height = settings.height;
70
+ }
53
71
  frame.dialog({
54
72
  autoOpen: false,
55
73
  show: 'fade',
56
74
  modal: true,
57
- width: 'auto',
58
- // height: 'auto',
59
- height: $(window).height()*0.8
75
+ width: width,
76
+ height: height
60
77
  });
61
78
  $.ajaxDialogInitialize(frame);
62
79
  frame.dialog("open");
@@ -86,7 +103,7 @@
86
103
  $("#" + frame_id + " form").each(function (index, form) {
87
104
  $(form).attr('data-dialog', frame_id);
88
105
  });
89
-
106
+
90
107
  };
91
108
 
92
109
  $.submitAjaxForm = function () {
@@ -144,28 +161,28 @@ Formize.refreshDependents = function (event) {
144
161
  var element = $(this);
145
162
  var params = {};
146
163
  if (element.val() !== null && element.val() !== undefined) {
147
- var dependents = element.attr('data-dependents');
148
- var paramName = element.attr('data-parameter-name') || element.attr('id') || 'value';
164
+ var dependents = element.attr('data-dependents');
165
+ var paramName = element.attr('data-parameter-name') || element.attr('id') || 'value';
149
166
  params[paramName] = element.val();
150
167
  $(dependents).each(function(index, item) {
151
168
  // Replaces element
152
169
  var url = $(item).attr('data-refresh');
153
- var mode = $(item).attr('data-refresh-mode') || 'replace';
170
+ var mode = $(item).attr('data-refresh-mode') || 'replace';
154
171
  if (url !== null) {
155
172
  $.ajax(url, {
156
173
  data: params,
157
174
  success: function(data, textStatus, response) {
158
- if (mode == 'update') {
159
- $(item).html(response.responseText);
160
- } else if (mode == 'update-value') {
161
- if (element.data("attribute")) {
162
- $(item).val($.parseJSON(data)[element.data("attribute")]);
163
- } else {
164
- $(item).val(response.responseText);
165
- }
166
- } else {
175
+ if (mode == 'update') {
176
+ $(item).html(response.responseText);
177
+ } else if (mode == 'update-value') {
178
+ if (element.data("attribute")) {
179
+ $(item).val($.parseJSON(data)[element.data("attribute")]);
180
+ } else {
181
+ $(item).val(response.responseText);
182
+ }
183
+ } else {
167
184
  $(item).replaceWith(response.responseText);
168
- }
185
+ }
169
186
  },
170
187
  error: function(jqXHR, textStatus, errorThrown) {
171
188
  alert("FAILURE (Error "+textStatus+"): "+errorThrown);
@@ -181,11 +198,11 @@ Formize.refreshDependents = function (event) {
181
198
  Formize.toggleCheckboxes = function () {
182
199
  var checkable = $(this);
183
200
  if (checkable.prop("checked")) {
184
- $(checkable.attr('data-show')).slideDown();
185
- $(checkable.attr('data-hide')).slideUp();
201
+ $(checkable.attr('data-show')).slideDown();
202
+ $(checkable.attr('data-hide')).slideUp();
186
203
  } else {
187
- $(checkable.attr('data-show')).slideUp();
188
- $(checkable.attr('data-hide')).slideDown();
204
+ $(checkable.attr('data-show')).slideUp();
205
+ $(checkable.attr('data-hide')).slideDown();
189
206
  }
190
207
  };
191
208
 
@@ -300,17 +317,17 @@ $.behave("a[data-add-item]", "click", function() {
300
317
  return false;
301
318
  });
302
319
 
303
- $.behave("input[data-autocomplete]", "load", function () {
320
+ $.behave("input[data-autocompletion]", "load", function () {
304
321
  var element = $(this);
305
322
  element.autocomplete({
306
- source: element.data("autocomplete"),
307
- minLength: parseInt(element.data("min-length") || 1)
323
+ source: element.data("autocompletion"),
324
+ minLength: parseInt(element.data("min-length") || 1)
308
325
  });
309
326
  });
310
327
 
311
328
  // Refresh dependents on changes
312
- $.behave("*[data-dependents]", "change", Formize.refreshDependents);
313
- $.behave("*[data-dependents]", "emulated:change", Formize.refreshDependents);
329
+ $.behave("*[data-dependents]", "change emulated:change", Formize.refreshDependents);
330
+ // $.behave("*[data-dependents]", "emulated:change", Formize.refreshDependents);
314
331
  // Compensate for changes made with keyboard
315
332
  $.behave("select[data-dependents]", "keypress", Formize.refreshDependents);
316
333
 
@@ -64,7 +64,7 @@ module Formize
64
64
  for column in form.model.columns
65
65
  next if column.name =~ /_count$/ or [:id, :created_at, :updated_at, :lock_version, :type, :creator_id, :updater_id].include?(column.name.to_sym)
66
66
  if column.name =~ /_id$/
67
- reflections = form.model.reflections.select{ |k, x| x.primary_key_name.to_s == column.name.to_s }
67
+ reflections = form.model.reflections.select{ |k, x| x.send(Formize.foreign_key).to_s == column.name.to_s }
68
68
  if reflections.size == 1
69
69
  f.field(column.name.gsub(/_id$/, ''), :choices=>:all, :source=>:foreign_class, :new=>true)
70
70
  # elsif reflections.size > 1 # AMBIGUITY
@@ -34,7 +34,7 @@ module Formize
34
34
  @source = @options.delete(:source) # || @reflection.class_name
35
35
  @is_method = true if @options[:new]
36
36
  @method_name = self.form.unique_name + "_inf_" + @name
37
- @method = @reflection.primary_key_name
37
+ @method = @reflection.send(Formize.foreign_key)
38
38
  unless @item_label = @options.delete(:item_label)
39
39
  model = @reflection.class_name.constantize
40
40
  available_methods = (model.columns_hash.keys+model.instance_methods).collect{|x| x.to_s}
@@ -63,7 +63,7 @@ module Formize
63
63
  # locals[df.name.to_sym] = Code.new(df.name)
64
64
  end
65
65
  if dependent.is_a?(Formize::Definition::Field) and dependent.reflection
66
- event << " #{record_name}.#{dependent.reflection.primary_key_name} = params[:selected].to_i if params[:selected]\n"
66
+ event << " #{record_name}.#{dependent.reflection.send(Formize.foreign_key)} = params[:selected].to_i if params[:selected]\n"
67
67
  end
68
68
  event << " render(:inline=>'<%=#{dependent.prototype}-%>', :locals=>#{locals.inspect})\n"
69
69
  event << "end\n"
data/lib/formize.rb CHANGED
@@ -3,6 +3,18 @@ require 'formize/engine' if defined?(::Rails)
3
3
 
4
4
  # :include: ../README.rdoc
5
5
  module Formize
6
+ if defined?(::Rails)
7
+ if ::Rails.version >= "3.1"
8
+ def self.foreign_key
9
+ :foreign_key
10
+ end
11
+ else
12
+ def self.foreign_key
13
+ :primary_key_name
14
+ end
15
+ end
16
+ end
17
+
6
18
  extend ActiveSupport::Autoload
7
19
 
8
20
  def self.configure(name, value = nil) # :nodoc:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.20
4
+ version: 0.0.21
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: 2011-09-27 00:00:00.000000000Z
12
+ date: 2012-01-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &15013920 !ruby/object:Gem::Requirement
16
+ requirement: &12235800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *15013920
24
+ version_requirements: *12235800
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jquery-rails
27
- requirement: &15001720 !ruby/object:Gem::Requirement
27
+ requirement: &12232840 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *15001720
35
+ version_requirements: *12232840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: fastercsv
38
- requirement: &14997320 !ruby/object:Gem::Requirement
38
+ requirement: &12229560 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *14997320
46
+ version_requirements: *12229560
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &14986600 !ruby/object:Gem::Requirement
49
+ requirement: &12226540 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.6.4
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *14986600
57
+ version_requirements: *12226540
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &14984080 !ruby/object:Gem::Requirement
60
+ requirement: &12148520 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *14984080
68
+ version_requirements: *12148520
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
- requirement: &14982280 !ruby/object:Gem::Requirement
71
+ requirement: &12143760 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: 2.4.2
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *14982280
79
+ version_requirements: *12143760
80
80
  description: Like simple_form or formtastic, it aims to handle easily forms but taking
81
81
  in account AJAX and HTML5 on depending fields mainly.
82
82
  email: brice.texier@ekylibre.org
@@ -209,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
209
  version: '0'
210
210
  segments:
211
211
  - 0
212
- hash: 1168190452550627795
212
+ hash: 4163298408554769936
213
213
  required_rubygems_version: !ruby/object:Gem::Requirement
214
214
  none: false
215
215
  requirements:
@@ -218,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  version: '0'
219
219
  requirements: []
220
220
  rubyforge_project:
221
- rubygems_version: 1.8.7
221
+ rubygems_version: 1.8.11
222
222
  signing_key:
223
223
  specification_version: 3
224
224
  summary: Simple form DSL with dynamic interactions for Rails