matestack-ui-core 0.7.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +8 -0
  3. data/README.md +28 -204
  4. data/Rakefile +32 -0
  5. data/app/concepts/matestack/ui/core/abbr/abbr.haml +3 -3
  6. data/app/concepts/matestack/ui/core/abbr/abbr.rb +1 -8
  7. data/app/concepts/matestack/ui/core/action/action.haml +1 -1
  8. data/app/concepts/matestack/ui/core/action/action.js +114 -11
  9. data/app/concepts/matestack/ui/core/action/action.rb +41 -13
  10. data/app/concepts/matestack/ui/core/actionview/dynamic.haml +4 -4
  11. data/app/concepts/matestack/ui/core/address/address.haml +3 -3
  12. data/app/concepts/matestack/ui/core/address/address.rb +1 -1
  13. data/app/concepts/matestack/ui/core/app/app.haml +2 -3
  14. data/app/concepts/matestack/ui/core/app/app.js +18 -4
  15. data/app/concepts/matestack/ui/core/app/app.rb +34 -57
  16. data/app/concepts/matestack/ui/core/app/location.js +9 -0
  17. data/app/concepts/matestack/ui/core/app/store.js +35 -6
  18. data/app/concepts/matestack/ui/core/area/area.haml +1 -1
  19. data/app/concepts/matestack/ui/core/area/area.rb +2 -14
  20. data/app/concepts/matestack/ui/core/article/article.haml +3 -3
  21. data/app/concepts/matestack/ui/core/article/article.rb +1 -1
  22. data/app/concepts/matestack/ui/core/aside/aside.haml +1 -1
  23. data/app/concepts/matestack/ui/core/aside/aside.rb +0 -1
  24. data/app/concepts/matestack/ui/core/async/async.haml +6 -2
  25. data/app/concepts/matestack/ui/core/async/async.js +64 -8
  26. data/app/concepts/matestack/ui/core/async/async.rb +33 -5
  27. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +2 -0
  28. data/app/concepts/matestack/ui/core/b/b.haml +3 -3
  29. data/app/concepts/matestack/ui/core/b/b.rb +1 -1
  30. data/app/concepts/matestack/ui/core/bdi/bdi.haml +5 -0
  31. data/app/concepts/matestack/ui/core/bdi/bdi.rb +5 -0
  32. data/app/concepts/matestack/ui/core/bdo/bdo.haml +5 -0
  33. data/app/concepts/matestack/ui/core/bdo/bdo.rb +6 -0
  34. data/app/concepts/matestack/ui/core/blockquote/blockquote.haml +3 -3
  35. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +2 -7
  36. data/app/concepts/matestack/ui/core/br/br.haml +4 -4
  37. data/app/concepts/matestack/ui/core/br/br.rb +1 -1
  38. data/app/concepts/matestack/ui/core/button/button.haml +3 -3
  39. data/app/concepts/matestack/ui/core/button/button.rb +3 -7
  40. data/app/concepts/matestack/ui/core/caption/caption.haml +3 -3
  41. data/app/concepts/matestack/ui/core/caption/caption.rb +1 -1
  42. data/app/concepts/matestack/ui/core/cite/cite.haml +3 -3
  43. data/app/concepts/matestack/ui/core/cite/cite.rb +1 -1
  44. data/app/concepts/matestack/ui/core/code/code.haml +3 -3
  45. data/app/concepts/matestack/ui/core/code/code.rb +1 -1
  46. data/app/concepts/matestack/ui/core/collection/content/content.js +4 -4
  47. data/app/concepts/matestack/ui/core/collection/content/content.rb +5 -7
  48. data/app/concepts/matestack/ui/core/collection/content/next/next.haml +1 -1
  49. data/app/concepts/matestack/ui/core/collection/content/page/link/link.haml +1 -1
  50. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +5 -3
  51. data/app/concepts/matestack/ui/core/collection/content/previous/previous.haml +1 -1
  52. data/app/concepts/matestack/ui/core/collection/filter/filter.js +3 -3
  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 +4 -4
  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/anonym-dynamic-component.js +1 -1
  66. data/app/concepts/matestack/ui/core/component/base.rb +424 -0
  67. data/app/concepts/matestack/ui/core/component/children.haml +2 -2
  68. data/app/concepts/matestack/ui/core/component/component.js +1 -55
  69. data/app/concepts/matestack/ui/core/component/dynamic.haml +1 -1
  70. data/app/concepts/matestack/ui/core/component/dynamic.rb +25 -247
  71. data/app/concepts/matestack/ui/core/component/rerender.rb +8 -0
  72. data/app/concepts/matestack/ui/core/component/static.rb +3 -12
  73. data/app/concepts/matestack/ui/core/data/data.haml +5 -0
  74. data/app/concepts/matestack/ui/core/data/data.rb +6 -0
  75. data/app/concepts/matestack/ui/core/datalist/datalist.haml +3 -0
  76. data/app/concepts/matestack/ui/core/datalist/datalist.rb +4 -0
  77. data/app/concepts/matestack/ui/core/dd/dd.haml +3 -3
  78. data/app/concepts/matestack/ui/core/dd/dd.rb +1 -1
  79. data/app/concepts/matestack/ui/core/del/del.haml +5 -0
  80. data/app/concepts/matestack/ui/core/del/del.rb +6 -0
  81. data/app/concepts/matestack/ui/core/details/details.haml +1 -1
  82. data/app/concepts/matestack/ui/core/details/details.rb +1 -1
  83. data/app/concepts/matestack/ui/core/dfn/dfn.haml +5 -0
  84. data/app/concepts/matestack/ui/core/dfn/dfn.rb +6 -0
  85. data/app/concepts/matestack/ui/core/dialog/dialog.haml +5 -0
  86. data/app/concepts/matestack/ui/core/dialog/dialog.rb +6 -0
  87. data/app/concepts/matestack/ui/core/div/div.haml +1 -1
  88. data/app/concepts/matestack/ui/core/div/div.rb +0 -1
  89. data/app/concepts/matestack/ui/core/dl/dl.haml +3 -3
  90. data/app/concepts/matestack/ui/core/dl/dl.rb +2 -2
  91. data/app/concepts/matestack/ui/core/dt/dt.haml +3 -3
  92. data/app/concepts/matestack/ui/core/dt/dt.rb +1 -1
  93. data/app/concepts/matestack/ui/core/em/em.haml +3 -3
  94. data/app/concepts/matestack/ui/core/em/em.rb +1 -1
  95. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +4 -4
  96. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +3 -6
  97. data/app/concepts/matestack/ui/core/figure/figure.haml +1 -1
  98. data/app/concepts/matestack/ui/core/figure/figure.rb +0 -1
  99. data/app/concepts/matestack/ui/core/footer/footer.haml +1 -1
  100. data/app/concepts/matestack/ui/core/footer/footer.rb +0 -1
  101. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +79 -0
  102. data/app/concepts/matestack/ui/core/form/form.haml +1 -1
  103. data/app/concepts/matestack/ui/core/form/form.js +266 -114
  104. data/app/concepts/matestack/ui/core/form/form.rb +52 -19
  105. data/app/concepts/matestack/ui/core/form/has_errors.rb +54 -0
  106. data/app/concepts/matestack/ui/core/form/has_input_html_attributes.rb +13 -0
  107. data/app/concepts/matestack/ui/core/form/input/input.rb +39 -52
  108. data/app/concepts/matestack/ui/core/form/radio/radio.rb +71 -0
  109. data/app/concepts/matestack/ui/core/form/select/select.haml +9 -76
  110. data/app/concepts/matestack/ui/core/form/select/select.rb +44 -49
  111. data/app/concepts/matestack/ui/core/form/submit/submit.haml +1 -1
  112. data/app/concepts/matestack/ui/core/form/submit/submit.rb +5 -2
  113. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +28 -0
  114. data/app/concepts/matestack/ui/core/form/utils.rb +47 -0
  115. data/app/concepts/matestack/ui/core/header/header.haml +1 -1
  116. data/app/concepts/matestack/ui/core/header/header.rb +0 -1
  117. data/app/concepts/matestack/ui/core/heading/heading.haml +4 -49
  118. data/app/concepts/matestack/ui/core/heading/heading.rb +1 -1
  119. data/app/concepts/matestack/ui/core/hr/hr.haml +1 -1
  120. data/app/concepts/matestack/ui/core/hr/hr.rb +0 -1
  121. data/app/concepts/matestack/ui/core/icon/icon.haml +3 -3
  122. data/app/concepts/matestack/ui/core/icon/icon.rb +1 -1
  123. data/app/concepts/matestack/ui/core/iframe/iframe.haml +5 -0
  124. data/app/concepts/matestack/ui/core/iframe/iframe.rb +7 -0
  125. data/app/concepts/matestack/ui/core/img/img.haml +1 -1
  126. data/app/concepts/matestack/ui/core/img/img.rb +8 -8
  127. data/app/concepts/matestack/ui/core/input/input.haml +1 -3
  128. data/app/concepts/matestack/ui/core/input/input.rb +4 -0
  129. data/app/concepts/matestack/ui/core/ins/ins.haml +3 -3
  130. data/app/concepts/matestack/ui/core/ins/ins.rb +2 -6
  131. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +2 -0
  132. data/app/concepts/matestack/ui/core/isolated/isolated.haml +10 -0
  133. data/app/concepts/matestack/ui/core/isolated/isolated.js +108 -0
  134. data/app/concepts/matestack/ui/core/isolated/isolated.rb +59 -0
  135. data/app/concepts/matestack/ui/core/js/core.js +43 -18
  136. data/app/concepts/matestack/ui/core/kbd/kbd.haml +3 -3
  137. data/app/concepts/matestack/ui/core/kbd/kbd.rb +1 -0
  138. data/app/concepts/matestack/ui/core/label/label.haml +3 -3
  139. data/app/concepts/matestack/ui/core/label/label.rb +2 -6
  140. data/app/concepts/matestack/ui/core/legend/legend.haml +3 -3
  141. data/app/concepts/matestack/ui/core/legend/legend.rb +1 -1
  142. data/app/concepts/matestack/ui/core/li/li.haml +3 -3
  143. data/app/concepts/matestack/ui/core/li/li.rb +2 -1
  144. data/app/concepts/matestack/ui/core/link/link.haml +3 -3
  145. data/app/concepts/matestack/ui/core/link/link.rb +10 -14
  146. data/app/concepts/matestack/ui/core/main/main.haml +1 -1
  147. data/app/concepts/matestack/ui/core/main/main.rb +0 -1
  148. data/app/concepts/matestack/ui/core/map/map.haml +1 -1
  149. data/app/concepts/matestack/ui/core/map/map.rb +1 -7
  150. data/app/concepts/matestack/ui/core/mark/mark.haml +3 -3
  151. data/app/concepts/matestack/ui/core/mark/mark.rb +1 -0
  152. data/app/concepts/matestack/ui/core/meter/meter.haml +1 -1
  153. data/app/concepts/matestack/ui/core/meter/meter.rb +1 -10
  154. data/app/concepts/matestack/ui/core/nav/nav.haml +1 -1
  155. data/app/concepts/matestack/ui/core/nav/nav.rb +0 -1
  156. data/app/concepts/matestack/ui/core/noscript/noscript.haml +3 -3
  157. data/app/concepts/matestack/ui/core/noscript/noscript.rb +1 -1
  158. data/app/concepts/matestack/ui/core/object/object.haml +1 -1
  159. data/app/concepts/matestack/ui/core/object/object.rb +1 -11
  160. data/app/concepts/matestack/ui/core/ol/ol.haml +1 -1
  161. data/app/concepts/matestack/ui/core/ol/ol.rb +1 -1
  162. data/app/concepts/matestack/ui/core/onclick/onclick.haml +1 -1
  163. data/app/concepts/matestack/ui/core/onclick/onclick.js +2 -3
  164. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -0
  165. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +3 -0
  166. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +5 -0
  167. data/app/concepts/matestack/ui/core/option/option.haml +5 -0
  168. data/app/concepts/matestack/ui/core/option/option.rb +6 -0
  169. data/app/concepts/matestack/ui/core/output/output.haml +3 -3
  170. data/app/concepts/matestack/ui/core/output/output.rb +2 -7
  171. data/app/concepts/matestack/ui/core/page/{content.js → content/content.js} +8 -2
  172. data/app/concepts/matestack/ui/core/page/content/content.rb +28 -0
  173. data/app/concepts/matestack/ui/core/page/page.haml +3 -9
  174. data/app/concepts/matestack/ui/core/page/page.rb +15 -174
  175. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +3 -3
  176. data/app/concepts/matestack/ui/core/paragraph/paragraph.rb +1 -1
  177. data/app/concepts/matestack/ui/core/param/param.haml +1 -1
  178. data/app/concepts/matestack/ui/core/param/param.rb +1 -6
  179. data/app/concepts/matestack/ui/core/partial/partial.rb +0 -1
  180. data/app/concepts/matestack/ui/core/{absolute/absolute.haml → picture/picture.haml} +1 -1
  181. data/app/concepts/matestack/ui/core/picture/picture.rb +4 -0
  182. data/app/concepts/matestack/ui/core/plain/plain.rb +1 -1
  183. data/app/concepts/matestack/ui/core/pre/pre.haml +3 -3
  184. data/app/concepts/matestack/ui/core/pre/pre.rb +1 -1
  185. data/app/concepts/matestack/ui/core/progress/progress.haml +1 -1
  186. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -10
  187. data/app/concepts/matestack/ui/core/q/q.haml +3 -3
  188. data/app/concepts/matestack/ui/core/q/q.rb +2 -7
  189. data/app/concepts/matestack/ui/core/rp/rp.haml +3 -3
  190. data/app/concepts/matestack/ui/core/rp/rp.rb +1 -1
  191. data/app/concepts/matestack/ui/core/rt/rt.haml +3 -3
  192. data/app/concepts/matestack/ui/core/rt/rt.rb +1 -1
  193. data/app/concepts/matestack/ui/core/ruby/ruby.haml +3 -3
  194. data/app/concepts/matestack/ui/core/ruby/ruby.rb +1 -1
  195. data/app/concepts/matestack/ui/core/s/s.haml +3 -3
  196. data/app/concepts/matestack/ui/core/s/s.rb +1 -1
  197. data/app/concepts/matestack/ui/core/samp/samp.haml +5 -0
  198. data/app/concepts/matestack/ui/core/samp/samp.rb +5 -0
  199. data/app/concepts/matestack/ui/core/section/section.haml +1 -1
  200. data/app/concepts/matestack/ui/core/section/section.rb +0 -1
  201. data/app/concepts/matestack/ui/core/slot/slot.rb +1 -2
  202. data/app/concepts/matestack/ui/core/small/small.haml +3 -3
  203. data/app/concepts/matestack/ui/core/small/small.rb +1 -1
  204. data/app/concepts/matestack/ui/core/span/span.haml +3 -3
  205. data/app/concepts/matestack/ui/core/span/span.rb +1 -1
  206. data/app/concepts/matestack/ui/core/strong/strong.haml +3 -3
  207. data/app/concepts/matestack/ui/core/strong/strong.rb +1 -1
  208. data/app/concepts/matestack/ui/core/sub/sub.haml +3 -3
  209. data/app/concepts/matestack/ui/core/sub/sub.rb +1 -1
  210. data/app/concepts/matestack/ui/core/summary/summary.haml +3 -3
  211. data/app/concepts/matestack/ui/core/summary/summary.rb +1 -1
  212. data/app/concepts/matestack/ui/core/sup/sup.haml +3 -3
  213. data/app/concepts/matestack/ui/core/sup/sup.rb +1 -1
  214. data/app/concepts/matestack/ui/core/table/table.haml +1 -1
  215. data/app/concepts/matestack/ui/core/table/table.rb +0 -1
  216. data/app/concepts/matestack/ui/core/tbody/tbody.haml +1 -1
  217. data/app/concepts/matestack/ui/core/tbody/tbody.rb +0 -1
  218. data/app/concepts/matestack/ui/core/td/td.haml +3 -3
  219. data/app/concepts/matestack/ui/core/td/td.rb +2 -1
  220. data/app/concepts/matestack/ui/core/template/template.haml +3 -0
  221. data/app/concepts/matestack/ui/core/template/template.rb +4 -0
  222. data/app/concepts/matestack/ui/core/textarea/textarea.haml +5 -0
  223. data/app/concepts/matestack/ui/core/textarea/textarea.rb +10 -0
  224. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +1 -1
  225. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +0 -1
  226. data/app/concepts/matestack/ui/core/th/th.haml +3 -3
  227. data/app/concepts/matestack/ui/core/th/th.rb +2 -1
  228. data/app/concepts/matestack/ui/core/thead/thead.haml +1 -1
  229. data/app/concepts/matestack/ui/core/thead/thead.rb +0 -1
  230. data/app/concepts/matestack/ui/core/time/time.haml +1 -1
  231. data/app/concepts/matestack/ui/core/time/time.rb +1 -7
  232. data/app/concepts/matestack/ui/core/toggle/toggle.haml +2 -0
  233. data/app/concepts/matestack/ui/core/toggle/toggle.js +71 -0
  234. data/app/concepts/matestack/ui/core/toggle/toggle.rb +13 -0
  235. data/app/concepts/matestack/ui/core/tr/tr.haml +1 -1
  236. data/app/concepts/matestack/ui/core/tr/tr.rb +0 -1
  237. data/app/concepts/matestack/ui/core/transition/transition.haml +3 -3
  238. data/app/concepts/matestack/ui/core/transition/transition.js +18 -2
  239. data/app/concepts/matestack/ui/core/transition/transition.rb +15 -8
  240. data/app/concepts/matestack/ui/core/u/u.haml +5 -0
  241. data/app/concepts/matestack/ui/core/u/u.rb +6 -0
  242. data/app/concepts/matestack/ui/core/ul/ul.haml +1 -1
  243. data/app/concepts/matestack/ui/core/ul/ul.rb +0 -1
  244. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +9 -0
  245. data/app/concepts/matestack/ui/core/var/var.haml +3 -3
  246. data/app/concepts/matestack/ui/core/var/var.rb +1 -0
  247. data/app/concepts/matestack/ui/core/video/video.haml +2 -2
  248. data/app/concepts/matestack/ui/core/video/video.rb +4 -14
  249. data/app/concepts/matestack/ui/core/view/view.haml +1 -0
  250. data/app/concepts/matestack/ui/core/view/view.rb +30 -0
  251. data/app/concepts/matestack/ui/core/wbr/wbr.haml +5 -0
  252. data/app/concepts/matestack/ui/core/wbr/wbr.rb +5 -0
  253. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -1
  254. data/app/concepts/matestack/ui/core/youtube/youtube.rb +18 -16
  255. data/app/helpers/matestack/ui/core/application_helper.rb +90 -17
  256. data/app/javascript/matestack-ui-core/index.js +22 -0
  257. data/app/javascript/matestack-ui-core/styles/index.scss +5 -0
  258. data/app/javascript/packs/matestack-ui-core.js +8 -0
  259. data/app/lib/matestack/ui/component.rb +1 -0
  260. data/app/lib/matestack/ui/core/has_view_context.rb +14 -0
  261. data/app/lib/matestack/ui/core/html_attributes.rb +43 -0
  262. data/app/lib/matestack/ui/core/properties.rb +161 -0
  263. data/app/lib/matestack/ui/core/rendering/default_renderer_class_determiner.rb +33 -0
  264. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +199 -0
  265. data/app/lib/matestack/ui/isolated_component.rb +1 -0
  266. data/app/lib/matestack/ui/vue_js_component.rb +1 -0
  267. data/lib/generators/matestack/core/component/templates/docs/components/%file_name%.md.tt +1 -0
  268. data/lib/generators/matestack/page/templates/app/matestack/pages/%app_name%/%namespace%/%file_name%.rb.tt +2 -1
  269. data/lib/matestack/ui/core.rb +5 -2
  270. data/lib/matestack/ui/core/cell.rb +31 -0
  271. data/lib/matestack/ui/core/component/registry.rb +47 -0
  272. data/lib/matestack/ui/core/components.rb +268 -0
  273. data/lib/matestack/ui/core/dsl.rb +6 -0
  274. data/lib/matestack/ui/core/engine.rb +16 -0
  275. data/lib/matestack/ui/core/version.rb +1 -1
  276. data/vendor/assets/javascripts/dist/manifest.json +22 -0
  277. data/vendor/assets/javascripts/dist/manifest.json.gz +0 -0
  278. data/vendor/assets/javascripts/dist/matestack-ui-core.css +3 -0
  279. data/vendor/assets/javascripts/dist/matestack-ui-core.css.map +1 -0
  280. data/vendor/assets/javascripts/{matestack-ui-core.js → dist/matestack-ui-core.js} +12221 -11451
  281. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -0
  282. data/vendor/assets/javascripts/dist/matestack-ui-core.min.css +0 -0
  283. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +3 -0
  284. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.LICENSE.txt +18 -0
  285. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  286. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -0
  287. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  288. data/vendor/assets/javascripts/matestack-ui-core.js.erb +2 -0
  289. data/vendor/assets/stylesheets/dist +1 -0
  290. data/vendor/assets/stylesheets/matestack-ui-core.css.erb +2 -0
  291. metadata +104 -72
  292. data/MIT-LICENSE +0 -20
  293. data/app/concepts/matestack/ui/core/absolute/absolute.rb +0 -17
  294. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +0 -2
  295. data/app/concepts/matestack/ui/core/component/response.haml +0 -2
  296. data/app/concepts/matestack/ui/core/component/response_dynamic.haml +0 -7
  297. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +0 -3
  298. data/app/concepts/matestack/ui/core/component/static.haml +0 -1
  299. data/app/concepts/matestack/ui/core/form/inline/inline.haml +0 -6
  300. data/app/concepts/matestack/ui/core/form/inline/inline.rb +0 -9
  301. data/app/concepts/matestack/ui/core/form/input/input.haml +0 -27
  302. data/app/concepts/matestack/ui/core/html/html.haml +0 -3
  303. data/app/concepts/matestack/ui/core/html/html.js +0 -10
  304. data/app/concepts/matestack/ui/core/html/html.rb +0 -17
  305. data/app/concepts/matestack/ui/core/isolate/isolate.haml +0 -2
  306. data/app/concepts/matestack/ui/core/isolate/isolate.rb +0 -11
  307. data/app/concepts/matestack/ui/core/page/content.haml +0 -7
  308. data/app/concepts/matestack/ui/core/page/content.rb +0 -5
  309. data/app/concepts/matestack/ui/core/pg/pg.haml +0 -5
  310. data/app/concepts/matestack/ui/core/pg/pg.rb +0 -5
  311. data/app/lib/matestack/ui/core/app_node.rb +0 -53
  312. data/app/lib/matestack/ui/core/component_node.rb +0 -73
  313. data/app/lib/matestack/ui/core/page_node.rb +0 -96
  314. data/app/lib/matestack/ui/core/to_cell.rb +0 -129
  315. data/vendor/assets/javascripts/manifest.json +0 -4
  316. data/vendor/assets/javascripts/matestack-ui-core.js.map +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c58a7c3107da2943a7443d50e8cf07ba1f379bc58b71a3f97d00700ad87773b
