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
@@ -2,7 +2,10 @@ module Matestack::Ui::Core::Form::Submit
2
2
  class Submit < Matestack::Ui::Core::Component::Static
3
3
 
4
4
  def setup
5
- @tag_attributes.merge!({ "@click.prevent": "perform" })
5
+ @tag_attributes.merge!({
6
+ "@click.prevent": "perform",
7
+ "v-bind:class": "{ 'loading': loading }"
8
+ })
6
9
  end
7
10
 
8
11
  end
@@ -0,0 +1,28 @@
1
+ require_relative '../utils'
2
+ require_relative '../has_errors'
3
+ module Matestack::Ui::Core::Form::Textarea
4
+ class Textarea < Matestack::Ui::Core::Textarea::Textarea
5
+ include Matestack::Ui::Core::Form::Utils
6
+ include Matestack::Ui::Core::Form::HasErrors
7
+
8
+ requires :key
9
+ optional :multiple, :init, for: { as: :input_for }, label: { as: :input_label }
10
+
11
+ def response
12
+ label text: input_label if input_label
13
+ textarea html_attributes.merge(attributes: vue_attributes)
14
+ render_errors
15
+ end
16
+
17
+ def vue_attributes
18
+ (options[:attributes] || {}).merge({
19
+ 'v-model': input_key,
20
+ '@change': "inputChanged('#{attr_key}')",
21
+ 'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
22
+ "init-value": init_value,
23
+ ref: "input.#{attr_key}",
24
+ })
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,47 @@
1
+ module Matestack::Ui::Core::Form::Utils
2
+
3
+ def input_key
4
+ "data['#{attr_key.to_s}']"
5
+ end
6
+
7
+ def input_wrapper
8
+ case input_for
9
+ when nil
10
+ return nil
11
+ when Symbol, String
12
+ return input_for
13
+ end
14
+ if input_for.respond_to?(:model_name)
15
+ return input_for.model_name.singular
16
+ end
17
+ end
18
+
19
+ def attr_key
20
+ if input_wrapper.nil?
21
+ return "#{key.to_s}"
22
+ else
23
+ return "#{input_wrapper}.#{key.to_s}"
24
+ end
25
+ end
26
+
27
+ def init_value
28
+ return init unless init.nil?
29
+
30
+ unless input_for.nil?
31
+ value = parse_value(input_for.send key)
32
+ else
33
+ unless @included_config.nil? && @included_config[:for].nil?
34
+ if @included_config[:for].respond_to?(key)
35
+ value = parse_value(@included_config[:for].send key)
36
+ else
37
+ @included_config[:for][key] if @included_config[:for].is_a?(Hash)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def parse_value(value)
44
+ value
45
+ end
46
+
47
+ end
@@ -1,5 +1,7 @@
1
1
  module Matestack::Ui::Core::Heading
2
2
  class Heading < Matestack::Ui::Core::Component::Static
3
3
 
4
+ attr_reader :argument, :options
5
+
4
6
  end
5
7
  end
@@ -0,0 +1,5 @@
1
+ %iframe{@tag_attributes}
2
+ - if options[:text].nil? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,14 @@
1
+ module Matestack::Ui::Core::Iframe
2
+ class Iframe < Matestack::Ui::Core::Component::Static
3
+
4
+ def setup
5
+ @tag_attributes.merge!({
6
+ src: options[:src],
7
+ height: options[:height],
8
+ width: options[:width],
9
+ srcdoc: options[:srcdoc]
10
+ })
11
+ end
12
+
13
+ end
14
+ end
@@ -6,6 +6,7 @@ module Matestack::Ui::Core::Img
6
6
  src: ActionController::Base.helpers.asset_path(options[:path]),
7
7
  height: options[:height],
8
8
  width: options[:width],
9
+ usemap: options[:usemap],
9
10
  alt: options[:alt]
10
11
  })
11
12
  end
