matestack-ui-core 0.7.4 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (295) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +8 -0
  3. data/README.md +28 -216
  4. data/app/concepts/matestack/ui/core/abbr/abbr.haml +3 -3
  5. data/app/concepts/matestack/ui/core/abbr/abbr.rb +1 -8
  6. data/app/concepts/matestack/ui/core/action/action.haml +1 -1
  7. data/app/concepts/matestack/ui/core/action/action.js +120 -39
  8. data/app/concepts/matestack/ui/core/action/action.rb +40 -15
  9. data/app/concepts/matestack/ui/core/actionview/dynamic.haml +4 -4
  10. data/app/concepts/matestack/ui/core/address/address.haml +3 -3
  11. data/app/concepts/matestack/ui/core/address/address.rb +1 -1
  12. data/app/concepts/matestack/ui/core/app/app.haml +2 -3
  13. data/app/concepts/matestack/ui/core/app/app.js +16 -5
  14. data/app/concepts/matestack/ui/core/app/app.rb +33 -56
  15. data/app/concepts/matestack/ui/core/app/location.js +2 -3
  16. data/app/concepts/matestack/ui/core/app/store.js +38 -5
  17. data/app/concepts/matestack/ui/core/area/area.haml +1 -1
  18. data/app/concepts/matestack/ui/core/area/area.rb +2 -14
  19. data/app/concepts/matestack/ui/core/article/article.haml +3 -3
  20. data/app/concepts/matestack/ui/core/article/article.rb +1 -1
  21. data/app/concepts/matestack/ui/core/aside/aside.haml +1 -1
  22. data/app/concepts/matestack/ui/core/aside/aside.rb +0 -1
  23. data/app/concepts/matestack/ui/core/async/async.haml +6 -2
  24. data/app/concepts/matestack/ui/core/async/async.js +62 -6
  25. data/app/concepts/matestack/ui/core/async/async.rb +33 -5
  26. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +2 -0
  27. data/app/concepts/matestack/ui/core/b/b.haml +3 -3
  28. data/app/concepts/matestack/ui/core/b/b.rb +1 -1
  29. data/app/concepts/matestack/ui/core/bdi/bdi.haml +3 -3
  30. data/app/concepts/matestack/ui/core/bdi/bdi.rb +1 -0
  31. data/app/concepts/matestack/ui/core/bdo/bdo.haml +3 -3
  32. data/app/concepts/matestack/ui/core/bdo/bdo.rb +2 -7
  33. data/app/concepts/matestack/ui/core/blockquote/blockquote.haml +3 -3
  34. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +2 -7
  35. data/app/concepts/matestack/ui/core/br/br.haml +4 -4
  36. data/app/concepts/matestack/ui/core/br/br.rb +1 -1
  37. data/app/concepts/matestack/ui/core/button/button.haml +3 -3
  38. data/app/concepts/matestack/ui/core/button/button.rb +3 -7
  39. data/app/concepts/matestack/ui/core/caption/caption.haml +3 -3
  40. data/app/concepts/matestack/ui/core/caption/caption.rb +1 -1
  41. data/app/concepts/matestack/ui/core/cite/cite.haml +3 -3
  42. data/app/concepts/matestack/ui/core/cite/cite.rb +1 -1
  43. data/app/concepts/matestack/ui/core/code/code.haml +3 -3
  44. data/app/concepts/matestack/ui/core/code/code.rb +1 -1
  45. data/app/concepts/matestack/ui/core/collection/content/content.rb +5 -7
  46. data/app/concepts/matestack/ui/core/collection/content/next/next.haml +1 -1
  47. data/app/concepts/matestack/ui/core/collection/content/page/link/link.haml +1 -1
  48. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +5 -3
  49. data/app/concepts/matestack/ui/core/collection/content/previous/previous.haml +1 -1
  50. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +4 -5
  51. data/app/concepts/matestack/ui/core/collection/filter/input/input.rb +11 -8
  52. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.haml +1 -1
  53. data/app/concepts/matestack/ui/core/collection/filter/select/select.haml +10 -0
  54. data/app/concepts/matestack/ui/core/collection/filter/select/select.rb +30 -0
  55. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.haml +1 -1
  56. data/app/concepts/matestack/ui/core/collection/helper.rb +14 -6
  57. data/app/concepts/matestack/ui/core/collection/order/order.js +1 -1
  58. data/app/concepts/matestack/ui/core/collection/order/order.rb +4 -5
  59. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +9 -5
  60. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.haml +1 -1
  61. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.rb +0 -1
  62. data/app/concepts/matestack/ui/core/component/base.rb +424 -0
  63. data/app/concepts/matestack/ui/core/component/children.haml +2 -2
  64. data/app/concepts/matestack/ui/core/component/component.js +1 -55
  65. data/app/concepts/matestack/ui/core/component/dynamic.haml +1 -1
  66. data/app/concepts/matestack/ui/core/component/dynamic.rb +25 -247
  67. data/app/concepts/matestack/ui/core/component/rerender.rb +8 -0
  68. data/app/concepts/matestack/ui/core/component/static.rb +3 -12
  69. data/app/concepts/matestack/ui/core/data/data.haml +3 -3
  70. data/app/concepts/matestack/ui/core/data/data.rb +2 -5
  71. data/app/concepts/matestack/ui/core/{absolute/absolute.haml → datalist/datalist.haml} +1 -1
  72. data/app/concepts/matestack/ui/core/datalist/datalist.rb +4 -0
  73. data/app/concepts/matestack/ui/core/dd/dd.haml +3 -3
  74. data/app/concepts/matestack/ui/core/dd/dd.rb +1 -1
  75. data/app/concepts/matestack/ui/core/del/del.haml +3 -3
  76. data/app/concepts/matestack/ui/core/del/del.rb +2 -0
  77. data/app/concepts/matestack/ui/core/details/details.haml +1 -1
  78. data/app/concepts/matestack/ui/core/details/details.rb +1 -1
  79. data/app/concepts/matestack/ui/core/dfn/dfn.haml +3 -3
  80. data/app/concepts/matestack/ui/core/dfn/dfn.rb +1 -1
  81. data/app/concepts/matestack/ui/core/dialog/dialog.haml +3 -3
  82. data/app/concepts/matestack/ui/core/dialog/dialog.rb +2 -5
  83. data/app/concepts/matestack/ui/core/div/div.haml +1 -1
  84. data/app/concepts/matestack/ui/core/div/div.rb +0 -1
  85. data/app/concepts/matestack/ui/core/dl/dl.haml +3 -3
  86. data/app/concepts/matestack/ui/core/dl/dl.rb +2 -2
  87. data/app/concepts/matestack/ui/core/dt/dt.haml +3 -3
  88. data/app/concepts/matestack/ui/core/dt/dt.rb +1 -1
  89. data/app/concepts/matestack/ui/core/em/em.haml +3 -3
  90. data/app/concepts/matestack/ui/core/em/em.rb +1 -1
  91. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +4 -4
  92. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +3 -6
  93. data/app/concepts/matestack/ui/core/figure/figure.haml +1 -1
  94. data/app/concepts/matestack/ui/core/figure/figure.rb +0 -1
  95. data/app/concepts/matestack/ui/core/footer/footer.haml +1 -1
  96. data/app/concepts/matestack/ui/core/footer/footer.rb +0 -1
  97. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +79 -0
  98. data/app/concepts/matestack/ui/core/form/form.haml +1 -1
  99. data/app/concepts/matestack/ui/core/form/form.js +257 -123
  100. data/app/concepts/matestack/ui/core/form/form.rb +52 -19
  101. data/app/concepts/matestack/ui/core/form/has_errors.rb +54 -0
  102. data/app/concepts/matestack/ui/core/form/has_input_html_attributes.rb +13 -0
  103. data/app/concepts/matestack/ui/core/form/input/input.rb +39 -52
  104. data/app/concepts/matestack/ui/core/form/radio/radio.rb +71 -0
  105. data/app/concepts/matestack/ui/core/form/select/select.haml +9 -76
  106. data/app/concepts/matestack/ui/core/form/select/select.rb +44 -49
  107. data/app/concepts/matestack/ui/core/form/submit/submit.haml +1 -1
  108. data/app/concepts/matestack/ui/core/form/submit/submit.rb +5 -2
  109. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +28 -0
  110. data/app/concepts/matestack/ui/core/form/utils.rb +47 -0
  111. data/app/concepts/matestack/ui/core/header/header.haml +1 -1
  112. data/app/concepts/matestack/ui/core/header/header.rb +0 -1
  113. data/app/concepts/matestack/ui/core/heading/heading.haml +4 -49
  114. data/app/concepts/matestack/ui/core/heading/heading.rb +1 -1
  115. data/app/concepts/matestack/ui/core/hr/hr.haml +1 -1
  116. data/app/concepts/matestack/ui/core/hr/hr.rb +0 -1
  117. data/app/concepts/matestack/ui/core/icon/icon.haml +3 -3
  118. data/app/concepts/matestack/ui/core/icon/icon.rb +1 -1
  119. data/app/concepts/matestack/ui/core/iframe/iframe.haml +3 -3
  120. data/app/concepts/matestack/ui/core/iframe/iframe.rb +3 -10
  121. data/app/concepts/matestack/ui/core/img/img.haml +1 -1
  122. data/app/concepts/matestack/ui/core/img/img.rb +8 -8
  123. data/app/concepts/matestack/ui/core/input/input.haml +1 -3
  124. data/app/concepts/matestack/ui/core/input/input.rb +4 -0
  125. data/app/concepts/matestack/ui/core/ins/ins.haml +3 -3
  126. data/app/concepts/matestack/ui/core/ins/ins.rb +2 -6
  127. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +2 -0
  128. data/app/concepts/matestack/ui/core/isolated/isolated.haml +10 -0
  129. data/app/concepts/matestack/ui/core/isolated/isolated.js +108 -0
  130. data/app/concepts/matestack/ui/core/isolated/isolated.rb +59 -0
  131. data/app/concepts/matestack/ui/core/js/core.js +30 -6
  132. data/app/concepts/matestack/ui/core/kbd/kbd.haml +3 -3
  133. data/app/concepts/matestack/ui/core/kbd/kbd.rb +1 -0
  134. data/app/concepts/matestack/ui/core/label/label.haml +3 -3
  135. data/app/concepts/matestack/ui/core/label/label.rb +2 -6
  136. data/app/concepts/matestack/ui/core/legend/legend.haml +3 -3
  137. data/app/concepts/matestack/ui/core/legend/legend.rb +1 -1
  138. data/app/concepts/matestack/ui/core/li/li.haml +3 -3
  139. data/app/concepts/matestack/ui/core/li/li.rb +2 -1
  140. data/app/concepts/matestack/ui/core/link/link.haml +3 -3
  141. data/app/concepts/matestack/ui/core/link/link.rb +10 -14
  142. data/app/concepts/matestack/ui/core/main/main.haml +1 -1
  143. data/app/concepts/matestack/ui/core/main/main.rb +0 -1
  144. data/app/concepts/matestack/ui/core/map/map.haml +1 -1
  145. data/app/concepts/matestack/ui/core/map/map.rb +1 -7
  146. data/app/concepts/matestack/ui/core/mark/mark.haml +3 -3
  147. data/app/concepts/matestack/ui/core/mark/mark.rb +1 -0
  148. data/app/concepts/matestack/ui/core/meter/meter.haml +1 -1
  149. data/app/concepts/matestack/ui/core/meter/meter.rb +1 -10
  150. data/app/concepts/matestack/ui/core/nav/nav.haml +1 -1
  151. data/app/concepts/matestack/ui/core/nav/nav.rb +0 -1
  152. data/app/concepts/matestack/ui/core/noscript/noscript.haml +3 -3
  153. data/app/concepts/matestack/ui/core/noscript/noscript.rb +1 -1
  154. data/app/concepts/matestack/ui/core/object/object.haml +1 -1
  155. data/app/concepts/matestack/ui/core/object/object.rb +1 -11
  156. data/app/concepts/matestack/ui/core/ol/ol.haml +1 -1
  157. data/app/concepts/matestack/ui/core/ol/ol.rb +1 -1
  158. data/app/concepts/matestack/ui/core/onclick/onclick.haml +1 -1
  159. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -0
  160. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +1 -1
  161. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +1 -6
  162. data/app/concepts/matestack/ui/core/option/option.haml +3 -3
  163. data/app/concepts/matestack/ui/core/option/option.rb +2 -8
  164. data/app/concepts/matestack/ui/core/output/output.haml +3 -3
  165. data/app/concepts/matestack/ui/core/output/output.rb +2 -7
  166. data/app/concepts/matestack/ui/core/page/{content.js → content/content.js} +8 -2
  167. data/app/concepts/matestack/ui/core/page/content/content.rb +28 -0
  168. data/app/concepts/matestack/ui/core/page/page.haml +3 -9
  169. data/app/concepts/matestack/ui/core/page/page.rb +15 -175
  170. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +3 -3
  171. data/app/concepts/matestack/ui/core/paragraph/paragraph.rb +1 -1
  172. data/app/concepts/matestack/ui/core/param/param.haml +1 -1
  173. data/app/concepts/matestack/ui/core/param/param.rb +1 -6
  174. data/app/concepts/matestack/ui/core/partial/partial.rb +0 -1
  175. data/app/concepts/matestack/ui/core/picture/picture.haml +1 -1
  176. data/app/concepts/matestack/ui/core/pre/pre.haml +3 -3
  177. data/app/concepts/matestack/ui/core/pre/pre.rb +1 -1
  178. data/app/concepts/matestack/ui/core/progress/progress.haml +1 -1
  179. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -10
  180. data/app/concepts/matestack/ui/core/q/q.haml +3 -3
  181. data/app/concepts/matestack/ui/core/q/q.rb +2 -7
  182. data/app/concepts/matestack/ui/core/rp/rp.haml +3 -3
  183. data/app/concepts/matestack/ui/core/rp/rp.rb +1 -1
  184. data/app/concepts/matestack/ui/core/rt/rt.haml +3 -3
  185. data/app/concepts/matestack/ui/core/rt/rt.rb +1 -1
  186. data/app/concepts/matestack/ui/core/ruby/ruby.haml +3 -3
  187. data/app/concepts/matestack/ui/core/ruby/ruby.rb +1 -1
  188. data/app/concepts/matestack/ui/core/s/s.haml +3 -3
  189. data/app/concepts/matestack/ui/core/s/s.rb +1 -1
  190. data/app/concepts/matestack/ui/core/samp/samp.haml +3 -3
  191. data/app/concepts/matestack/ui/core/samp/samp.rb +1 -0
  192. data/app/concepts/matestack/ui/core/section/section.haml +1 -1
  193. data/app/concepts/matestack/ui/core/section/section.rb +0 -1
  194. data/app/concepts/matestack/ui/core/slot/slot.rb +1 -2
  195. data/app/concepts/matestack/ui/core/small/small.haml +3 -3
  196. data/app/concepts/matestack/ui/core/small/small.rb +1 -1
  197. data/app/concepts/matestack/ui/core/span/span.haml +3 -3
  198. data/app/concepts/matestack/ui/core/span/span.rb +1 -1
  199. data/app/concepts/matestack/ui/core/strong/strong.haml +3 -3
  200. data/app/concepts/matestack/ui/core/strong/strong.rb +1 -1
  201. data/app/concepts/matestack/ui/core/sub/sub.haml +3 -3
  202. data/app/concepts/matestack/ui/core/sub/sub.rb +1 -1
  203. data/app/concepts/matestack/ui/core/summary/summary.haml +3 -3
  204. data/app/concepts/matestack/ui/core/summary/summary.rb +1 -1
  205. data/app/concepts/matestack/ui/core/sup/sup.haml +3 -3
  206. data/app/concepts/matestack/ui/core/sup/sup.rb +1 -1
  207. data/app/concepts/matestack/ui/core/table/table.haml +1 -1
  208. data/app/concepts/matestack/ui/core/table/table.rb +0 -1
  209. data/app/concepts/matestack/ui/core/tbody/tbody.haml +1 -1
  210. data/app/concepts/matestack/ui/core/tbody/tbody.rb +0 -1
  211. data/app/concepts/matestack/ui/core/td/td.haml +3 -3
  212. data/app/concepts/matestack/ui/core/td/td.rb +2 -1
  213. data/app/concepts/matestack/ui/core/template/template.haml +1 -1
  214. data/app/concepts/matestack/ui/core/textarea/textarea.haml +5 -0
  215. data/app/concepts/matestack/ui/core/textarea/textarea.rb +10 -0
  216. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +1 -1
  217. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +0 -1
  218. data/app/concepts/matestack/ui/core/th/th.haml +3 -3
  219. data/app/concepts/matestack/ui/core/th/th.rb +2 -1
  220. data/app/concepts/matestack/ui/core/thead/thead.haml +1 -1
  221. data/app/concepts/matestack/ui/core/thead/thead.rb +0 -1
  222. data/app/concepts/matestack/ui/core/time/time.haml +1 -1
  223. data/app/concepts/matestack/ui/core/time/time.rb +1 -7
  224. data/app/concepts/matestack/ui/core/toggle/toggle.haml +2 -0
  225. data/app/concepts/matestack/ui/core/toggle/toggle.js +71 -0
  226. data/app/concepts/matestack/ui/core/toggle/toggle.rb +13 -0
  227. data/app/concepts/matestack/ui/core/tr/tr.haml +1 -1
  228. data/app/concepts/matestack/ui/core/tr/tr.rb +0 -1
  229. data/app/concepts/matestack/ui/core/transition/transition.haml +3 -3
  230. data/app/concepts/matestack/ui/core/transition/transition.js +17 -1
  231. data/app/concepts/matestack/ui/core/transition/transition.rb +15 -8
  232. data/app/concepts/matestack/ui/core/u/u.haml +3 -3
  233. data/app/concepts/matestack/ui/core/u/u.rb +1 -1
  234. data/app/concepts/matestack/ui/core/ul/ul.haml +1 -1
  235. data/app/concepts/matestack/ui/core/ul/ul.rb +0 -1
  236. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +3 -1
  237. data/app/concepts/matestack/ui/core/var/var.haml +3 -3
  238. data/app/concepts/matestack/ui/core/var/var.rb +1 -0
  239. data/app/concepts/matestack/ui/core/video/video.haml +2 -2
  240. data/app/concepts/matestack/ui/core/video/video.rb +4 -14
  241. data/app/concepts/matestack/ui/core/view/view.haml +1 -0
  242. data/app/concepts/matestack/ui/core/view/view.rb +30 -0
  243. data/app/concepts/matestack/ui/core/wbr/wbr.haml +5 -1
  244. data/app/concepts/matestack/ui/core/wbr/wbr.rb +1 -0
  245. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -1
  246. data/app/concepts/matestack/ui/core/youtube/youtube.rb +18 -16
  247. data/app/helpers/matestack/ui/core/application_helper.rb +90 -19
  248. data/app/lib/matestack/ui/component.rb +1 -0
  249. data/app/lib/matestack/ui/core/has_view_context.rb +8 -4
  250. data/app/lib/matestack/ui/core/html_attributes.rb +43 -0
  251. data/app/lib/matestack/ui/core/properties.rb +161 -0
  252. data/app/lib/matestack/ui/core/rendering/default_renderer_class_determiner.rb +33 -0
  253. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +200 -0
  254. data/app/lib/matestack/ui/isolated_component.rb +1 -0
  255. data/app/lib/matestack/ui/vue_js_component.rb +1 -0
  256. data/lib/matestack/ui/core.rb +4 -2
  257. data/lib/matestack/ui/core/cell.rb +0 -2
  258. data/lib/matestack/ui/core/component/registry.rb +47 -0
  259. data/lib/matestack/ui/core/components.rb +268 -0
  260. data/lib/matestack/ui/core/dsl.rb +6 -0
  261. data/lib/matestack/ui/core/engine.rb +16 -0
  262. data/lib/matestack/ui/core/version.rb +1 -1
  263. data/vendor/assets/javascripts/dist/matestack-ui-core.js +852 -311
  264. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
  265. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
  266. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
  267. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  268. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
  269. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
  270. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  271. metadata +49 -65
  272. data/MIT-LICENSE +0 -20
  273. data/app/concepts/matestack/ui/core/absolute/absolute.rb +0 -17
  274. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +0 -2
  275. data/app/concepts/matestack/ui/core/component/response.haml +0 -2
  276. data/app/concepts/matestack/ui/core/component/response_dynamic.haml +0 -7
  277. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +0 -3
  278. data/app/concepts/matestack/ui/core/component/static.haml +0 -1
  279. data/app/concepts/matestack/ui/core/form/inline/inline.haml +0 -6
  280. data/app/concepts/matestack/ui/core/form/inline/inline.rb +0 -9
  281. data/app/concepts/matestack/ui/core/form/input/input.haml +0 -27
  282. data/app/concepts/matestack/ui/core/html/html.haml +0 -3
  283. data/app/concepts/matestack/ui/core/html/html.js +0 -10
  284. data/app/concepts/matestack/ui/core/html/html.rb +0 -17
  285. data/app/concepts/matestack/ui/core/isolate/isolate.haml +0 -2
  286. data/app/concepts/matestack/ui/core/isolate/isolate.rb +0 -11
  287. data/app/concepts/matestack/ui/core/page/content.haml +0 -7
  288. data/app/concepts/matestack/ui/core/page/content.rb +0 -5
  289. data/app/concepts/matestack/ui/core/pg/pg.haml +0 -5
  290. data/app/concepts/matestack/ui/core/pg/pg.rb +0 -5
  291. data/app/lib/matestack/ui/core/app_node.rb +0 -53
  292. data/app/lib/matestack/ui/core/component_node.rb +0 -87
  293. data/app/lib/matestack/ui/core/page_node.rb +0 -100
  294. data/app/lib/matestack/ui/core/render.rb +0 -89
  295. data/app/lib/matestack/ui/core/to_cell.rb +0 -129
