-
Notifications
You must be signed in to change notification settings - Fork 0
/
format.js
72 lines (56 loc) · 1.61 KB
/
format.js
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define([root], factory);
} else {
// Browser globals
root.format = factory(root);
}
}(this, function (window) {
var regexp = /\{([\w\:]+|)\}/g,
regexpObj = /\{([\w\:\.]+|)\}/g;
/**
* @param {*} value
* @return {Boolean}
*/
function isUndefined(value){
return typeof value === 'undefined';
}
/**
* @private
* Format the string given the string and the args as array
* @param {String} str
* @param {Array} args
* @return {String}
*/
function formatNormalArguments(str, args){
return str.replace(regexp, function(a,b){
return isUndefined(args[b])? a : args[b];
});
}
/**
* @private
* Format the given string using the object
* @param {String} str
* @param {Object} obj
* @return {String}
*/
function formatUsingObject(str, obj){
return str.replace(regexpObj, function(a,b){
b = b.split('.');
var value = obj[b.shift()];
while ( b.length ) {
if( isUndefined(value) ){
break;
}
value = value[b.shift()];
}
return isUndefined(value) ? a : value;
});
}
return function format(str, obj){
return obj && obj.constructor === Object ?
formatUsingObject(str, obj) :
formatNormalArguments(str, [].slice.call(arguments, 1));
};
}));