@@ -1,3 +1 @@
1
- %input{@tag_attributes}
2
- - if block_given?
3
- = yield
1
+ %input{ html_attributes }
@@ -1,5 +1,13 @@
1
1
  module Matestack::Ui::Core::Input
2
2
  class Input < Matestack::Ui::Core::Component::Static
3
+
4
+ html_attributes :accept, :alt, :autocomplete, :autofocus, :checked, :dirname, :disabled, :form, :formaction,
5
+ :formenctype, :formmethod, :formnovalidate, :formtarget, :height, :list, :max, :maxlength, :min, :minlength,
6
+ :multiple, :name, :pattern, :placeholder, :readonly, :required, :size, :src, :step, :type, :value, :width
7
+
8
+ def type
9
+ options[:type]
10
+ end
3
11
 
4
12
  end
5
13
  end
@@ -0,0 +1,5 @@
1
+ %ins{@tag_attributes}
2
+ - if options[:text].nil? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,10 @@
1
+ module Matestack::Ui::Core::Ins
2
+ class Ins < Matestack::Ui::Core::Component::Static
3
+ def setup
4
+ @tag_attributes.merge!({
5
+ cite: options[:cite],
6
+ datetime: options[:datetime]
7
+ })
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ %div{@tag_attributes.merge(class: "matestack-isolated-component-root")}
2
+ =yield
@@ -0,0 +1,10 @@
1
+ %component{dynamic_tag_attributes}
2
+ %div{loading_classes.merge(class: "matestack-isolated-component-container")}
3
+ - if loading_state_element.present?
4
+ %div{loading_classes.merge(class: "loading-state-element-wrapper")}
5
+ =loading_state_element
6
+ - unless options[:defer] || options[:init_on]
7
+ %div{class: "matestack-isolated-component-wrapper", "v-if": "isolatedTemplate == null", "v-bind:class": "{ 'loading': loading === true }"}
8
+ = render_isolated_content
9
+ %div{class: "matestack-isolated-component-wrapper", "v-if": "isolatedTemplate != null", "v-bind:class": "{ 'loading': loading === true }"}
10
+ %v-runtime-template{":template":"isolatedTemplate"}
@@ -0,0 +1,108 @@
1
+ import Vue from 'vue/dist/vue.esm'
2
+ import axios from 'axios'
3
+ import VRuntimeTemplate from "v-runtime-template"
4
+ import matestackEventHub from '../js/event-hub'
5
+
6
+ const componentDef = {
7
+ props: ['componentConfig', 'params'],
8
+ data: function(){
9
+ return {
10
+ isolatedTemplate: null,
11
+ loading: false,
12
+ loadingError: false
13
+ }
14
+ },
15
+ methods: {
16
+ rerender: function(){
17
+ var self = this;
18
+ self.loading = true;
19
+ self.loadingError = false;
20
+ if(self.componentConfig["rerender_delay"] != undefined){
21
+ setTimeout(function () {
22
+ self.renderIsolatedContent();
23
+ }, parseInt(this.componentConfig["rerender_delay"]));
24
+ } else {
25
+ self.renderIsolatedContent();
26
+ }
27
+ },
28
+ renderIsolatedContent: function(){
29
+ var self = this;
30
+ self.loading = true;
31
+ self.loadingError = false;
32
+ axios({
33
+ method: "get",
34
+ url: location.pathname + location.search,
35
+ headers: {
36
+ 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
37
+ },
38
+ params: {
39
+ "component_class": self.componentConfig["component_class"],
40
+ "public_options": self.componentConfig["public_options"]
41
+ }
42
+ })
43
+ .then(function(response){
44
+ self.loading = false;
45
+ self.loadingStart = false;
46
+ self.loadingEnd = true;
47
+ self.isolatedTemplate = response['data'];
48
+ })
49
+ .catch(function(error){
50
+ self.loadingError = true;
51
+ matestackEventHub.$emit('isolate_rerender_error', { class: self.componentConfig["component_class"] })
52
+ })
53
+ },
54
+ startDefer: function(){
55
+ const self = this
56
+ self.loading = true;
57
+ setTimeout(function () {
58
+ self.renderIsolatedContent()
59
+ }, parseInt(this.componentConfig["defer"]));
60
+ }
61
+ },
62
+ created: function () {
63
+ const self = this
64
+ },
65
+ beforeDestroy: function() {
66
+ const self = this
67
+ if(this.componentConfig["rerender_on"] != undefined){
68
+ var rerender_events = this.componentConfig["rerender_on"].split(",")
69
+ rerender_events.forEach(rerender_event => matestackEventHub.$off(rerender_event.trim(), self.renderIsolatedContent));
70
+ }
71
+ },
72
+ mounted: function (){
73
+ const self = this
74
+ if(this.componentConfig["init_on"] === undefined || this.componentConfig["init_on"] === null){
75
+ if(self.componentConfig["defer"] == true || Number.isInteger(self.componentConfig["defer"])){
76
+ if(!isNaN(self.componentConfig["defer"])){
77
+ self.startDefer()
78
+ }
79
+ else{
80
+ self.renderIsolatedContent();
81
+ }
82
+ }
83
+ }else{
84
+ if(self.componentConfig["defer"] != undefined){
85
+ if(!isNaN(self.componentConfig["defer"])){
86
+ var init_on_events = this.componentConfig["init_on"].split(",")
87
+ init_on_events.forEach(init_on_event => matestackEventHub.$on(init_on_event.trim(), self.startDefer));
88
+ }
89
+ }else{
90
+ var init_on_events = this.componentConfig["init_on"].split(",")
91
+ init_on_events.forEach(init_on_event => matestackEventHub.$on(init_on_event.trim(), self.renderIsolatedContent));
92
+ }
93
+ }
94
+
95
+ if(this.componentConfig["rerender_on"] != undefined){
96
+ var rerender_events = this.componentConfig["rerender_on"].split(",")
97
+ rerender_events.forEach(rerender_event => matestackEventHub.$on(rerender_event.trim(), self.rerender));
98
+ }
99
+
100
+ },
101
+ components: {
102
+ VRuntimeTemplate: VRuntimeTemplate
103
+ }
104
+ }
105
+
106
+ let component = Vue.component('matestack-ui-core-isolate', componentDef)
107
+
108
+ export default componentDef
@@ -0,0 +1,59 @@
1
+ module Matestack::Ui::Core::Isolated
2
+ class Isolated < Matestack::Ui::Core::Component::Dynamic
3
+ vue_js_component_name "matestack-ui-core-isolate"
4
+
5
+ def initialize(*args)
6
+ super
7
+ @public_options = args.map { |hash| hash[:public_options] }[0]
8
+ end
9
+
10
+ def public_options
11
+ @public_options ||= {}
12
+ end
13
+
14
+ # def params
15
+ # context[:params] || matestack_context[:params]
16
+ # end
17
+
18
+ def setup
19
+ @component_config[:component_class] = self.class.name
20
+ @component_config[:public_options] = @options[:public_options]
21
+ @component_config[:defer] = @options[:defer]
22
+ @component_config[:rerender_on] = @options[:rerender_on]
23
+ @component_config[:rerender_delay] = @options[:rerender_delay]
24
+ @component_config[:init_on] = @options[:init_on]
25
+ end
26
+
27
+ def loading_classes
28
+ { "v-bind:class": "{ 'loading': loading === true }" }
29
+ end
30
+
31
+ # overwrite parent class render mechanism in order to make sure to only render wrapper
32
+ def render_content
33
+ show
34
+ end
35
+
36
+ # only render vuejs component wrapper on show
37
+ def show
38
+ render :isolated
39
+ end
40
+
41
+ # this method gets called when the isolate vuejs component requests isolated content
42
+ def render_isolated_content
43
+ if authorized?
44
+ render :children_wrapper do
45
+ render :children
46
+ end
47
+ end
48
+ end
49
+
50
+ def authorized?
51
+ raise "please implement the `authorized? method: isolated components have to be authorized separately"
52
+ end
53
+
54
+ def loading_state_element
55
+ nil # overwrite in subclass
56
+ end
57
+
58
+ end
59
+ end
@@ -1,30 +1,54 @@
1
1
  import Vue from 'vue/dist/vue.esm'
