@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.
Files changed (108) hide show
  1. package/compiled_src/chatbox/ChatButton.js +7 -29
  2. package/compiled_src/chatbox/TextMessage.js +17 -96
  3. package/compiled_src/chatbox/block.js +152 -0
  4. package/compiled_src/notif/notif.js +35 -35
  5. package/compiled_src/util/common.js +174 -1
  6. package/compiled_src/util/index.js +0 -2
  7. package/package.json +2 -2
  8. package/src/chatbox/ChatButton.js +5 -36
  9. package/src/chatbox/Emoji.js +1 -1
  10. package/src/chatbox/TextMessage.js +18 -96
  11. package/src/chatbox/block.js +161 -0
  12. package/src/common.js +2 -10
  13. package/src/notif/notif.js +30 -43
  14. package/src/util/common.js +224 -0
  15. package/src/util/index.js +0 -3
  16. package/compiled_src/util/extractor.js +0 -136
  17. package/dist/127.js +0 -273
  18. package/dist/132.js +0 -2796
  19. package/dist/185.js +0 -1885
  20. package/dist/19077b40b00.127.js +0 -1
  21. package/dist/19077b40b00.132.js +0 -1
  22. package/dist/19077b40b00.185.js +0 -1
  23. package/dist/19077b40b00.27.js +0 -1
  24. package/dist/19077b40b00.278.js +0 -1
  25. package/dist/19077b40b00.459.js +0 -1
  26. package/dist/19077b40b00.490.js +0 -1
  27. package/dist/19077b40b00.74.js +0 -1
  28. package/dist/19077b40b00.997.js +0 -1
  29. package/dist/19077b40b00.app.js +0 -1
  30. package/dist/19077b40b00.index.html +0 -33
  31. package/dist/19077b40b00.library.html +0 -33
  32. package/dist/19077b40b00.library.js +0 -1
  33. package/dist/19077b40b00.preview.html +0 -759
  34. package/dist/19077b40b00.preview.js +0 -1
  35. package/dist/19077b40b00.screenshoot.js +0 -1
  36. package/dist/19077b40b00.webview.js +0 -1
  37. package/dist/27.js +0 -107
  38. package/dist/278.js +0 -406
  39. package/dist/459.js +0 -107
  40. package/dist/490.js +0 -304
  41. package/dist/74.js +0 -372
  42. package/dist/997.js +0 -107
  43. package/dist/HASH +0 -1
  44. package/dist/assets/img/Facebook.64607ec.png +0 -0
  45. package/dist/assets/img/Zalo.6845707.png +0 -0
  46. package/dist/assets/img/award1a.1a58e10.png +0 -0
  47. package/dist/assets/img/award3a.3b74423.png +0 -0
  48. package/dist/assets/img/award4a.ed6ccd4.png +0 -0
  49. package/dist/assets/img/award5.39eb7ae.png +0 -0
  50. package/dist/assets/img/bubble_default.7d5e4ab.svg +0 -20
  51. package/dist/assets/img/caret.998eb8f.svg +0 -1
  52. package/dist/assets/img/convos_empty.2353007.svg +0 -72
  53. package/dist/assets/img/default.06e6ee0.jpg +0 -0
  54. package/dist/assets/img/default_avatar.5b74dc1.png +0 -0
  55. package/dist/assets/img/done_gray.d7e8203.svg +0 -4
  56. package/dist/assets/img/done_green.b817fd4.svg +0 -4
  57. package/dist/assets/img/emoji/messenger/sub_23.529_58.824.d5faf14.png +0 -0
  58. package/dist/assets/img/emoji/messenger/sub_23.529_60.784.1420241.png +0 -0
  59. package/dist/assets/img/emoji/messenger/sub_25.490_0.000.1e6b2c0.png +0 -0
  60. package/dist/assets/img/emoji/messenger/sub_25.490_45.098.3dfbc08.png +0 -0
  61. package/dist/assets/img/emoji/messenger/sub_25.490_5.882.4b49e94.png +0 -0
  62. package/dist/assets/img/emoji/messenger/sub_27.451_72.549.7114f58.png +0 -0
  63. package/dist/assets/img/emoji/messenger/sub_27.451_84.314.231e2b7.png +0 -0
  64. package/dist/assets/img/emoji/messenger/sub_27.451_96.078.ddbb008.png +0 -0
  65. package/dist/assets/img/emoji/messenger/sub_29.412_5.882.61f3359.png +0 -0
  66. package/dist/assets/img/emoji/messenger/sub_58.824_100.000.6df72bc.png +0 -0
  67. package/dist/assets/img/emoji/messenger/sub_58.824_45.098.3d7a7ad.png +0 -0
  68. package/dist/assets/img/emoji/messenger/sub_58.824_47.059.0f4d6e2.png +0 -0
  69. package/dist/assets/img/emoji/messenger/sub_58.824_54.902.65724c1.png +0 -0
  70. package/dist/assets/img/emoji/messenger/sub_58.824_64.706.9da3cba.png +0 -0
  71. package/dist/assets/img/emoji/messenger/sub_58.824_72.549.edca5cf.png +0 -0
  72. package/dist/assets/img/emoji/messenger/sub_58.824_78.431.f910f2a.png +0 -0
  73. package/dist/assets/img/emoji/messenger/sub_58.824_88.235.def4e71.png +0 -0
  74. package/dist/assets/img/emoji/messenger/sub_60.784_11.765.49c03d0.png +0 -0
  75. package/dist/assets/img/emoji/messenger/sub_60.784_27.451.46b54e5.png +0 -0
  76. package/dist/assets/img/emoji/messenger/sub_60.784_29.412.e36d284.png +0 -0
  77. package/dist/assets/img/emoji/messenger/sub_60.784_3.922.bb191b0.png +0 -0
  78. package/dist/assets/img/emoji/messenger/sub_60.784_35.294.af7b927.png +0 -0
  79. package/dist/assets/img/emoji/messenger/sub_60.784_7.843.98f2a99.png +0 -0
  80. package/dist/assets/img/empty.29bed2d.svg +0 -23
  81. package/dist/assets/img/empty_1.0b98af0.svg +0 -11
  82. package/dist/assets/img/examplte_logo.f86535f.svg +0 -1
  83. package/dist/assets/img/external-link.90577cc.svg +0 -1
  84. package/dist/assets/img/fb_inverse_circle.36c2cfc.png +0 -0
  85. package/dist/assets/img/ghn.070f8e3.svg +0 -17
  86. package/dist/assets/img/ghtk.326eac1.svg +0 -18
  87. package/dist/assets/img/image_default.be0698b.png +0 -0
  88. package/dist/assets/img/info.ebce7ea.svg +0 -1
  89. package/dist/assets/img/loader.37000a7.svg +0 -1
  90. package/dist/assets/img/loading_static.a27f0ac.svg +0 -10
  91. package/dist/assets/img/main-service1.d536cc2.png +0 -0
  92. package/dist/assets/img/main-service2.9b99549.png +0 -0
  93. package/dist/assets/img/not_found_search.2ddb8d1.png +0 -0
  94. package/dist/assets/img/package.8d37d0f.svg +0 -5
  95. package/dist/assets/img/package_fade.763c001.svg +0 -1
  96. package/dist/assets/img/rating--average.1ea492c.svg +0 -12
  97. package/dist/assets/img/rating--great.e3d712e.svg +0 -16
  98. package/dist/assets/img/rating--poor.2938a25.svg +0 -12
  99. package/dist/assets/img/search.f9705ff.svg +0 -1
  100. package/dist/assets/img/send.6db52a9.svg +0 -3
  101. package/dist/assets/img/shop.f7dc7d8.svg +0 -1
  102. package/dist/assets/img/shop_faded.df7845a.svg +0 -1
  103. package/dist/assets/img/subiz-mono.877e9f5.svg +0 -3
  104. package/dist/assets/img/x.26fdfa3.svg +0 -5
  105. package/dist/malicious-app.js +0 -15
  106. package/dist/screenshoot.html +0 -7
  107. package/dist/screenshoot.js +0 -10519
  108. 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.83",
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.0",
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
- // render delta preview message
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} byType={byType} />
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()
@@ -2,7 +2,7 @@ import sb from '../util/index.js'
2
2
  import { Com } from '../common.js'