@@ -1,9 +1,3 @@
1
- - if context[:params][:only_page] == "true"
2
- %div{class: "matestack_page_content"}
3
- - @cells.each do |key, cell|
4
- = cell.call(:show)
5
- - else
6
- %div{class: "matestack_page"}
7
- %div{class: "matestack_page_content"}
8
- - @cells.each do |key, cell|
9
- = cell.call(:show)
1
+ %div{ class: "matestack-page-root" }
2
+ - @children.each do |child|
3
+ = child.show
@@ -1,190 +1,30 @@
1
1
  module Matestack::Ui::Core::Page
2
- class Page < Trailblazer::Cell
3
2
 
3
+ # TODO: Most of the functionality is shared but some initialize stuff a page probably doesn't need
4
+ class Page < Matestack::Ui::Core::Component::Static
4
5
  include ActionView::Helpers::TranslationHelper
5
- include Matestack::Ui::Core::Cell
6
- include Matestack::Ui::Core::ApplicationHelper
7
- include Matestack::Ui::Core::ToCell
8
- include Matestack::Ui::Core::HasViewContext
9
6
 
10
- view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
11
-
12
- extend ViewName::Flat
13
-
14
- def self.prefixes
15
- _prefixes = super
16
- modified_prefixes = _prefixes.map do |prefix|
17
- prefix_parts = prefix.split("/")
18
-
19
- if prefix_parts.last.include?(self.name.split("::")[-1].downcase)
20
- prefix_parts[0..-2].join("/")
21
- else
22
- prefix
23
- end
24
-
25
- end
26
-
27
- return modified_prefixes + _prefixes
28
- end
29
-
30
- def self.views_dir
31
- return ""
32
- end
33
-
34
- def initialize(model=nil, options={})
35
- super
36
- generate_page_name
37
- set_app_class
38
- @nodes = {}
39
- @cells = {}
40
- options[:controller_instance].instance_variables.each do |controller_instance_var_key|
41
- unless controller_instance_var_key.to_s.start_with?("@_")
42
- self.instance_variable_set(controller_instance_var_key, options[:controller_instance].instance_variable_get(controller_instance_var_key))
43
- end
44
- end
45
- end
46
-
47
- def prepare
48
- true
49
- end
50
-
51
- def components(&block)
52
- @nodes = Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
53
- end
54
-
55
- def nodes_to_cell
56
- @nodes.each do |key, node|
57
- @cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
58
- end
59
- end
60
-
61
- def partial(&block)
62
- return block
63
- end
64
-
65
- def slot(&block)
66
- Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
67
- end
68
-
69
- def isolate(&block)
70
- return block
7
+ def initialize(options = {})
8
+ super(nil, options)
9
+ copy_controller_instance_variables(options.fetch(:controller_instance))
71
10
  end
