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
@@ -1,32 +1,45 @@
1
1
  module Matestack::Ui::Core::Action
2
2
  class Action < Matestack::Ui::Core::Component::Dynamic
3
+ vue_js_component_name 'matestack-ui-core-action'
4
+
5
+ optional :path, :success, :failure, :notify, :confirm,
6
+ method: { as: :action_method }, params: { as: :action_params }
3
7
 
4
8
  def setup
5
9
  @component_config[:action_path] = action_path
6
- @component_config[:method] = options[:method]
7
- @component_config[:success] = options[:success]
8
- unless options[:success].nil?
9
- unless options[:success][:transition].nil?
10
- @component_config[:success][:transition][:path] = transition_path options[:success]
10
+ @component_config[:method] = action_method
11
+ @component_config[:success] = success
12
+ unless success.nil?
13
+ unless success[:transition].nil?
14
+ @component_config[:success][:transition][:path] = transition_path success
15
+ end
16
+ unless success[:redirect].nil?
17
+ @component_config[:success][:redirect][:path] = redirect_path success
11
18
  end
12
19
  end
13
- @component_config[:failure] = options[:failure]
14
- unless options[:failure].nil?
15
- unless options[:failure][:transition].nil?
16
- @component_config[:failure][:transition][:path] = transition_path options[:failure]
20
+ @component_config[:failure] = failure
21
+ unless failure.nil?
22
+ unless failure[:transition].nil?
23
+ @component_config[:failure][:transition][:path] = transition_path failure
24
+ end
25
+ unless failure[:redirect].nil?
26
+ @component_config[:failure][:redirect][:path] = redirect_path failure
17
27
  end
18
28
  end
19
- if options[:notify].nil?
29
+ if notify.nil?
20
30
  @component_config[:notify] = true
21
31
  end
32
+ if @component_config[:confirm] = confirm
33
+ @component_config[:confirm_text] = confirm.try(:[], :text) || "Are you sure?"
34
+ end
22
35
  end
23
36
 
24
37
  def action_path
25
38
  begin
26
- if options[:path].is_a?(Symbol)
27
- return ::Rails.application.routes.url_helpers.send(options[:path], options[:params])
39
+ if path.is_a?(Symbol)
40
+ return ::Rails.application.routes.url_helpers.send(path, action_params)
28
41
  else
29
- return options[:path]
42
+ return path
30
43
  end
31
44
  rescue
32
45
  raise "Action path not found"
@@ -48,5 +61,20 @@ module Matestack::Ui::Core::Action
48
61
  end
49
62
  end
50
63
 
64
+ def redirect_path callback_options
65
+ begin
66
+ if callback_options[:redirect][:path].is_a?(Symbol)
67
+ return ::Rails.application.routes.url_helpers.send(
68
+ callback_options[:redirect][:path],
69
+ callback_options[:redirect][:params]
70
+ )
71
+ else
72
+ return callback_options[:redirect][:path]
73
+ end
74
+ rescue
75
+ raise "Redirect path not found"
76
+ end
77
+ end
78
+
51
79
  end
52
80
  end
@@ -1,7 +1,6 @@
1
1
  %component{dynamic_tag_attributes}
2
- %div{"id": component_id, "class": @component_class}
2
+ %div
3
3
  %div{"v-if": "asyncTemplate == null"}
4
- - @cells.each do |key, cell|
5
- = cell.call(:show)
4
+ = render_content
6
5
  %div{"v-if": "asyncTemplate != null"}
7
6
  %v-runtime-template{":template":"asyncTemplate"}
