Skip navigation.

exploreopera

| Help

Sign up | Help

Projektowanie i inne takie...

(web-developing and so on...) by Piotr Potera

Zabawa z tabelkami

, ,

Kończymy właśnie pisać naszego autorskiego CMSa. Jako, że dostałem wolną ręke jeśli chodzi o interfejs (Iiiihahaa!), postanowiłem, że będzie on dokładnie taki, jakiego sobie wymarzyłem, czyli lekki, estetyczny i maksymalnie przyjazny dla użytkownika. Interfejs ów opiera się m. in. na tabelkach, które są wypełnione zawartością - lista aktualności, podstron, wzorów listów, menu, galerii itp.

Layout jest dynamiczny i konfigurowalny, toteż ktoś, kto, tak jak ja, ma pulpit szeroki na 1900 pikseli mógłby poczuć się niekomfortowo otrzymując tabelkę z kolumną zawierającą tytuły podstron rozjechaną na 1600 pikseli a resztę ściśniętą, gdzieś pod koniec, jak labrador w mikrofalówce. Oczywiście przewidziałem to i tak naprawdę, taka sytuacja nie ma prawa zajść, jednak mimo to chciałem dać użytkownikom wybór, która kolumna jest dla nich aktualnie najważniejsza i do której chcieliby mieć w danej chwili jak najwygodnieszy dostęp. Wybór był jeden - dynamiczna zmiana szerokości kolumn.

Jako, że robiłem to pierwszy raz, ucząc się przy okazji, chciałbym teraz trochę pouczyć was. Tak więc dzisiejszy temat lekcji, to wspomiana już:

"Dynamiczna zmiana szerokości kolumn - czyli, dlaczego lubimy Javascript."

Jedziemy
Potrzebna nam będzie tabelka. Ja zrobiłem sobie taką:

Wy możecie zrobić zwykłą, prostą tabelkę zawierająca nagłówki i kilka rzędów komórek, dla zachowania przejrzystości:

<table border="0" cellpadding="2" cellspacing="0">
   <thead>
           <tr>
                  <th>Lp</th>
                  <th>Lorem</th>
                  <th>Ipsum</th>
                  <th>Dolor</th>
           </tr>
   <thead>
   <tbody>
            <tr>
                  <td>1</td>
                  <td>2</td>
                  <td>3</td>
                  <td>4</td
            </tr>
            <tr>
                  <td>5</td>
                  <td>6</td>
                  <td>7</td>
                  <td>8</td>
             </tr>
   </tbody>
</table>

Teraz musimy przygotować sobie jakiś uchwyt, za który będzie można złapać i zacząć woogie boogie. Wystarczy jakiś DIV. Problem w tym, że elementy TH/TD ignorują position: absolute;... musimy więc użyć dwóch DIVów. Jeden będzie robił za containing block dla drugiego, pozycjonowanego absolutnie handlera (uchwytu):
<th>
  <div>
      Lorem <div class="handler"></div>
  </div>
</th>

Takie same DIVy dodajemy do pozostałych nagłówków tabelki. Następnie ostylujemy je trochę abyśmy wiedzieli, co się dzieje:
th > div {
    position: relative; /* tworzymy containing block */
}

.handler {
    position: absolute;
    top: 0;
    right: 99.5; /* uchwyt będzie na końcu każdego nagłówka a właściwie pomiędzy końcem a początkiem następnego */ 
    height: 100%;
    width: 9px; /* optymalna szerokośc dla uchwytu nie powodująca efektu "Kur... gdzie ten cycek?!" */
    cursor: ew-resize; /*  ew działa tylko w Safari, możecie użyć innego */
    border: 1px #900 solid; /* tymczasowo, żebyśmy wiedzieli, gdzie jesteśmy */
}

W rezultacie otrzymamy coś takiego:

Javascript
Front już mamy, teraz zaplecze, które wykona całą robote. Potrzebujemy dwie funkcje - jedną, która zajmie się zmianą szerokości i drugą, która wywoła cały mechanizm. Nie będziemy bawić się w żadne onclicki w TH a użyjemy do tego DOM poziomu drugiego i ładnie odseparujemy bebechy od warstwy prezentacji. Zaczniemy od resizowania. Funkcja, która napiszemy, będzie potrzebowała dwa parametry - referencje do obiektu, który będzie uchwytem (nasz DIV.handler) oraz drugi, obiekt Event zdarzenia mousedown.
    function resizeColumn(handler, event) { }

