@zero65tech/format
Version:
Formatting Toolkit
220 lines (174 loc) • 6.33 kB
JavaScript
exports.number = (number, d = 0) => {
if(number === undefined || number === null)
return null;
number = Math.round(number * Math.pow(10, d));
let numberStr = Math.abs(number) + '';
let l = numberStr.length;
for( ; l < d + 1; l++)
numberStr = '0' + numberStr;
for(let idx of [7,5,3]) {
if(l-d > idx) {
numberStr = numberStr.substring(0,l-d-idx) + ',' + numberStr.substring(l-d-idx);
l++;
}
}
if(d)
numberStr = numberStr.substring(0,l-d) + '.' + numberStr.substring(l-d);
return (number < 0 ? '- ' : '') + numberStr;
};
exports.percentage = (number, d = 0) => {
let f = exports.number(number, d);
return f === null ? f : f + '%';
};
exports.currency = (amount, d = 0) => {
if(amount === undefined || amount === null)
return null;
let f = exports.number(Math.abs(amount), d);
return amount < 0 ? ('- ₹' + f) : ('₹' + f);
}
exports.json = (data, wrap = 0, ...nodes) => {
let multiLine = true;
if(typeof wrap == 'number') {
if(wrap > 0)
wrap--;
else
multiLine = false;
} else if(typeof wrap == 'function') {
multiLine = wrap(nodes);
}
if(!multiLine)
wrap = () => false;
if(typeof data != 'object') {
if(typeof data == 'number' && Number.isNaN(data))
return '"NaN"';
else
return JSON.stringify(data);
} else if(data instanceof Array) {
let strArr = [];
for(let [ idx, item ] of data.entries()) {
if(typeof item == 'object' && item !== null) {
strArr.push(exports.json(item, wrap, ...nodes, idx).replace(/\n/g, '\n '));
} else if(typeof item == 'number' && Number.isNaN(item)) {
strArr.push('"NaN');
} else {
strArr.push(JSON.stringify(item));
}
}
if(!strArr.length)
return '[ ]';
else if(!multiLine)
return '[ ' + strArr.join(', ') + ' ]';
else
return '[\n ' + strArr.join(',\n ') + '\n]';
} else {
let strArr = [];
for(let [ key, value ] of Object.entries(data)) {
if(typeof value == 'object' && value !== null)
strArr.push(`"${ key }": ${ exports.json(value, wrap, ...nodes, key).replace(/\n/g, '\n ') }`);
else if(typeof value == 'number' && Number.isNaN(value))
strArr.push(`"${ key }": "NaN"`);
else if(value !== undefined)
strArr.push(`"${ key }": ${ JSON.stringify(value) }`);
}
if(!strArr.length)
return '{ }';
else if(!multiLine)
return '{ ' + strArr.join(', ') + ' }';
else
return '{\n ' + strArr.join(',\n ') + '\n}';
}
}
exports.gradient = (amount, min = -100, max = 100, mid = 0, minColor = 'deep-orange', maxColor = 'light-green') => {
if(amount === undefined || amount === null || min == max)
return '';
if(amount < mid - (mid - min) / 10 * 9)
return 'bg-' + minColor + '-darken-4';
if(amount < mid - (mid - min) / 10 * 8)
return 'bg-' + minColor + '-darken-3';
if(amount < mid - (mid - min) / 10 * 7)
return 'bg-' + minColor + '-darken-2';
if(amount < mid - (mid - min) / 10 * 6)
return 'bg-' + minColor + '-darken-1';
if(amount < mid - (mid - min) / 10 * 5)
return 'bg-' + minColor;
if(amount < mid - (mid - min) / 10 * 4)
return 'bg-' + minColor + '-lighten-1';
if(amount < mid - (mid - min) / 10 * 3)
return 'bg-' + minColor + '-lighten-2';
if(amount < mid - (mid - min) / 10 * 2)
return 'bg-' + minColor + '-lighten-3';
if(amount < mid - (mid - min) / 10 * 1)
return 'bg-' + minColor + '-lighten-4';
if(amount <= mid - 0.00001)
return 'bg-' + minColor + '-lighten-5';
if(amount < mid + 0.00001)
return '';
if(amount <= mid + (max - mid) / 10 * 1)
return 'bg-' + maxColor + '-lighten-5';
if(amount <= mid + (max - mid) / 10 * 2)
return 'bg-' + maxColor + '-lighten-4';
if(amount <= mid + (max - mid) / 10 * 3)
return 'bg-' + maxColor + '-lighten-3';
if(amount <= mid + (max - mid) / 10 * 4)
return 'bg-' + maxColor + '-lighten-2';
if(amount <= mid + (max - mid) / 10 * 5)
return 'bg-' + maxColor + '-lighten-1';
if(amount <= mid + (max - mid) / 10 * 6)
return 'bg-' + maxColor;
if(amount <= mid + (max - mid) / 10 * 7)
return 'bg-' + maxColor + '-darken-1';
if(amount <= mid + (max - mid) / 10 * 8)
return 'bg-' + maxColor + '-darken-2';
if(amount <= mid + (max - mid) / 10 * 9)
return 'bg-' + maxColor + '-darken-3';
// if(amount <= max )
return 'bg-' + maxColor + '-darken-4';
}
exports.gradientLite = (amount, min = -100, max = 100, mid = 0, minColor = 'amber', maxColor = 'lime') => {
if(amount === undefined || amount === null || min == max)
return '';
if(amount < mid - (mid - min) / 6 * 5)
return 'bg-' + minColor;
if(amount < mid - (mid - min) / 6 * 4)
return 'bg-' + minColor + '-lighten-1';
if(amount < mid - (mid - min) / 6 * 3)
return 'bg-' + minColor + '-lighten-2';
if(amount < mid - (mid - min) / 6 * 2)
return 'bg-' + minColor + '-lighten-3';
if(amount < mid - (mid - min) / 6 * 1)
return 'bg-' + minColor + '-lighten-4';
if(amount <= mid - 0.00001)
return 'bg-' + minColor + '-lighten-5';
if(amount < mid + 0.00001)
return '';
if(amount <= mid + (max - mid) / 6 * 1)
return 'bg-' + maxColor + '-lighten-5';
if(amount <= mid + (max - mid) / 6 * 2)
return 'bg-' + maxColor + '-lighten-4';
if(amount <= mid + (max - mid) / 6 * 3)
return 'bg-' + maxColor + '-lighten-3';
if(amount <= mid + (max - mid) / 6 * 4)
return 'bg-' + maxColor + '-lighten-2';
if(amount <= mid + (max - mid) / 6 * 5)
return 'bg-' + maxColor + '-lighten-1';
// if(amount <= max )
return 'bg-' + maxColor;
}
exports.gradientSingle = (amount, min = 0, max = 100, color = 'yellow') => {
if(amount === undefined || amount === null || min == max)
return '';
if(amount < min)
return '';
if(amount < min + (max - min) / 6 * 1)
return 'bg-' + color + '-lighten-5';
if(amount < min + (max - min) / 6 * 2)
return 'bg-' + color + '-lighten-4';
if(amount < min + (max - min) / 6 * 3)
return 'bg-' + color + '-lighten-3';
if(amount < min + (max - min) / 6 * 4)
return 'bg-' + color + '-lighten-2';
if(amount < min + (max - min) / 6 * 5)
return 'bg-' + color + '-lighten-1';
// if(amount < max )
return 'bg-' + color;
}