Index: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/api/manipulation.js |
diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/api/manipulation.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/api/manipulation.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cc84a3af7384dfc143bb05f3931263c6e5bfbb5d |
--- /dev/null |
+++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/api/manipulation.js |
@@ -0,0 +1,212 @@ |
+var _ = require('underscore'), |
+ parse = require('../parse'), |
+ $ = require('../static'), |
+ updateDOM = parse.update, |
+ evaluate = parse.evaluate, |
+ encode = require('../utils').encode, |
+ slice = Array.prototype.slice; |
+ |
+// Create an array of nodes, recursing into arrays and parsing strings if |
+// necessary |
+var makeDomArray = function(elem) { |
+ if (elem == null) { |
+ return []; |
+ } else if (elem.cheerio) { |
+ return elem.toArray(); |
+ } else if (_.isArray(elem)) { |
+ return _.flatten(elem.map(makeDomArray)); |
+ } else if (_.isString(elem)) { |
+ return evaluate(elem); |
+ } else { |
+ return [elem]; |
+ } |
+}; |
+ |
+var _insert = function(concatenator) { |
+ return function() { |
+ var elems = slice.call(arguments), |
+ dom = makeDomArray(elems); |
+ |
+ return this.each(function(i, el) { |
+ if (_.isFunction(elems[0])) { |
+ dom = makeDomArray(elems[0].call(el, i, this.html())); |
+ } |
+ updateDOM(concatenator(dom, el.children || (el.children = [])), el); |
+ }); |
+ }; |
+}; |
+ |
+var append = exports.append = _insert(function(dom, children) { |
+ return children.concat(dom); |
+}); |
+ |
+var prepend = exports.prepend = _insert(function(dom, children) { |
+ return dom.concat(children); |
+}); |
+ |
+var after = exports.after = function() { |
+ var elems = slice.call(arguments), |
+ dom = makeDomArray(elems); |
+ |
+ this.each(function(i, el) { |
+ var siblings = el.parent.children, |
+ index = siblings.indexOf(el); |
+ |
+ // If not found, move on |
+ if (!~index) return; |
+ |
+ if (_.isFunction(elems[0])) { |
+ dom = makeDomArray(elems[0].call(el, i)); |
+ } |
+ |
+ // Add element after `this` element |
+ siblings.splice.apply(siblings, [++index, 0].concat(dom)); |
+ |
+ // Update next, prev, and parent pointers |
+ updateDOM(siblings, el.parent); |
+ el.parent.children = siblings; |
+ |
+ }); |
+ |
+ return this; |
+}; |
+ |
+var before = exports.before = function() { |
+ var elems = slice.call(arguments), |
+ dom = makeDomArray(elems); |
+ |
+ this.each(function(i, el) { |
+ var siblings = el.parent.children, |
+ index = siblings.indexOf(el); |
+ |
+ // If not found, move on |
+ if (!~index) return; |
+ |
+ if (_.isFunction(elems[0])) { |
+ dom = makeDomArray(elems[0].call(el, i)); |
+ } |
+ |
+ // Add element before `el` element |
+ siblings.splice.apply(siblings, [index, 0].concat(dom)); |
+ |
+ // Update next, prev, and parent pointers |
+ updateDOM(siblings, el.parent); |
+ el.parent.children = siblings; |
+ |
+ }); |
+ |
+ return this; |
+}; |
+ |
+/* |
+ remove([selector]) |
+*/ |
+var remove = exports.remove = function(selector) { |
+ var elems = this; |
+ |
+ // Filter if we have selector |
+ if (selector) |
+ elems = elems.filter(selector); |
+ |
+ elems.each(function(i, el) { |
+ var siblings = el.parent.children, |
+ index = siblings.indexOf(el); |
+ |
+ if (!~index) return; |
+ |
+ siblings.splice(index, 1); |
+ |
+ // Update next, prev, and parent pointers |
+ updateDOM(siblings, el.parent); |
+ el.parent.children = siblings; |
+ }); |
+ |
+ return this; |
+}; |
+ |
+var replaceWith = exports.replaceWith = function(content) { |
+ var dom = makeDomArray(content); |
+ |
+ this.each(function(i, el) { |
+ var siblings = el.parent.children, |
+ index = siblings.indexOf(el); |
+ |
+ if (!~index) return; |
+ |
+ if (_.isFunction(content)) { |
+ dom = makeDomArray(content.call(el, i)); |
+ } |
+ |
+ siblings.splice.apply(siblings, [index, 1].concat(dom)); |
+ |
+ updateDOM(siblings, el.parent); |
+ el.parent.children = siblings; |
+ }); |
+ |
+ return this; |
+}; |
+ |
+var empty = exports.empty = function() { |
+ this.each(function(i, el) { |
+ el.children = []; |
+ }); |
+ return this; |
+}; |
+ |
+/** |
+ * Set/Get the HTML |
+ */ |
+var html = exports.html = function(str) { |
+ if (str === undefined) { |
+ if (!this[0] || !this[0].children) return null; |
+ return $.html(this[0].children); |
+ } |
+ |
+ str = str.cheerio ? str.toArray() : evaluate(str); |
+ |
+ this.each(function(i, el) { |
+ el.children = str; |
+ updateDOM(el.children, el); |
+ }); |
+ |
+ return this; |
+}; |
+ |
+var toString = exports.toString = function() { |
+ return $.html(this); |
+}; |
+ |
+var text = exports.text = function(str) { |
+ // If `str` is undefined, act as a "getter" |
+ if (str === undefined) { |
+ return $.text(this); |
+ } else if (_.isFunction(str)) { |
+ // Function support |
+ return this.each(function(i, el) { |
+ return this.text(str.call(el, i, this.text())); |
+ }); |
+ } |
+ |
+ var elem = { |
+ data: encode(str), |
+ type: 'text', |
+ parent: null, |
+ prev: null, |
+ next: null, |
+ children: [] |
+ }; |
+ |
+ // Append text node to each selected elements |
+ this.each(function(i, el) { |
+ el.children = elem; |
+ updateDOM(el.children, el); |
+ }); |
+ |
+ return this; |
+}; |
+ |
+var clone = exports.clone = function() { |
+ // Turn it into HTML, then recreate it, |
+ // Seems to be the easiest way to reconnect everything correctly |
+ return this.constructor($.html(this)); |
+}; |