matestack-ui-core 0.7.0 → 0.7.4

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 (249) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -12
  3. data/Rakefile +32 -0
  4. data/app/concepts/matestack/ui/core/abbr/abbr.haml +5 -0
  5. data/app/concepts/matestack/ui/core/abbr/abbr.rb +12 -0
  6. data/app/concepts/matestack/ui/core/action/action.js +51 -29
  7. data/app/concepts/matestack/ui/core/action/action.rb +3 -0
  8. data/app/concepts/matestack/ui/core/actionview/dynamic.haml +6 -0
  9. data/app/concepts/matestack/ui/core/actionview/dynamic.rb +28 -0
  10. data/app/concepts/matestack/ui/core/actionview/static.haml +1 -0
  11. data/app/concepts/matestack/ui/core/actionview/static.rb +28 -0
  12. data/app/concepts/matestack/ui/core/address/address.haml +5 -0
  13. data/app/concepts/matestack/ui/core/address/address.rb +5 -0
  14. data/app/concepts/matestack/ui/core/app/app.js +7 -4
  15. data/app/concepts/matestack/ui/core/app/app.rb +3 -28
  16. data/app/concepts/matestack/ui/core/app/location.js +10 -0
  17. data/app/concepts/matestack/ui/core/app/store.js +1 -2
  18. data/app/concepts/matestack/ui/core/area/area.haml +1 -0
  19. data/app/concepts/matestack/ui/core/area/area.rb +18 -0
  20. data/app/concepts/matestack/ui/core/article/article.haml +5 -0
  21. data/app/concepts/matestack/ui/core/article/article.rb +5 -0
  22. data/app/concepts/matestack/ui/core/aside/aside.haml +3 -0
  23. data/app/concepts/matestack/ui/core/aside/aside.rb +5 -0
  24. data/app/concepts/matestack/ui/core/async/async.haml +1 -1
  25. data/app/concepts/matestack/ui/core/async/async.js +24 -5
  26. data/app/concepts/matestack/ui/core/async/async.rb +8 -6
  27. data/app/concepts/matestack/ui/core/b/b.haml +5 -0
  28. data/app/concepts/matestack/ui/core/b/b.rb +5 -0
  29. data/app/concepts/matestack/ui/core/bdi/bdi.haml +5 -0
  30. data/app/concepts/matestack/ui/core/bdi/bdi.rb +4 -0
  31. data/app/concepts/matestack/ui/core/bdo/bdo.haml +5 -0
  32. data/app/concepts/matestack/ui/core/bdo/bdo.rb +11 -0
  33. data/app/concepts/matestack/ui/core/blockquote/blockquote.haml +5 -0
  34. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +11 -0
  35. data/app/concepts/matestack/ui/core/button/button.haml +4 -6
  36. data/app/concepts/matestack/ui/core/button/button.rb +6 -0
  37. data/app/concepts/matestack/ui/core/caption/caption.haml +5 -0
  38. data/app/concepts/matestack/ui/core/caption/caption.rb +5 -0
  39. data/app/concepts/matestack/ui/core/cite/cite.haml +5 -0
  40. data/app/concepts/matestack/ui/core/cite/cite.rb +5 -0
  41. data/app/concepts/matestack/ui/core/code/code.haml +5 -0
  42. data/app/concepts/matestack/ui/core/code/code.rb +5 -0
  43. data/app/concepts/matestack/ui/core/collection/content/content.js +98 -0
  44. data/app/concepts/matestack/ui/core/collection/content/content.rb +18 -0
  45. data/app/concepts/matestack/ui/core/collection/content/next/next.haml +3 -0
  46. data/app/concepts/matestack/ui/core/collection/content/next/next.rb +5 -0
  47. data/app/concepts/matestack/ui/core/collection/content/page/link/link.haml +3 -0
  48. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +5 -0
  49. data/app/concepts/matestack/ui/core/collection/content/previous/previous.haml +3 -0
  50. data/app/concepts/matestack/ui/core/collection/content/previous/previous.rb +5 -0
  51. data/app/concepts/matestack/ui/core/collection/filter/filter.js +48 -0
  52. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +17 -0
  53. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +2 -0
  54. data/app/concepts/matestack/ui/core/collection/filter/input/input.rb +25 -0
  55. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.haml +3 -0
  56. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.rb +5 -0
  57. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.haml +3 -0
  58. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.rb +5 -0
  59. data/app/concepts/matestack/ui/core/collection/helper.rb +113 -0
  60. data/app/concepts/matestack/ui/core/collection/order/order.js +56 -0
  61. data/app/concepts/matestack/ui/core/collection/order/order.rb +17 -0
  62. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +13 -0
  63. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.haml +3 -0
  64. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.rb +5 -0
  65. data/app/concepts/matestack/ui/core/component/anonym-dynamic-component.js +1 -1
  66. data/app/concepts/matestack/ui/core/component/component.js +3 -4
  67. data/app/concepts/matestack/ui/core/component/dynamic.rb +38 -33
  68. data/app/concepts/matestack/ui/core/data/data.haml +5 -0
  69. data/app/concepts/matestack/ui/core/data/data.rb +9 -0
  70. data/app/concepts/matestack/ui/core/dd/dd.haml +5 -0
  71. data/app/concepts/matestack/ui/core/dd/dd.rb +5 -0
  72. data/app/concepts/matestack/ui/core/del/del.haml +5 -0
  73. data/app/concepts/matestack/ui/core/del/del.rb +4 -0
  74. data/app/concepts/matestack/ui/core/details/details.haml +3 -0
  75. data/app/concepts/matestack/ui/core/details/details.rb +5 -0
  76. data/app/concepts/matestack/ui/core/dfn/dfn.haml +5 -0
  77. data/app/concepts/matestack/ui/core/dfn/dfn.rb +6 -0
  78. data/app/concepts/matestack/ui/core/dialog/dialog.haml +5 -0
  79. data/app/concepts/matestack/ui/core/dialog/dialog.rb +9 -0
  80. data/app/concepts/matestack/ui/core/div/div.rb +0 -1
  81. data/app/concepts/matestack/ui/core/dl/dl.haml +5 -0
  82. data/app/concepts/matestack/ui/core/dl/dl.rb +5 -0
  83. data/app/concepts/matestack/ui/core/dt/dt.haml +5 -0
  84. data/app/concepts/matestack/ui/core/dt/dt.rb +5 -0
  85. data/app/concepts/matestack/ui/core/em/em.haml +5 -0
  86. data/app/concepts/matestack/ui/core/em/em.rb +5 -0
  87. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +5 -0
  88. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +9 -0
  89. data/app/concepts/matestack/ui/core/figure/figure.haml +3 -0
  90. data/app/concepts/matestack/ui/core/figure/figure.rb +5 -0
  91. data/app/concepts/matestack/ui/core/form/form.js +42 -6
  92. data/app/concepts/matestack/ui/core/form/input/input.haml +4 -6
  93. data/app/concepts/matestack/ui/core/form/select/select.haml +10 -6
  94. data/app/concepts/matestack/ui/core/html/html.js +1 -1
  95. data/app/concepts/matestack/ui/core/icon/icon.haml +2 -3
  96. data/app/concepts/matestack/ui/core/iframe/iframe.haml +5 -0
  97. data/app/concepts/matestack/ui/core/iframe/iframe.rb +14 -0
  98. data/app/concepts/matestack/ui/core/img/img.haml +1 -1
  99. data/app/concepts/matestack/ui/core/img/img.rb +10 -0
  100. data/app/concepts/matestack/ui/core/ins/ins.haml +5 -0
  101. data/app/concepts/matestack/ui/core/ins/ins.rb +10 -0
  102. data/app/concepts/matestack/ui/core/isolate/isolate.haml +2 -0
  103. data/app/concepts/matestack/ui/core/isolate/isolate.rb +11 -0
  104. data/app/concepts/matestack/ui/core/js/core.js +15 -12
  105. data/app/concepts/matestack/ui/core/js/helpers/query-params-helper.js +56 -0
  106. data/app/concepts/matestack/ui/core/kbd/kbd.haml +5 -0
  107. data/app/concepts/matestack/ui/core/kbd/kbd.rb +4 -0
  108. data/app/concepts/matestack/ui/core/label/label.haml +4 -6
  109. data/app/concepts/matestack/ui/core/label/label.rb +6 -1
  110. data/app/concepts/matestack/ui/core/legend/legend.haml +5 -0
  111. data/app/concepts/matestack/ui/core/legend/legend.rb +5 -0
  112. data/app/concepts/matestack/ui/core/li/li.haml +2 -3
  113. data/app/concepts/matestack/ui/core/link/link.haml +5 -6
  114. data/app/concepts/matestack/ui/core/link/link.rb +5 -2
  115. data/app/concepts/matestack/ui/core/map/map.haml +3 -0
  116. data/app/concepts/matestack/ui/core/map/map.rb +11 -0
  117. data/app/concepts/matestack/ui/core/mark/mark.haml +5 -0
  118. data/app/concepts/matestack/ui/core/mark/mark.rb +4 -0
  119. data/app/concepts/matestack/ui/core/meter/meter.haml +4 -0
  120. data/app/concepts/matestack/ui/core/meter/meter.rb +14 -0
  121. data/app/concepts/matestack/ui/core/noscript/noscript.haml +5 -0
  122. data/app/concepts/matestack/ui/core/noscript/noscript.rb +5 -0
  123. data/app/concepts/matestack/ui/core/object/object.haml +1 -0
  124. data/app/concepts/matestack/ui/core/object/object.rb +15 -0
  125. data/app/concepts/matestack/ui/core/onclick/onclick.haml +1 -1
  126. data/app/concepts/matestack/ui/core/onclick/onclick.js +2 -3
  127. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -2
  128. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +3 -0
  129. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +10 -0
  130. data/app/concepts/matestack/ui/core/option/option.haml +5 -0
  131. data/app/concepts/matestack/ui/core/option/option.rb +12 -0
  132. data/app/concepts/matestack/ui/core/output/output.haml +5 -0
  133. data/app/concepts/matestack/ui/core/output/output.rb +11 -0
  134. data/app/concepts/matestack/ui/core/page/content.js +1 -1
  135. data/app/concepts/matestack/ui/core/page/page.rb +63 -23
  136. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +4 -7
  137. data/app/concepts/matestack/ui/core/param/param.haml +1 -0
  138. data/app/concepts/matestack/ui/core/param/param.rb +10 -0
  139. data/app/concepts/matestack/ui/core/pg/pg.haml +4 -7
  140. data/app/concepts/matestack/ui/core/picture/picture.haml +3 -0
  141. data/app/concepts/matestack/ui/core/picture/picture.rb +4 -0
  142. data/app/concepts/matestack/ui/core/plain/plain.rb +1 -2
  143. data/app/concepts/matestack/ui/core/pre/pre.haml +5 -0
  144. data/app/concepts/matestack/ui/core/pre/pre.rb +5 -0
  145. data/app/concepts/matestack/ui/core/q/q.haml +5 -0
  146. data/app/concepts/matestack/ui/core/q/q.rb +11 -0
  147. data/app/concepts/matestack/ui/core/rp/rp.haml +5 -0
  148. data/app/concepts/matestack/ui/core/rp/rp.rb +5 -0
  149. data/app/concepts/matestack/ui/core/rt/rt.haml +5 -0
  150. data/app/concepts/matestack/ui/core/rt/rt.rb +5 -0
  151. data/app/concepts/matestack/ui/core/ruby/ruby.haml +5 -0
  152. data/app/concepts/matestack/ui/core/ruby/ruby.rb +5 -0
  153. data/app/concepts/matestack/ui/core/s/s.haml +5 -0
  154. data/app/concepts/matestack/ui/core/s/s.rb +6 -0
  155. data/app/concepts/matestack/ui/core/samp/samp.haml +5 -0
  156. data/app/concepts/matestack/ui/core/samp/samp.rb +4 -0
  157. data/app/concepts/matestack/ui/core/small/small.haml +5 -0
  158. data/app/concepts/matestack/ui/core/small/small.rb +5 -0
  159. data/app/concepts/matestack/ui/core/span/span.haml +3 -1
  160. data/app/concepts/matestack/ui/core/strong/strong.haml +5 -0
  161. data/app/concepts/matestack/ui/core/strong/strong.rb +5 -0
  162. data/app/concepts/matestack/ui/core/sub/sub.haml +5 -0
  163. data/app/concepts/matestack/ui/core/sub/sub.rb +5 -0
  164. data/app/concepts/matestack/ui/core/summary/summary.haml +5 -0
  165. data/app/concepts/matestack/ui/core/summary/summary.rb +5 -0
  166. data/app/concepts/matestack/ui/core/sup/sup.haml +5 -0
  167. data/app/concepts/matestack/ui/core/sup/sup.rb +5 -0
  168. data/app/concepts/matestack/ui/core/tbody/tbody.haml +3 -0
  169. data/app/concepts/matestack/ui/core/tbody/tbody.rb +5 -0
  170. data/app/concepts/matestack/ui/core/td/td.haml +4 -7
  171. data/app/concepts/matestack/ui/core/template/template.haml +3 -0
  172. data/app/concepts/matestack/ui/core/template/template.rb +4 -0
  173. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +3 -0
  174. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +5 -0
  175. data/app/concepts/matestack/ui/core/th/th.haml +4 -7
  176. data/app/concepts/matestack/ui/core/thead/thead.haml +3 -0
  177. data/app/concepts/matestack/ui/core/thead/thead.rb +5 -0
  178. data/app/concepts/matestack/ui/core/transition/transition.haml +4 -6
  179. data/app/concepts/matestack/ui/core/transition/transition.js +1 -1
  180. data/app/concepts/matestack/ui/core/u/u.haml +5 -0
  181. data/app/concepts/matestack/ui/core/u/u.rb +6 -0
  182. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +7 -0
  183. data/app/concepts/matestack/ui/core/var/var.haml +5 -0
  184. data/app/concepts/matestack/ui/core/var/var.rb +4 -0
  185. data/app/concepts/matestack/ui/core/video/video.haml +3 -0
  186. data/app/concepts/matestack/ui/core/video/video.rb +23 -0
  187. data/app/concepts/matestack/ui/core/wbr/wbr.haml +1 -0
  188. data/app/concepts/matestack/ui/core/wbr/wbr.rb +4 -0
  189. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -0
  190. data/app/concepts/matestack/ui/core/youtube/youtube.rb +26 -0
  191. data/app/helpers/matestack/ui/core/application_helper.rb +3 -1
  192. data/app/javascript/matestack-ui-core/index.js +22 -0
  193. data/app/javascript/matestack-ui-core/styles/index.scss +5 -0
  194. data/app/javascript/packs/matestack-ui-core.js +8 -0
  195. data/app/lib/matestack/ui/core/component_node.rb +30 -12
  196. data/app/lib/matestack/ui/core/has_view_context.rb +10 -0
  197. data/app/lib/matestack/ui/core/page_node.rb +40 -6
  198. data/app/lib/matestack/ui/core/render.rb +89 -0
  199. data/app/lib/matestack/ui/core/to_cell.rb +3 -1
  200. data/app/lib/matestack/ui/dynamic_actionview_component.rb +1 -0
  201. data/app/lib/matestack/ui/static_actionview_component.rb +1 -0
  202. data/config/routes.rb +0 -1
  203. data/lib/generators/matestack/app/USAGE +21 -0
  204. data/lib/generators/matestack/app/app_generator.rb +25 -0
  205. data/lib/generators/matestack/app/templates/app/controllers/%file_name%_controller.rb.tt +5 -0
  206. data/lib/generators/matestack/app/templates/app/matestack/apps/%file_name%.rb.tt +28 -0
  207. data/lib/generators/matestack/component/USAGE +20 -0
  208. data/lib/generators/matestack/component/component_generator.rb +29 -0
  209. data/lib/generators/matestack/component/templates/app/matestack/components/%namespace%/%file_name%.haml.tt +5 -0
  210. data/lib/generators/matestack/component/templates/app/matestack/components/%namespace%/%file_name%.js.tt +17 -0
  211. data/lib/generators/matestack/component/templates/app/matestack/components/%namespace%/%file_name%.rb.tt +11 -0
  212. data/lib/generators/matestack/component/templates/app/matestack/components/%namespace%/%file_name%.scss.tt +1 -0
  213. data/lib/generators/matestack/core/component/USAGE +16 -0
  214. data/lib/generators/matestack/core/component/component_generator.rb +23 -0
  215. data/lib/generators/matestack/core/component/templates/app/concepts/matestack/ui/core/%file_name%/%file_name%.haml.tt +5 -0
  216. data/lib/generators/matestack/core/component/templates/app/concepts/matestack/ui/core/%file_name%/%file_name%.rb.tt +4 -0
  217. data/lib/generators/matestack/core/component/templates/docs/components/%file_name%.md.tt +45 -0
  218. data/lib/generators/matestack/core/component/templates/spec/usage/components/%file_name%_spec.rb +31 -0
  219. data/lib/generators/matestack/page/USAGE +28 -0
  220. data/lib/generators/matestack/page/page_generator.rb +54 -0
  221. data/lib/generators/matestack/page/templates/app/matestack/pages/%app_name%/%namespace%/%file_name%.rb.tt +29 -0
  222. data/lib/matestack/ui/core.rb +1 -0
  223. data/lib/matestack/ui/core/cell.rb +33 -0
  224. data/lib/matestack/ui/core/version.rb +1 -1
  225. data/vendor/assets/javascripts/dist/manifest.json +18 -0
  226. data/vendor/assets/javascripts/dist/manifest.json.br +0 -0
  227. data/vendor/assets/javascripts/dist/manifest.json.gz +0 -0
  228. data/vendor/assets/javascripts/dist/matestack-ui-core.css +3 -0
  229. data/vendor/assets/javascripts/dist/matestack-ui-core.css.map +1 -0
  230. data/vendor/assets/javascripts/dist/matestack-ui-core.js +16523 -0
  231. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -0
  232. data/vendor/assets/javascripts/dist/matestack-ui-core.min.css +0 -0
  233. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +3 -0
  234. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.LICENSE.txt +18 -0
  235. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
  236. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  237. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -0
  238. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
  239. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  240. data/vendor/assets/javascripts/matestack-ui-core.js.erb +2 -0
  241. data/vendor/assets/stylesheets/dist +1 -0
  242. data/vendor/assets/stylesheets/matestack-ui-core.css.erb +2 -0
  243. metadata +203 -19
  244. data/app/concepts/matestack/ui/core/view/view.haml +0 -2
  245. data/app/concepts/matestack/ui/core/view/view.js +0 -42
  246. data/app/concepts/matestack/ui/core/view/view.rb +0 -7
  247. data/vendor/assets/javascripts/manifest.json +0 -4
  248. data/vendor/assets/javascripts/matestack-ui-core.js +0 -15055
  249. data/vendor/assets/javascripts/matestack-ui-core.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ // // Add polyfills for the asset pipeline
