glib-web 0.5.47 → 0.5.53

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +28 -0
  3. data/app/controllers/concerns/glib/analytics/funnel.rb +0 -0
  4. data/app/controllers/concerns/glib/auth/policy.rb +0 -0
  5. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
  6. data/app/controllers/concerns/glib/json/traversal.rb +5 -0
  7. data/app/helpers/glib/app_feature_support_helper.rb +0 -0
  8. data/app/helpers/glib/dynamic_images_helper.rb +0 -0
  9. data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
  10. data/app/helpers/glib/enum_helper.rb +0 -0
  11. data/app/helpers/glib/forms_helper.rb +0 -0
  12. data/app/helpers/glib/json_ui/action_builder.rb +9 -0
  13. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +0 -0
  14. data/app/helpers/glib/json_ui/action_builder/http.rb +0 -0
  15. data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
  16. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +0 -0
  17. data/app/helpers/glib/json_ui/action_builder/windows.rb +0 -0
  18. data/app/helpers/glib/json_ui/analytics_helper.rb +0 -0
  19. data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
  20. data/app/helpers/glib/json_ui/list_builders.rb +6 -1
  21. data/app/helpers/glib/json_ui/menu_builder.rb +0 -0
  22. data/app/helpers/glib/json_ui/page_helper.rb +11 -3
  23. data/app/helpers/glib/json_ui/split_builders.rb +0 -0
  24. data/app/helpers/glib/json_ui/styling_helper.rb +0 -0
  25. data/app/helpers/glib/json_ui/table_builders.rb +0 -0
  26. data/app/helpers/glib/json_ui/view_builder.rb +1 -0
  27. data/app/helpers/glib/json_ui/view_builder/banners.rb +1 -0
  28. data/app/helpers/glib/json_ui/view_builder/fields.rb +2 -0
  29. data/app/helpers/glib/urls_helper.rb +5 -0
  30. data/app/models/glib/active_storage/attachment.rb +0 -0
  31. data/app/models/glib/active_storage/blob.rb +0 -0
  32. data/app/models/glib/application_record.rb +0 -0
  33. data/app/models/glib/dynamic_text_record.rb +0 -0
  34. data/app/models/glib/text.rb +0 -0
  35. data/app/policies/glib/application_policy.rb +0 -0
  36. data/app/validators/email_typo_validator.rb +0 -0
  37. data/app/validators/email_validator.rb +0 -0
  38. data/app/validators/url_validator.rb +0 -0
  39. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +0 -0
  40. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +0 -0
  41. data/app/views/json_ui/garage/actions/_http.json.jbuilder +0 -0
  42. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +0 -0
  43. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +0 -0
  44. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +0 -0
  45. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +0 -0
  46. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +0 -0
  47. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +0 -0
  48. data/app/views/json_ui/garage/forms/basic.json.jbuilder +0 -0
  49. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +0 -0
  50. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +0 -0
  51. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +0 -0
  52. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +0 -0
  53. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +0 -0
  54. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +0 -0
  55. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +0 -0
  56. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
  57. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +20 -21
  58. data/app/views/json_ui/garage/forms/index.json.jbuilder +83 -85
  59. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +28 -29
  60. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +41 -43
  61. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +0 -0
  62. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +1 -1
  63. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
  64. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
  65. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
  66. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +0 -0
  67. data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
  68. data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
  69. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +0 -0
  70. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +0 -0
  71. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +0 -0
  72. data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
  73. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +13 -3
  74. data/app/views/json_ui/garage/lists/templating.json.jbuilder +0 -0
  75. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +97 -0
  76. data/app/views/json_ui/garage/notifications/index.json.jbuilder +5 -1
  77. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +0 -0
  78. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +0 -0
  79. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
  80. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
  81. data/app/views/json_ui/garage/pages/index.json.jbuilder +0 -0
  82. data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
  83. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
  84. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +0 -0
  85. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +0 -0
  86. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +0 -0
  87. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
  88. data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
  89. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +0 -0
  90. data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
  91. data/app/views/json_ui/garage/panels/flow.json.jbuilder +0 -0
  92. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +0 -0
  93. data/app/views/json_ui/garage/panels/index.json.jbuilder +0 -0
  94. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
  95. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +0 -0
  96. data/app/views/json_ui/garage/panels/split.json.jbuilder +0 -0
  97. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +0 -0
  98. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
  99. data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
  100. data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
  101. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
  102. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
  103. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +0 -0
  104. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
  105. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +0 -0
  106. data/app/views/json_ui/garage/tables/index.json.jbuilder +0 -0
  107. data/app/views/json_ui/garage/tables/layout.json.jbuilder +0 -0
  108. data/app/views/json_ui/garage/views/banners.json.jbuilder +0 -0
  109. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +0 -0
  110. data/app/views/json_ui/garage/views/charts.json.jbuilder +0 -0
  111. data/app/views/json_ui/garage/views/icons.json.jbuilder +0 -0
  112. data/app/views/json_ui/garage/views/images.json.jbuilder +0 -0
  113. data/app/views/json_ui/garage/views/index.json.jbuilder +0 -0
  114. data/app/views/json_ui/garage/views/links.json.jbuilder +0 -0
  115. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +0 -0
  116. data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
  117. data/app/views/json_ui/garage/views/misc.json.jbuilder +0 -0
  118. data/app/views/json_ui/garage/views/texts.json.jbuilder +0 -0
  119. data/config/routes.rb +0 -0
  120. data/lib/generators/glib/install_generator.rb +0 -0
  121. data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
  122. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
  123. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
  124. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
  125. data/lib/generators/templates/database.yml +0 -0
  126. data/lib/generators/templates/dynamic_text.rb +0 -0
  127. data/lib/glib-web.rb +0 -0
  128. data/lib/glib/crypt.rb +0 -0
  129. data/lib/glib/crypt/utils.rb +0 -0
  130. data/lib/glib/dynamic_text.rb +0 -0
  131. data/lib/glib/dynamic_text/config.rb +0 -0
  132. data/lib/glib/engine.rb +0 -0
  133. data/lib/glib/json_crawler.rb +0 -0
  134. data/lib/glib/json_crawler/action_crawler.rb +0 -0
  135. data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
  136. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +0 -0
  137. data/lib/glib/json_crawler/action_crawlers/menu.rb +0 -0
  138. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +0 -0
  139. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +0 -0
  140. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +0 -0
  141. data/lib/glib/json_crawler/coverage.rb +0 -0
  142. data/lib/glib/json_crawler/http.rb +0 -0
  143. data/lib/glib/mailer_tester.rb +0 -0
  144. data/lib/glib/value.rb +0 -0
  145. data/lib/glib/version.rb +0 -0
  146. data/lib/tasks/db.rake +0 -0
  147. metadata +19 -8
