// Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. (function($) { $.futon = $.futon || {}; $.extend($.futon, { escape: function(string) { return string.replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'") ; }, // JSON pretty printing formatJSON: function(val, options) { options = $.extend({ escapeStrings: true, indent: 4, linesep: "\n", quoteKeys: true }, options || {}); var itemsep = options.linesep.length ? "," + options.linesep : ", "; function format(val, depth) { var tab = []; for (var i = 0; i < options.indent * depth; i++) tab.push(""); tab = tab.join(" "); var type = typeof val; switch (type) { case "boolean": case "number": case "string": var retval = val; if (type == "string" && !options.escapeStrings) { retval = indentLines(retval.replace(/\r\n/g, "\n"), tab.substr(options.indent)); } else { if (options.html) { retval = $.futon.escape(JSON.stringify(val)); } else { retval = JSON.stringify(val); } } if (options.html) { retval = "" + retval + ""; } return retval; case "object": { if (val === null) { if (options.html) { return "null"; } return "null"; } if (val.constructor == Date) { return JSON.stringify(val); } var buf = []; if (val.constructor == Array) { buf.push("["); for (var index = 0; index < val.length; index++) { buf.push(index > 0 ? itemsep : options.linesep); buf.push(tab, format(val[index], depth + 1)); } if (index >= 0) { buf.push(options.linesep, tab.substr(options.indent)); } buf.push("]"); if (options.html) { return "" + buf.join("") + ""; } } else { buf.push("{"); var index = 0; for (var key in val) { buf.push(index > 0 ? itemsep : options.linesep); var keyDisplay = options.quoteKeys ? JSON.stringify(key) : key; if (options.html) { if (options.quoteKeys) { keyDisplay = keyDisplay.substr(1, keyDisplay.length - 2); } keyDisplay = "" + $.futon.escape(keyDisplay) + ""; if (options.quoteKeys) { keyDisplay = '"' + keyDisplay + '"'; } } buf.push(tab, keyDisplay, ": ", format(val[key], depth + 1)); index++; } if (index >= 0) { buf.push(options.linesep, tab.substr(options.indent)); } buf.push("}"); if (options.html) { return "" + buf.join("") + ""; } } return buf.join(""); } } } function indentLines(text, tab) { var lines = text.split("\n"); for (var i in lines) { lines[i] = (i > 0 ? tab : "") + $.futon.escape(lines[i]); } return lines.join("
"); } return format(val, 1); }, // File size pretty printing formatSize: function(size) { var jump = 512; if (size < jump) return size + " bytes"; var units = ["KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; var i = 0; while (size >= jump && i < units.length) { i += 1; size /= 1024 } return size.toFixed(1) + ' ' + units[i - 1]; } }); })(jQuery);