2
+ // // https://github.com/matestack/matestack-ui-core/issues/238#issuecomment-583905838
3
+ //
4
+ // import 'core-js/stable'
5
+ // import 'regenerator-runtime/runtime'
6
+
7
+ import '../matestack-ui-core/index'
8
+ export default MatestackUiCore
@@ -13,15 +13,19 @@ module Matestack::Ui::Core
13
13
  @hash = {}
14
14
  @node_start_id = 0
15
15
  @component_instance = component_instance
16
- @included_config = included_config
17
16
  component_instance.instance_variables.each do |component_instance_var_key|
18
17
  self.instance_variable_set(component_instance_var_key, component_instance.instance_variable_get(component_instance_var_key))
19
18
  end
19
+ @included_config = included_config
20
20
  end
21
21
 
22
22
  def method_missing meth, *args, &block
23
23
  begin
24
- @component_instance.send(meth, *args, &block)
24
+ if (result = @component_instance.send(meth, *args, &block)).kind_of? ActiveSupport::SafeBuffer
25
+ plain result
26
+ else
27
+ result
28
+ end
25
29
  rescue
26
30
  node_id = @node_start_id + 1
27
31
  @node_start_id = node_id
@@ -32,6 +36,20 @@ module Matestack::Ui::Core
32
36
  @hash[current_node]["argument"] = nil
