vgapp 1.1.9 → 1.2.1
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 +30 -11
- package/app/modules/vgformsender/js/vgformsender.js +16 -13
- package/app/modules/vgtoast/js/vgtoast.js +56 -34
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
|
-
# VEGAS-APP 1.
|
|
2
|
-
## Новые фичи
|
|
3
|
-
* В
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
# VEGAS-APP 1.2.0 (Июнь, 16, 2026)
|
|
2
|
+
## Новые фичи
|
|
3
|
+
* В VGToast добавлен параметр `type` со встроенными SVG-иконками для типов `success`, `error`, `warning`, `info`.
|
|
4
|
+
* В VGFormSender добавлен новый режим алертов `alert.type = 'toast'` с интеграцией через `VGToast`.
|
|
5
|
+
|
|
6
|
+
## Изменения
|
|
7
|
+
* В VGToast добавлена мапа типов уведомлений на набор иконок `getSVG`, включая `error -> danger`.
|
|
8
|
+
* Вставка SVG-иконок в VGToast переведена на безопасную схему через `Sanitize.toSafeHtmlString()` и DOM fragment вместо прямого `innerHTML`.
|
|
9
|
+
* В VGFormSender выделена общая подготовка содержимого алертов в `_prepareAlertResponse()`, чтобы единообразно собирать `title/message` для modal, collapse и toast.
|
|
10
|
+
* В VGFormSender добавлена сборка toast-параметров из `alert.*` и `alert.toast`, включая проброс `theme`, `type`, `placement`, `autohide`, `delay`, `drag`, `resize`, `stack`, `animation`, `ajax`.
|
|
11
|
+
* В VGRollup исправлена инициализация локализованных текстов: язык и подписи кнопок теперь подставляются до слияния параметров, с учётом `data-lang` и `params.lang`.
|
|
12
|
+
* Обновлена версия пакета в `package.json`: `1.1.7` -> `1.2.0`.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# VEGAS-APP 1.1.7 (Апрель, 13, 2026)
|
|
17
|
+
## Новые фичи
|
|
18
|
+
* В VGFilePreview добавлена поддержка атрибута `data-name` для явной установки отображаемого имени файла (в приоритете над `data-vg-filepreview-display-name`).
|
|
19
|
+
|
|
20
|
+
## Изменения
|
|
21
|
+
* Обновлена версия пакета в `package.json`: `1.1.6` -> `1.1.7`.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# VEGAS-APP 1.1.6 (Апрель, 10, 2026)
|
|
26
|
+
## Новые фичи
|
|
12
27
|
* **VGToast**: добавлены встроенные модули VGToastDrag и VGToastResize с поддержкой параметров drag/resize (enable, threshold, edgeSize, minWidth/minHeight, debug).
|
|
13
28
|
|
|
14
29
|
## Изменения
|
|
@@ -298,3 +313,7 @@
|
|
|
298
313
|
---
|
|
299
314
|
|
|
300
315
|
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
2
|
* VGFormSender Module
|
|
3
3
|
*
|
|
4
4
|
* Этот модуль отвечает за отправку форм с поддержкой AJAX, валидации, отображения уведомлений
|
|
@@ -130,13 +130,14 @@ class VGFormSender extends BaseModule {
|
|
|
130
130
|
classes: ['vg-form-sender--hide-show-pass'],
|
|
131
131
|
insert: 'afterend'
|
|
132
132
|
},
|
|
133
|
-
alert: {
|
|
134
|
-
enabled: true,
|
|
135
|
-
type: 'modal',
|
|
136
|
-
errors: true,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
133
|
+
alert: {
|
|
134
|
+
enabled: true,
|
|
135
|
+
type: 'modal',
|
|
136
|
+
errors: true,
|
|
137
|
+
title: true,
|
|
138
|
+
delay: 0,
|
|
139
|
+
toast: {}
|
|
140
|
+
},
|
|
140
141
|
ajax: {
|
|
141
142
|
route: '',
|
|
142
143
|
target: '',
|
|
@@ -634,6 +635,7 @@ class VGFormSender extends BaseModule {
|
|
|
634
635
|
*/
|
|
635
636
|
_getToastParams(status) {
|
|
636
637
|
const theme = status === 'error' ? 'danger' : status;
|
|
638
|
+
const toastType = status === 'danger' ? 'error' : status;
|
|
637
639
|
const delay = this._params.alert.delay > 0 ? this._params.alert.delay : 3000;
|
|
638
640
|
const flatToastParams = {};
|
|
639
641
|
const allowedKeys = [
|
|
@@ -645,7 +647,6 @@ class VGFormSender extends BaseModule {
|
|
|
645
647
|
'enableButtonClose',
|
|
646
648
|
'keyboard',
|
|
647
649
|
'theme',
|
|
648
|
-
'type',
|
|
649
650
|
'drag',
|
|
650
651
|
'resize',
|
|
651
652
|
'stack',
|
|
@@ -661,6 +662,7 @@ class VGFormSender extends BaseModule {
|
|
|
661
662
|
|
|
662
663
|
return mergeDeepObject({
|
|
663
664
|
theme: theme || 'dark',
|
|
665
|
+
type: toastType || null,
|
|
664
666
|
enableButtonClose: true,
|
|
665
667
|
autohide: this._params.alert.delay > 0,
|
|
666
668
|
delay: delay
|
|
@@ -771,10 +773,10 @@ class VGFormSender extends BaseModule {
|
|
|
771
773
|
}, response.message);
|
|
772
774
|
}
|
|
773
775
|
|
|
774
|
-
return {
|
|
775
|
-
title: response.title || '',
|
|
776
|
-
message: message
|
|
777
|
-
};
|
|
776
|
+
return {
|
|
777
|
+
title: this._params.alert.title ? response.title || '' : '',
|
|
778
|
+
message: message
|
|
779
|
+
};
|
|
778
780
|
}
|
|
779
781
|
}
|
|
780
782
|
|
|
@@ -873,3 +875,4 @@ EventHandler.on(document, EVENT_SUBMIT_DATA_API, function (event) {
|
|
|
873
875
|
})
|
|
874
876
|
|
|
875
877
|
export default VGFormSender;
|
|
878
|
+
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import BaseModule from "../../base-module";
|
|
2
|
-
import EventHandler from "../../../utils/js/dom/event";
|
|
3
|
-
import {dismissTrigger} from "../../module-fn";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
2
|
+
import EventHandler from "../../../utils/js/dom/event";
|
|
3
|
+
import {dismissTrigger, getSVG} from "../../module-fn";
|
|
4
|
+
import Sanitize from "../../../utils/js/components/sanitize";
|
|
5
|
+
import {execute, isDisabled, makeRandomString, mergeDeepObject} from "../../../utils/js/functions";
|
|
6
|
+
import Selectors from "../../../utils/js/dom/selectors";
|
|
7
|
+
import VGToastDrag from "./vgtoast.drag";
|
|
8
|
+
import VGToastResize from "./vgtoast.resize";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* @constant {string} NAME - Имя модуля.
|
|
@@ -54,9 +55,15 @@ const EVENT_KEY_LOADED = `${NAME_KEY}.loaded`;
|
|
|
54
55
|
const EVENT_KEY_KEYDOWN_DISMISS = `keydown.dismiss.${NAME_KEY}`;
|
|
55
56
|
const EVENT_KEY_HIDE_PREVENTED = `hidePrevented.${NAME_KEY}`;
|
|
56
57
|
const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
|
|
57
|
-
const EVENT_KEY_POINTERDOWN_INTERACTION = `pointerdown.interaction.${NAME_KEY}`;
|
|
58
|
-
const EVENT_KEY_POINTERUP_INTERACTION = `pointerup.interaction.${NAME_KEY}`;
|
|
59
|
-
const EVENT_KEY_POINTERCANCEL_INTERACTION = `pointercancel.interaction.${NAME_KEY}`;
|
|
58
|
+
const EVENT_KEY_POINTERDOWN_INTERACTION = `pointerdown.interaction.${NAME_KEY}`;
|
|
59
|
+
const EVENT_KEY_POINTERUP_INTERACTION = `pointerup.interaction.${NAME_KEY}`;
|
|
60
|
+
const EVENT_KEY_POINTERCANCEL_INTERACTION = `pointercancel.interaction.${NAME_KEY}`;
|
|
61
|
+
const TOAST_ICON_MAP = {
|
|
62
|
+
success: 'success',
|
|
63
|
+
error: 'danger',
|
|
64
|
+
warning: 'warning',
|
|
65
|
+
info: 'info',
|
|
66
|
+
};
|
|
60
67
|
|
|
61
68
|
/**
|
|
62
69
|
* @typedef {Object} ToastParams
|
|
@@ -65,12 +72,13 @@ const EVENT_KEY_POINTERCANCEL_INTERACTION = `pointercancel.interaction.${NAME_KE
|
|
|
65
72
|
* @property {boolean} autohide - Автоматически скрывать.
|
|
66
73
|
* @property {number} delay - Задержка перед авто-скрытием (мс).
|
|
67
74
|
* @property {boolean} enableClickToast - Закрывать по клику на тост.
|
|
68
|
-
* @property {boolean} enableButtonClose - Добавить кнопку закрытия.
|
|
69
|
-
* @property {boolean} keyboard - Закрывать по Esc.
|
|
70
|
-
* @property {string} theme - Тема: 'dark', 'light' и т.д.
|
|
71
|
-
* @property {
|
|
72
|
-
* @property {
|
|
73
|
-
* @property {
|
|
75
|
+
* @property {boolean} enableButtonClose - Добавить кнопку закрытия.
|
|
76
|
+
* @property {boolean} keyboard - Закрывать по Esc.
|
|
77
|
+
* @property {string} theme - Тема: 'dark', 'light' и т.д.
|
|
78
|
+
* @property {('success'|'error'|'warning'|'info'|null)} type - Тип уведомления для вывода иконки.
|
|
79
|
+
* @property {Object} stack - Настройки стека уведомлений.
|
|
80
|
+
* @property {boolean} stack.enable - Разрешить стек.
|
|
81
|
+
* @property {number} stack.max - Макс. количество тостов одновременно.
|
|
74
82
|
* @property {Object} animation - Анимация.
|
|
75
83
|
* @property {boolean} animation.enable - Включить анимацию.
|
|
76
84
|
* @property {string} animation.in - Анимация входа (Animate.css).
|
|
@@ -96,12 +104,13 @@ const defaultParams = {
|
|
|
96
104
|
autohide: false,
|
|
97
105
|
delay: 3000,
|
|
98
106
|
enableClickToast: true,
|
|
99
|
-
enableButtonClose: false,
|
|
100
|
-
keyboard: true,
|
|
101
|
-
theme: 'dark',
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
enableButtonClose: false,
|
|
108
|
+
keyboard: true,
|
|
109
|
+
theme: 'dark',
|
|
110
|
+
type: null,
|
|
111
|
+
stack: {
|
|
112
|
+
enable: true,
|
|
113
|
+
max: 5
|
|
105
114
|
},
|
|
106
115
|
drag: {
|
|
107
116
|
enable: false,
|
|
@@ -239,12 +248,24 @@ class VGToast extends BaseModule {
|
|
|
239
248
|
const wrapper = document.createElement('div');
|
|
240
249
|
wrapper.classList.add('vg-toast-wrapper');
|
|
241
250
|
|
|
242
|
-
// Иконка (если задан тип)
|
|
243
|
-
if (params.type) {
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
251
|
+
// Иконка (если задан тип)
|
|
252
|
+
if (params.type) {
|
|
253
|
+
const iconName = TOAST_ICON_MAP[params.type];
|
|
254
|
+
const iconSvg = iconName ? getSVG(iconName) : '';
|
|
255
|
+
|
|
256
|
+
if (iconSvg) {
|
|
257
|
+
const icon = document.createElement('div');
|
|
258
|
+
icon.classList.add('vg-toast-icon');
|
|
259
|
+
const safeIconSvg = Sanitize.toSafeHtmlString(iconSvg);
|
|
260
|
+
const fragment = document.createRange().createContextualFragment(safeIconSvg);
|
|
261
|
+
const svgElement = fragment.firstElementChild;
|
|
262
|
+
|
|
263
|
+
if (svgElement) {
|
|
264
|
+
icon.append(svgElement);
|
|
265
|
+
}
|
|
266
|
+
wrapper.append(icon);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
248
269
|
|
|
249
270
|
const content = document.createElement('div');
|
|
250
271
|
content.classList.add('vg-toast-content');
|
|
@@ -268,13 +289,14 @@ class VGToast extends BaseModule {
|
|
|
268
289
|
|
|
269
290
|
wrapper.append(content);
|
|
270
291
|
|
|
271
|
-
// Кнопка закрытия
|
|
272
|
-
if (params.enableButtonClose) {
|
|
273
|
-
|
|
274
|
-
button.
|
|
275
|
-
button.
|
|
276
|
-
|
|
277
|
-
|
|
292
|
+
// Кнопка закрытия
|
|
293
|
+
if (params.enableButtonClose) {
|
|
294
|
+
target.classList.add('vg-toast-has-button');
|
|
295
|
+
const button = document.createElement('div');
|
|
296
|
+
button.classList.add('vg-toast-button');
|
|
297
|
+
button.innerHTML = '<button class="vg-btn-close" data-vg-dismiss="toast"></button>';
|
|
298
|
+
wrapper.append(button);
|
|
299
|
+
}
|
|
278
300
|
|
|
279
301
|
target.append(wrapper);
|
|
280
302
|
document.body.append(target);
|