Discussion:
Issue 68 in json-template: HTML formatter doesn't work for numeric values
j***@public.gmane.org
2012-01-13 21:34:48 UTC
Permalink
Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 68 by bharbu...-***@public.gmane.org: HTML formatter doesn't work for
numeric values
http://code.google.com/p/json-template/issues/detail?id=68

What steps will reproduce the problem?
1. Put a JSON numeric value in the variables to use.
2. Use the {{{'html'}}} formatter.

What is the expected output? What do you see instead?

This will produce a {{{TypeError}}} exception, since it tries to call
{{{replace}}} on the value. Turning the number into a string would be more
meaningful.


What version of the product are you using? On what operating system?

The latest at this time:
http://code.google.com/p/json-template/source/browse/javascript/json-template.js?r=baeee0fc6efadd5b02d3b967ffccefb4e3e92219


Please provide any additional information below.

There is an example here: http://jsfiddle.net/vUhG5/

The following fails:

{{{
var testData = {
var_a: '10001',
var_b: 10002
};

var t = jsontemplate.fromString('var_a={var_a} and var_b={var_b}', {
default_formatter: 'html' });
var txt = t.expand(testData);
}}}

The error is within function {{{HtmlEscape}}}, at line 55: {{{var_b}}} is
not a string and doesn't have a {{{replace}}} method.

Doing {{{s.toString().replace(...)....}}} instead of {{{s.replace(...)}}}
should fix the problem.

The same issue applies to {{{HtmlTagEscape}}} just below, of course.
--
You received this message because you are subscribed to the Google Groups "JSON Template" group.
To post to this group, send email to json-template-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
To unsubscribe from this group, send email to json-template+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
For more options, visit this group at http://groups.google.com/group/json-template?hl=en.
j***@public.gmane.org
2012-01-13 22:04:02 UTC
Permalink
Comment #1 on issue 68 by andyc...-***@public.gmane.org: HTML formatter doesn't work
for numeric values
http://code.google.com/p/json-template/issues/detail?id=68

I think you should be able to use

{foo|str|html}

now. That will convert the number to a string and them to html.

There might be some behavior change warranted -- I did tweak this in the
Python version I think.

(Although, you don't need to ever escape numbers in HTML... so leaving it
out altogether works too)
--
You received this message because you are subscribed to the Google Groups "JSON Template" group.
To post to this group, send email to json-template-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
To unsubscribe from this group, send email to json-template+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
For more options, visit this group at http://groups.google.com/group/json-template?hl=en.
j***@public.gmane.org
2012-01-13 22:38:20 UTC
Permalink
Comment #2 on issue 68 by bharbu...-***@public.gmane.org: HTML formatter doesn't work
for numeric values
http://code.google.com/p/json-template/issues/detail?id=68

Thank you. This works indeed, but this is mainly a problem when relying on
the default_formatter. I may have missed something in the documentation,
but I haven't seen a "post_formatter", which would be applied to anything,
after any specific formatter.
Post by j***@public.gmane.org
Although, you don't need to ever escape numbers in HTML... so leaving it
out altogether works too
This works if I know in advance that it's going to be a number and not an
arbitrary string with some characters that need to be escaped.

I was considering using { default_formatter: 'html' } as a short-cut for
putting "|html" after each variable name.

If you don't know whether your data is { foo: 1 } or { foo: '<escape me>'
}, at the moment, it seems you have to put "|str|html" behind every
variable ("str|html" doesn't work as a default formatter).

In addition, I would also like the flexibility to change the
default_formatter (admittedly, more as a "post-processor" formatter, which
isn't what it's meant for) independently of the template itself, depending
on what the target output would be. Even if I knew that foo was a number in
advance, "foo|str" would replace the default formatter, not apply it before
passing it to the html formatter.

(Ultimately, I think this is a bug in the HTML formatters because they
expect a string as an input, which numbers are not, despite being valid
JSON tokens.)
--
You received this message because you are subscribed to the Google Groups "JSON Template" group.
To post to this group, send email to json-template-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
To unsubscribe from this group, send email to json-template+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/***@public.gmane.org
For more options, visit this group at http://groups.google.com/group/json-template?hl=en.
Loading...