<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-661169361426288370</id><updated>2011-12-29T15:42:10.021-08:00</updated><category term='weblabor tuning userscript'/><category term='expressions'/><category term='peekaboo'/><category term='IE bug'/><category term='css'/><category term='datepicker'/><category term='border model'/><category term='infinite scrolling'/><category term='workaround'/><category term='ie6'/><category term='bug'/><category term='border-spacing'/><category term='ie7'/><category term='steam'/><category term='IE'/><category term='cellspacing'/><category term='cellpadding'/><category term='extjs'/><category term='hover'/><category term='nagyon naon filter userscript'/><title type='text'>Vacskamati's daily code snippet</title><subtitle type='html'>...or whatever. Casual posts in webdev topics</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-2910821777947938066</id><published>2010-05-07T14:41:00.000-07:00</published><updated>2010-05-25T16:58:19.636-07:00</updated><title type='text'>How to allow trailing slash in urls in Symfony (1.4)</title><content type='html'>Symfony's routing system is made so it doesn't allow trailing slashes. It's really a problem, because it can't be solved through just some rewrite rule in .htaccess, because the request path info is not coming from .htaccess (but from the $_SYSTEM array).&lt;br /&gt;&lt;br /&gt;Of course there is an easy solution. Symfony's factory architecture makes it easy to extend or modify built-in functionality. All you have to do is to change the routing class in factories.yml and prepare that class:&lt;br /&gt;&lt;br /&gt;/apps/frontend/config/factories.yml:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;all:&lt;br /&gt;  routing:&lt;br /&gt;    # class: sfPatternRouting&lt;br /&gt;    class: myPatternRouting&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Create the class:&lt;br /&gt;apps/frontend/lib/myPatternRouting.class.php&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;class myPatternRouting extends sfPatternRouting&lt;br /&gt;{&lt;br /&gt;  protected function normalizeUrl($url)&lt;br /&gt;  {&lt;br /&gt;    $url = parent::normalizeUrl($url);&lt;br /&gt;&lt;br /&gt;    // remove trailing slash&lt;br /&gt;    $url = preg_replace('/\/$/', '', $url);&lt;br /&gt;&lt;br /&gt;    return $url;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Okey, this is it.&lt;br /&gt;&lt;br /&gt;But maybe it's a better way to catch the flow in an earlier point. Because this way, though routing will parse urls with trailing slashes fine, but calls to $request-&gt;getPathInfo() will still give the urls with the trailing slashes. It can has some unwanted side effects. It's better if the whole framework sees the request url as if it had no trailing slash.&lt;br /&gt;&lt;br /&gt;What to do for that? Change the request class instead of the routing.&lt;br /&gt;&lt;br /&gt;/apps/frontend/config/factories.yml:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;all:&lt;br /&gt;  routing:&lt;br /&gt;    class: sfPatternRouting&lt;br /&gt;&lt;br /&gt;  request:&lt;br /&gt;    class: myWebRequest&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;apps/frontend/lib/myWebRequest.class.php&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;class myWebRequest extends sfWebRequest&lt;br /&gt;{&lt;br /&gt;  public function getPathInfo()&lt;br /&gt;  {&lt;br /&gt;    $pathInfo = parent::getPathInfo();&lt;br /&gt;&lt;br /&gt;    // cut off trailing slash&lt;br /&gt;    $pathInfo = preg_replace('/\/$/', '', $pathInfo);&lt;br /&gt;&lt;br /&gt;    return $pathInfo;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-2910821777947938066?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/2910821777947938066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2010/05/how-to-allow-trailing-slash-in-urls-in.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/2910821777947938066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/2910821777947938066'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2010/05/how-to-allow-trailing-slash-in-urls-in.html' title='How to allow trailing slash in urls in Symfony (1.4)'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-3952655413787848934</id><published>2010-04-28T04:51:00.000-07:00</published><updated>2010-04-28T04:55:24.618-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='steam'/><category scheme='http://www.blogger.com/atom/ns#' term='infinite scrolling'/><title type='text'>Infinite scrolling</title><content type='html'>&lt;p&gt;I know this is the new magic, but c'mon.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;embed src="http://www.youtube.com/v/imQd1p5yKVY&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;From 0:30, i'm constantly holding the END key down.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-3952655413787848934?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/3952655413787848934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2010/04/infinite-scrolling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/3952655413787848934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/3952655413787848934'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2010/04/infinite-scrolling.html' title='Infinite scrolling'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-2992596651247480404</id><published>2008-12-07T04:46:00.000-08:00</published><updated>2009-03-02T05:00:19.069-08:00</updated><title type='text'>Kényszeres poénkodás szakmai bevezető anyagokban</title><content type='html'>Ennek a posztnak talán a vacskamati.blog.hu-n volna a helye, de mivel a weblabor egy újabb cikke kapcsán írom, mégis ide kerül.&lt;br /&gt;&lt;br /&gt;Bár örökzöld a téma, mostanában mintha egyre több hangsúlyt kapna a modorosságok különböző előfordulásainak online tárgyalása. Csak két referencia: modoros.blog.hu, és az épp legutóbbi posztjukban linkelt matula-cikk: http://matula.hu/index.php?section=article&amp;rel=35&amp;id=418.&lt;br /&gt;&lt;br /&gt;Hát ehhez a témához tenném hozzá a magam szemelvényét, egy meglehetősen idegesítő állatfajt: a szakmai cikkekben való kényszeres jópofiskodást. Emlékszem, régen, középiskolában írtam még egy hosszú helpet a Dos Navigator nevű shellhez. Az egész egy jó hosszú írásbeli showműsor volt. Szerencsére ma már nincs meg, így ha akarnám se tudnám pontosabban felidézni. És most sem tudom önmagamat teljesen kivonni ez alól, visszaolvasva egy-két cikkemet, néhány szófordulatot igencsak kivágnék a fenébe.&lt;br /&gt;&lt;br /&gt;Érdekes azért ennek a nyelvi/lélektani okrendszere. Az ember egy szakmai anyagban, &lt;span style="font-style:italic;"&gt;posztban&lt;/span&gt; azzal szembesül, hogy nem egyenletes a téma mélysége, számos dolgon át kell ugrania, és egyéb szövegműveleteket kell végeznie, hogy a kellő pontra tudjon koncentrálni, s erről nem árt tájékoztatni is az olvasót. Ilyenkor az előadó önreflexiót gyakorol. Más oldalról meg nyilvánvalóan segíti is a befogadást az informális hangnem.&lt;br /&gt;&lt;br /&gt;Külföldi példákon is látni ezt, és ahogy nézem, ez egy ízléses fokig valóban hasznos jelenség. Kifejezetten a szakmai anyagokról beszélek, blogposztokról, tutorialokról, bevezetőkről, melyekben a poszt írója beleképzeli magát az olvasó helyébe, s mintegy felfedező túrát kínál neki. Szóbeli előadásokban, webcastokban ez talán kissé kevésbé szokott megjelenni, talán mert a szóbeliség már eleve hozzáadja a kellő mértékű informalitást. És persze a jó konferencia-előadók mindenre képesek.&lt;br /&gt;&lt;br /&gt;Sajnos a magyar helyzet más, legalábbis ami a webfejlesztői szakmai közösséget illeti. Nálunk, úgy látszik, egy normális &lt;a href="http://drupal.hu/hirek/20080313/hojtsy-gabor-drupal-6-sminkelese"&gt;Drupal-előadást&lt;/a&gt; nem lehet összedobni anélkül, hogy ne menne el a fele gyerekes, ripacs jópofizással. Helyben biztos jó a hangulat, de magának az előadásnak az értékéhez nem hogy nem tesz hozzá, hanem hogynemondjam lenullázza.&lt;br /&gt;&lt;br /&gt;Ugyanez mondható a weblabor legtöbb cikkéről, modorosság a köbön. Épp a &lt;a href="http://weblabor.hu/cikkek/javascript-metaprogramozas"&gt;legutóbbi cikkük&lt;/a&gt; hozzászólásaival van tele az RSS-em, emiatt is nem állhattam meg kiírnom magamból ezt a panaszt.&lt;br /&gt;&lt;br /&gt;Olvashatatlan szar az egész. Kezdjük ott, hogy az illető rossz címet adott, amit aztán maga is leír, talán jobb lett volna valami olyasmi, hogy "Összeszedtem minden javascript tudásomat", vagy "De érdekes ez a javascript, gyertek, fedezzük fel együtt". Össze-vissza csapong, amit szintén leír. Érthetetlenül ad elő, túlbonyolított példákkal, amit aztán tanáruras vicceskedéssel kompenzál: „Mielőtt egered elkalandozna a jobb felső sarokba”. Bah, és ez egy úgymond szakmai fórum. Helyesírás szar. Ugyanakkor persze ott vannak az elmaradhatatlan :-), az idióta vigyorgást mutató szmájlik :-), alább a hozzászólásokban is :-), ahol kivesézik az egész hiányosságait :-), hehe, hiányosságait :-), minden mondat után :-). "Fú, de logikusak vagyunk!"&lt;br /&gt;&lt;br /&gt;"Kemény, nem? Ezen a példán egy napig rágódtam, hogy mi is lenne az öröklődés absztrakciójához illő tudományos akármi. Jó, hát nem nagyon sikerült megtalálni a megfelelő alanyt, de legalább kis kutyusok aranyos képe lebeg előttünk!"&lt;br /&gt;&lt;br /&gt;Az, kemény... Látszik, hogy a szerző ilyen ünnepként, felfokozott, beleélt műsorként képzeli el a műve befogadását. Mint a kis kamasz felelésnél, aki kiherélt idétlenkedéssel üti el a zavarát, hogy ő most &lt;span style="font-style:italic;"&gt;reflektorfényben van&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;"Lehet kicsit tömény, de én értem, éljen :-)"&lt;br /&gt;&lt;br /&gt;Az ilyen mondatok a középsulis számtechtanáromra emlékeztetnek, pf, hagyjuk is. Maradjunk annyiban, hogy nem mindenki tud magyarázni. De aki erre büszke... És mondom, csak a szakmai hiányosságok és az összevisszaság kompenzálásáról van szó.&lt;br /&gt;&lt;br /&gt;„Nos, ez lesz a legrövidebb része a cikknek, ugyanis minimum külön cikket érdemelne, és jómagam sem vagyok eléggé olvasott ahhoz, hogy egy ilyen témába belevágjak. Jó, leírhatnánk ide egy két egykét (hát ez nagyon vicces!), de nem tesszük. Akit nagyon érdekel a téma, guglizzon reá!”&lt;br /&gt;&lt;br /&gt;Cikk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-2992596651247480404?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/2992596651247480404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2008/12/knyszeres-ponkods-szakmai-bevezet.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/2992596651247480404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/2992596651247480404'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2008/12/knyszeres-ponkods-szakmai-bevezet.html' title='Kényszeres poénkodás szakmai bevezető anyagokban'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-7686453334543497280</id><published>2008-10-17T17:08:00.000-07:00</published><updated>2010-02-18T17:54:27.121-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='workaround'/><category scheme='http://www.blogger.com/atom/ns#' term='expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>One-time execution of IE CSS expressions</title><content type='html'>You know guys, CSS expressions in IE (6 and 7) is a nice and powerful tool, which offers an excellent way to overcome compatibility issues. Dozens of missing W3C features can be emulated simply by an expression. It's so elegant and comfortable to solve the issues of lack of standards with them. You can make behaviours for :first-child, max-height, :hover, &lt;a href="http://vacskamati.blogspot.com/2007/03/eliminating-cellspacing-and-cellpadding.html"&gt;cellspacing/cellpadding&lt;/a&gt;, different kinds of selector operators etc. Ok, we know that, but hey, &lt;a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_6.html"&gt;they say at Yahoo&lt;/a&gt; that CSS expressions are nasty, they want me to avoid them and instead use javascript. Yahoo says that expressions are evaluated so frequently that that is untenable. Well, the fact is, he's right.&lt;br /&gt;&lt;br /&gt;But I love expressions.&lt;br /&gt;&lt;br /&gt;Last time, I wanted to use the &lt;span style="font-style:italic;"&gt;inherit&lt;/span&gt; value, which is not supported in IE6/7. Pretty tiny problem, the solution is:&lt;pre&gt;&lt;code class="javascript"&gt;.elem {&lt;br /&gt;  background-position: expression(parentNode.style.backgroundPosition);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;The place where class .elem elements appeared was deeply in a tag soup of a complex menu, where some layered CSS sprites inherited the containers background-position, so it was a hit on the responsiveness of the menu hover effect, of course. It got executed on every mouse movement for every menu item in the structure and, overall, thousands times in some seconds.&lt;br /&gt;&lt;br /&gt;What to do now. Yahoo says: „&lt;span style="font-style:italic;"&gt;One way to reduce the number of times your CSS expression is evaluated is to use one-time expressions, where the first time the expression is evaluated it sets the style property to an explicit value, which replaces the CSS expression.&lt;/span&gt;” This sounds exciting, but don't know how to do that. To put it short, someone asks about this in the comments in the above linked Yahoo page, and Steve Souders answers with a &lt;a href="http://stevesouders.com/hpws/onetime-expressions.php"&gt;link to a testpage&lt;/a&gt;. He calls an external function in the expression which function then sets the element's style property:&lt;pre&gt;&lt;code class="javascript"&gt;&amp;lt;script&amp;gt;&lt;br /&gt;function setOnetimeBgcolor(elem) {&lt;br /&gt;  elem.style.backgroundColor = &amp;lt;some calculation&gt;;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;P {&lt;br /&gt;  background-color: expression(setOnetimeBgcolor(this));&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/code&gt;&lt;/pre&gt;This can be rewritten in one expression:&lt;pre&gt;&lt;code class="javascript"&gt;/* It works. */&lt;br /&gt;P {&lt;br /&gt;  background-color: expression(&lt;br /&gt;    new Function('elem', 'elem.style.backgroundColor = &amp;lt;some calculation&gt;;')(this)&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Here we are, this works. The expression will be evaluated only one time. Now comes the interesting part. When I copied this solution in my working context to emulate &lt;span style="font-style:italic;"&gt;inherit&lt;/span&gt; on the background-&lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;position&lt;/span&gt;&lt;/span&gt; property, it didn't work:&lt;pre&gt;&lt;code class="javascript"&gt;/* WON'T WORK */&lt;br /&gt;.elem {&lt;br /&gt;  background-position: expression(&lt;br /&gt;    new Function('e', 'e.style.backgroundPosition = e.parentNode.style.backgroundPosition;')(this)&lt;br /&gt;  );&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;The &lt;span style="font-style:italic;"&gt;inherit&lt;/span&gt; behaviour itself was live, but it was as terribly sluggish as before. I made a test with a counter and it turned out that the expression actually didn't overwrite itself and was getting evaluated continuously. The method failed. But why does it work on Steve Souders' example page?&lt;br /&gt;&lt;br /&gt;After some debugging I've found that, unlike &lt;span style="font-style:italic;"&gt;background-color&lt;/span&gt;, a &lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;background-position expression can't overwrite itself with a static value&lt;/span&gt;&lt;/span&gt;. It seems that CSS properties differ in the manner of which one of them can or cannot overwrite themselves. For example, &lt;span style="font-style:italic;"&gt;background-color&lt;/span&gt; can. &lt;span style="font-style:italic;"&gt;Display&lt;/span&gt; can. &lt;span style="font-style:italic;"&gt;Background-position&lt;/span&gt; can't. &lt;span style="font-style:italic;"&gt;Float&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;height&lt;/span&gt; also can't, but &lt;span style="font-style:italic;"&gt;clear&lt;/span&gt; can...!&lt;br /&gt;&lt;br /&gt;Very interesting, but it's the very truth.&lt;br /&gt;&lt;br /&gt;So now I took an 'assistance' property which is self-overwritable, let this be &lt;span style="font-style:italic;"&gt;clear&lt;/span&gt;. Watch it, it's only used as a dummy assistance property. Then set the value of &lt;span style="font-style:italic;"&gt;background-position&lt;/span&gt; in it, which is not self-overwritable, and lastly overwrote the assistance property. This trick even allows us to avoid function creation:&lt;pre&gt;&lt;code class="javascript"&gt;.elem {&lt;br /&gt;  background-position: inherit;&lt;br /&gt;  *clear: expression(&lt;br /&gt;    style.backgroundPosition = parentNode.style.backgroundPosition,&lt;br /&gt;    style.clear = "none"&lt;br /&gt;    /* debug: */&lt;br /&gt;    , window.expc = window.expc || 0,&lt;br /&gt;    window.defaultStatus = expc++&lt;br /&gt;  );&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;This is it. The menu was absolutely responsive. The expression runs only one time. You can experiment, the debug lines show the number of executions in the browser's status bar. I think it is the recommended way of CSS expression usage with &lt;span style="font-style:italic;"&gt;any&lt;/span&gt; CSS property, when working around compatibility issues.&lt;br /&gt;&lt;br /&gt;It's important to note that you cannot use the underscore hack (_clear) in case of expressions intented only for IE6, because it will run on IE7 too. In such situations you have to separate it by other ways.&lt;br /&gt;&lt;br /&gt;UPDATE&lt;br /&gt;&lt;br /&gt;Yet, it's still not the end, there's another catch. If you remove the debug lines from the above example, IE gently will &lt;span style="font-style:italic;"&gt;hang up&lt;/span&gt;. Put a simple value, e.g. a 0 in place of that, and it will work:&lt;pre&gt;&lt;code class="javascript"&gt;/* Final example, the ultimate way of writing one-time CSS expressions */&lt;br /&gt;&lt;br /&gt;.elem {&lt;br /&gt;  &lt;br /&gt;  /* we want to implement the unsupported 'inherit' value */&lt;br /&gt;  background-position: inherit;&lt;br /&gt;&lt;br /&gt;  /* 'clear' is a dummy property */&lt;br /&gt;  *clear: expression(&lt;br /&gt;&lt;br /&gt;    /* this is the actual assignment */&lt;br /&gt;    style.backgroundPosition = parentNode.style.backgroundPosition,&lt;br /&gt;&lt;br /&gt;    /* overwriting dummy property, 0 needed to avoid crash */&lt;br /&gt;    style.clear = "none", 0&lt;br /&gt;  );&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-7686453334543497280?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/7686453334543497280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2008/10/one-time-execution-of-ie-css.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/7686453334543497280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/7686453334543497280'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2008/10/one-time-execution-of-ie-css.html' title='One-time execution of IE CSS expressions'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-487772255673196780</id><published>2008-10-17T05:37:00.000-07:00</published><updated>2008-10-17T19:17:03.197-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hover'/><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='ie6'/><category scheme='http://www.blogger.com/atom/ns#' term='workaround'/><title type='text'>The IE6 :hover workaround</title><content type='html'>Kids, I've found the best and ultimate workaround solution for the hover problem of IE6. Unfortunately my discovery is a little overdue, because this hackers-heaven product, IE6 gets outdated, so consider this announcement an archaeologist's curiosity. Let's get to the point.&lt;br /&gt;&lt;br /&gt;:hover pseudo selectors only work on links in IE6. You have to make it work on non-link elements, too. What you do? Your first thought is IE's magic equipment, Mr. Expression. You'll be trying, but won't succeed. But project deadline is coming, so you go to your template and hardcode &lt;span style="font-style:italic;"&gt;onmouseover&lt;/span&gt;s and &lt;span style="font-style:italic;"&gt;onmouseout&lt;/span&gt;s in your tag soup. Oh no, you say. Oh no. You cry. Later on you periodically review your code, and your eyes always stop on these&lt;span style="font-style:italic;"&gt; onmouseover&lt;/span&gt;s and &lt;span style="font-style:italic;"&gt;onmouseout&lt;/span&gt;s, and you always cry.&lt;br /&gt;&lt;br /&gt;Ok, seriously, expression works. As it is shown &lt;a href="http://www.visibilityinherit.com/code/ie6-hover-expression.php"&gt;here&lt;/a&gt;. He takes a random css property and gives the javascript onmouseover assignment as a value to it. There's two problems with it. First, it makes the behaviour totally sluggish because the assigment is interpreted i-don't-know-how-many times in every second. And it continuously creates new functions, and it's beeing garbage collected etc. Second, no need to play with the classnames.&lt;br /&gt;&lt;br /&gt;Simply put:&lt;pre&gt;&lt;code class="css"&gt;a.dropdown-item {&lt;br /&gt;  _m: expression(onmouseover = onmouseover || new Function("$(this).down().style.display = 'block'") : '');&lt;br /&gt;  _n: expression(onmouseout = onmouseout || new Function("$(this).down().style.display = 'none'") : '');&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;You see? We check if the assigment has already done and hence it will be blazing fast. That's the big idea.&lt;br /&gt;&lt;br /&gt;Essentially that's all that I wanted to share with you, my precious fellows. Two more notes: String assigment to the onmouseover and onmouseout properties won't work. You have to create functions explicitely. Lastly, no need for "this." prefix, however this is the nice way, but remember, in hacks there's no nice way.&lt;br /&gt;&lt;br /&gt;UPDATE&lt;br /&gt;&lt;br /&gt;Fine, an even more beautiful snippet is &lt;a href="http://subtlegradient.com/articles/2008/09/06/experimental-ie-css-expressions"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-487772255673196780?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/487772255673196780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2008/10/ie6-hover-workaround.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/487772255673196780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/487772255673196780'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2008/10/ie6-hover-workaround.html' title='The IE6 :hover workaround'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-8177740543523046659</id><published>2008-09-07T05:07:00.000-07:00</published><updated>2008-09-29T16:24:41.630-07:00</updated><title type='text'>Weblaboros hülyeségek</title><content type='html'>Túl sok volt a szabadidőm, úgyhogy most írok egy posztot a weblabor.hu hülyeségeiről. A Weblabor az egy webfejlesztői fórum.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;UPDATE -- 2008.09.30. 1:14:58&lt;br /&gt;&lt;br /&gt;A Weblabor egy-két héttel ezelőtt megújult, így az alábbi listából a 2-es és az 5-ös pont érvényét vesztette. Továbbá mivel hivatkozást kaptam erre a posztra, meg kell jegyeznem, hogy ez itt csak egy alulszociált elme fröcsögése, természetesen azért kapja mindezt a Weblabor, mert &lt;span style="font-style:italic;"&gt;szeretem&lt;/span&gt;.&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. „Hozzászólás témája”&lt;br /&gt;&lt;br /&gt;(Topik itt: http://weblabor.hu/forumok/temak/19242)&lt;br /&gt;&lt;br /&gt;Színtiszta hülyeség. Eleve ugye egy topikban vagyunk, vagyis a hozzászólásom témája nyilvánvalóan a topikcím. Ezen kívül meg nyilvánvalóan reagálok valakinek a hozzászólására, vagy a posztra. Az ez (&lt;span style="font-style: italic;"&gt;reagálás&lt;/span&gt;) alatti absztrakciós szinten már csak a mondanivaló van, a kettő közé betuszakolni egy címet még, egy folyamatos diskurzusban, nettó hülyeség. Erőltetés. De elterjedt az a belterjes tévhit, hogy ez &lt;span style="font-style: italic;"&gt;hasznos&lt;/span&gt;. Hát, hasznos lenne még az is, biztos, ha esetleg minden hozzászóláshoz kötelezően képillusztrációt is kéne mellékelni. Ésszerűtlen trade-off.&lt;br /&gt;&lt;br /&gt;2. RSS&lt;br /&gt;&lt;br /&gt;(Topik itt: http://weblabor.hu/forumok/temak/19242)&lt;br /&gt;&lt;br /&gt;Hogyaszongya Drupal, ezért nem képesek megvalósítani, hogy egy fórumhozzászólásokról szóló RSS-ben a From mező (author stb., kinek milyen olvasója van) a hozzászóló nickjét tartalmazza. Ez kb. 3 perc munka, aki már dolgozott valaha RSS-sel. Ja de hogy Drupal, meg hogy inkább frissítés.&lt;br /&gt;&lt;br /&gt;3. Nagybetűs névmások és névutók&lt;br /&gt;&lt;br /&gt;(Topik itt: http://weblabor.hu/forumok/temak/19382)&lt;br /&gt;&lt;br /&gt;Belterjes helyesírási konvenció a tiszteletadásra. Jószándékú hülyeség. Azért hülyeség, mert csak a szakmaiság rovására megy, ha az egyébként favorizált (bár gyengén követett) helyesírás normájától így eltérnek. Másrészt meg van benne egy kis hiperkorrekció, meg egy kis kompenzáció a flame-kultúrával szemben. Akárki akármit mond.&lt;br /&gt;&lt;br /&gt;4. hacker/cracker&lt;br /&gt;&lt;br /&gt;(Topik itt: http://weblabor.hu/forumok/temak/22315)&lt;br /&gt;&lt;br /&gt;Ezek képesek voltak egy topikcímben átszerkeszteni a hacker szót crackerre, mert hogyaszongya a nagykönyv szerint a cracker a csúnya fiú, a hacker meg a jó fiú. De a hacker is lehet csúnya fiú, de mivel a cracker biztos specifikusabb, hát tekintsük ezt itten – mégiscsak egy „szakmai” fórumban vagyunk – &lt;span style="font-style: italic;"&gt;hibának&lt;/span&gt;, amit ki kell javítani. És a csóka &lt;a href="http://weblabor.hu/forumok/temak/22315#comment-55439"&gt;leírja&lt;/a&gt;, hogy &lt;span style="font-style:italic;"&gt;ja, hát ha mindezt te is tudod, akkor végülis nincs is hiba, de én feltételeztem, hogy te nem tudod, ezért jól beleugattam, nehogy véletlenül a közvélemény félreértsen engem, jó fiút&lt;/span&gt;. Istenem, butaság, belterjesség a neved.&lt;br /&gt;&lt;br /&gt;5. Ó, hirdetés&lt;br /&gt;&lt;br /&gt;(Topik itt: http://weblabor.hu/blog/20080502/munka-rovat-moderacio)&lt;br /&gt;&lt;br /&gt;Hát ez majdnem lemaradt. A kedves szerkesztők tudatában valamiért megszilárdult egy olyan képzet, nyelvi asszociáció, mely szerint a &lt;span style="font-style: italic;"&gt;konkrét&lt;/span&gt; szó azt jelenti, hogy &lt;span style="font-style:italic;"&gt;nem projektmunka&lt;/span&gt;. Ennek tudatában vígan törölgetik azokat a hirdetéseket, melyekről úgy gondolják, hogy az &lt;span style="font-style:italic;"&gt;nem konkrét&lt;/span&gt;. Az, hogy egyesek ezt nem értik? Hát, biztos nem elég lojálisak a nyájasan belterjes szerkesztői inkompetenciához.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-8177740543523046659?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/8177740543523046659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2008/09/weblaboros-hlyesgek.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/8177740543523046659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/8177740543523046659'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2008/09/weblaboros-hlyesgek.html' title='Weblaboros hülyeségek'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-4987568692555021030</id><published>2008-04-03T20:23:00.000-07:00</published><updated>2008-04-11T03:33:10.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nagyon naon filter userscript'/><title type='text'>Naon filter updated</title><content type='html'>Az eredeti bejegyzés &lt;a href="http://vacskamati.blogspot.com/2007/12/naon-filter.html"&gt;itt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- Kicsit jobb és egyszerűbb metódus.&lt;br /&gt;- Csak *.hu alatt keres.&lt;br /&gt;- Kicseréli az ajax-al típusú borzalmakat is.&lt;br /&gt;- A document.title-t is szűri.&lt;br /&gt;- update 2008.04.11.: index.hu Anyádat rovat átnevezve "Hülye vagyok"-ra.&lt;br /&gt;&lt;br /&gt;Szóval hajrá.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://serverus.hu/nagyon.user.js"&gt;nagyon.user.js&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-4987568692555021030?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/4987568692555021030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2008/04/naon-filter-updated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/4987568692555021030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/4987568692555021030'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2008/04/naon-filter-updated.html' title='Naon filter updated'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-8314496115433031243</id><published>2008-04-02T18:57:00.000-07:00</published><updated>2008-05-25T21:26:16.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='extjs'/><category scheme='http://www.blogger.com/atom/ns#' term='datepicker'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><title type='text'>ExtJS DatePicker patch for Firefox 3</title><content type='html'>ExtJS's DatePicker is broken in FF3 (for the time being up to RC1).&lt;br /&gt;&lt;br /&gt;Here is a patch. This is for ExtJS 2.0.2.&lt;br /&gt;&lt;br /&gt;ext-all-debug.js: after line 17999 insert the highlighted statement below:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;el.className = "x-date-picker";&lt;br /&gt;&lt;span style="background:yellow"&gt;el.style.width = '10px';&lt;/span&gt;&lt;br /&gt;el.innerHTML = m.join("");&lt;/pre&gt;&lt;br /&gt;ext-all.js is minified, so you have to search for "x-date-picker", then you'll see that the statement looks a bit different. Thus, we modify the patch also: &lt;pre&gt;B.className="x-date-picker";&lt;span style="background:yellow"&gt;B.style.width = '10px';&lt;/span&gt;B.innerHTML=C.join("");...&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-8314496115433031243?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/8314496115433031243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2008/04/extjs-datepicker-patch-for-firefox-3.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/8314496115433031243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/8314496115433031243'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2008/04/extjs-datepicker-patch-for-firefox-3.html' title='ExtJS DatePicker patch for Firefox 3'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-8914583599496291503</id><published>2007-12-25T18:15:00.000-08:00</published><updated>2007-12-25T18:26:25.057-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nagyon naon filter userscript'/><title type='text'>Naon filter</title><content type='html'>Ha téged is idegesít a lazázó &lt;span style="font-style:italic;"&gt;naon&lt;/span&gt;ozás, íme egy userscript, ami szűri, azaz &lt;span style="font-style:italic;"&gt;nagyon&lt;/span&gt;ná változtatja a &lt;span style="font-style:italic;"&gt;naon&lt;/span&gt;okat.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://serverus.hu/nagyon.user.js"&gt;nagyon.user.js&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-8914583599496291503?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/8914583599496291503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2007/12/naon-filter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/8914583599496291503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/8914583599496291503'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2007/12/naon-filter.html' title='Naon filter'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-2140683441856078763</id><published>2007-11-20T19:27:00.000-08:00</published><updated>2010-08-30T12:50:58.531-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='peekaboo'/><category scheme='http://www.blogger.com/atom/ns#' term='IE bug'/><category scheme='http://www.blogger.com/atom/ns#' term='ie7'/><title type='text'>Peek-a-boo in IE 7</title><content type='html'>They say at &lt;a href="http://www.positioniseverything.net/explorer/peekaboo.html"&gt;positioneverything.net&lt;/a&gt; that the so-called peek-a-boo bug has been suppressed in IE7. Actually, &lt;a href="http://dab.extra.hu/peekaboo/kozosseg/ajandekbolt/"&gt;it's not&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-2140683441856078763?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/2140683441856078763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2007/11/peek-boo-in-ie-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/2140683441856078763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/2140683441856078763'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2007/11/peek-boo-in-ie-7.html' title='Peek-a-boo in IE 7'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-3559623653607903992</id><published>2007-10-06T02:07:00.000-07:00</published><updated>2008-12-09T23:14:12.946-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weblabor tuning userscript'/><title type='text'>weblabor tuning userscript</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_INpeigx3XNQ/RzojdSJjgkI/AAAAAAAAAEM/6_esUpBUOkk/s1600-h/Clipboard01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_INpeigx3XNQ/RzojdSJjgkI/AAAAAAAAAEM/6_esUpBUOkk/s400/Clipboard01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5132453711337194050" /&gt;&lt;/a&gt;&lt;br /&gt;A script két részből áll:&lt;br /&gt;&lt;br /&gt;- Hozzászólásszerkesztő autosubject: automatikusan kitölti a "téma" mezőt a komment szövegtörzsének elejével. Hárompont ott figyel a végén, szavakat nem töri, csak az első mondatig keres, köszönéseket kihagyja. Ha manuálisan megváltoztatjuk a témát, az automatika kikapcsol. Be- kikapcs állapota sárga háttérrel jelezve.&lt;br /&gt;&lt;br /&gt;- Követő tuning: Gmail-szerű hozzászólás-előnézet, mouseover-re a teljes hozzászólás látszik.&lt;br /&gt;&lt;br /&gt;Böngészők: FF, Opera&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Letöltés:&lt;br /&gt;&lt;br /&gt;Weblabor tuning -- &lt;a href="http://serverus.hu/autosubject.user.js"&gt;autosubject.user.js&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-3559623653607903992?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/3559623653607903992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2007/10/weblabor-tuning-userscript.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/3559623653607903992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/3559623653607903992'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2007/10/weblabor-tuning-userscript.html' title='weblabor tuning userscript'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_INpeigx3XNQ/RzojdSJjgkI/AAAAAAAAAEM/6_esUpBUOkk/s72-c/Clipboard01.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-4487214037172020381</id><published>2007-07-26T16:46:00.000-07:00</published><updated>2008-12-09T23:14:13.525-08:00</updated><title type='text'>Making custom tabs in CSS</title><content type='html'>Tab customization is a common task in the CSS world. Obviously this is done by using background images. The point of the problem is that you have to make it flexible, so that it follows the width of the tab caption. It's a bit related to the skinning issues of UI systems, where you have to split the template to many small parts (borders, corners etc.).&lt;br /&gt;&lt;br /&gt;Well, in CSS, for the classic and average tab customization, image splitting is simply not needed. Though generally CSS coders don't recognize this. They split the tab image in two, or in the worst case, three parts: a left side, a middle part, and a right side. But, again, this is unnecessary.&lt;br /&gt;&lt;br /&gt;Just look at this simple markup:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_INpeigx3XNQ/Rqk09CHXJSI/AAAAAAAAADM/FWfaR-VWT74/s1600-h/Clipboard01.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_INpeigx3XNQ/Rqk09CHXJSI/AAAAAAAAADM/FWfaR-VWT74/s400/Clipboard01.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5091659076863468834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_INpeigx3XNQ/Rqk7fyHXJTI/AAAAAAAAADU/0Jmay8ffvws/s1600-h/Clipboard02.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_INpeigx3XNQ/Rqk7fyHXJTI/AAAAAAAAADU/0Jmay8ffvws/s400/Clipboard02.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5091666270933689650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A tab link is an &amp;lt;a&gt; element, and the caption is wrapped in a &amp;lt;span&gt;. Both have the same custom background image, which is the tab template.&lt;br /&gt;It's wide enough to make the long captions fit in. So in one element the tab image is left aligned, while in the other is right aligned, so we see both sides of the template. But how is that one layer doesn't overlap the other side?&lt;br /&gt;&lt;br /&gt;This is where if a CSS designer isn't smart enough, he or she cuts off one (e.g. the left) side of the image to make it overlayed above the other layer (which has the right aligned background). Because he/she doesn't realise that cutting also can be performed with CSS. See that blue rectangle around the Search tab? That is the span element, which has the left aligned background. It has a 12px right-margin to leave space for the underlying &amp;lt;a&gt; tag showing the right side.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-4487214037172020381?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/4487214037172020381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2007/07/making-custom-tabs-in-css.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/4487214037172020381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/4487214037172020381'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2007/07/making-custom-tabs-in-css.html' title='Making custom tabs in CSS'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_INpeigx3XNQ/Rqk09CHXJSI/AAAAAAAAADM/FWfaR-VWT74/s72-c/Clipboard01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-661169361426288370.post-1814811843869595656</id><published>2007-03-10T05:09:00.000-08:00</published><updated>2009-05-05T08:18:00.185-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='border-spacing'/><category scheme='http://www.blogger.com/atom/ns#' term='IE bug'/><category scheme='http://www.blogger.com/atom/ns#' term='cellpadding'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><category scheme='http://www.blogger.com/atom/ns#' term='cellspacing'/><category scheme='http://www.blogger.com/atom/ns#' term='border model'/><title type='text'>The IE border-spacing workaround</title><content type='html'>Everyone knows these two HTML table tag attributes: cellpadding and cellspacing. And everyone hates the annoying necessity of these attributes in the CSS era. Well, developers, who has looked after what's up now about this issue, have learned that fortunately the cellpadding attribute is safely substitutable with the padding value of the table cells.&lt;br /&gt;&lt;br /&gt;But what about cellspacing?&lt;br /&gt;&lt;br /&gt;Cellspacing can also be omitted if you work with the border-collapsing model, because IE supports this model in CSS. (Or maybe not; we'll come back to this later.) Anyway, just put &lt;span&gt;&lt;span&gt;border-collapse: collapse&lt;/span&gt;&lt;/span&gt; in your table's style, and all the space between your table cells will be gone, and the adjacent borders will collapse to one simple border.&lt;br /&gt;&lt;br /&gt;(For those of you who didn't fully get the picture, here is a nice &lt;a href="http://dbaron.org/css/test/tborder1"&gt;illustration&lt;/a&gt; of the two border models.)&lt;br /&gt;&lt;br /&gt;Problems will arise when you want to use the separated borders model. In this mode the CSS engine (browser) is expected to apply the td border styles separatedly to every single table cell, just as these were simple divs. We can think of this as the normal behaviour, and the collapsing model as a special case, if only because that the former is the initial (default) value in the CSS specs. When you're in the 'separate' model, you can control the space between your table cells with the border-spacing value of the table. You can set the horizontal and the vertical spacing.&lt;br /&gt;&lt;br /&gt;But the problem is that IE doesn't support the CSS border-spacing attribute. Instead it puts a fixed 2px space between the cells. This is the point, where normally a developer gives up, becomes a bit melancholy, and puts back the cellspacing attribute into the HTML code. The conclusion: cellspacing can't be controlled by CSS (cross-browser).&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Some good news&lt;/h4&gt;However, there is some consolation: generally you don't need that. Usually we only need to eliminate that bad looking space between the cells, and this can be achieved by CSS, even in IE. And the good news is that not only in the 'collapse' model but even in the separated!&lt;br /&gt;&lt;br /&gt;Say, we want a table, in which all table rows have a red 1px bottom border, and a pink 1px top border (we want it to look a bit like buttons). 'Collapse' model is not an option now. This is a situation, where we have to use the 'separate' model with 0-width border-spacing between the cells.&lt;br /&gt;&lt;br /&gt;For this the standard CSS code is as follows:&lt;br /&gt;&lt;pre&gt;&lt;code class="css"&gt;table {&lt;br /&gt; border-collapse: separate;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td {&lt;br /&gt; border-top: 1px solid red;&lt;br /&gt; border-bottom: 1px solid pink;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;It works in the standard compliant browsers, but what about IE?&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;That's a Feature, Not a Bug&lt;/h4&gt;Thankfully, IE is so buggy, that one bug helps to fix an other. So, what to do if I want to achieve a zero-spacing separating model? Exploit the bugs in the collapsing model! IE's border collapsing works fine, but magically gets switched off, if you give a 'position: relative' style to the table cells. If you do this, the browser jumps back to the &lt;span&gt;separated model, width 0 cellspacing&lt;/span&gt;! Thx, Mr. Bug.&lt;br /&gt;&lt;pre&gt;&lt;code class="css"&gt;table {&lt;br /&gt; border-collapse: separate;&lt;br /&gt; border-spacing: 0;&lt;br /&gt; *border-collapse: collapse; /* hack is needed for IE7 also */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td {&lt;br /&gt; border-top: 1px solid red;&lt;br /&gt; border-bottom: 1px solid pink;&lt;br /&gt; *position: relative;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;This way, you don't need any of those ugly HTML tag attributes, while working in either a collapsed, or a 0-cellspacing separated borders model. Have fun!&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;UPDATE&lt;/h4&gt;knakts noted in his comment that this workaround provides solution only to those cases in which the border-spacing value is zero. And I felt sympathy for him/her. Thus, as a matter of urgency, I researched another workaround, which brings us closer to the heaven.&lt;br /&gt;&lt;br /&gt;Here it is:&lt;br /&gt;&lt;pre&gt;&lt;code class="css"&gt;table {&lt;br /&gt; border-collapse: separate;&lt;br /&gt; border-spacing: 5px;&lt;br /&gt; *border-collapse: expression('separate', cellSpacing = '5px');&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Still not perfect, because you can't differentiate vertical and horizontal spacing, but, as I said, one small step to the happiness.&lt;br /&gt;&lt;br /&gt;knakts, don't be melancholic!&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;UPDATE 2 on 2009.05.05.&lt;/h4&gt;Check out &lt;a href="http://vacskamati.blogspot.com/2008/10/one-time-execution-of-ie-css.html"&gt;this&lt;/a&gt;. An article about how to make it really behave like a one-time-running configuration, instead of the usual CSS expression behaviour with the well-known huge performance hit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/661169361426288370-1814811843869595656?l=vacskamati.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vacskamati.blogspot.com/feeds/1814811843869595656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vacskamati.blogspot.com/2007/03/eliminating-cellspacing-and-cellpadding.html#comment-form' title='46 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/1814811843869595656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/661169361426288370/posts/default/1814811843869595656'/><link rel='alternate' type='text/html' href='http://vacskamati.blogspot.com/2007/03/eliminating-cellspacing-and-cellpadding.html' title='The IE border-spacing workaround'/><author><name>sarimarton</name><uri>http://www.blogger.com/profile/14867423338577253381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp3.blogger.com/_INpeigx3XNQ/R4bb5hdpAUI/AAAAAAAAAE4/A99Cu99UxBQ/S220/avatar.jpg'/></author><thr:total>46</thr:total></entry></feed>
