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

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 (259) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +784 -18
  3. data/app/concepts/matestack/ui/core/abbr/abbr.haml +1 -1
  4. data/app/concepts/matestack/ui/core/abbr/abbr.rb +0 -8
  5. data/app/concepts/matestack/ui/core/action/action.haml +1 -1
  6. data/app/concepts/matestack/ui/core/actionview/dynamic.haml +4 -4
  7. data/app/concepts/matestack/ui/core/address/address.haml +2 -2
  8. data/app/concepts/matestack/ui/core/app/store.js +5 -1
  9. data/app/concepts/matestack/ui/core/area/area.haml +1 -1
  10. data/app/concepts/matestack/ui/core/area/area.rb +2 -16
  11. data/app/concepts/matestack/ui/core/article/article.haml +3 -3
  12. data/app/concepts/matestack/ui/core/article/article.rb +1 -1
  13. data/app/concepts/matestack/ui/core/aside/aside.haml +1 -1
  14. data/app/concepts/matestack/ui/core/aside/aside.rb +0 -1
  15. data/app/concepts/matestack/ui/core/async/async.js +6 -28
  16. data/app/concepts/matestack/ui/core/async/async.rb +11 -11
  17. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +1 -1
  18. data/app/concepts/matestack/ui/core/b/b.haml +3 -3
  19. data/app/concepts/matestack/ui/core/b/b.rb +1 -1
  20. data/app/concepts/matestack/ui/core/bdi/bdi.haml +3 -3
  21. data/app/concepts/matestack/ui/core/bdi/bdi.rb +1 -0
  22. data/app/concepts/matestack/ui/core/bdo/bdo.haml +3 -3
  23. data/app/concepts/matestack/ui/core/bdo/bdo.rb +2 -7
  24. data/app/concepts/matestack/ui/core/blockquote/blockquote.haml +3 -3
  25. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +2 -7
  26. data/app/concepts/matestack/ui/core/br/br.haml +4 -4
  27. data/app/concepts/matestack/ui/core/br/br.rb +1 -1
  28. data/app/concepts/matestack/ui/core/button/button.haml +3 -3
  29. data/app/concepts/matestack/ui/core/button/button.rb +3 -7
  30. data/app/concepts/matestack/ui/core/cable/cable.haml +4 -0
  31. data/app/concepts/matestack/ui/core/cable/cable.js +100 -0
  32. data/app/concepts/matestack/ui/core/cable/cable.rb +28 -0
  33. data/app/concepts/matestack/ui/core/cable/children_wrapper.haml +2 -0
  34. data/app/concepts/matestack/ui/core/caption/caption.haml +3 -3
  35. data/app/concepts/matestack/ui/core/caption/caption.rb +1 -1
  36. data/app/concepts/matestack/ui/core/cite/cite.haml +3 -3
  37. data/app/concepts/matestack/ui/core/cite/cite.rb +1 -1
  38. data/app/concepts/matestack/ui/core/code/code.haml +3 -3
  39. data/app/concepts/matestack/ui/core/code/code.rb +1 -1
  40. data/app/concepts/matestack/ui/core/collection/content/content.js +2 -2
  41. data/app/concepts/matestack/ui/core/collection/content/content.rb +4 -6
  42. data/app/concepts/matestack/ui/core/collection/content/next/next.haml +1 -1
  43. data/app/concepts/matestack/ui/core/collection/content/page/link/link.haml +1 -1
  44. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +1 -1
  45. data/app/concepts/matestack/ui/core/collection/content/previous/previous.haml +1 -1
  46. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +1 -1
  47. data/app/concepts/matestack/ui/core/collection/filter/input/input.rb +11 -8
  48. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.haml +1 -1
  49. data/app/concepts/matestack/ui/core/collection/filter/select/select.haml +6 -6
  50. data/app/concepts/matestack/ui/core/collection/filter/select/select.rb +10 -9
  51. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.haml +1 -1
  52. data/app/concepts/matestack/ui/core/collection/order/order.rb +1 -1
  53. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +5 -2
  54. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.haml +1 -1
  55. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.rb +0 -1
  56. data/app/concepts/matestack/ui/core/component/base.rb +10 -4
  57. data/app/concepts/matestack/ui/core/component/component.js +18 -1
  58. data/app/concepts/matestack/ui/core/component/dynamic.rb +2 -1
  59. data/app/concepts/matestack/ui/core/data/data.haml +3 -3
  60. data/app/concepts/matestack/ui/core/data/data.rb +2 -5
  61. data/app/concepts/matestack/ui/core/datalist/datalist.haml +2 -2
  62. data/app/concepts/matestack/ui/core/datalist/datalist.rb +1 -2
  63. data/app/concepts/matestack/ui/core/dd/dd.haml +3 -3
  64. data/app/concepts/matestack/ui/core/dd/dd.rb +1 -1
  65. data/app/concepts/matestack/ui/core/del/del.haml +3 -3
  66. data/app/concepts/matestack/ui/core/del/del.rb +2 -0
  67. data/app/concepts/matestack/ui/core/details/details.haml +1 -1
  68. data/app/concepts/matestack/ui/core/details/details.rb +1 -1
  69. data/app/concepts/matestack/ui/core/dfn/dfn.haml +3 -3
  70. data/app/concepts/matestack/ui/core/dfn/dfn.rb +1 -1
  71. data/app/concepts/matestack/ui/core/dialog/dialog.haml +3 -3
  72. data/app/concepts/matestack/ui/core/dialog/dialog.rb +2 -5
  73. data/app/concepts/matestack/ui/core/div/div.haml +1 -1
  74. data/app/concepts/matestack/ui/core/div/div.rb +0 -1
  75. data/app/concepts/matestack/ui/core/dl/dl.haml +3 -3
  76. data/app/concepts/matestack/ui/core/dl/dl.rb +2 -2
  77. data/app/concepts/matestack/ui/core/dt/dt.haml +3 -3
  78. data/app/concepts/matestack/ui/core/dt/dt.rb +1 -1
  79. data/app/concepts/matestack/ui/core/em/em.haml +3 -3
  80. data/app/concepts/matestack/ui/core/em/em.rb +1 -1
  81. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +4 -4
  82. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +3 -6
  83. data/app/concepts/matestack/ui/core/figure/figure.haml +1 -1
  84. data/app/concepts/matestack/ui/core/figure/figure.rb +0 -1
  85. data/app/concepts/matestack/ui/core/footer/footer.haml +1 -1
  86. data/app/concepts/matestack/ui/core/footer/footer.rb +0 -1
  87. data/app/concepts/matestack/ui/core/form/checkbox/base.rb +120 -0
  88. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.js +15 -0
  89. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +7 -70
  90. data/app/concepts/matestack/ui/core/form/checkbox/mixin.js +80 -0
  91. data/app/concepts/matestack/ui/core/form/form.haml +1 -1
  92. data/app/concepts/matestack/ui/core/form/form.js +15 -46
  93. data/app/concepts/matestack/ui/core/form/form.rb +34 -28
  94. data/app/concepts/matestack/ui/core/form/input/base.rb +75 -0
  95. data/app/concepts/matestack/ui/core/form/input/input.js +15 -0
  96. data/app/concepts/matestack/ui/core/form/input/input.rb +8 -52
  97. data/app/concepts/matestack/ui/core/form/input/mixin.js +55 -0
  98. data/app/concepts/matestack/ui/core/form/radio/base.rb +90 -0
  99. data/app/concepts/matestack/ui/core/form/radio/mixin.js +62 -0
  100. data/app/concepts/matestack/ui/core/form/radio/radio.js +15 -0
  101. data/app/concepts/matestack/ui/core/form/radio/radio.rb +7 -62
  102. data/app/concepts/matestack/ui/core/form/select/base.rb +98 -0
  103. data/app/concepts/matestack/ui/core/form/select/mixin.js +58 -0
  104. data/app/concepts/matestack/ui/core/form/select/select.js +15 -0
  105. data/app/concepts/matestack/ui/core/form/select/select.rb +11 -80
  106. data/app/concepts/matestack/ui/core/form/submit/base.rb +12 -0
  107. data/app/concepts/matestack/ui/core/form/submit/submit.js +19 -0
  108. data/app/concepts/matestack/ui/core/form/submit/submit.rb +9 -6
  109. data/app/concepts/matestack/ui/core/form/textarea/base.rb +49 -0
  110. data/app/concepts/matestack/ui/core/form/textarea/mixin.js +41 -0
  111. data/app/concepts/matestack/ui/core/form/textarea/textarea.js +15 -0
  112. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +10 -21
  113. data/app/concepts/matestack/ui/core/header/header.haml +1 -1
  114. data/app/concepts/matestack/ui/core/header/header.rb +0 -1
  115. data/app/concepts/matestack/ui/core/heading/heading.haml +4 -49
  116. data/app/concepts/matestack/ui/core/heading/heading.rb +1 -3
  117. data/app/concepts/matestack/ui/core/hr/hr.haml +1 -1
  118. data/app/concepts/matestack/ui/core/hr/hr.rb +0 -1
  119. data/app/concepts/matestack/ui/core/icon/icon.haml +3 -3
  120. data/app/concepts/matestack/ui/core/icon/icon.rb +1 -1
  121. data/app/concepts/matestack/ui/core/iframe/iframe.haml +3 -3
  122. data/app/concepts/matestack/ui/core/iframe/iframe.rb +3 -10
  123. data/app/concepts/matestack/ui/core/img/img.haml +1 -1
  124. data/app/concepts/matestack/ui/core/img/img.rb +8 -8
  125. data/app/concepts/matestack/ui/core/input/input.rb +0 -4
  126. data/app/concepts/matestack/ui/core/ins/ins.haml +3 -3
  127. data/app/concepts/matestack/ui/core/ins/ins.rb +2 -6
  128. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +1 -1
  129. data/app/concepts/matestack/ui/core/isolated/isolated.rb +1 -1
  130. data/app/concepts/matestack/ui/core/js/core.js +12 -0
  131. data/app/concepts/matestack/ui/core/kbd/kbd.haml +3 -3
  132. data/app/concepts/matestack/ui/core/kbd/kbd.rb +1 -0
  133. data/app/concepts/matestack/ui/core/label/label.haml +3 -3
  134. data/app/concepts/matestack/ui/core/label/label.rb +2 -6
  135. data/app/concepts/matestack/ui/core/legend/legend.haml +3 -3
  136. data/app/concepts/matestack/ui/core/legend/legend.rb +1 -1
  137. data/app/concepts/matestack/ui/core/li/li.haml +3 -3
  138. data/app/concepts/matestack/ui/core/li/li.rb +2 -1
  139. data/app/concepts/matestack/ui/core/link/link.haml +3 -3
  140. data/app/concepts/matestack/ui/core/link/link.rb +10 -14
  141. data/app/concepts/matestack/ui/core/main/main.haml +1 -1
  142. data/app/concepts/matestack/ui/core/main/main.rb +0 -1
  143. data/app/concepts/matestack/ui/core/map/map.haml +1 -1
  144. data/app/concepts/matestack/ui/core/map/map.rb +1 -7
  145. data/app/concepts/matestack/ui/core/mark/mark.haml +3 -3
  146. data/app/concepts/matestack/ui/core/mark/mark.rb +1 -0
  147. data/app/concepts/matestack/ui/core/meter/meter.haml +1 -1
  148. data/app/concepts/matestack/ui/core/meter/meter.rb +1 -10
  149. data/app/concepts/matestack/ui/core/nav/nav.haml +1 -1
  150. data/app/concepts/matestack/ui/core/nav/nav.rb +0 -1
  151. data/app/concepts/matestack/ui/core/noscript/noscript.haml +3 -3
  152. data/app/concepts/matestack/ui/core/noscript/noscript.rb +1 -1
  153. data/app/concepts/matestack/ui/core/object/object.haml +1 -1
  154. data/app/concepts/matestack/ui/core/object/object.rb +1 -11
  155. data/app/concepts/matestack/ui/core/ol/ol.haml +1 -1
  156. data/app/concepts/matestack/ui/core/ol/ol.rb +1 -1
  157. data/app/concepts/matestack/ui/core/onclick/onclick.haml +1 -1
  158. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +1 -1
  159. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +1 -6
  160. data/app/concepts/matestack/ui/core/option/option.haml +3 -3
  161. data/app/concepts/matestack/ui/core/option/option.rb +2 -8
  162. data/app/concepts/matestack/ui/core/output/output.haml +3 -3
  163. data/app/concepts/matestack/ui/core/output/output.rb +2 -7
  164. data/app/concepts/matestack/ui/core/page/content/content.rb +0 -1
  165. data/app/concepts/matestack/ui/core/page/page.haml +1 -1
  166. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +3 -3
  167. data/app/concepts/matestack/ui/core/paragraph/paragraph.rb +1 -1
  168. data/app/concepts/matestack/ui/core/param/param.haml +1 -1
  169. data/app/concepts/matestack/ui/core/param/param.rb +1 -6
  170. data/app/concepts/matestack/ui/core/partial/partial.rb +0 -1
  171. data/app/concepts/matestack/ui/core/picture/picture.haml +1 -1
  172. data/app/concepts/matestack/ui/core/pre/pre.haml +3 -3
  173. data/app/concepts/matestack/ui/core/pre/pre.rb +1 -1
  174. data/app/concepts/matestack/ui/core/progress/progress.haml +1 -1
  175. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -10
  176. data/app/concepts/matestack/ui/core/q/q.haml +3 -3
  177. data/app/concepts/matestack/ui/core/q/q.rb +2 -7
  178. data/app/concepts/matestack/ui/core/rp/rp.haml +3 -3
  179. data/app/concepts/matestack/ui/core/rp/rp.rb +1 -1
  180. data/app/concepts/matestack/ui/core/rt/rt.haml +3 -3
  181. data/app/concepts/matestack/ui/core/rt/rt.rb +1 -1
  182. data/app/concepts/matestack/ui/core/ruby/ruby.haml +3 -3
  183. data/app/concepts/matestack/ui/core/ruby/ruby.rb +1 -1
  184. data/app/concepts/matestack/ui/core/s/s.haml +3 -3
  185. data/app/concepts/matestack/ui/core/s/s.rb +1 -1
  186. data/app/concepts/matestack/ui/core/samp/samp.haml +3 -3
  187. data/app/concepts/matestack/ui/core/samp/samp.rb +1 -0
  188. data/app/concepts/matestack/ui/core/section/section.haml +1 -1
  189. data/app/concepts/matestack/ui/core/section/section.rb +0 -1
  190. data/app/concepts/matestack/ui/core/{form/submit/submit.haml → select/select.haml} +1 -1
  191. data/app/concepts/matestack/ui/core/select/select.rb +7 -0
  192. data/app/concepts/matestack/ui/core/slot/slot.rb +0 -1
  193. data/app/concepts/matestack/ui/core/small/small.haml +3 -3
  194. data/app/concepts/matestack/ui/core/small/small.rb +1 -1
  195. data/app/concepts/matestack/ui/core/span/span.haml +3 -3
  196. data/app/concepts/matestack/ui/core/span/span.rb +1 -1
  197. data/app/concepts/matestack/ui/core/strong/strong.haml +3 -3
  198. data/app/concepts/matestack/ui/core/strong/strong.rb +1 -1
  199. data/app/concepts/matestack/ui/core/sub/sub.haml +3 -3
  200. data/app/concepts/matestack/ui/core/sub/sub.rb +1 -1
  201. data/app/concepts/matestack/ui/core/summary/summary.haml +3 -3
  202. data/app/concepts/matestack/ui/core/summary/summary.rb +1 -1
  203. data/app/concepts/matestack/ui/core/sup/sup.haml +3 -3
  204. data/app/concepts/matestack/ui/core/sup/sup.rb +1 -1
  205. data/app/concepts/matestack/ui/core/table/table.haml +1 -1
  206. data/app/concepts/matestack/ui/core/table/table.rb +0 -1
  207. data/app/concepts/matestack/ui/core/tbody/tbody.haml +1 -1
  208. data/app/concepts/matestack/ui/core/tbody/tbody.rb +0 -1
  209. data/app/concepts/matestack/ui/core/td/td.haml +3 -3
  210. data/app/concepts/matestack/ui/core/td/td.rb +2 -1
  211. data/app/concepts/matestack/ui/core/template/template.haml +1 -1
  212. data/app/concepts/matestack/ui/core/textarea/textarea.haml +4 -1
  213. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +1 -1
  214. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +0 -1
  215. data/app/concepts/matestack/ui/core/th/th.haml +3 -3
  216. data/app/concepts/matestack/ui/core/th/th.rb +2 -1
  217. data/app/concepts/matestack/ui/core/thead/thead.haml +1 -1
  218. data/app/concepts/matestack/ui/core/thead/thead.rb +0 -1
  219. data/app/concepts/matestack/ui/core/time/time.haml +1 -1
  220. data/app/concepts/matestack/ui/core/time/time.rb +1 -7
  221. data/app/concepts/matestack/ui/core/toggle/toggle.haml +1 -1
  222. data/app/concepts/matestack/ui/core/toggle/toggle.rb +4 -5
  223. data/app/concepts/matestack/ui/core/tr/tr.haml +1 -1
  224. data/app/concepts/matestack/ui/core/tr/tr.rb +0 -1
  225. data/app/concepts/matestack/ui/core/transition/transition.haml +3 -3
  226. data/app/concepts/matestack/ui/core/transition/transition.rb +13 -7
  227. data/app/concepts/matestack/ui/core/u/u.haml +3 -3
  228. data/app/concepts/matestack/ui/core/u/u.rb +1 -1
  229. data/app/concepts/matestack/ui/core/ul/ul.haml +1 -1
  230. data/app/concepts/matestack/ui/core/ul/ul.rb +0 -1
  231. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +2 -0
  232. data/app/concepts/matestack/ui/core/var/var.haml +3 -3
  233. data/app/concepts/matestack/ui/core/var/var.rb +1 -0
  234. data/app/concepts/matestack/ui/core/video/video.haml +2 -2
  235. data/app/concepts/matestack/ui/core/video/video.rb +3 -13
  236. data/app/concepts/matestack/ui/core/wbr/wbr.haml +5 -1
  237. data/app/concepts/matestack/ui/core/wbr/wbr.rb +1 -0
  238. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -1
  239. data/app/concepts/matestack/ui/core/youtube/youtube.rb +18 -16
  240. data/app/helpers/matestack/ui/core/application_helper.rb +6 -2
  241. data/app/javascript/matestack-ui-core/index.js +12 -2
  242. data/app/lib/matestack/ui/core/has_view_context.rb +4 -2
  243. data/app/lib/matestack/ui/core/html_attributes.rb +1 -1
  244. data/app/lib/matestack/ui/core/properties.rb +95 -22
  245. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +11 -7
  246. data/lib/matestack/ui/core/components.rb +6 -2
  247. data/lib/matestack/ui/core/version.rb +1 -1
  248. data/vendor/assets/javascripts/dist/matestack-ui-core.js +773 -99
  249. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
  250. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
  251. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
  252. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  253. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
  254. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
  255. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  256. metadata +29 -8
  257. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +0 -2
  258. data/app/concepts/matestack/ui/core/component/rerender.rb +0 -8
  259. data/app/concepts/matestack/ui/core/form/select/select.haml +0 -9
