matestack-ui-core 0.7.2

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 (202) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +228 -0
  4. data/Rakefile +34 -0
  5. data/app/concepts/matestack/ui/core/abbr/abbr.haml +5 -0
  6. data/app/concepts/matestack/ui/core/abbr/abbr.rb +12 -0
  7. data/app/concepts/matestack/ui/core/absolute/absolute.haml +3 -0
  8. data/app/concepts/matestack/ui/core/absolute/absolute.rb +17 -0
  9. data/app/concepts/matestack/ui/core/action/action.haml +3 -0
  10. data/app/concepts/matestack/ui/core/action/action.js +49 -0
  11. data/app/concepts/matestack/ui/core/action/action.rb +52 -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.haml +4 -0
  15. data/app/concepts/matestack/ui/core/app/app.js +27 -0
  16. data/app/concepts/matestack/ui/core/app/app.rb +98 -0
  17. data/app/concepts/matestack/ui/core/app/store.js +70 -0
  18. data/app/concepts/matestack/ui/core/article/article.haml +5 -0
  19. data/app/concepts/matestack/ui/core/article/article.rb +5 -0
  20. data/app/concepts/matestack/ui/core/async/async.haml +2 -0
  21. data/app/concepts/matestack/ui/core/async/async.js +76 -0
  22. data/app/concepts/matestack/ui/core/async/async.rb +12 -0
  23. data/app/concepts/matestack/ui/core/blockquote/blockquote.haml +5 -0
  24. data/app/concepts/matestack/ui/core/blockquote/blockquote.rb +11 -0
  25. data/app/concepts/matestack/ui/core/br/br.haml +5 -0
  26. data/app/concepts/matestack/ui/core/br/br.rb +5 -0
  27. data/app/concepts/matestack/ui/core/button/button.haml +5 -0
  28. data/app/concepts/matestack/ui/core/button/button.rb +11 -0
  29. data/app/concepts/matestack/ui/core/caption/caption.haml +5 -0
  30. data/app/concepts/matestack/ui/core/caption/caption.rb +5 -0
  31. data/app/concepts/matestack/ui/core/collection/content/content.js +98 -0
  32. data/app/concepts/matestack/ui/core/collection/content/content.rb +18 -0
  33. data/app/concepts/matestack/ui/core/collection/content/next/next.haml +3 -0
  34. data/app/concepts/matestack/ui/core/collection/content/next/next.rb +5 -0
  35. data/app/concepts/matestack/ui/core/collection/content/page/link/link.haml +3 -0
  36. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +5 -0
  37. data/app/concepts/matestack/ui/core/collection/content/previous/previous.haml +3 -0
  38. data/app/concepts/matestack/ui/core/collection/content/previous/previous.rb +5 -0
  39. data/app/concepts/matestack/ui/core/collection/filter/filter.js +48 -0
  40. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +17 -0
  41. data/app/concepts/matestack/ui/core/collection/filter/input/input.haml +2 -0
  42. data/app/concepts/matestack/ui/core/collection/filter/input/input.rb +25 -0
  43. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.haml +3 -0
  44. data/app/concepts/matestack/ui/core/collection/filter/reset/reset.rb +5 -0
  45. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.haml +3 -0
  46. data/app/concepts/matestack/ui/core/collection/filter/submit/submit.rb +5 -0
  47. data/app/concepts/matestack/ui/core/collection/helper.rb +113 -0
  48. data/app/concepts/matestack/ui/core/collection/order/order.js +56 -0
  49. data/app/concepts/matestack/ui/core/collection/order/order.rb +17 -0
  50. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +13 -0
  51. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.haml +3 -0
  52. data/app/concepts/matestack/ui/core/collection/order/toggle/toggle.rb +5 -0
  53. data/app/concepts/matestack/ui/core/component/anonym-dynamic-component.js +10 -0
  54. data/app/concepts/matestack/ui/core/component/children.haml +2 -0
  55. data/app/concepts/matestack/ui/core/component/component.js +59 -0
  56. data/app/concepts/matestack/ui/core/component/dynamic.haml +6 -0
  57. data/app/concepts/matestack/ui/core/component/dynamic.rb +261 -0
  58. data/app/concepts/matestack/ui/core/component/dynamic_without_rerender.haml +2 -0
  59. data/app/concepts/matestack/ui/core/component/response.haml +2 -0
  60. data/app/concepts/matestack/ui/core/component/response_dynamic.haml +7 -0
  61. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +3 -0
  62. data/app/concepts/matestack/ui/core/component/static.haml +1 -0
  63. data/app/concepts/matestack/ui/core/component/static.rb +16 -0
  64. data/app/concepts/matestack/ui/core/details/details.haml +3 -0
  65. data/app/concepts/matestack/ui/core/details/details.rb +5 -0
  66. data/app/concepts/matestack/ui/core/div/div.haml +3 -0
  67. data/app/concepts/matestack/ui/core/div/div.rb +5 -0
  68. data/app/concepts/matestack/ui/core/footer/footer.haml +3 -0
  69. data/app/concepts/matestack/ui/core/footer/footer.rb +5 -0
  70. data/app/concepts/matestack/ui/core/form/form.haml +2 -0
  71. data/app/concepts/matestack/ui/core/form/form.js +136 -0
  72. data/app/concepts/matestack/ui/core/form/form.rb +71 -0
  73. data/app/concepts/matestack/ui/core/form/inline/inline.haml +6 -0
  74. data/app/concepts/matestack/ui/core/form/inline/inline.rb +9 -0
  75. data/app/concepts/matestack/ui/core/form/input/input.haml +27 -0
  76. data/app/concepts/matestack/ui/core/form/input/input.rb +74 -0
  77. data/app/concepts/matestack/ui/core/form/select/select.haml +76 -0
  78. data/app/concepts/matestack/ui/core/form/select/select.rb +73 -0
  79. data/app/concepts/matestack/ui/core/form/submit/submit.haml +3 -0
  80. data/app/concepts/matestack/ui/core/form/submit/submit.rb +9 -0
  81. data/app/concepts/matestack/ui/core/header/header.haml +3 -0
  82. data/app/concepts/matestack/ui/core/header/header.rb +5 -0
  83. data/app/concepts/matestack/ui/core/heading/heading.haml +50 -0
  84. data/app/concepts/matestack/ui/core/heading/heading.rb +5 -0
  85. data/app/concepts/matestack/ui/core/hr/hr.haml +1 -0
  86. data/app/concepts/matestack/ui/core/hr/hr.rb +5 -0
  87. data/app/concepts/matestack/ui/core/html/html.haml +3 -0
  88. data/app/concepts/matestack/ui/core/html/html.js +10 -0
  89. data/app/concepts/matestack/ui/core/html/html.rb +17 -0
  90. data/app/concepts/matestack/ui/core/icon/icon.haml +5 -0
  91. data/app/concepts/matestack/ui/core/icon/icon.rb +5 -0
  92. data/app/concepts/matestack/ui/core/img/img.haml +1 -0
  93. data/app/concepts/matestack/ui/core/img/img.rb +5 -0
  94. data/app/concepts/matestack/ui/core/input/input.haml +3 -0
  95. data/app/concepts/matestack/ui/core/input/input.rb +5 -0
  96. data/app/concepts/matestack/ui/core/isolate/isolate.haml +2 -0
  97. data/app/concepts/matestack/ui/core/isolate/isolate.rb +11 -0
  98. data/app/concepts/matestack/ui/core/js/core.js +30 -0
  99. data/app/concepts/matestack/ui/core/js/event-hub.js +5 -0
  100. data/app/concepts/matestack/ui/core/js/helpers/query-params-helper.js +56 -0
  101. data/app/concepts/matestack/ui/core/label/label.haml +5 -0
  102. data/app/concepts/matestack/ui/core/label/label.rb +5 -0
  103. data/app/concepts/matestack/ui/core/li/li.haml +5 -0
  104. data/app/concepts/matestack/ui/core/li/li.rb +5 -0
  105. data/app/concepts/matestack/ui/core/link/link.haml +5 -0
  106. data/app/concepts/matestack/ui/core/link/link.rb +26 -0
  107. data/app/concepts/matestack/ui/core/main/main.haml +3 -0
  108. data/app/concepts/matestack/ui/core/main/main.rb +5 -0
  109. data/app/concepts/matestack/ui/core/nav/nav.haml +3 -0
  110. data/app/concepts/matestack/ui/core/nav/nav.rb +5 -0
  111. data/app/concepts/matestack/ui/core/ol/ol.haml +3 -0
  112. data/app/concepts/matestack/ui/core/ol/ol.rb +5 -0
  113. data/app/concepts/matestack/ui/core/onclick/onclick.haml +2 -0
  114. data/app/concepts/matestack/ui/core/onclick/onclick.js +21 -0
  115. data/app/concepts/matestack/ui/core/onclick/onclick.rb +5 -0
  116. data/app/concepts/matestack/ui/core/page/content.haml +7 -0
  117. data/app/concepts/matestack/ui/core/page/content.js +17 -0
  118. data/app/concepts/matestack/ui/core/page/content.rb +5 -0
  119. data/app/concepts/matestack/ui/core/page/page.haml +9 -0
  120. data/app/concepts/matestack/ui/core/page/page.rb +175 -0
  121. data/app/concepts/matestack/ui/core/paragraph/paragraph.haml +5 -0
  122. data/app/concepts/matestack/ui/core/paragraph/paragraph.rb +5 -0
  123. data/app/concepts/matestack/ui/core/partial/partial.haml +2 -0
  124. data/app/concepts/matestack/ui/core/partial/partial.rb +5 -0
  125. data/app/concepts/matestack/ui/core/pg/pg.haml +5 -0
  126. data/app/concepts/matestack/ui/core/pg/pg.rb +5 -0
  127. data/app/concepts/matestack/ui/core/plain/plain.rb +9 -0
  128. data/app/concepts/matestack/ui/core/progress/progress.haml +3 -0
  129. data/app/concepts/matestack/ui/core/progress/progress.rb +14 -0
  130. data/app/concepts/matestack/ui/core/section/section.haml +3 -0
  131. data/app/concepts/matestack/ui/core/section/section.rb +5 -0
  132. data/app/concepts/matestack/ui/core/slot/slot.haml +2 -0
  133. data/app/concepts/matestack/ui/core/slot/slot.rb +5 -0
  134. data/app/concepts/matestack/ui/core/small/small.haml +5 -0
  135. data/app/concepts/matestack/ui/core/small/small.rb +5 -0
  136. data/app/concepts/matestack/ui/core/span/span.haml +5 -0
  137. data/app/concepts/matestack/ui/core/span/span.rb +5 -0
  138. data/app/concepts/matestack/ui/core/strong/strong.haml +5 -0
  139. data/app/concepts/matestack/ui/core/strong/strong.rb +5 -0
  140. data/app/concepts/matestack/ui/core/sub/sub.haml +5 -0
  141. data/app/concepts/matestack/ui/core/sub/sub.rb +5 -0
  142. data/app/concepts/matestack/ui/core/summary/summary.haml +5 -0
  143. data/app/concepts/matestack/ui/core/summary/summary.rb +5 -0
  144. data/app/concepts/matestack/ui/core/table/table.haml +3 -0
  145. data/app/concepts/matestack/ui/core/table/table.rb +5 -0
  146. data/app/concepts/matestack/ui/core/tbody/tbody.haml +3 -0
  147. data/app/concepts/matestack/ui/core/tbody/tbody.rb +5 -0
  148. data/app/concepts/matestack/ui/core/td/td.haml +5 -0
  149. data/app/concepts/matestack/ui/core/td/td.rb +5 -0
  150. data/app/concepts/matestack/ui/core/tfoot/tfoot.haml +3 -0
  151. data/app/concepts/matestack/ui/core/tfoot/tfoot.rb +5 -0
  152. data/app/concepts/matestack/ui/core/th/th.haml +5 -0
  153. data/app/concepts/matestack/ui/core/th/th.rb +5 -0
  154. data/app/concepts/matestack/ui/core/thead/thead.haml +3 -0
  155. data/app/concepts/matestack/ui/core/thead/thead.rb +5 -0
  156. data/app/concepts/matestack/ui/core/time/time.haml +3 -0
  157. data/app/concepts/matestack/ui/core/time/time.rb +11 -0
  158. data/app/concepts/matestack/ui/core/tr/tr.haml +3 -0
  159. data/app/concepts/matestack/ui/core/tr/tr.rb +5 -0
  160. data/app/concepts/matestack/ui/core/transition/transition.haml +5 -0
  161. data/app/concepts/matestack/ui/core/transition/transition.js +26 -0
  162. data/app/concepts/matestack/ui/core/transition/transition.rb +31 -0
  163. data/app/concepts/matestack/ui/core/ul/ul.haml +3 -0
  164. data/app/concepts/matestack/ui/core/ul/ul.rb +5 -0
  165. data/app/concepts/matestack/ui/core/video/video.haml +1 -0
  166. data/app/concepts/matestack/ui/core/video/video.rb +7 -0
  167. data/app/concepts/matestack/ui/core/view/view.haml +2 -0
  168. data/app/concepts/matestack/ui/core/view/view.js +42 -0
  169. data/app/concepts/matestack/ui/core/view/view.rb +5 -0
  170. data/app/concepts/matestack/ui/core/youtube/youtube.haml +1 -0
  171. data/app/concepts/matestack/ui/core/youtube/youtube.rb +26 -0
  172. data/app/helpers/matestack/ui/core/application_helper.rb +35 -0
  173. data/app/lib/matestack/ui/app.rb +1 -0
  174. data/app/lib/matestack/ui/core/app_node.rb +53 -0
  175. data/app/lib/matestack/ui/core/component_node.rb +73 -0
  176. data/app/lib/matestack/ui/core/page_node.rb +96 -0
  177. data/app/lib/matestack/ui/core/to_cell.rb +129 -0
  178. data/app/lib/matestack/ui/dynamic_component.rb +1 -0
  179. data/app/lib/matestack/ui/page.rb +1 -0
  180. data/app/lib/matestack/ui/static_component.rb +1 -0
  181. data/config/routes.rb +3 -0
  182. data/lib/generators/matestack_app/USAGE +21 -0
  183. data/lib/generators/matestack_app/matestack_app_generator.rb +26 -0
  184. data/lib/generators/matestack_app/templates/matestack_app.erb +26 -0
  185. data/lib/generators/matestack_app/templates/matestack_app_controller.erb +7 -0
  186. data/lib/generators/matestack_component/USAGE +20 -0
  187. data/lib/generators/matestack_component/matestack_component_generator.rb +30 -0
  188. data/lib/generators/matestack_component/templates/matestack_component.haml.erb +5 -0
  189. data/lib/generators/matestack_component/templates/matestack_component.js.erb +17 -0
  190. data/lib/generators/matestack_component/templates/matestack_component.rb.erb +13 -0
  191. data/lib/generators/matestack_component/templates/matestack_component.scss.erb +1 -0
  192. data/lib/generators/matestack_page/USAGE +28 -0
  193. data/lib/generators/matestack_page/matestack_page_generator.rb +41 -0
  194. data/lib/generators/matestack_page/templates/matestack_page.erb +15 -0
  195. data/lib/matestack/ui/core.rb +15 -0
  196. data/lib/matestack/ui/core/engine.rb +19 -0
  197. data/lib/matestack/ui/core/version.rb +7 -0
  198. data/lib/tasks/matestack/ui/core_tasks.rake +4 -0
  199. data/vendor/assets/javascripts/manifest.json +4 -0
  200. data/vendor/assets/javascripts/matestack-ui-core.js +15309 -0
  201. data/vendor/assets/javascripts/matestack-ui-core.js.map +1 -0
  202. metadata +350 -0
