<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkEFSXY_fCp7ImA9WhRWEk8.&quot;"><id>tag:blogger.com,1999:blog-22491946</id><updated>2011-12-30T08:03:38.844+01:00</updated><category term="VBScript" /><category term="Atom" /><category term="WAP" /><category term="Mobile" /><category term="jQuery" /><category term="XSLT" /><category term="Performance" /><category term="SQL" /><category term="CSS" /><category term="OpenXML" /><category term="MediaWiki" /><category term="bug" /><category term="RDFa" /><category term="MSXML" /><category term="AJAX" /><category term="ASP" /><category term="XML" /><category term="CSV" /><category term="HIJAX" /><category term="Blogger" /><category term="HTTP" /><category term="PHP" /><category term="DOM" /><category term="WordProcessingML" /><category term="Charts" /><category term="Firefox" /><category term="Chrome" /><category term="HTML" /><category term="You've asked for it" /><category term="Internet Explorer" /><category term="JavaScript" /><category term="Facebook" /><title type="text">Ajax, XML and Xslt tips &amp; tricks</title><subtitle type="html">Tips &amp; tricks for programmers entering the rough waters of Ajax, XML and Xslt.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ajaxandxml.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>206</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><feedburner:info uri="ajaxxslt" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/posts/default" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fajaxandxml.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fajaxandxml.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fajaxandxml.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://ajaxandxml.blogspot.com/feeds/posts/default" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fajaxandxml.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fajaxandxml.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fajaxandxml.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry gd:etag="W/&quot;DEEMQXg4fyp7ImA9Wx5aFk4.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-6365641377711196799</id><published>2010-11-13T09:24:00.000+01:00</published><updated>2010-11-13T09:24:40.637+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-13T09:24:40.637+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><title>IE8 has a right table border problem on JavaScript-inserted cells</title><content type="html">&lt;p&gt;If you use collapsed table borders on with IE8 and insert or delete cells in the table with JavaScript, the right border will be missing. For example, when you insert a row in a table this CSS ...&lt;/p&gt;
&lt;pre name="code" class="css"&gt;.fmtTable { border-collapse: collapse; width: 100%; border: 1px solid #D0BFAB; }&lt;/pre&gt;
&lt;p&gt;... with the following jQuery code ...&lt;/p&gt;
&lt;pre name="code" class="jscript"&gt;$("&amp;lt;tr&amp;gt;&amp;lt;td colspan='2'&amp;gt;Test&amp;lt;/td&amp;gt;&amp;lt;/tr").insertBefore("table.fmtTable tr:last");&lt;/pre&gt;
&lt;p&gt;... the right border will disapper.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: declare an extra class &lt;em&gt;last &lt;/em&gt;...&lt;/p&gt;
&lt;pre name="code" class="css"&gt;table.fmtTable .last { border-right: 1px solid #D0BFAB; }&lt;/pre&gt;
&lt;p&gt;... and apply it to every &lt;em&gt;last &lt;/em&gt;cell in the table:&lt;/p&gt;
&lt;pre name="code" class="jscript"&gt;$("table.fmtTable tr").find("td:last").addClass("last");&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-6365641377711196799?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kRbWcjLFKk0DPcNlaTeIASsK2yI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kRbWcjLFKk0DPcNlaTeIASsK2yI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kRbWcjLFKk0DPcNlaTeIASsK2yI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kRbWcjLFKk0DPcNlaTeIASsK2yI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=xtN0npKmv4Q:2Z9oJh4ClKw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=xtN0npKmv4Q:2Z9oJh4ClKw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=xtN0npKmv4Q:2Z9oJh4ClKw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=xtN0npKmv4Q:2Z9oJh4ClKw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=xtN0npKmv4Q:2Z9oJh4ClKw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=xtN0npKmv4Q:2Z9oJh4ClKw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=xtN0npKmv4Q:2Z9oJh4ClKw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/xtN0npKmv4Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/6365641377711196799/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2010/11/ie8-has-right-table-border-problem-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/6365641377711196799?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/6365641377711196799?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/xtN0npKmv4Q/ie8-has-right-table-border-problem-on.html" title="IE8 has a right table border problem on JavaScript-inserted cells" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2010/11/ie8-has-right-table-border-problem-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEABQn8zcSp7ImA9WxBQF08.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-7549501520090462076</id><published>2010-01-17T11:05:00.002+01:00</published><updated>2010-01-17T11:05:53.189+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-17T11:05:53.189+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="XSLT" /><title>Another XSLT-related bug in IE</title><content type="html">&lt;p&gt;I’ve created an RSS feed that points to various web pages that use client-side XSLT (&lt;a href="http://ajaxandxml.blogspot.com/2007/02/optimized-presentation-of-xml-content.html"&gt;read this article&lt;/a&gt; if you’re not familiar with the architecture of my web sites). The feed is accessible through FeedBurner which modifies the feed slightly to track clicks:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;All the links in the feed are modified to point to FeedBurner URLs&lt;/li&gt;
&lt;li&gt;The FeedBurner URLs encode the actual click destination (this allows FeedBurner to count the clicks)&lt;/li&gt;
&lt;li&gt;FeedBurner uses “301 Moved Permanently” status code to redirect the user to the target web page.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;When the target web page is an XML document with &lt;tt&gt;xml-stylesheet&lt;/tt&gt; directive, Firefox and Chrome display it correctly, but IE 8 crashes, as it interprets the XSLT stylesheet address relative to the “old” location (FeedBurner), not the redirected location.&lt;/p&gt;
&lt;p&gt;I could fix this problem by hard-coding absolute XSLT URL in the XML document, but then some browser might consider that a potential CSS attack, causing further problems. For the moment, IE 8 has proven to be closer to Firefox and its XSLT woes that I thought.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-7549501520090462076?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GLXuv-bImchhBgvLsEI9pwtapCs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GLXuv-bImchhBgvLsEI9pwtapCs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GLXuv-bImchhBgvLsEI9pwtapCs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GLXuv-bImchhBgvLsEI9pwtapCs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=yHMLtlCJLkI:_UZmsTVZrcs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=yHMLtlCJLkI:_UZmsTVZrcs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=yHMLtlCJLkI:_UZmsTVZrcs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=yHMLtlCJLkI:_UZmsTVZrcs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=yHMLtlCJLkI:_UZmsTVZrcs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=yHMLtlCJLkI:_UZmsTVZrcs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=yHMLtlCJLkI:_UZmsTVZrcs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/yHMLtlCJLkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/7549501520090462076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2010/01/another-xslt-related-bug-in-ie.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7549501520090462076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7549501520090462076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/yHMLtlCJLkI/another-xslt-related-bug-in-ie.html" title="Another XSLT-related bug in IE" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2010/01/another-xslt-related-bug-in-ie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8EQH86eCp7ImA9WxBRGEQ.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-7575625973374293391</id><published>2010-01-07T20:00:00.000+01:00</published><updated>2010-01-07T20:00:01.110+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-07T20:00:01.110+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>OMG, more browsers are coming</title><content type="html">&lt;p&gt;The &lt;a href="http://europa.eu/rapid/pressReleasesAction.do?reference=SPEECH/09/582&amp;amp;format=HTML&amp;amp;aged=0&amp;amp;language=EN&amp;amp;guiLanguage=en"&gt;EU commission has reached an interesting agreement with Microsoft&lt;/a&gt;: Microsoft will present European users with a choice screen allowing them to select one of many browsers as their default browser. In principle, this is a great idea, if they could decide to offer users three or four browsers; very probably the users will have 10+ choices. &lt;/p&gt;
&lt;p&gt;While this is supposedly good for users (and excellent for niche browser vendors), increased market share of currently irrelevant browsers might spell trouble for web developers using non-mainstream technologies (my favorite example: client-side XSLT transformation). For example, the percentage of users not using Firefox, IE or Chrome (yes, in that order) on one of my web sites is well below 5%, so I don’t care too much whether every little details works as it should. The situation would change drastically if they “minor” browsers would represent 20% of my users.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-7575625973374293391?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5pTIPvp-aqSqVN0hkJ54gTuiF8k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5pTIPvp-aqSqVN0hkJ54gTuiF8k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5pTIPvp-aqSqVN0hkJ54gTuiF8k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5pTIPvp-aqSqVN0hkJ54gTuiF8k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=jWx1ypIxTNM:kHPogln1QjE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=jWx1ypIxTNM:kHPogln1QjE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=jWx1ypIxTNM:kHPogln1QjE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=jWx1ypIxTNM:kHPogln1QjE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=jWx1ypIxTNM:kHPogln1QjE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=jWx1ypIxTNM:kHPogln1QjE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=jWx1ypIxTNM:kHPogln1QjE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/jWx1ypIxTNM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/7575625973374293391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2010/01/omg-more-browsers-are-coming.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7575625973374293391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7575625973374293391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/jWx1ypIxTNM/omg-more-browsers-are-coming.html" title="OMG, more browsers are coming" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2010/01/omg-more-browsers-are-coming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYCQX49fip7ImA9WxBRF0w.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-3587862517560068668</id><published>2010-01-05T19:46:00.001+01:00</published><updated>2010-01-05T19:46:00.066+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-05T19:46:00.066+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DOM" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><title>Custom data in HTML5 tags</title><content type="html">&lt;p&gt;Quite often I’d like to add application data to my HTML markup to pass information between server-side scripts generating the HTML markup and client-side jQuery scripts. Prior to HTML5 you could decide to use XHTML and your private namespace; numerous applications (including Facebook and my web sites) use this approach. It works nicely unless you’ve &lt;a href="http://ajaxandxml.blogspot.com/2009/07/firefox-35-xhtml-support-stinks.html"&gt;decided to use client-side XSLT transformation in Firefox&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;HTML5 gives you another option: &lt;a href="http://www.w3.org/TR/html5/dom.html"&gt;embedding custom non-visible data in HTML tags&lt;/a&gt;. You can add as many attributes as you wish to a HTML tag as long as they start with the &lt;tt&gt;data-&lt;/tt&gt; prefix. HTML5 compliant browsers will eventually &lt;a href="http://www.w3.org/TR/html5/dom.html"&gt;give you DOM access to these attributes through the &lt;tt&gt;dataset&lt;/tt&gt; attribute&lt;/a&gt;; in most browsers (ancient IE or Netscape releases might not work) you can get these attributes with the &lt;tt&gt;getAttribute&lt;/tt&gt; (or jQuery &lt;tt&gt;attr&lt;/tt&gt;) call.&lt;/p&gt;
&lt;p&gt;You might wonder what the difference is between using non-standard attributes of your choice and standard &lt;tt&gt;data-&lt;/tt&gt; attributes as long as the browsers don’t support the dataset property. If nothing else, your HTML code will be validated by &lt;a href="http://validator.w3.org/"&gt;HTML5 validator&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-3587862517560068668?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CpaqhSDeauGSSlsSmvnZK6zKBcw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CpaqhSDeauGSSlsSmvnZK6zKBcw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CpaqhSDeauGSSlsSmvnZK6zKBcw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CpaqhSDeauGSSlsSmvnZK6zKBcw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=bYfGcfmKUTQ:Ai35ByALYxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=bYfGcfmKUTQ:Ai35ByALYxw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=bYfGcfmKUTQ:Ai35ByALYxw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=bYfGcfmKUTQ:Ai35ByALYxw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=bYfGcfmKUTQ:Ai35ByALYxw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=bYfGcfmKUTQ:Ai35ByALYxw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=bYfGcfmKUTQ:Ai35ByALYxw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/bYfGcfmKUTQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/3587862517560068668/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2010/01/custom-data-in-html5-tags.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3587862517560068668?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3587862517560068668?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/bYfGcfmKUTQ/custom-data-in-html5-tags.html" title="Custom data in HTML5 tags" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2010/01/custom-data-in-html5-tags.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCRX04fSp7ImA9WxBRFU4.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-8650374560702153824</id><published>2010-01-03T17:32:00.000+01:00</published><updated>2010-01-03T17:32:44.335+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-03T17:32:44.335+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><title>Find Facebook Friends with Your Facebook Connect Application</title><content type="html">InformIT.com has just published the last article in my Facebook Connect series. This uses the common task of &lt;a href="http://www.informit.com/articles/article.aspx?p=1430489&amp;ns=16425"&gt;finding the Facebook friends of your Facebook Connect user&lt;/a&gt; to explain the intricacies of FQL (Facebook Query Language).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-8650374560702153824?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-nt8Uq7elcJmsvgEKjATJAEJT-Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-nt8Uq7elcJmsvgEKjATJAEJT-Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-nt8Uq7elcJmsvgEKjATJAEJT-Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-nt8Uq7elcJmsvgEKjATJAEJT-Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=GCQcHUqYFuM:Cfhnz5aT1bA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=GCQcHUqYFuM:Cfhnz5aT1bA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=GCQcHUqYFuM:Cfhnz5aT1bA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=GCQcHUqYFuM:Cfhnz5aT1bA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=GCQcHUqYFuM:Cfhnz5aT1bA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=GCQcHUqYFuM:Cfhnz5aT1bA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=GCQcHUqYFuM:Cfhnz5aT1bA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/GCQcHUqYFuM" height="1" width="1"/&gt;</content><link rel="related" href="http://www.informit.com/articles/article.aspx?p=1430489&amp;ns=16425" title="Find Facebook Friends with Your Facebook Connect Application" /><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/8650374560702153824/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2010/01/find-facebook-friends-with-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8650374560702153824?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8650374560702153824?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/GCQcHUqYFuM/find-facebook-friends-with-your.html" title="Find Facebook Friends with Your Facebook Connect Application" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2010/01/find-facebook-friends-with-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENQn08cSp7ImA9WxBTEUU.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-2768804290099643643</id><published>2009-12-07T11:11:00.002+01:00</published><updated>2009-12-07T11:11:33.379+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-07T11:11:33.379+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Charts" /><title>Create client-side charts with Highcharts</title><content type="html">&lt;p&gt;I’ve stumbled across a &lt;a href="http://ajaxian.com/archives/highcharts-really-nice-charting-api"&gt;Highcharts announcement on ajaxian.com&lt;/a&gt; a few days ago. &lt;a href="http://www.highcharts.com/"&gt;Highcharts&lt;/a&gt; looked like something I’ve been (passively) looking for for years: a simple tool that could take values generated by the server and turn them into a fancy graph. It lived up to the promise: after struggling with it for a few hours, I’ve deployed my first chart-on-a-page to production (note to myself: still have to fix the caching issues).&lt;/p&gt;
&lt;p&gt;The tool works great, but there are (as always) a few hidden gotchas:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The &lt;a href="http://www.highcharts.com/ref/"&gt;reference manual&lt;/a&gt; gives you all the information, the &lt;a href="http://www.highcharts.com/documentation/how-to-use"&gt;&lt;em&gt;How to use&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;page is somewhat cryptic.&lt;/li&gt;
&lt;li&gt;The demo pages show you incomplete code; all the formatting parameters are missing.&lt;/li&gt;
&lt;li&gt;Although it’s obvious in the hindsight, the documentation “forgets” to mention that you have to style all the elements of the graph, otherwise you’ll get a nice white-on-white nothingness. You can dig through the demo code to find the routines that do that (they’re hidden in a JavaScript file) or &lt;a href="http://www.plezanje.net/common/js/chartFormat.js"&gt;look at my code&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Another missing bit: if you want to apply the same format to multiple graphs, set the default options with the &lt;tt&gt;Highcharts.setOptions(chartFormat)&lt;/tt&gt; call.&lt;/li&gt;
&lt;li&gt;Last but not least: the &lt;a href="http://www.highcharts.com/ref/"&gt;&lt;strong&gt;series &lt;/strong&gt;parameter&lt;/a&gt; is an array of objects (each object having at least the &lt;strong&gt;data &lt;/strong&gt;property). If you read the documentation too literally and define &lt;strong&gt;series &lt;/strong&gt;as an object (not array), you’ll get a nicely formatted empty canvas (assuming you’ve got the formatting parameters in place).&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-2768804290099643643?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C9L6OaLFkqrGy49hPxgRMJgYWkc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C9L6OaLFkqrGy49hPxgRMJgYWkc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C9L6OaLFkqrGy49hPxgRMJgYWkc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C9L6OaLFkqrGy49hPxgRMJgYWkc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=aJWzKgWL-fM:xBWLUAFpjgA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=aJWzKgWL-fM:xBWLUAFpjgA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=aJWzKgWL-fM:xBWLUAFpjgA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=aJWzKgWL-fM:xBWLUAFpjgA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=aJWzKgWL-fM:xBWLUAFpjgA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=aJWzKgWL-fM:xBWLUAFpjgA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=aJWzKgWL-fM:xBWLUAFpjgA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/aJWzKgWL-fM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/2768804290099643643/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/12/create-client-side-charts-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/2768804290099643643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/2768804290099643643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/aJWzKgWL-fM/create-client-side-charts-with.html" title="Create client-side charts with Highcharts" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/12/create-client-side-charts-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YGQX89fSp7ImA9WxNaFks.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-3858835720110370380</id><published>2009-12-01T10:52:00.000+01:00</published><updated>2009-12-01T10:52:00.165+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-01T10:52:00.165+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>A nasty Firebug “surprise”</title><content type="html">&lt;p&gt;If you happen to believe that the client-side XSLT transformations are a good thing (I am firmly footed in that camp), Firefox 3.x brings nothing but disappointments. Now it's Firebug's turn: they’ve managed to mangle the &lt;tt&gt;console.log&lt;/tt&gt; function. It worked a while ago, but then a brilliant mind decided to re-implement it with a hidden DIV between the HEAD and the BODY element:&lt;/p&gt;
&lt;pre class="code"&gt;&amp;lt;div id="_firebugConsole" style="display: none;" FirebugVersion="1.4.5"/&amp;gt;&lt;/pre&gt;
&lt;p&gt;This DIV is created automatically for regular (X)HTML pages, but not for XSLT-generated content, so the output of &lt;tt&gt;console.log&lt;/tt&gt; gets sent to /dev/null (plus you get loads of weird error messages).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-3858835720110370380?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GSfAf1T3Wfi-P6sAE2QDtSRF3XQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GSfAf1T3Wfi-P6sAE2QDtSRF3XQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GSfAf1T3Wfi-P6sAE2QDtSRF3XQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GSfAf1T3Wfi-P6sAE2QDtSRF3XQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=EW8-SIS8UjM:s3G6Y8jrpvM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=EW8-SIS8UjM:s3G6Y8jrpvM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=EW8-SIS8UjM:s3G6Y8jrpvM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=EW8-SIS8UjM:s3G6Y8jrpvM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=EW8-SIS8UjM:s3G6Y8jrpvM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=EW8-SIS8UjM:s3G6Y8jrpvM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=EW8-SIS8UjM:s3G6Y8jrpvM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/EW8-SIS8UjM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/3858835720110370380/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/12/nasty-firebug-surprise.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3858835720110370380?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3858835720110370380?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/EW8-SIS8UjM/nasty-firebug-surprise.html" title="A nasty Firebug “surprise”" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/12/nasty-firebug-surprise.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMBQ385fip7ImA9WxNaFEU.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-4951313206197176667</id><published>2009-11-29T10:37:00.002+01:00</published><updated>2009-11-29T10:37:32.126+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-29T10:37:32.126+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><title>Publish stories on Facebook</title><content type="html">&lt;p&gt;In my first Facebook-related article published by &lt;a href="http://www.informit.com/articles/"&gt;InformIT&lt;/a&gt;, I’ve described the &lt;a href="http://www.informit.com/articles/article.aspx?p=1390168"&gt;basics of Facebook Connect&lt;/a&gt; – a JavaScript API that can connect your web application with millions of Facebook users. The next step is pretty obvious: once you’ve attracted the Facebook users, it makes sense to publish their activity on your web to their Facebook news feed. The process is described in my next InformIT article “&lt;a href="http://www.informit.com/articles/article.aspx?p=1398010"&gt;Publish Your Application Stories to Facebook&lt;/a&gt;”.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-4951313206197176667?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ee45cLw2i0ZrsvO1XobTIhKx04s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ee45cLw2i0ZrsvO1XobTIhKx04s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ee45cLw2i0ZrsvO1XobTIhKx04s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ee45cLw2i0ZrsvO1XobTIhKx04s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=HPvZKwkMK_s:a4FlrmZHnww:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=HPvZKwkMK_s:a4FlrmZHnww:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=HPvZKwkMK_s:a4FlrmZHnww:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=HPvZKwkMK_s:a4FlrmZHnww:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=HPvZKwkMK_s:a4FlrmZHnww:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=HPvZKwkMK_s:a4FlrmZHnww:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=HPvZKwkMK_s:a4FlrmZHnww:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/HPvZKwkMK_s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/4951313206197176667/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/11/publish-stories-on-facebook.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/4951313206197176667?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/4951313206197176667?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/HPvZKwkMK_s/publish-stories-on-facebook.html" title="Publish stories on Facebook" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/11/publish-stories-on-facebook.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGRH4yeip7ImA9WxNQGUk.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-7272379448966552306</id><published>2009-09-26T08:40:00.002+02:00</published><updated>2009-09-26T08:40:25.092+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-26T08:40:25.092+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>jQuery event delegation</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;A new article published on the &lt;a href="http://www.learningjquery.com/"&gt;Learning jQuery&lt;/a&gt; blog explains the &lt;a href="http://www.learningjquery.com/2009/09/working-with-events-part-3-more-event-delegation-with-jquery"&gt;intricacies of event delegation and the new .live() jQuery method&lt;/a&gt;. The event delegation (a great feature) allows you to declare a single event that works on numerous children of the same parent (instead of binding a copy of the event-handling function to every child). &lt;/p&gt;&lt;p&gt;The &lt;tt&gt;.live()&lt;/tt&gt; method goes a step beyond that and declares an event for &lt;em&gt;every &lt;/em&gt;element matching its selector. However, the implementation of the &lt;tt&gt;.live()&lt;/tt&gt; method is resource-consuming: it binds an event handler to the document root, so it’s involved every time the specified event occurs anywhere in the document.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-7272379448966552306?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qy05gtFCwNhaMfi1zfazZUXI-W0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qy05gtFCwNhaMfi1zfazZUXI-W0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qy05gtFCwNhaMfi1zfazZUXI-W0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qy05gtFCwNhaMfi1zfazZUXI-W0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pzKwYLlUZeA:QbXoEGusyAk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pzKwYLlUZeA:QbXoEGusyAk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pzKwYLlUZeA:QbXoEGusyAk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pzKwYLlUZeA:QbXoEGusyAk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=pzKwYLlUZeA:QbXoEGusyAk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pzKwYLlUZeA:QbXoEGusyAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=pzKwYLlUZeA:QbXoEGusyAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/pzKwYLlUZeA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/7272379448966552306/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/09/jquery-event-delegation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7272379448966552306?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7272379448966552306?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/pzKwYLlUZeA/jquery-event-delegation.html" title="jQuery event delegation" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/09/jquery-event-delegation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQXs5cSp7ImA9WxNREUg.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-133833496444731485</id><published>2009-09-05T14:50:00.001+02:00</published><updated>2009-09-05T14:50:00.529+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-05T14:50:00.529+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><title>Use Facebook Connect to Bring Your Application to Millions of Users</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;Almost a year ago, I’ve joined Facebook which has at that time rolled out the initial sandbox of the &lt;a href="http://developers.facebook.com/connect.php"&gt;Facebook Connect&lt;/a&gt; environment. I’ve developed a very simple application and waited for the FB Connect rollout. A few months later (around December 2008) they got so far and I’ve deployed my application on my production server … only to get user complains a while later telling me the application has stopped working.&lt;/p&gt;&lt;p&gt;It turned out Facebook has (somewhat silently) changed their API enough that it broke my code. However, I only had to fix a few functions to adapt them to a now better-documented API. I’ve also used a few extra bits-and-pieces Facebook engineers threw in after discovering what we really need. The second FB Connect experience was so good that I’ve decided to write a series of articles for InformIT describing how you can integrate your web site with Facebook. The first one, &lt;a href="http://www.informit.com/articles/article.aspx?p=1390168"&gt;Use Facebook Connect to Bring Your Application to Millions of Users&lt;/a&gt;, has just been published on the &lt;a href="http://www.informit.com/articles/"&gt;InformIT web site&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-133833496444731485?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GhrotMkeD-vDwmYWPEVn3AyOpnU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GhrotMkeD-vDwmYWPEVn3AyOpnU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GhrotMkeD-vDwmYWPEVn3AyOpnU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GhrotMkeD-vDwmYWPEVn3AyOpnU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=qY1jeHacRFU:9Sfb4GRMOs4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=qY1jeHacRFU:9Sfb4GRMOs4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=qY1jeHacRFU:9Sfb4GRMOs4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=qY1jeHacRFU:9Sfb4GRMOs4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=qY1jeHacRFU:9Sfb4GRMOs4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=qY1jeHacRFU:9Sfb4GRMOs4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=qY1jeHacRFU:9Sfb4GRMOs4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/qY1jeHacRFU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/133833496444731485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/09/use-facebook-connect-to-bring-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/133833496444731485?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/133833496444731485?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/qY1jeHacRFU/use-facebook-connect-to-bring-your.html" title="Use Facebook Connect to Bring Your Application to Millions of Users" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/09/use-facebook-connect-to-bring-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4CQ3Y_fip7ImA9WxNSGUs.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-1618455956935931622</id><published>2009-09-03T09:46:00.001+02:00</published><updated>2009-09-03T09:46:02.846+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-03T09:46:02.846+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Learning jQuery book from Packt</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;When I’ve decided to start using jQuery, I bought a number of books to help me get started (my time is way too valuable to be spent on Google wild chase), including the &lt;a href="http://www.amazon.com/gp/product/1847193811?ie=UTF8&amp;amp;tag=ajaxandxml-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1847193811"&gt;jQuery Reference Guide&lt;/a&gt; from Packt. In the meantime they’ve published &lt;a href="http://www.amazon.com/gp/product/1847196705?ie=UTF8&amp;amp;tag=ajaxandxml-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1847196705"&gt;Learning jQuery 1.3&lt;/a&gt; covering the latest major release of jQuery. &lt;/p&gt;&lt;p&gt;I’m waiting for my review copy from Packt (then I’ll be able to tell you more about the book) and they were kind enough to &lt;a href="http://www.packtpub.com/files/learning-jquery-1-3-sample-chapter-4-effects.pdf"&gt;provide a link to a sample chapter&lt;/a&gt; that I can share with you.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-1618455956935931622?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/haoVgYvk7zL5IM6eSHlmgj9A5D4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/haoVgYvk7zL5IM6eSHlmgj9A5D4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/haoVgYvk7zL5IM6eSHlmgj9A5D4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/haoVgYvk7zL5IM6eSHlmgj9A5D4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=roz-QubBhH4:f4ysUfqQ95A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=roz-QubBhH4:f4ysUfqQ95A:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=roz-QubBhH4:f4ysUfqQ95A:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=roz-QubBhH4:f4ysUfqQ95A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=roz-QubBhH4:f4ysUfqQ95A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=roz-QubBhH4:f4ysUfqQ95A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=roz-QubBhH4:f4ysUfqQ95A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/roz-QubBhH4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/1618455956935931622/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/09/learning-jquery-book-from-packt.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/1618455956935931622?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/1618455956935931622?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/roz-QubBhH4/learning-jquery-book-from-packt.html" title="Learning jQuery book from Packt" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/09/learning-jquery-book-from-packt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8HQ3g9eSp7ImA9WxNSF0w.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-7705758434824688767</id><published>2009-08-31T12:17:00.000+02:00</published><updated>2009-08-31T12:17:12.661+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T12:17:12.661+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RDFa" /><title>Introduction to RDFa</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;I’ve finally found time to read the RDFa articles published on &lt;a href="http://www.alistapart.com/"&gt;A List Apart&lt;/a&gt;. I have to digest the information and try to figure out whether it’s relevant to my web sites, but I’m already intrigued enough to publish the links for future reference:&lt;/p&gt;&lt;ul class="Bullet1"&gt;&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/introduction-to-rdfa/"&gt;Introduction to RDFa&lt;/a&gt; and the &lt;a href="http://www.alistapart.com/articles/introduction-to-rdfa-ii/"&gt;follow-up article&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://webbackplane.com/rdfa-handbook/"&gt;RDFa handbook&lt;/a&gt; by &lt;a href="http://webbackplane.com/mark-birbeck"&gt;Mark Birbeck&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-7705758434824688767?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uINtmiH-f1bGlL3aWPm1H4yyQxY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uINtmiH-f1bGlL3aWPm1H4yyQxY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uINtmiH-f1bGlL3aWPm1H4yyQxY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uINtmiH-f1bGlL3aWPm1H4yyQxY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SZsijJGn5gs:IBXbqep5g_c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SZsijJGn5gs:IBXbqep5g_c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SZsijJGn5gs:IBXbqep5g_c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SZsijJGn5gs:IBXbqep5g_c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=SZsijJGn5gs:IBXbqep5g_c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SZsijJGn5gs:IBXbqep5g_c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=SZsijJGn5gs:IBXbqep5g_c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/SZsijJGn5gs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/7705758434824688767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/08/introduction-to-rdfa.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7705758434824688767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7705758434824688767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/SZsijJGn5gs/introduction-to-rdfa.html" title="Introduction to RDFa" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/08/introduction-to-rdfa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ICQXw7cCp7ImA9WxNSEks.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-7764563003503799249</id><published>2009-08-26T07:46:00.000+02:00</published><updated>2009-08-26T07:46:00.208+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-26T07:46:00.208+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Ajax with jQuery</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;The third jQuery article I wrote for InformIT covers the jQuery Ajax support. It describes simple Ajax calls that &lt;a href="http://www.informit.com/articles/article.aspx?p=1355233"&gt;insert HTML fragments into the current web page&lt;/a&gt;, &lt;a href="http://www.informit.com/articles/article.aspx?p=1355233&amp;amp;seqNum=2"&gt;processing of XML responses&lt;/a&gt;, and &lt;a href="http://www.informit.com/articles/article.aspx?p=1355233&amp;amp;seqNum=3"&gt;global AJAX events that display the &lt;em&gt;loading &lt;/em&gt;indicator&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-7764563003503799249?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HQgayd31xSknLXDym7EfJ3QpqhM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HQgayd31xSknLXDym7EfJ3QpqhM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HQgayd31xSknLXDym7EfJ3QpqhM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HQgayd31xSknLXDym7EfJ3QpqhM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=Y42WOupnYlc:x5wP-ScdoaY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=Y42WOupnYlc:x5wP-ScdoaY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=Y42WOupnYlc:x5wP-ScdoaY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=Y42WOupnYlc:x5wP-ScdoaY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=Y42WOupnYlc:x5wP-ScdoaY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=Y42WOupnYlc:x5wP-ScdoaY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=Y42WOupnYlc:x5wP-ScdoaY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/Y42WOupnYlc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/7764563003503799249/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/08/ajax-with-jquery.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7764563003503799249?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/7764563003503799249?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/Y42WOupnYlc/ajax-with-jquery.html" title="Ajax with jQuery" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/08/ajax-with-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GRnwzeCp7ImA9WxNTGUw.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-8254021021837587096</id><published>2009-08-22T07:43:00.002+02:00</published><updated>2009-08-22T07:43:47.280+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-22T07:43:47.280+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>My second jQuery article: refactoring a web page</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;When I’ve decided to switch from X library to jQuery, I was faced with tons of (now outdated) pages in my web site that I had to migrate to jQuery. As it turns out, doing the migration job properly is a great idea: armed with the CSS experience (and believing in the need for using tags that make sense) I was able to make compact, more readable and better degradable (an awful word to use in this context) web pages.&lt;/p&gt;&lt;p&gt;I’ve described some of the lessons I’ve learned in this process in the &lt;a href="http://www.informit.com/articles/article.aspx?p=1349301"&gt;Web Page Refactoring with jQuery&lt;/a&gt; article that was published by &lt;a href="http://www.informit.com/"&gt;InformIT&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-8254021021837587096?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2mF10HOI5EdW-f4Q30xPaY8SOeU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2mF10HOI5EdW-f4Q30xPaY8SOeU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2mF10HOI5EdW-f4Q30xPaY8SOeU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2mF10HOI5EdW-f4Q30xPaY8SOeU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=iXF7rEaSG8E:z0dvB9cBFLE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=iXF7rEaSG8E:z0dvB9cBFLE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=iXF7rEaSG8E:z0dvB9cBFLE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=iXF7rEaSG8E:z0dvB9cBFLE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=iXF7rEaSG8E:z0dvB9cBFLE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=iXF7rEaSG8E:z0dvB9cBFLE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=iXF7rEaSG8E:z0dvB9cBFLE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/iXF7rEaSG8E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/8254021021837587096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/08/my-second-jquery-article-refactoring.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8254021021837587096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8254021021837587096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/iXF7rEaSG8E/my-second-jquery-article-refactoring.html" title="My second jQuery article: refactoring a web page" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/08/my-second-jquery-article-refactoring.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04BSX87fip7ImA9WxNTEEQ.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-3537885525028948058</id><published>2009-08-12T18:52:00.000+02:00</published><updated>2009-08-12T18:52:38.106+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-12T18:52:38.106+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="XSLT" /><title>XSLT: Truncate text with ellipsis</title><content type="html">A great &lt;a href="http://www.frontendplace.nl/bb/?p=307"&gt;set of XSLT templates that allows you to truncate XHTML markup (or any XML node) at specified text length&lt;/a&gt;. I was impressed ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-3537885525028948058?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x7tAVisDqB2uv1Rid1OeMwKzJTw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x7tAVisDqB2uv1Rid1OeMwKzJTw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x7tAVisDqB2uv1Rid1OeMwKzJTw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x7tAVisDqB2uv1Rid1OeMwKzJTw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=THQj77QfXLs:32DC39hHvik:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=THQj77QfXLs:32DC39hHvik:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=THQj77QfXLs:32DC39hHvik:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=THQj77QfXLs:32DC39hHvik:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=THQj77QfXLs:32DC39hHvik:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=THQj77QfXLs:32DC39hHvik:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=THQj77QfXLs:32DC39hHvik:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/THQj77QfXLs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/3537885525028948058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/08/xslt-truncate-text-with-ellipsis.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3537885525028948058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3537885525028948058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/THQj77QfXLs/xslt-truncate-text-with-ellipsis.html" title="XSLT: Truncate text with ellipsis" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/08/xslt-truncate-text-with-ellipsis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEAQH4zeSp7ImA9WxJbF0s.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-5574373279525471714</id><published>2009-07-28T08:47:00.000+02:00</published><updated>2009-07-28T08:47:21.081+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-28T08:47:21.081+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>Firefox 3.5 XHTML support stinks</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;Continuing my &lt;a href="http://ajaxandxml.blogspot.com/2009/03/opinion-is-firefox-development-model.html"&gt;Firefox “quality” rants&lt;/a&gt;: I just found the willpower to completely redesign my AJAX framework, going from IFRAMEs to jQuery AJAX calls (replacing straightforward and quite elegant XSL transformations with pages of convoluted JavaScript code) to work around the bugs in FF3.0, only to find out that FF3.5 is even worse and introduced numerous additional “features”.&lt;/p&gt;&lt;p&gt;For example, FF3.5 requires an explicit &lt;tt&gt;&amp;lt;/script&amp;gt;&lt;/tt&gt; tag within an XHTML document with proper DOCTYPE. The following document was validated with W3C XHTML validator …&lt;/p&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&amp;gt;
  &amp;lt;title&amp;gt;Test&amp;lt;/title&amp;gt;
  &amp;lt;script src="… source URL … " type="text/javascript" /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body id="body"&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;p&gt;… but it does not load the script in FF3.5.&lt;/p&gt;&lt;p&gt;Before anyone starts telling me that it’s not so hard to include the closing &lt;tt&gt;&amp;lt;/script&amp;gt;&lt;/tt&gt; tag in your source – try telling that to the database with native XML support where I’m storing snippets of the code. I had to convert the field from XML to TEXT (and lose all XML goodies I might eventually get) just to avoid the elimination of the explicit closing tag.&lt;/p&gt;&lt;p&gt;May I make a quick suggestion to the FF developers: maybe, just maybe, you might want to consider supporting existing web applications in parallel with adding new features that not too many people can use (because no other browser supports them yet).&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-5574373279525471714?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KromxS8yZuEnBFPkWHGMR4-q0vY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KromxS8yZuEnBFPkWHGMR4-q0vY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KromxS8yZuEnBFPkWHGMR4-q0vY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KromxS8yZuEnBFPkWHGMR4-q0vY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=KHMn5Edb-2U:3icJrqewaI0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=KHMn5Edb-2U:3icJrqewaI0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=KHMn5Edb-2U:3icJrqewaI0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=KHMn5Edb-2U:3icJrqewaI0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=KHMn5Edb-2U:3icJrqewaI0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=KHMn5Edb-2U:3icJrqewaI0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=KHMn5Edb-2U:3icJrqewaI0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/KHMn5Edb-2U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/5574373279525471714/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/07/firefox-35-xhtml-support-stinks.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/5574373279525471714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/5574373279525471714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/KHMn5Edb-2U/firefox-35-xhtml-support-stinks.html" title="Firefox 3.5 XHTML support stinks" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/07/firefox-35-xhtml-support-stinks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGSHs_fyp7ImA9WxJUFUg.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-141679920570592570</id><published>2009-07-14T10:13:00.000+02:00</published><updated>2009-07-14T10:13:49.547+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T10:13:49.547+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer" /><title>JS-Kit crashes a Blogger blog in Internet Explorer</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;Several times I’ve stumbled across Blogger-hosted blog that simply refused to open in Internet Explorer with the “Operation aborted” pop-up window and subsequent error page. I never tried to investigate what was going on (I simply copied the URL into another browser), but when I’ve installed JS-Kit on my blog, I’ve started getting the same problems … obviously a cause for a major alarm.&lt;/p&gt;&lt;p&gt;The &lt;a href="http://weblogs.asp.net/infinitiesloop/archive/2006/11/02/Dealing-with-IE-_2600_quot_3B00_Operation-Aborted_2600_quot_3B002E00_-Or_2C00_-how-to-Crash-IE.aspx"&gt;Infinities Loop site provided an answer in the comments&lt;/a&gt;: a SCRIPT performing specific manipulations should be a child of BODY, not another HTML element. When I’ve moved the JS-Kit script (&lt;tt&gt;&amp;lt;script src='http://js-kit.com/extra/blogger/comments.js' type='text/javascript'/&amp;gt;&lt;/tt&gt;) from the Blogger widget to the end of the page, the new fanciful JS-Kit-based comments worked flawlessly.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-141679920570592570?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-SV3aiHYslUcgGg24-NoYABgV3k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-SV3aiHYslUcgGg24-NoYABgV3k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-SV3aiHYslUcgGg24-NoYABgV3k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-SV3aiHYslUcgGg24-NoYABgV3k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=NUtoKg2Q3AA:_jIy9owtaO4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=NUtoKg2Q3AA:_jIy9owtaO4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=NUtoKg2Q3AA:_jIy9owtaO4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=NUtoKg2Q3AA:_jIy9owtaO4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=NUtoKg2Q3AA:_jIy9owtaO4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=NUtoKg2Q3AA:_jIy9owtaO4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=NUtoKg2Q3AA:_jIy9owtaO4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/NUtoKg2Q3AA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/141679920570592570/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/07/js-kit-crashes-blogger-blog-in-internet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/141679920570592570?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/141679920570592570?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/NUtoKg2Q3AA/js-kit-crashes-blogger-blog-in-internet.html" title="JS-Kit crashes a Blogger blog in Internet Explorer" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/07/js-kit-crashes-blogger-blog-in-internet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBSHszeCp7ImA9WxJVEkg.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-4342391613117419886</id><published>2009-06-29T09:07:00.000+02:00</published><updated>2009-06-29T09:07:39.580+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-29T09:07:39.580+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Introduction to jQuery article published by InformIT</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;After becoming a convert (and a somewhat quiet evangelist) to jQuery, I wrote a series of introductory articles for the InformIT.com web site. The first one, &lt;a href="http://www.informit.com/articles/article.aspx?p=1347503"&gt;&lt;em&gt;Introduction to jQuery&lt;/em&gt;&lt;/a&gt;, covers the basic concepts, including &lt;a href="http://www.informit.com/articles/article.aspx?p=1347503&amp;amp;seqNum=2"&gt;selectors&lt;/a&gt;, &lt;a href="http://www.informit.com/articles/article.aspx?p=1347503&amp;amp;seqNum=3"&gt;chaining&lt;/a&gt;, and the &lt;a href="http://www.informit.com/articles/article.aspx?p=1347503&amp;amp;seqNum=4"&gt;page ready&lt;/a&gt; event. It also contains a &lt;a href="http://www.informit.com/articles/article.aspx?p=1347503&amp;amp;seqNum=5"&gt;comparison between a “traditional” JavaScript code and jQuery code&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-4342391613117419886?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ydIW4r-lJeO6T5B254iNuSeAq9I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ydIW4r-lJeO6T5B254iNuSeAq9I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ydIW4r-lJeO6T5B254iNuSeAq9I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ydIW4r-lJeO6T5B254iNuSeAq9I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pQS6zwf2oCo:ph4BmjLNMCY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pQS6zwf2oCo:ph4BmjLNMCY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pQS6zwf2oCo:ph4BmjLNMCY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pQS6zwf2oCo:ph4BmjLNMCY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=pQS6zwf2oCo:ph4BmjLNMCY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=pQS6zwf2oCo:ph4BmjLNMCY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=pQS6zwf2oCo:ph4BmjLNMCY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/pQS6zwf2oCo" height="1" width="1"/&gt;</content><link rel="related" href="http://www.informit.com/articles/article.aspx?p=1347503" title="Introduction to jQuery article published by InformIT" /><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/4342391613117419886/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/06/introduction-to-jquery-article.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/4342391613117419886?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/4342391613117419886?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/pQS6zwf2oCo/introduction-to-jquery-article.html" title="Introduction to jQuery article published by InformIT" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/06/introduction-to-jquery-article.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQGQXY7fSp7ImA9WxVbFUQ.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-406357238939350337</id><published>2009-04-01T14:52:00.009+02:00</published><updated>2009-04-01T14:52:00.805+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-01T14:52:00.805+02:00</app:edited><title>Refactoring a menu: Remove unnecessary IDs</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p class="note"&gt;If you’re new to this series, read the “&lt;a href="http://ajaxandxml.blogspot.com/2008/12/refactoring-simple-menu.html"&gt;Refactoring a simple menu&lt;/a&gt;” and “&lt;a href="http://ajaxandxml.blogspot.com/2008/12/refactoring-menu-remove-inline-css.html"&gt;Remove inline CSS&lt;/a&gt;” first.&lt;/p&gt;&lt;p&gt;The original HTML code for the dropdown menu (see below) was full of IDs that were used as a DOM navigation tool (I’ve used &lt;strong&gt;getElementById &lt;/strong&gt;instead of traversing the DOM tree). When moving from a simple wrapper JavaScript library (I was using the X library) to jQuery, it makes sense to use its powerful traversal functions to replace the ID-based navigation.&lt;/p&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;div class="rowMenu" id="IDAHYJQB"&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;a href="/climbing/myClimbs/myClimbs.asp"&amp;gt;First page&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class="rowMenu" id="IDAKYJQB"&amp;gt;
  &amp;lt;script&amp;gt;menuRegister('IDAKYJQB')&amp;lt;/script&amp;gt;
  &amp;lt;p id="IDAKYJQB_main"&amp;gt;&amp;lt;a href="javascript:menuClick('IDAKYJQB')"&amp;gt;Add ...&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;div id="IDAKYJQB_sub"&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;a onclick="menuSelect('IDAKYJQB')" 
        href="/climbing/myClimbs/myClimbs_add.asp"&amp;gt;New entry &amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;a onclick="menuSelect('IDAKYJQB')" 
        href="/climbing/myClimbs/myClimbs_editWall.asp?a=add"&amp;gt;Edit&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
    … more …
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;The HTML code is interspersed with inline calls to three &lt;a href="http://ajaxandxml.blogspot.com/2008/12/refactoring-simple-menu.html"&gt;JavaScript functions&lt;/a&gt;:&lt;/p&gt;&lt;ul class="Bullet1"&gt;&lt;li&gt;&lt;strong&gt;menuRegister&lt;/strong&gt; registers the ID of a drop-down menu&lt;/li&gt;&lt;li&gt;&lt;strong&gt;menuClick&lt;/strong&gt; opens a drop-down menu&lt;/li&gt;&lt;li&gt;&lt;strong&gt;menuSelect&lt;/strong&gt; hides the drop-down menu and &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Today we’ll replace these functions with simpler jQuery equivalents while getting rid of element IDs.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;script&gt;startHide()&lt;/script&gt;&lt;p&gt;The &lt;strong&gt;menuRegister &lt;/strong&gt;function will not be needed once we fix the DOM traversal problem. The &lt;strong&gt;menuClick &lt;/strong&gt;and &lt;strong&gt;menuSelect &lt;/strong&gt;functions will be merged into a single &lt;strong&gt;menuClickEvent &lt;/strong&gt;function that will identify whether it works on a main menu entry or an entry of a drop-down menu. The &lt;strong&gt;this &lt;/strong&gt;variable will be passed to the &lt;strong&gt;menuClickEvent&lt;/strong&gt; function to avoid any ID-based references.&lt;/p&gt;&lt;p&gt;The &lt;strong&gt;menuClickEvent&lt;/strong&gt; function has to perform a few setup tasks:&lt;/p&gt;&lt;ul class="Bullet1"&gt;&lt;li&gt;Get the DOM element that was clicked, using either the function parameter or (for future use) the value of the &lt;strong&gt;this &lt;/strong&gt;variable.&lt;/li&gt;&lt;li&gt;Get the parent paragraph.&lt;/li&gt;&lt;li&gt;Decide whether it’s operating on a top-row entry (the parent paragraph has a DIV sibling) or not.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Using jQuery makes the job extremely simple:&lt;/p&gt;&lt;pre class="javascript" name="code"&gt;function menuClickEvent(thisParam) {
  var a = thisParam || this; 
  var p = $(a).parents('P:first');
  var d = p.siblings('DIV');
  var toprow = d.length != 0;

  … rest of the code …
}&lt;/pre&gt;&lt;p&gt;If the &lt;strong&gt;menuClickEvent&lt;/strong&gt; function works on an element of a drop-down menu, it should hide the drop-down menu and return &lt;strong&gt;true &lt;/strong&gt;(indicating that the event handler should perform its default task), otherwise it should toggle the state of the &lt;strong&gt;down &lt;/strong&gt;class of the current paragraph and the visibility of the sibling DIV. The jQuery-based code is much shorter, more elegant and way more readable than the original.&lt;/p&gt;&lt;pre class="javascript" name="code"&gt;function menuClickEvent(thisParam) {
  var a = thisParam || this; 
  var p = $(a).parents('P:first');
  var d = p.siblings('DIV');
  var toprow = d.length != 0;

  if (toprow) {
    p.toggleClass('down');
    d.toggle();
    return false;
  } else {
    p.parents('DIV').hide().siblings('P').removeClass('down');
    return true;
  }
}&lt;/pre&gt;&lt;p&gt;With the new jQuery-based implementation of the drop-down menu, we can get rid of all element IDs, resulting in much shorter HTML code:&lt;/p&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;div class="rowMenu"&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;a href="/climbing/myClimbs/myClimbs.asp"&amp;gt;First page&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class="rowMenu"&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;a href="#" onclick="menuClickEvent(this)"&amp;gt;Add ...&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;a onclick="menuClickEvent(this)" 
        href="/climbing/myClimbs/myClimbs_add.asp"&amp;gt;New entry &amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;a onclick="menuClickEvent(this)" 
        href="/climbing/myClimbs/myClimbs_editWall.asp?a=add"&amp;gt;Edit&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
    … more …
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;p&gt;Next task: remove inline JavaScript calls&lt;/p&gt;&lt;script&gt;endHide()&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-406357238939350337?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AhXI1tZyDNoe5Dn1k-M-pfRHyg8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AhXI1tZyDNoe5Dn1k-M-pfRHyg8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AhXI1tZyDNoe5Dn1k-M-pfRHyg8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AhXI1tZyDNoe5Dn1k-M-pfRHyg8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=H2yAN7QZbPQ:d__fKm7Lslo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=H2yAN7QZbPQ:d__fKm7Lslo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=H2yAN7QZbPQ:d__fKm7Lslo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=H2yAN7QZbPQ:d__fKm7Lslo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=H2yAN7QZbPQ:d__fKm7Lslo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=H2yAN7QZbPQ:d__fKm7Lslo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=H2yAN7QZbPQ:d__fKm7Lslo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/H2yAN7QZbPQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/406357238939350337/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/04/refactoring-menu-remove-unnecessary-ids.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/406357238939350337?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/406357238939350337?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/H2yAN7QZbPQ/refactoring-menu-remove-unnecessary-ids.html" title="Refactoring a menu: Remove unnecessary IDs" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/04/refactoring-menu-remove-unnecessary-ids.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcEQHk6cSp7ImA9WxVbFE8.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-3903123730735833776</id><published>2009-03-30T17:41:00.001+02:00</published><updated>2009-03-30T17:46:41.719+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T17:46:41.719+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="XSLT" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>Opinion: Is the Firefox development model really better than Microsoft’s?</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;Everyone loves bashing Microsoft and preaching the vast superiority of Firefox over IE, particularly its near-perfect implementation of W3C standards. Unfortunately, that might be true as long as you’re doing what the most vocal advocates (the CSS folks) are doing, if you happen to rely on some other “supported” standard, you might find yourself in deep ****.&lt;/p&gt;&lt;p&gt;As my regular readers know, I happened to make a decision to use client-side XSLT a while ago. From the technology standpoint, it was a perfect solution … until Firefox 3 came out. It has &lt;a href="http://ajaxandxml.blogspot.com/2009/03/firefox-xslt-errors.html"&gt;so many XSLT-related problems&lt;/a&gt; that it’s almost impossible to get the right combination of relevant parameters to have the same XSLT stylesheet working on Firefox, IE, Chrome and the web server (for non-XSLT-capable clients).&lt;/p&gt;&lt;p&gt;OK, one would understand that every major software project has bugs. But it’s hard to understand that so many of the XSLT bugs are untouched after several years. For example: &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=281022"&gt;generic ticket describing XSLT result document problems&lt;/a&gt; (4 years), &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=230214"&gt;HTML-DOM initialization issues&lt;/a&gt; (5 years), &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=202765"&gt;Firefox crashing when combining XSLT with document.write&lt;/a&gt; (6 years), &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=202765"&gt;Firebug not working on XSLT-generated pages&lt;/a&gt; (1,5 year).&lt;/p&gt;&lt;p&gt;I’ve heard all about limited resources and priorities in my “previous life”, but let’s face the reality: once the motivation (let’s beat IE) wears off and the platform accumulates years of old sins and bad decisions, the development model doesn’t matter. Firefox is becoming no better than IE.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-3903123730735833776?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hORYhbLiDsK9AlEG1Gyss9Coi7M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hORYhbLiDsK9AlEG1Gyss9Coi7M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hORYhbLiDsK9AlEG1Gyss9Coi7M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hORYhbLiDsK9AlEG1Gyss9Coi7M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=PwOGTUXNxOY:dHja_LDEiy4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=PwOGTUXNxOY:dHja_LDEiy4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=PwOGTUXNxOY:dHja_LDEiy4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=PwOGTUXNxOY:dHja_LDEiy4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=PwOGTUXNxOY:dHja_LDEiy4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=PwOGTUXNxOY:dHja_LDEiy4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=PwOGTUXNxOY:dHja_LDEiy4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/PwOGTUXNxOY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/3903123730735833776/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/03/opinion-is-firefox-development-model.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3903123730735833776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/3903123730735833776?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/PwOGTUXNxOY/opinion-is-firefox-development-model.html" title="Opinion: Is the Firefox development model really better than Microsoft’s?" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/03/opinion-is-firefox-development-model.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UCQXs-eip7ImA9WxVUGUQ.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-1037773371098444002</id><published>2009-03-25T17:41:00.001+01:00</published><updated>2009-03-25T17:41:00.552+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T17:41:00.552+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="XSLT" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>Firefox XSLT errors</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;When I decided to use server-side XML output and client-side XSLT transformations a while ago, Firefox 2 was the ideal development platform – reliable, well implemented browser with excellent debugging capabilities (Firebug). Since then, the XSLT ignorami contributing code to Firefox have managed to break so many things I simply have to document everything I know to be broken in one place:&lt;/p&gt;&lt;ul class="Bullet1"&gt;&lt;li&gt;You have to use &lt;tt&gt;&amp;lt;xsl:output method=’html’&amp;gt;&lt;/tt&gt;, and the root element of the transformed XML tree must be &lt;strong&gt;html&lt;/strong&gt; (not &lt;strong&gt;HTML&lt;/strong&gt;), otherwise the &lt;a href="http://ajaxandxml.blogspot.com/2007/01/firefox-html-dom-fails-if-local-xsl.html"&gt;DOM is not properly initialized&lt;/a&gt;. DOCTYPE does not matter.&lt;/li&gt;&lt;li&gt;Even though the DOCTYPE parameters in the &lt;strong&gt;xsl:output&lt;/strong&gt; indicate transitional HTML, the attributes are case-sensitive (for example, onClick does not work).&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxandxml.blogspot.com/2008/10/firefox-forgets-to-create-documentbody.html"&gt;DOM initialization on Unix differs from Windows&lt;/a&gt; (document.body is missing).&lt;/li&gt;&lt;li&gt;In some versions, &lt;a href="http://ajaxandxml.blogspot.com/2007/08/firefox-document-object-lacks-dom.html"&gt;numerous properties of the document object are missing&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxandxml.blogspot.com/2007/08/you-cannot-disable-output-escaping-in.html"&gt;Output escaping cannot be disabled&lt;/a&gt; (this is not a bug, but a very particular feature implementation).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;On top of everything else, Firebug does not work.&lt;/p&gt;&lt;p&gt;It breaks my heart, but I have to admit that with the rollout of Firefox 3 Internet Explorer 7 does a better job of handling client-side XSLT than Firefox.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-1037773371098444002?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XBefvXfJuoWLs7pFGf60fQdmnXk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XBefvXfJuoWLs7pFGf60fQdmnXk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XBefvXfJuoWLs7pFGf60fQdmnXk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XBefvXfJuoWLs7pFGf60fQdmnXk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=uuFblx3ZdyI:bFo4nkXIkQ8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=uuFblx3ZdyI:bFo4nkXIkQ8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=uuFblx3ZdyI:bFo4nkXIkQ8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=uuFblx3ZdyI:bFo4nkXIkQ8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=uuFblx3ZdyI:bFo4nkXIkQ8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=uuFblx3ZdyI:bFo4nkXIkQ8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=uuFblx3ZdyI:bFo4nkXIkQ8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/uuFblx3ZdyI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/1037773371098444002/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/03/firefox-xslt-errors.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/1037773371098444002?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/1037773371098444002?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/uuFblx3ZdyI/firefox-xslt-errors.html" title="Firefox XSLT errors" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/03/firefox-xslt-errors.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIMQXwzfyp7ImA9WxVUGE8.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-4150153725275059824</id><published>2009-03-23T17:43:00.001+01:00</published><updated>2009-03-23T17:43:00.287+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-23T17:43:00.287+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><title>Blogger backup works (finally)</title><content type="html">I have no problem &lt;a href="http://ajaxandxml.blogspot.com/2009/01/blogger-software-quality.html"&gt;bashing Google&lt;/a&gt; (or anyone else that can't get their act together), but then it's also fair to report when they get something right. They've managed to fix the Blogger backup in the last month or so; now I can successfully back up my large blogs (900 posts, thousands of comments, 6 MB XML file). Great job :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-4150153725275059824?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7GoaBOPkIUzZZEB0Te3BoqD_tqw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7GoaBOPkIUzZZEB0Te3BoqD_tqw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7GoaBOPkIUzZZEB0Te3BoqD_tqw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7GoaBOPkIUzZZEB0Te3BoqD_tqw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=vaEgD7nx0uU:25FJd7xJv1c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=vaEgD7nx0uU:25FJd7xJv1c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=vaEgD7nx0uU:25FJd7xJv1c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=vaEgD7nx0uU:25FJd7xJv1c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=vaEgD7nx0uU:25FJd7xJv1c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=vaEgD7nx0uU:25FJd7xJv1c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=vaEgD7nx0uU:25FJd7xJv1c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/vaEgD7nx0uU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/4150153725275059824/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/03/blogger-backup-works-finally.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/4150153725275059824?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/4150153725275059824?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/vaEgD7nx0uU/blogger-backup-works-finally.html" title="Blogger backup works (finally)" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/03/blogger-backup-works-finally.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YCQHc5eyp7ImA9WxVUF04.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-1804873072315350921</id><published>2009-03-22T17:26:00.000+01:00</published><updated>2009-03-22T17:26:01.923+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-22T17:26:01.923+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="XSLT" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>Firebug does not work on XSLT-translated pages</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;If you want to use Firebug with Firefox 3 on pages using client-side XSLT transformation, you’re out of luck. Firebug simply does not work; the only way to a half-working environment is the following:&lt;/p&gt;&lt;ul class="Bullet1"&gt;&lt;li&gt;Restart the browser&lt;/li&gt;&lt;li&gt;Open an XML page with the &lt;strong&gt;xml-stylesheet &lt;/strong&gt;directive.&lt;/li&gt;&lt;li&gt;Open a new tab and load a regular page into it.&lt;/li&gt;&lt;li&gt;Switch back to the previous tab. Firebug works within the context of the currently loaded page.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;What’s really sad is that this has been &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=391177"&gt;reported by one of the Firebug developers almost two years ago&lt;/a&gt; … and nobody found it important enough to change the bug status from NEW to anything else.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-1804873072315350921?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_lGwAPgzyEPhYPQ5nfjfg0FRSQM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_lGwAPgzyEPhYPQ5nfjfg0FRSQM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_lGwAPgzyEPhYPQ5nfjfg0FRSQM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_lGwAPgzyEPhYPQ5nfjfg0FRSQM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SnxnkEJCh_Q:0qL44nb15hA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SnxnkEJCh_Q:0qL44nb15hA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SnxnkEJCh_Q:0qL44nb15hA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SnxnkEJCh_Q:0qL44nb15hA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=SnxnkEJCh_Q:0qL44nb15hA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=SnxnkEJCh_Q:0qL44nb15hA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=SnxnkEJCh_Q:0qL44nb15hA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/SnxnkEJCh_Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/1804873072315350921/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/03/firebug-does-not-work-on-xslt.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/1804873072315350921?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/1804873072315350921?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/SnxnkEJCh_Q/firebug-does-not-work-on-xslt.html" title="Firebug does not work on XSLT-translated pages" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/03/firebug-does-not-work-on-xslt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGSXsyfSp7ImA9WxVRFU4.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-8080944834210739991</id><published>2009-01-21T10:35:00.000+01:00</published><updated>2009-01-21T10:50:28.595+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-21T10:50:28.595+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><title>The Blogger software "quality"</title><content type="html">I'm constantly amazed by Google's lack of quality (at least in the Blogger area). Let me give you two simple examples:&lt;ul&gt;&lt;li&gt;Google has added embedded comment form to Blogger posts. This form works flawlessly with all versions of Firefox on Windows/Linux platforms and fails consistently with IE7 (you have to submit the comment twice). The bug appears in all of my blogs, regardless of when they've been created and what template they use.&lt;/li&gt;&lt;li&gt;Google has introduced post ratings months ago. They've &lt;a href="http://bloggerindraft.blogspot.com/2008/06/new-feature-star-ratings.html?showComment=1214654820000#c1346374484152686248"&gt;immediately got customer feedback that the web pages hang when viewed with Firefox&lt;/a&gt;. Five minute long investigation reveals the cause to anyone who's willing to figure it out: Sometimes the AJAX requests they're using take a long time to complete and obviously they're using synchronous XMLHTTPRequest calls in Firefox, blocking the browser.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In both cases, the bugs have been present for months, numerous users have complained (loudly) and nothing has been fixed. Will this affect Google? Probably not. Will I recommend their business applications to my customers? Definitely not.&lt;/p&gt;&lt;p&gt;Just in case you might wonder why I'm yammering in my blog and not complaining to Google: Once they've &lt;a href="http://bloggerindraft.blogspot.com/2008/11/help-us-test-import-and-export.html"&gt;explicitely asked for our feedback on a new Blogger feature&lt;/a&gt;. I've submitted my bug report and never got as much as an acknowledgement ... and the bug that's been bothering me is still there.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-8080944834210739991?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QNU0eQEy4EPdhFPlHuL_Nv1WHnk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QNU0eQEy4EPdhFPlHuL_Nv1WHnk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QNU0eQEy4EPdhFPlHuL_Nv1WHnk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QNU0eQEy4EPdhFPlHuL_Nv1WHnk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=5LCpD0QyVsM:DeJ6buWrWpE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=5LCpD0QyVsM:DeJ6buWrWpE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=5LCpD0QyVsM:DeJ6buWrWpE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=5LCpD0QyVsM:DeJ6buWrWpE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=5LCpD0QyVsM:DeJ6buWrWpE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=5LCpD0QyVsM:DeJ6buWrWpE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=5LCpD0QyVsM:DeJ6buWrWpE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/5LCpD0QyVsM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/8080944834210739991/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/01/blogger-software-quality.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8080944834210739991?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8080944834210739991?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/5LCpD0QyVsM/blogger-software-quality.html" title="The Blogger software &quot;quality&quot;" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/01/blogger-software-quality.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMAQH44eyp7ImA9WxVRFEs.&quot;"><id>tag:blogger.com,1999:blog-22491946.post-8943804889298200244</id><published>2009-01-20T17:04:00.000+01:00</published><updated>2009-01-20T17:04:01.033+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-20T17:04:01.033+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Chrome does not hide an element that is not attached to the document</title><content type="html">&lt;div class="bloggerBody"&gt;&lt;p&gt;In IE, FF and Opera, the following code hides a DIV element, starts loading the content in it and appends the hidden DIV to the body:&lt;/p&gt;&lt;pre name="code" class="jscript"&gt;$("&amp;lt;div id='loginDialog'&amp;gt;").hide().load(url).appendTo("body");&lt;/pre&gt;&lt;p&gt;In Chrome, the element is created, content is loaded into it, it appears at the end of the document, but it’s not hidden. To make the same code work in Chrome, you have to switch the order of operations: append first, hide later:&lt;/p&gt;&lt;pre name="code" class="jscript"&gt;$("&amp;lt;div id='loginDialog'&amp;gt;").appendTo("body").load(url).hide();&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22491946-8943804889298200244?l=ajaxandxml.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mggbNWK39AmMW6aRLpG_-FUuwYw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mggbNWK39AmMW6aRLpG_-FUuwYw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mggbNWK39AmMW6aRLpG_-FUuwYw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mggbNWK39AmMW6aRLpG_-FUuwYw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=20lVsTjdMyw:qdVILMw6BvU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=20lVsTjdMyw:qdVILMw6BvU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=20lVsTjdMyw:qdVILMw6BvU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=20lVsTjdMyw:qdVILMw6BvU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=20lVsTjdMyw:qdVILMw6BvU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AjaxXslt?a=20lVsTjdMyw:qdVILMw6BvU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AjaxXslt?i=20lVsTjdMyw:qdVILMw6BvU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AjaxXslt/~4/20lVsTjdMyw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ajaxandxml.blogspot.com/feeds/8943804889298200244/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ajaxandxml.blogspot.com/2009/01/chrome-does-not-hide-element-that-is.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8943804889298200244?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/22491946/posts/default/8943804889298200244?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AjaxXslt/~3/20lVsTjdMyw/chrome-does-not-hide-element-that-is.html" title="Chrome does not hide an element that is not attached to the document" /><author><name>Ivan Pepelnjak</name><uri>http://www.blogger.com/profile/13457151406311272386</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://i72.photobucket.com/albums/i181/ixpepeln/krneki/Pipi_150x150.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ajaxandxml.blogspot.com/2009/01/chrome-does-not-hide-element-that-is.html</feedburner:origLink></entry></feed>

