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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +8 -0
  3. data/README.md +27 -215
  4. data/app/concepts/matestack/ui/core/abbr/abbr.haml +2 -2
  5. data/app/concepts/matestack/ui/core/abbr/abbr.rb +3 -2
  6. data/app/concepts/matestack/ui/core/action/action.rb +23 -19
  7. data/app/concepts/matestack/ui/core/address/address.haml +2 -2
  8. data/app/concepts/matestack/ui/core/address/address.rb +1 -1
  9. data/app/concepts/matestack/ui/core/app/app.haml +2 -3
  10. data/app/concepts/matestack/ui/core/app/app.js +4 -1
  11. data/app/concepts/matestack/ui/core/app/app.rb +32 -56
  12. data/app/concepts/matestack/ui/core/app/store.js +23 -1
  13. data/app/concepts/matestack/ui/core/area/area.rb +12 -10
  14. data/app/concepts/matestack/ui/core/async/async.haml +6 -2
  15. data/app/concepts/matestack/ui/core/async/async.js +37 -3
  16. data/app/concepts/matestack/ui/core/async/async.rb +29 -4
  17. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +2 -0
  18. data/app/concepts/matestack/ui/core/bdo/bdo.rb +1 -1
  19. data/app/concepts/matestack/ui/core/collection/content/content.rb +2 -2
  20. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +4 -2
  21. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +4 -5
  22. data/app/concepts/matestack/ui/core/collection/filter/select/select.haml +10 -0
  23. data/app/concepts/matestack/ui/core/collection/filter/select/select.rb +29 -0
  24. data/app/concepts/matestack/ui/core/collection/helper.rb +14 -6
  25. data/app/concepts/matestack/ui/core/collection/order/order.js +1 -1
  26. data/app/concepts/matestack/ui/core/collection/order/order.rb +4 -5
  27. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +6 -5
  28. data/app/concepts/matestack/ui/core/component/base.rb +424 -0
  29. data/app/concepts/matestack/ui/core/component/children.haml +2 -2
  30. data/app/concepts/matestack/ui/core/component/component.js +1 -55
  31. data/app/concepts/matestack/ui/core/component/dynamic.haml +1 -1
  32. data/app/concepts/matestack/ui/core/component/dynamic.rb +24 -247
  33. data/app/concepts/matestack/ui/core/component/rerender.rb +8 -0
  34. data/app/concepts/matestack/ui/core/component/static.rb +3 -12
  35. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +79 -0
  36. data/app/concepts/matestack/ui/core/form/form.js +25 -20
  37. data/app/concepts/matestack/ui/core/form/form.rb +7 -2
  38. data/app/concepts/matestack/ui/core/form/has_errors.rb +54 -0
  39. data/app/concepts/matestack/ui/core/form/has_input_html_attributes.rb +13 -0
  40. data/app/concepts/matestack/ui/core/form/input/input.rb +32 -52
  41. data/app/concepts/matestack/ui/core/form/radio/radio.rb +71 -0
  42. data/app/concepts/matestack/ui/core/form/select/select.haml +9 -80
  43. data/app/concepts/matestack/ui/core/form/select/select.rb +61 -56
  44. data/app/concepts/matestack/ui/core/form/submit/submit.rb +4 -1
  45. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +28 -0
  46. data/app/concepts/matestack/ui/core/form/utils.rb +47 -0
  47. data/app/concepts/matestack/ui/core/heading/heading.rb +2 -0
  48. data/app/concepts/matestack/ui/core/input/input.haml +1 -2
  49. data/app/concepts/matestack/ui/core/input/input.rb +4 -0
  50. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +2 -0
  51. data/app/concepts/matestack/ui/core/isolated/isolated.haml +10 -0
  52. data/app/concepts/matestack/ui/core/isolated/isolated.js +108 -0
  53. data/app/concepts/matestack/ui/core/isolated/isolated.rb +59 -0
  54. data/app/concepts/matestack/ui/core/js/core.js +5 -4
  55. data/app/concepts/matestack/ui/core/link/link.rb +7 -7
  56. data/app/concepts/matestack/ui/core/map/map.rb +1 -1
  57. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -0
  58. data/app/concepts/matestack/ui/core/page/{content.js → content/content.js} +8 -2
  59. data/app/concepts/matestack/ui/core/page/content/content.rb +29 -0
  60. data/app/concepts/matestack/ui/core/page/page.haml +3 -9
  61. data/app/concepts/matestack/ui/core/page/page.rb +15 -179
  62. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -1
  63. data/app/concepts/matestack/ui/core/slot/slot.rb +2 -2
  64. data/app/concepts/matestack/ui/core/textarea/textarea.haml +2 -0
  65. data/app/concepts/matestack/ui/core/textarea/textarea.rb +10 -0
  66. data/app/concepts/matestack/ui/core/toggle/toggle.haml +2 -0
  67. data/app/concepts/matestack/ui/core/toggle/toggle.js +71 -0
  68. data/app/concepts/matestack/ui/core/toggle/toggle.rb +14 -0
  69. data/app/concepts/matestack/ui/core/transition/transition.js +1 -0
  70. data/app/concepts/matestack/ui/core/transition/transition.rb +1 -0
  71. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +1 -1
  72. data/app/concepts/matestack/ui/core/video/video.rb +1 -1
  73. data/app/concepts/matestack/ui/core/view/view.haml +1 -0
  74. data/app/concepts/matestack/ui/core/view/view.rb +30 -0
  75. data/app/concepts/matestack/ui/core/youtube/youtube.rb +1 -1
  76. data/app/helpers/matestack/ui/core/application_helper.rb +89 -20
  77. data/app/lib/matestack/ui/component.rb +1 -0
  78. data/app/lib/matestack/ui/core/has_view_context.rb +4 -4
  79. data/app/lib/matestack/ui/core/html_attributes.rb +43 -0
  80. data/app/lib/matestack/ui/core/properties.rb +88 -0
  81. data/app/lib/matestack/ui/core/rendering/default_renderer_class_determiner.rb +33 -0
  82. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +199 -0
  83. data/app/lib/matestack/ui/isolated_component.rb +1 -0
  84. data/app/lib/matestack/ui/vue_js_component.rb +1 -0
  85. data/lib/matestack/ui/core.rb +4 -2
  86. data/lib/matestack/ui/core/cell.rb +0 -2
  87. data/lib/matestack/ui/core/component/registry.rb +47 -0
  88. data/lib/matestack/ui/core/components.rb +267 -0
  89. data/lib/matestack/ui/core/dsl.rb +6 -0
  90. data/lib/matestack/ui/core/engine.rb +16 -0
  91. data/lib/matestack/ui/core/version.rb +1 -1
  92. data/vendor/assets/javascripts/dist/matestack-ui-core.js +329 -122
  93. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
  94. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
  95. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  96. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
  97. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  98. metadata +47 -64
  99. data/MIT-LICENSE +0 -20
  100. data/app/concepts/matestack/ui/core/absolute/absolute.haml +0 -3
  101. data/app/concepts/matestack/ui/core/absolute/absolute.rb +0 -17
  102. data/app/concepts/matestack/ui/core/component/response.haml +0 -2
  103. data/app/concepts/matestack/ui/core/component/response_dynamic.haml +0 -7
  104. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +0 -3
  105. data/app/concepts/matestack/ui/core/component/static.haml +0 -1
  106. data/app/concepts/matestack/ui/core/form/inline/inline.haml +0 -6
  107. data/app/concepts/matestack/ui/core/form/inline/inline.rb +0 -9
  108. data/app/concepts/matestack/ui/core/form/input/input.haml +0 -46
  109. data/app/concepts/matestack/ui/core/html/html.haml +0 -3
  110. data/app/concepts/matestack/ui/core/html/html.js +0 -10
  111. data/app/concepts/matestack/ui/core/html/html.rb +0 -17
  112. data/app/concepts/matestack/ui/core/isolate/isolate.haml +0 -2
  113. data/app/concepts/matestack/ui/core/isolate/isolate.rb +0 -11
  114. data/app/concepts/matestack/ui/core/page/content.haml +0 -7
  115. data/app/concepts/matestack/ui/core/page/content.rb +0 -5
  116. data/app/concepts/matestack/ui/core/pg/pg.haml +0 -5
  117. data/app/concepts/matestack/ui/core/pg/pg.rb +0 -5
  118. data/app/lib/matestack/ui/core/app_node.rb +0 -53
  119. data/app/lib/matestack/ui/core/component_node.rb +0 -87
  120. data/app/lib/matestack/ui/core/page_node.rb +0 -100
  121. data/app/lib/matestack/ui/core/render.rb +0 -89
  122. data/app/lib/matestack/ui/core/to_cell.rb +0 -129
