glib-web 0.5.77 → 0.5.78

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 (190) 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 -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 -0
  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 +94 -94
  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/split_builders.rb +32 -32
  36. data/app/helpers/glib/json_ui/styling_helper.rb +55 -55
  37. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  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 +291 -291
  41. data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -0
  42. data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
  43. data/app/helpers/glib/json_ui/view_builder.rb +240 -240
  44. data/app/helpers/glib/urls_helper.rb +12 -12
  45. data/app/models/concerns/glib/soft_deletable.rb +68 -68
  46. data/app/models/glib/active_storage/attachment.rb +9 -9
  47. data/app/models/glib/active_storage/blob.rb +9 -9
  48. data/app/models/glib/application_record.rb +18 -18
  49. data/app/models/glib/dynamic_text_record.rb +9 -9
  50. data/app/models/glib/text.rb +95 -95
  51. data/app/policies/glib/application_policy.rb +166 -166
  52. data/app/validators/email_typo_validator.rb +38 -38
  53. data/app/validators/email_validator.rb +7 -7
  54. data/app/validators/url_validator.rb +20 -20
  55. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  56. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  57. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  58. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  59. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  60. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  61. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  62. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  63. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  64. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  65. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  66. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +10 -7
  67. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  68. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  69. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  70. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  71. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  72. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
  73. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  74. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +37 -37
  75. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  76. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  77. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  78. data/app/views/json_ui/garage/forms/index.json.jbuilder +116 -113
  79. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
  80. data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
  81. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
  82. data/app/views/json_ui/garage/forms/payments.json.jbuilder +34 -0
  83. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
  84. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  85. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  86. data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
  87. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +150 -150
  88. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  89. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  90. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  91. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  92. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  93. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +65 -81
  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 +28 -28
  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/chat_ui.json.jbuilder +94 -94
  102. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  103. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  104. data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
  105. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  106. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  107. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  108. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  109. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  110. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  111. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  112. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  113. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  114. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  115. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  116. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  117. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  118. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  119. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  120. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
  121. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  122. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  123. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +38 -38
  124. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  125. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
  126. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  127. data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
  128. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  129. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  130. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  131. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
  132. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  133. data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
  134. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  135. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  136. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  137. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  138. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  139. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  140. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  141. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  142. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  143. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  144. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  145. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  146. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  147. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  148. data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
  149. data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -0
  150. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  151. data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
  152. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  153. data/app/views/json_ui/garage/views/index.json.jbuilder +78 -67
  154. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  155. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  156. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  157. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  158. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  159. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  160. data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
  161. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  162. data/config/routes.rb +7 -7
  163. data/lib/generators/glib/install_generator.rb +24 -24
  164. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  165. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  166. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  167. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  168. data/lib/generators/templates/database.yml +107 -107
  169. data/lib/generators/templates/dynamic_text.rb +2 -2
  170. data/lib/glib/crypt/utils.rb +26 -26
  171. data/lib/glib/dynamic_text/config.rb +21 -21
  172. data/lib/glib/engine.rb +7 -7
  173. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  174. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  175. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  176. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  177. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  178. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  179. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  180. data/lib/glib/json_crawler/coverage.rb +20 -20
  181. data/lib/glib/json_crawler/http.rb +120 -120
  182. data/lib/glib/json_crawler/router.rb +90 -90
  183. data/lib/glib/json_crawler.rb +11 -11
  184. data/lib/glib/mailer_tester.rb +36 -36
  185. data/lib/glib/test_helpers.rb +52 -52
  186. data/lib/glib/value.rb +7 -7
  187. data/lib/glib/version.rb +5 -5
  188. data/lib/glib-web.rb +9 -9
  189. data/lib/tasks/db.rake +95 -95
  190. metadata +6 -3