72
11
 
73
-
74
- def show(component_key=nil, only_page=false)
75
- prepare
76
- return resolve_isolated_component(component_key) if !component_key.nil? && component_key.include?("isolate")
77
-
78
- response
79
-
80
- render_mode = nil
81
- render_mode = :only_page if only_page == true
82
- render_mode = :render_page_with_app if !@app_class.nil? && only_page == false
83
- render_mode = :only_page if @app_class.nil? && only_page == false
84
- render_mode = :render_component if !component_key.nil?
85
-
86
- case render_mode
87
-
88
- when :only_page
89
- nodes_to_cell
90
- render :page
91
- when :render_page_with_app
92
- concept(@app_class).call(:show, @page_id, @nodes)
93
- when :render_component
94
- begin
95
- render_child_component component_key
96
- rescue => e
97
- raise "Component '#{component_key}' could not be resolved, because of #{e},\n#{e.backtrace.join("\n")}"
98
- end
99
- end
100
- end
101
-
102
- def page_id
103
- @custom_page_id ||= @page_id
12
+ def show
13
+ render :page
104
14
  end
105
15
 
106
- def render_child_component component_key
107
- if component_key.include?("__")
108
- keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
109
- page_content_keys = keys_array.select{|key| key.match(/^page_content_/)}
110
- if page_content_keys.any?
111
- keys_array = keys_array.drop(keys_array.find_index(page_content_keys[0])+2)
112
- end
113
- if @nodes.dig(*keys_array) == nil
114
- rest = []
115
- while @nodes.dig(*keys_array) == nil
116
- rest << keys_array.pop
117
- end
118
- node = @nodes.dig(*keys_array)
119
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
120
- return cell.render_child_component component_key, rest.reverse[1..-1]
121
- else
122
- node = @nodes.dig(*keys_array)
123
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
124
- return cell.render_content
125
- end
126
- else
127
- node = @nodes[component_key]
128
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
129
- return cell.render_content
130
- end
131
- end
132
-
133
-
134
16
  private