@@ -0,0 +1,267 @@
1
+ # Responsible for registering all the components under their names.
2
+ # TODO: Better file name?
3
+
4
+ # TODO: app folder isn't in the LOAD_PATH 🤔
5
+ # --> because of rails autoload when running as an engine, maybe add
6
+ # app to loadpath? But we might move away from app in favor of lib anyhow.
7
+
8
+ module Matestack::Ui::Core::Components
9
+ def self.require_app_path(path)
10
+ require_relative "../../../../app/#{path}"
11
+ end
12
+
13
+ def self.require_core_component(name)
14
+ if name.include?("/")
15
+ require_app_path "concepts/matestack/ui/core/#{name}/#{name.split("/").last}"
16
+ else
17
+ require_app_path "concepts/matestack/ui/core/#{name}/#{name}"
18
+ end
19
+ end
20
+
21
+ require_app_path "helpers/matestack/ui/core/application_helper"
22
+ require_app_path "lib/matestack/ui/core/has_view_context"
23
+ require_app_path "lib/matestack/ui/core/html_attributes"
24
+ require_app_path "lib/matestack/ui/core/properties"
25
+
26
+ require_app_path "concepts/matestack/ui/core/component/base"
27
+ require_app_path "concepts/matestack/ui/core/component/dynamic"
28
+ require_app_path "concepts/matestack/ui/core/component/rerender"
29
+ require_app_path "concepts/matestack/ui/core/component/static"
30
+
31
+ require_core_component "abbr"
32
+ require_core_component "action"
33
+ require_core_component "address"
34
+ require_core_component "area"
35
+ require_core_component "article"
36
+ require_core_component "aside"
37
+ require_core_component "async"
38
+ require_core_component "b"
39
+ require_core_component "bdi"
40
+ require_core_component "bdo"
41
+ require_core_component "blockquote"
42
+ require_core_component "br"
43
+ require_core_component "button"
44
+ require_core_component "caption"
45
+ require_core_component "cite"
46
+ require_core_component "code"
47
+ require_app_path "concepts/matestack/ui/core/collection/helper"
48
+ require_core_component "collection/content"
49
+ require_core_component "collection/content/next"
50
+ require_core_component "collection/content/page/link"
51
+ require_core_component "collection/content/previous"
52
+ require_core_component "collection/filter"
53
+ require_core_component "collection/filter/input"
54
+ require_core_component "collection/filter/reset"
55
+ require_core_component "collection/filter/select"
56
+ require_core_component "collection/filter/submit"
57
+ require_core_component "collection/order"
58
+ require_core_component "collection/order/toggle"
59
+ require_core_component "collection/order/toggle/indicator"
60
+ require_core_component "data"
61
+ require_core_component "datalist"
62
+ require_core_component "dd"
63
+ require_core_component "del"
64
+ require_core_component "details"
65
+ require_core_component "dfn"
66
+ require_core_component "dialog"
67
+ require_core_component "div"
68
+ require_core_component "dl"
69
+ require_core_component "dt"
70
+ require_core_component "em"
71
+ require_core_component "fieldset"
72
+ require_core_component "figure"
73
+ require_core_component "footer"
74
+ require_core_component "form"
75
+ require_core_component "form/checkbox"
76
+ require_core_component "form/input"
77
+ require_core_component "form/radio"
78
+ require_core_component "form/select"
79
+ require_core_component "form/submit"
80
+ require_core_component "header"
81
+ require_core_component "heading"
82
+ require_core_component "hr"
83
+ require_core_component "icon"
84
+ require_core_component "iframe"
85
+ require_core_component "img"
86
+ require_core_component "input"
87
+ require_core_component "ins"
88
+ require_core_component "isolated"
89
+ require_core_component "kbd"
90
+ require_core_component "label"
91
+ require_core_component "legend"
92
+ require_core_component "li"
93
+ require_core_component "link"
94
+ require_core_component "main"
95
+ require_core_component "map"
96
+ require_core_component "mark"
97
+ require_core_component "meter"
98
+ require_core_component "nav"
99
+ require_core_component "noscript"
100
+ require_core_component "object"
101
+ require_core_component "ol"
102
+ require_core_component "onclick"
103
+ require_core_component "optgroup"
104
+ require_core_component "option"
105
+ require_core_component "output"
106
+ require_core_component "page"
107
+ require_core_component "page/content"
108
+ require_core_component "paragraph"
109
+ require_core_component "param"
110
+ require_core_component "picture"
111
+ require_core_component "plain"
112
+ require_core_component "pre"
113
+ require_core_component "progress"
114
+ require_core_component "q"
115
+ require_core_component "view"
116
+ require_core_component "rp"
117
+ require_core_component "rt"
118
+ require_core_component "ruby"
119
+ require_core_component "s"
120
+ require_core_component "samp"
121
+ require_core_component "section"
122
+ require_core_component "small"
123
+ require_core_component "span"
124
+ require_core_component "strong"
125
+ require_core_component "sub"
126
+ require_core_component "summary"
127
+ require_core_component "sup"
128
+ require_core_component "table"
129
+ require_core_component "tbody"
130
+ require_core_component "td"
131
+ require_core_component "template"
132
+ require_core_component "textarea" # textarea needs to be required before form/textarea
133
+ require_core_component "form/textarea"
134
+ require_core_component "tfoot"
135
+ require_core_component "th"
136
+ require_core_component "thead"
137
+ require_core_component "time"
138
+ require_core_component "toggle"
139
+ require_core_component "tr"
140
+ require_core_component "transition"
141
+ require_core_component "u"
142
+ require_core_component "ul"
143
+ require_core_component "unescaped"
144
+ require_core_component "var"
145
+ require_core_component "video"
146
+ require_core_component "wbr"
147
+ require_core_component "youtube"
148
+ end
149
+
150
+ Matestack::Ui::Core::Component::Registry.register_components(
151
+ abbr: Matestack::Ui::Core::Abbr::Abbr,
152
+ action: Matestack::Ui::Core::Action::Action,
153
+ address: Matestack::Ui::Core::Address::Address,
154
+ area: Matestack::Ui::Core::Area::Area,
155
+ article: Matestack::Ui::Core::Article::Article,
156
+ aside: Matestack::Ui::Core::Aside::Aside,
157
+ async: Matestack::Ui::Core::Async::Async,
158
+ b: Matestack::Ui::Core::B::B,
159
+ bdi: Matestack::Ui::Core::Bdi::Bdi,
160
+ bdo: Matestack::Ui::Core::Bdo::Bdo,
161
+ blockquote: Matestack::Ui::Core::Blockquote::Blockquote,
162
+ br: Matestack::Ui::Core::Br::Br,
163
+ button: Matestack::Ui::Core::Button::Button,
164
+ caption: Matestack::Ui::Core::Caption::Caption,
165
+ cite: Matestack::Ui::Core::Cite::Cite,
166
+ code: Matestack::Ui::Core::Code::Code,
167
+ collection_content: Matestack::Ui::Core::Collection::Content::Content,
168
+ collection_content_next: Matestack::Ui::Core::Collection::Content::Next::Next,
169
+ collection_content_page_link: Matestack::Ui::Core::Collection::Content::Page::Link::Link,
170
+ collection_content_previous: Matestack::Ui::Core::Collection::Content::Previous::Previous,
171
+ collection_filter: Matestack::Ui::Core::Collection::Filter::Filter,
172
+ collection_filter_input: Matestack::Ui::Core::Collection::Filter::Input::Input,
173
+ collection_filter_reset: Matestack::Ui::Core::Collection::Filter::Reset::Reset,
174
+ collection_filter_select: Matestack::Ui::Core::Collection::Filter::Select::Select,
175
+ collection_filter_submit: Matestack::Ui::Core::Collection::Filter::Submit::Submit,
176
+ collection_order: Matestack::Ui::Core::Collection::Order::Order,
177
+ collection_order_toggle: Matestack::Ui::Core::Collection::Order::Toggle::Toggle,
178
+ collection_order_toggle_indicator: Matestack::Ui::Core::Collection::Order::Toggle::Indicator::Indicator,
179
+ data: Matestack::Ui::Core::Data::Data,
180
+ datalist: Matestack::Ui::Core::Datalist::Datalist,
181
+ dd: Matestack::Ui::Core::Dd::Dd,
182
+ del: Matestack::Ui::Core::Del::Del,
183
+ details: Matestack::Ui::Core::Details::Details,
184
+ dfn: Matestack::Ui::Core::Dfn::Dfn,
185
+ dialog: Matestack::Ui::Core::Dialog::Dialog,
186
+ div: Matestack::Ui::Core::Div::Div,
187
+ dl: Matestack::Ui::Core::Dl::Dl,
188
+ dt: Matestack::Ui::Core::Dt::Dt,
189
+ em: Matestack::Ui::Core::Em::Em,
190
+ fieldset: Matestack::Ui::Core::Fieldset::Fieldset,
191
+ figure: Matestack::Ui::Core::Figure::Figure,
192
+ footer: Matestack::Ui::Core::Footer::Footer,
193
+ form: Matestack::Ui::Core::Form::Form,
194
+ form_checkbox: Matestack::Ui::Core::Form::Checkbox::Checkbox,
195
+ form_input: Matestack::Ui::Core::Form::Input::Input,
196
+ form_radio: Matestack::Ui::Core::Form::Radio::Radio,
197
+ form_select: Matestack::Ui::Core::Form::Select::Select,
198
+ form_submit: Matestack::Ui::Core::Form::Submit::Submit,
199
+ form_textarea: Matestack::Ui::Core::Form::Textarea::Textarea,
200
+ header: Matestack::Ui::Core::Header::Header,
201
+ heading: Matestack::Ui::Core::Heading::Heading,
202
+ hr: Matestack::Ui::Core::Hr::Hr,
203
+ icon: Matestack::Ui::Core::Icon::Icon,
204
+ italic: Matestack::Ui::Core::Icon::Icon, # alias icon as italic
205
+ iframe: Matestack::Ui::Core::Iframe::Iframe,
206
+ img: Matestack::Ui::Core::Img::Img,
207
+ input: Matestack::Ui::Core::Input::Input,
208
+ ins: Matestack::Ui::Core::Ins::Ins,
209
+ kbd: Matestack::Ui::Core::Kbd::Kbd,
210
+ label: Matestack::Ui::Core::Label::Label,
211
+ legend: Matestack::Ui::Core::Legend::Legend,
212
+ li: Matestack::Ui::Core::Li::Li,
213
+ link: Matestack::Ui::Core::Link::Link,
214
+ main: Matestack::Ui::Core::Main::Main,
215
+ map: Matestack::Ui::Core::Map::Map,
216
+ mark: Matestack::Ui::Core::Mark::Mark,
217
+ meter: Matestack::Ui::Core::Meter::Meter,
218
+ nav: Matestack::Ui::Core::Nav::Nav,
219
+ noscript: Matestack::Ui::Core::Noscript::Noscript,
220
+ object: Matestack::Ui::Core::Object::Object,
221
+ ol: Matestack::Ui::Core::Ol::Ol,
222
+ onclick: Matestack::Ui::Core::Onclick::Onclick,
223
+ optgroup: Matestack::Ui::Core::Optgroup::Optgroup,
224
+ option: Matestack::Ui::Core::Option::Option,
225
+ output: Matestack::Ui::Core::Output::Output,
226
+ paragraph: Matestack::Ui::Core::Paragraph::Paragraph,
227
+ pg: Matestack::Ui::Core::Paragraph::Paragraph, # alias paragraph as pg
228
+ page_content_wrapper: Matestack::Ui::Core::Page::Content::Content,
229
+ param: Matestack::Ui::Core::Param::Param,
230
+ picture: Matestack::Ui::Core::Picture::Picture,
231
+ plain: Matestack::Ui::Core::Plain::Plain,
232
+ pre: Matestack::Ui::Core::Pre::Pre,
233
+ progress: Matestack::Ui::Core::Progress::Progress,
234
+ q: Matestack::Ui::Core::Q::Q,
235
+ rails_view: Matestack::Ui::Core::View::View,
236
+ rp: Matestack::Ui::Core::Rp::Rp,
237
+ rt: Matestack::Ui::Core::Rt::Rt,
238
+ ruby: Matestack::Ui::Core::Ruby::Ruby,
239
+ s: Matestack::Ui::Core::S::S,
240
+ samp: Matestack::Ui::Core::Samp::Samp,
241
+ section: Matestack::Ui::Core::Section::Section,
242
+ small: Matestack::Ui::Core::Small::Small,
243
+ span: Matestack::Ui::Core::Span::Span,
244
+ strong: Matestack::Ui::Core::Strong::Strong,
245
+ sub: Matestack::Ui::Core::Sub::Sub,
246
+ summary: Matestack::Ui::Core::Summary::Summary,
247
+ sup: Matestack::Ui::Core::Sup::Sup,
248
+ table: Matestack::Ui::Core::Table::Table,
249
+ tbody: Matestack::Ui::Core::Tbody::Tbody,
250
+ td: Matestack::Ui::Core::Td::Td,
251
+ template: Matestack::Ui::Core::Template::Template,
252
+ textarea: Matestack::Ui::Core::Textarea::Textarea,
253
+ tfoot: Matestack::Ui::Core::Tfoot::Tfoot,
254
+ th: Matestack::Ui::Core::Th::Th,
255
+ thead: Matestack::Ui::Core::Thead::Thead,
256
+ time: Matestack::Ui::Core::Time::Time,
257
+ toggle: Matestack::Ui::Core::Toggle::Toggle,
258
+ tr: Matestack::Ui::Core::Tr::Tr,
259
+ transition: Matestack::Ui::Core::Transition::Transition,
260
+ u: Matestack::Ui::Core::U::U,
261
+ ul: Matestack::Ui::Core::Ul::Ul,
262
+ unescaped: Matestack::Ui::Core::Unescaped::Unescaped,
263
+ var: Matestack::Ui::Core::Var::Var,
264
+ video: Matestack::Ui::Core::Video::Video,
265
+ wbr: Matestack::Ui::Core::Wbr::Wbr,
266
+ youtube: Matestack::Ui::Core::Youtube::Youtube,
267
+ )
@@ -0,0 +1,6 @@
1
+ module Matestack::Ui::Core
2
+ # Central DSL module, target of registry module definitions.
3
+ module DSL
4
+
5
+ end
6
+ end
@@ -10,8 +10,24 @@ module Matestack
10
10
  # end