33
37
  @hash[current_node]["included_config"] = @included_config
34
38
 
39
+ if args.second == :include
40
+ included = args.first
41
+ else
42
+ unless @included_config.nil?
43
+ included = @included_config
44
+ else
45
+ included = nil
46
+ end
47
+ end
48
+
49
+ if meth == :isolate
50
+ raise("isolate > only works on page level currently. component support is comming soon!")
51
+ end
52
+
35
53
  if meth == :partial
36
54
  @hash[current_node]["components"] = @component_instance.send(args.first, *args.drop(1))
37
55
  elsif meth == :yield_components
@@ -39,20 +57,20 @@ module Matestack::Ui::Core
39
57
  @hash[current_node]["components"] = @component_instance.send(:get_children)
40
58
  else
41
59
  if args.first.is_a?(Hash)
42
- @hash[current_node]["config"] = args.first
60
+ @hash[current_node]["config"] = args.first unless meth == :slot
43
61
  else
44
62
  @hash[current_node]["argument"] = args.first
45
63
  end
46
64
 
47
- if args.second == :include
48
- included = args.first
49
- else
50
- unless @included_config.nil?
51
- included = @included_config
52
- else
53
- included = nil
54
- end
55
- end
65
+ # if args.second == :include
66
+ # included = args.first
67
+ # else
68
+ # unless @included_config.nil?
69
+ # included = @included_config
70
+ # else
71
+ # included = nil
72
+ # end
73
+ # end
56
74
 
