glib-web 0.5.1 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. checksums.yaml +5 -5
  2. data/app/controllers/concerns/glib/auth/policy.rb +0 -0
  3. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
  4. data/app/controllers/concerns/glib/json/traversal.rb +0 -0
  5. data/app/controllers/glib/home_controller.rb +1 -1
  6. data/app/helpers/glib/app_feature_support_helper.rb +16 -0
  7. data/app/helpers/glib/dynamic_images_helper.rb +0 -0
  8. data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
  9. data/app/helpers/glib/forms_helper.rb +0 -0
  10. data/app/helpers/glib/json_ui/abstract_builder.rb +0 -0
  11. data/app/helpers/glib/json_ui/action_builder.rb +0 -0
  12. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +0 -0
  13. data/app/helpers/glib/json_ui/action_builder/http.rb +0 -0
  14. data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
  15. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +0 -0
  16. data/app/helpers/glib/json_ui/action_builder/windows.rb +1 -0
  17. data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
  18. data/app/helpers/glib/json_ui/list_builders.rb +5 -0
  19. data/app/helpers/glib/json_ui/menu_builder.rb +0 -0
  20. data/app/helpers/glib/json_ui/page_helper.rb +21 -16
  21. data/app/helpers/glib/json_ui/response_helper.rb +0 -0
  22. data/app/helpers/glib/json_ui/split_builders.rb +0 -0
  23. data/app/helpers/glib/json_ui/styling_helper.rb +0 -0
  24. data/app/helpers/glib/json_ui/table_builders.rb +0 -0
  25. data/app/helpers/glib/json_ui/view_builder.rb +0 -0
  26. data/app/helpers/glib/json_ui/view_builder/banners.rb +0 -0
  27. data/app/helpers/glib/json_ui/view_builder/fields.rb +3 -0
  28. data/app/helpers/glib/json_ui/view_builder/panels.rb +2 -0
  29. data/app/helpers/glib/urls_helper.rb +7 -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/dynamic_text_record.rb +0 -0
  33. data/app/models/glib/text.rb +0 -0
  34. data/app/policies/glib/application_policy.rb +27 -30
  35. data/app/validators/email_typo_validator.rb +0 -0
  36. data/app/validators/email_validator.rb +0 -0
  37. data/app/validators/url_validator.rb +0 -0
  38. data/app/views/app/views/json_ui/vue/renderer.html.erb +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 +21 -12
  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 +6 -0
  48. data/app/views/json_ui/garage/actions/index.json.jbuilder +0 -0
  49. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +0 -0
  50. data/app/views/json_ui/garage/forms/basic.json.jbuilder +0 -0
  51. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +0 -0
  52. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +0 -0
  53. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +9 -18
  54. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +0 -0
  55. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +25 -10
  56. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +5 -5
  57. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +0 -0
  58. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
  59. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +0 -0
  60. data/app/views/json_ui/garage/forms/index.json.jbuilder +0 -0
  61. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +6 -3
  62. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +0 -0
  63. data/app/views/json_ui/garage/forms/selects.json.jbuilder +0 -0
  64. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +0 -0
  65. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +0 -0
  66. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +0 -0
  67. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
  68. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
  69. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
  70. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +0 -0
  71. data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
  72. data/app/views/json_ui/garage/home/index.json.jbuilder +0 -0
  73. data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
  74. data/app/views/json_ui/garage/lists/_infinite_scroll_section.json.jbuilder +15 -5
  75. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +0 -0
  76. data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
  77. data/app/views/json_ui/garage/lists/index.json.jbuilder +0 -0
  78. data/app/views/json_ui/garage/lists/infinite_scroll.json.jbuilder +0 -0
  79. data/app/views/json_ui/garage/lists/templating.json.jbuilder +0 -0
  80. data/app/views/json_ui/garage/notifications/index.json.jbuilder +0 -43
  81. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +19 -21
  82. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +0 -0
  83. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
  84. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
  85. data/app/views/json_ui/garage/pages/index.json.jbuilder +0 -0
  86. data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
  87. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
  88. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +0 -0
  89. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +0 -0
  90. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
  91. data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
  92. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +0 -0
  93. data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
  94. data/app/views/json_ui/garage/panels/flow.json.jbuilder +0 -0
  95. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +0 -0
  96. data/app/views/json_ui/garage/panels/index.json.jbuilder +0 -0
  97. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
  98. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +0 -0
  99. data/app/views/json_ui/garage/panels/split.json.jbuilder +0 -0
  100. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +0 -0
  101. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
  102. data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
  103. data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
  104. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
  105. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
  106. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +39 -0
  107. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
  108. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +0 -0
  109. data/app/views/json_ui/garage/tables/index.json.jbuilder +3 -0
  110. data/app/views/json_ui/garage/tables/layout.json.jbuilder +0 -0
  111. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +1 -1
  112. data/app/views/json_ui/garage/views/banners.json.jbuilder +0 -0
  113. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +23 -27
  114. data/app/views/json_ui/garage/views/carousels.json.jbuilder +0 -0
  115. data/app/views/json_ui/garage/views/charts.json.jbuilder +0 -0
  116. data/app/views/json_ui/garage/views/images.json.jbuilder +0 -0
  117. data/app/views/json_ui/garage/views/index.json.jbuilder +0 -0
  118. data/app/views/json_ui/garage/views/links.json.jbuilder +0 -0
  119. data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
  120. data/app/views/json_ui/garage/views/misc.json.jbuilder +0 -0
  121. data/app/views/json_ui/garage/views/texts.json.jbuilder +0 -0
  122. data/config/routes.rb +0 -0
  123. data/lib/generators/glib/install_generator.rb +0 -0
  124. data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
  125. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
  126. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
  127. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
  128. data/lib/generators/templates/database.yml +0 -0
  129. data/lib/generators/templates/dynamic_text.rb +0 -0
  130. data/lib/glib-web.rb +0 -0
  131. data/lib/glib/crypt.rb +1 -1
  132. data/lib/glib/crypt/utils.rb +0 -0
  133. data/lib/glib/dynamic_text.rb +1 -1
  134. data/lib/glib/dynamic_text/config.rb +0 -0
  135. data/lib/glib/engine.rb +0 -0
  136. data/lib/glib/json_crawler.rb +1 -0
  137. data/lib/glib/json_crawler/action_crawler.rb +0 -0
  138. data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
  139. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +0 -0
  140. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -0
  141. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +1 -1
  142. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +1 -1
  143. data/lib/glib/json_crawler/coverage.rb +0 -0
  144. data/lib/glib/json_crawler/http.rb +11 -7
  145. data/lib/glib/json_crawler/router.rb +3 -2
  146. data/lib/glib/test_helpers.rb +1 -1
  147. data/lib/glib/value.rb +0 -0
  148. data/lib/glib/version.rb +0 -0
  149. data/lib/tasks/db.rake +0 -0
  150. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 92d880220ff29cbee352b8077c541e62b548796b4f1e7ef760f1f3b2967360be