11
11
  # Rails.configuration.autoload_paths << Dir.glob(File.join(Rails.root, 'config/matestack/**/*.rb'))
12
12
  # require_dependency "#{Rails.root}/config/matestack-ui-core"
13
+
14
+ components_path = "#{Rails.root}/app/matestack/register_components"
15
+ if File.exist?("#{components_path}.rb")
16
+ # the other dependencies need to be loaded otherwise require_dependency crashes silently
17
+ # we don't need to require_dependency them because they don't need reloading
18
+ # anyhow, they should probably be required somewhere else before this anyhow?
19
+ require 'matestack/ui/core/dsl'
20
+ require 'matestack/ui/core/component/registry'
21
+ require_dependency "#{Rails.root}/app/matestack/register_components"
22
+ end
13
23
  end
14
24
 
25
+ # config.to_prepare takes a block that should be run to set up
26
+ # your Railtie/Engine. It is run once in production mode and on
27
+ # every request in development, and is the only code guaranteed to
28
+ # be called on every single request in development mode.
29
+ # source: https://stackoverflow.com/a/5109348
30
+ # (couldn't find official docs)
15
31
  config.to_prepare &method(:activate).to_proc
16
32
  end
17
33
  end
@@ -1,7 +1,7 @@
1
1
  module Matestack
