4 <title>Converse
</title>
6 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
7 <meta name=
"viewport" content=
"width=device-width, initial-scale=1.0" />
8 <meta name=
"description" content=
"Converse: An XMPP chat client which can be integrated into any website" />
9 <meta name=
"keywords" content=
"xmpp chat webchat converse.js Converse" />
11 <link type=
"text/css" rel=
"stylesheet" media=
"screen" href=
"https://cdn.conversejs.org/5.0.4/dist/converse.min.css" />
12 <style type=
"text/css">
13 #conversejs div.chat-msg__text pre {
14 background-color: #eee;
18 <script src=
"https://cdn.conversejs.org/3rdparty/libsignal-protocol.min.js"></script>
19 <script src=
"https://cdn.conversejs.org/5.0.4/dist/converse.min.js"></script>
20 <script src=
"https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
21 <script src=
"https://cdnjs.cloudflare.com/ajax/libs/markdown-it/10.0.0/markdown-it.min.js"></script>
23 var md = window.markdownit({
26 converse.plugins.add('markdown', {
28 // const { _converse } = this;
29 // _converse.api.listen.on('afterMessageBodyTransformed', (view, text) =
> {
30 // let newtext = text.replace(/
<br\
/>/g, '\n').replace(/```/g, "\n```\n");
31 // newtext = md.render(newtext).replace(/^
<p>/, "").replace(/<\/p
>\s*$/, "");
32 // view.model.save({'message': newtext}, {'silent': true });
37 transformBodyText: async function(text) {
38 let newtext = await this.__super__.transformBodyText.apply(this, arguments);
39 newtext = newtext.replace(/
<br\
/>/g, '\n').replace(/```/g, "\n```\n");
40 return md.render(newtext).replace(/^
<p>/, "").replace(/<\/p
>\s*$/, "");
46 //bosh_service_url: 'https://im.immae.fr/bosh',
47 websocket_url: 'wss://im.immae.fr/ws',
48 view_mode: 'fullscreen',
49 show_controlbox_by_default: true,
50 whitelisted_plugins: ['markdown'],