Показать сообщение отдельно
  #1 (permalink)  
Старый 19.04.2013, 15:55
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от qwerty-клавиатура
 
Регистрация: 12.04.2013
Сообщений: 132

Может кто какие замечания сделает или поможет дописать format
/**
 * © All rights reserved x9a.ru, 2013
 */
String.prototype.repeat = function(n) { 
    var out = ''; 
    
    while(0 < n--) { 
        out += this; 
    } 
    
    return out; 
};

String.prototype.pad = function(requiredLength, paddingStr, paddingType) { 
    paddingType = paddingType ? paddingType.toLowerCase() : '';
    paddingStr = paddingStr || ' ';
    var n = requiredLength - this.length; 
    
    if (n) {   
        paddingStr = paddingStr.repeat( Math.ceil(n / paddingStr.length) ).substr(0, n);
        
        if (paddingType == 'both') {
            n /= 2;
            return paddingStr.substr( 0, Math.ceil(n) ) + this + paddingStr.substr( 0, Math.floor(n) );
        }   
        
        if (paddingType == 'left') {
            return paddingStr + this;
        }
        
        return this + paddingStr;
    } 
    
    return this; 
};

// синтаксис аналогичен printf
// 'Привет, %s!'.format('мир') -> "Привет, мир!"
// '%.1s.%.1s. %s'.format('Иван', 'Иванович', 'Иванов') -> "И.И. Иванов"
String.prototype.format = function() {
    var i = 0, 
        args = arguments;
    
    return this.replace(/%(?:%|(?:(|[+-]+)(|0|'.+?)([1-9]\d*)?(?:\.([1-9]\d*))?)?(s|d|f))/g, function(match, sign, padding, width, precision, type) {
        if (match == '%%') { 
            return '%'; 
        }
        
        var val = args[i++];
        
        if (type == 'd') { 
            val = Math.round(val); 
        }
        else if (type == 'f') {
            val = val.toFixed(precision ? precision : 6);
        }
        
        if (/\+/.test(sign) && val > 0) {
            val = '+' + val;
        }
        
        if (type != 'f' && precision) {
            val = val.substr(0, precision);
        }
        
        if (width) {
            val = (val += '').pad(width, padding == '' ? ' ' : padding[0] == "'" ? padding.substr(1) : padding, /-/.test(sign) ? 'right' : 'left'); 
        }
        
        return val;
    });
};

// this.name = 'Вася';
// console.log( 'Привет, ${name}!'.template(this) );
// "Привет, Вася!"
String.prototype.template = function(context) {
    return this.replace(/\$\{(.*?)\}/g, function(match, name) {
        return context[name];
    });
};
 
Array.prototype.shuffle = function() {
    var i = 0, 
        j = this.length, 
        n, 
        swap;

    while (i < j) {
        n = Math.floor(Math.random() * j);
        swap = this[n];
        this[n] = this[i];
        this[i++] = swap;
    }
};

// [1, 2, 3, 4, 5].rand() -> 4
Array.prototype.rand = function() {
    return this[Math.floor(Math.random() * this.length)];
};

// ещё до хера кода
Ответить с цитированием