2
2
  module Ui
3
3
  module Core
4
- VERSION = '0.7.6'
4
+ VERSION = '1.0.0.rc.1'
5
5
  end
6
6
  end
7
7
  end
@@ -270,6 +270,8 @@ __webpack_require__.r(__webpack_exports__);
270
270
  /* harmony import */ var v_runtime_template__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! v-runtime-template */ "../node_modules/v-runtime-template/dist/v-runtime-template.es.js");
271
271
  /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuex */ "../node_modules/vuex/dist/vuex.esm.js");
272
272
  /* harmony import */ var _location__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./location */ "../app/concepts/matestack/ui/core/app/location.js");
273
+ /* harmony import */ var _js_event_hub__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../js/event-hub */ "../app/concepts/matestack/ui/core/js/event-hub.js");
274
+
273
275
 
274
276
 
275
277
 
@@ -294,7 +296,9 @@ const componentDef = {
294
296
  pathName: self.currentPathName,
295
297
  search: self.currentSearch
296
298
  }, document.location)){
297
- self.$store.dispatch("navigateTo", { url: document.location.pathname + document.location.search, backwards: true } );
299
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_4__["default"].$emit("page_loading_triggered", document.location.pathname + document.location.search);
300
+ this.$store.commit('setPageLoading', true);
301
+ self.$store.dispatch("navigateTo", { url: document.location.pathname + document.location.search, backwards: true } );
298
302
  }
299
303
  })
300
304
  },
@@ -358,6 +362,7 @@ vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].use(vuex__WEBPACK_IMPOR
358
362
  const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
359
363
  state: {
360
364
  pageTemplate: null,
365
+ pageLoading: false,
361
366
  currentPathName: document.location.pathname,
362
367
  currentSearch: document.location.search,
363
368
  currentOrigin: document.location.origin
@@ -366,6 +371,9 @@ const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
366
371
  setPageTemplate (state, serverResponse){
367
372
  state.pageTemplate = serverResponse
368
373
  },
374
+ setPageLoading (state, boolean){
375
+ state.pageLoading = boolean
376
+ },
369
377
  setCurrentLocation (state, current){
370
378
  state.currentPathName = current.path
371
379
  state.currentSearch = current.search
@@ -373,10 +381,26 @@ const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
373
381
  },
374
382
  resetPageTemplate (state) {
375
383
  state.pageTemplate = null;
384
+ },
385
+ pageScrollTop (state) {
386
+ //https://stackoverflow.com/a/35940276/13886137
387
+ const getScrollParent = function(node) {
388
+ if (node == null) {
389
+ return null
390
+ }
391
+ if (node.scrollHeight > node.clientHeight) {
392
+ return node
393
+ } else {
394
+ return getScrollParent(node.parentNode)
395
+ }
396
+ }
397
+ getScrollParent(document.getElementsByClassName("matestack-page-root")[0]).scrollTop = 0
376
398
  }
377
399
  },
378
400
  actions: {
379
401
  navigateTo ({ commit, state }, { url, backwards }) {
402
+ const self = this
403
+ commit('setPageLoading', true)
380
404
  _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit("page_loading", url);
381
405
  if (typeof matestackUiCoreTransitionStart !== 'undefined') {
382
406
  matestackUiCoreTransitionStart(url);
@@ -401,9 +425,11 @@ const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
401
425
  window.history.pushState({matestackApp: true, url: url}, null, url);
402
426
  }
403
427
  setTimeout(function () {
404
- resolve(response["data"])
428
+ resolve(response["data"]);
405
429
  commit('setPageTemplate', response["data"])
406
430
  commit('setCurrentLocation', { path: url.split("?")[0], search: document.location.search, origin: document.location.origin })
431
+ commit('setPageLoading', false)
432
+ commit('pageScrollTop')
407
433
  _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit("page_loaded", url);
408
434
  if (typeof matestackUiCoreTransitionSuccess !== 'undefined') {
409
435
  matestackUiCoreTransitionSuccess(url);
@@ -439,18 +465,25 @@ const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
439
465
  "use strict";
440
466
  __webpack_require__.r(__webpack_exports__);
441
467
  /* harmony import */ var vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue/dist/vue.esm */ "../node_modules/vue/dist/vue.esm.js");
442
- /* harmony import */ var _js_event_hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../js/event-hub */ "../app/concepts/matestack/ui/core/js/event-hub.js");
443
- /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
468
+ /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios */ "../node_modules/axios/index.js");
469
+ /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_1__);
470
+ /* harmony import */ var v_runtime_template__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! v-runtime-template */ "../node_modules/v-runtime-template/dist/v-runtime-template.es.js");
471
+ /* harmony import */ var _js_event_hub__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../js/event-hub */ "../app/concepts/matestack/ui/core/js/event-hub.js");
472
+ /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
473
+
474
+
444
475
 
