Spaces:
Running
Running
// Generated by CoffeeScript 1.12.7 | |
var object, self, | |
hasProp = {}.hasOwnProperty; | |
object = require('utila').object; | |
module.exports = self = { | |
sanitize: function(val) { | |
return self._toChildren(val); | |
}, | |
_toChildren: function(val) { | |
var ref; | |
if (object.isBareObject(val)) { | |
return self._objectToChildren(val); | |
} else if (Array.isArray(val)) { | |
return self._arrayToChildren(val); | |
} else if (val === null || typeof val === 'undefined') { | |
return []; | |
} else if ((ref = typeof val) === 'string' || ref === 'number') { | |
return [String(val)]; | |
} else { | |
throw Error("not a valid child node: `" + val); | |
} | |
}, | |
_objectToChildren: function(o) { | |
var a, cur, key, val; | |
a = []; | |
for (key in o) { | |
if (!hasProp.call(o, key)) continue; | |
val = o[key]; | |
cur = {}; | |
cur[key] = self.sanitize(val); | |
a.push(cur); | |
} | |
return a; | |
}, | |
_arrayToChildren: function(a) { | |
var i, len, ret, v; | |
ret = []; | |
for (i = 0, len = a.length; i < len; i++) { | |
v = a[i]; | |
ret.push(self._toNode(v)); | |
} | |
return ret; | |
}, | |
_toNode: function(o) { | |
var key, keys, obj, ref; | |
if ((ref = typeof o) === 'string' || ref === 'number') { | |
return String(o); | |
} else if (object.isBareObject(o)) { | |
keys = Object.keys(o); | |
if (keys.length !== 1) { | |
throw Error("a node must only have one key as tag name"); | |
} | |
key = keys[0]; | |
obj = {}; | |
obj[key] = self._toChildren(o[key]); | |
return obj; | |
} else { | |
throw Error("not a valid node: `" + o + "`"); | |
} | |
} | |
}; | |