glib-web 0.15.0 → 0.15.1

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: 884f9ef9236368bb5739d56715d0aca1196e6d85f905ad258aaf2d7942333d07
4
- data.tar.gz: 3c870f312d7cb7b921ca4ff244d247d7c9b7e7f94ae359cd93696f6544c9682c
3
+ metadata.gz: 6ee300b7e05299ffaed9427513fada06ef2f248c68f8329bc6d07de7faf947a0
4
+ data.tar.gz: 8c11c15ae46e15b7fcfaf5c43744fbe2f872a6b6ea2e185e75f882759473c3db
5
5
  SHA512:
6
- metadata.gz: 34f43053111cf3304a15a0311fc0b85031554b7a0c3be65b7795ebab0d438850ad7550eb977c33cc099ba09ea2d06258880aed767b89398b6fe2a8d80327f7f9
7
- data.tar.gz: f332e88b5d80b56c7b5fef95fce6551a7ca13a1a7a05b71626161b344d02f594a98c74b19e97d3247e4260c0cb5ab208ec83ac21d516d9ceb644706ddf1d6542
6
+ metadata.gz: 4b97228f7f53ea4f1fb86877c08c1cecadf12aaee9536e2ee8488eed58ffff4502c253984c9bc38d0e7df839e46283a5ac5aebbc6b63de63dcc98fa968e77bd6
7
+ data.tar.gz: b5a3e5a45469e5486465a7b5f3c12400d15ade17bcee01c237528cda747b404478cbc500347b5442992a1a8ae84efd0895f8fb9eefa4ef91493a340977d0df6a
@@ -39,12 +39,22 @@ module Glib::Json::Traversal
39
39
  @forms = []
40
40
  end
41
41
 
42
- def parse_page(spec)
43
- if (form = spec['fullPageForm'])
42
+ def fullPageForm(spec)
43
+ spec['fullPageForm']
44
+ end
45
+
46
+ def begin_page(spec)
47
+ if (form = fullPageForm(spec))
44
48
  @forms << form
45
49
  end
46
50
  end
47
51
 
52
+ def end_page(spec)
53
+ if fullPageForm(spec)
54
+ @forms.pop
55
+ end
56
+ end
57
+
48
58
  def traverse_multiple(views, block)
49
59
  if views.is_a? Array
50
60
  views.each do |view|
@@ -139,6 +139,7 @@ module Glib
139
139
 
140
140
  int :size
141
141
  string :url
142
+ string :base64Data
142
143
  action :onClick
143
144
  end
144
145
 
@@ -12,5 +12,17 @@ end
12
12
  page.footer padding: glib_json_padding_body, backgroundColor: '#b3bac2', childViews: ->(footer) do
13
13
  footer.label text: 'This button will submit the form above because this whole page is wrapped in a giant form.'
14
14
  footer.spacer height: 6
15
- footer.fields_submit text: 'Submit'
15
+
16
+ footer.panels_split width: 'matchParent', content: ->(content) do
17
+ content.left childViews: ->(left) do
18
+ left.panels_horizontal height: 'matchParent', align: 'middle', childViews: ->(horizontal) do
19
+ horizontal.label styleClass: 'link', text: 'Open Nested Form', onClick: ->(action) do
20
+ action.dialogs_open url: json_ui_garage_url(path: 'forms/full_page_form_dialog', mode: 'dialog')
21
+ end
22
+ end
23
+ end
24
+ content.right childViews: ->(right) do
25
+ right.fields_submit text: 'Submit'
26
+ end
27
+ end
16
28
  end