445
476
 
446
477
 
447
478
 
448
479
  const componentDef = {
449
- mixins: [_component_component__WEBPACK_IMPORTED_MODULE_2__["default"]],
480
+ mixins: [_component_component__WEBPACK_IMPORTED_MODULE_4__["default"]],
450
481
  data: function(){
451
482
  return {
483
+ asyncTemplate: null,
452
484
  showing: true,
453
- hide_after_timeout: null,
485
+ loading: false,
486
+ hideAfterTimeout: null,
454
487
  event: {
455
488
  data: {}
456
489
  }
@@ -470,7 +503,7 @@ const componentDef = {
470
503
  }
471
504
  }
472
505
  if(this.componentConfig["hide_after"] != undefined){
473
- self.hide_after_timeout = setTimeout(function () {
506
+ self.hideAfterTimeout = setTimeout(function () {
474
507
  self.hide()
475
508
  }, parseInt(this.componentConfig["hide_after"]));
476
509
  }
@@ -481,9 +514,36 @@ const componentDef = {
481
514
  },
482
515
  startDefer: function(){
483
516
  const self = this
517
+ self.loading = true;
484
518
  setTimeout(function () {
485
519
  self.rerender()
486
520
  }, parseInt(this.componentConfig["defer"]));
521
+ },
522
+ rerender: function(){
523
+ var self = this;
524
+ self.loading = true;
525
+ axios__WEBPACK_IMPORTED_MODULE_1___default()({
526
+ method: "get",
527
+ url: location.pathname + location.search,
528
+ headers: {
529
+ 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
530
+ },
531
+ params: {
532
+ "component_key": self.componentConfig["component_key"],
533
+ "component_class": self.componentConfig["parent_class"]
534
+ }
535
+ })
536
+ .then(function(response){
537
+ var tmp_dom_element = document.createElement('div');
538
+ tmp_dom_element.innerHTML = response['data'];
539
+ var template = tmp_dom_element.querySelector('#' + self.componentConfig["component_key"]).outerHTML;
540
+ self.loading = false;
541
+ self.asyncTemplate = template;
542
+ })
543
+ .catch(function(error){
544
+ console.log(error)
545
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit('async_rerender_error', { id: self.componentConfig["component_key"] })
546
+ })
487
547
  }
488
548
  },
489
549
  created: function () {
@@ -491,15 +551,15 @@ const componentDef = {
491
551
  if(this.componentConfig["show_on"] != undefined){
492
552
  this.showing = false
493
553
  var show_events = this.componentConfig["show_on"].split(",")
494
- show_events.forEach(show_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$on(show_event.trim(), self.show));
554
+ show_events.forEach(show_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on(show_event.trim(), self.show));
495
555
  }
496
556
  if(this.componentConfig["hide_on"] != undefined){
497
557
  var hide_events = this.componentConfig["hide_on"].split(",")
498
- hide_events.forEach(hide_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$on(hide_event.trim(), self.hide));
558
+ hide_events.forEach(hide_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on(hide_event.trim(), self.hide));
499
559
  }
500
560
  if(this.componentConfig["rerender_on"] != undefined){
501
561
  var rerender_events = this.componentConfig["rerender_on"].split(",")
502
- rerender_events.forEach(rerender_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$on(rerender_event.trim(), self.rerender));
562
+ rerender_events.forEach(rerender_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on(rerender_event.trim(), self.rerender));
503
563
  }
504
564
  if(this.componentConfig["show_on"] != undefined){
505
565
  this.showing = false
@@ -517,23 +577,26 @@ const componentDef = {
517
577
  },
518
578
  beforeDestroy: function() {
519
579
  const self = this
520
- clearTimeout(self.hide_after_timeout)
521
- _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(this.componentConfig["rerender_on"], self.rerender);
522
- _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(this.componentConfig["show_on"], self.show);
523
- _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(this.componentConfig["hide_on"], self.hide);
580
+ clearTimeout(self.hideAfterTimeout)
581
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(this.componentConfig["rerender_on"], self.rerender);
582
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(this.componentConfig["show_on"], self.show);
583
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(this.componentConfig["hide_on"], self.hide);
524
584
  if(this.componentConfig["show_on"] != undefined){
525
585
  var shown_events = this.componentConfig["show_on"].split(",")
526
- shown_events.forEach(show_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(show_event.trim(), self.show));
586
+ shown_events.forEach(show_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(show_event.trim(), self.show));
527
587
  }
528
588
  if(this.componentConfig["hide_on"] != undefined){
529
589
  var hiden_events = this.componentConfig["hide_on"].split(",")
530
- hiden_events.forEach(hide_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(hide_event.trim(), self.hide));
590
+ hiden_events.forEach(hide_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(hide_event.trim(), self.hide));
531
591
  }
532
592
  if(this.componentConfig["rerender_on"] != undefined){
533
593
  var rerender_events = this.componentConfig["rerender_on"].split(",")
534
- rerender_events.forEach(rerender_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(rerender_event.trim(), self.rerender));
594
+ rerender_events.forEach(rerender_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(rerender_event.trim(), self.rerender));
535
595
  }
536
596
  },
597
+ components: {
598
+ VRuntimeTemplate: v_runtime_template__WEBPACK_IMPORTED_MODULE_2__["default"]
599
+ }
537
600
  }
538
601
 
539
602
  let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].component('matestack-ui-core-async', componentDef)
@@ -755,7 +818,7 @@ const componentDef = {
755
818
  this.ordering[key] = "asc"
756
819
  } else if (this.ordering[key] == "asc") {
757
820
  this.ordering[key] = "desc"
758
- } else if (this.ordering[key] = "desc") {
821
+ } else if (this.ordering[key] == "desc") {
759
822
  this.ordering[key] = undefined
760
823
  }
761
824
  var url;
@@ -831,67 +894,8 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
831
894
 
832
895
  "use strict";
833
896
  __webpack_require__.r(__webpack_exports__);
834
- /* harmony import */ var vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue/dist/vue.esm */ "../node_modules/vue/dist/vue.esm.js");
835
- /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios */ "../node_modules/axios/index.js");
836
- /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_1__);
837
- /* harmony import */ var v_runtime_template__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! v-runtime-template */ "../node_modules/v-runtime-template/dist/v-runtime-template.es.js");
838
- /* harmony import */ var _js_event_hub__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../js/event-hub */ "../app/concepts/matestack/ui/core/js/event-hub.js");
839
-
840
-
841
-
842
-
843
-
844
897
  const componentMixin = {
845
- props: ['componentConfig', 'params'],
846
- data: function(){
847
- return {
848
- asyncTemplate: null
849
- }
850
- },
851
- methods: {
852
- onRerender: function(event){
853
- if (this.$el.id === event+"__wrapper"){
854
- this.rerender()
855
- }
856
- },
857
- onMatestackUiCoreChannel: function(event){
858
- if (this.componentConfig["rerender_on"] == event.message){
859
- this.rerender()
860
- }
861
- },
862
- rerender: function(){
863
- var self = this;
864
- self.params["component_key"] = self.componentConfig["component_key"]
865
- axios__WEBPACK_IMPORTED_MODULE_1___default()({
866
- method: "get",
867
- url: location.pathname + location.search,
868
- headers: {
869
- 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
870
- },
871
- params: {"component_key": self.componentConfig["component_key"]}
872
- })
873
- .then(function(response){
874
- self.asyncTemplate = response["data"];
875
- })
876
- },
877
- rerenderWith: function(newParams){
878
- Object.assign(this.params, newParams);
879
- this.rerender()
880
- }
881
- },
882
- created: function () {
883
- const self = this
884
- _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on('rerender', self.onRerender)
885
- _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on('MatestackUiCoreChannel', self.onMatestackUiCoreChannel)
886
- },
887
- beforeDestroy: function() {
888
- const self = this
889
- _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off('rerender', self.onRerender);
890
- _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off('MatestackUiCoreChannel', self.onMatestackUiCoreChannel)
891
- },
892
- components: {
893
- VRuntimeTemplate: v_runtime_template__WEBPACK_IMPORTED_MODULE_2__["default"]
894
- }
898
+ props: ['componentConfig', 'params']
895
899
  }