@@ -1,40 +1,39 @@
1
1
  json.title 'Forms'
2
2
 
3
- json_ui_page json do |page|
4
- render "#{@path_prefix}/nav_menu", json: json, page: page
3
+ page = json_ui_page json
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
5
 
6
- page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
7
- form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
6
+ page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
7
+ form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
8
8
 
9
- # images = [
10
- # {
11
- # value: "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4",
12
- # fileUrl: "https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100"
13
- # }
14
- # ]
15
- # form.fields_richText name: 'user[bio]', width: 'matchParent', label: 'Content', images: images, value: '<p>Test {{image1}}</p>'
9
+ # images = [
10
+ # {
11
+ # value: "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4",
12
+ # fileUrl: "https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100"
13
+ # }
14
+ # ]
15
+ # form.fields_richText name: 'user[bio]', width: 'matchParent', label: 'Content', images: images, value: '<p>Test {{image1}}</p>'
16
16
 
17
- json.child! do
18
- json.view 'fields/newRichText-v1'
19
- json.width 'matchParent'
20
- json.label 'Content'
21
- json.name 'user[bio]'
22
- json.value '<p>Test {{image1}}</p>'
17
+ json.child! do
18
+ json.view 'fields/newRichText-v1'
19
+ json.width 'matchParent'
20
+ json.label 'Content'
21
+ json.name 'user[bio]'
22
+ json.value '<p>Test {{image1}}</p>'
23
23
 