@@ -0,0 +1,28 @@
1
+ module Matestack::Ui::Core::Actionview
2
+ class Dynamic < Matestack::Ui::Core::Component::Dynamic
3
+
4
+ include ActionView::Helpers::ActiveModelHelper
5
+ include ActionView::Helpers::ActiveModelInstanceTag
6
+ include ActionView::Helpers::AssetTagHelper
7
+ include ActionView::Helpers::AssetUrlHelper
8
+ include ActionView::Helpers::AtomFeedHelper
9
+ include ActionView::Helpers::CacheHelper
10
+ include ActionView::Helpers::CaptureHelper
11
+ include ActionView::Helpers::CspHelper
12
+ include ActionView::Helpers::CsrfHelper
13
+ include ActionView::Helpers::DateHelper
14
+ include ActionView::Helpers::DebugHelper
15
+ include ActionView::Helpers::FormHelper
16
+ include ActionView::Helpers::FormOptionsHelper
17
+ include ActionView::Helpers::FormTagHelper
18
+ include ActionView::Helpers::JavaScriptHelper
19
+ include ActionView::Helpers::NumberHelper
20
+ include ActionView::Helpers::OutputSafetyHelper
21
+ include ActionView::Helpers::SanitizeHelper
22
+ include ActionView::Helpers::TagHelper
23
+ include ActionView::Helpers::TextHelper
24
+ include ActionView::Helpers::TranslationHelper
25
+ include ActionView::Helpers::UrlHelper
26
+
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Matestack::Ui::Core::Actionview
2
+ class Static < Matestack::Ui::Core::Component::Static
3
+
4
+ include ActionView::Helpers::ActiveModelHelper
5
+ include ActionView::Helpers::ActiveModelInstanceTag
6
+ include ActionView::Helpers::AssetTagHelper
7
+ include ActionView::Helpers::AssetUrlHelper
8
+ include ActionView::Helpers::AtomFeedHelper
9
+ include ActionView::Helpers::CacheHelper
10
+ include ActionView::Helpers::CaptureHelper
11
+ include ActionView::Helpers::CspHelper
12
+ include ActionView::Helpers::CsrfHelper
13
+ include ActionView::Helpers::DateHelper
14
+ include ActionView::Helpers::DebugHelper
15
+ include ActionView::Helpers::FormHelper
16
+ include ActionView::Helpers::FormOptionsHelper
17
+ include ActionView::Helpers::FormTagHelper
18
+ include ActionView::Helpers::JavaScriptHelper
19
+ include ActionView::Helpers::NumberHelper
20
+ include ActionView::Helpers::OutputSafetyHelper
21
+ include ActionView::Helpers::SanitizeHelper
22
+ include ActionView::Helpers::TagHelper
23
+ include ActionView::Helpers::TextHelper
24
+ include ActionView::Helpers::TranslationHelper
25
+ include ActionView::Helpers::UrlHelper
26
+
27
+ end
28
+ end
@@ -1,5 +1,5 @@
1
1
  %address{@tag_attributes}
2
- - if options[:text].nil? && block_given?
2
+ - if text.nil? && block_given?
3
3
  = yield
4
4
  - else
5
- = options[:text]
5
+ = text
@@ -1,5 +1,5 @@
1
1
  module Matestack::Ui::Core::Address
2
2
  class Address < Matestack::Ui::Core::Component::Static
3
-
3
+ optional :text
4
4
  end
5
5
  end
@@ -1,4 +1,3 @@
1
1
  %component{"is": "matestack-ui-core-app", "inline-template": true}
2
- %div{"class": "matestack_app"}
3
- - @cells.each do |key, cell|
4
- = cell.call(:show)
2
+ %div{class: "matestack-app-wrapper"}
3
+ = render_content
@@ -1,7 +1,8 @@
1
1
  import Vue from 'vue/dist/vue.esm'
2
- import axios from 'axios'
3
2
  import VRuntimeTemplate from "v-runtime-template"
4
3
  import Vuex from 'vuex'
4
+ import isNavigatingToAnotherPage from "./location"
5
+ import matestackEventHub from '../js/event-hub'
5
6
 
6
7
  const componentDef = {
7
8
  props: ['appConfig', 'params'],
@@ -10,18 +11,31 @@ const componentDef = {
10
11
  },
11
12
  computed: Vuex.mapState({
12
13
  asyncTemplate: state => state.pageTemplate,
14
+ currentPathName: state => state.currentPathName,
15
+ currentSearch: state => state.currentSearch,
16
+ currentOrigin: state => state.currentOrigin,
13
17
  }),
14
18
  mounted: function(){
15
19
  const self = this;
16
- window.onpopstate = function(event) {
17
- self.$store.dispatch("navigateTo", {url: document.location.pathname, backwards: true} );
18
- }
20
+ window.addEventListener("popstate", (event) => {
21
+ if (isNavigatingToAnotherPage({
22
+ origin: self.currentOrigin,
23
+ pathName: self.currentPathName,
24
+ search: self.currentSearch
25
+ }, document.location)){
26
+ matestackEventHub.$emit("page_loading_triggered", document.location.pathname + document.location.search);
27
+ this.$store.commit('setPageLoading', true);
28
+ self.$store.dispatch("navigateTo", { url: document.location.pathname + document.location.search, backwards: true } );
29
+ }
30
+ })
19
31
  },
20
32
  components: {
21
33
  VRuntimeTemplate: VRuntimeTemplate
22
34
  }
23
35
  }
24
36
 