2
+ import { turbolinksAdapterMixin } from 'vue-turbolinks';
2
3
 
3
- import app from 'app/app'
4
- import async from 'async/async'
5
- import pageContent from 'page/content'
6
- import store from 'app/store'
7
- import component from 'component/component'
8
- import anonymDynamicComponent from 'component/anonym-dynamic-component'
9
- import html from 'html/html'
10
- import transition from 'transition/transition'
11
- import action from 'action/action'
12
- import form from 'form/form'
13
- import view from 'view/view'
14
- import onclick from 'onclick/onclick'
15
- import collectionContent from 'collection/content/content'
16
- import collectionFilter from 'collection/filter/filter'
17
- import collectionOrder from 'collection/order/order'
4
+ // Import from app/concepts/matestack/ui/core:
5
+ import app from '../app/app'
6
+ import async from '../async/async'
7
+ import pageContent from '../page/content/content'
8
+ import toggle from '../toggle/toggle'
9
+ import store from '../app/store'
10
+ import component from '../component/component'
11
+ import anonymDynamicComponent from '../component/anonym-dynamic-component'
12
+ import transition from '../transition/transition'
13
+ import action from '../action/action'
14
+ import form from '../form/form'
15
+ import onclick from '../onclick/onclick'
16
+ import collectionContent from '../collection/content/content'
17
+ import collectionFilter from '../collection/filter/filter'
18
+ import collectionOrder from '../collection/order/order'
19
+ import isolate from '../isolated/isolated'
18
20
 
