JSFiddle - React, Tailwind, and code Playground
by vjeux
JavaScript
var XSON = {
stringify: function (obj, replacer, space) {
if (replacer) {
throw new Exception('Replacer is not supported');
}
function rec(obj, level) {
function indent(str) {
if (space === undefined) {
return str;
}
return '\n' + Array(level + 1).join(space) + str;
}
if (typeof obj === 'string') {
if (obj.indexOf('<') !== -1) {
return indent('<s><![CDATA[' + obj.split(']]>').join(']]]]><![CDATA[>') + ']]></s>');
}
return indent('<s>' + obj + '</s>');
}
if (obj === null) {
return indent('<l/>');
}
if (typeof obj === 'boolean') {
if (obj) {
return indent('<t/>');
}
return indent('<f/>');
}
if (typeof obj === 'number') {
return indent('<n>' + obj + '</n>');
}
if ('slice' in obj) {
if (!obj.length) {
return indent('<a/>');
}
return indent('<a>') + obj.map(function (obj) {
return rec(obj, level + 1);
}).join('') + indent('</a>');
}
var elements = [];
for (var key in obj) {
var element = rec(obj[key], level + 1);
var pos = space.length * (level + 1) + 3;
elements.push(element.substr(0, pos) + ' k="' + key.replace(/"/g, '"') + '"' + element.substr(pos));
}
if (!elements.length) {
return indent('<o/>');
}
return indent('<o>') + elements.join('') + indent('</o>');
}
return rec(obj, 0).substr(1);
...