57
75
  if block_given?
58
76
  @hash[current_node]["components"] = ComponentNode.build(@component_instance, included, &block)
@@ -0,0 +1,10 @@
1
+ module Matestack::Ui::Core::HasViewContext
2
+ def initialize(model = nil, options = {})
3
+ @view_context = options[:context][:view_context]
4
+ super
5
+ end
6
+
7
+ def method_missing(*args, &block)
8
+ @view_context.send(*args, &block)
9
+ end
10
+ end
@@ -1,18 +1,19 @@
1
1
  module Matestack::Ui::Core
2
2
  class PageNode
3
3
 
4
- def self.build(page_instance, included_config, &block)
5
- node = PageNode.new(page_instance, included_config)
4
+ def self.build(page_instance, included_config, url_params, &block)
5
+ node = PageNode.new(page_instance, included_config, url_params)
6
6
  node.instance_eval(&block)
7
7
  node.hash
8
8
  end
9
9
 
10
10
  attr_reader :hash
11
11
 
12
- def initialize(page_instance, included_config)
12
+ def initialize(page_instance, included_config, url_params)
13
13
  @hash = {}
14
14
  @node_start_id = 0
15
15
  @included_config = included_config
16
+ @url_params = url_params
16
17
  @page_instance = page_instance
17
18
  page_instance.instance_variables.each do |page_instance_var_key|
