formily 0.0.5.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +156 -0
- data/LICENSE.txt +21 -0
- data/README.md +84 -0
- data/Rakefile +1 -0
- data/app/assets/fonts/formily-icon.eot +0 -0
- data/app/assets/fonts/formily-icon.svg +26 -0
- data/app/assets/fonts/formily-icon.ttf +0 -0
- data/app/assets/fonts/formily-icon.woff +0 -0
- data/app/assets/fonts/formily-icon.woff2 +0 -0
- data/app/assets/images/blank_file.png +0 -0
- data/app/assets/images/formily_spin.gif +0 -0
- data/app/assets/javascripts/formily.js +5 -0
- data/app/assets/javascripts/formily/base/ajax_reloader.js +24 -0
- data/app/assets/javascripts/formily/base/buttons.js +160 -0
- data/app/assets/javascripts/formily/base/form_response.js +28 -0
- data/app/assets/javascripts/formily/base/local_time.js +9 -0
- data/app/assets/javascripts/formily/editor.js +46 -0
- data/app/assets/javascripts/formily/editor/editor_buttons.js +186 -0
- data/app/assets/javascripts/formily/editor/form_preview.js +53 -0
- data/app/assets/javascripts/formily/editor/input_model.js +76 -0
- data/app/assets/javascripts/formily/editor/input_on_change.js +83 -0
- data/app/assets/javascripts/formily/editor/related_fields.js +76 -0
- data/app/assets/javascripts/formily/form.js +22 -0
- data/app/assets/javascripts/formily/formily_editor.js +329 -0
- data/app/assets/javascripts/formily/formily_modal.js +104 -0
- data/app/assets/javascripts/formily/formily_url.js.erb +26 -0
- data/app/assets/javascripts/formily/inputs/conditioned.js +4 -0
- data/app/assets/javascripts/formily/inputs/conditioned/checkbox.js +73 -0
- data/app/assets/javascripts/formily/inputs/conditioned/option.js +82 -0
- data/app/assets/javascripts/formily/inputs/conditioned/radio.js +160 -0
- data/app/assets/javascripts/formily/inputs/date_time.js +25 -0
- data/app/assets/javascripts/formily/inputs/input_tab.js +18 -0
- data/app/assets/javascripts/formily/inputs/location.js +39 -0
- data/app/assets/javascripts/formily/inputs/multi_file.js +228 -0
- data/app/assets/javascripts/formily/lib/jquery.datetimepicker.full.min.js +2 -0
- data/app/assets/javascripts/formily/lib/modernizr.js +8 -0
- data/app/assets/javascripts/formily/lib/strftime.min.js +12 -0
- data/app/assets/javascripts/formily/lib/tag-it.min.js +17 -0
- data/app/assets/javascripts/formily/mobile.js +10 -0
- data/app/assets/javascripts/formily_app.js +15 -0
- data/app/assets/javascripts/formily_iframe.js +11 -0
- data/app/assets/stylesheets/formily.scss +14 -0
- data/app/assets/stylesheets/formily/base/fonts.scss +65 -0
- data/app/assets/stylesheets/formily/base/layout.scss +66 -0
- data/app/assets/stylesheets/formily/base/links.css +7 -0
- data/app/assets/stylesheets/formily/base/ui-dialog.scss +129 -0
- data/app/assets/stylesheets/formily/editor.scss +25 -0
- data/app/assets/stylesheets/formily/editor/inputs_group_list.css +14 -0
- data/app/assets/stylesheets/formily/editor/inputs_list.css +97 -0
- data/app/assets/stylesheets/formily/editor/related_modal.scss +49 -0
- data/app/assets/stylesheets/formily/formily_editor.scss +53 -0
- data/app/assets/stylesheets/formily/formily_modal.scss +2 -0
- data/app/assets/stylesheets/formily/foundation_fix.scss +140 -0
- data/app/assets/stylesheets/formily/inputs/date_time.scss +8 -0
- data/app/assets/stylesheets/formily/inputs/multi_file.scss +111 -0
- data/app/assets/stylesheets/formily/jquery.datetimepicker.min.css +1 -0
- data/app/assets/stylesheets/formily/lib/jquery.tagit.css +69 -0
- data/app/assets/stylesheets/formily/modal/content.scss +36 -0
- data/app/assets/stylesheets/formily/modal/iframe.scss +29 -0
- data/app/assets/stylesheets/formily_iframe.scss +64 -0
- data/app/assets/stylesheets/foundation_formily.scss +20 -0
- data/app/controllers/formily/file_controller.rb +17 -0
- data/app/controllers/formily/form_types_controller.rb +46 -0
- data/app/controllers/formily/formilyable_controller.rb +98 -0
- data/app/controllers/formily/forms_controller.rb +133 -0
- data/app/controllers/formily/iframe/forms_controller.rb +28 -0
- data/app/controllers/formily/inputs_controller.rb +113 -0
- data/app/controllers/formily/submit_data_controller.rb +151 -0
- data/app/controllers/formily_controller.rb +22 -0
- data/app/helpers/formily_helper.rb +17 -0
- data/app/models/formily/checkbox_input.rb +8 -0
- data/app/models/formily/checkbox_input_group.rb +14 -0
- data/app/models/formily/date_time_input.rb +19 -0
- data/app/models/formily/file.rb +14 -0
- data/app/models/formily/form.rb +41 -0
- data/app/models/formily/form_type.rb +10 -0
- data/app/models/formily/formilyable_form.rb +18 -0
- data/app/models/formily/input.rb +124 -0
- data/app/models/formily/input_value.rb +23 -0
- data/app/models/formily/multiple_file_input.rb +18 -0
- data/app/models/formily/option_input.rb +8 -0
- data/app/models/formily/options_input_group.rb +14 -0
- data/app/models/formily/radio_input.rb +12 -0
- data/app/models/formily/radio_input_group.rb +14 -0
- data/app/models/formily/static_text.rb +8 -0
- data/app/models/formily/submit.rb +47 -0
- data/app/models/formily/text_input.rb +8 -0
- data/app/models/formily/textarea_input.rb +8 -0
- data/app/views/formily/data/_forms_table.html.haml +19 -0
- data/app/views/formily/data/_many_tables.html.erb +3 -0
- data/app/views/formily/data/_table.html.erb +33 -0
- data/app/views/formily/data/submit_data_table.html.haml +32 -0
- data/app/views/formily/editor/_default_value.haml +18 -0
- data/app/views/formily/editor/_editor.haml +18 -0
- data/app/views/formily/editor/_modal.haml +197 -0
- data/app/views/formily/editor/partial/_group.haml +41 -0
- data/app/views/formily/editor/partial/_group_input.haml +36 -0
- data/app/views/formily/editor/partial/_input.haml +35 -0
- data/app/views/formily/editor/partial/_input_fieldset.haml +12 -0
- data/app/views/formily/form_types/_form.haml +9 -0
- data/app/views/formily/form_types/edit.haml +6 -0
- data/app/views/formily/form_types/index.haml +24 -0
- data/app/views/formily/form_types/new.haml +6 -0
- data/app/views/formily/formilyable/index.haml +67 -0
- data/app/views/formily/formilyable/new.haml +37 -0
- data/app/views/formily/forms/_form.haml +34 -0
- data/app/views/formily/forms/_preview.haml +16 -0
- data/app/views/formily/forms/edit.haml +5 -0
- data/app/views/formily/forms/index.haml +40 -0
- data/app/views/formily/forms/new.haml +5 -0
- data/app/views/formily/forms/reload_formily_table.haml +4 -0
- data/app/views/formily/forms/show.haml +1 -0
- data/app/views/formily/helpers/_iframe_formily_modal.html.haml +3 -0
- data/app/views/formily/helpers/_related_forms.html.haml +12 -0
- data/app/views/formily/helpers/_related_forms_tr.html.haml +28 -0
- data/app/views/formily/iframe/forms/show.haml +1 -0
- data/app/views/formily/inputs/_group.haml +40 -0
- data/app/views/formily/inputs/_group_input.haml +36 -0
- data/app/views/formily/inputs/_input.haml +35 -0
- data/app/views/formily/inputs/_input_fieldset.haml +12 -0
- data/app/views/formily/inputs/render_input_html.haml +7 -0
- data/app/views/formily/partial/_form.haml +37 -0
- data/app/views/formily/partial/inputs/_checkbox_input.haml +18 -0
- data/app/views/formily/partial/inputs/_checkbox_input_group.haml +36 -0
- data/app/views/formily/partial/inputs/_conditioned_fields.haml +36 -0
- data/app/views/formily/partial/inputs/_date_time_input.haml +15 -0
- data/app/views/formily/partial/inputs/_file_input.haml +20 -0
- data/app/views/formily/partial/inputs/_file_preview.haml +14 -0
- data/app/views/formily/partial/inputs/_input.haml +1 -0
- data/app/views/formily/partial/inputs/_multiple_file_input.haml +25 -0
- data/app/views/formily/partial/inputs/_options_input_group.haml +77 -0
- data/app/views/formily/partial/inputs/_radio_input_group.haml +41 -0
- data/app/views/formily/partial/inputs/_static_text.haml +11 -0
- data/app/views/formily/partial/inputs/_text_input.haml +19 -0
- data/app/views/formily/partial/inputs/_textarea_input.haml +19 -0
- data/app/views/formily/submit_data/submit.html.erb +5 -0
- data/app/views/formily/submit_data/submit.json.jbuilder +5 -0
- data/app/views/layouts/formily_iframe.haml +16 -0
- data/config/routes.rb +41 -0
- data/formily.gemspec +41 -0
- data/lib/formily.rb +37 -0
- data/lib/formily/config.rb +72 -0
- data/lib/formily/engine.rb +12 -0
- data/lib/formily/helpers/view_helper.rb +114 -0
- data/lib/formily/relation.rb +26 -0
- data/lib/formily/relation/formily_methods.rb +30 -0
- data/lib/formily/relation/has_many_methods.rb +16 -0
- data/lib/formily/submitted_data_table.rb +74 -0
- data/lib/formily/version.rb +4 -0
- data/lib/generators/formily/install/install_generator.rb +43 -0
- data/lib/generators/formily/install/templates/create_formily_data.rb +28 -0
- data/lib/generators/formily/install/templates/create_formily_files.rb +13 -0
- data/lib/generators/formily/install/templates/create_formily_form_types.rb +12 -0
- data/lib/generators/formily/install/templates/create_formily_forms.rb +16 -0
- data/lib/generators/formily/install/templates/create_formily_inputs.rb +24 -0
- data/lib/generators/formily/install/templates/create_formilyable_forms.rb +17 -0
- data/lib/generators/formily/install/templates/formily.rb +21 -0
- data/lib/generators/formily/views/views_generator.rb +11 -0
- metadata +350 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
// Routes JS
|
2
|
+
<% url = Rails.application.routes.url_helpers %>
|
3
|
+
window.FormilyRoutes = {
|
4
|
+
input_create_path: function(){
|
5
|
+
// POST
|
6
|
+
return "<%= url.formily_inputs_path %>";
|
7
|
+
},
|
8
|
+
input_update_path: function(id){
|
9
|
+
// PUT
|
10
|
+
return "<%= url.formily_input_path(0).to_s[0...-1] %>" + id.toString();
|
11
|
+
},
|
12
|
+
input_delete_path: function(id){
|
13
|
+
// DELETE
|
14
|
+
return "<%= url.formily_input_path(0).to_s[0...-1] %>" + id.toString();
|
15
|
+
},
|
16
|
+
form_preview_path: function(){
|
17
|
+
//POST
|
18
|
+
return "<%= url.preview_form_formily_forms_path %>";
|
19
|
+
},
|
20
|
+
form_file_path: function(id) {
|
21
|
+
return "<%= url.formily_file_path(0).to_s[0...-1] %>" + id.toString();
|
22
|
+
},
|
23
|
+
form_upload_file_path: function () {
|
24
|
+
return "<%= url.upload_file_formily_submit_data_path %>";
|
25
|
+
}
|
26
|
+
};
|
@@ -0,0 +1,73 @@
|
|
1
|
+
// Checkbox conditioned fields
|
2
|
+
|
3
|
+
$(document).ready(function(){
|
4
|
+
|
5
|
+
$(document).on('change', 'input[type=checkbox][data-formily-conditioned]', function(){
|
6
|
+
var conditionedField, self = $(this);
|
7
|
+
conditionedField = self.parent(0).find('input, textarea').not(self);
|
8
|
+
|
9
|
+
if (self.get(0).checked) {
|
10
|
+
// Show conditioned field
|
11
|
+
if(conditionedField.attr('type') == 'file') {
|
12
|
+
conditionedField.parent(0).show(0);
|
13
|
+
} else {
|
14
|
+
conditionedField.show(0);
|
15
|
+
}
|
16
|
+
if(conditionedField.attr('multiple')) {
|
17
|
+
conditionedField.attr('name', self.data('cName') + '[]');
|
18
|
+
conditionedField.parents('.formily-input:first').show(0);
|
19
|
+
} else {
|
20
|
+
conditionedField.attr('name', self.data('cName'));
|
21
|
+
}
|
22
|
+
self.get(0).removeAttribute('name');
|
23
|
+
conditionedField.focus();
|
24
|
+
} else {
|
25
|
+
// Hide conditioned field
|
26
|
+
if(conditionedField.attr('type') == 'file') {
|
27
|
+
if(confirm('Delete all files ?')){
|
28
|
+
if(conditionedField.attr('multiple')) {
|
29
|
+
conditionedField.parents('.formily-input:first').hide(0);
|
30
|
+
} else {
|
31
|
+
conditionedField.parent(0).hide(0);
|
32
|
+
}
|
33
|
+
|
34
|
+
var input_id = conditionedField.attr('name').match(/\[(\d+)\](\[\])?$/)[1];
|
35
|
+
|
36
|
+
var form = conditionedField.parents('form');
|
37
|
+
|
38
|
+
var data = {
|
39
|
+
user_id: form.find('input[name=user_id]').val(),
|
40
|
+
authenticity_token: form.find('input[name=authenticity_token]').val(),
|
41
|
+
form_id: form.find('input[name=form_id]').val(),
|
42
|
+
resource_id: form.find('input[name=resource_id]').val(),
|
43
|
+
resource_type: form.find('input[name=resource_type]').val(),
|
44
|
+
input_id: input_id
|
45
|
+
};
|
46
|
+
|
47
|
+
$.ajax({
|
48
|
+
url: '/formily/file/delete_by_input_id',
|
49
|
+
data: data,
|
50
|
+
type: 'DELETE'
|
51
|
+
});
|
52
|
+
|
53
|
+
conditionedField.parents('.formily-input:first').find('.file_upload').remove();
|
54
|
+
|
55
|
+
conditionedField.get(0).removeAttribute('name');
|
56
|
+
self.attr('name', self.data('cName'));
|
57
|
+
self.focus();
|
58
|
+
} else {
|
59
|
+
self.get(0).checked = true;
|
60
|
+
}
|
61
|
+
} else {
|
62
|
+
conditionedField.hide(0);
|
63
|
+
conditionedField.get(0).removeAttribute('name');
|
64
|
+
//conditionedField.get(0).removeAttribute('value');
|
65
|
+
self.attr('name', self.data('cName'));
|
66
|
+
self.focus();
|
67
|
+
}
|
68
|
+
|
69
|
+
}
|
70
|
+
|
71
|
+
});
|
72
|
+
|
73
|
+
});
|
@@ -0,0 +1,82 @@
|
|
1
|
+
// Select options conditioned fields
|
2
|
+
|
3
|
+
$(document).ready(function(){
|
4
|
+
|
5
|
+
var prevOption;
|
6
|
+
|
7
|
+
$(document).on('focus click', 'select[data-formily-name]', function(e){
|
8
|
+
var self = $(this);
|
9
|
+
prevOption = self.find('option[value=' + self.val() + ']');
|
10
|
+
});
|
11
|
+
|
12
|
+
$(document).on('change', 'select[data-formily-name]', function(e){
|
13
|
+
|
14
|
+
var self = $(this);
|
15
|
+
var option = self.find('option[value=' + self.val() + ']');
|
16
|
+
var conditioned_field = option.data('formilyConditioned');
|
17
|
+
|
18
|
+
if(prevOption && prevOption.length > 0 && prevOption.data('formilyConditioned')) {
|
19
|
+
var prevConditionedField = self.parent().find('[data-formily-conditioned-field="' + prevOption.data('formilyConditioned') + '"]');
|
20
|
+
|
21
|
+
if(prevOption.data('formilyConditioned').match(/file/i)) {
|
22
|
+
|
23
|
+
var input_id = prevConditionedField.attr('name').match(/\[(\d+)\](\[\])?$/)[1];
|
24
|
+
|
25
|
+
var form = self.parents('form');
|
26
|
+
|
27
|
+
var data = {
|
28
|
+
user_id: form.find('input[name=user_id]').val(),
|
29
|
+
authenticity_token: form.find('input[name=authenticity_token]').val(),
|
30
|
+
form_id: form.find('input[name=form_id]').val(),
|
31
|
+
resource_id: form.find('input[name=resource_id]').val(),
|
32
|
+
resource_type: form.find('input[name=resource_type]').val(),
|
33
|
+
input_id: input_id
|
34
|
+
};
|
35
|
+
|
36
|
+
$.ajax({
|
37
|
+
url: '/formily/file/delete_by_input_id',
|
38
|
+
data: data,
|
39
|
+
type: 'DELETE'
|
40
|
+
});
|
41
|
+
|
42
|
+
prevConditionedField.get(0).removeAttribute('name');
|
43
|
+
prevConditionedField.parent().find('.file_upload').remove();
|
44
|
+
|
45
|
+
if(prevConditionedField.attr('multiple')) {
|
46
|
+
prevConditionedField.parent().parent().hide(0);
|
47
|
+
} else {
|
48
|
+
prevConditionedField.parent().hide(0);
|
49
|
+
}
|
50
|
+
|
51
|
+
} else {
|
52
|
+
prevConditionedField.get(0).removeAttribute('name');
|
53
|
+
prevConditionedField.hide(0);
|
54
|
+
}
|
55
|
+
|
56
|
+
}
|
57
|
+
|
58
|
+
self.attr('name', self.data('formilyName'));
|
59
|
+
|
60
|
+
if(conditioned_field) {
|
61
|
+
|
62
|
+
var i = self.parent().find('[data-formily-conditioned-field="' + conditioned_field + '"]');
|
63
|
+
|
64
|
+
self.get(0).removeAttribute('name');
|
65
|
+
|
66
|
+
if(i.attr('type') == 'file') {
|
67
|
+
|
68
|
+
if(i.attr('multiple')) {
|
69
|
+
i.parent().parent().show(0);
|
70
|
+
} else {
|
71
|
+
i.parent().show(0);
|
72
|
+
}
|
73
|
+
|
74
|
+
} else {
|
75
|
+
i.show(0);
|
76
|
+
}
|
77
|
+
|
78
|
+
i.attr('name', option.data('cName'));
|
79
|
+
}
|
80
|
+
});
|
81
|
+
|
82
|
+
});
|
@@ -0,0 +1,160 @@
|
|
1
|
+
// Radio conditioned fields
|
2
|
+
|
3
|
+
$(document).on('ready formily_loaded', function(){
|
4
|
+
|
5
|
+
var showConditionedField = function(field){
|
6
|
+
|
7
|
+
var cField = field.parent(0).find('input, textarea').not(field);
|
8
|
+
|
9
|
+
if(field.data('formilyConditioned')) {
|
10
|
+
field.get(0).removeAttribute('name');
|
11
|
+
cField.attr('name', field.data('c2Name'));
|
12
|
+
}
|
13
|
+
|
14
|
+
if(cField.attr('type') == 'file') {
|
15
|
+
|
16
|
+
if(cField.attr('multiple')) {
|
17
|
+
cField.parents('.formily-input:first').show(0);
|
18
|
+
} else {
|
19
|
+
cField.parent().show(0);
|
20
|
+
cField.show(0);
|
21
|
+
}
|
22
|
+
|
23
|
+
} else {
|
24
|
+
cField.show(0);
|
25
|
+
}
|
26
|
+
|
27
|
+
};
|
28
|
+
|
29
|
+
var hideConditionedField = function(field){
|
30
|
+
|
31
|
+
var cField = field.parent(0).find('input, textarea').not(field);
|
32
|
+
|
33
|
+
if(field.data('formilyConditioned')) {
|
34
|
+
field.attr('name', field.data('cName'));
|
35
|
+
cField.get(0).removeAttribute('name');
|
36
|
+
}
|
37
|
+
|
38
|
+
if(cField.attr('multiple')) {
|
39
|
+
cField.parents('.formily-input:first').hide(0);
|
40
|
+
field.parent().find('.formily-files-container').html('');
|
41
|
+
} else {
|
42
|
+
cField.hide(0);
|
43
|
+
field.parent().find('.formily-files-container').html('');
|
44
|
+
}
|
45
|
+
|
46
|
+
if(cField.attr('type') == 'file') {
|
47
|
+
// Remove all files
|
48
|
+
var input_id = field.attr('data-c2-name').match(/\[(\d+)\](\[\])?$/)[1];
|
49
|
+
var form = field.parents('form');
|
50
|
+
|
51
|
+
var data = {
|
52
|
+
user_id: form.find('input[name=user_id]').val(),
|
53
|
+
authenticity_token: form.find('input[name=authenticity_token]').val(),
|
54
|
+
form_id: form.find('input[name=form_id]').val(),
|
55
|
+
resource_id: form.find('input[name=resource_id]').val(),
|
56
|
+
resource_type: form.find('input[name=resource_type]').val(),
|
57
|
+
input_id: input_id
|
58
|
+
};
|
59
|
+
|
60
|
+
$.ajax({
|
61
|
+
url: '/formily/file/delete_by_input_id',
|
62
|
+
data: data,
|
63
|
+
type: 'DELETE'
|
64
|
+
});
|
65
|
+
}
|
66
|
+
|
67
|
+
};
|
68
|
+
|
69
|
+
// Initialize radio groups
|
70
|
+
$('fieldset.formily-radio-group').each(function(_, elem){
|
71
|
+
var self = $(elem);
|
72
|
+
var radio = self.find('input[type=radio][checked]');
|
73
|
+
|
74
|
+
if(radio.length > 0) {
|
75
|
+
self.data('prevRadio', radio);
|
76
|
+
} else {
|
77
|
+
self.data('prevRadio', 0);
|
78
|
+
}
|
79
|
+
});
|
80
|
+
|
81
|
+
$(document).on('change', 'input[type=radio][data-formily-conditioned]', function(e){
|
82
|
+
|
83
|
+
var self = $(this);
|
84
|
+
var fieldset = self.parents('fieldset');
|
85
|
+
|
86
|
+
if(fieldset.data('prevRadio') == 0){
|
87
|
+
fieldset.data('prevRadio', self);
|
88
|
+
}
|
89
|
+
|
90
|
+
var prevRadio = fieldset.data('prevRadio');
|
91
|
+
|
92
|
+
if(prevRadio.not(self).length == 0) {
|
93
|
+
// First init
|
94
|
+
showConditionedField(self);
|
95
|
+
|
96
|
+
self.prop('checked', true);
|
97
|
+
self.attr('checked', 'checked');
|
98
|
+
|
99
|
+
} else {
|
100
|
+
|
101
|
+
if(prevRadio.data('formilyConditioned')) {
|
102
|
+
// Hide conditioned field
|
103
|
+
var i = prevRadio.parent(0).find('input, textarea').not(prevRadio);
|
104
|
+
|
105
|
+
if(i.attr('type') == 'file') {
|
106
|
+
|
107
|
+
if (confirm('Delete all files ?')) {
|
108
|
+
|
109
|
+
if(self.data('formilyConditioned')) {
|
110
|
+
showConditionedField(self);
|
111
|
+
}
|
112
|
+
|
113
|
+
hideConditionedField(prevRadio);
|
114
|
+
|
115
|
+
prevRadio.prop('checked', false);
|
116
|
+
prevRadio.get(0).removeAttribute('checked');
|
117
|
+
|
118
|
+
self.prop('checked', true);
|
119
|
+
self.attr('checked', 'checked');
|
120
|
+
|
121
|
+
fieldset.data('prevRadio', self);
|
122
|
+
} else {
|
123
|
+
|
124
|
+
if(self.data('formilyConditioned')) {
|
125
|
+
hideConditionedField(self);
|
126
|
+
}
|
127
|
+
|
128
|
+
prevRadio.prop('checked', true);
|
129
|
+
prevRadio.attr('checked', 'checked');
|
130
|
+
self.prop('checked', false);
|
131
|
+
self.get(0).removeAttribute('checked');
|
132
|
+
fieldset.data('prevRadio', prevRadio);
|
133
|
+
}
|
134
|
+
} else {
|
135
|
+
|
136
|
+
hideConditionedField(prevRadio);
|
137
|
+
showConditionedField(self);
|
138
|
+
|
139
|
+
self.prop('checked', true);
|
140
|
+
self.attr('checked', 'checked');
|
141
|
+
|
142
|
+
prevRadio.prop('checked', false);
|
143
|
+
prevRadio.get(0).removeAttribute('checked');
|
144
|
+
|
145
|
+
fieldset.data('prevRadio', self);
|
146
|
+
}
|
147
|
+
|
148
|
+
} else {
|
149
|
+
showConditionedField(self);
|
150
|
+
self.prop('checked', true);
|
151
|
+
self.attr('checked', 'checked');
|
152
|
+
fieldset.data('prevRadio', self);
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
e.preventDefault();
|
157
|
+
|
158
|
+
});
|
159
|
+
|
160
|
+
});
|
@@ -0,0 +1,25 @@
|
|
1
|
+
// DateTime input
|
2
|
+
//= require formily/lib/jquery.datetimepicker.full.min
|
3
|
+
//= require formily/lib/strftime.min
|
4
|
+
|
5
|
+
$(document).on('ready formily_loaded', function(){
|
6
|
+
|
7
|
+
$('.formily_date_time_picker').each(function(_, el){
|
8
|
+
var dt_field = $(el);
|
9
|
+
var cur_date = new Date();
|
10
|
+
|
11
|
+
dt_field.datetimepicker({
|
12
|
+
formatDate:'Y/m/d',
|
13
|
+
scrollMonth: false,
|
14
|
+
yearStart: cur_date.getFullYear(),
|
15
|
+
yearEnd: cur_date.getFullYear() + 1,
|
16
|
+
formatTime:'H:i',
|
17
|
+
minDate:'-1970/01/02'
|
18
|
+
});
|
19
|
+
|
20
|
+
if(dt_field.val().match(/current/i)) {
|
21
|
+
var dt_str = strftime('%Y/%m/%d %H:%M', cur_date);
|
22
|
+
dt_field.val(dt_str);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
});
|
@@ -0,0 +1,18 @@
|
|
1
|
+
// IPad GO button & Enter on PC
|
2
|
+
$(document).on('ready formily_loaded', function(){
|
3
|
+
|
4
|
+
$(document).on('keydown', 'input', function(e){
|
5
|
+
|
6
|
+
if(e.keyCode == 13) {
|
7
|
+
try{
|
8
|
+
$(e.target).parents('.formily-input').next().find('input:first, textarea, button, select').focus()
|
9
|
+
} catch(ex) {
|
10
|
+
console.error(ex);
|
11
|
+
}
|
12
|
+
|
13
|
+
return false;
|
14
|
+
}
|
15
|
+
|
16
|
+
});
|
17
|
+
|
18
|
+
});
|
@@ -0,0 +1,39 @@
|
|
1
|
+
$(document).on('ready formily_loaded', function() {
|
2
|
+
|
3
|
+
var locationInputs = $('input[data-location], p.static-text[data-location], textarea[data-location]');
|
4
|
+
|
5
|
+
if(locationInputs.length > 0) {
|
6
|
+
if(navigator.geolocation){
|
7
|
+
|
8
|
+
var geolocationSuccess = function(position){
|
9
|
+
var latitude = position.coords.latitude;
|
10
|
+
var longitude = position.coords.longitude;
|
11
|
+
|
12
|
+
var url = window.location.protocol + '//maps.googleapis.com/maps/api/geocode/json?language=en&latlng=';
|
13
|
+
|
14
|
+
url += latitude + ',';
|
15
|
+
url += longitude;
|
16
|
+
|
17
|
+
$.get(url, function(data) {
|
18
|
+
locationInputs.each(function(_, el){
|
19
|
+
var self = $(el);
|
20
|
+
if(self.data('location') == 'address') {
|
21
|
+
self.val(data.results[0].formatted_address);
|
22
|
+
} else {
|
23
|
+
self.val(latitude + ', ' + longitude);
|
24
|
+
}
|
25
|
+
});
|
26
|
+
|
27
|
+
});
|
28
|
+
};
|
29
|
+
|
30
|
+
var geolocationError = function(){
|
31
|
+
self.val('');
|
32
|
+
console.error('Unable to retrieve your location');
|
33
|
+
};
|
34
|
+
|
35
|
+
navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
});
|
@@ -0,0 +1,228 @@
|
|
1
|
+
function isFormilyFileUploaded(){
|
2
|
+
var msg = "Files haven't been uploaded yet!\nDo you want to cancel file upload?";
|
3
|
+
|
4
|
+
for(var i = 0; i < Object.keys(window.formilyFiles).length; i++){
|
5
|
+
if(window.formilyFiles[i]){
|
6
|
+
if(confirm(msg)){
|
7
|
+
return true;
|
8
|
+
} else {
|
9
|
+
return false;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
}
|
13
|
+
return true;
|
14
|
+
}
|
15
|
+
|
16
|
+
|
17
|
+
function filePreview(index){
|
18
|
+
|
19
|
+
var i = index;
|
20
|
+
|
21
|
+
if(window.formilyFiles[index] != undefined) {
|
22
|
+
var obj = window.formilyFiles[index];
|
23
|
+
var file = obj.file;
|
24
|
+
var s, img;
|
25
|
+
var reader = new FileReader();
|
26
|
+
|
27
|
+
reader.onload = function(e) {
|
28
|
+
if($('.file_upload[data-ff-id="' + i + '"]').length == 0){
|
29
|
+
|
30
|
+
var b = $('input[type="file"][multiple][name="' + window.formilyFiles[i].input_name + '"]');
|
31
|
+
var button = document.querySelector('input[type="file"][multiple][name="' + window.formilyFiles[i].input_name + '"]');
|
32
|
+
var bText = b.parent(0).find('span');
|
33
|
+
|
34
|
+
window.formilyFilesIndex--;
|
35
|
+
bText.text('[' + window.formilyFilesIndex + ' files left]');
|
36
|
+
|
37
|
+
if(file.type.indexOf('image') >= 0) {
|
38
|
+
var div = document.createElement("DIV");
|
39
|
+
div.setAttribute('class', 'file_upload new_img');
|
40
|
+
div.setAttribute('data-ff-id', i);
|
41
|
+
|
42
|
+
img = document.createElement("IMG");
|
43
|
+
img.src = e.target.result;
|
44
|
+
|
45
|
+
var node = document.createElement("SPAN");
|
46
|
+
var node2 = document.createElement("SPAN");
|
47
|
+
node.innerHTML = '';
|
48
|
+
node2.innerHTML = '0%';
|
49
|
+
node.setAttribute('class', 'delete_button');
|
50
|
+
node.setAttribute('style', 'display: none');
|
51
|
+
node2.setAttribute('class', 'formily-progress-bar');
|
52
|
+
div.appendChild(img);
|
53
|
+
div.appendChild(node);
|
54
|
+
div.appendChild(node2);
|
55
|
+
|
56
|
+
button.parentElement.parentElement.appendChild(div);
|
57
|
+
} else {
|
58
|
+
var ftype = window.formilyFiles[i].file.name.match(/.*\.([^.]+)/)[1];
|
59
|
+
img = $('<div class="file_upload file new_img" data-ff-id="' + i + '" ><span class="ext_label">' + ftype + '</span><span class="delete_button"></span><span class="formily-progress-bar">0%</span></div>');
|
60
|
+
s = b.parent(0).parent(0);
|
61
|
+
s.append(img);
|
62
|
+
}
|
63
|
+
|
64
|
+
if(window.formilyFilesIndex == 0) {
|
65
|
+
bText.text('');
|
66
|
+
|
67
|
+
var index2 = 0;
|
68
|
+
formilyFileUpload(index2);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
filePreview(++i);
|
73
|
+
};
|
74
|
+
|
75
|
+
reader.readAsDataURL(file);
|
76
|
+
} else {
|
77
|
+
if(i < Object.keys(window.formilyFiles).length) {
|
78
|
+
filePreview(++i);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
function formilyFileUpload(index) {
|
84
|
+
var i = index;
|
85
|
+
|
86
|
+
if(window.formilyFiles[index] != undefined) {
|
87
|
+
var obj = window.formilyFiles[index];
|
88
|
+
var file = obj.file;
|
89
|
+
|
90
|
+
var image = $('.file_upload[data-ff-id="' + i + '"]');
|
91
|
+
|
92
|
+
var data = new FormData();
|
93
|
+
data.append('file', file);
|
94
|
+
data.append('user_id', obj.data.user_id);
|
95
|
+
data.append('form_id', obj.data.form_id);
|
96
|
+
data.append('resource_id', obj.data.resource_id);
|
97
|
+
data.append('resource_type', obj.data.resource_type);
|
98
|
+
data.append('authenticity_token', obj.data.authenticity_token);
|
99
|
+
data.append('input_id', obj.data.input_id);
|
100
|
+
data.append('submit_id', obj.data.submit_id);
|
101
|
+
|
102
|
+
var progress = function(e){
|
103
|
+
if(e.lengthComputable){
|
104
|
+
var max = e.total;
|
105
|
+
var current = e.loaded;
|
106
|
+
var percentage = (Math.round((current * 100)/max * 10) / 10);
|
107
|
+
|
108
|
+
image.find('span.formily-progress-bar').text(percentage + '%');
|
109
|
+
|
110
|
+
if(percentage >= 100) {
|
111
|
+
window.formilyFiles[i] = null;
|
112
|
+
formilyFileUpload(++i);
|
113
|
+
}
|
114
|
+
}
|
115
|
+
};
|
116
|
+
|
117
|
+
$.ajax({
|
118
|
+
url: FormilyRoutes.form_upload_file_path(),
|
119
|
+
type: 'POST',
|
120
|
+
data: data,
|
121
|
+
success: function (data) {
|
122
|
+
image.find('span.formily-progress-bar').hide(0);
|
123
|
+
image.find('span.delete_button').show(0);
|
124
|
+
image.find('span.delete_button').attr('data-formily-delete-file', '/formily/file/' + data.file_id);
|
125
|
+
image.removeClass('new_img');
|
126
|
+
},
|
127
|
+
error: function(data) {
|
128
|
+
image.find('span.formily-progress-bar').hide(0);
|
129
|
+
},
|
130
|
+
xhr: function(){
|
131
|
+
var myXhr = $.ajaxSettings.xhr();
|
132
|
+
if(myXhr.upload){
|
133
|
+
myXhr.upload.addEventListener('progress', progress, false);
|
134
|
+
}
|
135
|
+
return myXhr;
|
136
|
+
},
|
137
|
+
dataType: 'json',
|
138
|
+
cache: false,
|
139
|
+
contentType: false,
|
140
|
+
processData: false
|
141
|
+
});
|
142
|
+
|
143
|
+
} else {
|
144
|
+
if(i < Object.keys(window.formilyFiles).length) {
|
145
|
+
formilyFileUpload(++i);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
$(document).ready(function() {
|
151
|
+
|
152
|
+
window.formilyFiles = {};
|
153
|
+
window.formilyFilesIndex = 0;
|
154
|
+
|
155
|
+
$(document).on('click', 'div.file_upload .delete_button', function(e){
|
156
|
+
var self = $(this);
|
157
|
+
var fileId = self.data('fileId');
|
158
|
+
var parent = self.parents('div.file_upload');
|
159
|
+
var csrf = self.parents('form').find('input[type=hidden][name=authenticity_token]').val();
|
160
|
+
|
161
|
+
if(confirm('Delete image ?')){
|
162
|
+
if(fileId){
|
163
|
+
$.ajax({
|
164
|
+
url: FormilyRoutes.form_file_path(fileId),
|
165
|
+
type: 'DELETE',
|
166
|
+
data: {authenticity_token: csrf},
|
167
|
+
success: function (data) {
|
168
|
+
parent.remove();
|
169
|
+
}
|
170
|
+
});
|
171
|
+
}else{
|
172
|
+
var id = parent.data('ffId');
|
173
|
+
window.formilyFiles[id] = undefined;
|
174
|
+
parent.remove();
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
return false;
|
179
|
+
});
|
180
|
+
|
181
|
+
$(document).on('click', 'button[type=button][data-f-multiple]', function(e){
|
182
|
+
var self = $(this);
|
183
|
+
|
184
|
+
if(e.originalEvent){
|
185
|
+
var btn = self.find('input[type="file"][multiple][name^="formily"]');
|
186
|
+
|
187
|
+
if(btn.length > 0) {
|
188
|
+
btn.click();
|
189
|
+
}
|
190
|
+
|
191
|
+
}
|
192
|
+
});
|
193
|
+
|
194
|
+
$(document).on('change', 'input[type="file"][multiple][name^="formily"]', function(){
|
195
|
+
var self = $(this);
|
196
|
+
var files = this.files;
|
197
|
+
|
198
|
+
window.formilyFilesIndex = files.length;
|
199
|
+
|
200
|
+
var form = self.parents('form');
|
201
|
+
|
202
|
+
var data = {
|
203
|
+
user_id: form.find('input[type=hidden][name=user_id]').val(),
|
204
|
+
form_id: form.find('input[type=hidden][name=form_id]').val(),
|
205
|
+
resource_id: form.find('input[type=hidden][name=resource_id]').val(),
|
206
|
+
resource_type: form.find('input[type=hidden][name=resource_type]').val(),
|
207
|
+
authenticity_token: form.find('input[type=hidden][name=authenticity_token]').val(),
|
208
|
+
submit_id: form.find('input[type=hidden][name=submit_id]').val(),
|
209
|
+
input_id: self.attr('name').match(/\[(\d+)\](\[\])?$/)[1]
|
210
|
+
};
|
211
|
+
|
212
|
+
for (var i = 0; i < files.length; i++) {
|
213
|
+
// Detect large file
|
214
|
+
if(files[i].size/1048576 > 9.5) {
|
215
|
+
alert('File: ' + files[i].name + ' is to large !');
|
216
|
+
window.formilyFilesIndex--;
|
217
|
+
} else {
|
218
|
+
window.formilyFiles[Object.keys(window.formilyFiles).length] = {file: files[i], input_name: self.attr('name'), data: data};
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
var index = 0;
|
223
|
+
filePreview(index);
|
224
|
+
|
225
|
+
self.val('');
|
226
|
+
});
|
227
|
+
|
228
|
+
});
|