From 4e47ead54edccc56e241b921f6ac4f112786c65d Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Sun, 11 May 2008 01:33:49 -0700 Subject: [PATCH] jQuery.print: keep track of seen objects to prevent infinite recursion; truncate strings inside objcts --- lib/jquery.print.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/jquery.print.js b/lib/jquery.print.js index 83bc8fd..45ca6ff 100644 --- a/lib/jquery.print.js +++ b/lib/jquery.print.js @@ -3,8 +3,8 @@ // helper functions function print_array(obj, opts){ - var max = obj.length > opts.maxArray ? opts.maxArray : obj.length opts.maxString = 25 + var max = obj.length > opts.maxArray ? opts.maxArray : obj.length var result = []; for (var i = 0; i < max; i++) { @@ -25,10 +25,16 @@ ">" } - function print_object(obj){ + function print_object(obj, opts){ + opts.maxString = 25 + if (!opts.seen) opts.seen = [] + var result = [] for (var k in obj) { - result.push(k + ": " + $.print(obj[k])) + if (opts.seen.indexOf(obj[k]) == -1) { + opts.seen.push(obj[k]) + result.push(k + ": " + $.print(obj[k], opts)) + } } if (result.length == 0) return "{}" @@ -107,7 +113,7 @@ return print_jquery(obj) else if (obj instanceof Object) - return print_object(obj) + return print_object(obj, opts) else return obj.toString().replace(/\n\s*/g, '')