matestack-ui-core 0.7.2.1 → 1.0.0.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) 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 +2 -2
  6. data/app/concepts/matestack/ui/core/abbr/abbr.rb +3 -2
  7. data/app/concepts/matestack/ui/core/action/action.js +114 -11
  8. data/app/concepts/matestack/ui/core/action/action.rb +41 -13
  9. data/app/concepts/matestack/ui/core/{component/response_dynamic.haml → actionview/dynamic.haml} +2 -3
  10. data/app/concepts/matestack/ui/core/actionview/dynamic.rb +28 -0
  11. data/app/concepts/matestack/ui/core/{component → actionview}/static.haml +0 -0
  12. data/app/concepts/matestack/ui/core/actionview/static.rb +28 -0
  13. data/app/concepts/matestack/ui/core/address/address.haml +2 -2
  14. data/app/concepts/matestack/ui/core/address/address.rb +1 -1
  15. data/app/concepts/matestack/ui/core/app/app.haml +2 -3
  16. data/app/concepts/matestack/ui/core/app/app.js +18 -4
  17. data/app/concepts/matestack/ui/core/app/app.rb +34 -81
  18. data/app/concepts/matestack/ui/core/app/location.js +9 -0
  19. data/app/concepts/matestack/ui/core/app/store.js +35 -6
  20. data/app/concepts/matestack/ui/core/area/area.haml +1 -0
  21. data/app/concepts/matestack/ui/core/area/area.rb +20 -0
  22. data/app/concepts/matestack/ui/core/aside/aside.haml +3 -0
  23. data/app/concepts/matestack/ui/core/aside/aside.rb +5 -0
  24. data/app/concepts/matestack/ui/core/async/async.haml +6 -2
  25. data/app/concepts/matestack/ui/core/async/async.js +64 -8
  26. data/app/concepts/matestack/ui/core/async/async.rb +29 -4
  27. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +2 -0
  28. data/app/concepts/matestack/ui/core/{pg/pg.haml → b/b.haml} +1 -1
  29. data/app/concepts/matestack/ui/core/b/b.rb +5 -0
  30. data/app/concepts/matestack/ui/core/bdi/bdi.haml +5 -0
  31. data/app/concepts/matestack/ui/core/bdi/bdi.rb +4 -0
  32. data/app/concepts/matestack/ui/core/bdo/bdo.haml +5 -0
  33. data/app/concepts/matestack/ui/core/bdo/bdo.rb +11 -0
  34. data/app/concepts/matestack/ui/core/cite/cite.haml +5 -0
  35. data/app/concepts/matestack/ui/core/cite/cite.rb +5 -0
  36. data/app/concepts/matestack/ui/core/code/code.haml +5 -0
  37. data/app/concepts/matestack/ui/core/code/code.rb +5 -0
  38. data/app/concepts/matestack/ui/core/collection/content/content.js +4 -4
  39. data/app/concepts/matestack/ui/core/collection/content/content.rb +2 -2
  40. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +4 -2
  41. data/app/concepts/matestack/ui/core/collection/filter/filter.js +3 -3
  42. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +4 -5
  43. data/app/concepts/matestack/ui/core/collection/filter/select/select.haml +10 -0
  44. data/app/concepts/matestack/ui/core/collection/filter/select/select.rb +29 -0
  45. data/app/concepts/matestack/ui/core/collection/helper.rb +14 -6
  46. data/app/concepts/matestack/ui/core/collection/order/order.js +4 -4
  47. data/app/concepts/matestack/ui/core/collection/order/order.rb +4 -5
  48. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +6 -5
  49. data/app/concepts/matestack/ui/core/component/anonym-dynamic-component.js +1 -1
  50. data/app/concepts/matestack/ui/core/component/base.rb +424 -0
  51. data/app/concepts/matestack/ui/core/component/children.haml +2 -2
  52. data/app/concepts/matestack/ui/core/component/component.js +1 -55
  53. data/app/concepts/matestack/ui/core/component/dynamic.haml +1 -1
  54. data/app/concepts/matestack/ui/core/component/dynamic.rb +24 -239
  55. data/app/concepts/matestack/ui/core/component/rerender.rb +8 -0
  56. data/app/concepts/matestack/ui/core/component/static.rb +3 -12
  57. data/app/concepts/matestack/ui/core/data/data.haml +5 -0
  58. data/app/concepts/matestack/ui/core/data/data.rb +9 -0
  59. data/app/concepts/matestack/ui/core/datalist/datalist.haml +3 -0
  60. data/app/concepts/matestack/ui/core/datalist/datalist.rb +5 -0
  61. data/app/concepts/matestack/ui/core/dd/dd.haml +5 -0
  62. data/app/concepts/matestack/ui/core/dd/dd.rb +5 -0
  63. data/app/concepts/matestack/ui/core/del/del.haml +5 -0
  64. data/app/concepts/matestack/ui/core/del/del.rb +4 -0
  65. data/app/concepts/matestack/ui/core/dfn/dfn.haml +5 -0
  66. data/app/concepts/matestack/ui/core/dfn/dfn.rb +6 -0
  67. data/app/concepts/matestack/ui/core/dialog/dialog.haml +5 -0
  68. data/app/concepts/matestack/ui/core/dialog/dialog.rb +9 -0
  69. data/app/concepts/matestack/ui/core/dl/dl.haml +5 -0
  70. data/app/concepts/matestack/ui/core/dl/dl.rb +5 -0
  71. data/app/concepts/matestack/ui/core/dt/dt.haml +5 -0
  72. data/app/concepts/matestack/ui/core/dt/dt.rb +5 -0
  73. data/app/concepts/matestack/ui/core/em/em.haml +5 -0
  74. data/app/concepts/matestack/ui/core/em/em.rb +5 -0
  75. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +5 -0
  76. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +9 -0
  77. data/app/concepts/matestack/ui/core/figure/figure.haml +3 -0
  78. data/app/concepts/matestack/ui/core/figure/figure.rb +5 -0
  79. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +79 -0
  80. data/app/concepts/matestack/ui/core/form/form.js +266 -96
  81. data/app/concepts/matestack/ui/core/form/form.rb +29 -2
  82. data/app/concepts/matestack/ui/core/form/has_errors.rb +54 -0
  83. data/app/concepts/matestack/ui/core/form/has_input_html_attributes.rb +13 -0
  84. data/app/concepts/matestack/ui/core/form/input/input.rb +39 -52
  85. data/app/concepts/matestack/ui/core/form/radio/radio.rb +71 -0
  86. data/app/concepts/matestack/ui/core/form/select/select.haml +9 -76
  87. data/app/concepts/matestack/ui/core/form/select/select.rb +64 -49
  88. data/app/concepts/matestack/ui/core/form/submit/submit.rb +4 -1
  89. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +28 -0
  90. data/app/concepts/matestack/ui/core/form/utils.rb +47 -0
  91. data/app/concepts/matestack/ui/core/heading/heading.rb +2 -0
  92. data/app/concepts/matestack/ui/core/iframe/iframe.haml +5 -0
  93. data/app/concepts/matestack/ui/core/iframe/iframe.rb +14 -0
  94. data/app/concepts/matestack/ui/core/img/img.rb +1 -0
  95. data/app/concepts/matestack/ui/core/input/input.haml +1 -3
  96. data/app/concepts/matestack/ui/core/input/input.rb +8 -0
  97. data/app/concepts/matestack/ui/core/ins/ins.haml +5 -0
  98. data/app/concepts/matestack/ui/core/ins/ins.rb +10 -0
  99. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +2 -0
  100. data/app/concepts/matestack/ui/core/isolated/isolated.haml +10 -0
  101. data/app/concepts/matestack/ui/core/isolated/isolated.js +108 -0
  102. data/app/concepts/matestack/ui/core/isolated/isolated.rb +59 -0
  103. data/app/concepts/matestack/ui/core/js/core.js +43 -19
  104. data/app/concepts/matestack/ui/core/kbd/kbd.haml +5 -0
  105. data/app/concepts/matestack/ui/core/kbd/kbd.rb +4 -0
  106. data/app/concepts/matestack/ui/core/label/label.rb +6 -1
  107. data/app/concepts/matestack/ui/core/legend/legend.haml +5 -0
  108. data/app/concepts/matestack/ui/core/legend/legend.rb +5 -0
  109. data/app/concepts/matestack/ui/core/link/link.rb +7 -6
  110. data/app/concepts/matestack/ui/core/{absolute/absolute.haml → map/map.haml} +1 -1
  111. data/app/concepts/matestack/ui/core/map/map.rb +11 -0
  112. data/app/concepts/matestack/ui/core/mark/mark.haml +5 -0
  113. data/app/concepts/matestack/ui/core/mark/mark.rb +4 -0
  114. data/app/concepts/matestack/ui/core/meter/meter.haml +4 -0
  115. data/app/concepts/matestack/ui/core/meter/meter.rb +14 -0
  116. data/app/concepts/matestack/ui/core/noscript/noscript.haml +5 -0
  117. data/app/concepts/matestack/ui/core/noscript/noscript.rb +5 -0
  118. data/app/concepts/matestack/ui/core/object/object.haml +1 -0
  119. data/app/concepts/matestack/ui/core/object/object.rb +15 -0
  120. data/app/concepts/matestack/ui/core/onclick/onclick.js +2 -3
  121. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -0
  122. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +3 -0
  123. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +10 -0
  124. data/app/concepts/matestack/ui/core/option/option.haml +5 -0
  125. data/app/concepts/matestack/ui/core/option/option.rb +12 -0
  126. data/app/concepts/matestack/ui/core/output/output.haml +5 -0
  127. data/app/concepts/matestack/ui/core/output/output.rb +11 -0
  128. data/app/concepts/matestack/ui/core/page/{content.js → content/content.js} +8 -2
  129. data/app/concepts/matestack/ui/core/page/content/content.rb +29 -0
  130. data/app/concepts/matestack/ui/core/page/page.haml +3 -9
  131. data/app/concepts/matestack/ui/core/page/page.rb +15 -160
  132. data/app/concepts/matestack/ui/core/param/param.haml +1 -0
  133. data/app/concepts/matestack/ui/core/param/param.rb +10 -0
  134. data/app/concepts/matestack/ui/core/picture/picture.haml +3 -0
  135. data/app/concepts/matestack/ui/core/picture/picture.rb +4 -0
  136. data/app/concepts/matestack/ui/core/plain/plain.rb +1 -1
  137. data/app/concepts/matestack/ui/core/pre/pre.haml +5 -0
  138. data/app/concepts/matestack/ui/core/pre/pre.rb +5 -0
  139. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -1
  140. data/app/concepts/matestack/ui/core/q/q.haml +5 -0
  141. data/app/concepts/matestack/ui/core/q/q.rb +11 -0
  142. data/app/concepts/matestack/ui/core/rp/rp.haml +5 -0
  143. data/app/concepts/matestack/ui/core/rp/rp.rb +5 -0
  144. data/app/concepts/matestack/ui/core/rt/rt.haml +5 -0
  145. data/app/concepts/matestack/ui/core/rt/rt.rb +5 -0
  146. data/app/concepts/matestack/ui/core/ruby/ruby.haml +5 -0
  147. data/app/concepts/matestack/ui/core/ruby/ruby.rb +5 -0
  148. data/app/concepts/matestack/ui/core/s/s.haml +5 -0
  149. data/app/concepts/matestack/ui/core/s/s.rb +6 -0
  150. data/app/concepts/matestack/ui/core/samp/samp.haml +5 -0
  151. data/app/concepts/matestack/ui/core/samp/samp.rb +4 -0
  152. data/app/concepts/matestack/ui/core/slot/slot.rb +2 -2
  153. data/app/concepts/matestack/ui/core/sup/sup.haml +5 -0
  154. data/app/concepts/matestack/ui/core/sup/sup.rb +5 -0
  155. data/app/concepts/matestack/ui/core/template/template.haml +3 -0
  156. data/app/concepts/matestack/ui/core/template/template.rb +4 -0
  157. data/app/concepts/matestack/ui/core/textarea/textarea.haml +2 -0
  158. data/app/concepts/matestack/ui/core/textarea/textarea.rb +10 -0
  159. data/app/concepts/matestack/ui/core/toggle/toggle.haml +2 -0
  160. data/app/concepts/matestack/ui/core/toggle/toggle.js +71 -0
  161. data/app/concepts/matestack/ui/core/toggle/toggle.rb +14 -0
  162. data/app/concepts/matestack/ui/core/transition/transition.js +18 -2
  163. data/app/concepts/matestack/ui/core/transition/transition.rb +2 -1
  164. data/app/concepts/matestack/ui/core/u/u.haml +5 -0
  165. data/app/concepts/matestack/ui/core/u/u.rb +6 -0
  166. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +7 -0
  167. data/app/concepts/matestack/ui/core/var/var.haml +5 -0
  168. data/app/concepts/matestack/ui/core/var/var.rb +4 -0
  169. data/app/concepts/matestack/ui/core/video/video.haml +3 -1
  170. data/app/concepts/matestack/ui/core/video/video.rb +17 -1
  171. data/app/concepts/matestack/ui/core/view/view.haml +1 -2
  172. data/app/concepts/matestack/ui/core/view/view.rb +27 -2
  173. data/app/concepts/matestack/ui/core/wbr/wbr.haml +1 -0
  174. data/app/concepts/matestack/ui/core/wbr/wbr.rb +4 -0
  175. data/app/concepts/matestack/ui/core/youtube/youtube.rb +1 -1
  176. data/app/helpers/matestack/ui/core/application_helper.rb +89 -17
  177. data/app/javascript/matestack-ui-core/index.js +22 -0
  178. data/app/javascript/matestack-ui-core/styles/index.scss +5 -0
  179. data/app/javascript/packs/matestack-ui-core.js +8 -0
  180. data/app/lib/matestack/ui/component.rb +1 -0
  181. data/app/lib/matestack/ui/core/has_view_context.rb +14 -0
  182. data/app/lib/matestack/ui/core/html_attributes.rb +43 -0
  183. data/app/lib/matestack/ui/core/properties.rb +88 -0
  184. data/app/lib/matestack/ui/core/rendering/default_renderer_class_determiner.rb +33 -0
  185. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +199 -0
  186. data/app/lib/matestack/ui/dynamic_actionview_component.rb +1 -0
  187. data/app/lib/matestack/ui/isolated_component.rb +1 -0
  188. data/app/lib/matestack/ui/static_actionview_component.rb +1 -0
  189. data/app/lib/matestack/ui/vue_js_component.rb +1 -0
  190. data/config/routes.rb +0 -1
  191. data/lib/generators/matestack/app/USAGE +21 -0
  192. data/lib/generators/matestack/app/app_generator.rb +25 -0
  193. data/lib/generators/{matestack_app/templates/matestack_app_controller.erb → matestack/app/templates/app/controllers/%file_name%_controller.rb.tt} +0 -2
  194. data/lib/generators/matestack/app/templates/app/matestack/apps/%file_name%.rb.tt +28 -0
  195. data/lib/generators/matestack/component/USAGE +20 -0
  196. data/lib/generators/matestack/component/component_generator.rb +29 -0
  197. data/lib/generators/{matestack_component/templates/matestack_component.haml.erb → matestack/component/templates/app/matestack/components/%namespace%/%file_name%.haml.tt} +0 -0
  198. data/lib/generators/{matestack_component/templates/matestack_component.js.erb → matestack/component/templates/app/matestack/components/%namespace%/%file_name%.js.tt} +2 -2
  199. data/lib/generators/matestack/component/templates/app/matestack/components/%namespace%/%file_name%.rb.tt +11 -0
  200. data/lib/generators/{matestack_component/templates/matestack_component.scss.erb → matestack/component/templates/app/matestack/components/%namespace%/%file_name%.scss.tt} +0 -0
  201. data/lib/generators/matestack/core/component/USAGE +16 -0
  202. data/lib/generators/matestack/core/component/component_generator.rb +23 -0
  203. data/lib/generators/matestack/core/component/templates/app/concepts/matestack/ui/core/%file_name%/%file_name%.haml.tt +5 -0
  204. data/lib/generators/matestack/core/component/templates/app/concepts/matestack/ui/core/%file_name%/%file_name%.rb.tt +4 -0
  205. data/lib/generators/matestack/core/component/templates/docs/components/%file_name%.md.tt +45 -0
  206. data/lib/generators/matestack/core/component/templates/spec/usage/components/%file_name%_spec.rb +31 -0
  207. data/lib/generators/matestack/page/USAGE +28 -0
  208. data/lib/generators/matestack/page/page_generator.rb +54 -0
  209. data/lib/generators/matestack/page/templates/app/matestack/pages/%app_name%/%namespace%/%file_name%.rb.tt +29 -0
  210. data/lib/matestack/ui/core.rb +5 -2
  211. data/lib/matestack/ui/core/cell.rb +31 -0
  212. data/lib/matestack/ui/core/component/registry.rb +47 -0
  213. data/lib/matestack/ui/core/components.rb +267 -0
  214. data/lib/matestack/ui/core/dsl.rb +6 -0
  215. data/lib/matestack/ui/core/engine.rb +16 -0
  216. data/lib/matestack/ui/core/version.rb +1 -1
  217. data/vendor/assets/javascripts/dist/manifest.json +18 -0
  218. data/vendor/assets/javascripts/dist/manifest.json.br +0 -0
  219. data/vendor/assets/javascripts/dist/manifest.json.gz +0 -0
  220. data/vendor/assets/javascripts/dist/matestack-ui-core.css +3 -0
  221. data/vendor/assets/javascripts/dist/matestack-ui-core.css.map +1 -0
  222. data/vendor/assets/javascripts/dist/matestack-ui-core.js +17060 -0
  223. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -0
  224. data/vendor/assets/javascripts/dist/matestack-ui-core.min.css +0 -0
  225. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +3 -0
  226. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.LICENSE.txt +18 -0
  227. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  228. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -0
  229. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  230. data/vendor/assets/javascripts/matestack-ui-core.js.erb +2 -0
  231. data/vendor/assets/stylesheets/dist +1 -0
  232. data/vendor/assets/stylesheets/matestack-ui-core.css.erb +2 -0
  233. metadata +188 -89
  234. data/MIT-LICENSE +0 -20
  235. data/app/concepts/matestack/ui/core/absolute/absolute.rb +0 -17
  236. data/app/concepts/matestack/ui/core/component/response.haml +0 -2
  237. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +0 -3
  238. data/app/concepts/matestack/ui/core/form/inline/inline.haml +0 -6
  239. data/app/concepts/matestack/ui/core/form/inline/inline.rb +0 -9
  240. data/app/concepts/matestack/ui/core/form/input/input.haml +0 -27
  241. data/app/concepts/matestack/ui/core/html/html.haml +0 -3
  242. data/app/concepts/matestack/ui/core/html/html.js +0 -10
  243. data/app/concepts/matestack/ui/core/html/html.rb +0 -17
  244. data/app/concepts/matestack/ui/core/isolate/isolate.haml +0 -2
  245. data/app/concepts/matestack/ui/core/isolate/isolate.rb +0 -11
  246. data/app/concepts/matestack/ui/core/page/content.haml +0 -7
  247. data/app/concepts/matestack/ui/core/page/content.rb +0 -5
  248. data/app/concepts/matestack/ui/core/pg/pg.rb +0 -5
  249. data/app/concepts/matestack/ui/core/view/view.js +0 -42
  250. data/app/lib/matestack/ui/core/app_node.rb +0 -53
  251. data/app/lib/matestack/ui/core/component_node.rb +0 -73
  252. data/app/lib/matestack/ui/core/page_node.rb +0 -96
  253. data/app/lib/matestack/ui/core/to_cell.rb +0 -129
  254. data/lib/generators/matestack_app/USAGE +0 -21
  255. data/lib/generators/matestack_app/matestack_app_generator.rb +0 -26
  256. data/lib/generators/matestack_app/templates/matestack_app.erb +0 -26
  257. data/lib/generators/matestack_component/USAGE +0 -20
  258. data/lib/generators/matestack_component/matestack_component_generator.rb +0 -30
  259. data/lib/generators/matestack_component/templates/matestack_component.rb.erb +0 -13
  260. data/lib/generators/matestack_page/USAGE +0 -28
  261. data/lib/generators/matestack_page/matestack_page_generator.rb +0 -41
  262. data/lib/generators/matestack_page/templates/matestack_page.erb +0 -15
  263. data/vendor/assets/javascripts/manifest.json +0 -4
  264. data/vendor/assets/javascripts/matestack-ui-core.js +0 -15309
  265. data/vendor/assets/javascripts/matestack-ui-core.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ %legend{@tag_attributes}
