formily 0.0.5.5.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +13 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +156 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +84 -0
  7. data/Rakefile +1 -0
  8. data/app/assets/fonts/formily-icon.eot +0 -0
  9. data/app/assets/fonts/formily-icon.svg +26 -0
  10. data/app/assets/fonts/formily-icon.ttf +0 -0
  11. data/app/assets/fonts/formily-icon.woff +0 -0
  12. data/app/assets/fonts/formily-icon.woff2 +0 -0
  13. data/app/assets/images/blank_file.png +0 -0
  14. data/app/assets/images/formily_spin.gif +0 -0
  15. data/app/assets/javascripts/formily.js +5 -0
  16. data/app/assets/javascripts/formily/base/ajax_reloader.js +24 -0
  17. data/app/assets/javascripts/formily/base/buttons.js +160 -0
  18. data/app/assets/javascripts/formily/base/form_response.js +28 -0
  19. data/app/assets/javascripts/formily/base/local_time.js +9 -0
  20. data/app/assets/javascripts/formily/editor.js +46 -0
  21. data/app/assets/javascripts/formily/editor/editor_buttons.js +186 -0
  22. data/app/assets/javascripts/formily/editor/form_preview.js +53 -0
  23. data/app/assets/javascripts/formily/editor/input_model.js +76 -0
  24. data/app/assets/javascripts/formily/editor/input_on_change.js +83 -0
  25. data/app/assets/javascripts/formily/editor/related_fields.js +76 -0
  26. data/app/assets/javascripts/formily/form.js +22 -0
  27. data/app/assets/javascripts/formily/formily_editor.js +329 -0
  28. data/app/assets/javascripts/formily/formily_modal.js +104 -0
  29. data/app/assets/javascripts/formily/formily_url.js.erb +26 -0
  30. data/app/assets/javascripts/formily/inputs/conditioned.js +4 -0
  31. data/app/assets/javascripts/formily/inputs/conditioned/checkbox.js +73 -0
  32. data/app/assets/javascripts/formily/inputs/conditioned/option.js +82 -0
  33. data/app/assets/javascripts/formily/inputs/conditioned/radio.js +160 -0
  34. data/app/assets/javascripts/formily/inputs/date_time.js +25 -0
  35. data/app/assets/javascripts/formily/inputs/input_tab.js +18 -0
  36. data/app/assets/javascripts/formily/inputs/location.js +39 -0
  37. data/app/assets/javascripts/formily/inputs/multi_file.js +228 -0
  38. data/app/assets/javascripts/formily/lib/jquery.datetimepicker.full.min.js +2 -0
  39. data/app/assets/javascripts/formily/lib/modernizr.js +8 -0
  40. data/app/assets/javascripts/formily/lib/strftime.min.js +12 -0
  41. data/app/assets/javascripts/formily/lib/tag-it.min.js +17 -0
  42. data/app/assets/javascripts/formily/mobile.js +10 -0
  43. data/app/assets/javascripts/formily_app.js +15 -0
  44. data/app/assets/javascripts/formily_iframe.js +11 -0
  45. data/app/assets/stylesheets/formily.scss +14 -0
  46. data/app/assets/stylesheets/formily/base/fonts.scss +65 -0
  47. data/app/assets/stylesheets/formily/base/layout.scss +66 -0
  48. data/app/assets/stylesheets/formily/base/links.css +7 -0
  49. data/app/assets/stylesheets/formily/base/ui-dialog.scss +129 -0
  50. data/app/assets/stylesheets/formily/editor.scss +25 -0
  51. data/app/assets/stylesheets/formily/editor/inputs_group_list.css +14 -0
  52. data/app/assets/stylesheets/formily/editor/inputs_list.css +97 -0
  53. data/app/assets/stylesheets/formily/editor/related_modal.scss +49 -0
  54. data/app/assets/stylesheets/formily/formily_editor.scss +53 -0
  55. data/app/assets/stylesheets/formily/formily_modal.scss +2 -0
  56. data/app/assets/stylesheets/formily/foundation_fix.scss +140 -0
  57. data/app/assets/stylesheets/formily/inputs/date_time.scss +8 -0
  58. data/app/assets/stylesheets/formily/inputs/multi_file.scss +111 -0
  59. data/app/assets/stylesheets/formily/jquery.datetimepicker.min.css +1 -0
  60. data/app/assets/stylesheets/formily/lib/jquery.tagit.css +69 -0
  61. data/app/assets/stylesheets/formily/modal/content.scss +36 -0
  62. data/app/assets/stylesheets/formily/modal/iframe.scss +29 -0
  63. data/app/assets/stylesheets/formily_iframe.scss +64 -0
  64. data/app/assets/stylesheets/foundation_formily.scss +20 -0
  65. data/app/controllers/formily/file_controller.rb +17 -0
  66. data/app/controllers/formily/form_types_controller.rb +46 -0
  67. data/app/controllers/formily/formilyable_controller.rb +98 -0
  68. data/app/controllers/formily/forms_controller.rb +133 -0
  69. data/app/controllers/formily/iframe/forms_controller.rb +28 -0
  70. data/app/controllers/formily/inputs_controller.rb +113 -0
  71. data/app/controllers/formily/submit_data_controller.rb +151 -0
  72. data/app/controllers/formily_controller.rb +22 -0
  73. data/app/helpers/formily_helper.rb +17 -0
  74. data/app/models/formily/checkbox_input.rb +8 -0
  75. data/app/models/formily/checkbox_input_group.rb +14 -0
  76. data/app/models/formily/date_time_input.rb +19 -0
  77. data/app/models/formily/file.rb +14 -0
  78. data/app/models/formily/form.rb +41 -0
  79. data/app/models/formily/form_type.rb +10 -0
  80. data/app/models/formily/formilyable_form.rb +18 -0
  81. data/app/models/formily/input.rb +124 -0
  82. data/app/models/formily/input_value.rb +23 -0
  83. data/app/models/formily/multiple_file_input.rb +18 -0
  84. data/app/models/formily/option_input.rb +8 -0
  85. data/app/models/formily/options_input_group.rb +14 -0
  86. data/app/models/formily/radio_input.rb +12 -0
  87. data/app/models/formily/radio_input_group.rb +14 -0
  88. data/app/models/formily/static_text.rb +8 -0
  89. data/app/models/formily/submit.rb +47 -0
  90. data/app/models/formily/text_input.rb +8 -0
  91. data/app/models/formily/textarea_input.rb +8 -0
  92. data/app/views/formily/data/_forms_table.html.haml +19 -0
  93. data/app/views/formily/data/_many_tables.html.erb +3 -0
  94. data/app/views/formily/data/_table.html.erb +33 -0
  95. data/app/views/formily/data/submit_data_table.html.haml +32 -0
  96. data/app/views/formily/editor/_default_value.haml +18 -0
  97. data/app/views/formily/editor/_editor.haml +18 -0
  98. data/app/views/formily/editor/_modal.haml +197 -0
  99. data/app/views/formily/editor/partial/_group.haml +41 -0
  100. data/app/views/formily/editor/partial/_group_input.haml +36 -0
  101. data/app/views/formily/editor/partial/_input.haml +35 -0
  102. data/app/views/formily/editor/partial/_input_fieldset.haml +12 -0
  103. data/app/views/formily/form_types/_form.haml +9 -0
  104. data/app/views/formily/form_types/edit.haml +6 -0
  105. data/app/views/formily/form_types/index.haml +24 -0
  106. data/app/views/formily/form_types/new.haml +6 -0
  107. data/app/views/formily/formilyable/index.haml +67 -0
  108. data/app/views/formily/formilyable/new.haml +37 -0
  109. data/app/views/formily/forms/_form.haml +34 -0
  110. data/app/views/formily/forms/_preview.haml +16 -0
  111. data/app/views/formily/forms/edit.haml +5 -0
  112. data/app/views/formily/forms/index.haml +40 -0
  113. data/app/views/formily/forms/new.haml +5 -0
  114. data/app/views/formily/forms/reload_formily_table.haml +4 -0
  115. data/app/views/formily/forms/show.haml +1 -0
  116. data/app/views/formily/helpers/_iframe_formily_modal.html.haml +3 -0
  117. data/app/views/formily/helpers/_related_forms.html.haml +12 -0
  118. data/app/views/formily/helpers/_related_forms_tr.html.haml +28 -0
  119. data/app/views/formily/iframe/forms/show.haml +1 -0
  120. data/app/views/formily/inputs/_group.haml +40 -0
  121. data/app/views/formily/inputs/_group_input.haml +36 -0
  122. data/app/views/formily/inputs/_input.haml +35 -0
  123. data/app/views/formily/inputs/_input_fieldset.haml +12 -0
  124. data/app/views/formily/inputs/render_input_html.haml +7 -0
  125. data/app/views/formily/partial/_form.haml +37 -0
  126. data/app/views/formily/partial/inputs/_checkbox_input.haml +18 -0
  127. data/app/views/formily/partial/inputs/_checkbox_input_group.haml +36 -0
  128. data/app/views/formily/partial/inputs/_conditioned_fields.haml +36 -0
  129. data/app/views/formily/partial/inputs/_date_time_input.haml +15 -0
  130. data/app/views/formily/partial/inputs/_file_input.haml +20 -0
  131. data/app/views/formily/partial/inputs/_file_preview.haml +14 -0
  132. data/app/views/formily/partial/inputs/_input.haml +1 -0
  133. data/app/views/formily/partial/inputs/_multiple_file_input.haml +25 -0
  134. data/app/views/formily/partial/inputs/_options_input_group.haml +77 -0
  135. data/app/views/formily/partial/inputs/_radio_input_group.haml +41 -0
  136. data/app/views/formily/partial/inputs/_static_text.haml +11 -0
  137. data/app/views/formily/partial/inputs/_text_input.haml +19 -0
  138. data/app/views/formily/partial/inputs/_textarea_input.haml +19 -0
  139. data/app/views/formily/submit_data/submit.html.erb +5 -0
  140. data/app/views/formily/submit_data/submit.json.jbuilder +5 -0
  141. data/app/views/layouts/formily_iframe.haml +16 -0
  142. data/config/routes.rb +41 -0
  143. data/formily.gemspec +41 -0
  144. data/lib/formily.rb +37 -0
  145. data/lib/formily/config.rb +72 -0
  146. data/lib/formily/engine.rb +12 -0
  147. data/lib/formily/helpers/view_helper.rb +114 -0
  148. data/lib/formily/relation.rb +26 -0
  149. data/lib/formily/relation/formily_methods.rb +30 -0
  150. data/lib/formily/relation/has_many_methods.rb +16 -0
  151. data/lib/formily/submitted_data_table.rb +74 -0
  152. data/lib/formily/version.rb +4 -0
  153. data/lib/generators/formily/install/install_generator.rb +43 -0
  154. data/lib/generators/formily/install/templates/create_formily_data.rb +28 -0
  155. data/lib/generators/formily/install/templates/create_formily_files.rb +13 -0
  156. data/lib/generators/formily/install/templates/create_formily_form_types.rb +12 -0
  157. data/lib/generators/formily/install/templates/create_formily_forms.rb +16 -0
  158. data/lib/generators/formily/install/templates/create_formily_inputs.rb +24 -0
  159. data/lib/generators/formily/install/templates/create_formilyable_forms.rb +17 -0
  160. data/lib/generators/formily/install/templates/formily.rb +21 -0
  161. data/lib/generators/formily/views/views_generator.rb +11 -0
  162. metadata +350 -0
