Long time no see

Ne apropiem cu pasi repezi de sfarsitul semestrului si ca orice student care se respecta, am reusit sa aglomerez mai multe deadline-uri in aceasta perioada decat pot duce. Aceasta aglomerare are ca prim rezultat vizibil micsorarea frecventei posturilor pe blog :P .

Anyway, acum e vacanta, afara ninge si e frig, asa ca tin laptopul in brate sa ma incalzesc. Si cum e prea tarziu pentru teme la compilatoare sau alte cursuri mult-iubite, am decis ca e timpul sa fac un mic rezumat al ultimelor activitati legate de dezvoltarea site-ului nostru.

Avem un chat perfect functional, care nu mai da rateuri si in care am lasat foarte putine buguri. Avem si conturi, bancuri, reguli si vreo 2 lingouri de aur.

Apropos de chat, am dat astazi peste o chestie relativ interesanta. Am adaugat o noua intrare in SLDCCMPIESNPF (Scurta Lista De Chestii Care Merg Pe Internet Explorer Si Nu Pe Firefox). Despre ce e vorba… Noi avem un DIV care se numeste “chat” si pe care il umplem cu tot felul de chestii pe care la zic oamenii. Initial acest DIV avea la un moment dat doar un numar fix de linii de chat, dar ne-am gandit mai bine si am zis ca ii punem un scroll si il mai marim putin. Poate unii oameni vor sa vada ce s-a discutat cu ceva vreme inainte.
Anyway, asta a fost destul de simplu: overflow-y:scroll a facut treaba aproape perfect.
Am observat insa ca DIV-ul nostru se comporta cum e normal si nu cum am vrea noi. Adica el afiseaza continutul incepand cu prima linie. Pentru a vedea restul trebuie dat scroll in jos. Noi vrem sa afiseze ceea ce e la coada, si sa dam scroll in sus ca sa vedem restul.
Si asta a fost destul de simplu: function myscroll (div){div.scrollTop = div.scrollHeight;}. Acum chat-ul se comporta frumos si vedem ultimele linii asa cum trebuie. Si tinand cont ca am facut smecheria de mai sus de fiecare data cand se updateaza chat-ul, se va face scroll automat la noile intrari.
Toate bune si frumoase, dar nu poate sa mearga asa, din prima… Problema care a aparut a fost urmatoarea: daca se apeleaza myscroll cand noi citim liniile de chat de pe la inceput, chat-ul scroll-eaza automat la final si ne strica socotelile.
Am incercat vreo doua variante de rezolvare (care au esuat teribil) si pana la urma am gasit solutia ideala: onfocus. Daca focus-ul se afla pe DIV-ul nostru, atunci nu mai facem scroll, pentru ca vrem sa citim. Asa ca am pus un boolean care sa zica daca se face autoscroll sau nu, iar div-ul nostru a ajuns ceva de genul:
<div id=”chat” onfocus=”autoscroll=’false’;” onblur=”autoscroll=’true’;”>
Evident ca am testat aceasta metoda si ca Firefox-ul ca incapatanat ce e a refuzat sa genereze evenimente onfocus si onblur. Dupa vreo 15 minute de cautat informatii despre aceasta problema am reusit sa gasesc explicatia: evenimentele onfocus si onblur sunt suportate doar de:
The following elements support the onfocus attribute: A, AREA, BUTTON, INPUT, OBJECT, SELECT, and TEXTAREA.
Poate a fost o chestie de subconstient, poate intuitie, poate interventie divina, dar, in orice caz, un miracol s-a intamplat: am testat si pe IE. Stupoare! Merge perfect. Probabil ca asta mi-a dat forta sa merg mai departe si sa caut o solutie pentru FF timp de inca 45 de minute. Doar nu era sa il las pe archnemesis sa iasa castigator.
O sa sar peste partile plictisitoare (YOU MEAN THIS WAS WHAT YOU CALL EXCITING?) si o sa trec direct la solutie: tabindex. Adaugi tabindex la un element si in mod magic el va genera evenimente onfocus.
<div id=”chat” tabindex=”0″ onfocus=”autoscroll=’false’;” onblur=”autoscroll=’true’;”>

And now for the funny part:
The following elements support the tabindex attribute: A, AREA, BUTTON, INPUT, OBJECT, SELECT, and TEXTAREA.
Deci am rezolvat faptul ca onfocus nu e suportat de DIV printr-un alt atribut care nu e suportat de DIV. So much for standards compliant browser.

WordPress zice ca am asuns la 650 de cuvinte, asa ca o sa pun punct aici: .

EDIT: i broke wordpress. Fixing now.

Published in: on decembrie 20, 2009 at 2:00 am  Lasă un comentariu  

The URI to TrackBack this entry is: http://goldioc.wordpress.com/2009/12/20/long-time-no-see/trackback/

Feed RSS pentru acest post.

Lasă un răspuns

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Schimbă )

Twitter picture

You are commenting using your Twitter account. Log Out / Schimbă )

Facebook photo

You are commenting using your Facebook account. Log Out / Schimbă )

Connecting to %s

Follow

Get every new post delivered to your Inbox.