glib-web 0.5.71 → 0.5.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) 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 +148 -148
  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 -8
  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.rb +140 -140
  21. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  22. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  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 +33 -33
  27. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  28. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  29. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  30. data/app/helpers/glib/json_ui/list_builders.rb +110 -110
  31. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  32. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  33. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  34. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  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.rb +240 -240
  38. data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
  39. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  40. data/app/helpers/glib/json_ui/view_builder/fields.rb +278 -279
  41. data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
  42. data/app/helpers/glib/urls_helper.rb +12 -12
  43. data/app/models/glib/active_storage/attachment.rb +9 -9
  44. data/app/models/glib/active_storage/blob.rb +9 -9
  45. data/app/models/glib/application_record.rb +18 -18
  46. data/app/models/glib/dynamic_text_record.rb +9 -9
  47. data/app/models/glib/text.rb +95 -95
  48. data/app/policies/glib/application_policy.rb +161 -161
  49. data/app/validators/email_typo_validator.rb +38 -38
  50. data/app/validators/email_validator.rb +7 -7
  51. data/app/validators/url_validator.rb +20 -20
  52. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  53. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  54. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  55. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  56. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  57. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  58. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  59. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  60. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  61. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  62. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  63. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  64. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  65. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  66. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  67. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  68. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  69. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -22
  70. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  71. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -37
  72. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  73. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  74. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  75. data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -113
  76. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  77. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  78. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  79. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
  80. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  81. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  82. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -84
  83. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
  84. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  85. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  86. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  87. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  88. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  89. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +81 -81
  90. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
  91. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  92. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  93. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  94. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  95. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  96. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  97. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  98. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  99. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  100. data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
  101. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  102. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  103. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  104. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  105. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  106. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  107. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  108. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  109. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  110. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  111. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  112. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  113. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  114. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  115. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  116. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
  117. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  118. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  119. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  120. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  121. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  122. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  123. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -134
  124. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  125. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  126. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  127. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -0
  128. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  129. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  130. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  131. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  132. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  133. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  134. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  135. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  136. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  137. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  138. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  139. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  140. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  141. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  142. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  143. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  144. data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
  145. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  146. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -14
  147. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  148. data/app/views/json_ui/garage/views/index.json.jbuilder +67 -67
  149. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  150. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  151. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  152. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  153. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  154. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  155. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  156. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  157. data/config/routes.rb +7 -7
  158. data/lib/generators/glib/install_generator.rb +24 -24
  159. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  160. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  161. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  162. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  163. data/lib/generators/templates/database.yml +107 -107
  164. data/lib/generators/templates/dynamic_text.rb +2 -2
  165. data/lib/glib-web.rb +9 -9
  166. data/lib/glib/crypt/utils.rb +26 -26
  167. data/lib/glib/dynamic_text/config.rb +21 -21
  168. data/lib/glib/engine.rb +7 -7
  169. data/lib/glib/json_crawler.rb +11 -11
  170. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  171. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  172. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  173. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  174. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  175. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  176. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  177. data/lib/glib/json_crawler/coverage.rb +20 -20
  178. data/lib/glib/json_crawler/http.rb +120 -120
  179. data/lib/glib/json_crawler/router.rb +98 -98
  180. data/lib/glib/mailer_tester.rb +36 -36
  181. data/lib/glib/test_helpers.rb +52 -52
  182. data/lib/glib/value.rb +7 -7
  183. data/lib/glib/version.rb +5 -5
  184. data/lib/tasks/db.rake +95 -95
  185. metadata +3 -3
