glib-web 0.5.83 → 0.5.84

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.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +34 -34
  3. data/app/channels/glib/channel/online_channel.rb +36 -36
  4. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  5. data/app/controllers/concerns/glib/auth/policy.rb +149 -149
  6. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  7. data/app/controllers/concerns/glib/json/libs.rb +149 -149
  8. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  9. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  10. data/app/controllers/concerns/glib/json/traversal.rb +92 -92
  11. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  12. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  13. data/app/controllers/glib/home_controller.rb +54 -54
  14. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  15. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  16. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  17. data/app/helpers/glib/enum_helper.rb +18 -18
  18. data/app/helpers/glib/forms_helper.rb +15 -15
  19. data/app/helpers/glib/json_ui/abstract_builder.rb +309 -309
  20. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  21. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  22. data/app/helpers/glib/json_ui/action_builder/iap.rb +15 -15
  23. data/app/helpers/glib/json_ui/action_builder/panels.rb +14 -14
  24. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  25. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  26. data/app/helpers/glib/json_ui/action_builder/windows.rb +38 -38
  27. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  28. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  29. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  30. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  31. data/app/helpers/glib/json_ui/list_builders.rb +110 -110
  32. data/app/helpers/glib/json_ui/menu_builder.rb +96 -94
  33. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  34. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  35. data/app/helpers/glib/json_ui/styling_helper.rb +55 -55
  36. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  37. data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
  38. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  39. data/app/helpers/glib/json_ui/view_builder/fields.rb +291 -291
  40. data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -11
  41. data/app/helpers/glib/json_ui/view_builder/panels.rb +258 -258
  42. data/app/helpers/glib/json_ui/view_builder.rb +248 -247
  43. data/app/helpers/glib/urls_helper.rb +12 -12
  44. data/app/models/concerns/glib/soft_deletable.rb +68 -68
  45. data/app/models/glib/active_storage/attachment.rb +9 -9
  46. data/app/models/glib/active_storage/blob.rb +9 -9
  47. data/app/models/glib/application_record.rb +18 -18
  48. data/app/models/glib/dynamic_text_record.rb +9 -9
  49. data/app/models/glib/text.rb +95 -95
  50. data/app/policies/glib/application_policy.rb +191 -191
  51. data/app/validators/email_typo_validator.rb +38 -38
  52. data/app/validators/email_validator.rb +7 -7
  53. data/app/validators/url_validator.rb +20 -20
  54. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  55. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  56. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  57. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  58. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  59. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  60. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  61. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  62. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  63. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  64. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  65. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +10 -10
  66. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  67. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  68. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  69. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  70. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  71. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
  72. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  73. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +37 -37
  74. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  75. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  76. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  77. data/app/views/json_ui/garage/forms/index.json.jbuilder +116 -116
  78. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
  79. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  80. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  81. data/app/views/json_ui/garage/forms/payments.json.jbuilder +34 -34
  82. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
  83. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  84. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  85. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
  86. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +150 -150
  87. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  88. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  89. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  90. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  91. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  92. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +65 -65
  93. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  94. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  95. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  96. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  97. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +30 -30
  98. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  99. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  100. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  101. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  102. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  103. data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
  104. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  105. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  106. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  107. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  108. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  109. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  110. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  111. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  112. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  113. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  114. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  115. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  116. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  117. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  118. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  119. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +66 -31
  120. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  121. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  122. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +38 -38
  123. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  124. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  125. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  126. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
  127. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  128. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  129. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  130. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
  131. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  132. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  133. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  134. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  135. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  136. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  137. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  138. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  139. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  140. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  141. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  142. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  143. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  144. data/app/views/json_ui/garage/views/banners.json.jbuilder +67 -63
  145. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  146. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  147. data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
  148. data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -21
  149. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  150. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
  151. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  152. data/app/views/json_ui/garage/views/index.json.jbuilder +83 -83
  153. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  154. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  155. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  156. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  157. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  158. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  159. data/app/views/json_ui/garage/views/progress.json.jbuilder +31 -31
  160. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  161. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  162. data/config/routes.rb +7 -7
  163. data/lib/generators/glib/install_generator.rb +24 -24
  164. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  165. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  166. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  167. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  168. data/lib/generators/templates/database.yml +107 -107
  169. data/lib/generators/templates/dynamic_text.rb +2 -2
  170. data/lib/glib/crypt/utils.rb +26 -26
  171. data/lib/glib/dynamic_text/config.rb +21 -21
  172. data/lib/glib/engine.rb +7 -7
  173. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  174. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  175. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  176. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  177. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  178. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  179. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  180. data/lib/glib/json_crawler/coverage.rb +20 -20
  181. data/lib/glib/json_crawler/http.rb +120 -120
  182. data/lib/glib/json_crawler/router.rb +90 -90
  183. data/lib/glib/json_crawler.rb +11 -11
  184. data/lib/glib/mailer_tester.rb +36 -36
  185. data/lib/glib/test_helpers.rb +52 -52
  186. data/lib/glib/value.rb +7 -7
  187. data/lib/glib/version.rb +5 -5
  188. data/lib/glib-web.rb +9 -9
  189. data/lib/tasks/db.rake +95 -95
  190. metadata +2 -3
