glib-web 0.13.1 → 0.14.3

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: c216d9d31f88411766f7e38ec86bf4e993032c487562a33728a972587ee5a8ad
4
- data.tar.gz: fb975c7d55c06b0db38dba2df8c2756ba62d6b79a13d678d36901cd590428872
3
+ metadata.gz: a291c995ace4d47df8d25452fb05610864b635e2b9d5389cc8355350d3deef22
4
+ data.tar.gz: 74ae4397312a86bca319d08e21f06d166d27ac98e4e5bb7181e8d18877a70eed
5
5
  SHA512:
6
- metadata.gz: f406a24519cf923a5603a53f77a6ad68dcecfcb3408ef902833f8022de5463d76b4670c450173917d4690c63e34935b9883c2f3b6924c54101764155ab41a289
7
- data.tar.gz: e284fe2ac21627346f026b5c520152b466fb9a1b155ec44a70d55222d297c390c6916d40c4d48db300002f93617c2466288377e9ad8aa4ca960c0d098427cfcb
6
+ metadata.gz: 87a1ba8c343d1bd48978452a14ede6ee419cfe7694eb5935c72ae3437e4077264d29a15dc23f049fddbc9c6bf6f3d4622904cd534fbef509c3b67f332420084e
7
+ data.tar.gz: 99894f959d190a9ce3c515b5a4c9bece814e59ffa87826f69675c78f6592ec1400f387f7d7226c7bc9d236ec0e705c77c45ce9d7d9d1502c3177bc65068f1266
@@ -129,13 +129,7 @@ module Glib
129
129
 
130
130
  def self.color(propName)
131
131
  define_method(propName) do |value|
132
- if (value = value&.to_s)
133
- if !Rails.env.production?
134
- if !value.match /^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i
135
- raise "Invalid color: #{value}"
136
- end
137
- end
138
-
132
+ if (value = to_color(value))
139
133
  json.set! propName, value
140
134
  end
141
135
  end
@@ -162,7 +156,7 @@ module Glib
162
156
 
163
157
  def self.string(propName, options = {})
164
158
  define_method(propName) do |value|
165
- str = value&.to_s
159
+ str = to_string(value)
166
160
  instance_variable_set("@#{propName}", str) if options[:cache]
167
161
  json.set! propName, str
168
162
  end
@@ -264,6 +258,15 @@ module Glib
264
258
  end
265
259
  end
266
260
 
261
+ def self.badgeable
262
+ define_method(:badge) do |value|
263
+ json.badge do
264
+ json.text to_string(value[:text])
265
+ json.backgroundColor to_color(value[:backgroundColor])
266
+ end
267
+ end
268
+ end
269
+
267
270
  def self.action(propName)
268
271
  define_method(propName) do |value|
269
272
  json.set!(propName) { value.call(page.action_builder) }
@@ -318,6 +321,26 @@ module Glib
318
321
  # To be overridden
319
322
  end
320
323
 
324
+ ### Reusable value converters
325
+
326
+ def to_string(value)
327
+ value&.to_s
328
+ end
329
+
330
+ def to_color(value)
331
+ value = value&.to_s
332
+
333
+ if value
334
+ if !Rails.env.production?
335
+ if !value.match /^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i
336
+ raise "Invalid color: #{value}"
337
+ end
338
+ end
339
+ end
340
+
341
+ value
342
+ end
343
+
321
344
  end
322
345
  end
323
346
  end
@@ -39,12 +39,12 @@ module Glib
39
39
  end
40
40
 
41
41
  class Button < MenuItem
42
+ badgeable
43
+
42
44
  string :text
43
45
  icon :icon
44
46
  action :onClick
45
47
  bool :disabled
46
- color :badgeColor
47
- string :badgeContent
48
48
  singleton_array :styleClass, :styleClasses
49
49
 
50
50
  def childButtons(block)
@@ -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
@@ -127,6 +127,8 @@ module Glib
127
127
  end
128
128
 
129
129
  class Image < View
130
+ badgeable
131
+
130
132
  string :url
131
133
  string :base64Data
