vgapp 0.3.2 → 0.3.3
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.
- package/CHANGELOG.md +6 -3
- package/app/modules/vgalert/js/!old/!vgalert.js +153 -0
- package/app/modules/vgalert/js/vgalert.js +61 -81
- package/app/modules/vgdatatable/js/vgdatatable.js +108 -0
- package/app/modules/vgdatatable/scss/_variables.scss +3 -0
- package/app/modules/vgdatatable/scss/vgdatatable.scss +47 -0
- package/app/modules/vgformsender/js/hideshowpass.js +1 -3
- package/app/modules/vgformsender/js/vgformsender.js +10 -0
- package/app/modules/vgmodal/js/vgmodal.js +9 -1
- package/app/modules/vgspy/js/vgspy.js +193 -0
- package/app/modules/vgspy/scss/_variables.scss +26 -0
- package/app/modules/vgspy/scss/vgtoast.css +133 -0
- package/app/modules/vgspy/scss/vgtoast.css.map +1 -0
- package/app/modules/vgspy/scss/vgtoast.scss +125 -0
- package/app/utils/js/components/animation.js +4 -1
- package/app/utils/js/components/templater.js +0 -4
- package/app/utils/scss/animate.scss +7 -0
- package/build/vgapp.css +14 -5107
- package/build/vgapp.css.map +1 -1
- package/build/vgapp.js +3 -5172
- package/build/vgapp.js.map +1 -1
- package/index.js +8 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# VEGAS-APP 0.3.3 (Май, 20, 2025)
|
|
2
|
+
## Новый модуль VGSpy
|
|
3
|
+
|
|
1
4
|
# VEGAS-APP 0.3.0 (Май, 09, 2025)
|
|
2
5
|
* Исправлены ошибки
|
|
3
6
|
## Модуль VGFORMSENDER
|
|
@@ -13,7 +16,7 @@
|
|
|
13
16
|
|
|
14
17
|
## Новый модуль VGToast
|
|
15
18
|
|
|
16
|
-
# VEGAS-APP 0.2.
|
|
19
|
+
# VEGAS-APP 0.2.3 (Апрель, 4, 2025)
|
|
17
20
|
## Модуль VGDROPDOWN
|
|
18
21
|
* Добавлен параметр overflow и backdrop
|
|
19
22
|
|
|
@@ -31,7 +34,7 @@
|
|
|
31
34
|
* Релиз
|
|
32
35
|
|
|
33
36
|
|
|
34
|
-
# VEGAS-APP 0.1.
|
|
37
|
+
# VEGAS-APP 0.1.7 (Март, 12, 2025)
|
|
35
38
|
## Модуль VGSelect
|
|
36
39
|
* Исправлены ошибки
|
|
37
40
|
|
|
@@ -49,7 +52,7 @@
|
|
|
49
52
|
* Событие после аякс запроса NAME_KEY.loaded
|
|
50
53
|
|
|
51
54
|
|
|
52
|
-
# VEGAS-APP 0.1.
|
|
55
|
+
# VEGAS-APP 0.1.4 (Март, 10, 2025)
|
|
53
56
|
* Перенесен плагин (<a href="https://github.com/vegas-dev/vegas-select">VGSelect</a>) в модуль VGSelect
|
|
54
57
|
* для модулей VGSidebar и VGModal добавлена возможность собирать параметры с кнопки вызова элемента
|
|
55
58
|
* в модуль VGSidebar добавлен класс vg-sidebar-open в тело документа
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import BaseModule from "../../base-module";
|
|
2
|
+
import EventHandler from "../../../utils/js/dom/event";
|
|
3
|
+
import {isDisabled, makeRandomString, mergeDeepObject} from "../../../utils/js/functions";
|
|
4
|
+
import Selectors from "../../../utils/js/dom/selectors";
|
|
5
|
+
import VGModal from "../../vgmodal/js/vgmodal";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Constants
|
|
9
|
+
*/
|
|
10
|
+
const NAME = 'alert';
|
|
11
|
+
const NAME_KEY = 'vg.alert';
|
|
12
|
+
const SELECTOR_DATA_TOGGLE= '[data-vg-toggle="alert"]';
|
|
13
|
+
const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
|
|
14
|
+
|
|
15
|
+
let IS_PROMISE = false;
|
|
16
|
+
|
|
17
|
+
class VGAlert extends BaseModule {
|
|
18
|
+
constructor(element, params = {}) {
|
|
19
|
+
super(element, params);
|
|
20
|
+
|
|
21
|
+
this._params = this._getParams(element, mergeDeepObject({
|
|
22
|
+
modal: {
|
|
23
|
+
centered: false,
|
|
24
|
+
backdrop: true,
|
|
25
|
+
overflow: true,
|
|
26
|
+
keyboard: true,
|
|
27
|
+
animation: {
|
|
28
|
+
enable: false,
|
|
29
|
+
in: 'animate__rollIn',
|
|
30
|
+
out: 'animate__rollOut',
|
|
31
|
+
delay: 0,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
toast: {
|
|
35
|
+
|
|
36
|
+
},
|
|
37
|
+
elements: {
|
|
38
|
+
button: ''
|
|
39
|
+
},
|
|
40
|
+
dialog: 'modal',
|
|
41
|
+
mode: 'alert',
|
|
42
|
+
}, params));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static get NAME() {
|
|
46
|
+
return NAME;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static get NAME_KEY() {
|
|
50
|
+
return NAME_KEY
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static run(message, element = null, params = {}, event = null) {
|
|
54
|
+
if (!element) {
|
|
55
|
+
let a = document.createElement('a');
|
|
56
|
+
a.classList.add('btn-alert-fake');
|
|
57
|
+
document.body.append(a);
|
|
58
|
+
element = a;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const instance = VGAlert.getOrCreateInstance(element, mergeDeepObject({
|
|
62
|
+
message: message
|
|
63
|
+
}, params));
|
|
64
|
+
|
|
65
|
+
return instance.promise(event);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
toggle(event) {
|
|
69
|
+
const promise = this.promise(event);
|
|
70
|
+
promise.then(resolve => {
|
|
71
|
+
IS_PROMISE = true;
|
|
72
|
+
this._element.click();
|
|
73
|
+
}).catch(reject => {
|
|
74
|
+
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
promise(event) {
|
|
79
|
+
let dialog = this._build();
|
|
80
|
+
dialog.toggle();
|
|
81
|
+
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
if (this._params.mode === 'alert') {
|
|
84
|
+
dialog._element.addEventListener('vg.'+ this._params.dialog +'.hidden', () => {
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
IS_PROMISE = false;
|
|
87
|
+
let fakeBtn = document.querySelector('.btn-alert-fake');
|
|
88
|
+
if (fakeBtn) fakeBtn.remove();
|
|
89
|
+
}, 100)
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
_build() {
|
|
96
|
+
if (this._params.dialog === 'modal') {
|
|
97
|
+
return this._buildModal();
|
|
98
|
+
}
|
|
99
|
+
if (this._params.dialog === 'toast') {
|
|
100
|
+
return this._buildToast();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
_buildModal() {
|
|
105
|
+
let id = 'vg-alert-' + makeRandomString(),
|
|
106
|
+
$modal = Selectors.find('.vg-alert-modal');
|
|
107
|
+
|
|
108
|
+
if ($modal) $modal.remove();
|
|
109
|
+
|
|
110
|
+
return VGModal.build(id, this._params.modal, (self) => {
|
|
111
|
+
let element = self._element;
|
|
112
|
+
element.classList.add('vg-alert-modal');
|
|
113
|
+
|
|
114
|
+
let $body = Selectors.find('.vg-modal-body', element);
|
|
115
|
+
if ($body) {
|
|
116
|
+
let html = '<div class="message">' + this._params.message + '</div>';
|
|
117
|
+
|
|
118
|
+
html += '<div class="buttons">';
|
|
119
|
+
if (this._params.elements.button) {
|
|
120
|
+
html += '<a href="#" data-vg-dismiss="modal" class="btn btn-primary">'+ this._params.elements.button +'</a>';
|
|
121
|
+
}
|
|
122
|
+
html += '</div>';
|
|
123
|
+
|
|
124
|
+
$body.innerHTML = html;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
_buildToast() {
|
|
130
|
+
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Data API implementation
|
|
136
|
+
*/
|
|
137
|
+
EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
|
|
138
|
+
if (!IS_PROMISE) {
|
|
139
|
+
let target = this;
|
|
140
|
+
event.preventDefault();
|
|
141
|
+
|
|
142
|
+
if (isDisabled(target)) return;
|
|
143
|
+
|
|
144
|
+
const data = VGAlert.getOrCreateInstance(target)
|
|
145
|
+
data.toggle(event);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
window.alert = (message) => {
|
|
150
|
+
VGAlert.run(message);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export default VGAlert;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import BaseModule from "../../base-module";
|
|
2
2
|
import EventHandler from "../../../utils/js/dom/event";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
3
|
+
import {isDisabled, makeRandomString, mergeDeepObject} from "../../../utils/js/functions";
|
|
4
|
+
import Selectors from "../../../utils/js/dom/selectors";
|
|
5
|
+
import VGModal from "../../vgmodal/js/vgmodal";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Constants
|
|
@@ -9,60 +10,36 @@ import {execute, mergeDeepObject} from "../../../utils/js/functions";
|
|
|
9
10
|
const NAME = 'alert';
|
|
10
11
|
const NAME_KEY = 'vg.alert';
|
|
11
12
|
const SELECTOR_DATA_TOGGLE= '[data-vg-toggle="alert"]';
|
|
12
|
-
|
|
13
|
-
const CLASS_NAME_SHOW = 'show';
|
|
14
|
-
const CLASS_NAME_OPEN = 'vg-alert-open';
|
|
15
|
-
|
|
16
|
-
const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
|
|
17
|
-
const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
|
|
18
|
-
const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
|
|
19
|
-
const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
|
|
20
|
-
const EVENT_KEY_LOADED = `${NAME_KEY}.loaded`;
|
|
21
|
-
const EVENT_KEY_CONFIRM = `${NAME_KEY}.confirm`;
|
|
22
|
-
const EVENT_KEY_CANCEL = `${NAME_KEY}.cancel`;
|
|
23
|
-
|
|
24
|
-
const EVENT_KEY_KEYDOWN_DISMISS = `keydown.dismiss.${NAME_KEY}`;
|
|
25
|
-
const EVENT_KEY_HIDE_PREVENTED = `hidePrevented.${NAME_KEY}`;
|
|
26
13
|
const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
|
|
27
14
|
|
|
15
|
+
let IS_PROMISE = false;
|
|
16
|
+
|
|
28
17
|
class VGAlert extends BaseModule {
|
|
29
18
|
constructor(element, params = {}) {
|
|
30
19
|
super(element, params);
|
|
31
20
|
|
|
32
21
|
this._params = this._getParams(element, mergeDeepObject({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
'classes': ['btn', 'btn-primary']
|
|
45
|
-
}
|
|
46
|
-
],
|
|
47
|
-
animation: {
|
|
48
|
-
enable: false,
|
|
49
|
-
in: 'animate__rollIn',
|
|
50
|
-
out: 'animate__rollOut',
|
|
51
|
-
delay: 800,
|
|
22
|
+
modal: {
|
|
23
|
+
centered: false,
|
|
24
|
+
backdrop: true,
|
|
25
|
+
overflow: true,
|
|
26
|
+
keyboard: true,
|
|
27
|
+
animation: {
|
|
28
|
+
enable: false,
|
|
29
|
+
in: 'animate__rollIn',
|
|
30
|
+
out: 'animate__rollOut',
|
|
31
|
+
delay: 0,
|
|
32
|
+
},
|
|
52
33
|
},
|
|
53
|
-
|
|
54
|
-
route: '',
|
|
55
|
-
target: '',
|
|
56
|
-
method: 'get',
|
|
57
|
-
loader: false,
|
|
58
|
-
}
|
|
59
|
-
}, params));
|
|
34
|
+
toast: {
|
|
60
35
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
36
|
+
},
|
|
37
|
+
elements: {
|
|
38
|
+
button: ''
|
|
39
|
+
},
|
|
40
|
+
dialog: 'modal',
|
|
41
|
+
mode: 'alert',
|
|
42
|
+
}, params));
|
|
66
43
|
}
|
|
67
44
|
|
|
68
45
|
static get NAME() {
|
|
@@ -73,57 +50,56 @@ class VGAlert extends BaseModule {
|
|
|
73
50
|
return NAME_KEY
|
|
74
51
|
}
|
|
75
52
|
|
|
76
|
-
static run(
|
|
77
|
-
return VGAlert.build(text, params, callback);
|
|
78
|
-
}
|
|
53
|
+
static run(... args) {
|
|
79
54
|
|
|
80
|
-
|
|
81
|
-
params = mergeDeepObject({
|
|
82
|
-
theme: 'default',
|
|
83
|
-
}, params);
|
|
55
|
+
}
|
|
84
56
|
|
|
85
|
-
|
|
57
|
+
toggle(event) {
|
|
86
58
|
|
|
87
|
-
let instance = VGAlert.getOrCreateInstance(target, params);
|
|
88
|
-
execute(callback, [instance]);
|
|
89
|
-
instance.show();
|
|
90
59
|
}
|
|
91
60
|
|
|
92
|
-
|
|
93
|
-
return !this._isShown() ? this.show(relatedTarget) : this.hide();
|
|
94
|
-
}
|
|
61
|
+
promise(event) {
|
|
95
62
|
|
|
96
|
-
|
|
63
|
+
}
|
|
97
64
|
|
|
65
|
+
_build() {
|
|
66
|
+
if (this._params.dialog === 'modal') {
|
|
67
|
+
return this._buildModal();
|
|
68
|
+
}
|
|
69
|
+
if (this._params.dialog === 'toast') {
|
|
70
|
+
return this._buildToast();
|
|
71
|
+
}
|
|
98
72
|
}
|
|
99
73
|
|
|
100
|
-
|
|
74
|
+
_buildModal() {
|
|
75
|
+
let id = 'vg-alert-' + makeRandomString(),
|
|
76
|
+
$modal = Selectors.find('.vg-alert-modal');
|
|
101
77
|
|
|
102
|
-
|
|
78
|
+
if ($modal) $modal.remove();
|
|
103
79
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
80
|
+
return VGModal.build(id, this._params.modal, (self) => {
|
|
81
|
+
let element = self._element;
|
|
82
|
+
element.classList.add('vg-alert-modal');
|
|
107
83
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
84
|
+
let $body = Selectors.find('.vg-modal-body', element);
|
|
85
|
+
if ($body) {
|
|
86
|
+
let html = '<div class="message">' + this._params.message + '</div>';
|
|
111
87
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
88
|
+
html += '<div class="buttons">';
|
|
89
|
+
if (this._params.elements.button) {
|
|
90
|
+
html += '<a href="#" data-vg-dismiss="modal" class="btn btn-primary">'+ this._params.elements.button +'</a>';
|
|
91
|
+
}
|
|
92
|
+
html += '</div>';
|
|
115
93
|
|
|
116
|
-
|
|
117
|
-
this.hide();
|
|
118
|
-
return;
|
|
94
|
+
$body.innerHTML = html;
|
|
119
95
|
}
|
|
120
|
-
|
|
121
|
-
EventHandler.trigger(this._element, EVENT_KEY_HIDE_PREVENTED)
|
|
122
96
|
});
|
|
123
97
|
}
|
|
124
|
-
}
|
|
125
98
|
|
|
126
|
-
|
|
99
|
+
_buildToast() {
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
}
|
|
127
103
|
|
|
128
104
|
/**
|
|
129
105
|
* Data API implementation
|
|
@@ -132,4 +108,8 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
|
|
|
132
108
|
|
|
133
109
|
});
|
|
134
110
|
|
|
135
|
-
|
|
111
|
+
window.alert = (message) => {
|
|
112
|
+
VGAlert.run(message);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export default VGAlert;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import BaseModule from "../../base-module";
|
|
2
|
+
import {isObject, mergeDeepObject, normalizeData} from "../../../utils/js/functions";
|
|
3
|
+
import EventHandler from "../../../utils/js/dom/event";
|
|
4
|
+
import Selectors from "../../../utils/js/dom/selectors";
|
|
5
|
+
|
|
6
|
+
const NAME = 'datatable';
|
|
7
|
+
const NAME_KEY = 'vg.datatable';
|
|
8
|
+
|
|
9
|
+
const CLASS_NAME_LOADER = 'vg-datatable-loader';
|
|
10
|
+
const CLASS_NAME_LOADER_AFTER = 'vg-datatable-loader--after';
|
|
11
|
+
|
|
12
|
+
const EVENT_KEY_LOADED = `${NAME_KEY}.loaded`;
|
|
13
|
+
|
|
14
|
+
class VGDataTable extends BaseModule {
|
|
15
|
+
constructor(element, params) {
|
|
16
|
+
super(element, params);
|
|
17
|
+
|
|
18
|
+
this._params = this._getParams(element, mergeDeepObject({
|
|
19
|
+
mode: 'table', // варианты: table, list, card
|
|
20
|
+
paginate: {
|
|
21
|
+
enabled: true,
|
|
22
|
+
stack: true,
|
|
23
|
+
items: 10
|
|
24
|
+
},
|
|
25
|
+
loader: true,
|
|
26
|
+
|
|
27
|
+
ajax: {
|
|
28
|
+
enabled: true,
|
|
29
|
+
route: '',
|
|
30
|
+
target: '',
|
|
31
|
+
method: 'get',
|
|
32
|
+
loader: false,
|
|
33
|
+
}
|
|
34
|
+
}, params));
|
|
35
|
+
|
|
36
|
+
this.paginateCount = this._params.paginate.items;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static get NAME() {
|
|
40
|
+
return NAME;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static get NAME_KEY() {
|
|
44
|
+
return NAME_KEY;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static init(el, params = {}) {
|
|
48
|
+
let instance = VGDataTable.getOrCreateInstance(el, params);
|
|
49
|
+
instance.build();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
build() {
|
|
53
|
+
if (this._params.loader) {
|
|
54
|
+
this._element.classList.add(CLASS_NAME_LOADER_AFTER);
|
|
55
|
+
this._element.parentElement.style.position = 'relative';
|
|
56
|
+
this._element.insertAdjacentHTML('beforebegin', '<div class="'+ CLASS_NAME_LOADER +'"><div class="vg-loader"></div></div>')
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (this._params.ajax.enabled) {
|
|
60
|
+
this._route((status, data) => {
|
|
61
|
+
setTimeout(() => {
|
|
62
|
+
EventHandler.trigger(this._element, EVENT_KEY_LOADED, {stats: status, data: data});
|
|
63
|
+
|
|
64
|
+
if (this._params.loader) {
|
|
65
|
+
this._element.classList.remove(CLASS_NAME_LOADER_AFTER);
|
|
66
|
+
Selectors.find('.' + CLASS_NAME_LOADER).remove();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
this._setBuildMode(normalizeData(data.response));
|
|
70
|
+
}, 1000);
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
// TODO берем данные которые уже есть странице и загружены
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
_setBuildMode(data) {
|
|
78
|
+
if (!data) return;
|
|
79
|
+
|
|
80
|
+
switch (this._params.mode) {
|
|
81
|
+
case 'table': this._modeBuildTable(data); break;
|
|
82
|
+
case 'list': this._modeBuildList(data); break;
|
|
83
|
+
case 'card': this._modeBuildCard(data); break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
_modeBuildTable(data) {
|
|
88
|
+
let target = Selectors.find('tbody', this._element);
|
|
89
|
+
|
|
90
|
+
if (isObject(data)) {
|
|
91
|
+
for (const datum of data) {
|
|
92
|
+
console.log(datum)
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
target.innerHTML = data;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
_modeBuildList(data) {
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
_modeBuildCard(data) {
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export default VGDataTable;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*--------------------------------------------------------------------------
|
|
3
|
+
* Модуль: VGDataTable
|
|
4
|
+
* Автор: Vegas DEV
|
|
5
|
+
* Лицензия: смотри LICENSE.md
|
|
6
|
+
*--------------------------------------------------------------------------
|
|
7
|
+
**/
|
|
8
|
+
|
|
9
|
+
@import "../../../utils/scss/functions";
|
|
10
|
+
@import "../../../utils/scss/mixin";
|
|
11
|
+
@import "../../../utils/scss/variables";
|
|
12
|
+
@import "variables";
|
|
13
|
+
|
|
14
|
+
.vg-datatable {
|
|
15
|
+
@include mix-vars('datatable', $datatable-map);
|
|
16
|
+
|
|
17
|
+
&-loader {
|
|
18
|
+
position: absolute;
|
|
19
|
+
width: 100%;
|
|
20
|
+
height: 100%;
|
|
21
|
+
min-height: 300px;
|
|
22
|
+
left: 0;
|
|
23
|
+
top: 0;
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
z-index: 100;
|
|
28
|
+
|
|
29
|
+
&--after {
|
|
30
|
+
position: relative;
|
|
31
|
+
|
|
32
|
+
&:after {
|
|
33
|
+
content: '';
|
|
34
|
+
width: 100%;
|
|
35
|
+
height: 100%;
|
|
36
|
+
min-height: 300px;
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
background-color: var(--vg-datatable-loader-bg);
|
|
41
|
+
position: absolute;
|
|
42
|
+
left: 0;
|
|
43
|
+
top: 0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -20,9 +20,7 @@ class VGHideShowPass extends BaseModule{
|
|
|
20
20
|
constructor(el, params = {}) {
|
|
21
21
|
super(el, params);
|
|
22
22
|
|
|
23
|
-
this._params = this._getParams(el, mergeDeepObject({
|
|
24
|
-
|
|
25
|
-
}, params))
|
|
23
|
+
this._params = this._getParams(el, mergeDeepObject({}, params));
|
|
26
24
|
}
|
|
27
25
|
|
|
28
26
|
static get NAME() {
|
|
@@ -36,6 +36,12 @@ class VGFormSender extends BaseModule {
|
|
|
36
36
|
super(element, params);
|
|
37
37
|
|
|
38
38
|
this._params = this._getParams(element, mergeDeepObject({
|
|
39
|
+
response: {
|
|
40
|
+
enabled: false,
|
|
41
|
+
errors: false,
|
|
42
|
+
title: '',
|
|
43
|
+
message: '',
|
|
44
|
+
},
|
|
39
45
|
redirect: {
|
|
40
46
|
error: '',
|
|
41
47
|
success: ''
|
|
@@ -125,6 +131,10 @@ class VGFormSender extends BaseModule {
|
|
|
125
131
|
_this._route(function (status, data) {
|
|
126
132
|
_this._element.classList.remove('was-validated');
|
|
127
133
|
|
|
134
|
+
if (_this._params.response.enabled) {
|
|
135
|
+
data.response = _this._params.response;
|
|
136
|
+
}
|
|
137
|
+
|
|
128
138
|
if (_this._params.alert.enabled) {
|
|
129
139
|
if (typeof status === 'string' && status === 'error') {
|
|
130
140
|
if (_this._params.redirect.error) {
|
|
@@ -50,6 +50,7 @@ class VGModal extends BaseModule {
|
|
|
50
50
|
keyboard: true,
|
|
51
51
|
fields: [],
|
|
52
52
|
hash: false,
|
|
53
|
+
centered: false,
|
|
53
54
|
ajax: {
|
|
54
55
|
route: '',
|
|
55
56
|
target: '',
|
|
@@ -60,7 +61,8 @@ class VGModal extends BaseModule {
|
|
|
60
61
|
enable: false,
|
|
61
62
|
in: 'animate__rollIn',
|
|
62
63
|
out: 'animate__rollOut',
|
|
63
|
-
delay:
|
|
64
|
+
delay: 100,
|
|
65
|
+
duration: 800,
|
|
64
66
|
},
|
|
65
67
|
classes: {
|
|
66
68
|
general: 'vg-modal',
|
|
@@ -106,6 +108,10 @@ class VGModal extends BaseModule {
|
|
|
106
108
|
_element.id = id;let dialog = document.createElement('div');
|
|
107
109
|
dialog.classList.add('vg-modal-dialog');
|
|
108
110
|
|
|
111
|
+
if ('centered' in params && params.centered) {
|
|
112
|
+
dialog.classList.add('vg-modal-dialog-centered');
|
|
113
|
+
}
|
|
114
|
+
|
|
109
115
|
let content = document.createElement('div');
|
|
110
116
|
content.classList.add('vg-modal-content');
|
|
111
117
|
|
|
@@ -130,6 +136,8 @@ class VGModal extends BaseModule {
|
|
|
130
136
|
const modal = VGModal.getOrCreateInstance(_element, params);
|
|
131
137
|
|
|
132
138
|
execute(callback, [modal]);
|
|
139
|
+
|
|
140
|
+
return modal;
|
|
133
141
|
}
|
|
134
142
|
|
|
135
143
|
toggle(relatedTarget) {
|