18
19
  self.instance_variable_set(page_instance_var_key, page_instance.instance_variable_get(page_instance_var_key))
@@ -21,7 +22,11 @@ module Matestack::Ui::Core
21
22
 
22
23
  def method_missing meth, *args, &block
23
24
  begin
24
- @page_instance.send(meth, *args, &block)
25
+ if (result = @page_instance.send(meth, *args, &block)).kind_of? ActiveSupport::SafeBuffer
26
+ plain result
27
+ else
28
+ result
29
+ end
25
30
  rescue
26
31
  node_id = @node_start_id + 1
27
32
  @node_start_id = node_id
@@ -42,10 +47,31 @@ module Matestack::Ui::Core
42
47
  end
43
48
  end
44
49
 
50
+ if meth == :isolate
51
+ if args.second.present?
52
+ if args.second.is_a? Hash
53
+ if args.second[:cached_params].nil?
54
+ raise "isolate > you need to pass params within a hash called 'cached_params'"
55
+ else
56
+ isolated_block = @page_instance.send(args.first, args.second[:cached_params])
57
+ end
58
+ else
59
+ raise "isolate > you need to pass params within a hash called 'cached_params'"
60
+ end
61
+ else
62
+ isolated_block = @page_instance.send(args.first)
63
+ end
64
+ @hash[current_node]["components"] = PageNode.build(
65
+ @page_instance, nil, @url_params, &isolated_block
66
+ )
67
+ @hash[current_node]["argument"] = args.first
68
+ @hash[current_node]["cached_params"] = args.second[:cached_params] if args.second.present?
69
+ end
70
+
45
71
  if meth == :partial
