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
@@ -1,5 +1,5 @@
1
1
  module Voom
2
2
  module Presenters
3
- VERSION = '0.1.13'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
@@ -1,13 +1,12 @@
1
1
  require 'sinatra'
2
2
  require 'uri'
3
3
  require 'redcarpet'
4
+ require "dry/inflector"
4
5
  require 'voom/trace'
5
6
  require 'voom/presenters/app'
6
- require "dry/inflector"
7
-
8
- require_relative 'router'
9
- require_relative 'markdown_render'
10
- require_relative '../errors/unprocessable'
7
+ require 'voom/presenters/web_client/router'
8
+ require 'voom/presenters/web_client/markdown_render'
9
+ require 'voom/presenters/errors/unprocessable'
11
10
 
12
11
  module Voom
13
12
  module Presenters
@@ -17,7 +16,10 @@ module Voom
17
16
  set :root, File.expand_path('../../../../..', __FILE__)
18
17
  set :router_, WebClient::Router
19
18
  set :bind, '0.0.0.0'
20
- set :views, Proc.new {File.join(root, "views", ENV['VIEW_ENGINE']||'mdc')}
19
+ set :views, Proc.new {File.join(root, "views", ENV['VIEW_ENGINE'] || 'mdc')}
20
+ configure do
21
+ enable :logging
22
+ end
21
23
 
22
24
  helpers do
23
25
  def markdown(text)
@@ -59,7 +61,7 @@ module Voom
59
61
  "v-#{comp.type}__secondary" if eq(comp.color, :secondary)
60
62
  end
61
63
 
62
- def color_style(comp, affects=nil)
64
+ def color_style(comp, affects = nil)
63
65
  "#{affects}color: #{comp.color};" unless %w(primary secondary).include?(comp.color.to_s) || comp.color.nil?
64
66
  end
65
67
 
@@ -80,15 +82,27 @@ module Voom
80
82
 
81
83
  def transform(thing)
82
84
  case thing
83
- when OpenStruct
84
- to_hash(thing)
85
- when Array
86
- thing.map {|v| transform(v)}
87
- else
88
- thing
85
+ when OpenStruct
86
+ to_hash(thing)
87
+ when Array
88
+ thing.map {|v| transform(v)}
89
+ else
90
+ thing
89
91
  end
90
92
  end
91
93
 
94
+ def custom_css
95
+ custom_css_path = Presenters::Settings.config.presenters.web_client.custom_css
96
+ Dir.glob(custom_css_path).map do |file|
97
+ _build_css_link_(file)
98
+ end.join("\n") if custom_css_path
99
+ end
100
+
101
+ def _build_css_link_(path)
102
+ (<<~CSS)
103
+ <link rel="stylesheet" href="#{env['SCRIPT_NAME']}#{path.sub('public/','')}">
104
+ CSS
105
+ end
92
106
  end
93
107
 
94
108
  get '/' do
@@ -98,8 +112,24 @@ module Voom
98
112
  end
99
113
 
100
114
  get '/:_presenter_' do
101
- pass unless Presenters::App.registered?(params[:_presenter_])
102
- presenter = Presenters::App[params[:_presenter_]].call
115
+ fq_presenter = [params[:_presenter_], 'index'].join(':')
116
+ pass unless Presenters::App.registered?(params[:_presenter_]) || Presenters::App.registered?(fq_presenter)
117
+ presenter = (Presenters::App.registered?(fq_presenter) ? Presenters::App[fq_presenter] :
118
+ Presenters::App[params[:_presenter_]]).call
119
+ render_presenter(presenter)
120
+ end
121
+
122
+ get '/:_namespace1_/:_presenter_' do
123
+ fq_presenter = [params[:_namespace1_], params[:_presenter_]].join(':')
124
+ pass unless Presenters::App.registered?(fq_presenter)
125
+ presenter = Presenters::App[fq_presenter].call
126
+ render_presenter(presenter)
127
+ end
128
+
129
+ get '/:_namespace1_/:_namespace2_/:_presenter_' do
130
+ fq_presenter = [params[:_namespace1_], params[:_namespace2_], params[:_presenter_]].join(':')
131
+ pass unless Presenters::App.registered?(fq_presenter)
132
+ presenter = Presenters::App[fq_presenter].call
103
133
  render_presenter(presenter)
104
134
  end
105
135
 
@@ -121,7 +151,7 @@ module Voom
121
151
  layout = !(request.env['HTTP_X_NO_LAYOUT'] == 'true')
122
152
  response.headers['X-Frame-Options'] = 'ALLOWALL' if ENV['ALLOWALL_FRAME_OPTIONS']
123
153
  erb :web, layout: layout
124
- rescue Errors::Unprocessable => e
154
+ rescue Presenters::Errors::Unprocessable => e
125
155
  content_type :json
126
156
  status 422
127
157
  JSON.dump({error: e.message})
@@ -137,18 +167,18 @@ module Voom
137
167
  prepare_context.push(method(:scrub_context))
