glib-web 0.5.97 → 0.5.98

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 (192) 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 -96
  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 +49 -49
  39. data/app/helpers/glib/json_ui/view_builder/fields.rb +296 -296
  40. data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -11
  41. data/app/helpers/glib/json_ui/view_builder/panels.rb +262 -262
  42. data/app/helpers/glib/json_ui/view_builder.rb +256 -253
  43. data/app/helpers/glib/urls_helper.rb +12 -12
  44. data/app/models/concerns/glib/soft_deletable.rb +73 -73
  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 +72 -72
  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 +27 -27
  69. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +38 -38
  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 +120 -120
  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 +89 -89
  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/submit_on_change.json.jbuilder +28 -28
  93. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +65 -65
  94. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  95. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  96. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  97. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  98. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +30 -30
  99. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  100. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  101. data/app/views/json_ui/garage/lists/autoload_as_needed_responsive_columns.json.jbuilder +27 -27
  102. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  103. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  104. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  105. data/app/views/json_ui/garage/lists/index.json.jbuilder +41 -41
  106. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  107. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  108. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  109. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  110. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  111. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  112. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  113. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  114. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  115. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  116. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  117. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  118. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  119. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  120. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  121. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +92 -92
  122. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  123. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  124. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +38 -38
  125. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  126. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  127. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +101 -101
  128. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
  129. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  130. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  131. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  132. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
  133. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  134. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  135. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  136. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  137. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  138. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  139. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  140. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  141. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  142. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  143. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  144. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  145. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  146. data/app/views/json_ui/garage/views/banners.json.jbuilder +67 -67
  147. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  148. data/app/views/json_ui/garage/views/charts.json.jbuilder +125 -125
  149. data/app/views/json_ui/garage/views/controls.json.jbuilder +60 -60
  150. data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -21
  151. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  152. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
  153. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  154. data/app/views/json_ui/garage/views/index.json.jbuilder +83 -83
  155. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  156. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  157. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  158. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  159. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  160. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  161. data/app/views/json_ui/garage/views/progress.json.jbuilder +31 -31
  162. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  163. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  164. data/config/routes.rb +7 -7
  165. data/lib/generators/glib/install_generator.rb +24 -24
  166. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  167. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  168. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  169. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  170. data/lib/generators/templates/database.yml +107 -107
  171. data/lib/generators/templates/dynamic_text.rb +2 -2
  172. data/lib/glib/crypt/utils.rb +26 -26
  173. data/lib/glib/dynamic_text/config.rb +21 -21
  174. data/lib/glib/engine.rb +7 -7
  175. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  176. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  177. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  178. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  179. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  180. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  181. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  182. data/lib/glib/json_crawler/coverage.rb +20 -20
  183. data/lib/glib/json_crawler/http.rb +120 -120
  184. data/lib/glib/json_crawler/router.rb +90 -90
  185. data/lib/glib/json_crawler.rb +11 -11
  186. data/lib/glib/mailer_tester.rb +36 -36
  187. data/lib/glib/test_helpers.rb +52 -52
  188. data/lib/glib/value.rb +7 -7
  189. data/lib/glib/version.rb +5 -5
  190. data/lib/glib-web.rb +9 -9
  191. data/lib/tasks/db.rake +95 -95
  192. metadata +2 -3