896
900
 
897
901
  /* harmony default export */ __webpack_exports__["default"] = (componentMixin);
@@ -926,8 +930,8 @@ const componentDef = {
926
930
  data: function () {
927
931
  return {
928
932
  data: {},
929
- showInlineForm: false,
930
933
  errors: {},
934
+ loading: false
931
935
  };
932
936
  },
933
937
  methods: {
@@ -940,22 +944,20 @@ const componentDef = {
940
944
  updateFormValue: function (key, value) {
941
945
  this.data[key] = value;
942
946
  },
947
+ hasErrors: function(){
948
+ //https://stackoverflow.com/a/27709663/13886137
949
+ for (var key in this.errors) {
950
+ if (this.errors[key] !== null && this.errors[key] != ""){
951
+ return true;
952
+ }
953
+ }
954
+ return false;
955
+ },
943
956
  resetErrors: function (key) {
944
957
  if (this.errors[key]) {
945
958
  this.errors[key] = null;
946
959
  }
947
960
  },
948
- launchInlineForm: function (key, value) {
949
- this.showInlineForm = true;
950
- this.data[key] = value;
951
- const self = this;
952
- setTimeout(function () {
953
- self.$refs.inlineinput.focus();
954
- }, 300);
955
- },
956
- closeInlineForm: function () {
957
- this.showInlineForm = false;
958
- },
959
961
  setProps: function (flat, newVal) {
960
962
  for (var i in flat) {
961
963
  if (flat[i] === null){
@@ -1042,15 +1044,21 @@ const componentDef = {
1042
1044
  },
1043
1045
  perform: function(){
1044
1046
  const self = this
1045
- if (self.componentConfig["emit"] != undefined) {
1046
- _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit(self.componentConfig["emit"]);
1047
- }
1048
- if (self.componentConfig["delay"] != undefined) {
1049
- setTimeout(function () {
1047
+ var form = self.$el.tagName == 'FORM' ? self.$el : self.$el.querySelector('form');
1048
+ if(form.checkValidity()){
1049
+ self.loading = true;
1050
+ if (self.componentConfig["emit"] != undefined) {
1051
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit(self.componentConfig["emit"]);
1052
+ }
1053
+ if (self.componentConfig["delay"] != undefined) {
1054
+ setTimeout(function () {
1055
+ self.sendRequest()
1056
+ }, parseInt(self.componentConfig["delay"]));
1057
+ } else {
1050
1058
  self.sendRequest()
1051
- }, parseInt(self.componentConfig["delay"]));
1059
+ }
1052
1060
  } else {
1053
- this.sendRequest()
1061
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit('static_form_errors');
1054
1062
  }
1055
1063
  },
1056
1064
  sendRequest: function(){
@@ -1094,6 +1102,7 @@ const componentDef = {
1094
1102
  }
1095
1103
  axios__WEBPACK_IMPORTED_MODULE_2___default()(axios_config)
1096
1104
  .then(function (response) {
1105
+ self.loading = false;
1097
1106
  if (self.componentConfig["success"] != undefined && self.componentConfig["success"]["emit"] != undefined) {
1098
1107
  _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit(self.componentConfig["success"]["emit"], response.data);
1099
1108
  }
@@ -1149,9 +1158,9 @@ const componentDef = {
1149
1158
  self.setProps(self.data, null);
1150
1159
  self.initValues();
1151
1160
  }
1152
- self.showInlineForm = false;
1153
1161
  })
1154
1162
  .catch(function (error) {
1163
+ self.loading = false;
1155
1164
  if (error.response && error.response.data && error.response.data.errors) {
1156
1165
  self.errors = error.response.data.errors;
1157
1166
  }
@@ -1219,27 +1228,128 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
1219
1228
 
1220
1229
  /***/ }),
1221
1230
 
1222
- /***/ "../app/concepts/matestack/ui/core/html/html.js":
1223
- /*!******************************************************!*\
1224
- !*** ../app/concepts/matestack/ui/core/html/html.js ***!
1225
- \******************************************************/
1231
+ /***/ "../app/concepts/matestack/ui/core/isolated/isolated.js":
1232
+ /*!**************************************************************!*\
1233
+ !*** ../app/concepts/matestack/ui/core/isolated/isolated.js ***!
1234
+ \**************************************************************/
1226
1235
  /*! exports provided: default */
1227
1236
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1228
1237
 
1229
1238
  "use strict";
1230
1239
  __webpack_require__.r(__webpack_exports__);
1231
1240
  /* harmony import */ var vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue/dist/vue.esm */ "../node_modules/vue/dist/vue.esm.js");
1232
- /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
1241
+ /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! axios */ "../node_modules/axios/index.js");
1242
+ /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_1__);
1243
+ /* harmony import */ var v_runtime_template__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! v-runtime-template */ "../node_modules/v-runtime-template/dist/v-runtime-template.es.js");
1244
+ /* harmony import */ var _js_event_hub__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../js/event-hub */ "../app/concepts/matestack/ui/core/js/event-hub.js");
1245
+
1246
+
1233
1247
 
1234
1248
 
1235
1249
 
1236
1250
  const componentDef = {
1237
- mixins: [_component_component__WEBPACK_IMPORTED_MODULE_1__["default"]]
1251
+ props: ['componentConfig', 'params'],
1252
+ data: function(){
1253
+ return {
1254
+ isolatedTemplate: null,
1255
+ loading: false,
1256
+ loadingError: false
1257
+ }
1258
+ },
1259
+ methods: {
1260
+ rerender: function(){
1261
+ var self = this;
1262
+ self.loading = true;
1263
+ self.loadingError = false;
1264
+ if(self.componentConfig["rerender_delay"] != undefined){
1265
+ setTimeout(function () {
1266
+ self.renderIsolatedContent();
1267
+ }, parseInt(this.componentConfig["rerender_delay"]));
1268
+ } else {
1269
+ self.renderIsolatedContent();
1270
+ }
1271
+ },
1272
+ renderIsolatedContent: function(){
1273
+ var self = this;
1274
+ self.loading = true;
1275
+ self.loadingError = false;
1276
+ axios__WEBPACK_IMPORTED_MODULE_1___default()({
1277
+ method: "get",
1278
+ url: location.pathname + location.search,
1279
+ headers: {
1280
+ 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
1281
+ },
1282
+ params: {
1283
+ "component_class": self.componentConfig["component_class"],
1284
+ "public_options": self.componentConfig["public_options"]
1285
+ }
1286
+ })
1287
+ .then(function(response){
1288
+ self.loading = false;
1289
+ self.loadingStart = false;
1290
+ self.loadingEnd = true;
1291
+ self.isolatedTemplate = response['data'];
1292
+ })
1293
+ .catch(function(error){
1294
+ self.loadingError = true;
1295
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit('isolate_rerender_error', { class: self.componentConfig["component_class"] })
1296
+ })
1297
+ },
1298
+ startDefer: function(){
1299
+ const self = this
1300
+ self.loading = true;
1301
+ setTimeout(function () {
1302
+ self.renderIsolatedContent()
1303
+ }, parseInt(this.componentConfig["defer"]));
1304
+ }
1305
+ },
1306
+ created: function () {
1307
+ const self = this
1308
+ },
1309
+ beforeDestroy: function() {
1310
+ const self = this
1311
+ if(this.componentConfig["rerender_on"] != undefined){
1312
+ var rerender_events = this.componentConfig["rerender_on"].split(",")
1313
+ rerender_events.forEach(rerender_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$off(rerender_event.trim(), self.renderIsolatedContent));
1314
+ }
1315
+ },
1316
+ mounted: function (){
1317
+ const self = this
1318
+ if(this.componentConfig["init_on"] === undefined || this.componentConfig["init_on"] === null){
1319
+ if(self.componentConfig["defer"] == true || Number.isInteger(self.componentConfig["defer"])){
1320
+ if(!isNaN(self.componentConfig["defer"])){
1321
+ self.startDefer()
1322
+ }
1323
+ else{
1324
+ self.renderIsolatedContent();
1325
+ }
1326
+ }
1327
+ }else{
1328
+ if(self.componentConfig["defer"] != undefined){
1329
+ if(!isNaN(self.componentConfig["defer"])){
1330
+ var init_on_events = this.componentConfig["init_on"].split(",")
1331
+ init_on_events.forEach(init_on_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on(init_on_event.trim(), self.startDefer));
1332
+ }
1333
+ }else{
1334
+ var init_on_events = this.componentConfig["init_on"].split(",")
1335
+ init_on_events.forEach(init_on_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on(init_on_event.trim(), self.renderIsolatedContent));
1336
+ }
1337
+ }
1338
+
1339
+ if(this.componentConfig["rerender_on"] != undefined){
1340
+ var rerender_events = this.componentConfig["rerender_on"].split(",")
1341
+ rerender_events.forEach(rerender_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$on(rerender_event.trim(), self.rerender));
1342
+ }
1343
+
1344
+ },
1345
+ components: {
1346
+ VRuntimeTemplate: v_runtime_template__WEBPACK_IMPORTED_MODULE_2__["default"]
1347
+ }
1238
1348
  }
1239
1349
 
1240
- let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].component('matestack-ui-core-html', componentDef)
1350
+ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].component('matestack-ui-core-isolate', componentDef)
1241
1351
 
1242
- /* harmony default export */ __webpack_exports__["default"] = (component);
1352
+ /* harmony default export */ __webpack_exports__["default"] = (componentDef);
1243
1353
 
1244
1354
 
1245
1355
  /***/ }),