@@ -0,0 +1,62 @@
1
+ const formRadioMixin = {
2
+ methods: {
3
+ initialize: function(){
4
+ const self = this
5
+ let data = {};
6
+
7
+ for (let key in self.$refs) {
8
+ let initValue = self.$refs[key]["attributes"]["init-value"];
9
+ let valueType = self.$refs[key]["attributes"]["value-type"];
10
+
11
+ if (key.startsWith("select.")) {
12
+ if (key.startsWith("select.multiple.")) {
13
+ if (initValue) {
14
+ data[key.replace("select.multiple.", "")] = JSON.parse(initValue["value"]);
15
+ Object.assign(self.$parent.data, data);
16
+ self.afterInitialize(JSON.parse(initValue["value"]))
17
+ } else {
18
+ data[key.replace("select.multiple.", "")] = [];
19
+ Object.assign(self.$parent.data, data);
20
+ self.afterInitialize([])
21
+ }
22
+ } else {
23
+ if (initValue) {
24
+ if (valueType && valueType["value"] == "Integer") {
25
+ data[key.replace("select.", "")] = parseInt(initValue["value"]);
26
+ Object.assign(self.$parent.data, data);
27
+ self.afterInitialize(parseInt(initValue["value"]))
28
+ } else {
29
+ data[key.replace("select.", "")] = initValue["value"];
30
+ Object.assign(self.$parent.data, data);
31
+ self.afterInitialize(initValue["value"])
32
+ }
33
+ } else {
34
+ data[key.replace("select.", "")] = null;
35
+ Object.assign(self.$parent.data, data);
36
+ self.afterInitialize(null)
37
+ }
38
+ }
39
+ }
40
+ }
41
+
42
+ //without the timeout it's somehow not working
43
+ setTimeout(function () {
44
+ self.$forceUpdate();
45
+ }, 1);
46
+ },
47
+ inputChanged: function (key) {
48
+ this.$parent.resetErrors(key);
49
+ this.$forceUpdate();
50
+ },
51
+ afterInitialize: function(value){
52
+ // can be used in the main component for further initialization steps
53
+ },
54
+ setValue: function (value){
55
+ this.$parent.data[this.componentConfig["key"]] = value
56
+ this.$forceUpdate();
57
+ }
58
+ }
59
+
60
+ }
61
+
62
+ export default formRadioMixin
@@ -0,0 +1,15 @@
1
+ import Vue from "vue/dist/vue.esm";
2
+
3
+ import formRadioMixin from "./mixin";
4
+ import componentMixin from "../../component/component";
5
+
6
+ const componentDef = {
7
+ mixins: [componentMixin, formRadioMixin],
8
+ data() {
9
+ return {};
10
+ }
11
+ }
12
+
13
+ let component = Vue.component("matestack-ui-core-form-radio", componentDef);
14
+
15
+ export default componentDef;
@@ -1,71 +1,16 @@
1
- require_relative '../utils'
2
- require_relative '../has_input_html_attributes'
3
- require_relative '../has_errors'
1
+ require_relative './base'
2
+
4
3
  module Matestack::Ui::Core::Form::Radio