132
134
  action :onClick
@@ -134,12 +136,16 @@ module Glib
134
136
  end
135
137
 
136
138
  class Avatar < View
139
+ badgeable
140
+
137
141
  int :size
138
142
  string :url
139
143
  action :onClick
140
144
  end
141
145
 
142
146
  class Icon < View
147
+ badgeable
148
+
143
149
  # TODO: Remove later. Deprecated.
144
150
  icon :spec
145
151
 
@@ -171,6 +177,8 @@ module Glib
171
177
  # end
172
178
 
173
179
  class Button < View
180
+ badgeable
181
+
174
182
  icon :icon, cache: true
175
183
  string :text, cache: true
176
184
  action :onClick
@@ -207,11 +215,10 @@ module Glib
207
215
  end
208
216
 
209
217
  class Chip < View
218
+ badgeable
219
+
210
220
  string :text
211
221
  action :onClick
212
-
213
- string :badgeContent
214
- color :badgeColor
215
222
  end
216
223
 
217
224
  class Calendar < View
@@ -52,13 +52,11 @@ if local_assigns[:top_nav] || json_ui_app_is_web?
52
52
  action.windows_open url: json_ui_garage_url
53
53
  end
54
54
 
55
- menu.button icon: 'refresh', text: 'Reload', onClick: ->(action) do
55
+ menu.button icon: 'refresh', text: 'Reload', badge: { text: '!' }, onClick: ->(action) do
56
56
  action.windows_reload
57
57
  end
58
58
 