@@ -1257,11 +1367,11 @@ __webpack_require__.r(__webpack_exports__);
1257
1367
  /* harmony import */ var vue_turbolinks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-turbolinks */ "../node_modules/vue-turbolinks/index.js");
1258
1368
  /* harmony import */ var _app_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app/app */ "../app/concepts/matestack/ui/core/app/app.js");
1259
1369
  /* harmony import */ var _async_async__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../async/async */ "../app/concepts/matestack/ui/core/async/async.js");
1260
- /* harmony import */ var _page_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../page/content */ "../app/concepts/matestack/ui/core/page/content.js");
1261
- /* harmony import */ var _app_store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app/store */ "../app/concepts/matestack/ui/core/app/store.js");
1262
- /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
1263
- /* harmony import */ var _component_anonym_dynamic_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../component/anonym-dynamic-component */ "../app/concepts/matestack/ui/core/component/anonym-dynamic-component.js");
1264
- /* harmony import */ var _html_html__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../html/html */ "../app/concepts/matestack/ui/core/html/html.js");
1370
+ /* harmony import */ var _page_content_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../page/content/content */ "../app/concepts/matestack/ui/core/page/content/content.js");
1371
+ /* harmony import */ var _toggle_toggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../toggle/toggle */ "../app/concepts/matestack/ui/core/toggle/toggle.js");
1372
+ /* harmony import */ var _app_store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../app/store */ "../app/concepts/matestack/ui/core/app/store.js");
1373
+ /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
1374
+ /* harmony import */ var _component_anonym_dynamic_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../component/anonym-dynamic-component */ "../app/concepts/matestack/ui/core/component/anonym-dynamic-component.js");
1265
1375
  /* harmony import */ var _transition_transition__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../transition/transition */ "../app/concepts/matestack/ui/core/transition/transition.js");
1266
1376
  /* harmony import */ var _action_action__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../action/action */ "../app/concepts/matestack/ui/core/action/action.js");
1267
1377
  /* harmony import */ var _form_form__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../form/form */ "../app/concepts/matestack/ui/core/form/form.js");
@@ -1269,6 +1379,7 @@ __webpack_require__.r(__webpack_exports__);
1269
1379
  /* harmony import */ var _collection_content_content__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../collection/content/content */ "../app/concepts/matestack/ui/core/collection/content/content.js");
1270
1380
  /* harmony import */ var _collection_filter_filter__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../collection/filter/filter */ "../app/concepts/matestack/ui/core/collection/filter/filter.js");
1271
1381
  /* harmony import */ var _collection_order_order__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../collection/order/order */ "../app/concepts/matestack/ui/core/collection/order/order.js");
1382
+ /* harmony import */ var _isolated_isolated__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../isolated/isolated */ "../app/concepts/matestack/ui/core/isolated/isolated.js");
1272
1383
 
1273
1384
 
1274
1385
 
@@ -1288,6 +1399,7 @@ __webpack_require__.r(__webpack_exports__);
1288
1399
 
1289
1400
 
1290
1401
 
1402
+
1291
1403
  let matestackUiApp = undefined
1292
1404
 
1293
1405
  // this event fires first and always
@@ -1298,9 +1410,9 @@ document.addEventListener('DOMContentLoaded', () => {
1298
1410
  // if they were present on the first page, which was loaded and activated turbolinks
1299
1411
  // the mixin does not impact the app when turbolinks is disabled
1300
1412
  matestackUiApp = new vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"]({
1301
- el: "#matestack_ui",
1413
+ el: "#matestack-ui",
1302
1414
  mixins: [vue_turbolinks__WEBPACK_IMPORTED_MODULE_1__["turbolinksAdapterMixin"]],
1303
- store: _app_store__WEBPACK_IMPORTED_MODULE_5__["default"]
1415
+ store: _app_store__WEBPACK_IMPORTED_MODULE_6__["default"]
1304
1416
  })
1305
1417
  })
1306
1418
 
