formize 0.0.20 → 0.0.21

Sign up to get free protection for your applications and to get access to all the features.
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