Skip to content

Commit adb2e51

Browse files
committed
Update to 1.7.3
1 parent f406ca9 commit adb2e51

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+3026
-3409
lines changed

CHANGELOG.md

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,30 @@
22

33
Все заметные изменения задокументированы в этом файле.
44

5+
[1.7.3]: https://github.com/digikid/gulp-project/releases/tag/1.7.3
6+
7+
## [1.7.3] - 2022-03-16
8+
9+
### Добавлено
10+
- Компонент Component для инициализации новых компонентов
11+
- Компонент Warning для отображения ошибок в компонентах
12+
13+
### Исправлено
14+
- Ошибки в компоненте Select
15+
- Ошибки операций деления в SASS файлах
16+
- Исправление мелких ошибок, рефакторинг кода
17+
18+
### Обновлено
19+
- Все компоненты переписаны с использованием ES6 классов
20+
- Компонент Form разделен на компоненты Select, Phone и Datepicker
21+
- Компоненты Date и Scrollable переименованы в Datepicker и Scrollbar
22+
- Обновлены вспомогательные функции для объектов и массивов
23+
- Обновление списка зависимостей и устранение уязвимостей
24+
25+
### Удалено
26+
- Компонент Form
27+
- Вспомогательные функции для jQuery компонентов
28+
529
[1.7.2]: https://github.com/digikid/gulp-project/releases/tag/1.7.2
630

731
## [1.7.2] - 2022-02-09
@@ -19,15 +43,15 @@
1943
### Добавлено
2044
- Создание ZIP-архивов при запуске задачи `abstract` (через параметр `config.abstract.zip`)
2145

46+
### Исправлено
47+
- Содержимое архива с исходными файлами больше не ограничено директорией `/src`
48+
- Исправление мелких ошибок
49+
2250
### Обновлено
2351
- Поддержка ECMAScript модулей включена по умолчанию
2452
- В качестве компилятора SASS используется sass вместо node-sass
2553
- Параметры для задачи `zip` вынесены в `config.zip`
2654

27-
### Исправлено
28-
- Содержимое архива с исходными файлами больше не ограничено директорией `/src`
29-
- Исправление мелких ошибок
30-
3155
### Удалено
3256
- Параметр `es6`
3357
- Устаревший модуль node-sass исключен из списка зависимостей
@@ -93,9 +117,11 @@
93117
### Исправлено
94118
- Перемещение пользовательских настроек в отдельный файл конфигурации
95119
- Оптимизация структуры проекта и рефакторинг кода
96-
- Обновление списка зависимостей и устранение уязвимостей
97120
- Удаление неиспользуемого кода, исправление мелких ошибок
98121

