matestack-ui-core 0.7.1 → 0.7.5

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 (241) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -4
  3. data/Rakefile +32 -0
  4. data/app/concepts/matestack/ui/core/abbr/abbr.haml +5 -0
  5. data/app/concepts/matestack/ui/core/abbr/abbr.rb +12 -0
  6. data/app/concepts/matestack/ui/core/action/action.js +51 -29
  7. data/app/concepts/matestack/ui/core/action/action.rb +3 -0
  8. data/app/concepts/matestack/ui/core/actionview/dynamic.haml +6 -0
  9. data/app/concepts/matestack/ui/core/actionview/dynamic.rb +28 -0
  10. data/app/concepts/matestack/ui/core/actionview/static.haml +1 -0
  11. data/app/concepts/matestack/ui/core/actionview/static.rb +28 -0
  12. data/app/concepts/matestack/ui/core/address/address.haml +5 -0
  13. data/app/concepts/matestack/ui/core/address/address.rb +5 -0
  14. data/app/concepts/matestack/ui/core/app/app.js +14 -3
  15. data/app/concepts/matestack/ui/core/app/app.rb +3 -28
  16. data/app/concepts/matestack/ui/core/app/location.js +9 -0
  17. data/app/concepts/matestack/ui/core/app/store.js +12 -6
  18. data/app/concepts/matestack/ui/core/area/area.haml +1 -0
  19. data/app/concepts/matestack/ui/core/area/area.rb +18 -0
  20. data/app/concepts/matestack/ui/core/article/article.haml +5 -0
  21. data/app/concepts/matestack/ui/core/article/article.rb +5 -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 +1 -1
  25. data/app/concepts/matestack/ui/core/async/async.js +5 -4
  26. data/app/concepts/matestack/ui/core/async/async.rb +8 -6
  27. data/app/concepts/matestack/ui/core/b/b.haml +5 -0
  28. data/app/concepts/matestack/ui/core/b/b.rb +5 -0
  29. data/app/concepts/matestack/ui/core/bdi/bdi.haml +5 -0
  30. data/app/concepts/matestack/ui/core/bdi/bdi.rb +4 -0
  31. data/app/concepts/matestack/ui/core/bdo/bdo.haml +5 -0
  32. data/app/concepts/matestack/ui/core/bdo/bdo.rb +11 -0
  33. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +3 -1
  34. data/app/concepts/matestack/ui/core/button/button.haml +4 -6
  35. data/app/concepts/matestack/ui/core/caption/caption.haml +2 -3
  36. data/app/concepts/matestack/ui/core/cite/cite.haml +5 -0
  37. data/app/concepts/matestack/ui/core/cite/cite.rb +5 -0
  38. data/app/concepts/matestack/ui/core/code/code.haml +5 -0
  39. data/app/concepts/matestack/ui/core/code/code.rb +5 -0
  40. data/app/concepts/matestack/ui/core/collection/content/content.js +4 -6
  41. data/app/concepts/matestack/ui/core/collection/content/content.rb +1 -1
  42. data/app/concepts/matestack/ui/core/collection/filter/filter.js +3 -5
  43. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +1 -1
  44. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +1 -7
  45. data/app/concepts/matestack/ui/core/collection/filter/input/input.rb +12 -0
  46. data/app/concepts/matestack/ui/core/collection/helper.rb +0 -1
  47. data/app/concepts/matestack/ui/core/collection/order/order.js +3 -5
  48. data/app/concepts/matestack/ui/core/collection/order/order.rb +1 -1
  49. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +3 -1
  50. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.rb +0 -1
  51. data/app/concepts/matestack/ui/core/component/anonym-dynamic-component.js +1 -1
  52. data/app/concepts/matestack/ui/core/component/component.js +1 -2
  53. data/app/concepts/matestack/ui/core/component/dynamic.rb +38 -33
  54. data/app/concepts/matestack/ui/core/data/data.haml +5 -0
  55. data/app/concepts/matestack/ui/core/data/data.rb +9 -0
  56. data/app/concepts/matestack/ui/core/datalist/datalist.haml +3 -0
  57. data/app/concepts/matestack/ui/core/datalist/datalist.rb +5 -0
  58. data/app/concepts/matestack/ui/core/dd/dd.haml +5 -0
  59. data/app/concepts/matestack/ui/core/dd/dd.rb +5 -0
  60. data/app/concepts/matestack/ui/core/del/del.haml +5 -0
  61. data/app/concepts/matestack/ui/core/del/del.rb +4 -0
  62. data/app/concepts/matestack/ui/core/details/details.rb +1 -0
  63. data/app/concepts/matestack/ui/core/dfn/dfn.haml +5 -0
  64. data/app/concepts/matestack/ui/core/dfn/dfn.rb +6 -0
  65. data/app/concepts/matestack/ui/core/dialog/dialog.haml +5 -0
  66. data/app/concepts/matestack/ui/core/dialog/dialog.rb +9 -0
  67. data/app/concepts/matestack/ui/core/div/div.rb +0 -1
  68. data/app/concepts/matestack/ui/core/dl/dl.haml +5 -0
  69. data/app/concepts/matestack/ui/core/dl/dl.rb +5 -0
  70. data/app/concepts/matestack/ui/core/dt/dt.haml +5 -0
  71. data/app/concepts/matestack/ui/core/dt/dt.rb +5 -0
  72. data/app/concepts/matestack/ui/core/em/em.haml +5 -0
  73. data/app/concepts/matestack/ui/core/em/em.rb +5 -0
  74. data/app/concepts/matestack/ui/core/fieldset/fieldset.haml +5 -0
  75. data/app/concepts/matestack/ui/core/fieldset/fieldset.rb +9 -0
  76. data/app/concepts/matestack/ui/core/figure/figure.haml +3 -0
  77. data/app/concepts/matestack/ui/core/figure/figure.rb +5 -0
  78. data/app/concepts/matestack/ui/core/form/form.js +42 -6
  79. data/app/concepts/matestack/ui/core/form/input/input.haml +30 -21
  80. data/app/concepts/matestack/ui/core/form/input/input.rb +36 -29
  81. data/app/concepts/matestack/ui/core/form/select/select.haml +10 -6
  82. data/app/concepts/matestack/ui/core/html/html.js +1 -1
  83. data/app/concepts/matestack/ui/core/icon/icon.haml +2 -3
  84. data/app/concepts/matestack/ui/core/iframe/iframe.haml +5 -0
  85. data/app/concepts/matestack/ui/core/iframe/iframe.rb +14 -0
  86. data/app/concepts/matestack/ui/core/img/img.haml +1 -1
  87. data/app/concepts/matestack/ui/core/img/img.rb +10 -0
  88. data/app/concepts/matestack/ui/core/input/input.haml +2 -3
  89. data/app/concepts/matestack/ui/core/input/input.rb +4 -0
  90. data/app/concepts/matestack/ui/core/ins/ins.haml +5 -0
  91. data/app/concepts/matestack/ui/core/ins/ins.rb +10 -0
  92. data/app/concepts/matestack/ui/core/isolate/isolate.haml +2 -0
  93. data/app/concepts/matestack/ui/core/isolate/isolate.rb +11 -0
  94. data/app/concepts/matestack/ui/core/js/core.js +41 -18
  95. data/app/concepts/matestack/ui/core/kbd/kbd.haml +5 -0
  96. data/app/concepts/matestack/ui/core/kbd/kbd.rb +4 -0
  97. data/app/concepts/matestack/ui/core/label/label.haml +4 -6
  98. data/app/concepts/matestack/ui/core/label/label.rb +6 -1
  99. data/app/concepts/matestack/ui/core/legend/legend.haml +5 -0
  100. data/app/concepts/matestack/ui/core/legend/legend.rb +5 -0
  101. data/app/concepts/matestack/ui/core/li/li.haml +2 -3
  102. data/app/concepts/matestack/ui/core/link/link.rb +2 -1
  103. data/app/concepts/matestack/ui/core/map/map.haml +3 -0
  104. data/app/concepts/matestack/ui/core/map/map.rb +11 -0
  105. data/app/concepts/matestack/ui/core/mark/mark.haml +5 -0
  106. data/app/concepts/matestack/ui/core/mark/mark.rb +4 -0
  107. data/app/concepts/matestack/ui/core/meter/meter.haml +4 -0
  108. data/app/concepts/matestack/ui/core/meter/meter.rb +14 -0
  109. data/app/concepts/matestack/ui/core/noscript/noscript.haml +5 -0
  110. data/app/concepts/matestack/ui/core/noscript/noscript.rb +5 -0
  111. data/app/concepts/matestack/ui/core/object/object.haml +1 -0
  112. data/app/concepts/matestack/ui/core/object/object.rb +15 -0
  113. data/app/concepts/matestack/ui/core/onclick/onclick.haml +1 -1
  114. data/app/concepts/matestack/ui/core/onclick/onclick.js +2 -3
  115. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -2
  116. data/app/concepts/matestack/ui/core/optgroup/optgroup.haml +3 -0
  117. data/app/concepts/matestack/ui/core/optgroup/optgroup.rb +10 -0
  118. data/app/concepts/matestack/ui/core/option/option.haml +5 -0
  119. data/app/concepts/matestack/ui/core/option/option.rb +12 -0
  120. data/app/concepts/matestack/ui/core/output/output.haml +5 -0
  121. data/app/concepts/matestack/ui/core/output/output.rb +11 -0
  122. data/app/concepts/matestack/ui/core/page/content.js +1 -1
  123. data/app/concepts/matestack/ui/core/page/page.rb +61 -22
  124. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +4 -7
  125. data/app/concepts/matestack/ui/core/param/param.haml +1 -0
  126. data/app/concepts/matestack/ui/core/param/param.rb +10 -0
  127. data/app/concepts/matestack/ui/core/pg/pg.haml +4 -7
  128. data/app/concepts/matestack/ui/core/picture/picture.haml +3 -0
  129. data/app/concepts/matestack/ui/core/picture/picture.rb +4 -0
  130. data/app/concepts/matestack/ui/core/plain/plain.rb +1 -2
  131. data/app/concepts/matestack/ui/core/pre/pre.haml +5 -0
  132. data/app/concepts/matestack/ui/core/pre/pre.rb +5 -0
  133. data/app/concepts/matestack/ui/core/q/q.haml +5 -0
  134. data/app/concepts/matestack/ui/core/q/q.rb +11 -0
  135. data/app/concepts/matestack/ui/core/rp/rp.haml +5 -0
  136. data/app/concepts/matestack/ui/core/rp/rp.rb +5 -0
  137. data/app/concepts/matestack/ui/core/rt/rt.haml +5 -0
  138. data/app/concepts/matestack/ui/core/rt/rt.rb +5 -0
  139. data/app/concepts/matestack/ui/core/ruby/ruby.haml +5 -0
  140. data/app/concepts/matestack/ui/core/ruby/ruby.rb +5 -0
  141. data/app/concepts/matestack/ui/core/s/s.haml +5 -0
  142. data/app/concepts/matestack/ui/core/s/s.rb +6 -0
  143. data/app/concepts/matestack/ui/core/samp/samp.haml +5 -0
  144. data/app/concepts/matestack/ui/core/samp/samp.rb +4 -0
  145. data/app/concepts/matestack/ui/core/sub/sub.haml +5 -0
  146. data/app/concepts/matestack/ui/core/sub/sub.rb +5 -0
  147. data/app/concepts/matestack/ui/core/summary/summary.haml +2 -3
  148. data/app/concepts/matestack/ui/core/summary/summary.rb +1 -0
  149. data/app/concepts/matestack/ui/core/sup/sup.haml +5 -0
  150. data/app/concepts/matestack/ui/core/sup/sup.rb +5 -0
  151. data/app/concepts/matestack/ui/core/tbody/tbody.haml +3 -0
  152. data/app/concepts/matestack/ui/core/tbody/tbody.rb +5 -0
  153. data/app/concepts/matestack/ui/core/td/td.haml +4 -7
  154. data/app/concepts/matestack/ui/core/template/template.haml +3 -0
  155. data/app/concepts/matestack/ui/core/template/template.rb +4 -0
  156. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +3 -0
  157. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +5 -0
  158. data/app/concepts/matestack/ui/core/th/th.haml +4 -7
  159. data/app/concepts/matestack/ui/core/thead/thead.haml +3 -0
  160. data/app/concepts/matestack/ui/core/thead/thead.rb +5 -0
  161. data/app/concepts/matestack/ui/core/transition/transition.haml +4 -6
  162. data/app/concepts/matestack/ui/core/transition/transition.js +1 -1
  163. data/app/concepts/matestack/ui/core/u/u.haml +5 -0
  164. data/app/concepts/matestack/ui/core/u/u.rb +6 -0
  165. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +7 -0
  166. data/app/concepts/matestack/ui/core/var/var.haml +5 -0
  167. data/app/concepts/matestack/ui/core/var/var.rb +4 -0
  168. data/app/concepts/matestack/ui/core/video/video.haml +3 -1
  169. data/app/concepts/matestack/ui/core/video/video.rb +17 -1
  170. data/app/concepts/matestack/ui/core/wbr/wbr.haml +1 -0
  171. data/app/concepts/matestack/ui/core/wbr/wbr.rb +4 -0
  172. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -0
  173. data/app/concepts/matestack/ui/core/youtube/youtube.rb +26 -0
  174. data/app/helpers/matestack/ui/core/application_helper.rb +3 -1
  175. data/app/javascript/matestack-ui-core/index.js +22 -0
  176. data/app/javascript/matestack-ui-core/styles/index.scss +5 -0
  177. data/app/javascript/packs/matestack-ui-core.js +8 -0
  178. data/app/lib/matestack/ui/core/component_node.rb +30 -12
  179. data/app/lib/matestack/ui/core/has_view_context.rb +14 -0
  180. data/app/lib/matestack/ui/core/page_node.rb +26 -1
  181. data/app/lib/matestack/ui/core/render.rb +89 -0
  182. data/app/lib/matestack/ui/core/to_cell.rb +3 -1
  183. data/app/lib/matestack/ui/dynamic_actionview_component.rb +1 -0
  184. data/app/lib/matestack/ui/static_actionview_component.rb +1 -0
  185. data/config/routes.rb +0 -1
  186. data/lib/generators/matestack/app/USAGE +21 -0
  187. data/lib/generators/matestack/app/app_generator.rb +25 -0
  188. data/lib/generators/{matestack_app/templates/matestack_app_controller.erb → matestack/app/templates/app/controllers/%file_name%_controller.rb.tt} +0 -2
  189. data/lib/generators/matestack/app/templates/app/matestack/apps/%file_name%.rb.tt +28 -0
  190. data/lib/generators/matestack/component/USAGE +20 -0
  191. data/lib/generators/matestack/component/component_generator.rb +29 -0
  192. data/lib/generators/{matestack_component/templates/matestack_component.haml.erb → matestack/component/templates/app/matestack/components/%namespace%/%file_name%.haml.tt} +0 -0
  193. data/lib/generators/{matestack_component/templates/matestack_component.js.erb → matestack/component/templates/app/matestack/components/%namespace%/%file_name%.js.tt} +2 -2
  194. data/lib/generators/matestack/component/templates/app/matestack/components/%namespace%/%file_name%.rb.tt +11 -0
  195. data/lib/generators/{matestack_component/templates/matestack_component.scss.erb → matestack/component/templates/app/matestack/components/%namespace%/%file_name%.scss.tt} +0 -0
  196. data/lib/generators/matestack/core/component/USAGE +16 -0
  197. data/lib/generators/matestack/core/component/component_generator.rb +23 -0
  198. data/lib/generators/matestack/core/component/templates/app/concepts/matestack/ui/core/%file_name%/%file_name%.haml.tt +5 -0
  199. data/lib/generators/matestack/core/component/templates/app/concepts/matestack/ui/core/%file_name%/%file_name%.rb.tt +4 -0
  200. data/lib/generators/matestack/core/component/templates/docs/components/%file_name%.md.tt +45 -0
  201. data/lib/generators/matestack/core/component/templates/spec/usage/components/%file_name%_spec.rb +31 -0
  202. data/lib/generators/matestack/page/USAGE +28 -0
  203. data/lib/generators/matestack/page/page_generator.rb +54 -0
  204. data/lib/generators/matestack/page/templates/app/matestack/pages/%app_name%/%namespace%/%file_name%.rb.tt +29 -0
  205. data/lib/matestack/ui/core.rb +1 -0
  206. data/lib/matestack/ui/core/cell.rb +33 -0
  207. data/lib/matestack/ui/core/version.rb +1 -1
  208. data/vendor/assets/javascripts/dist/manifest.json +22 -0
  209. data/vendor/assets/javascripts/dist/manifest.json.br +0 -0
  210. data/vendor/assets/javascripts/dist/manifest.json.gz +0 -0
  211. data/vendor/assets/javascripts/dist/matestack-ui-core.css +3 -0
  212. data/vendor/assets/javascripts/dist/matestack-ui-core.css.map +1 -0
  213. data/vendor/assets/javascripts/dist/matestack-ui-core.js +16605 -0
  214. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -0
  215. data/vendor/assets/javascripts/dist/matestack-ui-core.min.css +0 -0
  216. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +3 -0
  217. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.LICENSE.txt +18 -0
  218. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.br +0 -0
  219. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  220. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -0
  221. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.br +0 -0
  222. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  223. data/vendor/assets/javascripts/matestack-ui-core.js.erb +2 -0
  224. data/vendor/assets/stylesheets/dist +1 -0
  225. data/vendor/assets/stylesheets/matestack-ui-core.css.erb +2 -0
  226. metadata +168 -32
  227. data/app/concepts/matestack/ui/core/view/view.haml +0 -2
  228. data/app/concepts/matestack/ui/core/view/view.js +0 -42
  229. data/app/concepts/matestack/ui/core/view/view.rb +0 -7
  230. data/lib/generators/matestack_app/USAGE +0 -21
  231. data/lib/generators/matestack_app/matestack_app_generator.rb +0 -26
  232. data/lib/generators/matestack_app/templates/matestack_app.erb +0 -26
  233. data/lib/generators/matestack_component/USAGE +0 -20
  234. data/lib/generators/matestack_component/matestack_component_generator.rb +0 -30
  235. data/lib/generators/matestack_component/templates/matestack_component.rb.erb +0 -13
  236. data/lib/generators/matestack_page/USAGE +0 -28
  237. data/lib/generators/matestack_page/matestack_page_generator.rb +0 -41
  238. data/lib/generators/matestack_page/templates/matestack_page.erb +0 -15
  239. data/vendor/assets/javascripts/manifest.json +0 -4
  240. data/vendor/assets/javascripts/matestack-ui-core.js +0 -15392
  241. data/vendor/assets/javascripts/matestack-ui-core.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import Vue from 'vue/dist/vue.esm'
