Tagged: javascript

0

soundcloud dl+

Нач­ну с того, что сам я не явля­юсь посто­ян­ным поль­зо­ва­те­лем soundcloud, но тут уви­дел пост дядь Миши с ссыл­кой на его userscript (soundcloud dl) и решил его “про­сто отрефакторить”…

По-нача­лу, я испра­вил регу­ляр­ные выра­же­ния. Сде­лал гене­ри­ва­ние ссыл­ки через jQuery (коли он там есть). Пере­ста­вил ссыл­ку в дру­гие место что­бы не раз­дви­гать кон­тент почем зря. Убрал ненуж­ный код и ушел гулять… ;) Но пар­синг все­го кон­тен­та стра­ни­цы через регу­ляр­ное выра­же­ние с целью полу­чить нуж­ные дан­ные и после­ду­ю­щий eval этих дан­ных не давал мне покоя. При­дя с ноч­ной про­гул­ки я решил, что будет луч­ше пере­пи­сать весь код с нуля.

В резуль­та­те полу­чил­ся вот такой userscript/код (soundcloud dl+)

P.S.: Скрипт добав­ля­ет ссыл­ку на ска­чи­ва­ние пре­вью вер­сии тре­ка. Скры­ва­ет “дурац­кие” комментарии.

0

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 {'<':'&lt;', '>':'&gt;', '&':'&amp;', '"':'&quot;'}[m] || m;
  })
}
 
function print_r(o, s) {
  if(o.constructor == Array || o.constructor == Object) {
    s += '<ul style="margin:0;padding-left:20px">';
    for(var i in o)if(o[i].constructor == Array || o[i].constructor == Object) {
      s += "<li>[" + i + "] => " + typeof o + "</li>";
      s = '<ul style="margin:0;padding-left:5px">' + print_r(o[i], s) + "</ul>";
    } else s += "<li>[" + i + "] => " + encode_entities(o[i]) + "</li>";
    s += "</ul>";
    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);

Демо

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

0

Таааккк, ты мне дашь или не дашь?

babies_copy_paste

Порою, воз­ни­ка­ет необ­хо­ди­мость ско­пи­ро­вать какой-то фраг­мент тек­ста со стра­ни­цы (выде­лив его мыш­кой и сде­лав  “копи­ро­вать” (CTRL+C) / “вста­вить” (CTRL+V)). Зада­ча согла­си­тесь три­ви­аль­ная, но неко­то­рые сай­ты (напри­мер, lyrics.com) исполь­зу­ют раз­лич­ные мето­ды защи­ты от копи­ро­ва­ния тек­ста. А что делать, если очень надо? С такой про­бле­мой сего­дня обра­ти­лась ко мне подруж­ка из Гер­ма­нии. Дей­стви­тель­но, кому понра­вит­ся, если ему не дают? )))

При­во­жу свой вари­ант реше­ния, JavaScript-код (bookmarklet):

javascript:(function(d){d.onselectstart=d.onmousedown=d.onmouseup=null})(document);

Как поль­зо­вать­ся:

  1. зай­ти на стра­ни­цу, где не копи­ру­ет­ся текст;
  2. оста­ва­ясь на стра­ни­це, уда­лить всё содер­жи­мое адрес­ной стро­ки, вста­вить в неё код (см. выше), и нажать кла­ви­шу Enter;
  3. оло­ло! теперь НЛО гор­дит­ся тобой, так то!

Разу­ме­ет­ся, дан­ный код не дела­ет ниче­го свер­хе­сте­ствен­но­го. Запус­кать его нуж­но каж­дый раз зано­во, на каж­дой стра­ни­це, с кото­рой необ­хо­ди­мо ско­пи­ро­вать текст. Хочу отме­тить, что дан­ное реше­ние не обхо­дит все суще­ству­ю­щие мето­ды защи­ты от копи­ро­ва­ния, но, если очень надо… ;)

Для тех, кто в тан­ке — код мож­но сде­лать заклад­кой (поме­стив в избран­ное, а еще луч­ше на лич­ную панель) и поль­зо­вать­ся при необходимости.