glib-web 4.44.4 → 5.0.1
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/format_helper.rb +1 -1
- data/app/helpers/glib/json_ui/abstract_builder.rb +1 -1
- data/app/helpers/glib/json_ui/action_builder/browsers.rb +1 -3
- data/app/helpers/glib/json_ui/view_builder/fields.rb +0 -53
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +0 -65
- data/app/views/json_ui/garage/test_page/_header.json.jbuilder +9 -2
- data/app/views/json_ui/garage/test_page/auth.json.jbuilder +37 -0
- data/app/views/json_ui/garage/test_page/browsers.json.jbuilder +1 -0
- data/app/views/json_ui/garage/test_page/custom.json.jbuilder +58 -50
- data/app/views/json_ui/garage/test_page/dialog.json.jbuilder +123 -26
- data/app/views/json_ui/garage/test_page/dirty_state.json.jbuilder +0 -5
- data/app/views/json_ui/garage/test_page/fields_creditCard.json.jbuilder +118 -0
- data/app/views/json_ui/garage/test_page/fields_date_time.json.jbuilder +213 -0
- data/app/views/json_ui/garage/test_page/fields_location.json.jbuilder +151 -0
- data/app/views/json_ui/garage/test_page/fields_otp.json.jbuilder +168 -0
- data/app/views/json_ui/garage/test_page/fields_phone.json.jbuilder +176 -0
- data/app/views/json_ui/garage/test_page/fields_rating.json.jbuilder +191 -0
- data/app/views/json_ui/garage/test_page/fields_richText.json.jbuilder +213 -0
- data/app/views/json_ui/garage/test_page/fields_stripeExternalAccount.json.jbuilder +146 -0
- data/app/views/json_ui/garage/test_page/fields_stripeToken.json.jbuilder +118 -0
- data/app/views/json_ui/garage/test_page/fields_upload.json.jbuilder +15 -1
- data/app/views/json_ui/garage/test_page/popovers.json.jbuilder +91 -16
- data/app/views/json_ui/garage/test_page/window.json.jbuilder +23 -14
- data/app/views/json_ui/garage/test_page/windows.json.jbuilder +74 -16
- data/lib/glib/rubocop/cops/multiline_method_call_style.rb +0 -8
- data/lib/tasks/db.rake +0 -1
- metadata +29 -13
- data/app/views/json_ui/garage/test_page/multiupload.json.jbuilder +0 -65
- data/lib/glib/doc_generator.rb +0 -386
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bf55f8e828ad48e18227bfeb9940e268090705f7dfeec2b180a1b7d858108f9b
|
|
4
|
+
data.tar.gz: 6aa26bf19c388341ec451e523910818871df09673bb5f816f6021e09a26a0cbc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 29f3fb45d898e5855420695e3c6c564cfaee9631506faf3d9e05d71ee6d549aa9be842d58127e998333396026cc2e68f27788c2877a394197b8b763e6b7f42b4
|
|
7
|
+
data.tar.gz: 390ab4fab4e75f3327dfab76e46b3f5868105d4ff0701873e9db9a91ef77fa8d1b92764652e45f806b0f3634438fff4541c34f4e827bad33c004479d47c73e7d
|
|
@@ -65,7 +65,7 @@ module Glib
|
|
|
65
65
|
|
|
66
66
|
required_properties = @@_required_properties[self.class.component_name] || []
|
|
67
67
|
required_properties.each do |prop|
|
|
68
|
-
raise "Property required: #{prop}. Properties provided: #{args}. Component: #{self.class.component_name}"
|
|
68
|
+
raise "Property required: #{prop}. Properties provided: #{args}. Component: #{self.class.component_name}" if args[prop].nil?
|
|
69
69
|
end
|
|
70
70
|
else
|
|
71
71
|
raise "Invalid properties: #{args}"
|
|
@@ -751,59 +751,6 @@ class Glib::JsonUi::ViewBuilder
|
|
|
751
751
|
end
|
|
752
752
|
end
|
|
753
753
|
|
|
754
|
-
# deprecated
|
|
755
|
-
class MultiUpload < AbstractField
|
|
756
|
-
include Glib::JsonUi::Default
|
|
757
|
-
include Glib::JsonUi::Upload
|
|
758
|
-
include Glib::JsonUi::FileUploadErrorHandler
|
|
759
|
-
|
|
760
|
-
array :files
|
|
761
|
-
string :uploadTitle
|
|
762
|
-
action :onFinishUpload
|
|
763
|
-
string :url # http post end point if you don't want to use onFinishUpload
|
|
764
|
-
|
|
765
|
-
def files(values)
|
|
766
|
-
@files = values
|
|
767
|
-
end
|
|
768
|
-
|
|
769
|
-
def responseMessages(values)
|
|
770
|
-
@responseMessages = values
|
|
771
|
-
end
|
|
772
|
-
|
|
773
|
-
def created
|
|
774
|
-
super
|
|
775
|
-
file_upload_error_handler_on_create
|
|
776
|
-
|
|
777
|
-
@placeholder ||= I18n.t('glib.multi_upload.placeholder', default: nil)
|
|
778
|
-
@hint ||= I18n.t('glib.multi_upload.hint', default: nil)
|
|
779
|
-
|
|
780
|
-
['200', '403', '401', 'else'].each do |status|
|
|
781
|
-
key = "glib.multi_upload.responseMessages.#{status}"
|
|
782
|
-
@responseMessages[status] = I18n.t(key) if I18n.exists?(key)
|
|
783
|
-
end
|
|
784
|
-
json.responseMessages(
|
|
785
|
-
(@responseMessages || {}).reverse_merge(
|
|
786
|
-
'200' => 'Completed',
|
|
787
|
-
'403' => 'Forbidden',
|
|
788
|
-
'401' => 'Session expired',
|
|
789
|
-
'else' => 'Failed'
|
|
790
|
-
)
|
|
791
|
-
)
|
|
792
|
-
|
|
793
|
-
json.placeholder @placeholder if @placeholder
|
|
794
|
-
json.hint @hint if @hint
|
|
795
|
-
|
|
796
|
-
if @prop && context
|
|
797
|
-
# association = form.nested_associations.last
|
|
798
|
-
# context = association || form
|
|
799
|
-
|
|
800
|
-
@files ||= context.field_value(@prop, collect_ids: false).to_a.map { |file| { name: file.blob&.filename, signed_id: file.signed_id, url: url_for(file) } }
|
|
801
|
-
end
|
|
802
|
-
|
|
803
|
-
json.files @files if @files.present?
|
|
804
|
-
end
|
|
805
|
-
end
|
|
806
|
-
|
|
807
754
|
class Upload < AbstractField
|
|
808
755
|
include Glib::JsonUi::Upload
|
|
809
756
|
include Glib::JsonUi::FileUploadErrorHandler
|
|
@@ -39,71 +39,6 @@ page.form options.merge(childViews: ->(form) do
|
|
|
39
39
|
# form.fields_multiImage name: 'user[photos][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: glib_direct_uploads_url,
|
|
40
40
|
# placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
|
|
41
41
|
|
|
42
|
-
form.spacer height: 16
|
|
43
|
-
form.label text: 'Simple file upload'
|
|
44
|
-
form.spacer height: 8
|
|
45
|
-
form.fields_multiUpload \
|
|
46
|
-
name: 'user[multi][]',
|
|
47
|
-
id: 'upload_1',
|
|
48
|
-
width: 360,
|
|
49
|
-
accepts: {
|
|
50
|
-
fileType: 'image',
|
|
51
|
-
maxFileSize: 100,
|
|
52
|
-
maxFileLength: 2,
|
|
53
|
-
maxFileLengthErrorText: {
|
|
54
|
-
body: 'try with a smaller number of files',
|
|
55
|
-
button: 'OK'
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
directUploadUrl: glib_direct_uploads_url,
|
|
59
|
-
uploadTitle: 'Files uploaded:',
|
|
60
|
-
storagePrefix: 'glib',
|
|
61
|
-
metadata: {
|
|
62
|
-
foo: 'bar',
|
|
63
|
-
zoo: 'baz'
|
|
64
|
-
},
|
|
65
|
-
# tagging: 'key=value&key1=value1',
|
|
66
|
-
tags: { key: 'value', key1: 'value1' },
|
|
67
|
-
files: [
|
|
68
|
-
{ name: 'File (Example)', signed_id: ActiveStorage::Attachment.first&.signed_id }
|
|
69
|
-
]
|
|
70
|
-
form.button text: 'Clear files', onClick: ->(action) do
|
|
71
|
-
action.components_set targetId: 'upload_1', data: { files: [], value: nil }
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
form.spacer height: 16
|
|
75
|
-
form.label text: 'File upload with onFinishUpload'
|
|
76
|
-
form.spacer height: 8
|
|
77
|
-
form.fields_multiUpload \
|
|
78
|
-
name: 'user[multi2][]',
|
|
79
|
-
id: 'upload_2',
|
|
80
|
-
width: 360,
|
|
81
|
-
accepts: {
|
|
82
|
-
fileType: 'image',
|
|
83
|
-
maxFileSize: 5000
|
|
84
|
-
},
|
|
85
|
-
directUploadUrl: glib_direct_uploads_url,
|
|
86
|
-
uploadTitle: 'Files uploaded:',
|
|
87
|
-
onFinishUpload: ->(action) { action.forms_submit }
|
|
88
|
-
form.button text: 'Populate files', onClick: ->(action) do
|
|
89
|
-
action.components_set targetId: 'upload_2', data: {
|
|
90
|
-
files: [
|
|
91
|
-
{ name: 'File (Example)', signed_id: ActiveStorage::Attachment.last&.signed_id }
|
|
92
|
-
],
|
|
93
|
-
value: [1]
|
|
94
|
-
}
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
form.spacer height: 16
|
|
98
|
-
form.label text: 'File upload without directUploadUrl'
|
|
99
|
-
form.spacer height: 8
|
|
100
|
-
form.fields_multiUpload \
|
|
101
|
-
name: 'user[multi3][]',
|
|
102
|
-
width: 360,
|
|
103
|
-
accepts: { fileType: 'image', maxFileSize: 100, maxFileLength: 2 },
|
|
104
|
-
uploadTitle: 'Files uploaded:',
|
|
105
|
-
onFinishUpload: ->(action) { action.forms_submit }
|
|
106
|
-
|
|
107
42
|
form.spacer height: 16
|
|
108
43
|
form.label text: 'Sign'
|
|
109
44
|
form.spacer height: 8
|
|
@@ -18,7 +18,6 @@ nav_groups = {
|
|
|
18
18
|
'snackbars',
|
|
19
19
|
'storage_items',
|
|
20
20
|
'timeouts',
|
|
21
|
-
'window',
|
|
22
21
|
'windows'
|
|
23
22
|
],
|
|
24
23
|
'Forms' => [
|
|
@@ -26,14 +25,22 @@ nav_groups = {
|
|
|
26
25
|
'dirty_state',
|
|
27
26
|
'fields_select',
|
|
28
27
|
'fields_dynamicSelect',
|
|
28
|
+
'fields_date_time',
|
|
29
|
+
'fields_location',
|
|
30
|
+
'fields_phone',
|
|
31
|
+
'fields_otp',
|
|
32
|
+
'fields_rating',
|
|
33
|
+
'fields_richText',
|
|
29
34
|
'fields_sign',
|
|
35
|
+
'fields_stripeToken',
|
|
36
|
+
'fields_stripeExternalAccount',
|
|
37
|
+
'fields_creditCard',
|
|
30
38
|
'fields_timer',
|
|
31
39
|
'fields_upload',
|
|
32
40
|
'fields_url_fragment',
|
|
33
41
|
'fields_captcha',
|
|
34
42
|
'form',
|
|
35
43
|
'form_dynamic',
|
|
36
|
-
'multiupload',
|
|
37
44
|
'selectable'
|
|
38
45
|
],
|
|
39
46
|
'Lists' => [
|
|
@@ -107,6 +107,43 @@ page.body(
|
|
|
107
107
|
)
|
|
108
108
|
end
|
|
109
109
|
)
|
|
110
|
+
|
|
111
|
+
res.spacer height: 16
|
|
112
|
+
res.hr width: 'matchParent'
|
|
113
|
+
res.spacer height: 16
|
|
114
|
+
|
|
115
|
+
res.h2 text: 'auth/restart'
|
|
116
|
+
res.spacer height: 8
|
|
117
|
+
res.button(
|
|
118
|
+
text: 'auth/restart',
|
|
119
|
+
onClick: ->(action) do
|
|
120
|
+
action.auth_restart
|
|
121
|
+
end
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
res.spacer height: 16
|
|
125
|
+
res.hr width: 'matchParent'
|
|
126
|
+
res.spacer height: 16
|
|
127
|
+
|
|
128
|
+
res.h2 text: 'auth/creditCard'
|
|
129
|
+
res.label text: 'Requires a Stripe public key and a client secret from your server.'
|
|
130
|
+
res.spacer height: 8
|
|
131
|
+
res.button(
|
|
132
|
+
text: 'auth/creditCard (setup only)',
|
|
133
|
+
onClick: ->(action) do
|
|
134
|
+
action.auth_creditCard(
|
|
135
|
+
publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx',
|
|
136
|
+
clientSecret: 'set_your_client_secret',
|
|
137
|
+
setupOnly: true,
|
|
138
|
+
onSuccess: ->(subaction) do
|
|
139
|
+
subaction.snackbars_alert message: 'Card setup succeeded', styleClass: 'success'
|
|
140
|
+
end,
|
|
141
|
+
onFailure: ->(subaction) do
|
|
142
|
+
subaction.snackbars_alert message: 'Card setup failed', styleClass: 'danger'
|
|
143
|
+
end
|
|
144
|
+
)
|
|
145
|
+
end
|
|
146
|
+
)
|
|
110
147
|
end
|
|
111
148
|
)
|
|
112
149
|
end
|
|
@@ -2,55 +2,63 @@ json.title 'Test Page (Custom)'
|
|
|
2
2
|
|
|
3
3
|
page = json_ui_page json
|
|
4
4
|
|
|
5
|
-
page.body
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
5
|
+
page.body(
|
|
6
|
+
childViews: ->(body) do
|
|
7
|
+
render 'json_ui/garage/test_page/header', view: body
|
|
8
|
+
body.panels_responsive(
|
|
9
|
+
padding: glib_json_padding_body,
|
|
10
|
+
childViews: ->(res) do
|
|
11
|
+
res.h2 text: 'Overview'
|
|
12
|
+
res.p text: 'Custom panels render a predefined template with custom data payloads.'
|
|
13
|
+
data_primary = { imageUrl: glib_json_image_standard_url, title: 'Primary', subtitle: 'Thumbnail template' }
|
|
14
|
+
data_alt = { imageUrl: glib_json_image_standard_url, title: 'Alternate', subtitle: 'Alternate data payload' }
|
|
15
|
+
res.spacer height: 12
|
|
16
|
+
res.hr width: 'matchParent'
|
|
17
|
+
res.h2 text: 'Basic'
|
|
18
|
+
res.spacer height: 8
|
|
19
|
+
res.panels_custom id: 'custom_main', template: 'thumbnail', width: 'matchParent', backgroundColor: '#fafafa', data: data_primary
|
|
20
|
+
res.spacer height: 12
|
|
21
|
+
res.hr width: 'matchParent'
|
|
22
|
+
res.h2 text: 'Variants and Props'
|
|
23
|
+
res.spacer height: 8
|
|
24
|
+
res.panels_flow(
|
|
25
|
+
innerPadding: { bottom: 0 },
|
|
26
|
+
childViews: ->(flow) do
|
|
27
|
+
flow.button(
|
|
28
|
+
text: 'Primary data',
|
|
29
|
+
onClick: ->(action) do
|
|
30
|
+
action.components_set targetId: 'custom_main', data: { data: data_primary }
|
|
31
|
+
end
|
|
32
|
+
)
|
|
33
|
+
flow.spacer width: 4
|
|
34
|
+
flow.button(
|
|
35
|
+
text: 'Alternate data',
|
|
36
|
+
onClick: ->(action) do
|
|
37
|
+
action.components_set targetId: 'custom_main', data: { data: data_alt }
|
|
38
|
+
end
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
)
|
|
42
|
+
res.spacer height: 12
|
|
43
|
+
res.hr width: 'matchParent'
|
|
44
|
+
res.h2 text: 'Actions and Events'
|
|
45
|
+
res.spacer height: 8
|
|
46
|
+
res.label id: 'custom_action_status', text: 'Action status: idle'
|
|
47
|
+
res.spacer height: 6
|
|
48
|
+
res.panels_custom(
|
|
49
|
+
template: 'thumbnail',
|
|
50
|
+
data: data_primary,
|
|
51
|
+
onClick: ->(action) do
|
|
52
|
+
action.components_set targetId: 'custom_action_status', data: { text: 'Action status: clicked' }
|
|
53
|
+
end
|
|
54
|
+
)
|
|
55
|
+
res.spacer height: 12
|
|
56
|
+
res.hr width: 'matchParent'
|
|
57
|
+
res.h2 text: 'Edge and Advanced'
|
|
58
|
+
res.spacer height: 8
|
|
59
|
+
res.label text: 'Non-existent template'
|
|
60
|
+
res.panels_custom template: 'nonExistentTemplate'
|
|
30
61
|
end
|
|
31
|
-
|
|
32
|
-
flow.button text: 'Alternate data', onClick: ->(action) do
|
|
33
|
-
action.components_set targetId: 'custom_main', data: { data: data_alt }
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
res.spacer height: 12
|
|
38
|
-
res.hr width: 'matchParent'
|
|
39
|
-
|
|
40
|
-
res.h2 text: 'Actions and Events'
|
|
41
|
-
res.spacer height: 8
|
|
42
|
-
res.label id: 'custom_action_status', text: 'Action status: idle'
|
|
43
|
-
res.spacer height: 6
|
|
44
|
-
res.panels_custom template: 'thumbnail', data: data_primary, onClick: ->(action) do
|
|
45
|
-
action.components_set targetId: 'custom_action_status', data: { text: 'Action status: clicked' }
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
res.spacer height: 12
|
|
49
|
-
res.hr width: 'matchParent'
|
|
50
|
-
|
|
51
|
-
res.h2 text: 'Edge and Advanced'
|
|
52
|
-
res.spacer height: 8
|
|
53
|
-
res.label text: 'Non-existent template'
|
|
54
|
-
res.panels_custom template: 'nonExistentTemplate'
|
|
62
|
+
)
|
|
55
63
|
end
|
|
56
|
-
|
|
64
|
+
)
|
|
@@ -4,35 +4,132 @@ json.title 'Test Page (Form)'
|
|
|
4
4
|
|
|
5
5
|
page = json_ui_page json
|
|
6
6
|
|
|
7
|
-
page.body
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
page.body(
|
|
8
|
+
childViews: ->(body) do
|
|
9
|
+
render 'json_ui/garage/test_page/header', view: body
|
|
10
|
+
body.panels_responsive(
|
|
11
|
+
padding: glib_json_padding_body,
|
|
12
|
+
childViews: ->(res) do
|
|
13
|
+
res.h2 text: 'Dialog'
|
|
14
|
+
res.spacer height: 8
|
|
15
|
+
res.button(
|
|
16
|
+
text: 'Dialog updateExisting',
|
|
17
|
+
onClick: ->(action) do
|
|
18
|
+
action.runMultiple(
|
|
19
|
+
childActions: ->(saction) do
|
|
20
|
+
saction.dialogs_show(
|
|
21
|
+
content: ->(dialog) do
|
|
22
|
+
dialog.body(
|
|
23
|
+
padding: glib_json_padding_body,
|
|
24
|
+
childViews: ->(sbody) do
|
|
25
|
+
sbody.h1 text: 'Hello world'
|
|
26
|
+
sbody.button(
|
|
27
|
+
text: 'change dialog content',
|
|
28
|
+
onClick: ->(ssaction) do
|
|
29
|
+
ssaction.dialogs_show(
|
|
30
|
+
updateExisting: true,
|
|
31
|
+
disableCloseButton: true,
|
|
32
|
+
content: ->(sdialog) do
|
|
33
|
+
sdialog.body(
|
|
34
|
+
padding: glib_json_padding_body,
|
|
35
|
+
childViews: ->(ssbody) do
|
|
36
|
+
ssbody.h1 text: 'Hello world (updated)'
|
|
37
|
+
ssbody.spacer height: 8
|
|
38
|
+
ssbody.button(
|
|
39
|
+
text: 'close',
|
|
40
|
+
onClick: ->(xaction) do
|
|
41
|
+
xaction.dialogs_close
|
|
42
|
+
end
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
)
|
|
25
52
|
end
|
|
26
|
-
|
|
53
|
+
)
|
|
27
54
|
end
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
)
|
|
58
|
+
res.spacer height: 4
|
|
59
|
+
res.button(
|
|
60
|
+
text: 'Dialog open',
|
|
61
|
+
onClick: ->(action) do
|
|
62
|
+
action.dialogs_open url: json_ui_garage_url(path: 'test_page/dialog_open')
|
|
63
|
+
end
|
|
64
|
+
)
|
|
65
|
+
res.spacer height: 4
|
|
66
|
+
res.button(
|
|
67
|
+
text: 'Dialog closeAll',
|
|
68
|
+
onClick: ->(action) do
|
|
69
|
+
action.runMultiple childActions: ->(saction) do
|
|
70
|
+
saction.dialogs_open url: json_ui_garage_url(path: 'test_page/dialog_open')
|
|
71
|
+
saction.dialogs_open url: json_ui_garage_url(path: 'test_page/dialog_open')
|
|
72
|
+
saction.timeouts_set interval: 800, onTimeout: ->(ssaction) do
|
|
73
|
+
ssaction.dialogs_closeAll
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
)
|
|
78
|
+
res.spacer height: 4
|
|
79
|
+
res.button(
|
|
80
|
+
text: 'Dialog reload',
|
|
81
|
+
onClick: ->(action) do
|
|
82
|
+
action.runMultiple childActions: ->(saction) do
|
|
83
|
+
saction.dialogs_open url: json_ui_garage_url(path: 'test_page/dialog_open')
|
|
84
|
+
saction.timeouts_set interval: 800, onTimeout: ->(ssaction) do
|
|
85
|
+
ssaction.dialogs_reload
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
)
|
|
90
|
+
res.spacer height: 4
|
|
91
|
+
res.button(
|
|
92
|
+
text: 'Dialog notification',
|
|
93
|
+
onClick: ->(action) do
|
|
94
|
+
action.dialogs_notification(
|
|
95
|
+
title: 'Hello World',
|
|
96
|
+
message: 'This is a notification',
|
|
97
|
+
onClick: ->(subaction) do
|
|
98
|
+
subaction.dialogs_alert message: 'Perform action'
|
|
99
|
+
end
|
|
100
|
+
)
|
|
101
|
+
end
|
|
102
|
+
)
|
|
103
|
+
res.spacer height: 4
|
|
104
|
+
res.button(
|
|
105
|
+
text: 'Dialog oauth',
|
|
106
|
+
onClick: ->(action) do
|
|
107
|
+
if respond_to?(:user_facebook_omniauth_authorize_url)
|
|
108
|
+
provider = {
|
|
109
|
+
name: 'facebook',
|
|
110
|
+
webRequestUrl: user_facebook_omniauth_authorize_url(format: nil, _render: nil),
|
|
111
|
+
requestUrl: user_facebook_omniauth_authorize_url(format: nil),
|
|
112
|
+
clientId: Devise.omniauth_configs[:facebook].strategy[:client_id],
|
|
113
|
+
permissions: Devise.omniauth_configs[:facebook].strategy[:scope],
|
|
114
|
+
redirectUrl: user_facebook_omniauth_callback_url(format: nil)
|
|
115
|
+
}
|
|
116
|
+
action.dialogs_oauth(
|
|
117
|
+
provider: provider,
|
|
118
|
+
providerParamName: 'session[oauth_provider]',
|
|
119
|
+
callbackUrlParamName: 'session[[oauth_callback_url]',
|
|
120
|
+
onSuccess: ->(subaction) do
|
|
121
|
+
subaction.http_post(
|
|
122
|
+
url: json_ui_garage_url(path: 'actions/dialogs_oauth_post'),
|
|
123
|
+
formData: { authenticity_token: form_authenticity_token }
|
|
124
|
+
)
|
|
125
|
+
end
|
|
126
|
+
)
|
|
127
|
+
else
|
|
128
|
+
action.dialogs_alert message: 'To enable this, set up omniauth using devise'
|
|
28
129
|
end
|
|
29
130
|
end
|
|
30
|
-
|
|
131
|
+
)
|
|
31
132
|
end
|
|
32
|
-
|
|
33
|
-
res.spacer height: 4
|
|
34
|
-
res.button text: 'Dialog open', onClick: ->(action) do
|
|
35
|
-
action.dialogs_open url: json_ui_garage_url(path: 'test_page/dialog_open')
|
|
36
|
-
end
|
|
133
|
+
)
|
|
37
134
|
end
|
|
38
|
-
|
|
135
|
+
)
|
|
@@ -28,11 +28,6 @@ page.body childViews: ->(body) do
|
|
|
28
28
|
form.fields_check name: 'user[check][]', checkValue: 'choice2', label: 'choice2'
|
|
29
29
|
form.fields_check name: 'user[check][]', checkValue: 'choice2', label: 'choice3', value: 'choice2'
|
|
30
30
|
|
|
31
|
-
form.spacer height: 14
|
|
32
|
-
form.button text: 'navigate', onClick: ->(action) do
|
|
33
|
-
action.windows_open updateExisting: true, url: json_ui_garage_url(path: 'test_page/multiupload')
|
|
34
|
-
end
|
|
35
|
-
|
|
36
31
|
form.spacer height: 24
|
|
37
32
|
form.panels_split width: 'matchParent', content: ->(split) do
|
|
38
33
|
split.left childViews: ->(left) do
|