codelation_ui 1.0.1 → 1.0.57
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/codelation_ui/_base_resources/app.js +54 -5
- data/app/assets/javascripts/codelation_ui/base.js +1 -0
- data/app/assets/javascripts/codelation_ui/extended/checkmark.js +31 -0
- data/app/assets/javascripts/codelation_ui/extended/code.js +64 -0
- data/app/assets/javascripts/codelation_ui/extended/fail.js +31 -0
- data/app/assets/javascripts/codelation_ui/extended/radial_progress_bar.js +267 -0
- data/app/assets/javascripts/codelation_ui/extended/slider.js +636 -639
- data/app/assets/javascripts/codelation_ui/extended/spinner.js +103 -0
- data/app/assets/javascripts/codelation_ui/forms/components/input.js +417 -388
- data/app/assets/javascripts/codelation_ui/forms/interfaces/form.js +35 -30
- data/app/assets/javascripts/codelation_ui/std.js +3 -1
- data/app/assets/javascripts/codelation_ui/std/components/info.js +22 -0
- data/app/assets/javascripts/codelation_ui/std/components/transition.js +26 -0
- data/app/assets/javascripts/codelation_ui/std/computed_interfaces/mockAPI.js +17 -0
- data/app/assets/javascripts/codelation_ui/std/interfaces/array.js +28 -0
- data/app/assets/javascripts/codelation_ui/std/interfaces/content_formatters.js +37 -10
- data/app/assets/javascripts/codelation_ui/std/interfaces/date.js +8 -0
- data/app/assets/javascripts/codelation_ui/std/interfaces/number.js +20 -0
- data/app/assets/javascripts/codelation_ui/std/interfaces/rest_api.js +104 -0
- data/app/assets/javascripts/codelation_ui/std/interfaces/string.js +29 -0
- data/app/assets/javascripts/codelation_ui/vue.js +25 -8
- data/app/assets/javascripts/codelation_ui/vue_pages.js +35 -10
- data/app/assets/stylesheets/codelation_ui.scss +1 -3
- data/app/assets/stylesheets/codelation_ui/_base_resources/_turbolinks.scss +11 -0
- data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/button.scss +185 -33
- data/app/assets/stylesheets/codelation_ui/base.scss +3 -0
- data/app/assets/stylesheets/codelation_ui/colors.scss +2 -0
- data/app/assets/stylesheets/codelation_ui/extended/checkmark.scss +53 -0
- data/app/assets/stylesheets/codelation_ui/extended/code.scss +153 -0
- data/app/assets/stylesheets/codelation_ui/extended/fail.scss +50 -0
- data/app/assets/stylesheets/codelation_ui/extended/radial_progress_bar.scss +70 -0
- data/app/assets/stylesheets/codelation_ui/extended/slider.scss +2 -2
- data/app/assets/stylesheets/codelation_ui/extended/spinner.scss +100 -0
- data/app/assets/stylesheets/codelation_ui/std.scss +1 -1
- data/app/assets/stylesheets/codelation_ui/std/info.scss +51 -0
- data/app/assets/stylesheets/codelation_ui/vue_transitions.scss +94 -0
- data/app/helpers/action_view/helpers/url_helper.rb +22 -0
- data/lib/generators/ui/component/USAGE +22 -0
- data/lib/generators/ui/component/component_generator.rb +41 -0
- data/lib/generators/ui/component/templates/javascript.js.erb +20 -0
- data/lib/generators/ui/component/templates/page_javascript.js.erb +20 -0
- data/lib/generators/ui/component/templates/page_stylesheet.scss.erb +3 -0
- data/lib/generators/ui/component/templates/stylesheet.scss.erb +3 -0
- data/lib/generators/ui/component/templates/template.html.erb +5 -0
- data/lib/generators/ui/mixin/USAGE +8 -0
- data/lib/generators/ui/mixin/mixin_generator.rb +11 -0
- data/lib/generators/ui/mixin/templates/javascript.js.erb +8 -0
- data/lib/generators/ui/pages/USAGE +23 -0
- data/lib/generators/ui/pages/pages_generator.rb +48 -0
- data/lib/generators/ui/pages/templates/controller.rb +2 -0
- data/lib/generators/ui/pages/templates/javascript.js.erb +22 -0
- data/lib/generators/ui/pages/templates/stylesheet.scss.erb +3 -0
- data/lib/generators/ui/pages/templates/template.html.erb +3 -0
- data/vendor/assets/javascripts/highlight.pack.js +2 -0
- data/vendor/assets/javascripts/pluralize.js +1 -0
- data/vendor/assets/javascripts/vue.js +4 -10232
- metadata +107 -11
- data/app/assets/javascripts/codelation_ui/std/index.js +0 -2
@@ -2,57 +2,62 @@
|
|
2
2
|
"use strict";
|
3
3
|
|
4
4
|
// Exposes method validateForm(success, fail)
|
5
|
-
|
5
|
+
App.vue.config.form = {
|
6
|
+
disableValidation: false
|
7
|
+
}
|
8
|
+
|
6
9
|
App.vue.interfaces.form = {
|
7
10
|
data: function() {
|
8
11
|
return {
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
form: {
|
13
|
+
formValidationWatch: true,
|
14
|
+
formValidationInputs: 0,
|
15
|
+
formValidationResponded: 0,
|
16
|
+
formValidationValid: true,
|
17
|
+
formValidationValidAction: null,
|
18
|
+
formValidationInvalidAction: null,
|
19
|
+
formValidationErrorMessage: null,
|
20
|
+
formValidationDeveloperMode: false,
|
21
|
+
}
|
17
22
|
}
|
18
23
|
},
|
19
24
|
ready: function() {
|
20
|
-
if (App.vue.config.
|
21
|
-
this.
|
25
|
+
if (App.vue.config.form.disableValidation == true) {
|
26
|
+
this.form.formValidationDeveloperMode = true;
|
22
27
|
console.error("VUE FORMS DEVELOPER MODE: Validations will not fail the form");
|
23
28
|
}
|
24
29
|
},
|
25
30
|
methods: {
|
26
31
|
_formValidationRespondToForm: function() {
|
27
|
-
if (this.
|
28
|
-
if (this.
|
29
|
-
this.
|
30
|
-
}else if (!this.
|
31
|
-
this.
|
32
|
+
if (this.form.formValidationWatch && this.form.formValidationResponded === this.form.formValidationInputs) {
|
33
|
+
if (this.form.formValidationValid && typeof this.form.formValidationValidAction === 'function') {
|
34
|
+
this.form.formValidationValidAction();
|
35
|
+
}else if (!this.form.formValidationValid && typeof this.form.formValidationInvalidAction === 'function') {
|
36
|
+
this.form.formValidationInvalidAction();
|
32
37
|
}
|
33
38
|
}
|
34
39
|
},
|
35
40
|
_formValidationValidateCallback: function(valid) {
|
36
|
-
this.
|
37
|
-
if (this.
|
38
|
-
this.
|
41
|
+
this.form.formValidationResponded++;
|
42
|
+
if (this.form.formValidationValid) {
|
43
|
+
this.form.formValidationValid = valid;
|
39
44
|
}
|
40
45
|
this._formValidationRespondToForm();
|
41
46
|
},
|
42
47
|
validateForm: function(successCB, failCB) {
|
43
|
-
if (this.
|
48
|
+
if (this.form.formValidationDeveloperMode === true) {
|
44
49
|
successCB();
|
45
50
|
return;
|
46
51
|
}
|
47
|
-
this.
|
48
|
-
this.
|
49
|
-
this.
|
50
|
-
this.
|
51
|
-
this.
|
52
|
-
this.
|
53
|
-
this.
|
52
|
+
this.form.formValidationWatch = false;
|
53
|
+
this.form.formValidationErrorMessage = null;
|
54
|
+
this.form.formValidationResponded = 0;
|
55
|
+
this.form.formValidationValid = true;
|
56
|
+
this.form.formValidationValidAction = successCB || null;
|
57
|
+
this.form.formValidationInvalidAction = failCB || null;
|
58
|
+
this.form.formValidationWatch = true;
|
54
59
|
|
55
|
-
if (this.
|
60
|
+
if (this.form.formValidationInputs < 1) {
|
56
61
|
this._formValidationRespondToForm();
|
57
62
|
}else{
|
58
63
|
this.$broadcast('_form-validation-validate-inputs', this._formValidationValidateCallback);
|
@@ -61,10 +66,10 @@
|
|
61
66
|
},
|
62
67
|
events: {
|
63
68
|
'_form-validation-inputs-check-in': function() {
|
64
|
-
this.
|
69
|
+
this.form.formValidationInputs++;
|
65
70
|
},
|
66
71
|
'_form-validation-inputs-check-out': function() {
|
67
|
-
this.
|
72
|
+
this.form.formValidationInputs--;
|
68
73
|
}
|
69
74
|
}
|
70
75
|
};
|
@@ -0,0 +1,22 @@
|
|
1
|
+
(function() {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
var template = '<div class="vue-info" :style="{\'font-size\': size + \'px\'}">\
|
5
|
+
<i class=\"fa fa-question vue-info-hint\"></i>\
|
6
|
+
<span class="vue-info-message" :class="[direction]">\
|
7
|
+
<slot></slot>\
|
8
|
+
</span>\
|
9
|
+
</div>';
|
10
|
+
|
11
|
+
App.vue.components.vueInfo = Vue.extend({
|
12
|
+
template: template,
|
13
|
+
props: {
|
14
|
+
'size': {
|
15
|
+
default: '12'
|
16
|
+
},
|
17
|
+
'direction': {
|
18
|
+
default: ''
|
19
|
+
}
|
20
|
+
}
|
21
|
+
});
|
22
|
+
})();
|
@@ -0,0 +1,26 @@
|
|
1
|
+
(function() {
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
var template = '<div v-if="pageTransitionFinished" :transition="transitionName"><slot></slot></div>';
|
5
|
+
|
6
|
+
App.vue.components.vueTransition = Vue.extend({
|
7
|
+
props: {
|
8
|
+
transitionName: {
|
9
|
+
type: String,
|
10
|
+
default: "v-fade-up"
|
11
|
+
}
|
12
|
+
},
|
13
|
+
template: template,
|
14
|
+
data: function() {
|
15
|
+
return {
|
16
|
+
pageTransitionFinished: false
|
17
|
+
}
|
18
|
+
},
|
19
|
+
ready: function() {
|
20
|
+
var self = this;
|
21
|
+
this.$nextTick(function() {
|
22
|
+
self.pageTransitionFinished = true;
|
23
|
+
});
|
24
|
+
}
|
25
|
+
});
|
26
|
+
})();
|
@@ -0,0 +1,17 @@
|
|
1
|
+
App.vue.computedInterfaces.mockAPI = function(data, objectString, queryData) {
|
2
|
+
return {
|
3
|
+
ready: function() {
|
4
|
+
var self = this;
|
5
|
+
this.$nextTick(function(){
|
6
|
+
self[objectString] = data;
|
7
|
+
self.queryData = queryData || {};
|
8
|
+
self.ready();
|
9
|
+
});
|
10
|
+
},
|
11
|
+
methods: {
|
12
|
+
ready: function() {
|
13
|
+
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
(function(){
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
App.vue.interfaces.array = {
|
5
|
+
methods: {
|
6
|
+
_uniq: function(arr) {
|
7
|
+
if (arr.constructor === Array) {
|
8
|
+
var seen = {};
|
9
|
+
var out = [];
|
10
|
+
var len = arr.length;
|
11
|
+
var j = 0;
|
12
|
+
for(var i = 0; i < len; i++) {
|
13
|
+
var item = arr[i];
|
14
|
+
if(seen[item] !== 1) {
|
15
|
+
seen[item] = 1;
|
16
|
+
out[j++] = item;
|
17
|
+
}
|
18
|
+
}
|
19
|
+
return out;
|
20
|
+
}else{
|
21
|
+
console.warn("_uniq only supports arrays");
|
22
|
+
return -1;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
})();
|
@@ -1,26 +1,53 @@
|
|
1
1
|
(function() {
|
2
2
|
"use strict";
|
3
|
+
|
4
|
+
// Config options
|
5
|
+
App.vue.config.contentFormatters = {
|
6
|
+
'empty': '--',
|
7
|
+
'currency': '0,0[.]00',
|
8
|
+
'percent': '0,0[.]00',
|
9
|
+
'number': '0,0[.]00',
|
10
|
+
'date': 'MM/DD/YYYY',
|
11
|
+
};
|
12
|
+
|
3
13
|
App.vue.interfaces.contentFormatters = {
|
4
14
|
methods: {
|
5
|
-
_formatToCurrency: function(value, custom_number_format) {
|
6
|
-
|
15
|
+
_formatToCurrency: function(value, custom_number_format, nullReturn) {
|
16
|
+
if (value === undefined || value === null || isNaN(value)) {
|
17
|
+
return nullReturn || App.vue.config.contentFormatters.empty;
|
18
|
+
}
|
19
|
+
return App.vue.interfaces.number.methods._numeral(value).format('$' + (custom_number_format || App.vue.config.contentFormatters.currency));
|
7
20
|
},
|
8
|
-
_formatToPercent: function(value, custom_number_format) {
|
9
|
-
|
21
|
+
_formatToPercent: function(value, custom_number_format, nullReturn) {
|
22
|
+
if (value === undefined || value === null || isNaN(value)) {
|
23
|
+
return nullReturn || App.vue.config.contentFormatters.empty;
|
24
|
+
}
|
25
|
+
return App.vue.interfaces.number.methods._numeral(value / 100).format((custom_number_format || App.vue.config.contentFormatters.percent) + '%');
|
10
26
|
},
|
11
|
-
_formatToNumber: function(value, custom_number_format) {
|
12
|
-
|
27
|
+
_formatToNumber: function(value, custom_number_format, nullReturn) {
|
28
|
+
if (value === undefined || value === null || isNaN(value)) {
|
29
|
+
return nullReturn || App.vue.config.contentFormatters.empty;
|
30
|
+
}
|
31
|
+
return App.vue.interfaces.number.methods._numeral(value).format(custom_number_format || App.vue.config.contentFormatters.number);
|
13
32
|
},
|
14
|
-
_formatToPhoneNumber: function(value) {
|
15
|
-
|
33
|
+
_formatToPhoneNumber: function(value, reg, nullReturn) {
|
34
|
+
if (value === undefined || value === null) {
|
35
|
+
return nullReturn || App.vue.config.contentFormatters.empty;
|
36
|
+
}
|
37
|
+
var r = reg || /(?:(\+?(?:(\d{1,2}))\s?)?(\(?(?:(\d{3}))\)?(\s|-|\.)?)((?:(\d{3}))(\s|-|\.)?)((?:(\d{4}))))/i;
|
16
38
|
var match = r.exec(value);
|
17
39
|
if (match !== null && match.length === 11) {
|
18
40
|
var areaCode = match[2] || 1;
|
19
41
|
return '+' + areaCode + ' (' + match[4] + ') ' + match[7] + '-' + match[10];
|
42
|
+
}else{
|
43
|
+
return nullReturn || App.vue.config.contentFormatters.empty;
|
20
44
|
}
|
21
45
|
},
|
22
|
-
_formatToDate: function(value) {
|
23
|
-
|
46
|
+
_formatToDate: function(value, custom_format, nullReturn) {
|
47
|
+
if (value === undefined || value === null || !this._moment(value).isValid()) {
|
48
|
+
return nullReturn || App.vue.config.contentFormatters.empty;
|
49
|
+
}
|
50
|
+
return App.vue.interfaces.date.methods._moment(value).format(custom_format || App.vue.config.contentFormatters.date);
|
24
51
|
}
|
25
52
|
}
|
26
53
|
};
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
(function(){
|
3
|
+
"use strict";
|
4
|
+
|
5
|
+
App.vue.interfaces.number = {
|
6
|
+
methods: {
|
7
|
+
_numeral: numeral,
|
8
|
+
// checks if the denominator is zero and returns zero
|
9
|
+
_safeDivide: function(num, den) {
|
10
|
+
if (den === 0) {
|
11
|
+
return 0;
|
12
|
+
} else {
|
13
|
+
// Mult by float ensures that decimals are not stripped like dividing two integers can cause
|
14
|
+
return (num * 1.0) / den;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
})();
|
@@ -0,0 +1,104 @@
|
|
1
|
+
(function(){
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
// Config options
|
5
|
+
App.vue.config.restApi = {
|
6
|
+
'options': {},
|
7
|
+
'version': null
|
8
|
+
};
|
9
|
+
|
10
|
+
// Alias for old names
|
11
|
+
App.vue.config.rest_api = App.vue.config.restApi;
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
function url() {
|
16
|
+
if (App.vue.config.restApi.version === null) {
|
17
|
+
return '/api';
|
18
|
+
}else{
|
19
|
+
return '/api/v' + App.vue.config.restApi.version;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
function toPath(model) {
|
24
|
+
var pluralModel = App.vue.interfaces.string.methods._pluralize(model);
|
25
|
+
var modelPath = App.vue.interfaces.string.methods._dasherize(pluralModel);
|
26
|
+
return url() + '/' + modelPath;
|
27
|
+
}
|
28
|
+
|
29
|
+
function queryStringFromOptions(options_arg, defaultOptions_arg) {
|
30
|
+
var queries = [];
|
31
|
+
|
32
|
+
var options = options_arg || {};
|
33
|
+
var defaultOptions = defaultOptions_arg || {};
|
34
|
+
|
35
|
+
// Add options to default options (overwrites any default)
|
36
|
+
Object.keys(options).forEach(function(key) {
|
37
|
+
defaultOptions[key] = options[key];
|
38
|
+
});
|
39
|
+
|
40
|
+
Object.keys(defaultOptions).forEach(function(key) {
|
41
|
+
queries.push(App.vue.interfaces.string.methods._underscore(key) + "=" + defaultOptions[key]);
|
42
|
+
});
|
43
|
+
|
44
|
+
if (queries.length > 0) {
|
45
|
+
return '?'+queries.join('&');
|
46
|
+
} else {
|
47
|
+
return '';
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
App.vue.interfaces.restApi = {
|
52
|
+
methods: {
|
53
|
+
_sendRequest: function(url, method, data) {
|
54
|
+
return $.ajax({
|
55
|
+
url: url,
|
56
|
+
type: method || 'GET',
|
57
|
+
data: data || {}
|
58
|
+
});
|
59
|
+
},
|
60
|
+
_restfulGet: function(model, id, options) {
|
61
|
+
if (App.vue.interfaces.contentValidators.methods._valueIsEmpty(id)) {
|
62
|
+
return App.vue.interfaces.restApi.methods._restfulGetAll(model, options);
|
63
|
+
}else{
|
64
|
+
var url = toPath(model);
|
65
|
+
var path = url + '/' + id;
|
66
|
+
}
|
67
|
+
var requestUrl = path + queryStringFromOptions(options, App.vue.config.restApi.options);
|
68
|
+
return App.vue.interfaces.restApi.methods._sendRequest(requestUrl, 'GET');
|
69
|
+
},
|
70
|
+
_restfulGetAll: function(model, options) {
|
71
|
+
var requestUrl = toPath(model) + queryStringFromOptions(options, App.vue.config.restApi.options);
|
72
|
+
return App.vue.interfaces.restApi.methods._sendRequest(requestUrl, 'GET');
|
73
|
+
},
|
74
|
+
_restfulCreate: function(model, id, data, options) {
|
75
|
+
var url = toPath(model);
|
76
|
+
var path = url;
|
77
|
+
var requestUrl = path + queryStringFromOptions(options, App.vue.config.restApi.options);
|
78
|
+
return App.vue.interfaces.restApi.methods._sendRequest(requestUrl, 'POST', data);
|
79
|
+
},
|
80
|
+
_restfulUpdate: function(model, id, data, options) {
|
81
|
+
var url = toPath(model);
|
82
|
+
if (App.vue.interfaces.contentValidators.methods._valueIsEmpty(id)) {
|
83
|
+
var path = url + '/';
|
84
|
+
}else{
|
85
|
+
var path = url + '/' + id;
|
86
|
+
}
|
87
|
+
var requestUrl = path + queryStringFromOptions(options, App.vue.config.restApi.options);
|
88
|
+
return App.vue.interfaces.restApi.methods._sendRequest(requestUrl, 'PATCH', data);
|
89
|
+
},
|
90
|
+
_restfulDelete: function(model, id, options) {
|
91
|
+
var url = toPath(model);
|
92
|
+
if (App.vue.interfaces.contentValidators.methods._valueIsEmpty(id)) {
|
93
|
+
var path = url + '/';
|
94
|
+
}else{
|
95
|
+
var path = url + '/' + id;
|
96
|
+
}
|
97
|
+
var requestUrl = path + queryStringFromOptions(options, App.vue.config.restApi.options);
|
98
|
+
return App.vue.interfaces.restApi.methods._sendRequest(requestUrl, 'DELETE');
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
|
103
|
+
App.vue.interfaces.rest_api = App.vue.interfaces.restApi;
|
104
|
+
})();
|
@@ -0,0 +1,29 @@
|
|
1
|
+
(function(){
|
2
|
+
"use strict";
|
3
|
+
|
4
|
+
App.vue.interfaces.string = {
|
5
|
+
methods: {
|
6
|
+
// Replaces spaces and reverts capital letters to lowercase with underscore before them.
|
7
|
+
_underscore: function(string) {
|
8
|
+
return string.replace((/([a-z\d])([A-Z])/g), '$1_$2')
|
9
|
+
.toLowerCase()
|
10
|
+
.replace((/[ -]/g), '_');
|
11
|
+
},
|
12
|
+
// Changes the word into the plural form
|
13
|
+
_pluralize: pluralize,
|
14
|
+
// Replaces spaces and reverts capital letters to lowercase with dash before them.
|
15
|
+
_dasherize: function(string) {
|
16
|
+
return string.replace((/([a-z\d])([A-Z])/g), '$1_$2')
|
17
|
+
.toLowerCase()
|
18
|
+
.replace((/[ _]/g), '-');
|
19
|
+
},
|
20
|
+
// Changes a character after any break in the string to the capital version
|
21
|
+
_titleize: function(string) {
|
22
|
+
return string.replace((/([a-z\d])([A-Z])/g), '$1_$2').toLowerCase().replace(/(?:^|\s|-|_)\S/g, function(m) {
|
23
|
+
return m.toUpperCase();
|
24
|
+
}).replace((/[ _-]/g), ' ');
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
})();
|
@@ -1,13 +1,30 @@
|
|
1
1
|
//= require vue
|
2
|
-
//= require ./std
|
3
2
|
//= require_self
|
4
|
-
|
3
|
+
//= require ./std
|
5
4
|
|
6
5
|
App.vue = {
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
_info: 'Contains object references to all functionality that the UI offers as well as the reference to the root vue component',
|
7
|
+
interfaces: {
|
8
|
+
_info: 'Used for containing mixins and methods used for vue'
|
9
|
+
},
|
10
|
+
computedInterfaces: {
|
11
|
+
_info: 'Same as interfaces except accepts arguments to alter the mixin before applying it to the component'
|
12
|
+
},
|
13
|
+
globalComponents: {
|
14
|
+
_info: 'Used to define all global components'
|
15
|
+
},
|
16
|
+
components: {
|
17
|
+
_info: 'Used to hold references to various vue components you may use or are not defined globaly'
|
18
|
+
},
|
19
|
+
config: {
|
20
|
+
_info: 'Used to customize the functionality for some interfaces and components',
|
21
|
+
main: {
|
22
|
+
showInterfaces: true,
|
23
|
+
includedInterfaces: []
|
24
|
+
}
|
25
|
+
},
|
26
|
+
root: null,
|
27
|
+
extend: {
|
28
|
+
_info: 'Used to hold references to per page components and attach to the root component if you did not define one.'
|
29
|
+
}
|
10
30
|
}
|
11
|
-
|
12
|
-
console.warn("Loaded Vue Interfaces")
|
13
|
-
console.warn(App.vue.interfaces);
|