From a58246859370c52b5209fe94a043bdcc7f8b7001 Mon Sep 17 00:00:00 2001 From: Christopher Lenz Date: Mon, 12 Jan 2009 21:06:35 +0000 Subject: Add syntax highlighting of JSON code in Futon. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@733897 13f79535-47bb-0310-9956-ffa450edef68 --- share/www/script/futon.format.js | 118 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 share/www/script/futon.format.js (limited to 'share/www/script/futon.format.js') diff --git a/share/www/script/futon.format.js b/share/www/script/futon.format.js new file mode 100644 index 00000000..b8870a94 --- /dev/null +++ b/share/www/script/futon.format.js @@ -0,0 +1,118 @@ +// 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, { + + // JSON pretty printing + formatJSON: function(val, options) { + options = options || {}; + if (options.indent === undefined) { + options.indent = 4; + } + options.indent = options.indent !== undefined ? options.indent : 4; + options.linesep = options.linesep !== undefined ? options.linesep : "\n"; + options.quoteKeys = options.quoteKeys !== undefined ? options.quoteKeys : true; + var itemsep = options.linesep.length ? "," + options.linesep : ", "; + + function escape(string) { + return string.replace(/&/g, "&") + .replace(//g, ">"); + } + + 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 = JSON.stringify(val); + if (options.html) { + retval = "" + escape(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("]"); + + } else { + buf.push("{"); + var index = 0; + for (var key in val) { + if (!val.hasOwnProperty(key)) continue; + 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 = "" + 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("}"); + } + + return buf.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); -- cgit v1.2.3