Teraz, musimy sprawdzić, jaką szerokość ma dany nagłówek i wyliczyć różnicę między nim a punktem kliknięcia myszką. Użyłem tu własnej funkcji do wyciągania reguł CSS - getStyleOf(), wy możecie użyć swojej.
function resizeColumn(handler, event) { 
var headerSize = parseInt(getStyleOf(handler.parentNode.parentNode, 0).getPropertyValue('width'));
var deltaX = event.clientX - headerSize;
}

Następnie musimy zarejestrować procedury obsługi zdarzenia, które będą odpowiadać na zdarzenia mousedown i mouseup, występującą bezpośednio po niej. Te procedury będą aktywne dopóty, dopóki będzie naciśniety lewy przycisk myszy i zostaną zwolnione gdy go puścimy. Dopisujemy dalej w ciele funkcji:
function resizeColumn(handler, event) { 
... /* tu poprzednie wyliczenia deltyX i headerSize */

document.addEventListener('mousemove', resizeDo, true);
document.addEventListener('mouseup', resizeStop, true);

event.stopPropagation();
event.preventDefault();
}

O stopPropagation() i preventDefault() oraz propagacji zdarzeń innym razem. Teraz po prostu przyjmij, że musimy tak zrobić. Ostatnim krokiem jest przygotowanie procedur resizeDo i resizeStop, które wykonają całą robotę:
function resizeColumn(handler, event) { 
...
function resizeDo(event) {
handler.parentNode.parentNode.style.width = (event.clientX - deltaX) + "px";
event.stopPropagation();
}

function resizeStop(event) {
document.removeEventListener('mouseup', resizeStop, true);
document.removeEventListener('mousemove', resizeDo, true);
event.stopPropagation();
}

Okey, funkcja resizeColumn() gotowa. Teraz musimy ją odpowiednio wywołać. Napiszemy drugą funkcje, która się tym zajmie i wywołamy ją z <BODY onload="">. Nię będe się tu rozpisywał, bo działanie jest chyba jasne - bierzemy wszystkie DIVy, szukamy tych, których nazwa klasy równa jest "handler" i aplikujemy im odpowiedni mechanizm. Oczywiście można to zrobić bardziej optymalnie (zadanie domowe :wink: ), na przykład przeszukując same tabelki a nie całe drzewo dokumentu ale tak też działa i, na potrzeby tego artykułu, jest bardziej przejrzyście.
function doResize() {
var handlers = document.getElementsByTagName('div');
for(var i=0; i<handlers.length; i++) {
if(handlers[i].className == 'handler') {
handlers[i].onmousedown = function (event) {resizeColumn(this, event)};
}
}
}

Tak, jak wspomniałem - aplikujemy tę funkcję w BODY:
<body onload="doResize();">

...i usuwamy czerwoną ramkę:
.handler {
    border: 1px #900 solid; /* ciach! */
}

...i jeśli niczego po drodze nie popsuliśmy, to wszystko powinno fajnie hulać :smile:

PS: uprzedzając komentarze - w IE nie działa i nie będzie. Mamy tę skromną i satysfakcjonującą możliwość wyboru środowiska pracy :wink:

Ktokolwiek widział, ktokolwiek wie...

,

Operowe Recent Visitors to przekleństwo uzależniające bardziej niż grono.net, blip.pl i See also z Wikipedii razem wzięte. Niemal codziennie łapie się na tym, że odwiedzając dajmy na to blog Wojwita, po kilku minutach ląduje gdzieś, gdzie zupełnie nie planowałem. Na ogól są to blogi spamerów podszywających się pod urodziwe azjataki ale czasami zdarzają się i perełki. No właśnie - chciałem pochwalić jednego autora, za to, że fajnie rysuje ale zapomniałem go zaspotlightować. Nic to, pewnie jeszcze kiedyś mnie odwiedzi... z resztą ja nie o tym dziś chciałem.

Swego czasu był sobie taki, bardzo aktywny zresztą, użytkownik MyOpera jak quiris. Pisał o Operze, projektowaniu www i tym podobnych sprawach... i nagle... zniknął. Zniknął zarówno z MyOpera jak i z sieci. Jego strona zawisła na dobre a ostatni jego post z forum Opera Community datowany jest na 9 wrzesienia, 2007 roku. Można też spotkać jego posty na Surfin’ Safari z marca b.r. ale to wszystko (?). Ktoś wie, co się stało?

No cóż...

, , ,

Kilka dni temu napisałem do Interii, Onetu, WP, Dziennika internautów (widocznie temat się dla nich wyczerpał) a nawet do PEKAO S.A. Nikt się nie zainteresował. Ok. No to teraz oficjalnie - lista 1600 kandydatów do pracy w PEKAO jest dostępna w serwisie thepiratebay.org. Skąd wiem? Dostałem anonimową wiadomość na GG :faint:

Gratulacje!

UPDATE:
Ok, usuwam link, skoro tego chcecie. Rozumiem, że lepiej będzie aby dryfował on sobie w sieci a archiwum będzie ściągane, już po cichu, przez kolejnych internautów i wtedy nie będę "krzywdził" tych ludzi z PEKAO a bank z radością triumfalnie ogłosi, że sprawa zamknięta i wszystko gra.

18/07/08 - link został usunięty przez autora.

Nigdy nie wiedziałeś, jak napisać CV?

, , , ...

UPDATE 15:
14/07/08 - tvn24.pl, Dwa lata odsiadki za wyciek danych.


UPDATE 14:
Coś ciekawego pojawiło się na wyspie - klik! Ciekawe, co to za party? :lol:


UPDATE 13:
18:00 - Proszę wszystkich o niemolestowanie mnie przez e-mail/jabber/gg o podesłanie archiwum z Cefałkami. Skasowałem już.


UPDATE 12:
14:30 - Artykuł na webhosting.pl i niespełnione ambicje pana Szklarskiego.


13/07/08 -
1. Wszyscy pójdziemy siedzieć... Google też!
2. Artykuł w Vagla.pl na temat całej sprawy
3. Ciekaw jestem, co by zrobiło PEKAO, gdyby ktoś umieścił trackera do pliku na thepiratebay.org :D

UPDATE 10:
tvn24.pl publikuje wypowiedź kogoś bliżej nieokreślonego, który z uporem maniaka dalej podtrzymuje bajeczke o hackerze ( video ), administrator zaś tłumaczy się, że to nie ich wina, bo hosting ma kto inny a tak w ogóle to "pójdziemy z tym do prokuratury", bo nie może tak być, że użytkownicy Internetu klikają sobie gdzie popadnie i czytają, co chcą...


UPDATE 9:
20:00 - Jak donoszą użytkownicy Wykopu (poszedłem wziąć prysznic cholera...), w wiadomościach TVP jakiś specjalista wypowiadał się na temat całego wydarzenia. Konkluzja jest taka, że jakiś hacker się włamał i zrobił burdel... i przez to CV były dostępne publicznie.

Rozumiem, że nikt tego nie zauważył i nie sprawdził tak, że Google miało czas to zindeksować a pół Wykopu zrobiło sobie z tego mirror od wczoraj?


UPDATE 8:
19:20 - Wiadomości Polsatu/Fakty TVN - niestety ani słowa...


UPDATE 7:
18:10 - Tym razem wp.pl odświeża swój artykuł powielając bzdury, które można przeczytać na innych portalach:
1. "Atak hakerów: wyciekło kilka tysięcy CV z banku Pekao S.A."
2. Pan Arkadiusz Mierzwa, rzecznik PEKAO S.A. zmienia tym razem zeznania:
Dokładnie w ciągu siedmiu minut od momentu otrzymania pierwszej informacji (...) doprowadziliśmy do zablokowania strony internetowej.

Czyli już nie od wycieku pierwszych danych, jak było w kilka godzin wcześniej? :lol:


UPDATE 6:
17:50 - Dziwna sprawa. TVN24 - Informacje, Polsat - Wydarzenia, zupełna cisza. Ktoś coś słyszał w mediach na ten temat?


UPDATE 5:
17:00 - Każdy po swojemu... Przedstawiciel banku - haker włamuje się przez www odgadując adres URI; Przedstawiciel agencji, która przygotowała serwis - mieliśmy wczoraj włamanie i ktoś poprzestawiał .htaccess - klik!


UPDATE 4:
16:30 - PEKAO S.A. zamknęło stronę zainwestujwprzyszlosc.pl i wydało oświadczenie.

UPDATE 3:
14:45 - Stało się to, co stać się musiało - baza jest już na rapidshare... i już zniknęła (15:10)
ale jakby ktoś chciał przejrzeć "ręcznie" - klik!


UPDATE 2:
1. Gdyby ktoś nie wierzył, że mam - klik!
2. Wpis, który zniknął po nagłośnieniu afery (nadesłał heavygunner)- klik!
( link do bloga znajduje się w dziale "kontakt" na tejże stronie )

Arkadiusz Mierzwa, dyrektor biura prasowego PEKAO SA kłamie więc mówiąc:
To pomysłowość internautów - trzeba było przecież specjalnie wstukać określony adres. Można było oczywiście wymyślić bardziej skomplikowany. Ale musi być jakieś miejsce na serwerze, gdzie fizycznie przechowywane są takie dane.

Nie trzeba było nic zgadywać, to wy daliście ciała zatrudniając profesjonalną firmę.


UPDATE 1:
1. ktoś z gazeta.pl też czyta Wykop i już temat podchwycili ( tvn24.pl też );
2. strona zniknęła z sieci ale jakby ktoś chciał prawie 3000 emaili, to proszę... na mejla.

@prawnicy PKO
Punkt drugi to żart... taka krótka forma humorystyczna, służąca rozśmieszeniu słuchacza, zrozumiano?


Oryginalny post:
(za blogiem Glucia)

Nigdy nie wiedziałeś, jak napisać CV? Tu masz blisko 2800 przykładów - klik!

Jeśli PEKAO S.A tak samo dba o dane swoich klientów, to ja pie... piekelnie jestem zniesmaczony.

PS: Pewnie niedługo zniknie, więc zrobiłem backup... tak dla zasady :wink:
PS2:
1. wejdzcie tutaj: http://www.zainwestujwprzyszlosc.pl/files/1/
2. zobaczcie źródło strony
3. następnie div.footerPowered :yes:

Oni na serio dostali referencje od PKO S.A :insane:

Historia braku rozumu... cz. 1

Żył sobie pewien człowiek. Człowiek, który wśród wielu mani i nałogów miał jeden szczególny. Lubił przesadzać. Nadgroliwość tą dzielił z inna, równie irytującą cechą, jaką jest zamartwianie się. Jak desktruktywnie wpływało to na jego życie, miał się dowiedzieć niedługo...

Choć efekty były mizerne, człowiek ów pracował. Pracował cieżko. Praca jego, z grubsza, polegała na piciu naparu sporządzanego z palonych ziaren kawowca i układania literek na czymyś, co wyglądało jak okno ale próba wyjrzenia przez nie kończyła się w najlepszym wypadku jego wymianą lub plastrem na nosie. Przyzwoitość nakazuje wspomnieć, że zadanie polegało na tym aby stukając w plastikowe kolcki ułożyć literki w logiczną całość. Całość w rezultacie okazywała się mało logiczna, zwłaszcza po konsultacji ze zleceniodawcą jednak człowieczek nie zrażał się tym i dalej robił swoje.

Praca pochłaniała człowieczka jak Etiopczyk kaszkę, toteż bohater nasz często zapominał o innych, ważnych sprawach, takich jak właśnie regularne i rożnorodne odżywianie. Szczytem ambicji seksualnych stało się przeglądanie azjatyckich obrazków a sport ograniczał się do wyrzucenia zużytego tytoniu przez okno. Trwało to dobrych kilka miesięcy aż człowiek ów poczuł się źle...

c.d.b.m.n.




Trochę gratów...

,

...wala mi się po mieszkaniu i jest zupełnie niepotrzebnych:

Płyta Soltek SL-75FRN2-RL - 140,00 PLN
Procesor Athlon 2600XP (chyba Barton) - 150,00 PLN
ATI Radeon 9700/128MB (AGP) - 100,00 PLN
2x512MB DDR400 - 100,00 PLN
Jakiś lepsiejszy zasilacz (400W) - 60,00 PLN

Jeśli ktoś chcę, to na mejla. Za całość, promocja - 550,00 PLN :wink: Koszty przesyłki do Polski pokrywam ja.


Słomiany Geek

Dziś żona wyjeżdża z moimi znajomymi na weekend na Hel. Dlaczego ja nie jadę? A bo mi się nie chce. Mam inne, ciekawsze rzeczy do roboty. Oprócz klepania kodu planuje wizytę w kinie (ona nie lubi horrorów), kilkugodzinną partyjkę Half Life'a (ona nie lub jak gram) i butelkę czegoś mocnego i bardzo nielegalnego (ona nie lubi jak pije). Zapowiada się nieźle :]


Tarcza antyrakietowa

Ciekawy przykład nowomowy, nie? Czy ktoś jeszcze pamięta albo chociaż zdaje sobie sprawę z tego, że owa tarcza antyrakietowa to po prostu... system wyrzutni rakiet, który równie dobrze może służyć do ataku defensywnego jak i ofensywnego?


Oceń pracodawcę a pójdziesz siedzieć...

, ,

Autor ciekawego i dość nowatorskiego serwisu ocenpracodawce.pl, o którym kiedyś pisałem poinformował wczoraj, że jego strona zawiesza swoją działalność, głównie z uwagi na ego przewrażliwionych szefów nasyłających na niego niedouczonych prawników. Szkoda. Tyle mam do powiedzenia.

O Jezu, jaki duży pulpit!

,



Wczoraj, o godzinie pierwszej w nocy ( dzięki Ewelina :* ) przywiozłem z Wrocławia moje nowe maleństwo. Ma 24 cale i w sumie na tym bym zakończył ale nerdowa konwencja nakazuje pochwalić się substytutem penisa... czyli pozostałymi parametrami:

- Core2Duo 2.16Ghz
- 3GB RAM DDR2
- nVidia GeForce 7300GT/128MB
- HDD 250GB SATA
- DVD-RW DL
- WiFi, Bluetooth
- 24 calowa matryca S-IPS (tak, ta co wyświetla 16mln kolorów a nie tylko udaje)
- wbudowana kamerka iSight

...i tym samym zamieniłem swojego 3-letniego PowerBooka G4 na coś bardziej na czasie. Kilka wrażeń, absolutnie na gorąco, po nieprzespanej nocy:

1. Intel vs. PPC - uczucie jak po przesiadce z Amigi 1200 na... Amige 1200 z 060/66Mhz i 128MB RAM (dla nie-amigowców - Pentium 500Mhz kontra Xeon QuadCore);
2. System startuje ok. 25 sekund (od puknięcia w przycisk do załadowania pulpitu);
3. filmy HD w 1900x1200 wyglądają fajowo;
4. nie pokazujcie swoim żonom Photo Booth;
5. mój następny zakup to Apple Cinema Display "30...rozmiar wciąga :]

Kosztowało mnie to 3200,00 PLN, co przy średniej cenie 24 calowego panelu S/PV/A/S-IPS na poziomie 2800,00 PLN wychodzi chyba całkiem nieźle :wink:


Gdzie to było?...

Żona zrobiła fotkę. Fotka od razu skojarzyła mi się z pewnym czymś. Podkręciłem ją trochę w Photoshopie i teraz konkurs - w jakiej grze wystąpił podobny motyw? (dla ułatwienia miła aranżacja pewnej piosenki). Wygrywa ten, kto pierwszy, równo po godzinie 21:00 (wcześniej się nie będzie liczyć!), napisze, o co chodzi. Zwycięzca dostanie koszulkę z logo Opery (Łuki, sorry, mam tylko L'ke :rolleyes: ). Tymczasem spadam do Wrocławia. Wróce ok. północy z moim... malutkim - szczegóły jutro :wink:

Polska mowa nie buc tridna

, ,

Na Gronie często ludzie pytają mnie, jak coś zrobić. Z reguły piszą gdzie i czego dotyczy problem ale są i wyjątki. Pisownia oryginalna zachowana, ja na zielono.


ma prozibe czy mugł bys napisaci własici wosici tych ramek css
[tu link do jakiejś strony]

wiec w tamtej stronie mył ilnk i karzda tabela fajnie wygląda no czy mugł bysi no zrobici z css by tak wyglądało
z gury dzięki sora za kłopot=)

Napisz mi to jeszcze raz po polsku:
- gdzie zmienić
- co zmienić
- jak ma wyglądać

(w tej kolejności)

nie jeszcze raz widzisz te tabelki? to czy bysi nie mugł napisaci scc tych tabelek bo rez chce mieci takie =)

(tabelki były, owszem, dwie, identyczne)

Ok, dam ci jeszcze jedną szanse:
- gdzie zmienić (link)
- co zmienić (jaki element)
- jak ma wygladać (link albo opis)

zajrzyj do mojej galeri pod tyt : piotr
1 che żebysi napisał css tej tabeli
2 szczegulnie z nagłuwiek

(nie było takiej galerii... było za to "Poytr")

Dalej muszę dedukować, o co ci chodzi. No dobra. Jaki CSS i co on ma
robić z tą tabelą?

widzałesi zdjecie w mojej galeri?

Tak, i?

to czy nie mugł bysi napisaci css tej tabeli zamiast bawici sie z grafikom odrazyu wpisaci css i po sprawie

Mógłbym, ale po raz piąty - co ty chcesz zrobić? Widzę dwie tabelki -
jedna z zawartością, druga bez, i?

zrub css i pszesilij to zobaczysz mam zamiar zrobici pszebudowe mej strony http://mojagrarpg.w.interia.pl

Rezygnuje. Przepraszam, ale twój sposób pisania... ręce opadaja. Ja po
prostu nie rozumiem, o co ci chodzi :/

oki


No. I tak to było... Warto dodać, że użytkownik wg. profilu ma 25 lat.