Add the ability to replay transcripts of chat logs.
This commit is contained in:
parent
09457d8461
commit
218000551d
2
.gitignore
vendored
2
.gitignore
vendored
@ -11,6 +11,8 @@
|
|||||||
analytics.js
|
analytics.js
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
|
converse-logs/*.html
|
||||||
|
|
||||||
# Ruby/Sass/Bundler
|
# Ruby/Sass/Bundler
|
||||||
.bundle
|
.bundle
|
||||||
.sass-cache
|
.sass-cache
|
||||||
|
5
converse-logs/converse-logs.js
Normal file
5
converse-logs/converse-logs.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
define("transcripts", [
|
||||||
|
"tpl!converse-logs/conversejs.containers-1460718487729",
|
||||||
|
], function () {
|
||||||
|
return arguments;
|
||||||
|
});
|
76
spec/transcripts.js
Normal file
76
spec/transcripts.js
Normal 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));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}));
|
@ -1567,8 +1567,8 @@
|
|||||||
|
|
||||||
this.setUpXMLLogging = function () {
|
this.setUpXMLLogging = function () {
|
||||||
if (this.debug) {
|
if (this.debug) {
|
||||||
this.connection.xmlInput = function (body) { converse.log(body); };
|
this.connection.xmlInput = function (body) { converse.log(body.outerHTML); };
|
||||||
this.connection.xmlOutput = function (body) { converse.log(body); };
|
this.connection.xmlOutput = function (body) { converse.log(body.outerHTML); };
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
utils.createRequest = function (iq) {
|
utils.createRequest = function (iq) {
|
||||||
iq = typeof iq.tree == "function" ? iq.tree() : iq;
|
iq = typeof iq.tree == "function" ? iq.tree() : iq;
|
||||||
var req = new Strophe.Request(iq, function() {});
|
var req = new Strophe.Request(iq, function() {});
|
||||||
req.getResponse = function() {
|
req.getResponse = function () {
|
||||||
var env = new Strophe.Builder('env', {type: 'mock'}).tree();
|
var env = new Strophe.Builder('env', {type: 'mock'}).tree();
|
||||||
env.appendChild(iq);
|
env.appendChild(iq);
|
||||||
return env;
|
return env;
|
||||||
|
Loading…
Reference in New Issue
Block a user