4
- data.tar.gz: 8d2f3393a965980996dc0408859f130551d7c840a88bd11435ecb48ee64aba99
2
+ SHA1:
3
+ metadata.gz: 7d6201614facf8b8352af39682f255c003b37066
4
+ data.tar.gz: d69c8902174e35efb9c4fa0775bc32a800024f57
5
5
  SHA512:
6
- metadata.gz: a75416c64751c7b4680104e9bcd199bfec7945bf34a4e7cdc58f4fb9deadc16aa1a79e54e0d50dd3f968e133f6583f39fa0ef4979f2bff0e952eabf4ebc65593
7
- data.tar.gz: f9024d9668c9e6198db90494237f7ca0f2a87199fbe5c1c17d2410f3382b1cd6600c8862aeb700171ab08172704b59bfa6a93359cda6ba57a11bea77f2aa93f3
6
+ metadata.gz: 672842487e7541cf841b06892e463996e30a4a53a9489fdff1611267bf0fffbd4b30e847b55651a1f042b3328aed3eaa159d5104122f67a03f9913902b493357
7
+ data.tar.gz: 3b5c5b1a91b50e499ad68acac8d3b2059556471255f2c72817dc0dbe725735cb9fb3a589e4ee18f3ea26cc8ebed20412bfbf2fbd7622479b40a8760cb00ab459
@@ -1,6 +1,6 @@
1
1
  module Glib
