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 +1 -1
- data/lib/assets/javascripts/formize.js +56 -39
- data/lib/assets/javascripts/jquery.ui.formize.js +56 -39
- data/lib/formize/action_controller.rb +1 -1
- data/lib/formize/definition/field.rb +1 -1
- data/lib/formize/generator.rb +1 -1
- data/lib/formize.rb +12 -0
- metadata +16 -16
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
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
|
-
|
65
|
-
|
66
|
-
|
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
|
-
|
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
|
-
|
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: '<上月'
|
|
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:
|
114
|
-
|
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: '<上月'
|
|
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
|
-
|
204
|
-
|
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
|
-
|
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
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
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
|
-
|
241
|
-
|
257
|
+
$(checkable.attr('data-show')).slideDown();
|
258
|
+
$(checkable.attr('data-hide')).slideUp();
|
242
259
|
} else {
|
243
|
-
|
244
|
-
|
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-
|
376
|
+
$.behave("input[data-autocompletion]", "load", function () {
|
360
377
|
var element = $(this);
|
361
378
|
element.autocomplete({
|
362
|
-
|
363
|
-
|
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
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
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
|
-
|
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:
|
58
|
-
|
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
|
-
|
148
|
-
|
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
|
-
|
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
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
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
|
-
|
185
|
-
|
201
|
+
$(checkable.attr('data-show')).slideDown();
|
202
|
+
$(checkable.attr('data-hide')).slideUp();
|
186
203
|
} else {
|
187
|
-
|
188
|
-
|
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-
|
320
|
+
$.behave("input[data-autocompletion]", "load", function () {
|
304
321
|
var element = $(this);
|
305
322
|
element.autocomplete({
|
306
|
-
|
307
|
-
|
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.
|
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.
|
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}
|
data/lib/formize/generator.rb
CHANGED
@@ -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.
|
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.
|
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:
|
12
|
+
date: 2012-01-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
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: *
|
24
|
+
version_requirements: *12235800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: jquery-rails
|
27
|
-
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: *
|
35
|
+
version_requirements: *12232840
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: fastercsv
|
38
|
-
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: *
|
46
|
+
version_requirements: *12229560
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
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: *
|
57
|
+
version_requirements: *12226540
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
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: *
|
68
|
+
version_requirements: *12148520
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rdoc
|
71
|
-
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: *
|
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:
|
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.
|
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
|