138
168
  context = params.dup
139
169
  prepare_context.reduce(context) do |params, context_proc|
140
- context_proc.call(params, session, env)
170
+ context = context_proc.call(params, session, env)
141
171
  end
142
172
  context
143
173
  end
144
174
 
145
175
  def scrub_context(params, _session, _env)
146
- %i(splat captures _presenter_ grid_nesting).each do |key|
147
- params.delete(key)
176
+ %i(splat captures _presenter_ grid_nesting input_tag _namespace1_ _namespace2_).each do |key|
177
+ params.delete(key) {params.delete(key.to_s)}
148
178
  end
149
179
  params
150
180
  end
151
181
  end
152
182
  end
153
183
  end
154
- end
184
+ end
@@ -1,16 +1,29 @@
1
- class CustomRender < Redcarpet::Render::Safe
2
- include Redcarpet::Render::SmartyPants
1
+ unless defined?(CustomRender)
2
+ class CustomRender < Redcarpet::Render::Safe
3
+ # include Redcarpet::Render::SmartyPants
4
+ BR = '<br/>'
3
5
 
4
- def initialize(extensions = {})
5
- super(extensions)
6
- end
7
-
8
- def paragraph(text)
9
- text + '<br/>'
6
+ def initialize(extensions = {})
7
+ super(extensions)
8
+ end
9
+
10
+ def paragraph(text)
11
+ text + BR
12
+ end
13
+
14
+ def postprocess(full_document)
15
+ strip_trailing_br(colorize(full_document))
10
16
  end
11
17
 