@@ -1,35 +1,35 @@
1
-
2
- page_index = params[:page].to_i
3
- next_page = {
4
- url: json_ui_garage_url(path: 'lists/autoload_as_needed', page: page_index + 1, section_only: 'v1'),
5
- autoload: 'asNeeded'
6
- }
7
-
8
- page = json_ui_page json
9
-
10
- # TODO: Cater
11
- # - for SEO: one URL for a standalone page and one URL for pagination only
12
- # - for generic approach, e.g. excluding nav_menu when there is no change
13
- if params[:section_only].present?
14
- sleep 1
15
-
16
- json.nextPage next_page if page_index < 3
17
- json.sections do
18
- json.child! do
19
- render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
20
- end
21
- end
22
- else
23
- json.title 'Lists'
24
-
25
- render "#{@path_prefix}/nav_menu", json: json, page: page
26
-
27
- page.list nextPage: next_page, firstSection: ->(section) do
28
- render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
29
- end, onScrollToBottom: ->(action) do
30
- action.snackbars_alert message: 'Scrolled to Bottom'
31
- end, onScrollToTop: ->(action) do
32
- action.snackbars_alert message: 'Scrolled to Top'
33
- end
34
-
35
- end
1
+
2
+ page_index = params[:page].to_i
3
+ next_page = {
4
+ url: json_ui_garage_url(path: 'lists/autoload_as_needed', page: page_index + 1, section_only: 'v1'),
5
+ autoload: 'asNeeded'
6
+ }
7
+
8
+ page = json_ui_page json
9
+
10
+ # TODO: Cater
11
+ # - for SEO: one URL for a standalone page and one URL for pagination only
12
+ # - for generic approach, e.g. excluding nav_menu when there is no change
13
+ if params[:section_only].present?
14
+ sleep 1
15
+
16
+ json.nextPage next_page if page_index < 3
17
+ json.sections do
18
+ json.child! do
19
+ render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
20
+ end
21
+ end
22
+ else
23
+ json.title 'Lists'
24
+
25
+ render "#{@path_prefix}/nav_menu", json: json, page: page
26
+
27
+ page.list nextPage: next_page, firstSection: ->(section) do
28
+ render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
29
+ end, onScrollToBottom: ->(action) do
30
+ action.snackbars_alert message: 'Scrolled to Bottom'
31
+ end, onScrollToTop: ->(action) do
32
+ action.snackbars_alert message: 'Scrolled to Top'
33
+ end
34
+
35
+ end
@@ -1,94 +1,94 @@
1
- json.title 'Lists'
2
-
3
- liked = params[:liked] == 'true'
4
-
5
- page = json_ui_page json
6
-
7
- render "#{@path_prefix}/nav_menu", json: json, page: page
8
-
9
- json.phoenixSocket({
10
- "socket" => {
11
- "endpoint" => "/socket/websocket",
12
- "params" => {
13
- vsn: '2.0.0',
14
- token: 'TOKEN'
15
- }
16
- },
17
- "topic" => "rooms",
18
- "events" => [],
19
- # "events" => ["new_link_added"],
20
- # "header" => {
21
- # "user_id" => 2,
22
- # "prev_item_id" => nil,
23
- # "last_item_id" => nil
24
- # }
25
- })
26
-
27
- list_ws = { topic: 'rooms', events: ['comments_updated'] }
28
- page.list phoenixSocket: list_ws, firstSection: ->(section) do
29
- section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
30
- header.h3 text: 'Chat with John Doe'
31
- end
32
-
33
- section.rows builder: ->(template) do
34
- # template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i}) -- #{liked}", onClick: ->(action) do
35
- # action.windows_reload
36
- # end, onLongPress: ->(action) do
37
- # action.sheets_select message: "Context Menu (#{DateTime.current.to_i})", buttons: ->(menu) do
38
- # if liked
39
- # menu.button text: 'Cancel 👍', onClick: ->(subaction) do
40
- # subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: false)
41
- # end
42
- # else
43
- # menu.button text: 'Give 👍', onClick: ->(subaction) do
44
- # subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: true)
45
- # end
46
- # end
47
- # end
48
- # end
49
-
50
- template.commentOutgoing subtitle: 'Hey!', subsubtitle: l(10.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
51
- menu.button text: '😊 2', styleClass: 'info'
52
- end
53
-
54
- template.commentOutgoing subtitle: 'How are you?', subsubtitle: l(DateTime.current, format: :short)
55
-
56
- template.commentIncoming title: 'John Doe', subtitle: 'Very well', subsubtitle: l(7.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
57
- menu.button text: "👍 #{liked ? 2 : 1}"
58
- end, onLongPress: ->(action) do
59
- action.sheets_select message: 'Context Menu', buttons: ->(menu) do
60
- if liked
61
- menu.button text: 'Cancel 👍', onClick: ->(subaction) do
62
- subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: false)
63
- end
64
- else
65
- menu.button text: 'Give 👍', onClick: ->(subaction) do
66
- subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: true)
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
73
-
74
- page.footer padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(footer) do
75
- footer.panels_form width: 'matchParent', url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, paramNameForFormData: 'formData', onSubmit: ->(action) do
76
- json.action "ws/push"
77
- json.topic "rooms"
78
- json.event "create_comment"
79
- json.payload({
80
- "room_id": "30",
81
- "user_id": "2"
82
- })
83
-
84
- end, childViews: ->(form) do
85
- form.fields_text name: 'user[message]', width: 'matchParent', label: 'Message'
86
-
87
- form.panels_split width: 'matchParent', content: ->(split) do
88
- split.right childViews: ->(right) do
89
- right.button text: 'Submit', onClick: ->(action) { action.forms_submit }
90
- end
91
- end
92
- end
93
-
94
- end
1
+ json.title 'Lists'
2
+
3
+ liked = params[:liked] == 'true'
4
+
5
+ page = json_ui_page json
6
+
7
+ render "#{@path_prefix}/nav_menu", json: json, page: page
8
+
9
+ json.phoenixSocket({
10
+ "socket" => {
11
+ "endpoint" => "/socket/websocket",
12
+ "params" => {
13
+ vsn: '2.0.0',
14
+ token: 'TOKEN'
15
+ }
16
+ },
17
+ "topic" => "rooms",
18
+ "events" => [],
19
+ # "events" => ["new_link_added"],
20
+ # "header" => {
21
+ # "user_id" => 2,
22
+ # "prev_item_id" => nil,
23
+ # "last_item_id" => nil
24
+ # }
25
+ })
26
+
27
+ list_ws = { topic: 'rooms', events: ['comments_updated'] }
28
+ page.list phoenixSocket: list_ws, firstSection: ->(section) do
29
+ section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
30
+ header.h3 text: 'Chat with John Doe'
31
+ end
32
+
33
+ section.rows builder: ->(template) do
34
+ # template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i}) -- #{liked}", onClick: ->(action) do
35
+ # action.windows_reload
36
+ # end, onLongPress: ->(action) do
37
+ # action.sheets_select message: "Context Menu (#{DateTime.current.to_i})", buttons: ->(menu) do
38
+ # if liked
39
+ # menu.button text: 'Cancel 👍', onClick: ->(subaction) do
40
+ # subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: false)
41
+ # end
42
+ # else
43
+ # menu.button text: 'Give 👍', onClick: ->(subaction) do
44
+ # subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: true)
45
+ # end
46
+ # end
47
+ # end
48
+ # end
49
+
50
+ template.commentOutgoing subtitle: 'Hey!', subsubtitle: l(10.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
51
+ menu.button text: '😊 2', styleClass: 'info'
52
+ end
53
+
54
+ template.commentOutgoing subtitle: 'How are you?', subsubtitle: l(DateTime.current, format: :short)
55
+
56
+ template.commentIncoming title: 'John Doe', subtitle: 'Very well', subsubtitle: l(7.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
57
+ menu.button text: "👍 #{liked ? 2 : 1}"
58
+ end, onLongPress: ->(action) do
59
+ action.sheets_select message: 'Context Menu', buttons: ->(menu) do
60
+ if liked
61
+ menu.button text: 'Cancel 👍', onClick: ->(subaction) do
62
+ subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: false)
63
+ end
64
+ else
65
+ menu.button text: 'Give 👍', onClick: ->(subaction) do
66
+ subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: true)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ page.footer padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(footer) do
75
+ footer.panels_form width: 'matchParent', url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, paramNameForFormData: 'formData', onSubmit: ->(action) do
76
+ json.action "ws/push"
77
+ json.topic "rooms"
78
+ json.event "create_comment"
79
+ json.payload({
80
+ "room_id": "30",
81
+ "user_id": "2"
82
+ })
83
+
84
+ end, childViews: ->(form) do
85
+ form.fields_text name: 'user[message]', width: 'matchParent', label: 'Message'
86
+
87
+ form.panels_split width: 'matchParent', content: ->(split) do
88
+ split.right childViews: ->(right) do
89
+ right.button text: 'Submit', onClick: ->(action) { action.forms_submit }
90
+ end
91
+ end
92
+ end
93
+
94
+ end
@@ -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