2
2
  class HomeController < ApplicationController
3
- if glib_auth_inited?
3
+ if try(:glib_auth_inited?)
4
4
  skip_before_action :glib_load_resource
5
5
  skip_before_action :glib_authorize_resource
6
6
  end
@@ -0,0 +1,16 @@
1
+ module Glib
2
+ module AppFeatureSupportHelper
3
+ def glib_app_feature_supported?(name, app_version, dictionary)
4
+ device = (app_device_os || :default).to_sym
5
+
6
+ version = dictionary[name.to_sym].try(:[], device)
7
+ except = dictionary[name.to_sym].try(:[], :except).try(:[], device)
8
+
9
+ !version.nil? && (version == :all || glib_app_version_gte(version, app_version)) && (except.nil? || except.to_s != app_version)
10
+ end
11
+
12
+ def glib_app_version_gte(feature_version, app_version)
13
+ app_version.blank? || Gem::Version.new(app_version) >= Gem::Version.new(feature_version)
14
+ end
15
+ end
16
+ end
File without changes
File without changes
File without changes
@@ -2,6 +2,7 @@ class Glib::JsonUi::ActionBuilder
2
2
  module Windows
3
3
  class Close < Action
4
4
  action :onClose
5
+ # action :onAfterClose
5
6
  end
6
7
 
7
8
  class CloseAll < Action
@@ -41,6 +41,11 @@ module Glib
41
41
 
42
42
  class Custom < Thumbnail
43
43
  string :template
44
+
45
+ # TODO: Experimental
46
+ hash :extra
47
+
48
+ # TODO: Deprecate
44
49
  hash :data
45
50
  end
46
51
  end
File without changes
@@ -17,22 +17,27 @@ module Glib
17
17
  @__json_ui_page
18
18
  end
19
19
 
20
- # Use this only if you need to generate json independently from the current `json_ui_page`
21
- def json_ui_menu(&block)
22
- @__json_ui_menu_page ||= Page.new(Jbuilder.new, self)
23
- json = @__json_ui_menu_page.json
24
- json.nil!
25
- block&.call @__json_ui_menu_page.menu_builder
26
- json.attributes!
27
- end
28
-
29
- # Use this only if you need to generate json independently from the current `json_ui_page`
30
- def json_ui_panel(&block)
31
- @__json_ui_panel_page ||= Page.new(Jbuilder.new, self)
32
- json = @__json_ui_panel_page.json
33
- json.nil!
34
- block&.call @__json_ui_panel_page.view_builder
35
- json.attributes!
20
+ # # Use this only if you need to generate json independently from the current `json_ui_page`
21
+ # def json_ui_menu(&block)
22
+ # @__json_ui_menu_page ||= Page.new(Jbuilder.new, self)
23
+ # json = @__json_ui_menu_page.json
24
+ # json.nil!
25
+ # block&.call @__json_ui_menu_page.menu_builder
26
+ # json.attributes!
27
+ # end
28
+
29
+ # # Use this only if you need to generate json independently from the current `json_ui_page`
30
+ # def json_ui_panel(&block)
31
+ # @__json_ui_panel_page ||= Page.new(Jbuilder.new, self)
32
+ # json = @__json_ui_panel_page.json
33
+ # json.nil!
34
+ # block&.call @__json_ui_panel_page.view_builder
35
+ # json.attributes!
36
+ # end
37
+
38
+ def json_ui_section(json, &block)
39
+ @__json_ui_section ||= Page.new(json, self)
40
+ @__json_ui_section.list_section_builder
36
41
  end
