glib-web 0.5.75 → 0.5.76

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 (188) 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 +148 -148
  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/panels.rb +14 -14
  23. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  24. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  25. data/app/helpers/glib/json_ui/action_builder/windows.rb +33 -33
  26. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  27. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  28. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  29. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  30. data/app/helpers/glib/json_ui/list_builders.rb +110 -110
  31. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  32. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  33. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  34. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  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 +278 -278
  40. data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
  41. data/app/helpers/glib/json_ui/view_builder.rb +240 -240
  42. data/app/helpers/glib/urls_helper.rb +12 -12
  43. data/app/models/concerns/glib/soft_deletable.rb +68 -68
  44. data/app/models/glib/active_storage/attachment.rb +9 -9
  45. data/app/models/glib/active_storage/blob.rb +9 -9
  46. data/app/models/glib/application_record.rb +18 -18
  47. data/app/models/glib/dynamic_text_record.rb +9 -9
  48. data/app/models/glib/text.rb +95 -95
  49. data/app/policies/glib/application_policy.rb +161 -161
  50. data/app/validators/email_typo_validator.rb +38 -38
  51. data/app/validators/email_validator.rb +7 -7
  52. data/app/validators/url_validator.rb +20 -20
  53. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  54. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  55. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  56. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  57. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  58. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  59. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  60. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  61. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  62. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  63. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  64. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  65. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  66. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  67. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  68. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  69. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  70. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
  71. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  72. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -32
  73. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  74. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  75. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  76. data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -113
  77. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  78. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  79. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  80. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
  81. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  82. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  83. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
  84. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
  85. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  86. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  87. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  88. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  89. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  90. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +81 -81
  91. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  92. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  93. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  94. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  95. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  96. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  97. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  98. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  99. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  100. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  101. data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
  102. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  103. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  104. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  105. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  106. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  107. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  108. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  109. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  110. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  111. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  112. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  113. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  114. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  115. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  116. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  117. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
  118. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  119. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  120. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  121. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  122. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  123. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  124. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
  125. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  126. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  127. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  128. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
  129. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  130. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  131. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  132. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  133. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  134. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  135. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  136. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  137. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  138. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  139. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  140. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  141. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  142. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  143. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  144. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  145. data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
  146. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  147. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
  148. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  149. data/app/views/json_ui/garage/views/index.json.jbuilder +67 -67
  150. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  151. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  152. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  153. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  154. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  155. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  156. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  157. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  158. data/config/routes.rb +7 -7
  159. data/lib/generators/glib/install_generator.rb +24 -24
  160. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  161. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  162. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  163. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  164. data/lib/generators/templates/database.yml +107 -107
  165. data/lib/generators/templates/dynamic_text.rb +2 -2
  166. data/lib/glib/crypt/utils.rb +26 -26
  167. data/lib/glib/crypt.rb +0 -0
  168. data/lib/glib/dynamic_text/config.rb +21 -21
  169. data/lib/glib/dynamic_text.rb +0 -0
  170. data/lib/glib/engine.rb +7 -7
  171. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  172. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  173. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  174. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  175. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  176. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  177. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  178. data/lib/glib/json_crawler/coverage.rb +20 -20
  179. data/lib/glib/json_crawler/http.rb +120 -120
  180. data/lib/glib/json_crawler/router.rb +90 -98
  181. data/lib/glib/json_crawler.rb +11 -11
  182. data/lib/glib/mailer_tester.rb +36 -36
  183. data/lib/glib/test_helpers.rb +52 -52
  184. data/lib/glib/value.rb +7 -7
  185. data/lib/glib/version.rb +5 -5
  186. data/lib/glib-web.rb +9 -9
  187. data/lib/tasks/db.rake +95 -95
  188. metadata +1 -1
