glib-web 0.5.71 → 0.5.72

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 (185) 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 -8
  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.rb +140 -140
  21. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  22. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  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 +33 -33
  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.rb +240 -240
  38. data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
  39. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  40. data/app/helpers/glib/json_ui/view_builder/fields.rb +278 -279
  41. data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
  42. data/app/helpers/glib/urls_helper.rb +12 -12
  43. data/app/models/glib/active_storage/attachment.rb +9 -9
  44. data/app/models/glib/active_storage/blob.rb +9 -9
  45. data/app/models/glib/application_record.rb +18 -18
  46. data/app/models/glib/dynamic_text_record.rb +9 -9
  47. data/app/models/glib/text.rb +95 -95
  48. data/app/policies/glib/application_policy.rb +161 -161
  49. data/app/validators/email_typo_validator.rb +38 -38
  50. data/app/validators/email_validator.rb +7 -7
  51. data/app/validators/url_validator.rb +20 -20
  52. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  53. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  54. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  55. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  56. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  57. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  58. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  59. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  60. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  61. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  62. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  63. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  64. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  65. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  66. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  67. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  68. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  69. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -22
  70. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  71. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -37
  72. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  73. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  74. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  75. data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -113
  76. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  77. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  78. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  79. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
  80. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  81. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  82. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -84
  83. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
  84. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  85. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  86. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  87. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  88. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  89. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +81 -81
  90. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  91. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  92. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  93. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  94. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  95. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  96. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  97. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  98. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  99. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  100. data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
  101. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  102. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  103. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  104. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  105. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  106. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  107. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  108. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  109. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  110. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  111. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  112. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  113. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  114. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  115. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  116. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
  117. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  118. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  119. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  120. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  121. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  122. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  123. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -134
  124. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  125. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  126. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  127. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -0
  128. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  129. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  130. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  131. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  132. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  133. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  134. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  135. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  136. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  137. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  138. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  139. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  140. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  141. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  142. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  143. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  144. data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
  145. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  146. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -14
  147. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  148. data/app/views/json_ui/garage/views/index.json.jbuilder +67 -67
  149. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  150. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  151. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  152. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  153. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  154. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  155. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  156. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  157. data/config/routes.rb +7 -7
  158. data/lib/generators/glib/install_generator.rb +24 -24
  159. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  160. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  161. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  162. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  163. data/lib/generators/templates/database.yml +107 -107
  164. data/lib/generators/templates/dynamic_text.rb +2 -2
  165. data/lib/glib-web.rb +9 -9
  166. data/lib/glib/crypt/utils.rb +26 -26
  167. data/lib/glib/dynamic_text/config.rb +21 -21
  168. data/lib/glib/engine.rb +7 -7
  169. data/lib/glib/json_crawler.rb +11 -11
  170. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  171. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  172. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  173. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  174. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  175. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  176. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  177. data/lib/glib/json_crawler/coverage.rb +20 -20
  178. data/lib/glib/json_crawler/http.rb +120 -120
  179. data/lib/glib/json_crawler/router.rb +98 -98
  180. data/lib/glib/mailer_tester.rb +36 -36
  181. data/lib/glib/test_helpers.rb +52 -52
  182. data/lib/glib/value.rb +7 -7
  183. data/lib/glib/version.rb +5 -5
  184. data/lib/tasks/db.rake +95 -95
  185. metadata +3 -3
@@ -1,94 +1,94 @@
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
- singleton_array :styleClass, :styleClasses
47
-
48
- def childButtons(block)
49
- json.childButtons do
50
- block.call page.menu_builder
51
- end
52
- end
53
-
54
- # Override
55
- def created
56
- super
57
-
58
- json.type 'button'
59
- end
60
- end
61
-
62
- class Divider < MenuItem
63
- # Override
64
- def created
65
- super
66
-
67
- json.type 'divider'
68
- end
69
- end
70
-
71
- class Label < MenuItem
72
- string :text
73
- singleton_array :styleClass, :styleClasses
74
-
75
- # Override
76
- def created
77
- super
78
-
79
- json.type 'label'
80
- end
81
- end
82
-
83
- # class MenuLeftBottom < Button
84
- # icon :icon
85
- # array :buttons
86
- # end
87
-
88
- # class Select < Button
89
- # icon :icon
90
- # array :buttons
91
- # end
92
- end
93
- end
94
- 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
+ singleton_array :styleClass, :styleClasses
47
+
48
+ def childButtons(block)
49
+ json.childButtons do
50
+ block.call page.menu_builder
51
+ end
52
+ end
53
+
54
+ # Override
55
+ def created
56
+ super
57
+
58
+ json.type 'button'
59
+ end
60
+ end
61
+
62
+ class Divider < MenuItem
63
+ # Override
64
+ def created
65
+ super
66
+
67
+ json.type 'divider'
68
+ end
69
+ end
70
+
71
+ class Label < MenuItem
72
+ string :text
73
+ singleton_array :styleClass, :styleClasses
74
+
75
+ # Override
76
+ def created
77
+ super
78
+
79
+ json.type 'label'
80
+ end
81
+ end
82
+
83
+ # class MenuLeftBottom < Button
84
+ # icon :icon
85
+ # array :buttons
86
+ # end
87
+
88
+ # class Select < Button
89
+ # icon :icon
90
+ # array :buttons
91
+ # end
92
+ end
93
+ end
94
+ 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, :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