<?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;Ck4GQHg4cSp7ImA9WhRVEkU.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258</id><updated>2012-01-11T13:22:01.639+02:00</updated><category term="flash" /><category term="icons" /><category term="books" /><category term="filmmaking" /><category term="fonts" /><category term="films" /><category term="adobe" /><category term="ssjs" /><category term="chrome" /><category term="audio" /><category term="matte painting" /><category term="lightbox" /><category term="brilliantevent" /><category term="richfaces" /><category term="adobe premiere" /><category term="video" /><category term="opera" /><category term="training" /><category term="rootcause" /><category term="i18n" /><category term="iis" /><category term="jsf" /><category term="web tools" /><category term="java" /><category term="text to speech" /><category term="webinar" /><category term="bitpim" /><category term="effect" /><category term="cheats" /><category term="contacts" /><category term="degrafa" /><category term="wireshark" /><category term="wordpress" /><category term="pdf" /><category term="captions" /><category term="ie6" /><category term="Eclipse" /><category term="mac" /><category term="asp.net" /><category term="jwplayer" /><category term="aac" /><category term="statistics" /><category term="framework" /><category term="sharepoint-2010" /><category term="text effect" /><category term="json" /><category term="google" /><category term="education" /><category term="gradients" /><category term="404 errors" /><category term="indesign" /><category term="tooltips" /><category term="web banners" /><category term="itemrenderer" /><category term="inspiration" /><category term="cs4" /><category term="csharp" /><category term="typography" /><category term="opensource" /><category term="plugin" /><category term="animation" /><category term="user interface" /><category term="drag-and-drop" /><category term="canvas" /><category term="Flash Player Manager" /><category term="footer" /><category term="cs5" /><category term="menu" /><category term="scripts" /><category term="usability" /><category term="wireframes" /><category term="navigation" /><category term="freebies" /><category term="dreamweaver" /><category term="air" /><category term="cloud computing" /><category term="wallpaper" /><category term="photoshop" /><category term="cell phone" /><category term="autocomplete" /><category term="widgets" /><category term="ie" /><category term="seo" /><category term="gbs" /><category term="filters" /><category term="datagrid" /><category term="jquery" /><category term="logos" /><category term="mono project" /><category term="web-based html editors" /><category term="slider" /><category term="gumbo" /><category term="twitter" /><category term="shtml" /><category term="kap inspect" /><category term="project management" /><category term="social media" /><category term="ssi" /><category term="contenttype" /><category term="winzip" /><category term="mobile" /><category term="psd" /><category term="calendar" /><category term="stock photos" /><category term="templates" /><category term="video tag" /><category term="html5" /><category term="3d" /><category term="vcard" /><category term="registry" /><category term="mailto" /><category term="illustrator" /><category term="gwt" /><category term="dts wizard" /><category term="open source" /><category term="syntax" /><category term="validation" /><category term="trends" /><category term="windows 7" /><category term="exceptions" /><category term="firefox" /><category term="iphone" /><category term="accessibility" /><category term="facelets" /><category term="cross-browser testing" /><category term="windows xp" /><category term="css" /><category term="css sprites" /><category term="e4x" /><category term="web service" /><category term="servlet" /><category term=".net" /><category term="performance" /><category term="strings" /><category term="anythingslider" /><category term="vb.net" /><category term="utility" /><category term="avatars" /><category term="xml" /><category term="buttons" /><category term="gravatar" /><category term="fireworks" /><category term="brushes" /><category term="mysql" /><category term="css3" /><category term="rdfa" /><category term="parameters" /><category term="file search" /><category term="flex" /><category term="page curl" /><category term="visual studio" /><category term="web file manager" /><category term="m4a" /><category term="semantic search" /><category term="javascript library" /><category term="swf" /><category term="testing" /><category term="c:forEach" /><category term="itunes" /><category term="prototype" /><category term="web design" /><category term="electronic paper" /><category term="recursion" /><category term="yui" /><category term="gallery" /><category term="yahoo" /><category term="cufon" /><category term="JBoss Seam" /><category term="javascript" /><category term="joomla" /><category term="timeline" /><category term="passwords" /><category term="AJAX" /><category term="ipad" /><category term="charts and graphs" /><category term="wacom" /><category term="business intelligence" /><category term="hand drawn" /><category term="browsers" /><category term="portfolio" /><category term="data visualization" /><category term="conditional-content" /><category term="agile" /><category term="web conferencing" /><category term="cms" /><category term="classic asp" /><category term="textures" /><category term="web-safe" /><category term="rounded corners" /><category term="html 5" /><category term="forms" /><category term="ASDoc" /><category term="progressive enhancement" /><category term="Curl" /><category term="motorola" /><category term="intranet" /><category term="apache" /><category term="debug" /><category term="fancybox" /><category term="vu204" /><category term="office" /><category term="color tools" /><category term="cinemagraphs" /><category term="background image" /><category term="tabs" /><category term="sliding doors" /><category term="internet explorer" /><category term="php" /><category term="patterns" /><category term="tutorial" /><category term="random" /><category term="careers" /><category term="hdr" /><category term="preload images" /><category term="talking heads" /><category term="sql server" /><category term="JavaFX" /><category term="captcha" /><category term="blogger" /><category term="jobs" /><category term="mp4 video" /><category term="hacks" /><category term="httpservice" /><category term="model" /><category term="screenwriting" /><title>Dev Harbor</title><subtitle type="html">Web application R&amp;amp;D notes, from the world of Java, Flex, CSS, XHTML, Flash, .NET,  cross-browser compatibility, JavaScript, AJAX, ADA compliance, Photoshop, and any and all things related to Web development!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://devharbor.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>1218</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DevHarbor" /><feedburner:info uri="devharbor" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk8FSHo9fSp7ImA9WhRTFks.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-2451014866829017005</id><published>2011-10-27T13:06:00.002+02:00</published><updated>2011-11-07T13:20:19.465+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T13:20:19.465+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="recursion" /><category scheme="http://www.blogger.com/atom/ns#" term="csharp" /><title>SharePoint: Get parent site title</title><content type="html">In SharePoint, we can use subsites to handle navigation beyond the 2nd level; let's assume we have a structure such as this:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Site Collection Root&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt; Site 1: site title - "Products &amp;amp; Software"&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Subsite A: site title - "Widgets"&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Subsite AA: site title - "Widget X"&lt;/li&gt;
&lt;li&gt;Subsite BB: site title - "Widget Y"&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Site 2&lt;/li&gt;
&lt;li&gt;Site 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
It often makes sense to show Site 1's title "Products &amp;amp; Software" down that branch of subsites, regardless of how deep you are. This helps users know they're still under "Products &amp;amp; Software". To fetch the root parent's title (Site1, not the Site Collection Root), you have to use a recursive function, &lt;a href="http://lawo.wordpress.com/2011/03/21/dispose-spweb-objects-while-iterating-to-parentweb/"&gt;thanks to W0ut&lt;/a&gt; and &lt;a href="http://sharepoint.stackexchange.com/questions/22177/nullreferenceexception-on-function-call-in-master-page"&gt;help from Stack Exchange&lt;/a&gt;:
&lt;br /&gt;
&lt;pre class="brush: csharp"&gt;protected override void OnLoad(EventArgs e)
{
  // To ensure page behaves correctly, must call base.OnLoad(e).
  base.OnLoad(e);

  GetRootTitle();
}

private void GetRootTitle()
{
  string title = string.Empty;

  /* 
     On admin pages, this label object doesn't exist and will throw
     a NullReferenceException if we don't check it before trying
     to use it.
  */
  if (sectionTitle == null) return;

  using (SPSite site = new SPSite(SPContext.Current.Site.ID))
  {
    using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
    {
      title = IterateThroughParentsAndStoreInfo(web, title);
    }
  }

  sectionTitle.Text = title; // Set a label's value to the title.
}