@@ -0,0 +1,17 @@
1
+ require_dependency "cell/partial"
2
+
3
+ module Matestack::Ui::Core::Html
4
+ class Html < Matestack::Ui::Core::Component::Dynamic
5
+
6
+ include Cell::ViewModel::Partial
7
+
8
+ view_paths << "#{::Rails.root}/app/views"
9
+
10
+ def include_partial(&block)
11
+ render partial: "#{options[:path]}" do
12
+ capture(&block)
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ %i{@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::Icon
2
+ class Icon < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ = image_tag(@tag_attributes, ActionController::Base.helpers.asset_path(options[:path]), height: options[:height], width: options[:width], alt: options[:alt]])
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Img
2
+ class Img < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ %input{@tag_attributes}
2
+ - if block_given?
3
+ = yield
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Input
2
+ class Input < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ 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
@@ -0,0 +1,30 @@
1
+ import Vue from 'vue/dist/vue.esm'
2
+
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'
18
+
19
+ let matestackUiApp = undefined
20
+
21
+ document.addEventListener('DOMContentLoaded', () => {
22
+
23
+ matestackUiApp = new Vue({
24
+ el: "#matestack_ui",
25
+ store: store
26
+ })
27
+
28
+ })
29
+
30
+ export default Vue
@@ -0,0 +1,5 @@
1
+ import Vue from 'vue/dist/vue.esm'
2
+
3
+ const matestackEventHub = new Vue();
4
+
5
+ export default matestackEventHub
@@ -0,0 +1,56 @@
1
+ const updateQueryParams = (key, value, url) => {
2
+ if (!url) url = window.location.href;
3
+ let re = new RegExp(`([?&])${key}=.*?(&|#|$)(.*)`, "gi"), hash;
4
+
5
+ if (re.test(url)) {
6
+ if (typeof value !== 'undefined' && value !== null)
7
+ return url.replace(re, `$1${key}=${value}$2$3`);
8
+ else {
9
+ hash = url.split('#');
10
+ url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
11
+ if (typeof hash[1] !== 'undefined' && hash[1] !== null)
12
+ url += `#${hash[1]}`;
13
+ return url;
14
+ }
15
+ }
16
+ else {
17
+ if (typeof value !== 'undefined' && value !== null) {
18
+ const separator = url.indexOf('?') !== -1 ? '&' : '?';
19
+ hash = url.split('#');
20
+ url = `${hash[0]}${separator}${key}=${value}`;
21
+ if (typeof hash[1] !== 'undefined' && hash[1] !== null)
22
+ url += `#${hash[1]}`;
23
+ return url;
24
+ }
25
+ else
26
+ return url;
27
+ }
28
+ };
29
+
30
+ const getQueryParam = (name, url) => {
31
+ if (!url) url = window.location.href;
32
+ name = name.replace(/[\[\]]/g, '\\$&');
33
+ const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`), results = regex.exec(url);
34
+ if (!results) return null;
35
+ if (!results[2]) return '';
36
+ return decodeURIComponent(results[2].replace(/\+/g, ' '));
37
+ };
38
+
39
+ const queryParamsToObject = () => {
40
+ const search = window.location.search.substring(1);
41
+ if(search.length === 0){
42
+ return {}
43
+ } else {
44
+ const result = JSON.parse(
45
+ `{"${search.replace(/&/g, '","').replace(/=/g,'":"')}"}`,
46
+ (key, value) => { return key===""?value:decodeURIComponent(value) }
47
+ );
48
+ return result;
49
+ }
50
+ };
51
+
52
+ export default {
53
+ updateQueryParams: updateQueryParams,
54
+ getQueryParam: getQueryParam,
55
+ queryParamsToObject: queryParamsToObject
56
+ }
@@ -0,0 +1,5 @@
1
+ %label{@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::Label
2
+ class Label < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ %li{@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::Li
2
+ class Li < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ %a{@tag_attributes}
2
+ - if options[:text].nil? && block_given?
3
+ = yield
4
+ - else
5
+ = options[:text]
@@ -0,0 +1,26 @@
1
+ module Matestack::Ui::Core::Link
2
+ class Link < Matestack::Ui::Core::Component::Static
3
+
4
+ REQUIRED_KEYS = [:path]
5
+
6
+ def setup
7
+ @tag_attributes.merge!({
8
+ "class": options[:class],
9
+ "id": component_id,
10
+ "method": options[:method],
11
+ "target": options[:target] ||= nil,
12
+ "href": link_path
13
+ })
14
+ end
15
+
16
+ def link_path
17
+ if options[:path].is_a?(Symbol)
18
+ return ::Rails.application.routes.url_helpers.send(options[:path], options[:params])
19
+ end
20
+ if options[:path].is_a?(String)
21
+ return options[:path]
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ %main{@tag_attributes}
2
+ - if block_given?
3
+ = yield
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Main
2
+ class Main < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ %nav{@tag_attributes}
2
+ - if block_given?
3
+ = yield
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Nav
2
+ class Nav < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ %ol{@tag_attributes}
2
+ - if block_given?
3
+ = yield
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Ol
2
+ class Ol < Matestack::Ui::Core::Component::Static
3
+
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ %div{@tag_attributes, "@click": "perform"}
2
+ = yield
@@ -0,0 +1,21 @@
1
+ import Vue from 'vue/dist/vue.esm'
2
+
3
+ import matestackEventHub from 'js/event-hub'
4
+
5
+ import componentMixin from 'component/component'
6
+
7
+ const componentDef = {
8
+ mixins: [componentMixin],
9
+ data: function(){
10
+ return { }
11
+ },
12
+ methods: {
13
+ perform: function(){
14
+ matestackEventHub.$emit(this.componentConfig["emit"], this.componentConfig["data"])
15
+ }
16
+ }
17
+ }
18
+
19
+ let component = Vue.component('matestack-ui-core-onclick', componentDef)
20
+
21
+ export default componentDef
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Onclick
2
+ class Onclick < Matestack::Ui::Core::Component::Dynamic
3
+
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ %div{"class": "matestack_page"}
2
+ %div{"v-if": "asyncPageTemplate == null"}
3
+ %div{"class": "matestack_page_content"}
4
+ - @children_cells.each do |key, cell|
5
+ = cell.call(:show)
6
+ %div{"v-if": "asyncPageTemplate != null"}
7
+ %v-runtime-template{":template":"asyncPageTemplate"}
@@ -0,0 +1,17 @@
1
+ import Vue from 'vue/dist/vue.esm'
2
+ import Vuex from 'vuex'
3
+ import componentMixin from 'component/component'
4
+
5
+ const componentDef = {
6
+ mixins: [componentMixin],
7
+ data: function(){
8
+ return {}
9
+ },
10
+ computed: Vuex.mapState({
11
+ asyncPageTemplate: state => state.pageTemplate,
12
+ })
13
+ }
14
+
15
+ let component = Vue.component('matestack-ui-core-page-content', componentDef)
16
+
17
+ export default componentDef
@@ -0,0 +1,5 @@
1
+ module Matestack::Ui::Core::Page
2
+ class Content < Matestack::Ui::Core::Component::Dynamic
3
+
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ - if context[:params][:only_page] == "true"
2
+ %div{class: "matestack_page_content"}
3
+ - @cells.each do |key, cell|
4
+ = cell.call(:show)
5
+ - else
6
+ %div{class: "matestack_page"}
7
+ %div{class: "matestack_page_content"}
8
+ - @cells.each do |key, cell|
9
+ = cell.call(:show)
@@ -0,0 +1,175 @@
1
+ module Matestack::Ui::Core::Page
2
+ class Page < Trailblazer::Cell
3
+
4
+ include ActionView::Helpers::TranslationHelper
5
+ include ::Cell::Haml
6
+ include Matestack::Ui::Core::ApplicationHelper
7
+ include Matestack::Ui::Core::ToCell
8
+
9
+ view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
10
+
11
+ extend ViewName::Flat
12
+
13
+ def self.prefixes
14
+ _prefixes = super
15
+ modified_prefixes = _prefixes.map do |prefix|
16
+ prefix_parts = prefix.split("/")
17
+
18
+ if prefix_parts.last.include?(self.name.split("::")[-1].downcase)
19
+ prefix_parts[0..-2].join("/")
20
+ else
21
+ prefix
22
+ end
23
+
24
+ end
25
+
26
+ return modified_prefixes + _prefixes
27
+ end
28
+
29
+ def self.views_dir
30
+ return ""
31
+ end
32
+
33
+ def initialize(model=nil, options={})
34
+ super
35
+ generate_page_name
36
+ set_app_class
37
+ @nodes = {}
38
+ @cells = {}
39
+ options[:controller_instance].instance_variables.each do |controller_instance_var_key|
40
+ unless controller_instance_var_key.to_s.start_with?("@_")
41
+ self.instance_variable_set(controller_instance_var_key, options[:controller_instance].instance_variable_get(controller_instance_var_key))
42
+ end
43
+ end
44
+ end
45
+
46
+ def prepare
47
+ true
48
+ end
49
+
50
+ def components(&block)
51
+ @nodes = Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
52
+ end
53
+
54
+ def nodes_to_cell
55
+ @nodes.each do |key, node|
56
+ @cells[key] = to_cell(key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
57
+ end
58
+ end
59
+
60
+ def partial(&block)
61
+ return block
62
+ end
63
+
64
+ def slot(&block)
65
+ Matestack::Ui::Core::PageNode.build(self, nil, context[:params], &block)
66
+ end
67
+
68
+ def isolate(&block)
69
+ return block
70
+ end
71
+
72
+
73
+ def show(component_key=nil, only_page=false)
74
+ prepare
75
+ return resolve_isolated_component(component_key) if !component_key.nil? && component_key.include?("isolate")
76
+
77
+ response
78
+
79
+ render_mode = nil
80
+ render_mode = :only_page if only_page == true
81
+ render_mode = :render_page_with_app if !@app_class.nil? && only_page == false
82
+ render_mode = :only_page if @app_class.nil? && only_page == false
83
+ render_mode = :render_component if !component_key.nil?
84
+
85
+ case render_mode
86
+
87
+ when :only_page
88
+ nodes_to_cell
89
+ render :page
90
+ when :render_page_with_app
91
+ concept(@app_class).call(:show, @page_id, @nodes)
92
+ when :render_component
93
+ begin
94
+ if component_key.include?("__")
95
+ keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
96
+ page_content_keys = keys_array.select{|key| key.match(/^page_content_/)}
97
+ if page_content_keys.any?
98
+ keys_array = keys_array.drop(keys_array.find_index(page_content_keys[0])+2)
99
+ end
100
+ node = @nodes.dig(*keys_array)
101
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
102
+ return cell.render_content
103
+ else
104
+ node = @nodes[component_key]
105
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
106
+ return cell.render_content
107
+ end
108
+ rescue
109
+ raise "Component '#{component_key}' could not be resolved. Notice: Rerendering currently works only on page-level. \
110
+ You are therefore currently not able to use 'async' within a component for example!"
111
+ end
112
+ end
113
+ end
114
+
115
+ def page_id
116
+ @custom_page_id ||= @page_id
117
+ end
118
+
119
+ private
120
+
121
+ def resolve_isolated_component component_key
122
+ keys_array = component_key.gsub("__", "__components__").split("__").map {|k| k.to_s}
123
+ isolate_keys = keys_array.select{|key| key.match(/^isolate_/)}
124
+ keys_array = keys_array.drop(keys_array.find_index(isolate_keys[0])+2)
125
+ isolated_scope_method = keys_array[0]
126
+ if isolated_scope_method.include?("(")
127
+ isolated_scope_method_name = isolated_scope_method.split("(").first
128
+ isolated_scope_method_argument = isolated_scope_method.split("(").last.split(")").first
129
+ isolated_scope_method_argument = JSON.parse(isolated_scope_method_argument)
130
+ isolated_block = self.send(isolated_scope_method_name, isolated_scope_method_argument.with_indifferent_access)
131
+ else
132
+ isolated_block = self.send(isolated_scope_method)
133
+ end
134
+ nodes = Matestack::Ui::Core::PageNode.build(
135
+ self, nil, context[:params], &isolated_block
136
+ )
137
+ node = nodes.dig(*keys_array.drop(2))
138
+ cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
139
+ return cell.render_content
140
+ end
141
+
142
+ def generate_page_name
143
+ name_parts = self.class.name.split("::").map { |name| name.underscore }
144
+ @page_id = name_parts.join("_")
145
+ end
146
+
147
+ def set_app_class
148
+ class_name = self.class.name
149
+ name_parts = class_name.split("::")
150
+ if name_parts.count <= 2
151
+ @app_class = nil
152
+ return
153
+ end
154
+
155
+ app_name = "#{name_parts[1]}"
156
+ begin
157
+ app_class = Apps.const_get(app_name)
158
+ if app_class.is_a?(Class)
159
+ @app_class = app_class
160
+ else
161
+ require_dependency "apps/#{app_name.underscore}"
162
+ app_class = Apps.const_get(app_name)
163
+ if app_class.is_a?(Class)
164
+ @app_class = app_class
165
+ else
166
+ @app_class = nil
167
+ end
168
+ end
169
+ rescue
170
+ @app_class = nil
171
+ end
172
+ end
173
+
174
+ end
175
+ end