24
- json.images do
25
- json.child! do
26
- json.value "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4"
27
- # json.fileTitle "hita i hanom hg.jpg"
28
- json.fileUrl "https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100"
29
- end
30
- end
31
-
32
- json.imageUploader do
33
- json.accepts(fileType: "image/*", maxFileSize: 5000)
34
- json.directUploadUrl rails_direct_uploads_url
24
+ json.images do
25
+ json.child! do
26
+ json.value "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4"
27
+ # json.fileTitle "hita i hanom hg.jpg"
28
+ json.fileUrl "https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100"
35
29
  end
36
30
  end
37
31
 
38
- form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
32
+ json.imageUploader do
33
+ json.accepts(fileType: "image/*", maxFileSize: 5000)
34
+ json.directUploadUrl rails_direct_uploads_url
35
+ end
39
36
  end
37
+
38
+ form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
40
39
  end
@@ -1,48 +1,46 @@
1
1
  json.title 'Forms'
2
2
 
3
- json_ui_page json do |page|
4
- render "#{@path_prefix}/nav_menu", json: json, page: page
5
-
6
- page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
7
- form.h2 text: 'Radio Group'
8
- form.spacer height: 6
9
- form.h4 text: 'Gender'
10
- form.fields_radioGroup name: 'user[gender]', value: 'F', childViews: ->(group) do
11
- group.fields_radio value: '', label: 'Unknown'
12
- group.fields_radio value: 'M', label: 'Male'
13
- group.fields_radio value: 'F', label: 'Female'
14
- end
15
-
16
- form.spacer height: 20
17
- form.h2 text: 'Single Checkbox'
18
- form.fields_check name: 'user[age_range]', value: '16+', checkValue: '16+', uncheckValue: '0-16', label: 'I am over 16 (has default value)'
19
- form.fields_check name: 'user[employer]', checkValue: 1, label: 'I am an employer (no default value)'
20
- form.fields_check name: 'user[enabled]', checkValue: true, label: 'Enable', styleClass: 'switch', value: 'true'
21
-
22
- form.spacer height: 20
23
- form.h2 text: 'Date/Time'
24
- form.spacer height: 6
25
- form.fields_date name: 'user[date]', width: 'matchParent', label: 'Date', min: '2010-01-01', max: '2012-01-01', value: '2010-02-01'
26
- form.fields_datetime name: 'user[date_time]', width: 'matchParent', label: 'Date Time', min: '2018-06-09T00:00', max: '2018-06-17T00:00', value: '2018-06-15T19:30'
27
-
28
- form.spacer height: 20
29
- form.h2 text: 'Country'
30
- form.spacer height: 6
31
- region_field = { name: 'user[city]', label: 'City' }
32
- form.fields_country name: 'user[country]', width: 'matchParent', label: 'Country', region: region_field
33
-
34
- form.spacer height: 20
35
- form.h2 text: 'Map'
36
- form.spacer height: 6
37
- form.fields_location name: 'user[address]', width: 'matchParent', label: 'Type an address', value: 'Sydney Harbour Bridge',
38
- autocompleteOptions: { componentRestrictions: { country: 'au' }, types: ['(cities)'] },
39
- latitudeField: { view: 'fields/text', name: 'user[latitude]', label: 'Lat', value: -33.8523063, readOnly: true },
40
- longitudeField: { view: 'fields/text', name: 'user[longitude]', label: 'Long', value: 151.21078710000006, readOnly: true },
41
- zoomField: { view: 'fields/text', name: 'user[zoom]', label: 'Zoom' }
42
-
43
- form.spacer height: 20
44
- form.fields_submit text: 'Submit'
45
-
3
+ page = json_ui_page json
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
+
6
+ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
7
+ form.h2 text: 'Radio Group'
8
+ form.spacer height: 6
9
+ form.h4 text: 'Gender'
10
+ form.fields_radioGroup name: 'user[gender]', value: 'F', childViews: ->(group) do
11
+ group.fields_radio value: '', label: 'Unknown'
12
+ group.fields_radio value: 'M', label: 'Male'
13
+ group.fields_radio value: 'F', label: 'Female'
46
14
  end