12
- def postprocess(full_document)
13
- full_document.
14
- gsub(/{c:([#\w]\w+)}([^{]+){\/c}/) {|m| "<span style=\"color:#{$1};\">#{$2}</span>"} # color
18
+ private
19
+
20
+ def colorize(doc)
21
+ doc.gsub(/{c:([#\w]\w+)}([^{]+){\/c}/) {|m| "<span style=\"color:#{$1};\">#{$2}</span>"}
22
+ end
23
+
24
+ def strip_trailing_br(doc)
25
+ return doc unless doc.reverse[0...BR.length]==BR.reverse
26
+ doc[0...doc.length-BR.length]
27
+ end
15
28
  end
16
29
  end
@@ -11,49 +11,16 @@ 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')
22
+ _params_.delete('captures')
55
23
  _params_.delete('presenter')
56
- # _params_.delete('redirect')
57
24
  _params_.delete('action')
58
25
  _params_.delete('errors')
59
26
  _params_
@@ -61,33 +28,31 @@ module Voom
61
28
 
62
29
  private
63
30
 
64
- def build_command_url(command, entity, params)
31
+ def build_command_url(command, params)
65
32
  return '' unless command
66
- seperator = command.include?('?') ? '&' : '?'
67
- "#{command}#{seperator}#{build_params(params, entity)}"
33
+ add_query_params(command, params)
68
34
  end
69
35
 
70
- def build_render_url(render_, entity, params)
36
+ def build_render_url(render_, params)
71
37
  return '#' unless render_
72
38
  render = render_.to_s
73
39
  return render if render.start_with?('http')
40
+ render = render.gsub(':', '/')
74
41
  seperator = render.start_with?('/') ? '' : '/'
75
42
  url = "#{base_url}#{seperator}#{render}"
76
- query_params = build_params(params, entity)
77
- if(query_params)
78
- query_seperator = render.include?('?') ? '&' : '?'
43
+ add_query_params(url, params)
44
+ end
45
+
46
+ def add_query_params(url, params)
47
+ query_params = build_params(params)
48
+ if (!query_params.nil? && !query_params.empty?)
49
+ query_seperator = url.include?('?') ? '&' : '?'
79
50
  url = "#{url}#{query_seperator}#{query_params}"
80
51
  end
81
52
  url
82
53
  end
83
54
 
84
- def build_client_url(render, entity, params)
85
- return '#' unless render
86
- "#{base_url}/web/#{render}?layout=false&#{build_params(params, entity)}"
87
- end
88
-
89
- def build_params(params, entity)
90
- params = params.merge(entity_key: entity.id) if entity
55
+ def build_params(params)
91
56
  Rack::Utils.build_nested_query(scrub_params(params))
92
57
  end
93
58
  end
@@ -1,5 +1,5 @@
1
- require_relative 'parameters'
2
- require_relative 'trace'
1
+ require 'voom/parameters'
2
+ require 'voom/trace'
3
3
 
4
4
  module Voom
5
5
  # Simple serializer that will build add a to_hash method to an object by inspecting
@@ -1,4 +1,4 @@
1
- require_relative 'logger_methods'
1
+ require 'voom/logger_methods'
2
2
 
3
3
  module Voom
4
4
  module Trace
@@ -28,8 +28,9 @@ Gem::Specification.new do |spec|
28
28
  spec.add_runtime_dependency 'tzinfo', '~>1.2'
29
29
  spec.add_runtime_dependency 'tzinfo-data', '~>1.2018'
30
30
  spec.add_runtime_dependency 'redcarpet', '~>3.4'
31
-
31
+
32
32
  spec.add_development_dependency 'rack-test', '~>0.8'
33
+ spec.add_development_dependency 'rack', '>= 2.0.6'
33
34
  spec.add_development_dependency 'pry', '~>0.10'
34
35
  spec.add_development_dependency 'bundler', '~> 1.13'
35
36
  spec.add_development_dependency 'rake', '~> 11.3'
@@ -65,9 +65,9 @@
65
65
  /************************************************************************/
66
66
  /******/ ([
67
67
  /* 0 */
68
- /***/ (function(module, exports) {
68
+ /***/ (function(module, exports, __webpack_require__) {
69
69
 
70
- throw new Error("Module build failed: \n@import \"@material/base/mixins\";\n^\n File to import not found or unreadable: /Users/derekgraham/rx/presenters/views/mdc/node_modules/@material/base/mixins.\n in /Users/derekgraham/rx/presenters/views/mdc/node_modules/@material/floating-label/mdc-floating-label.scss (line 18, column 1)");
70
+ module.exports = __webpack_require__.p + "../../public/bundle.css";
71
71
 
72
72
  /***/ })
73
73
  /******/ ]);
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ set -euo pipefail
2
3
  # Docs: https://github.com/svenfuchs/gem-release#gem-release
3
4
  gem bump
4
5
 
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # https://github.com/github-changelog-generator/github-changelog-generator
4
+ github_changelog_generator rx/presenters --future-release $1
5
+
@@ -1,2 +1,3 @@
1
1
  #!/usr/bin/env bash
2
+ set -euo pipefail
2
3
  git push heroku master
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
+ set -euo pipefail
2
3
  # Docs: https://github.com/svenfuchs/gem-release#gem-release
3
- gem tag
4
4
  gem release
5
5
 
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # Docs: https://github.com/svenfuchs/gem-release#gem-release
4
+ gem tag
5
+
@@ -0,0 +1,8 @@
1
+ {
2
+ "presets": [["env", {"modules": false}]],
3
+ "env": {
4
+ "test": {
5
+ "plugins": ["transform-es2015-modules-commonjs"]
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,23 @@
1
+ ---
2
+ root: true
3
+ extends: ["eslint:recommended", "google"]
4
+ env:
5
+ es6: true
6
+ browser: true
7
+
8
+ rules:
9
+ indent:
10
+ - warn
11
+ - 4
12
+ prefer-destructuring: off
13
+ brace-style:
14
+ - 2
15
+ - stroustrup
16
+ - allowSingleLine: false
17
+ require-jsdoc: 0
18
+ no-console: 0
19
+
20
+ parserOptions:
21
+ sourceType: module
22
+
23
+
@@ -1,10 +1,23 @@
1
- window.dialogPolyfill = require('./dialog-polyfill');
2
- window.componentHandler = require('./material');
3
- import {initialize} from './components/initialize';
1
+ import isCompatible from './utils/compatibility';
2
+ import config from './config';
4
3
 
5
- document.addEventListener("DOMContentLoaded", function(event) {
6
- initialize();
7
- });
4
+ document.addEventListener('DOMContentLoaded', () => {
5
+ if (!isCompatible) {
6
+ const errorMessage = config.get(
7
+ 'compatibility.errorMessage',
8
+ 'Unsupported browser!',
9
+ );
10
+ document.body.innerHTML = `<p>${errorMessage}</p>`;
8
11
 
12
+ return;
13
+ }
9
14
 
15
+ document.documentElement.classList.remove('incompatible-browser');
10
16
 
17
+ window.dialogPolyfill = require('./dialog-polyfill');
18
+ require('material-design-lite/material');
19
+ require('./mdl-stepper');
20
+ require('babel-polyfill');
21
+
22
+ require('./components/initialize').initialize();
23
+ });
@@ -1,5 +1,28 @@
1
1
  export class VBaseComponent {
2
- constructor(element) {
2
+ constructor(element, mdcComponent) {
3
3
  this.element = element;
4
+ this.mdcComponent = mdcComponent;
4
5
  }
5
- }
6
+
7
+ validate(formData) {
8
+ return true;
9
+ }
10
+ }
11
+
12
+ export function hookupComponents(selector, VoomClass, MdcClass) {
13
+
14
+ const components = document.querySelectorAll(selector);
15
+ for (let i = 0; i < components.length; i++) {
16
+ const component = components[i];
17
+ if (!component.mdcComponent) {
18
+ let mdcInstance = null;
19
+ if (MdcClass != null) {
20
+ mdcInstance = new MdcClass(component);
21
+ }
22
+ if (!component.vComponent) {
23
+ component.vComponent = new VoomClass(component, mdcInstance);
24
+ }
25
+ }
26
+ }
27
+ }
28
+