37
+
38
+
25
39
  let component = Vue.component('matestack-ui-core-app', componentDef)
26
40
 
27
41
  export default componentDef
@@ -1,98 +1,51 @@
1
1
  module Matestack::Ui::Core::App
2
- class App < Trailblazer::Cell
3
- include ActionView::Helpers::ActiveModelHelper
4
- include ActionView::Helpers::ActiveModelInstanceTag
5
- include ActionView::Helpers::AssetTagHelper
6
- include ActionView::Helpers::AssetUrlHelper
7
- include ActionView::Helpers::AtomFeedHelper
8
- include ActionView::Helpers::CacheHelper
9
- include ActionView::Helpers::CaptureHelper
10
- include ActionView::Helpers::CspHelper
11
- include ActionView::Helpers::CsrfHelper
12
- include ActionView::Helpers::DateHelper
13
- include ActionView::Helpers::DebugHelper
14
- include ActionView::Helpers::FormHelper
15
- include ActionView::Helpers::FormOptionsHelper
16
- include ActionView::Helpers::FormTagHelper
17
- include ActionView::Helpers::JavaScriptHelper
18
- include ActionView::Helpers::NumberHelper
19
- include ActionView::Helpers::OutputSafetyHelper
20
- include ActionView::Helpers::RecordTagHelper
21
- # include ActionView::Helpers::RenderingHelper
22
- include ActionView::Helpers::SanitizeHelper
23
- include ActionView::Helpers::TagHelper
24
- include ActionView::Helpers::TextHelper
25
- include ActionView::Helpers::TranslationHelper
26
- include ActionView::Helpers::UrlHelper
27
- include ::Cell::Haml
2
+ # TODO: Similar to page, App doesn't need everything base offers atm
3
+ class App < Matestack::Ui::Core::Component::Base
4
+ include Matestack::Ui::Core::Cell
28
5
  include Matestack::Ui::Core::ApplicationHelper
29
- include Matestack::Ui::Core::ToCell
30
- # include ::Rails.application.routes.url_helpers
6
+ # include Matestack::Ui::Core::ToCell
7
+ include Matestack::Ui::Core::HasViewContext
31
8
 
32
- view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
9
+ def initialize(page_class, controller_instance, context)
10
+ super(nil, context: context)
33
11
 
34
- extend ViewName::Flat
35
-
36
- def self.prefixes
37
- _prefixes = super
38
- modified_prefixes = _prefixes.map do |prefix|
39
- prefix_parts = prefix.split("/")
40
-
41
- if prefix_parts.last.include?(self.name.split("::")[-1].downcase)
42
- prefix_parts[0..-2].join("/")
43
- else
44
- prefix
45
- end
46
-
47
- end
48
-
49
- return modified_prefixes
50
- end
51
-
52
- def self.views_dir
53
- return ""
12
+ @page_class = page_class
13
+ @controller_instance = controller_instance
54
14
  end
55
15
 
56
- def initialize(model=nil, options={})
57
- super
58
- @nodes = {}
59
- @cells = {}
60
- @page_block = nil
61
- @page_id = ""
62
- setup
16
+ def show
17
+ render :app
63
18
  end
64
19
 
65
- def setup
66
- true
20
+ # Default "response" for just rendering the page without a more
21
+ # sophisticated app being supplied
22
+ def response
23
+ page_content
67
24
  end
68
25
 
69
- def prepare
70
- true
71
- end
72
-
73
- def show(page_id, page_nodes, &block)
74
- @page_id = page_id
75
- @page_nodes = page_nodes
76
- prepare
77
- response
78
- render(view: :app, &block)
79
- end
80
-
81
- def page_nodes
82
- @page_nodes
83
- end
84
-
85
- def components(&block)
86
- @nodes = Matestack::Ui::Core::AppNode.build(self, &block)
87
-
88
- @nodes.each do |key, node|
89
- @cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], nil, node["cached_params"])
26
+ # new alternative method name to be used in app defentions
27
+ # slots may contain a loading state element will be rendered during form start to finish of a transition
28
+ def yield_page slots: {}
29
+ page_content_wrapper slots: slots do
30
+ add_child @page_class,
31
+ controller_instance: @controller_instance,
32
+ context: context
90
33
  end
91
34
  end
92
35
 
93
- def partial(&block)
94
- Matestack::Ui::Core::AppNode.build(self, &block)
36
+ def page_content slots: {}
37
+ yield_page slots: slots
95
38
  end
96
39
 