@@ -0,0 +1,21 @@
1
+ json.title 'Forms'
2
+
3
+ page = json_ui_page json
4
+
5
+ render "#{@path_prefix}/nav_menu", json: json, page: page
6
+
7
+ page.form url: json_ui_garage_url(path: 'forms/basic_post?id=dialog'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
8
+ form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
9
+ form.fields_password name: 'user[password]', width: 'matchParent', label: 'Password'
10
+ end
11
+
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
15
+
16
+ footer.panels_split width: 'matchParent', content: ->(content) do
17
+ content.right childViews: ->(right) do
18
+ right.fields_submit text: 'Submit'
19
+ end
20
+ end
21
+ end
@@ -36,31 +36,69 @@ page.scroll childViews: ->(scroll) do
36
36
  group.fields_radio value: 'alert_close', label: 'alert+close - useful for non-model form (e.g. contact us)'
37
37
  end
38
38
 
39
- form.spacer height: 14
39
+ form.spacer height: 6
40
40
  form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
41
41
  end
42
42
 
43
+ scroll.spacer height: 14
43
44
  scroll.panels_form \
45
+ width: 'matchParent',
44
46
  url: json_ui_garage_url(path: 'forms/generic_post'),
45
47
  method: 'post',
46
48
  padding: { top: 12, left: 20, right: 20, bottom: 12 },
47
49
  childViews: ->(form) do
48
50
  form.h3 text: 'Perform custom actions on submit'
51
+ form.spacer height: 6
52
+ form.label text: 'This also works when you press ENTER in the following text fields'
53
+ form.spacer height: 6
49
54
 
50
- form.fields_text width: 'matchParent', styleClass: 'outlined', name: 'user[text]', value: 'Hello'
51
-
52
- form.spacer height: 14
53
- # form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
55
+ form.fields_text width: 'matchParent', styleClass: 'outlined', name: 'user[first_name]', value: 'Jane'
56
+ form.fields_text width: 'matchParent', styleClass: 'outlined', name: 'user[last_name]', value: 'Doe'
54
57
 
58
+ form.spacer height: 6
55
59
  form.fields_submit text: 'Submit'
56
60
  end,
57
61
  onSubmit: ->(action) do
58
- # action.forms_submit
59
-
60
62
  action.dialogs_alert \
61
63
  message: 'The form will submit after the dialog is closed',
62
64
  onClose: ->(subaction) do
63
65
  subaction.forms_submit
64
66
  end
65
67
  end
68
+
69
+ scroll.spacer height: 14
70
+ scroll.panels_form \
71
+ width: 'matchParent',
72
+ url: json_ui_garage_url(path: 'forms/generic_post'),
73
+ method: 'post',
74
+ padding: { top: 12, left: 20, right: 20, bottom: 12 },
75
+ childViews: ->(form) do
76
+ form.h3 text: 'Submit without using a submit button'
77
+ form.spacer height: 6
78
+ form.label text: 'Note: In general using a submit button is better because it will allow the browser to handle the form functionality in a consistent manner.'
79
+ form.spacer height: 6
80
+ form.label text: 'For example, without a submit button, you cannot submit the form by pressing ENTER in the following text fields'
81
+ form.spacer height: 6
82
+
83
+ form.fields_text width: 'matchParent', styleClass: 'outlined', name: 'user[first_name]', value: 'John'
84
+ form.fields_text width: 'matchParent', styleClass: 'outlined', name: 'user[last_name]', value: 'Doe'
85
+
86
+ form.spacer height: 6
87
+
88
+ form.panels_split width: 'matchParent', content: ->(split) do
89
+ split.left childViews: ->(left) do
90
+ left.panels_horizontal height: 'matchParent', align: 'middle', childViews: ->(horizontal) do
91
+ horizontal.label text: 'Submit using label', onClick: ->(subaction) do
92
+ subaction.forms_submit
93
+ end
94
+ end
95
+ end
96
+
97
+ split.right childViews: ->(right) do
98
+ right.banners_select width: 'matchParent', message: 'Banner Menu', buttons: ->(menu) do
99
+ menu.button text: 'Submit using banner', onClick: ->(action) { action.forms_submit }
100
+ end
101
+ end
102
+ end
103
+ end
66
104
  end
@@ -4,6 +4,22 @@ json.title 'Lists'
4
4
 
5
5
  render "#{@path_prefix}/nav_menu", json: json, page: page
6
6
 
7
+ tab_index = params[:tab].to_i
8
+
9
+ page.header childViews: ->(header) do
10
+ # Allow navigating to another "edit mode" page to test reuse issues.
11
+ header.tabBar buttons: ->(menu) do
12
+ ['FIRST', 'SECOND'].each_with_index do |text, index|
13
+ menu.button \
14
+ text: text,
15
+ disabled: tab_index == index,
16
+ onClick: ->(action) do
17
+ action.windows_reload url: json_ui_garage_url(path: 'lists/edit_mode', tab: index)
18
+ end
19
+ end
20
+ end
21
+ end
22
+
7
23
  page.form \
8
24
  width: 'matchParent',
9
25
  url: json_ui_garage_url(path: 'forms/generic_post'),
@@ -34,7 +50,8 @@ page.form \
34
50
  section.rows builder: ->(row) do
35
51
  batch_count = 20
36
52
  batch_count.times do |index|
37
- row.thumbnail title: "Item #{index}", recordId: "PK_#{index}"
53
+ id = (batch_count * tab_index) + index
54
+ row.thumbnail title: "Item #{id}", recordId: "PK_#{id}"
38
55
  end
39
56
  end
40
57
  end
@@ -19,13 +19,19 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
19
19
  url: glib_json_image_avatar_url,
20
20
  badge: { text: '1', backgroundColor: '#0000ff' }
21
21
 
22
+ base64_data = 'data:image/gif;base64,R0lGODlhPQBEAPeoAJosM//AwO/AwHVYZ/z595kzAP/s7P+goOXMv8+fhw/v739/f+8PD98fH/8mJl+fn/9ZWb8/PzWlwv///6wWGbImAPgTEMImIN9gUFCEm/gDALULDN8PAD6atYdCTX9gUNKlj8wZAKUsAOzZz+UMAOsJAP/Z2ccMDA8PD/95eX5NWvsJCOVNQPtfX/8zM8+QePLl38MGBr8JCP+zs9myn/8GBqwpAP/GxgwJCPny78lzYLgjAJ8vAP9fX/+MjMUcAN8zM/9wcM8ZGcATEL+QePdZWf/29uc/P9cmJu9MTDImIN+/r7+/vz8/P8VNQGNugV8AAF9fX8swMNgTAFlDOICAgPNSUnNWSMQ5MBAQEJE3QPIGAM9AQMqGcG9vb6MhJsEdGM8vLx8fH98AANIWAMuQeL8fABkTEPPQ0OM5OSYdGFl5jo+Pj/+pqcsTE78wMFNGQLYmID4dGPvd3UBAQJmTkP+8vH9QUK+vr8ZWSHpzcJMmILdwcLOGcHRQUHxwcK9PT9DQ0O/v70w5MLypoG8wKOuwsP/g4P/Q0IcwKEswKMl8aJ9fX2xjdOtGRs/Pz+Dg4GImIP8gIH0sKEAwKKmTiKZ8aB/f39Wsl+LFt8dgUE9PT5x5aHBwcP+AgP+WltdgYMyZfyywz78AAAAAAAD///8AAP9mZv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKgALAAAAAA9AEQAAAj/AFEJHEiwoMGDCBMqXMiwocAbBww4nEhxoYkUpzJGrMixogkfGUNqlNixJEIDB0SqHGmyJSojM1bKZOmyop0gM3Oe2liTISKMOoPy7GnwY9CjIYcSRYm0aVKSLmE6nfq05QycVLPuhDrxBlCtYJUqNAq2bNWEBj6ZXRuyxZyDRtqwnXvkhACDV+euTeJm1Ki7A73qNWtFiF+/gA95Gly2CJLDhwEHMOUAAuOpLYDEgBxZ4GRTlC1fDnpkM+fOqD6DDj1aZpITp0dtGCDhr+fVuCu3zlg49ijaokTZTo27uG7Gjn2P+hI8+PDPERoUB318bWbfAJ5sUNFcuGRTYUqV/3ogfXp1rWlMc6awJjiAAd2fm4ogXjz56aypOoIde4OE5u/F9x199dlXnnGiHZWEYbGpsAEA3QXYnHwEFliKAgswgJ8LPeiUXGwedCAKABACCN+EA1pYIIYaFlcDhytd51sGAJbo3onOpajiihlO92KHGaUXGwWjUBChjSPiWJuOO/LYIm4v1tXfE6J4gCSJEZ7YgRYUNrkji9P55sF/ogxw5ZkSqIDaZBV6aSGYq/lGZplndkckZ98xoICbTcIJGQAZcNmdmUc210hs35nCyJ58fgmIKX5RQGOZowxaZwYA+JaoKQwswGijBV4C6SiTUmpphMspJx9unX4KaimjDv9aaXOEBteBqmuuxgEHoLX6Kqx+yXqqBANsgCtit4FWQAEkrNbpq7HSOmtwag5w57GrmlJBASEU18ADjUYb3ADTinIttsgSB1oJFfA63bduimuqKB1keqwUhoCSK374wbujvOSu4QG6UvxBRydcpKsav++Ca6G8A6Pr1x2kVMyHwsVxUALDq/krnrhPSOzXG1lUTIoffqGR7Goi2MAxbv6O2kEG56I7CSlRsEFKFVyovDJoIRTg7sugNRDGqCJzJgcKE0ywc0ELm6KBCCJo8DIPFeCWNGcyqNFE06ToAfV0HBRgxsvLThHn1oddQMrXj5DyAQgjEHSAJMWZwS3HPxT/QMbabI/iBCliMLEJKX2EEkomBAUCxRi42VDADxyTYDVogV+wSChqmKxEKCDAYFDFj4OmwbY7bDGdBhtrnTQYOigeChUmc1K3QTnAUfEgGFgAWt88hKA6aCRIXhxnQ1yg3BCayK44EWdkUQcBByEQChFXfCB776aQsG0BIlQgQgE8qO26X1h8cEUep8ngRBnOy74E9QgRgEAC8SvOfQkh7FDBDmS43PmGoIiKUUEGkMEC/PJHgxw0xH74yx/3XnaYRJgMB8obxQW6kL9QYEJ0FIFgByfIL7/IQAlvQwEpnAC7DtLNJCKUoO/w45c44GwCXiAFB/OXAATQryUxdN4LfFiwgjCNYg+kYMIEFkCKDs6PKAIJouyGWMS1FSKJOMRB/BoIxYJIUXFUxNwoIkEKPAgCBZSQHQ1A2EWDfDEUVLyADj5AChSIQW6gu10bE/JG2VnCZGfo4R4d0sdQoBAHhPjhIB94v/wRoRKQWGRHgrhGSQJxCS+0pCZbEhAAOw=='
23
+
24
+ scroll.h2 text: 'Avatar with base64 data '
25
+ scroll.spacer height: 6
26
+ scroll.avatar \
27
+ base64Data: base64_data
28
+
22
29
  scroll.spacer height: 20
23
30
  scroll.h2 text: 'Image with base64 data'
24
31
  scroll.spacer height: 6
25
32
  scroll.image \
26
- height: 100,
27
33
  tooltip: { text: 'This is a tooltip' },
28
- base64Data: 'data:image/gif;base64,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'
34
+ base64Data: base64_data
29
35
 
30
36
  scroll.spacer height: 20
31
37
  scroll.h2 text: 'QR Code as base64 image'
@@ -8,7 +8,7 @@ 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)
11
+ @http.router.begin_page(json)
12
12
 