2
+ - if options[:text].nil? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Legend
2
+ class Legend < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -1,15 +1,16 @@
1
1
  module Matestack::Ui::Core::Link
2
2
  class Link < Matestack::Ui::Core::Component::Static
3
3
 
4
- REQUIRED_KEYS = [:path]
4
+ requires :path
5
5
 
6
6
  def setup
7
7
  @tag_attributes.merge!({
8
- "class": options[:class],
9
- "id": component_id,
10
- "method": options[:method],
11
- "target": options[:target] ||= nil,
12
- "href": link_path
8
+ class: options[:class],
9
+ id: component_id,
10
+ method: options[:method],
11
+ target: options[:target] ||= nil,
12
+ href: link_path,
13
+ title: options[:title]
13
14
  })
14
15
  end
15
16
 
@@ -1,3 +1,3 @@
1
- %div{@tag_attributes}
1
+ %map{@tag_attributes}
2
2
  - if block_given?
3
3
  = yield
@@ -0,0 +1,11 @@
1
+ module Matestack::Ui::Core::Map
2
+ class Map < Matestack::Ui::Core::Component::Static
3
+ requires :name
4
+
5
+ def setup
6
+ @tag_attributes.merge!({
7
+ name: options[:name]
8
+ })
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ %mark{@tag_attributes}
2
+ - if options[:text].blank? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,4 @@
1
+ module Matestack::Ui::Core::Mark
2
+ class Mark < Matestack::Ui::Core::Component::Static
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ %meter{@tag_attributes}
2
+ - if block_given?
3
+ = yield
4
+
@@ -0,0 +1,14 @@
1
+ module Matestack::Ui::Core::Meter
2
+ class Meter < Matestack::Ui::Core::Component::Static
3
+ def setup
4
+ @tag_attributes.merge!({
5
+ value: options[:value],
6
+ min: options[:min],
7
+ max: options[:max],
8
+ low: options[:low],
9
+ high: options[:high],
10
+ optimum: options[:optimum]
11
+ })
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ %noscript{@tag_attributes}
2
+ - if options[:text].nil? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Noscript
2
+ class Noscript < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ %object{@tag_attributes}
@@ -0,0 +1,15 @@
1
+ module Matestack::Ui::Core::Object
2
+ class Object < Matestack::Ui::Core::Component::Static
3
+ def setup
4
+ @tag_attributes.merge!({
5
+ width: options[:width],
6
+ height: options[:height],
7
+ data: options[:data],
8
+ form: options[:form],
9
+ name: options[:name],
10
+ type: options[:type],
11
+ usemap: options[:usemap]
12
+ })
13
+ end
14
+ end
15
+ end
@@ -1,8 +1,7 @@
1
1
  import Vue from 'vue/dist/vue.esm'
