voom-presenters 0.1.13 → 0.2.0

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 (305) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +186 -0
  4. data/Gemfile.lock +37 -38
  5. data/HISTORY.md +61 -0
  6. data/README.md +23 -1
  7. data/app/demo/components/chips.pom +6 -0
  8. data/app/demo/components/{forms.pom → content.pom} +3 -3
  9. data/app/demo/components/date_fields.pom +1 -1
  10. data/app/demo/components/datetime_fields.pom +6 -0
  11. data/app/demo/components/drawers.pom +1 -1
  12. data/app/demo/components/file_inputs.pom +16 -0
  13. data/app/demo/components/footers.pom +1 -1
  14. data/app/demo/components/google_maps.pom +17 -0
  15. data/app/demo/components/headers.pom +1 -1
  16. data/app/demo/components/layouts.pom +36 -4
  17. data/app/demo/components/lists.pom +25 -0
  18. data/app/demo/components/nav/menu.pom +9 -2
  19. data/app/demo/components/nav/pattern_drawer.pom +5 -0
  20. data/app/demo/components/nav/pattern_menu.pom +12 -0
  21. data/app/demo/components/sliders.pom +49 -0
  22. data/app/demo/components/snackbar.pom +10 -0
  23. data/app/demo/components/steppers.pom +178 -0
  24. data/app/demo/components/tab_bars.pom +51 -0
  25. data/app/demo/components/tables.pom +85 -13
  26. data/app/demo/components/text_areas.pom +13 -0
  27. data/app/demo/components/text_fields.pom +20 -8
  28. data/app/demo/components/toggles.pom +50 -14
  29. data/app/demo/components/tooltips.pom +2 -6
  30. data/app/demo/events/actions/clear.pom +23 -0
  31. data/app/demo/events/actions/loads.pom +16 -6
  32. data/app/demo/events/actions/posts.pom +1 -1
  33. data/app/demo/events/actions/toggle_visiblity.pom +4 -3
  34. data/app/demo/events/nav/drawer.pom +2 -2
  35. data/app/demo/events/tagged_input.pom +37 -0
  36. data/app/demo/hello_world.pom +3 -0
  37. data/app/demo/markdown.pom +1 -0
  38. data/app/demo/namespaces.pom +89 -0
  39. data/app/demo/nav/top_nav.pom +12 -0
  40. data/app/demo/patterns.pom +19 -0
  41. data/app/demo/patterns/search_select.pom +104 -0
  42. data/app/demo/shared/context_list.pom +1 -1
  43. data/app/demo/styles.pom +21 -11
  44. data/component-status.yml +11 -11
  45. data/config.ru +2 -1
  46. data/lib/voom/container_methods.rb +1 -1
  47. data/lib/voom/presenters-engine.rb +29 -26
  48. data/lib/voom/presenters.rb +15 -9
  49. data/lib/voom/presenters/api/app.rb +18 -5
  50. data/lib/voom/presenters/api/router.rb +11 -49
  51. data/lib/voom/presenters/demo/echo.rb +5 -0
  52. data/lib/voom/presenters/dsl.rb +10 -4
  53. data/lib/voom/presenters/dsl/components/actions/base.rb +37 -0
  54. data/lib/voom/presenters/dsl/components/actions/clear.rb +17 -0
  55. data/lib/voom/presenters/dsl/components/actions/deletes.rb +17 -0
  56. data/lib/voom/presenters/dsl/components/actions/dialog.rb +17 -0
  57. data/lib/voom/presenters/dsl/components/actions/loads.rb +32 -0
  58. data/lib/voom/presenters/dsl/components/actions/navigates.rb +17 -0
  59. data/lib/voom/presenters/dsl/components/actions/posts.rb +17 -0
  60. data/lib/voom/presenters/dsl/components/actions/remove.rb +17 -0
  61. data/lib/voom/presenters/dsl/components/actions/replaces.rb +25 -0
  62. data/lib/voom/presenters/dsl/components/actions/snackbar.rb +17 -0
  63. data/lib/voom/presenters/dsl/components/actions/stepper.rb +17 -0
  64. data/lib/voom/presenters/dsl/components/actions/toggle_visibility.rb +17 -0
  65. data/lib/voom/presenters/dsl/components/actions/updates.rb +17 -0
  66. data/lib/voom/presenters/dsl/components/avatar.rb +4 -5
  67. data/lib/voom/presenters/dsl/components/badge.rb +1 -1
  68. data/lib/voom/presenters/dsl/components/base.rb +20 -11
  69. data/lib/voom/presenters/dsl/components/button.rb +12 -10
  70. data/lib/voom/presenters/dsl/components/card.rb +18 -19
  71. data/lib/voom/presenters/dsl/components/checkbox.rb +3 -1
  72. data/lib/voom/presenters/dsl/components/chip.rb +9 -10
  73. data/lib/voom/presenters/dsl/components/content.rb +21 -11
  74. data/lib/voom/presenters/dsl/components/date_field.rb +1 -1
  75. data/lib/voom/presenters/dsl/components/datetime_base.rb +1 -2
  76. data/lib/voom/presenters/dsl/components/datetime_field.rb +1 -1
  77. data/lib/voom/presenters/dsl/components/dialog.rb +10 -6
  78. data/lib/voom/presenters/dsl/components/drawer.rb +6 -4
  79. data/lib/voom/presenters/dsl/components/event.rb +55 -39
  80. data/lib/voom/presenters/dsl/components/event_base.rb +2 -2
  81. data/lib/voom/presenters/dsl/components/expansion_panel.rb +5 -5
  82. data/lib/voom/presenters/dsl/components/file_input.rb +22 -0
  83. data/lib/voom/presenters/dsl/components/footer.rb +1 -1
  84. data/lib/voom/presenters/dsl/components/form.rb +17 -15
  85. data/lib/voom/presenters/dsl/components/google_map.rb +40 -0
  86. data/lib/voom/presenters/dsl/components/grid.rb +58 -18
  87. data/lib/voom/presenters/dsl/components/header.rb +2 -5
  88. data/lib/voom/presenters/dsl/components/hidden_field.rb +2 -2
  89. data/lib/voom/presenters/dsl/components/icon.rb +4 -5
  90. data/lib/voom/presenters/dsl/components/icon_base.rb +3 -3
  91. data/lib/voom/presenters/dsl/components/icon_toggle.rb +2 -2
  92. data/lib/voom/presenters/dsl/components/image.rb +3 -3
  93. data/lib/voom/presenters/dsl/components/input.rb +2 -2
  94. data/lib/voom/presenters/dsl/components/list.rb +12 -10
  95. data/lib/voom/presenters/dsl/components/lists/action.rb +8 -9
  96. data/lib/voom/presenters/dsl/components/lists/actions.rb +8 -8
  97. data/lib/voom/presenters/dsl/components/lists/header.rb +2 -2
  98. data/lib/voom/presenters/dsl/components/lists/line.rb +14 -17
  99. data/lib/voom/presenters/dsl/components/lists/separator.rb +2 -2
  100. data/lib/voom/presenters/dsl/components/menu.rb +10 -12
  101. data/lib/voom/presenters/dsl/components/mixins/attaches.rb +9 -3
  102. data/lib/voom/presenters/dsl/components/mixins/avatar.rb +0 -1
  103. data/lib/voom/presenters/dsl/components/mixins/buttons.rb +1 -1
  104. data/lib/voom/presenters/dsl/components/mixins/chips.rb +1 -2
  105. data/lib/voom/presenters/dsl/components/mixins/common.rb +20 -14
  106. data/lib/voom/presenters/dsl/components/mixins/content.rb +1 -1
  107. data/lib/voom/presenters/dsl/components/mixins/date_time_fields.rb +0 -3
  108. data/lib/voom/presenters/dsl/components/mixins/dialogs.rb +1 -2
  109. data/lib/voom/presenters/dsl/components/mixins/event.rb +3 -3
  110. data/lib/voom/presenters/dsl/components/mixins/expansion_panels.rb +1 -1
  111. data/lib/voom/presenters/dsl/components/mixins/file_inputs.rb +16 -0
  112. data/lib/voom/presenters/dsl/components/mixins/google_maps.rb +15 -0
  113. data/lib/voom/presenters/dsl/components/mixins/grids.rb +1 -1
  114. data/lib/voom/presenters/dsl/components/mixins/icons.rb +0 -1
  115. data/lib/voom/presenters/dsl/components/mixins/menus.rb +1 -1
  116. data/lib/voom/presenters/dsl/components/mixins/selects.rb +0 -1
  117. data/lib/voom/presenters/dsl/components/mixins/sliders.rb +15 -0
  118. data/lib/voom/presenters/dsl/components/mixins/snackbars.rb +0 -1
  119. data/lib/voom/presenters/dsl/components/mixins/steppers.rb +15 -0
  120. data/lib/voom/presenters/dsl/components/mixins/tab_bars.rb +15 -0
  121. data/lib/voom/presenters/dsl/components/mixins/text_fields.rb +5 -3
  122. data/lib/voom/presenters/dsl/components/mixins/toggles.rb +1 -4
  123. data/lib/voom/presenters/dsl/components/mixins/tooltips.rb +0 -1
  124. data/lib/voom/presenters/dsl/components/mixins/typography.rb +43 -13
  125. data/lib/voom/presenters/dsl/components/page.rb +0 -1
  126. data/lib/voom/presenters/dsl/components/radio_button.rb +1 -1
  127. data/lib/voom/presenters/dsl/components/rich_text_area.rb +26 -0
  128. data/lib/voom/presenters/dsl/components/select.rb +4 -5
  129. data/lib/voom/presenters/dsl/components/slider.rb +39 -0
  130. data/lib/voom/presenters/dsl/components/snackbar.rb +2 -2
  131. data/lib/voom/presenters/dsl/components/stepper.rb +106 -0
  132. data/lib/voom/presenters/dsl/components/switch.rb +1 -1
  133. data/lib/voom/presenters/dsl/components/tab_bar.rb +53 -0
  134. data/lib/voom/presenters/dsl/components/table.rb +99 -27
  135. data/lib/voom/presenters/dsl/components/text_area.rb +4 -3
  136. data/lib/voom/presenters/dsl/components/text_field.rb +8 -12
  137. data/lib/voom/presenters/dsl/components/time_field.rb +1 -1
  138. data/lib/voom/presenters/dsl/components/toggle_base.rb +2 -2
  139. data/lib/voom/presenters/dsl/components/tooltip.rb +1 -2
  140. data/lib/voom/presenters/dsl/components/typography.rb +4 -5
  141. data/lib/voom/presenters/dsl/definer.rb +2 -2
  142. data/lib/voom/presenters/dsl/definition.rb +6 -4
  143. data/lib/voom/presenters/dsl/user_interface.rb +17 -21
  144. data/lib/voom/presenters/errors/parameter_validation.rb +1 -1
  145. data/lib/voom/presenters/helpers.rb +5 -5
  146. data/lib/voom/presenters/helpers/date.rb +3 -3
  147. data/lib/voom/presenters/helpers/rails.rb +7 -2
  148. data/lib/voom/presenters/helpers/rails/model_table.rb +14 -6
  149. data/lib/voom/presenters/helpers/route.rb +6 -0
  150. data/lib/voom/presenters/helpers/time.rb +1 -1
  151. data/lib/voom/presenters/namespace.rb +12 -0
  152. data/lib/voom/presenters/settings.rb +58 -37
  153. data/lib/voom/presenters/version.rb +1 -1
  154. data/lib/voom/presenters/web_client/app.rb +50 -20
  155. data/lib/voom/presenters/web_client/markdown_render.rb +24 -11
  156. data/lib/voom/presenters/web_client/router.rb +17 -52
  157. data/lib/voom/serializer.rb +2 -2
  158. data/lib/voom/trace.rb +1 -1
  159. data/presenters.gemspec +2 -1
  160. data/public/style-bundle.js +2 -2
  161. data/scripts/bump.sh +1 -0
  162. data/scripts/changelog.sh +5 -0
  163. data/scripts/deploy-demo.sh +1 -0
  164. data/scripts/release.sh +1 -1
  165. data/scripts/tag.sh +5 -0
  166. data/views/mdc/.babelrc +8 -0
  167. data/views/mdc/.eslintrc.yml +23 -0
  168. data/views/mdc/assets/js/app.js +19 -6
  169. data/views/mdc/assets/js/components/base-component.js +25 -2
  170. data/views/mdc/assets/js/components/base-container.js +47 -0
  171. data/views/mdc/assets/js/components/button.js +3 -10
  172. data/views/mdc/assets/js/components/cards.js +11 -0
  173. data/views/mdc/assets/js/components/checkboxes.js +30 -7
  174. data/views/mdc/assets/js/components/chips.js +38 -5
  175. data/views/mdc/assets/js/components/content.js +13 -0
  176. data/views/mdc/assets/js/components/data-tables.js +38 -0
  177. data/views/mdc/assets/js/components/datetime.js +61 -21
  178. data/views/mdc/assets/js/components/dialogs.js +25 -19
  179. data/views/mdc/assets/js/components/events.js +13 -3
  180. data/views/mdc/assets/js/components/events/base.js +13 -3
  181. data/views/mdc/assets/js/components/events/errors.js +1 -1
  182. data/views/mdc/assets/js/components/events/posts.js +53 -13
  183. data/views/mdc/assets/js/components/events/removes.js +20 -0
  184. data/views/mdc/assets/js/components/events/replaces.js +35 -36
  185. data/views/mdc/assets/js/components/events/stepper.js +23 -0
  186. data/views/mdc/assets/js/components/events/toggle_visibility.js +15 -11
  187. data/views/mdc/assets/js/components/file-inputs.js +29 -0
  188. data/views/mdc/assets/js/components/forms.js +8 -59
  189. data/views/mdc/assets/js/components/grid.js +20 -0
  190. data/views/mdc/assets/js/components/hidden-fields.js +33 -0
  191. data/views/mdc/assets/js/components/icon-toggles.js +7 -14
  192. data/views/mdc/assets/js/components/initialize.js +20 -1
  193. data/views/mdc/assets/js/components/lists.js +1 -1
  194. data/views/mdc/assets/js/components/menus.js +12 -13
  195. data/views/mdc/assets/js/components/mixins/visibility-observer.js +34 -0
  196. data/views/mdc/assets/js/components/radios.js +39 -0
  197. data/views/mdc/assets/js/components/rich-text-area.js +43 -0
  198. data/views/mdc/assets/js/components/selects.js +24 -23
  199. data/views/mdc/assets/js/components/sliders.js +56 -0
  200. data/views/mdc/assets/js/components/snackbar.js +14 -23
  201. data/views/mdc/assets/js/components/steppers.js +48 -0
  202. data/views/mdc/assets/js/components/switches.js +24 -23
  203. data/views/mdc/assets/js/components/tab-bars.js +14 -0
  204. data/views/mdc/assets/js/components/text-fields.js +37 -35
  205. data/views/mdc/assets/js/config.js +27 -0
  206. data/views/mdc/assets/js/mdl-stepper.js +1108 -0
  207. data/views/mdc/assets/js/utils/compatibility.js +9 -0
  208. data/views/mdc/assets/js/utils/config.js +73 -0
  209. data/views/mdc/assets/js/utils/config.test.js +59 -0
  210. data/views/mdc/assets/js/utils/urls.js +5 -2
  211. data/views/mdc/assets/scss/app.scss +11 -3
  212. data/views/mdc/assets/scss/components/button.scss +17 -2
  213. data/views/mdc/assets/scss/components/card.scss +8 -3
  214. data/views/mdc/assets/scss/components/checkbox.scss +0 -4
  215. data/views/mdc/assets/scss/components/content.scss +11 -0
  216. data/views/mdc/assets/scss/components/data-table.scss +80 -0
  217. data/views/mdc/assets/scss/components/datetime.scss +6 -0
  218. data/views/mdc/assets/scss/components/fab.scss +2 -1
  219. data/views/mdc/assets/scss/components/file-input.scss +22 -0
  220. data/views/mdc/assets/scss/components/grid.scss +59 -3
  221. data/views/mdc/assets/scss/components/image.scss +6 -0
  222. data/views/mdc/assets/scss/components/list.scss +13 -0
  223. data/views/mdc/assets/scss/components/menu.scss +1 -0
  224. data/views/mdc/assets/scss/components/radio.scss +4 -0
  225. data/views/mdc/assets/scss/components/rich-text-area.scss +37 -0
  226. data/views/mdc/assets/scss/components/slider.scss +1 -0
  227. data/views/mdc/assets/scss/components/snackbar.scss +1 -5
  228. data/views/mdc/assets/scss/components/stepper.scss +235 -0
  229. data/views/mdc/assets/scss/components/switch.scss +4 -5
  230. data/views/mdc/assets/scss/components/tab-bars.scss +4 -0
  231. data/views/mdc/assets/scss/components/textfield.scss +8 -1
  232. data/views/mdc/assets/scss/components/typography.scss +4 -0
  233. data/views/mdc/assets/scss/components/vendor/flatpickr.min.css +2 -2
  234. data/views/mdc/assets/scss/components/vendor/quill.snow.css +945 -0
  235. data/views/mdc/assets/scss/styles.scss +3 -2
  236. data/views/mdc/assets/scss/theme.scss +6 -0
  237. data/views/mdc/body/header.erb +1 -0
  238. data/views/mdc/body/snackbar.erb +1 -1
  239. data/views/mdc/components/actions/clear.rb +11 -0
  240. data/views/mdc/components/actions/delete.rb +11 -0
  241. data/views/mdc/components/actions/dialog.rb +11 -0
  242. data/views/mdc/components/actions/loads.rb +11 -0
  243. data/views/mdc/components/actions/navigates.rb +11 -0
  244. data/views/mdc/components/actions/post.rb +17 -0
  245. data/views/mdc/components/actions/remove.rb +10 -0
  246. data/views/mdc/components/actions/replaces.rb +12 -0
  247. data/views/mdc/components/actions/snackbar.rb +10 -0
  248. data/views/mdc/components/actions/stepper.rb +10 -0
  249. data/views/mdc/components/actions/toggle_visibility.rb +10 -0
  250. data/views/mdc/components/actions/update.rb +10 -0
  251. data/views/mdc/components/button.erb +9 -6
  252. data/views/mdc/components/buttons/button.erb +10 -5
  253. data/views/mdc/components/buttons/fab.erb +8 -2
  254. data/views/mdc/components/buttons/icon.erb +9 -2
  255. data/views/mdc/components/buttons/image.erb +9 -4
  256. data/views/mdc/components/{display.erb → caption.erb} +0 -0
  257. data/views/mdc/components/card.erb +6 -3
  258. data/views/mdc/components/checkbox.erb +21 -9
  259. data/views/mdc/components/chip.erb +12 -3
  260. data/views/mdc/components/content.erb +6 -1
  261. data/views/mdc/components/datetime.erb +21 -13
  262. data/views/mdc/components/dialog.erb +4 -1
  263. data/views/mdc/components/event.erb +5 -9
  264. data/views/mdc/components/file_input.erb +13 -0
  265. data/views/mdc/components/form.erb +19 -5
  266. data/views/mdc/components/google_map.erb +9 -0
  267. data/views/mdc/components/grid.erb +18 -4
  268. data/views/mdc/components/headline.erb +2 -0
  269. data/views/mdc/components/hidden_field.erb +6 -1
  270. data/views/mdc/components/icon_toggle.erb +1 -1
  271. data/views/mdc/components/list.erb +5 -2
  272. data/views/mdc/components/list/actions/switch.erb +1 -1
  273. data/views/mdc/components/list/line.erb +7 -6
  274. data/views/mdc/components/menu.erb +8 -12
  275. data/views/mdc/components/{subheading.erb → overline.erb} +0 -0
  276. data/views/mdc/components/radio_button.erb +20 -10
  277. data/views/mdc/components/rich_text_area.erb +19 -0
  278. data/views/mdc/components/select.erb +7 -3
  279. data/views/mdc/components/slider.erb +41 -0
  280. data/views/mdc/components/snackbar.erb +2 -6
  281. data/views/mdc/components/stepper.erb +47 -0
  282. data/views/mdc/components/stepper/step.erb +33 -0
  283. data/views/mdc/components/{title.erb → subtitle.erb} +0 -0
  284. data/views/mdc/components/switch.erb +27 -12
  285. data/views/mdc/components/tab_bar.erb +29 -0
  286. data/views/mdc/components/table.erb +4 -2
  287. data/views/mdc/components/table/checkbox.erb +17 -0
  288. data/views/mdc/components/table/header.erb +13 -4
  289. data/views/mdc/components/table/pagination.erb +14 -23
  290. data/views/mdc/components/table/row.erb +3 -1
  291. data/views/mdc/components/text_area.erb +17 -7
  292. data/views/mdc/components/text_field.erb +31 -13
  293. data/views/mdc/components/typography.erb +2 -2
  294. data/views/mdc/layout.erb +33 -31
  295. data/views/mdc/package-lock.json +11019 -6996
  296. data/views/mdc/package.json +46 -27
  297. data/views/mdc/webpack.config.js +1 -0
  298. metadata +112 -13
  299. data/app/demo/events/actions/autocomplete.pom +0 -32
  300. data/lib/voom/presenters/dsl/components/action.rb +0 -35
  301. data/views/mdc/assets/js/components/events/autocomplete.js +0 -96
  302. data/views/mdc/assets/js/material.js +0 -3996
  303. data/views/mdc/assets/scss/components/table-pagination.scss +0 -65
  304. data/views/mdc/components/modal.erb +0 -15
  305. data/views/mdc/components/static.erb +0 -7
