<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-20736130</id><updated>2012-04-16T01:26:59.770+03:00</updated><title type='text'>Cute solutions and something else...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20736130.post-115736362043855261</id><published>2006-09-04T12:53:00.000+03:00</published><updated>2006-09-04T12:59:02.626+03:00</updated><title type='text'>Order of events: Game over</title><content type='html'>&lt;p&gt;I wrote about events order in one of my&amp;nbsp;previous&amp;nbsp;&lt;a href="http://cute-solutions.blogspot.com/2006/02/order-of-events.html"&gt;posts&lt;/a&gt;&amp;nbsp;and I found in commens&amp;nbsp;some interesting ideas, like &lt;a href="http://en.design-noir.de/webdev/JS/addEvent/" target="_blank"&gt;addEvent&lt;/a&gt; (thx &lt;strong&gt;Dao&lt;/strong&gt; and &lt;strong&gt;Diego&lt;/strong&gt;). So, I wanted to have solution integrated in &lt;a href="http://prototype.conio.net/" target="_blank"&gt;prototype&lt;/a&gt; and I got it. &lt;a href="http://svn.danwebb.net/external/lowpro/trunk/doc/README"&gt;Low Pro&lt;/a&gt; is the extension to prototype.js and it also solves the problem of events order. New version of Event.observe is based on Dean Edwards' &lt;a href="http://dean.edwards.name/weblog/2005/10/add-event/"&gt;addEvent&lt;/a&gt;. BTW Low Pro requests prototype v.1.5.0 RC1 but I guess it's not a big deal.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20736130-115736362043855261?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/115736362043855261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=115736362043855261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/115736362043855261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/115736362043855261'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/09/order-of-events-game-over.html' title='Order of events: Game over'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20736130.post-115196768760646705</id><published>2006-07-04T01:30:00.000+03:00</published><updated>2007-02-20T07:01:19.746+02:00</updated><title type='text'>innerHTML vs createElement</title><content type='html'>AFAIK  creating DOM elements with the help of Javascript is a very popular task. And there exist two popular common methods to do it: to use &lt;code&gt;parentNode.innerHTML&lt;/code&gt; property or methods &lt;code&gt;document.createElement() + parentNode.appendChild(node)&lt;/code&gt;. Surely there are other methods like &lt;code&gt;table.insertRow()&lt;/code&gt; or &lt;code&gt;select.options[index] = new Option()&lt;/code&gt; but these ones are commonly used. Let's analyze them according to the following characteristics: &lt;span style="font-style: italic;"&gt;compliance&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;speed&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;memory usage&lt;/span&gt;. See the sample page &lt;a href="http://rahman.roman.googlepages.com/20060704-innerHTML-vs-createElement.html" target="_blank"&gt;here&lt;/a&gt;. It demonstrates how to insert 1000 equal images about 1Kb size in the DIV via innerHTML or createElement.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Compliance&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.mozilla.org/en/docs/DOM:element.innerHTML" target="_blank"&gt;DOM:element.innerHTML&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;As there is no public specification for this property, implementations differ widely. For example, when text is entered into a text input, IE changes the value attribute of the input's innerHTML property but Gecko browsers do not. &lt;/p&gt;&lt;p&gt;It should never be used to write parts of a table—W3C DOM methods are to be used for that—though it can be used to write an entire table or the content of a cell.&lt;/p&gt;&lt;/blockquote&gt;createElement: &lt;span style="font-weight: bold;"&gt;+1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Speed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Firfox 1.5.0.4&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;innerHTML — 1524, 1472, 1483&lt;/li&gt;&lt;li&gt;createElement — 4687, 2584, 2573 &lt;span style="color: rgb(102, 102, 102);"&gt;(strange speed-up after page refresh)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Internet Explorer 6.0&lt;/span&gt; &lt;span style="color: rgb(102, 102, 102);"&gt;(woah! really rocket-like speed)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;innerHTML — 360, 320, 211&lt;/li&gt;&lt;li&gt;createElement — 360, 421, 390&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Usually innerHTML is much more quicker than createElement in Firefox and a bit quicker in Inernet Explorer&lt;br /&gt;&lt;br /&gt;innerHTML: &lt;span style="font-weight: bold;"&gt;+1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Memory usage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;See these two memory diagrams below (private bites of Internet Explorer process):&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;img style="margin-right: 5px;" alt="use innerHTML" src="http://photos1.blogger.com/blogger/3026/2088/320/innerHTML-mem.gif" border="0" /&gt;&lt;img alt="use createElement" src="http://photos1.blogger.com/blogger/3026/2088/320/createElement-mem.gif" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So... Internet Explorer uses more memory when you try to insert HTML with images via innerHTML instead of createElement. Don't forget it!&lt;br /&gt;Firefox doesn't have similar memory problems.&lt;br /&gt;&lt;br /&gt;createElement: &lt;span style="font-weight: bold;"&gt;+1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The final score - &lt;span style="font-weight: bold;"&gt;2:1&lt;/span&gt; in favor of createElement&lt;br /&gt;&lt;br /&gt;In most cases createElement is a more powerful method. And using something like&lt;br /&gt;&lt;a href="http://pawel.saikko.com/domel-easier-dom-manipulation,20060325" target="_blank"&gt;domEl()&lt;/a&gt; is more useful and quite simple.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20736130-115196768760646705?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/115196768760646705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=115196768760646705' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/115196768760646705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/115196768760646705'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/07/innerhtml-vs-createelement.html' title='innerHTML vs createElement'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20736130.post-115097398064369040</id><published>2006-06-22T13:20:00.000+03:00</published><updated>2007-02-07T10:48:00.553+02:00</updated><title type='text'>Unexpected smiles in Skype: Part 2</title><content type='html'>So, new release of Skype is &lt;a href="http://www.skype.com/download/" target="_blank"&gt;2.5&lt;/a&gt; and certainly they've added new &lt;span style=""&gt;smileys&lt;/span&gt;. First of all every smile is animated now. There also appeared several new ones like (angel) and (hug) . And surely there  are a few new "secret" combinations:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;(drunk)&lt;/li&gt;&lt;li&gt;(smoking) (smoke) (ci)&lt;/li&gt;&lt;li&gt;(rock) i like it&lt;/li&gt;&lt;li&gt;(headbang) (banghead) - very useful indeed&lt;br /&gt;&lt;/li&gt;&lt;li&gt;(flag:%%) e.g. (flag:gb), (flag:ua) etc.&lt;/li&gt;&lt;/ul&gt;See below map of countries codes and flags:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3026/2088/1600/1392.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/3026/2088/400/1392.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20736130-115097398064369040?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/115097398064369040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=115097398064369040' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/115097398064369040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/115097398064369040'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/06/unexpected-smiles-in-skype-part-2.html' title='Unexpected smiles in Skype: Part 2'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20736130.post-114287229809075114</id><published>2006-03-20T18:12:00.000+02:00</published><updated>2006-03-20T19:05:49.700+02:00</updated><title type='text'>Internet Explorer's SELECT element vs DOM sandwich</title><content type='html'>&lt;p&gt;If you are a web developer and use absolutely positioned layers in your HTML pages I guess you’ve ever come across the situation when SELECT element ignored z-index property and was rendered above the rest of element. I think this is the ugliest problem of Internet Explorer 6-. I read it was &lt;a href="http://blogs.msdn.com/ie/archive/2006/01/17/514076.aspx" target="_blank"&gt;fixed&lt;/a&gt; in the IE 7 beta 2 but this build will be popular much later. &lt;/p&gt;Actually I know a couple of workarounds for this problem.&lt;br&gt;&lt;br /&gt;&lt;p&gt;1) Just hide SELECTs when DIV appears above them.&lt;br /&gt;&lt;a href="http://www.dynarch.com/projects/calendar/" target="_blank"&gt;JavaScript Calendar&lt;/a&gt; by &lt;a href="http://www.bazon.net/mishoo/" target="_blank"&gt;Mihai Bazon&lt;/a&gt;&lt;/p&gt;&lt;b&gt;Before:&lt;/b&gt;&lt;br /&gt;&lt;img height="145" src="http://photos1.blogger.com/blogger/3026/2088/1600/jscal-before.jpg" width="425" border="0" /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;After:&lt;/b&gt;&lt;br /&gt;&lt;img height="145" src="http://photos1.blogger.com/blogger/3026/2088/1600/jscal-after.jpg" width="425" border="0" /&gt;&lt;/p&gt;Just in case, incorrect behavior of years and months drop-down lists:&lt;br /&gt;&lt;img height="145" src="http://photos1.blogger.com/blogger/3026/2088/1600/jscal-dropdown.jpg" width="425" border="0" /&gt;&lt;br /&gt;&lt;p&gt;If you use this method don’t forget &amp;shy;to use visibility:hidden instead of display:none.&lt;br /&gt;Do you know why?&lt;/p&gt;&lt;br&gt;2) Replace drop-down SELECTs by INPUT[type=text]&lt;br /&gt;&lt;a href="http://www.fogcreek.com/FogBugz/"&gt;FogBugz&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Before:&lt;/b&gt;&lt;br /&gt;&lt;img height="120" src="http://photos1.blogger.com/blogger/3026/2088/1600/fogbugz-before.jpg" width="385" border="0" /&gt;&lt;/p&gt;&lt;b&gt;After:&lt;/b&gt;&lt;br /&gt;&lt;img height="120" src="http://photos1.blogger.com/blogger/3026/2088/1600/fogbugz-after.jpg" width="385" border="0" /&gt;&lt;br /&gt;&lt;p&gt;Respect. Very smart, but script does it in Mozilla/Firefox as well. It isn’t necessary in non-IE browsers.&lt;/p&gt;And I use my own solution. I know it’s not original and I saw a few sites use the same method. Look at drop-down "Address book" on &lt;a href="http://singlescrowd.com/" target="_blank"&gt;Singlescrowd Dating Portal&lt;/a&gt;&lt;br /&gt;&lt;img alt="" src="http://photos1.blogger.com/blogger/3026/2088/320/singles.jpg" border="0" /&gt;&lt;br /&gt;&lt;p&gt;How does it work? We use DOM sandwich from DIV and IFRAME. IFRAME is an element which could be rendered above the SELECT&lt;/p&gt;This window-like UI element is based on library &lt;a href="http://singlescrowd.com/scripts/layer.js"&gt;layer.js&lt;/a&gt;.&lt;br /&gt;All layers are instances of Layer Object which has a special method for preventing wrong rendering of SELECT tag. Even transparent IFRAME could cover SELECT, it’s really amazing.&lt;br /&gt;&lt;br /&gt;&lt;DIV class="dp-highlighter"&gt;&lt;TABLE class=syntaxHighlighter cellSpacing=0 cellPadding=0 border=0&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class=line1&gt;&lt;SPAN&gt;Layer.prototype.fixIEListboxBug&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;function&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;_Layer_fixIEListboxBug()&amp;nbsp;{ &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN class=client&gt;document&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN class=client&gt;all&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!&lt;/SPAN&gt;&lt;SPAN class=client&gt;window&lt;/SPAN&gt;&lt;SPAN&gt;.opera)&amp;nbsp;{ &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;var&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;content&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div.innerHTML; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div.innerHTML&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;'&amp;lt;iframe&amp;nbsp;frameborder="0"&amp;nbsp;style="position:absolute;&amp;nbsp;left:0;&amp;nbsp;top:0;&amp;nbsp;width:100%;&amp;nbsp;height:100%;&amp;nbsp;margin:0;&amp;nbsp;padding:0;&amp;nbsp;background:transparent;&amp;nbsp;filter:alpha(opacity=0);"&amp;gt;&amp;lt;/iframe&amp;gt;'&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.iframe&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div.firstChild; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=client&gt;document&lt;/SPAN&gt;&lt;SPAN&gt;.createElement(&lt;/SPAN&gt;&lt;SPAN class=string&gt;'DIV'&lt;/SPAN&gt;&lt;SPAN&gt;); &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div.appendChild(child); &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.style.position&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;'absolute'&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.style.left&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;'0px'&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.style.top&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;'0px'&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.style.width&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;'100%'&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.style.height&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;'100%'&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.innerHTML&amp;nbsp;=&amp;nbsp;content; &amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;child.className&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div.className; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div.className&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=string&gt;''&lt;/SPAN&gt;&lt;SPAN&gt;; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;child; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;else&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;{ &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;return&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=keyword&gt;this&lt;/SPAN&gt;&lt;SPAN&gt;.div; &amp;nbsp;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class=line2&gt;} &amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20736130-114287229809075114?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/114287229809075114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=114287229809075114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/114287229809075114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/114287229809075114'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/03/internet-explorers-select-element-vs.html' title='Internet Explorer&apos;s SELECT element vs DOM sandwich'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20736130.post-114052502475071536</id><published>2006-02-21T14:10:00.000+02:00</published><updated>2006-11-04T17:25:32.596+02:00</updated><title type='text'>Order of Events</title><content type='html'>&lt;p&gt;I use &lt;a href="http://prototype.conio.net/"&gt;prototype.js&lt;/a&gt; as many other developers in the world do.&lt;br&gt;I guess one of the most useful objects in this framework is Event. It’s a really simple way for observing events without any thoughts about &lt;a href="http://www-128.ibm.com/developerworks/web/library/wa-ie2mozgd/#event_differences"&gt;difference&lt;/a&gt; between Event Model in Internet Explorer and "Truth Nice Browsers" (like &lt;a href="http://www.mozilla.com/"&gt;Firefox&lt;/a&gt;). &lt;/p&gt;You can just write:&lt;br&gt;&lt;div class="dp-highlighter"&gt;&lt;table class="syntaxHighlighter" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="line1"&gt;Event.observe(&lt;span class="client"&gt;window&lt;/span&gt;, &lt;span class="string"&gt;"load"&lt;/span&gt;, myLoadHandler); &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;Dead easy!&lt;br&gt;&lt;p&gt;But there’s a thing which drives me mad sometimes. It’s the order of event firing. And it’s not a problem of Prototype framework, but problem of Internet Explorer Event Model.&lt;/p&gt;Just a small example (don't forget to include prototype.js):&lt;br&gt;&lt;div class="dp-highlighter"&gt;&lt;table class="syntaxHighlighter" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="line1"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;count&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="number"&gt;2&lt;/span&gt;&lt;span&gt;;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line2"&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;i=&amp;nbsp;&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span&gt;&amp;nbsp;;&amp;nbsp;i&amp;lt;=count;&amp;nbsp;i++)&amp;nbsp;{&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;handler&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="native"&gt;Function&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="string"&gt;'alert('&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;+&amp;nbsp;i&amp;nbsp;+&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;')'&lt;/span&gt;&lt;span&gt;);&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Event.observe(&amp;nbsp;&lt;span class="client"&gt;window&lt;/span&gt;&lt;span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;'load'&lt;/span&gt;&lt;span&gt;&amp;nbsp;,&amp;nbsp;handler); &amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line1"&gt;}&amp;nbsp; &amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;What order of alerts do you see in Firefox?  Bingo! &lt;strong&gt;1&lt;/strong&gt;, &lt;strong&gt;2&lt;/strong&gt;&lt;br&gt;In Internet Explorer? Huh, &lt;strong&gt;2&lt;/strong&gt;, &lt;strong&gt;1&lt;/strong&gt;&lt;/p&gt;Set count = 3 and repeat.&lt;br&gt;Firefox? Surely &lt;strong&gt;1&lt;/strong&gt;, &lt;strong&gt;2&lt;/strong&gt;, &lt;strong&gt;3&lt;br&gt;&lt;/strong&gt;IE? &lt;strong&gt;3&lt;/strong&gt;, &lt;strong&gt;2&lt;/strong&gt;, &lt;strong&gt;1&lt;/strong&gt;? Sorry, actually not! &lt;strong&gt;2&lt;/strong&gt;, &lt;strong&gt;3&lt;/strong&gt;, &lt;strong&gt;1&lt;/strong&gt;. Why? Don’t ask me, please.&lt;br&gt;&lt;p&gt;Interested? Let’s continue with count = 4&lt;br&gt;Firefox: &lt;strong&gt;1&lt;/strong&gt;, &lt;strong&gt;2&lt;/strong&gt;, &lt;strong&gt;3&lt;/strong&gt;, &lt;strong&gt;4&lt;/strong&gt;. If we had got another result I would have eaten my &lt;a href="http://visibone.com/javascript/"&gt;VisiBone&lt;br&gt;Javascript card&lt;/a&gt;&lt;br&gt;And extra-weird in IE: &lt;strong&gt;2&lt;/strong&gt;, &lt;strong&gt;4&lt;/strong&gt;, &lt;strong&gt;3&lt;/strong&gt;, &lt;strong&gt;1&lt;/strong&gt;&lt;/p&gt;What’s the method of events ordering that IE uses? Neither FIFO (like Firefox), nor LIFO.&lt;br&gt;This software makes me more and more unhappy.&lt;br&gt;&lt;p&gt;BTW, I checked this code in IE 6.0 (Window 2000) and IE 7 b2 (Windows XP).&lt;br&gt;As you can suspect, the result was the same.&lt;/p&gt;Why did I start from prototype and how is it related to the ugly IE Event Model?&lt;br&gt;&lt;p&gt; I think it’d be very nice if &lt;a href="http://conio.net/"&gt;Sam Stephenson&lt;/a&gt; included algorithm which will correct this IE bug to prototype Event object I mean &lt;span style="font-weight: bold;"&gt;Event.observe() &lt;/span&gt;shouldn’t add event handler directly by calling &lt;span style="font-weight: bold;"&gt;.addEventListener()&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;.attachEvent()&lt;/span&gt; but store handlers in internal hash and call them in right order. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20736130-114052502475071536?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/114052502475071536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=114052502475071536' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/114052502475071536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/114052502475071536'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/02/order-of-events.html' title='Order of Events'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20736130.post-113826443834843130</id><published>2006-01-26T10:30:00.000+02:00</published><updated>2007-04-01T14:00:31.956+03:00</updated><title type='text'>Unexpected smiles in Skype</title><content type='html'>Do you use Skype?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;No&lt;/span&gt;?! Go &lt;a href="http://www.skype.com/download/"&gt;http://www.skype.com/download/&lt;/a&gt; and try it immediately.&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Yes&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;! &lt;/span&gt;Well, you understand me. I like Skype for a lot of cute features including pretty smile-pack, but… there’re some unknown (and a bit abusive) smiles in Skype, which you’re not able to select from smiles drop-down list when you’re chatting. You just have to type (or copy and paste) them.&lt;br /&gt;&lt;br /&gt;Let’s try:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;(bandit) – some kind of ninja&lt;/li&gt;   &lt;li&gt;(toivo) – actually I don’t know what it is&lt;/li&gt;   &lt;li&gt;(finger) – use it in the chat with your boss ;-)&lt;/li&gt;   &lt;li&gt;(mooning) – lovely!!!&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/20736130-113826443834843130?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/113826443834843130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=113826443834843130' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/113826443834843130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/113826443834843130'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/01/unexpected-smiles-in-skype.html' title='Unexpected smiles in Skype'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20736130.post-113826410053982705</id><published>2006-01-26T10:22:00.000+02:00</published><updated>2007-02-21T18:56:44.503+02:00</updated><title type='text'>AJAX becomes standard</title><content type='html'>&lt;p&gt;Some skeptics said — AJAX isn’t a standard but a set of separated libraries.&lt;/p&gt;Now this is just a question of time. "The W3C Web API Working Group is &lt;strong&gt;chartered&lt;/strong&gt; to develop standard APIs..." blah-blah-blah.&lt;br /&gt;&lt;p&gt;My friend asked me – who paid whom and how much?&lt;/p&gt;&lt;a href="http://www.w3.org/2006/webapi/"&gt;http://www.w3.org/2006/webapi/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20736130-113826410053982705?l=cute-solutions.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cute-solutions.blogspot.com/feeds/113826410053982705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20736130&amp;postID=113826410053982705' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/113826410053982705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20736130/posts/default/113826410053982705'/><link rel='alternate' type='text/html' href='http://cute-solutions.blogspot.com/2006/01/ajax-becomes-standard.html' title='AJAX becomes standard'/><author><name>Роман Рахман</name><uri>http://www.blogger.com/profile/02056228767980705581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.ru/rahman.roman/AAAA4586k0Y/AAAAAAAACI0/g5nM2Fe7PMU/s48-c/rahman.roman'/></author><thr:total>2</thr:total></entry></feed>
