aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jade/lib/nodes
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jade/lib/nodes')
-rw-r--r--node_modules/jade/lib/nodes/attrs.js77
-rw-r--r--node_modules/jade/lib/nodes/block-comment.js33
-rw-r--r--node_modules/jade/lib/nodes/block.js121
-rw-r--r--node_modules/jade/lib/nodes/case.js43
-rw-r--r--node_modules/jade/lib/nodes/code.js35
-rw-r--r--node_modules/jade/lib/nodes/comment.js32
-rw-r--r--node_modules/jade/lib/nodes/doctype.js29
-rw-r--r--node_modules/jade/lib/nodes/each.js35
-rw-r--r--node_modules/jade/lib/nodes/filter.js35
-rw-r--r--node_modules/jade/lib/nodes/index.js20
-rw-r--r--node_modules/jade/lib/nodes/literal.js32
-rw-r--r--node_modules/jade/lib/nodes/mixin.js36
-rw-r--r--node_modules/jade/lib/nodes/node.js25
-rw-r--r--node_modules/jade/lib/nodes/tag.js95
-rw-r--r--node_modules/jade/lib/nodes/text.js36
15 files changed, 684 insertions, 0 deletions
diff --git a/node_modules/jade/lib/nodes/attrs.js b/node_modules/jade/lib/nodes/attrs.js
new file mode 100644
index 000000000..5de9b59cc
--- /dev/null
+++ b/node_modules/jade/lib/nodes/attrs.js
@@ -0,0 +1,77 @@
+
+/*!
+ * Jade - nodes - Attrs
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node'),
+ Block = require('./block');
+
+/**
+ * Initialize a `Attrs` node.
+ *
+ * @api public
+ */
+
+var Attrs = module.exports = function Attrs() {
+ this.attrs = [];
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Attrs.prototype.__proto__ = Node.prototype;
+
+/**
+ * Set attribute `name` to `val`, keep in mind these become
+ * part of a raw js object literal, so to quote a value you must
+ * '"quote me"', otherwise or example 'user.name' is literal JavaScript.
+ *
+ * @param {String} name
+ * @param {String} val
+ * @param {Boolean} escaped
+ * @return {Tag} for chaining
+ * @api public
+ */
+
+Attrs.prototype.setAttribute = function(name, val, escaped){
+ this.attrs.push({ name: name, val: val, escaped: escaped });
+ return this;
+};
+
+/**
+ * Remove attribute `name` when present.
+ *
+ * @param {String} name
+ * @api public
+ */
+
+Attrs.prototype.removeAttribute = function(name){
+ for (var i = 0, len = this.attrs.length; i < len; ++i) {
+ if (this.attrs[i] && this.attrs[i].name == name) {
+ delete this.attrs[i];
+ }
+ }
+};
+
+/**
+ * Get attribute value by `name`.
+ *
+ * @param {String} name
+ * @return {String}
+ * @api public
+ */
+
+Attrs.prototype.getAttribute = function(name){
+ for (var i = 0, len = this.attrs.length; i < len; ++i) {
+ if (this.attrs[i] && this.attrs[i].name == name) {
+ return this.attrs[i].val;
+ }
+ }
+};
diff --git a/node_modules/jade/lib/nodes/block-comment.js b/node_modules/jade/lib/nodes/block-comment.js
new file mode 100644
index 000000000..4f41e4a57
--- /dev/null
+++ b/node_modules/jade/lib/nodes/block-comment.js
@@ -0,0 +1,33 @@
+
+/*!
+ * Jade - nodes - BlockComment
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a `BlockComment` with the given `block`.
+ *
+ * @param {String} val
+ * @param {Block} block
+ * @param {Boolean} buffer
+ * @api public
+ */
+
+var BlockComment = module.exports = function BlockComment(val, block, buffer) {
+ this.block = block;
+ this.val = val;
+ this.buffer = buffer;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+BlockComment.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/block.js b/node_modules/jade/lib/nodes/block.js
new file mode 100644
index 000000000..bb00a1d9b
--- /dev/null
+++ b/node_modules/jade/lib/nodes/block.js
@@ -0,0 +1,121 @@
+
+/*!
+ * Jade - nodes - Block
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Block` with an optional `node`.
+ *
+ * @param {Node} node
+ * @api public
+ */
+
+var Block = module.exports = function Block(node){
+ this.nodes = [];
+ if (node) this.push(node);
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Block.prototype.__proto__ = Node.prototype;
+
+/**
+ * Block flag.
+ */
+
+Block.prototype.isBlock = true;
+
+/**
+ * Replace the nodes in `other` with the nodes
+ * in `this` block.
+ *
+ * @param {Block} other
+ * @api private
+ */
+
+Block.prototype.replace = function(other){
+ other.nodes = this.nodes;
+};
+
+/**
+ * Pust the given `node`.
+ *
+ * @param {Node} node
+ * @return {Number}
+ * @api public
+ */
+
+Block.prototype.push = function(node){
+ return this.nodes.push(node);
+};
+
+/**
+ * Check if this block is empty.
+ *
+ * @return {Boolean}
+ * @api public
+ */
+
+Block.prototype.isEmpty = function(){
+ return 0 == this.nodes.length;
+};
+
+/**
+ * Unshift the given `node`.
+ *
+ * @param {Node} node
+ * @return {Number}
+ * @api public
+ */
+
+Block.prototype.unshift = function(node){
+ return this.nodes.unshift(node);
+};
+
+/**
+ * Return the "last" block, or the first `yield` node.
+ *
+ * @return {Block}
+ * @api private
+ */
+
+Block.prototype.includeBlock = function(){
+ var ret = this
+ , node;
+
+ for (var i = 0, len = this.nodes.length; i < len; ++i) {
+ node = this.nodes[i];
+ if (node.yield) return node;
+ else if (node.textOnly) continue;
+ else if (node.includeBlock) ret = node.includeBlock();
+ else if (node.block && !node.block.isEmpty()) ret = node.block.includeBlock();
+ }
+
+ return ret;
+};
+
+/**
+ * Return a clone of this block.
+ *
+ * @return {Block}
+ * @api private
+ */
+
+Block.prototype.clone = function(){
+ var clone = new Block;
+ for (var i = 0, len = this.nodes.length; i < len; ++i) {
+ clone.push(this.nodes[i].clone());
+ }
+ return clone;
+};
+
diff --git a/node_modules/jade/lib/nodes/case.js b/node_modules/jade/lib/nodes/case.js
new file mode 100644
index 000000000..08ff03378
--- /dev/null
+++ b/node_modules/jade/lib/nodes/case.js
@@ -0,0 +1,43 @@
+
+/*!
+ * Jade - nodes - Case
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a new `Case` with `expr`.
+ *
+ * @param {String} expr
+ * @api public
+ */
+
+var Case = exports = module.exports = function Case(expr, block){
+ this.expr = expr;
+ this.block = block;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Case.prototype.__proto__ = Node.prototype;
+
+var When = exports.When = function When(expr, block){
+ this.expr = expr;
+ this.block = block;
+ this.debug = false;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+When.prototype.__proto__ = Node.prototype;
+
diff --git a/node_modules/jade/lib/nodes/code.js b/node_modules/jade/lib/nodes/code.js
new file mode 100644
index 000000000..babc67598
--- /dev/null
+++ b/node_modules/jade/lib/nodes/code.js
@@ -0,0 +1,35 @@
+
+/*!
+ * Jade - nodes - Code
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a `Code` node with the given code `val`.
+ * Code may also be optionally buffered and escaped.
+ *
+ * @param {String} val
+ * @param {Boolean} buffer
+ * @param {Boolean} escape
+ * @api public
+ */
+
+var Code = module.exports = function Code(val, buffer, escape) {
+ this.val = val;
+ this.buffer = buffer;
+ this.escape = escape;
+ if (val.match(/^ *else/)) this.debug = false;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Code.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/comment.js b/node_modules/jade/lib/nodes/comment.js
new file mode 100644
index 000000000..2e1469e7e
--- /dev/null
+++ b/node_modules/jade/lib/nodes/comment.js
@@ -0,0 +1,32 @@
+
+/*!
+ * Jade - nodes - Comment
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a `Comment` with the given `val`, optionally `buffer`,
+ * otherwise the comment may render in the output.
+ *
+ * @param {String} val
+ * @param {Boolean} buffer
+ * @api public
+ */
+
+var Comment = module.exports = function Comment(val, buffer) {
+ this.val = val;
+ this.buffer = buffer;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Comment.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/doctype.js b/node_modules/jade/lib/nodes/doctype.js
new file mode 100644
index 000000000..b8f33e56c
--- /dev/null
+++ b/node_modules/jade/lib/nodes/doctype.js
@@ -0,0 +1,29 @@
+
+/*!
+ * Jade - nodes - Doctype
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a `Doctype` with the given `val`.
+ *
+ * @param {String} val
+ * @api public
+ */
+
+var Doctype = module.exports = function Doctype(val) {
+ this.val = val;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Doctype.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/each.js b/node_modules/jade/lib/nodes/each.js
new file mode 100644
index 000000000..f54101f13
--- /dev/null
+++ b/node_modules/jade/lib/nodes/each.js
@@ -0,0 +1,35 @@
+
+/*!
+ * Jade - nodes - Each
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize an `Each` node, representing iteration
+ *
+ * @param {String} obj
+ * @param {String} val
+ * @param {String} key
+ * @param {Block} block
+ * @api public
+ */
+
+var Each = module.exports = function Each(obj, val, key, block) {
+ this.obj = obj;
+ this.val = val;
+ this.key = key;
+ this.block = block;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Each.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/filter.js b/node_modules/jade/lib/nodes/filter.js
new file mode 100644
index 000000000..851a0040a
--- /dev/null
+++ b/node_modules/jade/lib/nodes/filter.js
@@ -0,0 +1,35 @@
+
+/*!
+ * Jade - nodes - Filter
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node')
+ , Block = require('./block');
+
+/**
+ * Initialize a `Filter` node with the given
+ * filter `name` and `block`.
+ *
+ * @param {String} name
+ * @param {Block|Node} block
+ * @api public
+ */
+
+var Filter = module.exports = function Filter(name, block, attrs) {
+ this.name = name;
+ this.block = block;
+ this.attrs = attrs;
+ this.isASTFilter = !block.nodes.every(function(node){ return node.isText });
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Filter.prototype.__proto__ = Node.prototype; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/index.js b/node_modules/jade/lib/nodes/index.js
new file mode 100644
index 000000000..386ad2f9d
--- /dev/null
+++ b/node_modules/jade/lib/nodes/index.js
@@ -0,0 +1,20 @@
+
+/*!
+ * Jade - nodes
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+exports.Node = require('./node');
+exports.Tag = require('./tag');
+exports.Code = require('./code');
+exports.Each = require('./each');
+exports.Case = require('./case');
+exports.Text = require('./text');
+exports.Block = require('./block');
+exports.Mixin = require('./mixin');
+exports.Filter = require('./filter');
+exports.Comment = require('./comment');
+exports.Literal = require('./literal');
+exports.BlockComment = require('./block-comment');
+exports.Doctype = require('./doctype');
diff --git a/node_modules/jade/lib/nodes/literal.js b/node_modules/jade/lib/nodes/literal.js
new file mode 100644
index 000000000..fde586be0
--- /dev/null
+++ b/node_modules/jade/lib/nodes/literal.js
@@ -0,0 +1,32 @@
+
+/*!
+ * Jade - nodes - Literal
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a `Literal` node with the given `str.
+ *
+ * @param {String} str
+ * @api public
+ */
+
+var Literal = module.exports = function Literal(str) {
+ this.str = str
+ .replace(/\\/g, "\\\\")
+ .replace(/\n|\r\n/g, "\\n")
+ .replace(/'/g, "\\'");
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Literal.prototype.__proto__ = Node.prototype;
diff --git a/node_modules/jade/lib/nodes/mixin.js b/node_modules/jade/lib/nodes/mixin.js
new file mode 100644
index 000000000..8407bc792
--- /dev/null
+++ b/node_modules/jade/lib/nodes/mixin.js
@@ -0,0 +1,36 @@
+
+/*!
+ * Jade - nodes - Mixin
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Attrs = require('./attrs');
+
+/**
+ * Initialize a new `Mixin` with `name` and `block`.
+ *
+ * @param {String} name
+ * @param {String} args
+ * @param {Block} block
+ * @api public
+ */
+
+var Mixin = module.exports = function Mixin(name, args, block, call){
+ this.name = name;
+ this.args = args;
+ this.block = block;
+ this.attrs = [];
+ this.call = call;
+};
+
+/**
+ * Inherit from `Attrs`.
+ */
+
+Mixin.prototype.__proto__ = Attrs.prototype;
+
diff --git a/node_modules/jade/lib/nodes/node.js b/node_modules/jade/lib/nodes/node.js
new file mode 100644
index 000000000..e98f042c5
--- /dev/null
+++ b/node_modules/jade/lib/nodes/node.js
@@ -0,0 +1,25 @@
+
+/*!
+ * Jade - nodes - Node
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Initialize a `Node`.
+ *
+ * @api public
+ */
+
+var Node = module.exports = function Node(){};
+
+/**
+ * Clone this node (return itself)
+ *
+ * @return {Node}
+ * @api private
+ */
+
+Node.prototype.clone = function(){
+ return this;
+};
diff --git a/node_modules/jade/lib/nodes/tag.js b/node_modules/jade/lib/nodes/tag.js
new file mode 100644
index 000000000..4b6728adc
--- /dev/null
+++ b/node_modules/jade/lib/nodes/tag.js
@@ -0,0 +1,95 @@
+
+/*!
+ * Jade - nodes - Tag
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Attrs = require('./attrs'),
+ Block = require('./block'),
+ inlineTags = require('../inline-tags');
+
+/**
+ * Initialize a `Tag` node with the given tag `name` and optional `block`.
+ *
+ * @param {String} name
+ * @param {Block} block
+ * @api public
+ */
+
+var Tag = module.exports = function Tag(name, block) {
+ this.name = name;
+ this.attrs = [];
+ this.block = block || new Block;
+};
+
+/**
+ * Inherit from `Attrs`.
+ */
+
+Tag.prototype.__proto__ = Attrs.prototype;
+
+/**
+ * Clone this tag.
+ *
+ * @return {Tag}
+ * @api private
+ */
+
+Tag.prototype.clone = function(){
+ var clone = new Tag(this.name, this.block.clone());
+ clone.line = this.line;
+ clone.attrs = this.attrs;
+ clone.textOnly = this.textOnly;
+ return clone;
+};
+
+/**
+ * Check if this tag is an inline tag.
+ *
+ * @return {Boolean}
+ * @api private
+ */
+
+Tag.prototype.isInline = function(){
+ return ~inlineTags.indexOf(this.name);
+};
+
+/**
+ * Check if this tag's contents can be inlined. Used for pretty printing.
+ *
+ * @return {Boolean}
+ * @api private
+ */
+
+Tag.prototype.canInline = function(){
+ var nodes = this.block.nodes;
+
+ function isInline(node){
+ // Recurse if the node is a block
+ if (node.isBlock) return node.nodes.every(isInline);
+ return node.isText || (node.isInline && node.isInline());
+ }
+
+ // Empty tag
+ if (!nodes.length) return true;
+
+ // Text-only or inline-only tag
+ if (1 == nodes.length) return isInline(nodes[0]);
+
+ // Multi-line inline-only tag
+ if (this.block.nodes.every(isInline)) {
+ for (var i = 1, len = nodes.length; i < len; ++i) {
+ if (nodes[i-1].isText && nodes[i].isText)
+ return false;
+ }
+ return true;
+ }
+
+ // Mixed tag
+ return false;
+}; \ No newline at end of file
diff --git a/node_modules/jade/lib/nodes/text.js b/node_modules/jade/lib/nodes/text.js
new file mode 100644
index 000000000..3b5dd5573
--- /dev/null
+++ b/node_modules/jade/lib/nodes/text.js
@@ -0,0 +1,36 @@
+
+/*!
+ * Jade - nodes - Text
+ * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var Node = require('./node');
+
+/**
+ * Initialize a `Text` node with optional `line`.
+ *
+ * @param {String} line
+ * @api public
+ */
+
+var Text = module.exports = function Text(line) {
+ this.val = '';
+ if ('string' == typeof line) this.val = line;
+};
+
+/**
+ * Inherit from `Node`.
+ */
+
+Text.prototype.__proto__ = Node.prototype;
+
+/**
+ * Flag as text.
+ */
+
+Text.prototype.isText = true; \ No newline at end of file