59
- # Consider deprecating icon badge
60
- # menu.button icon: { name: 'zoom_in', badge: '!' }, text: 'Diagnostics', onClick: ->(action) do
61
- menu.button icon: 'zoom_in', text: 'Diagnostics', badgeContent: '!', onClick: ->(action) do
59
+ menu.button icon: { name: 'zoom_in', badge: { text: '?', backgroundColor: '#00ffff' } }, text: 'Diagnostics', onClick: ->(action) do
62
60
  action.dialogs_alert message: %{
63
61
  Bundle ID: #{json_ui_app_bundle_id || '<unknown>'}
64
62
  App Version: #{json_ui_app_build_version || '<unknown>'}
@@ -0,0 +1,19 @@
1
+ json.title 'Forms'
2
+
3
+ page = json_ui_page json
4
+
5
+ render "#{@path_prefix}/nav_menu", json: json, page: page
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
+ 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
+ form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
14
+ form.fields_password name: 'user[password]', width: 'matchParent', label: 'Password'
15
+ end
16
+
17
+ page.footer padding: glib_json_padding_body, backgroundColor: '#b3bac2', childViews: ->(footer) do
18
+ footer.fields_submit text: 'Submit'
19
+ end
@@ -91,6 +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
99
  end, ->(section) do
95
100
  section.header padding: glib_json_padding_list, childViews: ->(header) do
96
101
  header.h2 text: 'Web Only'
@@ -49,7 +49,7 @@ page.scroll childViews: ->(scroll) do
49
49
  end
50
50
 
51
51
  form.spacer height: 20
52
- form.h1 text: 'Radio Group'
52
+ form.h2 text: 'Radio Group'
53
53
  form.fields_radioGroup \
54
54
  name: 'user[seniority]',
55
55
  value: 'show',
@@ -65,6 +65,18 @@ page.scroll childViews: ->(scroll) do
65
65
  end
66
66
  end
67
67
 
68
+ form.spacer height: 20
69
+ form.h2 text: 'Text'
70
+ form.fields_text \
71
+ name: 'user[video_url]',
72
+ width: 'matchParent',
73
+ onChange: ->(action) do
74
+ action.sheets_select message: 'Submit data?', buttons: ->(menu) do
75
+ menu.button text: 'Yes, submit', onClick: ->(subaction) do
76
+ action.forms_submit
77
+ end
78
+ end
79
+ end
68
80
  end
69
81
 
70
82
  end
@@ -1,29 +1,29 @@
1
1
  json.title 'Pages'
2
2
 
3
- json_ui_page json do |page|
4
- render "#{@path_prefix}/nav_menu", json: json, page: page
3
+ page = json_ui_page json
5
4
 
6
- page.template 'fullWidth'
5
+ render "#{@path_prefix}/nav_menu", json: json, page: page
7
6
 
8
- page.header childViews: ->(header) do
9
- header.panels_vertical width: 'matchParent', styleClass: 'card', padding: glib_json_padding_body, childViews: ->(vertical) do
10
- vertical.h1 text: 'Header'
11
- end
12
- header.spacer height: 10
7
+ page.template 'fullWidth'
8
+
9
+ page.header childViews: ->(header) do
10
+ header.panels_vertical width: 'matchParent', styleClass: 'card', padding: glib_json_padding_body, childViews: ->(vertical) do
11
+ vertical.h1 text: 'Header'
13
12
  end
13
+ header.spacer height: 10
14
+ end
14
15
 
15
- page.footer childViews: ->(footer) do
16
- footer.spacer height: 10
17
- footer.panels_vertical width: 'matchParent', styleClass: 'card', padding: glib_json_padding_body, childViews: ->(vertical) do
18
- vertical.h1 text: 'Footer'
19
- end
16
+ page.footer childViews: ->(footer) do
17
+ footer.spacer height: 10
18
+ footer.panels_vertical width: 'matchParent', styleClass: 'card', padding: glib_json_padding_body, childViews: ->(vertical) do
19
+ vertical.h1 text: 'Footer'
20
20
  end
21
+ end
21
22
 
22
- page.body childViews: ->(scroll) do
23
- scroll.panels_vertical width: 'matchParent', styleClass: 'card', padding: glib_json_padding_body, childViews: ->(vertical) do
24
- (1..100).each do |index|
25
- vertical.label text: 'Content'
26
- end
23
+ page.body childViews: ->(scroll) do
24
+ scroll.panels_vertical width: 'matchParent', styleClass: 'card', padding: glib_json_padding_body, childViews: ->(vertical) do
25
+ (1..100).each do |index|
26
+ vertical.label text: 'Content'
27
27
  end
28
28
  end
29
29
  end
@@ -7,6 +7,20 @@ json_ui_page json do |page|
7
7
  scroll.panels_column lg: { cols: 8 }, childViews: ->(column) do
8
8
  column.h2 text: 'Tab Bar with Badge'
9
9
  column.tabBar buttons: ->(menu) do
10
+ badges = [
11
+ {
12
+ text: nil,
13
+ backgroundColor: nil
14
+ },
15
+ {
16
+ text: 8,
17
+ backgroundColor: '#272551'
18
+ },
19
+ {
20
+ text: '⭐⭐⭐',
21
+ backgroundColor: '#008000'
22
+ }
23
+ ]
10
24
  {
11
25
  'FIRST' => 'home',
12
26
  'SECOND' => 'schedule',
@@ -15,8 +29,7 @@ json_ui_page json do |page|
15
29
  menu.button \
16
30
  icon: icon,
17
31
  text: text,
18
- badgeContent: [nil, 8, '⭐⭐⭐'][index],
19
- badgeColor: [nil, '#272551', '#008000'][index],
32
+ badge: badges[index],
20
33
  disabled: params[:tab].to_i == index,
21
34
  onClick: ->(action) do
22
35
  action.windows_reload \
@@ -19,7 +19,7 @@ json_ui_page json do |page|
19
19
  scroll.h2 text: 'With select options'
20
20
  scroll.spacer height: 6
21
21
  scroll.banners_select width: 'matchParent', icon: 'info', message: 'This is a select banner', buttons: ->(menu) do
22
- menu.button icon: 'add', text: 'Add', badgeContent: 80, onClick: ->(action) do
22
+ menu.button icon: 'add', text: 'Add', badge: { text: 80 }, onClick: ->(action) do
23
23
  action.windows_open url: json_ui_garage_url(path: 'home/blank')
24
24
  end
25
25
  menu.button icon: 'edit', text: 'Edit', onClick: ->(action) do
@@ -33,7 +33,7 @@ json_ui_page json do |page|
33
33
  submenu.button \
34
34
  icon: 'add',
35
35
  text: 'Option1',
36
- badgeContent: 3,
36
+ badge: { text: 3 },
37
37
  onClick: ->(action) do
38
38
  action.windows_open url: json_ui_garage_url(path: 'home/blank')
39
39
  end
@@ -11,13 +11,20 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
11
11
  action.dialogs_alert message: 'Perform action'
12
12
  end
13
13
 
14
- scroll.button text: 'Buton with build-in classes', styleClasses: ['rounded', 'outlined', 'tile', 'depressed'], onClick: ->(action) do
14
+ scroll.spacer height: 10
15
+ scroll.button text: 'Button with built-in classes', styleClasses: ['rounded', 'outlined', 'tile', 'depressed'], onClick: ->(action) do
15
16
  action.dialogs_alert message: 'Perform action'
16
17
  end
17
18
 
18
- scroll.button icon: 'info', text: 'Button with Icon and Tooltip', tooltip: { text: 'Tooltip text' }, onClick: ->(action) do
19
- action.dialogs_alert message: 'Perform action'
20
- end
19
+ scroll.spacer height: 10
20
+ scroll.button \
21
+ icon: 'info',
22
+ text: 'Button with Icon and Tooltip',
23
+ tooltip: { text: 'Tooltip text' },
24
+ badge: { text: '3' },
25
+ onClick: ->(action) do
26
+ action.dialogs_alert message: 'Perform action'
27
+ end
21
28
  scroll.spacer height: 20
22
29
 
23
30
  scroll.button \
@@ -38,7 +45,7 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
38
45
  action.dialogs_alert message: 'Perform action'
39
46
  end
40
47
  scroll.spacer height: 10
41
- scroll.chip text: 'With Badge', badgeContent: '99'
48
+ scroll.chip text: 'With Badge', badge: { text: '99' }
42
49
 
43
50
  scroll.spacer height: 20
44
51
  scroll.h2 text: 'Switch'
@@ -12,4 +12,8 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
12
12
  scroll.h2 text: 'Icon with color'
13
13
  scroll.icon name: 'home', color: '#9370DB'
14
14
  scroll.icon name: 'home', color: '#9370DB80'
15
+
16
+ scroll.spacer height: 20
17
+ scroll.h2 text: 'Icon with badge'
18
+ scroll.icon name: 'home', badge: { text: '22', backgroundColor: '#00ff00' }
15
19
  end
@@ -13,10 +13,11 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
13
13
  url: glib_json_image_avatar_url,
14
14
  tooltip: { text: 'This is a tooltip' }
15
15
 
16
- # scroll.spacer height: 20
17
- # scroll.h2 text: 'Icon'
18
- # scroll.spacer height: 6
19
- # scroll.icon spec: 'info'
16
+ scroll.h2 text: 'Avatar with badge'
17
+ scroll.spacer height: 6
18
+ scroll.avatar \
19
+ url: glib_json_image_avatar_url,
20
+ badge: { text: '1', backgroundColor: '#0000ff' }
20
21
 
21
22
  scroll.spacer height: 20
22
23
  scroll.h2 text: 'Image with base64 data'
@@ -46,9 +47,9 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
46
47
  scroll.image url: glib_json_image_standard_url
47
48
 
48
49
  scroll.spacer height: 20
49
- scroll.h2 text: 'Original size'
50
+ scroll.h2 text: 'Original size with badge'
50
51
  scroll.spacer height: 6
51
- scroll.image url: small_image_url
52
+ scroll.image url: small_image_url, badge: { text: '1', backgroundColor: '#0000ff' }
52
53
 
53
54
  # Reference: https://docs.imgix.com/apis/url/size/fit#clip
54
55
  scroll.spacer height: 20
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.13.1
4
+ version: 0.14.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -153,6 +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
157
  - app/views/json_ui/garage/forms/generic_post.json.jbuilder
157
158
  - app/views/json_ui/garage/forms/index.json.jbuilder
158
159
  - app/views/json_ui/garage/forms/local_request.json.jbuilder