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,38 +1,38 @@
1
- class EmailTypoValidator < ActiveModel::EachValidator
2
- COMMON_FORMAT = {
3
- '\.\.' => '.',
4
- '\.con\z' => '.com',
5
- '\.coj\z' => '.com',
6
- '\.vom\z' => '.com',
7
- '\.xom\z' => '.com',
8
- '\.com[a-z]\z' => '.com',
9
- '\.con\.' => '.com.',
10
- '\.orf\z' => '.org',
11
- '\.orf\.' => '.org.',
12
- '@hitmail\.' => '@hotmail.',
13
- '@htomail\.' => '@hotmail.',
14
- '@hotnail\.' => '@hotmail.',
15
- '@hotmil\.' => '@hotmail.',
16
- '@hotmal\.' => '@hotmail.',
17
- '@hoymail\.' => '@hotmail.',
18
- '@hormail\.' => '@hotmail.',
19
- '@hotmsil\.' => '@hotmail.',
20
- '@gail\.' => '@gmail.',
21
- '@gnail\.' => '@gmail.',
22
- '@gmil\.' => '@gmail.',
23
- '@gmal\.' => '@gmail.',
24
- '@gmai\.' => '@gmail.',
25
- '@yahho\.' => '@yahoo.',
26
- '@yaho\.' => '@yahoo.',
27
- }
28
-
29
- def validate_each(record, attribute, value)
30
- COMMON_FORMAT.keys.each do |format_key|
31
- regex = Regexp.new(format_key)
32
- if match = regex.match(value)
33
- record.errors.add(attribute, "Invalid, replace #{match[0]} with #{COMMON_FORMAT[format_key]}")
34
- break
35
- end
36
- end
37
- end
38
- end
1
+ class EmailTypoValidator < ActiveModel::EachValidator
2
+ COMMON_FORMAT = {
3
+ '\.\.' => '.',
4
+ '\.con\z' => '.com',
5
+ '\.coj\z' => '.com',
6
+ '\.vom\z' => '.com',
7
+ '\.xom\z' => '.com',
8
+ '\.com[a-z]\z' => '.com',
9
+ '\.con\.' => '.com.',
10
+ '\.orf\z' => '.org',
11
+ '\.orf\.' => '.org.',
12
+ '@hitmail\.' => '@hotmail.',
13
+ '@htomail\.' => '@hotmail.',
14
+ '@hotnail\.' => '@hotmail.',
15
+ '@hotmil\.' => '@hotmail.',
16
+ '@hotmal\.' => '@hotmail.',
17
+ '@hoymail\.' => '@hotmail.',
18
+ '@hormail\.' => '@hotmail.',
19
+ '@hotmsil\.' => '@hotmail.',
20
+ '@gail\.' => '@gmail.',
21
+ '@gnail\.' => '@gmail.',
22
+ '@gmil\.' => '@gmail.',
23
+ '@gmal\.' => '@gmail.',
24
+ '@gmai\.' => '@gmail.',
25
+ '@yahho\.' => '@yahoo.',
26
+ '@yaho\.' => '@yahoo.',
27
+ }
28
+
29
+ def validate_each(record, attribute, value)
30
+ COMMON_FORMAT.keys.each do |format_key|
31
+ regex = Regexp.new(format_key)
32
+ if match = regex.match(value)
33
+ record.errors.add(attribute, "Invalid, replace #{match[0]} with #{COMMON_FORMAT[format_key]}")
34
+ break
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,7 +1,7 @@
1
- class EmailValidator < ActiveModel::EachValidator
2
- def validate_each(record, attribute, value)
3
- unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
4
- record.errors.add(attribute, :invalid)
5
- end
6
- end
7
- end
1
+ class EmailValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
4
+ record.errors.add(attribute, :invalid)
5
+ end
6
+ end
7
+ end
@@ -1,20 +1,20 @@
1
- class UrlValidator < ActiveModel::EachValidator
2
- def validate_each(record, attribute, value)
3
- schemes = ['https', 'http']
4
-
5
- begin
6
- uri = URI.parse(value)
7
- host = uri && uri.host
8
- scheme = uri && uri.scheme
9
-
10
- valid_scheme = host && scheme && schemes.include?(scheme)
11
- valid_raw_url = scheme && value.match?(URI::regexp([scheme]))
12
-
13
- unless valid_raw_url && valid_scheme
14
- record.errors.add(attribute, :invalid)
15
- end
16
- rescue URI::InvalidURIError
17
- record.errors.add(attribute, :invalid)
18
- end
19
- end
20
- end
1
+ class UrlValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ schemes = ['https', 'http']
4
+
5
+ begin
6
+ uri = URI.parse(value)
7
+ host = uri && uri.host
8
+ scheme = uri && uri.scheme
9
+
10
+ valid_scheme = host && scheme && schemes.include?(scheme)
11
+ valid_raw_url = scheme && value.match?(URI::regexp([scheme]))
12
+
13
+ unless valid_raw_url && valid_scheme
14
+ record.errors.add(attribute, :invalid)
15
+ end
16
+ rescue URI::InvalidURIError
17
+ record.errors.add(attribute, :invalid)
18
+ end
19
+ end
20
+ end
@@ -1,72 +1,72 @@
1
-
2
- if local_assigns[:top_nav] || json_ui_app_is_web?
3
- page.leftDrawer content: ->(drawer) do
4
- drawer.header childViews: ->(header) do
5
- header.button text: 'App', styleClasses: ['link', 'logo'], onClick: ->(action) do
6
- action.windows_open url: root_url
7
- end
8
- end
9
-
10
- drawer.rows builder: ->(menu) do
11
-
12
- menu.button text: 'Pages', onClick: ->(action) do
13
- action.windows_open url: json_ui_garage_url(path: 'pages/index')
14
- end
15
-
16
- menu.button text: 'Panels', onClick: ->(action) do
17
- action.windows_open url: json_ui_garage_url(path: 'panels/index')
18
- end
19
-
20
- menu.button text: 'Lists', onClick: ->(action) do
21
- action.windows_open url: json_ui_garage_url(path: 'lists/index')
22
- end
23
-
24
- menu.button text: 'Forms', onClick: ->(action) do
25
- action.windows_open url: json_ui_garage_url(path: 'forms/index')
26
- end
27
-
28
- menu.button text: 'Views', onClick: ->(action) do
29
- action.windows_open url: json_ui_garage_url(path: 'views/index')
30
- end
31
-
32
- menu.button text: 'Actions', onClick: ->(action) do
33
- action.windows_open url: json_ui_garage_url(path: 'actions/index')
34
- end
35
-
36
- menu.button text: 'Tables (Web Only)', onClick: ->(action) do
37
- action.windows_open url: json_ui_garage_url(path: 'tables/index')
38
- end
39
-
40
- menu.button text: 'Services', onClick: ->(action) do
41
- action.windows_open url: json_ui_garage_url(path: 'services/index')
42
- end
43
-
44
- menu.divider
45
- menu.label text: 'Misc Menu'
46
-
47
- menu.button icon: 'notifications', text: 'Notifications', onClick: ->(action) do
48
- action.windows_open url: json_ui_garage_url(path: 'notifications/index')
49
- end
50
-
51
- menu.button icon: 'list', text: 'UI Elements', onClick: ->(action) do
52
- action.windows_open url: json_ui_garage_url
53
- end
54
-
55
- menu.button icon: 'refresh', text: 'Reload', onClick: ->(action) do
56
- action.windows_reload
57
- end
58
-
59
- # Consider deprecating icon badge
60
- # menu.button icon: { name: 'zoom_in', badge: '!' }, text: 'Diagnostics', onClick: ->(action) do
61
- menu.button icon: 'zoom_in', text: 'Diagnostics', badgeContent: '!', onClick: ->(action) do
62
- action.dialogs_alert message: %{
63
- Bundle ID: #{json_ui_app_bundle_id || '<unknown>'}
64
- App Version: #{json_ui_app_build_version || '<unknown>'}
65
- Device OS: #{json_ui_app_device_os}
66
- }
67
- end
68
-
69
- end
70
- end
71
-
72
- end
1
+
2
+ if local_assigns[:top_nav] || json_ui_app_is_web?
3
+ page.leftDrawer content: ->(drawer) do
4
+ drawer.header childViews: ->(header) do
5
+ header.button text: 'App', styleClasses: ['link', 'logo'], onClick: ->(action) do
6
+ action.windows_open url: root_url
7
+ end
8
+ end
9
+
10
+ drawer.rows builder: ->(menu) do
11
+
12
+ menu.button text: 'Pages', onClick: ->(action) do
13
+ action.windows_open url: json_ui_garage_url(path: 'pages/index')
14
+ end
15
+
16
+ menu.button text: 'Panels', onClick: ->(action) do
17
+ action.windows_open url: json_ui_garage_url(path: 'panels/index')
18
+ end
19
+
20
+ menu.button text: 'Lists', onClick: ->(action) do
21
+ action.windows_open url: json_ui_garage_url(path: 'lists/index')
22
+ end
23
+
24
+ menu.button text: 'Forms', onClick: ->(action) do
25
+ action.windows_open url: json_ui_garage_url(path: 'forms/index')
26
+ end
27
+
28
+ menu.button text: 'Views', onClick: ->(action) do
29
+ action.windows_open url: json_ui_garage_url(path: 'views/index')
30
+ end
31
+
32
+ menu.button text: 'Actions', onClick: ->(action) do
33
+ action.windows_open url: json_ui_garage_url(path: 'actions/index')
34
+ end
35
+
36
+ menu.button text: 'Tables (Web Only)', onClick: ->(action) do
37
+ action.windows_open url: json_ui_garage_url(path: 'tables/index')
38
+ end
39
+
40
+ menu.button text: 'Services', onClick: ->(action) do
41
+ action.windows_open url: json_ui_garage_url(path: 'services/index')
42
+ end
43
+
44
+ menu.divider
45
+ menu.label text: 'Misc Menu'
46
+
47
+ menu.button icon: 'notifications', text: 'Notifications', onClick: ->(action) do
48
+ action.windows_open url: json_ui_garage_url(path: 'notifications/index')
49
+ end
50
+
51
+ menu.button icon: 'list', text: 'UI Elements', onClick: ->(action) do
52
+ action.windows_open url: json_ui_garage_url
53
+ end
54
+
55
+ menu.button icon: 'refresh', text: 'Reload', onClick: ->(action) do
56
+ action.windows_reload
57
+ end
58
+
59
+ # Consider deprecating icon badge
60
+ # menu.button icon: { name: 'zoom_in', badge: '!' }, text: 'Diagnostics', onClick: ->(action) do
61
+ menu.button icon: 'zoom_in', text: 'Diagnostics', badgeContent: '!', onClick: ->(action) do
62
+ action.dialogs_alert message: %{
63
+ Bundle ID: #{json_ui_app_bundle_id || '<unknown>'}
64
+ App Version: #{json_ui_app_build_version || '<unknown>'}
65
+ Device OS: #{json_ui_app_device_os}
66
+ }
67
+ end
68
+
69
+ end
70
+ end
71
+
72
+ end
@@ -1,104 +1,104 @@
1
-
2
- section.header padding: glib_json_padding_list, childViews: ->(header) do
3
- header.h3 text: 'Dialogs'
4
- end
5
-
6
- section.rows builder: ->(template) do
7
- template.thumbnail title: 'dialogs/alert', onClick: ->(action) do
8
- action.dialogs_alert message: 'This is an alert dialog', onClose: ->(action) do
9
- action.snackbars_alert message: 'Closed'
10
- end
11
- end
12
-
13
- # markdown = '# h1 Heading' + "\n" +
14
- # '## h2 Heading' + "\n" +
15
- # '### h3 Heading' + "\n" +
16
- # '#### h4 Heading' + "\n" +
17
- # '##### h5 Heading' + "\n" +
18
- # '###### h6 Heading' + "\n" +
19
- # "\n" +
20
- # '## Emphasis' + "\n" +
21
- # "\n" +
22
- # '**This is bold text**' + "\n" +
23
- # "\n" +
24
- # '__This is bold text__' + "\n" +
25
- # "\n" +
26
- # '*This is italic text*' + "\n" +
27
- # "\n" +
28
- # '_This is italic text_' + "\n" +
29
- # "\n" +
30
- # '~~Strikethrough~~' + "\n"
31
- # template.thumbnail title: 'dialogs/alert with markdown', onClick: ->(action) do
32
- # action.dialogs_alert message: markdown, message_format: 'markdown'
33
- # end
34
-
35
- # template.thumbnail title: 'dialogs/confirm (Experimental)', onClick: ->(action) do
36
- # action.dialogs_confirm message: 'This is a confirm dialog', onCancel: ->(action) do
37
- # action.snackbars_alert message: 'Canceled'
38
- # end, onConfirm: ->(action) do
39
- # action.snackbars_alert message: 'Confirmed'
40
- # end
41
- # end
42
-
43
- # TODO: Deprecate
44
- template.thumbnail title: 'dialogs/option (Deprecated)', onClick: ->(action) do
45
- # TODO: Rename to `dialogs/menu`
46
- action.dialogs_options message: 'Select one', buttons: ->(menu) do
47
- menu.button text: 'Option1', onClick: ->(action) do
48
- action.dialogs_alert message: 'Option 1'
49
- end
50
- menu.button text: 'Option2', onClick: ->(action) do
51
- action.dialogs_alert message: 'Option 2'
52
- end
53
- menu.button text: 'Cancel'
54
- end
55
- end
56
-
57
- markdown = '## Emphasis' + "\n" +
58
- '**This is bold text**' + "\n" +
59
- "\n" +
60
- '*This is italic text*' + "\n" +
61
- "\n" +
62
- '~~Strikethrough~~' + "\n"
63
- template.thumbnail title: 'dialogs/show', onClick: ->(action) do
64
- action.dialogs_show content: ->(dialog) do
65
- dialog.body padding: glib_json_padding_body, childViews: ->(body) do
66
- body.markdown text: markdown
67
-
68
- body.panels_split width: 'matchParent', content: ->(split) do
69
- split.right childViews: ->(right) do
70
- right.button text: 'OK', onClick: ->(subaction) { subaction.dialogs_close }
71
- end
72
- end
73
- end
74
- end
75
- end
76
-
77
- template.thumbnail title: 'dialogs/open', onClick: ->(action) do
78
- action.dialogs_open url: json_ui_garage_url(path: 'forms/basic', mode: 'dialog')
79
- end
80
-
81
- template.thumbnail title: 'dialogs/oauth', onClick: ->(action) do
82
- if respond_to?(:user_facebook_omniauth_authorize_url)
83
- provider = {
84
- name: 'facebook',
85
- webRequestUrl: user_facebook_omniauth_authorize_url(format: nil, _render: nil),
86
- requestUrl: user_facebook_omniauth_authorize_url(format: nil),
87
- clientId: Devise.omniauth_configs[:facebook].strategy[:client_id],
88
- permissions: Devise.omniauth_configs[:facebook].strategy[:scope],
89
- redirectUrl: user_facebook_omniauth_callback_url(format: nil)
90
- }
91
- action.dialogs_oauth provider: provider, providerParamName: 'session[oauth_provider]', callbackUrlParamName: 'session[[oauth_callback_url]', onSuccess: ->(subaction) do
92
- subaction.http_post url: json_ui_garage_url(path: 'actions/dialogs_oauth_post'), formData: {
93
- authenticity_token: form_authenticity_token
94
- }
95
- end
96
- else
97
- action.dialogs_alert message: 'To enable this, set up omniauth using devise'
98
- # E.g.
99
- # Add `devise :omniauthable, omniauth_providers: %i[facebook]` to user.rb
100
- # Add `gem 'omniauth-facebook'` to Gemfile
101
- # Add `config.omniauth :facebook` to devise.rb
102
- end
103
- end
104
- end
1
+
2
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
3
+ header.h3 text: 'Dialogs'
4
+ end
5
+
6
+ section.rows builder: ->(template) do
7
+ template.thumbnail title: 'dialogs/alert', onClick: ->(action) do
8
+ action.dialogs_alert message: 'This is an alert dialog', onClose: ->(action) do
9
+ action.snackbars_alert message: 'Closed'
10
+ end
11
+ end
12
+
13
+ # markdown = '# h1 Heading' + "\n" +
14
+ # '## h2 Heading' + "\n" +
15
+ # '### h3 Heading' + "\n" +
16
+ # '#### h4 Heading' + "\n" +
17
+ # '##### h5 Heading' + "\n" +
18
+ # '###### h6 Heading' + "\n" +
19
+ # "\n" +
20
+ # '## Emphasis' + "\n" +
21
+ # "\n" +
22
+ # '**This is bold text**' + "\n" +
23
+ # "\n" +
24
+ # '__This is bold text__' + "\n" +
25
+ # "\n" +
26
+ # '*This is italic text*' + "\n" +
27
+ # "\n" +
28
+ # '_This is italic text_' + "\n" +
29
+ # "\n" +
30
+ # '~~Strikethrough~~' + "\n"
31
+ # template.thumbnail title: 'dialogs/alert with markdown', onClick: ->(action) do
32
+ # action.dialogs_alert message: markdown, message_format: 'markdown'
33
+ # end
34
+
35
+ # template.thumbnail title: 'dialogs/confirm (Experimental)', onClick: ->(action) do
36
+ # action.dialogs_confirm message: 'This is a confirm dialog', onCancel: ->(action) do
37
+ # action.snackbars_alert message: 'Canceled'
38
+ # end, onConfirm: ->(action) do
39
+ # action.snackbars_alert message: 'Confirmed'
40
+ # end
41
+ # end
42
+
43
+ # TODO: Deprecate
44
+ template.thumbnail title: 'dialogs/option (Deprecated)', onClick: ->(action) do
45
+ # TODO: Rename to `dialogs/menu`
46
+ action.dialogs_options message: 'Select one', buttons: ->(menu) do
47
+ menu.button text: 'Option1', onClick: ->(action) do
48
+ action.dialogs_alert message: 'Option 1'
49
+ end
50
+ menu.button text: 'Option2', onClick: ->(action) do
51
+ action.dialogs_alert message: 'Option 2'
52
+ end
53
+ menu.button text: 'Cancel'
54
+ end
55
+ end
56
+
57
+ markdown = '## Emphasis' + "\n" +
58
+ '**This is bold text**' + "\n" +
59
+ "\n" +
60
+ '*This is italic text*' + "\n" +
61
+ "\n" +
62
+ '~~Strikethrough~~' + "\n"
63
+ template.thumbnail title: 'dialogs/show', onClick: ->(action) do
64
+ action.dialogs_show content: ->(dialog) do
65
+ dialog.body padding: glib_json_padding_body, childViews: ->(body) do
66
+ body.markdown text: markdown
67
+
68
+ body.panels_split width: 'matchParent', content: ->(split) do
69
+ split.right childViews: ->(right) do
70
+ right.button text: 'OK', onClick: ->(subaction) { subaction.dialogs_close }
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ template.thumbnail title: 'dialogs/open', onClick: ->(action) do
78
+ action.dialogs_open url: json_ui_garage_url(path: 'forms/basic', mode: 'dialog')
79
+ end
80
+
81
+ template.thumbnail title: 'dialogs/oauth', onClick: ->(action) do
82
+ if respond_to?(:user_facebook_omniauth_authorize_url)
83
+ provider = {
84
+ name: 'facebook',
85
+ webRequestUrl: user_facebook_omniauth_authorize_url(format: nil, _render: nil),
86
+ requestUrl: user_facebook_omniauth_authorize_url(format: nil),
87
+ clientId: Devise.omniauth_configs[:facebook].strategy[:client_id],
88
+ permissions: Devise.omniauth_configs[:facebook].strategy[:scope],
89
+ redirectUrl: user_facebook_omniauth_callback_url(format: nil)
90
+ }
91
+ action.dialogs_oauth provider: provider, providerParamName: 'session[oauth_provider]', callbackUrlParamName: 'session[[oauth_callback_url]', onSuccess: ->(subaction) do
92
+ subaction.http_post url: json_ui_garage_url(path: 'actions/dialogs_oauth_post'), formData: {
93
+ authenticity_token: form_authenticity_token
94
+ }
95
+ end
96
+ else
97
+ action.dialogs_alert message: 'To enable this, set up omniauth using devise'
98
+ # E.g.
99
+ # Add `devise :omniauthable, omniauth_providers: %i[facebook]` to user.rb
100
+ # Add `gem 'omniauth-facebook'` to Gemfile
101
+ # Add `config.omniauth :facebook` to devise.rb
102
+ end
103
+ end
104
+ end
@@ -1,24 +1,24 @@
1
-
2
- section.header padding: glib_json_padding_list, childViews: ->(header) do
3
- header.h3 text: 'HTTP'
4
- end
5
-
6
- section.rows builder: ->(template) do
7
- template.thumbnail title: 'http/post', onClick: ->(action) do
8
- action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
9
- subaction.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { user: { name: { first: 'New', last: 'Joe' } } }
10
- end
11
- end
12
-
13
- template.thumbnail title: 'http/patch', onClick: ->(action) do
14
- action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
15
- subaction.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
16
- end
17
- end
18
-
19
- template.thumbnail title: 'http/delete', onClick: ->(action) do
20
- action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
21
- subaction.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
22
- end
23
- end
24
- end
1
+
2
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
3
+ header.h3 text: 'HTTP'
4
+ end
5
+
6
+ section.rows builder: ->(template) do
7
+ template.thumbnail title: 'http/post', onClick: ->(action) do
8
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
9
+ subaction.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { user: { name: { first: 'New', last: 'Joe' } } }
10
+ end
11
+ end
12
+
13
+ template.thumbnail title: 'http/patch', onClick: ->(action) do
14
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
15
+ subaction.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
16
+ end
17
+ end
18
+
19
+ template.thumbnail title: 'http/delete', onClick: ->(action) do
20
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
21
+ subaction.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
22
+ end
23
+ end
24
+ end
@@ -1,18 +1,18 @@
1
-
2
- section.header padding: glib_json_padding_list, childViews: ->(header) do
3
- header.h3 text: 'Panels'
4
- end
5
-
6
- section.rows builder: ->(template) do
7
- template.thumbnail title: 'panels/scrollToBottom', onClick: ->(action) do
8
- action.panels_scrollToBottom animate: true, onScroll: ->(subaction) do
9
- subaction.dialogs_alert message: 'Bottom reached'
10
- end
11
- end
12
-
13
- template.thumbnail title: 'panels/scrollTo', onClick: ->(action) do
14
- action.panels_scrollTo viewId: 'scroll_anchor', animate: true, onScroll: ->(subaction) do
15
- subaction.dialogs_alert message: 'Bottom reached'
16
- end
17
- end
18
- end
1
+
2
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
3
+ header.h3 text: 'Panels'
4
+ end
5
+
6
+ section.rows builder: ->(template) do
7
+ template.thumbnail title: 'panels/scrollToBottom', onClick: ->(action) do
8
+ action.panels_scrollToBottom animate: true, onScroll: ->(subaction) do
9
+ subaction.dialogs_alert message: 'Bottom reached'
10
+ end
11
+ end
12
+
13
+ template.thumbnail title: 'panels/scrollTo', onClick: ->(action) do
14
+ action.panels_scrollTo viewId: 'scroll_anchor', animate: true, onScroll: ->(subaction) do
15
+ subaction.dialogs_alert message: 'Bottom reached'
16
+ end
17
+ end
18
+ end
@@ -1,17 +1,17 @@
1
- section.header padding: glib_json_padding_list, childViews: ->(header) do
2
- header.h3 text: 'Reload'
3
- header.spacer height: 6
4
- header.label text: 'Reload does not open a new page/screen. Click reload a few times, then click back and notice that it goes back to the page before the reload.'
5
- end
6
-
7
- section.rows builder: ->(template) do
8
- template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i})", onClick: ->(action) do
9
- action.windows_reload
10
- end
11
-
12
- reload_counter = params[:reload_counter].to_i
13
- reload_counter = 0 if reload_counter > 5
14
- template.thumbnail title: "windows/reload with URL (counter: #{reload_counter})", onClick: ->(action) do
15
- action.windows_reload url: json_ui_garage_url(path: 'actions/index', reload_counter: reload_counter + 1)
16
- end
17
- end
1
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
2
+ header.h3 text: 'Reload'
3
+ header.spacer height: 6
4
+ header.label text: 'Reload does not open a new page/screen. Click reload a few times, then click back and notice that it goes back to the page before the reload.'
5
+ end
6
+
7
+ section.rows builder: ->(template) do
8
+ template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i})", onClick: ->(action) do
9
+ action.windows_reload
10
+ end
11
+
12
+ reload_counter = params[:reload_counter].to_i
13
+ reload_counter = 0 if reload_counter > 5
14
+ template.thumbnail title: "windows/reload with URL (counter: #{reload_counter})", onClick: ->(action) do
15
+ action.windows_reload url: json_ui_garage_url(path: 'actions/index', reload_counter: reload_counter + 1)
16
+ end
17
+ end
@@ -1,18 +1,18 @@
1
-
2
- section.header padding: glib_json_padding_list, childViews: ->(header) do
3
- header.h3 text: 'Sheets'
4
- end
5
-
6
- section.rows builder: ->(template) do
7
- template.thumbnail title: 'sheets/select', onClick: ->(action) do
8
- action.sheets_select message: 'Select one', buttons: ->(menu) do
9
- menu.button text: 'Option1', onClick: ->(subaction) do
10
- subaction.dialogs_alert message: 'Option 1'
11
- end
12
- menu.button text: 'Option2', onClick: ->(subaction) do
13
- subaction.dialogs_alert message: 'Option 2'
14
- end
15
- end
16
- end
17
-
18
- end
1
+
2
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
3
+ header.h3 text: 'Sheets'
4
+ end
5
+
6
+ section.rows builder: ->(template) do
7
+ template.thumbnail title: 'sheets/select', onClick: ->(action) do
8
+ action.sheets_select message: 'Select one', buttons: ->(menu) do
9
+ menu.button text: 'Option1', onClick: ->(subaction) do
10
+ subaction.dialogs_alert message: 'Option 1'
11
+ end
12
+ menu.button text: 'Option2', onClick: ->(subaction) do
13
+ subaction.dialogs_alert message: 'Option 2'
14
+ end
15
+ end
16
+ end
17
+
18
+ end