37
42
 
38
43
  class Page
File without changes
@@ -104,6 +104,9 @@ class Glib::JsonUi::ViewBuilder
104
104
 
105
105
  class Check < Text
106
106
  string :uncheckValue
107
+ string :checkValue
108
+
109
+ # Where possible, use value instead of this
107
110
  bool :checked
108
111
  end
109
112
 
@@ -123,6 +123,8 @@ class Glib::JsonUi::ViewBuilder
123
123
  hash :nextPage
124
124
  hash :export
125
125
  hash :import
126
+ action :onScrollToTop
127
+ action :onScrollToBottom
126
128
 
127
129
  def firstSection(block)
128
130
  json.sections [1] do
@@ -0,0 +1,7 @@
1
+ module Glib
2
+ module UrlsHelper
3
+ def glib_url_current(new_params)
4
+ url_for(params.to_unsafe_h.merge(new_params.merge(only_path: false)))
5
+ end
6
+ end
7
+ end
File without changes
File without changes
File without changes
@@ -113,41 +113,17 @@ module Glib
113
113
  controller.policy_scope(record.class, policy_scope_class: policy_scope_class)
114
114
  end
115
115
 
116
- # TODO: Remove. Deprecated
117
- private # Used by child
118
- def public?
119
- true
120
- end
121
-
122
- private # Used by child
123
- def everyone
124
- true
125
- end
126
-
127
- # TODO: Deprecate `user()`
128
- private # Used by child
129
- def current_user
130
- user
131
- end
132
-
133
- # # TODO: Revise because it seems there is no justification for allowing owner to see any of the deleted entities, which include User, Guild, and Post
134
- # private # Used by child
135
- # def not_deleted_unless_owner_or_moderator?(&block)
136
- # block ||= lambda { |unused_arg| @user.moderator? }
137
- # !@record.deleted? || (@user && (@user.id == @record.user_owner_id || block.call(@record)))
138
- # end
139
-
140
- # private # Used by child
141
- # def not_deleted_unless_moderator?(&block)
142
- # block ||= lambda { |unused_arg| @user.moderator? }
143
- # !@record.deleted? || (@user && block.call(@record))
144
- # end
145
-
146
116
  public
147
117
  def self.args_builder
148
118
  Proc.new { |controller| [] }
149
119
  end
150
120
 
121
+ # TODO: Remove. Deprecated
122
+ # private # Used by child
123
+ # def public?
124
+ # true
125
+ # end
126
+
151
127
  class Scope
152
128
  attr_reader :user, :scope
153
129
 
@@ -156,9 +132,30 @@ module Glib
156
132
  @scope = scope
157
133
  end
158
134
 
135
+ # def current_user
136
+ # user
137
+ # end
138
+
139
+ # To be overridden
159
140
  def resolve
160
141
  scope.none
161
142
  end
162
143
  end
144
+
145
+ private # Used by child
146
+ def everyone
147
+ true
148
+ end
149
+
150
+ # def current_user
151
+ # user
152
+ # end
153
+
154
+ # TODO: Bad pattern. Implement explicit policy parameter instead.
155
+ # - E.g. can? :destroy, :service_subscription_auto_renewal, { service_subscription: @service_subscription }
156
+ # - E.g. super class: :service_subscription_auto_renewal, { service_subscription: @service_subscription }
157
+ def controller_var(name)
158
+ controller.instance_variable_get(:"@#{name}")
159
+ end
163
160
  end
164
161
  end
File without changes
File without changes
File without changes
@@ -79,17 +79,26 @@ section.rows builder: ->(template) do
79
79
  end
80
80
 
81
81
  template.thumbnail title: 'dialogs/oauth', onClick: ->(action) do