46
72
  partial_block = @page_instance.send(args.first, *args.drop(1))
47
73
  @hash[current_node]["components"] = PageNode.build(
48
- @page_instance, included, &partial_block
74
+ @page_instance, included, @url_params, &partial_block
49
75
  )
50
76
  else
51
77
  if args.first.is_a?(Hash)
@@ -55,7 +81,15 @@ module Matestack::Ui::Core
55
81
  end
56
82
 
57
83
  if block_given?
58
- @hash[current_node]["components"] = PageNode.build(@page_instance, included, &block)
84
+ if args.first.is_a?(Hash) && args.first[:defer].present?
85
+ if @url_params.present? && @url_params[:component_key].present?
86
+ @hash[current_node]["components"] = PageNode.build(@page_instance, included, @url_params, &block)
87
+ else
88
+ return
89
+ end
90
+ else
91
+ @hash[current_node]["components"] = PageNode.build(@page_instance, included, @url_params, &block)
92
+ end
59
93
  end
60
94
  end
61
95
  end
@@ -0,0 +1,89 @@
1
+ module Matestack::Ui::Core::Render
2
+
3
+ # Matestack allows you to use `render` to render matestack pages.
4
+ #
5
+ # render Pages::Member::Bookings::Index
6
+ # render matestack: Pages::Member::Bookings::Index
7
+ # render matestack: 'member/bookings/index'
8
+ #
9
+ def render(*args)
10
+ if (matestack_class = args.first).is_a?(Class) && (matestack_class < Matestack::Ui::Page)
11
+ responder_for matestack_class
12
+ elsif (options = args.first).kind_of?(Hash) && (matestack_arg = options[:matestack]).present?
13
+ if (matestack_path = matestack_arg).kind_of? String
14
+ matestack_path = "pages/#{matestack_path}" unless matestack_path.start_with?("pages/") or matestack_path.start_with?("components/")
15
+ matestack_class = matestack_path.split("/").collect { |str| str.camelcase }.join("::").constantize
16
+ elsif matestack_arg.is_a?(Class) && (matestack_arg < Matestack::Ui::Page)
17
+ matestack_class = matestack_arg
18
+ end
19
+ responder_for matestack_class
20
+ else
21
+ super
22
+ end
23
+ end
24
+
25
+ # Matestack allows implicit rendering. The matestack page class name is inferred from the
26
+ # controller path and action name.
27
+ #
28
+ # class Clients::BookingsController < ApplicationController
29
+ # def index
30
+ # @bookings = Booking.all
31
+ # # looks for Pages::Clients::Bookings::Index
32
+ # end
33
+ #
34
+ # def show
35
+ # @booking = Booking.find params[:id]
36
+ # # looks for Pages::Clients::Bookings::Show
37
+ # end
38
+ # end
39
+ #
40
+ # In this example, `clients/bookings#index` will render `Pages::Clients::Bookings::Index`,
41
+ # `clients/bookings#show` will render `Pages::Clients::Bookings::Show`.
42
+ #
43
+ # Custom action names translate also into page names.
44
+ #
45
+ # class Clients::BookingsController < ApplicationController
46
+ # def step1
47
+ # # looks for Pages::Clients::Bookings::Step1
48
+ # end
49
+ # end
50
+ #
51
+ # In this example, the `clients/bookings#step1` action will render
52
+ # `Pages::Clients::Bookings::Step1`.
53
+ #
54
+ def default_render(*args)
55
+ if matestack_page_class = default_render_matestack_page_class
56
+ render matestack: matestack_page_class
57
+ else
58
+ super
59
+ end
60
+ end
61
+
62
+ def possible_default_render_matestack_page_paths
63
+ paths = []
64
+ paths << "pages/#{controller_path}/#{action_name}"
65
+ paths << "pages/#{controller_path}" if action_name == "index"
66
+ paths << "pages/#{controller_path.singularize}" if action_name == "show"
67
+ paths << "#{controller_path}/#{action_name}_page"
68
+ paths << "#{controller_path}_page" if action_name == "index"
69
+ paths << "#{controller_path.singularize}_page" if action_name == "show"
70
+ paths
71
+ end
72
+
73
+ def possible_default_render_matestack_page_class_names
74
+ possible_default_render_matestack_page_paths.collect { |page_path|
75
+ page_path.split("/").collect { |str| str.camelcase }.join("::")
76
+ }
77
+ end
78
+
79
+ def default_render_matestack_page_class
80
+ possible_default_render_matestack_page_class_names.each do |class_name|
81
+ begin
82
+ return matestack_class = class_name.constantize
83
+ rescue NameError
84
+ end
85
+ end
86
+ return nil
87
+ end
88
+
89
+ end
@@ -1,6 +1,7 @@
1
1
  module Matestack::Ui::Core::ToCell