5
- class Radio < Matestack::Ui::Core::Component::Static
6
- include Matestack::Ui::Core::Form::Utils
7
- include Matestack::Ui::Core::Form::HasInputHtmlAttributes
8
- include Matestack::Ui::Core::Form::HasErrors
4
+ class Radio < Base
9
5
 
10
- requires :key
11
- optional :multiple, :init, for: { as: :input_for }, label: { as: :input_label }, options: { as: :radio_options }
6
+ vue_js_component_name "matestack-ui-core-form-radio"
12
7
 
13
8
  def response
14
- radio_options.to_a.each do |item|
15
- input html_attributes.merge(
16
- attributes: vue_attributes,
17
- type: :radio,
18
- id: "#{id_for_item(item_value(item))}",
19
- name: item_name(item),
20
- value: item_value(item),
21
- )
22
- label text: item_label(item), for: id_for_item(item_value(item))
23
- end
24
- render_errors
25
- end
26
-
27
- def vue_attributes
28
- (options[:attributes] || {}).merge({
29
- "@change": change_event,
30
- ref: "select.#{attr_key}",
31
- 'init-value': init_value,
32
- 'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
33
- 'value-type': value_type,
34
- "#{v_model_type}": input_key,
35
- })
36
- end
37
-
38
- def value_type
39
- item_value(radio_options.first).is_a?(Integer) ? Integer : nil
40
- end
41
-
42
- def item_value(item)
43
- item.is_a?(Array) ? item.last : item
44
- end
45
-
46
- def item_name(item)
47
- "#{attr_key}_#{item.is_a?(Array) ? item.first : item}"
48
- end
49
-
50
- def item_label(item)
51
- item.is_a?(Array) ? item.first : item
52
- end
53
-
54
- def v_model_type
55
- if radio_options && item_value(radio_options.first).is_a?(Integer)
56
- 'v-model.number'
57
- else
58
- 'v-model'
9
+ div class: "matestack-ui-core-form-radio" do
10
+ render_options
11
+ render_errors
59
12
  end