82
- provider = {
83
- name: "facebook",
84
- webRequestUrl: "https://www.facebook.com/v3.1/dialog/oauth?auth_type=rerequest&client_id=CLIENT_ID&redirect_uri=http%3A%2F%2Fwww.lvh.me%3A3000%2Foauth_callback%2Ffacebook&response_type=code&scope=email",
85
- requestUrl: "https://www.facebook.com/v3.1/dialog/oauth",
86
- clientId: "CLIENT_ID",
87
- redirectUrl: "http://www.lvh.me:3000/oauth_callback/facebook.json"
88
- }
89
-
90
- action.dialogs_oauth provider: provider, providerParamName: "session[oauth_provider]", callbackUrlParamName: "session[[oauth_callback_url]", onSuccess: ->(action) do
91
- action.http_post url: 'TODO: post params to server'
82
+ if respond_to?(:user_facebook_omniauth_authorize_url)
83
+ provider = {
84
+ name: 'facebook',
85
+ webRequestUrl: user_facebook_omniauth_authorize_url(format: nil, _render: nil),
86
+ requestUrl: user_facebook_omniauth_authorize_url(format: nil),
87
+ clientId: Devise.omniauth_configs[:facebook].strategy[:client_id],
88
+ permissions: Devise.omniauth_configs[:facebook].strategy[:scope],
89
+ redirectUrl: user_facebook_omniauth_callback_url(format: nil)
90
+ }
91
+ action.dialogs_oauth provider: provider, providerParamName: 'session[oauth_provider]', callbackUrlParamName: 'session[[oauth_callback_url]', onSuccess: ->(subaction) do
92
+ subaction.http_post url: json_ui_garage_url(path: 'actions/dialogs_oauth_post'), formData: {
93
+ authenticity_token: form_authenticity_token
94
+ }
95
+ end
96
+ else
97
+ action.dialogs_alert message: 'To enable this, set up omniauth using devise'
98
+ # E.g.
99
+ # Add `devise :omniauthable, omniauth_providers: %i[facebook]` to user.rb
100
+ # Add `gem 'omniauth-facebook'` to Gemfile
101
+ # Add `config.omniauth :facebook` to devise.rb
92
102
  end
93
103
  end
94
-
95
- end
104
+ end
@@ -0,0 +1,6 @@
1
+ facebook_graph = Koala::Facebook::API.new(params[:credentials][:token])
2
+ profile = facebook_graph.get_object('me')
3
+
4
+ json_ui_response json do |action|
5
+ action.dialogs_alert message: profile
6
+ end
@@ -10,7 +10,8 @@ json_ui_page json do |page|
10
10
  value = [
11
11
  {
12
12
  'question': 'Punctuality',
13
- 'type': 'rating'
13
+ 'type': 'rating',
14
+ 'enabled': '1'
14
15
  },
15
16
  {
16
17
  'question': 'Quality of work',
@@ -21,30 +22,20 @@ json_ui_page json do |page|
21
22
  'type': 'yes_no'
22
23
  }
23
24
  ]
24
- # form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, groupTitlePrefix: 'Entry', groupTemplateViews: ->(group) do
25
- # group.spacer height: 10
26
- # group.fields_text width: 'matchParent', name: 'question', label: 'Question'
27
- # group.fields_text width: 'matchParent', name: 'type', label: 'Answer type'
28
- # end
29
-
30
- # form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, group: ->(group) do
31
- # group.titlePrefix 'Entry'
32
- # group.template childViews: ->(template) do
33
- # template.spacer height: 10
34
- # template.fields_text width: 'matchParent', name: 'question', label: 'Question'
35
- # template.fields_text width: 'matchParent', name: 'type', label: 'Answer type'
36
- # end
37
- # end
38
25
 
39
26
  form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, titlePrefix: 'Entry', content: ->(group) do
40
27
  group.template padding: { left: 32 }, childViews: ->(template) do
41
28
  template.spacer height: 10