@@ -1,62 +1,62 @@
1
- json.title 'Lists'
2
-
3
- page_index = params[:page].to_i
4
- if page_index > 2
5
- page_index = 2
6
- end
7
- page = json_ui_page json
8
- render "#{@path_prefix}/nav_menu", json: json, page: page
9
-
10
- page.list firstSection: ->(section) do
11
- section.rows builder: ->(template) do
12
- template.thumbnail \
13
- title: 'Click menu (web) or swipe left (Android/iOS)',
14
- subtitle: "Page index: #{page_index}",
15
- leftButtons: ->(menu) do
16
- menu.button styleClass: 'icon', icon: 'check_box', onClick: ->(subaction) do
17
- subaction.dialogs_alert message: 'Tick/untick'
18
- end
19
- end, rightButtons: ->(menu) do
20
- menu.button styleClass: 'icon', icon: 'share', onClick: ->(subaction) do
21
- subaction.dialogs_alert message: 'Share'
22
- end
23
- menu.button styleClass: 'icon', icon: 'open_in_new', onClick: ->(subaction) do
24
- subaction.dialogs_alert message: 'Open'
25
- end
26
- end, editButtons: ->(menu) do
27
- menu.button text: "Edit (ID: #{page_index})", onClick: ->(action) do
28
- action.dialogs_alert message: 'Perform Edit action'
29
- end
30
- menu.button text: 'Delete', onClick: ->(action) do
31
- action.dialogs_alert message: 'Perform Delete action'
32
- end
33
- end, onClick: ->(action) do
34
- action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions', page: page_index + 1)
35
- end
36
-
37
- template.thumbnail title: 'Long press to get an alert', onLongPress: ->(action) do
38
- action.dialogs_alert message: 'This is an alert'
39
- end
40
-
41
- template.thumbnail title: 'Long press to see menu', onLongPress: ->(action) do
42
- action.sheets_select message: 'Context Menu', buttons: ->(menu) do
43
- menu.button icon: 'edit', text: 'Edit', onClick: ->(subaction) do
44
- subaction.dialogs_alert message: 'Perform action'
45
- end
46
- menu.button icon: 'delete', text: 'Delete', onClick: ->(subaction) do
47
- subaction.dialogs_alert message: 'Perform action'
48
- end
49
- end
50
- end
51
-
52
- # template.thumbnail title: 'Long press to see menu', contextButtons: ->(menu) do
53
- # menu.button text: 'Edit', onClick: ->(action) do
54
- # action.dialogs_alert message: 'Perform action'
55
- # end
56
- # menu.button text: 'Delete', onClick: ->(action) do
57
- # action.dialogs_alert message: 'Perform action'
58
- # end
59
- # end
60
- end
61
-
62
- end
1
+ json.title 'Lists'
2
+
3
+ page_index = params[:page].to_i
4
+ if page_index > 2
5
+ page_index = 2
6
+ end
7
+ page = json_ui_page json
8
+ render "#{@path_prefix}/nav_menu", json: json, page: page
9
+
10
+ page.list firstSection: ->(section) do
11
+ section.rows builder: ->(template) do
12
+ template.thumbnail \
13
+ title: 'Click menu (web) or swipe left (Android/iOS)',
14
+ subtitle: "Page index: #{page_index}",
15
+ leftButtons: ->(menu) do
16
+ menu.button styleClass: 'icon', icon: 'check_box', onClick: ->(subaction) do
17
+ subaction.dialogs_alert message: 'Tick/untick'
18
+ end
19
+ end, rightButtons: ->(menu) do
20
+ menu.button styleClass: 'icon', icon: 'share', onClick: ->(subaction) do
21
+ subaction.dialogs_alert message: 'Share'
22
+ end
23
+ menu.button styleClass: 'icon', icon: 'open_in_new', onClick: ->(subaction) do
24
+ subaction.dialogs_alert message: 'Open'
25
+ end
26
+ end, editButtons: ->(menu) do
27
+ menu.button text: "Edit (ID: #{page_index})", onClick: ->(action) do
28
+ action.dialogs_alert message: 'Perform Edit action'
29
+ end
30
+ menu.button text: 'Delete', onClick: ->(action) do
31
+ action.dialogs_alert message: 'Perform Delete action'
32
+ end
33
+ end, onClick: ->(action) do
34
+ action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions', page: page_index + 1)
35
+ end
36
+
37
+ template.thumbnail title: 'Long press to get an alert', onLongPress: ->(action) do
38
+ action.dialogs_alert message: 'This is an alert'
39
+ end
40
+
41
+ template.thumbnail title: 'Long press to see menu', onLongPress: ->(action) do
42
+ action.sheets_select message: 'Context Menu', buttons: ->(menu) do
43
+ menu.button icon: 'edit', text: 'Edit', onClick: ->(subaction) do
44
+ subaction.dialogs_alert message: 'Perform action'
45
+ end
46
+ menu.button icon: 'delete', text: 'Delete', onClick: ->(subaction) do
47
+ subaction.dialogs_alert message: 'Perform action'
48
+ end
49
+ end
50
+ end
51
+
52
+ # template.thumbnail title: 'Long press to see menu', contextButtons: ->(menu) do
53
+ # menu.button text: 'Edit', onClick: ->(action) do
54
+ # action.dialogs_alert message: 'Perform action'
55
+ # end
56
+ # menu.button text: 'Delete', onClick: ->(action) do
57
+ # action.dialogs_alert message: 'Perform action'
58
+ # end
59
+ # end
60
+ end
61
+
62
+ end
@@ -1,12 +1,12 @@
1
- json.title 'Lists'
2
-
3
- page = json_ui_page json
4
- render "#{@path_prefix}/nav_menu", json: json, page: page
5
-
6
- page.body childViews: ->(body) do
7
- body.fab icon: 'add', onClick: ->(action) { action.dialogs_alert message: 'Perform action' }
8
-
9
- body.panels_list width: 'matchParent', firstSection: ->(section) do
10
- render 'json_ui/garage/lists/autoload_section', page: page, page_index: 0
11
- end
12
- end
1
+ json.title 'Lists'
2
+
3
+ page = json_ui_page json
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
+
6
+ page.body childViews: ->(body) do
7
+ body.fab icon: 'add', onClick: ->(action) { action.dialogs_alert message: 'Perform action' }
8
+
9
+ body.panels_list width: 'matchParent', firstSection: ->(section) do
10
+ render 'json_ui/garage/lists/autoload_section', page: page, page_index: 0
11
+ end
12
+ end
@@ -1,38 +1,38 @@
1
- json.title 'Lists'
2
-
3
- json_ui_page json do |page|
4
- render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: true
5
-
6
- page.list firstSection: ->(section) do
7
- section.header padding: glib_json_padding_list, childViews: ->(header) do
8
- header.label text: 'The List panel is useful for displaying a large number of items that are uniform, which is especially important in mobile apps because the rows can be reused for efficiency.'
9
- header.spacer height: 6
10
- header.label text: 'So, following the mobile-first paradigm, do not ever display large numbers of items using other components.'
11
- end
12
-
13
- section.rows builder: ->(template) do
14
- template.thumbnail icon: 'list', title: 'Templating', onClick: ->(action) do
15
- action.windows_open url: json_ui_garage_url(path: 'lists/templating')
16
- end
17
- template.thumbnail title: 'Action Buttons', onClick: ->(action) do
18
- action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions')
19
- end
20
- template.thumbnail title: 'FAB (Floating Action Button)', onClick: ->(action) do
21
- action.windows_open url: json_ui_garage_url(path: 'lists/fab')
22
- end
23
- template.thumbnail title: 'Chat UI', onClick: ->(action) do
24
- action.windows_open url: json_ui_garage_url(path: 'lists/chat_ui')
25
- end
26
- template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
27
- action.windows_open url: json_ui_garage_url(path: 'lists/autoload_as_needed')
28
- end
29
- template.thumbnail title: 'Autoload All', onClick: ->(action) do
30
- action.windows_open url: json_ui_garage_url(path: 'lists/autoload_all')
31
- end
32
- template.thumbnail title: 'Reordering', onClick: ->(action) do
33
- action.windows_open url: json_ui_garage_url(path: 'lists/reordering')
34
- end
35
- end
36
-
37
- end
38
- end
1
+ json.title 'Lists'
2
+
3
+ json_ui_page json do |page|
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: true
5
+
6
+ page.list firstSection: ->(section) do
7
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
8
+ header.label text: 'The List panel is useful for displaying a large number of items that are uniform, which is especially important in mobile apps because the rows can be reused for efficiency.'
9
+ header.spacer height: 6
10
+ header.label text: 'So, following the mobile-first paradigm, do not ever display large numbers of items using other components.'
11
+ end
12
+
13
+ section.rows builder: ->(template) do
14
+ template.thumbnail icon: 'list', title: 'Templating', onClick: ->(action) do
15
+ action.windows_open url: json_ui_garage_url(path: 'lists/templating')
16
+ end
17
+ template.thumbnail title: 'Action Buttons', onClick: ->(action) do
18
+ action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions')
19
+ end
20
+ template.thumbnail title: 'FAB (Floating Action Button)', onClick: ->(action) do
21
+ action.windows_open url: json_ui_garage_url(path: 'lists/fab')
22
+ end
23
+ template.thumbnail title: 'Chat UI', onClick: ->(action) do
24
+ action.windows_open url: json_ui_garage_url(path: 'lists/chat_ui')
25
+ end
26
+ template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
27
+ action.windows_open url: json_ui_garage_url(path: 'lists/autoload_as_needed')
28
+ end
29
+ template.thumbnail title: 'Autoload All', onClick: ->(action) do
30
+ action.windows_open url: json_ui_garage_url(path: 'lists/autoload_all')
31
+ end
32
+ template.thumbnail title: 'Reordering', onClick: ->(action) do
33
+ action.windows_open url: json_ui_garage_url(path: 'lists/reordering')
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -1,34 +1,34 @@
1
- page_index = params[:page].to_i
2
- next_page = {
3
- url: json_ui_garage_url(path: 'lists/reordering', page: page_index + 1, section_only: 'v1'),
4
- autoload: 'asNeeded'
5
- }
6
-
7
- page = json_ui_page json
8
-
9
- if params[:section_only].present?
10
- json.nextPage next_page if page_index < 3
11
- json.sections do
12
- json.child! do
13
- render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index, reorder: true
14
- end
15
- end
16
- else
17
- json.title 'Lists'
18
-
19
- render "#{@path_prefix}/nav_menu", json: json, page: page
20
-
21
- page.list nextPage: next_page, sections: [
22
- ->(section) do
23
- section.header padding: glib_json_padding_list, childViews: ->(header) do
24
- header.h3 text: 'Section One'
25
- end
26
- end,
27
- ->(section) do
28
- section.header padding: glib_json_padding_list, childViews: ->(header) do
29
- header.h3 text: 'Section Two'
30
- end
31
- render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index, reorder: true
32
- end
33
- ]
34
- end
1
+ page_index = params[:page].to_i
2
+ next_page = {
3
+ url: json_ui_garage_url(path: 'lists/reordering', page: page_index + 1, section_only: 'v1'),
4
+ autoload: 'asNeeded'
5
+ }
6
+
7
+ page = json_ui_page json
8
+
9
+ if params[:section_only].present?
10
+ json.nextPage next_page if page_index < 3
11
+ json.sections do
12
+ json.child! do
13
+ render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index, reorder: true
14
+ end
15
+ end
16
+ else
17
+ json.title 'Lists'
18
+
19
+ render "#{@path_prefix}/nav_menu", json: json, page: page
20
+
21
+ page.list nextPage: next_page, sections: [
22
+ ->(section) do
23
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
24
+ header.h3 text: 'Section One'
25
+ end
26
+ end,
27
+ ->(section) do
28
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
29
+ header.h3 text: 'Section Two'
30
+ end
31
+ render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index, reorder: true
32
+ end
33
+ ]
34
+ end
@@ -1,35 +1,35 @@
1
- json.title 'Lists'
2
-
3
- json_ui_page json do |page|
4
- render "#{@path_prefix}/nav_menu", json: json, page: page
5
-
6
- page.list firstSection: ->(section) do
7
- section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
8
- header.h3 text: 'Section Header'
9
- end
10
-
11
- section.rows builder: ->(template) do
12
- template.thumbnail title: 'Click me', onClick: ->(action) do
13
- action.windows_open url: json_ui_garage_url(path: 'home/blank')
14
- end
15
- template.thumbnail title: 'Item with subtitle', subtitle: 'Item subtitle'
16
- template.thumbnail title: 'Item with chips', chips: ->(menu) do
17
- menu.button text: 'Finished', styleClass: 'info'
18
- menu.button props: { text: 'Succeeded', styleClass: 'success' }
19
- end
20
-
21
- template.thumbnail title: 'Item with thumbnail image', subtitle: 'Item subtitle', imageUrl: glib_json_image_standard_url
22
- template.featured title: 'Featured with featured image', subtitle: 'Item subtitle', imageUrl: glib_json_image_standard_url
23
-
24
- # TODO
25
- # template.thumbnail title: 'Item with accessories (Experimental)', subtitle: 'Item subtitle', accessoryViews: ->(thumbnail) do
26
- # thumbnail.panels_horizontal childViews: ->(horizontal) do
27
- # horizontal.chip text: 'finished'
28
- # horizontal.spacer width: 10
29
- # horizontal.chip text: 'succeeded'
30
- # end
31
- # end
32
-
33
- end
34
- end
35
- end
1
+ json.title 'Lists'
2
+
3
+ json_ui_page json do |page|
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
+
6
+ page.list firstSection: ->(section) do
7
+ section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
8
+ header.h3 text: 'Section Header'
9
+ end
10
+
11
+ section.rows builder: ->(template) do
12
+ template.thumbnail title: 'Click me', onClick: ->(action) do
13
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
14
+ end
15
+ template.thumbnail title: 'Item with subtitle', subtitle: 'Item subtitle'
16
+ template.thumbnail title: 'Item with chips', chips: ->(menu) do
17
+ menu.button text: 'Finished', styleClass: 'info'
18
+ menu.button props: { text: 'Succeeded', styleClass: 'success' }
19
+ end
20
+
21
+ template.thumbnail title: 'Item with thumbnail image', subtitle: 'Item subtitle', imageUrl: glib_json_image_standard_url
22
+ template.featured title: 'Featured with featured image', subtitle: 'Item subtitle', imageUrl: glib_json_image_standard_url
23
+
24
+ # TODO
25
+ # template.thumbnail title: 'Item with accessories (Experimental)', subtitle: 'Item subtitle', accessoryViews: ->(thumbnail) do
26
+ # thumbnail.panels_horizontal childViews: ->(horizontal) do
27
+ # horizontal.chip text: 'finished'
28
+ # horizontal.spacer width: 10
29
+ # horizontal.chip text: 'succeeded'
30
+ # end
31
+ # end
32
+
33
+ end
34
+ end
35
+ end
@@ -1,114 +1,114 @@
1
- json.title 'ActionCable Real-time Update'
2
- page = json_ui_page json
3
-
4
- online_channel = 'OnlineChannel'
5
- typing_channel = 'IsTypingChannel'
6
- first_user = User.first
7
- second_user = User.offset(1).first
8
- # Implement a page that shows how ActionCable works in json_ui
9
-
10
- # 1. Example for list
11
- # column.panels_list actionCable: socket_config, width: 'matchParent', firstSection: ->(section) do
12
- # section.rows objects: @messages, builder: -> (row, message, index) do
13
- # render 'conversations/message', row: row, message: message, user: current_user
14
- # end
15
- # end
16
-
17
- # page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
18
- # form.fields_textarea \
19
- # width: 'matchParent',
20
- # label: 'Message',
21
- # onKeyUp: ->(action) do
22
- # action.cables_push channel: 'isTypingChannel', data: { conversationId: 1, userId: 1 }
23
- # end
24
- # end
25
-
26
-
27
- # 3. Example for online status
28
-
29
- # put on app/channels/online_channel.rb
30
- # class OnlineChannel < Glib::Channel::OnlineChannel
31
- # self.channel_name = 'OnlineChannel'
32
- # end
33
-
34
- page.on load: ->(action) do
35
- action.timeouts_set interval: 1000, repeat: true, onTimeout: ->(subaction) do
36
- subaction.cables_push channel: online_channel, event: 'online_status', payload: { status: true, user_id: first_user.id }
37
- end
38
- end
39
-
40
- # 4. Example for typing status
41
-
42
- # put on app/channels/is_typing_channel.rb
43
- # class IsTypingChannel < Glib::Channel::IsTypingChannel
44
- # self.channel_name = 'IsTypingChannel'
45
- # end
46
-
47
- page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
48
-
49
- scroll.panels_split width: 'matchParent', content: ->(content) do
50
- content.left childViews: ->(left) do
51
- online_socket_config = {
52
- channel: online_channel,
53
- filterKey: second_user.id,
54
- params: {
55
- conversation: 2
56
- }
57
- }
58
- left.label actionCable: online_socket_config, text: ' '
59
-
60
- left.fields_textarea \
61
- width: 440,
62
- label: "Messages from #{first_user.full_name}",
63
- onTypeStart: lambda { |action|
64
- action.cables_push \
65
- channel: typing_channel, event: 'typing',
66
- payload: { status: true, user_id: first_user.id }
67
- },
68
- onTypeEnd: lambda { |action|
69
- action.cables_push \
70
- channel: typing_channel,
71
- event: 'typing',
72
- payload: { status: false, user_id: first_user.id }
73
- }
74
- left.spacer height: 10
75
-
76
- socket_config = {
77
- channel: typing_channel,
78
- filterKey: first_user.id,
79
- params: {
80
- conversation: 2
81
- }
82
- }
83
- left.label actionCable: socket_config, text: ' '
84
- end
85
-
86
- content.right childViews: ->(right) do
87
- right.label text: ''
88
- right.fields_textarea \
89
- width: 440,
90
- label: "Messages from #{second_user.full_name}",
91
- onTypeStart: lambda { |action|
92
- action.cables_push \
93
- channel: typing_channel, event: 'typing',
94
- payload: { status: true, user_id: second_user.id }
95
- },
96
- onTypeEnd: lambda { |action|
97
- action.cables_push \
98
- channel: typing_channel,
99
- event: 'typing',
100
- payload: { status: false, user_id: second_user.id }
101
- }
102
- right.spacer height: 10
103
-
104
- socket_config = {
105
- channel: typing_channel,
106
- filterKey: second_user.id,
107
- params: {
108
- conversation: 2
109
- }
110
- }
111
- right.label actionCable: socket_config, text: ' '
112
- end
113
- end
114
- end
1
+ json.title 'ActionCable Real-time Update'
2
+ page = json_ui_page json
3
+
4
+ online_channel = 'OnlineChannel'
5
+ typing_channel = 'IsTypingChannel'
6
+ first_user = User.first
7
+ second_user = User.offset(1).first
8
+ # Implement a page that shows how ActionCable works in json_ui
9
+
10
+ # 1. Example for list
11
+ # column.panels_list actionCable: socket_config, width: 'matchParent', firstSection: ->(section) do
12
+ # section.rows objects: @messages, builder: -> (row, message, index) do
13
+ # render 'conversations/message', row: row, message: message, user: current_user
14
+ # end
15
+ # end
16
+
17
+ # page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
18
+ # form.fields_textarea \
19
+ # width: 'matchParent',
20
+ # label: 'Message',
21
+ # onKeyUp: ->(action) do
22
+ # action.cables_push channel: 'isTypingChannel', data: { conversationId: 1, userId: 1 }
23
+ # end
24
+ # end
25
+
26
+
27
+ # 3. Example for online status
28
+
29
+ # put on app/channels/online_channel.rb
30
+ # class OnlineChannel < Glib::Channel::OnlineChannel
31
+ # self.channel_name = 'OnlineChannel'
32
+ # end
33
+
34
+ page.on load: ->(action) do
35
+ action.timeouts_set interval: 1000, repeat: true, onTimeout: ->(subaction) do
36
+ subaction.cables_push channel: online_channel, event: 'online_status', payload: { status: true, user_id: first_user.id }
37
+ end
38
+ end
39
+
40
+ # 4. Example for typing status
41
+
42
+ # put on app/channels/is_typing_channel.rb
43
+ # class IsTypingChannel < Glib::Channel::IsTypingChannel
44
+ # self.channel_name = 'IsTypingChannel'
45
+ # end
46
+
47
+ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
48
+
49
+ scroll.panels_split width: 'matchParent', content: ->(content) do
50
+ content.left childViews: ->(left) do
51
+ online_socket_config = {
52
+ channel: online_channel,
53
+ filterKey: second_user.id,
54
+ params: {
55
+ conversation: 2
56
+ }
57
+ }
58
+ left.label actionCable: online_socket_config, text: ' '
59
+
60
+ left.fields_textarea \
61
+ width: 440,
62
+ label: "Messages from #{first_user.full_name}",
63
+ onTypeStart: lambda { |action|
64
+ action.cables_push \
65
+ channel: typing_channel, event: 'typing',
66
+ payload: { status: true, user_id: first_user.id }
67
+ },
68
+ onTypeEnd: lambda { |action|
69
+ action.cables_push \
70
+ channel: typing_channel,
71
+ event: 'typing',
72
+ payload: { status: false, user_id: first_user.id }
73
+ }
74
+ left.spacer height: 10
75
+
76
+ socket_config = {
77
+ channel: typing_channel,
78
+ filterKey: first_user.id,
79
+ params: {
80
+ conversation: 2
81
+ }
82
+ }
83
+ left.label actionCable: socket_config, text: ' '
84
+ end
85
+
86
+ content.right childViews: ->(right) do
87
+ right.label text: ''
88
+ right.fields_textarea \
89
+ width: 440,
90
+ label: "Messages from #{second_user.full_name}",
91
+ onTypeStart: lambda { |action|
92
+ action.cables_push \
93
+ channel: typing_channel, event: 'typing',
94
+ payload: { status: true, user_id: second_user.id }
95
+ },
96
+ onTypeEnd: lambda { |action|
97
+ action.cables_push \
98
+ channel: typing_channel,
99
+ event: 'typing',
100
+ payload: { status: false, user_id: second_user.id }
101
+ }
102
+ right.spacer height: 10
103
+
104
+ socket_config = {
105
+ channel: typing_channel,
106
+ filterKey: second_user.id,
107
+ params: {
108
+ conversation: 2
109
+ }
110
+ }
111
+ right.label actionCable: socket_config, text: ' '
112
+ end
113
+ end
114
+ end