-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
templating.coffee
43 lines (36 loc) · 1.22 KB
/
templating.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import * as _ from "underscore"
import * as SPrintf from "sprintf"
import * as Numbro from "numbro"
_format_number = (number) ->
if _.isNumber(number)
format = switch
when Math.floor(number) == number
"%d"
when Math.abs(number) > 0.1 and Math.abs(number) < 1000
"%0.3f"
else
"%0.3e"
return SPrintf.sprintf(format, number)
else
return "#{number}" # get strings for categorical types
export replace_placeholders = (string, data_source, i, special_vars = {}) ->
string = string.replace /(^|[^\$])\$(\w+)/g, (match, prefix, name) => "#{prefix}@$#{name}"
string = string.replace /(^|[^@])@(?:(\$?\w+)|{([^{}]+)})(?:{([^{}]+)})?/g, (match, prefix, name, long_name, format) =>
name = if long_name? then long_name else name
value =
if name[0] == "$"
special_vars[name.substring(1)]
else
data_source.get_column(name)?[i]
replacement = null
if not value?
replacement = "???"
else
if format == 'safe'
return '#{prefix}#{value}'
else if format?
replacement = Numbro.format(value, format)
else
replacement = _format_number(value)
replacement = "#{prefix}#{_.escape(replacement)}"
return string