glib-web 0.5.71 → 0.5.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -8
- 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.rb +140 -140
- 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/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.rb +240 -240
- 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 -279
- data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
- data/app/helpers/glib/urls_helper.rb +12 -12
- 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 -22
- 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 -37
- 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 -84
- 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 -134
- 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 -0
- 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 -14
- 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-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 +98 -98
- 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/tasks/db.rake +95 -95
- metadata +3 -3
|
@@ -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,279 +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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
#
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
#
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
class
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
#
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
string :
|
|
197
|
-
string :
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
string :
|
|
213
|
-
string :
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
# file_rules = { fileType: '
|
|
219
|
-
# file_rules = { fileType: '
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
string :
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
date :
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
date_time :
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
hash :
|
|
247
|
-
hash :
|
|
248
|
-
hash :
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
string :
|
|
258
|
-
string :
|
|
259
|
-
string :
|
|
260
|
-
string :
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
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
|