@textback/notification-widget 2.0.0 → 2.0.1-102913
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/build/index.js +12 -0
- package/build/sdk.js +9 -0
- package/package.json +70 -68
- package/promote_tag.sh +1 -1
- package/readme.md +569 -490
- package/server.js +8 -4
- package/src/libraries/ai.1.0.11.js +4088 -4088
- package/src/libraries/localization/locales/cs.js +14 -12
- package/src/libraries/localization/locales/en.js +14 -12
- package/src/libraries/localization/locales/index.js +8 -8
- package/src/libraries/localization/locales/pl.js +14 -12
- package/src/libraries/localization/locales/ro.js +14 -12
- package/src/libraries/localization/locales/ru.js +13 -12
- package/src/libraries/localization/locales/uk.js +14 -12
- 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/factory.js +3 -3
- 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 -184
- package/src/sdk/channels/whatsapp.js +16 -10
- package/src/sdk/channels/whatsappb.js +27 -0
- package/src/sdk/events/observer.js +46 -46
- package/src/sdk/index.js +5 -5
- package/src/sdk/sdk.js +67 -30
- 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 -50
- package/src/sdk/utils/find.js +7 -7
- package/src/sdk/utils/loadConfig.js +20 -20
- package/src/sdk/utils/loadDeepLink.js +48 -21
- 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 -140
- package/src/widget/components/index.js +6 -2
- package/src/widget/components/tb-notification-button/facebook.js +9 -2
- package/src/widget/components/tb-notification-button/index.js +34 -34
- package/src/widget/components/tb-notification-button/styles.scss +657 -433
- package/src/widget/components/tb-notification-button/telegram.js +9 -2
- package/src/widget/components/tb-notification-button/viber.js +9 -2
- package/src/widget/components/tb-notification-button/vk.js +59 -50
- package/src/widget/components/tb-notification-button/whatsapp.js +15 -8
- package/src/widget/components/tb-notification-button/whatsappb.js +58 -0
- package/src/widget/components/tb-notification-widget/index.js +589 -384
- package/src/widget/components/tb-notification-widget/normalize.scss +395 -394
- package/src/widget/components/tb-notification-widget/styles.scss +502 -139
- package/src/widget/components/tb-nw-wahunter/index.js +259 -0
- package/src/widget/components/tb-nw-wahunter/styles.scss +471 -0
- package/src/widget/config.js +5 -5
- package/src/widget/icons/icon_chat_window.svg +1 -0
- package/src/widget/icons/icon_close.svg +1 -0
- package/src/widget/icons/icon_facebook.svg +7 -7
- package/src/widget/icons/icon_facebook_circle.svg +7 -9
- 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 -27
- package/src/widget/icons/icon_viber.svg +75 -75
- package/src/widget/icons/icon_viber_circle.svg +67 -77
- 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_hollow.svg +128 -0
- package/src/widget/icons/icon_whatsapp_new.svg +127 -127
- package/src/widget/icons/icon_whatsappb.svg +147 -0
- package/src/widget/icons/icon_whatsappb_circle.svg +4 -0
- package/src/widget/icons/icon_whatsappb_new.svg +127 -0
- package/src/widget/icons/paper-plane-arrow.svg +3 -0
- package/src/widget/icons/tb-logo.svg +21 -0
- package/src/widget/index.js +28 -28
- package/src/widget/locales/cs.js +42 -0
- package/src/widget/locales/en.js +42 -20
- package/src/widget/locales/index.js +2 -2
- package/src/widget/locales/pl.js +41 -19
- package/src/widget/locales/ro.js +41 -20
- package/src/widget/locales/ru.js +40 -19
- package/src/widget/locales/uk.js +40 -19
- package/src/widget/utils/cookiesEx.js +41 -41
- package/src/widget/utils/getLocale.js +4 -2
- package/src/widget/utils/stringifyAttributes.js +19 -19
- package/src/widget/utils/text.js +2 -1
- package/src/widget/utils/widgetsStorage.js +28 -28
- package/src/widget/widget.entry.js +3 -4
- package/tests/gf.html +35 -35
- package/tests/gf.js +21 -21
- package/tests/index.js +61 -61
- package/views/examples.ejs +7 -3
- package/views/sdk.html +274 -256
- package/webpack.common.js +72 -72
- package/webpack.dev.js +15 -15
- package/webpack.prod.js +10 -10
- package/src/widget/components/tb-notification-button/skype.js +0 -47
- package/src/widget/icons/text-back-badge.png +0 -0
- package/src/widget/locales/cz.js +0 -20
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://
|
6
|
-
<script src="//
|
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
|
});
|
package/tests/index.js
CHANGED
@@ -1,62 +1,62 @@
|
|
1
|
-
const {Selector} = require('testcafe');
|
2
|
-
const querystring = require('querystring');
|
3
|
-
|
4
|
-
const query = querystring.stringify({
|
5
|
-
widgetPath: '/build/index.js',
|
6
|
-
apiPath: '/api',
|
7
|
-
widgetId: 'a'
|
8
|
-
});
|
9
|
-
|
10
|
-
fixture `Notification widget base tests`
|
11
|
-
.page `http://localhost:3000/examples?${query}`;
|
12
|
-
|
13
|
-
test('Telegram button', async t => {
|
14
|
-
const button = Selector('tb-notification-button[channel="tg"]');
|
15
|
-
const link = button.find('a');
|
16
|
-
const text = await button.innerText;
|
17
|
-
const href = await link.getAttribute('href');
|
18
|
-
|
19
|
-
await t.expect(text).contains('Telegram');
|
20
|
-
await t.expect(href).contains('https://telegram.me/rb_dev_3_bot?start=subscribe_');
|
21
|
-
});
|
22
|
-
|
23
|
-
test('VK button', async t => {
|
24
|
-
const button = Selector('tb-notification-button[channel="vk"]');
|
25
|
-
const text = await button.innerText;
|
26
|
-
|
27
|
-
await t.expect(text).contains('VKontakte');
|
28
|
-
});
|
29
|
-
|
30
|
-
test('Facebook button', async t => {
|
31
|
-
const button = Selector('tb-notification-button[channel="facebook"]');
|
32
|
-
const link = button.find('a');
|
33
|
-
const text = await button.innerText;
|
34
|
-
const href = await link.getAttribute('href');
|
35
|
-
|
36
|
-
await t.expect(text).contains('Facebook');
|
37
|
-
await t.expect(href).contains('https://m.me/323049074708312?ref=subscribe_');
|
38
|
-
});
|
39
|
-
|
40
|
-
test('Viber button', async t => {
|
41
|
-
const button = Selector('tb-notification-button[channel="viber"]');
|
42
|
-
const link = button.find('a');
|
43
|
-
const text = await button.innerText;
|
44
|
-
const href = await link.getAttribute('href');
|
45
|
-
|
46
|
-
await t.expect(text).contains('Viber');
|
47
|
-
await t.expect(href).contains('viber://pa?chatURI=dev_&context=subscribe_');
|
48
|
-
});
|
49
|
-
|
50
|
-
test('deeplink request', async t => {
|
51
|
-
const requests = await t.eval(() => window.fetch.calls);
|
52
|
-
|
53
|
-
const deeplinkRequests = requests.filter(call => {
|
54
|
-
return call.url === '/api/endUserNotifications/deepLinks'
|
55
|
-
});
|
56
|
-
|
57
|
-
await t.expect(JSON.parse(deeplinkRequests[0].options.body)).eql({
|
58
|
-
"accountId": "99bffda5-5bd1-49b1-b4f2-658854797c01",
|
59
|
-
"insecureContext": {"orderId": "insecureOrderID"},
|
60
|
-
"secureContextToken": null
|
61
|
-
});
|
1
|
+
const {Selector} = require('testcafe');
|
2
|
+
const querystring = require('querystring');
|
3
|
+
|
4
|
+
const query = querystring.stringify({
|
5
|
+
widgetPath: '/build/index.js',
|
6
|
+
apiPath: '/api',
|
7
|
+
widgetId: 'a'
|
8
|
+
});
|
9
|
+
|
10
|
+
fixture `Notification widget base tests`
|
11
|
+
.page `http://localhost:3000/examples?${query}`;
|
12
|
+
|
13
|
+
test('Telegram button', async t => {
|
14
|
+
const button = Selector('tb-notification-button[channel="tg"]');
|
15
|
+
const link = button.find('a');
|
16
|
+
const text = await button.innerText;
|
17
|
+
const href = await link.getAttribute('href');
|
18
|
+
|
19
|
+
await t.expect(text).contains('Telegram');
|
20
|
+
await t.expect(href).contains('https://telegram.me/rb_dev_3_bot?start=subscribe_');
|
21
|
+
});
|
22
|
+
|
23
|
+
test('VK button', async t => {
|
24
|
+
const button = Selector('tb-notification-button[channel="vk"]');
|
25
|
+
const text = await button.innerText;
|
26
|
+
|
27
|
+
await t.expect(text).contains('VKontakte');
|
28
|
+
});
|
29
|
+
|
30
|
+
test('Facebook button', async t => {
|
31
|
+
const button = Selector('tb-notification-button[channel="facebook"]');
|
32
|
+
const link = button.find('a');
|
33
|
+
const text = await button.innerText;
|
34
|
+
const href = await link.getAttribute('href');
|
35
|
+
|
36
|
+
await t.expect(text).contains('Facebook');
|
37
|
+
await t.expect(href).contains('https://m.me/323049074708312?ref=subscribe_');
|
38
|
+
});
|
39
|
+
|
40
|
+
test('Viber button', async t => {
|
41
|
+
const button = Selector('tb-notification-button[channel="viber"]');
|
42
|
+
const link = button.find('a');
|
43
|
+
const text = await button.innerText;
|
44
|
+
const href = await link.getAttribute('href');
|
45
|
+
|
46
|
+
await t.expect(text).contains('Viber');
|
47
|
+
await t.expect(href).contains('viber://pa?chatURI=dev_&context=subscribe_');
|
48
|
+
});
|
49
|
+
|
50
|
+
test('deeplink request', async t => {
|
51
|
+
const requests = await t.eval(() => window.fetch.calls);
|
52
|
+
|
53
|
+
const deeplinkRequests = requests.filter(call => {
|
54
|
+
return call.url === '/api/endUserNotifications/deepLinks'
|
55
|
+
});
|
56
|
+
|
57
|
+
await t.expect(JSON.parse(deeplinkRequests[0].options.body)).eql({
|
58
|
+
"accountId": "99bffda5-5bd1-49b1-b4f2-658854797c01",
|
59
|
+
"insecureContext": {"orderId": "insecureOrderID"},
|
60
|
+
"secureContextToken": null
|
61
|
+
});
|
62
62
|
});
|
package/views/examples.ejs
CHANGED
@@ -3,10 +3,10 @@
|
|
3
3
|
<meta charset="UTF-8">
|
4
4
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
5
5
|
<title>example</title>
|
6
|
-
<link rel="stylesheet" href="https://
|
6
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/semantic-ui-css/semantic.min.css">
|
7
7
|
<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">-->
|
8
|
-
<script src="https://
|
9
|
-
<script src="https://
|
8
|
+
<script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
|
9
|
+
<script src="https://cdn.jsdelivr.net/npm/semantic-ui-css/semantic.min.js"></script>
|
10
10
|
<!-- <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=default,fetch,Promise"></script> -->
|
11
11
|
|
12
12
|
</head>
|
@@ -26,6 +26,10 @@
|
|
26
26
|
<label>widgetId</label>
|
27
27
|
<input type="text" name="widgetId" value="<%- query.widgetId %>" placeholder="widgetId">
|
28
28
|
</div>
|
29
|
+
<div class="field">
|
30
|
+
<label>lang</label>
|
31
|
+
<input type="text" name="lang" value="<%- query.lang %>" placeholder="lang">
|
32
|
+
</div>
|
29
33
|
<div class="field">
|
30
34
|
<label>data</label>
|
31
35
|
<input type="text" name="data" value=<%- `${query.data}` %> placeholder="data">
|