Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Unified Diff: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/node_modules/domhandler/index.js

Issue 125733002: Add vulcanize to tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/node_modules/domhandler/index.js
diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/node_modules/domhandler/index.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/node_modules/domhandler/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cb976b35217799db0925c05b90971d4f16127ca
--- /dev/null
+++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/htmlparser2/node_modules/domhandler/index.js
@@ -0,0 +1,161 @@
+var ElementType = require("domelementtype");
+
+function DomHandler(callback, options, elementCB){
+ if(typeof callback === "object"){
+ elementCB = options;
+ options = callback;
+ callback = null;
+ } else if(typeof options === "function"){
+ elementCB = options;
+ options = defaultOpts;
+ }
+ this._callback = callback;
+ this._options = options || defaultOpts;
+ this._elementCB = elementCB;
+ this.dom = [];
+ this._done = false;
+ this._tagStack = [];
+}
+
+//default options
+var defaultOpts = {
+ ignoreWhitespace: false //Keep whitespace-only text nodes
+};
+
+//Resets the handler back to starting state
+DomHandler.prototype.onreset = function(){
+ DomHandler.call(this, this._callback, this._options, this._elementCB);
+};
+
+//Signals the handler that parsing is done
+DomHandler.prototype.onend = function(){
+ if(this._done) return;
+ this._done = true;
+ this._handleCallback(null);
+};
+
+DomHandler.prototype._handleCallback =
+DomHandler.prototype.onerror = function(error){
+ if(typeof this._callback === "function"){
+ this._callback(error, this.dom);
+ } else {
+ if(error) throw error;
+ }
+};
+
+DomHandler.prototype.onclosetag = function(name){
+ //if(this._tagStack.pop().name !== name) this._handleCallback(Error("Tagname didn't match!"));
+ var elem = this._tagStack.pop();
+ if(this._elementCB) this._elementCB(elem);
+};
+
+DomHandler.prototype._addDomElement = function(element){
+ var lastTag = this._tagStack[this._tagStack.length - 1];
+
+ if(lastTag){
+ lastTag.children.push(element);
+ } else { //There aren't parent elements
+ this.dom.push(element);
+ }
+};
+
+DomHandler.prototype.onopentag = function(name, attribs){
+ var lastTag = this._tagStack[this._tagStack.length - 1];
+
+ var element = {
+ type: name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag,
+ name: name,
+ attribs: attribs,
+ children: [],
+ prev: null,
+ next: null,
+ parent: lastTag || null
+ };
+
+ if(lastTag){
+ var idx = lastTag.children.length;
+ while(idx > 0){
+ if(ElementType.isTag(lastTag.children[--idx])){
+ element.prev = lastTag.children[idx];
+ lastTag.children[idx].next = element;
+ break;
+ }
+ }
+ lastTag.children.push(element);
+ } else {
+ this.dom.push(element);
+ }
+
+ this._tagStack.push(element);
+};
+
+DomHandler.prototype.ontext = function(data){
+ if(this._options.ignoreWhitespace && data.trim() === "") return;
+
+ if(this._tagStack.length){
+ var lastTag;
+
+ if(
+ (lastTag = this._tagStack[this._tagStack.length - 1]) &&
+ (lastTag = lastTag.children[lastTag.children.length - 1]) &&
+ lastTag.type === ElementType.Text
+ ){
+ lastTag.data += data;
+ return;
+ }
+ } else {
+ if(this.dom.length && this.dom[this.dom.length-1].type === ElementType.Text){
+ this.dom[this.dom.length-1].data += data;
+ return;
+ }
+ }
+
+ this._addDomElement({
+ data: data,
+ type: ElementType.Text
+ });
+};
+
+DomHandler.prototype.oncomment = function(data){
+ var lastTag = this._tagStack[this._tagStack.length - 1];
+
+ if(lastTag && lastTag.type === ElementType.Comment){
+ lastTag.data += data;
+ return;
+ }
+
+ var element = {
+ data: data,
+ type: ElementType.Comment
+ };
+
+ this._addDomElement(element);
+ this._tagStack.push(element);
+};
+
+DomHandler.prototype.oncdatastart = function(){
+ var element = {
+ children: [{
+ data: "",
+ type: ElementType.Text
+ }],
+ type: ElementType.CDATA
+ };
+
+ this._addDomElement(element);
+ this._tagStack.push(element);
+};
+
+DomHandler.prototype.oncommentend = DomHandler.prototype.oncdataend = function(){
+ this._tagStack.pop();
+};
+
+DomHandler.prototype.onprocessinginstruction = function(name, data){
+ this._addDomElement({
+ name: name,
+ data: data,
+ type: ElementType.Directive
+ });
+};
+
+module.exports = DomHandler;

Powered by Google App Engine
This is Rietveld 408576698