KBlogger - dla leniwych

Właśnie testuję sobie narzędzie KBlogger do dodawania wpisów bez wchodzenia nawet do przeglądarki :). Nie ma to jak lenistwo. Co prawda na chwilę obecną wydaje się być ciut ograniczone w działaniu, ale może dzięki niemu i tak będize ciut więcej życia tutaj :)

Dopisek juz ze strony:
Jednak KBlogger nie chce być dobry - przesłął nieprawidłową tate, przez datę publikacji ustawiło na 1 sty 1970 (timestamp 0). Również nie wybrało prawidłowo kategorii…

Kolejna wpadka Opery, czyli Opera jest zła part 2

Po tym jak już raz znalazłem błąd w Operze, który został naprawiony przyszła pora na kolejne starcie. Nie wiem, czy po prostu w Operze jest tyle błędów, czy może ja mam jedynie takie szczęście ciągle na nie wpadać…

W każdym bądź razie do rzeczy: Wszystko ogranicza się do tego, że Opera nie wykonuje akcji onClick() na ukrytych polach formularza.

Przykład jest trochę zakręcony, bo długo myślałem i kombinowałem jak go przedstawić :) Całośc powinna działać tak:

  1. Klikam na któryś <label> i powinno się wybrać od razu właściwe pole radio.
  2. Zaznaczenie pola radio powinno uruchomić akcję onClick, które wyświetla alert() z wartością zaznaczonego radio.

W Firefoksie działa wszystko prawidłowo - pojawia się jak powinno pole alert. Natomiast w operze nic się nie dzieje. A gdy zlikwiduje się regułkę ukrywającą pola (display:none) - nagle wszystko zaczęło działać.
Znalezienie tego błędu zajęło mi dwa dni - ciekawe ile jeszcze jest takich niespodzianek w Operze… Na szczęście działa chociaż onChange()…

Kod testowy:

 <style>
  input[type='radio'] {display:none}
</style>

<form id="f" action="#" method="get">
  <input type="radio" name="r" id="r1" value="radio1"
     onClick="fsubmit()"/><label for="r1">Radio 1</label><br/>
  <input type="radio" name="r" id="r2" value="radio2"
     onClick="fsubmit()"/><label for="r2">Radio 2</label><br/>
</form>

<script type="text/javascript">

function getCheckedValue(name)  {
  inputs = document.getElementsByTagName('input');
  for(i=0; i<inputs.length; i++) {
    if(inputs[i].name==name && inputs[i].checked == true) {
      return inputs[i].value;
    }
  }
  return 'none selected';
}

function $(o) {
  return document.getElementById(o);
}

function fsubmit() {
  alert('Radio value: '+getCheckedValue('r'));
}

</script>

Smarty? To przeżytek.

Kiedyś bardzo chciałem poznać Smarty. Niestety nigdy jakoś nie miałem na wcześniej czasu. A przynajmniej wtedy myślałem “niestety”.
Ostatnio w pracy mam właśnie możliwość zapoznania się dogłębnie ze Smarty.

Parę dni zajęło zanim się do tego przyzwyczaiłem i wtedy jeszcze myślałem że jest całkiem fajne. Jednak prawda jest taka, że Smarty jest językiem zupełnie nieprzemyślanym. Na większość konstrukcji znanych z PHP posiada własne odpowiedniki, od których z kolei są wyjątki. Poza tym ewidentnie widać, że język ten był pisany gdy PHP jeszcze było tylko strukturalne i tylko na doczepkę dodali programowanie obiektowe. Oczywiście niepełne.

By nie być takim gołosłownym, parę przykładów:

kod PHP Kod Smarty
echo count($array) {$array|@count}
if(count($array)>5) echo “dużo”; {if count($array) > 5}dużo{/if}
echo $foo->$bar()->baz(); Niemożliwe, trzeba użyć zmiennych tymczasowych
{assign var=temp value=$foo->bar()}{$temp->baz()}
$s = “element {$foo->id} z {$foo->count}”; Tak samo, jak wyżej - niemożliwe
echo substr($string, strlen($var), $end) Oczywiście wynik strlen() trzeba do zmiennej tymczasowej…

Mogę tak dalej wymieniać, ale już chyba widać sens przesłania, iż Smarty nie jest umierającym dinozaurem, który szczerze mówiąc, nie mam pojęcia czemu jest wciąż taki popularny…

Strona IE-compatible? Nigdy w życiu!

Zrobiłem nowy system rejestracji dla kinomaniaka. Zamysł jest taki, iż po po kliknięciu pokawia się formularz rejestracji za pomocą AJAXa. Wszystko jest ok, działa dobrze we wszystkich przeglądarkach. Na koniec pokusiłem się jeszcze o kompatybilność z IE. I od razu od pierwszej minuty mur oporowy. Po oloło 2/3 dnia udało mi się rozgraniczcyc niedziałanie do 2 głównych problemów:

  1. IE nie czyta <script> w innerHTML
  2. IE nie czyta <form> w innerHTML

Po kolejnej godzinie szukania udało mi się znaleźć odpowiedź na pierwsze pytanie. Do skryptu wystarczy dodać parametr defer=”defer”. Dobra, tyle jeszcze mogę zrobić. Może i użytkownicy tej pięknej pseudoprzeglądarki będą mogli podziwiać nowy interface :].

A jednak nie. Jedynym sposobem, by w IE dynamicznie dodać form, to jest popraz createElement(”form”); Tak więc - żegnaj IE.

Prosty wniosek: aby napisać cokolwiek pod IE, to trzeba być masochistą.

PS. Jeśli jednak ktoś sposób jak dodać <form> poprzez innerHTML w IE, to go chętnie poznam ;)

UPDATE: A jednak się da :) Oczywiście IE musi po swojemu, odwrotnie niż reszta. Działający fragment kodu prezentuje się następująco:
if(navigator.userAgent.match(/IE/)) {
thisObj.appendChild(div);
$(’superbox_site’).innerHTML = obj.responseText;
} else {
div.innerHTML = obj.responseText;
thisObj.appendChild(div);
}

Różnica jest po prostu taka, że IE musi dostać tekst po dodaniu elemntu do DOM, natomiast pozostałe przeglądarki odwrotnie.

Warto ogladać telegry

… chociażby dla takich perełek :)

kątakt

Albo też genialne były działania arytmetyczne w dziewczynach w bikini. Na pytania w rodzaju “ile to jest 5+2*3” padały odpowiedzi “Yyyy… Czy to jest jeden kropka sześć sześć sześć sześć sześć siedem?:) Echh… to były czasy…

Opera jest zła.

I głupia.

Oto prosty przykład. Taki sobie malutki kod:
<input type="text" name="field" value="input #1" />
<input type=”text” id=”field” name=”field” value=”input #2″ />
<input type=”button” onclick=”alert(document.getElementById(’field’).value)” value=”click me!” />

Każdy w miarę inteligenty człowiek powie, że wynikiem powinno być okienko z tekstem “input #2“. Firefox też tak powie. Ale bynajmniej nie Opera. Jej zdaniem powinno być “input #1“. W końcu czemu niby warto zwracać uwagę na atrybut id=”"?

Ten taki idiotyzm Opery właśnie mnie kosztował jakieś dwie godziny pracy i szukania błędu :-/

UPATE: No i się udało. Opera to poprawi :)