@@ -1,258 +1,258 @@
1
- class Glib::JsonUi::ViewBuilder
2
- module Panels
3
- class Form < View
4
- action :onSubmit
5
- string :paramNameForFormData
6
- # boolean :local
7
-
8
- def is_array_association?(prop)
9
- # # Not all model is ActiveRecord
10
- # if @model.class.respond_to?(:reflect_on_association)
11
- # return @model.class.reflect_on_association(prop).macro
12
- # end
13
- # false
14
-
15
- # Not all model is ActiveRecord
16
- @model.class.try(:reflect_on_association, prop)&.macro == :has_many
17
- end
18
-
19
- def field_assert_respond_to(prop)
20
- # Identify a prop being used on a nil model or incorrect model.
21
- raise "Invalid property `#{prop}` on '#{@model.class}'" unless @model.respond_to?(prop)
22
- end
23
-
24
- def field_name(prop, multiple)
25
- suffix = is_array_association?(prop) || multiple ? '[]' : ''
26
- "#{@model_name}[#{prop}]#{suffix}"
27
- end
28
-
29
- def field_value(prop)
30
- if is_array_association?(prop)
31
- @model.send(prop)&.map { |record| record.id }
32
- else
33
- @model.send(prop)
34
- end
35
- end
36
-
37
- def field_label(prop, args)
38
- I18n.t("dt_models.#{@model_name}.#{prop}.label", args.merge(default: nil)) || I18n.t("activerecord.attributes.#{@model_name}.#{prop}", args)
39
- end
40
-
41
- def hint_label(prop, args)
42
- I18n.t("dt_models.#{@model_name}.#{prop}.hint", args.merge(default: nil))
43
- end
44
-
45
- def placeholder_label(prop, args)
46
- I18n.t("dt_models.#{@model_name}.#{prop}.placeholder", args.merge(default: nil))
47
- end
48
-
49
- def field_validation(prop)
50
- validations = {}
51
- @model.class.validators_on(prop).each do |validator|
52
- if validator.kind == :presence
53
- validations[:required] = { message: 'Required' }
54
- end
55
- end
56
- validations
57
- end
58
-
59
- def url(url)
60
- @url = url
61
- end
62
-
63
- def method(method)
64
- @method = method
65
- end
66
-
67
- def as(model_name)
68
- @model_name = model_name
69
- end
70
-
71
- def model(models)
72
- @models = models
73
- end
74
-
75
- # Override
76
- def created
77
- if @models
78
- @model = @models.is_a?(Array) ? @models.last : @models
79
- @model_name ||= @model.class.model_name.singular
80
- @url ||= page.context.polymorphic_url(@models)
81
- @method ||= if @model.persisted?
82
- :patch
83
- else
84
- :post
85
- end
86
- end
87
-
88
- @method ||= :get
89
-
90
- json.url @url
91
- json.method @method
92
-
93
- json.childViews do
94
- if @method != :get
95
- json.child! do
96
- json.view 'fields/hidden'
97
- json.name 'authenticity_token'
98
- json.value page.context.form_authenticity_token
99
- end
100
- end
101
-
102
- # NOTE: this pattern will not work for views that can be nested. Luckily forms shouldn't be nested anyway.
103
- page.current_form = self
104
- @childViewsBlock.call(page.view_builder)
105
- page.current_form = nil
106
- end
107
- end
108
-
109
- def childViews(block)
110
- @childViewsBlock = block
111
- end
112
- end
113
-
114
- class List < View
115
- hash :phoenixSocket
116
- hash :actionCable
117
-
118
- hash :nextPage
119
- action :onScrollToTop
120
- action :onScrollToBottom
121
-
122
- def firstSection(block)
123
- json.sections [1] do
124
- block.call page.list_section_builder
125
- end
126
- end
127
-
128
- def sections(blocks)
129
- json.sections do
130
- blocks.each do |block|
131
- json.child! do
132
- block.call page.list_section_builder
133
- end
134
- end
135
- end
136
- end
137
- end
138
-
139
- class Table < View
140
- hash :nextPage
141
- hash :export
142
- hash :import
143
- action :onScrollToTop
144
- action :onScrollToBottom
145
-
146
- def firstSection(block)
147
- json.sections [1] do
148
- block.call page.table_section_builder
149
- end
150
- end
151
-
152
- def sections(blocks)
153
- json.sections do
154
- blocks.each do |block|
155
- json.child! do
156
- block.call page.table_section_builder
157
- end
158
- end
159
- end
160
- end
161
- end
162
-
163
- class Scroll < View
164
- views :childViews
165
- end
166
-
167
- class Split < View
168
- # def content(block)
169
- # block.call page.split_content_builder
170
- # end
171
-
172
- panels_builder :content, :left, :center, :right
173
- end
174
-
175
- class Responsive < View
176
- views :childViews
177
- string :align
178
- action :onClick
179
- end
180
-
181
- class Column < View
182
- hash :xl
183
- hash :lg
184
- hash :md
185
- hash :sm
186
- hash :xs
187
-
188
- hash :xlOnly
189
- hash :lgOnly
190
- hash :mdOnly
191
- hash :smOnly
192
- hash :xsOnly
193
-
194
- hash :xlAndDown
195
- hash :lgAndDown
196
- hash :mdAndDown
197
- hash :smAndDown
198
- hash :xsAndDown
199
-
200
- views :childViews
201
- end
202
-
203
- class Vertical < View
204
- views :childViews
205
- string :distribution
206
- string :align
207
- action :onClick
208
- end
209
-
210
- class Horizontal < View
211
- views :childViews
212
- string :distribution
213
- string :align
214
- end
215
-
216
- class Flow < View
217
- hash :innerPadding
218
- views :childViews
219
- end
220
-
221
- class Carousel < View
222
- views :childViews
223
- string :distribution
224
- end
225
-
226
- # # TODO: Deprecate in favour of styleClasses
227
- # class Card < View
228
- # views :childViews
229
- # end
230
-
231
- class Custom < View
232
- string :template
233
- hash :data
234
- action :onClick
235
-
236
- def content(block)
237
- json.data do
238
- block.call page.view_builder
239
- end
240
- end
241
- end
242
-
243
- class Web < View
244
- string :url
245
- end
246
-
247
- class Ul < View
248
- views :childViews
249
-
250
- # def buttons(block)
251
- # json.buttons do
252
- # block.call page.menu_builder
253
- # end
254
- # end
255
- end
256
-
257
- end
258
- end
1
+ class Glib::JsonUi::ViewBuilder
2
+ module Panels
3
+ class Form < View
4
+ action :onSubmit
5
+ string :paramNameForFormData
6
+ # boolean :local
7
+
8
+ def is_array_association?(prop)
9
+ # # Not all model is ActiveRecord
10
+ # if @model.class.respond_to?(:reflect_on_association)
11
+ # return @model.class.reflect_on_association(prop).macro
12
+ # end
13
+ # false
14
+
15
+ # Not all model is ActiveRecord
16
+ @model.class.try(:reflect_on_association, prop)&.macro == :has_many
17
+ end
18
+
19
+ def field_assert_respond_to(prop)
20
+ # Identify a prop being used on a nil model or incorrect model.
21
+ raise "Invalid property `#{prop}` on '#{@model.class}'" unless @model.respond_to?(prop)
22
+ end
23
+
24
+ def field_name(prop, multiple)
25
+ suffix = is_array_association?(prop) || multiple ? '[]' : ''
26
+ "#{@model_name}[#{prop}]#{suffix}"
27
+ end
28
+
29
+ def field_value(prop)
30
+ if is_array_association?(prop)
31
+ @model.send(prop)&.map { |record| record.id }
32
+ else
33
+ @model.send(prop)
34
+ end
35
+ end
36
+
37
+ def field_label(prop, args)
38
+ I18n.t("dt_models.#{@model_name}.#{prop}.label", args.merge(default: nil)) || I18n.t("activerecord.attributes.#{@model_name}.#{prop}", args)
39
+ end
40
+
41
+ def hint_label(prop, args)
42
+ I18n.t("dt_models.#{@model_name}.#{prop}.hint", args.merge(default: nil))
43
+ end
44
+
45
+ def placeholder_label(prop, args)
46
+ I18n.t("dt_models.#{@model_name}.#{prop}.placeholder", args.merge(default: nil))
47
+ end
48
+
49
+ def field_validation(prop)
50
+ validations = {}
51
+ @model.class.validators_on(prop).each do |validator|
52
+ if validator.kind == :presence
53
+ validations[:required] = { message: 'Required' }
54
+ end
55
+ end
56
+ validations
57
+ end
58
+
59
+ def url(url)
60
+ @url = url
61
+ end
62
+
63
+ def method(method)
64
+ @method = method
65
+ end
66
+
67
+ def as(model_name)
68
+ @model_name = model_name
69
+ end
70
+
71
+ def model(models)
72
+ @models = models
73
+ end
74
+
75
+ # Override
76
+ def created
77
+ if @models
78
+ @model = @models.is_a?(Array) ? @models.last : @models
79
+ @model_name ||= @model.class.model_name.singular
80
+ @url ||= page.context.polymorphic_url(@models)
81
+ @method ||= if @model.persisted?
82
+ :patch
83
+ else
84
+ :post
85
+ end
86
+ end
87
+
88
+ @method ||= :get
89
+
90
+ json.url @url
91
+ json.method @method
92
+
93
+ json.childViews do
94
+ if @method != :get
95
+ json.child! do
96
+ json.view 'fields/hidden'
97
+ json.name 'authenticity_token'
98
+ json.value page.context.form_authenticity_token
99
+ end
100
+ end
101
+
102
+ # NOTE: this pattern will not work for views that can be nested. Luckily forms shouldn't be nested anyway.
103
+ page.current_form = self
104
+ @childViewsBlock.call(page.view_builder)
105
+ page.current_form = nil
106
+ end
107
+ end
108
+
109
+ def childViews(block)
110
+ @childViewsBlock = block
111
+ end
112
+ end
113
+
114
+ class List < View
115
+ hash :phoenixSocket
116
+ hash :actionCable
117
+
118
+ hash :nextPage
119
+ action :onScrollToTop
120
+ action :onScrollToBottom
121
+
122
+ def firstSection(block)
123
+ json.sections [1] do
124
+ block.call page.list_section_builder
125
+ end
126
+ end
127
+
128
+ def sections(blocks)
129
+ json.sections do
130
+ blocks.each do |block|
131
+ json.child! do
132
+ block.call page.list_section_builder
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ class Table < View
140
+ hash :nextPage
141
+ hash :export
142
+ hash :import
143
+ action :onScrollToTop
144
+ action :onScrollToBottom
145
+
146
+ def firstSection(block)
147
+ json.sections [1] do
148
+ block.call page.table_section_builder
149
+ end
150
+ end
151
+
152
+ def sections(blocks)
153
+ json.sections do
154
+ blocks.each do |block|
155
+ json.child! do
156
+ block.call page.table_section_builder
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ class Scroll < View
164
+ views :childViews
165
+ end
166
+
167
+ class Split < View
168
+ # def content(block)
169
+ # block.call page.split_content_builder
170
+ # end
171
+
172
+ panels_builder :content, :left, :center, :right
173
+ end
174
+
175
+ class Responsive < View
176
+ views :childViews
177
+ string :align
178
+ action :onClick
179
+ end
180
+
181
+ class Column < View
182
+ hash :xl
183
+ hash :lg
184
+ hash :md
185
+ hash :sm
186
+ hash :xs
187
+
188
+ hash :xlOnly
189
+ hash :lgOnly
190
+ hash :mdOnly
191
+ hash :smOnly
192
+ hash :xsOnly
193
+
194
+ hash :xlAndDown
195
+ hash :lgAndDown
196
+ hash :mdAndDown
197
+ hash :smAndDown
198
+ hash :xsAndDown
199
+
200
+ views :childViews
201
+ end
202
+
203
+ class Vertical < View
204
+ views :childViews
205
+ string :distribution
206
+ string :align
207
+ action :onClick
208
+ end
209
+
210
+ class Horizontal < View
211
+ views :childViews
212
+ string :distribution
213
+ string :align
214
+ end
215
+
216
+ class Flow < View
217
+ hash :innerPadding
218
+ views :childViews
219
+ end
220
+
221
+ class Carousel < View
222
+ views :childViews
223
+ string :distribution
224
+ end
225
+
226
+ # # TODO: Deprecate in favour of styleClasses
227
+ # class Card < View
228
+ # views :childViews
229
+ # end
230
+
231
+ class Custom < View
232
+ string :template
233
+ hash :data
234
+ action :onClick
235
+
236
+ def content(block)
237
+ json.data do
238
+ block.call page.view_builder
239
+ end
240
+ end
241
+ end
242
+
243
+ class Web < View
244
+ string :url
245
+ end
246
+
247
+ class Ul < View
248
+ views :childViews
249
+
250
+ # def buttons(block)
251
+ # json.buttons do
252
+ # block.call page.menu_builder
253
+ # end
254
+ # end
255
+ end
256
+
257
+ end
258
+ end