JSFiddle - React, Tailwind, and code Playground
by tujger
JavaScript
function sprintf() {
var a = this, b;
if(arguments[0].constructor === Array || arguments[0].constructor === Object) {
arguments = arguments[0];
}
var args = [];
for(var i = 0; i < arguments.length; i++) {
args.push(arguments[i]);
}
res = this.replace(/%[\d\.]*[sdf]/g, function(pattern){
var value = args.shift();
var tokens = pattern.match(/^%(0)?([\d\.]*)(.)$/);
console.log("T", tokens, value);
switch(tokens[3]) {
case "d":
if(tokens[1] == "0") {
var length = +tokens[2];
var string = value.toString();
value = "0".repeat(length - string.length) + string;
}
break;
case "f":
break;
case "s":
break;
default:
console.error("Unknown pattern: " + tokens[0]);
}
return value;
});
return res;
console.log("F", res);
for(b in args){
var value = args[b];
var replace = "";
if (value.constructor === String || value.constructor === Number) {
replace = value;
} else if(value.constructor === HTMLSpanElement) {
if(value.dataset.lang && lang.$origin[value.dataset.lang]) {
replace = lang[value.dataset.lang].outerText;
} else {
replace = value.outerText;
}
} else if (value.constructor === Array) {
replace = value;
} else if (value.constructor === Object) {
replace = value;
} else {
console.error("Replace failed.")
}
a = a.replace(/%[a-z]/,replace);
}
return a; // Make chainable
}
console.log(res)