private string IterateThroughParentsAndStoreInfo(SPWeb web, string title)
{
  if (web.ParentWeb != null)
  {
    title = web.Title;
    return IterateThroughParentsAndStoreInfo(web.ParentWeb, title);
  }
  return title;
}&lt;/pre&gt;
Note the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;using&lt;/span&gt; statements; these ensure there are no memory leaks by disposing of the objects properly and also implicitly handling the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;try/catch/finally&lt;/span&gt; block. The change to W0ut's code is the addition of the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;OnLoad()&lt;/span&gt; handler, which can be either in your master page or page layout. Also, we've added the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;title&lt;/span&gt; variable, which gets set in the recursive function; note that its value is always of the title for the site one before the last. This is because when the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;web&lt;/span&gt; variable's &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;ParentWeb&lt;/span&gt; becomes null, we've reached the site collection. This is exactly what we need.&lt;br /&gt;
&lt;br /&gt;
One last thing to note: We do a null check for the label object which will hold the title's value. On some administrative (system) pages, the label isn't rendered so we'll throw a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;NullReferenceException&lt;/span&gt;. Another way to do this is to always add the title label as a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;new Label()&lt;/span&gt;; this way it's always present, regardless of which page we're on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-2451014866829017005?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LmugZdEHfHwZj6oWTemYtN6iOj0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LmugZdEHfHwZj6oWTemYtN6iOj0/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/LmugZdEHfHwZj6oWTemYtN6iOj0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LmugZdEHfHwZj6oWTemYtN6iOj0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/vR-yCg2ARwc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/2451014866829017005/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=2451014866829017005" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/2451014866829017005?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/2451014866829017005?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/vR-yCg2ARwc/sharepoint-get-parent-site-title.html" title="SharePoint: Get parent site title" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/10/sharepoint-get-parent-site-title.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIFQn84cSp7ImA9WhdaEE0.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-821932221216879774</id><published>2011-10-19T08:51:00.000+02:00</published><updated>2011-10-19T08:58:33.139+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T08:58:33.139+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ie" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>IE7 and "Error: Expected identifier, string or number"</title><content type="html">IE7 (and earlier versions) have trouble with errant commas in array declarations. Take this code, provided by James Messinger on &lt;a href="http://stackoverflow.com/questions/690781/debugging-scripts-added-via-jquery-getscript-function"&gt;Stack Overflow&lt;/a&gt;:&lt;br /&gt;
&lt;pre class="brush: js"&gt;&amp;lt;script type="text/javascript"&amp;gt;
// Replace the normal jQuery getScript function with one that supports
// debugging and which references the script files as external resources
// rather than inline.
jQuery.extend({
   getScript: function(url, callback) {
      var head = document.getElementsByTagName("head")[0];
      var script = document.createElement("script");
      script.src = url;

      // Handle Script loading
      {
         var done = false;

         // Attach handlers for all browsers
         script.onload = script.onreadystatechange = function(){
            if ( !done &amp;amp;&amp;amp; (!this.readyState ||
                  this.readyState == "loaded" || this.readyState == "complete") ) {
               done = true;
               if (callback)
                  callback();

               // Handle memory leak in IE
               script.onload = script.onreadystatechange = null;
            }
         };
      }

      head.appendChild(script);

      // We handle everything using the script element injection
      return undefined;
   }, // &amp;lt;-- Unneeded comma which blows up IE7.
});
&amp;lt;/script&amp;gt;&lt;/pre&gt;
IE7 blows up with this error:&lt;br /&gt;
&lt;pre class="brush: text"&gt;Error: Expected identifier, string or number&lt;/pre&gt;
It took quite a bit of debugging and Google searches to finally understand where the problem was. Note the last comma, after the next-to-last closing curly brace "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;},&lt;/span&gt;" -- this is unnecessary. Modern browsers can handle this, but IE7 chokes. Simply remove the comma and you're good to go. More on this problem on &lt;a href="http://stackoverflow.com/questions/2149762/possible-cases-for-javascript-error-expected-identifier-string-or-number"&gt;Stack Exchange&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-821932221216879774?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WLQZvV592aA6q1FFw-YdgTqIAVI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WLQZvV592aA6q1FFw-YdgTqIAVI/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/WLQZvV592aA6q1FFw-YdgTqIAVI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WLQZvV592aA6q1FFw-YdgTqIAVI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/KlOepudO75o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/821932221216879774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=821932221216879774" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/821932221216879774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/821932221216879774?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/KlOepudO75o/ie7-and-error-expected-identifier.html" title="IE7 and &quot;Error: Expected identifier, string or number&quot;" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/10/ie7-and-error-expected-identifier.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUGQ385fyp7ImA9WhRTGEk.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-182753001529450901</id><published>2011-10-19T08:19:00.001+02:00</published><updated>2011-11-09T16:17:02.127+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T16:17:02.127+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ie" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>How to hide/show table rows in IE7</title><content type="html">If you need to hide a table row (TR), you'd usually use the following:&lt;br /&gt;
&lt;pre class="brush: xml"&gt;.hide-tr { display:none; }&lt;/pre&gt;
The problem develops when you later wish to show the row; simply setting the display to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;block&lt;/span&gt; is insufficient, as the individual cells in the row lose their positions and often get bunched next to each other. Using &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;display:table-row&lt;/span&gt; works on most modern browsers, but IE7 ignores that and prefers &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;display:inline-block&lt;/span&gt;. So the solution? There are a few ways to fix the problem, as indicated on &lt;a href="http://stackoverflow.com/questions/7808644/ie7-ignores-displaytable-row"&gt;Stack Exchange&lt;/a&gt;.

The problem with using &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;visibility:hidden&lt;/span&gt; is that the row still takes up space on the page and shrinking its height is a non-trivial task. Another solution involves a method less recommended, using browser and version detection via jQuery. However, it does fix the issue:&lt;br /&gt;
&lt;pre class="brush: js"&gt;if ($.browser.msie &amp;amp;&amp;amp; jQuery.browser.version == '7.0'){
  $('.hide-tr').css('display','inline-block');
}
else {
  $('.hide-tr').css('display','table-row');
}&lt;/pre&gt;
Not a clean solution but it gets the job done :)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; An even easier solution: Simply call the jQuery &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;show()&lt;/span&gt; method on the object and it's smart enough to apply the appropriate CSS to the object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-182753001529450901?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ANGUDUkvR888LVQ1ldR8uQ0_opc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ANGUDUkvR888LVQ1ldR8uQ0_opc/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/ANGUDUkvR888LVQ1ldR8uQ0_opc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ANGUDUkvR888LVQ1ldR8uQ0_opc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/FoxX21MLdgg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/182753001529450901/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=182753001529450901" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/182753001529450901?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/182753001529450901?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/FoxX21MLdgg/how-to-hideshow-table-rows-in-ie7.html" title="How to hide/show table rows in IE7" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/10/how-to-hideshow-table-rows-in-ie7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABQn0yfyp7ImA9WhdUFk4.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-2594178958066647217</id><published>2011-10-02T17:51:00.004+02:00</published><updated>2011-10-03T10:32:33.397+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-03T10:32:33.397+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="mailto" /><title>SharePoint: Create an easy "Share page with friend" button</title><content type="html">In SharePoint, it's useful to have an email icon that allows users to email the page to friends. Though we could build a &lt;a href="http://sharepoint.stackexchange.com/questions/20441/popup-to-allow-emailing-of-current-url"&gt;popup box&lt;/a&gt;, we can also go with a simpler solution that uses the person's email client to do the heavy lifting. In &lt;a href="http://devharbor.blogspot.com/2011/10/sharepoint-fetch-environment-variables.html"&gt;another post&lt;/a&gt;, I covered how to fetch some of the server-side variables into a JavaScript array needed for generating this email. Now, let's use the variables and see how we send the email.

One key to this feature is to keep it simple; this means, we'll leave the To field of the email blank and use the commonplace "mailto:" HREF attribute. So, let's get to the code:
&lt;br /&gt;
&lt;pre class="brush: javascript"&gt;function generateEmailTo(){
  var body = currentElements.currentUserName + ' has shared a page with you on the intranet.%0A%0APage Title: %22' +
    currentElements.currentTitle  + '%22%0A' + $(location).attr('href').replace('#',''); 
  var subject = currentElements.currentUserName + ' has shared an intranet page with you';
  var mailto = 'mailto: ?body=' + body + '&amp;amp;subject=' + subject;
  var anchor = '&amp;lt;a href="' + mailto + '"&amp;gt;&amp;lt;/a&amp;gt;';

  $("#send-email").wrap(anchor);
}&lt;/pre&gt;
We can pass the body, subject, and mailto for the mail message. The &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;?body=&lt;/span&gt; and the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;amp;subject=&lt;/span&gt; allow the main message and the subject to be passed in the querystring. To provide line breaks, we use &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;%0A&lt;/span&gt; hex values; so for two line breaks, we use &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;%0A%0A&lt;/span&gt; in the querystring value. To pass quotes, we use &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;%22&lt;/span&gt;. To pass a blank &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mailto:&lt;/span&gt;, we leave a space in front of it, before the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;?body=&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;.&lt;/span&gt;&lt;/span&gt; More notes on &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;mailto&lt;/span&gt;, setting its &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;cc&lt;/span&gt;, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;bcc&lt;/span&gt;, and special characters can be found &lt;a href="http://www.ianr.unl.edu/internet/mailto.html"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Once we've concatenated the various elements, we pass the anchor variable to the jQuery &lt;a href="http://stackoverflow.com/questions/1767414/jquery-easiest-way-to-wrap-an-image-tag-with-an-a-anchor-tag"&gt;wrap() function&lt;/a&gt;, called on the email icon &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;img&lt;/span&gt; tag (with ID of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;send-email&lt;/span&gt;). We call the above &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;generateEmailTo()&lt;/span&gt; in the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;document.ready&lt;/span&gt; function.