@@ -1,221 +1,221 @@
1
- module Glib
2
- module JsonUi
3
- module PageHelper
4
- def json_ui_garage_url(options = {})
5
- Glib::Web::Engine.routes.url_helpers.json_ui_garage_url(options.merge(
6
- protocol: request.protocol,
7
- host: request.host,
8
- port: request.port,
9
- _render: params[:_render], format: params[:format])
10
- )
11
- end
12
-
13
- def json_ui_garage_current_url(options = {})
14
- json_ui_garage_url(options.merge(path: params[:path]))
15
- end
16
-
17
- # TODO: Remove the block
18
- def json_ui_page(json, &block)
19
- @__json_ui_page ||= Page.new(json, self)
20
-
21
- __json_ui_analytics(json)
22
-
23
- block&.call @__json_ui_page
24
- @__json_ui_page
25
- end
26
-
27
- # # Use this only if you need to generate json independently from the current `json_ui_page`
28
- # def json_ui_menu(&block)
29
- # @__json_ui_menu_page ||= Page.new(Jbuilder.new, self)
30
- # json = @__json_ui_menu_page.json
31
- # json.nil!
32
- # block&.call @__json_ui_menu_page.menu_builder
33
- # json.attributes!
34
- # end
35
-
36
- # # Use this only if you need to generate json independently from the current `json_ui_page`
37
- # def json_ui_panel(&block)
38
- # @__json_ui_panel_page ||= Page.new(Jbuilder.new, self)
39
- # json = @__json_ui_panel_page.json
40
- # json.nil!
41
- # block&.call @__json_ui_panel_page.view_builder
42
- # json.attributes!
43
- # end
44
-
45
- def json_ui_section(json)
46
- @__json_ui_section ||= Page.new(json, self)
47
- @__json_ui_section.list_section_builder
48
- end
49
-
50
- def json_ui_action(json)
51
- @__json_ui_action ||= Page.new(json, self)
52
- @__json_ui_action.action_builder
53
- end
54
-
55
- # def json_ui_view(json)
56
- # @__json_ui_view ||= Page.new(json, self)
57
- # @__json_ui_view.view_builder
58
- # end
59
-
60
- def json_ui_action_payload(&block)
61
- dataJson = Jbuilder.new
62
- block&.call Page.new(dataJson, self).action_builder
63
- dataJson.attributes!
64
- end
65
-
66
- class Page
67
- attr_reader :json, :context, :view_builder, :action_builder, :menu_builder
68
- attr_reader :list_section_builder, :table_section_builder, :drawer_content_builder, :split_content_builder
69
-
70
- # See Panels::Form
71
- attr_accessor :current_form
72
-
73
- def initialize(json, context)
74
- @json = json
75
- @context = context
76
-
77
- @view_builder = ViewBuilder.new(json, self, true)
78
- @action_builder = ActionBuilder.new(json, self, false)
79
- @menu_builder = MenuBuilder.new(json, self)
80
-
81
- @list_section_builder = ListBuilders::Section.new(json, self, ListBuilders::Template.new(json, self))
82
- @drawer_content_builder = ListBuilders::Section.new(json, self, @menu_builder)
83
- @table_section_builder = TableBuilders::Section.new(json, self, TableBuilders::Template.new(json, self))
84
- @split_content_builder = SplitBuilders::Content.new(json, self, @view_builder)
85
-
86
- # TODO: Deprecate
87
- # For generic `body` builder. For others, use content_builder()
88
- # @generic_content_builder = GenericBuilders::Content.new(json, self, @view_builder)
89
- end
90
-
91
- def content_builder(panelNames)
92
- # NOTE: Can potentially be cached
93
- builder = GenericBuilders::Content.new(json, self, @view_builder)
94
- builder.definePanels(panelNames)
95
- builder
96
- end
97
-
98
- # def rightNavButtons
99
- # json.rightNavButtons do
100
- # yield @menu_builder
101
- # end
102
- # end
103
-
104
- def template(template)
105
- json.template template
106
- end
107
-
108
- def leftDrawer(options = {})
109
- json.leftDrawer do
110
- [:styleClasses].each do |name|
111
- if (value = options.delete(name))
112
- json.set! name, value
113
- end
114
- end
115
- options[:content]&.call drawer_content_builder
116
- end
117
- end
118
-
119
- def navBar(options = {})
120
- json.navBar do
121
- # json.leftItems do
122
- # options[:leftItems]&.call @menu_builder
123
- # end
124
- # json.logoUrl "http://localhost:3000/assets/logo_dark-02d9b6a91fdbf22515da7b921d31367b70696214415f6789d2f90232e4a287b7.svg"
125
-
126
- # json.rightItems do
127
- # options[:rightItems]&.call @menu_builder
128
- # end
129
-
130
- @view_builder.add_singleton_view('appBar', options)
131
- end
132
- end
133
-
134
- def header(options = {})
135
- json.header do
136
- vertical_content(options)
137
- end
138
- end
139
-
140
- def footer(options = {})
141
- json.footer do
142
- vertical_content(options)
143
- end
144
- end
145
-
146
- def body(options = {})
147
- json.body do
148
- vertical_content(options)
149
- end
150
- end
151
-
152
- def list(options = {})
153
- json.body do
154
- json.childViews do
155
- @view_builder.add_view('panels_list', options.reverse_merge(width: 'matchParent'))
156
- end
157
- end
158
- end
159
-
160
- def table(options = {})
161
- json.body do
162
- json.childViews do
163
- @view_builder.add_view('panels_table', options.reverse_merge(width: 'matchParent'))
164
- end
165
- end
166
- end
167
-
168
- def scroll(options = {})
169
- json.body do
170
- json.childViews do
171
- @view_builder.add_view('panels_scroll', options.reverse_merge(width: 'matchParent'))
172
- end
173
- end
174
- end
175
-
176
- def form(options = {})
177
- scroll childViews: ->(scroll) do
178
- @view_builder.add_view('panels_form', options.reverse_merge(width: 'matchParent'))
179
- end
180
- end
181
-
182
- def data(options = {})
183
- options[:content].call(ViewBuilder.new(json, self, false))
184
- end
185
-
186
- def vertical_content(options)
187
- # TODO: try disabling this
188
- # options = options.reverse_merge(width: 'matchParent')
189
-
190
- [:padding, :backgroundColor, :width, :height].each do |name|
191
- if (value = options.delete(name))
192
- json.set! name, value
193
- end
194
- end
195
- json.childViews do
196
- if (childViews = options.delete(:childViews))
197
- childViews.call @view_builder
198
- end
199
- end
200
-
201
- raise "Invalid properties: #{options.keys}" if options.size > 0
202
- end
203
-
204
- # def onLoad(options = {})
205
- # json.onLoad do
206
- # yield @action_builder
207
- # end
208
- # end
209
-
210
- def on(options = {})
211
- if (on_load = options[:load])
212
- json.onLoad do
213
- on_load.call @action_builder
214
- end
215
- end
216
- end
217
-
218
- end
219
- end
220
- end
221
- end
1
+ module Glib
2
+ module JsonUi
3
+ module PageHelper
4
+ def json_ui_garage_url(options = {})
5
+ Glib::Web::Engine.routes.url_helpers.json_ui_garage_url(options.merge(
6
+ protocol: request.protocol,
7
+ host: request.host,
8
+ port: request.port,
9
+ _render: params[:_render], format: params[:format])
10
+ )
11
+ end
12
+
13
+ def json_ui_garage_current_url(options = {})
14
+ json_ui_garage_url(options.merge(path: params[:path]))
15
+ end
16
+
17
+ # TODO: Remove the block
18
+ def json_ui_page(json, &block)
19
+ @__json_ui_page ||= Page.new(json, self)
20
+
21
+ __json_ui_analytics(json)
22
+
23
+ block&.call @__json_ui_page
24
+ @__json_ui_page
25
+ end
26
+
27
+ # # Use this only if you need to generate json independently from the current `json_ui_page`
28
+ # def json_ui_menu(&block)
29
+ # @__json_ui_menu_page ||= Page.new(Jbuilder.new, self)
30
+ # json = @__json_ui_menu_page.json
31
+ # json.nil!
32
+ # block&.call @__json_ui_menu_page.menu_builder
33
+ # json.attributes!
34
+ # end
35
+
36
+ # # Use this only if you need to generate json independently from the current `json_ui_page`
37
+ # def json_ui_panel(&block)
38
+ # @__json_ui_panel_page ||= Page.new(Jbuilder.new, self)
39
+ # json = @__json_ui_panel_page.json
40
+ # json.nil!
41
+ # block&.call @__json_ui_panel_page.view_builder
42
+ # json.attributes!
43
+ # end
44
+
45
+ def json_ui_section(json)
46
+ @__json_ui_section ||= Page.new(json, self)
47
+ @__json_ui_section.list_section_builder
48
+ end
49
+
50
+ def json_ui_action(json)
51
+ @__json_ui_action ||= Page.new(json, self)
52
+ @__json_ui_action.action_builder
53
+ end
54
+
55
+ # def json_ui_view(json)
56
+ # @__json_ui_view ||= Page.new(json, self)
57
+ # @__json_ui_view.view_builder
58
+ # end
59
+
60
+ def json_ui_action_payload(&block)
61
+ dataJson = Jbuilder.new
62
+ block&.call Page.new(dataJson, self).action_builder
63
+ dataJson.attributes!
64
+ end
65
+
66
+ class Page
67
+ attr_reader :json, :context, :view_builder, :action_builder, :menu_builder
68
+ attr_reader :list_section_builder, :table_section_builder, :drawer_content_builder, :split_content_builder
69
+
70
+ # See Panels::Form
71
+ attr_accessor :current_form
72
+
73
+ def initialize(json, context)
74
+ @json = json
75
+ @context = context
76
+
77
+ @view_builder = ViewBuilder.new(json, self, true)
78
+ @action_builder = ActionBuilder.new(json, self, false)
79
+ @menu_builder = MenuBuilder.new(json, self)
80
+
81
+ @list_section_builder = ListBuilders::Section.new(json, self, ListBuilders::Template.new(json, self))
82
+ @drawer_content_builder = ListBuilders::Section.new(json, self, @menu_builder)
83
+ @table_section_builder = TableBuilders::Section.new(json, self, TableBuilders::Template.new(json, self))
84
+ @split_content_builder = SplitBuilders::Content.new(json, self, @view_builder)
85
+
86
+ # TODO: Deprecate
87
+ # For generic `body` builder. For others, use content_builder()
88
+ # @generic_content_builder = GenericBuilders::Content.new(json, self, @view_builder)
89
+ end
90
+
91
+ def content_builder(panelNames)
92
+ # NOTE: Can potentially be cached
93
+ builder = GenericBuilders::Content.new(json, self, @view_builder)
94
+ builder.definePanels(panelNames)
95
+ builder
96
+ end
97
+
98
+ # def rightNavButtons
99
+ # json.rightNavButtons do
100
+ # yield @menu_builder
101
+ # end
102
+ # end
103
+
104
+ def template(template)
105
+ json.template template
106
+ end
107
+
108
+ def leftDrawer(options = {})
109
+ json.leftDrawer do
110
+ [:styleClasses].each do |name|
111
+ if (value = options.delete(name))
112
+ json.set! name, value
113
+ end
114
+ end
115
+ options[:content]&.call drawer_content_builder
116
+ end
117
+ end
118
+
119
+ def navBar(options = {})
120
+ json.navBar do
121
+ # json.leftItems do
122
+ # options[:leftItems]&.call @menu_builder
123
+ # end
124
+ # json.logoUrl "http://localhost:3000/assets/logo_dark-02d9b6a91fdbf22515da7b921d31367b70696214415f6789d2f90232e4a287b7.svg"
125
+
126
+ # json.rightItems do
127
+ # options[:rightItems]&.call @menu_builder
128
+ # end
129
+
130
+ @view_builder.add_singleton_view('appBar', options)
131
+ end
132
+ end
133
+
134
+ def header(options = {})
135
+ json.header do
136
+ vertical_content(options)
137
+ end
138
+ end
139
+
140
+ def footer(options = {})
141
+ json.footer do
142
+ vertical_content(options)
143
+ end
144
+ end
145
+
146
+ def body(options = {})
147
+ json.body do
148
+ vertical_content(options)
149
+ end
150
+ end
151
+
152
+ def list(options = {})
153
+ json.body do
154
+ json.childViews do
155
+ @view_builder.add_view('panels_list', options.reverse_merge(width: 'matchParent'))
156
+ end
157
+ end
158
+ end
159
+
160
+ def table(options = {})
161
+ json.body do
162
+ json.childViews do
163
+ @view_builder.add_view('panels_table', options.reverse_merge(width: 'matchParent'))
164
+ end
165
+ end
166
+ end
167
+
168
+ def scroll(options = {})
169
+ json.body do
170
+ json.childViews do
171
+ @view_builder.add_view('panels_scroll', options.reverse_merge(width: 'matchParent'))
172
+ end
173
+ end
174
+ end
175
+
176
+ def form(options = {})
177
+ scroll childViews: ->(scroll) do
178
+ @view_builder.add_view('panels_form', options.reverse_merge(width: 'matchParent'))
179
+ end
180
+ end
181
+
182
+ def data(options = {})
183
+ options[:content].call(ViewBuilder.new(json, self, false))
184
+ end
185
+
186
+ def vertical_content(options)
187
+ # TODO: try disabling this
188
+ # options = options.reverse_merge(width: 'matchParent')
189
+
190
+ [:padding, :backgroundColor, :width, :height].each do |name|
191
+ if (value = options.delete(name))
192
+ json.set! name, value
193
+ end
194
+ end
195
+ json.childViews do
196
+ if (childViews = options.delete(:childViews))
197
+ childViews.call @view_builder
198
+ end
199
+ end
200
+
201
+ raise "Invalid properties: #{options.keys}" if options.size > 0
202
+ end
203
+
204
+ # def onLoad(options = {})
205
+ # json.onLoad do
206
+ # yield @action_builder
207
+ # end
208
+ # end
209
+
210
+ def on(options = {})
211
+ if (on_load = options[:load])
212
+ json.onLoad do
213
+ on_load.call @action_builder
214
+ end
215
+ end
216
+ end
217
+
218
+ end
219
+ end
220
+ end
221
+ end
@@ -1,25 +1,25 @@
1
- module Glib
2
- module JsonUi
3
- module ResponseHelper
4
- def json_ui_response(json)
5
- __json_ui_analytics(json)
6
-
7
- json.onResponse do
8
- response = Response.new(json, self)
9
- yield response.action_builder
10
- end
11
- end
12
-
13
- class Response
14
- attr_reader :action_builder
15
-
16
- def initialize(json, context)
17
- @json = json
18
- @context = context
19
-
20
- @action_builder = ActionBuilder.new(json, self, false)
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ module Glib
2
+ module JsonUi
3
+ module ResponseHelper
4
+ def json_ui_response(json)
5
+ __json_ui_analytics(json)
6
+
7
+ json.onResponse do
8
+ response = Response.new(json, self)
9
+ yield response.action_builder
10
+ end
11
+ end
12
+
13
+ class Response
14
+ attr_reader :action_builder
15
+
16
+ def initialize(json, context)
17
+ @json = json
18
+ @context = context
19
+
20
+ @action_builder = ActionBuilder.new(json, self, false)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end