glib-web 0.5.5
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 +7 -0
- data/app/controllers/concerns/glib/auth/policy.rb +148 -0
- data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -0
- data/app/controllers/concerns/glib/json/libs.rb +144 -0
- data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -0
- data/app/controllers/concerns/glib/json/transformation.rb +11 -0
- data/app/controllers/concerns/glib/json/traversal.rb +85 -0
- data/app/controllers/concerns/glib/json/ui.rb +70 -0
- data/app/controllers/concerns/glib/json/validation.rb +13 -0
- data/app/controllers/glib/home_controller.rb +16 -0
- data/app/helpers/glib/app_feature_support_helper.rb +16 -0
- data/app/helpers/glib/dynamic_images_helper.rb +52 -0
- data/app/helpers/glib/dynamic_texts_helper.rb +42 -0
- data/app/helpers/glib/forms_helper.rb +15 -0
- data/app/helpers/glib/json_ui/abstract_builder.rb +281 -0
- data/app/helpers/glib/json_ui/action_builder.rb +81 -0
- data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -0
- data/app/helpers/glib/json_ui/action_builder/http.rb +19 -0
- data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -0
- data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -0
- data/app/helpers/glib/json_ui/action_builder/windows.rb +25 -0
- data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -0
- data/app/helpers/glib/json_ui/generic_builders.rb +28 -0
- data/app/helpers/glib/json_ui/list_builders.rb +87 -0
- data/app/helpers/glib/json_ui/menu_builder.rb +52 -0
- data/app/helpers/glib/json_ui/page_helper.rb +187 -0
- data/app/helpers/glib/json_ui/response_helper.rb +23 -0
- data/app/helpers/glib/json_ui/split_builders.rb +32 -0
- data/app/helpers/glib/json_ui/styling_helper.rb +25 -0
- data/app/helpers/glib/json_ui/table_builders.rb +74 -0
- data/app/helpers/glib/json_ui/view_builder.rb +185 -0
- data/app/helpers/glib/json_ui/view_builder/banners.rb +24 -0
- data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -0
- data/app/helpers/glib/json_ui/view_builder/fields.rb +213 -0
- data/app/helpers/glib/json_ui/view_builder/panels.rb +219 -0
- data/app/models/glib/active_storage/attachment.rb +9 -0
- data/app/models/glib/active_storage/blob.rb +9 -0
- data/app/models/glib/dynamic_text_record.rb +9 -0
- data/app/models/glib/text.rb +96 -0
- data/app/policies/glib/application_policy.rb +164 -0
- data/app/validators/email_typo_validator.rb +38 -0
- data/app/validators/email_validator.rb +7 -0
- data/app/validators/url_validator.rb +20 -0
- data/app/views/app/views/json_ui/vue/renderer.html.erb +35 -0
- data/app/views/json_ui/garage/_nav_menu.json.jbuilder +71 -0
- data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -0
- data/app/views/json_ui/garage/actions/_http.json.jbuilder +18 -0
- data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -0
- data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +19 -0
- data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -0
- data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +18 -0
- data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -0
- data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -0
- data/app/views/json_ui/garage/actions/index.json.jbuilder +23 -0
- data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +7 -0
- data/app/views/json_ui/garage/forms/basic.json.jbuilder +34 -0
- data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -0
- data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +44 -0
- data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +41 -0
- data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +25 -0
- data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -0
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +58 -0
- data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +31 -0
- data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -0
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +28 -0
- data/app/views/json_ui/garage/forms/index.json.jbuilder +101 -0
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +46 -0
- data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -0
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +70 -0
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +88 -0
- data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +32 -0
- data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -0
- data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +24 -0
- data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -0
- data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -0
- data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +22 -0
- data/app/views/json_ui/garage/home/blank.json.jbuilder +11 -0
- data/app/views/json_ui/garage/home/index.json.jbuilder +32 -0
- data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -0
- data/app/views/json_ui/garage/lists/_infinite_scroll_section.json.jbuilder +20 -0
- data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +19 -0
- data/app/views/json_ui/garage/lists/fab.json.jbuilder +14 -0
- data/app/views/json_ui/garage/lists/index.json.jbuilder +23 -0
- data/app/views/json_ui/garage/lists/infinite_scroll.json.jbuilder +38 -0
- data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -0
- data/app/views/json_ui/garage/notifications/index.json.jbuilder +18 -0
- data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -0
- data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -0
- data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -0
- data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -0
- data/app/views/json_ui/garage/pages/index.json.jbuilder +47 -0
- data/app/views/json_ui/garage/pages/layout.json.jbuilder +19 -0
- data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -0
- data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -0
- data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +27 -0
- data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -0
- data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -0
- data/app/views/json_ui/garage/panels/carousel.json.jbuilder +16 -0
- data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -0
- data/app/views/json_ui/garage/panels/flow.json.jbuilder +49 -0
- data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -0
- data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -0
- data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -0
- data/app/views/json_ui/garage/panels/responsive.json.jbuilder +88 -0
- data/app/views/json_ui/garage/panels/split.json.jbuilder +183 -0
- data/app/views/json_ui/garage/panels/vertical.json.jbuilder +50 -0
- data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -0
- data/app/views/json_ui/garage/services/image.json.jbuilder +47 -0
- data/app/views/json_ui/garage/services/index.json.jbuilder +17 -0
- data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +13 -0
- data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +38 -0
- data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +39 -0
- data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -0
- data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -0
- data/app/views/json_ui/garage/tables/index.json.jbuilder +26 -0
- data/app/views/json_ui/garage/tables/layout.json.jbuilder +38 -0
- data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -0
- data/app/views/json_ui/garage/views/banners.json.jbuilder +51 -0
- data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -0
- data/app/views/json_ui/garage/views/carousels.json.jbuilder +37 -0
- data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -0
- data/app/views/json_ui/garage/views/images.json.jbuilder +89 -0
- data/app/views/json_ui/garage/views/index.json.jbuilder +48 -0
- data/app/views/json_ui/garage/views/links.json.jbuilder +70 -0
- data/app/views/json_ui/garage/views/map_data.json.jbuilder +43 -0
- data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -0
- data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -0
- data/app/views/json_ui/garage/views/texts.json.jbuilder +41 -0
- data/app/views/layouts/json_ui/renderer.html.erb +32 -0
- data/config/routes.rb +8 -0
- data/lib/generators/glib/install_generator.rb +24 -0
- data/lib/generators/templates/20191017062519_create_texts.rb +12 -0
- data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -0
- data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -0
- data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -0
- data/lib/generators/templates/database.yml +107 -0
- data/lib/generators/templates/dynamic_text.rb +2 -0
- data/lib/glib-web.rb +8 -0
- data/lib/glib/crypt.rb +1 -0
- data/lib/glib/crypt/utils.rb +26 -0
- data/lib/glib/dynamic_text.rb +1 -0
- data/lib/glib/dynamic_text/config.rb +21 -0
- data/lib/glib/engine.rb +7 -0
- data/lib/glib/json_crawler.rb +10 -0
- data/lib/glib/json_crawler/action_crawler.rb +20 -0
- data/lib/glib/json_crawler/action_crawlers/action_http.rb +14 -0
- data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -0
- data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -0
- data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +15 -0
- data/lib/glib/json_crawler/action_crawlers/windows_open.rb +28 -0
- data/lib/glib/json_crawler/coverage.rb +20 -0
- data/lib/glib/json_crawler/http.rb +120 -0
- data/lib/glib/json_crawler/router.rb +86 -0
- data/lib/glib/test_helpers.rb +40 -0
- data/lib/glib/value.rb +7 -0
- data/lib/glib/version.rb +5 -0
- data/lib/tasks/db.rake +95 -0
- metadata +246 -0
|
@@ -0,0 +1,40 @@
|
|
|
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/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'
|
|
8
|
+
|
|
9
|
+
# images = [
|
|
10
|
+
# {
|
|
11
|
+
# value: "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4",
|
|
12
|
+
# fileUrl: "https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100"
|
|
13
|
+
# }
|
|
14
|
+
# ]
|
|
15
|
+
# form.fields_richText name: 'user[bio]', width: 'matchParent', label: 'Content', images: images, value: '<p>Test {{image1}}</p>'
|
|
16
|
+
|
|
17
|
+
json.child! do
|
|
18
|
+
json.view 'fields/richText-v1'
|
|
19
|
+
json.width 'matchParent'
|
|
20
|
+
json.label 'Content'
|
|
21
|
+
json.name 'user[bio]'
|
|
22
|
+
json.value '<p>Test {{image1}}</p>'
|
|
23
|
+
|
|
24
|
+
json.images do
|
|
25
|
+
json.child! do
|
|
26
|
+
json.value "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--193dc0d939b9558fc4973fafbba91d989cbb04d4"
|
|
27
|
+
# json.fileTitle "hita i hanom hg.jpg"
|
|
28
|
+
json.fileUrl "https://imageserver-demo.herokuapp.com/image/itinerarybuilder-demo/o6CKzNt67PWnkPdUEnWMt7pr?h=100&w=100"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
json.imageUploader do
|
|
33
|
+
json.accepts(fileType: "image/*", maxFileSize: 5000)
|
|
34
|
+
json.directUploadUrl rails_direct_uploads_url
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
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: glib_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
|
+
'brisbane' => 'Brisbane',
|
|
13
|
+
'canberra' => 'Canberra',
|
|
14
|
+
'melbourne' => 'Melbourne',
|
|
15
|
+
'sydney' => 'Sydney',
|
|
16
|
+
}
|
|
17
|
+
form.fields_select name: 'user[city]', width: 'matchParent', label: 'Primary Language', options: languages.map { |k, v| { value: k, text: v } }, value: 'canberra'
|
|
18
|
+
form.fields_select name: 'user[cities][]', width: 'matchParent', label: 'Preferred Languages', options: languages.map { |k, v| { value: k, text: v } }, value: ['melbourne', 'sydney'], multiple: true
|
|
19
|
+
|
|
20
|
+
form.spacer height: 20
|
|
21
|
+
form.h2 text: 'Select fields with grouping'
|
|
22
|
+
form.spacer height: 6
|
|
23
|
+
form.label text: 'Applicable to select fields with many options'
|
|
24
|
+
form.spacer height: 6
|
|
25
|
+
|
|
26
|
+
languages = {
|
|
27
|
+
"East Asia" => {
|
|
28
|
+
"zh" => "Chinese",
|
|
29
|
+
"ja" => "Japanese",
|
|
30
|
+
"ko" => "Korean",
|
|
31
|
+
},
|
|
32
|
+
"Middle East" => {
|
|
33
|
+
"ar" => 'Arabic',
|
|
34
|
+
"hi" => "Hindi",
|
|
35
|
+
},
|
|
36
|
+
"Europe" => {
|
|
37
|
+
"nl" => "Dutch",
|
|
38
|
+
"en" => "English",
|
|
39
|
+
"fr" => "French",
|
|
40
|
+
"de" => "German",
|
|
41
|
+
"it" => "Italian",
|
|
42
|
+
"pt" => "Portuguese",
|
|
43
|
+
"es" => "Spanish",
|
|
44
|
+
},
|
|
45
|
+
"Eastern Europe" => {
|
|
46
|
+
"ru" => "Russian",
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
options = []
|
|
50
|
+
languages.each do |group, sub|
|
|
51
|
+
options << { type: 'label', text: group }
|
|
52
|
+
options.concat(sub.map { |k, v| { value: k, text: v } })
|
|
53
|
+
options << { type: 'divider' }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
form.fields_select name: 'user[language]', width: 'matchParent', label: 'Primary Language', options: options, value: 'nl'
|
|
57
|
+
form.fields_select name: 'user[languages][]', width: 'matchParent', label: 'Primary Language', options: options, value: ['ja', 'de'], multiple: true
|
|
58
|
+
|
|
59
|
+
form.spacer height: 20
|
|
60
|
+
form.h2 text: 'Autocomplete (select with manual entry)'
|
|
61
|
+
form.spacer height: 6
|
|
62
|
+
skills = ['Singing', 'Dancing', 'Fighting']
|
|
63
|
+
form.fields_autocomplete name: 'user[skill]', width: 'matchParent', label: 'Skill', options: skills, value: 'Singing'
|
|
64
|
+
form.fields_autocomplete name: 'user[skills][]', width: 'matchParent', label: 'Skills', options: skills, value: ['Dancing', 'Fencing'], multiple: true
|
|
65
|
+
|
|
66
|
+
form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
json.title 'Forms'
|
|
2
|
+
|
|
3
|
+
page = json_ui_page json
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
page.form url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
|
|
7
|
+
form.h1 text: 'Text'
|
|
8
|
+
form.fields_password name: 'user[text1]', width: 'matchParent', label: 'Type "show"'
|
|
9
|
+
form.label text: 'Typed', showIf: {
|
|
10
|
+
"==": [
|
|
11
|
+
{
|
|
12
|
+
"var": 'user[text1]'
|
|
13
|
+
},
|
|
14
|
+
'show'
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
form.spacer height: 20
|
|
19
|
+
form.h1 text: 'Textarea'
|
|
20
|
+
form.fields_textarea name: 'user[textarea1]', width: 'matchParent', label: 'Type "show"'
|
|
21
|
+
form.label text: 'Typed', showIf: {
|
|
22
|
+
"==": [
|
|
23
|
+
{
|
|
24
|
+
"var": 'user[textarea1]'
|
|
25
|
+
},
|
|
26
|
+
'show'
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
form.spacer height: 20
|
|
31
|
+
form.h1 text: 'Check'
|
|
32
|
+
form.fields_check name: 'user[check1]', value: 'on', label: 'Show text'
|
|
33
|
+
form.spacer height: 10
|
|
34
|
+
form.label text: 'Checked', showIf: {
|
|
35
|
+
"==": [
|
|
36
|
+
{
|
|
37
|
+
"var": 'user[check1]'
|
|
38
|
+
},
|
|
39
|
+
'on'
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
form.spacer height: 20
|
|
44
|
+
form.h1 text: 'Radio Group'
|
|
45
|
+
form.fields_radioGroup name: 'user[radio1]', value: 'F', childViews: ->(group) do
|
|
46
|
+
group.fields_radio value: 'show', label: 'Show'
|
|
47
|
+
group.fields_radio value: 'hide', label: 'Hide'
|
|
48
|
+
end
|
|
49
|
+
form.spacer height: 10
|
|
50
|
+
form.label text: 'Chosen', showIf: {
|
|
51
|
+
"==": [
|
|
52
|
+
{
|
|
53
|
+
"var": 'user[radio1]'
|
|
54
|
+
},
|
|
55
|
+
'show'
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
form.spacer height: 20
|
|
60
|
+
form.h1 text: 'Select'
|
|
61
|
+
options = ['show', 'hide']
|
|
62
|
+
form.fields_select name: 'user[select1]', width: 'matchParent', label: 'Select "show"', options: options
|
|
63
|
+
form.label text: 'Selected', showIf: {
|
|
64
|
+
"==": [
|
|
65
|
+
{
|
|
66
|
+
"var": 'user[select1]'
|
|
67
|
+
},
|
|
68
|
+
'show'
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
form.spacer height: 20
|
|
73
|
+
form.h1 text: 'Combo1'
|
|
74
|
+
form.label text: 'Select the same option on both the radio and select fields above'
|
|
75
|
+
form.spacer height: 10
|
|
76
|
+
form.h3 text: 'Same!', showIf: {
|
|
77
|
+
"==": [
|
|
78
|
+
{
|
|
79
|
+
"var": 'user[radio1]'
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"var": 'user[select1]'
|
|
83
|
+
},
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
form.spacer height: 40
|
|
88
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
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/basic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
|
|
7
|
+
form.fields_text name: 'user[name]', width: 'matchParent', label: 'Search', styleClasses: ['outlined', 'rounded']
|
|
8
|
+
|
|
9
|
+
form.spacer height: 14
|
|
10
|
+
form.fields_password name: 'user[password]', width: 'matchParent', label: 'Password', placeholder: 'Type your password', styleClass: 'outlined'
|
|
11
|
+
|
|
12
|
+
form.spacer height: 14
|
|
13
|
+
form.fields_stripeToken name: 'user[stripe_token_outlined]', width: 'matchParent', publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx', styleClass: 'outlined'
|
|
14
|
+
|
|
15
|
+
form.spacer height: 14
|
|
16
|
+
form.fields_stripeToken name: 'user[stripe_token_individual]', width: 'matchParent', publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx', styleClass: 'individual'
|
|
17
|
+
|
|
18
|
+
form.spacer height: 14
|
|
19
|
+
form.panels_split width: 'matchParent', content: ->(split) do
|
|
20
|
+
# split.left childViews: ->(left) do
|
|
21
|
+
# if params[:mode] == 'dialog'
|
|
22
|
+
# left.button styleClass: 'link', text: 'cancel', onClick: ->(action) { action.dialogs_close }
|
|
23
|
+
# end
|
|
24
|
+
# end
|
|
25
|
+
split.right childViews: ->(right) do
|
|
26
|
+
right.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
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/submission_flow_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
|
7
|
+
form.fields_radioGroup name: 'user[flow]', childViews: ->(group) do
|
|
8
|
+
group.h3 text: 'Flow'
|
|
9
|
+
group.spacer height: 6
|
|
10
|
+
group.fields_radio value: 'close_reload', label: 'close+reload - useful for form submission in mobile apps'
|
|
11
|
+
group.fields_radio value: 'open', label: 'open - useful for form submission in web app'
|
|
12
|
+
group.fields_radio value: 'close_alert', label: 'close+alert - useful for non-model form (e.g. contact us) in both mobile/web'
|
|
13
|
+
group.fields_radio value: 'alert_close', label: 'alert+close - useful for non-model form (e.g. contact us) in both mobile/web'
|
|
14
|
+
end
|
|
15
|
+
form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
flow = params.require(:user)[:flow] if params[:user]
|
|
3
|
+
json_ui_response json do |action|
|
|
4
|
+
if !flow.present?
|
|
5
|
+
action.dialogs_alert message: 'Please enter all required information'
|
|
6
|
+
else
|
|
7
|
+
case flow
|
|
8
|
+
when 'close_reload'
|
|
9
|
+
action.windows_close onClose: ->(action) do
|
|
10
|
+
action.windows_reload
|
|
11
|
+
end
|
|
12
|
+
when 'close_alert'
|
|
13
|
+
action.windows_close onClose: ->(action) do
|
|
14
|
+
action.dialogs_alert message: 'Thanks for the submission!'
|
|
15
|
+
end
|
|
16
|
+
when 'alert_close'
|
|
17
|
+
action.dialogs_alert message: 'Thanks for the submission!', onClose: ->(action) do
|
|
18
|
+
action.windows_close
|
|
19
|
+
end
|
|
20
|
+
when 'open'
|
|
21
|
+
action.windows_open url: json_ui_garage_url(path: 'forms/index')
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
json.title 'Forms'
|
|
2
|
+
|
|
3
|
+
page = json_ui_page json
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
7
|
+
scroll.panels_form width: 'matchParent', styleClasses: ['card', 'outlined'], padding: glib_json_padding_body, url: json_ui_garage_url(path: 'forms/submission_indicator_post'), method: 'post', childViews: ->(form) do
|
|
8
|
+
form.label text: 'These buttons get disabled on submit'
|
|
9
|
+
form.spacer height: 14
|
|
10
|
+
form.button text: 'Normal Button', onClick: ->(action) { action.forms_submit }
|
|
11
|
+
form.spacer height: 14
|
|
12
|
+
form.fields_submit text: 'Submit Button'
|
|
13
|
+
|
|
14
|
+
form.fab icon: 'send', onClick: ->(action) { action.forms_submit }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
scroll.spacer height: 14
|
|
18
|
+
|
|
19
|
+
scroll.panels_form width: 'matchParent', styleClasses: ['card', 'outlined'], padding: glib_json_padding_body, url: json_ui_garage_url(path: 'forms/submission_indicator_post', mode: 'slow_open'), method: 'post', childViews: ->(form) do
|
|
20
|
+
form.fields_submit text: 'Submit button with slow window/open'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
scroll.spacer height: 14
|
|
24
|
+
|
|
25
|
+
scroll.panels_form width: 'matchParent', styleClasses: ['card', 'outlined'], padding: glib_json_padding_body, url: json_ui_garage_url(path: 'forms/submission_indicator_post', mode: 'slow_openWeb'), method: 'post', childViews: ->(form) do
|
|
26
|
+
form.fields_submit text: 'Submit button with slow window/openWeb'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
scroll.spacer height: 14
|
|
30
|
+
|
|
31
|
+
scroll.panels_form width: 'matchParent', styleClasses: ['card', 'outlined'], padding: glib_json_padding_body, url: json_ui_garage_url(path: 'forms/submission_indicator_post', mode: 'timeout_once'), method: 'post', childViews: ->(form) do
|
|
32
|
+
form.fields_submit text: 'Submit Button with timeouts/set once'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
scroll.spacer height: 14
|
|
36
|
+
|
|
37
|
+
scroll.panels_form width: 'matchParent', styleClasses: ['card', 'outlined'], padding: glib_json_padding_body, url: json_ui_garage_url(path: 'forms/submission_indicator_post', mode: 'timeout_chain', count: 0), method: 'post', childViews: ->(form) do
|
|
38
|
+
form.fields_submit text: 'Submit Button with timeouts/set chain'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# This needs to be long enough that the FAB is roughly at the bottom of a mobile screen.
|
|
42
|
+
# Ideally the spacer can expand dynamically depending on available space.
|
|
43
|
+
scroll.spacer height: 400
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# page.form url: json_ui_garage_url(path: 'forms/submission_indicator_post'), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
|
48
|
+
# form.label text: 'These buttons get disabled on submit'
|
|
49
|
+
# form.spacer height: 10
|
|
50
|
+
# form.button text: 'Normal Button', onClick: ->(action) { action.forms_submit }
|
|
51
|
+
# form.spacer height: 10
|
|
52
|
+
# form.fields_submit text: 'Submit Button'
|
|
53
|
+
|
|
54
|
+
# # This needs to be long enough that the FAB is roughly at the bottom of a mobile screen.
|
|
55
|
+
# # Ideally the spacer can expand dynamically depending on available space.
|
|
56
|
+
# form.spacer height: 400
|
|
57
|
+
|
|
58
|
+
# form.fab icon: 'send', onClick: ->(action) { action.forms_submit }
|
|
59
|
+
# end
|
|
60
|
+
|
|
61
|
+
# page.form url: json_ui_garage_url(path: 'forms/submission_indicator_post', timeout: true), method: 'post', padding: { top: 12, left: 20, right: 20, bottom: 12 }, childViews: ->(form) do
|
|
62
|
+
# form.fields_submit text: 'Submit Button with Timeout'
|
|
63
|
+
# end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
sleep 0.5
|
|
2
|
+
|
|
3
|
+
json_ui_response json do |action|
|
|
4
|
+
case params[:mode]
|
|
5
|
+
when 'timeout_once'
|
|
6
|
+
action.timeouts_set interval: 2000, onTimeout: ->(subaction) do
|
|
7
|
+
subaction.dialogs_alert message: 'Success!'
|
|
8
|
+
end
|
|
9
|
+
when 'timeout_chain'
|
|
10
|
+
count = params[:count].to_i
|
|
11
|
+
if count > 3
|
|
12
|
+
action.dialogs_alert message: 'Success!'
|
|
13
|
+
else
|
|
14
|
+
action.timeouts_set interval: 500, onTimeout: ->(subaction) do
|
|
15
|
+
subaction.http_post url: json_ui_garage_url(path: 'forms/submission_indicator_post', mode: 'timeout_chain', count: count + 1)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
when 'slow_open'
|
|
19
|
+
action.windows_open url: json_ui_garage_url(path: 'home/slow')
|
|
20
|
+
when 'slow_openWeb'
|
|
21
|
+
action.windows_openWeb url: 'https://www.google.com'
|
|
22
|
+
else
|
|
23
|
+
action.dialogs_alert message: 'Success!'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
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: glib_json_padding_body, childViews: ->(form) do
|
|
7
|
+
form.fields_email name: 'user[email]', width: 'matchParent', label: 'Email'
|
|
8
|
+
form.fields_url name: 'user[url]', width: 'matchParent', label: 'URL'
|
|
9
|
+
form.fields_number name: 'user[number]', width: 'matchParent', label: 'Number', validation: { required: { message: 'Required' } }
|
|
10
|
+
form.fields_password name: 'user[password]', width: 'matchParent', label: 'Password'
|
|
11
|
+
form.fields_textarea name: 'user[textarea]', width: 'matchParent', label: 'Textarea with maxLength', maxLength: 50, validation: { required: { message: 'Required' } }
|
|
12
|
+
|
|
13
|
+
options = ['male', 'female'].map { |i| { text: i.humanize, value: i } }
|
|
14
|
+
form.fields_select name: 'user[gender]', width: 'matchParent', label: 'Gender', validation: { required: { message: 'Required' } }, options: options
|
|
15
|
+
|
|
16
|
+
form.spacer height: 20
|
|
17
|
+
form.fields_stripeToken name: 'user[stripe_token]', width: 'matchParent', publicKey: 'pk_test_TYooMQauvdEDq54NiTphI7jx'
|
|
18
|
+
|
|
19
|
+
form.spacer height: 30
|
|
20
|
+
form.fields_submit text: 'Submit'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
sleep 0.5
|
|
2
|
+
|
|
3
|
+
json.title 'Menu'
|
|
4
|
+
|
|
5
|
+
json_ui_page json do |page|
|
|
6
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: false
|
|
7
|
+
|
|
8
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
9
|
+
scroll.label text: 'Blank page'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
json.title 'Menu'
|
|
2
|
+
|
|
3
|
+
json_ui_page json do |page|
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: true
|
|
5
|
+
|
|
6
|
+
page.list firstSection: ->(section) do
|
|
7
|
+
section.rows builder: ->(template) do
|
|
8
|
+
template.thumbnail title: 'Pages', onClick: ->(action) do
|
|
9
|
+
action.windows_open url: json_ui_garage_url(path: 'pages/index')
|
|
10
|
+
end
|
|
11
|
+
template.thumbnail title: 'Lists', onClick: ->(action) do
|
|
12
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/index')
|
|
13
|
+
end
|
|
14
|
+
template.thumbnail title: 'Forms', onClick: ->(action) do
|
|
15
|
+
action.windows_open url: json_ui_garage_url(path: 'forms/index')
|
|
16
|
+
end
|
|
17
|
+
template.thumbnail title: 'Panels', onClick: ->(action) do
|
|
18
|
+
action.windows_open url: json_ui_garage_url(path: 'panels/index')
|
|
19
|
+
end
|
|
20
|
+
template.thumbnail title: 'Views', onClick: ->(action) do
|
|
21
|
+
action.windows_open url: json_ui_garage_url(path: 'views/index')
|
|
22
|
+
end
|
|
23
|
+
template.thumbnail title: 'Actions', onClick: ->(action) do
|
|
24
|
+
action.windows_open url: json_ui_garage_url(path: 'actions/index')
|
|
25
|
+
end
|
|
26
|
+
template.thumbnail title: 'Tables (Web Only)', onClick: ->(action) do
|
|
27
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/index')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
sleep 2.0
|
|
2
|
+
|
|
3
|
+
json.title 'Menu'
|
|
4
|
+
|
|
5
|
+
json_ui_page json do |page|
|
|
6
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: false
|
|
7
|
+
|
|
8
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
9
|
+
scroll.label text: 'Blank page'
|
|
10
|
+
end
|
|
11
|
+
end
|