40
+
41
+ # def page_content loading_state_element_slot: nil
42
+ # # TODO: Content probably needs/would benefit from a better name - like "DynamicWrapper" ?
43
+ # context[:loading_state_element_slot] = loading_state_element_slot
44
+ # add_child Matestack::Ui::Core::Page::Content, context: context do
45
+ # add_child @page_class,
46
+ # controller_instance: @controller_instance,
47
+ # context: context
48
+ # end
49
+ # end
97
50
  end
98
51
  end
@@ -0,0 +1,9 @@
1
+ const isNavigatingToAnotherPage = function(currentLocation, targetLocation) {
2
+
3
+ // omits hash by design
4
+ return currentLocation.pathName !== targetLocation.pathname ||
5
+ currentLocation.origin !== targetLocation.origin ||
6
+ currentLocation.search !== targetLocation.search
7
+ }
8
+
9
+ export default isNavigatingToAnotherPage
@@ -1,25 +1,52 @@
1
1
  import Vue from 'vue/dist/vue.esm'
2
2
  import Vuex from 'vuex'
3
3
  import axios from 'axios'
4
- import matestackEventHub from 'js/event-hub'
4
+ import matestackEventHub from '../js/event-hub'
5
5
 
6
6
  Vue.use(Vuex)
7
7
 
8
8
  const store = new Vuex.Store({
9
9
  state: {
10
10
  pageTemplate: null,
11
- currentPath: document.location.pathname
11
+ pageLoading: false,
12
+ currentPathName: document.location.pathname,
13
+ currentSearch: document.location.search,
14
+ currentOrigin: document.location.origin
12
15
  },
13
16
  mutations: {
14
17
  setPageTemplate (state, serverResponse){
15
18
  state.pageTemplate = serverResponse
16
19
  },
17
- setCurrentPath (state, path){
18
- state.currentPath = path
20
+ setPageLoading (state, boolean){
21
+ state.pageLoading = boolean
22
+ },
23
+ setCurrentLocation (state, current){
24
+ state.currentPathName = current.path
25
+ state.currentSearch = current.search
26
+ state.currentOrigin = current.origin
27
+ },
28
+ resetPageTemplate (state) {
29
+ state.pageTemplate = null;
30
+ },
31
+ pageScrollTop (state) {
32
+ //https://stackoverflow.com/a/35940276/13886137
33
+ const getScrollParent = function(node) {
34
+ if (node == null) {
35
+ return null
36
+ }
37
+ if (node.scrollHeight > node.clientHeight) {
38
+ return node
39
+ } else {
40
+ return getScrollParent(node.parentNode)
41
+ }
42
+ }
43
+ getScrollParent(document.getElementsByClassName("matestack-page-root")[0]).scrollTop = 0
19
44
  }
20
45
  },
21
46
  actions: {
22
47
  navigateTo ({ commit, state }, { url, backwards }) {
48
+ const self = this
49
+ commit('setPageLoading', true)
23
50
  matestackEventHub.$emit("page_loading", url);
24
51
  if (typeof matestackUiCoreTransitionStart !== 'undefined') {
25
52
  matestackUiCoreTransitionStart(url);
@@ -44,9 +71,11 @@ const store = new Vuex.Store({
44
71
  window.history.pushState({matestackApp: true, url: url}, null, url);
45
72
  }
46
73
  setTimeout(function () {
47
- resolve(response["data"])
74
+ resolve(response["data"]);
48
75
  commit('setPageTemplate', response["data"])
49
- commit('setCurrentPath', url)
76
+ commit('setCurrentLocation', { path: url.split("?")[0], search: document.location.search, origin: document.location.origin })
77
+ commit('setPageLoading', false)
78
+ commit('pageScrollTop')
50
79
  matestackEventHub.$emit("page_loaded", url);
51
80
  if (typeof matestackUiCoreTransitionSuccess !== 'undefined') {
52
81
  matestackUiCoreTransitionSuccess(url);
@@ -0,0 +1 @@
1
+ %area{@tag_attributes}
@@ -0,0 +1,20 @@
1
+ module Matestack::Ui::Core::Area
2
+ class Area < Matestack::Ui::Core::Component::Static
3
+ optional :alt, :coords, :download, :href, :hreflang, :media, :rel, :shape, :target, :type
4
+
5
+ def setup
6
+ @tag_attributes.merge!({
7
+ alt: alt,
8
+ coords: coords.join(','),
9
+ download: download,
10
+ href: href,
11
+ hreflang: hreflang,
12
+ media: media,
13
+ rel: rel,
14
+ shape: shape,
15
+ target: target,
16
+ type: type
17
+ })
18
+ end
19
+ end
20
+ end