@@ -0,0 +1,37 @@
1
+ Voom::Presenters.define(:tagged_input) do
2
+ helpers Demo::Helpers::IndentedGrid
3
+
4
+ attach :top_nav
5
+ attach :events_drawer
6
+
7
+ indented_grid do
8
+ display 'Tagged Input'
9
+ body %(This demonstrates the ability to tag containers or components and then to post those values in an event action.
10
+ Sometimes you need to pull values from different nesting levels on a page to post.
11
+ Tags let you collect all tagged inputs from anywhere on the page and post them to some server side action.
12
+ An example of this can be found in the [search select](/search_select) pattern demo.)
13
+
14
+ blank
15
+ body 'Tags can be applied to containers and/or components.
16
+ Containers include content blocks, grids, forms, steppers, dialogs and cards.
17
+ All input components accept tags.'
18
+
19
+ title 'Example'
20
+
21
+ content tag: :somefields do
22
+ radio_button text: :on, name: :check_me, value: :on, checked: true
23
+ radio_button text: :off, name: :check_me, value: :off
24
+ end
25
+ text_field name: :myfield2, tag: :somefields do
26
+ label 'More Data to post'
27
+ end
28
+
29
+ button 'Press me' do
30
+ event :click do
31
+ replaces :context_list, :context_list, input_tag: :somefields
32
+ end
33
+ end
34
+ attach :context_list
35
+ attach :code, file: __FILE__
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ Voom::Presenters.define(:hello_world) do
2
+ headline 'Hello World'
3
+ end
@@ -62,5 +62,6 @@ Voom::Presenters.define(:markdown) do
62
62
  ## changelog