60
13
  end
61
14
 
62
- def change_event
63
- "inputChanged('#{attr_key}')"
64
- end
65
-
66
- def id_for_item(value)
67
- "#{html_attributes[:id] || attr_key}_#{value}"
68
- end
69
-
70
15
  end
71
16
  end
@@ -0,0 +1,98 @@
1
+ require_relative '../utils'
2
+ require_relative '../has_errors'
3
+ module Matestack::Ui::Core::Form::Select
4
+ class Base < Matestack::Ui::Core::Component::Dynamic
5
+ include Matestack::Ui::Core::Form::Utils
6
+ include Matestack::Ui::Core::Form::HasErrors
7
+
8
+ html_attributes :autofocus, :disabled, :form, :multiple, :name, :required, :size
9
+
10
+ requires :key
11
+ optional :multiple, :init, :placeholder, :disabled_values,
12
+ for: { as: :input_for },
13
+ label: { as: :input_label },
14
+ options: { as: :select_options }
15
+
16
+ def setup
17
+ @component_config[:init_value] = init_value
18
+ end
19
+
20
+
21
+ def component_id
22
+ "select-component-for-#{attr_key}"
23
+ end
24
+
25
+ def select_attributes
26
+ html_attributes.merge(attributes: vue_attributes)
27
+ end
28
+
29
+ def render_options
30
+ if placeholder
31
+ option value: 'null', disabled: true, selected: init_value.nil?, text: placeholder
32
+ end
33
+ select_options.to_a.each do |item|
34
+ option value: item_value(item), disabled: item_disabled(item), text: item_label(item)
35
+ end
36
+ end
37
+
38
+ def input_key
39
+ "$parent.data[\"#{key}\"]"
40
+ end
41
+
42
+ def error_key
43
+ "$parent.errors[\"#{key}\"]"
44
+ end
45
+
46
+ def change_event
47
+ "inputChanged('#{attr_key}')"
48
+ end
49
+
50
+ def vue_attributes
51
+ (options[:attributes] || {}).merge({
52
+ "@change": change_event,
53
+ ref: vue_ref,
54
+ 'init-value': init_value || [],
55
+ 'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
56
+ 'value-type': value_type,
57
+ "#{v_model_type}": input_key,
58
+ })
59
+ end
60
+
61
+ def vue_ref
62
+ "select#{'.multiple' if multiple}.#{attr_key}"
63
+ end
64
+
65
+ def value_type
66
+ item_value(select_options.first).is_a?(Integer) ? Integer : nil
67
+ end
68
+
69
+ def item_value(item)
70
+ item.is_a?(Array) ? item.last : item
71
+ end
72
+
73
+ def item_name(item)
74
+ "#{attr_key}_#{item.is_a?(Array) ? item.first : item}"
75
+ end
76
+
77
+ def item_disabled(item)
78
+ disabled_values.present? && disabled_values.include?(item_value(item))
79
+ end
80
+
81
+ def item_label(item)
82
+ item.is_a?(Array) ? item.first : item
83
+ end
84
+
85
+ def v_model_type
86
+ if select_options && item_value(select_options.first).is_a?(Integer) && !multiple
87
+ 'v-model.number'
88
+ else
89
+ 'v-model'
90
+ end
91
+ end
92
+
93
+ def id_for_item(value)
94
+ "#{html_attributes[:id]}_#{value}"
95
+ end
96
+
97
+ end
98
+ end
@@ -0,0 +1,58 @@
1
+ const formSelectMixin = {
2
+ methods: {
3
+ initialize: function(){
4
+ const self = this
5
+ let data = {};
6
+
7
+ for (let key in self.$refs) {
8
+ let initValue = self.$refs[key]["attributes"]["init-value"];
9
+ let valueType = self.$refs[key]["attributes"]["value-type"];
10
+
11
+ if (key.startsWith("select.")) {
12
+ if (key.startsWith("select.multiple.")) {
13
+ if (initValue) {
14
+ data[key.replace("select.multiple.", "")] = JSON.parse(initValue["value"]);
15
+ self.afterInitialize(JSON.parse(initValue["value"]))
16
+ } else {
17
+ data[key.replace("select.multiple.", "")] = [];
18
+ self.afterInitialize([])
19
+ }
20
+ } else {
21
+ if (initValue) {
22
+ if (valueType && valueType["value"] == "Integer") {
23
+ data[key.replace("select.", "")] = parseInt(initValue["value"]);
24
+ self.afterInitialize(parseInt(initValue["value"]))
25
+ } else {
26
+ data[key.replace("select.", "")] = initValue["value"];
27
+ self.afterInitialize(initValue["value"])
28
+ }
29
+ } else {
30
+ data[key.replace("select.", "")] = null;
31
+ self.afterInitialize(null)
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ //without the timeout it's somehow not working
38
+ setTimeout(function () {
39
+ Object.assign(self.$parent.data, data);
40
+ self.$forceUpdate()
41
+ }, 1);
42
+ },
43
+ inputChanged: function (key) {
44
+ this.$parent.resetErrors(key);
45
+ this.$forceUpdate();
46
+ },
47
+ afterInitialize: function(value){
48
+ // can be used in the main component for further initialization steps
49
+ },
50
+ setValue: function (value){
51
+ this.$parent.data[this.componentConfig["key"]] = value
52
+ this.$forceUpdate();
53
+ }
54
+ }
55
+
56
+ }
57
+
58
+ export default formSelectMixin
@@ -0,0 +1,15 @@
1
+ import Vue from "vue/dist/vue.esm";
2
+
3
+ import formSelectMixin from "./mixin";
4
+ import componentMixin from "../../component/component";
5
+
6
+ const componentDef = {
7
+ mixins: [componentMixin, formSelectMixin],
8
+ data() {
9
+ return {};
10
+ }
11
+ }
12
+
13
+ let component = Vue.component("matestack-ui-core-form-select", componentDef);
14
+
15
+ export default componentDef;
@@ -1,88 +1,19 @@
1
- require_relative '../utils'
2
- require_relative '../has_errors'
3
- module Matestack::Ui::Core::Form::Select
4
- class Select < Matestack::Ui::Core::Component::Static
5
- include Matestack::Ui::Core::Form::Utils
6
- include Matestack::Ui::Core::Form::HasErrors
7
-
8
- html_attributes :autofocus, :disabled, :form, :multiple, :name, :required, :size
9
-
10
- requires :key
11
- optional :multiple, :init, :placeholder, :disabled_values,
12
- for: { as: :input_for },
13
- label: { as: :input_label },
14
- options: { as: :select_options }
15
-
16
- # def response
17
- # radio_options.to_a.each do |item|
18
- # input html_attributes.merge(
19
- # attributes: vue_attributes.merge(ref: "select.#{attr_key}"),
20
- # type: :radio,
21
- # id: "#{id_for_item(item_value(item))}",
22
- # name: item_name(item),
23
- # value: item_value(item),
24
- # )
25
- # label text: item_label(item), for: id_for_item(item_value(item))
26
- # end
27
- # render_errors
28
- # end
29
-
30
- # def html_options
31
- # html_attributes.merge(
32
- # attributes: vue_attributes,
33
- # )
34
- # end
35
-
36
- def vue_attributes
37
- (options[:attributes] || {}).merge({
38
- "@change": change_event,
39
- ref: vue_ref,
40
- 'init-value': init_value || [],
41
- 'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
42
- 'value-type': value_type,
43
- "#{v_model_type}": input_key,
44
- })
45
- end
46
-
47
- def vue_ref
48
- "select#{'.multiple' if multiple}.#{attr_key}"
49
- end
50
-
51
- def value_type
52
- item_value(select_options.first).is_a?(Integer) ? Integer : nil
53
- end
1
+ require_relative './base'
54
2
 
55
- def item_value(item)
56
- item.is_a?(Array) ? item.last : item
57
- end
58
-
59
- def item_name(item)
60
- "#{attr_key}_#{item.is_a?(Array) ? item.first : item}"
61
- end
3
+ module Matestack::Ui::Core::Form::Select
4
+ class Select < Base
62
5
 
63
- def item_disabled(item)
64
- disabled_values.present? && disabled_values.include?(item_value(item))
65
- end
6
+ vue_js_component_name "matestack-ui-core-form-select"
66
7
 
67
- def item_label(item)
68
- item.is_a?(Array) ? item.first : item
69
- end
70
-
71
- def v_model_type
72
- if select_options && item_value(select_options.first).is_a?(Integer) && !multiple
73
- 'v-model.number'
74
- else
75
- 'v-model'
8
+ def response
9
+ div class: "matestack-ui-core-form-select" do
10
+ label text: input_label if input_label
11
+ select select_attributes do
12
+ render_options
13
+ end
14
+ render_errors
76
15
  end
77
16
  end
78
17
 
79
- def change_event
80
- "inputChanged('#{attr_key}')"
81
- end
82
-
83
- def id_for_item(value)
84
- "#{html_attributes[:id]}_#{value}"
85
- end
86
-
87
18
  end
88
19
  end
@@ -0,0 +1,12 @@
1
+ module Matestack::Ui::Core::Form::Submit
2
+ class Base < Matestack::Ui::Core::Component::Dynamic
3
+
4
+ def submit_attributes
5
+ html_attributes.merge!({
6
+ "@click.prevent": "$parent.perform",
7
+ "v-bind:class": "{ 'loading': $parent.loading }"
8
+ })
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ import Vue from "vue/dist/vue.esm";
2
+
3
+ import componentMixin from "../../component/component";
4
+
5
+ const componentDef = {
6
+ mixins: [componentMixin],
7
+ data() {
8
+ return {};
9
+ },
10
+ methods: {
11
+ loading: function(){
12
+ return this.$parent.loading;
13
+ }
14
+ }
15
+ }
16
+
17
+ let component = Vue.component("matestack-ui-core-form-submit", componentDef);
18
+
19
+ export default componentDef;