glib-web 0.13.1 → 0.14.3

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: 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