glib-web 0.5.16 → 0.5.22

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 (36) hide show
  1. checksums.yaml +5 -5
  2. data/app/controllers/concerns/glib/analytics/funnel.rb +60 -0
  3. data/app/controllers/concerns/glib/json/libs.rb +4 -4
  4. data/app/controllers/concerns/glib/json/traversal.rb +1 -0
  5. data/app/controllers/concerns/glib/json/ui.rb +16 -8
  6. data/app/controllers/glib/home_controller.rb +0 -0
  7. data/app/helpers/glib/json_ui/action_builder.rb +12 -0
  8. data/app/helpers/glib/json_ui/menu_builder.rb +48 -6
  9. data/app/helpers/glib/json_ui/page_helper.rb +21 -0
  10. data/app/helpers/glib/json_ui/response_helper.rb +0 -0
  11. data/app/helpers/glib/json_ui/view_builder.rb +36 -19
  12. data/app/helpers/glib/json_ui/view_builder/fields.rb +2 -0
  13. data/app/helpers/glib/json_ui/view_builder/panels.rb +1 -1
  14. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +0 -1
  15. data/app/views/json_ui/garage/actions/_http.json.jbuilder +9 -3
  16. data/app/views/json_ui/garage/actions/index.json.jbuilder +0 -0
  17. data/app/views/json_ui/garage/forms/basic.json.jbuilder +2 -14
  18. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +31 -16
  19. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +0 -0
  20. data/app/views/json_ui/garage/home/index.json.jbuilder +0 -0
  21. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +112 -0
  22. data/app/views/json_ui/garage/lists/index.json.jbuilder +2 -2
  23. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -0
  24. data/app/views/json_ui/garage/notifications/index.json.jbuilder +14 -0
  25. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +4 -16
  26. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +6 -2
  27. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +2 -0
  28. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +13 -2
  29. data/app/views/json_ui/garage/tables/index.json.jbuilder +19 -20
  30. data/app/views/json_ui/garage/tables/layout.json.jbuilder +26 -28
  31. data/app/views/json_ui/garage/views/banners.json.jbuilder +18 -6
  32. data/app/views/json_ui/garage/views/icons.json.jbuilder +1439 -11
  33. data/app/views/json_ui/garage/views/index.json.jbuilder +6 -3
  34. data/app/views/layouts/json_ui/renderer.html.erb +7 -4
  35. metadata +5 -3
  36. data/app/views/json_ui/garage/lists/chat.json.jbuilder +0 -112
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f06e6697837bddfa0e71b0263a7dcc23452aff19
4
- data.tar.gz: 57677ef8d290617ca0a3bc935450b9c729113623
2
+ SHA256:
3
+ metadata.gz: 7d40fabbd2b44ff3a4c13a7095ea2f19b6b560de5d0c5d6a58616c94d000df1a
4
+ data.tar.gz: 1c4b8787db5d9fa131b18346e6b4d201b6c9b279f5a5e58d5debf6c4024475c4
5
5
  SHA512:
6
- metadata.gz: 4bcfd89c5fbc018bb165b5a9c631435117415320c1465ae49a13975e7da3dfccc58f4a182ec9bd90fae1a7f42fd3426842e1a16b3db1e8bdf6b5bd8052e42ffb
7
- data.tar.gz: 89d40c161a93ce26a558029697553801d0e5cae50f0c0bc4f7ab7aec619f917e2487478ff741654f326a4d21e2452d61b2c73000bb054d2571aa12d09e98f451
6
+ metadata.gz: 7d75eca6f60a6cfe859d529216300a16987fde43fc4960df8a1923080c0142be524f21e0ddf32e6f3c66182fa0c12d9f6d8f85bd65d2671ad34e921dd02c89f9
7
+ data.tar.gz: 1c0225f8bd8979c62e74e69941b033afc98067c93e1a699d4402a347c9e7f7bb3076df798d88fd79d02216da6c067112950249cd1b0d0740c23b895911cdf143
@@ -0,0 +1,60 @@
1
+ module Glib::Analytics
2
+ module Funnel
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ # include Overrides
7
+ extend ClassMethods
8
+
9
+ helper_method :glib_analytics_feature_segment
10
+ helper_method :glib_analytics_feature_referer
11
+ end
12
+
13
+ # module Overrides
14
+
15
+ # # Expose protected method
16
+ # public # Override
17
+ # def policy_scope(*args)
18
+ # super
19
+ # end
20
+ # end
21
+
22
+ def glib_analytics_included?
23
+ true
24
+ end
25
+
26
+ def glib_analytics_feature_segment
27
+ # To be overridden
28
+ nil
29
+ end
30
+
31
+ def glib_analytics_feature_referer
32
+ group = request.headers['GApp-Analytics-Referer-Group']
33
+ action = request.headers['GApp-Analytics-Referer-Action']
34
+ segment = request.headers['GApp-Analytics-Referer-Segment']
35
+ placement = request.headers['GApp-Analytics-Referer-Placement']
36
+
37
+ if group && action
38
+ return { group: group, action: action, segment: segment, placement: placement }
39
+ end
40
+
41
+ nil
42
+ end
43
+
44
+
45
+
46
+ module ClassMethods
47
+ # def glib_auth_inited?
48
+ # @@__glib_auth_init ||= false
49
+ # end
50
+
51
+ # def glib_analytics_init
52
+ # @@__glib_analytics_init = true
53
+ # end
54
+
55
+ # def glib_analytics_inited?
56
+ # @@__glib_analytics_init ||= false
57
+ # end
58
+ end
59
+ end
60
+ end
@@ -9,17 +9,17 @@ module Glib::Json::Libs
9
9
  end
