glib-web 5.0.4 → 5.0.6
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/controllers/concerns/glib/analytics/funnel.rb +10 -1
- data/app/controllers/concerns/glib/json/libs.rb +13 -0
- data/app/helpers/glib/json_ui/view_builder/fields.rb +6 -2
- data/app/models/concerns/glib/enum_symbolization.rb +26 -0
- data/app/models/glib/application_record.rb +1 -0
- data/app/views/json_ui/garage/test_page/_header.json.jbuilder +31 -28
- data/app/views/json_ui/garage/test_page/auth.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/auto_validate.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/browsers.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/calendar.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/carousel.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/charts.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/column.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/commands.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/components.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/cookies.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/custom.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/dialog.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/dirty_state.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_captcha.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_creditCard.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_date_time.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_dynamicSelect.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_location.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_otp.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_phone.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_radio.json.jbuilder +293 -0
- data/app/views/json_ui/garage/test_page/fields_rating.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_richText.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_select.json.jbuilder +3 -2
- data/app/views/json_ui/garage/test_page/fields_sign.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_stripeExternalAccount.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_stripeToken.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_text.json.jbuilder +312 -0
- data/app/views/json_ui/garage/test_page/fields_timer.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/fields_upload.json.jbuilder +66 -4
- data/app/views/json_ui/garage/test_page/fields_url_fragment.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/flow.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/form.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/form_dynamic.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/forms.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/grid.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/horizontal.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/http.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/image.json.jbuilder +26 -2
- data/app/views/json_ui/garage/test_page/lifecycle.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/list.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/list_editable.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/lists_append.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/logics_set.json.jbuilder +0 -1
- data/app/views/json_ui/garage/test_page/multimedia_video.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/pagination.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/panels.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/panels_bulkEdit2.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/popovers.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/progressCircle.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/responsive.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/scroll.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/selectable.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/sheets.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/snackbars.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/split.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/storage_items.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/switch.json.jbuilder +56 -0
- data/app/views/json_ui/garage/test_page/tabBar.json.jbuilder +144 -0
- data/app/views/json_ui/garage/test_page/table.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/timeline.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/timeouts.json.jbuilder +9 -3
- data/app/views/json_ui/garage/test_page/ul.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/vertical.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/web.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/window.json.jbuilder +2 -1
- data/app/views/json_ui/garage/test_page/windows.json.jbuilder +2 -1
- data/lib/glib/json_crawler/router.rb +39 -0
- data/lib/glib/mailer_tester.rb +90 -5
- data/lib/glib/test_helpers.rb +68 -2
- metadata +6 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2e9d0b6eb1a02d147f08a0166a4d67075ebbf903af3601e78ab592c5f9a11808
|
|
4
|
+
data.tar.gz: ee0d8980dfa1158fa65126b8d29dad29e2b788f1b51e4fb062a2de306a1d789a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 21960f43365ee50457f2ad2856d5bf5e6cf6c1a5014332006e9fe43e7f2e6cec9633a35cb5678a34388310d88e69222ab4641d1267125e87e01d822d00fb7e4f
|
|
7
|
+
data.tar.gz: cf920f5f56177c092fc2bd84bacf4b096d1b41ae4364b47bcfe3beba1b58bb8afa76883a33210a9f9ad709085c7dc33644933128cddbe93b4ff2251e6f2367b5
|
|
@@ -38,7 +38,16 @@ module Glib::Analytics
|
|
|
38
38
|
referrer_url = request.headers['referer'] # Notice that the HTTP header uses one "r"
|
|
39
39
|
if group.nil? && action.nil? && !referrer_url.nil?
|
|
40
40
|
current_host = request.host
|
|
41
|
-
|
|
41
|
+
# The Referer header is attacker-controlled and may not be a valid URI
|
|
42
|
+
# (scanners send junk like "() { ignored; }; cat /etc/passwd"). Treat an
|
|
43
|
+
# unparseable referer as "no referer" rather than letting URI::InvalidURIError
|
|
44
|
+
# bubble up mid-render, where the 500 rescue then double-renders.
|
|
45
|
+
referrer_host =
|
|
46
|
+
begin
|
|
47
|
+
URI.parse(referrer_url).host
|
|
48
|
+
rescue URI::InvalidURIError
|
|
49
|
+
nil
|
|
50
|
+
end
|
|
42
51
|
|
|
43
52
|
# Replace the subdomain portion with regex so it will only match the non-subdomain part.
|
|
44
53
|
# This will allow cross-subdomain referral, but it will not work if the host is a bare domain,
|
|
@@ -249,6 +249,13 @@ module Glib::Json::Libs
|
|
|
249
249
|
Rollbar.error(exception, use_exception_level_filters: true)
|
|
250
250
|
end
|
|
251
251
|
|
|
252
|
+
# The exception may have been raised AFTER a response was already rendered
|
|
253
|
+
# (e.g. from an after_action injection). Rendering the error page on top of that
|
|
254
|
+
# would raise AbstractController::DoubleRenderError, which masks the genuine
|
|
255
|
+
# exception reported above. The real cause is already logged, so leave the
|
|
256
|
+
# already-rendered response in place rather than double-rendering.
|
|
257
|
+
return if performed?
|
|
258
|
+
|
|
252
259
|
render file: Rails.root.join('public', '500.html'), status: :internal_server_error
|
|
253
260
|
else
|
|
254
261
|
raise exception
|
|
@@ -261,6 +268,12 @@ module Glib::Json::Libs
|
|
|
261
268
|
def glib_json_handle_404(exception, preview_mode)
|
|
262
269
|
if json_ui_activated?
|
|
263
270
|
if Rails.env.production? || preview_mode
|
|
271
|
+
# As with glib_json_handle_500: if a response was already rendered (e.g. an
|
|
272
|
+
# after_action raised RecordNotFound), rendering the 404 page on top would raise
|
|
273
|
+
# AbstractController::DoubleRenderError and mask the real exception. Keep the
|
|
274
|
+
# already-rendered response instead of double-rendering.
|
|
275
|
+
return if performed?
|
|
276
|
+
|
|
264
277
|
render file: Rails.root.join('public', '404.html'), status: :not_found
|
|
265
278
|
else
|
|
266
279
|
raise exception
|
|
@@ -641,6 +641,7 @@ class Glib::JsonUi::ViewBuilder
|
|
|
641
641
|
def created
|
|
642
642
|
super
|
|
643
643
|
|
|
644
|
+
json.searchable true
|
|
644
645
|
json.options glib_time_zone_options
|
|
645
646
|
end
|
|
646
647
|
end
|
|
@@ -761,7 +762,8 @@ class Glib::JsonUi::ViewBuilder
|
|
|
761
762
|
action :onFinishUpload
|
|
762
763
|
bool :multiple
|
|
763
764
|
hash :placeholderView, required: [:type, :width, :height], optional: [:url]
|
|
764
|
-
hash :inputView, optional: [:
|
|
765
|
+
hash :inputView, optional: [:files, :variant]
|
|
766
|
+
hash :clipboardView, optional: [:icon]
|
|
765
767
|
|
|
766
768
|
def multiProgressView(values)
|
|
767
769
|
@multi_progress = values
|
|
@@ -775,7 +777,9 @@ class Glib::JsonUi::ViewBuilder
|
|
|
775
777
|
@hint ||= I18n.t('glib.multi_upload.hint', default: nil)
|
|
776
778
|
|
|
777
779
|
if @prop && context && @multi_progress
|
|
778
|
-
|
|
780
|
+
value = context.field_value(@prop, collect_ids: false)
|
|
781
|
+
attachments = value.is_a?(::ActiveStorage::Attached::One) ? Array.wrap(value.attachment) : value.to_a
|
|
782
|
+
@multi_progress['files'] ||= attachments.map { |file| { name: file.blob&.filename, signed_id: file.signed_id, url: url_for(file) } }
|
|
779
783
|
end
|
|
780
784
|
|
|
781
785
|
if @multi_progress
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Glib
|
|
2
|
+
# Class-level helper that overrides one or more enum readers to return a
|
|
3
|
+
# symbol instead of Rails' default string form. Lets callers compare with
|
|
4
|
+
# `record.status == :active` without having to remember which form they're
|
|
5
|
+
# holding (see backend/01a_defensive_programming.md item 7).
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
#
|
|
9
|
+
# class Order < ApplicationRecord
|
|
10
|
+
# enum :payment_status, { draft: 0, pending: 1, finalized: 2 }
|
|
11
|
+
# enum :finalize_intent, { unknown: 0, charge: 1 }, prefix: true
|
|
12
|
+
#
|
|
13
|
+
# enum_symbolize :payment_status, :finalize_intent
|
|
14
|
+
# end
|
|
15
|
+
module EnumSymbolization
|
|
16
|
+
extend ActiveSupport::Concern
|
|
17
|
+
|
|
18
|
+
class_methods do
|
|
19
|
+
def enum_symbolize(*attrs)
|
|
20
|
+
attrs.each do |attr|
|
|
21
|
+
define_method(attr) { super()&.to_sym }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -23,12 +23,14 @@ nav_groups = {
|
|
|
23
23
|
'Forms' => [
|
|
24
24
|
'auto_validate',
|
|
25
25
|
'dirty_state',
|
|
26
|
+
'fields_text',
|
|
26
27
|
'fields_select',
|
|
27
28
|
'fields_dynamicSelect',
|
|
28
29
|
'fields_date_time',
|
|
29
30
|
'fields_location',
|
|
30
31
|
'fields_phone',
|
|
31
32
|
'fields_otp',
|
|
33
|
+
'fields_radio',
|
|
32
34
|
'fields_rating',
|
|
33
35
|
'fields_richText',
|
|
34
36
|
'fields_sign',
|
|
@@ -59,6 +61,7 @@ nav_groups = {
|
|
|
59
61
|
'responsive',
|
|
60
62
|
'scroll',
|
|
61
63
|
'split',
|
|
64
|
+
'tabBar',
|
|
62
65
|
'timeline',
|
|
63
66
|
'ul',
|
|
64
67
|
'vertical',
|
|
@@ -72,40 +75,40 @@ nav_groups = {
|
|
|
72
75
|
'charts',
|
|
73
76
|
'image',
|
|
74
77
|
'multimedia_video',
|
|
75
|
-
'progressCircle'
|
|
78
|
+
'progressCircle',
|
|
79
|
+
'switch'
|
|
76
80
|
]
|
|
77
81
|
}
|
|
78
82
|
|
|
79
83
|
current_path = params[:path].to_s
|
|
80
84
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
page.navBar height: 44, backgroundColor: '#a8c4e3', color: '#ffffff', showTitle: true, rightButtons: ->(menu) do
|
|
86
|
+
menu.button icon: { name: 'refresh' }, onClick: ->(action) do
|
|
87
|
+
action.windows_reload
|
|
88
|
+
end
|
|
89
|
+
menu.button icon: { name: 'open_in_new' }, onClick: ->(action) do
|
|
90
|
+
action.windows_open url: json_ui_garage_current_url(step: params[:step].to_i + 1)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
page.leftDrawer content: ->(drawer) do
|
|
95
|
+
drawer.header childViews: ->(header) do
|
|
96
|
+
header.button text: 'Test Page', styleClasses: ['link', 'logo'], onClick: ->(action) do
|
|
97
|
+
action.windows_open url: json_ui_garage_url(path: 'test_page/form')
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
drawer.rows builder: ->(menu) do
|
|
85
102
|
nav_groups.each_with_index do |(group_name, items), group_index|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
is_current = current_path == nav_path
|
|
94
|
-
if index != 0
|
|
95
|
-
flow.spacer width: 8
|
|
96
|
-
end
|
|
97
|
-
label_options = {
|
|
98
|
-
text: nav,
|
|
99
|
-
onClick: ->(action) do
|
|
100
|
-
action.windows_open url: json_ui_garage_url(path: nav_path)
|
|
101
|
-
end
|
|
102
|
-
}
|
|
103
|
-
label_options[:styleClass] = 'font-weight-bold' if is_current
|
|
104
|
-
flow.label(**label_options)
|
|
105
|
-
end
|
|
103
|
+
menu.divider if group_index > 0
|
|
104
|
+
menu.label text: group_name
|
|
105
|
+
items.each do |nav|
|
|
106
|
+
nav_path = "test_page/#{nav}"
|
|
107
|
+
is_current = current_path == nav_path
|
|
108
|
+
menu.button text: nav, styleClasses: (is_current ? ['font-weight-bold'] : []), onClick: ->(action) do
|
|
109
|
+
action.windows_open url: json_ui_garage_url(path: nav_path)
|
|
106
110
|
end
|
|
107
|
-
|
|
108
|
-
res.spacer height: 4 if group_index < nav_groups.size - 1
|
|
111
|
+
end
|
|
109
112
|
end
|
|
110
113
|
end
|
|
111
|
-
|
|
114
|
+
end
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Auth)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Form)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
model = Glib::DummyJobApplication.new(
|
|
9
10
|
name: 'John Deo',
|
|
10
11
|
accept: '0',
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Browsers)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Calendar)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,8 +2,9 @@ json.title 'Test Page (Carousel)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body childViews: ->(body) do
|
|
6
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
7
8
|
|
|
8
9
|
body.panels_responsive padding: glib_json_padding_body, childViews: ->(res) do
|
|
9
10
|
res.h2 text: 'Overview'
|
|
@@ -68,8 +68,9 @@ line_series_churn = [
|
|
|
68
68
|
|
|
69
69
|
page = json_ui_page json
|
|
70
70
|
|
|
71
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
72
|
+
|
|
71
73
|
page.body childViews: ->(body) do
|
|
72
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
73
74
|
|
|
74
75
|
body.panels_responsive padding: glib_json_padding_body, childViews: ->(res) do
|
|
75
76
|
res.h2 text: 'Charts'
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Column)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Commands)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Components)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Cookies)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Custom)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_responsive(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -4,9 +4,10 @@ json.title 'Test Page (Form)'
|
|
|
4
4
|
|
|
5
5
|
page = json_ui_page json
|
|
6
6
|
|
|
7
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
8
|
+
|
|
7
9
|
page.body(
|
|
8
10
|
childViews: ->(body) do
|
|
9
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
10
11
|
body.panels_responsive(
|
|
11
12
|
padding: glib_json_padding_body,
|
|
12
13
|
childViews: ->(res) do
|
|
@@ -4,8 +4,9 @@ json.title 'Test Page (Dirty state)'
|
|
|
4
4
|
|
|
5
5
|
page = json_ui_page json
|
|
6
6
|
|
|
7
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
8
|
+
|
|
7
9
|
page.body childViews: ->(body) do
|
|
8
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
9
10
|
|
|
10
11
|
body.panels_form padding: glib_json_padding_body, childViews: ->(form) do
|
|
11
12
|
form.h2 text: 'Dirty state'
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Actions)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
body.panels_form(
|
|
9
10
|
padding: glib_json_padding_body,
|
|
10
11
|
childViews: ->(res) do
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Captcha)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Credit Card)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Date/Datetime)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Dynamic Select)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Location)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields OTP)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|
|
@@ -2,9 +2,10 @@ json.title 'Test Page (Fields Phone)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
+
render 'json_ui/garage/test_page/header', json: json, page: page
|
|
6
|
+
|
|
5
7
|
page.body(
|
|
6
8
|
childViews: ->(body) do
|
|
7
|
-
render 'json_ui/garage/test_page/header', view: body
|
|
8
9
|
|
|
9
10
|
body.panels_responsive(
|
|
10
11
|
padding: glib_json_padding_body,
|