glib-web 0.5.75 → 0.5.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/channels/glib/channel/is_typing_channel.rb +34 -34
- data/app/channels/glib/channel/online_channel.rb +36 -36
- 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 +149 -149
- 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 +92 -92
- 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 +54 -54
- 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 +18 -18
- data/app/helpers/glib/forms_helper.rb +15 -15
- data/app/helpers/glib/json_ui/abstract_builder.rb +309 -309
- 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/panels.rb +14 -14
- 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 +33 -33
- data/app/helpers/glib/json_ui/action_builder.rb +140 -140
- 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 +110 -110
- data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
- data/app/helpers/glib/json_ui/page_helper.rb +221 -221
- 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 +55 -55
- data/app/helpers/glib/json_ui/table_builders.rb +74 -74
- data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
- data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
- data/app/helpers/glib/json_ui/view_builder/fields.rb +278 -278
- data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
- data/app/helpers/glib/json_ui/view_builder.rb +240 -240
- data/app/helpers/glib/urls_helper.rb +12 -12
- data/app/models/concerns/glib/soft_deletable.rb +68 -68
- 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/_panels.json.jbuilder +18 -18
- 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 +24 -24
- 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 +24 -24
- 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 +39 -39
- data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
- 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 +32 -32
- data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
- data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
- data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -113
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
- data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
- data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
- data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
- data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
- 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 +26 -26
- 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 +81 -81
- data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
- data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
- data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
- 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 +94 -94
- data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
- data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
- data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
- data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
- data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
- data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
- data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
- data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
- 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 +62 -62
- data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
- data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
- 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 +31 -31
- 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 +59 -59
- data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
- data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
- 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/ul.json.jbuilder +33 -33
- data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
- data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
- 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 +40 -40
- 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/controls.json.jbuilder +37 -37
- data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
- data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
- data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
- data/app/views/json_ui/garage/views/index.json.jbuilder +67 -67
- 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 +35 -35
- 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/crypt/utils.rb +26 -26
- data/lib/glib/crypt.rb +0 -0
- data/lib/glib/dynamic_text/config.rb +21 -21
- data/lib/glib/dynamic_text.rb +0 -0
- data/lib/glib/engine.rb +7 -7
- 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 +90 -98
- data/lib/glib/json_crawler.rb +11 -11
- data/lib/glib/mailer_tester.rb +36 -36
- data/lib/glib/test_helpers.rb +52 -52
- data/lib/glib/value.rb +7 -7
- data/lib/glib/version.rb +5 -5
- data/lib/glib-web.rb +9 -9
- data/lib/tasks/db.rake +95 -95
- metadata +1 -1
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module JsonUi
|
|
3
|
-
module SplitBuilders
|
|
4
|
-
|
|
5
|
-
class Content < AbstractBuilder
|
|
6
|
-
def initialize(json, page, template)
|
|
7
|
-
super json, page
|
|
8
|
-
@template = template
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def left(options = {})
|
|
12
|
-
json.left do
|
|
13
|
-
page.vertical_content(options)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def center(options = {})
|
|
18
|
-
json.center do
|
|
19
|
-
page.vertical_content(options)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def right(options = {})
|
|
24
|
-
json.right do
|
|
25
|
-
page.vertical_content(options)
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module JsonUi
|
|
3
|
+
module SplitBuilders
|
|
4
|
+
|
|
5
|
+
class Content < AbstractBuilder
|
|
6
|
+
def initialize(json, page, template)
|
|
7
|
+
super json, page
|
|
8
|
+
@template = template
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def left(options = {})
|
|
12
|
+
json.left do
|
|
13
|
+
page.vertical_content(options)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def center(options = {})
|
|
18
|
+
json.center do
|
|
19
|
+
page.vertical_content(options)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def right(options = {})
|
|
24
|
+
json.right do
|
|
25
|
+
page.vertical_content(options)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module JsonUi
|
|
3
|
-
module StylingHelper
|
|
4
|
-
|
|
5
|
-
### Padding
|
|
6
|
-
|
|
7
|
-
def glib_json_padding_body
|
|
8
|
-
{ top: 12, left: 20, right: 20, bottom: 12 }
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def glib_json_padding_list
|
|
12
|
-
{ top: 12, bottom: 12, left: 16, right: 16 }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
###
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
### Image
|
|
20
|
-
|
|
21
|
-
def glib_json_image_standard_url
|
|
22
|
-
'https://cdn-images-1.medium.com/max/1200/1*Qc0XxYm-qAZL-7tjjlNfrg.png'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def glib_json_image_avatar_url
|
|
26
|
-
'https://www.wpjournalist.nl/wp-content/uploads/2019/03/avatar-jongen-voorbeeld-1.jpg'
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def glib_json_image_blob_key
|
|
30
|
-
'o6CKzNt67PWnkPdUEnWMt7pr'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
###
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
### Color
|
|
38
|
-
|
|
39
|
-
def glib_color_panel_background
|
|
40
|
-
'#b3bac2'
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def glib_color_success
|
|
44
|
-
'#4caf50'
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def glib_color_error
|
|
48
|
-
'#ff5252'
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
###
|
|
52
|
-
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module JsonUi
|
|
3
|
+
module StylingHelper
|
|
4
|
+
|
|
5
|
+
### Padding
|
|
6
|
+
|
|
7
|
+
def glib_json_padding_body
|
|
8
|
+
{ top: 12, left: 20, right: 20, bottom: 12 }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def glib_json_padding_list
|
|
12
|
+
{ top: 12, bottom: 12, left: 16, right: 16 }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
###
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Image
|
|
20
|
+
|
|
21
|
+
def glib_json_image_standard_url
|
|
22
|
+
'https://cdn-images-1.medium.com/max/1200/1*Qc0XxYm-qAZL-7tjjlNfrg.png'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def glib_json_image_avatar_url
|
|
26
|
+
'https://www.wpjournalist.nl/wp-content/uploads/2019/03/avatar-jongen-voorbeeld-1.jpg'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def glib_json_image_blob_key
|
|
30
|
+
'o6CKzNt67PWnkPdUEnWMt7pr'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
###
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### Color
|
|
38
|
+
|
|
39
|
+
def glib_color_panel_background
|
|
40
|
+
'#b3bac2'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def glib_color_success
|
|
44
|
+
'#4caf50'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def glib_color_error
|
|
48
|
+
'#ff5252'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
###
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module JsonUi
|
|
3
|
-
module TableBuilders
|
|
4
|
-
class Template < AbstractBuilder
|
|
5
|
-
def method_missing(m, *args)
|
|
6
|
-
add_element_to_array 'template', m, *args
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
class AbstractTemplate < JsonUiElement
|
|
10
|
-
|
|
11
|
-
def editButtons(block)
|
|
12
|
-
json.editButtons do
|
|
13
|
-
block.call page.menu_builder
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
class Default < AbstractTemplate
|
|
20
|
-
views :cellViews
|
|
21
|
-
action :onClick
|
|
22
|
-
array :colSpans
|
|
23
|
-
array :colStyles
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
class Section < AbstractBuilder
|
|
28
|
-
def initialize(json, page, template)
|
|
29
|
-
super json, page
|
|
30
|
-
@template = template
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def header(options = {})
|
|
34
|
-
json.header do
|
|
35
|
-
json.backgroundColor options[:backgroundColor]
|
|
36
|
-
json.cellViews do
|
|
37
|
-
options[:cellViews]&.call page.view_builder
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def rows(options = {})
|
|
43
|
-
block = options.delete(:builder)
|
|
44
|
-
json.rows do
|
|
45
|
-
if (objects = options.delete(:objects))
|
|
46
|
-
objects.each_with_index do |object, index|
|
|
47
|
-
block&.call @template, object, index
|
|
48
|
-
end
|
|
49
|
-
else
|
|
50
|
-
block&.call @template
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
raise "Invalid properties: #{options.keys}" if options.size > 0
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# def rows(array = nil)
|
|
58
|
-
# template = page.table_template_builder
|
|
59
|
-
# json.rows do
|
|
60
|
-
# if array
|
|
61
|
-
# array.each do |row|
|
|
62
|
-
# yield template, row
|
|
63
|
-
# end
|
|
64
|
-
# else
|
|
65
|
-
# yield template
|
|
66
|
-
# end
|
|
67
|
-
# end
|
|
68
|
-
# end
|
|
69
|
-
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module JsonUi
|
|
3
|
+
module TableBuilders
|
|
4
|
+
class Template < AbstractBuilder
|
|
5
|
+
def method_missing(m, *args)
|
|
6
|
+
add_element_to_array 'template', m, *args
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class AbstractTemplate < JsonUiElement
|
|
10
|
+
|
|
11
|
+
def editButtons(block)
|
|
12
|
+
json.editButtons do
|
|
13
|
+
block.call page.menu_builder
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Default < AbstractTemplate
|
|
20
|
+
views :cellViews
|
|
21
|
+
action :onClick
|
|
22
|
+
array :colSpans
|
|
23
|
+
array :colStyles
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class Section < AbstractBuilder
|
|
28
|
+
def initialize(json, page, template)
|
|
29
|
+
super json, page
|
|
30
|
+
@template = template
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def header(options = {})
|
|
34
|
+
json.header do
|
|
35
|
+
json.backgroundColor options[:backgroundColor]
|
|
36
|
+
json.cellViews do
|
|
37
|
+
options[:cellViews]&.call page.view_builder
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def rows(options = {})
|
|
43
|
+
block = options.delete(:builder)
|
|
44
|
+
json.rows do
|
|
45
|
+
if (objects = options.delete(:objects))
|
|
46
|
+
objects.each_with_index do |object, index|
|
|
47
|
+
block&.call @template, object, index
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
block&.call @template
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
raise "Invalid properties: #{options.keys}" if options.size > 0
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# def rows(array = nil)
|
|
58
|
+
# template = page.table_template_builder
|
|
59
|
+
# json.rows do
|
|
60
|
+
# if array
|
|
61
|
+
# array.each do |row|
|
|
62
|
+
# yield template, row
|
|
63
|
+
# end
|
|
64
|
+
# else
|
|
65
|
+
# yield template
|
|
66
|
+
# end
|
|
67
|
+
# end
|
|
68
|
+
# end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
class Glib::JsonUi::ViewBuilder
|
|
2
|
-
module Banners
|
|
3
|
-
|
|
4
|
-
class Alert < View
|
|
5
|
-
icon :icon
|
|
6
|
-
string :message
|
|
7
|
-
# string :message_format
|
|
8
|
-
singleton_array :styleClass, :styleClasses
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
class Select < View
|
|
12
|
-
string :id
|
|
13
|
-
icon :icon
|
|
14
|
-
string :message
|
|
15
|
-
singleton_array :styleClass, :styleClasses
|
|
16
|
-
color :color
|
|
17
|
-
|
|
18
|
-
def buttons(block)
|
|
19
|
-
json.buttons do
|
|
20
|
-
block.call page.menu_builder
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
end
|
|
1
|
+
class Glib::JsonUi::ViewBuilder
|
|
2
|
+
module Banners
|
|
3
|
+
|
|
4
|
+
class Alert < View
|
|
5
|
+
icon :icon
|
|
6
|
+
string :message
|
|
7
|
+
# string :message_format
|
|
8
|
+
singleton_array :styleClass, :styleClasses
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Select < View
|
|
12
|
+
string :id
|
|
13
|
+
icon :icon
|
|
14
|
+
string :message
|
|
15
|
+
singleton_array :styleClass, :styleClasses
|
|
16
|
+
color :color
|
|
17
|
+
|
|
18
|
+
def buttons(block)
|
|
19
|
+
json.buttons do
|
|
20
|
+
block.call page.menu_builder
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
class Glib::JsonUi::ViewBuilder
|
|
2
|
-
module Charts
|
|
3
|
-
class Line < View
|
|
4
|
-
hash :nextPage
|
|
5
|
-
|
|
6
|
-
def dataSeries(blocks)
|
|
7
|
-
json.dataSeries do
|
|
8
|
-
blocks.each do |block|
|
|
9
|
-
json.child! do
|
|
10
|
-
block.call
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
class Column < View
|
|
19
|
-
bool :stacked
|
|
20
|
-
|
|
21
|
-
def dataGroups(blocks)
|
|
22
|
-
json.dataGroups do
|
|
23
|
-
blocks.each do |block|
|
|
24
|
-
json.child! do
|
|
25
|
-
block.call
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
1
|
+
class Glib::JsonUi::ViewBuilder
|
|
2
|
+
module Charts
|
|
3
|
+
class Line < View
|
|
4
|
+
hash :nextPage
|
|
5
|
+
|
|
6
|
+
def dataSeries(blocks)
|
|
7
|
+
json.dataSeries do
|
|
8
|
+
blocks.each do |block|
|
|
9
|
+
json.child! do
|
|
10
|
+
block.call
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Column < View
|
|
19
|
+
bool :stacked
|
|
20
|
+
|
|
21
|
+
def dataGroups(blocks)
|
|
22
|
+
json.dataGroups do
|
|
23
|
+
blocks.each do |block|
|
|
24
|
+
json.child! do
|
|
25
|
+
block.call
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -1,278 +1,278 @@
|
|
|
1
|
-
class Glib::JsonUi::ViewBuilder
|
|
2
|
-
module Fields
|
|
3
|
-
|
|
4
|
-
class AbstractField < View
|
|
5
|
-
bool :readOnly
|
|
6
|
-
hash :validation
|
|
7
|
-
# string :label
|
|
8
|
-
|
|
9
|
-
def label(label)
|
|
10
|
-
@label = label
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def label_args(label_args)
|
|
14
|
-
@label_args = label_args
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def hint(hint)
|
|
18
|
-
@hint = hint
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def hint_args(hint_args)
|
|
22
|
-
@hint_args = hint_args
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def placeholder(placeholder)
|
|
26
|
-
@placeholder = placeholder
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def placeholder_args(placeholder_args)
|
|
30
|
-
@placeholder_args = placeholder_args
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def name(name)
|
|
34
|
-
@name = name if name != Glib::Value::DEFAULT
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def value(value)
|
|
38
|
-
@value = value if value != Glib::Value::DEFAULT
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def prop(prop)
|
|
42
|
-
@prop = prop
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Override
|
|
46
|
-
def created
|
|
47
|
-
if @prop && (form = page.current_form)
|
|
48
|
-
form.field_assert_respond_to(@prop)
|
|
49
|
-
|
|
50
|
-
@name ||= form.field_name(@prop, @multiple || false)
|
|
51
|
-
@value ||= form.field_value(@prop)
|
|
52
|
-
@label ||= form.field_label(@prop, @label_args || {})
|
|
53
|
-
@hint ||= form.hint_label(@prop, @hint_args || {})
|
|
54
|
-
@placeholder ||= form.placeholder_label(@prop, @placeholder_args || {})
|
|
55
|
-
|
|
56
|
-
@validation ||= form.field_validation(@prop)
|
|
57
|
-
end
|
|
58
|
-
json.name @name
|
|
59
|
-
json.value @value if @value
|
|
60
|
-
json.label @label if @label
|
|
61
|
-
json.hint @hint if @hint
|
|
62
|
-
|
|
63
|
-
# In general, use hint over placeholder for the following reasons:
|
|
64
|
-
# - Placeholder gets hidden when there is input which may be confusing
|
|
65
|
-
# - Placeholder competes with label for space
|
|
66
|
-
json.placeholder @placeholder if @placeholder
|
|
67
|
-
|
|
68
|
-
# TODO: Add a flag so the framework's user can turn it on and off.
|
|
69
|
-
# json.validation @validation if @validation
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
class Text < AbstractField
|
|
75
|
-
int :maxLength
|
|
76
|
-
icon :leftIcon
|
|
77
|
-
string :leftText
|
|
78
|
-
string :rightText
|
|
79
|
-
action :onTypeStart
|
|
80
|
-
action :onTypeEnd
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
class Number < Text
|
|
84
|
-
int :min
|
|
85
|
-
int :max
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
class Email < Text
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
class Url < Text
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
class Password < Text
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
class Hidden < Text
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
class Timer < Text
|
|
101
|
-
hash :actionCable
|
|
102
|
-
int :min
|
|
103
|
-
int :max
|
|
104
|
-
bool :forward
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Benefits of using `fields/submit` over `button`
|
|
108
|
-
# - On the web, it translates to input[type=submit] which provides builtin functionality such as
|
|
109
|
-
# submitting upon pressing enter on a field and remembering values for autofill.
|
|
110
|
-
# - We can attach name-value param to it. See https://www.w3schools.com/tags/att_button_value.asp
|
|
111
|
-
# - It has a default onClick so no need to specify `onClick: ->(action) { action.forms_submit }`
|
|
112
|
-
class Submit < AbstractField
|
|
113
|
-
string :text
|
|
114
|
-
color :color
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
class CheckGroup < AbstractField
|
|
118
|
-
views :childViews
|
|
119
|
-
string :uncheckValue
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
class Check < Text
|
|
123
|
-
any :uncheckValue
|
|
124
|
-
any :checkValue
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def value(value)
|
|
128
|
-
@value = value if value != Glib::Value::DEFAULT
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# TODO: Remove (deprecated). Where possible, use value instead of this
|
|
132
|
-
bool :checked
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# This doesn't use camel case because some terms have become single words (e.g. snackbar)
|
|
136
|
-
class Textarea < Text
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
class RichText < Text
|
|
140
|
-
array :images
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
class Country < AbstractField
|
|
144
|
-
hash :region
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
class Select < AbstractField
|
|
148
|
-
array :options
|
|
149
|
-
# bool :readOnly
|
|
150
|
-
bool :multiple, cache: true
|
|
151
|
-
# bool :manualEntry
|
|
152
|
-
hash :append
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
class TimeZone < AbstractField
|
|
156
|
-
include Glib::EnumHelper
|
|
157
|
-
|
|
158
|
-
# Override
|
|
159
|
-
def created
|
|
160
|
-
super
|
|
161
|
-
|
|
162
|
-
json.options glib_time_zone_options
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
# TODO: Remove (deprecated)
|
|
167
|
-
class Autocomplete < AbstractField
|
|
168
|
-
array :options
|
|
169
|
-
# bool :readOnly
|
|
170
|
-
bool :multiple, cache: true
|
|
171
|
-
# bool :manualEntry
|
|
172
|
-
hash :append
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
class DynamicSelect < AbstractField
|
|
176
|
-
array :selectedOptions
|
|
177
|
-
string :url
|
|
178
|
-
bool :multiple, cache: true
|
|
179
|
-
|
|
180
|
-
# Override
|
|
181
|
-
def value(value)
|
|
182
|
-
raise 'Use selectedOptions instead (for clarity)'
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
class DynamicGroup < AbstractField
|
|
187
|
-
string :titlePrefix
|
|
188
|
-
panels_builder :content, :template
|
|
189
|
-
hash :groupFieldProperties
|
|
190
|
-
|
|
191
|
-
# NOTE: Consider using sub-panel instead (e.g. groupTemplate)
|
|
192
|
-
# views :groupTemplateViews
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
class RadioGroup < AbstractField
|
|
196
|
-
# string :name
|
|
197
|
-
# string :value
|
|
198
|
-
views :childViews
|
|
199
|
-
|
|
200
|
-
# Override
|
|
201
|
-
def value(value)
|
|
202
|
-
# Convert to string to make sure the value matches with Radio#value
|
|
203
|
-
@value = value.to_s if value != Glib::Value::DEFAULT
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
string :iconOfBeforeSelected
|
|
207
|
-
string :iconOfSelected
|
|
208
|
-
string :iconOfAfterSelected
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
class Radio < View
|
|
212
|
-
string :label
|
|
213
|
-
string :value
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
class File < Text
|
|
217
|
-
# file_rules = { fileType: 'image/*', maxFileSize: 5000 }
|
|
218
|
-
# file_rules = { fileType: 'video/*', maxFileSize: 50000 }
|
|
219
|
-
# file_rules = { fileType: 'application/pdf', maxFileSize: 5000 }
|
|
220
|
-
hash :accepts
|
|
221
|
-
|
|
222
|
-
string :directUploadUrl
|
|
223
|
-
string :fileUrl
|
|
224
|
-
string :fileTitle
|
|
225
|
-
hash :placeholderView
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
class Date < AbstractField
|
|
229
|
-
date :min
|
|
230
|
-
date :max
|
|
231
|
-
|
|
232
|
-
# Override
|
|
233
|
-
def value(value)
|
|
234
|
-
super(value&.to_date)
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
# This doesn't use camel case to be consistent with the html input equivalent
|
|
239
|
-
class Datetime < AbstractField
|
|
240
|
-
date_time :min
|
|
241
|
-
date_time :max
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
class Location < AbstractField
|
|
245
|
-
hash :latitudeField
|
|
246
|
-
hash :longitudeField
|
|
247
|
-
hash :zoomField
|
|
248
|
-
hash :autocompleteOptions
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
class StripeToken < AbstractField
|
|
252
|
-
string :publicKey
|
|
253
|
-
end
|
|
254
|
-
|
|
255
|
-
class StripeExternalAccount < AbstractField
|
|
256
|
-
string :publicKey
|
|
257
|
-
string :accountHolderName
|
|
258
|
-
string :accountHolderType
|
|
259
|
-
string :country
|
|
260
|
-
string :currency
|
|
261
|
-
end
|
|
262
|
-
|
|
263
|
-
class Phone < AbstractField
|
|
264
|
-
string :defaultCountry
|
|
265
|
-
bool :disableAutoDetect
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
class CreditCard < AbstractField
|
|
269
|
-
string :publicKey
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
class Rating < AbstractField
|
|
273
|
-
bool :halfIncrements
|
|
274
|
-
string :color
|
|
275
|
-
int :size
|
|
276
|
-
end
|
|
277
|
-
end
|
|
278
|
-
end
|
|
1
|
+
class Glib::JsonUi::ViewBuilder
|
|
2
|
+
module Fields
|
|
3
|
+
|
|
4
|
+
class AbstractField < View
|
|
5
|
+
bool :readOnly
|
|
6
|
+
hash :validation
|
|
7
|
+
# string :label
|
|
8
|
+
|
|
9
|
+
def label(label)
|
|
10
|
+
@label = label
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def label_args(label_args)
|
|
14
|
+
@label_args = label_args
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def hint(hint)
|
|
18
|
+
@hint = hint
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def hint_args(hint_args)
|
|
22
|
+
@hint_args = hint_args
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def placeholder(placeholder)
|
|
26
|
+
@placeholder = placeholder
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def placeholder_args(placeholder_args)
|
|
30
|
+
@placeholder_args = placeholder_args
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def name(name)
|
|
34
|
+
@name = name if name != Glib::Value::DEFAULT
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def value(value)
|
|
38
|
+
@value = value if value != Glib::Value::DEFAULT
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def prop(prop)
|
|
42
|
+
@prop = prop
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Override
|
|
46
|
+
def created
|
|
47
|
+
if @prop && (form = page.current_form)
|
|
48
|
+
form.field_assert_respond_to(@prop)
|
|
49
|
+
|
|
50
|
+
@name ||= form.field_name(@prop, @multiple || false)
|
|
51
|
+
@value ||= form.field_value(@prop)
|
|
52
|
+
@label ||= form.field_label(@prop, @label_args || {})
|
|
53
|
+
@hint ||= form.hint_label(@prop, @hint_args || {})
|
|
54
|
+
@placeholder ||= form.placeholder_label(@prop, @placeholder_args || {})
|
|
55
|
+
|
|
56
|
+
@validation ||= form.field_validation(@prop)
|
|
57
|
+
end
|
|
58
|
+
json.name @name
|
|
59
|
+
json.value @value if @value
|
|
60
|
+
json.label @label if @label
|
|
61
|
+
json.hint @hint if @hint
|
|
62
|
+
|
|
63
|
+
# In general, use hint over placeholder for the following reasons:
|
|
64
|
+
# - Placeholder gets hidden when there is input which may be confusing
|
|
65
|
+
# - Placeholder competes with label for space
|
|
66
|
+
json.placeholder @placeholder if @placeholder
|
|
67
|
+
|
|
68
|
+
# TODO: Add a flag so the framework's user can turn it on and off.
|
|
69
|
+
# json.validation @validation if @validation
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
class Text < AbstractField
|
|
75
|
+
int :maxLength
|
|
76
|
+
icon :leftIcon
|
|
77
|
+
string :leftText
|
|
78
|
+
string :rightText
|
|
79
|
+
action :onTypeStart
|
|
80
|
+
action :onTypeEnd
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
class Number < Text
|
|
84
|
+
int :min
|
|
85
|
+
int :max
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class Email < Text
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class Url < Text
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class Password < Text
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class Hidden < Text
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
class Timer < Text
|
|
101
|
+
hash :actionCable
|
|
102
|
+
int :min
|
|
103
|
+
int :max
|
|
104
|
+
bool :forward
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Benefits of using `fields/submit` over `button`
|
|
108
|
+
# - On the web, it translates to input[type=submit] which provides builtin functionality such as
|
|
109
|
+
# submitting upon pressing enter on a field and remembering values for autofill.
|
|
110
|
+
# - We can attach name-value param to it. See https://www.w3schools.com/tags/att_button_value.asp
|
|
111
|
+
# - It has a default onClick so no need to specify `onClick: ->(action) { action.forms_submit }`
|
|
112
|
+
class Submit < AbstractField
|
|
113
|
+
string :text
|
|
114
|
+
color :color
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
class CheckGroup < AbstractField
|
|
118
|
+
views :childViews
|
|
119
|
+
string :uncheckValue
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
class Check < Text
|
|
123
|
+
any :uncheckValue
|
|
124
|
+
any :checkValue
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def value(value)
|
|
128
|
+
@value = value if value != Glib::Value::DEFAULT
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# TODO: Remove (deprecated). Where possible, use value instead of this
|
|
132
|
+
bool :checked
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# This doesn't use camel case because some terms have become single words (e.g. snackbar)
|
|
136
|
+
class Textarea < Text
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
class RichText < Text
|
|
140
|
+
array :images
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
class Country < AbstractField
|
|
144
|
+
hash :region
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
class Select < AbstractField
|
|
148
|
+
array :options
|
|
149
|
+
# bool :readOnly
|
|
150
|
+
bool :multiple, cache: true
|
|
151
|
+
# bool :manualEntry
|
|
152
|
+
hash :append
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
class TimeZone < AbstractField
|
|
156
|
+
include Glib::EnumHelper
|
|
157
|
+
|
|
158
|
+
# Override
|
|
159
|
+
def created
|
|
160
|
+
super
|
|
161
|
+
|
|
162
|
+
json.options glib_time_zone_options
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# TODO: Remove (deprecated)
|
|
167
|
+
class Autocomplete < AbstractField
|
|
168
|
+
array :options
|
|
169
|
+
# bool :readOnly
|
|
170
|
+
bool :multiple, cache: true
|
|
171
|
+
# bool :manualEntry
|
|
172
|
+
hash :append
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class DynamicSelect < AbstractField
|
|
176
|
+
array :selectedOptions
|
|
177
|
+
string :url
|
|
178
|
+
bool :multiple, cache: true
|
|
179
|
+
|
|
180
|
+
# Override
|
|
181
|
+
def value(value)
|
|
182
|
+
raise 'Use selectedOptions instead (for clarity)'
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
class DynamicGroup < AbstractField
|
|
187
|
+
string :titlePrefix
|
|
188
|
+
panels_builder :content, :template
|
|
189
|
+
hash :groupFieldProperties
|
|
190
|
+
|
|
191
|
+
# NOTE: Consider using sub-panel instead (e.g. groupTemplate)
|
|
192
|
+
# views :groupTemplateViews
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
class RadioGroup < AbstractField
|
|
196
|
+
# string :name
|
|
197
|
+
# string :value
|
|
198
|
+
views :childViews
|
|
199
|
+
|
|
200
|
+
# Override
|
|
201
|
+
def value(value)
|
|
202
|
+
# Convert to string to make sure the value matches with Radio#value
|
|
203
|
+
@value = value.to_s if value != Glib::Value::DEFAULT
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
string :iconOfBeforeSelected
|
|
207
|
+
string :iconOfSelected
|
|
208
|
+
string :iconOfAfterSelected
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
class Radio < View
|
|
212
|
+
string :label
|
|
213
|
+
string :value
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
class File < Text
|
|
217
|
+
# file_rules = { fileType: 'image/*', maxFileSize: 5000 }
|
|
218
|
+
# file_rules = { fileType: 'video/*', maxFileSize: 50000 }
|
|
219
|
+
# file_rules = { fileType: 'application/pdf', maxFileSize: 5000 }
|
|
220
|
+
hash :accepts
|
|
221
|
+
|
|
222
|
+
string :directUploadUrl
|
|
223
|
+
string :fileUrl
|
|
224
|
+
string :fileTitle
|
|
225
|
+
hash :placeholderView
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
class Date < AbstractField
|
|
229
|
+
date :min
|
|
230
|
+
date :max
|
|
231
|
+
|
|
232
|
+
# Override
|
|
233
|
+
def value(value)
|
|
234
|
+
super(value&.to_date)
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# This doesn't use camel case to be consistent with the html input equivalent
|
|
239
|
+
class Datetime < AbstractField
|
|
240
|
+
date_time :min
|
|
241
|
+
date_time :max
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
class Location < AbstractField
|
|
245
|
+
hash :latitudeField
|
|
246
|
+
hash :longitudeField
|
|
247
|
+
hash :zoomField
|
|
248
|
+
hash :autocompleteOptions
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
class StripeToken < AbstractField
|
|
252
|
+
string :publicKey
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
class StripeExternalAccount < AbstractField
|
|
256
|
+
string :publicKey
|
|
257
|
+
string :accountHolderName
|
|
258
|
+
string :accountHolderType
|
|
259
|
+
string :country
|
|
260
|
+
string :currency
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
class Phone < AbstractField
|
|
264
|
+
string :defaultCountry
|
|
265
|
+
bool :disableAutoDetect
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
class CreditCard < AbstractField
|
|
269
|
+
string :publicKey
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
class Rating < AbstractField
|
|
273
|
+
bool :halfIncrements
|
|
274
|
+
string :color
|
|
275
|
+
int :size
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|