135
17
 
136
- def resolve_isolated_component component_key
137
- keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
138
- isolate_keys = keys_array.select{|key| key.match(/^isolate_/)}
139
- keys_array = keys_array.drop(keys_array.find_index(isolate_keys[0])+2)
140
- isolated_scope_method = keys_array[0]
141
- if isolated_scope_method.include?("(")
142
- isolated_scope_method_name = isolated_scope_method.split("(").first
143
- isolated_scope_method_argument = isolated_scope_method.split("(").last.split(")").first
144
- isolated_scope_method_argument = JSON.parse(isolated_scope_method_argument)
145
- isolated_block = self.send(isolated_scope_method_name, isolated_scope_method_argument.with_indifferent_access)
146
- else
147
- isolated_block = self.send(isolated_scope_method)
148
- end
149
- nodes = Matestack::Ui::Core::PageNode.build(
150
- self, nil, context[:params], &isolated_block
151
- )
152
- node = nodes.dig(*keys_array.drop(2))
153
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
154
- return cell.render_content
155
- end
156
-
157
- def generate_page_name
158
- name_parts = self.class.name.split("::").map { |name| name.underscore }
159
- @page_id = name_parts.join("_")
160
- end
161
-
162
- def set_app_class
163
- class_name = self.class.name
164
- name_parts = class_name.split("::")
165
- if name_parts.count <= 2
166
- @app_class = nil
167
- return
168
- end
169
-
170
- app_name = "#{name_parts[1]}"
171
- begin
172
- app_class = Apps.const_get(app_name)
173
- if app_class.is_a?(Class)
174
- @app_class = app_class
175
- else
176
- require_dependency "apps/#{app_name.underscore}"
177
- app_class = Apps.const_get(app_name)
178
- if app_class.is_a?(Class)
179
- @app_class = app_class
180
- else
181
- @app_class = nil
182
- end
18
+ def copy_controller_instance_variables(controller)
19
+ controller.instance_variables.each do |controller_instance_var_key|
20
+ unless controller_instance_var_key.to_s.start_with?("@_")
21
+ # TODO BUG: We might override our own instance variables here.
22
+ # Solution 1: Check against own instance variables and don't do
23
+ # Solution 2: Create own context object and don't pollute instance variables
24
+ # Solution 3: Prefix own instance varibale @_mate or so to circumvent conflicts
25
+ self.instance_variable_set(controller_instance_var_key, controller.instance_variable_get(controller_instance_var_key))
183
26
  end