63
63
  * 17-Feb-2013 re-design
64
64
  HEREDOC
65
+ attach :code, file: __FILE__
65
66
  end
66
67
  end
@@ -0,0 +1,89 @@
1
+ require_relative 'helpers/indented_grid'
2
+
3
+ Voom::Presenters.define(:namespaces) do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach :top_nav
6
+ page_title 'Namespaces' do
7
+ icon 'far fa-object-group'
8
+ end
9
+
10
+ indented_grid do
11
+ body 'Presenters support namespaces. The namespace is an optional parameter to the define method:'
12
+ blank
13
+ body "`Voom::Presenters.define(:mypresenter, namespace: :namespace1)` or"
14
+ attach 'namespace2:alternate_namespacing'
15
+
16
+ body %(When defined in a namespace all other presenters in the same namespace are accessable without scoping the namespace.
17
+ When accessing a presenter outside your current namespace, simple provide the namespace(s) with `:` as the separator.
18
+ attach, loads and replaces all accept namespaced presenters:)
19
+ blank
20
+ attach 'namespace1:attach_with_namespace'
21
+ blank
22
+ body 'Both loads and replaces are namespace aware. To call a presenter in the ame namespace, no scoping is needed.
23
+ To call a presenter in another namespace, you need to fully qualify it.'
24
+ button 'Load' do
25
+ event :click do
26
+ loads 'namespace1:attach_with_namespace', replaced: 'I was loaded'
27
+ end
28
+ end
29
+ button 'Replace' do
30
+ event :click do
31
+ replaces :attach_with_namespace_id, 'namespace1:attach_with_namespace', replaced: 'I was replaced'
32
+ end
33
+ end
34
+ blank
35
+ attach 'namespace1:namespace2:nested_namespaces'
36
+ button 'Load' do
37
+ event :click do
38
+ loads 'namespace1:namespace2:nested_namespaces', replaced: 'I was loaded'
39
+ end
40
+ end
41
+ button 'Replace' do
42
+ event :click do
43
+ replaces :nested_namespaces_id, 'namespace1:namespace2:nested_namespaces', replaced: 'I was replaced'
44
+ end
45
+ end
46
+ blank
47
+ body %(Routes add the namespace(s) as a prefix: /namespace1/mypresenter)
48
+ blank
49
+ overline 'Notes:'
50
+ attach 'namespace1:namespace2:notes'
51
+ end
52
+ attach :code, file: __FILE__
53
+ end
54
+
55
+ Voom::Presenters.define(:attach_with_namespace, namespace: :namespace1) do
56
+ content id: :attach_with_namespace_id do
57
+ body "For example: `attach 'namespace1:mypresenter'` to insert/attach a presenter in a different namespace."
58
+ attach :replaced # Demonstrates calling top level presenters from a namespaced presenter
59
+ end
60
+ end
61
+
62
+ Voom::Presenters.define(:nested_namespaces, namespace: [:namespace1, :namespace2]) do
63
+ content id: :nested_namespaces_id do
64
+ body %(Namespaces can be nested two levels deep by passing an array of namespaces:
65
+ `Voom::Presenters.define(:mypresenter, namespace: [:foo,:bar])`)
66
+ attach :replaced # Demonstrates calling top level presenters from a namespaced presenter
67
+ end
68
+ end
69
+
70
+ Voom::Presenters.define(:replaced) do
71
+ body "#{context[:replaced]}"
72
+ end
73
+
74
+ Voom::Presenters.define('namespace2:alternate_namespacing') do
75
+ body "`Voom::Presenters.define('namespace1:mypresenter')`"
76
+ attach :blank_line # demonstrates attaching a presenter in the same namespace mixing alternate naming
77
+ end
78
+
79
+ Voom::Presenters.define(:blank_line, namespace: :namespace2) do
80
+ blank
81
+ end
82
+
83
+ Voom::Presenters.define('namespace2:notes', namespace: :namespace1) do
84
+ body <<~HEREDOC
85
+ * You can mix the two syntax's. `Voom::Presenters.define('namespace2:mypresenter', namespace: 'namespace1')`
86
+ * With this syntax attach/loads and replaces will operate in namespace1, unless fully qualified
87
+ * Unlike ruby modules you are either inside a namespace and can call presenters without qualification, or you are not and you must fully qualify them.
88
+ HEREDOC
89
+ end
@@ -29,6 +29,18 @@ Voom::Presenters.define('top_nav') do
29
29
  end
30
30
  end
31
31
 
32
+ item 'Patterns' do
33
+ event :click do
34
+ loads :patterns
35
+ end
36
+ end
37
+
38
+ item 'Namespaces' do
39
+ event :click do
40
+ loads :namespaces
41
+ end
42
+ end
43
+
32
44
  item 'Status' do
33
45
  event :click do
34
46
  loads :component_status
@@ -0,0 +1,19 @@
1
+ require_relative 'helpers/indented_grid'
2
+
3
+ Voom::Presenters.define('patterns') do
4
+ helpers Demo::Helpers::IndentedGrid
5
+ attach 'top_nav'
6
+ attach 'pattern_drawer'
7
+ page_title 'Patterns'
8
+
9
+ indented_grid do
10
+ grid do
11
+ column 12 do
12
+ icon 'fa-hand-point-left', position: :left
13
+ subheading 'Select a pattern'
14
+ end
15
+ end
16
+ end
17
+ attach :code, file: __FILE__
18
+
19
+ end
@@ -0,0 +1,104 @@
1
+ require_relative '../helpers/indented_grid'
2
+
3
+ module Demo
4
+ module Helpers
5
+ module SearchSelectDemo
6
+ def searches
7
+ search = context.fetch(:search) {nil}
8
+ searches = context.fetch(:searches) {[]}
9
+ searches << search unless search.nil? || search == ''
10
+ searches.select{|s| s != ''}
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+
17
+ Voom::Presenters.define(:search_select) do
18
+ helpers Demo::Helpers::IndentedGrid
19
+ attach :top_nav
20
+ attach :pattern_drawer
21
+
22
+ page_title 'Search and Select Pattern'
23
+ indented_grid do
24
+ grid tag: :input_data_container do
25
+ column 6 do
26
+ grid do
27
+ column 4 do
28
+ content do
29
+ text_field id: :search_field, name: :search, full_width: false do
30
+ label 'Search Tickets'
31
+ event :input do
32
+ replaces :ticket_list, :ticket_list, input_tag: :input_data_container
33
+ end
34
+ event :change do
35
+ replaces :ticket_list, :ticket_list, input_tag: :input_data_container
36
+ replaces :completed_searches, :completed_searches, input_tag: :input_data_container
37
+ clears :search_field
38
+ end
39
+ end
40
+ end
41
+ end
42
+ column 8 do
43
+ attach :completed_searches
44
+ end
45
+ end
46
+ attach :ticket_list, title: 'Search Results'
47
+ end
48
+ end
49
+ attach :code, file: __FILE__
50
+ end
51
+ end
52
+
53
+ Voom::Presenters.define(:ticket_list) do
54
+ helpers Demo::Helpers::SearchSelectDemo
55
+ helpers do
56
+ def ticket_data
57
+ [OpenStruct.new(id: 1, event_name: 'Pearl Jam', type: 'General Admission', amount: 10.00),
58
+ OpenStruct.new(id: 2, event_name: 'Pearl Jam', type: 'Reserved Seating', amount: 25.00),
59
+ OpenStruct.new(id: 3, event_name: 'Temple of the Dog', type: 'General Admission', amount: 5.00),
60
+ OpenStruct.new(id: 4, event_name: 'Temple of the Dog', type: 'Reserved Seating', amount: 10.00),
61
+ OpenStruct.new(id: 5, event_name: 'Japandroids', type: 'General Admission', amount: 7.50),
62
+ OpenStruct.new(id: 6, event_name: 'Japandroids', type: 'Reserved Seating', amount: 15.00)]
63
+ end
64
+
65
+ def tickets
66
+ re = Regexp.union(searches)
67
+ ticket_data.select {|ticket| re.match(ticket.event_name)}
68
+ end
69
+
70
+ def ticket_ids
71
+ context.fetch(:ticket_id) {[]}
72
+ end
73
+ end
74
+
75
+ content id: :ticket_list do
76
+ list selectable: true do
77
+ tickets.each do |ticket|
78
+ line name: :ticket_id, value: ticket.id, checked: ticket_ids.include?(ticket.id.to_s) do
79
+ text ticket.event_name
80
+ subtitle ticket.type
81
+ info "$#{ticket.amount}"
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ Voom::Presenters.define(:completed_searches) do
89
+ helpers Demo::Helpers::SearchSelectDemo
90
+ content id: :completed_searches do
91
+ searches.each do |search|
92
+ chip color: :primary, name: 'searches[]', value: search, id: search do
93
+ text search
94
+ icon :delete, position: :right do
95
+ event :click do
96
+ remove search
97
+ replaces :ticket_list, :ticket_list, input_tag: :input_data_container
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+
@@ -16,7 +16,7 @@ Voom::Presenters.define(:context_list) do
16
16
  content id: :context_list do
17
17
  grid do
18
18
  column 12 do
19
- display title
19
+ headline title
20
20
  subheading "#{time}"
21
21
  list do
22
22
  scrubbed_context.map {|k, v| "#{k}: #{v}"}.each do |param|
@@ -8,23 +8,33 @@ Voom::Presenters.define(:styles) do
8
8
  end
9
9
 
10
10
  indented_grid do
11
- display 'Styles'
11
+ headline'Typography', level: 1
12
12
 
13
- # heading is an alias for display
14
- heading 'Typography', level: 4
15
- display 'Display 4', level: 4
16
- display 'Display 3', level: 3
17
- display 'Display 2', level: 2
18
- display 'Display 1', level: 1
19
- headline 'Headline'
20
- title 'Title'
21
- subheading 'Subheading 2', level: 2
22
- subheading 'Subheading 1', level: 1
13
+ headline 'Headline 1', level: 1
14
+ headline 'Headline 2', level: 2
15
+ headline 'Headline 3', level: 3
16
+ headline 'Headline 4', level: 4
17
+ headline 'Headline 5', level: 5
18
+ headline 'Default Headline Size'
19
+ headline 'Headline 6', level: 6
20
+ title 'Title'
21
+ subtitle 'subtitle 1', level: 1
22
+ subtitle 'subtitle 2', level: 2
23
23
  body ['Body 1 paragraph. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut',
24
24
  'labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut',
25
25
  'aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat',
26
26
  'nulla pariatur.'], level: 1
27
27
  body 'Body 2 text, calling something out.', level: 2
28
+ caption 'Caption'
29
+ overline 'Overline'
28
30
  body 'You can use [markdown](/markdown) in your typography'
31
+ body '`blank` will insert a blank line'
32
+ blank
33
+ body 'Line above me, intentionally left blank'
34
+ separator
35
+ body 'Line above me is a separator'
36
+ link 'You can have a link', 'https://www.google.com/search?q=link&source=lnms&tbm=isch&sa=X&ved=0ahUKEwipr4zY_JXdAhVNXK0KHWFNCdYQ_AUICigB&biw=1651&bih=932'
37
+
29
38
  end
39
+ attach :code, file: __FILE__
30
40
  end
@@ -129,12 +129,12 @@
129
129
  Notes:
130
130
  -
131
131
  Components: Selection controls/switches
132
- Implementation: MDL/MDC
132
+ Implementation: MDC
133
133
  MDL:
134
134
  MDC: Y
135
135
  Priority:
136
- Completeness: 1
137
- Notes: The checkboxes and radio buttons from MDL need to be ported to MDC.
136
+ Completeness: 2
137
+ Notes:
138
138
  -
139
139
  Components: Select fields
140
140
  Implementation: MDC
@@ -145,11 +145,11 @@
145
145
  Notes:
146
146
  -
147
147
  Components: Sliders
148
- Implementation: N
148
+ Implementation: MDC
149
149
  MDL:
150
150
  MDC: Y
151
151
  Priority: medium
152
- Completeness:
152
+ Completeness: 2
153
153
  Notes:
154
154
  -
155
155
  Components: Snackbars & toasts
@@ -161,11 +161,11 @@
161
161
  Notes:
162
162
  -
163
163
  Components: Steppers
164
- Implementation: N
165
- MDL: N
164
+ Implementation: MDL
165
+ MDL: Y
166
166
  MDC: N
167
167
  Priority: medium
168
- Completeness:
168
+ Completeness: 1
169
169
  Notes: https://ahlechandre.github.io/mdl-stepper/
170
170
  -
171
171
  Components: Subheaders
@@ -177,11 +177,11 @@
177
177
  Notes: This should be doable using typography
178
178
  -
179
179
  Components: Tabs
180
- Implementation: N
180
+ Implementation: Y
181
181
  MDL:
182
182
  MDC: Y
183
- Priority: medium
184
- Completeness:
183
+ Priority:
184
+ Completeness: 2
185
185
  Notes:
186
186
  -
187
187
  Components: Text fields
data/config.ru CHANGED
@@ -9,6 +9,7 @@ if ENV['VOOM_ENV']=='integration_testing'
9
9
  end
