matestack-ui-core 0.7.4 → 0.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/concepts/matestack/ui/core/app/app.js +11 -3
- data/app/concepts/matestack/ui/core/app/location.js +2 -3
- data/app/concepts/matestack/ui/core/app/store.js +11 -4
- data/app/concepts/matestack/ui/core/datalist/datalist.haml +3 -0
- data/app/concepts/matestack/ui/core/datalist/datalist.rb +5 -0
- data/app/concepts/matestack/ui/core/form/form.js +1 -1
- data/app/concepts/matestack/ui/core/form/input/input.haml +29 -18
- data/app/concepts/matestack/ui/core/form/input/input.rb +36 -29
- data/app/concepts/matestack/ui/core/input/input.haml +2 -3
- data/app/concepts/matestack/ui/core/input/input.rb +4 -0
- data/app/concepts/matestack/ui/core/js/core.js +26 -3
- data/app/lib/matestack/ui/core/has_view_context.rb +5 -1
- data/lib/matestack/ui/core/version.rb +1 -1
- data/vendor/assets/javascripts/dist/manifest.json +10 -6
- data/vendor/assets/javascripts/dist/matestack-ui-core.js +111 -29
- data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b08e2fe0f19b178aa377ca1cac852e56f5faee7abdf5ec08f0738c1c11c5b59
|
4
|
+
data.tar.gz: b79c9bc5a5609a50b274a83103c23bc659cca9ae582b49c931b34c2921f723f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 668b12bb85128ca1cd306e256fa8e75159f1e1f62edc7af46807fcb2537ea090ac9aeafab3fddfc5f437e76dfcb522c3db4fb01997165795811770e0d16b216d
|
7
|
+
data.tar.gz: 1bac122005918a5c46b5526e3d619ddf9fd1371e15b664e6c5c64293656d1f2c9706f5fbbfb369eb355e875fe38f2e4f68f9165dc788661aa41ae0f1ac47a72c
|
@@ -10,12 +10,20 @@ const componentDef = {
|
|
10
10
|
},
|
11
11
|
computed: Vuex.mapState({
|
12
12
|
asyncTemplate: state => state.pageTemplate,
|
13
|
+
currentPathName: state => state.currentPathName,
|
14
|
+
currentSearch: state => state.currentSearch,
|
15
|
+
currentOrigin: state => state.currentOrigin,
|
13
16
|
}),
|
14
17
|
mounted: function(){
|
18
|
+
const self = this;
|
15
19
|
window.onpopstate = (event) => {
|
16
|
-
if (isNavigatingToAnotherPage(
|
17
|
-
|
18
|
-
|
20
|
+
if (isNavigatingToAnotherPage({
|
21
|
+
origin: self.currentOrigin,
|
22
|
+
pathName: self.currentPathName,
|
23
|
+
search: self.currentSearch
|
24
|
+
}, document.location)){
|
25
|
+
self.$store.dispatch("navigateTo", {url: document.location.pathname, backwards: true} );
|
26
|
+
}
|
19
27
|
}
|
20
28
|
},
|
21
29
|
components: {
|
@@ -1,8 +1,7 @@
|
|
1
|
-
const isNavigatingToAnotherPage = function(currentLocation,
|
2
|
-
const targetLocation = popstateEvent.target.location;
|
1
|
+
const isNavigatingToAnotherPage = function(currentLocation, targetLocation) {
|
3
2
|
|
4
3
|
// omits hash by design
|
5
|
-
return currentLocation.
|
4
|
+
return currentLocation.pathName !== targetLocation.pathname ||
|
6
5
|
currentLocation.origin !== targetLocation.origin ||
|
7
6
|
currentLocation.search !== targetLocation.search
|
8
7
|
}
|
@@ -8,14 +8,21 @@ Vue.use(Vuex)
|
|
8
8
|
const store = new Vuex.Store({
|
9
9
|
state: {
|
10
10
|
pageTemplate: null,
|
11
|
-
|
11
|
+
currentPathName: document.location.pathname,
|
12
|
+
currentSearch: document.location.search,
|
13
|
+
currentOrigin: document.location.origin
|
12
14
|
},
|
13
15
|
mutations: {
|
14
16
|
setPageTemplate (state, serverResponse){
|
15
17
|
state.pageTemplate = serverResponse
|
16
18
|
},
|
17
|
-
|
18
|
-
state.
|
19
|
+
setCurrentLocation (state, current){
|
20
|
+
state.currentPathName = current.path
|
21
|
+
state.currentSearch = current.search
|
22
|
+
state.currentOrigin = current.origin
|
23
|
+
},
|
24
|
+
resetPageTemplate (state) {
|
25
|
+
state.pageTemplate = null;
|
19
26
|
}
|
20
27
|
},
|
21
28
|
actions: {
|
@@ -46,7 +53,7 @@ const store = new Vuex.Store({
|
|
46
53
|
setTimeout(function () {
|
47
54
|
resolve(response["data"])
|
48
55
|
commit('setPageTemplate', response["data"])
|
49
|
-
commit('
|
56
|
+
commit('setCurrentLocation', { path: url, search: document.location.search, origin: document.location.origin })
|
50
57
|
matestackEventHub.$emit("page_loaded", url);
|
51
58
|
if (typeof matestackUiCoreTransitionSuccess !== 'undefined') {
|
52
59
|
matestackUiCoreTransitionSuccess(url);
|
@@ -137,7 +137,7 @@ const componentDef = {
|
|
137
137
|
&& self.componentConfig["success"]["transition"]["follow_response"] === true
|
138
138
|
&& self.$store != undefined
|
139
139
|
) {
|
140
|
-
let path = response.data["transition_to"]
|
140
|
+
let path = response.data["transition_to"] || response.request.responseURL
|
141
141
|
self.$store.dispatch('navigateTo', {url: path, backwards: false})
|
142
142
|
return;
|
143
143
|
}
|
@@ -1,27 +1,38 @@
|
|
1
|
-
- if
|
2
|
-
%label=
|
1
|
+
- if label
|
2
|
+
%label=label
|
3
3
|
|
4
|
-
- if [:text, :number, :email, :date, :password].include?(
|
5
|
-
%input{@tag_attributes,
|
6
|
-
"v-model#{'.number' if
|
7
|
-
type:
|
4
|
+
- if [:text, :number, :email, :date, :password].include?(type)
|
5
|
+
%input{ @tag_attributes,
|
6
|
+
"v-model#{'.number' if type == :number}": input_key,
|
7
|
+
type: type,
|
8
8
|
"@change": "inputChanged(\"#{attr_key}\")",
|
9
9
|
ref: "input.#{attr_key}",
|
10
|
-
placeholder:
|
11
|
-
"init-value": init_value}
|
12
|
-
%span{class: "errors", "v-if": error_key }
|
13
|
-
%span{class: "error", "v-for": "error in #{error_key}"}
|
14
|
-
{{ error }}
|
10
|
+
placeholder: placeholder,
|
11
|
+
"init-value": init_value }
|
15
12
|
|
16
|
-
- if
|
17
|
-
%textarea{@tag_attributes,
|
13
|
+
- if type == :textarea
|
14
|
+
%textarea{ @tag_attributes,
|
18
15
|
"v-model": input_key,
|
19
16
|
"@change": "inputChanged(\"#{attr_key}\")",
|
20
17
|
ref: "input.#{attr_key}",
|
21
|
-
placeholder:
|
18
|
+
placeholder: placeholder,
|
22
19
|
"init-value": init_value,
|
23
20
|
rows: options[:rows],
|
24
|
-
cols: options[:cols]}
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
cols: options[:cols] }
|
22
|
+
|
23
|
+
- if type == :range
|
24
|
+
%input{ @tag_attributes,
|
25
|
+
"v-model": input_key,
|
26
|
+
type: :range,
|
27
|
+
"@change": "inputChanged(\"#{attr_key}\")",
|
28
|
+
ref: "input.#{attr_key}",
|
29
|
+
placeholder: placeholder,
|
30
|
+
"init-value": init_value,
|
31
|
+
min: options[:min],
|
32
|
+
max: options[:max],
|
33
|
+
step: options[:step],
|
34
|
+
list: options[:list] }
|
35
|
+
|
36
|
+
%span{ class: "errors", "v-if": error_key }
|
37
|
+
%span{ class: "error", "v-for": "error in #{error_key}" }
|
38
|
+
{{ error }}
|
@@ -7,21 +7,35 @@ module Matestack::Ui::Core::Form::Input
|
|
7
7
|
raise "included form config is missing, please add ':include' to parent form component" if @included_config.nil?
|
8
8
|
end
|
9
9
|
|
10
|
+
def key
|
11
|
+
options[:key]
|
12
|
+
end
|
13
|
+
|
14
|
+
def label
|
15
|
+
options[:label]
|
16
|
+
end
|
17
|
+
|
18
|
+
def type
|
19
|
+
options[:type]
|
20
|
+
end
|
21
|
+
|
22
|
+
def placeholder
|
23
|
+
options[:placeholder]
|
24
|
+
end
|
25
|
+
|
10
26
|
def input_key
|
11
|
-
|
27
|
+
"data['#{key.to_s}']"
|
12
28
|
end
|
13
29
|
|
14
30
|
def error_key
|
15
|
-
|
31
|
+
"errors['#{key.to_s}']"
|
16
32
|
end
|
17
33
|
|
18
34
|
def input_wrapper
|
19
35
|
case options[:for]
|
20
36
|
when nil
|
21
37
|
return nil
|
22
|
-
when Symbol
|
23
|
-
return options[:for]
|
24
|
-
when String
|
38
|
+
when Symbol, String
|
25
39
|
return options[:for]
|
26
40
|
end
|
27
41
|
if options[:for].respond_to?(:model_name)
|
@@ -31,44 +45,37 @@ module Matestack::Ui::Core::Form::Input
|
|
31
45
|
|
32
46
|
def attr_key
|
33
47
|
if input_wrapper.nil?
|
34
|
-
return
|
48
|
+
return key.to_s
|
35
49
|
else
|
36
|
-
return "#{input_wrapper}.#{
|
50
|
+
return "#{input_wrapper}.#{key.to_s}"
|
37
51
|
end
|
38
52
|
end
|
39
53
|
|
40
54
|
def init_value
|
41
|
-
unless options[:init].nil?
|
42
|
-
return options[:init]
|
43
|
-
end
|
55
|
+
return options[:init] unless options[:init].nil?
|
44
56
|
|
45
57
|
unless options[:for].nil?
|
46
|
-
value = options[:for].send
|
47
|
-
if [true, false].include? value
|
48
|
-
value ? 1 : 0
|
49
|
-
else
|
50
|
-
return value
|
51
|
-
end
|
58
|
+
value = parse_value(options[:for].send key)
|
52
59
|
else
|
53
60
|
unless @included_config.nil? && @included_config[:for].nil?
|
54
|
-
if @included_config[:for].respond_to?(
|
55
|
-
value = @included_config[:for].send
|
56
|
-
if [true, false].include? value
|
57
|
-
value ? 1 : 0
|
58
|
-
else
|
59
|
-
return value
|
60
|
-
end
|
61
|
+
if @included_config[:for].respond_to?(key)
|
62
|
+
value = parse_value(@included_config[:for].send key)
|
61
63
|
else
|
62
|
-
|
63
|
-
return nil
|
64
|
-
end
|
65
|
-
if @included_config[:for].is_a?(Hash)
|
66
|
-
return @included_config[:for][options[:key]]
|
67
|
-
end
|
64
|
+
@included_config[:for][key] if @included_config[:for].is_a?(Hash)
|
68
65
|
end
|
69
66
|
end
|
70
67
|
end
|
71
68
|
end
|
72
69
|
|
70
|
+
private
|
71
|
+
|
72
|
+
def parse_value(value)
|
73
|
+
if [true, false].include? value
|
74
|
+
value ? 1 : 0
|
75
|
+
else
|
76
|
+
return value
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
73
80
|
end
|
74
81
|
end
|
@@ -1,3 +1,2 @@
|
|
1
|
-
%input{@tag_attributes
|
2
|
-
|
3
|
-
= yield
|
1
|
+
%input{ @tag_attributes,
|
2
|
+
type: type }
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import Vue from 'vue/dist/vue.esm'
|
2
|
+
import { turbolinksAdapterMixin } from 'vue-turbolinks';
|
2
3
|
|
3
4
|
// Import from app/concepts/matestack/ui/core:
|
4
5
|
import app from '../app/app'
|
@@ -18,13 +19,35 @@ import collectionOrder from '../collection/order/order'
|
|
18
19
|
|
19
20
|
let matestackUiApp = undefined
|
20
21
|
|
22
|
+
// this event fires first and always
|
21
23
|
document.addEventListener('DOMContentLoaded', () => {
|
22
|
-
|
23
|
-
|
24
|
+
// somehow we need to inject the turbolinks mixin even
|
25
|
+
// if the turbolinks:load event will recreate the vue instance
|
26
|
+
// skipping the injection here caused errors when submitting forms or action
|
27
|
+
// if they were present on the first page, which was loaded and activated turbolinks
|
28
|
+
// the mixin does not impact the app when turbolinks is disabled
|
29
|
+
matestackUiApp = new Vue({
|
24
30
|
el: "#matestack_ui",
|
31
|
+
mixins: [turbolinksAdapterMixin],
|
25
32
|
store: store
|
26
|
-
|
33
|
+
})
|
34
|
+
})
|
27
35
|
|
36
|
+
// this event fires after DOMContentLoaded and only if turbolinks are enabled
|
37
|
+
document.addEventListener('turbolinks:load', () => {
|
38
|
+
// we need to empty the currently stored pageTemplate state variable
|
39
|
+
// otherwise the matestack page will jump back to the latest pageTemplate
|
40
|
+
// fetched during the last matestack transition as the turbolinks powered
|
41
|
+
// page transition does not write the matestack store pageTemplate state variable
|
42
|
+
store.commit('resetPageTemplate')
|
43
|
+
// we need to destroy the vue app instance
|
44
|
+
matestackUiApp.$destroy();
|
45
|
+
// and recreate it right afterwards in order to work when used with turbolinks
|
46
|
+
matestackUiApp = new Vue({
|
47
|
+
el: "#matestack_ui",
|
48
|
+
mixins: [turbolinksAdapterMixin],
|
49
|
+
store: store
|
50
|
+
})
|
28
51
|
})
|
29
52
|
|
30
53
|
export default Vue
|
@@ -2,17 +2,21 @@
|
|
2
2
|
"entrypoints": {
|
3
3
|
"matestack-ui-core": {
|
4
4
|
"css": [
|
5
|
-
"/dist/matestack-ui-core.
|
5
|
+
"/dist/matestack-ui-core.css"
|
6
6
|
],
|
7
7
|
"js": [
|
8
|
-
"/dist/matestack-ui-core.
|
8
|
+
"/dist/matestack-ui-core.js"
|
9
|
+
],
|
10
|
+
"css.map": [
|
11
|
+
"/dist/matestack-ui-core.css.map"
|
9
12
|
],
|
10
13
|
"js.map": [
|
11
|
-
"/dist/matestack-ui-core.
|
14
|
+
"/dist/matestack-ui-core.js.map"
|
12
15
|
]
|
13
16
|
}
|
14
17
|
},
|
15
|
-
"matestack-ui-core.css": "/dist/matestack-ui-core.
|
16
|
-
"matestack-ui-core.
|
17
|
-
"matestack-ui-core.js
|
18
|
+
"matestack-ui-core.css": "/dist/matestack-ui-core.css",
|
19
|
+
"matestack-ui-core.css.map": "/dist/matestack-ui-core.css.map",
|
20
|
+
"matestack-ui-core.js": "/dist/matestack-ui-core.js",
|
21
|
+
"matestack-ui-core.js.map": "/dist/matestack-ui-core.js.map"
|
18
22
|
}
|
@@ -201,12 +201,20 @@ const componentDef = {
|
|
201
201
|
},
|
202
202
|
computed: vuex__WEBPACK_IMPORTED_MODULE_2__["default"].mapState({
|
203
203
|
asyncTemplate: state => state.pageTemplate,
|
204
|
+
currentPathName: state => state.currentPathName,
|
205
|
+
currentSearch: state => state.currentSearch,
|
206
|
+
currentOrigin: state => state.currentOrigin,
|
204
207
|
}),
|
205
208
|
mounted: function(){
|
209
|
+
const self = this;
|
206
210
|
window.onpopstate = (event) => {
|
207
|
-
if (Object(_location__WEBPACK_IMPORTED_MODULE_3__["default"])(
|
208
|
-
|
209
|
-
|
211
|
+
if (Object(_location__WEBPACK_IMPORTED_MODULE_3__["default"])({
|
212
|
+
origin: self.currentOrigin,
|
213
|
+
pathName: self.currentPathName,
|
214
|
+
search: self.currentSearch
|
215
|
+
}, document.location)){
|
216
|
+
self.$store.dispatch("navigateTo", {url: document.location.pathname, backwards: true} );
|
217
|
+
}
|
210
218
|
}
|
211
219
|
},
|
212
220
|
components: {
|
@@ -232,11 +240,10 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
|
|
232
240
|
|
233
241
|
"use strict";
|
234
242
|
__webpack_require__.r(__webpack_exports__);
|
235
|
-
const isNavigatingToAnotherPage = function(currentLocation,
|
236
|
-
const targetLocation = popstateEvent.target.location;
|
243
|
+
const isNavigatingToAnotherPage = function(currentLocation, targetLocation) {
|
237
244
|
|
238
245
|
// omits hash by design
|
239
|
-
return currentLocation.
|
246
|
+
return currentLocation.pathName !== targetLocation.pathname ||
|
240
247
|
currentLocation.origin !== targetLocation.origin ||
|
241
248
|
currentLocation.search !== targetLocation.search
|
242
249
|
}
|
@@ -270,14 +277,21 @@ vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].use(vuex__WEBPACK_IMPOR
|
|
270
277
|
const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
|
271
278
|
state: {
|
272
279
|
pageTemplate: null,
|
273
|
-
|
280
|
+
currentPathName: document.location.pathname,
|
281
|
+
currentSearch: document.location.search,
|
282
|
+
currentOrigin: document.location.origin
|
274
283
|
},
|
275
284
|
mutations: {
|
276
285
|
setPageTemplate (state, serverResponse){
|
277
286
|
state.pageTemplate = serverResponse
|
278
287
|
},
|
279
|
-
|
280
|
-
state.
|
288
|
+
setCurrentLocation (state, current){
|
289
|
+
state.currentPathName = current.path
|
290
|
+
state.currentSearch = current.search
|
291
|
+
state.currentOrigin = current.origin
|
292
|
+
},
|
293
|
+
resetPageTemplate (state) {
|
294
|
+
state.pageTemplate = null;
|
281
295
|
}
|
282
296
|
},
|
283
297
|
actions: {
|
@@ -308,7 +322,7 @@ const store = new vuex__WEBPACK_IMPORTED_MODULE_1__["default"].Store({
|
|
308
322
|
setTimeout(function () {
|
309
323
|
resolve(response["data"])
|
310
324
|
commit('setPageTemplate', response["data"])
|
311
|
-
commit('
|
325
|
+
commit('setCurrentLocation', { path: url, search: document.location.search, origin: document.location.origin })
|
312
326
|
_js_event_hub__WEBPACK_IMPORTED_MODULE_3__["default"].$emit("page_loaded", url);
|
313
327
|
if (typeof matestackUiCoreTransitionSuccess !== 'undefined') {
|
314
328
|
matestackUiCoreTransitionSuccess(url);
|
@@ -936,7 +950,7 @@ const componentDef = {
|
|
936
950
|
&& self.componentConfig["success"]["transition"]["follow_response"] === true
|
937
951
|
&& self.$store != undefined
|
938
952
|
) {
|
939
|
-
let path = response.data["transition_to"]
|
953
|
+
let path = response.data["transition_to"] || response.request.responseURL
|
940
954
|
self.$store.dispatch('navigateTo', {url: path, backwards: false})
|
941
955
|
return;
|
942
956
|
}
|
@@ -1008,20 +1022,22 @@ let component = vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"].compone
|
|
1008
1022
|
"use strict";
|
1009
1023
|
__webpack_require__.r(__webpack_exports__);
|
1010
1024
|
/* harmony import */ var vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue/dist/vue.esm */ "../node_modules/vue/dist/vue.esm.js");
|
1011
|
-
/* harmony import */ var
|
1012
|
-
/* harmony import */ var
|
1013
|
-
/* harmony import */ var
|
1014
|
-
/* harmony import */ var
|
1015
|
-
/* harmony import */ var
|
1016
|
-
/* harmony import */ var
|
1017
|
-
/* harmony import */ var
|
1018
|
-
/* harmony import */ var
|
1019
|
-
/* harmony import */ var
|
1020
|
-
/* harmony import */ var
|
1021
|
-
/* harmony import */ var
|
1022
|
-
/* harmony import */ var
|
1023
|
-
/* harmony import */ var
|
1024
|
-
/* harmony import */ var
|
1025
|
+
/* harmony import */ var vue_turbolinks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-turbolinks */ "../node_modules/vue-turbolinks/index.js");
|
1026
|
+
/* harmony import */ var _app_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app/app */ "../app/concepts/matestack/ui/core/app/app.js");
|
1027
|
+
/* harmony import */ var _async_async__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../async/async */ "../app/concepts/matestack/ui/core/async/async.js");
|
1028
|
+
/* harmony import */ var _page_content__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../page/content */ "../app/concepts/matestack/ui/core/page/content.js");
|
1029
|
+
/* harmony import */ var _app_store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app/store */ "../app/concepts/matestack/ui/core/app/store.js");
|
1030
|
+
/* harmony import */ var _component_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../component/component */ "../app/concepts/matestack/ui/core/component/component.js");
|
1031
|
+
/* 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");
|
1032
|
+
/* harmony import */ var _html_html__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../html/html */ "../app/concepts/matestack/ui/core/html/html.js");
|
1033
|
+
/* harmony import */ var _transition_transition__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../transition/transition */ "../app/concepts/matestack/ui/core/transition/transition.js");
|
1034
|
+
/* harmony import */ var _action_action__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../action/action */ "../app/concepts/matestack/ui/core/action/action.js");
|
1035
|
+
/* harmony import */ var _form_form__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../form/form */ "../app/concepts/matestack/ui/core/form/form.js");
|
1036
|
+
/* harmony import */ var _onclick_onclick__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../onclick/onclick */ "../app/concepts/matestack/ui/core/onclick/onclick.js");
|
1037
|
+
/* harmony import */ var _collection_content_content__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../collection/content/content */ "../app/concepts/matestack/ui/core/collection/content/content.js");
|
1038
|
+
/* harmony import */ var _collection_filter_filter__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../collection/filter/filter */ "../app/concepts/matestack/ui/core/collection/filter/filter.js");
|
1039
|
+
/* harmony import */ var _collection_order_order__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../collection/order/order */ "../app/concepts/matestack/ui/core/collection/order/order.js");
|
1040
|
+
|
1025
1041
|
|
1026
1042
|
|
1027
1043
|
// Import from app/concepts/matestack/ui/core:
|
@@ -1042,13 +1058,35 @@ __webpack_require__.r(__webpack_exports__);
|
|
1042
1058
|
|
1043
1059
|
let matestackUiApp = undefined
|
1044
1060
|
|
1061
|
+
// this event fires first and always
|
1045
1062
|
document.addEventListener('DOMContentLoaded', () => {
|
1046
|
-
|
1047
|
-
|
1063
|
+
// somehow we need to inject the turbolinks mixin even
|
1064
|
+
// if the turbolinks:load event will recreate the vue instance
|
1065
|
+
// skipping the injection here caused errors when submitting forms or action
|
1066
|
+
// if they were present on the first page, which was loaded and activated turbolinks
|
1067
|
+
// the mixin does not impact the app when turbolinks is disabled
|
1068
|
+
matestackUiApp = new vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"]({
|
1048
1069
|
el: "#matestack_ui",
|
1049
|
-
|
1050
|
-
|
1070
|
+
mixins: [vue_turbolinks__WEBPACK_IMPORTED_MODULE_1__["turbolinksAdapterMixin"]],
|
1071
|
+
store: _app_store__WEBPACK_IMPORTED_MODULE_5__["default"]
|
1072
|
+
})
|
1073
|
+
})
|
1051
1074
|
|
1075
|
+
// this event fires after DOMContentLoaded and only if turbolinks are enabled
|
1076
|
+
document.addEventListener('turbolinks:load', () => {
|
1077
|
+
// we need to empty the currently stored pageTemplate state variable
|
1078
|
+
// otherwise the matestack page will jump back to the latest pageTemplate
|
1079
|
+
// fetched during the last matestack transition as the turbolinks powered
|
1080
|
+
// page transition does not write the matestack store pageTemplate state variable
|
1081
|
+
_app_store__WEBPACK_IMPORTED_MODULE_5__["default"].commit('resetPageTemplate')
|
1082
|
+
// we need to destroy the vue app instance
|
1083
|
+
matestackUiApp.$destroy();
|
1084
|
+
// and recreate it right afterwards in order to work when used with turbolinks
|
1085
|
+
matestackUiApp = new vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"]({
|
1086
|
+
el: "#matestack_ui",
|
1087
|
+
mixins: [vue_turbolinks__WEBPACK_IMPORTED_MODULE_1__["turbolinksAdapterMixin"]],
|
1088
|
+
store: _app_store__WEBPACK_IMPORTED_MODULE_5__["default"]
|
1089
|
+
})
|
1052
1090
|
})
|
1053
1091
|
|
1054
1092
|
/* harmony default export */ __webpack_exports__["default"] = (vue_dist_vue_esm__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
@@ -2981,6 +3019,50 @@ var t = function t(_t, o, e) {
|
|
2981
3019
|
|
2982
3020
|
/***/ }),
|
2983
3021
|
|
3022
|
+
/***/ "../node_modules/vue-turbolinks/index.js":
|
3023
|
+
/*!***********************************************!*\
|
3024
|
+
!*** ../node_modules/vue-turbolinks/index.js ***!
|
3025
|
+
\***********************************************/
|
3026
|
+
/*! exports provided: turbolinksAdapterMixin, default */
|
3027
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
3028
|
+
|
3029
|
+
"use strict";
|
3030
|
+
__webpack_require__.r(__webpack_exports__);
|
3031
|
+
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "turbolinksAdapterMixin", function() { return turbolinksAdapterMixin; });
|
3032
|
+
function handleVueDestruction(vue) {
|
3033
|
+
var turbolinksEvent = vue.$options.turbolinksDestroyEvent || 'turbolinks:visit';
|
3034
|
+
document.addEventListener(turbolinksEvent, function teardown() {
|
3035
|
+
vue.$destroy();
|
3036
|
+
document.removeEventListener(turbolinksEvent, teardown);
|
3037
|
+
});
|
3038
|
+
}
|
3039
|
+
|
3040
|
+
var turbolinksAdapterMixin = {
|
3041
|
+
beforeMount: function beforeMount() {
|
3042
|
+
// If this is the root component, we want to cache the original element contents to replace later
|
3043
|
+
// We don't care about sub-components, just the root
|
3044
|
+
if (this === this.$root && this.$el) {
|
3045
|
+
handleVueDestruction(this); // cache original element
|
3046
|
+
|
3047
|
+
this.$turbolinksCachedHTML = this.$el.outerHTML; // register root hook to restore original element on destroy
|
3048
|
+
|
3049
|
+
this.$once('hook:destroyed', function () {
|
3050
|
+
this.$el.outerHTML = this.$turbolinksCachedHTML;
|
3051
|
+
});
|
3052
|
+
}
|
3053
|
+
}
|
3054
|
+
};
|
3055
|
+
|
3056
|
+
function plugin(Vue, options) {
|
3057
|
+
// Install a global mixin
|
3058
|
+
Vue.mixin(turbolinksAdapterMixin);
|
3059
|
+
}
|
3060
|
+
|
3061
|
+
|
3062
|
+
/* harmony default export */ __webpack_exports__["default"] = (plugin);
|
3063
|
+
|
3064
|
+
/***/ }),
|
3065
|
+
|
2984
3066
|
/***/ "../node_modules/vue/dist/vue.esm.js":
|
2985
3067
|
/*!*******************************************!*\
|
2986
3068
|
!*** ../node_modules/vue/dist/vue.esm.js ***!
|