Add the ability to replay transcripts of chat logs.

This commit is contained in:
JC Brand 2016-04-28 14:52:27 +00:00
parent 09457d8461
commit 218000551d
5 changed files with 86 additions and 3 deletions

2
.gitignore vendored
View File

@ -11,6 +11,8 @@
analytics.js
.idea
converse-logs/*.html
# Ruby/Sass/Bundler
.bundle
.sass-cache

View File

@ -0,0 +1,5 @@
define("transcripts", [
"tpl!converse-logs/conversejs.containers-1460718487729",
], function () {
return arguments;
});

76
spec/transcripts.js Normal file
View File

@ -0,0 +1,76 @@
/*global converse */
(function (root, factory) {
define([
"jquery",
"underscore",
"mock",
"test_utils",
"utils",
"transcripts"
], factory
);
} (this, function ($, _, mock, test_utils, utils, transcripts) {
var Strophe = converse_api.env.Strophe;
var IGNORED_TAGS = [
'stream:features',
'auth',
'challenge',
'success',
'stream:features',
'response'
];
function traverseElement (el, _stanza) {
if (typeof _stanza !== 'undefined') {
if (el.nodeType === 3) {
_stanza.t(el.nodeValue);
return _stanza;
} else {
_stanza = _stanza.c(el.nodeName.toLowerCase(), getAttributes(el));
}
} else {
_stanza = new Strophe.Builder(
el.nodeName.toLowerCase(),
getAttributes(el)
);
}
_.each(el.childNodes, _.partial(traverseElement, _, _stanza));
return _stanza.up();
}
function getAttributes (el) {
var attributes = {};
_.each(el.attributes, function (att) {
attributes[att.nodeName] = att.nodeValue;
});
return attributes;
}
return describe("Transcripts of chat logs", function () {
beforeEach(function () {
test_utils.openChatRoom("discuss", 'conference.conversejs.org', 'jc');
test_utils.openChatRoom("dummy", 'rooms.localhost', 'jc');
test_utils.openChatRoom("prosody", 'conference.prosody.im', 'jc');
});
it("can be used to replay conversations", function () {
spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true);
_.each(transcripts, function (transcript) {
var text = transcript();
var xml = Strophe.xmlHtmlNode(text);
$(xml).children('log').children('body').each(function (i, el) {
$(el).children().each(function (i, el) {
if (el.nodeType === 3) {
return; // Ignore text
}
if (_.contains(IGNORED_TAGS, el.nodeName.toLowerCase())) {
return;
}
var _stanza = traverseElement(el);
converse.connection._dataRecv(test_utils.createRequest(_stanza));
});
});
});
});
});
}));

View File

@ -1567,8 +1567,8 @@
this.setUpXMLLogging = function () {
if (this.debug) {
this.connection.xmlInput = function (body) { converse.log(body); };
this.connection.xmlOutput = function (body) { converse.log(body); };
this.connection.xmlInput = function (body) { converse.log(body.outerHTML); };
this.connection.xmlOutput = function (body) { converse.log(body.outerHTML); };
}
};

View File

@ -13,7 +13,7 @@
utils.createRequest = function (iq) {
iq = typeof iq.tree == "function" ? iq.tree() : iq;
var req = new Strophe.Request(iq, function() {});
req.getResponse = function() {
req.getResponse = function () {
var env = new Strophe.Builder('env', {type: 'mock'}).tree();
env.appendChild(iq);
return env;