2
2
 
3
- import matestackEventHub from 'js/event-hub'
4
-
5
- import componentMixin from 'component/component'
3
+ import matestackEventHub from '../js/event-hub'
4
+ import componentMixin from '../component/component'
6
5
 
7
6
  const componentDef = {
8
7
  mixins: [componentMixin],
@@ -1,5 +1,6 @@
1
1
  module Matestack::Ui::Core::Onclick
2
2
  class Onclick < Matestack::Ui::Core::Component::Dynamic
3
+ vue_js_component_name "matestack-ui-core-onclick"
3
4
 
4
5
  end
5
6
  end
@@ -0,0 +1,3 @@
1
+ %optgroup{@tag_attributes}
2
+ - if block_given?
3
+ = yield
@@ -0,0 +1,10 @@
1
+ module Matestack::Ui::Core::Optgroup
2
+ class Optgroup < Matestack::Ui::Core::Component::Static
3
+ def setup
4
+ @tag_attributes.merge!(
5
+ disabled: options[:disabled] ||= nil,
6
+ label: options[:label]
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ %option{@tag_attributes}
2
+ - if options[:text].blank? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,12 @@
1
+ module Matestack::Ui::Core::Option
2
+ class Option < Matestack::Ui::Core::Component::Static
3
+ def setup
4
+ @tag_attributes.merge!(
5
+ disabled: options[:disabled] ||= nil,
6
+ selected: options[:selected] ||= nil,
7
+ label: options[:label],
8
+ value: options[:value]
9
+ )
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ %output{@tag_attributes}
2
+ - if options[:text].blank? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,11 @@
1
+ module Matestack::Ui::Core::Output
2
+ class Output < Matestack::Ui::Core::Component::Static
3
+ def setup
4
+ @tag_attributes.merge!(
5
+ name: options[:name],
6
+ for: options[:for],
7
+ form: options[:form]
8
+ )
9
+ end
10
+ end
11
+ end
@@ -1,6 +1,8 @@
1
1
  import Vue from 'vue/dist/vue.esm'
2
2
  import Vuex from 'vuex'
3
- import componentMixin from 'component/component'
3
+ import componentMixin from '../../component/component'
4
+
5
+ import VRuntimeTemplate from "v-runtime-template"
4
6
 
5
7
  const componentDef = {
6
8
  mixins: [componentMixin],
@@ -9,7 +11,11 @@ const componentDef = {
9
11
  },
10
12
  computed: Vuex.mapState({
11
13
  asyncPageTemplate: state => state.pageTemplate,
12
- })
14
+ loading: state => state.pageLoading
15
+ }),
16
+ components: {
17
+ VRuntimeTemplate: VRuntimeTemplate
18
+ }
13
19
  }
