1
0
Fork 0
mirror of synced 2024-06-03 11:24:48 +12:00
appwrite/public/scripts/filters.js
2019-05-09 11:23:22 +03:00

170 lines
4.6 KiB
JavaScript

let date = window.ls.container.get('date');
let timezone = window.ls.container.get('timezone');
let markdown = window.ls.container.get('markdown');
window.ls.filter
.add('lowerCase', function (value) {
return value.toLowerCase();
})
.add('date', function (value, options) {
return date.format('Y-m-d', value);
})
.add('date-time', function (value, options) {
return date.format('Y-m-d H:i', value);
})
.add('date-text', function (value, options) {
return date.format('d M Y', value);
})
.add('date-long', function (value, options) {
return date.format('l, j F, H:i', value);
})
.add('min2hum', function (value, options) {
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, options) {
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, options) {
let result = "<p>" + value + "</p>";
result = result.replace(/\r\n\r\n/g, "</p><p>").replace(/\n\n/g, "</p><p>");
result = result.replace(/\r\n/g, "<br />").replace(/\n/g, "<br />");
return result;
})
.add('markdown', function (value, options) {
return markdown.render(value);
})
.add('id2name', function (value, options) {
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, options) {
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) + '<span class="text-size-small unit">' + units[u] + '</span>';
})
.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
}