glib-web 0.5.73 → 0.5.78
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/action_builder/iap.rb +15 -0
- data/app/helpers/glib/json_ui/action_builder/windows.rb +5 -0
- data/app/helpers/glib/json_ui/view_builder/fields.rb +13 -0
- data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -0
- data/app/models/concerns/glib/soft_deletable.rb +68 -0
- data/app/policies/glib/application_policy.rb +5 -0
- data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +5 -2
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +5 -0
- data/app/views/json_ui/garage/forms/index.json.jbuilder +5 -2
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +2 -1
- data/app/views/json_ui/garage/forms/payments.json.jbuilder +34 -0
- data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +1 -1
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +20 -0
- data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +1 -17
- data/app/views/json_ui/garage/panels/carousel.json.jbuilder +8 -7
- data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -0
- data/app/views/json_ui/garage/views/index.json.jbuilder +11 -0
- data/app/views/layouts/json_ui/renderer.html.erb +1 -1
- data/lib/glib/json_crawler/router.rb +5 -13
- 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: 9ffc87eb551ef9824df1583e8219d521d8fe77ab576602cb0c3866a0e7c01183
|
|
4
|
+
data.tar.gz: '048f64f8dac41e314df3d4269768b09a2235aa4bb574625ee04a70477e60b7fe'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5c767d88a47d3ce31888cd74d73612c5b2531ef7136f8fc7607769a994ffc55f65d92b57dec1e9b7dfc4bf27375e5dd1eaf812411a614398fa2c9c69fb658fdf
|
|
7
|
+
data.tar.gz: 1907ce0ab0e03837bcfdabb03f68be6e68397139da1deba9af4984b7c9dde72d337abb3537189a8839ec6ab2182e664a91782dff46eeef75820eb9f582c61cbc
|
|
@@ -29,5 +29,10 @@ class Glib::JsonUi::ActionBuilder
|
|
|
29
29
|
|
|
30
30
|
required :fallbackUrl
|
|
31
31
|
end
|
|
32
|
+
|
|
33
|
+
# Any component can listen to the refresh_state event and react appropriately.
|
|
34
|
+
# E.g. Stripe credit card component can refresh its token to make sure it is not stale.
|
|
35
|
+
class RefreshState < Action
|
|
36
|
+
end
|
|
32
37
|
end
|
|
33
38
|
end
|
|
@@ -225,6 +225,19 @@ class Glib::JsonUi::ViewBuilder
|
|
|
225
225
|
hash :placeholderView
|
|
226
226
|
end
|
|
227
227
|
|
|
228
|
+
# TODO
|
|
229
|
+
# class MultiImage < Text
|
|
230
|
+
# # file_rules = { fileType: 'image/*', maxFileSize: 5000 }
|
|
231
|
+
# # file_rules = { fileType: 'video/*', maxFileSize: 50000 }
|
|
232
|
+
# # file_rules = { fileType: 'application/pdf', maxFileSize: 5000 }
|
|
233
|
+
# # hash :accepts
|
|
234
|
+
|
|
235
|
+
# string :directUploadUrl
|
|
236
|
+
# # string :fileUrl
|
|
237
|
+
# # string :fileTitle
|
|
238
|
+
# hash :placeholderView
|
|
239
|
+
# end
|
|
240
|
+
|
|
228
241
|
class Date < AbstractField
|
|
229
242
|
date :min
|
|
230
243
|
date :max
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
module Glib
|
|
2
|
+
module SoftDeletable
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
default_scope { where(deleted_at: nil) }
|
|
7
|
+
scope :with_deleted, -> { unscope(where: :deleted_at) }
|
|
8
|
+
|
|
9
|
+
# "Soft delete" - set deleted_at if it is nil, actually destroy the record
|
|
10
|
+
# if forced.
|
|
11
|
+
#
|
|
12
|
+
# @param force [Boolean]
|
|
13
|
+
def destroy(force = nil)
|
|
14
|
+
return force_destroy_record if force == :force
|
|
15
|
+
return self if deleted?
|
|
16
|
+
|
|
17
|
+
soft_destroy_record
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Revive a soft-deleted record and associated records if soft-deleted,
|
|
21
|
+
# otherwise return self
|
|
22
|
+
def revive
|
|
23
|
+
return self unless deleted?
|
|
24
|
+
|
|
25
|
+
ActiveRecord::Base.transaction do
|
|
26
|
+
update(deleted_at: nil)
|
|
27
|
+
revive_associated_records
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Whether or not a record is deleted
|
|
32
|
+
def deleted?
|
|
33
|
+
deleted_at.present?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
def force_destroy_record
|
|
38
|
+
ActiveRecord::Base.transaction do
|
|
39
|
+
destroy_associated_records(:force)
|
|
40
|
+
method(:destroy).super_method.call
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def soft_destroy_record
|
|
45
|
+
ActiveRecord::Base.transaction do
|
|
46
|
+
destroy_associated_records
|
|
47
|
+
update(deleted_at: Time.zone.now)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def destroy_associated_records(force = nil)
|
|
52
|
+
associated_records.each { |r| r.destroy(force) }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def revive_associated_records
|
|
56
|
+
associated_records.each(&:revive)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# This should return an array of all associated records of an object that
|
|
60
|
+
# should be soft deleted with it (i.e. those that have dependent: :destroy
|
|
61
|
+
# set). In principle we could figure this out automatically but in the
|
|
62
|
+
# interest of simplicity we'll just define it manually for each class.
|
|
63
|
+
def associated_records
|
|
64
|
+
[]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -3,5 +3,8 @@ params.require(:user).each do |k, v|
|
|
|
3
3
|
value = v.is_a?(String) ? '"' + v + '"' : v
|
|
4
4
|
info += " #{k} => #{value}\n"
|
|
5
5
|
end
|
|
6
|
-
info +=
|
|
7
|
-
|
|
6
|
+
info += '}'
|
|
7
|
+
|
|
8
|
+
action.dialogs_alert message: info, onClose: ->(action) do
|
|
9
|
+
action.windows_refreshState
|
|
10
|
+
end
|
|
@@ -28,5 +28,10 @@ page.form options.merge(childViews: ->(form) do
|
|
|
28
28
|
rules = { fileType: 'pdf', maxFileSize: 5000 }
|
|
29
29
|
form.fields_file name: 'user[pdf2][]', width: 'matchParent', label: 'PDF Document', accepts: rules, directUploadUrl: rails_direct_uploads_url
|
|
30
30
|
|
|
31
|
+
# TODO
|
|
32
|
+
# rules = { fileType: 'image/*', maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
|
|
33
|
+
# form.fields_multiImage name: 'user[photos][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: rails_direct_uploads_url,
|
|
34
|
+
# placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
|
|
35
|
+
|
|
31
36
|
form.fields_submit text: 'Submit'
|
|
32
37
|
end)
|
|
@@ -65,6 +65,9 @@ page.list sections: [
|
|
|
65
65
|
template.thumbnail title: 'Timers', onClick: ->(action) do
|
|
66
66
|
action.windows_open url: json_ui_garage_url(path: 'forms/timers')
|
|
67
67
|
end
|
|
68
|
+
template.thumbnail title: 'Payments', onClick: ->(action) do
|
|
69
|
+
action.windows_open url: json_ui_garage_url(path: 'forms/payments')
|
|
70
|
+
end
|
|
68
71
|
end
|
|
69
72
|
end, ->(section) do
|
|
70
73
|
section.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
@@ -81,13 +84,13 @@ page.list sections: [
|
|
|
81
84
|
end
|
|
82
85
|
|
|
83
86
|
section.rows builder: ->(template) do
|
|
84
|
-
template.thumbnail title: 'Rich Text Editor', onClick: ->(action) do
|
|
87
|
+
template.thumbnail title: 'Basic Rich Text Editor', onClick: ->(action) do
|
|
85
88
|
action.windows_open url: json_ui_garage_url(path: 'forms/rich_text')
|
|
86
89
|
end
|
|
87
90
|
end
|
|
88
91
|
|
|
89
92
|
section.rows builder: ->(template) do
|
|
90
|
-
template.thumbnail title: '
|
|
93
|
+
template.thumbnail title: 'Advanced Rich Text Editor', onClick: ->(action) do
|
|
91
94
|
action.windows_open url: json_ui_garage_url(path: 'forms/new_rich_text')
|
|
92
95
|
end
|
|
93
96
|
|
|
@@ -4,7 +4,7 @@ page = json_ui_page json
|
|
|
4
4
|
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
5
|
|
|
6
6
|
page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
|
7
|
-
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
|
|
7
|
+
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name', value: 'Rich Text Editor'
|
|
8
8
|
|
|
9
9
|
# images = [
|
|
10
10
|
# {
|
|
@@ -30,6 +30,7 @@ page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', pad
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
json.imageUploader do
|
|
33
|
+
json.fieldName 'user[images_attributes]'
|
|
33
34
|
json.accepts(fileType: "image/*", maxFileSize: 5000)
|
|
34
35
|
json.directUploadUrl rails_direct_uploads_url
|
|
35
36
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
json.title 'Forms'
|
|
2
|
+
|
|
3
|
+
page = json_ui_page json
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
# Pass `refresh_state` to refresh the CC token after submission.
|
|
7
|
+
page.form \
|
|
8
|
+
url: json_ui_garage_url(path: 'forms/generic_post', refresh_state: true),
|
|
9
|
+
method: 'post',
|
|
10
|
+
padding: glib_json_padding_body,
|
|
11
|
+
childViews: ->(form) do
|
|
12
|
+
form.spacer height: 20
|
|
13
|
+
form.h2 text: 'Credit card'
|
|
14
|
+
form.spacer height: 6
|
|
15
|
+
form.fields_stripeToken \
|
|
16
|
+
name: 'user[stripe_token]',
|
|
17
|
+
width: 'matchParent',
|
|
18
|
+
publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx'
|
|
19
|
+
|
|
20
|
+
form.spacer height: 20
|
|
21
|
+
form.h2 text: 'Bank account'
|
|
22
|
+
form.spacer height: 6
|
|
23
|
+
form.fields_stripeExternalAccount \
|
|
24
|
+
name: 'user[stripe_external_account]',
|
|
25
|
+
width: 'matchParent',
|
|
26
|
+
publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx',
|
|
27
|
+
accountHolderName: 'John Doe',
|
|
28
|
+
accountHolderType: 'individual',
|
|
29
|
+
country: 'AU',
|
|
30
|
+
currency: 'AUD'
|
|
31
|
+
|
|
32
|
+
form.spacer height: 30
|
|
33
|
+
form.fields_submit text: 'Submit'
|
|
34
|
+
end
|
|
@@ -5,7 +5,7 @@ page = json_ui_page json
|
|
|
5
5
|
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
6
6
|
|
|
7
7
|
page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
|
8
|
-
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name'
|
|
8
|
+
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Name', value: 'Rich Text Editor'
|
|
9
9
|
|
|
10
10
|
# images = [
|
|
11
11
|
# {
|
|
@@ -48,6 +48,26 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
|
|
|
48
48
|
]
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
form.spacer height: 6
|
|
52
|
+
form.fields_check name: 'user[check1]', checkValue: 'on', label: 'Show text'
|
|
53
|
+
form.spacer height: 10
|
|
54
|
+
form.label text: 'Checked', showIf: {
|
|
55
|
+
"==": [
|
|
56
|
+
{
|
|
57
|
+
"var": 'user[check1]'
|
|
58
|
+
},
|
|
59
|
+
'on'
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
form.label text: 'Checked', showIf: {
|
|
63
|
+
"!=": [
|
|
64
|
+
{
|
|
65
|
+
"var": 'user[check1]'
|
|
66
|
+
},
|
|
67
|
+
'on'
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
|
|
51
71
|
form.spacer height: 20
|
|
52
72
|
form.h1 text: 'Radio Group'
|
|
53
73
|
form.fields_radioGroup name: 'user[radio1]', value: 'F', childViews: ->(group) do
|
|
@@ -34,7 +34,7 @@ page.form \
|
|
|
34
34
|
form.fields_phone \
|
|
35
35
|
name: 'user[phone2]',
|
|
36
36
|
width: 'matchParent',
|
|
37
|
-
label:
|
|
37
|
+
label: 'Phone field with Australia as the default country',
|
|
38
38
|
disableAutoDetect: true, # Disable country auto detect by user IP
|
|
39
39
|
defaultCountry: 'AU' # ISO Country code, see: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes
|
|
40
40
|
|
|
@@ -60,22 +60,6 @@ page.form \
|
|
|
60
60
|
validation: { required: { message: 'Required' } },
|
|
61
61
|
options: options
|
|
62
62
|
|
|
63
|
-
form.spacer height: 20
|
|
64
|
-
form.fields_stripeToken \
|
|
65
|
-
name: 'user[stripe_token]',
|
|
66
|
-
width: 'matchParent',
|
|
67
|
-
publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx'
|
|
68
|
-
|
|
69
|
-
form.spacer height: 20
|
|
70
|
-
form.fields_stripeExternalAccount \
|
|
71
|
-
name: 'user[stripe_external_account]',
|
|
72
|
-
width: 'matchParent',
|
|
73
|
-
publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx',
|
|
74
|
-
accountHolderName: 'John Doe',
|
|
75
|
-
accountHolderType: 'individual',
|
|
76
|
-
country: 'AU',
|
|
77
|
-
currency: 'AUD'
|
|
78
|
-
|
|
79
63
|
form.spacer height: 30
|
|
80
64
|
form.fields_submit text: 'Submit'
|
|
81
65
|
end
|
|
@@ -7,30 +7,31 @@ json_ui_page json do |page|
|
|
|
7
7
|
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
8
8
|
|
|
9
9
|
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
10
|
-
scroll.label text: "\n"
|
|
11
10
|
scroll.h1 text: 'Carousel with labels'
|
|
12
11
|
scroll.panels_carousel width: 'matchParent', childViews: ->(carousel) do
|
|
13
12
|
carousel.label text: 'Item 1'
|
|
14
13
|
carousel.label text: 'Item 2'
|
|
15
14
|
end
|
|
16
15
|
|
|
17
|
-
scroll.
|
|
16
|
+
scroll.spacer height: 20
|
|
18
17
|
scroll.h1 text: 'Carousel with images'
|
|
19
18
|
scroll.panels_carousel width: 'matchParent', childViews: ->(carousel) do
|
|
20
19
|
carousel.image url: image_url1, width: 'matchParent'
|
|
21
20
|
carousel.image url: image_url2, width: 'matchParent'
|
|
22
21
|
end
|
|
23
22
|
|
|
24
|
-
scroll.
|
|
23
|
+
scroll.spacer height: 20
|
|
25
24
|
scroll.h1 text: 'Carousel with complex layout'
|
|
26
25
|
scroll.panels_carousel width: 'matchParent', childViews: ->(carousel) do
|
|
27
|
-
|
|
26
|
+
height = 480
|
|
27
|
+
|
|
28
|
+
carousel.panels_vertical align: 'center', childViews: ->(panel) do
|
|
28
29
|
panel.h3 text: 'Item 1'
|
|
29
|
-
panel.image
|
|
30
|
+
panel.image height: height, url: image_url1
|
|
30
31
|
end
|
|
31
|
-
carousel.panels_vertical childViews: ->(panel) do
|
|
32
|
+
carousel.panels_vertical align: 'center', childViews: ->(panel) do
|
|
32
33
|
panel.h3 text: 'Item 2'
|
|
33
|
-
panel.image
|
|
34
|
+
panel.image height: height, url: image_url2
|
|
34
35
|
end
|
|
35
36
|
end
|
|
36
37
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
json.title 'Views'
|
|
2
|
+
|
|
3
|
+
json_ui_page json do |page|
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
7
|
+
|
|
8
|
+
product_id = 'APP_STORE_PRODUCT_KEY'
|
|
9
|
+
|
|
10
|
+
scroll.h2 text: 'IAP product button'
|
|
11
|
+
scroll.spacer height: 6
|
|
12
|
+
scroll.iap_productButton text: 'GET', productId: product_id, onClick: ->(action) do
|
|
13
|
+
action.iap_initiatePurchase mode: 'purchase', productId: product_id, onSuccess: ->(subaction) do
|
|
14
|
+
subaction.dialogs_alert message: 'Success'
|
|
15
|
+
end, onFailure: ->(subaction) do
|
|
16
|
+
subaction.dialogs_alert message: 'Failure'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -50,6 +50,17 @@ json_ui_page json do |page|
|
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
end,
|
|
53
|
+
->(section) do
|
|
54
|
+
section.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
55
|
+
header.h2 text: 'Android and iOS only (experimental)'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
section.rows builder: ->(template) do
|
|
59
|
+
template.thumbnail title: 'In-App Purchase', onClick: ->(action) do
|
|
60
|
+
action.windows_open url: json_ui_garage_url(path: 'views/iap')
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end,
|
|
53
64
|
->(section) do
|
|
54
65
|
section.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
55
66
|
header.h2 text: 'Reference'
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
module Glib
|
|
2
2
|
module JsonCrawler
|
|
3
3
|
class Router
|
|
4
|
-
attr_reader :read_only_actions
|
|
4
|
+
attr_reader :read_only_actions, :logger
|
|
5
5
|
|
|
6
6
|
def log(action, url, response = nil)
|
|
7
|
-
@logger
|
|
7
|
+
@logger +=' ' * @depth + [
|
|
8
8
|
action,
|
|
9
9
|
response.present? ? response.code : nil,
|
|
10
10
|
url
|
|
11
|
-
].compact.join(' :: ')
|
|
11
|
+
].compact.join(' :: ') + "\n"
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def initialize
|
|
14
|
+
def initialize
|
|
15
15
|
@depth = -1
|
|
16
|
-
@logger =
|
|
16
|
+
@logger = ''
|
|
17
17
|
@visitor = Glib::Json::Traversal::Visitor.new
|
|
18
18
|
@read_only_actions = Set.new
|
|
19
19
|
end
|
|
@@ -82,14 +82,6 @@ module Glib
|
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
def tear_down
|
|
86
|
-
# NOTE: Experimental, to address issue where sometimes changes don't get saved.
|
|
87
|
-
# FINDING: Doesn't work
|
|
88
|
-
# @logger.flush
|
|
89
|
-
|
|
90
|
-
@logger.close
|
|
91
|
-
end
|
|
92
|
-
|
|
93
85
|
def crawl_multiple(views, block)
|
|
94
86
|
@visitor.traverse_multiple views, block
|
|
95
87
|
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.5.
|
|
4
|
+
version: 0.5.78
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ''
|
|
@@ -93,6 +93,7 @@ files:
|
|
|
93
93
|
- app/helpers/glib/json_ui/action_builder.rb
|
|
94
94
|
- app/helpers/glib/json_ui/action_builder/dialogs.rb
|
|
95
95
|
- app/helpers/glib/json_ui/action_builder/http.rb
|
|
96
|
+
- app/helpers/glib/json_ui/action_builder/iap.rb
|
|
96
97
|
- app/helpers/glib/json_ui/action_builder/panels.rb
|
|
97
98
|
- app/helpers/glib/json_ui/action_builder/sheets.rb
|
|
98
99
|
- app/helpers/glib/json_ui/action_builder/snackbars.rb
|
|
@@ -111,8 +112,10 @@ files:
|
|
|
111
112
|
- app/helpers/glib/json_ui/view_builder/banners.rb
|
|
112
113
|
- app/helpers/glib/json_ui/view_builder/charts.rb
|
|
113
114
|
- app/helpers/glib/json_ui/view_builder/fields.rb
|
|
115
|
+
- app/helpers/glib/json_ui/view_builder/iap.rb
|
|
114
116
|
- app/helpers/glib/json_ui/view_builder/panels.rb
|
|
115
117
|
- app/helpers/glib/urls_helper.rb
|
|
118
|
+
- app/models/concerns/glib/soft_deletable.rb
|
|
116
119
|
- app/models/glib/active_storage/attachment.rb
|
|
117
120
|
- app/models/glib/active_storage/blob.rb
|
|
118
121
|
- app/models/glib/application_record.rb
|
|
@@ -149,6 +152,7 @@ files:
|
|
|
149
152
|
- app/views/json_ui/garage/forms/new_rich_text.json.jbuilder
|
|
150
153
|
- app/views/json_ui/garage/forms/online_participant1.json.jbuilder
|
|
151
154
|
- app/views/json_ui/garage/forms/online_participant2.json.jbuilder
|
|
155
|
+
- app/views/json_ui/garage/forms/payments.json.jbuilder
|
|
152
156
|
- app/views/json_ui/garage/forms/pickers.json.jbuilder
|
|
153
157
|
- app/views/json_ui/garage/forms/ratings.json.jbuilder
|
|
154
158
|
- app/views/json_ui/garage/forms/rich_text.json.jbuilder
|
|
@@ -215,6 +219,7 @@ files:
|
|
|
215
219
|
- app/views/json_ui/garage/views/calendar_data.json.jbuilder
|
|
216
220
|
- app/views/json_ui/garage/views/charts.json.jbuilder
|
|
217
221
|
- app/views/json_ui/garage/views/controls.json.jbuilder
|
|
222
|
+
- app/views/json_ui/garage/views/iap.json.jbuilder
|
|
218
223
|
- app/views/json_ui/garage/views/icon_names.json.jbuilder
|
|
219
224
|
- app/views/json_ui/garage/views/icons.json.jbuilder
|
|
220
225
|
- app/views/json_ui/garage/views/images.json.jbuilder
|