MozillaPL.org - polskie centrum Mozilli

Główne menu:

[GM] Podgląd+ tytuły linków + Ukrycie Strefy pomocy @MPO

Projektowanie aplikacji i rozszerzeń opartych na technologiach Mozilla Foundation: XUL, JavaScript, XPCOM, XBL i innych

Moderator: Pomocy?!

[GM] Podgląd+ tytuły linków + Ukrycie Strefy pomocy @MPO

Postautor: Mirek » 30 czerwca 2010, 12:59

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.10) Gecko/20100504 Firefox/3.5.10

Właściwie to nic specjalnego, ale może ktoś z pomagających na forum będzie chciał skorzystać. Wczoraj zrobiłem sobie mały skrypt (dla Greasemonkey), który dodaje przycisk Podgląd do Szybkiej odpowiedzi (żeby nie było trzeba najpierw otwierać Pełnego edytora, a dopiero potem Podglądu posta) oraz dodaje mały przycisk w prawym dolnym rogu ekranu, po którego kliknięciu do linków (wewnątrz postów) dodany zostaje atrybut "title" z tytułem docelowej strony (widoczny w postaci "dymka" po najechaniu kursorem myszy). Działa dla linków prowadzących do:
* strony jakiegoś rozszerzenia na AMO (ponieważ często się zastanawiałem, co za rozszerzenie kryje się pod podanym przez kogoś linkiem lub czy autor posta poleca np. to samo, o czym i ja pomyślałem)
* zgłoszenia na Bugzilli (raczej rzadko się pojawiają, ale że na Bugzilli też w tytule strony jest podany tytuł zgłoszenia, to sobie dodałem)
* innego tematu lub postu na tym forum (uzasadnienie podobne jak przy rozszerzeniach)

Żeby zmniejszyć liczbę przesyłanych danych ustawiłem w żądaniu pobieranie tylko 200 (no dokładnie 201) pierwszych znaków, w których zazwyczaj powinien się zmieścić znacznik <title>....</title>, ale niestety tylko strona AMO odsyła żądany kawałek - reszta przesyła w odpowiedzi całą stronę - i głównie z tego powodu ta część skryptu wykonuje się na żądanie, dopiero po kliknięciu odpowiedniego przycisku, a nie - jak to pierwotnie było - automatycznie po załadowaniu strony. Jeszcze myślałem o wersji pobierającej tytuł po najechaniu kursorem - ale że pobieranie czasem trwa dłuższą chwilę, a potem i tak trzeba zjechać z linka i najechać na niego ponownie, żeby odczytać, to zrezygnowałem z tego rozwiązania.
Tak czy siak - ta wersja powinna zminimalizować transfer generowany przynajmniej przeze mnie i ciut zaoszczędzić czasu - bo z Podglądu wiadomości korzystam dość często - więc odchodzi wygenerowanie/załadowanie jednej strony oraz w wielu przypadkach odejdzie ładowanie całych stron.

A skrypt wygląda tak:
Kod: Zaznacz cały
// ==UserScript==
// @name           Preview button & postlink titles
// @include        http://mozillapl.org/forum/viewtopic.php?f=*&t=*
// @include        http://mozillapl.org/forum/viewtopic.php?f=*&p=*
// @include        http://mozillapl.org/forum/viewtopic.php?t=*
// @include        http://mozillapl.org/forum/viewtopic.php?p=*
// ==/UserScript==

// Add Preview button
document.getElementsByClassName("submit-buttons")[0].innerHTML += '<input type="submit" tabindex="5" name="preview" value="Podgląd" class="button1" onclick="document.getElementById(\'postform\').action += \'#preview\';" />&nbsp;';

Function.prototype.bind = function(thisObject)
{
    var method = this;
    var oldargs = [].slice.call(arguments, 1);
    return function()
    {
        var newargs = [].slice.call(arguments);
        return method.apply(thisObject, oldargs.concat(newargs));
    };
}

//linkz=document.getElementsByTagName('a');

function callback_function(link_no, response)
{
    re_title = new RegExp("<title>[\n\r\t ]*(.*)[\n\r\t ]*</title>", "gmi");
    title = re_title.exec(response.responseText);
    if (title == null)
        return;
    //alert(title[1]);
    //  linkz[link_no].title = title[1];
    document.links[link_no].title = title[1].replace(/&quot;/gi,'"').replace(/&.dash;/gi,'-');
    //  alert('['+link_no+'] ' + document.links[link_no].href + '\n' + response.responseText);
    document.getElementById('__links_titleizer').style.backgroundColor = '#FF3300';
}