10
10
 
11
11
  def json_ui_app_bundle_id
12
- @json_ui_app_bundle_id ||= request.headers['JsonUiApp-Bundle-Id']
12
+ @json_ui_app_bundle_id ||= request.headers['GApp-Bundle-Id'] || request.headers['JsonUiApp-Bundle-Id']
13
13
  end
14
14
 
15
15
  def json_ui_app_build_version
16
- @json_ui_app_build_version ||= request.headers['JsonUiApp-Build-Version']
16
+ @json_ui_app_build_version ||= request.headers['GApp-Build-Version'] || request.headers['JsonUiApp-Build-Version']
17
17
  @json_ui_app_build_version = params[:build_version] if @json_ui_app_build_version.nil? && Rails.env.development? # For easy testing
18
18
  @json_ui_app_build_version
19
19
  end
20
20
 
21
21
  def json_ui_app_device_os
22
- @json_ui_app_device_os ||= request.headers['JsonUiApp-Device-Os']
22
+ @json_ui_app_device_os ||= request.headers['GApp-Device-Os'] || request.headers['JsonUiApp-Device-Os']
23
23
  @json_ui_app_device_os = params[:device_os] if @json_ui_app_device_os.nil? && Rails.env.development? # For easy testing
24
24
  @json_ui_app_device_os || 'web'
25
25
  end
@@ -59,7 +59,7 @@ module Glib::Json::Libs
59
59
  # raise exception
60
60
  # end
61
61
  end
62
-
62
+
63
63
  def glib_json_handle_500(exception)
64
64
  if json_ui_activated? && Rails.env.production?
65
65
  Rollbar.error(exception) if defined?(Rollbar)
@@ -66,6 +66,7 @@ module Glib::Json::Traversal
66
66
 
67
67
  # Generic menu buttons
68
68
  traverse_multiple view['buttons'], block
69
+ traverse_multiple view['childButtons'], block
69
70
 
70
71
  # Split panel
71
72
  traverse_vertical_content view['left'], block
@@ -38,6 +38,17 @@ module Glib::Json::Ui
38
38
  end
39
39
  end
40
40
 
41
+ def json_ui_response_lifecycle_prop
42
+ prop_name = 'onResponse'
43
+ if (hash = json_transformation_start).is_a?(Hash) && hash[prop_name] # A valid response
44
+ if hash[prop_name]['action'] != 'runMultiple'
45
+ childActions = [hash[prop_name]]
46
+ hash[prop_name] = { 'action' => 'runMultiple', 'childActions' => childActions }
47
+ childActions
48
+ end
49
+ end
50
+ end
51
+
41
52
  def __json_ui_start(options)
42
53
  @__json_ui_activated = false
43
54
  @__json_ui_rendering = nil
@@ -66,12 +77,9 @@ module Glib::Json::Ui
66
77
  end
67
78
 
68
79
  private
69
-
70
- def __json_ui_vue(hash, options)
71
- renderer_path = options[:renderer_path]
72
- @__json_ui_orig_page = response.body
73
- response.body = render_to_string(template: renderer_path, layout: 'json_ui/renderer', content_type: 'text/html', locals: { page: hash, options: options })
74
-
75
- # response.body = render_to_string(template: renderer_path, layout: false, content_type: 'text/html', locals: { page: hash, options: options })
76
- end
80
+ def __json_ui_vue(hash, options)
81
+ renderer_path = options[:renderer_path]
82
+ @__json_ui_orig_page = response.body
83
+ response.body = render_to_string(template: renderer_path, layout: 'json_ui/renderer', content_type: 'text/html', locals: { page: hash, options: options })
84
+ end
77
85
  end
