Walk Alone

console.log || alert

Рабо­тая над про­то­ти­па­ми JavaScript-ядра для веб-при­ло­же­ния с рабо­чим назва­ни­ем «Scratch», пере­о­ди­че­ски при­хо­дит­ся исполь­зо­вать функ­цию console.log() (FireFox-пла­ги­на FireBug) для отлад­ки JS-сце­на­ри­ев. Каза­лось бы всё хоро­шо, но моим люби­мым бра­у­зе­ром уже мно­го лет явля­ет­ся Opera, а пол­но­цен­но­го пла­ги­на FireBug для него, как вы зна­е­те, нет. При этом, исполь­зо­вать аль­тер­на­тив­ные реше­ния типа FireBug-lite и Dragonfly до сей день боль­шо­го жела­ния не воз­ни­ка­ет… А вот жела­ние выво­дить на экран отла­доч­ную инфор­ма­цию, да так, что­бы про­ис­хо­ди­ло это неза­ви­си­мо от того, в каком бра­у­зе­ре запу­ще­но при­ло­же­ние и уста­нов­лен ли пла­гин FireBug – всё же воз­ник­ло, для чего была очень спеш­но напи­са­на сле­ду­ю­щая функция:

(function() {
    var wa = window.alert;
    window.alert = function() {
        if(window.console)console.log(arguments);
        else return wa.apply(this, arguments)
    }
})();

Вер­сия для рабо­ты в связ­ке с HabraAlert:

(function() { 
    var wa = window.alert;
    window.alert = function() { 
        window.console && console.log(arguments);
        if("function" === typeof initHA) {
            var a = Object.apply(this, arguments); 
            a.constructor == Array || a.constructor == Object ? message(print_r(a, "")) : encode_entities(message(a))
        } else return wa.apply(this, arguments) 
    };
    /* optional */
    if("undefined" === typeof initHA) { 
        window.warning = function() {};
        window.error = function() {} 
    }
    /* optional */
})();

function encode_entities(s){
  return s.replace(/[>&"]/g, function(m){
    return {'':'<', '>':'>', '&':'&', '"':'"'}[m] || m;
  })
}

function print_r(o, s) {
  if(o.constructor == Array || o.constructor == Object) {
    s += '
"; return s } } // usage: var w = ['hello', 'world!']; var a = [';)']; alert(w, a); warning('my warning'); error('my error'); // or: message('something went wrong', "warning"); message('shit happens', "error", 7500);

Демо

Подо­зре­ваю в буду­щем будет рефак­то­ринг и рас­ши­ре­ние функционала… ;)

Exit mobile version