]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | function isObject(value) {\r |
2 | return Object.prototype.toString.call(value) === '[object Object]';\r | |
3 | }\r | |
4 | \r | |
5 | function isNumber(value) {\r | |
6 | return typeof value === 'number' && isFinite(value);\r | |
7 | }\r | |
8 | \r | |
9 | function interpolate(string, object) {\r | |
10 | var pattern = /(#\{(.*?)\})/g;\r | |
11 | return string.replace(pattern, function () {\r | |
12 | var name = arguments[2];\r | |
13 | var value = object[name];\r | |
14 | if (isNumber(value)) {\r | |
15 | value = value.toString();\r | |
16 | } else if (isObject(value)) {\r | |
17 | try {\r | |
18 | value = JSON.stringify(value);\r | |
19 | } catch (e) {\r | |
20 | console.error("Stringifying object (likely a circular structure) failed.");\r | |
21 | }\r | |
22 | }\r | |
23 | return typeof value === 'string' ? value : '';\r | |
24 | });\r | |
25 | }\r | |
26 | \r | |
27 | var enumerables = ['valueOf', 'toLocaleString', 'toString', 'constructor'];\r | |
28 | \r | |
29 | function apply(object, config, defaults) {\r | |
30 | if (defaults) {\r | |
31 | apply(object, defaults);\r | |
32 | }\r | |
33 | \r | |
34 | if (object && config && typeof config === 'object') {\r | |
35 | var i, j, k;\r | |
36 | \r | |
37 | for (i in config) {\r | |
38 | object[i] = config[i];\r | |
39 | }\r | |
40 | \r | |
41 | if (enumerables) {\r | |
42 | for (j = enumerables.length; j--;) {\r | |
43 | k = enumerables[j];\r | |
44 | if (config.hasOwnProperty(k)) {\r | |
45 | object[k] = config[k];\r | |
46 | }\r | |
47 | }\r | |
48 | }\r | |
49 | }\r | |
50 | \r | |
51 | return object;\r | |
52 | }\r | |
53 | \r | |
54 | \r | |
55 | module.exports = {\r | |
56 | isObject: isObject,\r | |
57 | isNumber: isNumber,\r | |
58 | interpolate: interpolate,\r | |
59 | apply: apply\r | |
60 | }; |