47
15
 
16
+ form.spacer height: 20
17
+ form.h2 text: 'Single Checkbox'
18
+ form.fields_check name: 'user[age_range]', value: '16+', checkValue: '16+', uncheckValue: '0-16', label: 'I am over 16 (has default value)'
19
+ form.fields_check name: 'user[employer]', checkValue: 1, label: 'I am an employer (no default value)'
20
+ form.fields_check name: 'user[enabled]', checkValue: true, label: 'Enable', styleClass: 'switch', value: 'true'
21
+
22
+ form.spacer height: 20
23
+ form.h2 text: 'Date/Time'
24
+ form.spacer height: 6
25
+ form.fields_date name: 'user[date]', width: 'matchParent', label: 'Date', min: '2010-01-01', max: '2012-01-01', value: '2010-02-01'
26
+ form.fields_datetime name: 'user[date_time]', width: 'matchParent', label: 'Date Time', min: '2018-06-09T00:00', max: '2018-06-17T00:00', value: '2018-06-15T19:30'
27
+
28
+ form.spacer height: 20
29
+ form.h2 text: 'Country'
30
+ form.spacer height: 6
31
+ region_field = { name: 'user[city]', label: 'City' }
32
+ form.fields_country name: 'user[country]', width: 'matchParent', label: 'Country', region: region_field
33
+
34
+ form.spacer height: 20
35
+ form.h2 text: 'Map'
36
+ form.spacer height: 6
37
+ form.fields_location name: 'user[address]', width: 'matchParent', label: 'Type an address', value: 'Sydney Harbour Bridge',
38
+ autocompleteOptions: { componentRestrictions: { country: 'au' }, types: ['(cities)'] },
39
+ latitudeField: { view: 'fields/text', name: 'user[latitude]', label: 'Lat', value: -33.8523063, readOnly: true },
40
+ longitudeField: { view: 'fields/text', name: 'user[longitude]', label: 'Long', value: 151.21078710000006, readOnly: true },
41
+ zoomField: { view: 'fields/text', name: 'user[zoom]', label: 'Zoom' }
42
+
43
+ form.spacer height: 20
44
+ form.fields_submit text: 'Submit'
45
+
48
46
  end
@@ -2,7 +2,7 @@ json.title 'Forms'
2
2
 
3
3
  json_ui_page json do |page|
4
4
  render "#{@path_prefix}/nav_menu", json: json, page: page
5
-
5
+
6
6
  page.form url: json_ui_garage_url(path: 'forms/submission_flow_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
7
7
  form.fields_radioGroup name: 'user[flow]', childViews: ->(group) do
8
8
  group.h3 text: 'Flow'
File without changes
File without changes
File without changes
File without changes
@@ -18,7 +18,17 @@ else
18
18
 
19
19
  render "#{@path_prefix}/nav_menu", json: json, page: page
20
20
 
21
- page.list nextPage: next_page, firstSection: ->(section) do
22
- render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index, reorder: true
23
- end
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
+ ]
24
34
  end