2
- import componentMixin from 'component/component'
2
+ import componentMixin from '../component/component'
3
3
 
4
4
  const componentDef = {
5
5
  mixins: [componentMixin]
@@ -1,6 +1,5 @@
1
1
  %i{@tag_attributes}
2
- - if options[:text].blank?
3
- - if block_given?
4
- = yield
2
+ - if options[:text].nil? && block_given?
3
+ = yield
5
4
  - else
6
5
  = options[:text]
@@ -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
@@ -1 +1 @@
1
- = image_tag(ActionController::Base.helpers.asset_path(options[:path]), height: options[:height], width: options[:width], alt: options[:alt], class: options[:class], id: options[:id])
1
+ %img{@tag_attributes}
@@ -1,5 +1,15 @@
1
1
  module Matestack::Ui::Core::Img
2
2
  class Img < Matestack::Ui::Core::Component::Static
3
3
 
4
+ def setup
5
+ @tag_attributes.merge!({
6
+ src: ActionController::Base.helpers.asset_path(options[:path]),
7
+ height: options[:height],
8
+ width: options[:width],
9
+ usemap: options[:usemap],
10
+ alt: options[:alt]
11
+ })
12
+ end
13
+
4
14
  end
5
15
  end
@@ -1,3 +1,2 @@
1
- %input{@tag_attributes}
2
- - if block_given?
3
- = yield
1
+ %input{ @tag_attributes,
2
+ type: type }
@@ -1,5 +1,9 @@
1
1
  module Matestack::Ui::Core::Input
2
2
  class Input < Matestack::Ui::Core::Component::Static
3
3
 
4
+ def type
5
+ options[:type]
6
+ end
7
+
4
8
  end
5
9
  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
+ - @children_cells.each do |key, cell|
2
+ = cell.call(:show)
@@ -0,0 +1,11 @@
1
+ module Matestack::Ui::Core::Isolate
2
+ class Isolate < Matestack::Ui::Core::Component::Static
3
+
4
+ def setup
5
+ @component_key = @component_key + "__" + @argument.to_s
6
+ @component_key = @component_key + "(" + @cached_params.to_json + ")" if @cached_params.present?
7
+ @component_config[:component_key] = @component_key
8
+ end
9
+
10
+ end
11
+ end
@@ -1,30 +1,53 @@
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'
8
+ import store from '../app/store'
9
+ import component from '../component/component'
10
+ import anonymDynamicComponent from '../component/anonym-dynamic-component'
11
+ import html from '../html/html'
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'
18
19
 
19
20
  let matestackUiApp = undefined
20
21
 
22
+ // this event fires first and always
21
23
  document.addEventListener('DOMContentLoaded', () => {
22
-
23
- matestackUiApp = new Vue({
24
+ // somehow we need to inject the turbolinks mixin even
25
+ // if the turbolinks:load event will recreate the vue instance
26
+ // skipping the injection here caused errors when submitting forms or action
27
+ // if they were present on the first page, which was loaded and activated turbolinks
28
+ // the mixin does not impact the app when turbolinks is disabled
29
+ matestackUiApp = new Vue({
24
30
  el: "#matestack_ui",
31
+ mixins: [turbolinksAdapterMixin],
25
32
  store: store
26
- })
33
+ })
34
+ })
27
35
 
36
+ // this event fires after DOMContentLoaded and only if turbolinks are enabled
37
+ document.addEventListener('turbolinks:load', () => {
38
+ // we need to empty the currently stored pageTemplate state variable
39
+ // otherwise the matestack page will jump back to the latest pageTemplate
40
+ // fetched during the last matestack transition as the turbolinks powered
41
+ // page transition does not write the matestack store pageTemplate state variable
42
+ store.commit('resetPageTemplate')
43
+ // we need to destroy the vue app instance
44
+ matestackUiApp.$destroy();
45
+ // and recreate it right afterwards in order to work when used with turbolinks
46
+ matestackUiApp = new Vue({
47
+ el: "#matestack_ui",
48
+ mixins: [turbolinksAdapterMixin],
49
+ store: store
50
+ })
28
51
  })
29
52
 
30
53
  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,7 +1,5 @@
1
- - if options[:text].blank?
2
- %label{@tag_attributes}
3
- - if block_given?
4
- = yield
5
- - else
6
- %label{@tag_attributes}
1
+ %label{@tag_attributes}
2
+ - if options[:text].nil? && block_given?
3
+ = yield
4
+ - else
7
5
  = options[:text]
@@ -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
@@ -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,6 +1,5 @@
1
1
  %li{@tag_attributes}
2
- - if options[:text].blank?
3
- - if block_given?
4
- = yield
2
+ - if options[:text].nil? && block_given?
3
+ = yield
5
4
  - else
6
5
  = options[:text]
@@ -9,7 +9,8 @@ module Matestack::Ui::Core::Link
9
9
  "id": component_id,
10
10
  "method": options[:method],
11
11
  "target": options[:target] ||= nil,
12
- "href": link_path
12
+ "href": link_path,
13
+ "title": options[:title]
13
14
  })
