/
util.coffee
43 lines (33 loc) · 961 Bytes
/
util.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
{ isArray } = Array
deep_merge = (objs...) ->
objs = objs[0] if isArray(objs[0])
res = {}
for obj in objs
for k, v of obj
if typeof(v) is 'object' and not isArray(v)
res[k] = deep_merge(res[k] or {}, v)
else
res[k] = v
res
indent = ({level, opts:{pretty}}) ->
return "" unless pretty
pretty = " " if pretty is on
output = ""
for i in [0...level]
output += pretty
return output
new_attrs = (attrs = {}) ->
strattrs = for k, v of attrs
if v?
v = "\"#{v}\"" unless typeof v is 'number'
"#{k}=#{v}"
else "#{k}"
strattrs.unshift '' if strattrs.length
strattrs.join ' '
safe = (text) ->
String(text)
.replace(/&(?!\w+;)/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
module.exports = { deep_merge, indent, new_attrs, safe }