matestack-ui-core 0.7.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (298) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +8 -0
  3. data/README.md +695 -121
  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.rb +23 -19
  8. data/app/concepts/matestack/ui/core/actionview/dynamic.haml +4 -4
  9. data/app/concepts/matestack/ui/core/address/address.haml +3 -3
  10. data/app/concepts/matestack/ui/core/address/address.rb +1 -1
  11. data/app/concepts/matestack/ui/core/app/app.haml +2 -3
  12. data/app/concepts/matestack/ui/core/app/app.js +4 -1
  13. data/app/concepts/matestack/ui/core/app/app.rb +32 -56
  14. data/app/concepts/matestack/ui/core/app/store.js +27 -1
  15. data/app/concepts/matestack/ui/core/area/area.haml +1 -1
  16. data/app/concepts/matestack/ui/core/area/area.rb +2 -14
  17. data/app/concepts/matestack/ui/core/article/article.haml +3 -3
  18. data/app/concepts/matestack/ui/core/article/article.rb +1 -1
  19. data/app/concepts/matestack/ui/core/aside/aside.haml +1 -1
  20. data/app/concepts/matestack/ui/core/aside/aside.rb +0 -1
  21. data/app/concepts/matestack/ui/core/async/async.haml +6 -2
  22. data/app/concepts/matestack/ui/core/async/async.js +43 -31
  23. data/app/concepts/matestack/ui/core/async/async.rb +29 -4
  24. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +2 -0
  25. data/app/concepts/matestack/ui/core/b/b.haml +3 -3
  26. data/app/concepts/matestack/ui/core/b/b.rb +1 -1
  27. data/app/concepts/matestack/ui/core/bdi/bdi.haml +3 -3
  28. data/app/concepts/matestack/ui/core/bdi/bdi.rb +1 -0
  29. data/app/concepts/matestack/ui/core/bdo/bdo.haml +3 -3
  30. data/app/concepts/matestack/ui/core/bdo/bdo.rb +2 -7
  31. data/app/concepts/matestack/ui/core/blockquote/blockquote.haml +3 -3
  32. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +2 -7
  33. data/app/concepts/matestack/ui/core/br/br.haml +4 -4
  34. data/app/concepts/matestack/ui/core/br/br.rb +1 -1
  35. data/app/concepts/matestack/ui/core/button/button.haml +3 -3
  36. data/app/concepts/matestack/ui/core/button/button.rb +3 -7
  37. data/app/concepts/matestack/ui/core/cable/cable.haml +4 -0
  38. data/app/concepts/matestack/ui/core/cable/cable.js +100 -0
  39. data/app/concepts/matestack/ui/core/cable/cable.rb +28 -0
  40. data/app/concepts/matestack/ui/core/cable/children_wrapper.haml +2 -0
  41. data/app/concepts/matestack/ui/core/caption/caption.haml +3 -3
  42. data/app/concepts/matestack/ui/core/caption/caption.rb +1 -1
  43. data/app/concepts/matestack/ui/core/cite/cite.haml +3 -3
  44. data/app/concepts/matestack/ui/core/cite/cite.rb +1 -1
  45. data/app/concepts/matestack/ui/core/code/code.haml +3 -3
  46. data/app/concepts/matestack/ui/core/code/code.rb +1 -1
  47. data/app/concepts/matestack/ui/core/collection/content/content.js +2 -2
  48. data/app/concepts/matestack/ui/core/collection/content/content.rb +4 -6
  49. data/app/concepts/matestack/ui/core/collection/content/next/next.haml +1 -1
  50. data/app/concepts/matestack/ui/core/collection/content/page/link/link.haml +1 -1
  51. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +5 -3
  52. data/app/concepts/matestack/ui/core/collection/content/previous/previous.haml +1 -1
  53. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +4 -5
  54. data/app/concepts/matestack/ui/core/collection/filter/input/input.rb +11 -8
  55. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.haml +1 -1
  56. data/app/concepts/matestack/ui/core/collection/filter/select/select.haml +10 -0
  57. data/app/concepts/matestack/ui/core/collection/filter/select/select.rb +30 -0
  58. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.haml +1 -1
  59. data/app/concepts/matestack/ui/core/collection/helper.rb +14 -6
  60. data/app/concepts/matestack/ui/core/collection/order/order.js +1 -1
  61. data/app/concepts/matestack/ui/core/collection/order/order.rb +4 -5
  62. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +9 -5
  63. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.haml +1 -1
  64. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.rb +0 -1
  65. data/app/concepts/matestack/ui/core/component/base.rb +430 -0
  66. data/app/concepts/matestack/ui/core/component/children.haml +2 -2
  67. data/app/concepts/matestack/ui/core/component/component.js +9 -46
  68. data/app/concepts/matestack/ui/core/component/dynamic.haml +1 -1
  69. data/app/concepts/matestack/ui/core/component/dynamic.rb +25 -247
  70. data/app/concepts/matestack/ui/core/component/static.rb +3 -12
  71. data/app/concepts/matestack/ui/core/data/data.haml +3 -3
  72. data/app/concepts/matestack/ui/core/data/data.rb +2 -5
  73. data/app/concepts/matestack/ui/core/datalist/datalist.haml +2 -2
  74. data/app/concepts/matestack/ui/core/datalist/datalist.rb +1 -2
  75. data/app/concepts/matestack/ui/core/dd/dd.haml +3 -3
  76. data/app/concepts/matestack/ui/core/dd/dd.rb +1 -1
  77. data/app/concepts/matestack/ui/core/del/del.haml +3 -3
  78. data/app/concepts/matestack/ui/core/del/del.rb +2 -0
  79. data/app/concepts/matestack/ui/core/details/details.haml +1 -1
  80. data/app/concepts/matestack/ui/core/details/details.rb +1 -1
  81. data/app/concepts/matestack/ui/core/dfn/dfn.haml +3 -3
  82. data/app/concepts/matestack/ui/core/dfn/dfn.rb +1 -1
  83. data/app/concepts/matestack/ui/core/dialog/dialog.haml +3 -3
  84. data/app/concepts/matestack/ui/core/dialog/dialog.rb +2 -5
  85. data/app/concepts/matestack/ui/core/div/div.haml +1 -1
  86. data/app/concepts/matestack/ui/core/div/div.rb +0 -1
  87. data/app/concepts/matestack/ui/core/dl/dl.haml +3 -3
  88. data/app/concepts/matestack/ui/core/dl/dl.rb +2 -2
  89. data/app/concepts/matestack/ui/core/dt/dt.haml +3 -3
  90. data/app/concepts/matestack/ui/core/dt/dt.rb +1 -1
  91. data/app/concepts/matestack/ui/core/em/em.haml +3 -3
  92. data/app/concepts/matestack/ui/core/em/em.rb +1 -1
  93. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +4 -4
  94. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +3 -6
  95. data/app/concepts/matestack/ui/core/figure/figure.haml +1 -1
  96. data/app/concepts/matestack/ui/core/figure/figure.rb +0 -1
  97. data/app/concepts/matestack/ui/core/footer/footer.haml +1 -1
  98. data/app/concepts/matestack/ui/core/footer/footer.rb +0 -1
  99. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +79 -0
  100. data/app/concepts/matestack/ui/core/form/form.haml +1 -1
  101. data/app/concepts/matestack/ui/core/form/form.js +25 -20
  102. data/app/concepts/matestack/ui/core/form/form.rb +35 -24
  103. data/app/concepts/matestack/ui/core/form/has_errors.rb +54 -0
  104. data/app/concepts/matestack/ui/core/form/has_input_html_attributes.rb +13 -0
  105. data/app/concepts/matestack/ui/core/form/input/input.rb +32 -52
  106. data/app/concepts/matestack/ui/core/form/radio/radio.rb +71 -0
  107. data/app/concepts/matestack/ui/core/form/select/select.haml +9 -80
  108. data/app/concepts/matestack/ui/core/form/select/select.rb +41 -56
  109. data/app/concepts/matestack/ui/core/form/submit/submit.haml +1 -1
  110. data/app/concepts/matestack/ui/core/form/submit/submit.rb +5 -2
  111. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +28 -0
  112. data/app/concepts/matestack/ui/core/form/utils.rb +47 -0
  113. data/app/concepts/matestack/ui/core/header/header.haml +1 -1
  114. data/app/concepts/matestack/ui/core/header/header.rb +0 -1
  115. data/app/concepts/matestack/ui/core/heading/heading.haml +4 -49
  116. data/app/concepts/matestack/ui/core/heading/heading.rb +1 -1
  117. data/app/concepts/matestack/ui/core/hr/hr.haml +1 -1
  118. data/app/concepts/matestack/ui/core/hr/hr.rb +0 -1
  119. data/app/concepts/matestack/ui/core/icon/icon.haml +3 -3
  120. data/app/concepts/matestack/ui/core/icon/icon.rb +1 -1
  121. data/app/concepts/matestack/ui/core/iframe/iframe.haml +3 -3
  122. data/app/concepts/matestack/ui/core/iframe/iframe.rb +3 -10
  123. data/app/concepts/matestack/ui/core/img/img.haml +1 -1
  124. data/app/concepts/matestack/ui/core/img/img.rb +8 -8
  125. data/app/concepts/matestack/ui/core/input/input.haml +1 -2
  126. data/app/concepts/matestack/ui/core/input/input.rb +4 -4
  127. data/app/concepts/matestack/ui/core/ins/ins.haml +3 -3
  128. data/app/concepts/matestack/ui/core/ins/ins.rb +2 -6
  129. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +2 -0
  130. data/app/concepts/matestack/ui/core/isolated/isolated.haml +10 -0
  131. data/app/concepts/matestack/ui/core/isolated/isolated.js +108 -0
  132. data/app/concepts/matestack/ui/core/isolated/isolated.rb +59 -0
  133. data/app/concepts/matestack/ui/core/js/core.js +6 -4
  134. data/app/concepts/matestack/ui/core/kbd/kbd.haml +3 -3
  135. data/app/concepts/matestack/ui/core/kbd/kbd.rb +1 -0
  136. data/app/concepts/matestack/ui/core/label/label.haml +3 -3
  137. data/app/concepts/matestack/ui/core/label/label.rb +2 -6
  138. data/app/concepts/matestack/ui/core/legend/legend.haml +3 -3
  139. data/app/concepts/matestack/ui/core/legend/legend.rb +1 -1
  140. data/app/concepts/matestack/ui/core/li/li.haml +3 -3
  141. data/app/concepts/matestack/ui/core/li/li.rb +2 -1
  142. data/app/concepts/matestack/ui/core/link/link.haml +3 -3
  143. data/app/concepts/matestack/ui/core/link/link.rb +10 -14
  144. data/app/concepts/matestack/ui/core/main/main.haml +1 -1
  145. data/app/concepts/matestack/ui/core/main/main.rb +0 -1
  146. data/app/concepts/matestack/ui/core/map/map.haml +1 -1
  147. data/app/concepts/matestack/ui/core/map/map.rb +1 -7
  148. data/app/concepts/matestack/ui/core/mark/mark.haml +3 -3
  149. data/app/concepts/matestack/ui/core/mark/mark.rb +1 -0
  150. data/app/concepts/matestack/ui/core/meter/meter.haml +1 -1
  151. data/app/concepts/matestack/ui/core/meter/meter.rb +1 -10
  152. data/app/concepts/matestack/ui/core/nav/nav.haml +1 -1
  153. data/app/concepts/matestack/ui/core/nav/nav.rb +0 -1
  154. data/app/concepts/matestack/ui/core/noscript/noscript.haml +3 -3
  155. data/app/concepts/matestack/ui/core/noscript/noscript.rb +1 -1
  156. data/app/concepts/matestack/ui/core/object/object.haml +1 -1
  157. data/app/concepts/matestack/ui/core/object/object.rb +1 -11
  158. data/app/concepts/matestack/ui/core/ol/ol.haml +1 -1
  159. data/app/concepts/matestack/ui/core/ol/ol.rb +1 -1
  160. data/app/concepts/matestack/ui/core/onclick/onclick.haml +1 -1
  161. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -0
  162. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +1 -1
  163. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +1 -6
  164. data/app/concepts/matestack/ui/core/option/option.haml +3 -3
  165. data/app/concepts/matestack/ui/core/option/option.rb +2 -8
  166. data/app/concepts/matestack/ui/core/output/output.haml +3 -3
  167. data/app/concepts/matestack/ui/core/output/output.rb +2 -7
  168. data/app/concepts/matestack/ui/core/page/{content.js → content/content.js} +8 -2
  169. data/app/concepts/matestack/ui/core/page/content/content.rb +28 -0
  170. data/app/concepts/matestack/ui/core/page/page.haml +3 -9
  171. data/app/concepts/matestack/ui/core/page/page.rb +15 -179
  172. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +3 -3
  173. data/app/concepts/matestack/ui/core/paragraph/paragraph.rb +1 -1
  174. data/app/concepts/matestack/ui/core/param/param.haml +1 -1
  175. data/app/concepts/matestack/ui/core/param/param.rb +1 -6
  176. data/app/concepts/matestack/ui/core/partial/partial.rb +0 -1
  177. data/app/concepts/matestack/ui/core/picture/picture.haml +1 -1
  178. data/app/concepts/matestack/ui/core/pre/pre.haml +3 -3
  179. data/app/concepts/matestack/ui/core/pre/pre.rb +1 -1
  180. data/app/concepts/matestack/ui/core/progress/progress.haml +1 -1
  181. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -10
  182. data/app/concepts/matestack/ui/core/q/q.haml +3 -3
  183. data/app/concepts/matestack/ui/core/q/q.rb +2 -7
  184. data/app/concepts/matestack/ui/core/rp/rp.haml +3 -3
  185. data/app/concepts/matestack/ui/core/rp/rp.rb +1 -1
  186. data/app/concepts/matestack/ui/core/rt/rt.haml +3 -3
  187. data/app/concepts/matestack/ui/core/rt/rt.rb +1 -1
  188. data/app/concepts/matestack/ui/core/ruby/ruby.haml +3 -3
  189. data/app/concepts/matestack/ui/core/ruby/ruby.rb +1 -1
  190. data/app/concepts/matestack/ui/core/s/s.haml +3 -3
  191. data/app/concepts/matestack/ui/core/s/s.rb +1 -1
  192. data/app/concepts/matestack/ui/core/samp/samp.haml +3 -3
  193. data/app/concepts/matestack/ui/core/samp/samp.rb +1 -0
  194. data/app/concepts/matestack/ui/core/section/section.haml +1 -1
  195. data/app/concepts/matestack/ui/core/section/section.rb +0 -1
  196. data/app/concepts/matestack/ui/core/slot/slot.rb +1 -2
  197. data/app/concepts/matestack/ui/core/small/small.haml +3 -3
  198. data/app/concepts/matestack/ui/core/small/small.rb +1 -1
  199. data/app/concepts/matestack/ui/core/span/span.haml +3 -3
  200. data/app/concepts/matestack/ui/core/span/span.rb +1 -1
  201. data/app/concepts/matestack/ui/core/strong/strong.haml +3 -3
  202. data/app/concepts/matestack/ui/core/strong/strong.rb +1 -1
  203. data/app/concepts/matestack/ui/core/sub/sub.haml +3 -3
  204. data/app/concepts/matestack/ui/core/sub/sub.rb +1 -1
  205. data/app/concepts/matestack/ui/core/summary/summary.haml +3 -3
  206. data/app/concepts/matestack/ui/core/summary/summary.rb +1 -1
  207. data/app/concepts/matestack/ui/core/sup/sup.haml +3 -3
  208. data/app/concepts/matestack/ui/core/sup/sup.rb +1 -1
  209. data/app/concepts/matestack/ui/core/table/table.haml +1 -1
  210. data/app/concepts/matestack/ui/core/table/table.rb +0 -1
  211. data/app/concepts/matestack/ui/core/tbody/tbody.haml +1 -1
  212. data/app/concepts/matestack/ui/core/tbody/tbody.rb +0 -1
  213. data/app/concepts/matestack/ui/core/td/td.haml +3 -3
  214. data/app/concepts/matestack/ui/core/td/td.rb +2 -1
  215. data/app/concepts/matestack/ui/core/template/template.haml +1 -1
  216. data/app/concepts/matestack/ui/core/textarea/textarea.haml +5 -0
  217. data/app/concepts/matestack/ui/core/textarea/textarea.rb +10 -0
  218. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +1 -1
  219. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +0 -1
  220. data/app/concepts/matestack/ui/core/th/th.haml +3 -3
  221. data/app/concepts/matestack/ui/core/th/th.rb +2 -1
  222. data/app/concepts/matestack/ui/core/thead/thead.haml +1 -1
  223. data/app/concepts/matestack/ui/core/thead/thead.rb +0 -1
  224. data/app/concepts/matestack/ui/core/time/time.haml +1 -1
  225. data/app/concepts/matestack/ui/core/time/time.rb +1 -7
  226. data/app/concepts/matestack/ui/core/toggle/toggle.haml +2 -0
  227. data/app/concepts/matestack/ui/core/toggle/toggle.js +71 -0
  228. data/app/concepts/matestack/ui/core/toggle/toggle.rb +13 -0
  229. data/app/concepts/matestack/ui/core/tr/tr.haml +1 -1
  230. data/app/concepts/matestack/ui/core/tr/tr.rb +0 -1
  231. data/app/concepts/matestack/ui/core/transition/transition.haml +3 -3
  232. data/app/concepts/matestack/ui/core/transition/transition.js +1 -0
  233. data/app/concepts/matestack/ui/core/transition/transition.rb +14 -7
  234. data/app/concepts/matestack/ui/core/u/u.haml +3 -3
  235. data/app/concepts/matestack/ui/core/u/u.rb +1 -1
  236. data/app/concepts/matestack/ui/core/ul/ul.haml +1 -1
  237. data/app/concepts/matestack/ui/core/ul/ul.rb +0 -1
  238. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +3 -1
  239. data/app/concepts/matestack/ui/core/var/var.haml +3 -3
  240. data/app/concepts/matestack/ui/core/var/var.rb +1 -0
  241. data/app/concepts/matestack/ui/core/video/video.haml +2 -2
  242. data/app/concepts/matestack/ui/core/video/video.rb +4 -14
  243. data/app/concepts/matestack/ui/core/view/view.haml +1 -0
  244. data/app/concepts/matestack/ui/core/view/view.rb +30 -0
  245. data/app/concepts/matestack/ui/core/wbr/wbr.haml +5 -1
  246. data/app/concepts/matestack/ui/core/wbr/wbr.rb +1 -0
  247. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -1
  248. data/app/concepts/matestack/ui/core/youtube/youtube.rb +18 -16
  249. data/app/helpers/matestack/ui/core/application_helper.rb +94 -21
  250. data/app/lib/matestack/ui/component.rb +1 -0
  251. data/app/lib/matestack/ui/core/has_view_context.rb +6 -4
  252. data/app/lib/matestack/ui/core/html_attributes.rb +43 -0
  253. data/app/lib/matestack/ui/core/properties.rb +161 -0
  254. data/app/lib/matestack/ui/core/rendering/default_renderer_class_determiner.rb +33 -0
  255. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +203 -0
  256. data/app/lib/matestack/ui/isolated_component.rb +1 -0
  257. data/app/lib/matestack/ui/vue_js_component.rb +1 -0
  258. data/lib/matestack/ui/core.rb +4 -2
  259. data/lib/matestack/ui/core/cell.rb +0 -2
  260. data/lib/matestack/ui/core/component/registry.rb +47 -0
  261. data/lib/matestack/ui/core/components.rb +269 -0
  262. data/lib/matestack/ui/core/dsl.rb +6 -0
  263. data/lib/matestack/ui/core/engine.rb +16 -0
  264. data/lib/matestack/ui/core/version.rb +1 -1
  265. data/vendor/assets/javascripts/dist/matestack-ui-core.js +467 -142
  266. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
  267. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
  268. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
  269. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  270. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
  271. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
  272. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  273. metadata +50 -63
  274. data/MIT-LICENSE +0 -20
  275. data/app/concepts/matestack/ui/core/absolute/absolute.haml +0 -3
  276. data/app/concepts/matestack/ui/core/absolute/absolute.rb +0 -17
  277. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +0 -2
  278. data/app/concepts/matestack/ui/core/component/response.haml +0 -2
  279. data/app/concepts/matestack/ui/core/component/response_dynamic.haml +0 -7
  280. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +0 -3
  281. data/app/concepts/matestack/ui/core/component/static.haml +0 -1
  282. data/app/concepts/matestack/ui/core/form/inline/inline.haml +0 -6
  283. data/app/concepts/matestack/ui/core/form/inline/inline.rb +0 -9
  284. data/app/concepts/matestack/ui/core/form/input/input.haml +0 -46
  285. data/app/concepts/matestack/ui/core/html/html.haml +0 -3
  286. data/app/concepts/matestack/ui/core/html/html.js +0 -10
  287. data/app/concepts/matestack/ui/core/html/html.rb +0 -17
  288. data/app/concepts/matestack/ui/core/isolate/isolate.haml +0 -2
  289. data/app/concepts/matestack/ui/core/isolate/isolate.rb +0 -11
  290. data/app/concepts/matestack/ui/core/page/content.haml +0 -7
  291. data/app/concepts/matestack/ui/core/page/content.rb +0 -5
  292. data/app/concepts/matestack/ui/core/pg/pg.haml +0 -5
  293. data/app/concepts/matestack/ui/core/pg/pg.rb +0 -5
  294. data/app/lib/matestack/ui/core/app_node.rb +0 -53
  295. data/app/lib/matestack/ui/core/component_node.rb +0 -87
  296. data/app/lib/matestack/ui/core/page_node.rb +0 -100
  297. data/app/lib/matestack/ui/core/render.rb +0 -89
  298. data/app/lib/matestack/ui/core/to_cell.rb +0 -129
