glib-web 0.14.2 → 0.15.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0baa732034691c909ee78b5633077586e67f5b55f8618338c5da6d057c573223
4
- data.tar.gz: 0e64bbf1a81a5a2a65616e9c49603b2f15cf3b02fa10c407d595e0ad533aa151
3
+ metadata.gz: 884f9ef9236368bb5739d56715d0aca1196e6d85f905ad258aaf2d7942333d07
4
+ data.tar.gz: 3c870f312d7cb7b921ca4ff244d247d7c9b7e7f94ae359cd93696f6544c9682c
5
5
  SHA512:
6
- metadata.gz: 8a013f8cb0b04c3a25cbe5d24040ff1b3a15e8037c81b6ef5d10f1aec864860739a9e864482d937f12142e9917f0aea036cb3e6c4175d2367b1180736126534a
7
- data.tar.gz: ac9da570bc331ff64d35ac2ce511f29ead17cdf1beab0b67b4cadbfc15c7c7b98e0429431ba2c4992a1b9d856bc98b575a727a3cd524bf2e4836fe04fd18e6dd
6
+ metadata.gz: 34f43053111cf3304a15a0311fc0b85031554b7a0c3be65b7795ebab0d438850ad7550eb977c33cc099ba09ea2d06258880aed767b89398b6fe2a8d80327f7f9
7
+ data.tar.gz: f332e88b5d80b56c7b5fef95fce6551a7ca13a1a7a05b71626161b344d02f594a98c74b19e97d3247e4260c0cb5ab208ec83ac21d516d9ceb644706ddf1d6542
@@ -39,6 +39,12 @@ module Glib::Json::Traversal
39
39
  @forms = []
40
40
  end
41
41
 
42
+ def parse_page(spec)
43
+ if (form = spec['fullPageForm'])
44
+ @forms << form
45
+ end
46
+ end
47
+
42
48
  def traverse_multiple(views, block)
43
49
  if views.is_a? Array
44
50
  views.each do |view|
@@ -174,9 +174,19 @@ module Glib
174
174
  end
175
175
 
176
176
  def form(options = {})
177
- scroll childViews: ->(scroll) do
178
- @view_builder.add_view('panels_form', options.reverse_merge(width: 'matchParent'))
177
+ form = Glib::JsonUi::ViewBuilder::Panels::Form.new(json, self)
178
+ form.childViews(->(view_builder) {})
179
+ panel_options = options.slice!(:url, :method, :local, :onSubmit, :paramNameForFormData, :model)
180
+
181
+ json.fullPageForm do
182
+ json.view 'panels/fullPageForm'
183
+ form.props(options)
179
184
  end
185
+
186
+ # So that the containing fields have context (e.g. can use form's model for naming).
187
+ self.current_form = form
188
+ scroll panel_options
189
+ self.current_form = nil
180
190
  end
181
191
 
182
192
  def data(options = {})
@@ -16,25 +16,18 @@ module Glib
16
16
  end
17
17
 
18
18
  json.onResponse do
19
- response = Response.new(json, self, true)
19
+ response = Glib::JsonUi::PageHelper::Page.new(json, self)
20
20
  yield response.action_builder
21
21
  end
22
22
  end
23
23
 
24
24
  class Response
25
- attr_reader :action_builder, :view_builder, :list_section_builder, :table_section_builder, :current_form
25
+ attr_reader :action_builder
26
26
 
27
- def initialize(json, context, with_view_builder = false)
27
+ def initialize(json, context)
28
28
  @json = json
29
29
  @context = context
30
-
31
30
  @action_builder = ActionBuilder.new(json, self, false)
32
-
33
- if with_view_builder
34
- @view_builder = ViewBuilder.new(json, self, true)
35
- @list_section_builder = ListBuilders::Section.new(json, self, ListBuilders::Template.new(json, self))
36
- @table_section_builder = TableBuilders::Section.new(json, self, TableBuilders::Template.new(json, self))
37
- end
38
31
  end
39
32
  end
40
33
  end
@@ -24,7 +24,6 @@ module Glib
24
24
  end
25
25
 
26
26
  class View < JsonUiElement
27
- string :compId
28
27
  string :id
29
28
  length :width
30
29
  length :height
