glib-web 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
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,183 @@
1
+ json.title 'Panels'
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.h1 text: '2 columns'
9
+ scroll.panels_split width: 'matchParent', content: ->(content) do
10
+ content.left childViews: ->(left) do
11
+ left.button text: '1'
12
+ end
13
+ content.right childViews: ->(right) do
14
+ right.button text: '2'
15
+ end
16
+ end
17
+
18
+ scroll.label text: "\n"
19
+ scroll.h1 text: '3 columns'
20
+ scroll.panels_split width: 'matchParent', content: ->(content) do
21
+ content.left childViews: ->(left) do
22
+ left.button text: '1'
23
+ end
24
+ content.center childViews: ->(center) do
25
+ center.button width: 'matchParent', text: '2'
26
+ end
27
+ content.right childViews: ->(right) do
28
+ right.button text: '3'
29
+ end
30
+ end
31
+
32
+ scroll.label text: "\n"
33
+ scroll.h1 text: 'Expandable left'
34
+ scroll.panels_split width: 'matchParent', content: ->(content) do
35
+ content.center childViews: ->(center) do
36
+ center.button width: 'matchParent', text: '1'
37
+ end
38
+ content.right childViews: ->(right) do
39
+ right.button text: '2'
40
+ end
41
+ end
42
+
43
+ scroll.label text: "\n"
44
+ scroll.h1 text: 'Expandable right'
45
+ scroll.panels_split width: 'matchParent', content: ->(content) do
46
+ content.left childViews: ->(left) do
47
+ left.button text: '1'
48
+ end
49
+ content.center childViews: ->(center) do
50
+ center.button width: 'matchParent', text: '2'
51
+ end
52
+ end
53
+
54
+ scroll.label text: "\n"
55
+ scroll.h1 text: 'Short center text'
56
+ scroll.panels_split width: 'matchParent', content: ->(content) do
57
+ content.left childViews: ->(left) do
58
+ left.button text: '1'
59
+ end
60
+ content.center childViews: ->(center) do
61
+ center.label text: 'short'
62
+ end
63
+ content.right childViews: ->(right) do
64
+ right.button text: '2'
65
+ end
66
+ end
67
+
68
+ scroll.label text: "\n"
69
+ scroll.h1 text: 'Long center text'
70
+ scroll.panels_split width: 'matchParent', content: ->(content) do
71
+ content.left childViews: ->(left) do
72
+ left.button text: '1'
73
+ end
74
+ content.center childViews: ->(center) do
75
+ center.label text: 'a very very very very very very very very very very very very very very very very very very very very very very very very very very very very long text'
76
+ end
77
+ content.right childViews: ->(right) do
78
+ right.button text: '2'
79
+ end
80
+ end
81
+
82
+ scroll.label text: "\n"
83
+ scroll.h1 text: 'Few center items'
84
+ scroll.panels_split width: 'matchParent', content: ->(content) do
85
+ content.left childViews: ->(left) do
86
+ left.button text: 'L'
87
+ end
88
+ content.center childViews: ->(center) do
89
+ center.panels_horizontal childViews: ->(h) do
90
+ h.button text: '1'
91
+ h.button text: '2'
92
+ h.button text: '3'
93
+ end
94
+ end
95
+ content.right childViews: ->(right) do
96
+ right.button text: 'R'
97
+ end
98
+ end
99
+
100
+ scroll.label text: "\n"
101
+ scroll.h1 text: 'Many center items'
102
+ scroll.panels_split width: 'matchParent', content: ->(content) do
103
+ content.left childViews: ->(left) do
104
+ left.button text: 'L'
105
+ end
106
+ content.center childViews: ->(center) do
107
+ center.panels_flow width: 'matchParent', backgroundColor: '#b3bac2', childViews: ->(h) do
108
+ (1..20).each do |index|
109
+ h.button text: index
110
+ end
111
+ end
112
+ end
113
+ content.right childViews: ->(right) do
114
+ right.button text: 'R'
115
+ end
116
+ end
117
+
118
+ scroll.label text: "\n"
119
+ scroll.h1 text: 'Center filled equally'
120
+ scroll.panels_split width: 'matchParent', content: ->(content) do
121
+ content.left childViews: ->(left) do
122
+ left.button text: 'L'
123
+ end
124
+ content.center childViews: ->(center) do
125
+ center.panels_horizontal width: 'matchParent', backgroundColor: '#b3bac2', distribution: 'fillEqually', childViews: ->(h) do
126
+ h.button text: '1'
127
+ h.button text: '2'
128
+ h.button text: '3'
129
+ end
130
+ end
131
+ content.right childViews: ->(right) do
132
+ right.button text: 'R'
133
+ end
134
+ end
135
+
136
+ scroll.label text: "\n"
137
+ scroll.h1 text: 'Center spaced equally'
138
+ scroll.panels_split width: 'matchParent', content: ->(content) do
139
+ content.left childViews: ->(left) do
140
+ left.button text: 'L'
141
+ end
142
+ content.center childViews: ->(center) do
143
+ center.panels_horizontal width: 'matchParent', backgroundColor: '#b3bac2', distribution: 'spaceEqually', childViews: ->(h) do
144
+ h.button text: '1'
145
+ h.button text: '2'
146
+ h.button text: '3'
147
+ end
148
+ end
149
+ content.right childViews: ->(right) do
150
+ right.button text: 'R'
151
+ end
152
+ end
153
+
154
+ scroll.label text: "\n"
155
+ scroll.h1 text: 'Combo 1'
156
+ scroll.panels_split width: 'matchParent', content: ->(content) do
157
+ content.left childViews: ->(left) do
158
+ left.label text: 'a very very very very very very very very very very very very very very very very very very very very very very very very very very very very long text'
159
+ end
160
+ content.right width: 120, backgroundColor: '#b3bac2', childViews: ->(right) do
161
+ right.panels_horizontal distribution: 'spaceEqually', childViews: ->(h) do
162
+ h.label text: 'Label One'
163
+ h.label text: 'Label Two'
164
+ end
165
+ end
166
+ end
167
+
168
+ scroll.label text: "\n"
169
+ scroll.h1 text: 'Combo 2'
170
+ scroll.panels_split width: 200, backgroundColor: '#b3bac2', padding: { right: 10 }, content: ->(content) do
171
+ content.left childViews: ->(left) do
172
+ left.button text: 'Big'
173
+ end
174
+ content.right childViews: ->(right) do
175
+ right.panels_horizontal height: 'matchParent', align: 'middle', childViews: ->(h) do
176
+ h.spacer width: 10
177
+ h.button text: 'small', styleClass: 'link'
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
183
+
@@ -0,0 +1,50 @@
1
+ json.title 'Panels'
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
+ scroll.h1 text: 'Basic'
8
+ scroll.panels_vertical backgroundColor: '#b3bac2', childViews: ->(panel) do
9
+ panel.button text: 'Button1'
10
+ panel.button text: 'Button2', width: 200
11
+ panel.button text: 'Button3', width: 300
12
+ end
13
+
14
+ scroll.label text: "\n"
15
+ scroll.h1 text: 'Equal filling'
16
+ scroll.panels_vertical backgroundColor: '#b3bac2', height: 300, distribution: 'fillEqually', childViews: ->(panel) do
17
+ panel.button text: 'Button1'
18
+ panel.button text: 'Button2'
19
+ panel.button text: 'Button3'
20
+ end
21
+
22
+ scroll.label text: "\n"
23
+ scroll.h1 text: 'Equal spacing'
24
+ scroll.panels_vertical backgroundColor: '#b3bac2', height: 300, distribution: 'spaceEqually', childViews: ->(panel) do
25
+ panel.button text: 'Button1'
26
+ panel.button text: 'Button2'
27
+ panel.button text: 'Button3'
28
+ end
29
+
30
+ scroll.label text: "\n"
31
+ scroll.h1 text: 'Alignments'
32
+ scroll.panels_vertical width: 'matchParent', backgroundColor: '#b3bac2', align: 'center', childViews: ->(panel) do
33
+ panel.button text: 'Center'
34
+ end
35
+ scroll.panels_vertical width: 'matchParent', backgroundColor: '#b3bac2', align: 'right', childViews: ->(panel) do
36
+ panel.button text: 'Right'
37
+ end
38
+
39
+ scroll.label text: "\n"
40
+ scroll.h1 text: 'Spacers'
41
+ scroll.panels_vertical width: 'matchParent', childViews: ->(panel) do
42
+ panel.button text: '1'
43
+ panel.spacer height: 10
44
+ panel.button text: '2'
45
+ panel.spacer height: 50
46
+ panel.button text: '3'
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,13 @@
1
+ json.title 'Dynamic Text Service'
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
+ scroll.h3 text: dt_json('.hello', name: 'John')
8
+ scroll.spacer height: 6
9
+ scroll.label text: dt_json('.greeting')
10
+ scroll.label text: dt_json('.greeting_with_image')
11
+ end
12
+
13
+ end
@@ -0,0 +1,47 @@
1
+ json.title 'Image Service'
2
+
3
+ # See https://docs.imgix.com/apis/url/size/fit#clip
4
+ page = json_ui_page json
5
+ render "#{@path_prefix}/nav_menu", json: json, page: page
6
+
7
+ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
8
+ bucket = 'itinerarybuilder-demo'
9
+
10
+ # TODO: This needs fixing
11
+ scroll.h1 text: 'Original size'
12
+ scroll.spacer height: 6
13
+ scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, width: nil, height: nil)
14
+
15
+ scroll.h1 text: 'fit: clip (default) to width'
16
+ scroll.spacer height: 6
17
+ scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, width: 100, height: nil)
18
+
19
+ scroll.spacer height: 20
20
+ scroll.h1 text: 'fit: clip (default) to height'
21
+ scroll.spacer height: 6
22
+ scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, width: nil, height: 100)
23
+
24
+ scroll.spacer height: 20
25
+ scroll.h1 text: 'fit: crop to width'
26
+ scroll.spacer height: 6
27
+ scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, fit: 'crop', width: 100, height: nil)
28
+
29
+ scroll.spacer height: 20
30
+ scroll.h1 text: 'fit: crop to height'
31
+ scroll.spacer height: 6
32
+ scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, fit: 'crop', width: nil, height: 100)
33
+
34
+ # Currently this doesn't behave the same way as https://docs.imgix.com/apis/url/size/fit#fill
35
+ #
36
+ # scroll.spacer height: 20
37
+ # scroll.h1 text: 'fit: fill to width'
38
+ # scroll.spacer height: 6
39
+ # scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, fit: 'fill', width: 2000, height: nil)
40
+
41
+ # Currently this doesn't behave the same way as https://docs.imgix.com/apis/url/size/fit#fill
42
+ #
43
+ # scroll.spacer height: 20
44
+ # scroll.h1 text: 'fit: fill to height'
45
+ # scroll.spacer height: 6
46
+ # scroll.image url: dynamic_image_url(glib_json_image_blob_key, bucket: bucket, fit: 'fill', width: nil, height: 2000)
47
+ end
@@ -0,0 +1,17 @@
1
+ json.title 'Dynamic Texts'
2
+
3
+ page = json_ui_page json
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: 'Dynamic Text', onClick: ->(action) do
9
+ action.windows_open url: json_ui_garage_url(path: 'services/dynamic_text')
10
+ end
11
+
12
+ template.thumbnail title: 'Image', onClick: ->(action) do
13
+ action.windows_open url: json_ui_garage_url(path: 'services/image')
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,13 @@
1
+
2
+ batch_count = 30
3
+ items = (1..batch_count)
4
+ section = page.table_section_builder
5
+ section.rows objects: items, builder: ->(row, item, index) do
6
+ row.default cellViews: ->(cell) do
7
+ column_indexes.each do |i|
8
+ cell.label text: "Data #{page_index * batch_count + item}"
9
+ end
10
+ end, onClick: ->(action) do
11
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
12
+ end
13
+ end
@@ -0,0 +1,38 @@
1
+
2
+ page_index = params[:page].to_i
3
+ next_page = {
4
+ url: json_ui_garage_url(path: 'tables/autoload_all', page: page_index + 1, section_only: 'v1'),
5
+ autoload: 'all'
6
+ }
7
+
8
+ column_indexes = (1..3)
9
+ # TODO: Cater
10
+ # - for SEO: one URL for a standalone page and one URL for pagination only
11
+ # - for generic approach, e.g. excluding nav_menu when there is no change
12
+ if params[:section_only].present?
13
+ json.nextPage next_page if page_index < 3
14
+ json_ui_page json do |page|
15
+ json.sections do
16
+ json.child! do
17
+ render 'json_ui/garage/tables/autoload_section', page: page, page_index: page_index, column_indexes: column_indexes
18
+ end
19
+ end
20
+ end
21
+ else
22
+ json.title 'Tables'
23
+
24
+ json_ui_page json do |page|
25
+ render "#{@path_prefix}/nav_menu", json: json, page: page
26
+
27
+ page.table nextPage: next_page, firstSection: ->(section) do
28
+ section.header cellViews: ->(header) do
29
+ column_indexes.each do |i|
30
+ header.label text: "Heading#{i}"
31
+ end
32
+ end
33
+
34
+ render "#{@path_prefix}/tables/autoload_section", page: page, page_index: page_index, column_indexes: column_indexes
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,39 @@
1
+
2
+ page_index = params[:page].to_i
3
+ next_page = {
4
+ url: json_ui_garage_url(path: 'tables/autoload_all', page: page_index + 1, section_only: 'v1'),
5
+ autoload: 'asNeeded'
6
+ }
7
+
8
+ column_indexes = (1..3)
9
+ if params[:section_only].present?
10
+ json.nextPage next_page if page_index < 3
11
+ json_ui_page json do |page|
12
+ json.sections do
13
+ json.child! do
14
+ render 'json_ui/garage/tables/autoload_section', page: page, page_index: page_index, column_indexes: column_indexes
15
+ end
16
+ end
17
+ end
18
+ else
19
+ json.title 'Tables'
20
+
21
+ json_ui_page json do |page|
22
+ render "#{@path_prefix}/nav_menu", json: json, page: page
23
+
24
+ page.table nextPage: next_page, firstSection: ->(section) do
25
+ section.header cellViews: ->(header) do
26
+ column_indexes.each do |i|
27
+ header.label text: "Heading#{i}"
28
+ end
29
+ end
30
+
31
+ render "#{@path_prefix}/tables/autoload_section", page: page, page_index: page_index, column_indexes: column_indexes
32
+ end, onScrollToBottom: ->(action) do
33
+ action.snackbars_alert message: 'Scrolled to Bottom'
34
+ end, onScrollToTop: ->(action) do
35
+ action.snackbars_alert message: 'Scrolled to Top'
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,29 @@
1
+ json.title 'Tables'
2
+
3
+ page = json_ui_page json
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
+
6
+ page.table export: { label: 'Export', fileName: 'output' }, import: { submitUrl: json_ui_garage_url(path: 'forms/generic_post'), paramName: 'user' }, firstSection: ->(section) do
7
+ section.header cellViews: ->(header) do
8
+ header.label text: 'field1'
9
+ header.label text: 'field2'
10
+ header.label text: 'field3'
11
+ header.label text: 'field4'
12
+ header.label text: 'field5'
13
+ header.label text: 'field6'
14
+ end
15
+
16
+ items = [1, 2, 3]
17
+ section.rows objects: items, builder: ->(row, item, index) do
18
+ row.default cellViews: ->(cell) do
19
+ cell.label text: "Data #{item}"
20
+ cell.label text: "Data 'A' #{item}"
21
+ cell.label text: 'Data "B"' + " #{item}"
22
+ cell.label text: "Data , #{item}"
23
+ cell.label text: "Line A#{item}\nLine B#{item}"
24
+ cell.label text: "Line A#{item}\rLine B#{item}"
25
+ end, onClick: ->(action) do
26
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
27
+ end
28
+ end
29
+ end
@@ -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
5
+
6
+ column_indexes = (1..20)
7
+ page.table firstSection: ->(section) do
8
+ section.header cellViews: ->(header) do
9
+ column_indexes.each do |i|
10
+ header.label text: "Heading#{i}"
11
+ end
12
+ end
13
+
14
+ items = [1, 2, 3]
15
+ section.rows objects: items, builder: ->(row, item, index) do
16
+ row.default cellViews: ->(cell) do
17
+ column_indexes.each do |i|
18
+ cell.label text: "Data #{item}"
19
+ end
20
+ end, onClick: ->(action) do
21
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
22
+ end
23
+ end
24
+ end
25
+
26
+ end