@@ -0,0 +1,97 @@
1
+ json.title 'ActionCable Real-time Update'
2
+ page = json_ui_page json
3
+
4
+ # Implement a page that shows how ActionCable works in json_ui
5
+
6
+ # 1. Example for list
7
+ # column.panels_list actionCable: socket_config, width: 'matchParent', firstSection: ->(section) do
8
+ # section.rows objects: @messages, builder: -> (row, message, index) do
9
+ # render 'conversations/message', row: row, message: message, user: current_user
10
+ # end
11
+ # end
12
+
13
+ # page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
14
+ # form.fields_textarea \
15
+ # width: 'matchParent',
16
+ # label: 'Message',
17
+ # onKeyUp: ->(action) do
18
+ # action.cables_push channel: 'isTypingChannel', data: { conversationId: 1, userId: 1 }
19
+ # end
20
+ # end
21
+
22
+
23
+ # 3. Example for online status
24
+ # - TODO: Implement "repeat: true" in glib-web-npm
25
+ # page.on load: ->(action) do
26
+ # action.timeouts_set interval: 10000, repeat: true, onTimeout: ->(subaction) do
27
+ # subaction.cables_push channel: 'message', event: 'online'
28
+ # end
29
+ # end
30
+
31
+
32
+ # put on app/channels/is_typing_channel.rb
33
+ # class IsTypingChannel < Glib::Channel::IsTypingChannel
34
+ # self.channel_name = 'IsTypingChannel'
35
+ # end
36
+
37
+ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
38
+
39
+ channel = 'IsTypingChannel'
40
+ first_user = User.first
41
+ second_user = User.offset(1).first
42
+
43
+ scroll.panels_split width: 'matchParent', content: ->(content) do
44
+ content.left childViews: ->(left) do
45
+ left.fields_textarea \
46
+ width: 'matchParent',
47
+ label: "Messages from #{first_user.full_name}",
48
+ onTypeStart: lambda { |action|
49
+ action.cables_push \
50
+ channel: channel, event: 'typing',
51
+ payload: { status: true, user_id: first_user.id }
52
+ },
53
+ onTypeEnd: lambda { |action|
54
+ action.cables_push \
55
+ channel: channel,
56
+ event: 'typing',
57
+ payload: { status: false, user_id: first_user.id }
58
+ }
59
+ left.spacer height: 10
60
+
61
+ socket_config = {
62
+ channel: channel,
63
+ filterKey: first_user.id,
64
+ params: {
65
+ conversation: 2
66
+ }
67
+ }
68
+ left.label actionCable: socket_config, text: ' '
69
+ end
70
+ content.right childViews: ->(right) do
71
+ right.fields_textarea \
72
+ width: 'matchParent',
73
+ label: "Messages from #{second_user.full_name}",
74
+ onTypeStart: lambda { |action|
75
+ action.cables_push \
76
+ channel: channel, event: 'typing',
77
+ payload: { status: true, user_id: second_user.id }
78
+ },
79
+ onTypeEnd: lambda { |action|
80
+ action.cables_push \
81
+ channel: channel,
82
+ event: 'typing',
83
+ payload: { status: false, user_id: second_user.id }
84
+ }
85
+ right.spacer height: 10
86
+
87
+ socket_config = {
88
+ channel: channel,
89
+ filterKey: second_user.id,
90
+ params: {
91
+ conversation: 2
92
+ }
93
+ }
94
+ right.label actionCable: socket_config, text: ' '
95
+ end
96
+ end
97
+ end
@@ -25,8 +25,12 @@ page.list firstSection: ->(section) do
25
25
  end
26
26
  end
27
27
 
28
- template.thumbnail title: 'WebSocket Real-time Update', onClick: ->(action) do
28
+ template.thumbnail title: 'Phoenix WebSocket Real-time Update', onClick: ->(action) do
29
29
  action.windows_open url: json_ui_garage_url(path: 'notifications/web_socket')
30
30
  end
31
+
32
+ template.thumbnail title: 'ActionCable Real-time Update', onClick: ->(action) do
33
+ action.windows_open url: json_ui_garage_url(path: 'notifications/action_cable')
34
+ end
31
35
  end
32
36
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/config/routes.rb CHANGED
File without changes
File without changes