File without changes
@@ -16,6 +16,7 @@ module Glib
16
16
  end
17
17
 
18
18
  class Action < JsonUiElement
19
+ # TODO: Deprecated
19
20
  def analytics(value)
20
21
  if value.is_a?(String)
21
22
  @analyticsEnabled = true
@@ -27,6 +28,7 @@ module Glib
27
28
 
28
29
  # Override
29
30
  def created
31
+ # TODO: Deprecated
30
32
  if @analyticsEnabled
31
33
  suffix = @analyticsId
32
34
  # TODO: recognize_path() needs `method` as a second argument for POST request
@@ -71,6 +73,16 @@ module Glib
71
73
  end
72
74
  end
73
75
 
76
+ module Devices
77
+ class GetPushToken < Action
78
+ string :postUrl
79
+ string :paramNameForToken
80
+
81
+ # Use postUrl instead
82
+ # action :onGet
83
+ end
84
+ end
85
+
74
86
  module Analytics
75
87
  class LogEvent < Action
76
88
  string :name
@@ -6,6 +6,36 @@ module Glib
6
6
  end
7
7
 
8
8
  class MenuItem < JsonUiElement
9
+ hash :analytics
10
+
11
+ # def initialize(json, page)
12
+ # super(json, page)
13
+
14
+ # # Can be improved by making it configurable site-wide.
15
+ # @analyticsEnabled = true
16
+ # end
17
+
18
+ # def analytics(value)
19
+ # if value.is_a?(Hash)
20
+ # @analyticsEnabled = true
21
+ # @analyticsId = value
22
+ # else
23
+ # @analyticsEnabled = value == true
24
+ # end
25
+ # end
26
+
27
+ # # Override
28
+ # def created
29
+ # json.analytics do
30
+ # if @analyticsEnabled
31
+ # if @analyticsId
32
+ # json.placement @analyticsId
33
+ # end
34
+ # else
35
+ # json.disabled true
36
+ # end
37
+ # end
38
+ # end
9
39
  end
10
40
 
11
41
  class Button < MenuItem
@@ -15,13 +45,16 @@ module Glib
15
45
  bool :disabled
16
46
  singleton_array :styleClass, :styleClasses
17
47
 
18
- def childItems(block)
19
- json.childItems do
48
+ def childButtons(block)
49
+ json.childButtons do
20
50
  block.call page.menu_builder
21
51
  end
22
52
  end
23
53
 
54
+ # Override
24
55
  def created
56
+ super
57
+
25
58
  json.type 'button'
26
59
  end
27
60
  end
@@ -29,6 +62,8 @@ module Glib
29
62
  class Divider < MenuItem
30
63
  # Override
31
64
  def created
65
+ super
66
+
32
67
  json.type 'divider'
33
68
  end
34
69
  end
@@ -39,14 +74,21 @@ module Glib
39
74
 
40
75
  # Override
41
76
  def created
77
+ super
78
+
42
79
  json.type 'label'
43
80
  end
44
81
  end
45
82
 
46
- class MenuLeftBottom < Button
47
- icon :icon
48
- array :buttons
49
- end
83
+ # class MenuLeftBottom < Button
84
+ # icon :icon
85
+ # array :buttons
86
+ # end
87
+
88
+ # class Select < Button
89
+ # icon :icon
90
+ # array :buttons
91
+ # end
50
92
  end
51
93
  end
52
94
  end
@@ -10,9 +10,24 @@ module Glib
10
10
  )
11
11
  end
12
12
 
13
+ def json_ui_garage_current_url(options = {})
14
+ json_ui_garage_url(options.merge(path: params[:path]))
15
+ end
16
+
13
17
  # TODO: Remove the block
14
18
  def json_ui_page(json, &block)
15
19
  @__json_ui_page ||= Page.new(json, self)
20
+
21
+ if try(:glib_analytics_included?)
22
+ json.analytics do
23
+ json.feature do
24
+ json.group controller_name
25
+ json.action action_name
26
+ json.segment glib_analytics_feature_segment
27
+ end
28
+ end
29
+ end
30
+
16
31
  block&.call @__json_ui_page
17
32
  @__json_ui_page
18
33
  end
@@ -45,6 +60,12 @@ module Glib
45
60
  @__json_ui_section.action_builder
46
61
  end
47
62
 
63
+ def json_ui_action_payload(&block)
64
+ dataJson = Jbuilder.new
65
+ block&.call Page.new(dataJson, self).action_builder
66
+ dataJson.attributes!
67
+ end
68
+
48
69
  class Page