14
20
 
15
21
  let component = Vue.component('matestack-ui-core-page-content', componentDef)
@@ -0,0 +1,29 @@
1
+ module Matestack::Ui::Core::Page::Content
2
+ class Content < Matestack::Ui::Core::Component::Dynamic
3
+
4
+ vue_js_component_name "matestack-ui-core-page-content"
5
+
6
+ def response
7
+ div class: "matestack-page-container", attributes: loading_classes do
8
+ if options[:slots] && options[:slots][:loading_state]
9
+ div class: "loading-state-element-wrapper", attributes: loading_classes do
10
+ slot options[:slots][:loading_state]
11
+ end
12
+ end
13
+ div class: "matestack-page-wrapper", attributes: loading_classes do
14
+ div attributes: { "v-if": "asyncPageTemplate == null" } do
15
+ yield_components
16
+ end
17
+ div attributes: { "v-if": "asyncPageTemplate != null" } do
18
+ plain content_tag("v-runtime-template", nil, ":template": "asyncPageTemplate")
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ def loading_classes
25
+ { "v-bind:class": "{ 'loading': loading === true }" }
26
+ end
27
+
28
+ end
29
+ end
@@ -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,175 +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 ::Cell::Haml
6
- include Matestack::Ui::Core::ApplicationHelper
7
- include Matestack::Ui::Core::ToCell
8
6
 
