@alexsab-ru/scripts 0.4.5 → 0.5.0
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/lib/analytics.js +7 -19
- package/lib/calltouch.js +23 -9
- package/lib/form.js +12 -7
- package/package.json +1 -1
package/lib/analytics.js
CHANGED
|
@@ -47,39 +47,27 @@ export function ymPage(pageName,goalParams) {
|
|
|
47
47
|
ym(me.id, "hit", pageName, goalParams||{})
|
|
48
48
|
})
|
|
49
49
|
} catch (err) {
|
|
50
|
-
console.error(
|
|
50
|
+
console.error(pageName + ' - error send page to Metrika');
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
export function
|
|
54
|
+
export function addClickCopyContextmenuGoals(item, prefix) {
|
|
55
55
|
item.addEventListener('click', function(evt) {
|
|
56
|
-
reachGoal('
|
|
56
|
+
reachGoal(prefix + '_click');
|
|
57
57
|
});
|
|
58
58
|
item.addEventListener('copy', function(evt) {
|
|
59
|
-
reachGoal('
|
|
59
|
+
reachGoal(prefix + '_copy');
|
|
60
60
|
});
|
|
61
61
|
item.addEventListener('contextmenu', function(evt) {
|
|
62
|
-
reachGoal('
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function addEmailGoals(item) {
|
|
67
|
-
item.addEventListener('click', function(evt) {
|
|
68
|
-
reachGoal('email_click');
|
|
69
|
-
});
|
|
70
|
-
item.addEventListener('copy', function(evt) {
|
|
71
|
-
reachGoal('email_copy');
|
|
72
|
-
});
|
|
73
|
-
item.addEventListener('contextmenu', function(evt) {
|
|
74
|
-
reachGoal('email_contextmenu');
|
|
62
|
+
reachGoal(prefix + '_contextmenu');
|
|
75
63
|
});
|
|
76
64
|
}
|
|
77
65
|
|
|
78
66
|
document.querySelectorAll('a[href^\="tel:"]').forEach((tel)=>{
|
|
79
|
-
|
|
67
|
+
addClickCopyContextmenuGoals(tel, "phone");
|
|
80
68
|
});
|
|
81
69
|
document.querySelectorAll('a[href^\="mailto:"]').forEach((tel)=>{
|
|
82
|
-
|
|
70
|
+
addClickCopyContextmenuGoals(tel, "email");
|
|
83
71
|
});
|
|
84
72
|
|
|
85
73
|
let goals = [
|
package/lib/calltouch.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export const createRequest = (routeKey, phoneValue, verbose = false) => {
|
|
2
|
-
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
let errorText = '';
|
|
3
4
|
if(window.ctw) {
|
|
4
5
|
window.ctw.getRouteKeyData(routeKey, function(success, data){
|
|
5
6
|
verbose && console.log(success, data);
|
|
@@ -27,34 +28,47 @@ export const createRequest = (routeKey, phoneValue, verbose = false) => {
|
|
|
27
28
|
function (success, data) {
|
|
28
29
|
verbose && console.log(success, data)
|
|
29
30
|
if (success) {
|
|
30
|
-
verbose && console.log('Создана заявка на колбек, идентификатор: ' + data.callbackRequestId)
|
|
31
|
+
verbose && console.log('Создана заявка на колбек, идентификатор: ' + data.callbackRequestId);
|
|
32
|
+
resolve(data); // Разрешаем Promise данными от createRequest
|
|
31
33
|
}
|
|
32
34
|
else {
|
|
35
|
+
errorText = 'Error in createRequest';
|
|
33
36
|
switch (data.type) {
|
|
34
37
|
case "request_throttle_timeout":
|
|
35
38
|
case "request_throttle_count":
|
|
36
|
-
|
|
39
|
+
errorText = 'Достигнут лимит создания заявок, попробуйте позже';
|
|
40
|
+
verbose && console.log(errorText);
|
|
37
41
|
break;
|
|
38
42
|
case "request_phone_blacklisted":
|
|
39
|
-
|
|
43
|
+
errorText = 'номер телефона находится в черном списке';
|
|
44
|
+
verbose && console.log(errorText);
|
|
40
45
|
break;
|
|
41
46
|
case "validation_error":
|
|
42
|
-
|
|
47
|
+
errorText = 'были переданы некорректные данные';
|
|
48
|
+
verbose && console.log(errorText);
|
|
43
49
|
break;
|
|
44
50
|
default:
|
|
45
|
-
|
|
51
|
+
errorText = 'Во время выполнения запроса произошла ошибка: ' + data.type;
|
|
52
|
+
verbose && console.log(errorText);
|
|
46
53
|
}
|
|
54
|
+
reject(errorText); // Отклоняем Promise в случае ошибки
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
);
|
|
50
58
|
} else {
|
|
51
|
-
|
|
59
|
+
errorText = 'не найден включенный виджет '+routeKey+', либо услуга обратного звонка не активна';
|
|
60
|
+
verbose && console.log(errorText);
|
|
61
|
+
reject(errorText);
|
|
52
62
|
}
|
|
53
63
|
} else {
|
|
54
|
-
|
|
64
|
+
errorText = 'во время обработки произошла ошибка';
|
|
65
|
+
verbose && console.log(errorText);
|
|
55
66
|
verbose && console.log(data)
|
|
67
|
+
reject(errorText);
|
|
56
68
|
}
|
|
57
69
|
});
|
|
70
|
+
} else {
|
|
71
|
+
reject("window.ctw is not defined");
|
|
58
72
|
}
|
|
59
|
-
|
|
73
|
+
});
|
|
60
74
|
};
|
package/lib/form.js
CHANGED
|
@@ -153,17 +153,14 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
153
153
|
// Отпрвка цели что форма submit только после всех проверок
|
|
154
154
|
reachGoal("form_submit");
|
|
155
155
|
|
|
156
|
-
// Отправка заявки на обратный возов в CallTouch
|
|
157
|
-
createRequest(ct_routeKey, phone.value, verbose);
|
|
158
|
-
|
|
159
156
|
let formData = new FormData(form);
|
|
160
157
|
if(getCookie('fta')) {
|
|
161
158
|
formData.append("fta", true);
|
|
162
159
|
}
|
|
163
160
|
if(getCookie('__gtm_campaign_url')) {
|
|
164
|
-
|
|
161
|
+
let source = new URL(getCookie('__gtm_campaign_url'));
|
|
165
162
|
source.search.slice(1).split("&").forEach(function(pair) {
|
|
166
|
-
|
|
163
|
+
let param = pair.split("=");
|
|
167
164
|
formData.append(param[0], param[1]);
|
|
168
165
|
});
|
|
169
166
|
}
|
|
@@ -180,7 +177,7 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
180
177
|
.slice(1)
|
|
181
178
|
.split("&")
|
|
182
179
|
.forEach(function (pair) {
|
|
183
|
-
|
|
180
|
+
let param = pair.split("=");
|
|
184
181
|
if(formData.get(param[0])){
|
|
185
182
|
formData.set(param[0], decodeURIComponent(param[1]));
|
|
186
183
|
} else {
|
|
@@ -189,7 +186,15 @@ document.querySelectorAll("form").forEach((form) => {
|
|
|
189
186
|
});
|
|
190
187
|
|
|
191
188
|
const params = new URLSearchParams([...formData]);
|
|
192
|
-
|
|
189
|
+
|
|
190
|
+
let formDataObj = {};
|
|
191
|
+
try {
|
|
192
|
+
// Отправка заявки на обратный возов в CallTouch
|
|
193
|
+
const requestData = await createRequest(ct_routeKey, phone.value, verbose);
|
|
194
|
+
} catch (error) {
|
|
195
|
+
verbose && console.error("Error during request Calltouch callback:", error);
|
|
196
|
+
formDataObj = getFormDataObject(formData, form.id);
|
|
197
|
+
}
|
|
193
198
|
|
|
194
199
|
await fetch(url, {
|
|
195
200
|
method: "POST",
|