42
- template.fields_text width: 'matchParent', name: 'question', label: 'Question'
43
- template.fields_text width: 'matchParent', name: 'type', label: 'Answer type'
29
+ template.fields_text width: 'matchParent', name: 'question', label: 'Question', placeholder: 'Question'
30
+ options = [ :rating, :yes_no ]
31
+ template.fields_select width: 'matchParent', name: 'type', label: 'Answer Type', placeholder: 'Answer Type', options: options.map { |o| { text: o.to_s.humanize, value: o } }
32
+ template.fields_check width: 'matchParent', name: 'enabled', label: 'Enable', checkValue: '1'
33
+
34
+ template.spacer height: 14
44
35
  end
45
36
  end
46
37
 
47
38
  form.spacer height: 20
48
- form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
39
+ form.fields_submit text: 'Submit'
49
40
  end
50
41
  end
@@ -6,18 +6,33 @@ if page < 2
6
6
  json.nextPageUrl json_ui_garage_url(path: 'forms/dynamic_select_data', page: page + 1)
7
7
  end
8
8
 
9
- json.rows do
9
+ # json.rows do
10
10
 
11
+ # count_per_page = 20
12
+ # count_per_page.times do |i|
13
+ # json.child! do
14
+ # index = page * count_per_page + i
15
+ # json.template 'thumbnail'
16
+ # json.title "City #{index} (#{params[:q]})"
17
+ # json.subtitle "State #{index}"
18
+ # json.subsubtitle "Country #{index}"
19
+ # json.value "id#{index}"
20
+ # json.text "Item #{index}"
21
+ # end
22
+ # end
23
+ # end
24
+
25
+ section = json_ui_section json
26
+ section.rows builder: ->(row) do
11
27
  count_per_page = 20
12
28
  count_per_page.times do |i|
13
- json.child! do
14
- index = page * count_per_page + i
15
- json.template 'thumbnail'
16
- json.title "City #{index} (#{params[:q]})"
17
- json.subtitle "State #{index}"
18
- json.subsubtitle "Country #{index}"
19
- json.value "id#{index}"
20
- json.text "Item #{index}"
21
- end
29
+ index = page * count_per_page + i
30
+ row.custom title: "City #{index} (#{params[:q]})",
31
+ subtitle: "State #{index}",
32
+ subsubtitle: "Country #{index}",
33
+ extra: {
34
+ value: "id#{index}",
35
+ text: "Item #{index}"
36
+ }
22
37
  end
23
38
  end
@@ -8,18 +8,18 @@ options = {
8
8
 
9
9
  json_ui_page json do |page|
10
10
  render "#{@path_prefix}/nav_menu", json: json, page: page
11
-
11
+
12
12
  page.form options.merge(childViews: ->(form) do
13
13
  rules1 = { fileType: "image/*", maxFileSize: 5000 }
14
14
  rules2 = { fileType: "image/*", maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
15
- form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Photo', accepts: rules1, directUploadUrl: rails_direct_uploads_url,
15
+ form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Landscape Photo', accepts: rules1, directUploadUrl: rails_direct_uploads_url,
16
16
  value: 'eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4',
17
17
  fileUrl: 'https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100',
18
18
  fileTitle: '1 month ago',
19
- placeholderView: { type: 'image', width: 100, height: 100 }
19
+ placeholderView: { type: 'image', width: 100, height: 75, url: 'https://www.atms.com.au/wp-content/uploads/2019/10/placeholder-1-1024x683.png?x93630' }
20
20
 
21
- form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Photo', accepts: rules2, directUploadUrl: rails_direct_uploads_url,
22
- placeholderView: { type: 'avatar', width: 100, height: 100 }
21
+ form.fields_file name: 'user[photo][]', width: 'matchParent', label: 'Avatar', accepts: rules2, directUploadUrl: rails_direct_uploads_url,
22
+ placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
23
23
 
24
24
  form.fields_submit text: 'Submit'
25
25
  # form.button text: 'Submit', onClick: ->(action) { action.forms_submit }