When you click the link, it produces something like this in the generated email (Outlook, Thunderbird, etc.):
&lt;br /&gt;
&lt;pre class="brush: text"&gt;Alex C has shared a page with you on the intranet. 

Page Title: "My Page Title" 
http://mysite.org/Pages/mypage.aspx&lt;/pre&gt;
The subject, not shown, will be "Alex C has shared an intranet page with you". Note that the URL will appear as a clickable link in most email clients. Also note that we can't pass HTML to the body of the message, only plain text.&lt;br /&gt;
&lt;br /&gt;
Hope you find this useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-2594178958066647217?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Box-qSpHhnuiMh169EjEt6WvifQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Box-qSpHhnuiMh169EjEt6WvifQ/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/Box-qSpHhnuiMh169EjEt6WvifQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Box-qSpHhnuiMh169EjEt6WvifQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/Fil2gvFqvKM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/2594178958066647217/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=2594178958066647217" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/2594178958066647217?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/2594178958066647217?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/Fil2gvFqvKM/sharepoint-create-easy-share-page-with.html" title="SharePoint: Create an easy &quot;Share page with friend&quot; button" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/10/sharepoint-create-easy-share-page-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IDQXoyfCp7ImA9WhdUFUs.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-7608417643151839779</id><published>2011-10-02T15:47:00.005+02:00</published><updated>2011-10-02T16:26:10.494+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-02T16:26:10.494+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="csharp" /><title>SharePoint: Fetch environment variables and store in JavaScript</title><content type="html">For a header text, we needed the current site's name. In addition, to generate a "Share this page with a friend" button, we needed the current user's login name and full name. We could use SharePoint's Client Object Model, which does an asynchronous call from JavaScript to get the information.&lt;br /&gt;
&lt;br /&gt;
However, we needed the site's name to be available with the DOM, not when the page loads; we tried the AJAX call and it took a second or two to fetch the data. During this time, the page had no header text saying which site the user was on.&lt;br /&gt;
&lt;br /&gt;
What to do? We could use jQuery to get the site name from the breadcrumbs generated via the &lt;span style="font-family: courier new;"&gt;asp:SiteMapPath &lt;/span&gt;control, but there could be times when we wouldn't be using this control. Else we could fetch it from the top-left navigation tree dropdown; even that was clunky. So we decided to put the following code in the Page Layout's &lt;span style="font-family: courier new;"&gt;PlaceHolderAdditionalPageHead&lt;/span&gt; control; it can also be placed in the master page:&lt;br /&gt;
&lt;pre class="brush: csharp"&gt;&amp;lt;asp:Content ContentPlaceholderID="PlaceHolderAdditionalPageHead" runat="server"&amp;gt;
&amp;lt;%
String currentUserName = Microsoft.SharePoint.SPContext.Current.Web.CurrentUser.Name.ToString();
String currentUserEmail = Microsoft.SharePoint.SPContext.Current.Web.CurrentUser.LoginName.ToString().Replace("MYDOMAIN\\","");
String currentSite = Microsoft.SharePoint.SPContext.Current.Web.ToString();
String currentTitle = (Microsoft.SharePoint.SPContext.Current.Item["Title"] == null) ?
 "" : Microsoft.SharePoint.SPContext.Current.Item["Title"].ToString();

StringBuilder sb = new StringBuilder();
sb.Append("&amp;lt;script type='text/javascript'&amp;gt;var currentElements = { currentUserName: '");
sb.Append(currentUserName);
sb.Append("', currentUserEmail: '");
sb.Append(currentUserEmail);
sb.Append("', currentSite: '");
sb.Append(currentSite);
sb.Append("', currentTitle: '");
sb.Append(currentTitle);
sb.Append("'}&amp;lt;/script&amp;gt;");
Response.Write(sb.ToString());
%&amp;gt;

....

