vgapp 0.2.3 → 0.2.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.
- package/CHANGELOG.md +10 -0
- package/app/modules/vgalert/js/vgalert.js +135 -0
- package/app/modules/vgalert/scss/_variables.scss +32 -0
- package/app/modules/vgalert/scss/vgalert.css +83 -0
- package/app/modules/vgalert/scss/vgalert.css.map +1 -0
- package/app/modules/vgalert/scss/vgalert.scss +79 -0
- package/app/modules/vgdropdown/js/vgdropdown.js +2 -1
- package/app/modules/vgmodal/js/vgmodal.js +32 -4
- package/app/modules/vgrollup/js/vgrollup.js +207 -16
- package/app/modules/vgrollup/scss/vgrollup.css +3 -0
- package/app/modules/vgrollup/scss/vgrollup.css.map +1 -1
- package/app/modules/vgrollup/scss/vgrollup.scss +6 -0
- package/app/modules/vgsidebar/js/vgsidebar.js +32 -2
- package/app/modules/vgtoast/js/vgtoast.js +378 -0
- package/app/modules/vgtoast/scss/_variables.scss +26 -0
- package/app/modules/vgtoast/scss/vgtoast.css +133 -0
- package/app/modules/vgtoast/scss/vgtoast.css.map +1 -0
- package/app/modules/vgtoast/scss/vgtoast.scss +125 -0
- package/app/utils/js/dom/event.js +1 -0
- package/app/utils/scss/default.css +0 -77
- package/app/utils/scss/default.css.map +1 -1
- package/app/utils/scss/default.scss +0 -70
- package/app/utils/scss/functions.scss +19 -0
- package/app/utils/scss/variables.scss +58 -35
- package/build/vgapp.css +13 -4946
- package/build/vgapp.css.map +1 -1
- package/build/vgapp.js +3 -4277
- package/build/vgapp.js.map +1 -1
- package/index.js +9 -1
- package/package.json +1 -1
- package/app/modules/vgnotify/js/vgnotify.js +0 -0
- package/app/modules/vgnotify/scss/vgnotify.css +0 -3
- package/app/modules/vgnotify/scss/vgnotify.css.map +0 -1
- package/app/modules/vgnotify/scss/vgnotify.scss +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import BaseModule from "../../base-module";
|
|
2
|
-
import {execute, isDisabled,
|
|
2
|
+
import {execute, isDisabled, mergeDeepObject} from "../../../utils/js/functions";
|
|
3
3
|
import EventHandler from "../../../utils/js/dom/event";
|
|
4
4
|
import Selectors from "../../../utils/js/dom/selectors";
|
|
5
|
-
import {Manipulator} from "../../../utils/js/dom/manipulator";
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* Constants
|
|
@@ -10,13 +9,11 @@ import {Manipulator} from "../../../utils/js/dom/manipulator";
|
|
|
10
9
|
const NAME = 'rollup';
|
|
11
10
|
const NAME_KEY = 'vg.rollup';
|
|
12
11
|
const CLASS_NAME_SHOW = 'show';
|
|
13
|
-
const CLASS_NAME_HIDE = '
|
|
12
|
+
const CLASS_NAME_HIDE = 'vg-rollup-display--none';
|
|
14
13
|
const SELECTOR_DATA_TOGGLE= '[data-vg-toggle="rollup"]'
|
|
15
14
|
|
|
16
15
|
const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
|
|
17
|
-
const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
|
|
18
16
|
const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
|
|
19
|
-
const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
|
|
20
17
|
|
|
21
18
|
const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
|
|
22
19
|
|
|
@@ -25,10 +22,44 @@ class VGRollup extends BaseModule {
|
|
|
25
22
|
super(element, params);
|
|
26
23
|
|
|
27
24
|
this._params = this._getParams(element, mergeDeepObject({
|
|
28
|
-
|
|
25
|
+
content: 'text',
|
|
26
|
+
offset: 0,
|
|
27
|
+
cnt: 0,
|
|
28
|
+
fade: true,
|
|
29
|
+
transition: false,
|
|
30
|
+
number: false,
|
|
31
|
+
height: 0,
|
|
32
|
+
ellipsis: {
|
|
33
|
+
line: null
|
|
34
|
+
},
|
|
35
|
+
more: ' еще ',
|
|
36
|
+
button: {
|
|
37
|
+
enable: true,
|
|
38
|
+
more: "Показать",
|
|
39
|
+
less: "Свернуть"
|
|
40
|
+
}
|
|
29
41
|
}, params));
|
|
30
42
|
|
|
43
|
+
this.classes = {
|
|
44
|
+
container: 'vg-rollup',
|
|
45
|
+
hidden: "vg-rollup-content--hidden",
|
|
46
|
+
fade: "vg-rollup-content--fade",
|
|
47
|
+
ellipsis: "vg-rollup-content--ellipsis",
|
|
48
|
+
button: "vg-rollup-content--button",
|
|
49
|
+
transition: "vg-rollup-content--transition"
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
this.total = 0;
|
|
53
|
+
this.count = 0;
|
|
54
|
+
this.offset = 0;
|
|
55
|
+
this.isOffset = false;
|
|
56
|
+
|
|
57
|
+
if (this._params.offset > 0) {
|
|
58
|
+
this.offset = (this._params.offset + this._params.cnt) || 0;
|
|
59
|
+
this.isOffset = true;
|
|
60
|
+
}
|
|
31
61
|
|
|
62
|
+
this.build();
|
|
32
63
|
}
|
|
33
64
|
|
|
34
65
|
static get NAME() {
|
|
@@ -39,19 +70,180 @@ class VGRollup extends BaseModule {
|
|
|
39
70
|
return NAME_KEY
|
|
40
71
|
}
|
|
41
72
|
|
|
42
|
-
|
|
73
|
+
static toggle(target, relatedTarget) {
|
|
74
|
+
const instance = VGRollup.getOrCreateInstance(target);
|
|
75
|
+
let isShown = instance.isShow();
|
|
76
|
+
|
|
77
|
+
if (!isShown) {
|
|
78
|
+
instance._element.classList.add(CLASS_NAME_SHOW);
|
|
79
|
+
relatedTarget.innerHTML = instance._params.button.less;
|
|
80
|
+
|
|
81
|
+
if (instance.offset > 0) {
|
|
82
|
+
if (instance.isOffset) {
|
|
83
|
+
relatedTarget.innerHTML = instance._params.button.more;
|
|
84
|
+
} else {
|
|
85
|
+
relatedTarget.innerHTML = instance._params.button.less;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
instance.switch(instance._element, false);
|
|
90
|
+
EventHandler.trigger(instance._element, EVENT_KEY_SHOW, { relatedTarget });
|
|
91
|
+
} else {
|
|
92
|
+
let textShowNum = '',
|
|
93
|
+
isShowNum = instance._params.number;
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
if (isShowNum) {
|
|
97
|
+
let sum = (instance.total) - (instance.count);
|
|
98
|
+
|
|
99
|
+
if (sum > 0) {
|
|
100
|
+
textShowNum = instance._params.more + sum;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
43
103
|
|
|
104
|
+
relatedTarget.setAttribute("aria-expanded", false);
|
|
105
|
+
instance._element.classList.remove(CLASS_NAME_SHOW);
|
|
106
|
+
relatedTarget.innerHTML = instance._params.button.more + textShowNum;
|
|
107
|
+
instance.switch(instance._element, true);
|
|
108
|
+
|
|
109
|
+
EventHandler.trigger(instance._element, EVENT_KEY_HIDE, { relatedTarget });
|
|
110
|
+
}
|
|
44
111
|
}
|
|
45
112
|
|
|
46
|
-
|
|
47
|
-
|
|
113
|
+
build(el = null, isButtonAppend = true) {
|
|
114
|
+
let _this = this,
|
|
115
|
+
element = el || _this._element,
|
|
116
|
+
self_height = element.clientHeight, set_height = _this._params.height || (self_height / 2);
|
|
117
|
+
|
|
118
|
+
element.classList.add(_this.classes.container)
|
|
119
|
+
|
|
120
|
+
let isFade = _this._params.fade,
|
|
121
|
+
isTransition = _this._params.transition,
|
|
122
|
+
isEllipsis = _this._params.ellipsis.line !== null,
|
|
123
|
+
isButton = _this._params.button.enable,
|
|
124
|
+
isShowNum = _this._params.number;
|
|
125
|
+
|
|
126
|
+
if (!isButtonAppend) _this.switch(element);
|
|
127
|
+
|
|
128
|
+
if (self_height > set_height && _this._params.content === 'text') {
|
|
129
|
+
element.classList.add(_this.classes.hidden);
|
|
130
|
+
element.style.height = set_height + "px";
|
|
131
|
+
|
|
132
|
+
ellipsis();
|
|
133
|
+
transition();
|
|
134
|
+
fade();
|
|
135
|
+
button();
|
|
136
|
+
} else if (_this._params.content === 'elements') {
|
|
137
|
+
let elementClass = _this._params.elements || 'item',
|
|
138
|
+
items = element.querySelectorAll('.' + elementClass),
|
|
139
|
+
cnt = _this._params.cnt || 5,
|
|
140
|
+
i = 1;
|
|
141
|
+
|
|
142
|
+
_this.total = items.length;
|
|
143
|
+
_this.count = cnt;
|
|
144
|
+
|
|
145
|
+
for (const item of items) {
|
|
146
|
+
if (i > cnt) {
|
|
147
|
+
item.classList.add(CLASS_NAME_HIDE)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
i++;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (isButton === true) isButton = (i - 1) > cnt;
|
|
154
|
+
|
|
155
|
+
ellipsis();
|
|
156
|
+
transition();
|
|
157
|
+
fade();
|
|
158
|
+
button();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function ellipsis() {
|
|
162
|
+
if (isEllipsis) {
|
|
163
|
+
let line = _this._params.ellipsis.line;
|
|
164
|
+
isFade = false;
|
|
165
|
+
|
|
166
|
+
if (line) {
|
|
167
|
+
element.classList.add(_this.classes.ellipsis);
|
|
168
|
+
element.style.webkitLineClamp = line;
|
|
169
|
+
} else {
|
|
170
|
+
console.log("Переменная [data-line] или параметр[line] не должны быть пустыми");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// TODO no work
|
|
176
|
+
function transition() {
|
|
177
|
+
if (isTransition) {
|
|
178
|
+
element.classList.add(_this.classes.transition);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function fade() {
|
|
183
|
+
if (isFade) {
|
|
184
|
+
element.classList.add(_this.classes.fade);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function button() {
|
|
189
|
+
if (isButtonAppend) {
|
|
190
|
+
element.setAttribute("id", element.id);
|
|
191
|
+
|
|
192
|
+
if (isButton) {
|
|
193
|
+
let textShowNum = '';
|
|
194
|
+
|
|
195
|
+
if (isShowNum) {
|
|
196
|
+
let sum = (_this.total) - (_this.count);
|
|
197
|
+
|
|
198
|
+
if (sum > 0) {
|
|
199
|
+
textShowNum = _this._params.more + sum;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
let btnTextMore = _this._params.button.more;
|
|
204
|
+
element.insertAdjacentHTML("afterend", "<div class=\"" + _this.classes.button + "\"><a href=\"#\" aria-expanded=\"false\" data-vg-toggle=\"rollup\" data-vg-target=\"#" + element.id + "\">" + btnTextMore + textShowNum + "</a></div>");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
48
208
|
}
|
|
49
209
|
|
|
50
|
-
|
|
210
|
+
switch(el, switcher = false) {
|
|
211
|
+
const _this = this;
|
|
212
|
+
|
|
213
|
+
if (switcher) {
|
|
214
|
+
this.build(el, false);
|
|
215
|
+
} else {
|
|
216
|
+
el.classList.remove(this.classes.hidden);
|
|
217
|
+
el.classList.remove(this.classes.ellipsis);
|
|
218
|
+
el.classList.remove(this.classes.fade);
|
|
219
|
+
|
|
220
|
+
el.removeAttribute("style");
|
|
51
221
|
|
|
222
|
+
if (_this._params.content === 'elements') {
|
|
223
|
+
let className = _this._params.elements;
|
|
224
|
+
|
|
225
|
+
let items = [...el.querySelectorAll('.' + className)];
|
|
226
|
+
if (items.length) {
|
|
227
|
+
if (_this.offset > 0) {
|
|
228
|
+
let className = _this._params.elements,
|
|
229
|
+
items = [...el.querySelectorAll('.' + className)];
|
|
230
|
+
|
|
231
|
+
items.slice(_this.count, _this.offset).forEach(item => item.classList.remove(CLASS_NAME_HIDE));
|
|
232
|
+
_this.offset = _this.offset + _this.settings.offset;
|
|
233
|
+
|
|
234
|
+
if (_this.offset > items.length) {
|
|
235
|
+
_this.isOffset = false;
|
|
236
|
+
_this.offset = 0;
|
|
237
|
+
}
|
|
238
|
+
} else {
|
|
239
|
+
items.forEach((item) => item.classList.remove(CLASS_NAME_HIDE))
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
52
244
|
}
|
|
53
245
|
|
|
54
|
-
|
|
246
|
+
isShow() {
|
|
55
247
|
return this._element.classList.contains(CLASS_NAME_SHOW);
|
|
56
248
|
}
|
|
57
249
|
|
|
@@ -59,10 +251,11 @@ class VGRollup extends BaseModule {
|
|
|
59
251
|
* Инициализация
|
|
60
252
|
* @param element
|
|
61
253
|
* @param params
|
|
254
|
+
* @param callback
|
|
62
255
|
*/
|
|
63
|
-
static init(element, params = {}) {
|
|
256
|
+
static init(element, params = {}, callback) {
|
|
64
257
|
const instance = VGRollup.getOrCreateInstance(element, params);
|
|
65
|
-
instance
|
|
258
|
+
execute(callback, [instance]);
|
|
66
259
|
}
|
|
67
260
|
}
|
|
68
261
|
|
|
@@ -82,9 +275,7 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
|
|
|
82
275
|
}
|
|
83
276
|
|
|
84
277
|
this.setAttribute('aria-expanded', true);
|
|
85
|
-
|
|
86
|
-
const data = VGRollup.getOrCreateInstance(target)
|
|
87
|
-
data.toggle(this);
|
|
278
|
+
VGRollup.toggle(target, this);
|
|
88
279
|
});
|
|
89
280
|
|
|
90
281
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["vgrollup.scss","../../../utils/scss/mixin.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;ECNG;EAAA;EAAA;EDQF;;AAEA;ECVE;EDYD;;AAIA;EACC;;AAGD;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;EACA;EACA;EACA","file":"vgrollup.css"}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["vgrollup.scss","../../../utils/scss/mixin.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA;ECNG;EAAA;EAAA;EDQF;;AAEA;ECVE;EDYD;;AAIA;EACC;;AAGD;EACC;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACC;EACA;EACA;EACA;;AAKD;EACC","file":"vgrollup.css"}
|
|
@@ -25,6 +25,8 @@ const EVENT_KEY_LOADED = `${NAME_KEY}.loaded`;
|
|
|
25
25
|
const EVENT_KEY_KEYDOWN_DISMISS = `keydown.dismiss.${NAME_KEY}`;
|
|
26
26
|
const EVENT_KEY_HIDE_PREVENTED = `hidePrevented.${NAME_KEY}`;
|
|
27
27
|
const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
|
|
28
|
+
const EVENT_KEY_POPSTATE_DATA_API = `popstate.${NAME_KEY}.data.api`;
|
|
29
|
+
const EVENT_KEY_DOM_LOADED_DATA_API = `DOMContentLoaded.${NAME_KEY}.data.api`;
|
|
28
30
|
|
|
29
31
|
class VGSidebar extends BaseModule {
|
|
30
32
|
constructor(element, params = {}) {
|
|
@@ -34,6 +36,7 @@ class VGSidebar extends BaseModule {
|
|
|
34
36
|
backdrop: true,
|
|
35
37
|
overflow: true,
|
|
36
38
|
keyboard: true,
|
|
39
|
+
hash: false,
|
|
37
40
|
animation: {
|
|
38
41
|
enable: false,
|
|
39
42
|
in: 'animate__rollIn',
|
|
@@ -71,7 +74,8 @@ class VGSidebar extends BaseModule {
|
|
|
71
74
|
const _this = this;
|
|
72
75
|
if (isDisabled(_this._element)) return;
|
|
73
76
|
|
|
74
|
-
_this._params = _this._getParams(relatedTarget, _this._params);
|
|
77
|
+
if (relatedTarget) _this._params = _this._getParams(relatedTarget, _this._params);
|
|
78
|
+
|
|
75
79
|
_this._route(function (status, data) {
|
|
76
80
|
EventHandler.trigger(_this._element, EVENT_KEY_LOADED, {stats: status, data: data});
|
|
77
81
|
});
|
|
@@ -87,6 +91,14 @@ class VGSidebar extends BaseModule {
|
|
|
87
91
|
Overflow.append();
|
|
88
92
|
}
|
|
89
93
|
|
|
94
|
+
if (this._params.hash) {
|
|
95
|
+
window.history.pushState(null, "vg-sidebar-open", "#" + this._element.id);
|
|
96
|
+
|
|
97
|
+
EventHandler.on(window, EVENT_KEY_POPSTATE_DATA_API, () => {
|
|
98
|
+
this.hide();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
90
102
|
_this._element.classList.add(CLASS_NAME_SHOW);
|
|
91
103
|
document.body.classList.add(CLASS_NAME_OPEN);
|
|
92
104
|
|
|
@@ -124,6 +136,10 @@ class VGSidebar extends BaseModule {
|
|
|
124
136
|
Overflow.destroy();
|
|
125
137
|
}
|
|
126
138
|
|
|
139
|
+
if (_this._params.hash) {
|
|
140
|
+
history.pushState("", document.title, window.location.pathname + window.location.search);
|
|
141
|
+
}
|
|
142
|
+
|
|
127
143
|
document.body.classList.remove(CLASS_NAME_OPEN);
|
|
128
144
|
EventHandler.trigger(this._element, EVENT_KEY_HIDDEN);
|
|
129
145
|
}
|
|
@@ -171,7 +187,6 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
|
|
|
171
187
|
|
|
172
188
|
this.setAttribute('aria-expanded', true);
|
|
173
189
|
EventHandler.one(target, EVENT_KEY_HIDDEN, () => {
|
|
174
|
-
//if (isVisible(this)) this.focus();
|
|
175
190
|
this.setAttribute('aria-expanded', false);
|
|
176
191
|
})
|
|
177
192
|
|
|
@@ -184,4 +199,19 @@ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, functi
|
|
|
184
199
|
data.toggle(this);
|
|
185
200
|
});
|
|
186
201
|
|
|
202
|
+
EventHandler.on(document, EVENT_KEY_DOM_LOADED_DATA_API, function () {
|
|
203
|
+
let targetHash = window.location.hash.slice(1);
|
|
204
|
+
if (targetHash) {
|
|
205
|
+
let target = Selectors.find('#' + targetHash);
|
|
206
|
+
if (target && target.classList.contains('vg-sidebar')) {
|
|
207
|
+
if (isDisabled(target)) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const data = VGSidebar.getOrCreateInstance(target)
|
|
212
|
+
data.toggle();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
})
|
|
216
|
+
|
|
187
217
|
export default VGSidebar;
|