window.ls.filter .add('lowerCase', function ($value) { return $value.toLowerCase(); }) .add('date', function ($value, date) { return date.format('Y-m-d', $value); }) .add('date-time', function ($value, date) { return date.format('Y-m-d H:i', $value); }) .add('date-text', function ($value, date) { return date.format('d M Y', $value); }) .add('date-long', function ($value, date) { return date.format('l, j F, H:i', $value); }) .add('min2hum', function ($value) { if($value >= 60) { if($value % 60 === 0) { return Math.ceil($value / 60) + ' hours'; } else { return Math.ceil($value / 60) + ' hours and ' + ($value % 60) + ' minutes'; } } return $value + ' minutes'; }) .add('ms2hum', function ($value) { let temp = $value; const years = Math.floor( temp / 31536000 ), days = Math.floor( ( temp %= 31536000 ) / 86400 ), hours = Math.floor( ( temp %= 86400 ) / 3600 ), minutes = Math.floor( ( temp %= 3600 ) / 60 ), seconds = temp % 60; if ( days || hours || seconds || minutes ) { return ( years ? years + "y " : "" ) + ( days ? days + "d " : "" ) + ( hours ? hours + "h " : "" ) + ( minutes ? minutes + "m " : "" ) + Number.parseFloat( seconds ).toFixed(0) + "s"; } return "< 1s"; }) .add('nl2p', function ($value) { let result = "

" + $value + "

"; result = result.replace(/\r\n\r\n/g, "

").replace(/\n\n/g, "

"); result = result.replace(/\r\n/g, "
").replace(/\n/g, "
"); return result; }) .add('markdown', function ($value, markdown) { return markdown.render($value); }) .add('id2name', function ($value) { let members = container.get('members'); if(members === null) { return ''; } for (let y = 0; y < members.length; y++) { if(members[y]['$uid'] === $value) { $value = members[y].name; } } return $value; }) .add('id2role', function ($value) { if(APP_ENV.ROLES[$value]) { return APP_ENV.ROLES[$value]; } return ''; }) .add('humanFileSize', function (bytes) { if(!bytes) { return 0; } let thresh = 1000; if(Math.abs(bytes) < thresh) { return bytes + ' B'; } let units = ['kB','MB','GB','TB','PB','EB','ZB','YB']; let u = -1; do { bytes /= thresh; ++u; } while(Math.abs(bytes) >= thresh && u < units.length - 1); return bytes.toFixed(1) + '' + units[u] + ''; }) .add('statsTotal', function ($value) { if(!$value) { return 0; } $value = abbreviate($value, 1, false, false); return ($value === '0') ? 'N/A' : $value; }); function abbreviate(number, maxPlaces, forcePlaces, forceLetter) { number = Number(number); forceLetter = forceLetter || false; if(forceLetter !== false) { return annotate(number, maxPlaces, forcePlaces, forceLetter); } let abbr; if(number >= 1e12) { abbr = 'T'; } else if(number >= 1e9) { abbr = 'B'; } else if(number >= 1e6) { abbr = 'M'; } else if(number >= 1e3) { abbr = 'K'; } else { abbr = ''; } return annotate(number, maxPlaces, forcePlaces, abbr); } function annotate(number, maxPlaces, forcePlaces, abbr) { // set places to false to not round let rounded = 0; switch(abbr) { case 'T': rounded = number / 1e12; break; case 'B': rounded = number / 1e9; break; case 'M': rounded = number / 1e6; break; case 'K': rounded = number / 1e3; break; case '': rounded = number; break } if(maxPlaces !== false) { let test = new RegExp('\\.\\d{' + (maxPlaces + 1) + ',}$') if(test.test(('' + rounded))) { rounded = rounded.toFixed(maxPlaces) } } if(forcePlaces !== false) { rounded = Number(rounded).toFixed(forcePlaces) } return rounded + abbr }