@subiz/widget-v4 4.0.79 → 4.0.82
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/less/message.less +8 -2
- package/compiled_src/chatbox/GenericTemplateAttachments.js +3 -1
- package/compiled_src/chatbox/ShadowDomRoot.js +1 -2
- package/compiled_src/chatbox/TextMessage.js +67 -3
- package/compiled_src/popup/popup.js +10 -0
- package/compiled_src/store/store.js +1 -1
- package/package.json +1 -1
- package/src/chatbox/GenericTemplateAttachments.js +4 -2
- package/src/chatbox/ShadowDomRoot.js +1 -2
- package/src/chatbox/TextMessage.js +68 -2
- package/src/popup/popup.js +11 -0
- package/src/store/store.js +1 -1
package/assets/less/message.less
CHANGED
|
@@ -426,7 +426,7 @@ a.message_error {
|
|
|
426
426
|
}
|
|
427
427
|
|
|
428
428
|
.generic-attachment {
|
|
429
|
-
display:
|
|
429
|
+
display: flex;
|
|
430
430
|
width: 100%;
|
|
431
431
|
overflow: hidden;
|
|
432
432
|
width: 100%;
|
|
@@ -436,6 +436,10 @@ a.message_error {
|
|
|
436
436
|
cursor: grab;
|
|
437
437
|
}
|
|
438
438
|
|
|
439
|
+
.generic-attachment--element-content {
|
|
440
|
+
flex: 1;
|
|
441
|
+
}
|
|
442
|
+
|
|
439
443
|
.generic-attachment--element {
|
|
440
444
|
border: 1px solid #d8d8d8;
|
|
441
445
|
background: white;
|
|
@@ -443,8 +447,10 @@ a.message_error {
|
|
|
443
447
|
overflow: hidden;
|
|
444
448
|
width: 220px;
|
|
445
449
|
margin-right: 10px;
|
|
446
|
-
display: inline-block;
|
|
447
450
|
vertical-align: top;
|
|
451
|
+
display: flex;
|
|
452
|
+
flex-direction: column;
|
|
453
|
+
flex-shrink: 0;
|
|
448
454
|
|
|
449
455
|
&:last-child {
|
|
450
456
|
margin-right: 0;
|
|
@@ -67,7 +67,9 @@ class GenericTemplateAttachments extends _common.Com {
|
|
|
67
67
|
alt: "generic attachment element",
|
|
68
68
|
class: "generic-attachment--element-img",
|
|
69
69
|
src: this.props.store.replaceFileUrl(ele.image_url)
|
|
70
|
-
})),
|
|
70
|
+
})), (0, _preact.h)("div", {
|
|
71
|
+
class: "generic-attachment--element-content"
|
|
72
|
+
}, $title, $subtitle), (0, _preact.h)(_Buttons.default, {
|
|
71
73
|
buttons: ele.buttons,
|
|
72
74
|
onSelect: button => this.props.onSelect(button),
|
|
73
75
|
t: this.props.t
|
|
@@ -31,8 +31,7 @@ img { max-width: 100%; display: block; margin: 10px auto; }
|
|
|
31
31
|
* { white-space: normal }
|
|
32
32
|
ul > li { margin-bottom: 5px }
|
|
33
33
|
ul:last-child { margin-bottom: 0 }
|
|
34
|
-
p
|
|
35
|
-
p:last-child { margin-bottom: 0;}
|
|
34
|
+
p { margin-bottom: 0; margin-top: 0;}
|
|
36
35
|
</style>
|
|
37
36
|
<div>${html}</div>`;
|
|
38
37
|
let links = this.shadowRoot.querySelectorAll('a');
|
|
@@ -45,7 +45,11 @@ class TextMessage extends _common.Com {
|
|
|
45
45
|
var format = _index.default.get(this.props.ev, 'data.message.format', 'plaintext');
|
|
46
46
|
|
|
47
47
|
if (format === 'markdown') return this.renderMarkdown();
|
|
48
|
+
if (format === 'delta') return this.renderDelta();
|
|
49
|
+
return this.renderPlainText();
|
|
50
|
+
}
|
|
48
51
|
|
|
52
|
+
renderPlainText() {
|
|
49
53
|
var text = _index.default.get(this.props.ev, 'data.message.text');
|
|
50
54
|
|
|
51
55
|
text = _index.default.trim(text);
|
|
@@ -95,9 +99,25 @@ class TextMessage extends _common.Com {
|
|
|
95
99
|
}, tags);
|
|
96
100
|
}
|
|
97
101
|
|
|
98
|
-
|
|
99
|
-
|
|
102
|
+
renderDelta() {
|
|
103
|
+
let deltas = _index.default.get(this.props.ev, 'data.message.quill_delta');
|
|
104
|
+
|
|
105
|
+
deltas = _index.default.parseJSON(deltas) || {};
|
|
106
|
+
deltas = deltas.ops || [];
|
|
107
|
+
|
|
108
|
+
let isMarkdown = _index.default.find(deltas, delta => _index.default.get(delta, 'attributes.bold') || _index.default.get(delta, 'attributes.italic') || _index.default.get(delta, 'attributes.underline'));
|
|
109
|
+
|
|
110
|
+
if (isMarkdown) {
|
|
111
|
+
var text = deltaToMarkdown(deltas);
|
|
112
|
+
console.log('text', text);
|
|
113
|
+
return this.renderMarkdown(text);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return this.renderPlainText();
|
|
117
|
+
}
|
|
100
118
|
|
|
119
|
+
renderMarkdown(text) {
|
|
120
|
+
if (!text) text = _index.default.get(this.props.ev, 'data.message.text');
|
|
101
121
|
if (_index.default.size(text) === 0) return null;
|
|
102
122
|
|
|
103
123
|
let byType = _index.default.get(this.props.ev, 'by.type');
|
|
@@ -124,4 +144,48 @@ class TextMessage extends _common.Com {
|
|
|
124
144
|
|
|
125
145
|
}
|
|
126
146
|
|
|
127
|
-
exports.default = TextMessage;
|
|
147
|
+
exports.default = TextMessage;
|
|
148
|
+
|
|
149
|
+
function deltaToMarkdown(deltas) {
|
|
150
|
+
let output = '';
|
|
151
|
+
|
|
152
|
+
_index.default.each(deltas, (delta, idx) => {
|
|
153
|
+
let text = '';
|
|
154
|
+
let insert = delta.insert;
|
|
155
|
+
let attributes = delta.attributes;
|
|
156
|
+
if (insert.emoji) text = emojiCodes[insert.emoji] || '';
|
|
157
|
+
|
|
158
|
+
if (attributes) {
|
|
159
|
+
if (attributes.italic && attributes.bold) text = `*__${insert}__*`;else if (attributes.italic) text = `*${insert}*`;else if (attributes.bold) text = `**${insert}**`;else text = insert;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (insert.dynamicField) text = `${_index.default.get(insert, 'dynamicField.text', '')}`;
|
|
163
|
+
|
|
164
|
+
if (!insert.emoji && !attributes && !insert.dynamicField) {
|
|
165
|
+
text = insert || '';
|
|
166
|
+
text = text.replace(/\n/g, '<br/>');
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
output += text;
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
return output;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const emojiCodes = {
|
|
176
|
+
like: '👍',
|
|
177
|
+
unlike: '👎',
|
|
178
|
+
angry: '😠',
|
|
179
|
+
confused: '😕',
|
|
180
|
+
crying: '😢',
|
|
181
|
+
grinning: '😀',
|
|
182
|
+
'heart-eyes': '😍',
|
|
183
|
+
neutral: '😐',
|
|
184
|
+
sleepy: '😪',
|
|
185
|
+
sad: '😞',
|
|
186
|
+
smiling: '😄',
|
|
187
|
+
'tongue-out': '😛',
|
|
188
|
+
tired: '😩',
|
|
189
|
+
surprised: '😮',
|
|
190
|
+
wink: '😉'
|
|
191
|
+
};
|
|
@@ -1012,6 +1012,16 @@ class Popup extends _common.Com {
|
|
|
1012
1012
|
if (com.type === 'image') return this.renderImageComponent(com, i);
|
|
1013
1013
|
});
|
|
1014
1014
|
|
|
1015
|
+
let formComponents = _index.default.filter(page.components, com => com.type !== 'image');
|
|
1016
|
+
|
|
1017
|
+
if (!formComponents.length) {
|
|
1018
|
+
formcss.background = 'transparent';
|
|
1019
|
+
formcss.padding_top = '0';
|
|
1020
|
+
formcss.padding_bottom = '0';
|
|
1021
|
+
formcss.padding_left = '0';
|
|
1022
|
+
formcss.padding_right = '0';
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1015
1025
|
return (0, _preact.h)("div", {
|
|
1016
1026
|
class: "overlay",
|
|
1017
1027
|
style: overlaystyle
|
package/package.json
CHANGED
|
@@ -51,8 +51,10 @@ export default class GenericTemplateAttachments extends Com {
|
|
|
51
51
|
src={this.props.store.replaceFileUrl(ele.image_url)}
|
|
52
52
|
/>
|
|
53
53
|
</div>
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
<div class='generic-attachment--element-content'>
|
|
55
|
+
{$title}
|
|
56
|
+
{$subtitle}
|
|
57
|
+
</div>
|
|
56
58
|
<Buttons buttons={ele.buttons} onSelect={(button) => this.props.onSelect(button)} t={this.props.t} />
|
|
57
59
|
</div>
|
|
58
60
|
)
|
|
@@ -21,8 +21,7 @@ img { max-width: 100%; display: block; margin: 10px auto; }
|
|
|
21
21
|
* { white-space: normal }
|
|
22
22
|
ul > li { margin-bottom: 5px }
|
|
23
23
|
ul:last-child { margin-bottom: 0 }
|
|
24
|
-
p
|
|
25
|
-
p:last-child { margin-bottom: 0;}
|
|
24
|
+
p { margin-bottom: 0; margin-top: 0;}
|
|
26
25
|
</style>
|
|
27
26
|
<div>${html}</div>`
|
|
28
27
|
let links = this.shadowRoot.querySelectorAll('a')
|
|
@@ -22,7 +22,11 @@ export default class TextMessage extends Com {
|
|
|
22
22
|
render() {
|
|
23
23
|
var format = sb.get(this.props.ev, 'data.message.format', 'plaintext')
|
|
24
24
|
if (format === 'markdown') return this.renderMarkdown()
|
|
25
|
+
if (format === 'delta') return this.renderDelta()
|
|
26
|
+
return this.renderPlainText()
|
|
27
|
+
}
|
|
25
28
|
|
|
29
|
+
renderPlainText() {
|
|
26
30
|
var text = sb.get(this.props.ev, 'data.message.text')
|
|
27
31
|
text = sb.trim(text)
|
|
28
32
|
if (sb.size(text) === 0) return null
|
|
@@ -60,8 +64,25 @@ export default class TextMessage extends Com {
|
|
|
60
64
|
return <div class='message-user message-text--user'>{tags}</div>
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
|
|
64
|
-
|
|
67
|
+
renderDelta() {
|
|
68
|
+
let deltas = sb.get(this.props.ev, 'data.message.quill_delta')
|
|
69
|
+
deltas = sb.parseJSON(deltas) || {}
|
|
70
|
+
deltas = deltas.ops || []
|
|
71
|
+
let isMarkdown = sb.find(
|
|
72
|
+
deltas,
|
|
73
|
+
(delta) =>
|
|
74
|
+
sb.get(delta, 'attributes.bold') || sb.get(delta, 'attributes.italic') || sb.get(delta, 'attributes.underline'),
|
|
75
|
+
)
|
|
76
|
+
if (isMarkdown) {
|
|
77
|
+
var text = deltaToMarkdown(deltas)
|
|
78
|
+
console.log('text', text)
|
|
79
|
+
return this.renderMarkdown(text)
|
|
80
|
+
}
|
|
81
|
+
return this.renderPlainText()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
renderMarkdown(text) {
|
|
85
|
+
if (!text) text = sb.get(this.props.ev, 'data.message.text')
|
|
65
86
|
if (sb.size(text) === 0) return null
|
|
66
87
|
|
|
67
88
|
let byType = sb.get(this.props.ev, 'by.type')
|
|
@@ -86,3 +107,48 @@ export default class TextMessage extends Com {
|
|
|
86
107
|
)
|
|
87
108
|
}
|
|
88
109
|
}
|
|
110
|
+
|
|
111
|
+
function deltaToMarkdown(deltas) {
|
|
112
|
+
let output = ''
|
|
113
|
+
sb.each(deltas, (delta, idx) => {
|
|
114
|
+
let text = ''
|
|
115
|
+
let insert = delta.insert
|
|
116
|
+
let attributes = delta.attributes
|
|
117
|
+
// emoji
|
|
118
|
+
if (insert.emoji) text = emojiCodes[insert.emoji] || ''
|
|
119
|
+
// insert bold, italic, underline
|
|
120
|
+
if (attributes) {
|
|
121
|
+
if (attributes.italic && attributes.bold) text = `*__${insert}__*`
|
|
122
|
+
else if (attributes.italic) text = `*${insert}*`
|
|
123
|
+
else if (attributes.bold) text = `**${insert}**`
|
|
124
|
+
else text = insert
|
|
125
|
+
}
|
|
126
|
+
if (insert.dynamicField) text = `${sb.get(insert, 'dynamicField.text', '')}`
|
|
127
|
+
if (!insert.emoji && !attributes && !insert.dynamicField) {
|
|
128
|
+
text = insert || ''
|
|
129
|
+
// markdown need newline to <br/> characters to newline
|
|
130
|
+
text = text.replace(/\n/g, '<br/>')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
output += text
|
|
134
|
+
})
|
|
135
|
+
return output
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const emojiCodes = {
|
|
139
|
+
like: '👍',
|
|
140
|
+
unlike: '👎',
|
|
141
|
+
angry: '😠',
|
|
142
|
+
confused: '😕',
|
|
143
|
+
crying: '😢',
|
|
144
|
+
grinning: '😀',
|
|
145
|
+
'heart-eyes': '😍',
|
|
146
|
+
neutral: '😐',
|
|
147
|
+
sleepy: '😪',
|
|
148
|
+
sad: '😞',
|
|
149
|
+
smiling: '😄',
|
|
150
|
+
'tongue-out': '😛',
|
|
151
|
+
tired: '😩',
|
|
152
|
+
surprised: '😮',
|
|
153
|
+
wink: '😉',
|
|
154
|
+
}
|
package/src/popup/popup.js
CHANGED
|
@@ -918,6 +918,17 @@ export default class Popup extends Com {
|
|
|
918
918
|
let $imgs = sb.map(page.components, (com, i) => {
|
|
919
919
|
if (com.type === 'image') return this.renderImageComponent(com, i)
|
|
920
920
|
})
|
|
921
|
+
|
|
922
|
+
// fix bug image only popup has white block
|
|
923
|
+
let formComponents = sb.filter(page.components, (com) => com.type !== 'image')
|
|
924
|
+
if (!formComponents.length) {
|
|
925
|
+
formcss.background = 'transparent'
|
|
926
|
+
formcss.padding_top = '0'
|
|
927
|
+
formcss.padding_bottom = '0'
|
|
928
|
+
formcss.padding_left = '0'
|
|
929
|
+
formcss.padding_right = '0'
|
|
930
|
+
}
|
|
931
|
+
|
|
921
932
|
return (
|
|
922
933
|
<div class='overlay' style={overlaystyle}>
|
|
923
934
|
<div class={animation} style={this.js2css(containercss)} onClick={(e) => e.stopPropagation()}>
|
package/src/store/store.js
CHANGED
|
@@ -704,7 +704,7 @@ export default class Store {
|
|
|
704
704
|
sb.map(pongs, (pong) => {
|
|
705
705
|
if (pong.member_id == user.id && pong.type === 'seen') {
|
|
706
706
|
let mem = sb.find(convo.members, (mem) => mem.id === user.id)
|
|
707
|
-
mem.seen_at = pong.created
|
|
707
|
+
if (mem) mem.seen_at = pong.created
|
|
708
708
|
}
|
|
709
709
|
})
|
|
710
710
|
this.chain.put(cid, oldev.id, sb.getMs(oldev.created), oldev)
|