glib-web 0.5.83 → 0.5.84
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/channels/glib/channel/is_typing_channel.rb +34 -34
- data/app/channels/glib/channel/online_channel.rb +36 -36
- data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
- data/app/controllers/concerns/glib/auth/policy.rb +149 -149
- data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
- data/app/controllers/concerns/glib/json/libs.rb +149 -149
- data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
- data/app/controllers/concerns/glib/json/transformation.rb +11 -11
- data/app/controllers/concerns/glib/json/traversal.rb +92 -92
- data/app/controllers/concerns/glib/json/ui.rb +88 -88
- data/app/controllers/concerns/glib/json/validation.rb +13 -13
- data/app/controllers/glib/home_controller.rb +54 -54
- data/app/helpers/glib/app_feature_support_helper.rb +16 -16
- data/app/helpers/glib/dynamic_images_helper.rb +55 -55
- data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
- data/app/helpers/glib/enum_helper.rb +18 -18
- data/app/helpers/glib/forms_helper.rb +15 -15
- data/app/helpers/glib/json_ui/abstract_builder.rb +309 -309
- data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
- data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
- data/app/helpers/glib/json_ui/action_builder/iap.rb +15 -15
- data/app/helpers/glib/json_ui/action_builder/panels.rb +14 -14
- data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
- data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
- data/app/helpers/glib/json_ui/action_builder/windows.rb +38 -38
- data/app/helpers/glib/json_ui/action_builder.rb +140 -140
- data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
- data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
- data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
- data/app/helpers/glib/json_ui/list_builders.rb +110 -110
- data/app/helpers/glib/json_ui/menu_builder.rb +96 -94
- data/app/helpers/glib/json_ui/page_helper.rb +221 -221
- data/app/helpers/glib/json_ui/response_helper.rb +25 -25
- data/app/helpers/glib/json_ui/styling_helper.rb +55 -55
- data/app/helpers/glib/json_ui/table_builders.rb +74 -74
- data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
- data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
- data/app/helpers/glib/json_ui/view_builder/fields.rb +291 -291
- data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -11
- data/app/helpers/glib/json_ui/view_builder/panels.rb +258 -258
- data/app/helpers/glib/json_ui/view_builder.rb +248 -247
- data/app/helpers/glib/urls_helper.rb +12 -12
- data/app/models/concerns/glib/soft_deletable.rb +68 -68
- data/app/models/glib/active_storage/attachment.rb +9 -9
- data/app/models/glib/active_storage/blob.rb +9 -9
- data/app/models/glib/application_record.rb +18 -18
- data/app/models/glib/dynamic_text_record.rb +9 -9
- data/app/models/glib/text.rb +95 -95
- data/app/policies/glib/application_policy.rb +191 -191
- data/app/validators/email_typo_validator.rb +38 -38
- data/app/validators/email_validator.rb +7 -7
- data/app/validators/url_validator.rb +20 -20
- data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
- data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
- data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
- data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
- data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
- data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
- data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
- data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
- data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +10 -10
- data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
- data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
- data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
- data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
- data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
- data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -24
- data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +37 -37
- data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
- data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
- data/app/views/json_ui/garage/forms/index.json.jbuilder +116 -116
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
- data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/payments.json.jbuilder +34 -34
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
- data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
- data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -91
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +150 -150
- data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
- data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
- data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
- data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
- data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +65 -65
- data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
- data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
- data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
- data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
- data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +30 -30
- data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
- data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
- data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
- data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
- data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
- data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
- data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
- data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
- data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
- data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
- data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
- data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
- data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
- data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
- data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
- data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
- data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
- data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
- data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
- data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
- data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
- data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +66 -31
- data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
- data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
- data/app/views/json_ui/garage/panels/carousel.json.jbuilder +38 -38
- data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
- data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
- data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
- data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -138
- data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
- data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
- data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
- data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -33
- data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
- data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
- data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
- data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
- data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
- data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
- data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
- data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
- data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
- data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
- data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
- data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
- data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
- data/app/views/json_ui/garage/views/banners.json.jbuilder +67 -63
- data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
- data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
- data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
- data/app/views/json_ui/garage/views/iap.json.jbuilder +21 -21
- data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
- data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
- data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
- data/app/views/json_ui/garage/views/index.json.jbuilder +83 -83
- data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
- data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
- data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
- data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
- data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
- data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
- data/app/views/json_ui/garage/views/progress.json.jbuilder +31 -31
- data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
- data/app/views/layouts/json_ui/renderer.html.erb +35 -35
- data/config/routes.rb +7 -7
- data/lib/generators/glib/install_generator.rb +24 -24
- data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
- data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
- data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
- data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
- data/lib/generators/templates/database.yml +107 -107
- data/lib/generators/templates/dynamic_text.rb +2 -2
- data/lib/glib/crypt/utils.rb +26 -26
- data/lib/glib/dynamic_text/config.rb +21 -21
- data/lib/glib/engine.rb +7 -7
- data/lib/glib/json_crawler/action_crawler.rb +23 -23
- data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
- data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
- data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
- data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
- data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
- data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
- data/lib/glib/json_crawler/coverage.rb +20 -20
- data/lib/glib/json_crawler/http.rb +120 -120
- data/lib/glib/json_crawler/router.rb +90 -90
- data/lib/glib/json_crawler.rb +11 -11
- data/lib/glib/mailer_tester.rb +36 -36
- data/lib/glib/test_helpers.rb +52 -52
- data/lib/glib/value.rb +7 -7
- data/lib/glib/version.rb +5 -5
- data/lib/glib-web.rb +9 -9
- data/lib/tasks/db.rake +95 -95
- metadata +2 -3
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
sleep 2.0
|
|
2
|
-
|
|
3
|
-
json.title 'Menu'
|
|
4
|
-
|
|
5
|
-
page = json_ui_page json
|
|
6
|
-
|
|
7
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: false
|
|
8
|
-
|
|
9
|
-
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
10
|
-
scroll.label text: 'Blank page'
|
|
11
|
-
end
|
|
1
|
+
sleep 2.0
|
|
2
|
+
|
|
3
|
+
json.title 'Menu'
|
|
4
|
+
|
|
5
|
+
page = json_ui_page json
|
|
6
|
+
|
|
7
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: false
|
|
8
|
+
|
|
9
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
10
|
+
scroll.label text: 'Blank page'
|
|
11
|
+
end
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
# json.rows do
|
|
3
|
-
# batch_count = 30
|
|
4
|
-
# batch_count.times do |i|
|
|
5
|
-
# index = page * batch_count + i
|
|
6
|
-
# json.child! do
|
|
7
|
-
# json.template 'thumbnail'
|
|
8
|
-
# json.title "Item #{index}"
|
|
9
|
-
# end
|
|
10
|
-
# end
|
|
11
|
-
# end
|
|
12
|
-
|
|
13
|
-
# section = json_ui_section json
|
|
14
|
-
|
|
15
|
-
sleep 1
|
|
16
|
-
|
|
17
|
-
section = page.list_section_builder
|
|
18
|
-
section.rows builder: ->(row) do
|
|
19
|
-
batch_count = 1000
|
|
20
|
-
batch_count.times do |i|
|
|
21
|
-
index = page_index * batch_count + i
|
|
22
|
-
if local_assigns[:reorder]
|
|
23
|
-
row.thumbnail title: "Item #{index}", onReorder: ->(action) do
|
|
24
|
-
action.dialogs_notification title: "Item #{index}"
|
|
25
|
-
end, paramNameForFormData: 'message', paramNameForNewIndex: 'new_index'
|
|
26
|
-
else
|
|
27
|
-
row.thumbnail title: "Item #{index}", subtitle: "Sub Item #{index}", subsubtitle: "Sub Sub Item #{index}"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
1
|
+
|
|
2
|
+
# json.rows do
|
|
3
|
+
# batch_count = 30
|
|
4
|
+
# batch_count.times do |i|
|
|
5
|
+
# index = page * batch_count + i
|
|
6
|
+
# json.child! do
|
|
7
|
+
# json.template 'thumbnail'
|
|
8
|
+
# json.title "Item #{index}"
|
|
9
|
+
# end
|
|
10
|
+
# end
|
|
11
|
+
# end
|
|
12
|
+
|
|
13
|
+
# section = json_ui_section json
|
|
14
|
+
|
|
15
|
+
sleep 1
|
|
16
|
+
|
|
17
|
+
section = page.list_section_builder
|
|
18
|
+
section.rows builder: ->(row) do
|
|
19
|
+
batch_count = 1000
|
|
20
|
+
batch_count.times do |i|
|
|
21
|
+
index = page_index * batch_count + i
|
|
22
|
+
if local_assigns[:reorder]
|
|
23
|
+
row.thumbnail title: "Item #{index}", onReorder: ->(action) do
|
|
24
|
+
action.dialogs_notification title: "Item #{index}"
|
|
25
|
+
end, paramNameForFormData: 'message', paramNameForNewIndex: 'new_index'
|
|
26
|
+
else
|
|
27
|
+
row.thumbnail title: "Item #{index}", subtitle: "Sub Item #{index}", subsubtitle: "Sub Sub Item #{index}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
page_index = params[:page].to_i
|
|
3
|
-
next_page = {
|
|
4
|
-
url: json_ui_garage_url(path: 'lists/autoload_all', page: page_index + 1, section_only: 'v1'),
|
|
5
|
-
autoload: 'all'
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
page = json_ui_page json
|
|
9
|
-
|
|
10
|
-
if params[:section_only].present?
|
|
11
|
-
sleep 1
|
|
12
|
-
|
|
13
|
-
json.nextPage next_page if page_index < 3
|
|
14
|
-
json.sections do
|
|
15
|
-
json.child! do
|
|
16
|
-
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
else
|
|
20
|
-
json.title 'Lists'
|
|
21
|
-
|
|
22
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
23
|
-
|
|
24
|
-
page.list nextPage: next_page, firstSection: ->(section) do
|
|
25
|
-
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
26
|
-
end, onScrollToBottom: ->(action) do
|
|
27
|
-
action.snackbars_alert message: 'Scrolled to Bottom'
|
|
28
|
-
end, onScrollToTop: ->(action) do
|
|
29
|
-
action.snackbars_alert message: 'Scrolled to Top'
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
end
|
|
1
|
+
|
|
2
|
+
page_index = params[:page].to_i
|
|
3
|
+
next_page = {
|
|
4
|
+
url: json_ui_garage_url(path: 'lists/autoload_all', page: page_index + 1, section_only: 'v1'),
|
|
5
|
+
autoload: 'all'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
page = json_ui_page json
|
|
9
|
+
|
|
10
|
+
if params[:section_only].present?
|
|
11
|
+
sleep 1
|
|
12
|
+
|
|
13
|
+
json.nextPage next_page if page_index < 3
|
|
14
|
+
json.sections do
|
|
15
|
+
json.child! do
|
|
16
|
+
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
else
|
|
20
|
+
json.title 'Lists'
|
|
21
|
+
|
|
22
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
23
|
+
|
|
24
|
+
page.list nextPage: next_page, firstSection: ->(section) do
|
|
25
|
+
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
26
|
+
end, onScrollToBottom: ->(action) do
|
|
27
|
+
action.snackbars_alert message: 'Scrolled to Bottom'
|
|
28
|
+
end, onScrollToTop: ->(action) do
|
|
29
|
+
action.snackbars_alert message: 'Scrolled to Top'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
page_index = params[:page].to_i
|
|
3
|
-
next_page = {
|
|
4
|
-
url: json_ui_garage_url(path: 'lists/autoload_as_needed', page: page_index + 1, section_only: 'v1'),
|
|
5
|
-
autoload: 'asNeeded'
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
page = json_ui_page json
|
|
9
|
-
|
|
10
|
-
# TODO: Cater
|
|
11
|
-
# - for SEO: one URL for a standalone page and one URL for pagination only
|
|
12
|
-
# - for generic approach, e.g. excluding nav_menu when there is no change
|
|
13
|
-
if params[:section_only].present?
|
|
14
|
-
sleep 1
|
|
15
|
-
|
|
16
|
-
json.nextPage next_page if page_index < 3
|
|
17
|
-
json.sections do
|
|
18
|
-
json.child! do
|
|
19
|
-
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
else
|
|
23
|
-
json.title 'Lists'
|
|
24
|
-
|
|
25
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
26
|
-
|
|
27
|
-
page.list nextPage: next_page, firstSection: ->(section) do
|
|
28
|
-
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
29
|
-
end, onScrollToBottom: ->(action) do
|
|
30
|
-
action.snackbars_alert message: 'Scrolled to Bottom'
|
|
31
|
-
end, onScrollToTop: ->(action) do
|
|
32
|
-
action.snackbars_alert message: 'Scrolled to Top'
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
1
|
+
|
|
2
|
+
page_index = params[:page].to_i
|
|
3
|
+
next_page = {
|
|
4
|
+
url: json_ui_garage_url(path: 'lists/autoload_as_needed', page: page_index + 1, section_only: 'v1'),
|
|
5
|
+
autoload: 'asNeeded'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
page = json_ui_page json
|
|
9
|
+
|
|
10
|
+
# TODO: Cater
|
|
11
|
+
# - for SEO: one URL for a standalone page and one URL for pagination only
|
|
12
|
+
# - for generic approach, e.g. excluding nav_menu when there is no change
|
|
13
|
+
if params[:section_only].present?
|
|
14
|
+
sleep 1
|
|
15
|
+
|
|
16
|
+
json.nextPage next_page if page_index < 3
|
|
17
|
+
json.sections do
|
|
18
|
+
json.child! do
|
|
19
|
+
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
else
|
|
23
|
+
json.title 'Lists'
|
|
24
|
+
|
|
25
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
26
|
+
|
|
27
|
+
page.list nextPage: next_page, firstSection: ->(section) do
|
|
28
|
+
render 'json_ui/garage/lists/autoload_section', page: page, page_index: page_index
|
|
29
|
+
end, onScrollToBottom: ->(action) do
|
|
30
|
+
action.snackbars_alert message: 'Scrolled to Bottom'
|
|
31
|
+
end, onScrollToTop: ->(action) do
|
|
32
|
+
action.snackbars_alert message: 'Scrolled to Top'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
json.title 'Lists'
|
|
2
|
-
|
|
3
|
-
liked = params[:liked] == 'true'
|
|
4
|
-
|
|
5
|
-
page = json_ui_page json
|
|
6
|
-
|
|
7
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
8
|
-
|
|
9
|
-
json.phoenixSocket({
|
|
10
|
-
"socket" => {
|
|
11
|
-
"endpoint" => "/socket/websocket",
|
|
12
|
-
"params" => {
|
|
13
|
-
vsn: '2.0.0',
|
|
14
|
-
token: 'TOKEN'
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"topic" => "rooms",
|
|
18
|
-
"events" => [],
|
|
19
|
-
# "events" => ["new_link_added"],
|
|
20
|
-
# "header" => {
|
|
21
|
-
# "user_id" => 2,
|
|
22
|
-
# "prev_item_id" => nil,
|
|
23
|
-
# "last_item_id" => nil
|
|
24
|
-
# }
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
list_ws = { topic: 'rooms', events: ['comments_updated'] }
|
|
28
|
-
page.list phoenixSocket: list_ws, firstSection: ->(section) do
|
|
29
|
-
section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
|
|
30
|
-
header.h3 text: 'Chat with John Doe'
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
section.rows builder: ->(template) do
|
|
34
|
-
# template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i}) -- #{liked}", onClick: ->(action) do
|
|
35
|
-
# action.windows_reload
|
|
36
|
-
# end, onLongPress: ->(action) do
|
|
37
|
-
# action.sheets_select message: "Context Menu (#{DateTime.current.to_i})", buttons: ->(menu) do
|
|
38
|
-
# if liked
|
|
39
|
-
# menu.button text: 'Cancel 👍', onClick: ->(subaction) do
|
|
40
|
-
# subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: false)
|
|
41
|
-
# end
|
|
42
|
-
# else
|
|
43
|
-
# menu.button text: 'Give 👍', onClick: ->(subaction) do
|
|
44
|
-
# subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: true)
|
|
45
|
-
# end
|
|
46
|
-
# end
|
|
47
|
-
# end
|
|
48
|
-
# end
|
|
49
|
-
|
|
50
|
-
template.commentOutgoing subtitle: 'Hey!', subsubtitle: l(10.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
|
|
51
|
-
menu.button text: '😊 2', styleClass: 'info'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
template.commentOutgoing subtitle: 'How are you?', subsubtitle: l(DateTime.current, format: :short)
|
|
55
|
-
|
|
56
|
-
template.commentIncoming title: 'John Doe', subtitle: 'Very well', subsubtitle: l(7.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
|
|
57
|
-
menu.button text: "👍 #{liked ? 2 : 1}"
|
|
58
|
-
end, onLongPress: ->(action) do
|
|
59
|
-
action.sheets_select message: 'Context Menu', buttons: ->(menu) do
|
|
60
|
-
if liked
|
|
61
|
-
menu.button text: 'Cancel 👍', onClick: ->(subaction) do
|
|
62
|
-
subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: false)
|
|
63
|
-
end
|
|
64
|
-
else
|
|
65
|
-
menu.button text: 'Give 👍', onClick: ->(subaction) do
|
|
66
|
-
subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: true)
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
page.footer padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(footer) do
|
|
75
|
-
footer.panels_form width: 'matchParent', url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, paramNameForFormData: 'formData', onSubmit: ->(action) do
|
|
76
|
-
json.action "ws/push"
|
|
77
|
-
json.topic "rooms"
|
|
78
|
-
json.event "create_comment"
|
|
79
|
-
json.payload({
|
|
80
|
-
"room_id": "30",
|
|
81
|
-
"user_id": "2"
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
end, childViews: ->(form) do
|
|
85
|
-
form.fields_text name: 'user[message]', width: 'matchParent', label: 'Message'
|
|
86
|
-
|
|
87
|
-
form.panels_split width: 'matchParent', content: ->(split) do
|
|
88
|
-
split.right childViews: ->(right) do
|
|
89
|
-
right.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
end
|
|
1
|
+
json.title 'Lists'
|
|
2
|
+
|
|
3
|
+
liked = params[:liked] == 'true'
|
|
4
|
+
|
|
5
|
+
page = json_ui_page json
|
|
6
|
+
|
|
7
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
8
|
+
|
|
9
|
+
json.phoenixSocket({
|
|
10
|
+
"socket" => {
|
|
11
|
+
"endpoint" => "/socket/websocket",
|
|
12
|
+
"params" => {
|
|
13
|
+
vsn: '2.0.0',
|
|
14
|
+
token: 'TOKEN'
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"topic" => "rooms",
|
|
18
|
+
"events" => [],
|
|
19
|
+
# "events" => ["new_link_added"],
|
|
20
|
+
# "header" => {
|
|
21
|
+
# "user_id" => 2,
|
|
22
|
+
# "prev_item_id" => nil,
|
|
23
|
+
# "last_item_id" => nil
|
|
24
|
+
# }
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
list_ws = { topic: 'rooms', events: ['comments_updated'] }
|
|
28
|
+
page.list phoenixSocket: list_ws, firstSection: ->(section) do
|
|
29
|
+
section.header padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(header) do
|
|
30
|
+
header.h3 text: 'Chat with John Doe'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
section.rows builder: ->(template) do
|
|
34
|
+
# template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i}) -- #{liked}", onClick: ->(action) do
|
|
35
|
+
# action.windows_reload
|
|
36
|
+
# end, onLongPress: ->(action) do
|
|
37
|
+
# action.sheets_select message: "Context Menu (#{DateTime.current.to_i})", buttons: ->(menu) do
|
|
38
|
+
# if liked
|
|
39
|
+
# menu.button text: 'Cancel 👍', onClick: ->(subaction) do
|
|
40
|
+
# subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: false)
|
|
41
|
+
# end
|
|
42
|
+
# else
|
|
43
|
+
# menu.button text: 'Give 👍', onClick: ->(subaction) do
|
|
44
|
+
# subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat', liked: true)
|
|
45
|
+
# end
|
|
46
|
+
# end
|
|
47
|
+
# end
|
|
48
|
+
# end
|
|
49
|
+
|
|
50
|
+
template.commentOutgoing subtitle: 'Hey!', subsubtitle: l(10.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
|
|
51
|
+
menu.button text: '😊 2', styleClass: 'info'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
template.commentOutgoing subtitle: 'How are you?', subsubtitle: l(DateTime.current, format: :short)
|
|
55
|
+
|
|
56
|
+
template.commentIncoming title: 'John Doe', subtitle: 'Very well', subsubtitle: l(7.minutes.ago, format: :short), imageUrl: glib_json_image_standard_url, chips: ->(menu) do
|
|
57
|
+
menu.button text: "👍 #{liked ? 2 : 1}"
|
|
58
|
+
end, onLongPress: ->(action) do
|
|
59
|
+
action.sheets_select message: 'Context Menu', buttons: ->(menu) do
|
|
60
|
+
if liked
|
|
61
|
+
menu.button text: 'Cancel 👍', onClick: ->(subaction) do
|
|
62
|
+
subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: false)
|
|
63
|
+
end
|
|
64
|
+
else
|
|
65
|
+
menu.button text: 'Give 👍', onClick: ->(subaction) do
|
|
66
|
+
subaction.windows_reload url: json_ui_garage_url(path: 'lists/chat_ui', liked: true)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
page.footer padding: { top: 12, left: 16, right: 16, bottom: 12 }, childViews: ->(footer) do
|
|
75
|
+
footer.panels_form width: 'matchParent', url: json_ui_garage_url(path: 'forms/basic_post'), method: 'post', padding: glib_json_padding_body, paramNameForFormData: 'formData', onSubmit: ->(action) do
|
|
76
|
+
json.action "ws/push"
|
|
77
|
+
json.topic "rooms"
|
|
78
|
+
json.event "create_comment"
|
|
79
|
+
json.payload({
|
|
80
|
+
"room_id": "30",
|
|
81
|
+
"user_id": "2"
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
end, childViews: ->(form) do
|
|
85
|
+
form.fields_text name: 'user[message]', width: 'matchParent', label: 'Message'
|
|
86
|
+
|
|
87
|
+
form.panels_split width: 'matchParent', content: ->(split) do
|
|
88
|
+
split.right childViews: ->(right) do
|
|
89
|
+
right.button text: 'Submit', onClick: ->(action) { action.forms_submit }
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
json.title 'Lists'
|
|
2
|
-
|
|
3
|
-
page_index = params[:page].to_i
|
|
4
|
-
if page_index > 2
|
|
5
|
-
page_index = 2
|
|
6
|
-
end
|
|
7
|
-
page = json_ui_page json
|
|
8
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
9
|
-
|
|
10
|
-
page.list firstSection: ->(section) do
|
|
11
|
-
section.rows builder: ->(template) do
|
|
12
|
-
template.thumbnail \
|
|
13
|
-
title: 'Click menu (web) or swipe left (Android/iOS)',
|
|
14
|
-
subtitle: "Page index: #{page_index}",
|
|
15
|
-
leftButtons: ->(menu) do
|
|
16
|
-
menu.button styleClass: 'icon', icon: 'check_box', onClick: ->(subaction) do
|
|
17
|
-
subaction.dialogs_alert message: 'Tick/untick'
|
|
18
|
-
end
|
|
19
|
-
end, rightButtons: ->(menu) do
|
|
20
|
-
menu.button styleClass: 'icon', icon: 'share', onClick: ->(subaction) do
|
|
21
|
-
subaction.dialogs_alert message: 'Share'
|
|
22
|
-
end
|
|
23
|
-
menu.button styleClass: 'icon', icon: 'open_in_new', onClick: ->(subaction) do
|
|
24
|
-
subaction.dialogs_alert message: 'Open'
|
|
25
|
-
end
|
|
26
|
-
end, editButtons: ->(menu) do
|
|
27
|
-
menu.button text: "Edit (ID: #{page_index})", onClick: ->(action) do
|
|
28
|
-
action.dialogs_alert message: 'Perform Edit action'
|
|
29
|
-
end
|
|
30
|
-
menu.button text: 'Delete', onClick: ->(action) do
|
|
31
|
-
action.dialogs_alert message: 'Perform Delete action'
|
|
32
|
-
end
|
|
33
|
-
end, onClick: ->(action) do
|
|
34
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions', page: page_index + 1)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
template.thumbnail title: 'Long press to get an alert', onLongPress: ->(action) do
|
|
38
|
-
action.dialogs_alert message: 'This is an alert'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
template.thumbnail title: 'Long press to see menu', onLongPress: ->(action) do
|
|
42
|
-
action.sheets_select message: 'Context Menu', buttons: ->(menu) do
|
|
43
|
-
menu.button icon: 'edit', text: 'Edit', onClick: ->(subaction) do
|
|
44
|
-
subaction.dialogs_alert message: 'Perform action'
|
|
45
|
-
end
|
|
46
|
-
menu.button icon: 'delete', text: 'Delete', onClick: ->(subaction) do
|
|
47
|
-
subaction.dialogs_alert message: 'Perform action'
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# template.thumbnail title: 'Long press to see menu', contextButtons: ->(menu) do
|
|
53
|
-
# menu.button text: 'Edit', onClick: ->(action) do
|
|
54
|
-
# action.dialogs_alert message: 'Perform action'
|
|
55
|
-
# end
|
|
56
|
-
# menu.button text: 'Delete', onClick: ->(action) do
|
|
57
|
-
# action.dialogs_alert message: 'Perform action'
|
|
58
|
-
# end
|
|
59
|
-
# end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
end
|
|
1
|
+
json.title 'Lists'
|
|
2
|
+
|
|
3
|
+
page_index = params[:page].to_i
|
|
4
|
+
if page_index > 2
|
|
5
|
+
page_index = 2
|
|
6
|
+
end
|
|
7
|
+
page = json_ui_page json
|
|
8
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
9
|
+
|
|
10
|
+
page.list firstSection: ->(section) do
|
|
11
|
+
section.rows builder: ->(template) do
|
|
12
|
+
template.thumbnail \
|
|
13
|
+
title: 'Click menu (web) or swipe left (Android/iOS)',
|
|
14
|
+
subtitle: "Page index: #{page_index}",
|
|
15
|
+
leftButtons: ->(menu) do
|
|
16
|
+
menu.button styleClass: 'icon', icon: 'check_box', onClick: ->(subaction) do
|
|
17
|
+
subaction.dialogs_alert message: 'Tick/untick'
|
|
18
|
+
end
|
|
19
|
+
end, rightButtons: ->(menu) do
|
|
20
|
+
menu.button styleClass: 'icon', icon: 'share', onClick: ->(subaction) do
|
|
21
|
+
subaction.dialogs_alert message: 'Share'
|
|
22
|
+
end
|
|
23
|
+
menu.button styleClass: 'icon', icon: 'open_in_new', onClick: ->(subaction) do
|
|
24
|
+
subaction.dialogs_alert message: 'Open'
|
|
25
|
+
end
|
|
26
|
+
end, editButtons: ->(menu) do
|
|
27
|
+
menu.button text: "Edit (ID: #{page_index})", onClick: ->(action) do
|
|
28
|
+
action.dialogs_alert message: 'Perform Edit action'
|
|
29
|
+
end
|
|
30
|
+
menu.button text: 'Delete', onClick: ->(action) do
|
|
31
|
+
action.dialogs_alert message: 'Perform Delete action'
|
|
32
|
+
end
|
|
33
|
+
end, onClick: ->(action) do
|
|
34
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions', page: page_index + 1)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
template.thumbnail title: 'Long press to get an alert', onLongPress: ->(action) do
|
|
38
|
+
action.dialogs_alert message: 'This is an alert'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
template.thumbnail title: 'Long press to see menu', onLongPress: ->(action) do
|
|
42
|
+
action.sheets_select message: 'Context Menu', buttons: ->(menu) do
|
|
43
|
+
menu.button icon: 'edit', text: 'Edit', onClick: ->(subaction) do
|
|
44
|
+
subaction.dialogs_alert message: 'Perform action'
|
|
45
|
+
end
|
|
46
|
+
menu.button icon: 'delete', text: 'Delete', onClick: ->(subaction) do
|
|
47
|
+
subaction.dialogs_alert message: 'Perform action'
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# template.thumbnail title: 'Long press to see menu', contextButtons: ->(menu) do
|
|
53
|
+
# menu.button text: 'Edit', onClick: ->(action) do
|
|
54
|
+
# action.dialogs_alert message: 'Perform action'
|
|
55
|
+
# end
|
|
56
|
+
# menu.button text: 'Delete', onClick: ->(action) do
|
|
57
|
+
# action.dialogs_alert message: 'Perform action'
|
|
58
|
+
# end
|
|
59
|
+
# end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
json.title 'Lists'
|
|
2
|
-
|
|
3
|
-
page = json_ui_page json
|
|
4
|
-
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
-
|
|
6
|
-
page.body childViews: ->(body) do
|
|
7
|
-
body.fab icon: 'add', onClick: ->(action) { action.dialogs_alert message: 'Perform action' }
|
|
8
|
-
|
|
9
|
-
body.panels_list width: 'matchParent', firstSection: ->(section) do
|
|
10
|
-
render 'json_ui/garage/lists/autoload_section', page: page, page_index: 0
|
|
11
|
-
end
|
|
12
|
-
end
|
|
1
|
+
json.title 'Lists'
|
|
2
|
+
|
|
3
|
+
page = json_ui_page json
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
page.body childViews: ->(body) do
|
|
7
|
+
body.fab icon: 'add', onClick: ->(action) { action.dialogs_alert message: 'Perform action' }
|
|
8
|
+
|
|
9
|
+
body.panels_list width: 'matchParent', firstSection: ->(section) do
|
|
10
|
+
render 'json_ui/garage/lists/autoload_section', page: page, page_index: 0
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
json.title 'Lists'
|
|
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.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
8
|
-
header.label text: 'The List panel is useful for displaying a large number of items that are uniform, which is especially important in mobile apps because the rows can be reused for efficiency.'
|
|
9
|
-
header.spacer height: 6
|
|
10
|
-
header.label text: 'So, following the mobile-first paradigm, do not ever display large numbers of items using other components.'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
section.rows builder: ->(template) do
|
|
14
|
-
template.thumbnail icon: 'list', title: 'Templating', onClick: ->(action) do
|
|
15
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/templating')
|
|
16
|
-
end
|
|
17
|
-
template.thumbnail title: 'Action Buttons', onClick: ->(action) do
|
|
18
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions')
|
|
19
|
-
end
|
|
20
|
-
template.thumbnail title: 'FAB (Floating Action Button)', onClick: ->(action) do
|
|
21
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/fab')
|
|
22
|
-
end
|
|
23
|
-
template.thumbnail title: 'Chat UI', onClick: ->(action) do
|
|
24
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/chat_ui')
|
|
25
|
-
end
|
|
26
|
-
template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
|
|
27
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/autoload_as_needed')
|
|
28
|
-
end
|
|
29
|
-
template.thumbnail title: 'Autoload All', onClick: ->(action) do
|
|
30
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/autoload_all')
|
|
31
|
-
end
|
|
32
|
-
template.thumbnail title: 'Reordering', onClick: ->(action) do
|
|
33
|
-
action.windows_open url: json_ui_garage_url(path: 'lists/reordering')
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
end
|
|
1
|
+
json.title 'Lists'
|
|
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.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
8
|
+
header.label text: 'The List panel is useful for displaying a large number of items that are uniform, which is especially important in mobile apps because the rows can be reused for efficiency.'
|
|
9
|
+
header.spacer height: 6
|
|
10
|
+
header.label text: 'So, following the mobile-first paradigm, do not ever display large numbers of items using other components.'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
section.rows builder: ->(template) do
|
|
14
|
+
template.thumbnail icon: 'list', title: 'Templating', onClick: ->(action) do
|
|
15
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/templating')
|
|
16
|
+
end
|
|
17
|
+
template.thumbnail title: 'Action Buttons', onClick: ->(action) do
|
|
18
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/edit_actions')
|
|
19
|
+
end
|
|
20
|
+
template.thumbnail title: 'FAB (Floating Action Button)', onClick: ->(action) do
|
|
21
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/fab')
|
|
22
|
+
end
|
|
23
|
+
template.thumbnail title: 'Chat UI', onClick: ->(action) do
|
|
24
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/chat_ui')
|
|
25
|
+
end
|
|
26
|
+
template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
|
|
27
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/autoload_as_needed')
|
|
28
|
+
end
|
|
29
|
+
template.thumbnail title: 'Autoload All', onClick: ->(action) do
|
|
30
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/autoload_all')
|
|
31
|
+
end
|
|
32
|
+
template.thumbnail title: 'Reordering', onClick: ->(action) do
|
|
33
|
+
action.windows_open url: json_ui_garage_url(path: 'lists/reordering')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|