49
70
  attr_reader :json, :context, :view_builder, :action_builder, :menu_builder
50
71
  attr_reader :list_section_builder, :table_section_builder, :drawer_content_builder, :split_content_builder
@@ -28,29 +28,46 @@ module Glib
28
28
  length :height
29
29
  color :backgroundColor
30
30
  hash :padding
31
- # array :styleClasses
32
31
  singleton_array :styleClass, :styleClasses
33
32
  hash :showIf
33
+ hash :analytics
34
34
 
35
- def analytics(value)
36
- if value.is_a?(String)
37
- @analyticsEnabled = true
38
- @analyticsId = value
39
- else
40
- @analyticsEnabled = value == true
41
- end
42
- end
35
+ # def initialize(json, page)
36
+ # super(json, page)
43
37
 
44
- # Override
45
- def created
46
- if @analyticsEnabled
47
- context = page.context
48
- json.analytics do
49
- content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
50
- json.namePrefix [context.controller_name, context.action_name, content].join('_')
51
- end
52
- end
53
- end
38
+ # # Can be improved by making it configurable site-wide.
39
+ # @analyticsEnabled = true
40
+ # end
41
+
42
+ # def analytics(value)
43
+ # if value.is_a?(String)
44
+ # @analyticsEnabled = true
45
+ # @analyticsId = value
46
+ # else
47
+ # @analyticsEnabled = value == true
48
+ # end
49
+ # end
50
+
51
+ # # Override
52
+ # def created
53
+ # # if @analyticsEnabled
54
+ # # context = page.context
55
+ # # json.analytics do
56
+ # # content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
57
+ # # json.namePrefix [context.controller_name, context.action_name, content].join('_')
58
+ # # end
59
+ # # end
60
+
61
+ # json.analytics do
62
+ # if @analyticsEnabled
63
+ # if @analyticsId
64
+ # json.placement @analyticsId
65
+ # end
66
+ # else
67
+ # json.disabled true
68
+ # end
69
+ # end
70
+ # end
54
71
 
55
72
  end
56
73
 
@@ -95,6 +95,7 @@ class Glib::JsonUi::ViewBuilder
95
95
  # - It has a default onClick so no need to specify `onClick: ->(action) { action.forms_submit }`
96
96
  class Submit < AbstractField
97
97
  string :text
98
+ color :color
98
99
  end
99
100
 
100
101
  class CheckGroup < AbstractField
@@ -157,6 +158,7 @@ class Glib::JsonUi::ViewBuilder
157
158
  class DynamicGroup < AbstractField
158
159
  string :titlePrefix
159
160
  panels_builder :content, :template
161
+ hash :groupFieldProperties
160
162
 
161
163
  # NOTE: Consider using sub-panel instead (e.g. groupTemplate)
162
164
  # views :groupTemplateViews
@@ -89,7 +89,6 @@ class Glib::JsonUi::ViewBuilder
89
89
  @childViewsBlock.call(page.view_builder)
90
90
  page.current_form = nil
91
91
  end
92
-
93
92
  end
94
93
 
95
94
  def childViews(block)
@@ -98,6 +97,7 @@ class Glib::JsonUi::ViewBuilder
98
97
  end
99
98
 
100
99
  class List < View
100
+ hash :ws
101
101
  hash :nextPage
102
102
  action :onScrollToTop
103
103
  action :onScrollToBottom
@@ -1,6 +1,5 @@
1
1
 
2
2
  if local_assigns[:top_nav] || json_ui_app_is_web?
3
-
4
3
  page.leftDrawer content: ->(drawer) do
5
4
  drawer.header childViews: ->(header) do
6
5
  header.button text: 'App', styleClasses: ['link', 'logo'], onClick: ->(action) do
@@ -5,14 +5,20 @@ end
5
5
 
6
6
  section.rows builder: ->(template) do
7
7
  template.thumbnail title: 'http/post', onClick: ->(action) do
8
- action.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'New Joe' }
8
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
9
+ subaction.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'New Joe' }
10
+ end
9
11
  end
10
12
 
11
13
  template.thumbnail title: 'http/patch', onClick: ->(action) do
12
- action.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
14
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
15
+ subaction.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
16
+ end
13
17
  end
14
18
 
15
19
  template.thumbnail title: 'http/delete', onClick: ->(action) do
16
- action.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
20
+ action.auth_saveCsrfToken token: form_authenticity_token, onSave: ->(subaction) do
21
+ subaction.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
22
+ end
17
23
  end
18
24
  end