glib-web 0.14.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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