@@ -1,96 +1,96 @@
1
- module Glib
2
- module JsonUi
3
- class MenuBuilder < AbstractBuilder
4
- def method_missing(m, *args)
5
- add_element_to_array_v1 nil, m, *args
6
- end
7
-
8
- class MenuItem < JsonUiElement
9
- hash :analytics
10
-
11
- # def initialize(json, page)
12
- # super(json, page)
13
-
14
- # # Can be improved by making it configurable site-wide.
15
- # @analyticsEnabled = true
16
- # end
17
-
18
- # def analytics(value)
19
- # if value.is_a?(Hash)
20
- # @analyticsEnabled = true
21
- # @analyticsId = value
22
- # else
23
- # @analyticsEnabled = value == true
24
- # end
25
- # end
26
-
27
- # # Override
28
- # def created
29
- # json.analytics do
30
- # if @analyticsEnabled
31
- # if @analyticsId
32
- # json.placement @analyticsId
33
- # end
34
- # else
35
- # json.disabled true
36
- # end
37
- # end
38
- # end
39
- end
40
-
41
- class Button < MenuItem
42
- string :text
43
- icon :icon
44
- action :onClick
45
- bool :disabled
46
- color :badgeColor
47
- string :badgeContent
48
- singleton_array :styleClass, :styleClasses
49
-
50
- def childButtons(block)
51
- json.childButtons do
52
- block.call page.menu_builder
53
- end
54
- end
55
-
56
- # Override
57
- def created
58
- super
59
-
60
- json.type 'button'
61
- end
62
- end
63
-
64
- class Divider < MenuItem
65
- # Override
66
- def created
67
- super
68
-
69
- json.type 'divider'
70
- end
71
- end
72
-
73
- class Label < MenuItem
74
- string :text
75
- singleton_array :styleClass, :styleClasses
76
-
77
- # Override
78
- def created
79
- super
80
-
81
- json.type 'label'
82
- end
83
- end
84
-
85
- # class MenuLeftBottom < Button
86
- # icon :icon
87
- # array :buttons
88
- # end
89
-
90
- # class Select < Button
91
- # icon :icon
92
- # array :buttons
93
- # end
94
- end
95
- end
96
- end
1
+ module Glib
2
+ module JsonUi
3
+ class MenuBuilder < AbstractBuilder
4
+ def method_missing(m, *args)
5
+ add_element_to_array_v1 nil, m, *args
6
+ end
7
+
8
+ class MenuItem < JsonUiElement
9
+ hash :analytics
10
+
11
+ # def initialize(json, page)
12
+ # super(json, page)
13
+
14
+ # # Can be improved by making it configurable site-wide.
15
+ # @analyticsEnabled = true
16
+ # end
17
+
18
+ # def analytics(value)
19
+ # if value.is_a?(Hash)
20
+ # @analyticsEnabled = true
21
+ # @analyticsId = value
22
+ # else
23
+ # @analyticsEnabled = value == true
24
+ # end
25
+ # end
26
+
27
+ # # Override
28
+ # def created
29
+ # json.analytics do
30
+ # if @analyticsEnabled
31
+ # if @analyticsId
32
+ # json.placement @analyticsId
33
+ # end
34
+ # else
35
+ # json.disabled true
36
+ # end
37
+ # end
38
+ # end
39
+ end
40
+
41
+ class Button < MenuItem
42
+ string :text
43
+ icon :icon
44
+ action :onClick
45
+ bool :disabled
46
+ color :badgeColor
47
+ string :badgeContent
48
+ singleton_array :styleClass, :styleClasses
49
+
50
+ def childButtons(block)
51
+ json.childButtons do
52
+ block.call page.menu_builder
53
+ end
54
+ end
55
+
56
+ # Override
57
+ def created
58
+ super
59
+
60
+ json.type 'button'
61
+ end
62
+ end
63
+
64
+ class Divider < MenuItem
65
+ # Override
66
+ def created
67
+ super
68
+
69
+ json.type 'divider'
70
+ end
71
+ end
72
+
73
+ class Label < MenuItem
74
+ string :text
75
+ singleton_array :styleClass, :styleClasses
76
+
77
+ # Override
78
+ def created
79
+ super
80
+
81
+ json.type 'label'
82
+ end
83
+ end
84
+
85
+ # class MenuLeftBottom < Button
86
+ # icon :icon
87
+ # array :buttons
88
+ # end
89
+
90
+ # class Select < Button
91
+ # icon :icon
92
+ # array :buttons
93
+ # end
94
+ end
95
+ end
96
+ end
@@ -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
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, :backgroundColor].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
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, :backgroundColor].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