Protože jsme doma na jednom notebooku dva na Xchatu a protože má drahá polovička
má měla poměrně složitou přezdívku, rozhodl jsem se
napsal skript do GreaseMonkey, který by u nepřihlášeného uživatele
zobrazil malý dialog, s možností zvolit přezdívku.

Každý GreaseMonkey skript začíná definicí, kde má být aktivní:
// ==UserScript==
// @name Rychlé přihlášení
// @description rychlé přihlášení pro více uživatelů na Xchat.cz
// @include http://*xchat.centrum.cz/*
// @include http://fotoalba.centrum.cz/*
// @exclude http://*xchat.centrum.cz/~$*
// @exclude http://fotoalba.centrum.cz/~$*
// @include http://*xchat.centrum.cz/~guest~/*
// @include http://fotoalba.centrum.cz/~guest~/*
// ==/UserScript==
Skript bude tedy aktivní na každé stránce v doméně xchat.centrum.cz a fotoalba.centrum.cz, kde není hash, nebo je ~guest~ .
Dále skript obsahuje konfigurační pole
// ---=== Konfigurace ===---
// Nicky, ktere se zobrazi v listu
var Nicky = new Array ('Georgo 5 mn_c', 'Nikkky 1 wn_c');
// Nicky zobrazene po rozkliku 'více ...'
var NickyMore = new Array ('Georgo10', '01ogroeG', 'Olomouc', 'l33t0r', 'L-o-v-e-l-yC-a-t', 'LovelyCatNaDovolene', 'L-o-v-e-l-y-C-a-t');
První z nich obsahuje nicky, zobrazené ihned, druhé ty, které se
zobrazí po kliku na odkaz více…. Struktura záznamu v poli není
příliš složitá. Může obsahovat jeden nebo tři parametry, oddělené
mezerou. Nejprve je potřeba vepsat přezdívku, a pokud chcete, lze doplnit
i ID hvězdy (1 – modrá, 2 – zelená, 3 – žlutá, 4 – červená,
5 – černá) a pohlaví (mn – muž, wn – žena, mn_c –
certifikovaný muž, wn_c – certifikovaná žena). Dva doplňkové parametry
doporučuji vyplnit u pole Nicky, u NickyMore mi přijdou zbytečné
.
Pokračujeme částí, kde již není potřeba nic upravovat, ale vysvětlím, k čemu slouží:
var formular = document.forms[0];
fillUser = function (elNick) // Vyplneni username
{
formular.elements.namedItem('pass').value = ''; // Vymazni predchoziho hesla
tNick = elNick.innerHTML;
arrayNick = tNick.split (' '); // Zjisteni nicku
formular.elements.namedItem('name').value = arrayNick[arrayNick.length-1]; // Vlozeni nicku
formular.elements.namedItem('name').focus(); // Nastaveni focusu na nick
formular.elements.namedItem('pass').focus(); // Nastaveni focusu na pass - pripadne to vyplni heslo
if (formular.elements.namedItem('pass').value) // Heslo je ulozeno, prihlasuji
{
document.getElementById('fastnicks').innerHTML = 'Přihlašuji ... <img src="http://img.xchat.centrum.cz/images/x4/sm/26/26.gif" alt="MMNT" />';
formular.submit();
}
else // Heslo neni, nechame uzivatele zadat
{
hide();
}
return false;
}
Funkce fillUser s parametrem nicku vyplní do pole ‚name‘ přezdívku, přeskočí do pole ‚pass‘, kam se vypisuje heslo. Zjistí, jestli Firefox z uložiště hesel vyplnil heslo a podle toho se formulář buďto odešle, nebo skryje panel, aby uživatel mohl zadat heslo.
createLink = function (str) // Vytvoreni elementu
{
var link = document.createElement ('p');
arrayNick = str.split(" ");
var write = '';
if (arrayNick[1])
{
write += '<img src="http://img.centrum.cz/x4/star/'+arrayNick[1]+'.gif" alt="*" /> ';
}
if (arrayNick[2])
{
write += '<img src="http://img.centrum.cz/x4/rm/'+arrayNick[2]+'.gif" alt=":)" /> ';
}
write += arrayNick[0];
link.innerHTML = write;
link.addEventListener ('mouseover', function() {this.style.color='#dd0000';}, false);
link.addEventListener ('mouseout', function() {this.style.color='';}, false);
link.addEventListener ('click', function() { fillUser (this); }, false);
return link;
}
Do funkce createLink se jako parametr odesílá jeden řetězec z pole, obsahující nicky. Funkce zpracuje parametry a podle nich vytvoří odkaz, kterému nastaví akce po kliknutí a přejetí myši.
hide = function() // Schovani fastnicks
{
document.getElementById('fastnicks').style.display = 'none'; // Schovame rychle nicky
document.getElementById('fastnicksMore').style.display = 'none'; // Schovame dalsi nicky
document.getElementById('fastnicksMoreLink').style.display = ''; // Zobrazime vice...
}
hide() je poměrně jednoduchá funkce na skrytí boxu s nicky.
// ---=== Hlavni box ===---
if (Nicky.length || NickyMore.length)
{
Na konci zpracujeme naplnění boxu a zobrazení, pokud alespoň pole Nicky nebo NickyMore obsahuje nějaké záznamy.
var label = document.getElementsByTagName('label')[0];
label.addEventListener('click', function() { document.getElementById('fastnicks').style.display = ''; }, false);
var nickInput = formular.elements.namedItem('name');
nickInput.addEventListener('keypress', hide, false)
var divy = document.getElementsByTagName('div');
for (var z=0; z<divy.length; z++)
{
if (divy[z].id == 'page') {
var hlavicka = divy[z];
break;
}
}
var fastnicks = document.createElement ('div');
fastnicks.setAttribute ('id', 'fastnicks');
fastnicks.setAttribute ('style', 'position:absolute;padding:5px;top:20px;left:700px;opacity:0.7;background: #eaebec url(http://img.centrum.cz/x4/rm/8/room-bg.gif) no-repeat right top;font-weight:bold;border:1px dashed #888; text-align:left;font-size:1.2em;color:#111;cursor:default;');
Nejpve prvku ‚label‘ s indexem 0 (nápisu přezdívka) přidělím akci po kliknutí, aby se zobrazil box (pro případ, že si jej omylem zavřu). Poté inputu pro psaní hesla navážu akci, aby se po psaní skryl box, aby nepřekážel. Dále je potřeba detekovat div, který použijeme na zobrazení boxu. Toto není zrovna ideální řešení, ale kupodivu funguje. Bohužel se někdy může stát, že box bude za flashovou reklamou, zobrazovanou na úplném vrchu úvodní stránky Xchatu.
var fastnicks = document.createElement ('div');
fastnicks.setAttribute ('id', 'fastnicks');
fastnicks.setAttribute ('style', 'position:absolute;padding:5px;top:20px;left:700px;opacity:0.7;background: #eaebec url(http://img.centrum.cz/x4/rm/8/room-bg.gif) no-repeat right top;font-weight:bold;border:1px dashed #888; text-align:left;font-size:1.2em;color:#111;cursor:default;');
Vytvoření DIVu s boxem, nastavení ID a stylu.
// ---=== Zavreni boxu ===---
var closebox = document.createElement ('div');
closebox.setAttribute ('style', 'position:absolute;top:2px;right:2px;color:#999999;font-size:0.8em');
closebox.innerHTML = '[X]';
closebox.addEventListener ('click', function() {
hide();
document.forms[0].elements.namedItem('name').focus(); // Nastaveni focusu na nick
}, false);
closebox.addEventListener ('mouseover', function() {this.style.color='#dd0000';}, false);
closebox.addEventListener ('mouseout', function() {this.style.color='#999999';}, false);
fastnicks.appendChild (closebox);
V pravém horním boxu se zobrazuje křížek pro zavření boxu.
// ---=== Hlavni nicky ===---
if (Nicky.length)
{
Nicky.sort(); // Serazeni nicku
for (z=0; z<Nicky.length; z++)
{
fastnicks.appendChild (createLink (Nicky[z]));
}
}
Vygenerování hlavních nicků, které se zobrazí v boxu přímo.
// ---=== Vedlejsi nicky ===---
if (NickyMore.length)
{
var link = document.createElement ('div');
link.setAttribute ('id', 'fastnicksMoreLink');
link.setAttribute ('style', 'text-align:right;font-size:0.8em;color:#666666;');
link.innerHTML = 'více...';
link.addEventListener ('click', function() {
document.getElementById('fastnicksMore').style.display = '';
document.getElementById('fastnicksMoreLink').style.display = 'none';
}, false);
link.addEventListener ('mouseover', function() {this.style.color='#dd0000';}, false);
link.addEventListener ('mouseout', function() {this.style.color='#666666';}, false);
fastnicks.appendChild (link);
var fastnicksMore = document.createElement ('div');
fastnicksMore.setAttribute ('id', 'fastnicksMore');
fastnicksMore.setAttribute ('style', 'font-size:0.8em;color:#333;display:none');
NickyMore.sort(); // Serazeni nicku
for (z=0; z<NickyMore.length; z++)
{
fastnicksMore.appendChild (createLink (NickyMore[z]));
}
fastnicks.appendChild (fastnicksMore);
}
Vedlejší nicky mají proceduru delší. Především proto, že je potřeba navíc zobrazit odkaz „více…“ a také zpracovat zobrazování a skrývání těchto nicků.
hlavicka.appendChild (fastnicks);
}
Nakonec do hlavičky přidáme element fastnicks a uzavřeme výše otevřenou podmínku.
A to je vše přátelé. Nakonec si můžete ještě skript nainstalovat a podívat se na videoukázku:
Webdesing & kód: Tomáš Kopečný
, tomas@kopecny.info, Praha, Česká republika, centrum holdings
Komentáře
Pzb
http://hmotak.rm-v.netHodne dobry :-))
hugo_
Spíš hodně „šikovný“ :-) Něco pro lenochy, skvěle, díky Tome
Svido
No spise pekna kravina.
red
http://red.hnojice.czužitečné, chytré ;)
w4s
http://xchatpraha.er.czperfektní :)
Nový komentář