@@ -1310,14 +1422,14 @@ document.addEventListener('turbolinks:load', () => {
1310
1422
  // otherwise the matestack page will jump back to the latest pageTemplate
1311
1423
  // fetched during the last matestack transition as the turbolinks powered
1312
1424
  // page transition does not write the matestack store pageTemplate state variable
1313
- _app_store__WEBPACK_IMPORTED_MODULE_5__["default"].commit('resetPageTemplate')
1425
+ _app_store__WEBPACK_IMPORTED_MODULE_6__["default"].commit('resetPageTemplate')
1314
1426
  // we need to destroy the vue app instance
1315
1427
  matestackUiApp.$destroy();
1316
1428
  // and recreate it right afterwards in order to work when used with turbolinks
1317
1429
  matestackUiApp = new vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"]({
1318
- el: "#matestack_ui",
1430
+ el: "#matestack-ui",
1319
1431
  mixins: [vue_turbolinks__WEBPACK_IMPORTED_MODULE_1__["turbolinksAdapterMixin"]],
1320
- store: _app_store__WEBPACK_IMPORTED_MODULE_5__["default"]
1432
+ store: _app_store__WEBPACK_IMPORTED_MODULE_6__["default"]
1321
1433
  })
1322
1434
  })
1323
1435
 
@@ -1450,10 +1562,10 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
1450
1562
 
1451
1563
  /***/ }),
1452
1564
 
1453
- /***/ "../app/concepts/matestack/ui/core/page/content.js":
1454
- /*!*********************************************************!*\
1455
- !*** ../app/concepts/matestack/ui/core/page/content.js ***!
1456
- \*********************************************************/
1565
+ /***/ "../app/concepts/matestack/ui/core/page/content/content.js":
1566
+ /*!*****************************************************************!*\
1567
+ !*** ../app/concepts/matestack/ui/core/page/content/content.js ***!
1568
+ \*****************************************************************/
1457
1569
  /*! exports provided: default */
1458
1570
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1459
1571
 
@@ -1461,7 +1573,10 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
1461
1573
  __webpack_require__.r(__webpack_exports__);
1462
1574
  /* harmony import */ var vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue/dist/vue.esm */ "../node_modules/vue/dist/vue.esm.js");
1463
1575
  /* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "../node_modules/vuex/dist/vuex.esm.js");
1464
- /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
1576
+ /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
1577
+ /* harmony import */ var v_runtime_template__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! v-runtime-template */ "../node_modules/v-runtime-template/dist/v-runtime-template.es.js");
1578
+
1579
+
1465
1580
 
1466
1581
 
1467
1582
 
@@ -1473,7 +1588,11 @@ const componentDef = {
1473
1588
  },
1474
1589
  computed: vuex__WEBPACK_IMPORTED_MODULE_1__["default"].mapState({
1475
1590
  asyncPageTemplate: state => state.pageTemplate,
1476
- })
1591
+ loading: state => state.pageLoading
1592
+ }),
1593
+ components: {
1594
+ VRuntimeTemplate: v_runtime_template__WEBPACK_IMPORTED_MODULE_3__["default"]
1595
+ }
1477
1596
  }
1478
1597
 
1479
1598
  let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].component('matestack-ui-core-page-content', componentDef)
@@ -1481,6 +1600,93 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
1481
1600
  /* harmony default export */ __webpack_exports__["default"] = (componentDef);
1482
1601
 
1483
1602
 
1603
+ /***/ }),
1604
+
1605
+ /***/ "../app/concepts/matestack/ui/core/toggle/toggle.js":
1606
+ /*!**********************************************************!*\
1607
+ !*** ../app/concepts/matestack/ui/core/toggle/toggle.js ***!
1608
+ \**********************************************************/
1609
+ /*! exports provided: default */
1610
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1611
+
1612
+ "use strict";
1613
+ __webpack_require__.r(__webpack_exports__);
1614
+ /* harmony import */ var vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue/dist/vue.esm */ "../node_modules/vue/dist/vue.esm.js");
1615
+ /* harmony import */ var _js_event_hub__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../js/event-hub */ "../app/concepts/matestack/ui/core/js/event-hub.js");
1616
+ /* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
1617
+
1618
+
1619
+
1620
+
1621
+ const componentDef = {
1622
+ mixins: [_component_component__WEBPACK_IMPORTED_MODULE_2__["default"]],
1623
+ data: function(){
1624
+ return {
1625
+ showing: true,
1626
+ hide_after_timeout: null,
1627
+ event: {
1628
+ data: {}
1629
+ }
1630
+ }
1631
+ },
1632
+ methods: {
1633
+ show: function(event_data){
1634
+ const self = this
1635
+ if (this.showing === true){
1636
+ return
1637
+ }
1638
+ this.showing = true
1639
+ this.event.data = event_data
1640
+ if(this.componentConfig["hide_after"] != undefined){
1641
+ self.hide_after_timeout = setTimeout(function () {
1642
+ self.hide()
1643
+ }, parseInt(this.componentConfig["hide_after"]));
1644
+ }
1645
+ },
1646
+ hide: function(){
1647
+ this.showing = false
1648
+ this.event.data = {}
1649
+ }
1650
+ },
1651
+ created: function () {
1652
+ const self = this
1653
+ if(this.componentConfig["show_on"] != undefined){
1654
+ this.showing = false
1655
+ var show_events = this.componentConfig["show_on"].split(",")
1656
+ show_events.forEach(show_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$on(show_event.trim(), self.show));
1657
+ }
1658
+ if(this.componentConfig["hide_on"] != undefined){
1659
+ var hide_events = this.componentConfig["hide_on"].split(",")
1660
+ hide_events.forEach(hide_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$on(hide_event.trim(), self.hide));
1661
+ }
1662
+ if(this.componentConfig["show_on"] != undefined){
1663
+ this.showing = false
1664
+ }
1665
+ if(this.componentConfig["init_show"] == true){
1666
+ this.showing = true
1667
+ }
1668
+ },
1669
+ beforeDestroy: function() {
1670
+ const self = this
1671
+ clearTimeout(self.hide_after_timeout)
1672
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(this.componentConfig["show_on"], self.show);
1673
+ _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(this.componentConfig["hide_on"], self.hide);
1674
+ if(this.componentConfig["show_on"] != undefined){
1675
+ var shown_events = this.componentConfig["show_on"].split(",")
1676
+ shown_events.forEach(show_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(show_event.trim(), self.show));
1677
+ }
1678
+ if(this.componentConfig["hide_on"] != undefined){
1679
+ var hiden_events = this.componentConfig["hide_on"].split(",")
1680
+ hiden_events.forEach(hide_event => _js_event_hub__WEBPACK_IMPORTED_MODULE_1__["default"].$off(hide_event.trim(), self.hide));
1681
+ }
1682
+ },
1683
+ }
1684
+
1685
+ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].component('matestack-ui-core-toggle', componentDef)
1686
+
1687
+ /* harmony default export */ __webpack_exports__["default"] = (componentDef);
1688
+
1689
+
1484
1690
  /***/ }),
1485
1691
 
1486
1692
  /***/ "../app/concepts/matestack/ui/core/transition/transition.js":
@@ -1518,6 +1724,7 @@ const componentDef = {
1518
1724
  navigateTo: function(url){
1519
1725
  const self = this
1520
1726
  _js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit("page_loading_triggered", url);
1727
+ this.$store.commit('setPageLoading', true);
1521
1728
  if (self.componentConfig["delay"] != undefined) {
1522
1729
  setTimeout(function () {
1523
1730
  self.performNavigation(url)