vgapp 0.4.5 → 0.4.7

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 CHANGED
@@ -1,6 +1,21 @@
1
+ # VEGAS-APP 0.4.3 - 0.4.6 (Июнь, 3, 2025)
2
+ * Исправлены ошибки в разных модулях
3
+ * Во все модули, где есть группа параметров ajax, добавлен параметр output (boolean),
4
+ разрешает или запрещает добавление контента с сервера в целевой блок
5
+ * Во все модули, где есть группа параметров ajax, добавлен параметр once (boolean),
6
+ разовый запрос на сервер
7
+
8
+ ## Модуль VGRollup
9
+ * Исправлено, последовательное открытие свернутого контента
10
+
11
+ ## Новый модуль VGLoadMore
12
+
13
+ ---
14
+
1
15
  # VEGAS-APP 0.4.3 (Май, 31, 2025)
2
16
  * Исправлены ошибки в разных модулях
3
17
  ## Новый модуль VGTabs
18
+
4
19
  ---
5
20
 
6
21
  # VEGAS-APP 0.4.0 (Май, 287, 2025)
@@ -8,32 +23,38 @@
8
23
  ## Модуль VGFORMSENDER
9
24
  * Добавлен параметр interceptors (перехватчики) для состояний error и/или success, после чего вызывается соответствующий колбек afterError и/или afterSuccess
10
25
  * Добавлен параметр delay в группу alert автоматическое закрытие, отсчет в миллисекундах
26
+
11
27
  ---
12
28
 
13
29
  # VEGAS-APP 0.3.4 (Май, 20, 2025)
14
30
  ## Новый модуль VGSpy
31
+
15
32
  ---
16
33
 
17
34
  # VEGAS-APP 0.3.0 (Май, 09, 2025)
18
35
  * Исправлены ошибки
19
36
  ## Модуль VGFORMSENDER
20
37
  * Добавлен параметр pass, будет добавлен глаз к полю с паролем
38
+
21
39
  ---
22
40
 
23
41
  # VEGAS-APP 0.2.5 (Апрель, 12, 2025)
24
42
  * Исправлены ошибки в разных модулях
25
43
  ## Новый модуль VGRollup
44
+
26
45
  ---
27
46
 
28
47
  # VEGAS-APP 0.2.4 (Апрель, 8, 2025)
29
48
  ## Модуль VGSidebar & VGModal
30
49
  * Добавлен параметр hash
31
50
  ## Новый модуль VGToast
51
+
32
52
  ---
33
53
 
34
54
  # VEGAS-APP 0.2.3 (Апрель, 4, 2025)
35
55
  ## Модуль VGDROPDOWN
36
56
  * Добавлен параметр overflow и backdrop
57
+
37
58
  ---
38
59
 
39
60
  # VEGAS-APP 0.2.1 (Март, 31, 2025)
package/README.md CHANGED
@@ -1,2 +1,16 @@
1
1
  # VEGAS APP