3
3
  import { h } from 'preact'
4
4
 
5
- // props: ['emojiCode', 'byType'],
5
+ // props: ['emojiCode'],
6
6
  export default class Emoji extends Com {
7
7
  render () {
8
8
  var emojiCode = this.props.emojiCode
@@ -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
- if (format === 'delta') return this.renderDelta()
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
- renderDelta() {
52
- let deltas = sb.get(this.props.ev, 'data.message.quill_delta') || sb.get(this.props.ev, 'data.message.text')
53
- let quilldeltas = sb.parseJSON(deltas) || {}
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 <div class='message-agent message-text--agent'>{$deltas}</div>
57
+ return (
58
+ <div class='message-agent message-text--agent'>
59
+ <Block block={block} />
60
+ </div>
61
+ )
93
62
  }
94
- return <div class='message-user message-text--user'>{$deltas}</div>
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
- .replace('-', '_')
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
@@ -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
- let i18n_messages = sb.get(this.props, 'plugin.notification.i18n_message_quill_deltas', [])
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 i18n_message = i18n_messages[Math.floor(Math.random() * sb.size(i18n_messages))]
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 fallbackmsgs = sb.get(this.props, 'plugin.notification.message_quill_deltas', [])
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.i18n_title_quill_delta')
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.title_quill_delta'),
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 $title = this.renderTextFromQuillDelta(this.state.title, user)
264
- let $message = this.renderTextFromQuillDelta(this.state.message, user)
265
- if (!sb.size($title) && !sb.size($message)) $time = null
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
- {$title}
275
+ <Block block={this.state.title} data={data} />
289
276
  </div>
290
277
  <div class='notif_message' style={sb.js2css(notif.message_style)}>
291
- {$message}
278
+ <Block block={this.state.message} data={data} />
292
279
  </div>
293
280
  {$time}
294
281
  </div>