9
- view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
10
-
11
- extend ViewName::Flat
12
-
13
- def self.prefixes
14
- _prefixes = super
15
- modified_prefixes = _prefixes.map do |prefix|
16
- prefix_parts = prefix.split("/")
17
-
18
- if prefix_parts.last.include?(self.name.split("::")[-1].downcase)
19
- prefix_parts[0..-2].join("/")
20
- else
21
- prefix
22
- end
23
-
24
- end
25
-
26
- return modified_prefixes + _prefixes
27
- end
28
-
29
- def self.views_dir
30
- return ""
31
- end
32
-
33
- def initialize(model=nil, options={})
34
- super
35
- generate_page_name
36
- set_app_class
37
- @nodes = {}
38
- @cells = {}
39
- options[:controller_instance].instance_variables.each do |controller_instance_var_key|
40
- unless controller_instance_var_key.to_s.start_with?("@_")
41
- self.instance_variable_set(controller_instance_var_key, options[:controller_instance].instance_variable_get(controller_instance_var_key))
42
- end
43
- end
44
- end
45
-
46
- def prepare
47
- true
48
- end
49
-
50
- def components(&block)
51
- @nodes = Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
52
- end
53
-
54
- def nodes_to_cell
55
- @nodes.each do |key, node|
56
- @cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
57
- end
58
- end
59
-
60
- def partial(&block)
61
- return block
7
+ def initialize(options = {})
8
+ super(nil, options)
9
+ copy_controller_instance_variables(options.fetch(:controller_instance))
62
10
  end
