@subiz/widget-v4 4.0.59 → 4.0.64
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/assets/img/caret.svg +1 -0
- package/assets/img/done_green.svg +4 -0
- package/assets/img/empty_1.svg +11 -0
- package/assets/img/ghn.svg +17 -0
- package/assets/img/ghtk.svg +18 -0
- package/assets/img/home.svg +1 -0
- package/assets/img/info.svg +1 -0
- package/assets/img/loader.svg +1 -0
- package/assets/img/map-pin.svg +1 -0
- package/assets/img/not_found_search.png +0 -0
- package/assets/img/package.svg +5 -0
- package/assets/img/package_fade.svg +1 -0
- package/assets/img/phone.svg +1 -0
- package/assets/img/search.svg +1 -0
- package/assets/img/shop.svg +1 -0
- package/assets/img/shop_faded.svg +1 -0
- package/assets/img/user.svg +1 -0
- package/assets/img/x.svg +5 -0
- package/assets/less/chatbox.less +35 -0
- package/assets/less/dropdown_select.less +130 -0
- package/assets/less/form.less +7 -20
- package/assets/less/order.less +489 -0
- package/assets/less/rating.less +3 -8
- package/babel.config.js +2 -4
- package/compiled_src/bot.js +7 -1
- package/compiled_src/chatbox/DropdownSelect.js +248 -0
- package/compiled_src/chatbox/Event.js +4 -2
- package/compiled_src/chatbox/Events.js +1 -0
- package/compiled_src/chatbox/Order.js +285 -0
- package/compiled_src/chatbox/OrderAttachments.js +2 -1
- package/compiled_src/chatbox/TextMessage.js +9 -2
- package/compiled_src/chatbox/Widget.js +44 -3
- package/compiled_src/chatbox/main.js +2 -1
- package/compiled_src/chatbox/spinner.js +1 -1
- package/compiled_src/chatbox/time.js +3 -1
- package/compiled_src/common.js +40 -1
- package/compiled_src/contact/contact.js +1 -3
- package/compiled_src/order/address_picker.js +249 -0
- package/compiled_src/order/icon.js +62 -0
- package/compiled_src/order/index.js +113 -0
- package/compiled_src/order/order.js +1234 -0
- package/compiled_src/plugin.js +9 -42
- package/compiled_src/popup/popup.js +2 -2
- package/compiled_src/store/api.js +20 -0
- package/compiled_src/store/store.js +42 -0
- package/compiled_src/util/common.js +36 -2
- package/dist/0b82fa7e5c3b07b40a44.png +1 -0
- package/dist/0f4af006e38ee8b93633.png +1 -0
- package/dist/{74.js → 132.js} +2322 -279
- package/dist/178.js +341 -174
- package/dist/17ee31b89ac.132.js +1 -0
- package/dist/17ee31b89ac.178.js +1 -0
- package/dist/17ee31b89ac.213.js +1 -0
- package/dist/17ee31b89ac.335.js +1 -0
- package/dist/17ee31b89ac.362.js +1 -0
- package/dist/17ee31b89ac.441.js +1 -0
- package/dist/17ee31b89ac.605.js +1 -0
- package/dist/17ee31b89ac.678.js +1 -0
- package/dist/17ee31b89ac.782.js +1 -0
- package/dist/17ee31b89ac.app.js +1 -0
- package/dist/{17d939953e0.index.html → 17ee31b89ac.index.html} +3 -18
- package/dist/{17d939953e0.library.html → 17ee31b89ac.library.html} +3 -18
- package/dist/17ee31b89ac.library.js +1 -0
- package/dist/{17d939953e0.preview.html → 17ee31b89ac.preview.html} +1 -1
- package/dist/17ee31b89ac.preview.js +1 -0
- package/dist/17ee31b89ac.screenshoot.js +1 -0
- package/dist/1ea1c6cd21d25176810c.png +1 -0
- package/dist/213.js +35 -70
- package/dist/292d42404e1b03398f61.png +1 -0
- package/dist/312d376370831b7bea83.png +1 -0
- package/dist/313d1bfc1cf776d1aefe.png +1 -0
- package/dist/335.js +411 -0
- package/dist/362.js +71 -21
- package/dist/441.js +70 -44
- package/dist/4aa58bb7a66bb44975aa.png +1 -0
- package/dist/56ce063bc6c81adb7322.png +1 -0
- package/dist/605.js +1 -64
- package/dist/678.js +70 -20
- package/dist/6a411166ef5cc79e0714.png +1 -0
- package/dist/6faf403782fefacc1649.png +1 -0
- package/dist/782.js +118 -21
- package/dist/79dca33c68fab79c067f.png +1 -0
- package/dist/82da1578fa84f9debaeb.png +1 -0
- package/dist/8b8e0f0824743974b282.png +1 -0
- package/dist/8d551390d81e39130a3c.png +1 -0
- package/dist/9fc61b9479877ebdb6c7.png +1 -0
- package/dist/HASH +1 -1
- package/dist/a165d31dcb3dc90f1057.png +1 -0
- package/dist/a98d4a5698812c4426b3.png +1 -0
- package/dist/assets/img/caret.998eb8f.svg +1 -0
- package/dist/assets/img/done_green.b817fd4.svg +4 -0
- package/dist/assets/img/empty_1.0b98af0.svg +11 -0
- package/dist/assets/img/ghn.070f8e3.svg +17 -0
- package/dist/assets/img/ghtk.326eac1.svg +18 -0
- package/dist/assets/img/info.ebce7ea.svg +1 -0
- package/dist/assets/img/loader.37000a7.svg +1 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +5 -0
- package/dist/assets/img/package_fade.763c001.svg +1 -0
- package/dist/assets/img/search.f9705ff.svg +1 -0
- package/dist/assets/img/shop.f7dc7d8.svg +1 -0
- package/dist/assets/img/shop_faded.df7845a.svg +1 -0
- package/dist/assets/img/x.26fdfa3.svg +5 -0
- package/dist/c41606bf9d1b604e46d5.png +1 -0
- package/dist/ce1f7450ce6c1aacd330.png +1 -0
- package/dist/cf8c01e88f4770a6e3e5.png +1 -0
- package/dist/dfbcfeab1d5622a737e2.png +1 -0
- package/dist/e4893ed8c2f7b8329919.png +1 -0
- package/dist/ec2ab4eb4ef73d186186.png +1 -0
- package/dist/screenshoot.html +1 -1
- package/dist/screenshoot.js +211 -48
- package/index.html +3 -18
- package/order.html +32 -0
- package/package.json +14 -15
- package/src/bot.js +2 -1
- package/src/chatbox/DropdownSelect.js +229 -0
- package/src/chatbox/Event.js +2 -2
- package/src/chatbox/Events.js +43 -42
- package/src/chatbox/Order.js +232 -0
- package/src/chatbox/OrderAttachments.js +2 -1
- package/src/chatbox/TextMessage.js +21 -12
- package/src/chatbox/Widget.js +34 -4
- package/src/chatbox/main.js +2 -2
- package/src/chatbox/spinner.js +1 -1
- package/src/chatbox/time.js +1 -1
- package/src/common.js +52 -8
- package/src/contact/contact.js +1 -1
- package/src/order/address_picker.js +235 -0
- package/src/order/icon.js +32 -0
- package/src/order/index.js +86 -0
- package/src/order/order.js +1157 -0
- package/src/order/scratch +211 -0
- package/src/plugin.js +7 -52
- package/src/popup/popup.js +2 -2
- package/src/store/api.js +26 -1
- package/src/store/store.js +46 -9
- package/src/util/common.js +48 -2
- package/webpack.dev.js +2 -0
- package/dist/17d939953e0.178.js +0 -1
- package/dist/17d939953e0.213.js +0 -1
- package/dist/17d939953e0.362.js +0 -1
- package/dist/17d939953e0.441.js +0 -1
- package/dist/17d939953e0.605.js +0 -1
- package/dist/17d939953e0.619.js +0 -1
- package/dist/17d939953e0.678.js +0 -1
- package/dist/17d939953e0.74.js +0 -1
- package/dist/17d939953e0.782.js +0 -1
- package/dist/17d939953e0.app.js +0 -1
- package/dist/17d939953e0.library.js +0 -1
- package/dist/17d939953e0.preview.js +0 -1
- package/dist/17d939953e0.screenshoot.js +0 -1
- package/dist/619.js +0 -777
package/compiled_src/plugin.js
CHANGED
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _index = _interopRequireDefault(require("./util/index.js"));
|
|
9
9
|
|
|
10
|
+
var common = _interopRequireWildcard(require("./common.js"));
|
|
11
|
+
|
|
10
12
|
var _preact = require("preact");
|
|
11
13
|
|
|
12
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -23,16 +25,13 @@ const LoadPopup = () => Promise.resolve().then(() => _interopRequireWildcard(req
|
|
|
23
25
|
|
|
24
26
|
const LoadNotif = () => Promise.resolve().then(() => _interopRequireWildcard(require('./notif/notif.js')));
|
|
25
27
|
|
|
26
|
-
let langMessages = {};
|
|
27
|
-
let downloadLock = false;
|
|
28
|
-
|
|
29
28
|
function Plugin(plugin, store, $container, lib) {
|
|
30
29
|
if (!$container) throw '$div must is a valid html node';
|
|
31
30
|
var $div = document.createElement('div');
|
|
32
31
|
$div.id = plugin.id;
|
|
33
32
|
$container.appendChild($div);
|
|
34
33
|
|
|
35
|
-
let _locale = getLocale(plugin, _index.default.detectLang());
|
|
34
|
+
let _locale = common.getLocale(plugin, _index.default.detectLang());
|
|
36
35
|
|
|
37
36
|
var domGate = new _index.default.Gate();
|
|
38
37
|
var pageIndex = 0;
|
|
@@ -165,7 +164,7 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
165
164
|
let t = key => {
|
|
166
165
|
if (_locale === 'debug') return `{{${key}}}`;
|
|
167
166
|
|
|
168
|
-
let messages = _index.default.get(langMessages, _locale, []);
|
|
167
|
+
let messages = _index.default.get(common.langMessages, _locale, []);
|
|
169
168
|
|
|
170
169
|
let message = _index.default.find(messages, message => message.key === key);
|
|
171
170
|
|
|
@@ -187,7 +186,7 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
187
186
|
t.locale = () => _locale;
|
|
188
187
|
|
|
189
188
|
this.forceDownloadLanguage = async () => {
|
|
190
|
-
await downloadLanguage(store, _locale, true);
|
|
189
|
+
await common.downloadLanguage(store, _locale, true);
|
|
191
190
|
this.update(plugin);
|
|
192
191
|
};
|
|
193
192
|
|
|
@@ -197,8 +196,8 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
197
196
|
|
|
198
197
|
_render();
|
|
199
198
|
|
|
200
|
-
_locale = getLocale(plugin, locale);
|
|
201
|
-
await downloadLanguage(store, _locale);
|
|
199
|
+
_locale = common.getLocale(plugin, locale);
|
|
200
|
+
await common.downloadLanguage(store, _locale);
|
|
202
201
|
this.t = t;
|
|
203
202
|
|
|
204
203
|
_render();
|
|
@@ -237,7 +236,7 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
237
236
|
}
|
|
238
237
|
|
|
239
238
|
this.update(plugin);
|
|
240
|
-
downloadLanguage(store, _locale).then(() => {
|
|
239
|
+
common.downloadLanguage(store, _locale).then(() => {
|
|
241
240
|
this.t = t;
|
|
242
241
|
this.update(plugin);
|
|
243
242
|
});
|
|
@@ -387,36 +386,4 @@ class PluginMgr {
|
|
|
387
386
|
|
|
388
387
|
}
|
|
389
388
|
|
|
390
|
-
exports.default = PluginMgr;
|
|
391
|
-
|
|
392
|
-
function downloadLanguage(store, locale, force) {
|
|
393
|
-
if (downloadLock) return new Promise(resolve => setTimeout(() => downloadLanguage(store, locale, force).then(resolve), 100));
|
|
394
|
-
downloadLock = true;
|
|
395
|
-
let messages;
|
|
396
|
-
|
|
397
|
-
if (locale === 'debug' || langMessages[locale] && !force) {
|
|
398
|
-
downloadLock = false;
|
|
399
|
-
return Promise.resolve();
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
return store.getLocaleContent(locale).then(res => {
|
|
403
|
-
downloadLock = false;
|
|
404
|
-
messages = _index.default.get(res, 'body.messages', []);
|
|
405
|
-
langMessages[locale] = messages;
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
const getLocale = (plugin, loc) => {
|
|
410
|
-
if (!loc) loc = '';
|
|
411
|
-
|
|
412
|
-
let found = _index.default.find(plugin.locales, l => l.toLowerCase().trim() === loc.toLowerCase().trim());
|
|
413
|
-
|
|
414
|
-
if (found) return found;
|
|
415
|
-
found = _index.default.find(plugin.locales, l => {
|
|
416
|
-
l = l.replace('-', '_').split('_')[0].trim().toLowerCase();
|
|
417
|
-
let compareloc = loc.replace('-', '_').split('_')[0].trim().toLowerCase();
|
|
418
|
-
return l == compareloc;
|
|
419
|
-
});
|
|
420
|
-
if (found) return found;
|
|
421
|
-
return plugin.locale || 'en-US';
|
|
422
|
-
};
|
|
389
|
+
exports.default = PluginMgr;
|
|
@@ -118,7 +118,7 @@ class Popup extends _common.Com {
|
|
|
118
118
|
|
|
119
119
|
let form = _index.default.find(page.components, com => com.type === 'form');
|
|
120
120
|
|
|
121
|
-
if (!form || !form.form) return;
|
|
121
|
+
if (!form || !form.form) return true;
|
|
122
122
|
|
|
123
123
|
let fields = _index.default.get(form, 'form.fields', []);
|
|
124
124
|
|
|
@@ -275,7 +275,7 @@ class Popup extends _common.Com {
|
|
|
275
275
|
}
|
|
276
276
|
|
|
277
277
|
if (hasConversion) {
|
|
278
|
-
var formData = new FormData(this._formRef.current);
|
|
278
|
+
var formData = this._formRef.current ? new FormData(this._formRef.current) : new FormData();
|
|
279
279
|
var summitFields = [];
|
|
280
280
|
|
|
281
281
|
let user = _index.default.cloneDeep(this.props.store.matchUser());
|
|
@@ -113,6 +113,26 @@ class _default {
|
|
|
113
113
|
|
|
114
114
|
_defineProperty(this, "sendConversion", conversion => this.apireq.post(`/accounts/${this.accid}/campaigns/${conversion.campaign_id}/conversions`, conversion));
|
|
115
115
|
|
|
116
|
+
_defineProperty(this, "lookupOrder", key => ajax.setBaseUrl(this.ApiURL).setContentType('text/plain').beforeHook(jsonifyTextPlain).setParser('json').addQuery('x-signed-key', key).get(`/orders/123`));
|
|
117
|
+
|
|
118
|
+
_defineProperty(this, "getOrder", id => this.apireq.get(`/accounts/${this.accid}/orders/` + id));
|
|
119
|
+
|
|
120
|
+
_defineProperty(this, "updateOrder", order => this.apireq.post(`/accounts/${this.accid}/orders/` + order.id, order));
|
|
121
|
+
|
|
122
|
+
_defineProperty(this, "fetchShippingAddresses", () => this.apireq.get(`/accounts/${this.accid}/users/${this.uid}/shipping-addresses`));
|
|
123
|
+
|
|
124
|
+
_defineProperty(this, "createShippingAddress", addr => this.apireq.post(`/accounts/${this.accid}/users/${this.uid}/shipping-addresses`, addr));
|
|
125
|
+
|
|
126
|
+
_defineProperty(this, "list_provinces", () => this.apireq.get(`/accounts/${this.accid}/provinces`));
|
|
127
|
+
|
|
128
|
+
_defineProperty(this, "list_districts", p => this.apireq.setQuery(p).get(`/accounts/${this.accid}/districts`));
|
|
129
|
+
|
|
130
|
+
_defineProperty(this, "list_wards", p => this.apireq.setQuery(p).get(`/accounts/${this.accid}/wards`));
|
|
131
|
+
|
|
132
|
+
_defineProperty(this, "suggest_address", keyword => this.apireq.setQuery({
|
|
133
|
+
keyword: keyword
|
|
134
|
+
}).get(`/accounts/${this.accid}/addresses`));
|
|
135
|
+
|
|
116
136
|
this.FileURL = FileURL;
|
|
117
137
|
this.ApiURL = ApiURL;
|
|
118
138
|
this.apireq = ajax.setBaseUrl(ApiURL).withCredentials(true).addQuery('v', '6').setContentType('text/plain').beforeHook(jsonifyTextPlain).setParser('json').beforeHook((param, done) => {
|
|
@@ -46,10 +46,14 @@ class Store {
|
|
|
46
46
|
return this.kv.match('user');
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
+
_defineProperty(this, "suggest_addresses", keyword => this.api.suggest_address(keyword));
|
|
50
|
+
|
|
49
51
|
_defineProperty(this, "matchSession", () => this.kv.match('session') || {});
|
|
50
52
|
|
|
51
53
|
_defineProperty(this, "matchAccount", () => this.cache.match('account'));
|
|
52
54
|
|
|
55
|
+
_defineProperty(this, "matchPaymentMethods", () => this.cache.match('payment_methods'));
|
|
56
|
+
|
|
53
57
|
_defineProperty(this, "matchUnread", () => {
|
|
54
58
|
let user = this.matchUser();
|
|
55
59
|
let allconvos = this.matchConvo('*');
|
|
@@ -103,6 +107,14 @@ class Store {
|
|
|
103
107
|
return this.reconnectGate.open();
|
|
104
108
|
});
|
|
105
109
|
|
|
110
|
+
_defineProperty(this, "list_provinces", () => this.api.list_provinces());
|
|
111
|
+
|
|
112
|
+
_defineProperty(this, "list_districts", p => this.api.list_districts(p));
|
|
113
|
+
|
|
114
|
+
_defineProperty(this, "list_wards", p => this.api.list_wards(p));
|
|
115
|
+
|
|
116
|
+
_defineProperty(this, "list_provices", void 0);
|
|
117
|
+
|
|
106
118
|
_defineProperty(this, "listEvents", id => {
|
|
107
119
|
if (!id || id === '*' || typeof id !== 'string') return;
|
|
108
120
|
|
|
@@ -247,6 +259,24 @@ class Store {
|
|
|
247
259
|
return _index.default.Date.now() - (this.g_sync[key] || 0) < 300000;
|
|
248
260
|
}
|
|
249
261
|
|
|
262
|
+
async fetchShippingAddresses() {
|
|
263
|
+
let out = await this.api.fetchShippingAddresses();
|
|
264
|
+
if (out.error) return null;
|
|
265
|
+
this.cache.put('shipping_address', out.body.shipping_addresses);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
matchShippingAddresses() {
|
|
269
|
+
return this.cache.match('shipping_address');
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
updateOrder(order) {
|
|
273
|
+
return this.api.updateOrder(order);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
createShippingAddress(addr) {
|
|
277
|
+
return this.api.createShippingAddress(addr);
|
|
278
|
+
}
|
|
279
|
+
|
|
250
280
|
async overrideAcc(acc) {
|
|
251
281
|
this.forceAcc = _index.default.cloneDeep(acc);
|
|
252
282
|
await this.readyGate.entry();
|
|
@@ -470,6 +500,7 @@ class Store {
|
|
|
470
500
|
}
|
|
471
501
|
|
|
472
502
|
_setUser(user) {
|
|
503
|
+
user = _index.default.cloneDeep(user);
|
|
473
504
|
let olduser = this.kv.match('user') || {};
|
|
474
505
|
var accid = olduser.account_id || user.account_id;
|
|
475
506
|
var id = olduser.id || user.id;
|
|
@@ -573,6 +604,9 @@ class Store {
|
|
|
573
604
|
this.cache.put('agent', agentM);
|
|
574
605
|
}
|
|
575
606
|
|
|
607
|
+
let pms = _index.default.get(setting, 'payment_methods', []);
|
|
608
|
+
|
|
609
|
+
this.cache.put('payment_methods', pms);
|
|
576
610
|
this.pubsub.publish('account');
|
|
577
611
|
}
|
|
578
612
|
|
|
@@ -795,6 +829,14 @@ class Store {
|
|
|
795
829
|
};
|
|
796
830
|
}
|
|
797
831
|
|
|
832
|
+
fetchOrder(id) {
|
|
833
|
+
return this.api.getOrder(id);
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
lookupOrder(key) {
|
|
837
|
+
return this.api.lookupOrder(key);
|
|
838
|
+
}
|
|
839
|
+
|
|
798
840
|
createPostback(cid, postback) {
|
|
799
841
|
return this.api.createPostback(cid, postback);
|
|
800
842
|
}
|
|
@@ -47,6 +47,7 @@ exports.replaceCssVariable = replaceCssVariable;
|
|
|
47
47
|
exports.replaceCssVariablePlugin = replaceCssVariablePlugin;
|
|
48
48
|
exports.requestAnimationFrame = void 0;
|
|
49
49
|
exports.sameDay = sameDay;
|
|
50
|
+
exports.scrollIntoViewIfNeeded = scrollIntoViewIfNeeded;
|
|
50
51
|
exports.setCss = setCss;
|
|
51
52
|
exports.setInterval = void 0;
|
|
52
53
|
exports.setMsgField = setMsgField;
|
|
@@ -61,6 +62,7 @@ exports.throttle = throttle;
|
|
|
61
62
|
exports.tokenize = tokenize;
|
|
62
63
|
exports.trim = trim;
|
|
63
64
|
exports.trimStart = trimStart;
|
|
65
|
+
exports.unicodeToAscii = unicodeToAscii;
|
|
64
66
|
exports.unixSec = unixSec;
|
|
65
67
|
exports.usersOfConvo = usersOfConvo;
|
|
66
68
|
|
|
@@ -998,6 +1000,7 @@ function preloadWebfonts(fonts, done) {
|
|
|
998
1000
|
node.style.color = 'transparent';
|
|
999
1001
|
node.style.fontSize = '20px';
|
|
1000
1002
|
node.style.height = '0px';
|
|
1003
|
+
node.style.top = '0px';
|
|
1001
1004
|
node.style.width = '0px';
|
|
1002
1005
|
node.style.fontWeight = weight;
|
|
1003
1006
|
node.setAttribute('subiz-preload', font + ':' + weight);
|
|
@@ -1133,9 +1136,9 @@ var sleep = ms => new Promise(res => setTimeout(res, ms));
|
|
|
1133
1136
|
exports.sleep = sleep;
|
|
1134
1137
|
|
|
1135
1138
|
function formatCurrency(val) {
|
|
1136
|
-
if (!val) return 0;
|
|
1139
|
+
if (!val) return '0 đ';
|
|
1137
1140
|
val = Math.round(val);
|
|
1138
|
-
return val.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
|
|
1141
|
+
return val.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') + ' đ';
|
|
1139
1142
|
}
|
|
1140
1143
|
|
|
1141
1144
|
function replaceFileUrl(src) {
|
|
@@ -1161,4 +1164,35 @@ function replaceFileUrl(src) {
|
|
|
1161
1164
|
src = src.replace('https://file.mysubiz.com/', fileurl);
|
|
1162
1165
|
src = src.replace('http://file.mysubiz.com/', fileurl);
|
|
1163
1166
|
return src;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
function unicodeToAscii(str) {
|
|
1170
|
+
str = str + '';
|
|
1171
|
+
str = str.replace('đ', 'd').replace('Đ', 'D');
|
|
1172
|
+
return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
function scrollIntoViewIfNeeded($ele) {
|
|
1176
|
+
centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
|
|
1177
|
+
var parent = $ele.parentNode;
|
|
1178
|
+
var parentComputedStyle = window.getComputedStyle(parent, null);
|
|
1179
|
+
var parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'));
|
|
1180
|
+
var parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width'));
|
|
1181
|
+
var overTop = $ele.offsetTop - parent.offsetTop < parent.scrollTop;
|
|
1182
|
+
var overBottom = $ele.offsetTop - parent.offsetTop + $ele.clientHeight - parentBorderTopWidth > parent.scrollTop + parent.clientHeight;
|
|
1183
|
+
var overLeft = $ele.offsetLeft - parent.offsetLeft < parent.scrollLeft;
|
|
1184
|
+
var overRight = $ele.offsetLeft - parent.offsetLeft + $ele.clientWidth - parentBorderLeftWidth > parent.scrollLeft + parent.clientWidth;
|
|
1185
|
+
var alignWithTop = overTop && !overBottom;
|
|
1186
|
+
|
|
1187
|
+
if ((overTop || overBottom) && centerIfNeeded) {
|
|
1188
|
+
parent.scrollTop = $ele.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + $ele.clientHeight / 2;
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
if ((overLeft || overRight) && centerIfNeeded) {
|
|
1192
|
+
parent.scrollLeft = $ele.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + $ele.clientWidth / 2;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {
|
|
1196
|
+
$ele.scrollIntoView(alignWithTop);
|
|
1197
|
+
}
|
|
1164
1198
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = __webpack_public_path__ + "assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = __webpack_public_path__ + "assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png";
|