* 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\';" /> ';
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(/"/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.