vgapp 1.3.0 → 1.3.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.
Files changed (88) hide show
  1. package/README.md +133 -133
  2. package/app/langs/en/buttons.json +17 -17
  3. package/app/langs/en/messages.json +36 -36
  4. package/app/langs/ru/buttons.json +17 -17
  5. package/app/langs/ru/messages.json +36 -36
  6. package/app/modules/base-module.js +111 -111
  7. package/app/modules/vgalert/readme.md +105 -105
  8. package/app/modules/vgdynamictable/index.js +5 -5
  9. package/app/modules/vgdynamictable/js/editable.js +19 -19
  10. package/app/modules/vgdynamictable/js/filters.js +21 -21
  11. package/app/modules/vgdynamictable/js/fixed.js +179 -179
  12. package/app/modules/vgdynamictable/js/pagination.js +1 -1
  13. package/app/modules/vgdynamictable/js/search.js +12 -12
  14. package/app/modules/vgdynamictable/js/sortable.js +71 -71
  15. package/app/modules/vgdynamictable/js/summary-footer.js +28 -28
  16. package/app/modules/vgdynamictable/js/table-remote.js +79 -79
  17. package/app/modules/vgdynamictable/js/table-url-state.js +31 -31
  18. package/app/modules/vgdynamictable/js/utils/common.js +48 -48
  19. package/app/modules/vgdynamictable/js/vgdynamictable.js +268 -268
  20. package/app/modules/vgdynamictable/readme.md +250 -250
  21. package/app/modules/vgdynamictable/scss/_skeleton.scss +6 -6
  22. package/app/modules/vgdynamictable/scss/_sortable.scss +24 -24
  23. package/app/modules/vgdynamictable/scss/_table.scss +4 -4
  24. package/app/modules/vgdynamictable/scss/_variables.scss +79 -79
  25. package/app/modules/vgdynamictable/scss/vgdynamictable.scss +27 -27
  26. package/app/modules/vgfilepreview/js/i18n.js +56 -56
  27. package/app/modules/vgfilepreview/js/renderers/image-modal.js +145 -145
  28. package/app/modules/vgfilepreview/js/renderers/image.js +92 -92
  29. package/app/modules/vgfilepreview/js/renderers/index.js +19 -19
  30. package/app/modules/vgfilepreview/js/renderers/office-modal.js +168 -168
  31. package/app/modules/vgfilepreview/js/renderers/office.js +79 -79
  32. package/app/modules/vgfilepreview/js/renderers/pdf-modal.js +260 -260
  33. package/app/modules/vgfilepreview/js/renderers/pdf.js +76 -76
  34. package/app/modules/vgfilepreview/js/renderers/playlist.js +71 -71
  35. package/app/modules/vgfilepreview/js/renderers/text-modal.js +343 -343
  36. package/app/modules/vgfilepreview/js/renderers/text.js +83 -83
  37. package/app/modules/vgfilepreview/js/renderers/video-modal.js +272 -272
  38. package/app/modules/vgfilepreview/js/renderers/video.js +80 -80
  39. package/app/modules/vgfilepreview/js/renderers/zip-modal.js +522 -522
  40. package/app/modules/vgfilepreview/js/renderers/zip.js +89 -89
  41. package/app/modules/vgfilepreview/js/vgfilepreview.js +7 -7
  42. package/app/modules/vgfilepreview/readme.md +68 -68
  43. package/app/modules/vgfilepreview/scss/_variables.scss +113 -113
  44. package/app/modules/vgfilepreview/scss/vgfilepreview.scss +464 -464
  45. package/app/modules/vgfiles/js/base.js +26 -26
  46. package/app/modules/vgfiles/js/droppable.js +260 -260
  47. package/app/modules/vgfiles/js/render.js +153 -153
  48. package/app/modules/vgfiles/js/vgfiles.js +104 -104
  49. package/app/modules/vgfiles/readme.md +123 -123
  50. package/app/modules/vgfiles/scss/_variables.scss +18 -18
  51. package/app/modules/vgfiles/scss/vgfiles.scss +148 -148
  52. package/app/modules/vgformsender/js/hideshowpass.js +16 -16
  53. package/app/modules/vgformsender/scss/vgformsender.scss +34 -34
  54. package/app/modules/vgmodal/js/vgmodal.drag.js +332 -332
  55. package/app/modules/vgmodal/js/vgmodal.js +188 -188
  56. package/app/modules/vgmodal/js/vgmodal.resize.js +27 -27
  57. package/app/modules/vgmodal/scss/vgmodal.scss +14 -14
  58. package/app/modules/vgnav/js/vgnav.js +135 -135
  59. package/app/modules/vgnav/readme.md +67 -67
  60. package/app/modules/vgnestable/README.md +307 -307
  61. package/app/modules/vgnestable/scss/_variables.scss +60 -60
  62. package/app/modules/vgnestable/scss/vgnestable.scss +163 -163
  63. package/app/modules/vgrangeslider/js/skins.js +222 -222
  64. package/app/modules/vgrangeslider/js/vgrangeslider.js +704 -704
  65. package/app/modules/vgrangeslider/readme.md +523 -523
  66. package/app/modules/vgrangeslider/scss/_variables.scss +53 -53
  67. package/app/modules/vgrangeslider/scss/vgrangeslider.scss +240 -240
  68. package/app/modules/vgselect/js/vgselect.js +39 -39
  69. package/app/modules/vgselect/scss/vgselect.scss +22 -22
  70. package/app/modules/vgspy/readme.md +28 -28
  71. package/app/modules/vgtoast/readme.md +18 -18
  72. package/app/modules/vgtoast/scss/vgtoast.scss +48 -48
  73. package/app/modules/vgtooltip/js/vgtooltip.js +89 -89
  74. package/app/modules/vgtooltip/readme.md +181 -181
  75. package/app/utils/js/components/ajax.js +117 -117
  76. package/app/utils/js/components/audio-metadata.js +240 -240
  77. package/app/utils/js/components/backdrop.js +17 -17
  78. package/app/utils/js/components/file-icon.js +109 -109
  79. package/app/utils/js/components/file-preview.js +304 -304
  80. package/app/utils/js/components/sanitize.js +150 -150
  81. package/app/utils/js/components/video-metadata.js +140 -140
  82. package/app/vgapp.js +130 -107
  83. package/build/vgapp.css +2 -2
  84. package/build/vgapp.js +2 -2
  85. package/build/vgapp.js.LICENSE.txt +1 -1
  86. package/build/vgapp.js.map +1 -1
  87. package/index.js +14 -14
  88. package/package.json +1 -1