184
- rescue
185
- @app_class = nil
186
27
  end
187
28
  end
188
-
189
29
  end
190
30
  end
@@ -1,5 +1,5 @@
1
- %p{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %p{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,5 +1,5 @@
1
1
  module Matestack::Ui::Core::Paragraph
2
2
  class Paragraph < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
@@ -1 +1 @@
1
- %param{@tag_attributes}
1
+ %param{ html_attributes }
@@ -1,10 +1,5 @@
1
1
  module Matestack::Ui::Core::Param
2
2
  class Param < Matestack::Ui::Core::Component::Static
3
- def setup
4
- @tag_attributes.merge!({
5
- name: options[:name],
6
- value: options[:value]
7
- })
8
- end
3
+ html_attributes :name, :value
9
4
  end
10
5
  end
@@ -1,5 +1,4 @@
1
1
  module Matestack::Ui::Core::Partial
2
2
  class Partial < Matestack::Ui::Core::Component::Static
3
-
4
3
  end
5
4
  end
@@ -1,3 +1,3 @@
1
- %picture{@tag_attributes}
1
+ %picture{ html_attributes }
2
2
  - if block_given?
3
3
  = yield
@@ -1,5 +1,5 @@
1
- %pre{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %pre{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,5 +1,5 @@
1
1
  module Matestack::Ui::Core::Pre
2
2
  class Pre < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
@@ -1,3 +1,3 @@
1
- %progress{@tag_attributes}
1
+ %progress{ html_attributes }
2
2
  - if block_given?
3
3
  = yield
@@ -1,14 +1,5 @@
1
1
  module Matestack::Ui::Core::Progress
2
2
  class Progress < Matestack::Ui::Core::Component::Static
3
-
4
- REQUIRED_KEYS = [:max]
5
-
6
- def setup
7
- @tag_attributes.merge!({
8
- 'value': options[:value] ||= 0,
9
- 'max': options[:max]
10
- })
11
- end
12
-
3
+ html_attributes :max, :value
13
4
  end
14
5
  end
@@ -1,5 +1,5 @@
1
- %q{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %q{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,11 +1,6 @@
1
1
  module Matestack::Ui::Core::Q
2
2
  class Q < Matestack::Ui::Core::Component::Static
3
-
4
- def setup
5
- @tag_attributes.merge!({
6
- "cite": options[:cite]
7
- })
8
- end
9
-
3
+ html_attributes :cite
4
+ optional :text
10
5
  end
11
6
  end
@@ -1,5 +1,5 @@
1
- %rp{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %rp{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,5 +1,5 @@
1
1
  module Matestack::Ui::Core::Rp
2
2
  class Rp < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
- %rt{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %rt{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,5 +1,5 @@
1
1
  module Matestack::Ui::Core::Rt
2
2
  class Rt < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
- %ruby{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %ruby{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,5 +1,5 @@
1
1
  module Matestack::Ui::Core::Ruby
2
2
  class Ruby < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
- %s{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %s{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,6 +1,6 @@
1
1
  module Matestack::Ui::Core::S
2
2
  class S < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
6
6
 
@@ -1,5 +1,5 @@
1
- %samp{@tag_attributes}
2
- - if options[:text].blank? && block_given?
1
+ %samp{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,4 +1,5 @@
1
1
  module Matestack::Ui::Core::Samp
2
2
  class Samp < Matestack::Ui::Core::Component::Static
3
+ optional :text
3
4
  end
4
5
  end
@@ -1,3 +1,3 @@
1
- %section{@tag_attributes}
1
+ %section{ html_attributes }
2
2
  - if block_given?
3
3
  = yield
@@ -1,5 +1,4 @@
1
1
  module Matestack::Ui::Core::Section
2
2
  class Section < Matestack::Ui::Core::Component::Static
3
-
4
3
  end
5
4
  end
@@ -1,5 +1,4 @@
1
1
  module Matestack::Ui::Core::Slot
2
- class Slot < Matestack::Ui::Core::Component::Static
3
-
2
+ class Slot < Matestack::Ui::Core::Component::Base
4
3
  end
5
4
  end
@@ -1,5 +1,5 @@
1
- %small{@tag_attributes}
2
- - if options[:text].nil? && block_given?
1
+ %small{ html_attributes }
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text