2
2
 
3
- def to_cell(key, component_name, config, argument, children, included_config)
3
+ def to_cell(key, component_name, config, argument, children, included_config, cached_params=nil)
4
+ # p cached_params
4
5
  request_uri = context[:request].env["REQUEST_URI"]
5
6
  query_string = context[:request].env["QUERY_STRING"]
6
7
 
@@ -9,6 +10,7 @@ module Matestack::Ui::Core::ToCell
9
10
  config.merge!(origin_url: request_uri.gsub("?" + query_string, ""))
10
11
  config.merge!(url_params: context[:params])
11
12
  config.merge!(included_config: included_config)
13
+ config.merge!(cached_params: cached_params)
12
14
 
13
15
  if component_name.start_with?("custom")
14
16
  return resolve_custom_component(component_name, argument, config)
@@ -0,0 +1 @@
1
+ Matestack::Ui::DynamicActionviewComponent = Matestack::Ui::Core::Actionview::Dynamic
@@ -0,0 +1 @@
1
+ Matestack::Ui::StaticActionviewComponent = Matestack::Ui::Core::Actionview::Static
@@ -1,3 +1,2 @@
1
1
  Matestack::Ui::Core::Engine.routes.draw do
2
- get '/div', to: 'docs#div'
3
2
  end
