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.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +34 -34
  3. data/app/channels/glib/channel/online_channel.rb +36 -36
  4. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  5. data/app/controllers/concerns/glib/auth/policy.rb +149 -149
  6. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  7. data/app/controllers/concerns/glib/json/libs.rb +149 -149
  8. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  9. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  10. data/app/controllers/concerns/glib/json/traversal.rb +92 -92
  11. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  12. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  13. data/app/controllers/glib/home_controller.rb +54 -54
  14. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  15. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  16. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  17. data/app/helpers/glib/enum_helper.rb +18 -18
  18. data/app/helpers/glib/forms_helper.rb +15 -15
  19. data/app/helpers/glib/json_ui/abstract_builder.rb +309 -309
  20. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  21. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  22. data/app/helpers/glib/json_ui/action_builder/iap.rb +15 -15
  23. data/app/helpers/glib/json_ui/action_builder/panels.rb +14 -14
  24. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  25. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  26. data/app/helpers/glib/json_ui/action_builder/windows.rb +38 -38
  27. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  28. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  29. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  30. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  31. data/app/helpers/glib/json_ui/list_builders.rb +110 -110
  32. data/app/helpers/glib/json_ui/menu_builder.rb +96 -96
  33. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  34. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  35. data/app/helpers/glib/json_ui/styling_helper.rb +55 -55
  36. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  37. data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
  38. data/app/helpers/glib/json_ui/view_builder/charts.rb +49 -49
  39. data/app/helpers/glib/json_ui/view_builder/fields.rb +296 -296
  40. data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -11
  41. data/app/helpers/glib/json_ui/view_builder/panels.rb +262 -262
  42. data/app/helpers/glib/json_ui/view_builder.rb +256 -253
  43. data/app/helpers/glib/urls_helper.rb +12 -12
  44. data/app/models/concerns/glib/soft_deletable.rb +73 -73
  45. data/app/models/glib/active_storage/attachment.rb +9 -9
  46. data/app/models/glib/active_storage/blob.rb +9 -9
  47. data/app/models/glib/application_record.rb +18 -18
  48. data/app/models/glib/dynamic_text_record.rb +9 -9
  49. data/app/models/glib/text.rb +95 -95
  50. data/app/policies/glib/application_policy.rb +191 -191
  51. data/app/validators/email_typo_validator.rb +38 -38
  52. data/app/validators/email_validator.rb +7 -7
  53. data/app/validators/url_validator.rb +20 -20
  54. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +72 -72
  55. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  56. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  57. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  58. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  59. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  60. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  61. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  62. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  63. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  64. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  65. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +10 -10
  66. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  67. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  68. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +27 -27
  69. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +38 -38
  70. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  71. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
  72. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  73. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +37 -37
  74. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  75. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  76. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  77. data/app/views/json_ui/garage/forms/index.json.jbuilder +120 -120
  78. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
  79. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  80. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  81. data/app/views/json_ui/garage/forms/payments.json.jbuilder +34 -34
  82. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +89 -89
  83. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  84. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  85. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
  86. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +150 -150
  87. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  88. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  89. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  90. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  91. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  92. data/app/views/json_ui/garage/forms/submit_on_change.json.jbuilder +28 -28
  93. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +65 -65
  94. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  95. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  96. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  97. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  98. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +30 -30
  99. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  100. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  101. data/app/views/json_ui/garage/lists/autoload_as_needed_responsive_columns.json.jbuilder +27 -27
  102. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  103. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  104. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  105. data/app/views/json_ui/garage/lists/index.json.jbuilder +41 -41
  106. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  107. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  108. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  109. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  110. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  111. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  112. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  113. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  114. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  115. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  116. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  117. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  118. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  119. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  120. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  121. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +92 -92
  122. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  123. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  124. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +38 -38
  125. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  126. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  127. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +101 -101
  128. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
  129. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  130. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  131. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  132. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
  133. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  134. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  135. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  136. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  137. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  138. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  139. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  140. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  141. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  142. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  143. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  144. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  145. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  146. data/app/views/json_ui/garage/views/banners.json.jbuilder +67 -67
  147. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  148. data/app/views/json_ui/garage/views/charts.json.jbuilder +125 -125
  149. data/app/views/json_ui/garage/views/controls.json.jbuilder +60 -60
  150. data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -21
  151. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  152. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
  153. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  154. data/app/views/json_ui/garage/views/index.json.jbuilder +83 -83
  155. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  156. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  157. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  158. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  159. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  160. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  161. data/app/views/json_ui/garage/views/progress.json.jbuilder +31 -31
  162. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  163. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  164. data/config/routes.rb +7 -7
  165. data/lib/generators/glib/install_generator.rb +24 -24
  166. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  167. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  168. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  169. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  170. data/lib/generators/templates/database.yml +107 -107
  171. data/lib/generators/templates/dynamic_text.rb +2 -2
  172. data/lib/glib/crypt/utils.rb +26 -26
  173. data/lib/glib/dynamic_text/config.rb +21 -21
  174. data/lib/glib/engine.rb +7 -7
  175. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  176. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  177. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  178. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  179. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  180. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  181. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  182. data/lib/glib/json_crawler/coverage.rb +20 -20
  183. data/lib/glib/json_crawler/http.rb +120 -120
  184. data/lib/glib/json_crawler/router.rb +90 -90
  185. data/lib/glib/json_crawler.rb +11 -11
  186. data/lib/glib/mailer_tester.rb +36 -36
  187. data/lib/glib/test_helpers.rb +52 -52
  188. data/lib/glib/value.rb +7 -7
  189. data/lib/glib/version.rb +5 -5
  190. data/lib/glib-web.rb +9 -9
  191. data/lib/tasks/db.rake +95 -95
  192. 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
- # def leftButtons(block)
227
- # json.leftButtons do
228
- # block.call page.menu_builder
229
- # end
230
- # end
231
-
232
- def rightButtons(block)
233
- json.rightButtons do
234
- block.call page.menu_builder
235
- end
236
- end
237
- end
238
-
239
- class Datetime < View
240
- date_time :value
241
- string :format
242
- bool :tick
243
- end
244
-
245
- class ProgressBar < View
246
- float :value
247
- color :color
248
- color :backgroundColor
249
- bool :reversed
250
- end
251
- end
252
- end
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