63
11
 
64
- def slot(&block)
65
- Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
66
- end
67
-
68
- def isolate(&block)
69
- return block
70
- end
71
-
72
-
73
- def show(component_key=nil, only_page=false)
74
- prepare
75
- return resolve_isolated_component(component_key) if !component_key.nil? && component_key.include?("isolate")
76
-
77
- response
78
-
79
- render_mode = nil
80
- render_mode = :only_page if only_page == true
81
- render_mode = :render_page_with_app if !@app_class.nil? && only_page == false
82
- render_mode = :only_page if @app_class.nil? && only_page == false
83
- render_mode = :render_component if !component_key.nil?
84
-
85
- case render_mode
86
-
87
- when :only_page
88
- nodes_to_cell
89
- render :page
90
- when :render_page_with_app
91
- concept(@app_class).call(:show, @page_id, @nodes)
92
- when :render_component
93
- begin
94
- if component_key.include?("__")
95
- keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
96
- page_content_keys = keys_array.select{|key| key.match(/^page_content_/)}
97
- if page_content_keys.any?
98
- keys_array = keys_array.drop(keys_array.find_index(page_content_keys[0])+2)
99
- end
100
- node = @nodes.dig(*keys_array)
101
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
102
- return cell.render_content
103
- else
104
- node = @nodes[component_key]
105
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
106
- return cell.render_content
107
- end
108
- rescue
109
- raise "Component '#{component_key}' could not be resolved. Notice: Rerendering currently works only on page-level. \
110
- You are therefore currently not able to use 'async' within a component for example!"
111
- end
112
- end
113
- end
114
-
115
- def page_id
116
- @custom_page_id ||= @page_id
12
+ def show
13
+ render :page
117
14
  end
