1
0
mirror of https://github.com/ascribe/onion.git synced 2024-09-28 03:58:55 +02:00
onion/js/utils/general_utils.js

104 lines
2.6 KiB
JavaScript
Raw Normal View History

'use strict';
2015-06-08 11:19:18 +02:00
/**
2015-06-08 11:50:40 +02:00
* Takes an object and deletes all keys that are
2015-06-08 11:19:18 +02:00
*
* - empty strings; or
* - null; or
* - undefined
2015-06-08 11:50:40 +02:00
*
*
2015-06-08 11:19:18 +02:00
* @param {object} obj regular javascript object
* @return {object} regular javascript object without null values or empty strings
*/
2015-06-02 13:42:17 +02:00
export function sanitize(obj) {
Object
.keys(obj)
.map((key) => {
// By matching null with a double equal, we can match undefined and null
// http://stackoverflow.com/a/15992131
if(obj[key] == null || obj[key] === '') {
delete obj[key];
}
});
2015-05-20 14:48:57 +02:00
2015-06-02 13:42:17 +02:00
return obj;
}
2015-06-02 13:42:17 +02:00
/**
* Sums up a list of numbers. Like a Epsilon-math-kinda-sum...
*/
export function sumNumList(l) {
let sum = 0;
l.forEach((num) => sum += parseFloat(num) || 0);
return sum;
}
2015-05-26 13:33:35 +02:00
2015-06-02 13:42:17 +02:00
/*
Taken from http://stackoverflow.com/a/4795914/1263876
Behaves like C's format string function
*/
export function formatText() {
2015-06-08 11:19:18 +02:00
let args = arguments,
2015-06-02 13:42:17 +02:00
string = args[0],
i = 1;
2015-06-08 11:19:18 +02:00
return string.replace(/%((%)|s|d)/g, (m) => {
2015-06-02 13:42:17 +02:00
// m is the matched format, e.g. %s, %d
2015-06-08 11:19:18 +02:00
let val = null;
2015-06-02 13:42:17 +02:00
if (m[2]) {
val = m[2];
} else {
val = args[i];
// A switch statement so that the formatter can be extended. Default is %s
switch (m) {
case '%d':
val = parseFloat(val);
if (isNaN(val)) {
val = 0;
}
break;
}
2015-06-02 13:42:17 +02:00
i++;
}
return val;
});
}
/**
* Takes a list of object and merges their keys to one object.
* Uses mergeOptions for two objects.
* @param {[type]} l [description]
* @return {[type]} [description]
*/
2015-06-04 15:38:15 +02:00
export function mergeOptions(...l) {
let newObj = {};
for(let i = 1; i < l.length; i++) {
newObj = _mergeOptions(newObj, _mergeOptions(l[i - 1], l[i]));
}
return newObj;
}
/**
* Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1
* @param obj1
* @param obj2
* @returns obj3 a new object based on obj1 and obj2
* Taken from: http://stackoverflow.com/a/171256/1263876
*/
function _mergeOptions(obj1, obj2){
let obj3 = {};
2015-06-08 11:19:18 +02:00
for (let attrname in obj1) {
obj3[attrname] = obj1[attrname];
}
for (let attrname in obj2) {
if(attrname in obj3) {
throw Error('Overwrite Conflict: You\'re merging two objects with the same keys: ' + attrname);
} else {
obj3[attrname] = obj2[attrname];
}
}
return obj3;
}