glib-web 0.5.97 → 0.5.98
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 +149 -149
- 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/iap.rb +15 -15
- 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 +38 -38
- 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 +96 -96
- 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/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 +49 -49
- data/app/helpers/glib/json_ui/view_builder/fields.rb +296 -296
- data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -11
- data/app/helpers/glib/json_ui/view_builder/panels.rb +262 -262
- data/app/helpers/glib/json_ui/view_builder.rb +256 -253
- data/app/helpers/glib/urls_helper.rb +12 -12
- data/app/models/concerns/glib/soft_deletable.rb +73 -73
- 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 +191 -191
- 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 +72 -72
- 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 +10 -10
- 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 +27 -27
- data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +38 -38
- 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 +37 -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 +120 -120
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
- 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/payments.json.jbuilder +34 -34
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +89 -89
- 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 +150 -150
- 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/submit_on_change.json.jbuilder +28 -28
- data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +65 -65
- 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 +30 -30
- 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/autoload_as_needed_responsive_columns.json.jbuilder +27 -27
- 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 +41 -41
- 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 +92 -92
- 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 +38 -38
- 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 +101 -101
- 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 +67 -67
- data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
- data/app/views/json_ui/garage/views/charts.json.jbuilder +125 -125
- data/app/views/json_ui/garage/views/controls.json.jbuilder +60 -60
- data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -21
- 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 +83 -83
- 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/progress.json.jbuilder +31 -31
- 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/dynamic_text/config.rb +21 -21
- 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 -90
- 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 +2 -3
|
@@ -1,253 +1,256 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module JsonUi
|
|
3
|
-
class ViewBuilder < AbstractBuilder
|
|
4
|
-
def initialize(json, page, multiple)
|
|
5
|
-
super(json, page)
|
|
6
|
-
|
|
7
|
-
@multiple = multiple
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def add_view(name, *args)
|
|
11
|
-
if @multiple
|
|
12
|
-
add_element_to_array_v1 'view', name, *args
|
|
13
|
-
else
|
|
14
|
-
add_singleton_element_v1 'view', name, *args
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def add_singleton_view(name, *args)
|
|
19
|
-
add_singleton_element 'view', name, *args
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def method_missing(m, *args)
|
|
23
|
-
add_view m, *args
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
class View < JsonUiElement
|
|
27
|
-
string :id
|
|
28
|
-
length :width
|
|
29
|
-
length :height
|
|
30
|
-
color :backgroundColor
|
|
31
|
-
hash :padding
|
|
32
|
-
singleton_array :styleClass, :styleClasses
|
|
33
|
-
hash :showIf
|
|
34
|
-
hash :valueIf
|
|
35
|
-
hash :analytics
|
|
36
|
-
hash :tooltip
|
|
37
|
-
|
|
38
|
-
# def initialize(json, page)
|
|
39
|
-
# super(json, page)
|
|
40
|
-
|
|
41
|
-
# # Can be improved by making it configurable site-wide.
|
|
42
|
-
# @analyticsEnabled = true
|
|
43
|
-
# end
|
|
44
|
-
|
|
45
|
-
# def analytics(value)
|
|
46
|
-
# if value.is_a?(String)
|
|
47
|
-
# @analyticsEnabled = true
|
|
48
|
-
# @analyticsId = value
|
|
49
|
-
# else
|
|
50
|
-
# @analyticsEnabled = value == true
|
|
51
|
-
# end
|
|
52
|
-
# end
|
|
53
|
-
|
|
54
|
-
# # Override
|
|
55
|
-
# def created
|
|
56
|
-
# # if @analyticsEnabled
|
|
57
|
-
# # context = page.context
|
|
58
|
-
# # json.analytics do
|
|
59
|
-
# # content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
|
|
60
|
-
# # json.namePrefix [context.controller_name, context.action_name, content].join('_')
|
|
61
|
-
# # end
|
|
62
|
-
# # end
|
|
63
|
-
|
|
64
|
-
# json.analytics do
|
|
65
|
-
# if @analyticsEnabled
|
|
66
|
-
# if @analyticsId
|
|
67
|
-
# json.placement @analyticsId
|
|
68
|
-
# end
|
|
69
|
-
# else
|
|
70
|
-
# json.disabled true
|
|
71
|
-
# end
|
|
72
|
-
# end
|
|
73
|
-
# end
|
|
74
|
-
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
### View definitions
|
|
78
|
-
|
|
79
|
-
class AbstractText < View
|
|
80
|
-
string :textAlign
|
|
81
|
-
text :text
|
|
82
|
-
color :color
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
class H1 < AbstractText
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
class H2 < AbstractText
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
class H3 < AbstractText
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
class H4 < AbstractText
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
class H5 < AbstractText
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
class H6 < AbstractText
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
class P < AbstractText
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
class Markdown < AbstractText
|
|
107
|
-
bool :previewVideo
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
class Html < AbstractText
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
class Label < AbstractText
|
|
114
|
-
hash :actionCable
|
|
115
|
-
# string :format
|
|
116
|
-
action :onClick
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
class Image < View
|
|
120
|
-
string :url
|
|
121
|
-
string :base64Data
|
|
122
|
-
action :onClick
|
|
123
|
-
string :fit
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
class Avatar < View
|
|
127
|
-
int :size
|
|
128
|
-
string :url
|
|
129
|
-
action :onClick
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
class Icon < View
|
|
133
|
-
# TODO: Remove later. Deprecated.
|
|
134
|
-
icon :spec
|
|
135
|
-
|
|
136
|
-
action :onClick
|
|
137
|
-
color :color
|
|
138
|
-
|
|
139
|
-
def name(value)
|
|
140
|
-
@name = value
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def size(value)
|
|
144
|
-
@size = value
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
# Override
|
|
148
|
-
def created
|
|
149
|
-
if @name
|
|
150
|
-
json.material do
|
|
151
|
-
json.name @name
|
|
152
|
-
json.size @size if @size
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# class Banner < View
|
|
159
|
-
# icon :icon
|
|
160
|
-
# string :text
|
|
161
|
-
# end
|
|
162
|
-
|
|
163
|
-
class Button < View
|
|
164
|
-
icon :icon, cache: true
|
|
165
|
-
string :text, cache: true
|
|
166
|
-
action :onClick
|
|
167
|
-
color :color
|
|
168
|
-
bool :disabled
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
class Fab < View
|
|
172
|
-
icon :icon
|
|
173
|
-
action :onClick
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
class Switch < View
|
|
177
|
-
string :text, cache: true
|
|
178
|
-
bool :enabled
|
|
179
|
-
|
|
180
|
-
action :onEnabled
|
|
181
|
-
action :onDisabled
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
class Hr < View
|
|
185
|
-
color :color
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
class Spacer < View
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
class Map < View
|
|
192
|
-
float :latitude
|
|
193
|
-
float :longitude
|
|
194
|
-
int :zoom
|
|
195
|
-
string :dataUrl
|
|
196
|
-
bool :cluster
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
class Chip < View
|
|
200
|
-
string :text
|
|
201
|
-
action :onClick
|
|
202
|
-
|
|
203
|
-
string :badgeContent
|
|
204
|
-
color :badgeColor
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
class Calendar < View
|
|
208
|
-
string :dataUrl
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
class TabBar < View
|
|
212
|
-
int :height
|
|
213
|
-
color :color
|
|
214
|
-
|
|
215
|
-
def buttons(block)
|
|
216
|
-
json.buttons do
|
|
217
|
-
block.call page.menu_builder
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
class AppBar < View
|
|
223
|
-
color :color
|
|
224
|
-
panels_builder :content, :logo
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
#
|
|
230
|
-
#
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module JsonUi
|
|
3
|
+
class ViewBuilder < AbstractBuilder
|
|
4
|
+
def initialize(json, page, multiple)
|
|
5
|
+
super(json, page)
|
|
6
|
+
|
|
7
|
+
@multiple = multiple
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_view(name, *args)
|
|
11
|
+
if @multiple
|
|
12
|
+
add_element_to_array_v1 'view', name, *args
|
|
13
|
+
else
|
|
14
|
+
add_singleton_element_v1 'view', name, *args
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def add_singleton_view(name, *args)
|
|
19
|
+
add_singleton_element 'view', name, *args
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def method_missing(m, *args)
|
|
23
|
+
add_view m, *args
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class View < JsonUiElement
|
|
27
|
+
string :id
|
|
28
|
+
length :width
|
|
29
|
+
length :height
|
|
30
|
+
color :backgroundColor
|
|
31
|
+
hash :padding
|
|
32
|
+
singleton_array :styleClass, :styleClasses
|
|
33
|
+
hash :showIf
|
|
34
|
+
hash :valueIf
|
|
35
|
+
hash :analytics
|
|
36
|
+
hash :tooltip
|
|
37
|
+
|
|
38
|
+
# def initialize(json, page)
|
|
39
|
+
# super(json, page)
|
|
40
|
+
|
|
41
|
+
# # Can be improved by making it configurable site-wide.
|
|
42
|
+
# @analyticsEnabled = true
|
|
43
|
+
# end
|
|
44
|
+
|
|
45
|
+
# def analytics(value)
|
|
46
|
+
# if value.is_a?(String)
|
|
47
|
+
# @analyticsEnabled = true
|
|
48
|
+
# @analyticsId = value
|
|
49
|
+
# else
|
|
50
|
+
# @analyticsEnabled = value == true
|
|
51
|
+
# end
|
|
52
|
+
# end
|
|
53
|
+
|
|
54
|
+
# # Override
|
|
55
|
+
# def created
|
|
56
|
+
# # if @analyticsEnabled
|
|
57
|
+
# # context = page.context
|
|
58
|
+
# # json.analytics do
|
|
59
|
+
# # content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
|
|
60
|
+
# # json.namePrefix [context.controller_name, context.action_name, content].join('_')
|
|
61
|
+
# # end
|
|
62
|
+
# # end
|
|
63
|
+
|
|
64
|
+
# json.analytics do
|
|
65
|
+
# if @analyticsEnabled
|
|
66
|
+
# if @analyticsId
|
|
67
|
+
# json.placement @analyticsId
|
|
68
|
+
# end
|
|
69
|
+
# else
|
|
70
|
+
# json.disabled true
|
|
71
|
+
# end
|
|
72
|
+
# end
|
|
73
|
+
# end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
### View definitions
|
|
78
|
+
|
|
79
|
+
class AbstractText < View
|
|
80
|
+
string :textAlign
|
|
81
|
+
text :text
|
|
82
|
+
color :color
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
class H1 < AbstractText
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class H2 < AbstractText
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class H3 < AbstractText
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class H4 < AbstractText
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class H5 < AbstractText
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
class H6 < AbstractText
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
class P < AbstractText
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
class Markdown < AbstractText
|
|
107
|
+
bool :previewVideo
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
class Html < AbstractText
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class Label < AbstractText
|
|
114
|
+
hash :actionCable
|
|
115
|
+
# string :format
|
|
116
|
+
action :onClick
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
class Image < View
|
|
120
|
+
string :url
|
|
121
|
+
string :base64Data
|
|
122
|
+
action :onClick
|
|
123
|
+
string :fit
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
class Avatar < View
|
|
127
|
+
int :size
|
|
128
|
+
string :url
|
|
129
|
+
action :onClick
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
class Icon < View
|
|
133
|
+
# TODO: Remove later. Deprecated.
|
|
134
|
+
icon :spec
|
|
135
|
+
|
|
136
|
+
action :onClick
|
|
137
|
+
color :color
|
|
138
|
+
|
|
139
|
+
def name(value)
|
|
140
|
+
@name = value
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def size(value)
|
|
144
|
+
@size = value
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Override
|
|
148
|
+
def created
|
|
149
|
+
if @name
|
|
150
|
+
json.material do
|
|
151
|
+
json.name @name
|
|
152
|
+
json.size @size if @size
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# class Banner < View
|
|
159
|
+
# icon :icon
|
|
160
|
+
# string :text
|
|
161
|
+
# end
|
|
162
|
+
|
|
163
|
+
class Button < View
|
|
164
|
+
icon :icon, cache: true
|
|
165
|
+
string :text, cache: true
|
|
166
|
+
action :onClick
|
|
167
|
+
color :color
|
|
168
|
+
bool :disabled
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
class Fab < View
|
|
172
|
+
icon :icon
|
|
173
|
+
action :onClick
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
class Switch < View
|
|
177
|
+
string :text, cache: true
|
|
178
|
+
bool :enabled
|
|
179
|
+
|
|
180
|
+
action :onEnabled
|
|
181
|
+
action :onDisabled
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
class Hr < View
|
|
185
|
+
color :color
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
class Spacer < View
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
class Map < View
|
|
192
|
+
float :latitude
|
|
193
|
+
float :longitude
|
|
194
|
+
int :zoom
|
|
195
|
+
string :dataUrl
|
|
196
|
+
bool :cluster
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
class Chip < View
|
|
200
|
+
string :text
|
|
201
|
+
action :onClick
|
|
202
|
+
|
|
203
|
+
string :badgeContent
|
|
204
|
+
color :badgeColor
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
class Calendar < View
|
|
208
|
+
string :dataUrl
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
class TabBar < View
|
|
212
|
+
int :height
|
|
213
|
+
color :color
|
|
214
|
+
|
|
215
|
+
def buttons(block)
|
|
216
|
+
json.buttons do
|
|
217
|
+
block.call page.menu_builder
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
class AppBar < View
|
|
223
|
+
color :color
|
|
224
|
+
panels_builder :content, :logo
|
|
225
|
+
string :imageUrl
|
|
226
|
+
action :onCLick
|
|
227
|
+
bool :showTitle
|
|
228
|
+
|
|
229
|
+
# def leftButtons(block)
|
|
230
|
+
# json.leftButtons do
|
|
231
|
+
# block.call page.menu_builder
|
|
232
|
+
# end
|
|
233
|
+
# end
|
|
234
|
+
|
|
235
|
+
def rightButtons(block)
|
|
236
|
+
json.rightButtons do
|
|
237
|
+
block.call page.menu_builder
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
class Datetime < View
|
|
243
|
+
date_time :value
|
|
244
|
+
string :format
|
|
245
|
+
bool :tick
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
class ProgressBar < View
|
|
249
|
+
float :value
|
|
250
|
+
color :color
|
|
251
|
+
color :backgroundColor
|
|
252
|
+
bool :reversed
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module UrlsHelper
|
|
3
|
-
def glib_url_current(new_params)
|
|
4
|
-
url_for(params.to_unsafe_h.merge(new_params.merge(only_path: false)))
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def glib_url_equals_current?(url)
|
|
8
|
-
route = Rails.application.routes.recognize_path(url)
|
|
9
|
-
route[:controller] == controller_name && route[:action] == action_name
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module UrlsHelper
|
|
3
|
+
def glib_url_current(new_params)
|
|
4
|
+
url_for(params.to_unsafe_h.merge(new_params.merge(only_path: false)))
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def glib_url_equals_current?(url)
|
|
8
|
+
route = Rails.application.routes.recognize_path(url)
|
|
9
|
+
route[:controller] == controller_name && route[:action] == action_name
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
# To use this, simply:
|
|
2
|
-
# - Include the module
|
|
3
|
-
# - Add this migration: `add_column :model, :deleted_at, :datetime, null: true`
|
|
4
|
-
#
|
|
5
|
-
# After that, any call to `destroy` will automatically be a soft-deletion.
|
|
6
|
-
module Glib
|
|
7
|
-
module SoftDeletable
|
|
8
|
-
extend ActiveSupport::Concern
|
|
9
|
-
|
|
10
|
-
included do
|
|
11
|
-
default_scope { where(deleted_at: nil) }
|
|
12
|
-
scope :with_deleted, -> { unscope(where: :deleted_at) }
|
|
13
|
-
|
|
14
|
-
# "Soft delete" - set deleted_at if it is nil, actually destroy the record
|
|
15
|
-
# if forced.
|
|
16
|
-
#
|
|
17
|
-
# @param force [Boolean]
|
|
18
|
-
def destroy(force = nil)
|
|
19
|
-
return force_destroy_record if force == :force
|
|
20
|
-
return self if deleted?
|
|
21
|
-
|
|
22
|
-
soft_destroy_record
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Revive a soft-deleted record and associated records if soft-deleted,
|
|
26
|
-
# otherwise return self
|
|
27
|
-
def revive
|
|
28
|
-
return self unless deleted?
|
|
29
|
-
|
|
30
|
-
ActiveRecord::Base.transaction do
|
|
31
|
-
update(deleted_at: nil)
|
|
32
|
-
revive_associated_records
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Whether or not a record is deleted
|
|
37
|
-
def deleted?
|
|
38
|
-
deleted_at.present?
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
def force_destroy_record
|
|
43
|
-
ActiveRecord::Base.transaction do
|
|
44
|
-
destroy_associated_records(:force)
|
|
45
|
-
method(:destroy).super_method.call
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def soft_destroy_record
|
|
50
|
-
ActiveRecord::Base.transaction do
|
|
51
|
-
destroy_associated_records
|
|
52
|
-
update(deleted_at: Time.zone.now)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def destroy_associated_records(force = nil)
|
|
57
|
-
associated_records.each { |r| r.destroy(force) }
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def revive_associated_records
|
|
61
|
-
associated_records.each(&:revive)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# This should return an array of all associated records of an object that
|
|
65
|
-
# should be soft deleted with it (i.e. those that have dependent: :destroy
|
|
66
|
-
# set). In principle we could figure this out automatically but in the
|
|
67
|
-
# interest of simplicity we'll just define it manually for each class.
|
|
68
|
-
def associated_records
|
|
69
|
-
[]
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
1
|
+
# To use this, simply:
|
|
2
|
+
# - Include the module
|
|
3
|
+
# - Add this migration: `add_column :model, :deleted_at, :datetime, null: true`
|
|
4
|
+
#
|
|
5
|
+
# After that, any call to `destroy` will automatically be a soft-deletion.
|
|
6
|
+
module Glib
|
|
7
|
+
module SoftDeletable
|
|
8
|
+
extend ActiveSupport::Concern
|
|
9
|
+
|
|
10
|
+
included do
|
|
11
|
+
default_scope { where(deleted_at: nil) }
|
|
12
|
+
scope :with_deleted, -> { unscope(where: :deleted_at) }
|
|
13
|
+
|
|
14
|
+
# "Soft delete" - set deleted_at if it is nil, actually destroy the record
|
|
15
|
+
# if forced.
|
|
16
|
+
#
|
|
17
|
+
# @param force [Boolean]
|
|
18
|
+
def destroy(force = nil)
|
|
19
|
+
return force_destroy_record if force == :force
|
|
20
|
+
return self if deleted?
|
|
21
|
+
|
|
22
|
+
soft_destroy_record
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Revive a soft-deleted record and associated records if soft-deleted,
|
|
26
|
+
# otherwise return self
|
|
27
|
+
def revive
|
|
28
|
+
return self unless deleted?
|
|
29
|
+
|
|
30
|
+
ActiveRecord::Base.transaction do
|
|
31
|
+
update(deleted_at: nil)
|
|
32
|
+
revive_associated_records
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Whether or not a record is deleted
|
|
37
|
+
def deleted?
|
|
38
|
+
deleted_at.present?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
def force_destroy_record
|
|
43
|
+
ActiveRecord::Base.transaction do
|
|
44
|
+
destroy_associated_records(:force)
|
|
45
|
+
method(:destroy).super_method.call
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def soft_destroy_record
|
|
50
|
+
ActiveRecord::Base.transaction do
|
|
51
|
+
destroy_associated_records
|
|
52
|
+
update(deleted_at: Time.zone.now)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def destroy_associated_records(force = nil)
|
|
57
|
+
associated_records.each { |r| r.destroy(force) }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def revive_associated_records
|
|
61
|
+
associated_records.each(&:revive)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# This should return an array of all associated records of an object that
|
|
65
|
+
# should be soft deleted with it (i.e. those that have dependent: :destroy
|
|
66
|
+
# set). In principle we could figure this out automatically but in the
|
|
67
|
+
# interest of simplicity we'll just define it manually for each class.
|
|
68
|
+
def associated_records
|
|
69
|
+
[]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|