@textback/notification-widget 2.0.2 → 2.0.4-110500
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/.eslintrc.js +291 -291
- package/.gitlab-ci.yml +34 -0
- package/build/index.js +3 -3
- package/build/sdk.js +2 -2
- package/package.json +70 -70
- package/promote_tag.sh +1 -1
- package/readme.md +569 -569
- package/src/libraries/ai.1.0.11.js +4088 -4088
- package/src/libraries/localization/locales/index.js +8 -8
- package/src/libraries/localization/text.js +9 -9
- package/src/libraries/t.js +82 -82
- package/src/sdk/channels/channel.js +30 -30
- package/src/sdk/channels/facebook.js +13 -13
- package/src/sdk/channels/skype.js +12 -12
- package/src/sdk/channels/telegram.js +18 -18
- package/src/sdk/channels/viber.js +12 -12
- package/src/sdk/channels/vk-modal/vk-modal.html +17 -17
- package/src/sdk/channels/vk-modal/vk-modal.js +25 -25
- package/src/sdk/channels/vk-modal/vk-modal.scss +116 -116
- package/src/sdk/channels/vk.js +195 -195
- package/src/sdk/events/observer.js +46 -46
- package/src/sdk/index.js +5 -5
- package/src/sdk/sdk.js +67 -67
- package/src/sdk/utils/apiErrorHandler.js +11 -11
- package/src/sdk/utils/appInsights.js +88 -88
- package/src/sdk/utils/browserInfo.js +8 -8
- package/src/sdk/utils/constants.js +17 -17
- package/src/sdk/utils/cookies.js +67 -67
- package/src/sdk/utils/find.js +7 -7
- package/src/sdk/utils/loadConfig.js +20 -20
- package/src/sdk/utils/loadDeepLink.js +48 -48
- package/src/sdk/utils/loadScript.js +25 -25
- package/src/sdk/utils/loadSubscriptions.js +6 -6
- package/src/sdk/utils/parseQueryString.js +33 -33
- package/src/sdk/utils/windowHelper.js +25 -25
- package/src/sdk/widget/widget.js +192 -192
- package/src/widget/components/tb-notification-button/index.js +34 -34
- package/src/widget/components/tb-notification-button/styles.scss +657 -657
- package/src/widget/components/tb-notification-widget/index.js +24 -8
- package/src/widget/components/tb-notification-widget/normalize.scss +395 -395
- package/src/widget/components/tb-nw-wahunter/index.js +6 -4
- package/src/widget/components/tb-nw-wahunter/styles.scss +471 -471
- package/src/widget/config.js +5 -5
- package/src/widget/icons/icon_chat_window.svg +1 -1
- package/src/widget/icons/icon_close.svg +1 -1
- package/src/widget/icons/icon_facebook.svg +7 -7
- package/src/widget/icons/icon_facebook_circle.svg +7 -7
- package/src/widget/icons/icon_instagram_circle.svg +95 -95
- package/src/widget/icons/icon_skype.svg +44 -44
- package/src/widget/icons/icon_skype_circle.svg +46 -46
- package/src/widget/icons/icon_skype_new.svg +113 -113
- package/src/widget/icons/icon_tg.svg +25 -25
- package/src/widget/icons/icon_tg_circle.svg +17 -17
- package/src/widget/icons/icon_viber.svg +75 -75
- package/src/widget/icons/icon_viber_circle.svg +67 -67
- package/src/widget/icons/icon_viber_new.svg +102 -102
- package/src/widget/icons/icon_vk.svg +14 -14
- package/src/widget/icons/icon_vk_circle.svg +16 -16
- package/src/widget/icons/icon_whatsapp.svg +147 -147
- package/src/widget/icons/icon_whatsapp_circle.svg +3 -3
- package/src/widget/icons/icon_whatsapp_new.svg +127 -127
- package/src/widget/icons/icon_whatsappb.svg +147 -147
- package/src/widget/icons/icon_whatsappb_circle.svg +3 -3
- package/src/widget/icons/icon_whatsappb_new.svg +127 -127
- package/src/widget/icons/paper-plane-arrow.svg +3 -3
- package/src/widget/icons/tb-logo-dark-en.svg +17 -0
- package/src/widget/icons/tb-logo-dark-ru.svg +17 -0
- package/src/widget/icons/tb-logo-dark.svg +16 -0
- package/src/widget/icons/tb-logo-light-en.svg +17 -0
- package/src/widget/icons/tb-logo-light-ru.svg +17 -0
- package/src/widget/icons/tb-logo-white.svg +16 -0
- package/src/widget/icons/tb-logo.svg +16 -21
- package/src/widget/index.js +28 -28
- package/src/widget/locales/cs.js +42 -42
- package/src/widget/locales/en.js +42 -42
- package/src/widget/locales/ro.js +41 -41
- package/src/widget/utils/cookiesEx.js +41 -41
- package/src/widget/utils/stringifyAttributes.js +19 -19
- package/src/widget/utils/widgetsStorage.js +28 -28
- package/src/widget/widget.entry.js +3 -3
- package/tests/gf.html +35 -35
- package/tests/gf.js +21 -21
- package/tests/index.js +61 -61
- package/views/sdk.html +274 -274
- package/webpack.common.js +72 -72
- package/webpack.dev.js +15 -15
- package/webpack.prod.js +10 -10
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/notificationwidget.iml +0 -9
- package/.idea/vcs.xml +0 -6
package/src/widget/index.js
CHANGED
@@ -1,29 +1,29 @@
|
|
1
|
-
import Widget from './components/tb-notification-widget/index.js';
|
2
|
-
const locales = require('./locales');
|
3
|
-
|
4
|
-
Widget.locales = locales;
|
5
|
-
Widget.VERSION = VERSION; // provided by webpack
|
6
|
-
|
7
|
-
function initializeWidgets() {
|
8
|
-
const widgetElements = document.getElementsByTagName(Widget.tagName);
|
9
|
-
|
10
|
-
if (widgetElements) {
|
11
|
-
for (let i = 0; i < widgetElements.length; i++) {
|
12
|
-
new Widget({
|
13
|
-
element: widgetElements[i]
|
14
|
-
});
|
15
|
-
}
|
16
|
-
}
|
17
|
-
}
|
18
|
-
|
19
|
-
if (!window.TextBack.NotificationWidget) {
|
20
|
-
if (document.readyState === 'loading') {
|
21
|
-
document.addEventListener('DOMContentLoaded', initializeWidgets);
|
22
|
-
} else {
|
23
|
-
initializeWidgets();
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
|
28
|
-
|
1
|
+
import Widget from './components/tb-notification-widget/index.js';
|
2
|
+
const locales = require('./locales');
|
3
|
+
|
4
|
+
Widget.locales = locales;
|
5
|
+
Widget.VERSION = VERSION; // provided by webpack
|
6
|
+
|
7
|
+
function initializeWidgets() {
|
8
|
+
const widgetElements = document.getElementsByTagName(Widget.tagName);
|
9
|
+
|
10
|
+
if (widgetElements) {
|
11
|
+
for (let i = 0; i < widgetElements.length; i++) {
|
12
|
+
new Widget({
|
13
|
+
element: widgetElements[i]
|
14
|
+
});
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
if (!window.TextBack.NotificationWidget) {
|
20
|
+
if (document.readyState === 'loading') {
|
21
|
+
document.addEventListener('DOMContentLoaded', initializeWidgets);
|
22
|
+
} else {
|
23
|
+
initializeWidgets();
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
|
29
29
|
export default Widget;
|
package/src/widget/locales/cs.js
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
-
module.exports = {
|
2
|
-
|
3
|
-
//пояснения к переводу смотри в en.js
|
4
|
-
|
5
|
-
|
6
|
-
//виджет подписок
|
7
|
-
facebook: "Facebook",
|
8
|
-
facebookExtended: "Přihlaste se k Facebook",
|
9
|
-
telegram: "Telegram",
|
10
|
-
telegramExtended: "Přihlásit se k Telegram",
|
11
|
-
viber: "Viber",
|
12
|
-
viberExtended: "Přihlásit se k Viber",
|
13
|
-
vkontakte: "VK",
|
14
|
-
vkontakteExtended: "Přihlásit se k VK",
|
15
|
-
whatsapp: "WhatsApp",
|
16
|
-
whatsappExtended: "Přihlásit se k WhatsApp",
|
17
|
-
whatsappb: "WhatsApp",
|
18
|
-
whatsappbExtended: "Přihlásit se k WhatsApp",
|
19
|
-
|
20
|
-
vkontakteLogin: "VK Login",
|
21
|
-
singVK: "Poslat přes VK",
|
22
|
-
|
23
|
-
//double check в рассылке
|
24
|
-
facebookTip: "Tap <strong>Get started</strong><br/>in Messenger",
|
25
|
-
telegramTip: "Tap <strong>Start</strong></br>in Telegram",
|
26
|
-
viberTip: "<strong>Viber Desktop App</strong></br>should be installed on your PC",
|
27
|
-
vkontakteTip: "Press <strong>Allow messages</strong><br/>in a popup window",
|
28
|
-
whatsappTip: "<strong>Send generated text</strong><br/>to WhatsApp",
|
29
|
-
|
30
|
-
//WhatsApp Hunter
|
31
|
-
getAnswer: "Získejte odpověď na ",
|
32
|
-
enterNumber: "Zadejte své číslo",
|
33
|
-
sendMessage: "Odesíláme zprávu za 3-2-1 s",
|
34
|
-
answerSuccessful: "Odpověděli jsme vám na WhatsApp.<br>Zkontrolujte telefon",
|
35
|
-
numberNotFound: "V WhatsApp není takové číslo.<br>Jste z Marsu?🤔",
|
36
|
-
tryAgain: "Zadejte jiné číslo",
|
37
|
-
somethingWentWrong: "Jejda! Něco se pokazilo",
|
38
|
-
errorTryAgain: "Zkus to znovu",
|
39
|
-
|
40
|
-
//логотип
|
41
|
-
worksFor: "Works on"
|
42
|
-
};
|
1
|
+
module.exports = {
|
2
|
+
|
3
|
+
//пояснения к переводу смотри в en.js
|
4
|
+
|
5
|
+
|
6
|
+
//виджет подписок
|
7
|
+
facebook: "Facebook",
|
8
|
+
facebookExtended: "Přihlaste se k Facebook",
|
9
|
+
telegram: "Telegram",
|
10
|
+
telegramExtended: "Přihlásit se k Telegram",
|
11
|
+
viber: "Viber",
|
12
|
+
viberExtended: "Přihlásit se k Viber",
|
13
|
+
vkontakte: "VK",
|
14
|
+
vkontakteExtended: "Přihlásit se k VK",
|
15
|
+
whatsapp: "WhatsApp",
|
16
|
+
whatsappExtended: "Přihlásit se k WhatsApp",
|
17
|
+
whatsappb: "WhatsApp",
|
18
|
+
whatsappbExtended: "Přihlásit se k WhatsApp",
|
19
|
+
|
20
|
+
vkontakteLogin: "VK Login",
|
21
|
+
singVK: "Poslat přes VK",
|
22
|
+
|
23
|
+
//double check в рассылке
|
24
|
+
facebookTip: "Tap <strong>Get started</strong><br/>in Messenger",
|
25
|
+
telegramTip: "Tap <strong>Start</strong></br>in Telegram",
|
26
|
+
viberTip: "<strong>Viber Desktop App</strong></br>should be installed on your PC",
|
27
|
+
vkontakteTip: "Press <strong>Allow messages</strong><br/>in a popup window",
|
28
|
+
whatsappTip: "<strong>Send generated text</strong><br/>to WhatsApp",
|
29
|
+
|
30
|
+
//WhatsApp Hunter
|
31
|
+
getAnswer: "Získejte odpověď na ",
|
32
|
+
enterNumber: "Zadejte své číslo",
|
33
|
+
sendMessage: "Odesíláme zprávu za 3-2-1 s",
|
34
|
+
answerSuccessful: "Odpověděli jsme vám na WhatsApp.<br>Zkontrolujte telefon",
|
35
|
+
numberNotFound: "V WhatsApp není takové číslo.<br>Jste z Marsu?🤔",
|
36
|
+
tryAgain: "Zadejte jiné číslo",
|
37
|
+
somethingWentWrong: "Jejda! Něco se pokazilo",
|
38
|
+
errorTryAgain: "Zkus to znovu",
|
39
|
+
|
40
|
+
//логотип
|
41
|
+
worksFor: "Works on"
|
42
|
+
};
|
package/src/widget/locales/en.js
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
-
module.exports = {
|
2
|
-
|
3
|
-
//виджет подписок
|
4
|
-
facebook: "Facebook", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
5
|
-
facebookExtended: "Subscribe to Facebook", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
6
|
-
telegram: "Telegram", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
7
|
-
telegramExtended: "Subscribe to Telegram", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
8
|
-
viber: "Viber", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
9
|
-
viberExtended: "Subscribe to Viber", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
10
|
-
vkontakte: "VK", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" и "попап".
|
11
|
-
vkontakteExtended: "Subscribe to VK", //если выбран лендинг ВК и вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
12
|
-
whatsapp: "WhatsApp", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
13
|
-
whatsappExtended: "Subscribe to WhatsApp", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
14
|
-
whatsappb: "WhatsApp", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
15
|
-
whatsappbExtended: "Subscribe to WhatsApp", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
16
|
-
|
17
|
-
//NB: если не использовать лендинг ВК, то при выборе прямоугольных кнопок или попапа используется нативная кнопка, перевод которой пока не реализован
|
18
|
-
|
19
|
-
//эти переводы временно не используются
|
20
|
-
vkontakteLogin: "VK Sing In",
|
21
|
-
singVK: "Send to VK",
|
22
|
-
|
23
|
-
//double check в рассылке - это обычный виджет с вариантом показа "Скругленные кнопки"
|
24
|
-
facebookTip: "Tap <strong>Get started</strong><br/>in Messenger",
|
25
|
-
telegramTip: "Tap <strong>Start</strong></br>in Telegram",
|
26
|
-
viberTip: "<strong>Viber Desktop App</strong></br>should be installed on your PC",
|
27
|
-
vkontakteTip: "Press <strong>Allow messages</strong><br/>in a popup window",
|
28
|
-
whatsappTip: "<strong>Send generated text</strong><br/>to WhatsApp",
|
29
|
-
|
30
|
-
//WhatsApp Hunter
|
31
|
-
getAnswer: "Get an answer in ", //согласие на получение сообщений
|
32
|
-
enterNumber: "Enter your phone number", //placeholder в инпуте
|
33
|
-
sendMessage: "We'll send a message in 3-2-1 sec", //В процессе отправки сообщения
|
34
|
-
answerSuccessful: "We've answered you in WhatsApp. <br> Check your phone", //После успешной отправки
|
35
|
-
numberNotFound: "There is no such user in WhatsApp. <br> Are you from Mars?🤔", //Ошибка, формат номера некорректный
|
36
|
-
tryAgain: "Try another number", //Повтор ввода, если номер не найден
|
37
|
-
somethingWentWrong: "Oops! Something went wrong", //на 500 при отправке сообщения (например, канал не подключен)
|
38
|
-
errorTryAgain: "Try again", //Повтор ввода при ошибки 500
|
39
|
-
|
40
|
-
//логотип
|
41
|
-
worksFor: "Works on",
|
42
|
-
};
|
1
|
+
module.exports = {
|
2
|
+
|
3
|
+
//виджет подписок
|
4
|
+
facebook: "Facebook", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
5
|
+
facebookExtended: "Subscribe to Facebook", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
6
|
+
telegram: "Telegram", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
7
|
+
telegramExtended: "Subscribe to Telegram", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
8
|
+
viber: "Viber", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
9
|
+
viberExtended: "Subscribe to Viber", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
10
|
+
vkontakte: "VK", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" и "попап".
|
11
|
+
vkontakteExtended: "Subscribe to VK", //если выбран лендинг ВК и вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
12
|
+
whatsapp: "WhatsApp", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
13
|
+
whatsappExtended: "Subscribe to WhatsApp", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
14
|
+
whatsappb: "WhatsApp", //для всех кнопок, кроме варианта показа "Прямоугольные кнопки" или "Всплывающее окно"
|
15
|
+
whatsappbExtended: "Subscribe to WhatsApp", //если выбран вариант показа "Прямоугольные кнопки" или "Всплывающее окно"
|
16
|
+
|
17
|
+
//NB: если не использовать лендинг ВК, то при выборе прямоугольных кнопок или попапа используется нативная кнопка, перевод которой пока не реализован
|
18
|
+
|
19
|
+
//эти переводы временно не используются
|
20
|
+
vkontakteLogin: "VK Sing In",
|
21
|
+
singVK: "Send to VK",
|
22
|
+
|
23
|
+
//double check в рассылке - это обычный виджет с вариантом показа "Скругленные кнопки"
|
24
|
+
facebookTip: "Tap <strong>Get started</strong><br/>in Messenger",
|
25
|
+
telegramTip: "Tap <strong>Start</strong></br>in Telegram",
|
26
|
+
viberTip: "<strong>Viber Desktop App</strong></br>should be installed on your PC",
|
27
|
+
vkontakteTip: "Press <strong>Allow messages</strong><br/>in a popup window",
|
28
|
+
whatsappTip: "<strong>Send generated text</strong><br/>to WhatsApp",
|
29
|
+
|
30
|
+
//WhatsApp Hunter
|
31
|
+
getAnswer: "Get an answer in ", //согласие на получение сообщений
|
32
|
+
enterNumber: "Enter your phone number", //placeholder в инпуте
|
33
|
+
sendMessage: "We'll send a message in 3-2-1 sec", //В процессе отправки сообщения
|
34
|
+
answerSuccessful: "We've answered you in WhatsApp. <br> Check your phone", //После успешной отправки
|
35
|
+
numberNotFound: "There is no such user in WhatsApp. <br> Are you from Mars?🤔", //Ошибка, формат номера некорректный
|
36
|
+
tryAgain: "Try another number", //Повтор ввода, если номер не найден
|
37
|
+
somethingWentWrong: "Oops! Something went wrong", //на 500 при отправке сообщения (например, канал не подключен)
|
38
|
+
errorTryAgain: "Try again", //Повтор ввода при ошибки 500
|
39
|
+
|
40
|
+
//логотип
|
41
|
+
worksFor: "Works on",
|
42
|
+
};
|
package/src/widget/locales/ro.js
CHANGED
@@ -1,41 +1,41 @@
|
|
1
|
-
module.exports = {
|
2
|
-
|
3
|
-
//пояснения к переводу смотри в en.js
|
4
|
-
|
5
|
-
//виджет подписок
|
6
|
-
facebook: "Facebook",
|
7
|
-
facebookExtended: "Abonați-vă la Facebook",
|
8
|
-
telegram: "Telegram",
|
9
|
-
telegramExtended: "Abonați-vă la Telegram",
|
10
|
-
viber: "Viber",
|
11
|
-
viberExtended: "Abonați-vă la Viber",
|
12
|
-
vkontakte: "VK",
|
13
|
-
vkontakteExtended: "Abonați-vă la VK",
|
14
|
-
whatsapp: "WhatsApp",
|
15
|
-
whatsappExtended: "Abonați-vă la WhatsApp",
|
16
|
-
whatsappb: "WhatsApp",
|
17
|
-
whatsappbExtended: "Abonați-vă la WhatsApp",
|
18
|
-
|
19
|
-
vkontakteLogin: "VK Login",
|
20
|
-
singVK: "Abonează-te VK",
|
21
|
-
|
22
|
-
//double check в рассылке
|
23
|
-
facebookTip: "Tap <strong>Get started</strong><br/>in Messenger",
|
24
|
-
telegramTip: "Tap <strong>Start</strong></br>in Telegram",
|
25
|
-
viberTip: "<strong>Viber Desktop App</strong></br>should be installed on your PC",
|
26
|
-
vkontakteTip: "Press <strong>Allow messages</strong><br/>in a popup window",
|
27
|
-
whatsappTip: "<strong>Send generated text</strong><br/>to WhatsApp",
|
28
|
-
|
29
|
-
//WhatsApp Hunter
|
30
|
-
getAnswer: "Primește răspuns în ",
|
31
|
-
enterNumber: "Introdu numarul tau",
|
32
|
-
sendMessage: "Trimitem un mesaj în 3-2-1 sec",
|
33
|
-
answerSuccessful: "V-am răspuns pe WhatsApp.<br>Verifică-ți telefonul",
|
34
|
-
numberNotFound: "Nu există un astfel de număr în WhatsApp.<br>Sunteți de pe Marte?🤔",
|
35
|
-
tryAgain: "Specificați un alt număr",
|
36
|
-
somethingWentWrong: "Hopa! Ceva n-a mers bine",
|
37
|
-
errorTryAgain: "Să mai încerc o dată",
|
38
|
-
|
39
|
-
//логотип
|
40
|
-
worksFor: "Works on"
|
41
|
-
};
|
1
|
+
module.exports = {
|
2
|
+
|
3
|
+
//пояснения к переводу смотри в en.js
|
4
|
+
|
5
|
+
//виджет подписок
|
6
|
+
facebook: "Facebook",
|
7
|
+
facebookExtended: "Abonați-vă la Facebook",
|
8
|
+
telegram: "Telegram",
|
9
|
+
telegramExtended: "Abonați-vă la Telegram",
|
10
|
+
viber: "Viber",
|
11
|
+
viberExtended: "Abonați-vă la Viber",
|
12
|
+
vkontakte: "VK",
|
13
|
+
vkontakteExtended: "Abonați-vă la VK",
|
14
|
+
whatsapp: "WhatsApp",
|
15
|
+
whatsappExtended: "Abonați-vă la WhatsApp",
|
16
|
+
whatsappb: "WhatsApp",
|
17
|
+
whatsappbExtended: "Abonați-vă la WhatsApp",
|
18
|
+
|
19
|
+
vkontakteLogin: "VK Login",
|
20
|
+
singVK: "Abonează-te VK",
|
21
|
+
|
22
|
+
//double check в рассылке
|
23
|
+
facebookTip: "Tap <strong>Get started</strong><br/>in Messenger",
|
24
|
+
telegramTip: "Tap <strong>Start</strong></br>in Telegram",
|
25
|
+
viberTip: "<strong>Viber Desktop App</strong></br>should be installed on your PC",
|
26
|
+
vkontakteTip: "Press <strong>Allow messages</strong><br/>in a popup window",
|
27
|
+
whatsappTip: "<strong>Send generated text</strong><br/>to WhatsApp",
|
28
|
+
|
29
|
+
//WhatsApp Hunter
|
30
|
+
getAnswer: "Primește răspuns în ",
|
31
|
+
enterNumber: "Introdu numarul tau",
|
32
|
+
sendMessage: "Trimitem un mesaj în 3-2-1 sec",
|
33
|
+
answerSuccessful: "V-am răspuns pe WhatsApp.<br>Verifică-ți telefonul",
|
34
|
+
numberNotFound: "Nu există un astfel de număr în WhatsApp.<br>Sunteți de pe Marte?🤔",
|
35
|
+
tryAgain: "Specificați un alt număr",
|
36
|
+
somethingWentWrong: "Hopa! Ceva n-a mers bine",
|
37
|
+
errorTryAgain: "Să mai încerc o dată",
|
38
|
+
|
39
|
+
//логотип
|
40
|
+
worksFor: "Works on"
|
41
|
+
};
|
@@ -1,41 +1,41 @@
|
|
1
|
-
// const cookies = require('./cookies');
|
2
|
-
import cookies from '../../sdk/utils/cookies.js';
|
3
|
-
|
4
|
-
/**
|
5
|
-
*
|
6
|
-
* @extends cookies
|
7
|
-
*/
|
8
|
-
const cookiesEx = Object.create(cookies);
|
9
|
-
|
10
|
-
/**
|
11
|
-
*
|
12
|
-
* @param name {string}
|
13
|
-
* @returns {Number}
|
14
|
-
*/
|
15
|
-
cookiesEx.getIntCookie = function (name) {
|
16
|
-
return parseInt(this.getCookie(name));
|
17
|
-
};
|
18
|
-
|
19
|
-
/**
|
20
|
-
*
|
21
|
-
* @param name {string}
|
22
|
-
* @returns {boolean}
|
23
|
-
*/
|
24
|
-
cookiesEx.getBoolCookie = function (name) {
|
25
|
-
return (this.getCookie(name)) === 'true';
|
26
|
-
};
|
27
|
-
/**
|
28
|
-
*
|
29
|
-
* @param name {string}
|
30
|
-
* @param timeToLive {number}
|
31
|
-
* @returns {number}
|
32
|
-
*/
|
33
|
-
cookiesEx.incrementIntCookie = function (name, timeToLive) {
|
34
|
-
let val = this.getIntCookie(name) || 0;
|
35
|
-
val++;
|
36
|
-
this.setCookie(name, val, timeToLive);
|
37
|
-
|
38
|
-
return val;
|
39
|
-
};
|
40
|
-
|
41
|
-
export default cookiesEx;
|
1
|
+
// const cookies = require('./cookies');
|
2
|
+
import cookies from '../../sdk/utils/cookies.js';
|
3
|
+
|
4
|
+
/**
|
5
|
+
*
|
6
|
+
* @extends cookies
|
7
|
+
*/
|
8
|
+
const cookiesEx = Object.create(cookies);
|
9
|
+
|
10
|
+
/**
|
11
|
+
*
|
12
|
+
* @param name {string}
|
13
|
+
* @returns {Number}
|
14
|
+
*/
|
15
|
+
cookiesEx.getIntCookie = function (name) {
|
16
|
+
return parseInt(this.getCookie(name));
|
17
|
+
};
|
18
|
+
|
19
|
+
/**
|
20
|
+
*
|
21
|
+
* @param name {string}
|
22
|
+
* @returns {boolean}
|
23
|
+
*/
|
24
|
+
cookiesEx.getBoolCookie = function (name) {
|
25
|
+
return (this.getCookie(name)) === 'true';
|
26
|
+
};
|
27
|
+
/**
|
28
|
+
*
|
29
|
+
* @param name {string}
|
30
|
+
* @param timeToLive {number}
|
31
|
+
* @returns {number}
|
32
|
+
*/
|
33
|
+
cookiesEx.incrementIntCookie = function (name, timeToLive) {
|
34
|
+
let val = this.getIntCookie(name) || 0;
|
35
|
+
val++;
|
36
|
+
this.setCookie(name, val, timeToLive);
|
37
|
+
|
38
|
+
return val;
|
39
|
+
};
|
40
|
+
|
41
|
+
export default cookiesEx;
|
@@ -1,19 +1,19 @@
|
|
1
|
-
function stringifyAttributes(attributesMap = {}) {
|
2
|
-
return Object.keys(attributesMap)
|
3
|
-
.map(key => {
|
4
|
-
let value = attributesMap[key];
|
5
|
-
|
6
|
-
if (value === null || typeof value === 'undefined') {
|
7
|
-
return ''
|
8
|
-
}
|
9
|
-
|
10
|
-
if (typeof value === 'object') {
|
11
|
-
value = JSON.stringify(value)
|
12
|
-
}
|
13
|
-
|
14
|
-
return `${key}='${value}'`
|
15
|
-
})
|
16
|
-
.join(' ');
|
17
|
-
}
|
18
|
-
|
19
|
-
export default stringifyAttributes;
|
1
|
+
function stringifyAttributes(attributesMap = {}) {
|
2
|
+
return Object.keys(attributesMap)
|
3
|
+
.map(key => {
|
4
|
+
let value = attributesMap[key];
|
5
|
+
|
6
|
+
if (value === null || typeof value === 'undefined') {
|
7
|
+
return ''
|
8
|
+
}
|
9
|
+
|
10
|
+
if (typeof value === 'object') {
|
11
|
+
value = JSON.stringify(value)
|
12
|
+
}
|
13
|
+
|
14
|
+
return `${key}='${value}'`
|
15
|
+
})
|
16
|
+
.join(' ');
|
17
|
+
}
|
18
|
+
|
19
|
+
export default stringifyAttributes;
|
@@ -1,28 +1,28 @@
|
|
1
|
-
const storage = {};
|
2
|
-
|
3
|
-
function setWidget(widgetId, widgetPromise) {
|
4
|
-
storage[widgetId] = storage[widgetId] || {};
|
5
|
-
storage[widgetId].promise = widgetPromise;
|
6
|
-
}
|
7
|
-
|
8
|
-
function getWidget(widgetId) {
|
9
|
-
return storage[widgetId] ? storage[widgetId].promise : null;
|
10
|
-
}
|
11
|
-
|
12
|
-
function setVkHandler(widgetId, handler) {
|
13
|
-
storage[widgetId] = storage[widgetId] || {};
|
14
|
-
storage[widgetId].vkHandler = handler;
|
15
|
-
}
|
16
|
-
|
17
|
-
function getVkHandler(widgetId) {
|
18
|
-
return storage[widgetId] ? storage[widgetId].vkHandler : null;
|
19
|
-
}
|
20
|
-
|
21
|
-
const widgetsStorage = {
|
22
|
-
setWidget,
|
23
|
-
getWidget,
|
24
|
-
setVkHandler,
|
25
|
-
getVkHandler,
|
26
|
-
};
|
27
|
-
|
28
|
-
export default widgetsStorage;
|
1
|
+
const storage = {};
|
2
|
+
|
3
|
+
function setWidget(widgetId, widgetPromise) {
|
4
|
+
storage[widgetId] = storage[widgetId] || {};
|
5
|
+
storage[widgetId].promise = widgetPromise;
|
6
|
+
}
|
7
|
+
|
8
|
+
function getWidget(widgetId) {
|
9
|
+
return storage[widgetId] ? storage[widgetId].promise : null;
|
10
|
+
}
|
11
|
+
|
12
|
+
function setVkHandler(widgetId, handler) {
|
13
|
+
storage[widgetId] = storage[widgetId] || {};
|
14
|
+
storage[widgetId].vkHandler = handler;
|
15
|
+
}
|
16
|
+
|
17
|
+
function getVkHandler(widgetId) {
|
18
|
+
return storage[widgetId] ? storage[widgetId].vkHandler : null;
|
19
|
+
}
|
20
|
+
|
21
|
+
const widgetsStorage = {
|
22
|
+
setWidget,
|
23
|
+
getWidget,
|
24
|
+
setVkHandler,
|
25
|
+
getVkHandler,
|
26
|
+
};
|
27
|
+
|
28
|
+
export default widgetsStorage;
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import NotificationWidget from './index.js';
|
2
|
-
|
3
|
-
window.TextBack.NotificationWidget = window.TextBack.NotificationWidget || NotificationWidget;
|
1
|
+
import NotificationWidget from './index.js';
|
2
|
+
|
3
|
+
window.TextBack.NotificationWidget = window.TextBack.NotificationWidget || NotificationWidget;
|
package/tests/gf.html
CHANGED
@@ -1,35 +1,35 @@
|
|
1
|
-
<html lang="en">
|
2
|
-
<head>
|
3
|
-
<meta charset="UTF-8">
|
4
|
-
<title>example</title>
|
5
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui-css/semantic.min.css">
|
6
|
-
<script src="//cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
|
7
|
-
<script src="//cdn.polyfill.io/v2/polyfill.min.js?features=default,fetch,Promise"></script>
|
8
|
-
<script src="/build/index.js"></script>
|
9
|
-
<script>
|
10
|
-
var _fetch = window.fetch;
|
11
|
-
|
12
|
-
window.fetch = function(url, options) {
|
13
|
-
window.fetch.calls.push({url: url, options: options});
|
14
|
-
return _fetch(url, options);
|
15
|
-
}
|
16
|
-
|
17
|
-
window.fetch.calls = [];
|
18
|
-
</script>
|
19
|
-
</head>
|
20
|
-
<body>
|
21
|
-
<tb-notification-widget
|
22
|
-
secure-context-token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmRlcklkIjoiNDU2OCIsImlhdCI6MTQ5MTMzMzM0OCwiZXhwIjoxNDkyMTk3MzQ4LCJpc3MiOiJlZTlhZTMwYi1jYzRhLTRlNTctYWM1Mi05ZmYwOTEyMmRkODEiLCJzdWIiOiIxMjM0NSJ9._3FnsIV0atJ9F8_vmDZlzz5S0Qo6-tn7GP597Rxphm8="
|
23
|
-
widget-id="59f3dfaf-935f-4f0f-98b3-02a51abd0c7c"
|
24
|
-
api-path="https://api.textback.io/api"
|
25
|
-
data-insecure-order-id="">
|
26
|
-
</tb-notification-widget>
|
27
|
-
<script>
|
28
|
-
setTimeout(function() {
|
29
|
-
var widgetElement = $('tb-notification-widget').get(0);
|
30
|
-
widgetElement.dataset.insecureOrderId = 'testId';
|
31
|
-
new TextBack.NotificationWidget({element: widgetElement});
|
32
|
-
}, 2000);
|
33
|
-
</script>
|
34
|
-
</body>
|
35
|
-
</html>
|
1
|
+
<html lang="en">
|
2
|
+
<head>
|
3
|
+
<meta charset="UTF-8">
|
4
|
+
<title>example</title>
|
5
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui-css/semantic.min.css">
|
6
|
+
<script src="//cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
|
7
|
+
<script src="//cdn.polyfill.io/v2/polyfill.min.js?features=default,fetch,Promise"></script>
|
8
|
+
<script src="/build/index.js"></script>
|
9
|
+
<script>
|
10
|
+
var _fetch = window.fetch;
|
11
|
+
|
12
|
+
window.fetch = function(url, options) {
|
13
|
+
window.fetch.calls.push({url: url, options: options});
|
14
|
+
return _fetch(url, options);
|
15
|
+
}
|
16
|
+
|
17
|
+
window.fetch.calls = [];
|
18
|
+
</script>
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<tb-notification-widget
|
22
|
+
secure-context-token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmRlcklkIjoiNDU2OCIsImlhdCI6MTQ5MTMzMzM0OCwiZXhwIjoxNDkyMTk3MzQ4LCJpc3MiOiJlZTlhZTMwYi1jYzRhLTRlNTctYWM1Mi05ZmYwOTEyMmRkODEiLCJzdWIiOiIxMjM0NSJ9._3FnsIV0atJ9F8_vmDZlzz5S0Qo6-tn7GP597Rxphm8="
|
23
|
+
widget-id="59f3dfaf-935f-4f0f-98b3-02a51abd0c7c"
|
24
|
+
api-path="https://api.textback.io/api"
|
25
|
+
data-insecure-order-id="">
|
26
|
+
</tb-notification-widget>
|
27
|
+
<script>
|
28
|
+
setTimeout(function() {
|
29
|
+
var widgetElement = $('tb-notification-widget').get(0);
|
30
|
+
widgetElement.dataset.insecureOrderId = 'testId';
|
31
|
+
new TextBack.NotificationWidget({element: widgetElement});
|
32
|
+
}, 2000);
|
33
|
+
</script>
|
34
|
+
</body>
|
35
|
+
</html>
|
package/tests/gf.js
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
fixture `Notification widget growfood tests`
|
2
|
-
.page `http://localhost:3000/tests/gf.html`;
|
3
|
-
|
4
|
-
test('Post initialization deeplink request', async t => {
|
5
|
-
const initialization = new Promise(resolve => {
|
6
|
-
setTimeout(resolve, 3000);
|
7
|
-
});
|
8
|
-
|
9
|
-
await initialization;
|
10
|
-
|
11
|
-
const requests = await t.eval(() => window.fetch.calls);
|
12
|
-
const deeplinkRequests = requests.filter(call => {
|
13
|
-
return call.url === 'https://api.textback.io/api/endUserNotifications/deepLinks';
|
14
|
-
});
|
15
|
-
|
16
|
-
await t.expect(JSON.parse(deeplinkRequests[1].options.body)).eql({
|
17
|
-
"accountId": "ee9ae30b-cc4a-4e57-ac52-9ff09122dd81",
|
18
|
-
"insecureContext": {"insecureOrderId": "testId"},
|
19
|
-
"secureContextToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmRlcklkIjoiNDU2OCIsImlhdCI6MTQ5MTMzMzM0OCwiZXhwIjoxNDkyMTk3MzQ4LCJpc3MiOiJlZTlhZTMwYi1jYzRhLTRlNTctYWM1Mi05ZmYwOTEyMmRkODEiLCJzdWIiOiIxMjM0NSJ9._3FnsIV0atJ9F8_vmDZlzz5S0Qo6-tn7GP597Rxphm8="
|
20
|
-
});
|
21
|
-
|
1
|
+
fixture `Notification widget growfood tests`
|
2
|
+
.page `http://localhost:3000/tests/gf.html`;
|
3
|
+
|
4
|
+
test('Post initialization deeplink request', async t => {
|
5
|
+
const initialization = new Promise(resolve => {
|
6
|
+
setTimeout(resolve, 3000);
|
7
|
+
});
|
8
|
+
|
9
|
+
await initialization;
|
10
|
+
|
11
|
+
const requests = await t.eval(() => window.fetch.calls);
|
12
|
+
const deeplinkRequests = requests.filter(call => {
|
13
|
+
return call.url === 'https://api.textback.io/api/endUserNotifications/deepLinks';
|
14
|
+
});
|
15
|
+
|
16
|
+
await t.expect(JSON.parse(deeplinkRequests[1].options.body)).eql({
|
17
|
+
"accountId": "ee9ae30b-cc4a-4e57-ac52-9ff09122dd81",
|
18
|
+
"insecureContext": {"insecureOrderId": "testId"},
|
19
|
+
"secureContextToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmRlcklkIjoiNDU2OCIsImlhdCI6MTQ5MTMzMzM0OCwiZXhwIjoxNDkyMTk3MzQ4LCJpc3MiOiJlZTlhZTMwYi1jYzRhLTRlNTctYWM1Mi05ZmYwOTEyMmRkODEiLCJzdWIiOiIxMjM0NSJ9._3FnsIV0atJ9F8_vmDZlzz5S0Qo6-tn7GP597Rxphm8="
|
20
|
+
});
|
21
|
+
|
22
22
|
});
|