glib-web 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/glib/app_feature_support_helper.rb +16 -0
- data/app/helpers/glib/json_ui/view_builder/fields.rb +3 -0
- data/app/helpers/glib/json_ui/view_builder/panels.rb +2 -0
- data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +9 -18
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +6 -3
- data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +19 -21
- data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +39 -0
- data/app/views/json_ui/garage/tables/index.json.jbuilder +3 -0
- data/lib/glib/json_crawler.rb +1 -0
- data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -0
- data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +1 -1
- data/lib/glib/json_crawler/http.rb +3 -2
- data/lib/glib/json_crawler/router.rb +2 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a631905663a326cc5d4da2aa0be179812d12aae
|
4
|
+
data.tar.gz: a167fd02e4db101e5067832225762ba410bc401b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a5094637dbe44532c384bd7e30a49bb3dd5377ef87cee6ea13da3528620aae8f2a43eba21f3077df4530a3356087851dcbd8be150d72a3ff1af70b4b3493afb
|
7
|
+
data.tar.gz: 03b85596d99b043700a6818feef54b6e45017e905800358502052a68bdf0d6cb472c64bc9bb352849a9628b587479bfbab41314da1543cb1f92317371639ac07
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Glib
|
2
|
+
module AppFeatureSupportHelper
|
3
|
+
def glib_app_feature_supported?(name, app_version, dictionary)
|
4
|
+
device = (app_device_os || :default).to_sym
|
5
|
+
|
6
|
+
version = dictionary[name.to_sym].try(:[], device)
|
7
|
+
except = dictionary[name.to_sym].try(:[], :except).try(:[], device)
|
8
|
+
|
9
|
+
!version.nil? && (version == :all || glib_app_version_gte(version, app_version)) && (except.nil? || except.to_s != app_version)
|
10
|
+
end
|
11
|
+
|
12
|
+
def glib_app_version_gte(feature_version, app_version)
|
13
|
+
app_version.blank? || Gem::Version.new(app_version) >= Gem::Version.new(feature_version)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -10,7 +10,8 @@ json_ui_page json do |page|
|
|
10
10
|
value = [
|
11
11
|
{
|
12
12
|
'question': 'Punctuality',
|
13
|
-
'type': 'rating'
|
13
|
+
'type': 'rating',
|
14
|
+
'enabled': '1'
|
14
15
|
},
|
15
16
|
{
|
16
17
|
'question': 'Quality of work',
|
@@ -21,30 +22,20 @@ json_ui_page json do |page|
|
|
21
22
|
'type': 'yes_no'
|
22
23
|
}
|
23
24
|
]
|
24
|
-
# form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, groupTitlePrefix: 'Entry', groupTemplateViews: ->(group) do
|
25
|
-
# group.spacer height: 10
|
26
|
-
# group.fields_text width: 'matchParent', name: 'question', label: 'Question'
|
27
|
-
# group.fields_text width: 'matchParent', name: 'type', label: 'Answer type'
|
28
|
-
# end
|
29
|
-
|
30
|
-
# form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, group: ->(group) do
|
31
|
-
# group.titlePrefix 'Entry'
|
32
|
-
# group.template childViews: ->(template) do
|
33
|
-
# template.spacer height: 10
|
34
|
-
# template.fields_text width: 'matchParent', name: 'question', label: 'Question'
|
35
|
-
# template.fields_text width: 'matchParent', name: 'type', label: 'Answer type'
|
36
|
-
# end
|
37
|
-
# end
|
38
25
|
|
39
26
|
form.fields_dynamicGroup width: 'matchParent', name: 'user[evaluation]', value: value, titlePrefix: 'Entry', content: ->(group) do
|
40
27
|
group.template padding: { left: 32 }, childViews: ->(template) do
|
41
28
|
template.spacer height: 10
|
42
|
-
template.fields_text width: 'matchParent', name: 'question', label: 'Question'
|
43
|
-
|
29
|
+
template.fields_text width: 'matchParent', name: 'question', label: 'Question', placeholder: 'Question'
|
30
|
+
options = [ :rating, :yes_no ]
|
31
|
+
template.fields_select width: 'matchParent', name: 'type', label: 'Answer Type', placeholder: 'Answer Type', options: options.map { |o| { text: o.to_s.humanize, value: o } }
|
32
|
+
template.fields_check width: 'matchParent', name: 'enabled', label: 'Enable', checkValue: '1'
|
33
|
+
|
34
|
+
template.spacer height: 14
|
44
35
|
end
|
45
36
|
end
|
46
37
|
|
47
38
|
form.spacer height: 20
|
48
|
-
form.
|
39
|
+
form.fields_submit text: 'Submit'
|
49
40
|
end
|
50
41
|
end
|
@@ -8,14 +8,16 @@ json_ui_page json do |page|
|
|
8
8
|
form.spacer height: 6
|
9
9
|
form.h4 text: 'Gender'
|
10
10
|
form.fields_radioGroup name: 'user[gender]', value: 'F', childViews: ->(group) do
|
11
|
+
group.fields_radio value: '', label: 'Unknown'
|
11
12
|
group.fields_radio value: 'M', label: 'Male'
|
12
13
|
group.fields_radio value: 'F', label: 'Female'
|
13
14
|
end
|
14
15
|
|
15
16
|
form.spacer height: 20
|
16
17
|
form.h2 text: 'Single Checkbox'
|
17
|
-
form.fields_check name: 'user[age_range]', value: '16+', uncheckValue: '0-16', label: 'I am over 16 (has default value)'
|
18
|
-
form.fields_check name: 'user[employer]',
|
18
|
+
form.fields_check name: 'user[age_range]', value: '16+', checkValue: '16+', uncheckValue: '0-16', label: 'I am over 16 (has default value)'
|
19
|
+
form.fields_check name: 'user[employer]', checkValue: 1, label: 'I am an employer (no default value)'
|
20
|
+
form.fields_check name: 'user[enabled]', checkValue: true, label: 'Enable', styleClass: 'switch', value: 'true'
|
19
21
|
|
20
22
|
form.spacer height: 20
|
21
23
|
form.h2 text: 'Date/Time'
|
@@ -36,7 +38,8 @@ json_ui_page json do |page|
|
|
36
38
|
latitudeField: { name: 'user[latitude]', label: 'Lat', value: -33.8523063, readOnly: true },
|
37
39
|
longitudeField: { name: 'user[longitude]', label: 'Long', value: 151.21078710000006, readOnly: true }
|
38
40
|
|
39
|
-
form.
|
41
|
+
form.spacer height: 20
|
42
|
+
form.fields_submit text: 'Submit'
|
40
43
|
|
41
44
|
end
|
42
45
|
|
@@ -14,7 +14,7 @@ json.ws({
|
|
14
14
|
# "topic" => "room:30",
|
15
15
|
# "event" => "comments_updated",
|
16
16
|
"topic" => "links",
|
17
|
-
"
|
17
|
+
"events" => ["new_link_added"],
|
18
18
|
"header" => {
|
19
19
|
"user_id" => 2,
|
20
20
|
"prev_item_id" => nil,
|
@@ -23,31 +23,29 @@ json.ws({
|
|
23
23
|
})
|
24
24
|
|
25
25
|
page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, paramNameForFormData: 'formData', onSubmit: ->(action) do
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
# url: "URL"
|
37
|
-
})
|
38
|
-
|
39
|
-
# "topic": "room:30",
|
40
|
-
# "event": "create_comment",
|
41
|
-
# "payload": {
|
42
|
-
# "club_id": "2",
|
43
|
-
# "room_id": "30",
|
44
|
-
# "user_id": "2"
|
45
|
-
# }
|
26
|
+
json.action "ws/push"
|
27
|
+
json.topic "links"
|
28
|
+
json.event "new_link"
|
29
|
+
json.payload({
|
30
|
+
"club_id": "2",
|
31
|
+
"room_id": "30",
|
32
|
+
"user_id": "2"
|
33
|
+
# title: "TITLE",
|
34
|
+
# url: "URL"
|
35
|
+
})
|
46
36
|
|
47
37
|
end, childViews: ->(form) do
|
38
|
+
form.spacer height: 14
|
39
|
+
form.label text: "Message: #{params[:message]}"
|
40
|
+
form.spacer height: 14
|
41
|
+
|
48
42
|
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
|
43
|
+
|
44
|
+
# TODO: Change this to radio for selecting alert vs reload response
|
49
45
|
form.fields_password name: 'user[password]', width: 'matchParent', label: 'Password'
|
50
46
|
|
47
|
+
form.fields_hidden name: 'baseUrl', width: 'matchParent', value: json_ui_garage_url(path: 'notifications/web_socket')
|
48
|
+
|
51
49
|
form.panels_split width: 'matchParent', content: ->(split) do
|
52
50
|
# split.left childViews: ->(left) do
|
53
51
|
# if params[:mode] == 'dialog'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
page_index = params[:page].to_i
|
3
|
+
next_page = {
|
4
|
+
url: json_ui_garage_url(path: 'tables/autoload_all', page: page_index + 1, section_only: 'v1'),
|
5
|
+
autoload: 'asNeeded'
|
6
|
+
}
|
7
|
+
|
8
|
+
column_indexes = (1..3)
|
9
|
+
if params[:section_only].present?
|
10
|
+
json.nextPage next_page if page_index < 3
|
11
|
+
json_ui_page json do |page|
|
12
|
+
json.sections do
|
13
|
+
json.child! do
|
14
|
+
render 'json_ui/garage/tables/autoload_section', page: page, page_index: page_index, column_indexes: column_indexes
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
else
|
19
|
+
json.title 'Tables'
|
20
|
+
|
21
|
+
json_ui_page json do |page|
|
22
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
23
|
+
|
24
|
+
page.table nextPage: next_page, firstSection: ->(section) do
|
25
|
+
section.header cellViews: ->(header) do
|
26
|
+
column_indexes.each do |i|
|
27
|
+
header.label text: "Heading#{i}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
render "#{@path_prefix}/tables/autoload_section", page: page, page_index: page_index, column_indexes: column_indexes
|
32
|
+
end, onScrollToBottom: ->(action) do
|
33
|
+
action.snackbars_alert message: 'Scrolled to Bottom'
|
34
|
+
end, onScrollToTop: ->(action) do
|
35
|
+
action.snackbars_alert message: 'Scrolled to Top'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -17,6 +17,9 @@ json_ui_page json do |page|
|
|
17
17
|
template.thumbnail title: 'Autoload All', onClick: ->(action) do
|
18
18
|
action.windows_open url: json_ui_garage_url(path: 'tables/autoload_all')
|
19
19
|
end
|
20
|
+
template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
|
21
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/autoload_as_needed')
|
22
|
+
end
|
20
23
|
end
|
21
24
|
|
22
25
|
end
|
data/lib/glib/json_crawler.rb
CHANGED
@@ -7,3 +7,4 @@ require_relative './json_crawler/action_crawlers/nav_initiate'
|
|
7
7
|
require_relative './json_crawler/action_crawlers/windows_open'
|
8
8
|
require_relative './json_crawler/action_crawlers/action_http'
|
9
9
|
require_relative './json_crawler/action_crawlers/forms_submit'
|
10
|
+
require_relative './json_crawler/action_crawlers/menu'
|
@@ -3,7 +3,7 @@ module Glib
|
|
3
3
|
class NavInitiate < ActionCrawler
|
4
4
|
def initialize(http, args, action)
|
5
5
|
super(http)
|
6
|
-
|
6
|
+
|
7
7
|
@http = http
|
8
8
|
if (json = (@http.get args['url'], action, args.except('url'))) && (left_drawer = json['leftDrawer'])
|
9
9
|
crawl left_drawer['header']&.[]('childViews')
|
@@ -8,8 +8,8 @@ module Glib
|
|
8
8
|
VALID_RESPONSE_CODES = [
|
9
9
|
(200..299).to_a,
|
10
10
|
## Note, the JSON API does not allow redirects
|
11
|
-
401, ## UNAUTHORIZED Should be used for not-logged-in
|
12
|
-
403, ## FORBIDDEN Should be used for logged-in but not allowed to access
|
11
|
+
# 401, ## UNAUTHORIZED Should be used for not-logged-in
|
12
|
+
# 403, ## FORBIDDEN Should be used for logged-in but not allowed to access
|
13
13
|
].flatten
|
14
14
|
|
15
15
|
def initialize(context, user, router)
|
@@ -105,6 +105,7 @@ module Glib
|
|
105
105
|
get redirect_uri.to_s, action, params
|
106
106
|
else
|
107
107
|
response_times << response.headers['X-Runtime'].to_f
|
108
|
+
|
108
109
|
@context.assert_includes VALID_RESPONSE_CODES, code, "Expected a valid response but was [#{response.code}] #{Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]}:\n#{url}"
|
109
110
|
if response.media_type == 'application/json'
|
110
111
|
JSON.parse(response.body)
|
@@ -36,7 +36,6 @@ module Glib
|
|
36
36
|
|
37
37
|
if action.present?
|
38
38
|
@depth += 1
|
39
|
-
# child =
|
40
39
|
case action
|
41
40
|
when 'initiate_navigation'
|
42
41
|
@read_only_actions.add([action, params['url']])
|
@@ -44,6 +43,8 @@ module Glib
|
|
44
43
|
when 'windows/open-v1', 'dialogs/open-v1', 'windows/reload-v1', 'windows/open', 'dialogs/open', 'windows/reload'
|
45
44
|
@read_only_actions.add([action, params['url']])
|
46
45
|
JsonCrawler::WindowsOpen.new(http, params, action)
|
46
|
+
when 'sheets/select-v1', 'sheets/select'
|
47
|
+
JsonCrawler::Menu.new(http, params, action)
|
47
48
|
when 'http/post-v1', 'http/post'
|
48
49
|
JsonCrawler::ActionHttp.new(:post, http, params, action)
|
49
50
|
when 'forms/submit-v1', 'forms/submit'
|
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.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ''
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- app/controllers/concerns/glib/json/ui.rb
|
74
74
|
- app/controllers/concerns/glib/json/validation.rb
|
75
75
|
- app/controllers/glib/home_controller.rb
|
76
|
+
- app/helpers/glib/app_feature_support_helper.rb
|
76
77
|
- app/helpers/glib/dynamic_images_helper.rb
|
77
78
|
- app/helpers/glib/dynamic_texts_helper.rb
|
78
79
|
- app/helpers/glib/forms_helper.rb
|
@@ -173,6 +174,7 @@ files:
|
|
173
174
|
- app/views/json_ui/garage/services/index.json.jbuilder
|
174
175
|
- app/views/json_ui/garage/tables/_autoload_section.json.jbuilder
|
175
176
|
- app/views/json_ui/garage/tables/autoload_all.json.jbuilder
|
177
|
+
- app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder
|
176
178
|
- app/views/json_ui/garage/tables/export_import.json.jbuilder
|
177
179
|
- app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder
|
178
180
|
- app/views/json_ui/garage/tables/index.json.jbuilder
|
@@ -208,6 +210,7 @@ files:
|
|
208
210
|
- lib/glib/json_crawler/action_crawler.rb
|
209
211
|
- lib/glib/json_crawler/action_crawlers/action_http.rb
|
210
212
|
- lib/glib/json_crawler/action_crawlers/forms_submit.rb
|
213
|
+
- lib/glib/json_crawler/action_crawlers/menu.rb
|
211
214
|
- lib/glib/json_crawler/action_crawlers/nav_initiate.rb
|
212
215
|
- lib/glib/json_crawler/action_crawlers/windows_open.rb
|
213
216
|
- lib/glib/json_crawler/coverage.rb
|