function add_style(style_id, style_rules)
{
    if (document.getElementById(style_id))
    {
        return;
    }
    var style = document.createElement("style");
    style.id = style_id;
    style.type = "text/css";
    style.innerHTML = style_rules;
    document.getElementsByTagName('head')[0].appendChild(style);
   
}

function setup_lt_button()
{
    var lt = document.getElementById('__links_titleizer');
    if (!lt)
    {
        lt = document.createElement('span');
        lt.id = '__links_titleizer';
        lt.textContent = '[LT]';
        document.getElementsByTagName('body')[0].appendChild(lt);
        lt.addEventListener('click', function()
        {
            titleize()
        }, false);
        var titleizer_style = ' #__links_titleizer {   position: fixed;   bottom: 0; right: 0;      display: inline;  padding: 2px;  font: caption; font-weight: bold; cursor: crosshair; } #__links_titleizer:hover {  border-width: 2px 0 0 2px; border-style: solid none none solid;     border-color: black;   } ';
        add_style("__titleizer_style", titleizer_style);
    }
    lt.setAttribute('title', 'Click to run Links Titleizer');
    lt.style.backgroundColor = '#0c2369';
    lt.style.color = '#ddff00';   
}

function titleize()
{
    for (i = document.links.length - 1; i >= 0; --i)
    {
        if (  (document.links[i].className == 'postlink-local' || document.links[i].className == 'postlink') &&
             (/addons\.mozilla\.org\/.*\/addon\/\d+.*/.test(document.links[i])
           || /bugzilla\.mozilla\.org\/show_bug\.cgi\?id=\d+.*/.test(document.links[i])
           || /mozillapl\.org\/forum\/viewtopic\.php\?f=\d+&t=\d+.*/.test(document.links[i])
           || /mozillapl\.org\/forum\/viewtopic\.php\?p=\d+.*/.test(document.links[i]))      )
        {
       
            //     alert(document.links[i].href);
            GM_xmlhttpRequest({
                url: document.links[i].href,
                method: "GET",
                headers: {
                    //'User-Agent': navigator.userAgent,
                    'Accept': 'text/plain, text/html',
                    'Accept-Encoding': 'identity',
                    'Range': 'bytes=0-200'
                },
                onload: callback_function.bind({}, i)
            });
        }
    }
   
} // titleize()

setup_lt_button();


Żeby 'ą' w słowie "Podgląd" się prawidłowo wyświetlało, trzeba zapisać całość w formacie UTF-8, albo użyć słowa bez polskich znaków.

PS: Jeszcze może dodam później backupowanie wysyłanych postów - bo co jakiś czas niedługo po wysłaniu, przepadają - a przy dłuższych nie chce mi się pisać ich od nowa.
Update: Zmiana koloru przycisku po pobraniu pierwszego tytułu.
Mirek
Moderator
 
Posty: 2156
Z nami od: 09 sierpnia 2007, 20:37

Odp: [GM] Podgląd + tytuły linków (na forum)

Postautor: Grzegorz » 05 lipca 2010, 10:04

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4

Będę musiał wypróbować w domu :)
GnuPG. Podpisuję własne wypowiedzi. | TrueCrypt. Ufam kryptografii, nie państwu. | Tor. Dbam o swoją prywatność. | OTR. Moje rozmowy nie są podsłuchiwane.

Załóż konto lub kup domenę WWW z linka polecającego: http://www.hekko.pl/?ref=34295
Grzegorz
Moderator
 
Posty: 7486
Z nami od: 15 kwietnia 2007, 12:33

Ukrycie Strefy pomocy i paru innych sekcji @MPO

Postautor: Mirek » 02 listopada 2010, 23:10

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12

Dorzucam jeszcze poniżej skrypt ukrywający (a właściwie zwijający) Strefę pomocy, pobierania nowych wersji (Grzegorz nawet nie dawno pisał o zbędności tego panelu), belkę stron powiązanych, wyszukiwarkę ogólnoserwisową (ale nie tą forumową) oraz ostrzeżenie przy pisaniu posta. Akurat coś podobnego na potrzeby innej strony sobie napisałem, to przy okazji do tutejszego forum zaadaptowałem (żeby zwiększyć szybkość odpowiadania ;-)). Skrypt ukrywa wspomniane sekcje i dodaje przycisk pozwalający w razie potrzeby przywrócić je, a potem ponownie ukryć. Zawsze to trochę zaoszczędzonego na ekranie miejsca i dzięki temu eliminuje czasem w ogóle potrzebę przewijania strony w dół (np. z nowymi tematami).
Kod dla GM:
Kod: Zaznacz cały
// ==UserScript==
// @name           MozillaPL - hide some DIVs
// @namespace      MozillaPL.org
// @include        http://mozillapl.org/forum/*
// ==/UserScript==