118
15
 
119
16
  private
120
17
 
121
- def resolve_isolated_component component_key
122
- keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
123
- isolate_keys = keys_array.select{|key| key.match(/^isolate_/)}
124
- keys_array = keys_array.drop(keys_array.find_index(isolate_keys[0])+2)
125
- isolated_scope_method = keys_array[0]
126
- if isolated_scope_method.include?("(")
127
- isolated_scope_method_name = isolated_scope_method.split("(").first
128
- isolated_scope_method_argument = isolated_scope_method.split("(").last.split(")").first
129
- isolated_scope_method_argument = JSON.parse(isolated_scope_method_argument)
130
- isolated_block = self.send(isolated_scope_method_name, isolated_scope_method_argument.with_indifferent_access)
131
- else
132
- isolated_block = self.send(isolated_scope_method)
133
- end
134
- nodes = Matestack::Ui::Core::PageNode.build(
135
- self, nil, context[:params], &isolated_block
136
- )
137
- node = nodes.dig(*keys_array.drop(2))
138
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
139
- return cell.render_content
140
- end
141
-
142
- def generate_page_name
143
- name_parts = self.class.name.split("::").map { |name| name.underscore }
144
- @page_id = name_parts.join("_")
145
- end
146
-
147
- def set_app_class
148
- class_name = self.class.name
149
- name_parts = class_name.split("::")
150
- if name_parts.count <= 2
151
- @app_class = nil
152
- return
153
- end
154
-
155
- app_name = "#{name_parts[1]}"
156
- begin
157
- app_class = Apps.const_get(app_name)
158
- if app_class.is_a?(Class)
159
- @app_class = app_class
160
- else
161
- require_dependency "apps/#{app_name.underscore}"
162
- app_class = Apps.const_get(app_name)
163
- if app_class.is_a?(Class)
164
- @app_class = app_class
165
- else
166
- @app_class = nil
167
- 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))
168
26
  end
169
- rescue
170
- @app_class = nil
171
27
  end
172
28
  end
173
-
174
29
  end
175
30
  end