| Index: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/lib/FeedHandler.js
|
| diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/lib/FeedHandler.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/lib/FeedHandler.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a62e61c6b8db83c7b0fa97907fdff51eaa59ee24
|
| --- /dev/null
|
| +++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/lib/FeedHandler.js
|
| @@ -0,0 +1,90 @@
|
| +var index = require("./index.js"),
|
| + DomHandler = index.DomHandler,
|
| + DomUtils = index.DomUtils;
|
| +
|
| +//TODO: make this a streamable handler
|
| +function FeedHandler(callback){
|
| + this.init(callback, { ignoreWhitespace: true });
|
| +}
|
| +
|
| +require("util").inherits(FeedHandler, DomHandler);
|
| +
|
| +FeedHandler.prototype.init = DomHandler;
|
| +
|
| +function getElements(what, where){
|
| + return DomUtils.getElementsByTagName(what, where, true);
|
| +}
|
| +function getOneElement(what, where){
|
| + return DomUtils.getElementsByTagName(what, where, true, 1)[0];
|
| +}
|
| +function fetch(what, where, recurse){
|
| + return DomUtils.getText(
|
| + DomUtils.getElementsByTagName(what, where, recurse, 1)
|
| + );
|
| +}
|
| +
|
| +var isValidFeed = function(value) {
|
| + return value === "rss" || value === "feed" || value === "rdf:RDF";
|
| +};
|
| +
|
| +FeedHandler.prototype.onend = function() {
|
| + var feed = {},
|
| + feedRoot = getOneElement(isValidFeed, this.dom),
|
| + tmp, childs;
|
| +
|
| + if (feedRoot) {
|
| + if(feedRoot.name === "feed"){
|
| + childs = feedRoot.children;
|
| +
|
| + feed.type = "atom";
|
| + if(tmp = fetch("id", childs)) feed.id = tmp;
|
| + if(tmp = fetch("title", childs)) feed.title = tmp;
|
| + if((tmp = getOneElement("link", childs)) && (tmp = tmp.attribs) && (tmp = tmp.href)) feed.link = tmp;
|
| + if(tmp = fetch("subtitle", childs)) feed.description = tmp;
|
| + if(tmp = fetch("updated", childs)) feed.updated = new Date(tmp);
|
| + if(tmp = fetch("email", childs, true)) feed.author = tmp;
|
| +
|
| + feed.items = getElements("entry", childs).map(function(item){
|
| + var entry = {}, tmp;
|
| +
|
| + item = item.children;
|
| +
|
| + if(tmp = fetch("id", item)) entry.id = tmp;
|
| + if(tmp = fetch("title", item)) entry.title = tmp;
|
| + if((tmp = getOneElement("link", item)) && (tmp = tmp.attribs) && (tmp = tmp.href)) entry.link = tmp;
|
| + if(tmp = fetch("summary", item)) entry.description = tmp;
|
| + if(tmp = fetch("updated", item)) entry.pubDate = new Date(tmp);
|
| + return entry;
|
| + });
|
| + } else{
|
| + childs = getOneElement("channel", feedRoot.children).children;
|
| +
|
| + feed.type = feedRoot.name.substr(0, 3);
|
| + feed.id = "";
|
| + if(tmp = fetch("title", childs)) feed.title = tmp;
|
| + if(tmp = fetch("link", childs)) feed.link = tmp;
|
| + if(tmp = fetch("description", childs)) feed.description = tmp;
|
| + if(tmp = fetch("lastBuildDate", childs)) feed.updated = new Date(tmp);
|
| + if(tmp = fetch("managingEditor", childs)) feed.author = tmp;
|
| +
|
| + feed.items = getElements("item", feedRoot.children).map(function(item){
|
| + var entry = {}, tmp;
|
| +
|
| + item = item.children;
|
| +
|
| + if(tmp = fetch("guid", item)) entry.id = tmp;
|
| + if(tmp = fetch("title", item)) entry.title = tmp;
|
| + if(tmp = fetch("link", item)) entry.link = tmp;
|
| + if(tmp = fetch("description", item)) entry.description = tmp;
|
| + if(tmp = fetch("pubDate", item)) entry.pubDate = new Date(tmp);
|
| + return entry;
|
| + });
|
| + }
|
| + }
|
| + this.dom = feed;
|
| + DomHandler.prototype._handleCallback.call(
|
| + this, feedRoot ? null : Error("couldn't find root of feed")
|
| + );
|
| +};
|
| +
|
| +module.exports = FeedHandler;
|
|
|