13
13
  crawl json['header']&.[]('childViews')
14
14
  crawl json['body']&.[]('childViews')
@@ -27,6 +27,8 @@ module Glib
27
27
  if (on_load = (args.fetch('onLoad', nil)))
28
28
  perform(on_load)
29
29
  end
30
+
31
+ @http.router.end_page(json)
30
32
  end
31
33
  end
32
34
  end
@@ -94,9 +94,14 @@ module Glib
94
94
  @visitor.traverse_multiple views, block
95
95
  end
96
96
 
97
- def parse_page(spec)
97
+ def begin_page(spec)
98
98
  @page_spec = spec
99
- @visitor.parse_page spec
99
+ @visitor.begin_page spec
100
+ end
101
+
102
+ def end_page(spec)
103
+ @page_spec = nil
104
+ @visitor.end_page spec
100
105
  end
101
106
 
102
107
  def allowed?(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.15.0
4
+ version: 0.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -154,6 +154,7 @@ files:
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
156
  - app/views/json_ui/garage/forms/full_page_form.json.jbuilder
157
+ - app/views/json_ui/garage/forms/full_page_form_dialog.json.jbuilder
157
158
  - app/views/json_ui/garage/forms/generic_post.json.jbuilder
158
159
  - app/views/json_ui/garage/forms/index.json.jbuilder
159
160
  - app/views/json_ui/garage/forms/local_request.json.jbuilder