122+
### Обновлено
123+
- Обновление списка зависимостей и устранение уязвимостей
124+
99125
### Удалено
100126
- Минификация HTML файлов
101127
- Плагин jpegtran заменен на mozjpeg для лучшей компрессии изображений
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import $ from 'jquery';
2+
3+
import Warning from './warning';
4+
5+
import { isObject, mergeDeep } from '../utils/object';
6+
7+
export default class Component {
8+
constructor(title, defaults, ...args) {
9+
const [selector, params = {}] = args;
10+
11+
if (!this.check(args)) {
12+
return;
13+
};
14+
15+
const options = mergeDeep(defaults, params);
16+
17+
const target = this.getTarget(selector);
18+
19+
const warning = new Warning(title);
20+
21+
this.title = title;
22+
this.selector = selector;
23+
this.defaults = defaults;
24+
this.params = params;
25+
this.options = options;
26+
this.target = target;
27+
this.warning = warning;
28+
};
29+
30+
init(cb) {
31+
const { target, selector, options } = this;
32+
33+
if (typeof cb === 'function') {
34+
target.forEach(el => cb.call(this, el, options));
35+
};
36+
};
37+
38+
check(args) {
39+
const { warning } = this;
40+
41+
const [selector, params] = args;
42+
43+
const selectorTypes = [
44+
HTMLElement,
45+
$
46+
];
47+
48+
const isTypeValid = selectorTypes.reduce((acc, type) => {
49+
return acc && ((typeof selector === 'string') || NodeList.prototype.isPrototypeOf(selector) || (selector instanceof type));
50+
}, true);
51+
52+
if (!selector) {
53+
warning.show('Не определен селектор');
54+
55+
return;
56+
};
57+
58+
if (!isTypeValid) {
59+
warning.show('Неверный тип селектора');
60+
61+
return;
62+
};
63+
64+
if (params && !isObject(params)) {
65+
warning.show('Неверный формат параметров');
66+
67+
return;
68+
};
69+
70+
return true;
71+
};
72+
73+
validate(cb) {
74+
const { selector, params, warning } = this;
75+
76+
if (cb && typeof cb === 'function') {
77+
return cb.call({
78+
selector,
79+
params,
80+
warning
81+
});
82+
};
83+
};
84+
85+
getTarget(selector) {
86+
if (typeof selector === 'string') {
87+
return Array.from(document.querySelectorAll(selector));
88+
};
89+
90+
if (NodeList.prototype.isPrototypeOf(selector)) {
91+
return Array.from(selector);
92+
};
93+
94+
if (selector instanceof $) {
95+
return selector.get();
96+
};
97+
98+
if (selector instanceof HTMLElement) {
99+
return [selector];
100+
};
101+
};
102+
103+
parseDataSelector = id => {
104+
const { selector: s } = this;
105+
106+
const reg = /\[|\]|data-/gi;
107+
108+
if ((typeof s === 'string') && reg.test(s)) {
109+
const base = s.replace(reg, '');
110+
const attr = id ? `data-${base}-${id}` : `data-${base}`;
111+
const selector = `[${attr}]`;
112+
113+
return {
114+
base,
115+
attr,
116+
selector
117+
};
118+
} else {
119+
throw new Error('Невалидный селектор');
120+
};
121+
};
122+
123+
parseDataOptions = el => {
124+
const { parseDataSelector } = this;
125+
126+
const { attr } = parseDataSelector.call(this, 'options');
127+
128+
const str = $(el).attr(attr);
129+
130+
try {
131+
JSON.parse(str);
132+
} catch (e) {
133+
return {};
134+
};
135+
136+
return JSON.parse(str);
137+
};
138+
};
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import $ from 'jquery';
2+
import AirDatepicker from 'air-datepicker';
3+
4+
import Component from './component';
5+
6+
import { disable as disableScroll, enable as enableScroll } from '../utils/scroll';
7+
8+
const title = 'Datepicker';
9+
10+
const defaults = {
11+
autoClose: true,
12+
minDate: new Date()
13+
};
14+
15+
export default class extends Component {
16+
constructor(...args) {
17+
super(title, defaults, ...args);
18+
19+
this.init();
20+
};
21+
22+
init() {
23+
const { onShow, onHide } = this;
24+
25+
super.init((el, options) => {
26+
new AirDatepicker(el, {
27+
...options,
28+
onShow,
29+
onHide
30+
});
31+
});
32+
};
33+
34+
onShow(isFinished) {
35+
if (isFinished) {
36+
disableScroll();
37+
};
38+
};
39+
40+
onHide(isFinished) {
41+
if (isFinished) {
42+
enableScroll();
43+
};
44+
};
45+
};

gulp/boilerplate/js/jquery/plugins/fancybox.js renamed to gulp/boilerplate/js/components/fancybox.js

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import $ from 'jquery';
22
import { Fancybox } from '@fancyapps/ui';
33

4+
import Component from './component';
5+
6+
const title = 'Fancybox';
7+
48
const l10n = {
59
CLOSE: 'Закрыть',
610
NEXT: 'Вперед',
@@ -19,6 +23,7 @@ const defaults = {
1923
dragToClose: false,
2024
showClass: 'fancybox-fadeIn',
2125
hideClass: 'fancybox-fadeOut',
26+
closeSelector: '[data-close]',
2227
Thumbs: {
2328
Carousel: {
2429
Sync: {
@@ -37,21 +42,53 @@ const defaults = {
3742
l10n
3843
};
3944

40-
export default function(options = {}) {
41-
const settings = $.extend(true, {}, defaults, options);
42-
const selector = $(this).data('selector');
45+
export default class extends Component {
46+
constructor(...args) {
47+
super(title, defaults, ...args);
48+
49+
this.init();
50+
};
51+
52+
validate() {
53+
const { selector, warning } = this;
54+
55+
if (typeof selector !== 'string') {
56+
warning.show('Неверный тип селектора!');
57+
58+
return false;
59+
};
60+
61+
return true;
62+
};
63+
64+
init() {
65+
const { selector, options, close, validate } = this;
66+
const { closeSelector } = options;
67+
68+
if (!super.validate(validate)) {
69+
return;
70+
};
71+
72+
Fancybox.bind(selector, options);
4373

44-
const { closeSelector } = settings;
74+
if (closeSelector) {
75+
$(document).on('click', closeSelector, e => {
76+
e.preventDefault();
4577

46-
$.settings.fancybox = settings;
78+
close();
79+
});
80+
};
81+
};
4782

48-
Fancybox.bind(selector, settings);
83+
close = () => Fancybox.close();
4984

50-
$(closeSelector).click(e => {
51-
e.preventDefault();
85+
open = id => {
86+
const { close, options } = this;
5287

53-
Fancybox.close();
54-
});
88+
close();
5589

56-
return this;
90+
Fancybox.show([{
91+
src: `#modal-${id}`
92+
}], options);
93+
};
5794
};

0 commit comments

Comments
 (0)