+++ /dev/null
-/*globals define*/
-(function (root, factory) {
- "use strict";
- if (typeof define === 'function' && define.amd) {
- define(['crel'], factory);
- } else if (typeof module !== 'undefined' && module.exports) {
- module.exports = factory(require('../lib/crel'));
- } else {
- root.JsonHuman = factory(root.crel);
- }
-}(this, function (crel) {
- "use strict";
- var toString = Object.prototype.toString,
- ARRAY = 1,
- BOOL = 2,
- INT = 3,
- FLOAT = 4,
- STRING = 5,
- OBJECT = 6,
- FUNCTION = 7,
- UNK = 99;
-
- function makePrefixer(prefix) {
- return function (name) {
- return prefix + "-" + name;
- };
- }
-
- function getType(obj) {
- var type = typeof obj;
-
- if (type === "boolean") {
- return BOOL;
- } else if (type === "string") {
- return STRING;
- } else if (type === "number") {
- return (obj % 1 === 0) ? INT : FLOAT;
- } else if (type === "function") {
- return FUNCTION;
- } else if (toString.call(obj) === '[object Array]') {
- return ARRAY;
- } else if (obj === Object(obj)) {
- return OBJECT;
- } else {
- return UNK;
- }
- }
-
- function _format(data, prefixer) {
- var result, container, key, keyNode, valNode,
- isEmpty = true,
- p = prefixer,
- accum = [],
- type = getType(data);
-
- switch (type) {
- case BOOL:
- result = crel("span", {"class": p("type-bool")}, "" + data);
- break;
- case STRING:
- if (data !== "") {
- result = crel("span", {"class": p("type-string")}, "");
- result.innerHTML = data
- .replace(/&/g, '&')
- .replace(/ /g, " ")
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/[\r\n]/g, '<br/>')
- .replace(/"/g, '"'); // ")
- } else {
- result = crel("span",
- {"class": p("type-string") + " " + p("empty")},
- "(Empty Text)");
- }
- break;
- case INT:
- result = crel("span",
- {"class": p("type-int") + " " + p("type-number")},
- "" + data);
- break;
- case FLOAT:
- result = crel("span",
- {"class": p("type-float") + " " + p("type-number")},
- "" + data);
- break;
- case OBJECT:
- result = crel("table", {"class": p("type-object")});
- for (key in data) {
- isEmpty = false;
- keyNode = crel("th",
- {"class": p("key") + " " + p("object-key")},
- "" + key);
- valNode = crel("td",
- {"class": p("value") + " " + p("object-value")},
- _format(data[key], p));
- result.appendChild(crel("tr", keyNode, valNode));
- }
-
- if (isEmpty) {
- result = crel("span",
- {"class": p("type-object") + " " + p("empty")},
- "(Empty Object)");
- }
- break;
- case FUNCTION:
- result = crel("span", {"class": p("type-function")}, "" + data);
- break;
- case ARRAY:
- if (data.length > 0) {
- result = crel("table", {"class": p("type-array")});
- for (key = 0; key < data.length; key += 1) {
- keyNode = crel("th",
- {"class": p("key") + " " + p("array-key")},
- "" + key);
- valNode = crel("td",
- {"class": p("value") + " " + p("array-value")},
- _format(data[key], p));
- result.appendChild(crel("tr", keyNode, valNode));
- }
- } else {
- result = crel("span",
- {"class": p("type-array") + " " + p("empty")},
- "(Empty List)");
- }
- break;
- default:
- result = crel("span", {"class": p("type-unk")},
- "" + data);
- break;
- }
-
- return result;
- }
-
- function format(data, options) {
- options = options || {};
- var result,
- prefixer = makePrefixer(options.prefix || "jh");
-
- result = _format(data, prefixer);
- result.className = result.className + " " + prefixer("root");
-
- return result;
- }
-
- return {
- format: format
- };
-}));