@@ -0,0 +1,29 @@
1
+ .formily-modal-container {
2
+ display: none;
3
+ position: fixed;
4
+ height: 100%;
5
+ width: 100%;
6
+ top: 0;
7
+ left: 0;
8
+ z-index: 9999;
9
+ background-color: rgba(0, 0, 0, 0.65);
10
+
11
+ #formily_iframe_modal {
12
+ display: block;
13
+ position: absolute;
14
+ border: 2px solid #000000;
15
+ border-radius: 0 0 5px 5px;
16
+ top: 50%;
17
+ left: 50%;
18
+ background-color: #ffffff;
19
+ overflow: auto;
20
+ -webkit-overflow-scrolling: touch;
21
+
22
+ iframe {
23
+ position: static;
24
+ display: block;
25
+ height: 100%;
26
+ width: 100%;
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,64 @@
1
+ //=require foundation
2
+ //=require formily/foundation_fix
3
+ //=require formily/jquery.datetimepicker.min
4
+ //=require formily/inputs/multi_file
5
+ //=require formily/inputs/date_time
6
+ //=require formily/base/fonts
7
+
8
+ html, body {
9
+ display: block;
10
+ height: 100%;
11
+ width: 100%;
12
+ }
13
+
14
+ body {
15
+ position: relative;
16
+ overflow: auto;
17
+ -webkit-overflow-scrolling: touch;
18
+ }
19
+
20
+ body.formily {
21
+ width: 100%;
22
+ height: 100%;
23
+ padding: 0;
24
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
25
+ margin: 0 auto;
26
+ background-color: #EDE7F6;
27
+
28
+ .header {
29
+ display: block;
30
+ height: 37px;
31
+ margin: 0;
32
+ padding: 0;
33
+
34
+ text-align: left;
35
+ line-height: 30px;
36
+ font-size: 20px;
37
+
38
+ color: #ffffff;
39
+ background-color: #000000;
40
+
41
+ a.close-iframe-btn {
42
+ float: right;
43
+ color: #ffffff;
44
+ text-decoration: none;
45
+ margin: 4px 10px 0 0;
46
+ }
47
+
48
+ a.formily-edit .ff-icon-pencil, a.formily-edit span {
49
+ color: #fff;
50
+ font-size: 12px
51
+ }
52
+ }
53
+
54
+ .wrapper {
55
+ display: block;
56
+ margin: 0;
57
+ padding: 0;
58
+ background-color: #ffffff;
59
+
60
+ .content {
61
+ padding: 10px 10px 10px 10px;
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,20 @@
1
+ //=require foundation
2
+ //=require formily/foundation_fix
3
+ //=require formily/base/fonts
4
+ //=require formily/editor
5
+ //=require formily/jquery.datetimepicker.min
6
+ //=require formily/inputs/multi_file
7
+ //=require formily/inputs/date_time
8
+
9
+
10
+ html, body {
11
+ display: block;
12
+ height: 100%;
13
+ width: 100%;
14
+ }
15
+
16
+ body {
17
+ position: relative;
18
+ overflow: auto;
19
+ -webkit-overflow-scrolling: touch;
20
+ }
@@ -0,0 +1,17 @@
1
+ # coding: utf-8
2
+ class Formily::FileController < FormilyController
3
+
4
+ before_action :authenticate_user! if (true if Devise rescue false)
5
+
6
+ def show
7
+ f = Formily::File.find(params[:id])
8
+ send_file Rails.root.join(f.file.path), type: f.file_content_type, disposition: 'inline'
9
+ end
10
+
11
+ def destroy
12
+ file = Formily::File.find(params[:id])
13
+ file.destroy
14
+ render nothing: true, status: :ok
15
+ end
16
+
17
+ end
@@ -0,0 +1,46 @@
1
+ # coding: utf-8
2
+ class Formily::FormTypesController < FormilyController
3
+
4
+ before_action :get_form_type, only: [:edit, :update, :destroy]
5
+
6
+
7
+ def index
8
+ @form_types = Formily::FormType.all
9
+ end
10
+
11
+ def new
12
+ @form_type = Formily::FormType.new
13
+ end
14
+
15
+ def create
16
+ form_type = Formily::FormType.new(form_type_params)
17
+ form_type.save
18
+
19
+ redirect_to formily_form_types_path
20
+ end
21
+
22
+ def edit
23
+ end
24
+
25
+ def update
26
+ @form_type.update(form_type_params)
27
+ redirect_to formily_form_types_path
28
+ end
29
+
30
+ def destroy
31
+ @form_type.destroy
32
+ redirect_to formily_form_types_path
33
+ end
34
+
35
+
36
+ private
37
+
38
+ def get_form_type
39
+ @form_type = Formily::FormType.find(params[:id])
40
+ end
41
+
42
+ def form_type_params
43
+ params.require(:formily_form_type).permit(:title)
44
+ end
45
+
46
+ end
@@ -0,0 +1,98 @@
1
+ # coding: utf-8
2
+ class Formily::FormilyableController < FormilyController
3
+
4
+ def index
5
+ @forms = Formily::Form.all
6
+ @select_forms = Formily::Form.select(:id, :title)
7
+ @related_forms = Formily::FormilyableForm.order(created_at: :desc)
8
+
9
+ @related_forms = if params[:all].present?
10
+ Formily::FormilyableForm.order(created_at: :desc)
11
+ else
12
+ Formily::FormilyableForm.joins(:form).order(created_at: :desc).where(formily_forms: {is_deleted: false})
13
+ end
14
+ end
15
+
16
+ def new
17
+ # Set user data
18
+ if params[:model_name].present?
19
+ session[:model] = {
20
+ 'model_name' => params[:model_name],
21
+ 'model_id' => params[:model_id],
22
+ 'user_id' => params[:user_id]
23
+ }
24
+ end
25
+
26
+ @related_model = session[:model]
27
+
28
+ @forms = Formily::FormilyableForm.includes(:form).
29
+ where(formilyable_type: @related_model['model_name'], formilyable_id: @related_model['model_id'])
30
+ @model = get_model
31
+ @select_forms = Formily::Form.where.not(id: @model.formily_forms.pluck(:id))
32
+ end
33
+
34
+ def create
35
+ formilyable = Formily::FormilyableForm.new(formilyable_params)
36
+
37
+ url = params[:iframe].present? ? new_formily_formilyable_path(iframe: true) : formily_forms_assign_path
38
+
39
+ if formilyable.save
40
+ redirect_to url
41
+ else
42
+ redirect_to url
43
+ end
44
+ end
45
+
46
+ def destroy
47
+ formilyable = Formily::FormilyableForm.find(params[:id])
48
+ formilyable.destroy
49
+
50
+ url = params[:iframe].present? ? new_formily_formilyable_path(iframe: true) : formily_forms_assign_path
51
+
52
+ redirect_to url
53
+ end
54
+
55
+ def select_data
56
+
57
+ model = params[:formilyable_type].safe_constantize
58
+
59
+ ids = Formily::FormilyableForm.where(formilyable_type: params[:formilyable_type], form_id: params[:form_id]).pluck(:formilyable_id)
60
+
61
+ data = model.where.not(id: ids)
62
+
63
+ render json: data.to_json(only: [:id], methods: :formily_title)
64
+
65
+ end
66
+
67
+ def connect
68
+ @page_name = 'Formily forms | Connect'
69
+ @forms = Formily::Form.all
70
+
71
+ @not_manage = true
72
+
73
+ @model = @model_name.safe_constantize.find(@model_id)
74
+
75
+ @select_forms = Formily::Form.where.not(id: @model.formily_forms.pluck(:id))
76
+
77
+ end
78
+
79
+
80
+ private
81
+
82
+ def formilyable_params
83
+ params.permit(:form_id, :formilyable_id, :formilyable_type)
84
+ end
85
+
86
+ def formily_layout
87
+ if params[:iframe].present?
88
+ 'formily_iframe'
89
+ else
90
+ ApplicationController.new.send(:_layout).virtual_path.split('/').last
91
+ end
92
+ end
93
+
94
+ def get_model
95
+ session[:model]['model_name'].safe_constantize.find(session[:model]['model_id'])
96
+ end
97
+
98
+ end
@@ -0,0 +1,133 @@
1
+ # coding: utf-8
2
+ class Formily::FormsController < FormilyController
3
+
4
+ before_action :save_params
5
+
6
+ def index
7
+ @forms = if params[:all].present?
8
+ Formily::Form.includes(:form_type).all
9
+ else
10
+ Formily::Form.includes(:form_type).where(is_deleted: false)
11
+ end
12
+ end
13
+
14
+ def new
15
+ @form = Formily::Form.new(id: 0)
16
+ end
17
+
18
+ def show
19
+ @form = Formily::Form.find(params[:id])
20
+ model = params[:model_name].safe_constantize
21
+ @obj_rel = model.find(params[:model_id])
22
+
23
+ @submit = @form.submits.find_by(id: params[:submit_id])
24
+
25
+ if @submit.blank?
26
+ @submit = Formily::Submit.create({form_id: @form.id, resource_id: params[:model_id],
27
+ user_id: params[:user_id], resource_type: params[:model_name]})
28
+ end
29
+
30
+ end
31
+
32
+ def edit
33
+ @form = Formily::Form.includes(:inputs).find(params[:id])
34
+ end
35
+
36
+ def create
37
+ form = Formily::Form.new(form_params)
38
+
39
+ if form.save
40
+ if params[:inputs]
41
+ params[:inputs].each do |input|
42
+ i = form.inputs.build(input.to_hash.except('group_inputs'))
43
+ i.save
44
+ if input[:group_inputs]
45
+ input[:group_inputs].each do |gi|
46
+ t = i.inputs.build(gi.to_hash)
47
+ t.save
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ redirect_to formily_forms_path(@params_hash)
54
+ else
55
+ redirect_to formily_forms_path(@params_hash)
56
+ end
57
+
58
+ end
59
+
60
+ def update
61
+
62
+ form = if params[:id].to_i == 0
63
+ Formily::Form.create
64
+ else
65
+ Formily::Form.find(params[:id])
66
+ end
67
+
68
+ form.update(form_params)
69
+
70
+ render json: {id: form.id}, status: :ok
71
+ end
72
+
73
+ def destroy
74
+ form = Formily::Form.find(params[:id])
75
+ count = Formily::Submit.where(form_id: form.id).count
76
+
77
+ if count > 0
78
+ form.update(is_deleted: true)
79
+ else
80
+ form.destroy
81
+ end
82
+
83
+ redirect_to formily_forms_path(@params_hash)
84
+ end
85
+
86
+ def preview
87
+ form = Formily::Form.find_by(id: params[:formily_form][:id])
88
+ form ||= Formily::Form.new
89
+ submit = Formily::Submit.new(created_at: DateTime.now)
90
+ render partial: 'preview', layout: false, locals: {:@form => form, :@obj_rel => form, :@submit => submit}
91
+ end
92
+
93
+
94
+ def reload_formily_table
95
+ user_id = params[:user_id]
96
+ obj_rel = params[:resource_type].safe_constantize.find(params[:resource_id])
97
+
98
+ render locals: {obj_rel: obj_rel, user_id: user_id, flag: params[:flag].present?}, layout: false
99
+ end
100
+
101
+
102
+ def add_new_response
103
+ submit = Formily::Submit.where(params.permit(:form_id, :resource_id, :user_id, :resource_type))
104
+ .order(created_at: :desc).first
105
+
106
+ if submit.blank? || submit.state == 0 || submit.input_values.count == 0
107
+ render json: {msg: 'Complete the outstanding form instead of adding a new copy'}, status: :unprocessable_entity
108
+ else
109
+ submit = Formily::Submit.new(params.permit(:form_id, :resource_id, :user_id, :resource_type))
110
+ submit.save
111
+ render json: {}, status: :ok
112
+ end
113
+ end
114
+
115
+ private
116
+
117
+ def form_params
118
+ params.require(:formily_form).permit(:title, :description, :form_type_id)
119
+ end
120
+
121
+ def save_params
122
+ @params_hash = {}
123
+ @params_hash[:iframe] = true if params[:iframe]
124
+ @params_hash[:model_id] = params[:model_id]
125
+ @params_hash[:model_name] = params[:model_name]
126
+ @params_hash[:user_id] = params[:user_id]
127
+
128
+ @model_id = @params_hash[:model_id]
129
+ @model_name = @params_hash[:model_name]
130
+ @user_id = @params_hash[:user_id]
131
+ end
132
+
133
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ class Formily::Iframe::FormsController < FormilyController
3
+
4
+ def show
5
+ @form = Formily::Form.find(params[:id])
6
+
7
+ model = params[:model_name].safe_constantize
8
+
9
+ @obj_rel = model.blank? ? nil : model.find(params[:model_id])
10
+
11
+ @submit = @form.submits.find_by(id: params[:submit_id])
12
+
13
+ if @submit.blank?
14
+ @submit = Formily::Submit.create({form_id: @form.id, resource_id: params[:model_id],
15
+ user_id: params[:user_id], resource_type: params[:model_name]})
16
+ end
17
+ end
18
+
19
+ def add
20
+ end
21
+
22
+
23
+ private
24
+ def formily_layout
25
+ 'formily_iframe'
26
+ end
27
+
28
+ end
@@ -0,0 +1,113 @@
1
+ # coding: utf-8
2
+ class Formily::InputsController < FormilyController
3
+
4
+ def create
5
+ input = Formily::Input.create(input_params)
6
+ render json: {id: input.id}, status: :ok
7
+ end
8
+
9
+ def update
10
+ input = Formily::Input.find(params[:id])
11
+ input.update(input_params)
12
+ render nothing: true, status: :ok
13
+ end
14
+
15
+ def destroy
16
+ input = Formily::Input.find(params[:id])
17
+
18
+ count = Formily::InputValue.where(input_id: input.id).count
19
+
20
+ if input.inputs.count > 0
21
+ count += Formily::InputValue.where(input_id: input.inputs.map(&:id)).count
22
+ end
23
+
24
+ if input.type == 'Formily::RadioInput'
25
+ count += Formily::InputValue.where(input_id: input.group_input_id).count
26
+ end
27
+
28
+ if input.type == 'Formily::OptionInput'
29
+ count += Formily::InputValue.where(input_id: input.group_input_id).count
30
+ end
31
+
32
+ if count > 0
33
+ input.update(is_deleted: true)
34
+ else
35
+ input.destroy
36
+ end
37
+
38
+ render nothing: true, status: :ok
39
+ end
40
+
41
+ def render_input_html
42
+ if params[:type].present?
43
+ @input = params[:type].constantize.new(params.permit(:id, :name, :label, :description, :type,
44
+ :field_order, :tag_attributes, :default_value))
45
+ render layout: false
46
+ end
47
+ end
48
+
49
+ def render_related
50
+
51
+ if params[:related_arr]
52
+
53
+ if params[:related_arr].blank?
54
+ models = Formily.formily_models
55
+ data = []
56
+
57
+ models.each do |model|
58
+ data << {label: model.to_s, value: model.to_s}
59
+ data << {
60
+ label: model.to_s + '->' + model.formily_form_related_model.to_s,
61
+ value: model.to_s + '->' + model.formily_form_related_model.to_s
62
+ }
63
+ end
64
+
65
+ render json: data.to_json, status: :ok
66
+
67
+ else
68
+
69
+ model = if params[:related_arr][0] =~ /->/
70
+ params[:related_arr][0].sub(/.*?->/, '').safe_constantize
71
+ else
72
+ params[:related_arr][0].safe_constantize
73
+ end
74
+
75
+ if model
76
+ tmp = model.new
77
+
78
+ params[:related_arr][1..-1].each do |attr|
79
+ tmp = tmp.send('build_' + attr) rescue nil
80
+ tmp = tmp.send(attr) rescue nil unless tmp
81
+ end
82
+
83
+ if tmp && tmp.class.superclass.name =~ /\Aactiverecord/i
84
+ model = tmp.class
85
+ data = []
86
+ if model.reflect_on_all_associations.any?
87
+ model.reflect_on_all_associations.each do |ref|
88
+ data << {label: ref.name, value: ref.name, macro: ref.macro} if ref.macro =~ /belongs_to/i
89
+ end
90
+ end
91
+ data += model.columns_hash.map{|k,v| {label: k, value: k}}
92
+
93
+ render json: data.to_json, status: :ok
94
+ else
95
+ render text: '', status: :ok
96
+ end
97
+
98
+ end
99
+ end
100
+
101
+ else
102
+ render text: '', status: :ok
103
+ end
104
+
105
+ end
106
+
107
+ private
108
+ def input_params
109
+ params.permit(:id, :name, :type, :label, :description, :group_input_id,
110
+ :field_order, :default_value, :tag_attributes, :form_id)
111
+ end
112
+
113
+ end