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,26 @@
|
|
|
1
|
+
json.title 'Tables'
|
|
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: 'Layout', onClick: ->(action) do
|
|
9
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/layout')
|
|
10
|
+
end
|
|
11
|
+
template.thumbnail title: 'Horizontal Scroll', onClick: ->(action) do
|
|
12
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/horizontal_scroll')
|
|
13
|
+
end
|
|
14
|
+
template.thumbnail title: 'Export/Import', onClick: ->(action) do
|
|
15
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/export_import')
|
|
16
|
+
end
|
|
17
|
+
template.thumbnail title: 'Autoload All', onClick: ->(action) do
|
|
18
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/autoload_all')
|
|
19
|
+
end
|
|
20
|
+
template.thumbnail title: 'Autoload as Needed', onClick: ->(action) do
|
|
21
|
+
action.windows_open url: json_ui_garage_url(path: 'tables/autoload_as_needed')
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
json.title 'Tables'
|
|
2
|
+
|
|
3
|
+
json_ui_page json do |page|
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
column_indexes = (1..5)
|
|
7
|
+
page.table sections: [
|
|
8
|
+
->(section) do
|
|
9
|
+
section.rows builder: ->(row) do
|
|
10
|
+
row.default colSpans: [3, 2], cellViews: ->(cell) do
|
|
11
|
+
cell.label text: 'Spans 3 columns'
|
|
12
|
+
cell.panels_horizontal width: 'matchParent', backgroundColor: '#dddddd', padding: { top: 10, right: 10, bottom: 10, left: 10 }, childViews: ->(horizontal) do
|
|
13
|
+
horizontal.label text: 'Spans 2 columns'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end,
|
|
18
|
+
->(section) do
|
|
19
|
+
section.header cellViews: ->(header) do
|
|
20
|
+
column_indexes.each do |i|
|
|
21
|
+
header.label text: "Heading#{i}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
items = [1, 2, 3]
|
|
26
|
+
section.rows objects: items, builder: ->(row, item, index) do
|
|
27
|
+
row.default colStyles: [{ width: 200, backgroundColor: '#eeeeee' }], cellViews: ->(cell) do
|
|
28
|
+
column_indexes.each do |i|
|
|
29
|
+
cell.label text: "Data #{item}"
|
|
30
|
+
end
|
|
31
|
+
end, onClick: ->(action) do
|
|
32
|
+
action.windows_open url: json_ui_garage_url(path: 'home/blank')
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
page_index = params[:page].to_i
|
|
2
|
+
next_page = {
|
|
3
|
+
url: json_ui_garage_url(path: 'views/charts', page: page_index + 1, data_only: 'v1'),
|
|
4
|
+
autoload: 'all'
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
if page_index < 3
|
|
8
|
+
builder.charts_line nextPage: next_page, dataSeries: [
|
|
9
|
+
-> do
|
|
10
|
+
json.title "Page #{page_index + 1}"
|
|
11
|
+
|
|
12
|
+
from = page_index + 1
|
|
13
|
+
to = page_index
|
|
14
|
+
json.points (from.month.ago.to_date..to.month.ago.to_date).map { |d| { x: d, y: 100 + rand(40) } }
|
|
15
|
+
end
|
|
16
|
+
]
|
|
17
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
scroll.spacer height: 20
|
|
9
|
+
scroll.h2 text: 'Basic'
|
|
10
|
+
scroll.spacer height: 6
|
|
11
|
+
scroll.banners_alert width: 'matchParent', icon: 'info', message: 'This is an alert banner'
|
|
12
|
+
|
|
13
|
+
scroll.spacer height: 20
|
|
14
|
+
scroll.h2 text: 'With color styling'
|
|
15
|
+
scroll.spacer height: 6
|
|
16
|
+
scroll.banners_alert width: 'matchParent', icon: 'info', message: 'This is an alert banner', styleClass: 'success'
|
|
17
|
+
|
|
18
|
+
scroll.spacer height: 20
|
|
19
|
+
scroll.h2 text: 'With select options'
|
|
20
|
+
scroll.spacer height: 6
|
|
21
|
+
scroll.banners_select width: 'matchParent', icon: 'info', message: 'This is a select banner', buttons: ->(menu) do
|
|
22
|
+
menu.button text: 'Option1', onClick: ->(action) do
|
|
23
|
+
action.dialogs_alert message: 'Option 1'
|
|
24
|
+
end
|
|
25
|
+
menu.button text: 'Option2', onClick: ->(action) do
|
|
26
|
+
action.dialogs_alert message: 'Option 2'
|
|
27
|
+
end
|
|
28
|
+
menu.button text: 'Option3', onClick: ->(action) do
|
|
29
|
+
action.dialogs_alert message: 'Option 3'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
scroll.spacer height: 20
|
|
34
|
+
scroll.h2 text: 'Alert banner with frameless styling (Experimental)'
|
|
35
|
+
scroll.spacer height: 6
|
|
36
|
+
scroll.banners_alert width: 'matchParent', icon: 'info', message: 'This is an alert banner', styleClass: 'frameless'
|
|
37
|
+
|
|
38
|
+
# # TODO: Deprecate in favour of `banners/custom` and `markdown`
|
|
39
|
+
# markdown = '## Emphasis' + "\n" +
|
|
40
|
+
# "\n" +
|
|
41
|
+
# '**This is bold text**' + "\n" +
|
|
42
|
+
# "\n" +
|
|
43
|
+
# '*This is italic text*' + "\n" +
|
|
44
|
+
# "\n" +
|
|
45
|
+
# '~~Strikethrough~~'
|
|
46
|
+
# scroll.spacer height: 20
|
|
47
|
+
# scroll.h2 text: 'Alert banner with markdown'
|
|
48
|
+
# scroll.spacer height: 6
|
|
49
|
+
# scroll.banners_alert width: 'matchParent', icon: 'info', message: markdown, message_format: 'markdown'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
section = json_ui_section json
|
|
2
|
+
section.rows builder: ->(row) do
|
|
3
|
+
row.custom title: 'Hackathon',
|
|
4
|
+
extra: {
|
|
5
|
+
start: '2018-12-14',
|
|
6
|
+
end: '2018-12-17'
|
|
7
|
+
},
|
|
8
|
+
onClick: ->(action) do
|
|
9
|
+
action.dialogs_alert message: 'At Town Hall'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
row.custom title: 'Birthday',
|
|
13
|
+
extra: {
|
|
14
|
+
start: '2018-12-30',
|
|
15
|
+
end: '2018-12-30'
|
|
16
|
+
},
|
|
17
|
+
onClick: ->(action) do
|
|
18
|
+
action.dialogs_alert message: 'At home'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
row.custom title: 'Conference',
|
|
22
|
+
extra: {
|
|
23
|
+
start: '2018-12-31',
|
|
24
|
+
end: '2019-01-02'
|
|
25
|
+
},
|
|
26
|
+
onClick: ->(action) do
|
|
27
|
+
action.dialogs_alert message: 'In Perth'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
json.title 'Views'
|
|
2
|
+
|
|
3
|
+
image_url1 = 'http://ichef.bbci.co.uk/news/976/cpsprodpb/18106/production/_97266589_gettyimages-474547165.jpg'
|
|
4
|
+
image_url2 = 'https://s.abcnews.com/images/International/Guam03-gty-jrl-170809_16x9_992.jpg'
|
|
5
|
+
|
|
6
|
+
json_ui_page json do |page|
|
|
7
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
8
|
+
|
|
9
|
+
page.scroll childViews: ->(scroll) do
|
|
10
|
+
scroll.label text: "\n"
|
|
11
|
+
scroll.h1 text: 'Carousel with labels'
|
|
12
|
+
scroll.panels_carousel width: 'matchParent', childViews: ->(carousel) do
|
|
13
|
+
carousel.label text: 'Item 1'
|
|
14
|
+
carousel.label text: 'Item 2'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
scroll.label text: "\n"
|
|
18
|
+
scroll.h1 text: 'Carousel with images'
|
|
19
|
+
scroll.panels_carousel width: 'matchParent', childViews: ->(carousel) do
|
|
20
|
+
carousel.image url: image_url1, width: 'matchParent'
|
|
21
|
+
carousel.image url: image_url2, width: 'matchParent'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
scroll.label text: "\n"
|
|
25
|
+
scroll.h1 text: 'Carousel with complex layout'
|
|
26
|
+
scroll.panels_carousel width: 'matchParent', childViews: ->(carousel) do
|
|
27
|
+
carousel.panels_vertical childViews: ->(panel) do
|
|
28
|
+
panel.h3 text: 'Item 1'
|
|
29
|
+
panel.image url: image_url1, width: 'matchParent'
|
|
30
|
+
end
|
|
31
|
+
carousel.panels_vertical childViews: ->(panel) do
|
|
32
|
+
panel.h3 text: 'Item 2'
|
|
33
|
+
panel.image url: image_url2, width: 'matchParent'
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
|
|
2
|
+
if params[:data_only].present?
|
|
3
|
+
json_ui_page json do |page|
|
|
4
|
+
page.data content: ->(data) do
|
|
5
|
+
render "#{@path_prefix}/views/chart_data", json: json, builder: data
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
else
|
|
9
|
+
json.title 'Views'
|
|
10
|
+
|
|
11
|
+
json_ui_page json do |page|
|
|
12
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
13
|
+
|
|
14
|
+
page.scroll padding: {top: 20, left: 20, right: 20, bottom: 20}, childViews: ->(scroll) do
|
|
15
|
+
scroll.h1 text: 'Line chart'
|
|
16
|
+
scroll.charts_line dataSeries: [
|
|
17
|
+
-> do
|
|
18
|
+
json.title 'Line 1'
|
|
19
|
+
|
|
20
|
+
points = {
|
|
21
|
+
'Sat, 10 Nov 2018' => 1,
|
|
22
|
+
'Sun, 11 Nov 2018' => 7,
|
|
23
|
+
'Mon, 12 Nov 2018' => 2,
|
|
24
|
+
'Tue, 13 Nov 2018' => 0,
|
|
25
|
+
'Wed, 14 Nov 2018' => 1,
|
|
26
|
+
'Thu, 15 Nov 2018' => 1,
|
|
27
|
+
'Fri, 16 Nov 2018' => 5,
|
|
28
|
+
}
|
|
29
|
+
json.points points.map { |k, v| { x: k, y: v } }
|
|
30
|
+
end,
|
|
31
|
+
-> do
|
|
32
|
+
json.title 'Line 2'
|
|
33
|
+
|
|
34
|
+
points = {
|
|
35
|
+
'Sat, 10 Nov 2018' => 5,
|
|
36
|
+
'Sun, 11 Nov 2018' => 3,
|
|
37
|
+
'Mon, 12 Nov 2018' => 8,
|
|
38
|
+
'Tue, 13 Nov 2018' => 5,
|
|
39
|
+
'Wed, 14 Nov 2018' => 3,
|
|
40
|
+
'Thu, 15 Nov 2018' => 5,
|
|
41
|
+
'Fri, 16 Nov 2018' => 1,
|
|
42
|
+
}
|
|
43
|
+
json.points points.map { |k, v| { x: k, y: v } }
|
|
44
|
+
end
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
scroll.spacer height: 20
|
|
48
|
+
scroll.h1 text: 'Line chart using remote data'
|
|
49
|
+
render "#{@path_prefix}/views/chart_data", json: json, builder: scroll
|
|
50
|
+
|
|
51
|
+
scroll.h2 text: 'Column chart (Clustered)'
|
|
52
|
+
scroll.charts_column dataGroups: [
|
|
53
|
+
-> do
|
|
54
|
+
json.title 'Column 1'
|
|
55
|
+
|
|
56
|
+
points = {
|
|
57
|
+
'2010' => 10,
|
|
58
|
+
'2020' => 16,
|
|
59
|
+
}
|
|
60
|
+
json.points points
|
|
61
|
+
end,
|
|
62
|
+
-> do
|
|
63
|
+
json.title 'Column 2'
|
|
64
|
+
|
|
65
|
+
points = {
|
|
66
|
+
'2010' => 24,
|
|
67
|
+
'2020' => 22,
|
|
68
|
+
}
|
|
69
|
+
json.points points
|
|
70
|
+
end,
|
|
71
|
+
-> do
|
|
72
|
+
json.title 'Column 3'
|
|
73
|
+
|
|
74
|
+
points = {
|
|
75
|
+
'2010' => 20,
|
|
76
|
+
'2020' => 23,
|
|
77
|
+
}
|
|
78
|
+
json.points points
|
|
79
|
+
end
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
scroll.h2 text: 'Column chart (Stacked)'
|
|
83
|
+
scroll.charts_column stacked: true, dataGroups: [
|
|
84
|
+
-> do
|
|
85
|
+
json.title 'Column 1'
|
|
86
|
+
|
|
87
|
+
points = {
|
|
88
|
+
'2010' => 10,
|
|
89
|
+
'2020' => 16,
|
|
90
|
+
}
|
|
91
|
+
json.points points
|
|
92
|
+
end,
|
|
93
|
+
-> do
|
|
94
|
+
json.title 'Column 2'
|
|
95
|
+
|
|
96
|
+
points = {
|
|
97
|
+
'2010' => 24,
|
|
98
|
+
'2020' => 22,
|
|
99
|
+
}
|
|
100
|
+
json.points points
|
|
101
|
+
end,
|
|
102
|
+
-> do
|
|
103
|
+
json.title 'Column 3'
|
|
104
|
+
|
|
105
|
+
points = {
|
|
106
|
+
'2010' => 20,
|
|
107
|
+
'2020' => 23,
|
|
108
|
+
}
|
|
109
|
+
json.points points
|
|
110
|
+
end
|
|
111
|
+
]
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
json.title 'Views'
|
|
2
|
+
|
|
3
|
+
page = json_ui_page json
|
|
4
|
+
render "#{@path_prefix}/nav_menu", json: json, page: page
|
|
5
|
+
|
|
6
|
+
# small_image_url = 'https://icons-for-free.com/iconfiles/png/128/of+thrones+game+thrones+series+character+avatar+jon+snow-1320568555745862611.png'
|
|
7
|
+
small_image_url = 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSGQpSWjtELISLBlmugOZ6wzl1JamYXQvbFeYywpfg3E8b8DrO0Kg&s'
|
|
8
|
+
|
|
9
|
+
page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
|
|
10
|
+
scroll.h2 text: 'Avatar'
|
|
11
|
+
scroll.spacer height: 6
|
|
12
|
+
scroll.avatar url: glib_json_image_avatar_url
|
|
13
|
+
|
|
14
|
+
scroll.spacer height: 20
|
|
15
|
+
scroll.h2 text: 'Icon'
|
|
16
|
+
scroll.spacer height: 6
|
|
17
|
+
scroll.icon spec: 'info'
|
|
18
|
+
|
|
19
|
+
scroll.spacer height: 20
|
|
20
|
+
scroll.h2 text: 'Image with base64 data'
|
|
21
|
+
scroll.spacer height: 6
|
|
22
|
+
scroll.image height: 100, base64Data: 'data:image/gif;base64,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'
|
|
23
|
+
|
|
24
|
+
scroll.spacer height: 20
|
|
25
|
+
scroll.h2 text: 'QR Code as base64 image'
|
|
26
|
+
scroll.spacer height: 6
|
|
27
|
+
if defined? RQRCode
|
|
28
|
+
qr_content = { version: 1, message: 'This is a test' }
|
|
29
|
+
qr = RQRCode::QRCode.new(qr_content.to_json)
|
|
30
|
+
scroll.image base64Data: qr.as_png(size: 300).to_data_url
|
|
31
|
+
else
|
|
32
|
+
scroll.label text: 'Include "rqrcode" gem to enable this'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
scroll.spacer height: 60
|
|
36
|
+
scroll.hr
|
|
37
|
+
|
|
38
|
+
scroll.spacer height: 60
|
|
39
|
+
scroll.h2 text: 'Original size'
|
|
40
|
+
scroll.spacer height: 6
|
|
41
|
+
scroll.image url: glib_json_image_standard_url
|
|
42
|
+
|
|
43
|
+
scroll.spacer height: 20
|
|
44
|
+
scroll.h2 text: 'Original size'
|
|
45
|
+
scroll.spacer height: 6
|
|
46
|
+
scroll.image url: small_image_url
|
|
47
|
+
|
|
48
|
+
# Reference: https://docs.imgix.com/apis/url/size/fit#clip
|
|
49
|
+
scroll.spacer height: 20
|
|
50
|
+
scroll.h2 text: 'fit: clip (default) to full width (scale down)'
|
|
51
|
+
scroll.spacer height: 6
|
|
52
|
+
scroll.image width: 'matchParent', url: glib_json_image_standard_url
|
|
53
|
+
|
|
54
|
+
scroll.spacer height: 20
|
|
55
|
+
scroll.h2 text: 'fit: clip (default) to full width (scale up)'
|
|
56
|
+
scroll.spacer height: 6
|
|
57
|
+
scroll.image width: 'matchParent', url: small_image_url
|
|
58
|
+
|
|
59
|
+
scroll.spacer height: 20
|
|
60
|
+
scroll.h2 text: 'fit: clip (default) to width (scale down)'
|
|
61
|
+
scroll.spacer height: 6
|
|
62
|
+
scroll.image width: 320, url: glib_json_image_standard_url
|
|
63
|
+
|
|
64
|
+
scroll.spacer height: 20
|
|
65
|
+
scroll.h2 text: 'fit: clip (default) to height (scale down)'
|
|
66
|
+
scroll.spacer height: 6
|
|
67
|
+
scroll.image height: 320, url: glib_json_image_standard_url
|
|
68
|
+
|
|
69
|
+
scroll.spacer height: 20
|
|
70
|
+
scroll.h2 text: 'fit: clip (default) to width (scale up)'
|
|
71
|
+
scroll.spacer height: 6
|
|
72
|
+
scroll.image width: 320, url: small_image_url
|
|
73
|
+
|
|
74
|
+
scroll.spacer height: 20
|
|
75
|
+
scroll.h2 text: 'fit: clip (default) to height (scale up)'
|
|
76
|
+
scroll.spacer height: 6
|
|
77
|
+
scroll.image height: 320, url: small_image_url
|
|
78
|
+
|
|
79
|
+
# Reference: https://docs.imgix.com/apis/url/size/fit#crop
|
|
80
|
+
scroll.spacer height: 20
|
|
81
|
+
scroll.h2 text: 'fit: crop to width'
|
|
82
|
+
scroll.spacer height: 6
|
|
83
|
+
scroll.image width: 200, url: glib_json_image_standard_url, fit: :crop
|
|
84
|
+
|
|
85
|
+
scroll.spacer height: 20
|
|
86
|
+
scroll.h2 text: 'fit: crop to height'
|
|
87
|
+
scroll.spacer height: 6
|
|
88
|
+
scroll.image height: 200, url: glib_json_image_standard_url, fit: :crop
|
|
89
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
json.title 'Views'
|
|
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 sections: [
|
|
7
|
+
->(section) do
|
|
8
|
+
section.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
9
|
+
header.h2 text: 'Components'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
section.rows builder: ->(template) do
|
|
13
|
+
template.thumbnail title: 'Texts', onClick: ->(action) do
|
|
14
|
+
action.windows_open url: json_ui_garage_url(path: 'views/texts')
|
|
15
|
+
end
|
|
16
|
+
template.thumbnail title: 'Images', onClick: ->(action) do
|
|
17
|
+
action.windows_open url: json_ui_garage_url(path: 'views/images')
|
|
18
|
+
end
|
|
19
|
+
template.thumbnail title: 'Carousels', onClick: ->(action) do
|
|
20
|
+
action.windows_open url: json_ui_garage_url(path: 'views/carousels')
|
|
21
|
+
end
|
|
22
|
+
template.thumbnail title: 'Charts', onClick: ->(action) do
|
|
23
|
+
action.windows_open url: json_ui_garage_url(path: 'views/charts')
|
|
24
|
+
end
|
|
25
|
+
template.thumbnail title: 'Banners', onClick: ->(action) do
|
|
26
|
+
action.windows_open url: json_ui_garage_url(path: 'views/banners')
|
|
27
|
+
end
|
|
28
|
+
template.thumbnail title: 'Misc', onClick: ->(action) do
|
|
29
|
+
action.windows_open url: json_ui_garage_url(path: 'views/misc')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end,
|
|
33
|
+
->(section) do
|
|
34
|
+
section.header padding: glib_json_padding_list, childViews: ->(header) do
|
|
35
|
+
header.h2 text: 'Styling and Formatting'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
section.rows builder: ->(template) do
|
|
39
|
+
template.thumbnail title: 'Markdowns', onClick: ->(action) do
|
|
40
|
+
action.windows_open url: json_ui_garage_url(path: 'views/markdowns')
|
|
41
|
+
end
|
|
42
|
+
template.thumbnail title: 'Links', onClick: ->(action) do
|
|
43
|
+
action.windows_open url: json_ui_garage_url(path: 'views/links')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
]
|
|
48
|
+
end
|