diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-03 15:35:00 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-03 15:35:00 +0200 |
commit | de98e0b232509d5f40c135d540a70e415272ff85 (patch) | |
tree | a79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/dom-converter/scripts/js/lib | |
parent | e0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff) |
node_modules
Diffstat (limited to 'node_modules/dom-converter/scripts/js/lib')
7 files changed, 398 insertions, 0 deletions
diff --git a/node_modules/dom-converter/scripts/js/lib/domConverter.js b/node_modules/dom-converter/scripts/js/lib/domConverter.js new file mode 100644 index 000000000..5e7f8d334 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/domConverter.js @@ -0,0 +1,33 @@ +// Generated by CoffeeScript 1.6.3 +var domToMarkup, object, objectToSaneObject, saneObjectToDom, self; + +objectToSaneObject = require('./objectToSaneObject'); + +saneObjectToDom = require('./saneObjectToDom'); + +domToMarkup = require('./domToMarkup'); + +object = require('utila').object; + +module.exports = self = { + objectToDom: function(o) { + o = self._object2SaneObject(o); + return saneObjectToDom.convert(o); + }, + object2markup: function(o) { + var dom; + dom = self.toDom(o); + return domToMarkup.convert(dom); + }, + domToMarkup: function(dom) { + return domToMarkup.convert(dom); + }, + _object2SaneObject: function(o) { + if (!Array.isArray(o)) { + if (!object.isBareObject(o)) { + throw Error("toDom() only accepts arrays and bare objects as input"); + } + } + return objectToSaneObject.sanitize(o); + } +}; diff --git a/node_modules/dom-converter/scripts/js/lib/domToMarkup.js b/node_modules/dom-converter/scripts/js/lib/domToMarkup.js new file mode 100644 index 000000000..38c1a97c6 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/domToMarkup.js @@ -0,0 +1,2 @@ +// Generated by CoffeeScript 1.6.3 + diff --git a/node_modules/dom-converter/scripts/js/lib/dummer.js b/node_modules/dom-converter/scripts/js/lib/dummer.js new file mode 100644 index 000000000..11fc31280 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/dummer.js @@ -0,0 +1,123 @@ +var dummer, object, sanitizer, + __hasProp = {}.hasOwnProperty; + +object = require('utila').object; + +sanitizer = require('./sanitizer'); + +module.exports = dummer = { + toDom: function(o) { + if (!Array.isArray(o)) { + if (!object.isBareObject(o)) { + throw Error("toDom() only accepts arrays and bare objects as input"); + } + } + o = sanitizer.sanitize(o); + return dummer._children(o); + }, + _children: function(a, parent) { + var children, node, prev, v, _i, _len; + if (parent == null) { + parent = null; + } + children = []; + prev = null; + for (_i = 0, _len = a.length; _i < _len; _i++) { + v = a[_i]; + if (typeof v === 'string') { + node = dummer._textNode(v); + } else { + node = dummer._objectToDom(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; + }, + _objectToDom: function(o) { + var attribs, children, i, k, key, name, node, v, val, _ref; + i = 0; + for (k in o) { + if (!__hasProp.call(o, k)) continue; + v = o[k]; + if (i > 0) { + throw Error("_objectToDom() only accepts an object with one key/value"); + } + key = k; + val = v; + i++; + } + node = {}; + if (typeof key !== 'string') { + throw Error("_objectToDom()'s key must be a string of tag name and classes"); + } + if (typeof val === 'string') { + children = [dummer._textNode(val)]; + } else if (Array.isArray(val)) { + children = dummer._children(val, node); + } else { + inspect(o); + throw Error("_objectToDom()'s key's value must only be a string or an array"); + } + node.type = 'tag'; + _ref = dummer._parseTag(key), name = _ref.name, attribs = _ref.attribs; + node.name = name; + node.attribs = attribs; + node.children = children; + return node; + }, + _textNode: 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(dummer._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(dummer._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(dummer._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; + } +}; diff --git a/node_modules/dom-converter/scripts/js/lib/objectToSaneObject.js b/node_modules/dom-converter/scripts/js/lib/objectToSaneObject.js new file mode 100644 index 000000000..fcfd90521 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/objectToSaneObject.js @@ -0,0 +1,63 @@ +// Generated by CoffeeScript 1.6.3 +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 ret, v, _i, _len; + 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 + "`"); + } + } +}; diff --git a/node_modules/dom-converter/scripts/js/lib/saneObjectToDom.js b/node_modules/dom-converter/scripts/js/lib/saneObjectToDom.js new file mode 100644 index 000000000..09bcb9a71 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/saneObjectToDom.js @@ -0,0 +1,114 @@ +// Generated by CoffeeScript 1.6.3 +var self, + __hasProp = {}.hasOwnProperty; + +module.exports = self = { + convert: function(obj) { + return self._arrayToChildren(obj); + }, + _arrayToChildren: function(a, parent) { + var children, node, prev, v, _i, _len; + if (parent == null) { + parent = null; + } + children = []; + prev = null; + for (_i = 0, _len = a.length; _i < _len; _i++) { + v = a[_i]; + 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, v, val, _ref; + 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; + } +}; diff --git a/node_modules/dom-converter/scripts/js/lib/saneObjectToMarkup.js b/node_modules/dom-converter/scripts/js/lib/saneObjectToMarkup.js new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/saneObjectToMarkup.js @@ -0,0 +1 @@ + diff --git a/node_modules/dom-converter/scripts/js/lib/sanitizer.js b/node_modules/dom-converter/scripts/js/lib/sanitizer.js new file mode 100644 index 000000000..726039563 --- /dev/null +++ b/node_modules/dom-converter/scripts/js/lib/sanitizer.js @@ -0,0 +1,62 @@ +var object, sanitizer, + __hasProp = {}.hasOwnProperty; + +object = require('utila').object; + +module.exports = sanitizer = { + sanitize: function(val) { + return sanitizer._sanitizeAsChildren(val); + }, + _sanitizeAsChildren: function(val) { + var _ref; + if (object.isBareObject(val)) { + return sanitizer._sanitizeObjectAsChildren(val); + } else if (Array.isArray(val)) { + return sanitizer._sanitizeArrayAsChildren(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); + } + }, + _sanitizeObjectAsChildren: function(o) { + var a, cur, key, val; + a = []; + for (key in o) { + if (!__hasProp.call(o, key)) continue; + val = o[key]; + cur = {}; + cur[key] = sanitizer.sanitize(val); + a.push(cur); + } + return a; + }, + _sanitizeArrayAsChildren: function(a) { + var ret, v, _i, _len; + ret = []; + for (_i = 0, _len = a.length; _i < _len; _i++) { + v = a[_i]; + ret.push(sanitizer._sanitizeAsNode(v)); + } + return ret; + }, + _sanitizeAsNode: 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] = sanitizer._sanitizeAsChildren(o[key]); + return obj; + } else { + throw Error("not a valid node: `" + o + "`"); + } + } +}; |