From deac48810d00f354a66faf72909017369b94701b Mon Sep 17 00:00:00 2001 From: Mohit Gupta Date: Thu, 13 Aug 2020 04:43:56 +0530 Subject: [PATCH] filters: Fix has:image and avoid future issues for other has filters. This fixes a bug with the original frontend-side implementation for has: filters, where it would incorrectly not match content in cases where the message's nesting structure did not have an outer tag. Bug was introduced in 02ea52fc186a96a420598cf3c05f53ef69b5838c. Fixes #16118. --- static/js/message_util.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/static/js/message_util.js b/static/js/message_util.js index b57eb3a849..91e8dafe20 100644 --- a/static/js/message_util.js +++ b/static/js/message_util.js @@ -16,16 +16,25 @@ function add_messages(messages, msg_list, opts) { return render_info; } +// We need to check if the message content contains the specified HTML +// elements. We wrap the message.content in a
; this is +// important because $("Text link").find("a") returns nothing; +// one needs an outer element wrapping an object to use this +// construction. +function is_element_in_message_content(message, element_selector) { + return $(`
${message.content}
`).find(element_selector).length > 0; +} + exports.message_has_link = function (message) { - return $(message.content).find("a").length > 0; + return is_element_in_message_content(message, "a"); }; exports.message_has_image = function (message) { - return $(message.content).find(".message_inline_image").length > 0; + return is_element_in_message_content(message, ".message_inline_image"); }; exports.message_has_attachment = function (message) { - return $(message.content).find("a[href^='/user_uploads']").length > 0; + return is_element_in_message_content(message, "a[href^='/user_uploads']"); }; exports.add_old_messages = function (messages, msg_list) {