2
- [FUNC.TRUE?!](http://func-true.ru)
2
+ [FUNC.TRUE?!](http://func-true.ru)
3
+
4
+ [![npm](https://img.shields.io/npm/v/vgapp.svg?style=flat-square&maxAge=600)](https://www.npmjs.com/package/vgapp) [![npm](https://img.shields.io/npm/l/vgapp.svg?style=flat-square)]()
5
+
6
+ ## Install
7
+ ```
8
+ npm i vgapp
9
+ ```
10
+
11
+ ## Authors
12
+
13
+ [VEGAS STUDIO](https://vegas-dev.com) Russia
14
+
15
+ ## License
16
+ Is published under the [MIT license](http://www.opensource.org/licenses/mit-license)
@@ -60,7 +60,9 @@ class BaseModule {
60
60
  }
61
61
 
62
62
  if ('loader' in _this._params.ajax && _this._params.ajax.loader) {
63
- setData('<div class="vg-loader"></div>');
63
+ if ('output' in _this._params.ajax && _this._params.ajax.output) {
64
+ setData('<div class="vg-loader"></div>');
65
+ }
64
66
  }
65
67
 
66
68
  Ajax[_this._params.ajax.method](_this._params.ajax.route, _this._params.ajax.data || {}, function (status, data) {
@@ -68,8 +70,11 @@ class BaseModule {
68
70
  _this._isLoaded = true;
69
71
  }
70
72
 
71
- setData(data.response);
72
- execute(callback, [status, data]);
73
+ if ('output' in _this._params.ajax && _this._params.ajax.output) {
74
+ setData(data.response);
75
+ }
76
+
77
+ execute(callback, [status, data, $content]);
73
78
  });
74
79
  }
75
80
 
@@ -101,11 +101,19 @@ const Ajax = {
101
101
  let query = [];
102
102
 
103
103
  if (!isEmptyObj(data)) {
104
- for (let key of data) {
105
- query.push(encodeURIComponent(key[0]) + '=' + encodeURIComponent(key[1]));
104
+ for (let key in data) {
105
+ console.log(key)
106
+ query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
106
107
  }
107
108
  }
108
- Ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
109
+
110
+ let uri = '';
111
+ if (query.length) {
112
+ uri += url.includes('?') ? '&' : '?';
113
+ uri += query.join('&');
114
+ }
115
+
116
+ Ajax.send(url + uri, callback, 'GET', null, async)
109
117
  },
110
118
 
111
119
  post: function (url, data, callback, async) {
@@ -38,6 +38,7 @@ class VGCollapse extends BaseModule {
38
38
  method: 'get',
39
39
  loader: false,
40
40
  once: false,
41
+ output: true,
41
42
  }
42
43
  }, params));
43
44
 
@@ -43,6 +43,7 @@ class VGDropdown extends BaseModule {
43
43
  method: 'get',
44
44
  loader: false,
45
45
  once: false,
46
+ output: true,
46
47
  },
47
48
  animation: {
48
49
  enable: false,
@@ -45,7 +45,10 @@ class VGLawCookie extends BaseModule {
45
45
  ajax: {
46
46
  route: '',
47
47
  target: '',
48
- method: 'get'
48
+ method: 'get',
49
+ loader: false,
50
+ once: false,
51
+ output: true,
49
52
  }
50
53
  }, params));
51
54
 
@@ -0,0 +1,3 @@
1
+ import VGLoadMore from "./js/vgloadmore";
2
+
3
+ export default VGLoadMore
@@ -0,0 +1,104 @@
1
+ import BaseModule from "../../base-module";
2
+ import EventHandler from "../../../utils/js/dom/event";
3
+ import {execute, mergeDeepObject} from "../../../utils/js/functions";
4
+ import Selectors from "../../../utils/js/dom/selectors";
5
+
6
+ const NAME = 'loadmore';
7
+ const NAME_KEY = 'vg.loadmore';
8
+ const CLASS_NAME_SHOW = 'show';
9
+
10
+ const SELECTOR_DATA_TOGGLE = '[data-vg-toggle="loadmore"]';
11
+
12
+ const EVENT_KEY_HIDE = `${NAME_KEY}.hide`;
13
+ const EVENT_KEY_HIDDEN = `${NAME_KEY}.hidden`;
14
+ const EVENT_KEY_SHOW = `${NAME_KEY}.show`;
15
+ const EVENT_KEY_SHOWN = `${NAME_KEY}.shown`;
16
+ const EVENT_KEY_LOADED = `${NAME_KEY}.loaded`;
17
+
18
+ const EVENT_KEY_CLICK_DATA_API = `click.${NAME_KEY}.data.api`;
19
+
20
+ class VGLoadMore extends BaseModule{
21
+ constructor(element, params) {
22
+ super(element, params);
23
+
24
+ this._params = this._getParams(element, mergeDeepObject({
25
+ limit: 0,
26
+ offset: 0,
27
+ output: true,
28
+ autohide: true,
29
+ button: {
30
+ text: '',
31
+ send: 'Загружаем...'
32
+ },
33
+ ajax: {
34
+ route: '',
35
+ target: '',
36
+ method: 'get',
37
+ loader: false,
38
+ once: false,
39
+ output: false,
40
+ },
41
+ }, params));
42
+
43
+ this.fOffset = this._params.offset;
44
+
45
+ if (!this._params.button.text) {
46
+ this._params.button.text = this._element.innerHTML;
47
+ }
48
+ }
49
+
50
+ static get NAME() {
51
+ return NAME;
52
+ }
53
+
54
+ static get NAME_KEY() {
55
+ return NAME_KEY;
56
+ }
57
+
58
+ toggle(callback) {
59
+ this._params.ajax.data = {
60
+ limit: this._params.limit,
61
+ offset: this._params.offset
62
+ }
63
+
64
+ if (this._params.button.send) {
65
+ this._element.innerHTML = this._params.button.send;
66
+ }
67
+
68
+ this._route((status, data, target) => {
69
+ if ('loader' in this._params.ajax && this._params.ajax.loader) {
70
+ let loader = Selectors.find('.vg-loader', target);
71
+ if (loader) loader.remove();
72
+ }
73
+
74
+ if ('output' in this._params && this._params.output) {
75
+ target.insertAdjacentHTML('beforeend', data.response);
76
+ }
77
+
78
+ this._params.offset = this.fOffset + this._params.offset;
79
+ this._element.innerHTML = this._params.button.text;
80
+
81
+ if ('autohide' in this._params && this._params.autohide) {
82
+ if (!data.response) this._element.remove();
83
+ }
84
+
85
+ EventHandler.trigger(this._element, EVENT_KEY_LOADED, {stats: status, data: data});
86
+ execute(callback, [this, data, target, status]);
87
+ });
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Data API implementation
93
+ */
94
+ EventHandler.on(document, EVENT_KEY_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
95
+ const target = this;
96
+
97
+ if (['A', 'AREA'].includes(this.tagName)) event.preventDefault();
98
+
99
+ const instance = VGLoadMore.getOrCreateInstance(target);
100
+ instance.toggle();
101
+ });
102
+
103
+
104
+ export default VGLoadMore;
@@ -56,7 +56,8 @@ class VGModal extends BaseModule {
56
56
  target: '',
57
57
  method: 'get',
58
58
  loader: false,
59
- once: false
59
+ once: false,
60
+ output: true,
60
61
  },
61
62
  animation: {
62
63
  enable: false,
@@ -77,7 +77,10 @@ class VGNav extends BaseModule {
77
77
  ajax: {
78
78
  route: '',
79
79
  target: '',
80
- method: 'get'
80
+ method: 'get',
81
+ loader: false,
82
+ once: false,
83
+ output: true,
81
84
  }
82
85
  }, params));
83
86
 
@@ -49,6 +49,7 @@ class VGSidebar extends BaseModule {
49
49
  method: 'get',
50
50
  loader: false,
51
51
  once: false,
52
+ output: true,
52
53
  }
53
54
  }, params));
