<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How IE Mangles The Design Of JavaScript Libraries</title>
	<atom:link href="http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/feed/" rel="self" type="application/rss+xml" />
	<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/</link>
	<description></description>
	<lastBuildDate>Thu, 09 Feb 2012 21:30:02 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Kapouer</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-234951</link>
		<dc:creator>Kapouer</dc:creator>
		<pubDate>Wed, 13 Aug 2008 00:29:47 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-234951</guid>
		<description>Hello, what do you mean by inline HTC ?
For example this has the advantage of being able to add a behaviour to nodes (depending on css selector),
without the need for .htc file on the server (really) :
var fStyle = document.createElement(&quot;style&quot;);
fStyle.setAttribute(&quot;type&quot;, &quot;text/css&quot;);
document.getElementsByTagName(&quot;head&quot;)[0].appendChild(fStyle);
// leave the space &#039;( this&#039;
var fText = &quot;div.test {behavior:expression(myFunction( this, &#039;&quot;+paramStr1+&quot;&#039;,&#039;&quot;+paramStr2+&quot;&#039;))}&quot;;
fStyle.styleSheet.cssText = fText;

myFunction will receive the node in the this parameter, plus some other constant parameters as strings.</description>
		<content:encoded><![CDATA[<p>Hello, what do you mean by inline HTC ?<br />
For example this has the advantage of being able to add a behaviour to nodes (depending on css selector),<br />
without the need for .htc file on the server (really) :<br />
var fStyle = document.createElement(&#8220;style&#8221;);<br />
fStyle.setAttribute(&#8220;type&#8221;, &#8220;text/css&#8221;);<br />
document.getElementsByTagName(&#8220;head&#8221;)[0].appendChild(fStyle);<br />
// leave the space &#8216;( this&#8217;<br />
var fText = &#8220;div.test {behavior:expression(myFunction( this, &#8216;&#8221;+paramStr1+&#8221;&#8216;,&#8217;&#8221;+paramStr2+&#8221;&#8216;))}&#8221;;<br />
fStyle.styleSheet.cssText = fText;</p>
<p>myFunction will receive the node in the this parameter, plus some other constant parameters as strings.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rektide</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-228538</link>
		<dc:creator>rektide</dc:creator>
		<pubDate>Fri, 25 Jan 2008 22:30:09 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-228538</guid>
		<description>the harshest penalty for .innerHTML is tearing down whats inside before building up the new content.  there&#039;s an extremely short and simple piece of JS called replaceHTML that avoids this teardown cost and yields significantly improved ability to replace content on the fly.  i found replaceHTML on ajaxian.com, it&#039;s been very helpful.  past that, i&#039;ve found performance to be mostly a case of best practices: use precached pieces of strings and array.join.</description>
		<content:encoded><![CDATA[<p>the harshest penalty for .innerHTML is tearing down whats inside before building up the new content.  there&#8217;s an extremely short and simple piece of JS called replaceHTML that avoids this teardown cost and yields significantly improved ability to replace content on the fly.  i found replaceHTML on ajaxian.com, it&#8217;s been very helpful.  past that, i&#8217;ve found performance to be mostly a case of best practices: use precached pieces of strings and array.join.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Continuing Intermittent Incoherency &#187; Big Questions On IE8&#8217;s Big Progress</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-227756</link>
		<dc:creator>Continuing Intermittent Incoherency &#187; Big Questions On IE8&#8217;s Big Progress</dc:creator>
		<pubDate>Wed, 23 Jan 2008 10:35:45 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-227756</guid>
		<description>[...] These questions need to be answered, and soon. If the IE team has just replaced one scarce resource for another, we&#8217;re not much better off over the long haul. It&#8217;s great news that the IE team is really implementing the &#8220;renderer selection switch&#8221; which many of us have dreamed of for so long&#8230;but having it continue to be global to the page or in other ways encourage contention on yet another single element in the document wouldn&#8217;t be stepping forward enough.   &#160;  if(!mmposts){var mmposts=[];} mmposts[mmposts.length]=&quot;647&quot;; [...]</description>
		<content:encoded><![CDATA[<p>[...] These questions need to be answered, and soon. If the IE team has just replaced one scarce resource for another, we&#8217;re not much better off over the long haul. It&#8217;s great news that the IE team is really implementing the &#8220;renderer selection switch&#8221; which many of us have dreamed of for so long&#8230;but having it continue to be global to the page or in other ways encourage contention on yet another single element in the document wouldn&#8217;t be stepping forward enough.   &nbsp;  if(!mmposts){var mmposts=[];} mmposts[mmposts.length]=&#8221;647&#8243;; [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Garrett</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-225802</link>
		<dc:creator>Garrett</dc:creator>
		<pubDate>Sun, 20 Jan 2008 18:00:34 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-225802</guid>
		<description>@alex
&lt;blockquote&gt;
Obviously, one could try to wrap the intrinsic functions and detect how they manipulate the length property, but then you’ve ruined their [DontEnum] status and now they end up in the iterable surface area of instances. Ugg.
&lt;/blockquote&gt;

You&#039;re wrong. Changing the value of a property does not change the property&#039;s attributes (DontEnum doesn&#039;t change). Why don&#039;t you try it:


var oldPop = Array.prototype.pop;

Array.prototype.pop = function() {
  alert(&quot;length before: &quot; +this.length);
  oldPop.call(this);
  alert(&quot;length after: &quot; + this.length);
};
alert(Array.prototype.propertyIsEnumerable(&quot;pop&quot;));

[1,2,3].pop();


Whether the DontEnum status is changed should not matter much for Arrays. Normal array iteration is done using a for loop for indexed props.

@alex
&lt;blockquote&gt;
This means that while you can use for(var x in list){ ... style iteration,
&lt;/blockquote&gt;

Using &lt;code&gt;for in&lt;/code&gt; on an Array is a bad practice. It is bad because an Array is may have enumerable properties other than its indexed properties. For example,  &lt;code&gt;Array.prototype.forEach&lt;/code&gt; is sometimes added conditionally:

if(!Array.prototype.forEach) 
Array.prototype.forEach = function() { ... }


If &lt;code&gt;forEach&lt;/code&gt; didn&#039;t exist, it was added as a new property and is enumerable, by default.


var nl = new dojo.NodeList(document.getElementsByTagName(&quot;*&quot;))
nl.length; // It is always 1.
nl.forEach // function...


The &lt;code&gt;length&lt;/code&gt; is always 1, so using a for loop won&#039;t work. The dojo.NodeList keeps its items at position &lt;code&gt;0&lt;/code&gt;

items = nl[0];


var nl = new dojo.NodeList(document.getElementsByTagName(&quot;*&quot;))
nl[0];
nl.forEach;
nl.forEach(function(o){alert(o.tagName);});

Produces one alert of &quot;undefined&quot;.</description>
		<content:encoded><![CDATA[<p>@alex</p>
<blockquote><p>
Obviously, one could try to wrap the intrinsic functions and detect how they manipulate the length property, but then you’ve ruined their [DontEnum] status and now they end up in the iterable surface area of instances. Ugg.
</p></blockquote>
<p>You&#8217;re wrong. Changing the value of a property does not change the property&#8217;s attributes (DontEnum doesn&#8217;t change). Why don&#8217;t you try it:</p>
<p>var oldPop = Array.prototype.pop;</p>
<p>Array.prototype.pop = function() {<br />
  alert(&#8220;length before: &#8221; +this.length);<br />
  oldPop.call(this);<br />
  alert(&#8220;length after: &#8221; + this.length);<br />
};<br />
alert(Array.prototype.propertyIsEnumerable(&#8220;pop&#8221;));</p>
<p>[1,2,3].pop();</p>
<p>Whether the DontEnum status is changed should not matter much for Arrays. Normal array iteration is done using a for loop for indexed props.</p>
<p>@alex</p>
<blockquote><p>
This means that while you can use for(var x in list){ &#8230; style iteration,
</p></blockquote>
<p>Using <code>for in</code> on an Array is a bad practice. It is bad because an Array is may have enumerable properties other than its indexed properties. For example,  <code>Array.prototype.forEach</code> is sometimes added conditionally:</p>
<p>if(!Array.prototype.forEach)<br />
Array.prototype.forEach = function() { &#8230; }</p>
<p>If <code>forEach</code> didn&#8217;t exist, it was added as a new property and is enumerable, by default.</p>
<p>var nl = new dojo.NodeList(document.getElementsByTagName(&#8220;*&#8221;))<br />
nl.length; // It is always 1.<br />
nl.forEach // function&#8230;</p>
<p>The <code>length</code> is always 1, so using a for loop won&#8217;t work. The dojo.NodeList keeps its items at position <code>0</code></p>
<p>items = nl[0];</p>
<p>var nl = new dojo.NodeList(document.getElementsByTagName(&#8220;*&#8221;))<br />
nl[0];<br />
nl.forEach;<br />
nl.forEach(function(o){alert(o.tagName);});</p>
<p>Produces one alert of &#8220;undefined&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alex</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-225068</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Thu, 17 Jan 2008 23:04:41 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-225068</guid>
		<description>Hey Ian:

WRT to getters and setters, there are a couple of design-ish issues at work.

First, the DOM uses implicit getter/setter support to affect the layout and rendering of many parts of the page. If a widget is going to effectively &quot;subclass&quot; an element, it needs to be able to provide a similarly compact and familiar surface area. XBL and HTC provide this capability as a built-in part of their feature set...it simply boggles the mind that despite knowing it would be a critical requirement in a browser environment having done multiple revs of getter/setter bindings for the DOM, MS didn&#039;t provide a language-level construct to get it done. APIs feel more &quot;webish&quot; when you can just set a property and have things happen.

Secondly, many getters and setters can (and should be) auto-generated. One of the major failings with languages like Java is that their getter/setter behaviors require explicit, up-front cooperation. Python and Ruby have nice &quot;outs&quot; (metaclasses and method_missing, respectively) and Java could have bought it&#039;s way out of this with getter/setter decorators, but Java&#039;s annotations are too stupid to express this kind of compact &quot;set it and forget it&quot; default behavior creation without YAPPT (yet another pre-processing tool). This matters a *lot* in cases like data binding where we may not actually want to fetch the value until it&#039;s actually requested and where writing may need to be &quot;async&quot; and/or batched, which we can&#039;t just dish off to a thread in JS-land. Providing stubbed-out property slots allows you to defer the work until it&#039;s actually required, and pre-processing tools generally just don&#039;t work with JavaScript...sure you can go some distance, but creating a build system dependency is a fast-path to oblivion for modern, idiomatic JS toolkit code. If your tool/code requires some build system and someone else&#039;s doesn&#039;t, I&#039;ll be betting on that someone else (hence all of Dojo&#039;s build steps are entirely optional).

Lastly, size matters. You&#039;re right that for any instantaneous example, both approaches are roughly the same size and effort, but with auto-generation of getter/setter behaviors across common concerns, plus not needing the extra 5 chars for every operation, you can do a lot to *reduce* the size of JS code with getters/setters. That matters a ton when you&#039;re measuring increases and reductions to toolkit size in bytes (like we are with Dojo).

Maybe this is all environmental...if the DOM had a getStyle(&quot;display&quot;) method instead of style.display, maybe this wouldn&#039;t even be an issue...but we&#039;re well down the path now, and going against the grain of the web is a bad call now. It&#039;d be great if the JScript team got with the program on this one.

Regards</description>
		<content:encoded><![CDATA[<p>Hey Ian:</p>
<p>WRT to getters and setters, there are a couple of design-ish issues at work.</p>
<p>First, the DOM uses implicit getter/setter support to affect the layout and rendering of many parts of the page. If a widget is going to effectively &#8220;subclass&#8221; an element, it needs to be able to provide a similarly compact and familiar surface area. XBL and HTC provide this capability as a built-in part of their feature set&#8230;it simply boggles the mind that despite knowing it would be a critical requirement in a browser environment having done multiple revs of getter/setter bindings for the DOM, MS didn&#8217;t provide a language-level construct to get it done. APIs feel more &#8220;webish&#8221; when you can just set a property and have things happen.</p>
<p>Secondly, many getters and setters can (and should be) auto-generated. One of the major failings with languages like Java is that their getter/setter behaviors require explicit, up-front cooperation. Python and Ruby have nice &#8220;outs&#8221; (metaclasses and method_missing, respectively) and Java could have bought it&#8217;s way out of this with getter/setter decorators, but Java&#8217;s annotations are too stupid to express this kind of compact &#8220;set it and forget it&#8221; default behavior creation without YAPPT (yet another pre-processing tool). This matters a *lot* in cases like data binding where we may not actually want to fetch the value until it&#8217;s actually requested and where writing may need to be &#8220;async&#8221; and/or batched, which we can&#8217;t just dish off to a thread in JS-land. Providing stubbed-out property slots allows you to defer the work until it&#8217;s actually required, and pre-processing tools generally just don&#8217;t work with JavaScript&#8230;sure you can go some distance, but creating a build system dependency is a fast-path to oblivion for modern, idiomatic JS toolkit code. If your tool/code requires some build system and someone else&#8217;s doesn&#8217;t, I&#8217;ll be betting on that someone else (hence all of Dojo&#8217;s build steps are entirely optional).</p>
<p>Lastly, size matters. You&#8217;re right that for any instantaneous example, both approaches are roughly the same size and effort, but with auto-generation of getter/setter behaviors across common concerns, plus not needing the extra 5 chars for every operation, you can do a lot to *reduce* the size of JS code with getters/setters. That matters a ton when you&#8217;re measuring increases and reductions to toolkit size in bytes (like we are with Dojo).</p>
<p>Maybe this is all environmental&#8230;if the DOM had a getStyle(&#8220;display&#8221;) method instead of style.display, maybe this wouldn&#8217;t even be an issue&#8230;but we&#8217;re well down the path now, and going against the grain of the web is a bad call now. It&#8217;d be great if the JScript team got with the program on this one.</p>
<p>Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian S.</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-224362</link>
		<dc:creator>Ian S.</dc:creator>
		<pubDate>Mon, 14 Jan 2008 16:45:14 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-224362</guid>
		<description>Hi Alex:

Great post. 

Can you explain a little on the &quot;getter/setter&quot; issue? I am not sure of the significance, here is why:

1. For JS toolkit developers, writing and offering an API such as &quot;setProperty1(value&quot;) vs. your suggested approach takes similar efforts;

2. For page authoers, using API such as &quot;obj.setProperty1(value)&quot; vs doing &quot;obj.property1=value&quot; takes similar efforts as well. 

Why do you think the implicit setter/getter via accessing object properties directly is much better than an explict set/get API? 

Thanks.</description>
		<content:encoded><![CDATA[<p>Hi Alex:</p>
<p>Great post. </p>
<p>Can you explain a little on the &#8220;getter/setter&#8221; issue? I am not sure of the significance, here is why:</p>
<p>1. For JS toolkit developers, writing and offering an API such as &#8220;setProperty1(value&#8221;) vs. your suggested approach takes similar efforts;</p>
<p>2. For page authoers, using API such as &#8220;obj.setProperty1(value)&#8221; vs doing &#8220;obj.property1=value&#8221; takes similar efforts as well. </p>
<p>Why do you think the implicit setter/getter via accessing object properties directly is much better than an explict set/get API? </p>
<p>Thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bertrand Le Roy</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223257</link>
		<dc:creator>Bertrand Le Roy</dc:creator>
		<pubDate>Fri, 11 Jan 2008 18:25:44 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223257</guid>
		<description>I agree with most of that, except maybe the bit about DOM performance. I would certainly not go as far as saying IE7 DOM performance is good, but I was stunned when I recently made some perf tests on a prototype that was making heavy DOM manipulations: the slow one currently seems to be Firefox 2. Both Opera and Webkit are an order of magnitude faster than IE, but Firefox was about 30% slower than IE. Fortunately, it seems to be getting better in Firefox 3.</description>
		<content:encoded><![CDATA[<p>I agree with most of that, except maybe the bit about DOM performance. I would certainly not go as far as saying IE7 DOM performance is good, but I was stunned when I recently made some perf tests on a prototype that was making heavy DOM manipulations: the slow one currently seems to be Firefox 2. Both Opera and Webkit are an order of magnitude faster than IE, but Firefox was about 30% slower than IE. Fortunately, it seems to be getting better in Firefox 3.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anne van Kesteren</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223186</link>
		<dc:creator>Anne van Kesteren</dc:creator>
		<pubDate>Fri, 11 Jan 2008 11:02:47 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223186</guid>
		<description>WebKit is implementing the Selectors API and given that it is fairly simple for UAs to implement I think other browsers will follow soon (given that the specification stays relatively stable and all).</description>
		<content:encoded><![CDATA[<p>WebKit is implementing the Selectors API and given that it is fairly simple for UAs to implement I think other browsers will follow soon (given that the specification stays relatively stable and all).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: links for 2008-01-11 &#124; Lazycoder</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223173</link>
		<dc:creator>links for 2008-01-11 &#124; Lazycoder</dc:creator>
		<pubDate>Fri, 11 Jan 2008 10:23:06 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223173</guid>
		<description>[...] How IE Mangles The Design Of JavaScript Libraries (tags: javascript Programming IE WebDevelopment lazycoder) [...]</description>
		<content:encoded><![CDATA[<p>[...] How IE Mangles The Design Of JavaScript Libraries (tags: javascript Programming IE WebDevelopment lazycoder) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Blue Sky On Mars &#187; Blog Archive &#187; links for 2008-01-11</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223157</link>
		<dc:creator>Blue Sky On Mars &#187; Blog Archive &#187; links for 2008-01-11</dc:creator>
		<pubDate>Fri, 11 Jan 2008 09:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223157</guid>
		<description>[...] Continuing Intermittent Incoherency » How IE Mangles The Design Of JavaScript Libraries Alex enumerates several places where IE makes JavaScript (and JavaScript toolkits) way harder than they should be. (tags: javascript programming ie) [...]</description>
		<content:encoded><![CDATA[<p>[...] Continuing Intermittent Incoherency » How IE Mangles The Design Of JavaScript Libraries Alex enumerates several places where IE makes JavaScript (and JavaScript toolkits) way harder than they should be. (tags: javascript programming ie) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alex</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223080</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Fri, 11 Jan 2008 02:39:47 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223080</guid>
		<description>Anne:

I sort of agree...it&#039;s just that XBL is *also* terrible. XBL 2.0 seems to natively support inlining definitions which is an improvement. Regardless, it still forces you into the XML straight-jacket for what is a purely HTML-centric endeavor. 

Frankly, most of us would just settle for the selectors API being implemented anywhere...boiling the ocean (ala XBL) might be the right end point, but the transition period needs some love. Any movement on that front from anyone would be hugely helpful.

Regards</description>
		<content:encoded><![CDATA[<p>Anne:</p>
<p>I sort of agree&#8230;it&#8217;s just that XBL is *also* terrible. XBL 2.0 seems to natively support inlining definitions which is an improvement. Regardless, it still forces you into the XML straight-jacket for what is a purely HTML-centric endeavor. </p>
<p>Frankly, most of us would just settle for the selectors API being implemented anywhere&#8230;boiling the ocean (ala XBL) might be the right end point, but the transition period needs some love. Any movement on that front from anyone would be hugely helpful.</p>
<p>Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anne van Kesteren</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223058</link>
		<dc:creator>Anne van Kesteren</dc:creator>
		<pubDate>Fri, 11 Jan 2008 00:54:39 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223058</guid>
		<description>As for your last point: http://www.w3.org/TR/xbl/ Just need implementations...</description>
		<content:encoded><![CDATA[<p>As for your last point: <a href="http://www.w3.org/TR/xbl/" rel="nofollow">http://www.w3.org/TR/xbl/</a> Just need implementations&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: RichB</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223028</link>
		<dc:creator>RichB</dc:creator>
		<pubDate>Thu, 10 Jan 2008 22:00:05 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223028</guid>
		<description>Doctype switching:
We need to go further and have something like the proposed reset element. We need something such as a new CSS attribute to cause an element to become a new Initial Containing Block (and thus a new block formatting context too), along with preventing CSS inheritance from parent blocks.

Only then will HTML componentization become a reality.</description>
		<content:encoded><![CDATA[<p>Doctype switching:<br />
We need to go further and have something like the proposed reset element. We need something such as a new CSS attribute to cause an element to become a new Initial Containing Block (and thus a new block formatting context too), along with preventing CSS inheritance from parent blocks.</p>
<p>Only then will HTML componentization become a reality.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alex</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-223018</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Thu, 10 Jan 2008 21:06:56 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-223018</guid>
		<description>Hey bobby:

Yeah, I&#039;ll blog more about lettable once I&#039;ve got all the wrinkles ironed out. It&#039;s really painful to use because the lettable objects can&#039;t participate in the prototype chain due to the way JScript/VBscript object peering appears to work and the fact that VBScript class instances don&#039;t appear to be as mutable as JS objects.

Regardless, it may be enough...we&#039;ll see. I still haven&#039;t spent any time looking at the performance, which I expect to be terrible on IE.

Regards</description>
		<content:encoded><![CDATA[<p>Hey bobby:</p>
<p>Yeah, I&#8217;ll blog more about lettable once I&#8217;ve got all the wrinkles ironed out. It&#8217;s really painful to use because the lettable objects can&#8217;t participate in the prototype chain due to the way JScript/VBscript object peering appears to work and the fact that VBScript class instances don&#8217;t appear to be as mutable as JS objects.</p>
<p>Regardless, it may be enough&#8230;we&#8217;ll see. I still haven&#8217;t spent any time looking at the performance, which I expect to be terrible on IE.</p>
<p>Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: h3</title>
		<link>http://infrequently.org/2008/01/how-ie-mangles-the-design-of-javascript-libraries/comment-page-1/#comment-222991</link>
		<dc:creator>h3</dc:creator>
		<pubDate>Thu, 10 Jan 2008 18:57:38 +0000</pubDate>
		<guid isPermaLink="false">http://alex.dojotoolkit.org/?p=644#comment-222991</guid>
		<description>Nice post, lots of truth, thanks.

But JavaScript Libraries developpers are not the only victims of IE. I can&#039;t recall how many time I coded something (anything) in JavaScript and made it work in Firefox in a breeze with a beautiful  minimalist and high level code .. until I make it work in IE and have to thow in a bunch of ugly hacks and conditions. That is *so* depressing.

I wonder if one day web developpers of the world will unite for a class action against Microsoft for all these years of imposed stress, I&#039;m sure some of us are bald now because of IE *g*.</description>
		<content:encoded><![CDATA[<p>Nice post, lots of truth, thanks.</p>
<p>But JavaScript Libraries developpers are not the only victims of IE. I can&#8217;t recall how many time I coded something (anything) in JavaScript and made it work in Firefox in a breeze with a beautiful  minimalist and high level code .. until I make it work in IE and have to thow in a bunch of ugly hacks and conditions. That is *so* depressing.</p>
<p>I wonder if one day web developpers of the world will unite for a class action against Microsoft for all these years of imposed stress, I&#8217;m sure some of us are bald now because of IE *g*.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