function toggle_tcw()
{
  var tcw=document.getElementById('topContentWrapper');
  var mcw=document.getElementById('mainContentWrapper');
  var db_wd=document.getElementsByClassName("dialogBox warningDialog");
  if(tcw.style.display=='none')
  {
    tcw.style.display='block';
    mcw.style.marginTop='19.200001em';
    document.getElementById('toggle_btn').innerHTML='-';
/*    document.getElementById('topLogoWrapper').style.marginTop='3.5em'; */
    document.getElementById('topLogoWrapper').style.display='block';
    document.getElementById('topNavigationWrapper').style.display='block';
    if(db_wd[0])
    {
      db_wd[0].style.display='block';
    }
  }
  else
  {
    tcw.style.display = 'none';
    mcw.style.marginTop = '0';
    document.getElementById('toggle_btn').innerHTML='+';
/*    document.getElementById('topLogoWrapper').style.marginTop='0'; */
    document.getElementById('topLogoWrapper').style.display='none';
    document.getElementById('topNavigationWrapper').style.display='none';
    if(db_wd[0])
    {
      db_wd[0].style.display='none';
    }
  }
}

btn=document.createElement("button");
btn.innerHTML='+';

btn.addEventListener('click', function()
        {
            toggle_tcw()
        }, false);
btn.id='toggle_btn';

tmb=document.getElementById('topMenuBox');
tmb.appendChild(btn);

toggle_tcw();

Przed instalacją można przetestować w formie skryptozakładki:
Kod: Zaznacz cały
javascript: (function()
{
function toggle_tcw()
{
  var tcw=document.getElementById('topContentWrapper');
  var mcw=document.getElementById('mainContentWrapper');
  var db_wd=document.getElementsByClassName("dialogBox warningDialog");
  if(tcw.style.display=='none')
  {
    tcw.style.display='block';
    mcw.style.marginTop='19.200001em';
    document.getElementById('toggle_btn').innerHTML='-';
/*    document.getElementById('topLogoWrapper').style.marginTop='3.5em'; */
    document.getElementById('topLogoWrapper').style.display='block';
    document.getElementById('topNavigationWrapper').style.display='block';
    if(db_wd[0])
    {
      db_wd[0].style.display='block';
    }
  }
  else
  {
    tcw.style.display = 'none';
    mcw.style.marginTop = '0';
    document.getElementById('toggle_btn').innerHTML='+';
/*    document.getElementById('topLogoWrapper').style.marginTop='0'; */
    document.getElementById('topLogoWrapper').style.display='none';
    document.getElementById('topNavigationWrapper').style.display='none';
    if(db_wd[0])
    {
      db_wd[0].style.display='none';
    }
  }
}

btn=document.createElement("button");
btn.innerHTML='+';

btn.addEventListener('click', function()
        {
            toggle_tcw()
        }, false);
btn.id='toggle_btn';

tmb=document.getElementById('topMenuBox');
tmb.appendChild(btn);

toggle_tcw();
})();


A jak ktoś chce na stałe usunąć - to chyba widać, które linijki JS trzeba przetłumaczyć na CSS dla Stylish czy userContent.css.
Dodany przycisk nie jest za duży, to dodam, że wstawia się za linkiem "Webwatch".
Mirek
Moderator
 
Posty: 2156
Z nami od: 09 sierpnia 2007, 20:37

Odp: [GM] Podgląd+ tytuły linków + Ukrycie Strefy pomocy @MP

Postautor: Grzegorz » 03 listopada 2010, 12:15

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)

Ładne, do tej pory używałem własnego stylu (który nieco mniej rzeczy ukrywał), ale chyba się przerzucę na Twój.
GnuPG. Podpisuję własne wypowiedzi. | TrueCrypt. Ufam kryptografii, nie państwu. | Tor. Dbam o swoją prywatność. | OTR. Moje rozmowy nie są podsłuchiwane.

Załóż konto lub kup domenę WWW z linka polecającego: http://www.hekko.pl/?ref=34295
Grzegorz
Moderator
 
Posty: 7486
Z nami od: 15 kwietnia 2007, 12:33


Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: dexter

Przejdź do powiązanej strony

Nawigacja:

Stopka: