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
@@ -2,12 +2,18 @@ require 'dry-container'
2
2
  require 'voom/container_methods'
3
3
  require 'voom/logger_methods'
4
4
  require 'voom/trace'
5
- require_relative 'presenters/version'
6
- require_relative 'presenters/settings'
7
- require_relative 'presenters/container_item'
8
- require_relative 'presenters/dsl'
9
- require_relative 'presenters/dsl/definer'
10
- require_relative 'presenters/dsl/definition'
11
- require_relative 'presenters/helpers'
12
- require_relative 'presenters/app'
13
-
5
+ unless defined?(Voom::Presenters::Version)
6
+ require 'voom/presenters/version'
7
+ require 'voom/presenters/settings'
8
+ require 'voom/presenters/container_item'
9
+ require 'voom/presenters/dsl'
10
+ require 'voom/presenters/dsl/definer'
11
+ require 'voom/presenters/dsl/definition'
12
+ require 'voom/presenters/helpers'
13
+ require 'voom/presenters/app'
14
+
15
+ module Voom
16
+ module Presenters
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,7 @@
1
1
  require 'sinatra'
2
2
  require 'json'
3
- require_relative '../../presenters'
4
- require_relative 'router'
3
+ require 'voom/presenters'
4
+ require 'voom/presenters/api/router'
5
5
 
6
6
  module Voom
7
7
  module Presenters
@@ -13,15 +13,28 @@ module Voom
13
13
  set :bind, '0.0.0.0'
14
14
 
15
15
  get '/:_presenter_.pom' do
16
- render_presenter
16
+ render_presenter(params[:_presenter_])
17
17
  end
18
18
 
19
+ get '/:_namespace1_/:_presenter_.pom' do
20
+ fq_presenter = [params[:_namespace1_], params[:_presenter_]].join(':')
21
+ pass unless Presenters::App.registered?(fq_presenter)
22
+ render_presenter(fq_presenter)
23
+ end
24
+
25
+ get '/:_namespace1_/:_namespace2_/:_presenter_.pom' do
26
+ fq_presenter = [params[:_namespace1_], params[:_namespace2_], params[:_presenter_]].join(':')
27
+ pass unless Presenters::App.registered?(fq_presenter)
28
+ render_presenter(fq_presenter)
29
+ end
30
+
31
+
19
32
  private
20
33
 
21
- def render_presenter
34
+ def render_presenter(presenter)
22
35
  # puts "/presenters/api/#{params[:version]}/#{params[:presenter]}/"
23
36
  # puts "Parameters: #{params.inspect}"
24
- presenter = Voom::Presenters::App[params[:_presenter_]].call
37
+ presenter = Voom::Presenters::App[presenter].call
25
38
  pom = presenter.expand(router: router, context: prepare_context)
26
39
  content_type :json
27
40
  JSON.dump(pom.to_hash)
@@ -11,49 +11,15 @@ module Voom
11
11
  @base_url = base_url
12
12
  end
13
13
 
14
- def url(command: nil, render: nil, entity: nil, context:)
14
+ def url(command: nil, render: nil, context:)
15
15
  _params_ = context.dup
16
- # if it is a local page command
17
- # return build_local_render(command, render, entity, _params_) if local_render?(render)
18
- return build_render_url(render, entity, _params_) unless command
19
- _params_[:redirect]=build_render_url(render, entity, _params_) if render
20
- build_command_url(command, entity, _params_)
21
- end
22
-
23
- def local_render?(render)
24
- return unless render
25
- render.to_s.start_with?('#')
26
- end
27
-
28
- def build_local_render(command, render, entity, context)
29
-
30
- client_command = render[/(.*?)\(/m, 1]
31
-
32
- start_params = render.index('(')
33
- end_params = render.rindex(')')
34
- client_params = render[start_params+1..end_params-1]
35
- client_params = client_params.split(',')
36
-
37
- client_command += '('
38
- client_params.each.with_index do |p, index|
39
- client_command += ',' if index > 0
40
- url_var = p[/{url\((.*?)\)}/m, 1]
41
- client_command += build_client_url(url_var.strip, entity, context) if url_var && command.nil?
42
- client_command += p.strip unless url_var
43
- end
44
- client_command += ')'
45
- end
46
-
47
- def join_errors
48
- '<br/>'
16
+ return build_render_url(render, _params_) unless command
17
+ _params_[:redirect]=build_render_url(render, _params_) if render
18
+ build_command_url(command, _params_)
49
19
  end
50
20
 
51
21
  def scrub_params(_params_)
52
- # _params_.delete('captures')
53
- # _params_.delete('render')
54
- # _params_.delete('view')
55
22
  _params_.delete('presenter')
56
- # _params_.delete('redirect')
57
23
  _params_.delete('action')
58
24
  _params_.delete('errors')
59
25
  _params_
@@ -61,17 +27,19 @@ module Voom
61
27
 
62
28
  private
63
29
 
64
- def build_command_url(command, entity, params)
30
+ def build_command_url(command, params)
65
31
  return '' unless command
66
- "#{command}?#{build_params(params, entity)}"
32
+ seperator = command.include?('?') ? '&' : '?'
33
+ "#{command}#{seperator}#{build_params(params)}"
67
34
  end
68
35
 
69
- def build_render_url(render_, entity, params)
36
+ def build_render_url(render_, params)
70
37
  return '#' unless render_
71
38
  render = render_.to_s
39
+ return render if render.start_with?('http')
72
40
  seperator = render.start_with?('/') ? '' : '/'
73
41
  url = "#{base_url}#{seperator}#{render}"
74
- query_params = build_params(params, entity)
42
+ query_params = build_params(params)
75
43
  if(query_params)
76
44
  query_seperator = render.include?('?') ? '&' : '?'
77
45
  url = "#{url}#{query_seperator}#{query_params}"
@@ -79,13 +47,7 @@ module Voom
79
47
  url
80
48
  end
81
49
 
82
- def build_client_url(render, entity, params)
83
- return '#' unless render
84
- "#{base_url}/web/#{render}?layout=false&#{build_params(params, entity)}"
85
- end
86
-
87
- def build_params(params, entity)
88
- params = params.merge(entity_key: entity.id) if entity
50
+ def build_params(params)
89
51
  Rack::Utils.build_nested_query(scrub_params(params))
90
52
  end
91
53
  end
@@ -11,6 +11,11 @@ module Voom
11
11
  JSON.dump(params)
12
12
  end
13
13
 
14
+ post('/_echo_snackbar_') do
15
+ content_type :json
16
+ JSON.dump(messages:{snackbar: [params[:snackbar_echo]]})
17
+ end
18
+
14
19
  delete('/_echo_') do
15
20
  content_type :json
16
21
  JSON.dump(params)
@@ -2,8 +2,12 @@ require 'voom/trace'
2
2
 
3
3
  module Voom
4
4
  module Presenters
5
- def self.define(name, &block)
6
- DSL.define(name, &block)
5
+ def self.define(name, namespace: nil, &block)
6
+ unless namespace
7
+ namespace = name.to_s.split(':')
8
+ name = namespace.pop
9
+ end
10
+ DSL.define(name, namespace, &block)
7
11
  end
8
12
 
9
13
  module DSL
@@ -17,8 +21,10 @@ module Voom
17
21
  @registry
18
22
  end
19
23
 
20
- def self.define(name, &block)
21
- registry[name] = Voom::Presenters::DSL::Definition.new(&block)
24
+ def self.define(name, namespace, &block)
25
+ namespace = Array(namespace).map(&:to_s)
26
+ fq_name = namespace.any? ? namespace.join(':') + ':'+name.to_s : name.to_s
27
+ registry[fq_name] = Voom::Presenters::DSL::Definition.new(namespace, &block)
22
28
  end
23
29
 
24
30
  def self.load(directory)
@@ -0,0 +1,37 @@
1
+ require 'voom/presenters/dsl/components/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Base < Components::Base
9
+ # Options are used by the actions
10
+ # Params are passed by the user
11
+ attr_reader :params, :options
12
+
13
+ def initialize(type:, **attribs_, &block)
14
+ super(type: type, **attribs_, &block)
15
+ @options = {}
16
+ extract_options!
17
+ @params = attribs.delete(:params) {{}}
18
+ @url = nil
19
+ end
20
+
21
+ def url
22
+ @parent.router.url(render: options[:presenter], command: options[:path], context: params)
23
+ end
24
+
25
+ private
26
+ def extract_options!
27
+ %i(path presenter target input_tag).each do |option|
28
+ optionValue = attribs.delete(option)
29
+ @options.merge!({option => optionValue}) if optionValue
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Clear < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :clear, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Deletes < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :delete, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Dialog < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :dialog, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+ require 'voom/presenters/namespace'
3
+
4
+
5
+ module Voom
6
+ module Presenters
7
+ module DSL
8
+ module Components
9
+ module Actions
10
+ class Loads < Actions::Base
11
+ include Namespace
12
+
13
+ def initialize(**attribs_, &block)
14
+ super(type: :loads, **attribs_, &block)
15
+ end
16
+
17
+ def url
18
+ @parent.router.url(render: parse_presenter, command: options[:path], context: params)
19
+ end
20
+
21
+ private
22
+
23
+ def parse_presenter
24
+ return options[:presenter] if options[:presenter].match(/^https?\:\/\//)
25
+ _expand_namespace_(options[:presenter], namespace).gsub(':','/')
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Navigates < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :navigates, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Posts < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :post, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Remove < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :remove, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+ require'voom/presenters/namespace'
3
+
4
+ module Voom
5
+ module Presenters
6
+ module DSL
7
+ module Components
8
+ module Actions
9
+ class Replaces < Actions::Base
10
+ include Namespace
11
+
12
+ def initialize(**attribs_, &block)
13
+ super(type: :replaces, **attribs_, &block)
14
+ end
15
+
16
+ def url
17
+ presenter = _expand_namespace_(options[:presenter], namespace)
18
+ @parent.router.url(render: presenter, command: options[:path], context: params)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Snackbar < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :snackbar, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'voom/presenters/dsl/components/actions/base'
2
+
3
+ module Voom
4
+ module Presenters
5
+ module DSL
6
+ module Components
7
+ module Actions
8
+ class Stepper < Actions::Base
9
+ def initialize(**attribs_, &block)
10
+ super(type: :stepper, **attribs_, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end