@@ -0,0 +1,33 @@
1
+ # Handles the default rendering mechanism
2
+ #
3
+ # Not really compatible with the new flexible naming schemes
4
+ module Matestack::Ui::Core::Rendering::DefaultRendererClassDeterminer
5
+ module_function
6
+
7
+ def determine_class(controller_path, action_name)
8
+ possible_default_render_matestack_page_class_names(controller_path, action_name).each do |class_name|
9
+ begin
10
+ return matestack_class = class_name.constantize
11
+ rescue NameError
12
+ end
13
+ end
14
+ return nil
15
+ end
16
+
17
+ def possible_default_render_matestack_page_class_names(controller_path, action_name)
18
+ possible_default_render_matestack_page_paths(controller_path, action_name).collect { |page_path|
19
+ page_path.split("/").collect { |str| str.camelcase }.join("::")
20
+ }
21
+ end
22
+
23
+ def possible_default_render_matestack_page_paths(controller_path, action_name)
24
+ paths = []
25
+ paths << "pages/#{controller_path}/#{action_name}"
26
+ paths << "pages/#{controller_path}" if action_name == "index"
27
+ paths << "pages/#{controller_path.singularize}" if action_name == "show"
28
+ paths << "#{controller_path}/#{action_name}_page"
29
+ paths << "#{controller_path}_page" if action_name == "index"
30
+ paths << "#{controller_path.singularize}_page" if action_name == "show"
31
+ paths
32
+ end
33
+ end
@@ -0,0 +1,203 @@
1
+ # The main renderer that is usually called to determine how to perform rendering
2
+ module Matestack::Ui::Core::Rendering::MainRenderer
3
+ module_function
4
+
5
+ EMPTY_JSON = "{}"
6
+
7
+ # Instead of rendering without an app class, we always have an "empty" app class
8
+ # to fall back to
9
+ DEFAULT_APP_CLASS = Matestack::Ui::Core::App::App
10
+
11
+ def render(controller_instance, page_class, options)
12
+ app_class = resolve_app_class(controller_instance, options)
13
+
14
+ params = controller_instance.params
15
+
16
+ context = create_context_hash(controller_instance)
17
+
18
+ if params[:only_page]
19
+ # standalone page rendering, used when performing a transition
20
+ page_instance = page_class.new(controller_instance: controller_instance, context: context)
21
+ render_matestack_object(controller_instance, page_instance)
22
+ elsif (params[:component_key].present? && params[:component_class].blank?)
23
+ # async component rerendering from non isolated context
24
+ app_instance = app_class.new(page_class, controller_instance, context)
25
+ component_key = params[:component_key]
26
+ page_instance = page_class.new(controller_instance: controller_instance, context: context)
27
+ render_component(component_key, app_instance, controller_instance, context)
28
+ elsif (params[:component_class].present? && params[:component_key].blank?)
29
+ # isolated component rendering
30
+ component_class = params[:component_class]
31
+ page_instance = page_class.new(controller_instance: controller_instance, context: context)
32
+ public_options = JSON.parse(params[:public_options]).with_indifferent_access rescue nil
33
+ render_isolated_component(component_class, page_instance, controller_instance, context, public_options)
34
+ elsif (params[:component_class].present? && params[:component_key].present?)
35
+ # async component rerendering from isolated context
36
+ component_class_name = params[:component_class]
37
+ component_key = params[:component_key]
38
+ page_instance = page_class.new(controller_instance: controller_instance, context: context)
39
+ if params[:public_options].present?
40
+ public_options = JSON.parse(params[:public_options]).with_indifferent_access
41
+ else
42
+ public_options = nil
43
+ end
44
+ component_class = resolve_isolated_component(component_class_name)
45
+ if component_class
46
+ component_instance = component_class.new(public_options: public_options, context: context)
47
+ if component_instance.authorized?
48
+ render_component(component_key, component_instance, controller_instance, context)
49
+ else
50
+ raise "not authorized"
51
+ end
52
+ end
53
+ else
54
+ if app_class == false
55
+ page_instance = page_class.new(controller_instance: controller_instance, context: context)
56
+ render_matestack_object(controller_instance, page_instance, layout: true)
57
+ else
58
+ app_instance = app_class.new(page_class, controller_instance, context)
59
+ render_matestack_object(controller_instance, app_instance, layout: true)
60
+ end
61
+ end
62
+ end
63
+
64
+ # needs refactoring!
65
+ # we shouldn't pass in the parts of the controller_instance and the instance itself
66
+ def create_context_hash(controller_instance)
67
+ {
68
+ view_context: controller_instance.view_context,
69
+ params: controller_instance.params,
70
+ request: controller_instance.request,
71
+ controller: controller_instance # if this is not included here, rails route helpers will fail with undefined method `url_options' for nil:NilClass in some cases
72
+ }
73
+ end
74
+
75
+ def render_matestack_object(controller_instance, object, opts = {}, render_method = :show)
76
+ object.prepare
77
+ object.response if object.respond_to? :response
78
+ rendering_options = {html: object.call(render_method)}.merge!(opts)
79
+ controller_instance.render rendering_options
80
+ end
81
+
82
+ def render_component(component_key, app_or_page_instance, controller_instance, context)
83
+ matched_component = nil
84
+
85
+ app_or_page_instance.matestack_set_skip_defer(false)
86
+
87
+ app_or_page_instance.prepare
88
+ app_or_page_instance.response
89
+
90
+ matched_component = dig_for_component(component_key, app_or_page_instance)
91
+
92
+ unless matched_component.nil?
93
+ render_matestack_object(controller_instance, matched_component, {}, :render_content)
94
+ else
95
+ # some 404 probably
96
+ raise Exception, "Async component with id #{component_key} could not be found while rerendering."
97
+ end
98
+ rescue Exception => e
99
+ Rails.logger.warn e
100
+ render json: {}, status: :not_found
101
+ end
102
+
103
+ def dig_for_component component_key, component_instance
104
+ matched_component = nil
105
+
106
+ component_instance.children.each do |child|
107
+ if child.respond_to?(:get_component_key)
108
+ if child.get_component_key == component_key
109
+ matched_component = child
110
+ end
111
+ end
112
+ end
113
+
114
+ if matched_component.nil?
115
+ component_instance.children.each do |child|
116
+ if child.children.any?
117
+ matched_component = dig_for_component(component_key, child)
118
+ break if !matched_component.nil?
119
+ end
120
+ end
121
+ return matched_component
122
+ else
123
+ return matched_component
124
+ end
125
+
126
+ end
127
+
128
+ # TODO: too many arguments maybe get some of them together?
129
+ def render_isolated_component(component_class_name, page_instance, controller_instance, context, public_options = nil)
130
+ component_class = resolve_isolated_component(component_class_name)
131
+
132
+ if component_class
133
+ component_instance = component_class.new(public_options: public_options, context: context)
134
+ if component_instance.authorized?
135
+ render_matestack_object(controller_instance, component_instance, {}, :render_isolated_content)
136
+ else
137
+ # some 4xx? 404?
138
+ raise "not authorized"
139
+ end
140
+ else
141
+ # some 404 probably
142
+ raise "component not found"
143
+ end
144
+ end
145
+
146
+ def resolve_component(name)
147
+ constant = const_get(name)
148
+ # change to specific AsyncComponent parent class
149
+ if constant < Matestack::Ui::Core::Async::Async
150
+ constant
151
+ else
152
+ nil
153
+ end
154
+ rescue NameError
155
+ nil
156
+ end
157
+
158
+ def resolve_isolated_component(name)
159
+ constant = const_get(name)
160
+ if constant < Matestack::Ui::Core::Isolated::Isolated
161
+ constant
162
+ else
163
+ nil
164
+ end
165
+ rescue NameError
166
+ nil
167
+ end
168
+
169
+
170
+ def resolve_app_class(controller_instance, options)
171
+ app_class = DEFAULT_APP_CLASS
172
+
173
+ controller_level_app_class = controller_instance.class.get_matestack_app_class
174
+ action_level_app_class = options[:matestack_app]
175
+
176
+ if !controller_level_app_class.nil?
177
+ if controller_level_app_class == false
178
+ app_class = false
179
+ else
180
+ if controller_level_app_class.is_a?(Class) && (controller_level_app_class < Matestack::Ui::App)
181
+ app_class = controller_level_app_class
182
+ else
183
+ raise "#{controller_level_app_class} is not a valid Matestack::Ui::App class"
184
+ end
185
+ end
186
+ end
187
+ if !action_level_app_class.nil?
188
+ if action_level_app_class == false
189
+ app_class = false
190
+ else
191
+ matestack_app_class = action_level_app_class
192
+ if action_level_app_class.is_a?(Class) && (action_level_app_class < Matestack::Ui::App)
193
+ app_class = action_level_app_class
194
+ else
195
+ raise "#{action_level_app_class} is not a valid Matestack::Ui::App class"
196
+ end
197
+ end
198
+ end
199
+
200
+ return app_class
201
+ end
202
+
203
+ end
@@ -0,0 +1 @@
1
+ Matestack::Ui::IsolatedComponent = Matestack::Ui::Core::Isolated::Isolated
@@ -0,0 +1 @@
1
+ Matestack::Ui::VueJsComponent = Matestack::Ui::Core::Component::Dynamic
@@ -1,5 +1,3 @@
1
- require 'trailblazer'
2
- require 'trailblazer/rails'
3
1
  require 'trailblazer/cell'