@@ -15,8 +15,8 @@ import Animation from "../utils/js/components/animation";
15
15
  import Ajax from "../utils/js/components/ajax";
16
16
  import Html from "../utils/js/components/templater";
17
17
 
18
- class BaseModule {
19
- constructor(element) {
18
+ class BaseModule {
19
+ constructor(element) {
20
20
  if (!element) return
21
21
 
22
22
  this._element = Selectors.find(element);
@@ -54,13 +54,13 @@ class BaseModule {
54
54
  * - timeout = задержка перед отправкой, по умолчанию 0
55
55
  * @param callback
56
56
  */
57
- _route(callback) {
58
- if (typeof callback !== 'function') {
59
- return this._requestRoute(callback);
60
- }
61
-
62
- let $content = null,
63
- timeout = this._params.ajax.timeout || 0;
57
+ _route(callback) {
58
+ if (typeof callback !== 'function') {
59
+ return this._requestRoute(callback);
60
+ }
61
+
62
+ let $content = null,
63
+ timeout = this._params.ajax.timeout || 0;
64
64
 
65
65
  if (this._isLoaded) return;
66
66
 
@@ -137,83 +137,83 @@ class BaseModule {
137
137
  if (this._params.ajax.method.toLowerCase() === 'delete') {
138
138
  ajax.delete(this._params.ajax.route, ajaxData);
139
139
  }
140
- }, timeout);
141
- }
142
-
143
- _requestRoute(options = {}) {
144
- const config = this._normalizeRouteRequestOptions(options);
145
- return Ajax.requestRoute(config);
146
- }
147
-
148
- _buildRouteUrl(params = {}, endpoint = '', options = {}) {
149
- const config = this._normalizeRouteRequestOptions(Object.assign({}, options, {
150
- params,
151
- route: endpoint || options.route || '',
152
- }));
153
- return Ajax.buildRouteUrl(config.route, {
154
- params: config.params,
155
- baseParams: config.baseParams,
156
- });
157
- }
158
-
159
- _normalizeRouteRequestOptions(options = {}) {
160
- const requestOptions = this._params && isObject(this._params.request)
161
- ? this._params.request
162
- : {};
163
- const ajaxOptions = this._params && isObject(this._params.ajax)
164
- ? this._params.ajax
165
- : {};
166
- const source = isObject(options) ? options : {};
167
- const route = String(
168
- source.route
169
- || source.endpoint
170
- || requestOptions.route
171
- || ajaxOptions.route
172
- || ''
173
- ).trim();
174
- const method = String(
175
- source.method
176
- || requestOptions.method
177
- || ajaxOptions.method
178
- || 'GET'
179
- ).toUpperCase().trim() || 'GET';
180
- const credentials = String(
181
- source.credentials
182
- || requestOptions.credentials
183
- || 'same-origin'
184
- ).trim() || 'same-origin';
185
- const headers = mergeDeepObject(
186
- {
187
- 'Accept': 'application/json',
188
- 'X-Requested-With': 'XMLHttpRequest',
189
- },
190
- isObject(requestOptions.headers) ? requestOptions.headers : {},
191
- isObject(source.headers) ? source.headers : {}
192
- );
193
- const baseParams = mergeDeepObject(
194
- {},
195
- isObject(requestOptions.params) ? requestOptions.params : {},
196
- isObject(source.baseParams) ? source.baseParams : {},
197
- isObject(source.paramsBase) ? source.paramsBase : {}
198
- );
199
- const params = isObject(source.params) ? source.params : {};
200
- const body = source.body !== undefined
201
- ? source.body
202
- : (source.data !== undefined ? source.data : null);
203
- return {
204
- route,
205
- method,
206
- credentials,
207
- headers,
208
- baseParams,
209
- params,
210
- body,
211
- signal: source.signal || null,
212
- responseType: String(source.responseType || source.parse || 'auto').toLowerCase().trim() || 'auto',
213
- };
214
- }
215
-
216
- _dismissElement() {
140
+ }, timeout);
141
+ }
142
+
143
+ _requestRoute(options = {}) {
144
+ const config = this._normalizeRouteRequestOptions(options);
145
+ return Ajax.requestRoute(config);
146
+ }
147
+
148
+ _buildRouteUrl(params = {}, endpoint = '', options = {}) {
149
+ const config = this._normalizeRouteRequestOptions(Object.assign({}, options, {
150
+ params,
151
+ route: endpoint || options.route || '',
152
+ }));
153
+ return Ajax.buildRouteUrl(config.route, {
154
+ params: config.params,
155
+ baseParams: config.baseParams,
156
+ });
157
+ }
158
+
159
+ _normalizeRouteRequestOptions(options = {}) {
160
+ const requestOptions = this._params && isObject(this._params.request)
161
+ ? this._params.request
162
+ : {};
163
+ const ajaxOptions = this._params && isObject(this._params.ajax)
164
+ ? this._params.ajax
165
+ : {};
166
+ const source = isObject(options) ? options : {};
167
+ const route = String(
168
+ source.route
169
+ || source.endpoint
170
+ || requestOptions.route
171
+ || ajaxOptions.route
172
+ || ''
173
+ ).trim();
174
+ const method = String(
175
+ source.method
176
+ || requestOptions.method
177
+ || ajaxOptions.method
178
+ || 'GET'
179
+ ).toUpperCase().trim() || 'GET';
180
+ const credentials = String(
181
+ source.credentials
182
+ || requestOptions.credentials
183
+ || 'same-origin'
184
+ ).trim() || 'same-origin';
185
+ const headers = mergeDeepObject(
186
+ {
187
+ 'Accept': 'application/json',
188
+ 'X-Requested-With': 'XMLHttpRequest',
189
+ },
190
+ isObject(requestOptions.headers) ? requestOptions.headers : {},
191
+ isObject(source.headers) ? source.headers : {}
192
+ );
193
+ const baseParams = mergeDeepObject(
194
+ {},
195
+ isObject(requestOptions.params) ? requestOptions.params : {},
196
+ isObject(source.baseParams) ? source.baseParams : {},
197
+ isObject(source.paramsBase) ? source.paramsBase : {}
198
+ );
199
+ const params = isObject(source.params) ? source.params : {};
200
+ const body = source.body !== undefined
201
+ ? source.body
202
+ : (source.data !== undefined ? source.data : null);
203
+ return {
204
+ route,
205
+ method,
206
+ credentials,
207
+ headers,
208
+ baseParams,
209
+ params,
210
+ body,
211
+ signal: source.signal || null,
212
+ responseType: String(source.responseType || source.parse || 'auto').toLowerCase().trim() || 'auto',
213
+ };
214
+ }
215
+
216
+ _dismissElement() {
217
217
  let cross = getSVG('cross'),
218
218
  button = this._element.querySelector('.vg-btn-close');
219
219
 
@@ -235,34 +235,34 @@ class BaseModule {
235
235
  return Data.get(Selectors.find(element), this.NAME_KEY)
236
236
  }
237
237
 
238
- static getOrCreateInstance(element, params = {}) {
239
- return this.getInstance(element) || new this(element, !isEmptyObj(params) ? params : {})
240
- }
241
-
242
- static boot(params = {}) {
243
- if (typeof this.initAll === 'function') {
244
- return this.initAll(params);
245
- }
246
-
247
- if (typeof this.init !== 'function') {
248
- return null;
249
- }
250
-
251
- if (params && Object.prototype.hasOwnProperty.call(params, 'element')) {
252
- const { element, ...options } = params;
253
- return this.init(element, options);
254
- }
255
-
256
- return null;
257
- }
258
-
259
- static get DATA_KEY() {
260
- return `vg.${this.NAME}`
261
- }
238
+ static getOrCreateInstance(element, params = {}) {
239
+ return this.getInstance(element) || new this(element, !isEmptyObj(params) ? params : {})
240
+ }
241
+
242
+ static boot(params = {}) {
243
+ if (typeof this.initAll === 'function') {
244
+ return this.initAll(params);
245
+ }
246
+
247
+ if (typeof this.init !== 'function') {
248
+ return null;
249
+ }
250
+
251
+ if (params && Object.prototype.hasOwnProperty.call(params, 'element')) {
252
+ const { element, ...options } = params;
253
+ return this.init(element, options);
254
+ }
255
+
256
+ return null;
257
+ }
258
+
259
+ static get DATA_KEY() {
260
+ return `vg.${this.NAME}`
261
+ }
262
262
 
263
263
  static get EVENT_KEY() {
264
264
  return `.${this.DATA_KEY}`
265
265
  }
266
266
  }
267
267
 
268
- export default BaseModule;
268
+ export default BaseModule;
@@ -11,12 +11,12 @@
11
11
  - Полная **локализация** (настройка языка)
12
12
  - Гибкая **настройка кнопок** и сообщений
13
13
  - Поддержка **SVG-иконок** и тем стилей (`danger`, `warning`, `success`, `info`)
14
- - Работа как через **API**, так и через **`data`-атрибуты**
15
- - Интеграция с промисами (`Promise`)
16
- - Защита от **множественных одновременных вызовов**
17
- - Поддержка **клавиатурных сокращений** (Enter, Escape)
18
- - Два режима рендера: обычный **`modal`** и вложенный **`overlay`**
19
- - Возможность закрывать родительскую модалку/сайдбар через `render.dismiss`
14
+ - Работа как через **API**, так и через **`data`-атрибуты**
15
+ - Интеграция с промисами (`Promise`)
16
+ - Защита от **множественных одновременных вызовов**
17
+ - Поддержка **клавиатурных сокращений** (Enter, Escape)
18
+ - Два режима рендера: обычный **`modal`** и вложенный **`overlay`**
19
+ - Возможность закрывать родительскую модалку/сайдбар через `render.dismiss`
20
20
 
21
21
  ---
22
22
 
@@ -29,45 +29,45 @@ import VGAlert from "./app/modules/vgalert/js/vgalert.js";
29
29
 
30
30
  ---
31
31
 
32
- ## 🧩 Режимы работы
32
+ ## 🧩 Режимы работы
33
33
 
34
34
  ### 1. `confirm` — Подтверждение действия
35
35
  Показывает два действия: **Подтвердить** и **Отмена**.
36
36
 
37
- ### 2. `info` — Информационное сообщение
38
- Показывает только кнопку **ОК** (или "Продолжить").
39
-
40
- ---
41
-
42
- ## 🖼 Рендер (`render`)
43
-
44
- `VGAlert` поддерживает два варианта отображения:
45
-
46
- | Параметр | Значение | Описание |
47
- |--------|--------|----------|
48
- | `render.type` | `modal` | Обычный alert в отдельной модалке |
49
- | `render.type` | `overlay` | Alert-оверлей внутри текущей `.vg-modal` или `.vg-sidebar` |
50
- | `render.dismiss` | `true` / `false` | Для `overlay`: после закрытия alert дополнительно закрывает родительский контейнер |
51
-
52
- ### Пример: alert поверх открытой модалки
53
-
54
- ```js
55
- VGAlert.call({
56
- render: {
57
- type: "overlay",
58
- dismiss: true
59
- },
60
- relatedTarget: button,
61
- message: {
62
- title: "Удалить запись",
63
- description: "Действие будет выполнено в текущем окне."
64
- }
65
- });
66
- ```
67
-
68
- `relatedTarget` нужен для `overlay`, чтобы модуль нашёл ближайшую `.vg-modal` или `.vg-sidebar`, куда надо встроить alert.
69
-
70
- ---
37
+ ### 2. `info` — Информационное сообщение
38
+ Показывает только кнопку **ОК** (или "Продолжить").
39
+
40
+ ---
41
+
42
+ ## 🖼 Рендер (`render`)
43
+
44
+ `VGAlert` поддерживает два варианта отображения:
45
+
46
+ | Параметр | Значение | Описание |
47
+ |--------|--------|----------|
48
+ | `render.type` | `modal` | Обычный alert в отдельной модалке |
49
+ | `render.type` | `overlay` | Alert-оверлей внутри текущей `.vg-modal` или `.vg-sidebar` |
50
+ | `render.dismiss` | `true` / `false` | Для `overlay`: после закрытия alert дополнительно закрывает родительский контейнер |
51
+
52
+ ### Пример: alert поверх открытой модалки
53
+
54
+ ```js
55
+ VGAlert.call({
56
+ render: {
57
+ type: "overlay",
58
+ dismiss: true
59
+ },
60
+ relatedTarget: button,
61
+ message: {
62
+ title: "Удалить запись",
63
+ description: "Действие будет выполнено в текущем окне."
64
+ }
65
+ });
66
+ ```
67
+
68
+ `relatedTarget` нужен для `overlay`, чтобы модуль нашёл ближайшую `.vg-modal` или `.vg-sidebar`, куда надо встроить alert.
69
+
70
+ ---
71
71
 
72
72
  ## 🎨 Темы (`theme`)
73
73
  | Значение | Иконка | Назначение |
@@ -108,9 +108,9 @@ VGAlert.call({
108
108
  });
109
109
  ```
110
110
 
111
- ### Пример 2: Информационное сообщение
112
- ```js
113
- VGAlert.call({
111
+ ### Пример 2: Информационное сообщение
112
+ ```js
113
+ VGAlert.call({
114
114
  mode: "info",
115
115
  theme: "success",
116
116
  message: {
@@ -123,26 +123,26 @@ VGAlert.call({
123
123
  class: ["btn-success"]
124
124
  }
125
125
  }
126
- });
127
- ```
128
-
129
- ### Пример 3: Обработка результата через `Promise`
130
- ```js
131
- VGAlert.call({
132
- message: {
133
- title: "Подтвердите действие",
134
- description: "Продолжить?"
135
- }
136
- }).then((result) => {
137
- console.log(result.accepted); // true
138
- console.log(result.timestamp);
139
- }).catch((error) => {
140
- console.log(error.accepted); // false
141
- console.log(error.timestamp);
142
- });
143
- ```
144
-
145
- ---
126
+ });
127
+ ```
128
+
129
+ ### Пример 3: Обработка результата через `Promise`
130
+ ```js
131
+ VGAlert.call({
132
+ message: {
133
+ title: "Подтвердите действие",
134
+ description: "Продолжить?"
135
+ }
136
+ }).then((result) => {
137
+ console.log(result.accepted); // true
138
+ console.log(result.timestamp);
139
+ }).catch((error) => {
140
+ console.log(error.accepted); // false
141
+ console.log(error.timestamp);
142
+ });
143
+ ```
144
+
145
+ ---
146
146
 
147
147
  ## 🔌 Работа с AJAX
148
148
 
@@ -169,30 +169,30 @@ VGAlert.confirm(element, {
169
169
 
170
170
  ---
171
171
 
172
- ## 🔔 События
173
-
174
- Модуль генерирует события на элементе-триггере, у которого есть `[data-vg-toggle="alert"]`:
175
-
176
- | Событие | Описание |
177
- |--------|--------|
178
- | `vg.alert.accept` | Пользователь подтвердил действие |
172
+ ## 🔔 События
173
+
174
+ Модуль генерирует события на элементе-триггере, у которого есть `[data-vg-toggle="alert"]`:
175
+
176
+ | Событие | Описание |
177
+ |--------|--------|
178
+ | `vg.alert.accept` | Пользователь подтвердил действие |
179
179
  | `vg.alert.reject` | Пользователь отменил действие |
180
- | `vg.alert.finally` | Действие завершено (в любом случае) |
181
- | `vg.alert.loaded` | Получен ответ от сервера (если был AJAX) |
182
-
183
- ```js
184
- const buttons = document.querySelectorAll('[data-vg-toggle="alert"]');
185
-
186
- buttons.forEach((button) => {
187
- button.addEventListener('vg.alert.accept', function (e) {
188
- console.log('Подтверждено:', e.vgalert);
189
- });
190
- });
191
- ```
192
-
193
- Если нужен общий глобальный обработчик, событие можно слушать и на `document`, так как оно всплывает.
194
-
195
- ---
180
+ | `vg.alert.finally` | Действие завершено (в любом случае) |
181
+ | `vg.alert.loaded` | Получен ответ от сервера (если был AJAX) |
182
+
183
+ ```js
184
+ const buttons = document.querySelectorAll('[data-vg-toggle="alert"]');
185
+
186
+ buttons.forEach((button) => {
187
+ button.addEventListener('vg.alert.accept', function (e) {
188
+ console.log('Подтверждено:', e.vgalert);
189
+ });
190
+ });
191
+ ```
192
+
193
+ Если нужен общий глобальный обработчик, событие можно слушать и на `document`, так как оно всплывает.
194
+
195
+ ---
196
196
 
197
197
  ## ⌨️ Клавиатурные комбинации
198
198
 
@@ -203,16 +203,16 @@ buttons.forEach((button) => {
203
203
 
204
204
  ## 🛠️ Конфигурация по умолчанию
205
205
  ```js
206
- {
207
- mode: "confirm",
208
- theme: "danger",
209
- render: {
210
- type: "modal",
211
- dismiss: false
212
- },
213
- modal: {
214
- centered: false,
215
- backdrop: true,
206
+ {
207
+ mode: "confirm",
208
+ theme: "danger",
209
+ render: {
210
+ type: "modal",
211
+ dismiss: false
212
+ },
213
+ modal: {
214
+ centered: false,
215
+ backdrop: true,
216
216
  keyboard: true,
217
217
  dismiss: true
218
218
  },
@@ -249,13 +249,13 @@ VGAlert.call(params, 'en');
249
249
 
250
250
  ## 🧩 Кастомизация кнопок
251
251
 
252
- Поддерживает:
253
- - `tag: 'button' | 'a'`
254
- - `type` (для `<button>`)
255
- - `class` — массив CSS-классов
256
- - `attr` — любые дополнительные атрибуты
257
- - `element` — готовый HTML-код кнопки
258
- - `toggle` — служебный атрибут кнопки (`data-vg-alert-agree` / `data-vg-alert-cancel`), обычно задаётся модулем автоматически
252
+ Поддерживает:
253
+ - `tag: 'button' | 'a'`
254
+ - `type` (для `<button>`)
255
+ - `class` — массив CSS-классов
256
+ - `attr` — любые дополнительные атрибуты
257
+ - `element` — готовый HTML-код кнопки
258
+ - `toggle` — служебный атрибут кнопки (`data-vg-alert-agree` / `data-vg-alert-cancel`), обычно задаётся модулем автоматически
259
259
 
260
260
  ### Пример: кнопка-ссылка
261
261
  ```js
@@ -298,4 +298,4 @@ MIT — свободно используйте и модифицируйте.
298
298
  ---
299
299
 
300
300
  > 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
301
- > 📍 Поддерживается в проектах VEGAS
301
+ > 📍 Поддерживается в проектах VEGAS
@@ -1,5 +1,5 @@
1
- import VGDynamicTable from "./js/vgdynamictable";
2
- import Editable from "./js/editable";
3
-
4
- export {Editable, VGDynamicTable};
5
- export default VGDynamicTable;
1
+ import VGDynamicTable from "./js/vgdynamictable";
2
+ import Editable from "./js/editable";
3
+
4
+ export {Editable, VGDynamicTable};
5
+ export default VGDynamicTable;
@@ -1,13 +1,13 @@
1
- import EventHandler from "../../../utils/js/dom/event";
2
- import Data from "../../../utils/js/dom/data";
3
-
4
- const TABLE_SELECTOR = '[data-vg-table]';
5
- const ROW_SELECTOR = 'tbody tr:not([data-group-header="1"])';
6
- const ROW_CHECK_SELECTOR = '[data-row-select]';
7
- const CHECK_ALL_SELECTOR = '[data-select-all]';
8
- const DEFAULT_ROW_REORDER_HANDLE_SELECTOR = '[data-row-reorder-handle]';
9
- const ROW_REORDER_IGNORE_SELECTOR = 'input, button, a, select, textarea, [contenteditable="true"]';
10
- const TABLE_DATA_KEY = 'vg.dynamicTable';
1
+ import EventHandler from "../../../utils/js/dom/event";
2
+ import Data from "../../../utils/js/dom/data";
3
+
4
+ const TABLE_SELECTOR = '[data-vg-table]';
5
+ const ROW_SELECTOR = 'tbody tr:not([data-group-header="1"])';
6
+ const ROW_CHECK_SELECTOR = '[data-row-select]';
7
+ const CHECK_ALL_SELECTOR = '[data-select-all]';
8
+ const DEFAULT_ROW_REORDER_HANDLE_SELECTOR = '[data-row-reorder-handle]';
9
+ const ROW_REORDER_IGNORE_SELECTOR = 'input, button, a, select, textarea, [contenteditable="true"]';
10
+ const TABLE_DATA_KEY = 'vg.dynamicTable';
11
11
  const ACTION_CALLBACK_MAP = {
12
12
  rowcheck: 'onRowCheck',
13
13
  checkall: 'onCheckAll',
@@ -403,12 +403,12 @@ class Editable {
403
403
  : {};
404
404
  }
405
405
 
406
- static _getTableInstance(table) {
407
- if (!table) {
408
- return null;
409
- }
410
- return Data.get(table, TABLE_DATA_KEY);
411
- }
406
+ static _getTableInstance(table) {
407
+ if (!table) {
408
+ return null;
409
+ }
410
+ return Data.get(table, TABLE_DATA_KEY);
411
+ }
412
412
 
413
413
  static _getEventPrefix(table) {
414
414
  const instance = this._getTableInstance(table);
@@ -431,8 +431,8 @@ class Editable {
431
431
  }
432
432
  }
433
433
 
434
- EventHandler.on(document, 'DOMContentLoaded', () => {
435
- Editable.initAll();
436
- });
434
+ EventHandler.on(document, 'DOMContentLoaded', () => {
435
+ Editable.initAll();
436
+ });
437
437
 
438
438
  export default Editable;
@@ -1,6 +1,6 @@
1
- import {normalizeNonNegativeInt, safeQuerySelector} from "./utils/common";
2
-
3
- class Filters {
1
+ import {normalizeNonNegativeInt, safeQuerySelector} from "./utils/common";
2
+
3
+ class Filters {
4
4
  constructor(options = {}) {
5
5
  this._options = Object.assign({
6
6
  enabled: true,
@@ -19,12 +19,12 @@ class Filters {
19
19
  operatorAttr: 'data-filter-operator',
20
20
  defaultOperator: 'eq',
21
21
  skipEmpty: true,
22
- trimValues: true,
23
- emitOnInit: false,
24
- initialValues: {},
25
- onChange: null,
26
- onReset: null,
27
- }, options);
22
+ trimValues: true,
23
+ emitOnInit: false,
24
+ initialValues: {},
25
+ onChange: null,
26
+ onReset: null,
27
+ }, options);
28
28
 
29
29
  this._form = null;
30
30
  this._timer = null;
@@ -119,7 +119,7 @@ class Filters {
119
119
  if (!selector) {
120
120
  return null;
121
121
  }
122
- return safeQuerySelector(selector);
122
+ return safeQuerySelector(selector);
123
123
  }
124
124
 
125
125
  _handleInput(event) {
@@ -134,8 +134,8 @@ class Filters {
134
134
  this._emit();
135
135
  return;
136
136
  }
137
- clearTimeout(this._timer);
138
- this._timer = setTimeout(() => this._emit(), normalizeNonNegativeInt(this._options.debounceMs, 300));
137
+ clearTimeout(this._timer);
138
+ this._timer = setTimeout(() => this._emit(), normalizeNonNegativeInt(this._options.debounceMs, 300));
139
139
  }
140
140
 
141
141
  _handleChange(event) {
@@ -169,14 +169,14 @@ class Filters {
169
169
  if (!resetButton) {
170
170
  return;
171
171
  }
172
- event.preventDefault();
173
- this._reset();
174
- if (typeof this._options.onReset === 'function') {
175
- this._options.onReset();
176
- }
177
- clearTimeout(this._timer);
178
- this._emit();
179
- }
172
+ event.preventDefault();
173
+ this._reset();
174
+ if (typeof this._options.onReset === 'function') {
175
+ this._options.onReset();
176
+ }
177
+ clearTimeout(this._timer);
178
+ this._emit();
179
+ }
180
180
 
181
181
  _handleSubmit(event) {
182
182
  if (!this._isManualMode()) {
@@ -441,7 +441,7 @@ class Filters {
441
441
  const tag = String(node.tagName || '').toUpperCase();
442
442
  return tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA';
443
443
  }
444
- _isManualMode() {
444
+ _isManualMode() {
445
445
  const mode = String(this._options.applyMode || 'auto').toLowerCase().trim();
446
446
  return mode === 'manual';
447
447
  }