19
21
  let matestackUiApp = undefined
20
22
 
23
+ // this event fires first and always
21
24
  document.addEventListener('DOMContentLoaded', () => {
22
-
23
- matestackUiApp = new Vue({
24
- el: "#matestack_ui",
25
+ // somehow we need to inject the turbolinks mixin even
26
+ // if the turbolinks:load event will recreate the vue instance
27
+ // skipping the injection here caused errors when submitting forms or action
28
+ // if they were present on the first page, which was loaded and activated turbolinks
29
+ // the mixin does not impact the app when turbolinks is disabled
30
+ matestackUiApp = new Vue({
31
+ el: "#matestack-ui",
32
+ mixins: [turbolinksAdapterMixin],
25
33
  store: store
26
- })
34
+ })
35
+ })
27
36
 
37
+ // this event fires after DOMContentLoaded and only if turbolinks are enabled
38
+ document.addEventListener('turbolinks:load', () => {
39
+ // we need to empty the currently stored pageTemplate state variable
40
+ // otherwise the matestack page will jump back to the latest pageTemplate
41
+ // fetched during the last matestack transition as the turbolinks powered
42
+ // page transition does not write the matestack store pageTemplate state variable
43
+ store.commit('resetPageTemplate')
44
+ // we need to destroy the vue app instance
45
+ matestackUiApp.$destroy();
46
+ // and recreate it right afterwards in order to work when used with turbolinks
47
+ matestackUiApp = new Vue({
48
+ el: "#matestack-ui",
49
+ mixins: [turbolinksAdapterMixin],
50
+ store: store
51
+ })
28
52
  })
29
53
 
30
54
  export default Vue
@@ -0,0 +1,5 @@
1
+ %kbd{@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::Kbd
2
+ class Kbd < Matestack::Ui::Core::Component::Static
3
+ end
4
+ end
@@ -1,5 +1,10 @@
1
1
  module Matestack::Ui::Core::Label
2
2
  class Label < Matestack::Ui::Core::Component::Static
3
-
3
+ def setup
4
+ @tag_attributes.merge!({
5
+ for: options[:for],
6
+ form: options[:form]
7
+ })
8
+ end
4
9
  end
5
10
  end