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.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/app/controllers/concerns/glib/auth/policy.rb +148 -0
  3. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -0
  4. data/app/controllers/concerns/glib/json/libs.rb +144 -0
  5. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -0
  6. data/app/controllers/concerns/glib/json/transformation.rb +11 -0
  7. data/app/controllers/concerns/glib/json/traversal.rb +85 -0
  8. data/app/controllers/concerns/glib/json/ui.rb +70 -0
  9. data/app/controllers/concerns/glib/json/validation.rb +13 -0
  10. data/app/controllers/glib/home_controller.rb +16 -0
  11. data/app/helpers/glib/app_feature_support_helper.rb +16 -0
  12. data/app/helpers/glib/dynamic_images_helper.rb +52 -0
  13. data/app/helpers/glib/dynamic_texts_helper.rb +42 -0
  14. data/app/helpers/glib/forms_helper.rb +15 -0
  15. data/app/helpers/glib/json_ui/abstract_builder.rb +281 -0
  16. data/app/helpers/glib/json_ui/action_builder.rb +81 -0
  17. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -0
  18. data/app/helpers/glib/json_ui/action_builder/http.rb +19 -0
  19. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -0
  20. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -0
  21. data/app/helpers/glib/json_ui/action_builder/windows.rb +25 -0
  22. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -0
  23. data/app/helpers/glib/json_ui/generic_builders.rb +28 -0
  24. data/app/helpers/glib/json_ui/list_builders.rb +87 -0
  25. data/app/helpers/glib/json_ui/menu_builder.rb +52 -0
  26. data/app/helpers/glib/json_ui/page_helper.rb +187 -0
  27. data/app/helpers/glib/json_ui/response_helper.rb +23 -0
  28. data/app/helpers/glib/json_ui/split_builders.rb +32 -0
  29. data/app/helpers/glib/json_ui/styling_helper.rb +25 -0
  30. data/app/helpers/glib/json_ui/table_builders.rb +74 -0
  31. data/app/helpers/glib/json_ui/view_builder.rb +185 -0
  32. data/app/helpers/glib/json_ui/view_builder/banners.rb +24 -0
  33. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -0
  34. data/app/helpers/glib/json_ui/view_builder/fields.rb +213 -0
  35. data/app/helpers/glib/json_ui/view_builder/panels.rb +219 -0
  36. data/app/models/glib/active_storage/attachment.rb +9 -0
  37. data/app/models/glib/active_storage/blob.rb +9 -0
  38. data/app/models/glib/dynamic_text_record.rb +9 -0
  39. data/app/models/glib/text.rb +96 -0
  40. data/app/policies/glib/application_policy.rb +164 -0
  41. data/app/validators/email_typo_validator.rb +38 -0
  42. data/app/validators/email_validator.rb +7 -0
  43. data/app/validators/url_validator.rb +20 -0
  44. data/app/views/app/views/json_ui/vue/renderer.html.erb +35 -0
  45. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +71 -0
  46. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -0
  47. data/app/views/json_ui/garage/actions/_http.json.jbuilder +18 -0
  48. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -0
  49. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +19 -0
  50. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -0
  51. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +18 -0
  52. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -0
  53. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -0
  54. data/app/views/json_ui/garage/actions/index.json.jbuilder +23 -0
  55. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +7 -0
  56. data/app/views/json_ui/garage/forms/basic.json.jbuilder +34 -0
  57. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -0
  58. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +44 -0
  59. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +41 -0
  60. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +25 -0
  61. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -0
  62. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +58 -0
  63. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +31 -0
  64. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -0
  65. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +28 -0
  66. data/app/views/json_ui/garage/forms/index.json.jbuilder +101 -0
  67. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +46 -0
  68. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -0
  69. data/app/views/json_ui/garage/forms/selects.json.jbuilder +70 -0
  70. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +88 -0
  71. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +32 -0
  72. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -0
  73. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +24 -0
  74. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -0
  75. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -0
  76. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +22 -0
  77. data/app/views/json_ui/garage/home/blank.json.jbuilder +11 -0
  78. data/app/views/json_ui/garage/home/index.json.jbuilder +32 -0
  79. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -0
  80. data/app/views/json_ui/garage/lists/_infinite_scroll_section.json.jbuilder +20 -0
  81. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +19 -0
  82. data/app/views/json_ui/garage/lists/fab.json.jbuilder +14 -0
  83. data/app/views/json_ui/garage/lists/index.json.jbuilder +23 -0
  84. data/app/views/json_ui/garage/lists/infinite_scroll.json.jbuilder +38 -0
  85. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -0
  86. data/app/views/json_ui/garage/notifications/index.json.jbuilder +18 -0
  87. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -0
  88. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -0
  89. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -0
  90. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -0
  91. data/app/views/json_ui/garage/pages/index.json.jbuilder +47 -0
  92. data/app/views/json_ui/garage/pages/layout.json.jbuilder +19 -0
  93. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -0
  94. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -0
  95. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +27 -0
  96. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -0
  97. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -0
  98. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +16 -0
  99. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -0
  100. data/app/views/json_ui/garage/panels/flow.json.jbuilder +49 -0
  101. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -0
  102. data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -0
  103. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -0
  104. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +88 -0
  105. data/app/views/json_ui/garage/panels/split.json.jbuilder +183 -0
  106. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +50 -0
  107. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -0
  108. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -0
  109. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -0
  110. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +13 -0
  111. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +38 -0
  112. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +39 -0
  113. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -0
  114. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -0
  115. data/app/views/json_ui/garage/tables/index.json.jbuilder +26 -0
  116. data/app/views/json_ui/garage/tables/layout.json.jbuilder +38 -0
  117. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -0
  118. data/app/views/json_ui/garage/views/banners.json.jbuilder +51 -0
  119. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -0
  120. data/app/views/json_ui/garage/views/carousels.json.jbuilder +37 -0
  121. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -0
  122. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -0
  123. data/app/views/json_ui/garage/views/index.json.jbuilder +48 -0
  124. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -0
  125. data/app/views/json_ui/garage/views/map_data.json.jbuilder +43 -0
  126. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -0
  127. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -0
  128. data/app/views/json_ui/garage/views/texts.json.jbuilder +41 -0
  129. data/app/views/layouts/json_ui/renderer.html.erb +32 -0
  130. data/config/routes.rb +8 -0
  131. data/lib/generators/glib/install_generator.rb +24 -0
  132. data/lib/generators/templates/20191017062519_create_texts.rb +12 -0
  133. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -0
  134. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -0
  135. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -0
  136. data/lib/generators/templates/database.yml +107 -0
  137. data/lib/generators/templates/dynamic_text.rb +2 -0
  138. data/lib/glib-web.rb +8 -0
  139. data/lib/glib/crypt.rb +1 -0
  140. data/lib/glib/crypt/utils.rb +26 -0
  141. data/lib/glib/dynamic_text.rb +1 -0
  142. data/lib/glib/dynamic_text/config.rb +21 -0
  143. data/lib/glib/engine.rb +7 -0
  144. data/lib/glib/json_crawler.rb +10 -0
  145. data/lib/glib/json_crawler/action_crawler.rb +20 -0
  146. data/lib/glib/json_crawler/action_crawlers/action_http.rb +14 -0
  147. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -0
  148. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -0
  149. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +15 -0
  150. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +28 -0
  151. data/lib/glib/json_crawler/coverage.rb +20 -0
  152. data/lib/glib/json_crawler/http.rb +120 -0
  153. data/lib/glib/json_crawler/router.rb +86 -0
  154. data/lib/glib/test_helpers.rb +40 -0
  155. data/lib/glib/value.rb +7 -0
  156. data/lib/glib/version.rb +5 -0
  157. data/lib/tasks/db.rake +95 -0
  158. 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