glib-web 0.5.43 → 0.5.44
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.
- checksums.yaml +4 -4
- data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
- data/app/controllers/concerns/glib/auth/policy.rb +148 -148
- data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
- data/app/controllers/concerns/glib/json/libs.rb +144 -144
- data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
- data/app/controllers/concerns/glib/json/transformation.rb +11 -11
- data/app/controllers/concerns/glib/json/traversal.rb +87 -87
- data/app/controllers/concerns/glib/json/ui.rb +88 -88
- data/app/controllers/concerns/glib/json/validation.rb +13 -13
- data/app/controllers/glib/home_controller.rb +16 -16
- data/app/helpers/glib/app_feature_support_helper.rb +16 -16
- data/app/helpers/glib/dynamic_images_helper.rb +55 -55
- data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
- data/app/helpers/glib/enum_helper.rb +8 -8
- data/app/helpers/glib/forms_helper.rb +15 -15
- data/app/helpers/glib/json_ui/abstract_builder.rb +294 -294
- data/app/helpers/glib/json_ui/action_builder.rb +131 -131
- data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
- data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
- data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
- data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
- data/app/helpers/glib/json_ui/action_builder/windows.rb +26 -26
- data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
- data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
- data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
- data/app/helpers/glib/json_ui/list_builders.rb +104 -104
- data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
- data/app/helpers/glib/json_ui/page_helper.rb +213 -213
- data/app/helpers/glib/json_ui/response_helper.rb +25 -25
- data/app/helpers/glib/json_ui/split_builders.rb +32 -32
- data/app/helpers/glib/json_ui/styling_helper.rb +47 -47
- data/app/helpers/glib/json_ui/table_builders.rb +74 -74
- data/app/helpers/glib/json_ui/view_builder.rb +208 -208
- data/app/helpers/glib/json_ui/view_builder/banners.rb +24 -24
- data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
- data/app/helpers/glib/json_ui/view_builder/fields.rb +235 -235
- data/app/helpers/glib/json_ui/view_builder/panels.rb +250 -250
- data/app/helpers/glib/urls_helper.rb +7 -7
- data/app/models/glib/active_storage/attachment.rb +9 -9
- data/app/models/glib/active_storage/blob.rb +9 -9
- data/app/models/glib/application_record.rb +18 -18
- data/app/models/glib/dynamic_text_record.rb +9 -9
- data/app/models/glib/text.rb +95 -95
- data/app/policies/glib/application_policy.rb +161 -161
- data/app/validators/email_typo_validator.rb +38 -38
- data/app/validators/email_validator.rb +7 -7
- data/app/validators/url_validator.rb +20 -20
- data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
- data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
- data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
- data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
- data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
- data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +18 -18
- data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
- data/app/views/json_ui/garage/actions/index.json.jbuilder +22 -22
- data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
- data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
- data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
- data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
- data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
- data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +56 -56
- data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +65 -65
- data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +31 -31
- data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +28 -28
- data/app/views/json_ui/garage/forms/index.json.jbuilder +110 -110
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +48 -48
- data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +70 -70
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +105 -105
- data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +36 -36
- data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
- data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +24 -24
- data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
- data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +22 -22
- data/app/views/json_ui/garage/home/blank.json.jbuilder +11 -11
- data/app/views/json_ui/garage/home/index.json.jbuilder +32 -32
- data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
- data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
- data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
- data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
- data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +93 -93
- data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +54 -54
- data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
- data/app/views/json_ui/garage/lists/index.json.jbuilder +32 -32
- data/app/views/json_ui/garage/lists/reordering.json.jbuilder +24 -24
- data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
- data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
- data/app/views/json_ui/garage/notifications/index.json.jbuilder +32 -32
- data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
- data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
- data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
- data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
- data/app/views/json_ui/garage/pages/index.json.jbuilder +58 -58
- data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
- data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
- data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
- data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
- data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +27 -27
- data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
- data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
- data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
- data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
- data/app/views/json_ui/garage/panels/flow.json.jbuilder +49 -49
- data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
- data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -132
- data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
- data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
- data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
- data/app/views/json_ui/garage/panels/vertical.json.jbuilder +50 -50
- data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
- data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
- data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
- data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
- data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
- data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
- data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
- data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
- data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
- data/app/views/json_ui/garage/tables/layout.json.jbuilder +36 -36
- data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
- data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
- data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
- data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
- data/app/views/json_ui/garage/views/icons.json.jbuilder +1450 -1450
- data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
- data/app/views/json_ui/garage/views/index.json.jbuilder +54 -54
- data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
- data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
- data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
- data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
- data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
- data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
- data/app/views/json_ui/garage/views/texts.json.jbuilder +41 -41
- data/app/views/layouts/json_ui/renderer.html.erb +35 -35
- data/config/routes.rb +7 -7
- data/lib/generators/glib/install_generator.rb +24 -24
- data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
- data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
- data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
- data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
- data/lib/generators/templates/database.yml +107 -107
- data/lib/generators/templates/dynamic_text.rb +2 -2
- data/lib/glib-web.rb +9 -9
- data/lib/glib/crypt/utils.rb +26 -26
- data/lib/glib/dynamic_text/config.rb +21 -21
- data/lib/glib/engine.rb +7 -7
- data/lib/glib/json_crawler.rb +11 -11
- data/lib/glib/json_crawler/action_crawler.rb +23 -23
- data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
- data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
- data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
- data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
- data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
- data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
- data/lib/glib/json_crawler/coverage.rb +20 -20
- data/lib/glib/json_crawler/http.rb +120 -120
- data/lib/glib/json_crawler/router.rb +96 -96
- data/lib/glib/mailer_tester.rb +36 -36
- data/lib/glib/test_helpers.rb +40 -40
- data/lib/glib/value.rb +7 -7
- data/lib/glib/version.rb +5 -5
- data/lib/tasks/db.rake +95 -95
- metadata +2 -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,213 +1,213 @@
|
|
|
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
|
-
end
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
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
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|