@subiz/widget-v4 4.1.83 → 4.1.85
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/compiled_src/chatbox/ChatButton.js +7 -29
- package/compiled_src/chatbox/TextMessage.js +17 -96
- package/compiled_src/chatbox/block.js +152 -0
- package/compiled_src/notif/notif.js +35 -35
- package/compiled_src/util/common.js +174 -1
- package/compiled_src/util/index.js +0 -2
- package/package.json +2 -2
- package/src/chatbox/ChatButton.js +5 -36
- package/src/chatbox/Emoji.js +1 -1
- package/src/chatbox/TextMessage.js +18 -96
- package/src/chatbox/block.js +161 -0
- package/src/common.js +2 -10
- package/src/notif/notif.js +30 -43
- package/src/util/common.js +224 -0
- package/src/util/index.js +0 -3
- package/compiled_src/util/extractor.js +0 -136
- package/dist/127.js +0 -273
- package/dist/132.js +0 -2796
- package/dist/185.js +0 -1885
- package/dist/19077b40b00.127.js +0 -1
- package/dist/19077b40b00.132.js +0 -1
- package/dist/19077b40b00.185.js +0 -1
- package/dist/19077b40b00.27.js +0 -1
- package/dist/19077b40b00.278.js +0 -1
- package/dist/19077b40b00.459.js +0 -1
- package/dist/19077b40b00.490.js +0 -1
- package/dist/19077b40b00.74.js +0 -1
- package/dist/19077b40b00.997.js +0 -1
- package/dist/19077b40b00.app.js +0 -1
- package/dist/19077b40b00.index.html +0 -33
- package/dist/19077b40b00.library.html +0 -33
- package/dist/19077b40b00.library.js +0 -1
- package/dist/19077b40b00.preview.html +0 -759
- package/dist/19077b40b00.preview.js +0 -1
- package/dist/19077b40b00.screenshoot.js +0 -1
- package/dist/19077b40b00.webview.js +0 -1
- package/dist/27.js +0 -107
- package/dist/278.js +0 -406
- package/dist/459.js +0 -107
- package/dist/490.js +0 -304
- package/dist/74.js +0 -372
- package/dist/997.js +0 -107
- package/dist/HASH +0 -1
- package/dist/assets/img/Facebook.64607ec.png +0 -0
- package/dist/assets/img/Zalo.6845707.png +0 -0
- package/dist/assets/img/award1a.1a58e10.png +0 -0
- package/dist/assets/img/award3a.3b74423.png +0 -0
- package/dist/assets/img/award4a.ed6ccd4.png +0 -0
- package/dist/assets/img/award5.39eb7ae.png +0 -0
- package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
- package/dist/assets/img/caret.998eb8f.svg +0 -1
- package/dist/assets/img/convos_empty.2353007.svg +0 -72
- package/dist/assets/img/default.06e6ee0.jpg +0 -0
- package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
- package/dist/assets/img/done_gray.d7e8203.svg +0 -4
- package/dist/assets/img/done_green.b817fd4.svg +0 -4
- package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
- package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
- package/dist/assets/img/empty.29bed2d.svg +0 -23
- package/dist/assets/img/empty_1.0b98af0.svg +0 -11
- package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
- package/dist/assets/img/external-link.90577cc.svg +0 -1
- package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
- package/dist/assets/img/ghn.070f8e3.svg +0 -17
- package/dist/assets/img/ghtk.326eac1.svg +0 -18
- package/dist/assets/img/image_default.be0698b.png +0 -0
- package/dist/assets/img/info.ebce7ea.svg +0 -1
- package/dist/assets/img/loader.37000a7.svg +0 -1
- package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
- package/dist/assets/img/main-service1.d536cc2.png +0 -0
- package/dist/assets/img/main-service2.9b99549.png +0 -0
- package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
- package/dist/assets/img/package.8d37d0f.svg +0 -5
- package/dist/assets/img/package_fade.763c001.svg +0 -1
- package/dist/assets/img/rating--average.1ea492c.svg +0 -12
- package/dist/assets/img/rating--great.e3d712e.svg +0 -16
- package/dist/assets/img/rating--poor.2938a25.svg +0 -12
- package/dist/assets/img/search.f9705ff.svg +0 -1
- package/dist/assets/img/send.6db52a9.svg +0 -3
- package/dist/assets/img/shop.f7dc7d8.svg +0 -1
- package/dist/assets/img/shop_faded.df7845a.svg +0 -1
- package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
- package/dist/assets/img/x.26fdfa3.svg +0 -5
- package/dist/malicious-app.js +0 -15
- package/dist/screenshoot.html +0 -7
- package/dist/screenshoot.js +0 -10519
- package/src/util/extractor.js +0 -166
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var common = _interopRequireWildcard(require("./common.js"));
|
|
8
|
-
var extractor = _interopRequireWildcard(require("./extractor.js"));
|
|
9
8
|
var campaign = _interopRequireWildcard(require("./campaign.js"));
|
|
10
9
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
11
10
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -17,6 +16,5 @@ var op = require('./op.js');
|
|
|
17
16
|
sb.get = op.get;
|
|
18
17
|
sb.set = op.set;
|
|
19
18
|
sb.Pubsub = require('./pubsub.js').default;
|
|
20
|
-
sb = Object.assign(sb, extractor);
|
|
21
19
|
sb = Object.assign(sb, campaign);
|
|
22
20
|
var _default = exports.default = sb;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subiz/widget-v4",
|
|
3
|
-
"version": "4.1.
|
|
3
|
+
"version": "4.1.85",
|
|
4
4
|
"main": "./compiled_src/lib.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "npx webpack serve --config webpack.dev.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"babel-loader": "^9.1.3",
|
|
31
31
|
"babel-plugin-syntax-jsx": "^6.18.0",
|
|
32
32
|
"html-webpack-plugin": "^5.6.0",
|
|
33
|
-
"puppeteer": "^22.12.
|
|
33
|
+
"puppeteer": "^22.12.1",
|
|
34
34
|
"webpack": "^5.92.1",
|
|
35
35
|
"webpack-bundle-analyzer": "^4.10.2",
|
|
36
36
|
"webpack-cli": "^5.1.4",
|
|
@@ -3,6 +3,7 @@ import Emoji from './Emoji.js'
|
|
|
3
3
|
var defaultBubble = require('../../assets/img/bubble_default.svg')
|
|
4
4
|
let defaultAvatar = require('../../assets/img/default_avatar.png')
|
|
5
5
|
import {Com} from '../common.js'
|
|
6
|
+
import Block from './block.js'
|
|
6
7
|
import {h} from 'preact'
|
|
7
8
|
|
|
8
9
|
export default class ChatButton extends Com {
|
|
@@ -377,54 +378,22 @@ export default class ChatButton extends Com {
|
|
|
377
378
|
|
|
378
379
|
renderMessagePreview(ev, defmsg) {
|
|
379
380
|
defmsg = defmsg || this.props.t('sent_you_a_message')
|
|
380
|
-
|
|
381
|
-
let message = sb.get(ev, 'data.message.text')
|
|
382
381
|
var format = sb.get(ev, 'data.message.format')
|
|
382
|
+
let block = sb.get(ev, 'data.message.block')
|
|
383
|
+
if (block || format == 'block') return <Block block={block} />
|
|
383
384
|
|
|
384
|
-
|
|
385
|
-
if (format === 'delta') return this.renderDeltaMessagePreview(ev, defmsg)
|
|
386
|
-
|
|
387
|
-
// cant display message
|
|
388
|
-
if (format && format !== 'plaintext') message = defmsg
|
|
385
|
+
let message = sb.get(ev, 'data.message.text', defmsg)
|
|
389
386
|
if (!message && sb.size(sb.get(ev, 'data.message.attachments')) > 0) message = defmsg
|
|
390
|
-
|
|
391
387
|
if (!message) return null
|
|
392
388
|
let byType = sb.get(ev, 'by.type')
|
|
393
389
|
var tags = sb.extractText(message).map((tag) => {
|
|
394
|
-
if (tag.type === 'emoji') return <Emoji emojiCode={tag.text}
|
|
390
|
+
if (tag.type === 'emoji') return <Emoji emojiCode={tag.text} />
|
|
395
391
|
return tag.text
|
|
396
392
|
})
|
|
397
393
|
|
|
398
394
|
return tags
|
|
399
395
|
}
|
|
400
396
|
|
|
401
|
-
renderDeltaMessagePreview(ev, defmsg) {
|
|
402
|
-
defmsg = defmsg || this.props.t('sent_you_a_message')
|
|
403
|
-
|
|
404
|
-
let message = sb.get(ev, 'data.message.quill_delta')
|
|
405
|
-
if (!message && sb.size(sb.get(ev, 'data.message.attachments')) > 0) message = defmsg
|
|
406
|
-
if (!message) return
|
|
407
|
-
|
|
408
|
-
let quilldeltas = sb.parseJSON(message) || {}
|
|
409
|
-
// deltas = deltas.ops || []
|
|
410
|
-
if (!quilldeltas || sb.size(quilldeltas.ops) === 0) return null
|
|
411
|
-
let $deltas = sb.map(quilldeltas.ops, (delta) => {
|
|
412
|
-
let html = ''
|
|
413
|
-
let insert = delta.insert
|
|
414
|
-
let attributes = delta.attributes
|
|
415
|
-
|
|
416
|
-
if (insert.dynamicField) {
|
|
417
|
-
return sb.get(insert, 'dynamicField.text', '')
|
|
418
|
-
}
|
|
419
|
-
if (insert.emoji) return <Emoji emojiCode={`:${insert.emoji}:`} />
|
|
420
|
-
if (typeof insert === 'string') {
|
|
421
|
-
return insert
|
|
422
|
-
}
|
|
423
|
-
return null
|
|
424
|
-
})
|
|
425
|
-
return $deltas
|
|
426
|
-
}
|
|
427
|
-
|
|
428
397
|
closePreview(e) {
|
|
429
398
|
if (e) {
|
|
430
399
|
e.preventDefault()
|
package/src/chatbox/Emoji.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import sb from '../util/index.js'
|
|
2
|
-
|
|
2
|
+
import Block from './block.js'
|
|
3
3
|
import {Com} from '../common.js'
|
|
4
4
|
import {h} from 'preact'
|
|
5
5
|
import Emoji from './Emoji.js'
|
|
@@ -7,7 +7,8 @@ import Emoji from './Emoji.js'
|
|
|
7
7
|
export default class TextMessage extends Com {
|
|
8
8
|
render() {
|
|
9
9
|
var format = sb.get(this.props.ev, 'data.message.format', 'plaintext')
|
|
10
|
-
|
|
10
|
+
let block = sb.get(this.props.ev, 'data.message.block')
|
|
11
|
+
if (block) return this.renderBlock(block)
|
|
11
12
|
return this.renderPlainText()
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -17,6 +18,7 @@ export default class TextMessage extends Com {
|
|
|
17
18
|
if (sb.size(text) === 0) return null
|
|
18
19
|
|
|
19
20
|
let byType = sb.get(this.props.ev, 'by.type')
|
|
21
|
+
if (byType !== 'user') byType = 'agent'
|
|
20
22
|
var tags = sb.extractText(text).map((tag) => {
|
|
21
23
|
if (tag.type === 'emoji') return <Emoji emojiCode={tag.text} byType={byType} />
|
|
22
24
|
if (tag.type === 'link') {
|
|
@@ -42,106 +44,26 @@ export default class TextMessage extends Com {
|
|
|
42
44
|
})
|
|
43
45
|
|
|
44
46
|
if (sb.size(tags) === 0) return null
|
|
45
|
-
if (byType === 'agent') {
|
|
46
|
-
return <div class='message-agent message-text--agent'>{tags}</div>
|
|
47
|
-
}
|
|
47
|
+
if (byType === 'agent') return <div class='message-agent message-text--agent'>{tags}</div>
|
|
48
48
|
return <div class='message-user message-text--user'>{tags}</div>
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
let
|
|
54
|
-
// deltas = deltas.ops || []
|
|
55
|
-
quilldeltas = trimQuillDelta(quilldeltas)
|
|
56
|
-
if (!quilldeltas || sb.size(quilldeltas.ops) === 0) return null
|
|
57
|
-
let $deltas = sb.map(quilldeltas.ops, (delta) => {
|
|
58
|
-
let html = ''
|
|
59
|
-
let insert = delta.insert
|
|
60
|
-
let attributes = delta.attributes
|
|
61
|
-
|
|
62
|
-
if (insert.dynamicField) {
|
|
63
|
-
return sb.get(insert, 'dynamicField.text', '')
|
|
64
|
-
}
|
|
65
|
-
if (insert.emoji) return <Emoji emojiCode={`:${insert.emoji}:`} />
|
|
66
|
-
if (typeof insert === 'string') {
|
|
67
|
-
let $tags = sb.extractText(insert).map((tag, i) => {
|
|
68
|
-
if (tag.type === 'link') {
|
|
69
|
-
return (
|
|
70
|
-
<a href={absLink(tag.text)} target='_blank'>
|
|
71
|
-
{tag.text}
|
|
72
|
-
</a>
|
|
73
|
-
)
|
|
74
|
-
}
|
|
75
|
-
return tag.text
|
|
76
|
-
})
|
|
51
|
+
renderBlock(block) {
|
|
52
|
+
if (sb.size(block) == 0) return null
|
|
53
|
+
let byType = sb.get(this.props.ev, 'by.type')
|
|
77
54
|
|
|
78
|
-
if (attributes) {
|
|
79
|
-
if (attributes.italic && attributes.bold)
|
|
80
|
-
return <span style='font-weight: bold !important; font-style: italic !important'>{$tags}</span>
|
|
81
|
-
if (attributes.italic) return <span style='font-style: italic !important'>{$tags}</span>
|
|
82
|
-
if (attributes.bold) return <span style='font-weight: bold !important'>{$tags}</span>
|
|
83
|
-
}
|
|
84
|
-
return <span>{$tags}</span>
|
|
85
|
-
}
|
|
86
|
-
return null
|
|
87
|
-
})
|
|
88
|
-
let byType = sb.get(this.ev, 'by.type')
|
|
89
55
|
if (byType !== 'user') byType = 'agent'
|
|
90
|
-
if (sb.size($deltas) === 0) return null
|
|
91
56
|
if (byType === 'agent') {
|
|
92
|
-
return
|
|
57
|
+
return (
|
|
58
|
+
<div class='message-agent message-text--agent'>
|
|
59
|
+
<Block block={block} />
|
|
60
|
+
</div>
|
|
61
|
+
)
|
|
93
62
|
}
|
|
94
|
-
return
|
|
63
|
+
return (
|
|
64
|
+
<div class='message-user message-text--user'>
|
|
65
|
+
<Block block={block} />
|
|
66
|
+
</div>
|
|
67
|
+
)
|
|
95
68
|
}
|
|
96
69
|
}
|
|
97
|
-
|
|
98
|
-
const emojiCodes = {
|
|
99
|
-
like: '👍',
|
|
100
|
-
unlike: '👎',
|
|
101
|
-
angry: '😠',
|
|
102
|
-
confused: '😕',
|
|
103
|
-
crying: '😢',
|
|
104
|
-
grinning: '😀',
|
|
105
|
-
'heart-eyes': '😍',
|
|
106
|
-
neutral: '😐',
|
|
107
|
-
sleepy: '😪',
|
|
108
|
-
sad: '😞',
|
|
109
|
-
smiling: '😄',
|
|
110
|
-
'tongue-out': '😛',
|
|
111
|
-
tired: '😩',
|
|
112
|
-
surprised: '😮',
|
|
113
|
-
wink: '😉',
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function trimQuillDelta(delta) {
|
|
117
|
-
if (!delta) return delta
|
|
118
|
-
if (!delta.ops || !delta.ops.length) return delta
|
|
119
|
-
let last = delta.ops[delta.ops.length - 1]
|
|
120
|
-
if (typeof last.insert != 'string') return delta
|
|
121
|
-
|
|
122
|
-
let insert = last.insert.trimEnd()
|
|
123
|
-
if (insert) {
|
|
124
|
-
if (last.insert != insert) {
|
|
125
|
-
// just fix the last item
|
|
126
|
-
let newops = delta.ops.slice()
|
|
127
|
-
// let last = sb.cloneDeep(newops.pop())
|
|
128
|
-
let last = newops.pop()
|
|
129
|
-
last.insert = insert
|
|
130
|
-
newops.push(last)
|
|
131
|
-
return {ops: newops}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// last item dont change, do nothing
|
|
135
|
-
return delta
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// remove the last item
|
|
139
|
-
let newops = delta.ops.slice()
|
|
140
|
-
newops.pop()
|
|
141
|
-
return trimQuillDelta({ops: newops})
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function absLink(url) {
|
|
145
|
-
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('//')) return 'http://' + url
|
|
146
|
-
return url
|
|
147
|
-
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import sb from '../util/index.js'
|
|
2
|
+
import Emoji from './Emoji.js'
|
|
3
|
+
import {Com} from '../common.js'
|
|
4
|
+
import {h} from 'preact'
|
|
5
|
+
|
|
6
|
+
export default class Block extends Com {
|
|
7
|
+
constructor(props) {
|
|
8
|
+
super(props)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
renderBlock(block) {
|
|
12
|
+
if (sb.size(block) == 0) return null
|
|
13
|
+
let ele = {}
|
|
14
|
+
ele.style = ''
|
|
15
|
+
if (block.style) {
|
|
16
|
+
sb.map(block.style, (v, k) => {
|
|
17
|
+
ele.style += k + ': ' + v + ';'
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ele.attrs = {}
|
|
22
|
+
if (block.title != '') {
|
|
23
|
+
ele.attrs['title'] = block.title
|
|
24
|
+
}
|
|
25
|
+
if (block.href != '') {
|
|
26
|
+
ele.attrs['href'] = block.href
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
ele.class = block.class
|
|
30
|
+
sb.map(block.attrs, (v, k) => {
|
|
31
|
+
ele.attrs[k] = v
|
|
32
|
+
})
|
|
33
|
+
if (block.type == 'bullet_list' || block.type == 'ordered_list') {
|
|
34
|
+
if (block.type == 'bullet_list') {
|
|
35
|
+
ele.tag = 'ol'
|
|
36
|
+
} else {
|
|
37
|
+
ele.tag = 'ul'
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (block.type == 'list_item') {
|
|
42
|
+
ele.tag = 'li'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (block.type == 'heading') {
|
|
46
|
+
if (block.level < 1) block.level = 1
|
|
47
|
+
if (block.level > 6) block.level = 6
|
|
48
|
+
ele.tag = 'h' + block.level
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (block.type == 'paragraph' || block.type == 'section' || block.type == 'div') ele.tag = 'div'
|
|
52
|
+
ele.text = block.text
|
|
53
|
+
if (block.type == '' || block.type == 'text' || block.type == 'dynamic-field') {
|
|
54
|
+
ele.tag = 'span'
|
|
55
|
+
if (block.bold) ele.tag = 'b'
|
|
56
|
+
if (block.italic) {
|
|
57
|
+
if (ele.tag == 'b') {
|
|
58
|
+
ele.style += 'font-style: italic;'
|
|
59
|
+
} else {
|
|
60
|
+
ele.tag = 'em'
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (block.underline) ele.Style += 'text-decoration:underline;'
|
|
65
|
+
if (block.strike_through) ele.Style += 'text-decoration: line-through;'
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (block.type == 'dynamic-field') {
|
|
69
|
+
let key = sb.get(block.attrs, 'key')
|
|
70
|
+
ele.text = sb.get(this.props.data, [key], ele.text)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (block.type == 'link') {
|
|
74
|
+
ele.tag = 'a'
|
|
75
|
+
ele.attrs['href'] = block.href
|
|
76
|
+
ele.attrs['target'] = block.target
|
|
77
|
+
ele.attrs['title'] = block.title
|
|
78
|
+
}
|
|
79
|
+
if (block.type == 'mention-agent' || block.type == 'mention') {
|
|
80
|
+
ele.tag = 'span'
|
|
81
|
+
ele.class = 'mention'
|
|
82
|
+
|
|
83
|
+
let id = (block.attrs.id = '')
|
|
84
|
+
|
|
85
|
+
if (block.attrs.id == '*' || block.attrs.id == 'all') {
|
|
86
|
+
ele.text = '@' + this.$t('all')
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (id.startsWith('ag')) {
|
|
90
|
+
let ag = store.matchAgent(id)
|
|
91
|
+
let name = sb.getAgentDisplayName(ag, insert.mention.fullname)
|
|
92
|
+
ele.text = '@' + name
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (block.type == 'horizontal_rule') ele.tag = 'hr'
|
|
96
|
+
if (block.type == 'emoji') {
|
|
97
|
+
let code = ''
|
|
98
|
+
if (sb.size(block.attrs) > 0) code = block.attrs['code']
|
|
99
|
+
if (code == '') code = block.Text
|
|
100
|
+
if (code != '') {
|
|
101
|
+
ele.tag = 'Emoji' //
|
|
102
|
+
ele.attrs['emojiCode'] = code
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (block.type == 'table') {
|
|
107
|
+
return null
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
let $body = null
|
|
111
|
+
if (sb.size(block.content)) $body = sb.map(block.content, (block) => this.renderBlock(block))
|
|
112
|
+
else $body = ele.text
|
|
113
|
+
switch (ele.tag) {
|
|
114
|
+
case 'div':
|
|
115
|
+
return <div>{$body}</div>
|
|
116
|
+
case 'h1':
|
|
117
|
+
return <h1>{$body}</h1>
|
|
118
|
+
case 'h2':
|
|
119
|
+
return <h2>{$body}</h2>
|
|
120
|
+
case 'h3':
|
|
121
|
+
return <h3>{$body}</h3>
|
|
122
|
+
case 'h4':
|
|
123
|
+
return <h4>{$body}</h4>
|
|
124
|
+
case 'h5':
|
|
125
|
+
return <h5>{$body}</h5>
|
|
126
|
+
case 'h6':
|
|
127
|
+
return <h6>{$body}</h6>
|
|
128
|
+
case 'ol':
|
|
129
|
+
return <ol>{$body}</ol>
|
|
130
|
+
case 'ul':
|
|
131
|
+
return <ul>{$body}</ul>
|
|
132
|
+
case 'span':
|
|
133
|
+
return <span>{$body}</span>
|
|
134
|
+
case 'em':
|
|
135
|
+
return <em>{$body}</em>
|
|
136
|
+
case 'b':
|
|
137
|
+
return <b>{$body}</b>
|
|
138
|
+
case 'hr':
|
|
139
|
+
return <hr />
|
|
140
|
+
case 'a':
|
|
141
|
+
return (
|
|
142
|
+
<a href={ele.attrs['href']} target={ele.attrs['target']} title={ele.attrs['title']}>
|
|
143
|
+
{$body}
|
|
144
|
+
</a>
|
|
145
|
+
)
|
|
146
|
+
case 'Emoji':
|
|
147
|
+
return <Emoji emojiCode={ele.attrs['emojiCode']} />
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return null
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
render() {
|
|
154
|
+
return this.renderBlock(this.props.block)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function absLink(url) {
|
|
159
|
+
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('//')) return 'http://' + url
|
|
160
|
+
return url
|
|
161
|
+
}
|
package/src/common.js
CHANGED
|
@@ -53,16 +53,8 @@ export const getLocale = (plugin, loc) => {
|
|
|
53
53
|
if (found) return found
|
|
54
54
|
|
|
55
55
|
found = sb.find(plugin.locales, (l) => {
|
|
56
|
-
l = l
|
|
57
|
-
|
|
58
|
-
.split('_')[0]
|
|
59
|
-
.trim()
|
|
60
|
-
.toLowerCase()
|
|
61
|
-
let compareloc = loc
|
|
62
|
-
.replace('-', '_')
|
|
63
|
-
.split('_')[0]
|
|
64
|
-
.trim()
|
|
65
|
-
.toLowerCase()
|
|
56
|
+
l = l.replace('-', '_').split('_')[0].trim().toLowerCase()
|
|
57
|
+
let compareloc = loc.replace('-', '_').split('_')[0].trim().toLowerCase()
|
|
66
58
|
return l == compareloc
|
|
67
59
|
})
|
|
68
60
|
if (found) return found
|
package/src/notif/notif.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import sb from '../util/index.js'
|
|
2
2
|
import {render, h} from 'preact'
|
|
3
3
|
import {Com} from '../common.js'
|
|
4
|
+
import Block from '../chatbox/block.js'
|
|
4
5
|
|
|
5
6
|
let notifCSS = (() => import(/*webpackChunkName: "notif-css" */ './css.js'))()
|
|
6
7
|
|
|
@@ -101,12 +102,6 @@ export default class Notif extends Com {
|
|
|
101
102
|
this.setState({closeAnimation: false})
|
|
102
103
|
let timestamp = this.randomTimestampt()
|
|
103
104
|
let profiles = sb.get(this.props, 'plugin.notification.profiles', [])
|
|
104
|
-
let user = profiles[Math.floor(Math.random() * sb.size(profiles))] || {}
|
|
105
|
-
// make sure image loaded
|
|
106
|
-
if (user.avatar_url && user.avatar_url.startsWith('http')) {
|
|
107
|
-
await sb.preloadImg(user.avatar_url)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
105
|
sb.map(sb.get(this.props.plugin, 'notification.custom_avatar_urls'), (url) => {
|
|
111
106
|
profiles.push({
|
|
112
107
|
type: 'person',
|
|
@@ -119,21 +114,36 @@ export default class Notif extends Com {
|
|
|
119
114
|
})
|
|
120
115
|
})
|
|
121
116
|
|
|
122
|
-
|
|
117
|
+
if (sb.size(profiles) == 0) {
|
|
118
|
+
profiles.push({
|
|
119
|
+
type: 'person',
|
|
120
|
+
fullname: randomName(),
|
|
121
|
+
avatar_url: 'https://public-gcs.subiz-cdn.com/widget_assets/profile_images/VNF25.png',
|
|
122
|
+
email: randomEmail(),
|
|
123
|
+
address: randomAddress(),
|
|
124
|
+
phone: ramdomPhone(),
|
|
125
|
+
age: randomAge(),
|
|
126
|
+
})
|
|
127
|
+
}
|
|
123
128
|
|
|
124
|
-
let
|
|
129
|
+
let user = profiles[Math.floor(Math.random() * sb.size(profiles))] || {}
|
|
130
|
+
// make sure image loaded
|
|
131
|
+
if (user.avatar_url && user.avatar_url.startsWith('http')) {
|
|
132
|
+
await sb.preloadImg(user.avatar_url)
|
|
133
|
+
}
|
|
125
134
|
|
|
126
|
-
let
|
|
135
|
+
let i18n_messages = sb.get(this.props, 'plugin.notification.i18n_message_blocks', [])
|
|
136
|
+
let i18n_message = i18n_messages[Math.floor(Math.random() * sb.size(i18n_messages))].i18n
|
|
137
|
+
let fallbackmsgs = sb.get(this.props, 'plugin.notification.message_blocks', [])
|
|
127
138
|
let fallbackmessage = fallbackmsgs[Math.floor(Math.random() * sb.size(fallbackmsgs))]
|
|
128
139
|
|
|
129
|
-
let i18n_title = sb.get(this.props, 'plugin.notification.
|
|
130
|
-
|
|
140
|
+
let i18n_title = sb.get(this.props, 'plugin.notification.i18n_title_block')
|
|
131
141
|
return this.setState({
|
|
132
142
|
close: false,
|
|
133
143
|
last_show: sb.Date.now(),
|
|
134
144
|
timestamp: timestamp,
|
|
135
145
|
user: user,
|
|
136
|
-
title: this.props.t.i18n(i18n_title) || sb.get(this.props, 'plugin.notification.
|
|
146
|
+
title: this.props.t.i18n(i18n_title) || sb.get(this.props, 'plugin.notification.title_block'),
|
|
137
147
|
message: this.props.t.i18n(i18n_message) || fallbackmessage,
|
|
138
148
|
})
|
|
139
149
|
}
|
|
@@ -194,32 +204,6 @@ export default class Notif extends Com {
|
|
|
194
204
|
}, 50)
|
|
195
205
|
}
|
|
196
206
|
|
|
197
|
-
renderTextFromQuillDelta(quilldelta, profile) {
|
|
198
|
-
let qd = sb.parseJSON(quilldelta)
|
|
199
|
-
if (!qd || !qd.ops) return null
|
|
200
|
-
let out = sb
|
|
201
|
-
.map(qd.ops, (op) => {
|
|
202
|
-
let out = null
|
|
203
|
-
if (!op.insert) return null
|
|
204
|
-
|
|
205
|
-
if (typeof op.insert == 'string') out = op.insert
|
|
206
|
-
if (sb.get(op, 'insert.dynamicField')) {
|
|
207
|
-
let key = sb.get(op, 'insert.dynamicField.key')
|
|
208
|
-
if (key === 'user.fullname') out = profile.fullname
|
|
209
|
-
if (key === 'user.email') out = profile.email
|
|
210
|
-
if (key === 'user.address') out = profile.address
|
|
211
|
-
if (key === 'user.phone') out = profile.phone
|
|
212
|
-
}
|
|
213
|
-
if (sb.get(op, 'attributes.bold')) out = <b>{out}</b>
|
|
214
|
-
if (sb.get(op, 'attributes.italic')) out = <b>{out}</b>
|
|
215
|
-
return out
|
|
216
|
-
})
|
|
217
|
-
.filter((a) => a)
|
|
218
|
-
|
|
219
|
-
if (out.length == 1 && (out[0] == '\n' || out[0] == '')) return []
|
|
220
|
-
return out
|
|
221
|
-
}
|
|
222
|
-
|
|
223
207
|
render() {
|
|
224
208
|
if (!this.props.t) return null
|
|
225
209
|
if (!this.state.cssready) return null
|
|
@@ -260,9 +244,12 @@ export default class Notif extends Com {
|
|
|
260
244
|
</div>
|
|
261
245
|
)
|
|
262
246
|
|
|
263
|
-
let
|
|
264
|
-
|
|
265
|
-
|
|
247
|
+
let data = {
|
|
248
|
+
'user.fullname': user.fullname,
|
|
249
|
+
'user.email': user.email,
|
|
250
|
+
'user.address': user.address,
|
|
251
|
+
'user.phone': user.phone,
|
|
252
|
+
}
|
|
266
253
|
|
|
267
254
|
return (
|
|
268
255
|
<div
|
|
@@ -285,10 +272,10 @@ export default class Notif extends Com {
|
|
|
285
272
|
</div>
|
|
286
273
|
<div class='notif_body'>
|
|
287
274
|
<div class='notif_title' style={sb.js2css(notif.title_style)}>
|
|
288
|
-
{
|
|
275
|
+
<Block block={this.state.title} data={data} />
|
|
289
276
|
</div>
|
|
290
277
|
<div class='notif_message' style={sb.js2css(notif.message_style)}>
|
|
291
|
-
{
|
|
278
|
+
<Block block={this.state.message} data={data} />
|
|
292
279
|
</div>
|
|
293
280
|
{$time}
|
|
294
281
|
</div>
|