@@ -0,0 +1,21 @@
1
+ Description:
2
+ Stubs out a new matestack app. Pass the app name under_scored.
3
+
4
+ If you want so, pass the option '--all_inclusive' to also create
5
+ a corresponding matestack example_page, a controller, its action
6
+ and the route in 'config/routes.rb'.
7
+
8
+ Example 1:
9
+ `rails generate matestack:app example_app`
10
+
11
+ This will create:
12
+ app/matestack/apps/example_app.rb
13
+
14
+ Example 2:
15
+ `rails generate matestack:app example_app --all_inclusive`
16
+
17
+ This will create:
18
+ app/matestack/apps/example_app.rb
19
+ app/matestack/pages/example_app/example_page.rb
20
+ app/controllers/example_app_controller.rb
21
+ route get 'example_app/example_page', to: 'example_app#example_page'
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Matestack
4
+ module Generators
5
+ class AppGenerator < Rails::Generators::NamedBase
6
+ source_root File.expand_path('templates', __dir__)
7
+
8
+ class_option :all_inclusive, type: :boolean, default: false
9
+
10
+ def create_app
11
+ template 'app/matestack/apps/%file_name%.rb.tt'
12
+
13
+ if options[:all_inclusive] == true
14
+ template 'app/controllers/%file_name%_controller.rb'
15
+
16
+ route %{get '#{file_name}/example_page', to: '#{file_name}\#example_page'}
17
+
18
+ generate "matestack:page example_page --app_name #{file_name} --called_by_app_generator=true"
19
+
20
+ puts "You can visit your new matestack apps' example page under http://localhost:3000/#{file_name}/example_page"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %>Controller < ApplicationController
2
+ def example_page
3
+ responder_for(Pages::<%= class_name %>::ExamplePage)
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ class Apps::<%= class_name %> < Matestack::Ui::App
2
+ # OPTIONAL: Prepare data that gets used on every page of this app
3
+ # def prepare
4
+ # API calls and db queries go here
5
+ # end
6
+
7
+ # MANDATORY: This is where your matestack pages get yielded
8
+ def response
9
+ components {
10
+ heading text: 'Welcome to your <%= class_name %> app'
11
+ page_content
12
+ }
13
+ end
14
+
15
+ # OPTIONAL: Use partials to render stuff like layout components
16
+ # def partial_example
17
+ # partial {
18
+ # # your components go here
19
+ # }
20
+ # end
21
+
22
+ # OPTIONAL: Slots come after partials
23
+ # def slot_example
24
+ # slot {
25
+ # # your components go here
26
+ # }
27
+ # end
28
+ end
@@ -0,0 +1,20 @@
1
+ Description:
2
+ Stubs out a new matestack component. Pass the component name, under_scored.
3
+
4
+ To create a dynamic component, specify it using the --dynamic option.
5
+
6
+ To place this component within a namespace, specify the namespace name under_scored and it
7
+ will get generated into 'app/matestack/components/namespace/*'.
8
+
9
+ Example 1:
10
+ `rails generate matestack:component NAME`
11
+
12
+ This will create:
13
+ app/matestack/components/NAME.rb
14
+
15
+ Example 2:
16
+ `rails generate matestack:component NAME --dynamic --namespace sample_namespace`
17
+
18
+ This will create:
19
+ app/matestack/components/sample_namespace/NAME.rb
20
+ app/matestack/components/sample_namespace/NAME.js
@@ -0,0 +1,29 @@
1
+ module Matestack
2
+ module Generators
3
+ class ComponentGenerator < Rails::Generators::NamedBase
4
+ source_root File.expand_path('templates', __dir__)
5
+
6
+ class_option :dynamic, type: :boolean, default: false
7
+ class_option :scss, type: :boolean, default: false
8
+ class_option :haml, type: :boolean, default: false
9
+ class_option :namespace, type: :string
10
+
11
+ def namespace
12
+ options[:namespace]
13
+ end
14
+
15
+ def dynamic
16
+ options[:dynamic]
17
+ end
18
+
19
+ def create_component
20
+ # Future: Check for matestack-compatible namespacing!
21
+
22
+ template 'app/matestack/components/%namespace%/%file_name%.rb.tt'
23
+ template 'app/matestack/components/%namespace%/%file_name%.js.tt' if options[:dynamic]
24
+ template 'app/matestack/components/%namespace%/%file_name%.scss.tt' if options[:scss]
25
+ template 'app/matestack/components/%namespace%/%file_name%.haml.tt' if options[:haml]
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ .<%= file_name %>{@tag_attributes}
2
+ %div
3
+ This is your custom <%= class_name %> component
4
+ - if block_given?
5
+ = yield
@@ -0,0 +1,17 @@
1
+ // Require your custom component in your application.js before usage
2
+ // Place it below "//= require matestack-ui-core" using the following line:
3
+ //= require <% unless namespace.nil? %><%= namespace %>/<% end %><%= file_name %>
4
+
5
+ MatestackUiCore.Vue.component('custom<% unless namespace.nil? %>-<%= namespace %><% end %>-<%= file_name %>', {
6
+ mixins: [MatestackUiCore.componentMixin],
7
+ data: function() {
8
+ return {
9
+ foo: 'bar'
10
+ };
11
+ },
12
+ methods: {},
13
+ mounted: function(){
14
+ // this is your completeness check and should be deleted before deployment
15
+ console.log('Custom Dynamic Component <%= class_name %> mounted!')
16
+ }
17
+ });