* unescape html characters in URL before checking whether it targets to image * update docs/CHANGES.md * test image's URL with query string which contains html-escaped characters * utils.js: following code conventions * split test url with query string to separate test
This commit is contained in:
parent
e88afa0421
commit
0b50c0c8c8
@ -18,6 +18,7 @@
|
|||||||
- #806 The `_converse.listen` API event listeners aren't triggered. [jcbrand]
|
- #806 The `_converse.listen` API event listeners aren't triggered. [jcbrand]
|
||||||
- #807 Error: Plugin "converse-dragresize" tried to override HeadlinesBoxView but it's not found. [jcbrand]
|
- #807 Error: Plugin "converse-dragresize" tried to override HeadlinesBoxView but it's not found. [jcbrand]
|
||||||
- #811 jQuery wasn't being closured in builds. [jcbrand]
|
- #811 jQuery wasn't being closured in builds. [jcbrand]
|
||||||
|
- #814 Images from URLs with query strings aren't being rendered. [novokrest]
|
||||||
- #820 Inconsistency in displaying room features. [jcbrand]
|
- #820 Inconsistency in displaying room features. [jcbrand]
|
||||||
|
|
||||||
## 3.0.0 (2017-03-05)
|
## 3.0.0 (2017-03-05)
|
||||||
|
@ -1240,6 +1240,33 @@
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it("will render images from their URLs with query strings containing HTML-escaping characters", mock.initConverse(function (_converse) {
|
||||||
|
test_utils.createContacts(_converse, 'current');
|
||||||
|
test_utils.openControlBox();
|
||||||
|
test_utils.openContactsPanel(_converse);
|
||||||
|
|
||||||
|
if (/PhantomJS/.test(window.navigator.userAgent)) {
|
||||||
|
// Doesn't work when running tests in PhantomJS, since
|
||||||
|
// the page is loaded via file:///
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var message = document.URL.split(window.location.pathname)[0] + "/logo/conversejs.svg?param1=val1¶m2=val2",
|
||||||
|
htmlEscapedMessage = message.replace(/&/g, '&');
|
||||||
|
var contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
|
||||||
|
test_utils.openChatBoxFor(_converse, contact_jid);
|
||||||
|
var view = _converse.chatboxviews.get(contact_jid);
|
||||||
|
spyOn(view, 'sendMessage').andCallThrough();
|
||||||
|
runs(function () {
|
||||||
|
test_utils.sendMessage(view, message);
|
||||||
|
});
|
||||||
|
waits(500);
|
||||||
|
runs(function () {
|
||||||
|
expect(view.sendMessage).toHaveBeenCalled();
|
||||||
|
var msg = view.$el.find('.chat-content').find('.chat-message').last().find('.chat-msg-content');
|
||||||
|
expect(msg.html()).toEqual('<img src="'+htmlEscapedMessage+'" class="chat-image">');
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
it("will render the message time as configured", mock.initConverse(function (_converse) {
|
it("will render the message time as configured", mock.initConverse(function (_converse) {
|
||||||
test_utils.createContacts(_converse, 'current');
|
test_utils.createContacts(_converse, 'current');
|
||||||
|
|
||||||
|
14
src/utils.js
14
src/utils.js
@ -44,6 +44,18 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var unescapeHTML = function (htmlEscapedText) {
|
||||||
|
/* Helper method that replace HTML-escaped symbols with equivalent characters
|
||||||
|
* (e.g. transform occurrences of '&' to '&')
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* (String) htmlEscapedText: a String containing the HTML-escaped symbols.
|
||||||
|
*/
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.innerHTML = htmlEscapedText;
|
||||||
|
return div.innerText;
|
||||||
|
}
|
||||||
|
|
||||||
var isImage = function (url) {
|
var isImage = function (url) {
|
||||||
var deferred = new $.Deferred();
|
var deferred = new $.Deferred();
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
@ -91,7 +103,7 @@
|
|||||||
}
|
}
|
||||||
$obj.html(x);
|
$obj.html(x);
|
||||||
_.forEach(list, function (url) {
|
_.forEach(list, function (url) {
|
||||||
isImage(url).then(function (img) {
|
isImage(unescapeHTML(url)).then(function (img) {
|
||||||
var prot = url.indexOf('http://') === 0 || url.indexOf('https://') === 0 ? '' : 'http://';
|
var prot = url.indexOf('http://') === 0 || url.indexOf('https://') === 0 ? '' : 'http://';
|
||||||
var escaped_url = encodeURI(decodeURI(url)).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
|
var escaped_url = encodeURI(decodeURI(url)).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
|
||||||
var new_url = '<a target="_blank" rel="noopener" href="' + prot + escaped_url + '">'+ url + '</a>';
|
var new_url = '<a target="_blank" rel="noopener" href="' + prot + escaped_url + '">'+ url + '</a>';
|
||||||
|
Loading…
Reference in New Issue
Block a user