glib-web 0.2.10 → 0.2.11
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 +4 -4
- data/app/helpers/glib/json_ui/abstract_builder.rb +16 -6
- data/app/helpers/glib/json_ui/action_builder.rb +34 -6
- data/app/helpers/glib/json_ui/view_builder.rb +23 -2
- data/app/helpers/glib/json_ui/view_builder/panels.rb +6 -4
- data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +1 -1
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +22 -0
- data/app/views/json_ui/garage/forms/index.json.jbuilder +7 -1
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +14 -14
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +41 -0
- data/app/views/json_ui/garage/home/blank.json.jbuilder +2 -0
- data/app/views/json_ui/garage/views/links.json.jbuilder +10 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28296441cfbabaa9915d315407f81ee8ff6c3d0f
|
4
|
+
data.tar.gz: 44bafc6c627fe454fca1630bd9e3288f8c71b52c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e043b39a9176c67a66027b2aed616d9c0b30c423047c72e3a48a075c5854ab85ae75e8ef50050b7a00faf6ad9afe535231e17b422642cf6c4c2a60e8be19ac0
|
7
|
+
data.tar.gz: e35a72b90a294c8cfee957d62788dab43a78801308cb17db43d0889ffce133e97175102456b70a4b5df6607ba3b10969719169dccafbb4d5758d7d585ff4c926
|
@@ -123,9 +123,11 @@ module Glib
|
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
|
-
def self.string propName
|
127
|
-
define_method(propName) do |value|
|
128
|
-
|
126
|
+
def self.string propName, options = {}
|
127
|
+
define_method(propName) do |value|
|
128
|
+
str = value&.to_s
|
129
|
+
instance_variable_set("@#{propName}", str) if options[:cache]
|
130
|
+
json.set! propName, str
|
129
131
|
end
|
130
132
|
end
|
131
133
|
|
@@ -147,12 +149,15 @@ module Glib
|
|
147
149
|
end
|
148
150
|
end
|
149
151
|
|
150
|
-
def self.icon propName
|
152
|
+
def self.icon propName, options = {}
|
151
153
|
define_method(propName) do |value|
|
154
|
+
|
152
155
|
if value.is_a?(Hash)
|
156
|
+
name = value[:name]
|
157
|
+
|
153
158
|
json.set!(propName) do
|
154
159
|
json.set value[:set] || 'material'
|
155
|
-
json.name
|
160
|
+
json.name name
|
156
161
|
|
157
162
|
if (badge = value[:badge]).is_a?(Hash)
|
158
163
|
json.badge badge
|
@@ -164,10 +169,15 @@ module Glib
|
|
164
169
|
|
165
170
|
end
|
166
171
|
else
|
172
|
+
name = value
|
173
|
+
|
167
174
|
json.set!(propName) do
|
168
|
-
json.name
|
175
|
+
json.name name
|
169
176
|
end
|
170
177
|
end
|
178
|
+
|
179
|
+
instance_variable_set("@#{propName}", name) if options[:cache]
|
180
|
+
|
171
181
|
end
|
172
182
|
end
|
173
183
|
|
@@ -6,6 +6,34 @@ module Glib
|
|
6
6
|
end
|
7
7
|
|
8
8
|
class Action < JsonUiElement
|
9
|
+
def analytics(value)
|
10
|
+
if value.is_a?(String)
|
11
|
+
@analyticsEnabled = true
|
12
|
+
@analyticsId = value
|
13
|
+
else
|
14
|
+
@analyticsEnabled = value == true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Override
|
19
|
+
def created
|
20
|
+
if @analyticsEnabled
|
21
|
+
suffix = @analyticsId
|
22
|
+
# TODO: recognize_path() needs `method` as a second argument for POST request
|
23
|
+
if suffix.nil? && @url && (route = Rails.application.routes.recognize_path(@url))
|
24
|
+
suffix = "#{route[:controller]}_#{route[:action]}"
|
25
|
+
end
|
26
|
+
|
27
|
+
if suffix
|
28
|
+
json.analytics do
|
29
|
+
json.track :event
|
30
|
+
json.nameSuffix suffix
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
9
37
|
end
|
10
38
|
|
11
39
|
### Action definitions
|
@@ -33,7 +61,7 @@ module Glib
|
|
33
61
|
end
|
34
62
|
|
35
63
|
class Open < Action
|
36
|
-
string :url
|
64
|
+
string :url, cache: true
|
37
65
|
end
|
38
66
|
|
39
67
|
# Consider renaming to ShowSnackbar
|
@@ -59,7 +87,7 @@ module Glib
|
|
59
87
|
end
|
60
88
|
|
61
89
|
class Open < Action
|
62
|
-
string :url
|
90
|
+
string :url, cache: true
|
63
91
|
end
|
64
92
|
|
65
93
|
class OpenWeb < Action
|
@@ -67,7 +95,7 @@ module Glib
|
|
67
95
|
end
|
68
96
|
|
69
97
|
class Reload < Action
|
70
|
-
string :url
|
98
|
+
string :url, cache: true
|
71
99
|
end
|
72
100
|
end
|
73
101
|
|
@@ -93,17 +121,17 @@ module Glib
|
|
93
121
|
|
94
122
|
module Http
|
95
123
|
class Post < Action
|
96
|
-
string :url
|
124
|
+
string :url, cache: true
|
97
125
|
hash :formData
|
98
126
|
end
|
99
127
|
|
100
128
|
class Patch < Action
|
101
|
-
string :url
|
129
|
+
string :url, cache: true
|
102
130
|
hash :formData
|
103
131
|
end
|
104
132
|
|
105
133
|
class Delete < Action
|
106
|
-
string :url
|
134
|
+
string :url, cache: true
|
107
135
|
hash :formData
|
108
136
|
end
|
109
137
|
|
@@ -16,6 +16,27 @@ module Glib
|
|
16
16
|
hash :padding
|
17
17
|
array :styleClasses
|
18
18
|
singleton_array :styleClass, :styleClasses
|
19
|
+
|
20
|
+
def analytics(value)
|
21
|
+
if value.is_a?(String)
|
22
|
+
@analyticsEnabled = true
|
23
|
+
@analyticsId = value
|
24
|
+
else
|
25
|
+
@analyticsEnabled = value == true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Override
|
30
|
+
def created
|
31
|
+
if @analyticsEnabled
|
32
|
+
context = page.context
|
33
|
+
json.analytics do
|
34
|
+
content = @analyticsId || (@text || @icon)&.gsub(/\s+/, '_')&.downcase || 'nil'
|
35
|
+
json.namePrefix [context.controller_name, context.action_name, content].join('_')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
19
40
|
end
|
20
41
|
|
21
42
|
### View definitions
|
@@ -44,8 +65,8 @@ module Glib
|
|
44
65
|
end
|
45
66
|
|
46
67
|
class Button < View
|
47
|
-
icon :icon
|
48
|
-
string :text
|
68
|
+
icon :icon, cache: true
|
69
|
+
string :text, cache: true
|
49
70
|
action :onClick
|
50
71
|
color :color
|
51
72
|
end
|
@@ -61,10 +61,12 @@ class Glib::JsonUi::ViewBuilder
|
|
61
61
|
# end
|
62
62
|
|
63
63
|
json.childViews do
|
64
|
-
|
65
|
-
json.
|
66
|
-
|
67
|
-
|
64
|
+
if @method.downcase != 'get'
|
65
|
+
json.child! do
|
66
|
+
json.view 'fields/hidden-v1'
|
67
|
+
json.name 'authenticity_token'
|
68
|
+
json.value page.context.form_authenticity_token
|
69
|
+
end
|
68
70
|
end
|
69
71
|
|
70
72
|
# if insert_method_field
|
@@ -0,0 +1,22 @@
|
|
1
|
+
json.title 'Forms'
|
2
|
+
|
3
|
+
data = params[:user] || {}
|
4
|
+
|
5
|
+
json_ui_page json do |page|
|
6
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
7
|
+
|
8
|
+
page.form url: json_ui_garage_url(path: 'forms/get_request'), method: 'get', padding: json_padding_body, childViews: ->(form) do
|
9
|
+
# TODO: Potential improvement:
|
10
|
+
# Use `reload` behaviour instead of `open` (i.e. don't keep adding URL to history).
|
11
|
+
# Probably introduce a flag to panels_form so developer can enable/disable this behaviour.
|
12
|
+
form.h3 text: "Hello #{ data[:name] }"
|
13
|
+
form.spacer height: 6
|
14
|
+
form.label text: 'On the web, upon submit, URL needs to change on the browser'
|
15
|
+
form.spacer height: 10
|
16
|
+
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
|
17
|
+
|
18
|
+
form.panels_split width: 'matchParent', rightViews: ->(split) do
|
19
|
+
split.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -22,6 +22,9 @@ json_ui_page json do |page|
|
|
22
22
|
template.thumbnail title: 'Text Validation', onClick: ->(action) do
|
23
23
|
action.windows_open url: json_ui_garage_url(path: 'forms/text_validation')
|
24
24
|
end
|
25
|
+
template.thumbnail title: 'GET Request', onClick: ->(action) do
|
26
|
+
action.windows_open url: json_ui_garage_url(path: 'forms/get_request')
|
27
|
+
end
|
25
28
|
|
26
29
|
end
|
27
30
|
end, ->(section) do
|
@@ -30,9 +33,12 @@ json_ui_page json do |page|
|
|
30
33
|
end
|
31
34
|
|
32
35
|
section.rows builder: ->(template) do
|
33
|
-
template.thumbnail title: 'Pickers
|
36
|
+
template.thumbnail title: 'Pickers', onClick: ->(action) do
|
34
37
|
action.windows_open url: json_ui_garage_url(path: 'forms/pickers')
|
35
38
|
end
|
39
|
+
template.thumbnail title: 'Select Fields', onClick: ->(action) do
|
40
|
+
action.windows_open url: json_ui_garage_url(path: 'forms/selects')
|
41
|
+
end
|
36
42
|
template.thumbnail title: 'File Upload', onClick: ->(action) do
|
37
43
|
action.windows_open url: json_ui_garage_url(path: 'forms/file_upload')
|
38
44
|
end
|
@@ -17,20 +17,20 @@ json_ui_page json do |page|
|
|
17
17
|
form.fields_check name: 'user[age_range]', value: '16+', uncheckValue: '0-16', label: 'I am over 16 (has default value)'
|
18
18
|
form.fields_check name: 'user[employer]', value: 1, label: 'I am an employer (no default value)'
|
19
19
|
|
20
|
-
form.spacer height: 20
|
21
|
-
form.h2 text: 'Select'
|
22
|
-
form.spacer height: 6
|
23
|
-
languages = {
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
}
|
32
|
-
form.fields_select name: 'user[primary_language]', width: 'matchParent', label: 'Primary Language', options: languages.map { |k, v| { value: k, text: v } }, value: 'ja-JP'
|
33
|
-
form.fields_select name: 'user[preferred_languages][]', width: 'matchParent', label: 'Preferred Languages', options: languages.map { |k, v| { value: k, text: v } }, value: ['ja-JP', 'ko-KR'], multiple: true
|
20
|
+
# form.spacer height: 20
|
21
|
+
# form.h2 text: 'Select'
|
22
|
+
# form.spacer height: 6
|
23
|
+
# languages = {
|
24
|
+
# 'zh-HK' => 'Hong Kong',
|
25
|
+
# 'zh-TW' => 'Taiwan',
|
26
|
+
# 'zh-CN' => 'China',
|
27
|
+
# 'ja-JP' => 'Japan',
|
28
|
+
# 'ko-KR' => 'Korea',
|
29
|
+
# 'ru-RU' => 'Russian',
|
30
|
+
# 'en-PH' => 'Philippines'
|
31
|
+
# }
|
32
|
+
# form.fields_select name: 'user[primary_language]', width: 'matchParent', label: 'Primary Language', options: languages.map { |k, v| { value: k, text: v } }, value: 'ja-JP'
|
33
|
+
# form.fields_select name: 'user[preferred_languages][]', width: 'matchParent', label: 'Preferred Languages', options: languages.map { |k, v| { value: k, text: v } }, value: ['ja-JP', 'ko-KR'], multiple: true
|
34
34
|
|
35
35
|
form.spacer height: 20
|
36
36
|
form.h2 text: 'Date/Time'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
json.title 'Forms'
|
2
|
+
|
3
|
+
json_ui_page json do |page|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
5
|
+
|
6
|
+
page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', padding: json_padding_body, childViews: ->(form) do
|
7
|
+
|
8
|
+
form.spacer height: 20
|
9
|
+
form.h2 text: 'Basic select fields'
|
10
|
+
form.spacer height: 6
|
11
|
+
languages = {
|
12
|
+
'zh-HK' => 'Hong Kong',
|
13
|
+
'zh-TW' => 'Taiwan',
|
14
|
+
'zh-CN' => 'China',
|
15
|
+
'ja-JP' => 'Japan',
|
16
|
+
'ko-KR' => 'Korea',
|
17
|
+
'ru-RU' => 'Russian',
|
18
|
+
'en-PH' => 'Philippines'
|
19
|
+
}
|
20
|
+
form.fields_select name: 'user[primary_language]', width: 'matchParent', label: 'Primary Language', options: languages.map { |k, v| { value: k, text: v } }, value: 'ja-JP'
|
21
|
+
form.fields_select name: 'user[preferred_languages][]', width: 'matchParent', label: 'Preferred Languages', options: languages.map { |k, v| { value: k, text: v } }, value: ['ja-JP', 'ko-KR'], multiple: true
|
22
|
+
|
23
|
+
form.spacer height: 20
|
24
|
+
form.h2 text: 'Select fields with manual entry'
|
25
|
+
form.spacer height: 6
|
26
|
+
skills = ['Singing', 'Dancing', 'Fighting']
|
27
|
+
form.fields_select name: 'user[skill]', width: 'matchParent', label: 'Skill', options: skills, value: 'Singing', manualEntry: true
|
28
|
+
form.fields_select name: 'user[skills][]', width: 'matchParent', label: 'Skills', options: skills, value: ['Dancing', 'Fencing'], multiple: true, manualEntry: true
|
29
|
+
|
30
|
+
form.spacer height: 20
|
31
|
+
form.h2 text: 'Select fields with auto complete'
|
32
|
+
form.spacer height: 6
|
33
|
+
form.label text: 'Applicable to select fields with many options'
|
34
|
+
form.spacer height: 6
|
35
|
+
# TODO
|
36
|
+
|
37
|
+
form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -11,6 +11,13 @@ json_ui_page json do |page|
|
|
11
11
|
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
12
12
|
end
|
13
13
|
|
14
|
+
scroll.spacer height: 20
|
15
|
+
scroll.h2 text: 'Button with icon'
|
16
|
+
scroll.spacer height: 6
|
17
|
+
scroll.button icon: 'info', text: 'Button', onClick: ->(action) do
|
18
|
+
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
19
|
+
end
|
20
|
+
|
14
21
|
scroll.spacer height: 20
|
15
22
|
scroll.h2 text: 'Button with link style'
|
16
23
|
scroll.spacer height: 6
|
@@ -34,6 +41,9 @@ json_ui_page json do |page|
|
|
34
41
|
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
35
42
|
end
|
36
43
|
|
44
|
+
scroll.fab icon: 'add', onClick: ->(action) do
|
45
|
+
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
46
|
+
end
|
37
47
|
|
38
48
|
end
|
39
49
|
end
|
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.2.
|
4
|
+
version: 0.2.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ''
|
@@ -58,9 +58,11 @@ files:
|
|
58
58
|
- app/views/json_ui/garage/forms/file_upload.json.jbuilder
|
59
59
|
- app/views/json_ui/garage/forms/floating_submit.json.jbuilder
|
60
60
|
- app/views/json_ui/garage/forms/generic_post.json.jbuilder
|
61
|
+
- app/views/json_ui/garage/forms/get_request.json.jbuilder
|
61
62
|
- app/views/json_ui/garage/forms/index.json.jbuilder
|
62
63
|
- app/views/json_ui/garage/forms/pickers.json.jbuilder
|
63
64
|
- app/views/json_ui/garage/forms/rich_text.json.jbuilder
|
65
|
+
- app/views/json_ui/garage/forms/selects.json.jbuilder
|
64
66
|
- app/views/json_ui/garage/forms/submission_flow.json.jbuilder
|
65
67
|
- app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder
|
66
68
|
- app/views/json_ui/garage/forms/submission_indicator.json.jbuilder
|