glib-web 0.5.51 → 0.5.52

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +28 -28
  3. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  4. data/app/controllers/concerns/glib/auth/policy.rb +148 -148
  5. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  6. data/app/controllers/concerns/glib/json/libs.rb +144 -144
  7. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  8. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  9. data/app/controllers/concerns/glib/json/traversal.rb +92 -92
  10. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  11. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  12. data/app/controllers/glib/home_controller.rb +16 -16
  13. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  14. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  15. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  16. data/app/helpers/glib/enum_helper.rb +8 -8
  17. data/app/helpers/glib/forms_helper.rb +15 -15
  18. data/app/helpers/glib/json_ui/abstract_builder.rb +294 -294
  19. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  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/sheets.rb +15 -15
  23. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  24. data/app/helpers/glib/json_ui/action_builder/windows.rb +26 -26
  25. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  26. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  27. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  28. data/app/helpers/glib/json_ui/list_builders.rb +109 -109
  29. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  30. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  31. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  32. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  33. data/app/helpers/glib/json_ui/styling_helper.rb +47 -47
  34. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  35. data/app/helpers/glib/json_ui/view_builder.rb +209 -209
  36. data/app/helpers/glib/json_ui/view_builder/banners.rb +25 -24
  37. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  38. data/app/helpers/glib/json_ui/view_builder/fields.rb +240 -240
  39. data/app/helpers/glib/json_ui/view_builder/panels.rb +250 -250
  40. data/app/helpers/glib/urls_helper.rb +7 -7
  41. data/app/models/glib/active_storage/attachment.rb +9 -9
  42. data/app/models/glib/active_storage/blob.rb +9 -9
  43. data/app/models/glib/application_record.rb +18 -18
  44. data/app/models/glib/dynamic_text_record.rb +9 -9
  45. data/app/models/glib/text.rb +95 -95
  46. data/app/policies/glib/application_policy.rb +161 -161
  47. data/app/validators/email_typo_validator.rb +38 -38
  48. data/app/validators/email_validator.rb +7 -7
  49. data/app/validators/url_validator.rb +20 -20
  50. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  51. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  52. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  53. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  54. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  55. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  56. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +18 -18
  57. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  58. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  59. data/app/views/json_ui/garage/actions/index.json.jbuilder +22 -22
  60. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  61. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  62. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  63. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  64. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  65. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  66. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +22 -22
  67. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  68. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -32
  69. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  70. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  71. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  72. data/app/views/json_ui/garage/forms/index.json.jbuilder +108 -108
  73. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  74. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +46 -46
  75. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  76. data/app/views/json_ui/garage/forms/selects.json.jbuilder +70 -70
  77. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +105 -105
  78. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +36 -36
  79. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  80. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +24 -24
  81. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  82. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  83. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +59 -59
  84. data/app/views/json_ui/garage/home/blank.json.jbuilder +11 -11
  85. data/app/views/json_ui/garage/home/index.json.jbuilder +32 -32
  86. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  87. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  88. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  89. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  90. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +93 -93
  91. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +54 -54
  92. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  93. data/app/views/json_ui/garage/lists/index.json.jbuilder +32 -32
  94. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  95. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  96. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +97 -97
  97. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  98. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  99. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  100. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  101. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  102. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  103. data/app/views/json_ui/garage/pages/index.json.jbuilder +58 -58
  104. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  105. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  106. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  107. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  108. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +27 -27
  109. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  110. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  111. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  112. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  113. data/app/views/json_ui/garage/panels/flow.json.jbuilder +49 -49
  114. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  115. data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -132
  116. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  117. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  118. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  119. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +50 -50
  120. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  121. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  122. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  123. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  124. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  125. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  126. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  127. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  128. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  129. data/app/views/json_ui/garage/tables/layout.json.jbuilder +36 -36
  130. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  131. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  132. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  133. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  134. data/app/views/json_ui/garage/views/icons.json.jbuilder +1450 -1450
  135. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  136. data/app/views/json_ui/garage/views/index.json.jbuilder +54 -54
  137. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  138. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  139. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  140. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  141. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  142. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  143. data/app/views/json_ui/garage/views/texts.json.jbuilder +44 -44
  144. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  145. data/config/routes.rb +7 -7
  146. data/lib/generators/glib/install_generator.rb +24 -24
  147. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  148. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  149. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  150. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  151. data/lib/generators/templates/database.yml +107 -107
  152. data/lib/generators/templates/dynamic_text.rb +2 -2
  153. data/lib/glib-web.rb +9 -9
  154. data/lib/glib/crypt/utils.rb +26 -26
  155. data/lib/glib/dynamic_text/config.rb +21 -21
  156. data/lib/glib/engine.rb +7 -7
  157. data/lib/glib/json_crawler.rb +11 -11
  158. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  159. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  160. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  161. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  162. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  163. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  164. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  165. data/lib/glib/json_crawler/coverage.rb +20 -20
  166. data/lib/glib/json_crawler/http.rb +120 -120
  167. data/lib/glib/json_crawler/router.rb +98 -98
  168. data/lib/glib/mailer_tester.rb +36 -36
  169. data/lib/glib/test_helpers.rb +52 -52
  170. data/lib/glib/value.rb +7 -7
  171. data/lib/glib/version.rb +5 -5
  172. data/lib/tasks/db.rake +95 -95
  173. metadata +1 -1
@@ -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