4
2
  require 'cell/rails'
5
3
  require 'cell/haml'
@@ -7,6 +5,10 @@ require 'cell/haml'
7
5
  require "matestack/ui/core/cell"
8
6
  require "matestack/ui/core/engine"
9
7
 
8
+ require "matestack/ui/core/dsl"
9
+ require "matestack/ui/core/component/registry"
10
+ require "matestack/ui/core/components"
11
+
10
12
  module Matestack
11
13
  module Ui
12
14
  module Core
@@ -29,5 +29,3 @@ module Matestack
29
29
  end
30
30
  end
31
31
  end
32
-
33
- # Matestack::Ui::Core::Cell = ::Cell::Haml
@@ -0,0 +1,47 @@
1
+ module Matestack::Ui::Core::Component
2
+ # Central Registration point for all component DSL methods.
3
+ #
4
+ # Keeps track of currently registered DSL methods to warn on
5
+ # conflicts. Adds them to a specified DSL module.
6
+ #
7
+ # Functions as a singleton as we don't want to have methods
8
+ # meaning something different within the same application.
9
+ #
10
+ # TODO: Potentially all DSL methods to further avoid conflicts?
11
+ module Registry
12
+ DEFAULT_DSL_MODULE = Matestack::Ui::Core::DSL
13
+
14
+ module_function
15
+
16
+ def register_component(dsl_name, component_class)
17
+ instance.register_component(dsl_name, component_class)
18
+ end
19
+
20
+ def register_components(components_hash)
21
+ components_hash.each do |dsl_name, component_class|
22
+ register_component dsl_name, component_class
23
+ end
24
+ end
25
+
26
+ def instance(target_module = DEFAULT_DSL_MODULE)
27
+ @instance ||= Instance.new(target_module)
28
+ end
29
+
30
+ class Instance
31
+
32
+ attr_reader :target_module, :registered_components
33
+
34
+ def initialize(target_module)
35
+ @target_module = target_module
36
+ @registered_components = {}
37
+ end
38
+
39
+ def register_component(dsl_name, component_class)
40
+ target_module.define_method(dsl_name) do |*args, &block|
41
+ add_child component_class, *args, &block
42
+ end
43
+ registered_components[dsl_name] = component_class
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,269 @@
1
+ # Responsible for registering all the components under their names.
2
+ # TODO: Better file name?
3
+
4
+ # TODO: app folder isn't in the LOAD_PATH 🤔
5
+ # --> because of rails autoload when running as an engine, maybe add
6
+ # app to loadpath? But we might move away from app in favor of lib anyhow.
7
+
8
+ module Matestack::Ui::Core::Components
9
+ def self.require_app_path(path)
10
+ require_relative "../../../../app/#{path}"
11
+ end
12
+
13
+ def self.require_core_component(name)
14
+ if name.include?("/")
15
+ require_app_path "concepts/matestack/ui/core/#{name}/#{name.split("/").last}"
16
+ else
17
+ require_app_path "concepts/matestack/ui/core/#{name}/#{name}"
18
+ end
19
+ end
20
+
21
+ require_app_path "helpers/matestack/ui/core/application_helper"
22
+ require_app_path "lib/matestack/ui/core/has_view_context"
23
+ require_app_path "lib/matestack/ui/core/html_attributes"
24
+ require_app_path "lib/matestack/ui/core/properties"
25
+
26
+ require_app_path "concepts/matestack/ui/core/component/base"
27
+ require_app_path "concepts/matestack/ui/core/component/dynamic"
28
+ require_app_path "concepts/matestack/ui/core/component/static"
29
+
30
+ require_core_component "abbr"
31
+ require_core_component "action"
32
+ require_core_component "address"
33
+ require_core_component "area"
34
+ require_core_component "article"
35
+ require_core_component "aside"
36
+ require_core_component "async"
37
+ require_core_component "b"
38
+ require_core_component "bdi"
39
+ require_core_component "bdo"
40
+ require_core_component "blockquote"
41
+ require_core_component "br"
42
+ require_core_component "button"
43
+ require_core_component "cable"
44
+ require_core_component "caption"
45
+ require_core_component "cite"
46
+ require_core_component "code"
47
+ require_core_component "form" # required before collection
48
+ require_app_path "concepts/matestack/ui/core/form/has_input_html_attributes" # required before collection
49
+ require_app_path "concepts/matestack/ui/core/collection/helper"
50
+ require_core_component "collection/content"
51
+ require_core_component "collection/content/next"
52
+ require_core_component "collection/content/page/link"
53
+ require_core_component "collection/content/previous"
54
+ require_core_component "collection/filter"
55
+ require_core_component "collection/filter/input"
56
+ require_core_component "collection/filter/reset"
57
+ require_core_component "collection/filter/select"
58
+ require_core_component "collection/filter/submit"
59
+ require_core_component "collection/order"
60
+ require_core_component "collection/order/toggle"
61
+ require_core_component "collection/order/toggle/indicator"
62
+ require_core_component "data"
63
+ require_core_component "datalist"
64
+ require_core_component "dd"
65
+ require_core_component "del"
66
+ require_core_component "details"
67
+ require_core_component "dfn"
68
+ require_core_component "dialog"
69
+ require_core_component "div"
70
+ require_core_component "dl"
71
+ require_core_component "dt"
72
+ require_core_component "em"
73
+ require_core_component "fieldset"
74
+ require_core_component "figure"
75
+ require_core_component "footer"
76
+ require_core_component "form/checkbox"
77
+ require_core_component "form/input"
78
+ require_core_component "form/radio"
79
+ require_core_component "form/select"
80
+ require_core_component "form/submit"
81
+ require_core_component "header"
82
+ require_core_component "heading"
83
+ require_core_component "hr"
84
+ require_core_component "icon"
85
+ require_core_component "iframe"
86
+ require_core_component "img"
87
+ require_core_component "input"
88
+ require_core_component "ins"
89
+ require_core_component "isolated"
90
+ require_core_component "kbd"
91
+ require_core_component "label"
92
+ require_core_component "legend"
93
+ require_core_component "li"
94
+ require_core_component "link"
95
+ require_core_component "main"
96
+ require_core_component "map"
97
+ require_core_component "mark"
98
+ require_core_component "meter"
99
+ require_core_component "nav"
100
+ require_core_component "noscript"
101
+ require_core_component "object"
102
+ require_core_component "ol"
103
+ require_core_component "onclick"
104
+ require_core_component "optgroup"
105
+ require_core_component "option"
106
+ require_core_component "output"
107
+ require_core_component "page"
108
+ require_core_component "page/content"
109
+ require_core_component "paragraph"
110
+ require_core_component "param"
111
+ require_core_component "picture"
112
+ require_core_component "plain"
113
+ require_core_component "pre"
114
+ require_core_component "progress"
115
+ require_core_component "q"
116
+ require_core_component "view"
117
+ require_core_component "rp"
118
+ require_core_component "rt"
119
+ require_core_component "ruby"
120
+ require_core_component "s"
121
+ require_core_component "samp"
122
+ require_core_component "section"
123
+ require_core_component "small"
124
+ require_core_component "span"
125
+ require_core_component "strong"
126
+ require_core_component "sub"
127
+ require_core_component "summary"
128
+ require_core_component "sup"
129
+ require_core_component "table"
130
+ require_core_component "tbody"
131
+ require_core_component "td"
132
+ require_core_component "template"
133
+ require_core_component "textarea" # textarea needs to be required before form/textarea
134
+ require_core_component "form/textarea"
135
+ require_core_component "tfoot"
136
+ require_core_component "th"
137
+ require_core_component "thead"
138
+ require_core_component "time"
139
+ require_core_component "toggle"
140
+ require_core_component "tr"
141
+ require_core_component "transition"
142
+ require_core_component "u"
143
+ require_core_component "ul"
144
+ require_core_component "unescaped"
145
+ require_core_component "var"
146
+ require_core_component "video"
147
+ require_core_component "wbr"
148
+ require_core_component "youtube"
149
+ end
150
+
151
+ Matestack::Ui::Core::Component::Registry.register_components(
152
+ abbr: Matestack::Ui::Core::Abbr::Abbr,
153
+ action: Matestack::Ui::Core::Action::Action,
154
+ address: Matestack::Ui::Core::Address::Address,
155
+ area: Matestack::Ui::Core::Area::Area,
156
+ article: Matestack::Ui::Core::Article::Article,
157
+ aside: Matestack::Ui::Core::Aside::Aside,
158
+ async: Matestack::Ui::Core::Async::Async,
159
+ b: Matestack::Ui::Core::B::B,
160
+ bdi: Matestack::Ui::Core::Bdi::Bdi,
161
+ bdo: Matestack::Ui::Core::Bdo::Bdo,
162
+ blockquote: Matestack::Ui::Core::Blockquote::Blockquote,
163
+ br: Matestack::Ui::Core::Br::Br,
164
+ button: Matestack::Ui::Core::Button::Button,
165
+ cable: Matestack::Ui::Core::Cable::Cable,
166
+ caption: Matestack::Ui::Core::Caption::Caption,
167
+ cite: Matestack::Ui::Core::Cite::Cite,
168
+ code: Matestack::Ui::Core::Code::Code,
169
+ collection_content: Matestack::Ui::Core::Collection::Content::Content,
170
+ collection_content_next: Matestack::Ui::Core::Collection::Content::Next::Next,
171
+ collection_content_page_link: Matestack::Ui::Core::Collection::Content::Page::Link::Link,
172
+ collection_content_previous: Matestack::Ui::Core::Collection::Content::Previous::Previous,
173
+ collection_filter: Matestack::Ui::Core::Collection::Filter::Filter,
174
+ collection_filter_input: Matestack::Ui::Core::Collection::Filter::Input::Input,
175
+ collection_filter_reset: Matestack::Ui::Core::Collection::Filter::Reset::Reset,
176
+ collection_filter_select: Matestack::Ui::Core::Collection::Filter::Select::Select,
177
+ collection_filter_submit: Matestack::Ui::Core::Collection::Filter::Submit::Submit,
178
+ collection_order: Matestack::Ui::Core::Collection::Order::Order,
179
+ collection_order_toggle: Matestack::Ui::Core::Collection::Order::Toggle::Toggle,
180
+ collection_order_toggle_indicator: Matestack::Ui::Core::Collection::Order::Toggle::Indicator::Indicator,
181
+ data: Matestack::Ui::Core::Data::Data,
182
+ datalist: Matestack::Ui::Core::Datalist::Datalist,
183
+ dd: Matestack::Ui::Core::Dd::Dd,
184
+ del: Matestack::Ui::Core::Del::Del,
185
+ details: Matestack::Ui::Core::Details::Details,
186
+ dfn: Matestack::Ui::Core::Dfn::Dfn,
187
+ dialog: Matestack::Ui::Core::Dialog::Dialog,
188
+ div: Matestack::Ui::Core::Div::Div,
189
+ dl: Matestack::Ui::Core::Dl::Dl,
190
+ dt: Matestack::Ui::Core::Dt::Dt,
191
+ em: Matestack::Ui::Core::Em::Em,
192
+ fieldset: Matestack::Ui::Core::Fieldset::Fieldset,
193
+ figure: Matestack::Ui::Core::Figure::Figure,
194
+ footer: Matestack::Ui::Core::Footer::Footer,
195
+ form: Matestack::Ui::Core::Form::Form,
196
+ form_checkbox: Matestack::Ui::Core::Form::Checkbox::Checkbox,
197
+ form_input: Matestack::Ui::Core::Form::Input::Input,
198
+ form_radio: Matestack::Ui::Core::Form::Radio::Radio,
199
+ form_select: Matestack::Ui::Core::Form::Select::Select,
200
+ form_submit: Matestack::Ui::Core::Form::Submit::Submit,
201
+ form_textarea: Matestack::Ui::Core::Form::Textarea::Textarea,
202
+ header: Matestack::Ui::Core::Header::Header,
203
+ heading: Matestack::Ui::Core::Heading::Heading,
204
+ hr: Matestack::Ui::Core::Hr::Hr,
205
+ icon: Matestack::Ui::Core::Icon::Icon,
206
+ italic: Matestack::Ui::Core::Icon::Icon, # alias icon as italic
207
+ iframe: Matestack::Ui::Core::Iframe::Iframe,
208
+ img: Matestack::Ui::Core::Img::Img,
209
+ input: Matestack::Ui::Core::Input::Input,
210
+ ins: Matestack::Ui::Core::Ins::Ins,
211
+ kbd: Matestack::Ui::Core::Kbd::Kbd,
212
+ label: Matestack::Ui::Core::Label::Label,
213
+ legend: Matestack::Ui::Core::Legend::Legend,
214
+ li: Matestack::Ui::Core::Li::Li,
215
+ link: Matestack::Ui::Core::Link::Link,
216
+ main: Matestack::Ui::Core::Main::Main,
217
+ map: Matestack::Ui::Core::Map::Map,
218
+ mark: Matestack::Ui::Core::Mark::Mark,
219
+ meter: Matestack::Ui::Core::Meter::Meter,
220
+ nav: Matestack::Ui::Core::Nav::Nav,
221
+ noscript: Matestack::Ui::Core::Noscript::Noscript,
222
+ object: Matestack::Ui::Core::Object::Object,
223
+ ol: Matestack::Ui::Core::Ol::Ol,
224
+ onclick: Matestack::Ui::Core::Onclick::Onclick,
225
+ optgroup: Matestack::Ui::Core::Optgroup::Optgroup,
226
+ option: Matestack::Ui::Core::Option::Option,
227
+ output: Matestack::Ui::Core::Output::Output,
228
+ paragraph: Matestack::Ui::Core::Paragraph::Paragraph,
229
+ pg: Matestack::Ui::Core::Paragraph::Paragraph, # alias paragraph as pg
230
+ page_content_wrapper: Matestack::Ui::Core::Page::Content::Content,
231
+ param: Matestack::Ui::Core::Param::Param,
232
+ picture: Matestack::Ui::Core::Picture::Picture,
233
+ plain: Matestack::Ui::Core::Plain::Plain,
234
+ pre: Matestack::Ui::Core::Pre::Pre,
235
+ progress: Matestack::Ui::Core::Progress::Progress,
236
+ q: Matestack::Ui::Core::Q::Q,
237
+ rails_view: Matestack::Ui::Core::View::View,
238
+ rp: Matestack::Ui::Core::Rp::Rp,
239
+ rt: Matestack::Ui::Core::Rt::Rt,
240
+ ruby: Matestack::Ui::Core::Ruby::Ruby,
241
+ s: Matestack::Ui::Core::S::S,
242
+ samp: Matestack::Ui::Core::Samp::Samp,
243
+ section: Matestack::Ui::Core::Section::Section,
244
+ small: Matestack::Ui::Core::Small::Small,
245
+ span: Matestack::Ui::Core::Span::Span,
246
+ strong: Matestack::Ui::Core::Strong::Strong,
247
+ sub: Matestack::Ui::Core::Sub::Sub,
248
+ summary: Matestack::Ui::Core::Summary::Summary,
249
+ sup: Matestack::Ui::Core::Sup::Sup,
250
+ table: Matestack::Ui::Core::Table::Table,
251
+ tbody: Matestack::Ui::Core::Tbody::Tbody,
252
+ td: Matestack::Ui::Core::Td::Td,
253
+ template: Matestack::Ui::Core::Template::Template,
254
+ textarea: Matestack::Ui::Core::Textarea::Textarea,
255
+ tfoot: Matestack::Ui::Core::Tfoot::Tfoot,
256
+ th: Matestack::Ui::Core::Th::Th,
257
+ thead: Matestack::Ui::Core::Thead::Thead,
258
+ time: Matestack::Ui::Core::Time::Time,
259
+ toggle: Matestack::Ui::Core::Toggle::Toggle,
260
+ tr: Matestack::Ui::Core::Tr::Tr,
261
+ transition: Matestack::Ui::Core::Transition::Transition,
262
+ u: Matestack::Ui::Core::U::U,
263
+ ul: Matestack::Ui::Core::Ul::Ul,
264
+ unescaped: Matestack::Ui::Core::Unescaped::Unescaped,
265
+ var: Matestack::Ui::Core::Var::Var,
266
+ video: Matestack::Ui::Core::Video::Video,
267
+ wbr: Matestack::Ui::Core::Wbr::Wbr,
268
+ youtube: Matestack::Ui::Core::Youtube::Youtube,
269
+ )