@@ -4,16 +4,13 @@ page = json_ui_page json
4
4
 
5
5
  render "#{@path_prefix}/nav_menu", json: json, page: page
6
6
 
7
- # The form will be automatically injected into the window.
8
- #page.template 'full_window_form'
9
-
10
- # TODO: This needs to produce page-level form attributes
11
7
  page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
12
- # page.scroll padding: glib_json_padding_body, childViews: ->(form) do
13
8
  form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
14
9
  form.fields_password name: 'user[password]', width: 'matchParent', label: 'Password'
15
10
  end
16
11
 
17
12
  page.footer padding: glib_json_padding_body, backgroundColor: '#b3bac2', childViews: ->(footer) do
13
+ footer.label text: 'This button will submit the form above because this whole page is wrapped in a giant form.'
14
+ footer.spacer height: 6
18
15
  footer.fields_submit text: 'Submit'
19
16
  end
@@ -91,11 +91,11 @@ page.list sections: [
91
91
  action.windows_open url: json_ui_garage_url(path: 'forms/styled_boxes')
92
92
  end
93
93
  end
94
- # section.rows builder: ->(template) do
95
- # template.thumbnail title: 'Full Window', onClick: ->(action) do
96
- # action.windows_open url: json_ui_garage_url(path: 'forms/full_window_form')
97
- # end
98
- # end
94
+ section.rows builder: ->(template) do
95
+ template.thumbnail title: 'Full Page', onClick: ->(action) do
96
+ action.windows_open url: json_ui_garage_url(path: 'forms/full_page_form')
97
+ end
98
+ end
99
99
  end, ->(section) do
100
100
  section.header padding: glib_json_padding_list, childViews: ->(header) do
101
101
  header.h2 text: 'Web Only'
@@ -152,3 +152,72 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
152
152
  form.fields_submit text: 'Submit'
153
153
  form.spacer height: 40
154
154
  end
155
+
156
+ # if text.length > 100
157
+ # inner_column.panels_form local: true, childViews: ->(form) do
158
+ # form.markdown \
159
+ # text: text,
160
+ # styleClasses: ['many-line'],
161
+ # showIf: {
162
+ # "!=": [
163
+ # {
164
+ # "var": 'expand[bundle_description]'
165
+ # },
166
+ # 'expand'
167
+ # ]
168
+ # }
169
+ # form.markdown \
170
+ # text: text,
171
+ # showIf: {
172
+ # "==": [
173
+ # {
174
+ # "var": 'expand[bundle_description]'
175
+ # },
176
+ # 'expand'
177
+ # ]
178
+ # }
179
+ # form.fields_check \
180
+ # width: 'matchParent',
181
+ # offIcon: 'expand_more',
182
+ # onIcon: 'expand_less',
183
+ # label: 'Read more',
184
+ # onLabel: 'Read less',
185
+ # checkValue: 'expand',
186
+ # uncheckValue: nil,
187
+ # name: 'expand[bundle_description]',
188
+ # disableDirtyCheck: true
189
+ # end
190
+ # else
191
+ # inner_column.markdown text: text
192
+ # end
193
+
194
+ # panel.panels_form width: 'matchParent', childViews: ->(visibility) do
195
+ # state = {
196
+ # has_content: false
197
+ # }
198
+ # style_classes ||= nil
199
+ # style_class ||= nil
200
+ # padding ||= nil
201
+ # id ||= nil
202
+
203
+ # visibility.banners_select \
204
+ # id: id,
205
+ # width: 'matchParent',
206
+ # styleClass: style_class || (style_classes ? nil : 'warning'),
207
+ # message: message,
208
+ # padding: padding,
209
+ # buttons: ->(menu) do
210
+ # yield(menu, state)
211
+ # end,
212
+ # showIf: {
213
+ # "==": [
214
+ # {
215
+ # "var": 'banner'
216
+ # },
217
+ # 'show'
218
+ # ]
219
+ # }
220
+ # visibility.fields_hidden name: 'banner', value: state[:has_content] ? 'show' : 'hide'
221
+ # end
222
+
223
+
@@ -1,3 +1,4 @@
1
+
1
2
  module Glib
2
3
  module JsonCrawler
3
4
  class FormsSubmit < ActionCrawler
@@ -24,7 +25,18 @@ module Glib
24
25
  url = view['url']
25
26
  fields = []
26
27
  params = {}
27
- @http.router.crawl_multiple view['childViews'], ->(child) do
28
+ child_views = view['childViews'] || []
29
+
30
+ # If this form is page level, we need to check the child views of the entire page.
31
+ if view['view'] == 'panels/fullPageForm'
32
+ child_views += @http.router.page_spec['header']&.[]('childViews') || []
33
+ child_views += @http.router.page_spec['body']&.[]('childViews') || []
34
+ child_views += @http.router.page_spec['footer']&.[]('childViews') || []
35
+ end
36
+
37
+ @http.router.crawl_multiple child_views, ->(child) do
38
+ next if child['template'].present?
39
+
28
40
  name = child['view']
29
41
  if name.start_with?('fields/')
30
42
  fields << child
@@ -8,6 +8,8 @@ module Glib
8
8
  json = @http.get(url, action, args.except('url'))
9
9
 
10
10
  unless json.nil?
11
+ @http.router.parse_page(json)
12
+
11
13
  crawl json['header']&.[]('childViews')
12
14
  crawl json['body']&.[]('childViews')
13
15
  crawl json['footer']&.[]('childViews')
@@ -1,7 +1,7 @@
1
1
  module Glib
2
2
  module JsonCrawler
3
3
  class Router
4
- attr_reader :read_only_actions, :logger
4
+ attr_reader :read_only_actions, :logger, :page_spec
5
5
  attr_accessor :host
6
6
 
7
7
  def log(action, url, response = nil)
@@ -19,6 +19,7 @@ module Glib
19
19
  @read_only_actions = Set.new
20
20
  # default rails's development host
21
21
  @host ||= 'localhost:3000'
22
+ @page_spec = nil
22
23
  end
23
24
 
24
25
  def step(http, args)
@@ -53,7 +54,8 @@ module Glib
53
54
  JsonCrawler::NavInitiate.new(http, params, action)
54
55
  when 'runMultiple-v1', 'runMultiple'
55
56
  JsonCrawler::RunMultiple.new(http, params, action)
56
- when 'windows/open-v1', 'dialogs/open-v1', 'windows/reload-v1', 'windows/open', 'dialogs/open', 'windows/reload', 'windows/openWeb', 'windows/openWeb-v1'
57
+ when 'windows/open-v1', 'dialogs/open-v1', 'windows/reload-v1', 'windows/open',
58
+ 'dialogs/open', 'windows/reload', 'windows/openWeb', 'windows/openWeb-v1'
57
59
  if allowed?(params['url'])
58
60
  @read_only_actions.add([action, params['url']])
59
61
  JsonCrawler::WindowsOpen.new(http, params, action)
@@ -66,7 +68,6 @@ module Glib
66
68
  JsonCrawler::ActionHttp.new(:post, http, params, action)
67
69
  when 'forms/submit-v1', 'forms/submit'
68
70
  forms = @visitor.forms
69
- # raise 'Submit action needs to be inside a form' if forms.size < 1
70
71
  JsonCrawler::FormsSubmit.new(http, forms.last)
71
72
  else
72
73
  unless [
@@ -93,6 +94,11 @@ module Glib
93
94
  @visitor.traverse_multiple views, block
94
95
  end
95
96
 
97
+ def parse_page(spec)
98
+ @page_spec = spec
99
+ @visitor.parse_page spec
100
+ end
101
+
96
102
  def allowed?(url)
97
103
  regex = Regexp.new("#{host}.+(?<!\.pdf)$")
98
104
  regex.match(url)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glib-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.2
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -153,7 +153,7 @@ files:
153
153
  - app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder
154
154
  - app/views/json_ui/garage/forms/file_upload.json.jbuilder
155
155
  - app/views/json_ui/garage/forms/floating_submit.json.jbuilder
156
- - app/views/json_ui/garage/forms/full_window_form.json.jbuilder
156
+ - app/views/json_ui/garage/forms/full_page_form.json.jbuilder
157
157
  - app/views/json_ui/garage/forms/generic_post.json.jbuilder
158
158
  - app/views/json_ui/garage/forms/index.json.jbuilder
159
159
  - app/views/json_ui/garage/forms/local_request.json.jbuilder