-
Notifications
You must be signed in to change notification settings - Fork 0
/
JsdomAdapter.js
80 lines (60 loc) · 1.82 KB
/
JsdomAdapter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var _ = require("underscore");
var request = require("request");
var jsdom = require("jsdom");
/*---------------------
:: Jsdom
-> adapter
---------------------*/
var adapter = {
channels: {},
// This method runs when a model is initially registered at server start time
registerCollection: function(collection, cb) {
if (!collection.url) {
cb("No url defined in " + collection.identity + " model. " +
"For the HTTP adapter to work, its models need a url property!");
}
// Save URL and other identifying info
this.channels[collection.identity] = {
url: collection.url
// method: collection.method || ''
};
},
// Get a page
find: function(collectionName, options, cb) {
var urlPattern = '/';
var url = options.where.url + urlPattern;
// Start clock
var stopwatch = new Date();
request(url, function(err, res, body) {
if (err) return cb(err, body);
// End clock
var duration = new Date() - stopwatch;
console.log(body);
// Build dom
var html = body;
// var html = '<html><head></head><body><script>io={hi:"yest"};</script></body></html>';
jsdom.defaultDocumentFeatures = {
FetchExternalResources: ["script", "img", "css"],
ProcessExternalResources: ['script'],
// Solves https:/tmpvar/jsdom/issues/426
MutationEvents: '2.0',
QuerySelector: false
};
var dom = jsdom.jsdom(html);
var window = dom.createWindow();
// Extend with additional testing information
var response = _.extend({
window: window,
latency: duration,
url: url,
size: res.headers['content-length']
}, options.where);
// Pluralize to make the adapter happy
response = [response];
// Return information about the download
cb(err, response);
});
}
};
_.bindAll(adapter, 'registerCollection', 'find');
module.exports = adapter;