Spaces:
Runtime error
Runtime error
| // Generated by CoffeeScript 1.12.7 | |
| var self, | |
| hasProp = {}.hasOwnProperty; | |
| module.exports = self = { | |
| convert: function(obj) { | |
| return self._arrayToChildren(obj); | |
| }, | |
| _arrayToChildren: function(a, parent) { | |
| var children, j, len, node, prev, v; | |
| if (parent == null) { | |
| parent = null; | |
| } | |
| children = []; | |
| prev = null; | |
| for (j = 0, len = a.length; j < len; j++) { | |
| v = a[j]; | |
| if (typeof v === 'string') { | |
| node = self._getTextNodeFor(v); | |
| } else { | |
| node = self._objectToNode(v, parent); | |
| node.prev = null; | |
| node.next = null; | |
| node.parent = parent; | |
| if (prev != null) { | |
| node.prev = prev; | |
| prev.next = node; | |
| } | |
| prev = node; | |
| } | |
| children.push(node); | |
| } | |
| return children; | |
| }, | |
| _objectToNode: function(o) { | |
| var attribs, children, i, k, key, name, node, ref, v, val; | |
| i = 0; | |
| for (k in o) { | |
| if (!hasProp.call(o, k)) continue; | |
| v = o[k]; | |
| if (i > 0) { | |
| throw Error("_objectToNode() only accepts an object with one key/value"); | |
| } | |
| key = k; | |
| val = v; | |
| i++; | |
| } | |
| node = {}; | |
| if (typeof key !== 'string') { | |
| throw Error("_objectToNode()'s key must be a string of tag name and classes"); | |
| } | |
| if (typeof val === 'string') { | |
| children = [self._getTextNodeFor(val)]; | |
| } else if (Array.isArray(val)) { | |
| children = self._arrayToChildren(val, node); | |
| } else { | |
| inspect(o); | |
| throw Error("_objectToNode()'s key's value must only be a string or an array"); | |
| } | |
| node.type = 'tag'; | |
| ref = self._parseTag(key), name = ref.name, attribs = ref.attribs; | |
| node.name = name; | |
| node.attribs = attribs; | |
| node.children = children; | |
| return node; | |
| }, | |
| _getTextNodeFor: function(s) { | |
| return { | |
| type: 'text', | |
| data: s | |
| }; | |
| }, | |
| _nameRx: /^[a-zA-Z\-\_]{1}[a-zA-Z0-9\-\_]*$/, | |
| _parseTag: function(k) { | |
| var attribs, classes, cls, id, m, name, parts; | |
| if (!k.match(/^[a-zA-Z0-9\#\-\_\.\[\]\"\'\=\,\s]+$/) || k.match(/^[0-9]+/)) { | |
| throw Error("cannot parse tag `" + k + "`"); | |
| } | |
| attribs = {}; | |
| parts = { | |
| name: '', | |
| attribs: attribs | |
| }; | |
| if (m = k.match(/^([^\.#]+)/)) { | |
| name = m[1]; | |
| if (!name.match(self._nameRx)) { | |
| throw Error("tag name `" + name + "` is not valid"); | |
| } | |
| parts.name = name; | |
| k = k.substr(name.length, k.length); | |
| } | |
| if (m = k.match(/^#([a-zA-Z0-9\-]+)/)) { | |
| id = m[1]; | |
| if (!id.match(self._nameRx)) { | |
| throw Error("tag id `" + id + "` is not valid"); | |
| } | |
| attribs.id = id; | |
| k = k.substr(id.length + 1, k.length); | |
| } | |
| classes = []; | |
| while (m = k.match(/\.([a-zA-Z0-9\-\_]+)/)) { | |
| cls = m[1]; | |
| if (!cls.match(self._nameRx)) { | |
| throw Error("tag class `" + cls + "` is not valid"); | |
| } | |
| classes.push(cls); | |
| k = k.replace('.' + cls, ''); | |
| } | |
| if (classes.length) { | |
| attribs["class"] = classes.join(" "); | |
| } | |
| return parts; | |
| } | |
| }; | |