54
55
 
@@ -62,7 +62,8 @@ class VGTabs extends BaseModule {
62
62
  target: '',
63
63
  method: 'get',
64
64
  loader: false,
65
- once: true
65
+ once: true,
66
+ output: true,
66
67
  },
67
68
  }, this._params);
68
69
 
@@ -53,6 +53,7 @@ class VGToast extends BaseModule {
53
53
  method: 'get',
54
54
  loader: false,
55
55
  once: false,
56
+ output: true,
56
57
  }
57
58
  }, params));
58
59
 
@@ -3,6 +3,7 @@ import {execute, mergeDeepObject} from "../functions";
3
3
  const TEMPLATES = [
4
4
  {type: 'pass-open', template: '<span data-vg-toggle="vgpass" class="[[classes]]" title="Показать / Скрыть" data-bs-toggle="tooltip"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M288 80c-65.2 0-118.8 29.6-159.9 67.7C89.6 183.5 63 226 49.4 256c13.6 30 40.2 72.5 78.6 108.3C169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256c-13.6-30-40.2-72.5-78.6-108.3C406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1c3.3 7.9 3.3 16.7 0 24.6c-14.9 35.7-46.2 87.7-93 131.1C433.5 443.2 368.8 480 288 480s-145.5-36.8-192.6-80.6C48.6 356 17.3 304 2.5 268.3c-3.3-7.9-3.3-16.7 0-24.6C17.3 208 48.6 156 95.4 112.6zM288 336c44.2 0 80-35.8 80-80s-35.8-80-80-80c-.7 0-1.3 0-2 0c1.3 5.1 2 10.5 2 16c0 35.3-28.7 64-64 64c-5.5 0-10.9-.7-16-2c0 .7 0 1.3 0 2c0 44.2 35.8 80 80 80zm0-208a128 128 0 1 1 0 256 128 128 0 1 1 0-256z"/></svg></span>'},
5
5
  {type: 'pass-close', template: '<span data-vg-toggle="vgpass" class="[[classes]]" title="Показать / Скрыть" data-bs-toggle="tooltip"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zm151 118.3C226 97.7 269.5 80 320 80c65.2 0 118.8 29.6 159.9 67.7C518.4 183.5 545 226 558.6 256c-12.6 28-36.6 66.8-70.9 100.9l-53.8-42.2c9.1-17.6 14.2-37.5 14.2-58.7c0-70.7-57.3-128-128-128c-32.2 0-61.7 11.9-84.2 31.5l-46.1-36.1zM394.9 284.2l-81.5-63.9c4.2-8.5 6.6-18.2 6.6-28.3c0-5.5-.7-10.9-2-16c.7 0 1.3 0 2 0c44.2 0 80 35.8 80 80c0 9.9-1.8 19.4-5.1 28.2zm9.4 130.3C378.8 425.4 350.7 432 320 432c-65.2 0-118.8-29.6-159.9-67.7C121.6 328.5 95 286 81.4 256c8.3-18.4 21.5-41.5 39.4-64.8L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5l-41.9-33zM192 256c0 70.7 57.3 128 128 128c13.3 0 26.1-2 38.2-5.8L302 334c-23.5-5.4-43.1-21.2-53.7-42.3l-56.1-44.2c-.2 2.8-.3 5.6-.3 8.5z"/></svg></span>'},
6
+ {type: 'loader', template: '<div class="vg-loader"></div>'}
6
7
  ]
7
8
 
8
9