4
- data.tar.gz: d76f2c74cd96afad0b6e4071c751c46122a294690e03f6006ec395e84af24637
3
+ metadata.gz: 1bbd88f77c5019a6699a9a82333d487e93b9227830979c83fbe5a97578b562a2
4
+ data.tar.gz: accec85e48b4aa52911ed79228769d1ba334cd3130abd814e7d64881b4843863
5
5
  SHA512:
6
- metadata.gz: e02c8a827ab68d86343df60902c2c245b9eff1374d3c2f77adbb050472270ad4858c0d9b0b0473dd06315c2f33f089e9237870d7cfe4f977c6e1d65145b4b4fa
7
- data.tar.gz: 895b45ac12b0f494e5f40c3b5214884d28fb23657602d3b5c4f6637f6353817fda117898743f280dcfd7376aa508b4ae507cd28da6624e2a78fb77b9034d0542
6
+ metadata.gz: ee4361ea62af4c518280cbcbd5c42a61a792e0661a9d8105a65c4fde7ea4f7806d1decc2fb2fb51eef151b9814b167d4d1558de23b9bdac3bcf0751d58fb4bda
7
+ data.tar.gz: 61dafe375a166c367264a4b29604f584d1d5514441c434e59245a6b54d73c4028b709aafc74b9111473c6a9e5854b57c4ead9930a5bbe4e713b833e63abc6aaa
data/LICENSE ADDED
@@ -0,0 +1,8 @@
1
+ Copyright (c) Matestack GmbH
2
+
3
+ matestack-ui-core is an Open Source project licensed under the terms of
4
+ the LGPLv3 license. Please see <http://www.gnu.org/licenses/lgpl-3.0.html>
5
+ for license text.
6
+
7
+ Matestack will provide a commercial-friendly license allowing private forks
8
+ and modifications of matestack-ui-core. Please request at jonas@matestack.io
data/README.md CHANGED
@@ -1,228 +1,52 @@
1
- [![CircleCI](https://circleci.com/gh/basemate/matestack-ui-core/tree/master.svg?style=shield)](https://circleci.com/gh/basemate/matestack-ui-core/tree/master)
1
+ [![Specs](https://github.com/matestack/matestack-ui-core/workflows/specs/badge.svg)](https://github.com/matestack/matestack-ui-core/actions)
2
2
  [![Gitter](https://badges.gitter.im/basemate/community.svg)](https://gitter.im/basemate/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
3
3
  [![Gem Version](https://badge.fury.io/rb/matestack-ui-core.svg)](https://badge.fury.io/rb/matestack-ui-core)
4
+ [![Docs](https://img.shields.io/badge/docs-matestack-blue.svg)](https://docs.matestack.io/docs/guides/1-installation/README.md)
5
+ [![Twitter Follow](https://img.shields.io/twitter/follow/matestack.svg?style=social)](https://twitter.com/matestack)
4
6
 
5
7
  ![matestack logo](./logo.png)
6
8
 
7
- # matestack: Escape the frontend hustle
9
+ # matestack-ui-core
8
10
 
9
- ## Create maintainable, dynamic and beautiful UIs easily
11
+ ## Escape the frontend hustle & easily create interactive web apps in pure Ruby
10
12
 
11
- As a Rails Engine, matestack deeply integrates a Vue.js based UI into Rails, offering optional prebuilt components. Use it to write dynamic Web-UIs with minimum effort and maximum dev happiness in pure Ruby. The main goals are:
13
+ `matestack-ui-core` is a Rails engine for Ruby on Rails developers.
14
+
15
+ `matestack-ui-core` enables you to craft interactive web UIs without JavaScript in pure Ruby with minimum effort.
16
+ UI code becomes a native and fun part of your Rails app.
17
+
18
+ Work with pure Ruby. If necessary, extend with pure JavaScript. No Opal involved.
19
+
20
+ The main goals are:
12
21
 
13
22
  - Reduction of complexity of modern web development, moving front and backend closer together
14
23
  - More maintainable UI code, using a component-based structure written in Ruby
15
- - Increased development speed and happiness, offering prebuilt UI-Components for classic requirements
24
+ - Increased development speed and happiness, offering prebuilt UI-Components for typical requirements
16
25
  - Modern, dynamic UI feeling without the need to implement a separate JavaScript Application
17
26
 
18
- matestack can progressively replace the classic Rails-View-Layer. You are able to use
27
+ `matestack-ui-core` can progressively replace the classic Rails-View-Layer. You are able to use
19
28
  it alongside your classic views and incrementally turn your Rails-App into a
20
29
  dynamic Web-App.
21
30
 
22
- ### Installation:
23
-
24
- Click here to see how you can add Matestack UI to your existing Rails application: [Installation Guide](https://www.matestack.org/docs/install)
25
-
26
- ### Features:
27
-
28
- #### Define your UI in a Ruby Class
29
- ```ruby
30
- class Pages::MyPage < Matestack::Ui::Page
31
-
32
- def prepare
33
- @technologies = ["Rails", "Vue.js", "Trailblazer", "Rspec", "Capybara"]
34
- end
35
-
36
- def response
37
- components{
38
- div id: "technologies" do
39
- @technologies.each do |technology|
40
- plain "matestack uses #{technology}"
41
- end
42
- end
43
- }
44
- end
45
-
46
- end
47
- ```
48
- #### Create a Single Page Application without JavaScript
49
-
50
- ```ruby
51
- class Apps::MyApp < Matestack::Ui::App
52
-
53
- def response
54
- components{
55
- header do
56
- heading size: 1, text: "My App"
57
- end
58
- nav do
59
- transition path: :my_first_page_path do
60
- button text: "Page 1"
61
- end
62
- transition path: :my_second_page_path do
63
- button text: "Page 2"
64
- end
65
- end
66
- main do
67
- page_content #pages are dynamically yielded here, when buttons are clicked!
68
- end
69
- footer do
70
- plain "That's it!"
71
- end
72
- }
73
- end
74
-
75
- end
76
- ```
77
-
78
- ```ruby
79
- class Pages::MyApp::MyFirstPage < Matestack::Ui::Page
80
-
81
- def response
82
- components{
83
- div id: "div-on-page-1" do
84
- plain "My First Page"
85
- end
86
- }
87
- end
88
-
89
- end
90
- ```
91
- ```ruby
92
- class Pages::MyApp::MySecondPage < Matestack::Ui::Page
93
-
94
- def response
95
- components{
96
- div id: "div-on-page-2" do
97
- plain "My Second Page"
98
- end
99
- }
100
- end
101
-
102
- end
103
- ```
104
- #### Handle User Interaction dynamically without JavaScript
105
- ```ruby
106
- class Pages::MyPage < Matestack::Ui::Page
107
-
108
- def response
109
- components {
110
- action my_action_config do
111
- button text: "Click me!"
112
- end
113
- #content gets rerendered without page reload if action succeeded
114
- async rerender_on: "my_action_succeeded" do
115
- div id: "my-div" do
116
- plain DateTime.now
117
- end
118
- end
119
- }
120
- end
121
-
122
- def my_action_config
123
- {
124
- method: :post,
125
- path: :some_rails_routing_path,
126
- success: {
127
- emit: "my_action_succeeded"
128
- }
129
- }
130
- end
131
-
132
- end
133
- ```
134
- #### Handle User Input dynamically without JavaScript
135
- ```ruby
136
- class Pages::MyApp::MyFirstPage < Matestack::Ui::Page
137
-
138
- def prepare
139
- @my_model = MyModel.new
140
- end
141
-
142
- def response
143
- components {
144
- form my_form_config, :include do
145
- form_input key: :some_model_attribute, type: :text
146
- form_submit do
147
- button text: "Submit me!"
148
- end
149
- end
150
- async show_on: "form_has_errors", hide_after: 5000 do
151
- plain "Data could not be submitted, please check form"
152
- end
153
- }
154
- end
155
-
156
- def my_form_config
157
- {
158
- for: @my_model,
159
- method: :post,
160
- path: :some_action_path,
161
- success: {
162
- transition: {
163
- path: :my_second_page_path,
164
- }
165
- },
166
- failure: {
167
- emit: "form_has_errors"
168
- }
169
- }
170
- end
171
-
172
- end
173
- ```
174
- #### Websocket Integration without JavaScript
175
- ```ruby
176
- class Pages::MyPage < Matestack::Ui::Page
177
-
178
- def prepare
179
- @comments = Comment.last(5)
180
- end
181
-
182
- def response
183
- components {
184
- #content gets rerendered without page reload when
185
- #websocket event is received
186
- async rerender_on: "comments_changed" do
187
- @comments.each do |comment|
188
- div do
189
- plain comment.content
190
- end
191
- end
192
- end
193
- }
194
- end
195
-
196
- end
197
- ```
198
- somewhere else on the backend:
199
-
200
- ```ruby
201
- ActionCable.server.broadcast("matestack_ui_core", {
202
- message: "comments_changed"
203
- })
204
- ```
205
-
206
- ### Documentation
207
-
208
- Documentation can be found [here](https://www.matestack.org/docs/install)
209
-
210
- ### Changelog
31
+ ## Features
211
32
 
212
- Changelog can be found [here](./CHANGELOG.md)
33
+ Please have a look at our [landingpage](https://www.matestack.io), presenting the main features of `matestack-ui-core`
213
34
 
214
- ### Roadmap
35
+ ## Documentation/Installation
215
36
 
216
- We're currently finalizing the roadmap towards to a stable 1.0 release, supposed to happen towards the end of the year! For details make sure to check the [release management project](https://github.com/basemate/matestack-ui-core/projects/2) and get in touch via our [chat](https://gitter.im/basemate/community) for feedback!
37
+ Documentation can be found [here](https://docs.matestack.io/docs/guides/1-installation/README.md)
38
+
39
+ ## Changelog
40
+
41
+ Changelog can be found [here](./CHANGELOG.md)
217
42
 
218
- ### Community
43
+ ## Community
219
44
 
220
45
  As a low-barrier feedback channel for our early users, we have set up a Gitter chat that can be found [here](https://gitter.im/basemate/community). You are very welcome to ask questions and send us feedback there!
221
46
 
222
- ### Contribution
47
+ ## Contribution
223
48
 
224
- We are happy to accept contributors of any kind. Please refer to the [Contribution Guide](./docs/contribute)
49
+ We are happy to accept contributors of any kind. Please refer to the [Contribution Guide](https://docs.matestack.io/docs/guides/13-contribute/README.md)
225
50
 
226
- ### License
227
- The gem is available as open source under the terms of the
228
- [MIT License](https://opensource.org/licenses/MIT).
51
+ ## License
52
+ matestack-ui-core is an Open Source project licensed under the terms of the [LGPLv3 license](./LICENSE)
data/Rakefile CHANGED
@@ -32,3 +32,35 @@ require 'rake/testtask'
32
32
  # end
33
33
  #
34
34
  # task default: :test
35
+
36
+ task :webpack => 'webpack:build'
37
+
38
+ namespace :webpack do
39
+ task :build => ['build:development', 'build:production']
40
+
41
+ namespace :build do
42
+ task :development => 'yarn:install' do
43
+ Bundler.with_unbundled_env do
44
+ sh "cd builder && bin/webpack"
45
+ end
46
+ end
47
+ task :production => 'yarn:install' do
48
+ Bundler.with_unbundled_env do
49
+ sh "cd builder && bin/rake webpacker:compile"
50
+ end
51
+ end
52
+ end
53
+
54
+ task :watch => 'yarn:install' do
55
+ Bundler.with_unbundled_env do
56
+ sh "cd builder && bin/webpack --watch"
57
+ end
58
+ end
59
+
60
+ namespace :yarn do
61
+ task :install do
62
+ sh "yarn install && cd builder && yarn install"
63
+ end
64
+ end
65
+ end
66
+
@@ -1,5 +1,5 @@
1
- %abbr{@tag_attributes}
2
- - if options[:text].blank? && block_given?
1
+ %abbr{ html_attributes }
2
+ - if text.blank? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,12 +1,5 @@
1
1
  module Matestack::Ui::Core::Abbr
2
2
  class Abbr < Matestack::Ui::Core::Component::Static
3
- REQUIRED_KEYS = [:title]
4
-
5
- def setup
6
- @tag_attributes.merge!({
7
- "title": options[:title]
8
- })
9
- end
10
-
3
+ optional :text
11
4
  end
12
5
  end
@@ -1,3 +1,3 @@
1
- %a{@tag_attributes, "@click.prevent": "perform", "href": action_path}
1
+ %a{ html_attributes, "@click.prevent": "perform", "href": action_path }
2
2
  - if block_given?
3
3
  = yield
@@ -2,9 +2,8 @@ import Vue from 'vue/dist/vue.esm'
2
2
  import Vuex from 'vuex'
3
3
  import axios from 'axios'
4
4
 
5
- import matestackEventHub from 'js/event-hub'
6
-
7
- import componentMixin from 'component/component'
5
+ import matestackEventHub from '../js/event-hub'
6
+ import componentMixin from '../component/component'
8
7
 
9
8
  const componentDef = {
10
9
  mixins: [componentMixin],
@@ -13,31 +12,135 @@ const componentDef = {
13
12
  },
14
13
  methods: {
15
14
  perform: function(){
15
+ const self = this
16
+ if (
17
+ (self.componentConfig["confirm"] == undefined) || confirm(self.componentConfig["confirm_text"])
18
+ )
19
+ {
20
+ if (self.componentConfig["emit"] != undefined) {
21
+ matestackEventHub.$emit(self.componentConfig["emit"]);
22
+ }
23
+ if (self.componentConfig["delay"] != undefined) {
24
+ setTimeout(function () {
25
+ self.sendRequest()
26
+ }, parseInt(self.componentConfig["delay"]));
27
+ } else {
28
+ this.sendRequest()
29
+ }
30
+ }
31
+ },
32
+ sendRequest: function(){
16
33
  const self = this
17
34
  axios({
18
- method: self.componentConfig["method"],
19
- url: self.componentConfig["action_path"],
20
- data: self.componentConfig["data"],
21
- headers: {
22
- 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
35
+ method: self.componentConfig["method"],
36
+ url: self.componentConfig["action_path"],
37
+ data: self.componentConfig["data"],
38
+ headers: {
39
+ 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
40
+ }
23
41
  }
24
- })
42
+ )
25
43
  .then(function(response){
26
44
  if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["emit"] != undefined) {
27
45
  matestackEventHub.$emit(self.componentConfig["success"]["emit"], response.data);
28
46
  }
29
- if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["transition"] != undefined && self.$store != undefined) {
47
+
48
+ // transition handling
49
+ if (self.componentConfig["success"] != undefined
50
+ && self.componentConfig["success"]["transition"] != undefined
51
+ && (
52
+ self.componentConfig["success"]["transition"]["follow_response"] == undefined
53
+ ||
54
+ self.componentConfig["success"]["transition"]["follow_response"] === false
55
+ )
56
+ && self.$store != undefined
57
+ ) {
30
58
  let path = self.componentConfig["success"]["transition"]["path"]
31
59
  self.$store.dispatch('navigateTo', {url: path, backwards: false})
60
+ return;
61
+ }
62
+ if (self.componentConfig["success"] != undefined
63
+ && self.componentConfig["success"]["transition"] != undefined
64
+ && self.componentConfig["success"]["transition"]["follow_response"] === true
65
+ && self.$store != undefined
66
+ ) {
67
+ let path = response.data["transition_to"] || response.request.responseURL
68
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
69
+ return;
70
+ }
71
+ // redirect handling
72
+ if (self.componentConfig["success"] != undefined
73
+ && self.componentConfig["success"]["redirect"] != undefined
74
+ && (
75
+ self.componentConfig["success"]["redirect"]["follow_response"] == undefined
76
+ ||
77
+ self.componentConfig["success"]["redirect"]["follow_response"] === false
78
+ )
79
+ && self.$store != undefined
80
+ ) {
81
+ let path = self.componentConfig["success"]["redirect"]["path"]
82
+ window.location.href = path
83
+ return;
84
+ }
85
+ if (self.componentConfig["success"] != undefined
86
+ && self.componentConfig["success"]["redirect"] != undefined
87
+ && self.componentConfig["success"]["redirect"]["follow_response"] === true
88
+ && self.$store != undefined
89
+ ) {
90
+ let path = response.data["redirect_to"] || response.request.responseURL
91
+ window.location.href = path
92
+ return;
32
93
  }
33
94
  })
34
95
  .catch(function(error){
35
96
  if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["emit"] != undefined) {
36
97
  matestackEventHub.$emit(self.componentConfig["failure"]["emit"], error.response.data);
37
98
  }
38
- if (self.componentConfig["failure"] != undefined && self.componentConfig["failure"]["transition"] != undefined && self.$store != undefined) {
99
+ // transition handling
100
+ if (self.componentConfig["failure"] != undefined
101
+ && self.componentConfig["failure"]["transition"] != undefined
102
+ && (
103
+ self.componentConfig["failure"]["transition"]["follow_response"] == undefined
104
+ ||
105
+ self.componentConfig["failure"]["transition"]["follow_response"] === false
106
+ )
107
+ && self.$store != undefined
108
+ ) {
39
109
  let path = self.componentConfig["failure"]["transition"]["path"]
40
110
  self.$store.dispatch('navigateTo', {url: path, backwards: false})
111
+ return;
112
+ }
113
+ if (self.componentConfig["failure"] != undefined
114
+ && self.componentConfig["failure"]["transition"] != undefined
115
+ && self.componentConfig["failure"]["transition"]["follow_response"] === true
116
+ && self.$store != undefined
117
+ ) {
118
+ let path = error.response.data["transition_to"] || response.request.responseURL
119
+ self.$store.dispatch('navigateTo', {url: path, backwards: false})
120
+ return;
121
+ }
122
+ // redirect handling
123
+ if (self.componentConfig["failure"] != undefined
124
+ && self.componentConfig["failure"]["redirect"] != undefined
125
+ && (
126
+ self.componentConfig["failure"]["redirect"]["follow_response"] == undefined
127
+ ||
128
+ self.componentConfig["failure"]["redirect"]["follow_response"] === false
129
+ )
130
+ && self.$store != undefined
131
+ ) {
132
+ let path = self.componentConfig["failure"]["redirect"]["path"]
133
+ window.location.href = path
134
+ return;
135
+ }
136
+ if (self.componentConfig["failure"] != undefined
137
+ && self.componentConfig["failure"]["redirect"] != undefined
138
+ && self.componentConfig["failure"]["redirect"]["follow_response"] === true
139
+ && self.$store != undefined
140
+ ) {
141
+ let path = error.response.data["redirect_to"] || response.request.responseURL
142
+ window.location.href = path
143
+ return;
41
144
  }
42
145
  })
43
146
  }