cloudcmd/modules/format-io/lib/format.js
2015-02-18 09:18:52 -05:00

163 lines
7.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(global) {
'use strict';
if (typeof module === 'object' && module.exports)
module.exports = new FormatProto();
else
global.Format = new FormatProto();
function FormatProto() {
this.addSlashToEnd = function(path) {
var length, isSlash;
if (path) {
length = path.length - 1;
isSlash = path[length] === '/';
if (!isSlash)
path += '/';
}
return path;
};
/** Функция получает короткие размеры
* конвертируя байт в килобайты, мегабойты,
* гигайбайты и терабайты
* @pSize - размер в байтах
*/
this.size = function(size) {
var isNumber = typeof size === 'number',
l1KB = 1024,
l1MB = l1KB * l1KB,
l1GB = l1MB * l1KB,
l1TB = l1GB * l1KB,
l1PB = l1TB * l1KB;
if (isNumber) {
if (size < l1KB) size = size + 'b';
else if (size < l1MB) size = (size / l1KB).toFixed(2) + 'kb';
else if (size < l1GB) size = (size / l1MB).toFixed(2) + 'mb';
else if (size < l1TB) size = (size / l1GB).toFixed(2) + 'gb';
else if (size < l1PB) size = (size / l1TB).toFixed(2) + 'tb';
else size = (size / l1PB).toFixed(2) + 'pb';
}
return size;
};
/**
* Функция переводит права из цыфрового вида в символьный
* @param perms - строка с правами доступа
* к файлу в 8-миричной системе
*/
this.permissions = {
symbolic: function(perms) {
var type, owner, group, all,
is = typeof perms !== undefined,
permsStr = '',
permissions = '';
/*
S_IRUSR 0000400 protection: readable by owner
S_IWUSR 0000200 writable by owner
S_IXUSR 0000100 executable by owner
S_IRGRP 0000040 readable by group
S_IWGRP 0000020 writable by group
S_IXGRP 0000010 executable by group
S_IROTH 0000004 readable by all
S_IWOTH 0000002 writable by all
S_IXOTH 0000001 executable by all
*/
if (is) {
permsStr = perms.toString();
/* тип файла */
type = permsStr.charAt(0);
switch (type - 0) {
case 1: /* обычный файл */
type = '-';
break;
case 2: /* байт-ориентированное (символьное) устройство*/
type = 'c';
break;
case 4: /* каталог */
type = 'd';
break;
default:
type = '-';
}
/* оставляем последние 3 символа*/
if (permsStr.length > 5)
permsStr = permsStr.substr(3);
else
permsStr = permsStr.substr(2);
/* Рекомендации гугла советуют вместо string[3]
* использовать string.charAt(3)
*/
/*
http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Standards_features#Standards_features
Always preferred over non-standards featuresFor
maximum portability and compatibility, always
prefer standards features over non-standards
features (e.g., string.charAt(3) over string[3]
and element access with DOM functions instead
of using an application-specific shorthand).
*/
/* Переводим в двоичную систему */
owner = (permsStr[0] - 0).toString(2),
group = (permsStr[1] - 0).toString(2),
all = (permsStr[2] - 0).toString(2),
/* переводим в символьную систему*/
permissions =
(owner[0] - 0 > 0 ? 'r' : '-') +
(owner[1] - 0 > 0 ? 'w' : '-') +
(owner[2] - 0 > 0 ? 'x' : '-') +
' ' +
(group[0] - 0 > 0 ? 'r' : '-') +
(group[1] - 0 > 0 ? 'w' : '-') +
(group[2] - 0 > 0 ? 'x' : '-') +
' ' +
(all[0] - 0 > 0 ? 'r' : '-') +
(all[1] - 0 > 0 ? 'w' : '-') +
(all[2] - 0 > 0 ? 'x' : '-');
}
return permissions;
},
/**
* Функция конвертирует права доступа к файлам из символьного вида
* в цыфровой
*/
numeric: function(perms) {
var owner, group, all,
length = perms && perms.length === 11;
if (length) {
owner = (perms[0] === 'r' ? 4 : 0) +
(perms[1] === 'w' ? 2 : 0) +
(perms[2] === 'x' ? 1 : 0),
group = (perms[4] === 'r' ? 4 : 0) +
(perms[5] === 'w' ? 2 : 0) +
(perms[6] === 'x' ? 1 : 0),
all = (perms[8] === 'r' ? 4 : 0) +
(perms[9] === 'w' ? 2 : 0) +
(perms[10] === 'x' ? 1 : 0);
/* добавляем 2 цифры до 5 */
perms = '00' + owner + group + all;
}
return perms;
}
};
}
})(this);