Comparing version 0.0.0 to 0.1.0
@@ -1,3 +0,3 @@ | ||
var transit = require('../'); | ||
var tr = transit(); | ||
var trumpet = require('../'); | ||
var tr = trumpet(); | ||
@@ -4,0 +4,0 @@ tr.select('.b span', function (node) { |
29
index.js
var sax = require('sax'); | ||
var select = require('./lib/select'); | ||
module.exports = function (fn) { | ||
module.exports = function () { | ||
var parser = sax.parser(false); | ||
@@ -12,13 +12,2 @@ var stream = select(parser); | ||
function makeNode (type, src, tag) { | ||
return { | ||
type : type, | ||
source : src, | ||
parser : parser, | ||
write : write, | ||
name : tag && tag.name, | ||
attributes : tag && tag.attributes, | ||
}; | ||
} | ||
var buffered = ''; | ||
@@ -38,3 +27,2 @@ var pos = 0; | ||
if (fn) fn(makeNode(type, src, tag)) | ||
stream.raw(src); | ||
@@ -55,3 +43,3 @@ return src; | ||
var s = buffered.slice(0, parser.position - pos); | ||
if (fn) fn(makeNode('text', s)); | ||
stream.raw(s); | ||
} | ||
@@ -62,14 +50,17 @@ stream.emit('end'); | ||
parser.onopentag = function (tag) { | ||
var src = update('open', tag); | ||
stream.update('open', tag, src); | ||
stream.pre('open', tag); | ||
update('open', tag); | ||
stream.post('open', tag); | ||
}; | ||
parser.onclosetag = function (name) { | ||
stream.update('close', name); | ||
stream.pre('close', name); | ||
update('close'); | ||
stream.post('close', name); | ||
}; | ||
parser.ontext = function (text) { | ||
var src = update('text'); | ||
stream.update('text', text, src); | ||
stream.pre('text', text); | ||
update('text'); | ||
stream.post('text', text); | ||
}; | ||
@@ -76,0 +67,0 @@ |
@@ -16,6 +16,9 @@ var Stream = require('stream').Stream; | ||
stream.update = function (name, t) { | ||
var updating = false; | ||
stream.pre = function (name, t) { | ||
if (name === 'open') { | ||
selectors.forEach(function (sel) { | ||
sel(t, parser) | ||
if (sel.removing) updating = true; | ||
}); | ||
@@ -25,7 +28,14 @@ } | ||
selectors.forEach(function (sel) { | ||
var up = sel.updating; | ||
sel.pending = sel.pending.filter(function (p) { | ||
var done = p.level >= parser.tags.length; | ||
if (done) p.callback(p.buffered); | ||
var done = p.level > parser.tags.length; | ||
if (done) p.callback.call(stream, p.buffered); | ||
return !done; | ||
}); | ||
if (up && !sel.updating) { | ||
if (sel.removing) sel.removeOnPost = true; | ||
else updating = false; | ||
} | ||
}); | ||
@@ -35,2 +45,20 @@ } | ||
stream.post = function (name, t) { | ||
if (name === 'open') { | ||
selectors.forEach(function (sel) { | ||
if (sel.updating) { | ||
updating = true; | ||
} | ||
sel.pending.forEach(function (p) { | ||
p.buffered = ''; | ||
}); | ||
}); | ||
} | ||
else if (name == 'close') { | ||
selectors.forEach(function (sel) { | ||
if (sel.removeOnPost) updating = false; | ||
}); | ||
} | ||
}; | ||
stream.raw = function (s) { | ||
@@ -42,2 +70,4 @@ selectors.forEach(function (sel) { | ||
}); | ||
if (!updating) stream.emit('data', s); | ||
}; | ||
@@ -94,2 +124,7 @@ | ||
var p = { level : tags.length }; | ||
var expired = false; | ||
function expire () { | ||
throw new Error('Parse expired. You had your chance.'); | ||
} | ||
fn({ | ||
@@ -99,2 +134,4 @@ name : tag.name.toLowerCase(), | ||
html : function (cb) { | ||
if (expired) expire(); | ||
p.buffered = ''; | ||
@@ -104,3 +141,27 @@ p.callback = cb; | ||
}, | ||
update : function (cb) { | ||
if (expired) expire(); | ||
p.buffered = ''; | ||
p.callback = function (html) { | ||
this.emit('data', | ||
typeof cb === 'function' ? cb(html) : cb | ||
); | ||
sel.updating = false; | ||
}; | ||
sel.updating = true; | ||
sel.pending.push(p); | ||
}, | ||
remove : function () { | ||
if (expired) expire(); | ||
sel.updating = true; | ||
sel.removing = true; | ||
p.callback = function () { | ||
sel.updating = false; | ||
}; | ||
sel.pending.push(p); | ||
}, | ||
}); | ||
expired = true; | ||
}; | ||
@@ -107,0 +168,0 @@ |
{ | ||
"name" : "trumpet", | ||
"version" : "0.0.0", | ||
"version" : "0.1.0", | ||
"description" : "parse and transform streaming html using css selectors", | ||
@@ -5,0 +5,0 @@ "main" : "index.js", |
var test = require('tap').test; | ||
var transit = require('../'); | ||
var trumpet = require('../'); | ||
var fs = require('fs'); | ||
@@ -8,3 +8,3 @@ | ||
var tr = transit(); | ||
var tr = trumpet(); | ||
fs.createReadStream(__dirname + '/select.html').pipe(tr); | ||
@@ -11,0 +11,0 @@ |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
14607
14
268
212