&amp;lt;/asp:Content&amp;gt;&lt;/pre&gt;
We fetch the current user's name using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcontext.current.aspx" style="font-family: courier new;"&gt;SPContext.Current&lt;/a&gt; property, which gives us a handle to the current HTTP request in SharePoint. Then we get the various items we need, such as the user's name, login name, web (current site name), and the publishing page's title.&lt;br /&gt;
&lt;br /&gt;
Once we have the values, we plug them into a JavaScript array that we build server-side. When the page loads in the browser, the array will be instantiated with the values we set using C#. We use a StringBuilder object for optimal performance because of the string concatenations.&lt;br /&gt;
&lt;br /&gt;
So what does it look like when the page loads? Here it is:&lt;br /&gt;
&lt;pre class="brush: javascript"&gt;&amp;lt;script type='text/javascript'&amp;gt;var currentElements = { currentUserName: 'Alex C', currentUserEmail: 'myemailid', currentSite: 'My Site Name', currentTitle: 'Page Title'}&amp;lt;/script&amp;gt;&lt;/pre&gt;
To use any of the array elements in jQuery or elsewhere, just call it via something like this: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;currentElements.currentSite&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A final note: If any of the values will have a single quote in them, just escape the value using a &lt;span style="font-family: courier new;"&gt;.Replace("'","\'")&lt;/span&gt;on the string in C#.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-7608417643151839779?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XbSgfYHnxIvXx15J1pHsfysHaY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XbSgfYHnxIvXx15J1pHsfysHaY0/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/XbSgfYHnxIvXx15J1pHsfysHaY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XbSgfYHnxIvXx15J1pHsfysHaY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/ZLWvVUwDO1w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/7608417643151839779/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=7608417643151839779" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7608417643151839779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7608417643151839779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/ZLWvVUwDO1w/sharepoint-fetch-environment-variables.html" title="SharePoint: Fetch environment variables and store in JavaScript" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/10/sharepoint-fetch-environment-variables.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFSXw4eip7ImA9WhdVFUQ.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-6168980451690336625</id><published>2011-09-21T09:42:00.007+03:00</published><updated>2011-09-21T11:35:18.232+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T11:35:18.232+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><title>SharePoint: Programmatically add JS/CSS to pages</title><content type="html">John Chapman has a &lt;a href="http://www.sharepointjohn.com/sharepoint-2010-programmatically-add-javascript-meta-tags-and-css-styles-to-the-header-of-every-page/"&gt;great article&lt;/a&gt; on creating a feature for your SharePoint installation that adds JavaScript and CSS files to all pages without touching the site's master page. The good folks on &lt;a href="http://sharepoint.stackexchange.com/questions/18652/programmatically-add-js-css-to-pages"&gt;SharePoint.StackExchange.com&lt;/a&gt; helped me implement it and also modify the code to better utilize SharePoint's native control libraries.&lt;br /&gt;&lt;br /&gt;First, follow the code provided by &lt;a href="http://www.sharepointjohn.com/sharepoint-2010-programmatically-add-javascript-meta-tags-and-css-styles-to-the-header-of-every-page/"&gt;John Chapman&lt;/a&gt;. Then modify the &lt;span style="font-family:courier new;"&gt;CustomPageHead.ascx.cs&lt;/span&gt; to take advantage of the built-in SharePoint controls:&lt;pre class="brush: csharp"&gt;using System;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Web.UI.WebControls.WebParts;&lt;br /&gt;using Microsoft.SharePoint;&lt;br /&gt;using Microsoft.SharePoint.WebControls;&lt;br /&gt;&lt;br /&gt;namespace CustomPageHead.CONTROLTEMPLATES.CustomPageHead&lt;br /&gt;{&lt;br /&gt;public partial class CustomPageHead : UserControl&lt;br /&gt;{&lt;br /&gt;    protected override void CreateChildControls()&lt;br /&gt;    {&lt;br /&gt;        base.CreateChildControls();&lt;br /&gt;&lt;br /&gt;        this.Controls.Add(new ScriptLink()&lt;br /&gt;        {&lt;br /&gt;            Name = "/_layouts/CustomPageHead/jquery-1.6.2.min.js",&lt;br /&gt;            Language = "javascript",&lt;br /&gt;            Localizable = false&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        this.Controls.AddAt(0,new ScriptLink()&lt;br /&gt;        {&lt;br /&gt;            Name = "/_layouts/CustomPageHead/some-custom-code.js",&lt;br /&gt;            Language = "javascript",&lt;br /&gt;            Localizable = false&lt;br /&gt;        });&lt;br /&gt;&lt;br /&gt;        this.Controls.AddAt(1,new CssRegistration()&lt;br /&gt;        {&lt;br /&gt;            Name = "/_layouts/CustomPageHead/some-stylesheet.css"&lt;br /&gt;        });&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;Note that using the native controls, you don't have to worry about paths to where the files will be; SharePoint will place these items in the following location on your server:&lt;br /&gt;&lt;pre class="brush: text"&gt;C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\CustomPageHead&lt;/pre&gt;Also, the advantage of using the &lt;span style="font-family:courier new;"&gt;this.Controls.AddAt()&lt;/span&gt; method is that you can specify where in the object hierarchy to add the specified object.&lt;br /&gt;&lt;br /&gt;In addition, the solution can be generated into a *.WSP by selecting "Package" from Visual Studio's Build menu. The file can then be copied from the &lt;span style="font-family:courier new;"&gt;bin/Release&lt;/span&gt; folder and run on the command line to install the feature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Special thanks goes to &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://sharepoint.stackexchange.com/questions/18652/programmatically-add-js-css-to-pages/18657#18657"&gt;omlin&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; and &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://sharepoint.stackexchange.com/questions/18652/programmatically-add-js-css-to-pages/18653#18653"&gt;James Love&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; for their help.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-6168980451690336625?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m7nYpeQyyI8vDNYTc8FDJV8YjTY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m7nYpeQyyI8vDNYTc8FDJV8YjTY/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/m7nYpeQyyI8vDNYTc8FDJV8YjTY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m7nYpeQyyI8vDNYTc8FDJV8YjTY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/OIQBC1GdHls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/6168980451690336625/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=6168980451690336625" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/6168980451690336625?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/6168980451690336625?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/OIQBC1GdHls/sharepoint-programmatically-add-jscss.html" title="SharePoint: Programmatically add JS/CSS to pages" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/09/sharepoint-programmatically-add-jscss.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCQ3o8fip7ImA9WhdVEEs.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-8651603466153641433</id><published>2011-09-15T08:23:00.000+03:00</published><updated>2011-09-15T08:24:22.476+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-15T08:24:22.476+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><title>Stream your Google Music library via AirPlay just like in iTunes</title><content type="html">&lt;a href="http://www.we-are-gurus.com/blog/1713-stream-your-google-music-library-via-airplay-just-like-in-itunes"&gt;http://www.we-are-gurus.com/blog/1713-stream-your-google-music-library-via-airplay-just-like-in-itunes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-8651603466153641433?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t2afdiDwLBIbHb07B8MKt9EVMv0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t2afdiDwLBIbHb07B8MKt9EVMv0/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/t2afdiDwLBIbHb07B8MKt9EVMv0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t2afdiDwLBIbHb07B8MKt9EVMv0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/C5Z4w7cCDnc" height="1" width="1"/&gt;</content><link rel="related" href="http://www.we-are-gurus.com/blog/1713-stream-your-google-music-library-via-airplay-just-like-in-itunes" title="Stream your Google Music library via AirPlay just like in iTunes" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/8651603466153641433/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=8651603466153641433" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/8651603466153641433?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/8651603466153641433?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/C5Z4w7cCDnc/stream-your-google-music-library-via.html" title="Stream your Google Music library via AirPlay just like in iTunes" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/09/stream-your-google-music-library-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IMRX07fip7ImA9WhdWGUo.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-4676282160010128831</id><published>2011-09-14T08:26:00.006+03:00</published><updated>2011-09-14T08:53:04.306+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T08:53:04.306+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="tabs" /><title>SharePoint tabs UI for web parts</title><content type="html">Christophe Humbert's beautiful &lt;a href="http://sp2010.pathtosharepoint.com/SharePoint-User-Toolkit/Pages/Easy-Tabs-v5.aspx"&gt;Easy Tabs for SharePoint&lt;/a&gt; works wonderfully well; it automatically generates tabs for the web parts on the page. You simply drop the code Christophe provides into a content editor web part (CEWP) and off you go.&lt;br /&gt;&lt;br /&gt;In a current project, we needed the ability to have all pages show tabs without dropping a CEWP on every page. The code needed to be on a page layout for a publishing site. The challenge? Christophe's code traverses up the DOM from the current CEWP to find the parent container of the web parts; unless you use a CEWP, it won't work.&lt;br /&gt;&lt;br /&gt;Some serious trial-and-error, as well as posting to the SharePoint group on StackExchange.com, provided the clues; we need to provide a direct reference to the parent container of the web parts. Here's the part of the code that was moving up the DOM tree:&lt;br /&gt;&lt;pre class="brush: javascript"&gt;var el=document.getElementsByTagName("SCRIPT"),p=el[el.length-1],sT,a,sep,tabRow;&lt;br /&gt;do {p=p.parentNode;sT=p.innerHTML.split("MSOZoneCell_WebPart");}while (sT.length&amp;lt;4 &amp;amp;&amp;amp; p.parentNode.id!="MSO_ContentTable")&lt;/pre&gt;In the page layout, the web parts are in a Page Content control (&lt;span style="font-family:courier new;"&gt;PublishingWebControls:richhtmlfield&lt;/span&gt;), so here's the change to the JavaScript to reference that parent container:&lt;br /&gt;&lt;pre class="brush: javascript"&gt;var p,a,sep,tabRow;&lt;br /&gt;p = document.getElementById('ctl00_PlaceHolderMain_ctl01__ControlWrapper_RichHtmlField');&lt;/pre&gt;Note that there's no need for the &lt;span style="font-family:courier new;"&gt;el&lt;/span&gt; variable or the&lt;span style="font-family:courier new;"&gt; do-while&lt;/span&gt; loop. You probably need to do some trial-and-error, using &lt;span style="font-family:courier new;"&gt;alert()&lt;/span&gt; statements to view the &lt;span style="font-family:courier new;"&gt;p.innerHtml&lt;/span&gt; and/or &lt;span style="font-family:courier new;"&gt;p.parentNode.innerHtml&lt;/span&gt;; this helped me discover what &lt;span style="font-family:courier new;"&gt;p&lt;/span&gt; was pointing to after the &lt;span style="font-family:courier new;"&gt;do-while&lt;/span&gt; and simply reference it directly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-4676282160010128831?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H_rcNHYBuOwFvs5oMSUMnLtv2sg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H_rcNHYBuOwFvs5oMSUMnLtv2sg/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/H_rcNHYBuOwFvs5oMSUMnLtv2sg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H_rcNHYBuOwFvs5oMSUMnLtv2sg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/7_jkq7D8w9Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/4676282160010128831/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=4676282160010128831" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4676282160010128831?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4676282160010128831?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/7_jkq7D8w9Q/sharepoint-tabs-ui-for-web-parts.html" title="SharePoint tabs UI for web parts" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/09/sharepoint-tabs-ui-for-web-parts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGRnc7fyp7ImA9WhdWE0Q.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-6203570984542960886</id><published>2011-09-07T14:16:00.003+03:00</published><updated>2011-09-07T14:22:07.907+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T14:22:07.907+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><title>SharePoint: If your stylesheet isn't added to the page...</title><content type="html">For a current project, I'm using a custom page layout within a publishing site. I had the following code in the my_page_layout.aspx file:&lt;br /&gt;&lt;pre class="brush: xml"&gt;&amp;lt;asp:Content ContentPlaceholderID="PlaceHolderAdditionalPageHead" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;link type="text/css" href="../../SiteAssets/js/jquery/jquery-ui-1.8.16/css/cupertino/jquery-ui-1.8.16.custom.css"/&amp;gt;&lt;br /&gt;....&lt;br /&gt;&amp;lt;/asp:Content&amp;gt;&lt;/pre&gt;No matter what I did, the stylesheet wouldn't be available to the SharePoint page. However, another stylesheet was showing up. The difference? I was missing the &lt;span style="font-family:courier new;"&gt;rel="stylesheet"&lt;/span&gt; attribute on the bad link tag. Added it and everything worked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-6203570984542960886?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ujGQKloQNPOReTWpCJVz8pouMkA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ujGQKloQNPOReTWpCJVz8pouMkA/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/ujGQKloQNPOReTWpCJVz8pouMkA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ujGQKloQNPOReTWpCJVz8pouMkA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/fNCy6fpfXSI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/6203570984542960886/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=6203570984542960886" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/6203570984542960886?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/6203570984542960886?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/fNCy6fpfXSI/sharepoint-if-your-stylesheet-isnt.html" title="SharePoint: If your stylesheet isn't added to the page..." /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/09/sharepoint-if-your-stylesheet-isnt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENRn48eCp7ImA9WhdXFUw.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-8001931334681566444</id><published>2011-08-28T09:19:00.002+03:00</published><updated>2011-08-28T09:24:57.070+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-28T09:24:57.070+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><title>SharePoint: Remove link from list view title</title><content type="html">Links &lt;a href="http://sharepoint.stackexchange.com/questions/7456/how-to-remove-the-title-link-url"&gt;can't be easily removed&lt;/a&gt; from list view titles (or web part titles, for that matter). That's where jQuery comes in handy:
&lt;br /&gt;&lt;pre class="brush: javascript"&gt;$(document).ready(function () {
&lt;br /&gt;  // Remove the link from the web part title and set its cursor to normal.
&lt;br /&gt;  $('.ms-WPTitle &gt; a').contents().unwrap().css('cursor','default');
&lt;br /&gt;  $('.ms-WPTitle').css('cursor','default');
&lt;br /&gt;});&lt;/pre&gt;This is thanks to &lt;a href="http://stackoverflow.com/questions/6188277/remove-hyperlink-but-keep-text"&gt;a tip from this post&lt;/a&gt; on StackOverflow.com. Note also that the code sets the cursor to default (instead of "hand"). &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-8001931334681566444?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xOSdGhzvjgw3ckHUaRqz9OIEYuM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xOSdGhzvjgw3ckHUaRqz9OIEYuM/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/xOSdGhzvjgw3ckHUaRqz9OIEYuM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xOSdGhzvjgw3ckHUaRqz9OIEYuM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/w39PYrjAXP8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/8001931334681566444/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=8001931334681566444" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/8001931334681566444?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/8001931334681566444?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/w39PYrjAXP8/sharepoint-remove-link-from-list-view.html" title="SharePoint: Remove link from list view title" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/sharepoint-remove-link-from-list-view.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcBRX86cSp7ImA9WhdXEEU.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-7586636394711253304</id><published>2011-08-23T09:06:00.009+03:00</published><updated>2011-08-23T10:20:54.119+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T10:20:54.119+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><title>SharePoint: Automatic table of contents for a page's sections</title><content type="html">If you have really long pages in SharePoint with lots of sections, you can use the nifty &lt;a href="http://www.1stwebdesigner.com/css/jquery-plugin-smooth-scrolling"&gt;jQuery plugin from Rochester Oliveira&lt;/a&gt; to automate the creation of the table of contents (TOC). Note that this is different from the table of contents web part built into SharePoint; that tool only handles pages and sites, not content within pages.&lt;ol&gt;&lt;li&gt;Ensure you've uploaded jQuery to your SharePoint site (or site collection); usually, these files will go into the Site Assets area so they're accessible to all sites. For example, &lt;span style="font-family:courier new;"&gt;http://mydomain.org/SiteAssets/js/jquery/jquery-1.6.2.min.js&lt;/span&gt;. &lt;/li&gt;
&lt;br /&gt;&lt;li&gt;Also place the &lt;span style="font-family:courier new;"&gt;jquery.stoc.js&lt;/span&gt; file necessary for this task in a similar location. &lt;/li&gt;
&lt;br /&gt;&lt;li&gt;Reference these two JS files from your master page, page layout, or content editor web part. &lt;/li&gt;
&lt;br /&gt;&lt;li&gt;Add some JavaScript to trigger the TOC creation (see code below). You'll also need an empty DIV tag that will have the TOC injected into it.&lt;/li&gt;
&lt;br /&gt;&lt;li&gt;Add the necessary CSS to style the TOC and the UL tags. &lt;a href="http://www.1stwebdesigner.com/css/jquery-plugin-smooth-scrolling"&gt;Rochester Oliveira's plugin page&lt;/a&gt; has some great examples to get you started.&lt;/li&gt;
&lt;br /&gt;&lt;/ol&gt;One other change is necessary for it to work correctly: For some reason, on SharePoint 2010, it was appending &lt;span style="font-family:courier new;"&gt;#undefined&lt;/span&gt; to all the table of contents items. So I modified the JS in the &lt;span style="font-family:courier new;"&gt;jquery.stoc.js&lt;/span&gt; to this:
&lt;br /&gt;&lt;pre class="brush: javascript"&gt;if (id == "" || typeof id === "undefined") { //if it doesn't have only, of course
&lt;br /&gt;id = "h" + tagNumber + "_" + i;
&lt;br /&gt;cacheHN.attr('id', id);
&lt;br /&gt;}&lt;/pre&gt;Now if &lt;span style="font-family:courier new;"&gt;id&lt;/span&gt; is undefined, it will generate one. So you're ready to test. If you wish to get fancier, you can add a True/False dropdown to the page layout for editors to choose whether a page will have a TOC (for instructions on conditionally displaying the dropdown, please see &lt;a href="http://devharbor.blogspot.com/2011/08/sharepoint-conditionally-display.html"&gt;this post&lt;/a&gt;). This code can generate the necessary JavaScript based on the page layout's custom content column EnableTOC value:
&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&amp;lt;%= (Microsoft.SharePoint.SPContext.Current.Item["EnableTOC"] == null ||
&lt;br /&gt;	Microsoft.SharePoint.SPContext.Current.Item["EnableTOC"].ToString() == "False")? "" :
&lt;br /&gt;		" &lt;script&gt;$(function (){$('#toc').stoc({ search: '#main-content', start: 2 });}); $('#tjavascript:void(0)oc').css('display','block');&lt;/script&gt;"
&lt;br /&gt;%&amp;gt;&lt;/pre&gt;In the above code, if &lt;span style="font-family:courier new;"&gt;EnableTOC&lt;/span&gt; is set to True, we trigger the TOC plugin on the element with ID &lt;span style="font-family:courier new;"&gt;toc&lt;/span&gt;; the plugin will search the element &lt;span style="font-family:courier new;"&gt;main-content&lt;/span&gt; for tags of type H2 and H3 ("&lt;span style="font-family:courier new;"&gt;start: 2&lt;/span&gt;"), and generate the TOC based on that structure using UL tags. Also, the &lt;span style="font-family:courier new;"&gt;toc&lt;/span&gt; DIV tag is hidden by default; the code above changes its display property to block.
&lt;br /&gt;
&lt;br /&gt;If you always want the TOC to be generated, take it out of the server-side code and make it entirely client-side. In addition, because of a bug in SharePoint 2010, named anchors might not work correctly; in other words, you might click an item in the TOC and not have the page go to that part of the document. In that case, you can add this code as well, courtesy of &lt;a href="http://social.msdn.microsoft.com/Forums/en/sharepoint2010general/thread/f7eab808-da8a-44fd-9933-f9b992f5affc"&gt;fcorbeil on the Microsoft MSDN forum&lt;/a&gt;:
&lt;br /&gt;&lt;pre class="brush: javascript"&gt;&amp;lt;script type="text/javascript"&amp;gt;
&lt;br /&gt;setTimeout(Reload,2000);
&lt;br /&gt;function Reload() {
&lt;br /&gt;window.location.hash=self.document.location.hash.substring(1);
&lt;br /&gt;}
&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-7586636394711253304?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v6LO4DNg2DgsSamE_d96T1JtGME/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v6LO4DNg2DgsSamE_d96T1JtGME/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/v6LO4DNg2DgsSamE_d96T1JtGME/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v6LO4DNg2DgsSamE_d96T1JtGME/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/6ayKPx_Gq_g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/7586636394711253304/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=7586636394711253304" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7586636394711253304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7586636394711253304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/6ayKPx_Gq_g/sharepoint-automatic-table-of-contents.html" title="SharePoint: Automatic table of contents for a page's sections" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/sharepoint-automatic-table-of-contents.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIBQ3k-eCp7ImA9WhdQFU0.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-1118905274208037168</id><published>2011-08-16T16:35:00.003+03:00</published><updated>2011-08-16T17:22:32.750+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-16T17:22:32.750+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="icons" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>SharePoint: Icon doesn't show for Publishing Hyperlink</title><content type="html">Ran into this today. Very strange problem. For whatever reason, the "Display icon" functionality of the Publishing Hyperlink field doesn't work on SharePoint 2010 Server for a site with Publishing enabled. Added URLs to a column of that type for PDF files, but no PDF icons appeared. In fact, the value for the "Display icon" field wasn't "sticky" -- it kept getting unchecked. This &lt;a href="http://www.psyked.co.uk/css/auto-matic-link-icons.htm/"&gt;article&lt;/a&gt; saved the day, with a very easy, non-coding solution using only CSS attribute selectors.
&lt;br /&gt;
&lt;br /&gt;I'm using a custom page layout in my publishing pages with an attached CSS file; in that file, I added the following items to correspond to the location of my icon files (inside SiteAssets); I also added .docx for Word 2007+ document types and .xlsx for Excel 2007+ docs: 
&lt;br /&gt;&lt;pre class="brush: css"&gt;a[href$='.pdf'] {
&lt;br /&gt;    display:inline-block;
&lt;br /&gt;    padding-left:20px;
&lt;br /&gt;    line-height:18px;
&lt;br /&gt;    background:transparent url(/SiteAssets/icons/icon_pdf_16x16.gif) center left no-repeat;
&lt;br /&gt;}
&lt;br /&gt;a[href$='.doc'], a[href$='.rtf'], a[href$='.txt'], a[href$='.docx'] {
&lt;br /&gt;    display:inline-block;
&lt;br /&gt;    padding-left:20px;
&lt;br /&gt;    line-height:18px;
&lt;br /&gt;    background:transparent url(/SiteAssets/icons/icon_doc_16x16.gif) center left no-repeat;
&lt;br /&gt;}
&lt;br /&gt;a[href$='.zip'], a[href$='.gzip'], a[href$='.rar'] {
&lt;br /&gt;    display:inline-block;
&lt;br /&gt;    padding-left:20px;
&lt;br /&gt;    line-height:18px;
&lt;br /&gt;    background:transparent url(/SiteAssets/icons/icon_zip_16x16.gif) center left no-repeat;
&lt;br /&gt;}
&lt;br /&gt;a[href$='.xls'], a[href$='.csv'], a[href$='.xlt'], a[href$='.xlw'], a[href$='.xlxs'] {
&lt;br /&gt;    display:inline-block;
&lt;br /&gt;    padding-left:20px;
&lt;br /&gt;    line-height:18px;
&lt;br /&gt;    background:transparent url(/SiteAssets/icons/icon_xls_16x16.gif) center left no-repeat;
&lt;br /&gt;}&lt;/pre&gt;The CSS works by finding all anchor tags with an href attribute that ends (using the dollar symbol $) with the specified string; so for PDFs, it uses a[href$='.pdf'] and applies the style rules. And we're only interested in those 4 file types, so those are the ones that have icons in our CSS file. 
&lt;br /&gt;
&lt;br /&gt;Reloaded the page and viola! The icon appears to the left of the item as if by magic :)
&lt;br /&gt;
&lt;br /&gt;Also, the &lt;a href="http://www.psyked.co.uk/css/auto-matic-link-icons.htm/"&gt;article from psyked&lt;/a&gt; has links to some nice (and free) icon libraries. All in all, a very good solution. However, we still don't know what's causing the built-in "Display icon" functionality to not work.
&lt;br /&gt;
&lt;br /&gt;Hope this helps others. Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-1118905274208037168?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-0rml9Lx6ND8-kornVbZavhiLZo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-0rml9Lx6ND8-kornVbZavhiLZo/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/-0rml9Lx6ND8-kornVbZavhiLZo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-0rml9Lx6ND8-kornVbZavhiLZo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/PB-mFt-VfHM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/1118905274208037168/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=1118905274208037168" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/1118905274208037168?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/1118905274208037168?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/PB-mFt-VfHM/sharepoint-icon-doesnt-show-for.html" title="SharePoint: Icon doesn't show for Publishing Hyperlink" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/sharepoint-icon-doesnt-show-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHQXo6fSp7ImA9WhdQFU0.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-459580504836698733</id><published>2011-08-16T16:34:00.001+03:00</published><updated>2011-08-16T16:35:30.415+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-16T16:35:30.415+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="trends" /><title>Beyond app dev: Applying agile techniques to business</title><content type="html">&lt;a href="http://www.infoworld.com/t/agile-development/beyond-app-dev-applying-agile-techniques-business-169749"&gt;http://www.infoworld.com/t/agile-development/beyond-app-dev-applying-agile-techniques-business-169749&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;blockquote&gt;Agile, a term that has become associated with building software in short iterations, is making headway as a philosophy for running a business in general, with executives latching on to agile practices such as its heavy emphasis on flexibility and collaboration.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-459580504836698733?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J31Na8buPZqYAJJzTyFADURdzmc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J31Na8buPZqYAJJzTyFADURdzmc/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/J31Na8buPZqYAJJzTyFADURdzmc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J31Na8buPZqYAJJzTyFADURdzmc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/pNFhS5NModA" height="1" width="1"/&gt;</content><link rel="related" href="http://www.infoworld.com/t/agile-development/beyond-app-dev-applying-agile-techniques-business-169749" title="Beyond app dev: Applying agile techniques to business" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/459580504836698733/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=459580504836698733" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/459580504836698733?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/459580504836698733?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/pNFhS5NModA/beyond-app-dev-applying-agile.html" title="Beyond app dev: Applying agile techniques to business" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/beyond-app-dev-applying-agile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4NRH86fyp7ImA9WhdQEEs.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-3166741690718632151</id><published>2011-08-11T16:21:00.001+03:00</published><updated>2011-08-11T16:23:15.117+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T16:23:15.117+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><title>Microsoft's JavaScript focus is a winner</title><content type="html">&lt;a href="http://www.infoworld.com/d/application-development/microsofts-javascript-focus-winner-169537"&gt;http://www.infoworld.com/d/application-development/microsofts-javascript-focus-winner-169537&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-3166741690718632151?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pH5TnQ0x6FaupXyVix2IOTEpXn0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pH5TnQ0x6FaupXyVix2IOTEpXn0/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/pH5TnQ0x6FaupXyVix2IOTEpXn0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pH5TnQ0x6FaupXyVix2IOTEpXn0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/YF7Y-hG0SV0" height="1" width="1"/&gt;</content><link rel="related" href="http://www.infoworld.com/d/application-development/microsofts-javascript-focus-winner-169537" title="Microsoft's JavaScript focus is a winner" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/3166741690718632151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=3166741690718632151" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/3166741690718632151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/3166741690718632151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/YF7Y-hG0SV0/microsofts-javascript-focus-is-winner.html" title="Microsoft's JavaScript focus is a winner" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/microsofts-javascript-focus-is-winner.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QMRns7cSp7ImA9WhdRFkQ.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-7368626017080070890</id><published>2011-08-07T08:55:00.009+03:00</published><updated>2011-08-07T09:43:07.509+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-07T09:43:07.509+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sharepoint-2010" /><category scheme="http://www.blogger.com/atom/ns#" term="conditional-content" /><category scheme="http://www.blogger.com/atom/ns#" term="csharp" /><title>SharePoint: Conditionally display content for authors and readers</title><content type="html">For a current project, I needed to display an Article Date content field in a page layout. The author could pick a date when in Edit View; the reader would only see the value the author had selected, or nothing if no value had been picked. &lt;br /&gt;&lt;br /&gt;To do server-side code blocks in a page layout, we'll first need to enable it from our app's web.config file; otherwise it'll throw an error saying "Code blocks are not allowed in this file," as described &lt;a href="http://weblogs.asp.net/soever/archive/2006/07/27/SharePoint-2007_3A00_-using-ASP.NET-server-side-code-in-your-pages.aspx"&gt;here&lt;/a&gt;. To enable code blocks, open your app's web.config and locate the PageParserPaths tag, which is empty, and modify it to look like this:&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;PageParserPaths&gt;&lt;br /&gt;  &lt;PageParserPath VirtualPath="/_catalogs/masterpage/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true"/&gt;&lt;br /&gt;&lt;/PageParserPaths&gt;&lt;/pre&gt;Note the VirtualPath; this needs to point to the location of your page layout (or ASPX) file. &lt;br /&gt;&lt;br /&gt;Next, we'll use &lt;a href="http://doseofdotnet.wordpress.com/2010/08/06/editmodepanel-behavior-changes-in-sharepoint-2010/"&gt;Bart McDonough's blog post&lt;/a&gt; to add the EditModePanel and AuthoringContainer; the nesting of these controls is well explained by Bart:&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;PublishingWebControls:AuthoringContainer DisplayAudience="ReadersOnly" runat="server"&gt;&lt;br /&gt;    &lt;!-- Content you want visible to users without 'edit' permissions goes here. --&gt;&lt;br /&gt;&lt;/PublishingWebControls:AuthoringContainer&gt;&lt;br /&gt;&lt;PublishingWebControls:AuthoringContainer DisplayAudience="AuthorsOnly" runat="server"&gt;&lt;br /&gt;  &lt;PublishingWebControls:EditModePanel runat="server" PageDisplayMode="Display"&gt;&lt;br /&gt;      &lt;!-- Content you want visible to users *with* 'edit' permissions and in display mode goes here --&gt;&lt;br /&gt;  &lt;/PublishingWebControls:EditModePanel&gt;&lt;br /&gt;  &lt;PublishingWebControls:EditModePanel runat="server" PageDisplayMode="Edit"&gt;&lt;br /&gt;    &lt;!-- Content you want visible to users *with* 'edit' permissions and in edit mode goes here --&gt;&lt;br /&gt;    &lt;SharePointWebControls:DateTimeField FieldName="71316cea-40a0-49f3-8659-f0cefdbdbd4f" runat="server"&gt;&lt;/SharePointWebControls:DateTimeField&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/PublishingWebControls:EditModePanel&gt;http://www.blogger.com/img/blank.gif&lt;br /&gt;&lt;/PublishingWebControls:AuthoringContainer&gt;&lt;/pre&gt;Note the DateTimeField element; that allows authors to edit the "Article Date" field. &lt;br /&gt;&lt;br /&gt;Now we need to add some server-side code to determine if we can display the "Article Date," and to format it properly (this code is based on &lt;a href="http://johanleino.wordpress.com/2009/02/27/the-easiest-way-to-format-a-sharepoint-fieldvalue/"&gt;Johan Leino's blog post&lt;/a&gt;):&lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;%= (Microsoft.SharePoint.SPContext.Current.Item["Article Date"] == null) ? "" : &lt;br /&gt;"Last update on " + DateTime.Parse(Microsoft.SharePoint.SPContext.Current.Item["Article Date"].ToString()).ToString("d MMMM yyyy") + &lt;br /&gt;"." %&gt;&lt;/pre&gt;This code displays the text "Last update on 9 August 2011." if there's a value in the "Article Date" content field; otherwise, it displays nothing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-7368626017080070890?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NRsu0Y-feekMKh-lZpW3FIDIe7s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NRsu0Y-feekMKh-lZpW3FIDIe7s/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/NRsu0Y-feekMKh-lZpW3FIDIe7s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NRsu0Y-feekMKh-lZpW3FIDIe7s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/c3Mcd-Tndn0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/7368626017080070890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=7368626017080070890" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7368626017080070890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7368626017080070890?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/c3Mcd-Tndn0/sharepoint-conditionally-display.html" title="SharePoint: Conditionally display content for authors and readers" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/sharepoint-conditionally-display.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQDQH4_cSp7ImA9WhdREUU.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-5074965477400645655</id><published>2011-08-01T09:31:00.000+03:00</published><updated>2011-08-01T09:32:51.049+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T09:32:51.049+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="adobe" /><category scheme="http://www.blogger.com/atom/ns#" term="flash" /><title>Adobe outs un-Flash web animation tool</title><content type="html">&lt;a href="http://www.theregister.co.uk/2011/08/01/adobe_edge_public_preview/"&gt;http://www.theregister.co.uk/2011/08/01/adobe_edge_public_preview/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-5074965477400645655?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6WIF8BZmOcKge6wnkEbE5B7a4S0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6WIF8BZmOcKge6wnkEbE5B7a4S0/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/6WIF8BZmOcKge6wnkEbE5B7a4S0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6WIF8BZmOcKge6wnkEbE5B7a4S0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/nQvxiT2kAb4" height="1" width="1"/&gt;</content><link rel="related" href="http://www.theregister.co.uk/2011/08/01/adobe_edge_public_preview/" title="Adobe outs un-Flash web animation tool" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/5074965477400645655/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=5074965477400645655" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/5074965477400645655?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/5074965477400645655?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/nQvxiT2kAb4/adobe-outs-un-flash-web-animation-tool.html" title="Adobe outs un-Flash web animation tool" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/08/adobe-outs-un-flash-web-animation-tool.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcNRHo9eip7ImA9WhdSEUg.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-4001785933255934500</id><published>2011-07-20T11:19:00.001+03:00</published><updated>2011-07-20T11:21:35.462+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T11:21:35.462+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cinemagraphs" /><title>Cinemagraphs</title><content type="html">&lt;iframe src="http://player.vimeo.com/video/23163811?title=0&amp;amp;byline=0&amp;amp;portrait=0" frameborder="0" height="309" width="495"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/23163811"&gt;How to make a Cinemagraph with Photoshop and After Effects&lt;/a&gt; from &lt;a href="http://vimeo.com/kgartner"&gt;Kert Gartner&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&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/2782359832460307258-4001785933255934500?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Sa29NhN_gzGgKTNpWSOHk0ritH0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Sa29NhN_gzGgKTNpWSOHk0ritH0/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/Sa29NhN_gzGgKTNpWSOHk0ritH0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Sa29NhN_gzGgKTNpWSOHk0ritH0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/FWgl86J51bU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/4001785933255934500/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=4001785933255934500" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4001785933255934500?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4001785933255934500?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/FWgl86J51bU/cinemagraphs.html" title="Cinemagraphs" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/cinemagraphs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCRncyeyp7ImA9WhdTE0Q.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-7208675758959637698</id><published>2011-07-11T16:35:00.000+03:00</published><updated>2011-07-11T16:36:07.993+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T16:36:07.993+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><title>10 apps pushing HTML5 to the limit</title><content type="html">&lt;a href="http://www.infoworld.com/d/html5/10-apps-pushing-html5-the-limit-699"&gt;http://www.infoworld.com/d/html5/10-apps-pushing-html5-the-limit-699&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-7208675758959637698?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/d4YQPpjYqKc2Q5HT60YpPBTTQdM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d4YQPpjYqKc2Q5HT60YpPBTTQdM/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/d4YQPpjYqKc2Q5HT60YpPBTTQdM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/d4YQPpjYqKc2Q5HT60YpPBTTQdM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/lZH507nGXZ8" height="1" width="1"/&gt;</content><link rel="related" href="http://www.infoworld.com/d/html5/10-apps-pushing-html5-the-limit-699" title="10 apps pushing HTML5 to the limit" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/7208675758959637698/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=7208675758959637698" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7208675758959637698?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7208675758959637698?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/lZH507nGXZ8/10-apps-pushing-html5-to-limit.html" title="10 apps pushing HTML5 to the limit" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/10-apps-pushing-html5-to-limit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFRXs7cCp7ImA9WhdTE0s.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-7856648681887161039</id><published>2011-07-11T08:12:00.002+03:00</published><updated>2011-07-11T08:13:34.508+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T08:13:34.508+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="photoshop" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><title>42 Heaven Resources for Photoshop Lovers</title><content type="html">&lt;a href="http://smashinghub.com/42-heaven-resources-for-photoshop-lovers.htm"&gt;http://smashinghub.com/42-heaven-resources-for-photoshop-lovers.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-7856648681887161039?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UIFJYzjdOFpYjZaKTK2XmYVPU9o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UIFJYzjdOFpYjZaKTK2XmYVPU9o/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/UIFJYzjdOFpYjZaKTK2XmYVPU9o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UIFJYzjdOFpYjZaKTK2XmYVPU9o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/CPj9z1Nsicc" height="1" width="1"/&gt;</content><link rel="related" href="http://smashinghub.com/42-heaven-resources-for-photoshop-lovers.htm" title="42 Heaven Resources for Photoshop Lovers" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/7856648681887161039/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=7856648681887161039" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7856648681887161039?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7856648681887161039?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/CPj9z1Nsicc/42-heaven-resources-for-photoshop.html" title="42 Heaven Resources for Photoshop Lovers" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/42-heaven-resources-for-photoshop.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YBQXk-cSp7ImA9WhdTE0s.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-2081906971353317804</id><published>2011-07-11T08:12:00.001+03:00</published><updated>2011-07-11T08:12:30.759+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T08:12:30.759+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="typography" /><category scheme="http://www.blogger.com/atom/ns#" term="photoshop" /><title>13 Creative and Cool Typography Tutorials</title><content type="html">&lt;a href="http://www.underworldmagazines.com/13-creative-and-cool-typography-tutorials/"&gt;http://http://www.blogger.com/img/blank.gifwww.underworldmagazines.com/13-creative-and-cool-typography-tutorials/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-2081906971353317804?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/064NXRy29TBIfGTaYZ8ahUi_v6Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/064NXRy29TBIfGTaYZ8ahUi_v6Y/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/064NXRy29TBIfGTaYZ8ahUi_v6Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/064NXRy29TBIfGTaYZ8ahUi_v6Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/Ak0ggYyKTdg" height="1" width="1"/&gt;</content><link rel="related" href="http://www.underworldmagazines.com/13-creative-and-cool-typography-tutorials/" title="13 Creative and Cool Typography Tutorials" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/2081906971353317804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=2081906971353317804" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/2081906971353317804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/2081906971353317804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/Ak0ggYyKTdg/13-creative-and-cool-typography.html" title="13 Creative and Cool Typography Tutorials" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/13-creative-and-cool-typography.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4BRHo8eSp7ImA9WhdTEk4.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-4944759327968104769</id><published>2011-07-09T21:56:00.001+03:00</published><updated>2011-07-09T21:59:15.471+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-09T21:59:15.471+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="careers" /><category scheme="http://www.blogger.com/atom/ns#" term="trends" /><title>10 Artistic Careers With The Brightest Futures: NEA And BLS</title><content type="html">&lt;a href="http://www.huffingtonpost.com/2011/07/09/ten-art-jobs-with-the-brightest-futures_n_893326.html"&gt;Careers With The Brightest Futures: NEA And BLS&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-4944759327968104769?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YR2iY0xs6LJ3W97oKt-d_dmonF0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YR2iY0xs6LJ3W97oKt-d_dmonF0/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/YR2iY0xs6LJ3W97oKt-d_dmonF0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YR2iY0xs6LJ3W97oKt-d_dmonF0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/sOlCzMsz91Y" height="1" width="1"/&gt;</content><link rel="related" href="http://www.huffingtonpost.com/2011/07/09/ten-art-jobs-with-the-brightest-futures_n_893326.html" title="10 Artistic Careers With The Brightest Futures: NEA And BLS" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/4944759327968104769/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=4944759327968104769" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4944759327968104769?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4944759327968104769?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/sOlCzMsz91Y/10-artistic-careers-with-brightest.html" title="10 Artistic Careers With The Brightest Futures: NEA And BLS" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/10-artistic-careers-with-brightest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcGRH04cCp7ImA9WhZaFkU.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-4759751625749475700</id><published>2011-07-03T11:33:00.001+03:00</published><updated>2011-07-03T11:33:45.338+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-03T11:33:45.338+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="debug" /><category scheme="http://www.blogger.com/atom/ns#" term="classic asp" /><title>Debugging Classic ASP ( VBScript ) in Visual Studio 2008</title><content type="html">&lt;a href="http://www.codeproject.com/KB/debug/DebugVBScriptVS2008.aspx"&gt;http://www.codeproject.com/KB/debug/DebugVBScriptVS2008.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-4759751625749475700?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/17sB5uf9SKxmLYsBuXjFDNgcMHs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/17sB5uf9SKxmLYsBuXjFDNgcMHs/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/17sB5uf9SKxmLYsBuXjFDNgcMHs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/17sB5uf9SKxmLYsBuXjFDNgcMHs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/JjgF0nno1-M" height="1" width="1"/&gt;</content><link rel="related" href="http://www.codeproject.com/KB/debug/DebugVBScriptVS2008.aspx" title="Debugging Classic ASP ( VBScript ) in Visual Studio 2008" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/4759751625749475700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=4759751625749475700" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4759751625749475700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/4759751625749475700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/JjgF0nno1-M/debugging-classic-asp-vbscript-in.html" title="Debugging Classic ASP ( VBScript ) in Visual Studio 2008" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/debugging-classic-asp-vbscript-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04FSXY6fCp7ImA9WhZaFko.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-5589525759084708533</id><published>2011-07-03T08:44:00.000+03:00</published><updated>2011-07-03T08:45:18.814+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-03T08:45:18.814+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="trends" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><title>How a big law firm replaced laptops with iPads</title><content type="html">&lt;a href="http://www.infoworld.com/d/mobile-technology/how-big-law-firm-replaced-laptops-ipads-864"&gt;http://www.infoworld.com/d/mobile-technology/how-big-law-firm-replaced-laptops-ipads-864&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-5589525759084708533?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0d2V9xH1N4ZYioYA8Ia9ASh3pDs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0d2V9xH1N4ZYioYA8Ia9ASh3pDs/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/0d2V9xH1N4ZYioYA8Ia9ASh3pDs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0d2V9xH1N4ZYioYA8Ia9ASh3pDs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/T_9tK4TwMuA" height="1" width="1"/&gt;</content><link rel="related" href="http://www.infoworld.com/d/mobile-technology/how-big-law-firm-replaced-laptops-ipads-864" title="How a big law firm replaced laptops with iPads" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/5589525759084708533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=5589525759084708533" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/5589525759084708533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/5589525759084708533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/T_9tK4TwMuA/how-big-law-firm-replaced-laptops-with.html" title="How a big law firm replaced laptops with iPads" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/07/how-big-law-firm-replaced-laptops-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INQ3w8fyp7ImA9WhZaFE0.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-7288479436424924507</id><published>2011-06-30T07:52:00.000+03:00</published><updated>2011-06-30T07:53:12.277+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-30T07:53:12.277+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ie" /><category scheme="http://www.blogger.com/atom/ns#" term="browsers" /><category scheme="http://www.blogger.com/atom/ns#" term="trends" /><title>Forrester: No End in Sight for IE Enterprise Slide</title><content type="html">&lt;a href="http://www.cio.com/article/684901/Forrester_No_End_in_Sight_for_IE_Enterprise_Slide"&gt;http://www.cio.com/article/684901/Forrester_No_End_in_Sight_for_IE_Enterprise_Slide&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-7288479436424924507?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/30WdUWwlCQXKqq3DVSYpsEJ7C8g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/30WdUWwlCQXKqq3DVSYpsEJ7C8g/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/30WdUWwlCQXKqq3DVSYpsEJ7C8g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/30WdUWwlCQXKqq3DVSYpsEJ7C8g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/u-fp0SY-Z2g" height="1" width="1"/&gt;</content><link rel="related" href="http://www.cio.com/article/684901/Forrester_No_End_in_Sight_for_IE_Enterprise_Slide" title="Forrester: No End in Sight for IE Enterprise Slide" /><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/7288479436424924507/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=7288479436424924507" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7288479436424924507?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/7288479436424924507?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/u-fp0SY-Z2g/forrester-no-end-in-sight-for-ie.html" title="Forrester: No End in Sight for IE Enterprise Slide" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/06/forrester-no-end-in-sight-for-ie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEAQ3Y6fyp7ImA9WhZaE08.&quot;"><id>tag:blogger.com,1999:blog-2782359832460307258.post-536612134138641849</id><published>2011-06-29T07:09:00.000+03:00</published><updated>2011-06-29T07:10:42.817+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-29T07:10:42.817+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="swf" /><category scheme="http://www.blogger.com/atom/ns#" term="freebies" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="flash" /><title>Google's Swiffy makes Flash files HTML5 friendly</title><content type="html">&lt;a href="http://news.cnet.com/8301-27076_3-20075135-248/googles-swiffy-makes-flash-files-html5-friendly/"&gt;http://news.cnet.com/8301-27076_3-20075135-248/googles-swiffy-makes-flash-files-html5-friendly/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2782359832460307258-536612134138641849?l=devharbor.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gpm6XGGvz6L0nhbua_v1v0siSRU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gpm6XGGvz6L0nhbua_v1v0siSRU/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/gpm6XGGvz6L0nhbua_v1v0siSRU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gpm6XGGvz6L0nhbua_v1v0siSRU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DevHarbor/~4/O0vgNNWfGtU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://devharbor.blogspot.com/feeds/536612134138641849/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2782359832460307258&amp;postID=536612134138641849" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/536612134138641849?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2782359832460307258/posts/default/536612134138641849?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DevHarbor/~3/O0vgNNWfGtU/googles-swiffy-makes-flash-files-html5.html" title="Google's Swiffy makes Flash files HTML5 friendly" /><author><name>Alex C</name><uri>http://www.blogger.com/profile/04555184614131343457</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://devharbor.blogspot.com/2011/06/googles-swiffy-makes-flash-files-html5.html</feedburner:origLink></entry></feed>

