Don't render OOB url if it's the same as the body

Otherwise the file gets shown/rendered twice.
This commit is contained in:
JC Brand 2021-08-31 15:19:26 +02:00
parent 5dc89fb2b3
commit 5095027a0b
5 changed files with 20 additions and 23 deletions

View File

@ -274,10 +274,6 @@ describe("XEP-0363: HTTP File Upload", function () {
expect(img_link_el.outerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
`<a class="chat-image__link" target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
`<img class="chat-image img-thumbnail" src="${base_url}/logo/conversejs-filled.svg"></a>`);
expect(view.querySelector('.chat-msg .chat-msg__media').innerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
`<a target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
`Download file "conversejs-filled.svg"</a>`);
XMLHttpRequest.prototype.send = send_backup;
}));

View File

@ -31,7 +31,7 @@ describe("A Chat Message", function () {
expect(msg.classList.length).toEqual(1);
expect(u.hasClass('chat-msg__text', msg)).toBe(true);
expect(msg.textContent).toEqual('Have you heard this funny audio?');
let media = view.querySelector('.chat-msg .chat-msg__media');
const media = view.querySelector('.chat-msg .chat-msg__media');
expect(media.innerHTML.replace(/<!-.*?->/g, '').replace(/(\r\n|\n|\r)/gm, "").trim()).toEqual(
`<audio controls="" src="https://montague.lit/audio.mp3"></audio>`+
`<a target="_blank" rel="noopener" href="https://montague.lit/audio.mp3">${url}</a>`);
@ -41,15 +41,21 @@ describe("A Chat Message", function () {
<message from="${contact_jid}"
type="chat"
to="romeo@montague.lit/orchard">
<body>https://montague.lit/audio.mp3</body>
<x xmlns="jabber:x:oob"><url>https://montague.lit/audio.mp3</url></x>
<body>${url}</body>
<x xmlns="jabber:x:oob"><url>${url}</url></x>
</message>`);
_converse.connection._dataRecv(mock.createRequest(stanza));
await new Promise(resolve => view.model.messages.once('rendered', resolve));
msg = view.querySelector('.chat-msg:last-child .chat-msg__text');
msg = view.querySelector('.chat-msg .chat-msg__text');
expect(msg.innerHTML.replace(/<!-.*?->/g, '')).toEqual('Have you heard this funny audio?'); // Emtpy
media = view.querySelector('.chat-msg:last-child .chat-msg__media');
expect(media.innerHTML.replace(/<!-.*?->/g, '').replace(/(\r\n|\n|\r)/gm, "").trim()).toEqual(
// We don't render the OOB data
expect(view.querySelector('converse-chat-message:last-child .chat-msg__media')).toBe(null);
// But we do render the body
const msg_el = view.querySelector('converse-chat-message:last-child .chat-msg__text');
await u.waitUntil(() => msg_el.innerHTML.replace(/<!-.*?->/g, '').replace(/(\r\n|\n|\r)/gm, "").trim() ===
`<audio controls="" src="https://montague.lit/audio.mp3"></audio>`+
`<a target="_blank" rel="noopener" href="${url}">${url}</a>`);
}));
@ -78,7 +84,7 @@ describe("A Chat Message", function () {
let msg = view.querySelector('.chat-msg .chat-msg__text');
expect(msg.classList.length).toBe(1);
expect(msg.textContent).toEqual('Have you seen this funny video?');
let media = view.querySelector('.chat-msg .chat-msg__media');
const media = view.querySelector('.chat-msg .chat-msg__media');
expect(media.innerHTML.replace(/(\r\n|\n|\r)/gm, "").replace(/<!-.*?->/g, '')).toEqual(
`<video controls="" preload="metadata" src="${Strophe.xmlescape(url)}"></video>`+
`<a target="_blank" rel="noopener" href="${Strophe.xmlescape(url)}">${Strophe.xmlescape(url)}</a>`);
@ -93,12 +99,9 @@ describe("A Chat Message", function () {
</message>`);
_converse.connection._dataRecv(mock.createRequest(stanza));
await new Promise(resolve => view.model.messages.once('rendered', resolve));
msg = view.querySelector('.chat-msg:last-child .chat-msg__text');
msg = view.querySelector('converse-chat-message .chat-msg__text');
expect(msg.innerHTML.replace(/<!-.*?->/g, '')).toEqual('Have you seen this funny video?');
media = view.querySelector('.chat-msg:last-child .chat-msg__media');
expect(media.innerHTML.replace(/(\r\n|\n|\r)/gm, "").replace(/<!-.*?->/g, '')).toEqual(
`<video controls="" preload="metadata" src="${Strophe.xmlescape(url)}"></video>`+
`<a target="_blank" rel="noopener" href="${Strophe.xmlescape(url)}">${Strophe.xmlescape(url)}</a>`);
expect(view.querySelector('converse-chat-message:last-child .chat-msg__media')).toBe(null);
}));
it("will render download links for files from oob URLs",

View File

@ -141,10 +141,7 @@ describe("XEP-0363: HTTP File Upload", function () {
`<a class="chat-image__link" target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
`<img class="chat-image img-thumbnail" src="${base_url}/logo/conversejs-filled.svg"></a>`);
expect(view.querySelector('.chat-msg .chat-msg__media').innerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
`<a target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
`Download file "conversejs-filled.svg"</a>`);
expect(view.querySelector('.chat-msg .chat-msg__media')).toBe(null);
XMLHttpRequest.prototype.send = send_backup;
}));

View File

@ -142,8 +142,8 @@ describe("The OMEMO module", function() {
`<encryption namespace="eu.siacs.conversations.axolotl" xmlns="urn:xmpp:eme:0"/>`+
`</message>`);
const link_el = await u.waitUntil(() => view.querySelector('.chat-msg__media'));
expect(link_el.textContent.trim()).toBe('Download file "secret.txt"', 1000);
const link_el = await u.waitUntil(() => view.querySelector('.chat-msg__text'));
expect(link_el.textContent.trim()).toBe(url);
const message = view.model.messages.at(0);
expect(message.get('is_encrypted')).toBe(true);

View File

@ -25,6 +25,7 @@ export default (el) => {
`;
const spoiler_classes = el.model.get('is_spoiler') ? `spoiler ${el.model.get('is_spoiler_visible') ? '' : 'hidden'}` : '';
const text = el.model.getMessageText();
const show_oob = el.model.get('oob_url') && text !== el.model.get('oob_url');
return html`
${ el.model.get('is_spoiler') ? tpl_spoiler_hint : '' }
${ el.model.get('subject') ? html`<div class="chat-msg__subject">${el.model.get('subject')}</div>` : '' }
@ -41,7 +42,7 @@ export default (el) => {
${ (el.model.get('received') && !el.model.isMeCommand() && !is_groupchat_message) ? html`<span class="fa fa-check chat-msg__receipt"></span>` : '' }
${ (el.model.get('edited')) ? tpl_edited_icon(el) : '' }
</span>
${ el.model.get('oob_url') ? html`<div class="chat-msg__media">${getOOBURLMarkup(el.model.get('oob_url'))}</div>` : '' }
${ show_oob ? html`<div class="chat-msg__media">${getOOBURLMarkup(el.model.get('oob_url'))}</div>` : '' }
<div class="chat-msg__error">${ el.model.get('error_text') || el.model.get('error') }</div>
`;
}