14
15
  end
15
16
 
@@ -0,0 +1,3 @@
1
+ %map{@tag_attributes}
2
+ - if block_given?
3
+ = yield
@@ -0,0 +1,11 @@
1
+ module Matestack::Ui::Core::Map
2
+ class Map < Matestack::Ui::Core::Component::Static
3
+ REQUIRED_KEYS = [: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,2 +1,2 @@
1
- %div{"@click": "perform"}
1
+ %div{@tag_attributes, "@click": "perform"}
2
2
  = yield
@@ -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,6 +1,5 @@
1
1
  module Matestack::Ui::Core::Onclick
2
2
  class Onclick < Matestack::Ui::Core::Component::Dynamic
3
3
 
4
-
5
- end
6
4
  end
5
+ 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,6 @@
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
4
 
5
5
  const componentDef = {
6
6
  mixins: [componentMixin],
@@ -2,9 +2,10 @@ module Matestack::Ui::Core::Page
2
2
  class Page < Trailblazer::Cell
3
3
 
4
4
  include ActionView::Helpers::TranslationHelper
5
- include ::Cell::Haml
5
+ include Matestack::Ui::Core::Cell
6
6
  include Matestack::Ui::Core::ApplicationHelper
7
7
  include Matestack::Ui::Core::ToCell
8
+ include Matestack::Ui::Core::HasViewContext
8
9
 
9
10
  view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
10
11
 
@@ -53,7 +54,7 @@ module Matestack::Ui::Core::Page
53
54
 
54
55
  def nodes_to_cell
55
56
  @nodes.each do |key, node|
56
- @cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"])
57
+ @cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
57
58
  end
58
59
  end
59
60
 
@@ -65,9 +66,15 @@ module Matestack::Ui::Core::Page
65
66
  Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
66
67
  end
67
68
 
69
+ def isolate(&block)
70
+ return block
71
+ end
72
+
68
73
 
69
74
  def show(component_key=nil, only_page=false)
70
75
  prepare
76
+ return resolve_isolated_component(component_key) if !component_key.nil? && component_key.include?("isolate")
77
+
71
78
  response
72
79
 
73
80
  render_mode = nil
@@ -85,34 +92,68 @@ module Matestack::Ui::Core::Page
85
92
  concept(@app_class).call(:show, @page_id, @nodes)
86
93
  when :render_component
87
94
  begin
88
- if component_key.include?("__")
89
- keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
90
- page_content_keys = keys_array.select{|key| key.match(/^page_content_/)}
91
- if page_content_keys.any?
92
- keys_array = keys_array.drop(keys_array.find_index(page_content_keys[0])+2)
93
- end
94
- node = @nodes.dig(*keys_array)
95
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"])
96
- return cell.render_content
97
- else
98
- node = @nodes[component_key]
99
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"])
100
- return cell.render_content
101
- end
102
- rescue
103
- raise "Component '#{component_key}' could not be resolved. Notice: Rerendering currently works only on page-level. \
104
- You are therefore currently not able to use 'async' within a component for example!"
95
+ render_child_component component_key
96
+ rescue => e
97
+ raise "Component '#{component_key}' could not be resolved, because of #{e},\n#{e.backtrace.join("\n")}"
105
98
  end
106
99
  end
107
100
  end
108
101
 
109
-
110
102
  def page_id
111
103
  @custom_page_id ||= @page_id
112
104
  end
113
105
 
106
+ def render_child_component component_key
107
+ if component_key.include?("__")
108
+ keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
109
+ page_content_keys = keys_array.select{|key| key.match(/^page_content_/)}
110
+ if page_content_keys.any?
111
+ keys_array = keys_array.drop(keys_array.find_index(page_content_keys[0])+2)
112
+ end
113
+ if @nodes.dig(*keys_array) == nil
114
+ rest = []
115
+ while @nodes.dig(*keys_array) == nil
116
+ rest << keys_array.pop
117
+ end
118
+ node = @nodes.dig(*keys_array)
119
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
120
+ return cell.render_child_component component_key, rest.reverse[1..-1]
121
+ else
122
+ node = @nodes.dig(*keys_array)
123
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
124
+ return cell.render_content
125
+ end
126
+ else
127
+ node = @nodes[component_key]
128
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
129
+ return cell.render_content
130
+ end
131
+ end
132
+
133
+
114
134
  private
115
135
 
136
+ def resolve_isolated_component component_key
137
+ keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
138
+ isolate_keys = keys_array.select{|key| key.match(/^isolate_/)}
139
+ keys_array = keys_array.drop(keys_array.find_index(isolate_keys[0])+2)
140
+ isolated_scope_method = keys_array[0]
141
+ if isolated_scope_method.include?("(")
142
+ isolated_scope_method_name = isolated_scope_method.split("(").first
143
+ isolated_scope_method_argument = isolated_scope_method.split("(").last.split(")").first
144
+ isolated_scope_method_argument = JSON.parse(isolated_scope_method_argument)
145
+ isolated_block = self.send(isolated_scope_method_name, isolated_scope_method_argument.with_indifferent_access)
146
+ else
147
+ isolated_block = self.send(isolated_scope_method)
148
+ end
149
+ nodes = Matestack::Ui::Core::PageNode.build(
150
+ self, nil, context[:params], &isolated_block
151
+ )
152
+ node = nodes.dig(*keys_array.drop(2))
153
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
154
+ return cell.render_content
155
+ end
156
+
116
157
  def generate_page_name
117
158
  name_parts = self.class.name.split("::").map { |name| name.underscore }
118
159
  @page_id = name_parts.join("_")
@@ -145,7 +186,5 @@ module Matestack::Ui::Core::Page
145
186
  end
146
187
  end
147
188
 
148
-
149
189
  end
150
-
151
190
  end