10
10
 
11
11
  ENV['VOOM_ROOT'] = File.expand_path(__dir__)
12
+ ENV['GOOGLE_API_KEY'] = 'AIzaSyDhSgj9XSBLY5E9Rx5pP2ILQ7IXnD4uX2Q'
12
13
  libdir = File.join(ENV['VOOM_ROOT'], 'lib')
13
14
  $:.unshift(libdir) unless $:.include?(libdir)
14
15
  require 'voom/presenters/api/app'
@@ -16,7 +17,6 @@ require 'voom/presenters/web_client/app'
16
17
  require 'voom/presenters/demo/search'
17
18
  require 'voom/presenters/demo/echo'
18
19
 
19
-
20
20
  use Voom::Presenters::Demo::Search
21
21
  use Voom::Presenters::Demo::Echo
22
22
 
@@ -28,3 +28,4 @@ Voom::Presenters::Settings.configure do |config|
28
28
  end
29
29
  Voom::Presenters::App.boot!
30
30
 
31
+
@@ -1,4 +1,4 @@
1
- require_relative 'symbol/to_str'
1
+ require 'voom/symbol/to_str'
2
2
 
3
3
  module Voom
4
4
  module ContainerMethods
@@ -1,41 +1,44 @@
1
1
  if Rails.version =~ /^4/
2
- require_dependency 'voom/presenters'
2
+ ActiveSupport::Dependencies.require_dependency 'voom/presenters'
3
3
  else
4
4
  require 'voom/presenters'
5
5
  end
6
6
 
7
- module Voom
8
- module Presenter
9
- class Engine < ::Rails::Engine
10
- config.autoload_paths += Dir["#{config.root}/lib/**/"]
7
+ unless defined?(Voom::Presenter::Railtie)
8
+ module Voom
9
+ module Presenter
10
+ class Engine < ::Rails::Engine
11
+ config.eager_load_paths += Dir["#{config.root}/lib"]
12
+ end
11
13
  end
12
14
  end
13
- end
14
15
 
15
16
 
16
- module Voom
17
- module Presenter
18
- class Railtie < ::Rails::Railtie
19
- BOOT = ->{
20
- Voom::Presenters::Settings.configure do |config|
21
- config.presenters.root = Rails.root.join('app')
22
- config.presenters.deep_freeze = false
17
+ module Voom
18
+ module Presenter
19
+ class Railtie < ::Rails::Railtie
20
+ BOOT = -> {
21
+ Voom::Presenters::Settings.configure do |config|
22
+ config.presenters.root = Rails.root.join('app')
23
+ config.presenters.deep_freeze = false
24
+ end
25
+ Voom::Presenters::App.boot!
26
+ }
27
+ RELOADER = ActiveSupport::FileUpdateChecker.new([], {"app" => ["pom"]}) do
28
+ Voom::Presenters::App.reset!
29
+ BOOT.call
23
30
  end
24
- Voom::Presenters::App.boot!
25
- }
26
- RELOADER = ActiveSupport::FileUpdateChecker.new([], {"app" => ["pom"]}) do
27
- Voom::Presenters::App.reset!
28
- BOOT.call
29
- end
30
31
 
31
- initializer 'voom-presenters' do |app|
32
- app.reloaders << RELOADER
33
- end
32
+ initializer 'voom-presenters' do |app|
33
+ app.reloaders << RELOADER
34
+ end
34
35
 
35
- config.to_prepare do
36
- RELOADER.execute_if_updated
37
- BOOT.call
36
+ config.to_prepare do
37
+ reloaded = RELOADER.execute_if_updated
38
+ BOOT.call unless reloaded
39
+ require_dependency Voom::Presenter::Engine.root.join('lib', 'voom-presenters').to_s
40
+ end
38
41
  end
39
42
  end
40
43
  end
41
- end
44
+ end