@textback/notification-widget 2.0.0-9450 → 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 +6 -3
- package/build/sdk.js +3 -3
- package/package.json +11 -8
- package/promote_tag.sh +1 -1
- package/{README.md → readme.md} +569 -490
- package/server.js +134 -134
- package/src/libraries/ai.1.0.11.js +4088 -4088
- package/src/libraries/localization/getLocale.js +17 -0
- package/src/libraries/localization/locales/.tern-port +1 -0
- package/src/libraries/localization/locales/cs.js +23 -0
- package/src/libraries/localization/locales/en.js +23 -0
- package/src/libraries/localization/locales/index.js +9 -0
- package/src/libraries/localization/locales/pl.js +23 -0
- package/src/libraries/localization/locales/ro.js +23 -0
- package/src/libraries/localization/locales/ru.js +22 -0
- package/src/libraries/localization/locales/uk.js +23 -0
- package/src/libraries/localization/text.js +9 -0
- 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 -13
- 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 -173
- package/src/sdk/channels/whatsapp.js +20 -11
- 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 -0
- 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 +60 -47
- 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 +597 -353
- package/src/widget/components/tb-notification-widget/normalize.scss +395 -394
- package/src/widget/components/tb-notification-widget/styles.scss +514 -136
- 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 +4 -123
- 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 -17
- package/build/index.js.map +0 -1
- package/build/sdk.js.map +0 -1
- 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
@@ -1,3 +1,4 @@
|
|
1
|
+
import MobileDetect from 'mobile-detect';
|
1
2
|
import assign from 'lodash/assign';
|
2
3
|
import Component from '../index.js';
|
3
4
|
|
@@ -13,422 +14,665 @@ import SDK from '../../../sdk/index.js';
|
|
13
14
|
import iconBell from '../../icons/bell-icon.png';
|
14
15
|
import iconBroadcast from '../../icons/broadcast-icon.png';
|
15
16
|
import iconPaperPlane from '../../icons/paper-plane-icon.png';
|
16
|
-
import
|
17
|
+
import iconTbLogo from '../../icons/tb-logo.svg'
|
18
|
+
import iconChatWindow from '../../icons/icon_whatsapp_hollow.svg';
|
19
|
+
import iconClose from '../../icons/icon_close.svg';
|
17
20
|
|
18
21
|
import './normalize.scss';
|
19
22
|
import './styles.scss';
|
20
23
|
|
24
|
+
import Wahunter from '../tb-nw-wahunter/index.js';
|
25
|
+
|
26
|
+
|
21
27
|
const channelButtons = {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
+
vk: require('../tb-notification-button/vk'),
|
29
|
+
tg: require('../tb-notification-button/telegram'),
|
30
|
+
facebook: require('../tb-notification-button/facebook'),
|
31
|
+
viber: require('../tb-notification-button/viber'),
|
32
|
+
whatsapp: require('../tb-notification-button/whatsapp'),
|
33
|
+
whatsappb: require('../tb-notification-button/whatsappb')
|
28
34
|
};
|
29
35
|
|
30
|
-
|
31
36
|
const DEFAULT_BUTTONS_MARKUP = {
|
32
|
-
|
33
|
-
|
34
|
-
|
37
|
+
style: 'gradient',
|
38
|
+
displayMode: 'horizontal',
|
39
|
+
align: 'center',
|
40
|
+
};
|
41
|
+
|
42
|
+
const getDeviceDisplayMap = () => {
|
43
|
+
const md = new MobileDetect(window.navigator.userAgent);
|
44
|
+
const isDesktop = () => !(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
|
45
|
+
|
46
|
+
return new Map([
|
47
|
+
['pc', isDesktop()],
|
48
|
+
['mobile', md.phone()],
|
49
|
+
['tablet', md.tablet()]
|
50
|
+
]);
|
51
|
+
};
|
52
|
+
|
53
|
+
const showOnDevice = deviceList => {
|
54
|
+
if (deviceList === null || deviceList === undefined) return true;
|
55
|
+
|
56
|
+
return deviceList.map(i => getDeviceDisplayMap().get(i)).some(x => x);
|
35
57
|
};
|
36
58
|
|
37
59
|
export default class Widget extends Component {
|
38
|
-
|
39
|
-
|
60
|
+
constructor() {
|
61
|
+
super(...arguments);
|
40
62
|
|
41
|
-
|
42
|
-
|
63
|
+
this.apiPath = this.apiPath || config.apiPath;
|
64
|
+
this.onlyManual = this.onlyManual || this.element.hasAttribute('only-manual');
|
65
|
+
this.previewMode = this.previewMode || this.element.hasAttribute('preview-mode');
|
43
66
|
|
44
|
-
|
67
|
+
const predefinedConfig = this.widgetConfig;
|
45
68
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
69
|
+
//override widgetId property with data from widgetConfig
|
70
|
+
if (!!predefinedConfig) {
|
71
|
+
this.widgetId = predefinedConfig.id;
|
72
|
+
}
|
50
73
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
74
|
+
let widgetInitPromise = SDK.getWidget(this.widgetId);
|
75
|
+
|
76
|
+
if (!widgetInitPromise) {
|
77
|
+
// init widget
|
78
|
+
widgetInitPromise = SDK.initWidget({
|
79
|
+
widgetId: this.widgetId,
|
80
|
+
apiPath: this.apiPath,
|
81
|
+
insecureContext: this.data,
|
82
|
+
secureContextToken: this.secureContextToken,
|
83
|
+
overrideConfig: predefinedConfig,
|
84
|
+
}, this.previewMode);
|
85
|
+
}
|
62
86
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
87
|
+
widgetInitPromise = widgetInitPromise
|
88
|
+
.then(widget => {
|
89
|
+
this.widget = widget;
|
90
|
+
|
91
|
+
this.widgetUserId = widget.widgetUserId;
|
92
|
+
this.config = widget.getConfig();
|
93
|
+
this.config.type = this.config.type || constants.DEFAULT_WIDGET_TYPE;
|
94
|
+
this.config.markUp = this.config.markUp || {};
|
95
|
+
this.config.markUp.buttons = assign({}, DEFAULT_BUTTONS_MARKUP, this.config.markUp.buttons);
|
96
|
+
|
97
|
+
this.widgetSubscriptions = widget.subscriptions;
|
98
|
+
this.deepLink = widget.deeplink;
|
99
|
+
this.lang = this.config.lang
|
100
|
+
|
101
|
+
this.showWidgetSetting = (this.widget.config && this.widget.config.showWidgetSetting)
|
102
|
+
? this.widget.config.showWidgetSetting.devices
|
103
|
+
: null;
|
104
|
+
|
105
|
+
const aiKey = widget.aiKey;
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
return appInsights.init(aiKey, this.widgetUserId, this.config.accountId);
|
110
|
+
})
|
111
|
+
.then(res => {
|
112
|
+
this.set({
|
113
|
+
ready: showOnDevice(this.showWidgetSetting)
|
114
|
+
});
|
115
|
+
return this;
|
116
|
+
}, err => {
|
117
|
+
console.error(err);
|
118
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.error', err);
|
119
|
+
this.set({ error: err });
|
120
|
+
return this;
|
121
|
+
});
|
122
|
+
|
123
|
+
widgetsStorage.setWidget(this.widgetId, widgetInitPromise);
|
124
|
+
}
|
125
|
+
|
126
|
+
get defaults() {
|
127
|
+
return {
|
128
|
+
widgetId: this.element.getAttribute('widget-id'),
|
129
|
+
secureContextToken: this.element.getAttribute('secure-context-token'),
|
130
|
+
apiPath: this.element.getAttribute('api-path') || config.apiPath
|
131
|
+
};
|
132
|
+
}
|
133
|
+
|
134
|
+
render() {
|
135
|
+
super.render();
|
136
|
+
|
137
|
+
const wahunterElem = this.element.querySelector('tb-nw-wahunter');
|
138
|
+
|
139
|
+
if (wahunterElem) {
|
140
|
+
new Wahunter({
|
141
|
+
element: wahunterElem,
|
142
|
+
widgetAPI: this.widget,
|
143
|
+
parentElement: this.element,
|
144
|
+
});
|
92
145
|
}
|
93
146
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
147
|
+
this.element.id = this.element.id ? this.element.id : 'tb-notification-widget';
|
148
|
+
|
149
|
+
const buttons = this.element.querySelectorAll('tb-notification-button');
|
150
|
+
|
151
|
+
if (buttons) {
|
152
|
+
for (let i = 0; i < buttons.length; i++) {
|
153
|
+
const channel = buttons[i].getAttribute('channel');
|
154
|
+
new channelButtons[channel]({
|
155
|
+
element: buttons[i],
|
156
|
+
accountId: this.config.accountId,
|
157
|
+
userId: this.userId,
|
158
|
+
apiPath: this.apiPath,
|
159
|
+
insecureContext: this.data,
|
160
|
+
secureContextToken: this.secureContextToken,
|
161
|
+
deepLink: this.deepLink,
|
162
|
+
lang: this.lang,
|
163
|
+
vkApiId: this.config.vkApiId,
|
164
|
+
widgetId: this.config.id,
|
165
|
+
widget: this,
|
166
|
+
widgetAPI: this.widget,
|
167
|
+
});
|
168
|
+
}
|
100
169
|
}
|
101
170
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
});
|
126
|
-
}
|
171
|
+
if (!this.config || !this.config.displayMode) return;
|
172
|
+
|
173
|
+
if (this.config.displayMode === "popup") {
|
174
|
+
let sessionShowCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_s_show_counter';
|
175
|
+
let daysShowCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_days_show_counter';
|
176
|
+
let daysCloseCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_days_close_counter';
|
177
|
+
let totalCloseCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_total_close_counter';
|
178
|
+
let showWidgetSetting = this.config.showWidgetSetting;
|
179
|
+
let popup = this.element.getElementsByTagName("tb-notification-widget-overlay")[0];
|
180
|
+
|
181
|
+
this.element.addEventListener("click", (e) => {
|
182
|
+
const target = e.target;
|
183
|
+
|
184
|
+
if (!target.matches('#tb-notification-widget-close') && !target.matches('tb-notification-widget-overlay')) return;
|
185
|
+
|
186
|
+
popup.className += " hidden closed";
|
187
|
+
e.preventDefault();
|
188
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.click.close', 'userAction');
|
189
|
+
if (showWidgetSetting) {
|
190
|
+
let daysTimeout = showWidgetSetting.showAfterDays * constants.SECONDS_IN_DAY;
|
191
|
+
|
192
|
+
cookiesEx.incrementIntCookie(daysCloseCounterName, daysTimeout);
|
193
|
+
cookiesEx.incrementIntCookie(totalCloseCounterName, constants.WIDGET_USER_ID_COOKIE_TTL);
|
127
194
|
}
|
195
|
+
});
|
128
196
|
|
129
|
-
if (this.config && this.config.displayMode && this.config.displayMode === "popup") {
|
130
|
-
let sessionShowCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_s_show_counter';
|
131
|
-
let daysShowCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_days_show_counter';
|
132
|
-
let daysCloseCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_days_close_counter';
|
133
|
-
let totalCloseCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_total_close_counter';
|
134
|
-
|
135
|
-
let showWidgetSetting = this.config.showWidgetSetting;
|
136
|
-
|
137
|
-
let popup = this.element.getElementsByTagName("tb-notification-widget-overlay")[0];
|
138
|
-
document.getElementById("tb-notification-widget-close").addEventListener("click", (e) => {
|
139
|
-
popup.className += " hidden closed";
|
140
|
-
e.preventDefault();
|
141
|
-
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.click.close', 'userAction');
|
142
|
-
if (showWidgetSetting) {
|
143
|
-
let daysTimeout = showWidgetSetting.showAfterDays * constants.SECONDS_IN_DAY;
|
144
|
-
|
145
|
-
cookiesEx.incrementIntCookie(daysCloseCounterName, daysTimeout);
|
146
|
-
cookiesEx.incrementIntCookie(totalCloseCounterName, constants.WIDGET_USER_ID_COOKIE_TTL);
|
147
|
-
}
|
148
|
-
});
|
149
|
-
|
150
|
-
|
151
|
-
if (showWidgetSetting) {
|
152
|
-
if (!showWidgetSetting.showIfSubscribed && this.widgetSubscriptions.length > 0) {
|
153
|
-
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.notShown', 'alreadySubscribed');
|
154
|
-
return;
|
155
|
-
}
|
156
|
-
|
157
|
-
|
158
|
-
let daysTimeout = showWidgetSetting.showAfterDays * constants.SECONDS_IN_DAY;
|
159
|
-
let sessionTimeout = showWidgetSetting.showSessionLength * 60;
|
160
|
-
|
161
|
-
let daysShowCounter = cookiesEx.incrementIntCookie(daysShowCounterName, daysTimeout);
|
162
|
-
let sessionShowCounter = cookiesEx.incrementIntCookie(sessionShowCounterName, sessionTimeout);
|
163
|
-
let daysCloseCounter = cookiesEx.getIntCookie(daysCloseCounterName) || 0;
|
164
|
-
let totalCloseCounter = cookiesEx.getIntCookie(totalCloseCounterName) || 0;
|
165
|
-
|
166
|
-
const sendNonDisplayed = (reason) => {
|
167
|
-
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.notShown', reason);
|
168
|
-
return true;
|
169
|
-
};
|
170
|
-
|
171
|
-
if (sessionShowCounter > showWidgetSetting.showTimesInSession && sendNonDisplayed('timesPerSession')|| // Не более N раз в сессию
|
172
|
-
(showWidgetSetting.showTimesInRow > 0 && daysShowCounter > showWidgetSetting.showTimesInRow && sendNonDisplayed('timesPerDays')) ||// Не более N раз в M дней
|
173
|
-
(showWidgetSetting.closeTimesInRow > 0 && daysCloseCounter >= showWidgetSetting.closeTimesInRow && sendNonDisplayed('closedTimesPerDays')) || // Не более N закрытий в M дней
|
174
|
-
(showWidgetSetting.closeTimesInTotal > 0 && totalCloseCounter >= showWidgetSetting.closeTimesInTotal && sendNonDisplayed('closedTimes')) // Не более N закрытий всего
|
175
|
-
) {
|
176
|
-
return;
|
177
|
-
}
|
178
|
-
}
|
179
197
|
|
180
|
-
|
181
|
-
|
182
|
-
|
198
|
+
if (this.config.widgetKind === 'WAHUNTER') {
|
199
|
+
// For uniformity of config object, "showIfSubscribed" here is "show wahunter again if it allready was run"
|
200
|
+
const wahunterWasRun = cookiesEx.getBoolCookie(`${constants.COOKIE_NAME_PREFIX + this.widgetId}_wahunter_was_run`);
|
201
|
+
const showIfWasRun = showWidgetSetting.showIfSubscribed;
|
202
|
+
|
203
|
+
if (wahunterWasRun && !showIfWasRun) return;
|
204
|
+
}
|
205
|
+
|
206
|
+
|
207
|
+
if (showWidgetSetting) {
|
208
|
+
if (!showWidgetSetting.showIfSubscribed && this.widgetSubscriptions.length > 0) {
|
209
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.notShown', 'alreadySubscribed');
|
210
|
+
return;
|
211
|
+
}
|
212
|
+
|
213
|
+
let daysTimeout = showWidgetSetting.showAfterDays * constants.SECONDS_IN_DAY;
|
214
|
+
let sessionTimeout = showWidgetSetting.showSessionLength * 60;
|
215
|
+
let daysShowCounter = cookiesEx.incrementIntCookie(daysShowCounterName, daysTimeout);
|
216
|
+
let sessionShowCounter = cookiesEx.incrementIntCookie(sessionShowCounterName, sessionTimeout);
|
217
|
+
let daysCloseCounter = cookiesEx.getIntCookie(daysCloseCounterName) || 0;
|
218
|
+
let totalCloseCounter = cookiesEx.getIntCookie(totalCloseCounterName) || 0;
|
219
|
+
|
220
|
+
const sendNonDisplayed = (reason) => {
|
221
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.notShown', reason);
|
222
|
+
return true;
|
223
|
+
};
|
224
|
+
|
225
|
+
if (sessionShowCounter > showWidgetSetting.showTimesInSession && sendNonDisplayed('timesPerSession') || // Не более N раз в сессию
|
226
|
+
(showWidgetSetting.showTimesInRow > 0 && daysShowCounter > showWidgetSetting.showTimesInRow && sendNonDisplayed('timesPerDays')) ||// Не более N раз в M дней
|
227
|
+
(showWidgetSetting.closeTimesInRow > 0 && daysCloseCounter >= showWidgetSetting.closeTimesInRow && sendNonDisplayed('closedTimesPerDays')) || // Не более N закрытий в M дней
|
228
|
+
(showWidgetSetting.closeTimesInTotal > 0 && totalCloseCounter >= showWidgetSetting.closeTimesInTotal && sendNonDisplayed('closedTimes')) // Не более N закрытий всего
|
229
|
+
) {
|
230
|
+
return;
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
if (this.onlyManual) {
|
235
|
+
popup.className = 'hidden';
|
236
|
+
return;
|
237
|
+
}
|
238
|
+
|
239
|
+
if (this.config.displayOptions && (this.config.displayOptions.onTimeout || this.config.displayOptions.onLeave)) {
|
240
|
+
let telemetryFlag = false;
|
241
|
+
|
242
|
+
if (this.config.displayOptions.onTimeout && showOnDevice(this.showWidgetSetting)) {
|
243
|
+
setTimeout(() => {
|
244
|
+
if (popup.className.indexOf('closed') === -1 && !telemetryFlag) {
|
245
|
+
telemetryFlag = true;
|
246
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.show', 'timeout');
|
183
247
|
}
|
248
|
+
popup.className = popup.className.indexOf('closed') === -1 ? "" : popup.className;
|
249
|
+
}, +this.config.displayOptions.timeoutDelay * 1000);
|
250
|
+
}
|
184
251
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
popup.className = popup.className.indexOf('closed') === -1 ? "" : popup.className;
|
194
|
-
}, +this.config.displayOptions.timeoutDelay * 1000);
|
195
|
-
}
|
196
|
-
if (this.config.displayOptions.onLeave) {
|
197
|
-
document.addEventListener('mousemove', (e) => {
|
198
|
-
if (e.clientY < 50) {
|
199
|
-
if(popup.className.indexOf('closed') === -1 && !telemetryFlag){
|
200
|
-
telemetryFlag = true;
|
201
|
-
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.show', 'onLeave');
|
202
|
-
}
|
203
|
-
popup.className = popup.className.indexOf('closed') === -1 ? "" : popup.className;
|
204
|
-
}
|
205
|
-
});
|
206
|
-
}
|
252
|
+
if (this.config.displayOptions.onLeave && showOnDevice(this.showWidgetSetting)) {
|
253
|
+
document.addEventListener('mousemove', (e) => {
|
254
|
+
if (e.clientY < 50) {
|
255
|
+
if (popup.className.indexOf('closed') === -1 && !telemetryFlag) {
|
256
|
+
telemetryFlag = true;
|
257
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.show', 'onLeave');
|
258
|
+
}
|
259
|
+
popup.className = popup.className.indexOf('closed') === -1 ? "" : popup.className;
|
207
260
|
}
|
261
|
+
});
|
208
262
|
}
|
263
|
+
}
|
209
264
|
}
|
210
265
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
266
|
+
if (this.config.displayMode === "corner-popup" && showOnDevice(this.showWidgetSetting)) {
|
267
|
+
const popupControlButtonElem = this.element.querySelector('tb-widget-corner-popup-button');
|
268
|
+
const popupElem = popupControlButtonElem.parentElement;
|
269
|
+
const popupTooltipContainer = popupElem.querySelector('tb-widget-corner-popup-tooltip-container');
|
270
|
+
const fullscreenCloseButtonElem = popupElem.querySelector('.tb-fullscreen-close-rectangle .tb-icon-close');
|
215
271
|
|
216
|
-
|
272
|
+
fullscreenCloseButtonElem.addEventListener('click', (e) => {
|
273
|
+
popupElem.classList.remove('tb-opened-corner-popup');
|
274
|
+
});
|
217
275
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
return '';
|
222
|
-
}
|
276
|
+
popupControlButtonElem.addEventListener('click', (e) => {
|
277
|
+
popupElem.classList.toggle('tb-opened-corner-popup');
|
278
|
+
});
|
223
279
|
|
280
|
+
popupElem.addEventListener('wahunter-success', (e) => {
|
281
|
+
popupTooltipContainer.style.display = 'none';
|
282
|
+
});
|
224
283
|
}
|
284
|
+
}
|
225
285
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
286
|
+
get header() {
|
287
|
+
if (this.config.markUp && this.config.markUp.header && this.config.markUp.header.value) {
|
288
|
+
var color = this.config.markUp.header.color ? 'style="color: ' + this.config.markUp.header.color + '"' : undefined;
|
289
|
+
var result = '';
|
230
290
|
|
231
|
-
|
291
|
+
result += '<tb-widget-header-line ' + color + ' class="tb-widget-header-line">' + this.config.markUp.header.value + '</tb-widget-header-line>';
|
232
292
|
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
293
|
+
return '<tb-widget-header-container>' + result + '</tb-widget-header-container>';
|
294
|
+
} else {
|
295
|
+
return '';
|
296
|
+
}
|
297
|
+
}
|
298
|
+
|
299
|
+
get description() {
|
300
|
+
if (this.config.markUp && this.config.markUp.description && this.config.markUp.description.value) {
|
301
|
+
var color = this.config.markUp.description.color ? 'style="color: ' + this.config.markUp.description.color + '"' : undefined;
|
302
|
+
var result = '';
|
303
|
+
|
304
|
+
result += '<tb-widget-description-line ' + color + ' class="tb-widget-description-line">' + this.config.markUp.description.value + '</tb-widget-description-line>'
|
238
305
|
|
306
|
+
return '<tb-widget-description-container>' + result + '</tb-widget-description-container>';
|
307
|
+
}
|
308
|
+
else {
|
309
|
+
return '';
|
310
|
+
}
|
311
|
+
}
|
312
|
+
|
313
|
+
static iconPreset(val) {
|
314
|
+
switch (val) {
|
315
|
+
case 'widgetIconBell':
|
316
|
+
return iconBell;
|
317
|
+
case 'widgetIconBroadcast':
|
318
|
+
return iconBroadcast;
|
319
|
+
case 'widgetIconPaperPlane':
|
320
|
+
return iconPaperPlane;
|
239
321
|
}
|
240
322
|
|
241
|
-
|
242
|
-
switch (val) {
|
243
|
-
case 'widgetIconBell':
|
244
|
-
return iconBell;
|
245
|
-
case 'widgetIconBroadcast':
|
246
|
-
return iconBroadcast;
|
247
|
-
case 'widgetIconPaperPlane':
|
248
|
-
return iconPaperPlane;
|
249
|
-
case 'text-back-badge':
|
250
|
-
return iconTextBackBadge;
|
251
|
-
}
|
323
|
+
}
|
252
324
|
|
325
|
+
get icon() {
|
326
|
+
if (this.config.markUp && this.config.markUp.icon && this.config.markUp.icon.type === "custom") {
|
327
|
+
return '<tb-notification-widget-icon_body>'
|
328
|
+
+ '<img src="' + this.config.markUp.icon.url + '">'
|
329
|
+
+ '</tb-notification-widget-icon_body>'
|
330
|
+
}
|
331
|
+
if (this.config.markUp && this.config.markUp.icon && this.config.markUp.icon.type === "preset") {
|
332
|
+
return '<tb-notification-widget-icon_body>'
|
333
|
+
+ '<img src="' + Widget.iconPreset(this.config.markUp.icon.value) + '">'
|
334
|
+
+ '</tb-notification-widget-icon_body>'
|
335
|
+
}
|
336
|
+
else {
|
337
|
+
return '';
|
253
338
|
}
|
339
|
+
}
|
254
340
|
|
255
|
-
get icon() {
|
256
|
-
if (this.config.markUp && this.config.markUp.icon && this.config.markUp.icon.type === "custom") {
|
257
|
-
return '<tb-notification-widget-icon_body>'
|
258
|
-
+ '<img src="' + this.config.markUp.icon.url + '">'
|
259
|
-
+ '</tb-notification-widget-icon_body>'
|
260
|
-
}
|
261
|
-
if (this.config.markUp && this.config.markUp.icon && this.config.markUp.icon.type === "preset") {
|
262
|
-
return '<tb-notification-widget-icon_body>'
|
263
|
-
+ '<img src="' + Widget.iconPreset(this.config.markUp.icon.value) + '">'
|
264
|
-
+ '</tb-notification-widget-icon_body>'
|
265
|
-
}
|
266
|
-
else {
|
267
|
-
return '';
|
268
|
-
}
|
269
341
|
|
342
|
+
|
343
|
+
getTbBrandBadge({ displayMode, widgetKind }) {
|
344
|
+
const utmMedium = widgetKind === 'WAHUNTER' ? 'hunter' : 'widget-subscribe';
|
345
|
+
|
346
|
+
if (widgetKind === 'WAHUNTER') {
|
347
|
+
return `
|
348
|
+
<a target="_blank"
|
349
|
+
href="//textback.ru/?utm_source=TextBack_tool&utm_medium=${utmMedium}&utm_campaign=${window.location.origin}${window.location.pathname}&utm_content=${displayMode}
|
350
|
+
|
351
|
+
id="tb-notification-brand-badge"
|
352
|
+
style="${displayMode === 'inline' ? 'fill:inherit; color: inherit;' : ''}"
|
353
|
+
>
|
354
|
+
${this.text('worksFor')} ${iconTbLogo}
|
355
|
+
</a>
|
356
|
+
`;
|
270
357
|
}
|
271
358
|
|
272
|
-
|
273
|
-
|
359
|
+
return `
|
360
|
+
<a target="_blank"
|
361
|
+
href="//textback.ru/?utm_source=TextBack_tool&utm_medium=${utmMedium}&utm_campaign=${window.location.origin}${window.location.pathname}"
|
362
|
+
|
363
|
+
id="tb-notification-brand-badge"
|
364
|
+
style="${displayMode === 'inline' ? 'fill:inherit; color: inherit;' : ''}"
|
365
|
+
>
|
366
|
+
${this.text('worksFor')} ${iconTbLogo}
|
367
|
+
</a>
|
368
|
+
`;
|
369
|
+
}
|
370
|
+
|
371
|
+
|
372
|
+
get image() {
|
373
|
+
if (!this.config.markUp.image || !this.config.markUp.image.show) return '';
|
374
|
+
|
375
|
+
return `
|
376
|
+
<tb-notification-widget-image style="background-image: url(${this.config.markUp.image.url})">
|
377
|
+
<img src="${this.config.markUp.image.url}">
|
378
|
+
</tb-notification-widget-image>
|
379
|
+
`;
|
380
|
+
}
|
381
|
+
|
382
|
+
get pallet() {
|
383
|
+
return this.config && this.config.markUp.body.palette && this.config.markUp.body.palette === "light" ? 'tb-pallet-light' : 'tb-pallet-dark'
|
384
|
+
}
|
385
|
+
|
386
|
+
|
387
|
+
get template() {
|
388
|
+
if (this.ready && this.config && this.config.displayMode) {
|
389
|
+
switch (this.config.displayMode) {
|
390
|
+
case 'popup':
|
391
|
+
return this.popupTemplate;
|
392
|
+
case 'inline':
|
393
|
+
return this.inlineTemplate;
|
394
|
+
case 'corner-popup':
|
395
|
+
return this.cornerPopupTemplate;
|
396
|
+
default:
|
397
|
+
return '';
|
398
|
+
}
|
399
|
+
} else if (this.error) {
|
400
|
+
console.warn(`could not render widget. reason: ${this.error}`);
|
274
401
|
}
|
275
402
|
|
276
|
-
|
277
|
-
|
278
|
-
this.element.className = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'tb-no-api-call' : '');
|
279
|
-
|
280
|
-
const buttonsStyle = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'square' : 'rounded'),
|
281
|
-
buttonsStyleClass = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'tb-btn-style-square' : 'tb-btn-style-rounded');
|
282
|
-
|
283
|
-
var body = '';
|
284
|
-
if (this.ready) {
|
285
|
-
const channels = this.widget.getEnabledChannels();
|
286
|
-
body = channels.map((channel, index) => {
|
287
|
-
const item = assign({}, channel.config, {
|
288
|
-
type: this.config.type,
|
289
|
-
markUp: assign({}, this.config.markUp.buttons, { style: buttonsStyle }),
|
290
|
-
});
|
291
|
-
const attributes = stringifyAttributes({
|
292
|
-
channel: item.channel,
|
293
|
-
config: item,
|
294
|
-
});
|
295
|
-
|
296
|
-
return item.enabled ? `<div><tb-notification-button id="tb-notification-button-${index}" ${attributes}></tb-notification-button></div>` : '';
|
297
|
-
}).join('');
|
298
|
-
} else if (this.error) {
|
299
|
-
console.warn('could not render widget. reason: ' + this.error);
|
300
|
-
body = '';
|
301
|
-
} else {
|
302
|
-
body = '';
|
303
|
-
}
|
403
|
+
return '';
|
404
|
+
}
|
304
405
|
|
305
|
-
|
306
|
-
|
307
|
-
<span id="tb-notification-widget-close" class="close">×</span>
|
308
|
-
<a target="_blank" href="//textback.ru/?utm_source=${window.location.host}&utm_medium=link&utm_content=notify_widget_opened&utm_campaign=ref_ad">
|
309
|
-
<img id="tb-notification-brand-badge" src="${Widget.iconPreset('text-back-badge')}">
|
310
|
-
</a>
|
311
|
-
${this.icon}
|
312
|
-
${this.header}
|
313
|
-
${this.description}
|
314
|
-
<div class="tb-widget-buttons tb-btn-align-center ${buttonsStyleClass}">${body}</div>
|
315
|
-
</tb-notification-widget-popup>
|
316
|
-
</tb-notification-widget-overlay></tb-notification-widget-inner>`;
|
317
|
-
|
318
|
-
} else {
|
319
|
-
if (this.ready) {
|
320
|
-
this.element.className = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'tb-no-api-call' : '');
|
321
|
-
const buttonsContainerClasses = (this.config.type === constants.WIDGET_TYPE_WIDGET
|
322
|
-
? this.getButtonsClasses()
|
323
|
-
: 'tb-btn-style-rounded tb-btn-mode-horizontal tb-btn-align-left');
|
324
|
-
// let
|
325
|
-
|
326
|
-
const channels = this.widget.getEnabledChannels();
|
327
|
-
const body = channels.map((channel, index) => {
|
328
|
-
const item = assign({}, channel.config, { type: this.config.type, markUp: this.config.markUp.buttons });
|
329
|
-
const attributes = stringifyAttributes({
|
330
|
-
channel: item.channel,
|
331
|
-
config: item,
|
332
|
-
});
|
333
|
-
|
334
|
-
if (item.enabled) {
|
335
|
-
let html = `<tb-notification-button id="tb-notification-button-${index}" ${attributes}></tb-notification-button>`;
|
336
|
-
if (this.config.markUp.buttons.displayMode === 'vertical') {
|
337
|
-
html = `<div>${html}</div>`;
|
338
|
-
}
|
339
|
-
return html;
|
340
|
-
} else {
|
341
|
-
return '';
|
342
|
-
}
|
343
|
-
}).join('');
|
344
|
-
|
345
|
-
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.inline.show', 'displaySettings');
|
346
|
-
return `<tb-notification-widget-inner id="tb-notification-widget-inner" class="tb-notification-widget-inner">
|
347
|
-
<div class="tb-widget-buttons ${buttonsContainerClasses}">
|
348
|
-
${body}
|
349
|
-
</div>
|
350
|
-
</tb-notification-widget-inner>`;
|
351
|
-
} else if (this.error) {
|
352
|
-
console.warn('could not render widget. reason: ' + this.error);
|
353
|
-
return '';
|
354
|
-
} else {
|
355
|
-
return ''
|
356
|
-
}
|
406
|
+
get popupTemplate() {
|
407
|
+
this.element.className = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'tb-no-api-call' : '');
|
357
408
|
|
358
|
-
|
409
|
+
const markUp = this.config.markUp;
|
410
|
+
const isPopupWithImage = markUp.image && markUp.image.show;
|
411
|
+
|
412
|
+
let imageUrlNotEmpty;
|
413
|
+
let popupStyleClass = this.pallet;
|
414
|
+
|
415
|
+
if (this.config.widgetKind === 'WAHUNTER' || isPopupWithImage) {
|
416
|
+
imageUrlNotEmpty = !!markUp.image.url.trim();
|
417
|
+
popupStyleClass += ` tb-popup-with-image tb-popup-${(markUp.image.align !== 'top' && imageUrlNotEmpty) ? 'horizontal' : 'vertical'}`;
|
359
418
|
}
|
360
419
|
|
361
|
-
|
362
|
-
|
420
|
+
if (this.config.widgetKind === 'WAHUNTER') {
|
421
|
+
let wahunterImageAlignClassName = `tb-nw-wahunter_${imageUrlNotEmpty ? ('image-align_' + markUp.image.align) : 'without-image'}`;
|
422
|
+
|
423
|
+
return `
|
424
|
+
<tb-notification-widget-inner id="tb-notification-widget-inner" class="tb-notification-widget-inner">
|
425
|
+
<tb-notification-widget-overlay class="hidden">
|
426
|
+
<tb-notification-widget-popup class="${popupStyleClass}">
|
427
|
+
<span id="tb-notification-widget-close" class="tb-notification-widget-close-icon">×</span>
|
428
|
+
${this.getTbBrandBadge(this.config)}
|
429
|
+
<tb-nw-wahunter class="tb-nw-wahunter tb-nw-wahunter_mode_popup ${wahunterImageAlignClassName}"></tb-nw-wahunter>
|
430
|
+
</tb-notification-widget-popup>
|
431
|
+
</tb-notification-widget-overlay>
|
432
|
+
</tb-notification-widget-inner>
|
433
|
+
`;
|
363
434
|
}
|
364
435
|
|
365
|
-
|
366
|
-
|
436
|
+
const buttonsStyle = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'square' : 'rounded');
|
437
|
+
const buttonsStyleClass = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'tb-btn-style-square' : 'tb-btn-style-rounded');
|
438
|
+
let body = '';
|
439
|
+
|
440
|
+
const channels = this.widget.getEnabledChannels();
|
441
|
+
|
442
|
+
body = channels.map((channel, index) => {
|
443
|
+
const item = assign({}, channel.config, {
|
444
|
+
type: this.config.type,
|
445
|
+
markUp: assign({}, markUp.buttons, { style: buttonsStyle }),
|
446
|
+
});
|
447
|
+
|
448
|
+
const attributes = stringifyAttributes({
|
449
|
+
channel: item.channel,
|
450
|
+
config: item,
|
451
|
+
});
|
452
|
+
|
453
|
+
return item.enabled ? `<div><tb-notification-button id="tb-notification-button-${index}" ${attributes}></tb-notification-button></div>` : '';
|
454
|
+
}).join('');
|
455
|
+
|
456
|
+
|
457
|
+
let popupBodyStyleClass = 'tb-notification-widget-popup-body';
|
458
|
+
|
459
|
+
if (isPopupWithImage) {
|
460
|
+
popupBodyStyleClass += ` ${popupBodyStyleClass}_image-align_${imageUrlNotEmpty ? markUp.image.align : 'none'}`
|
367
461
|
}
|
368
462
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
463
|
+
return `
|
464
|
+
<tb-notification-widget-inner id="tb-notification-widget-inner" class="tb-notification-widget-inner">
|
465
|
+
<tb-notification-widget-overlay class="hidden">
|
466
|
+
<tb-notification-widget-popup class="${popupStyleClass}">
|
467
|
+
<span id="tb-notification-widget-close" class="tb-notification-widget-close-icon">×</span>
|
468
|
+
${this.getTbBrandBadge(this.config)}
|
469
|
+
<tb-notification-widget-popup-body class="${popupBodyStyleClass}">
|
470
|
+
${(markUp.image && markUp.image.show) ? this.image : this.icon}
|
471
|
+
<tb-notification-widget-popup-main>
|
472
|
+
${this.header}
|
473
|
+
${this.description}
|
474
|
+
<div class="tb-widget-buttons tb-btn-align-center ${buttonsStyleClass}">${body}</div>
|
475
|
+
</tb-notification-widget-popup-main>
|
476
|
+
</tb-notification-widget-popup-body>
|
477
|
+
</tb-notification-widget-popup>
|
478
|
+
</tb-notification-widget-overlay>
|
479
|
+
</tb-notification-widget-inner>
|
480
|
+
`;
|
481
|
+
}
|
482
|
+
|
483
|
+
get inlineTemplate() {
|
484
|
+
|
485
|
+
this.element.className = (this.config.type === constants.WIDGET_TYPE_WIDGET ? 'tb-no-api-call' : '');
|
486
|
+
|
487
|
+
const buttonsContainerClasses = this.config.type === constants.WIDGET_TYPE_WIDGET
|
488
|
+
? this.getButtonsClasses()
|
489
|
+
: 'tb-btn-style-rounded tb-btn-mode-horizontal tb-btn-align-left';
|
490
|
+
|
491
|
+
const channels = this.widget.getEnabledChannels();
|
492
|
+
|
493
|
+
const body = channels.map((channel, index) => {
|
494
|
+
const item = assign({}, channel.config, { type: this.config.type, markUp: this.config.markUp.buttons });
|
495
|
+
const attributes = stringifyAttributes({
|
496
|
+
channel: item.channel,
|
497
|
+
config: item,
|
498
|
+
});
|
499
|
+
|
500
|
+
if (item.enabled) {
|
501
|
+
let html = `<tb-notification-button id="tb-notification-button-${index}" ${attributes}></tb-notification-button>`;
|
502
|
+
if (this.config.markUp.buttons.displayMode === 'vertical') {
|
503
|
+
html = `<div>${html}</div>`;
|
376
504
|
}
|
505
|
+
return html;
|
506
|
+
} else {
|
507
|
+
return '';
|
508
|
+
}
|
509
|
+
}).join('');
|
510
|
+
|
511
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.inline.show', 'displaySettings');
|
512
|
+
|
513
|
+
if (this.config.widgetKind === 'WAHUNTER') {
|
514
|
+
return `
|
515
|
+
<tb-notification-widget-inner id="tb-notification-widget-inner" class="tb-notification-widget-inner">
|
516
|
+
<tb-nw-wahunter class="tb-nw-wahunter tb-nw-wahunter_mode_inline tb-nw-wahunter_inline-mode-align_${this.config.markUp.buttons.align}"></tb-nw-wahunter>
|
517
|
+
</tb-notification-widget-inner>
|
518
|
+
`;
|
377
519
|
}
|
378
520
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
521
|
+
return `
|
522
|
+
<tb-notification-widget-inner id="tb-notification-widget-inner" class="tb-notification-widget-inner">
|
523
|
+
<div class="tb-widget-buttons ${buttonsContainerClasses}">
|
524
|
+
${body}
|
525
|
+
</div>
|
526
|
+
</tb-notification-widget-inner>
|
527
|
+
`;
|
528
|
+
}
|
529
|
+
|
530
|
+
get cornerPopupTemplate() {
|
531
|
+
const markUp = this.config.markUp;
|
532
|
+
|
533
|
+
if (this.config.widgetKind === 'WAHUNTER') {
|
534
|
+
return `
|
535
|
+
<tb-notification-widget-inner id="tb-notification-widget-inner" class="tb-notification-widget-inner">
|
536
|
+
<tb-notification-widget-corner-popup>
|
537
|
+
<tb-widget-corner-popup-window class="${this.pallet}">
|
538
|
+
<div class="tb-fullscreen-close-rectangle">
|
539
|
+
${iconClose}
|
540
|
+
</div>
|
541
|
+
<tb-nw-wahunter class="tb-nw-wahunter tb-nw-wahunter_mode_corner-popup"></tb-nw-wahunter>
|
542
|
+
${this.getTbBrandBadge(this.config)}
|
543
|
+
</tb-widget-corner-popup-window>
|
544
|
+
<tb-widget-corner-popup-button style="background: ${markUp.wahunterButton.color}">
|
545
|
+
${iconChatWindow}
|
546
|
+
${iconClose}
|
547
|
+
</tb-widget-corner-popup-button>
|
548
|
+
<tb-widget-corner-popup-tooltip-container
|
549
|
+
class="${markUp.description.showOnMobile ? 'tb-widget-corner-popup-tooltip-container_show-on-mobile' : ''}"
|
550
|
+
style="${markUp.description.value.trim() ? '' : 'display:none'}"
|
551
|
+
>
|
552
|
+
<tb-widget-corner-popup-tooltip style="color:${markUp.description.color}">\
|
553
|
+
${markUp.description.value}\
|
554
|
+
</tb-widget-corner-popup-tooltip>
|
555
|
+
<tb-widget-corner-popup-tooltip-arrow />
|
556
|
+
</tb-widget-corner-popup-tooltip-container>
|
557
|
+
</tb-notification-widget-corner-popup>
|
558
|
+
</tb-notification-widget-inner>
|
559
|
+
`;
|
386
560
|
}
|
387
561
|
|
388
|
-
|
389
|
-
|
390
|
-
const classes = [];
|
562
|
+
return '';
|
563
|
+
}
|
391
564
|
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
classes.push( getButtonsAlignmentClass(markUp.align) );
|
396
|
-
classes.push( getButtonsDisplayModeClass(markUp.displayMode) );
|
397
|
-
}
|
565
|
+
static get tagName() {
|
566
|
+
return 'tb-notification-widget';
|
567
|
+
}
|
398
568
|
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
case 'rounded':
|
403
|
-
return `${prefix}-rounded`;
|
404
|
-
case 'icons':
|
405
|
-
return `${prefix}-icons`;
|
406
|
-
default:
|
407
|
-
return `${prefix}-square`;
|
408
|
-
}
|
409
|
-
}
|
569
|
+
static getWidget(widgetId) {
|
570
|
+
return widgetsStorage.getWidget(widgetId);
|
571
|
+
}
|
410
572
|
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
573
|
+
show() {
|
574
|
+
if (this.config && this.config.displayMode && this.config.displayMode === "popup") {
|
575
|
+
const popup = this.element.getElementsByTagName("tb-notification-widget-overlay")[0];
|
576
|
+
if (popup.className.indexOf('hidden') !== -1 || popup.className.indexOf('closed')) {
|
577
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.show', 'manual');
|
578
|
+
}
|
579
|
+
popup.className = '';
|
580
|
+
}
|
581
|
+
}
|
582
|
+
|
583
|
+
showWithRules() {
|
584
|
+
let showWidgetSetting = this.config.showWidgetSetting;
|
585
|
+
let sessionShowCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_s_show_counter';
|
586
|
+
let daysShowCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_days_show_counter';
|
587
|
+
let daysCloseCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_days_close_counter';
|
588
|
+
let totalCloseCounterName = constants.COOKIE_NAME_PREFIX + this.widgetId + '_total_close_counter';
|
589
|
+
|
590
|
+
if (showWidgetSetting) {
|
591
|
+
if (!showWidgetSetting.showIfSubscribed && this.widgetSubscriptions.length > 0) {
|
592
|
+
return false;
|
593
|
+
}
|
594
|
+
|
595
|
+
let daysTimeout = showWidgetSetting.showAfterDays * constants.SECONDS_IN_DAY;
|
596
|
+
let sessionTimeout = showWidgetSetting.showSessionLength * 60;
|
597
|
+
let daysShowCounter = cookiesEx.incrementIntCookie(daysShowCounterName, daysTimeout);
|
598
|
+
let sessionShowCounter = cookiesEx.incrementIntCookie(sessionShowCounterName, sessionTimeout);
|
599
|
+
let daysCloseCounter = cookiesEx.getIntCookie(daysCloseCounterName) || 0;
|
600
|
+
let totalCloseCounter = cookiesEx.getIntCookie(totalCloseCounterName) || 0;
|
601
|
+
|
602
|
+
if (sessionShowCounter > showWidgetSetting.showTimesInSession ||
|
603
|
+
(showWidgetSetting.showTimesInRow > 0 && daysShowCounter > showWidgetSetting.showTimesInRow) ||
|
604
|
+
(showWidgetSetting.closeTimesInRow > 0 && daysCloseCounter >= showWidgetSetting.closeTimesInRow) ||
|
605
|
+
(showWidgetSetting.closeTimesInTotal > 0 && totalCloseCounter >= showWidgetSetting.closeTimesInTotal)) {
|
606
|
+
return false;
|
607
|
+
}
|
608
|
+
}
|
422
609
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
610
|
+
if (this.config && this.config.displayMode && this.config.displayMode === "popup") {
|
611
|
+
const popup = this.element.getElementsByTagName("tb-notification-widget-overlay")[0];
|
612
|
+
if (popup.className.indexOf('hidden') !== -1 || popup.className.indexOf('closed')) {
|
613
|
+
appInsights.trackWidgetEvent(this.config.id, 'notificationWidget.popup.show', 'manual');
|
614
|
+
}
|
615
|
+
popup.className = '';
|
616
|
+
return popup;
|
617
|
+
}
|
431
618
|
|
432
|
-
|
619
|
+
return false;
|
620
|
+
}
|
621
|
+
|
622
|
+
hide() {
|
623
|
+
if (this.config && this.config.displayMode && this.config.displayMode === "popup") {
|
624
|
+
const popup = this.element.getElementsByTagName("tb-notification-widget-overlay")[0];
|
625
|
+
if (popup.className.indexOf('hidden') !== -1) {
|
626
|
+
popup.className += 'hidden';
|
627
|
+
}
|
433
628
|
}
|
434
|
-
}
|
629
|
+
}
|
630
|
+
|
631
|
+
getButtonsClasses() {
|
632
|
+
const classes = [];
|
633
|
+
|
634
|
+
if (this.config.markUp && this.config.markUp.buttons) {
|
635
|
+
const markUp = this.config.markUp.buttons;
|
636
|
+
classes.push(getButtonsStyleClass(markUp.style));
|
637
|
+
classes.push(getButtonsAlignmentClass(markUp.align));
|
638
|
+
classes.push(getButtonsDisplayModeClass(markUp.displayMode));
|
639
|
+
}
|
640
|
+
|
641
|
+
function getButtonsStyleClass(style) {
|
642
|
+
const prefix = 'tb-btn-style';
|
643
|
+
switch (style) {
|
644
|
+
case 'rounded':
|
645
|
+
return `${prefix}-rounded`;
|
646
|
+
case 'icons':
|
647
|
+
return `${prefix}-icons`;
|
648
|
+
case 'gradient':
|
649
|
+
return `${prefix}-gradient`;
|
650
|
+
default:
|
651
|
+
return `${prefix}-square`;
|
652
|
+
}
|
653
|
+
}
|
654
|
+
|
655
|
+
function getButtonsAlignmentClass(align) {
|
656
|
+
const prefix = 'tb-btn-align';
|
657
|
+
switch (align) {
|
658
|
+
case 'left':
|
659
|
+
return `${prefix}-left`;
|
660
|
+
case 'right':
|
661
|
+
return `${prefix}-right`;
|
662
|
+
default:
|
663
|
+
return `${prefix}-center`;
|
664
|
+
}
|
665
|
+
}
|
666
|
+
|
667
|
+
function getButtonsDisplayModeClass(mode) {
|
668
|
+
const prefix = 'tb-btn-mode';
|
669
|
+
if (mode === 'vertical') {
|
670
|
+
return `${prefix}-vertical`;
|
671
|
+
} else {
|
672
|
+
return `${prefix}-horizontal`;
|
673
|
+
}
|
674
|
+
}
|
675
|
+
|
676
|
+
return classes.join(' ');
|
677
|
+
}
|
678
|
+
};
|