<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SquaredRoot &#187; BlogEngine.net</title>
	<atom:link href="http://www.squaredroot.com/tag/blogenginenet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.squaredroot.com</link>
	<description>.Net Development in DC</description>
	<lastBuildDate>Sun, 16 Aug 2009 01:30:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Massive BlogEngine.net Security Hole</title>
		<link>http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/</link>
		<comments>http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 02:34:00 +0000</pubDate>
		<dc:creator>Troy Goode</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[BlogEngine.net]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">/post/2008/04/13/Massive-BlogEngineDotNet-Security-Hole.aspx</guid>
		<description><![CDATA[A massive security hole in BlogEngine.net was just revealed that allows anyone to see your passwords&#8230; Danny Douglass just added a post to his blog where he explains the issue and provides a patched BlogEngine.Core assembly to resolve the issue until the next release of BlogEngine is available. I would advise anyone running BlogEngine.net to [...]]]></description>
			<content:encoded><![CDATA[<p>A massive security hole in BlogEngine.net was just revealed that allows anyone to see your passwords&#8230; Danny Douglass just added a post to his blog where he explains the issue and provides a patched BlogEngine.Core assembly to resolve the issue until the next release of BlogEngine is available.</p>
<p>
I would advise anyone running BlogEngine.net to immediately <a href="http://dannydouglass.com/post/2008/04/BlogEngine-and-the-JavaScript-HttpHandler-Serious-Security-Issue.aspx">go to Danny&#39;s blog and download &amp; install the fix</a>.
</p>
<p>
The faster we can get word out about this, the faster we can shut down this particular attack vector, so please try and get the word out to any BlogEngine.net users you are aware of and please <a href="http://www.dotnetkicks.com/security/Massive_BlogEngine_Net_Security_Hole_Fix_Provided">kick Danny&#39;s post at DotNetKicks</a>.
</p>
<p>
Thanks Danny!</p>
<div style="text-align: center;"><a href="http://www.dotnetkicks.com/kick/?url=http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/" style="border:0; position: relative; top: -2px;"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/" style="border:0;" alt="Kick It on DotNetKicks.com" /></a><a href="http://dotnetshoutout.com/Submit?url=http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/" style="border: 0;"><img src="http://dotnetshoutout.com/image.axd?url=http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/" style="border:0px" alt="Shout It on DotNetShoutOuts.com" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.squaredroot.com/2008/04/13/massive-blogenginedotnet-security-hole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BlogEngine Extension: Copy Code to Clipboard</title>
		<link>http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/</link>
		<comments>http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 22:22:00 +0000</pubDate>
		<dc:creator>Troy Goode</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[BlogEngine.net]]></category>

		<guid isPermaLink="false">/post/2008/01/07/Copy-Code-to-Clipboard-Extension-for-BlogEngine.aspx</guid>
		<description><![CDATA[Since I first started this blog I&#39;ve been using Colin Coller&#39;s CopySourceAsHtml plugin for Visual Studio (which Guy Burstein updated for Visual Studio 2008&#39;s RTM). It was a nice little tool but as I started posting more and more code snippets to the blog I found myself wanting some additional features, specifically: Easy to use. [...]]]></description>
			<content:encoded><![CDATA[<p>
Since I <a href="/post/2007/11/CssHandler-First-Release.aspx">first started</a> this blog I&#39;ve been using Colin Coller&#39;s <a href="http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/">CopySourceAsHtml plugin</a> for Visual Studio (which <a href="http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/11/21/copy-source-as-html-copysourceashtml-for-visual-studio-2008-rtm.aspx">Guy Burstein updated</a> for Visual Studio 2008&#39;s RTM). It was a nice little tool but as I started posting <a href="/post/2007/12/ASPNet-MVC-Membership-Basics.aspx">more</a> and <a href="/post/2008/01/MVC-Authentication-and-Errors.aspx">more</a> code snippets to the blog I found myself wanting some additional features, specifically:
</p>
<ul>
<li><strong>Easy to use</strong>. While it was perfectly simple to copy the source as html, it was a bit more cumbersome to paste it properly into <a href="http://get.live.com/writer/overview">Windows Live Writer</a>. I wound up in HTML mode in WLW everytime I needed to paste some code. </li>
<li><strong>CSS support</strong>. The Html generated by the VS plugin inlines all of the styles and makes it difficult to change the presentation of your code without tweaking the settings of the plugin at posting time. </li>
<li><strong>Scrollable</strong>. This is mostly handled by the above feature, but I wanted to be able to limit the amount of screen real estate taken up by the code while still allowing my readers to view more of the code without having to download any files. </li>
<li><strong>Copyable</strong>. Sometimes you see a piece of code that fits your situation perfectly, but when you copy it you wind up with a bunch of extra Html guck and line numbers at the front of every line you have to manually remove. I want to allow my readers to copy the code without any of that mess. </li>
</ul>
<p>
I found <a href="http://code.google.com/p/syntaxhighlighter/">syntaxhighlighter</a> on Google Code pretty quickly and was impressed. I&#39;d seen it around on other people&#39;s blogs and loved the &quot;copy to clipboard&quot; feature, but I really wanted a server-side (or pre-posting) highlighter that would take some of the strain off the browser and wanted something with richer WLW integration.
</p>
<p>
After looking at a few more options I finally found <a href="http://lvildosola.blogspot.com/2007/02/code-snippet-plugin-for-windows-live.html">Leo Vildosola&#39;s Code Snippet</a> plugin, which matched up with all of my requirements except for the lack of a built-in &quot;copy to clipboard&quot; feature. With some help from <a href="http://webchicanery.com/2006/11/14/clipboard-copy-javascript/">clipboard copying javascript posted at WebChicanery</a> I set out to build an extension for <a href="http://www.dotnetblogengine.net/">BlogEngine.net</a> that would automatically tack on the copy feature to any code I posted via the Code Snippet plugin.
</p>
<p>
A few hours later, I present the CopyCodeToClipboard extension for BlogEngine.net! Below you will find an example of the extension displaying it&#39;s own code (mmm&#8230; dogfood) and the css I&#39;ve used to style the code on my site. I&#39;ve tried to make the extension css friendly so you can change it&#39;s presentation a great deal without modifying the code.
</p>
<p>
<strong>CopyCodeToClipboard.zip</strong> &#8211; <a rel="enclosure" href="/file.axd?file=CopyCodeToClipboard.zip">Download (3.82 kb)</a>     <br />
Contains all of the below files in one convenient package.
</p>
<p>
<strong>CopyCodeToClipboard.cs</strong> &#8211; <a rel="enclosure" href="/file.axd?file=CopyCodeToClipboard.cs">Download (7.36 kb)</a>     <br />
This is the actual extension and should be placed into your root/App_Code/Extensions/ folder.
</p>
<div class="csharpcode-wrapper">
<div class="csharpcode">
<pre class="alt">
<span class="lnum">   1:</span> <span class="kwrd">using</span> System;
</pre>
<pre class="alteven">
<span class="lnum">   2:</span> <span class="kwrd">using</span> System.Text.RegularExpressions;
</pre>
<pre class="alt">
<span class="lnum">   3:</span> <span class="kwrd">using</span> BlogEngine.Core;
</pre>
<pre class="alteven">
<span class="lnum">   4:</span> <span class="kwrd">using</span> BlogEngine.Core.Web.Controls;
</pre>
<pre class="alt">
<span class="lnum">   5:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">   6:</span> [Extension(<span class="str">&quot;Adds a link to syntax highlighted code to copy it to the clipboard.&quot;</span>, <span class="str">&quot;1.0&quot;</span>, <span class="str">@&quot;&lt;a href=&quot;</span><span class="str">&quot;http://www.squaredroot.com&quot;</span><span class="str">&quot;&gt;Troy Goode&lt;/a&gt;&quot;</span>)]
</pre>
<pre class="alt">
<span class="lnum">   7:</span> <span class="kwrd">public</span> <span class="kwrd">class</span> CopyCodeToClipboard
</pre>
<pre class="alteven">
<span class="lnum">   8:</span> {
</pre>
<pre class="alt">
<span class="lnum">   9:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">  10:</span>     <span class="kwrd">private</span> ExtensionSettings settings;
</pre>
<pre class="alt">
<span class="lnum">  11:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">  12:</span>     <span class="kwrd">public</span> CopyCodeToClipboard()
</pre>
<pre class="alt">
<span class="lnum">  13:</span>     {
</pre>
<pre class="alteven">
<span class="lnum">  14:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  15:</span>         Post.Serving += <span class="kwrd">new</span> EventHandler&lt;ServingEventArgs&gt;(Post_PostServing);
</pre>
<pre class="alteven">
<span class="lnum">  16:</span>         Post.Saving += <span class="kwrd">new</span> EventHandler&lt;SavedEventArgs&gt;(Post_Saving);
</pre>
<pre class="alt">
<span class="lnum">  17:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">  18:</span>         ExtensionSettings initialSettings = <span class="kwrd">new</span> ExtensionSettings(GetType().Name);
</pre>
<pre class="alt">
<span class="lnum">  19:</span>         initialSettings.Help = <span class="str">&quot;This extension is written to work with the &lt;a href=&quot;http://lvildosola.blogspot.com/2007/02/code-snippet-plugin-for-windows-live.html&quot;&gt;Code Snippet Plugin for Windows Live Writer&lt;/a&gt; and will not work with other syntax highlighting tools.&quot;</span>;
</pre>
<pre class="alteven">
<span class="lnum">  20:</span>         initialSettings.AddParameter( <span class="str">&quot;copyText&quot;</span>, <span class="str">&quot;Text for &#39;Copy to Clipboard&#39; button?&quot;</span>, 255, <span class="kwrd">true</span> );
</pre>
<pre class="alt">
<span class="lnum">  21:</span>             initialSettings.AddValue( <span class="str">&quot;copyText&quot;</span>, <span class="str">&quot;Copy To Clipboard&quot;</span> );
</pre>
<pre class="alteven">
<span class="lnum">  22:</span>         initialSettings.AddParameter( <span class="str">&quot;popupText&quot;</span>, <span class="str">&quot;Text for &#39;View in Popup Window&#39; button?&quot;</span>, 255, <span class="kwrd">true</span> );
</pre>
<pre class="alt">
<span class="lnum">  23:</span>             initialSettings.AddValue( <span class="str">&quot;popupText&quot;</span>, <span class="str">&quot;View Plain&quot;</span> );
</pre>
<pre class="alteven">
<span class="lnum">  24:</span>         initialSettings.AddParameter(<span class="str">&quot;aboveBelow&quot;</span>, <span class="str">&quot;Display above or below code?&quot;</span>, 5, <span class="kwrd">true</span>);
</pre>
<pre class="alt">
<span class="lnum">  25:</span>             initialSettings.AddValue(<span class="str">&quot;aboveBelow&quot;</span>, <span class="str">&quot;Below&quot;</span>);
</pre>
<pre class="alteven">
<span class="lnum">  26:</span>         initialSettings.AddParameter( <span class="str">&quot;style&quot;</span>, <span class="str">&quot;Any additional styling?&quot;</span>, <span class="kwrd">int</span>.MaxValue, <span class="kwrd">false</span> );
</pre>
<pre class="alt">
<span class="lnum">  27:</span>             initialSettings.AddValue( <span class="str">&quot;style&quot;</span>, <span class="str">&quot;&quot;</span> );
</pre>
<pre class="alteven">
<span class="lnum">  28:</span>         initialSettings.AddParameter( <span class="str">&quot;flashFile&quot;</span>, <span class="str">&quot;Path to &#39;_clipboard.swf&#39; Flash file?&quot;</span>, 255, <span class="kwrd">true</span> );
</pre>
<pre class="alt">
<span class="lnum">  29:</span>             initialSettings.AddValue( <span class="str">&quot;flashFile&quot;</span>, <span class="str">&quot;~/_clipboard.swf&quot;</span> );
</pre>
<pre class="alteven">
<span class="lnum">  30:</span>         initialSettings.IsScalar = <span class="kwrd">true</span>;
</pre>
<pre class="alt">
<span class="lnum">  31:</span>         ExtensionManager.ImportSettings(initialSettings);
</pre>
<pre class="alteven">
<span class="lnum">  32:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  33:</span>         settings = ExtensionManager.GetSettings(GetType().Name);
</pre>
<pre class="alteven">
<span class="lnum">  34:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  35:</span>     }
</pre>
<pre class="alteven">
<span class="lnum">  36:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  37:</span>     <span class="kwrd">private</span> <span class="kwrd">void</span> Post_Saving(<span class="kwrd">object</span> sender, SavedEventArgs e)
</pre>
<pre class="alteven">
<span class="lnum">  38:</span>     {
</pre>
<pre class="alt">
<span class="lnum">  39:</span>         <span class="rem">//### executing here will only run the code once per post, but will modify the post itself</span>
</pre>
<pre class="alteven">
<span class="lnum">  40:</span>         <span class="rem">//InsertCopyCodeLink(e);</span>
</pre>
<pre class="alt">
<span class="lnum">  41:</span>     }
</pre>
<pre class="alteven">
<span class="lnum">  42:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  43:</span>     <span class="kwrd">private</span> <span class="kwrd">void</span> Post_PostServing(<span class="kwrd">object</span> sender, ServingEventArgs e)
</pre>
<pre class="alteven">
<span class="lnum">  44:</span>     {
</pre>
<pre class="alt">
<span class="lnum">  45:</span>         <span class="rem">//### executing here will execute the code on every iteration, but will not modify your post</span>
</pre>
<pre class="alteven">
<span class="lnum">  46:</span>         InsertCopyCodeLink(e);
</pre>
<pre class="alt">
<span class="lnum">  47:</span>     }
</pre>
<pre class="alteven">
<span class="lnum">  48:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  49:</span>     <span class="kwrd">private</span> <span class="kwrd">void</span> InsertCopyCodeLink( ServingEventArgs e)
</pre>
<pre class="alteven">
<span class="lnum">  50:</span>     {
</pre>
<pre class="alt">
<span class="lnum">  51:</span>         <span class="kwrd">if</span>( !<span class="kwrd">string</span>.IsNullOrEmpty(e.Body) )
</pre>
<pre class="alteven">
<span class="lnum">  52:</span>         {
</pre>
<pre class="alt">
<span class="lnum">  53:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">  54:</span>             <span class="rem">//### find code-div</span>
</pre>
<pre class="alt">
<span class="lnum">  55:</span>             <span class="kwrd">string</span> postID = Guid.NewGuid().ToString().Replace( <span class="str">&quot;{&quot;</span>, <span class="str">&quot;&quot;</span> ).Replace( <span class="str">&quot;}&quot;</span>, <span class="str">&quot;&quot;</span> ).Replace( <span class="str">&quot;-&quot;</span>, <span class="str">&quot;&quot;</span> );
</pre>
<pre class="alteven">
<span class="lnum">  56:</span>             <span class="kwrd">string</span> toFind = <span class="str">&quot;&lt;div class=&quot;csharpcode-wrapper&quot;&gt;&quot;</span>;
</pre>
<pre class="alt">
<span class="lnum">  57:</span>             <span class="kwrd">int</span> index = e.Body.IndexOf(toFind);
</pre>
<pre class="alteven">
<span class="lnum">  58:</span>             <span class="kwrd">while</span>( index != -1 )
</pre>
<pre class="alt">
<span class="lnum">  59:</span>             {
</pre>
<pre class="alteven">
<span class="lnum">  60:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  61:</span>                 <span class="rem">//### grab code out of code-div</span>
</pre>
<pre class="alteven">
<span class="lnum">  62:</span>                 <span class="kwrd">int</span> end = e.Body.IndexOf( <span class="str">&quot;&lt;/div&gt;&quot;</span>, index ); <span class="rem">//### the first &lt;/div&gt; should be the end of &quot;csharpcode&quot;</span>
</pre>
<pre class="alt">
<span class="lnum">  63:</span>                 end = e.Body.IndexOf( <span class="str">&quot;&lt;/div&gt;&quot;</span>, end ); <span class="rem">//### the next &lt;/div&gt; should be the end of &quot;csharpcode-wrapper&quot;</span>
</pre>
<pre class="alteven">
<span class="lnum">  64:</span>                 <span class="kwrd">string</span> code = e.Body.Substring(index, end - index);
</pre>
<pre class="alt">
<span class="lnum">  65:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">  66:</span>                 <span class="rem">//### parse code out of code-div</span>
</pre>
<pre class="alt">
<span class="lnum">  67:</span>                 <span class="kwrd">int</span> codeStart = code.IndexOf(<span class="str">&quot;&lt;pre &quot;</span>);
</pre>
<pre class="alteven">
<span class="lnum">  68:</span>                 <span class="kwrd">int</span> codeEnd = code.LastIndexOf(<span class="str">&quot;&lt;/pre&gt;&quot;</span>) + 6;
</pre>
<pre class="alt">
<span class="lnum">  69:</span>                 code = code.Substring(codeStart, codeEnd - codeStart);
</pre>
<pre class="alteven">
<span class="lnum">  70:</span>                 code = Regex.Replace( code, <span class="str">@&quot;&lt;(.|n)*?&gt;&quot;</span>, <span class="kwrd">string</span>.Empty ); <span class="rem">//### strip html</span>
</pre>
<pre class="alt">
<span class="lnum">  71:</span>                 code = code.Replace( <span class="str">&quot;&amp;#160;&quot;</span>, <span class="str">&quot;&quot;</span> ); <span class="rem">//### remove unnecessary &amp;#160;s from the blank lines</span>
</pre>
<pre class="alteven">
<span class="lnum">  72:</span>                 code = code.Replace( <span class="str">&quot;&amp;nbsp;&quot;</span>, <span class="str">&quot; &quot;</span> ); <span class="rem">//### convert &amp;nbsp;s to spaces</span>
</pre>
<pre class="alt">
<span class="lnum">  73:</span>                 code = Regex.Replace( code, <span class="str">@&quot;^(s*)(d+): &quot;</span>, <span class="str">&quot;&quot;</span> ); <span class="rem">//### remove line numbers on first line</span>
</pre>
<pre class="alteven">
<span class="lnum">  74:</span>                 code = Regex.Replace( code, <span class="str">@&quot;(n)(s*)(d+): &quot;</span>, <span class="str">&quot;n&quot;</span> );  <span class="rem">//### remove line numbers on subsequent lines</span>
</pre>
<pre class="alt">
<span class="lnum">  75:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum">  76:</span>                 <span class="rem">//### create copy link</span>
</pre>
<pre class="alt">
<span class="lnum">  77:</span>                 <span class="kwrd">string</span> insertScript = <span class="str">@&quot;</span>
</pre>
<pre class="alteven">
<span class="lnum">  78:</span>                     &lt;script type=&quot;<span class="str">&quot;text/javascript&quot;</span><span class="str">&quot;&gt;</span>
</pre>
<pre class="alt">
<span class="lnum">  79:</span>                         var copyToClipboard@INDEX = CopyToClipboard_Strip(&#39;@CODE&#39;);
</pre>
<pre class="alteven">
<span class="lnum">  80:</span>                     &lt;/script&gt;&quot;;
</pre>
<pre class="alt">
<span class="lnum">  81:</span>                 <span class="kwrd">string</span> insertDiv = <span class="str">@&quot;&lt;div class=&quot;</span><span class="str">&quot;CopyToClipboard&quot;</span><span class="str">&quot; style=&quot;</span><span class="str">&quot;@STYLE&quot;</span><span class="str">&quot;&gt;&lt;div&gt;&lt;a href=&quot;</span><span class="str">&quot;javascript:void(0);&quot;</span><span class="str">&quot; onclick=&quot;</span><span class="str">&quot;CopyToClipboard_ViewPlain(copyToClipboard@INDEX);&quot;</span><span class="str">&quot;&gt;@POPUPTEXT&lt;/a&gt; | &lt;a href=&quot;</span><span class="str">&quot;javascript:void(0);&quot;</span><span class="str">&quot; onclick=&quot;</span><span class="str">&quot;CopyToClipboard_Copy(copyToClipboard@INDEX);&quot;</span><span class="str">&quot;&gt;@COPYTEXT&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&quot;</span>;
</pre>
<pre class="alteven">
<span class="lnum">  82:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  83:</span>                 <span class="rem">//### set values for copy link and insert above/below code</span>
</pre>
<pre class="alteven">
<span class="lnum">  84:</span>                 <span class="kwrd">string</span> insert = insertDiv + OutputCommonMethods() + insertScript;
</pre>
<pre class="alt">
<span class="lnum">  85:</span>                 insert = insert.Replace( <span class="str">&quot;@STYLE&quot;</span>, settings.GetSingleValue(<span class="str">&quot;style&quot;</span>) );
</pre>
<pre class="alteven">
<span class="lnum">  86:</span>                 insert = insert.Replace( <span class="str">&quot;@POPUPTEXT&quot;</span>, settings.GetSingleValue(<span class="str">&quot;popupText&quot;</span>) );
</pre>
<pre class="alt">
<span class="lnum">  87:</span>                 insert = insert.Replace( <span class="str">&quot;@COPYTEXT&quot;</span>, settings.GetSingleValue(<span class="str">&quot;copyText&quot;</span>) );
</pre>
<pre class="alteven">
<span class="lnum">  88:</span>                 insert = insert.Replace( <span class="str">&quot;@INDEX&quot;</span>, postID + <span class="str">&quot;_&quot;</span> + index.ToString() ); <span class="rem">//### use index of code-div as a unique ID to allow multiple code-divs on this post</span>
</pre>
<pre class="alt">
<span class="lnum">  89:</span>                 insert = insert.Replace( <span class="str">&quot;@CODE&quot;</span>, code.Replace( <span class="str">&quot;&quot;, &quot;</span><span class="str">&quot; ).Replace( &quot;</span><span class="str">&#39;&quot;, &quot;&#39;&quot; ).Replace( &quot;rn&quot;, &quot;rn&quot; ).Replace( &quot;rnrnrn&quot;, &quot;rn&quot; ) );</span>
</pre>
<pre class="alteven">
<span class="lnum">  90:</span>                 if( settings.GetSingleValue(&quot;aboveBelow&quot;).ToLower() == &quot;above&quot; )
</pre>
<pre class="alt">
<span class="lnum">  91:</span>                     e.Body = e.Body.Insert( index, insert );
</pre>
<pre class="alteven">
<span class="lnum">  92:</span>                 else
</pre>
<pre class="alt">
<span class="lnum">  93:</span>                     e.Body = e.Body.Insert( e.Body.IndexOf( &quot;&lt;/div&gt;&quot;, end + 1 ) + 6, insert );
</pre>
<pre class="alteven">
<span class="lnum">  94:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum">  95:</span>                 //### prep index to find next code-div
</pre>
<pre class="alteven">
<span class="lnum">  96:</span>                 index = index + insert.Length + 1; //### ensure we don&#39;t find <span class="kwrd">this</span> same code-div again
</pre>
<pre class="alt">
<span class="lnum">  97:</span>                 <span class="kwrd">if</span>( index &gt; e.Body.Length ) <span class="kwrd">break</span>;
</pre>
<pre class="alteven">
<span class="lnum">  98:</span>                 index = e.Body.IndexOf( toFind, index ); <span class="rem">//### find any other code divs</span>
</pre>
<pre class="alt">
<span class="lnum">  99:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum"> 100:</span>             }
</pre>
<pre class="alt">
<span class="lnum"> 101:</span>         }
</pre>
<pre class="alteven">
<span class="lnum"> 102:</span>     }
</pre>
<pre class="alt">
<span class="lnum"> 103:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum"> 104:</span>     <span class="kwrd">private</span> <span class="kwrd">string</span> OutputCommonMethods()
</pre>
<pre class="alt">
<span class="lnum"> 105:</span>     {
</pre>
<pre class="alteven">
<span class="lnum"> 106:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum"> 107:</span>         <span class="rem">//### only output the following once per page</span>
</pre>
<pre class="alteven">
<span class="lnum"> 108:</span>         <span class="kwrd">if</span>( System.Web.HttpContext.Current.Items[<span class="str">&quot;CopyToClipboard_JSOutput&quot;</span>] == <span class="kwrd">null</span> )
</pre>
<pre class="alt">
<span class="lnum"> 109:</span>         {
</pre>
<pre class="alteven">
<span class="lnum"> 110:</span>             <span class="rem">//### add shared javascript</span>
</pre>
<pre class="alt">
<span class="lnum"> 111:</span>             <span class="kwrd">string</span> flashPath = System.Web.VirtualPathUtility.ToAbsolute(settings.GetSingleValue(<span class="str">&quot;flashFile&quot;</span>));
</pre>
<pre class="alteven">
<span class="lnum"> 112:</span>             <span class="kwrd">string</span> commonMethods = <span class="str">@&quot;</span>
</pre>
<pre class="alt">
<span class="lnum"> 113:</span>                 &lt;div id=&quot;<span class="str">&quot;CopyToClipboard_Hidden&quot;</span><span class="str">&quot; style=&quot;</span><span class="str">&quot;display:none;&quot;</span><span class="str">&quot;&gt;&lt;/div&gt;</span>
</pre>
<pre class="alteven">
<span class="lnum"> 114:</span>                 &lt;div id=&quot;<span class="str">&quot;CopyToClipboard_FlashContainer&quot;</span><span class="str">&quot;&gt;&lt;/div&gt;</span>
</pre>
<pre class="alt">
<span class="lnum"> 115:</span>                 &lt;script type=&quot;<span class="str">&quot;text/javascript&quot;</span><span class="str">&quot;&gt;</span>
</pre>
<pre class="alteven">
<span class="lnum"> 116:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum"> 117:</span>                     function CopyToClipboard_Strip( text ){
</pre>
<pre class="alteven">
<span class="lnum"> 118:</span>                         text = text.replace( /&amp;nbsp;/g, &#39; &#39; );
</pre>
<pre class="alt">
<span class="lnum"> 119:</span>                         text = text.replace( /&amp;quot;/g, &#39;&quot;<span class="str">&quot;&#39; );</span>
</pre>
<pre class="alteven">
<span class="lnum"> 120:</span>                         text = text.replace( /&amp;#39;/g, &#39;&quot;<span class="str">&quot;&#39; );</span>
</pre>
<pre class="alt">
<span class="lnum"> 121:</span>                         text = text.replace( /&amp;amp;/g, &#39;&amp;&#39; );
</pre>
<pre class="alteven">
<span class="lnum"> 122:</span>                         text = text.replace( /&amp;lt;/g, String.fromCharCode(60) );
</pre>
<pre class="alt">
<span class="lnum"> 123:</span>                         text = text.replace( /&amp;gt;/g, String.fromCharCode(62) );
</pre>
<pre class="alteven">
<span class="lnum"> 124:</span>                         return text;
</pre>
<pre class="alt">
<span class="lnum"> 125:</span>                     }
</pre>
<pre class="alteven">
<span class="lnum"> 126:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum"> 127:</span>                     function CopyToClipboard_Copy( text ){
</pre>
<pre class="alteven">
<span class="lnum"> 128:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum"> 129:</span>                         //### get reference to utility div
</pre>
<pre class="alteven">
<span class="lnum"> 130:</span>                         var ele = document.getElementById(&#39;CopyToClipboard_Hidden&#39;);
</pre>
<pre class="alt">
<span class="lnum"> 131:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum"> 132:</span>                         //### the following taken from: http://webchicanery.com/2006/11/14/clipboard-copy-javascript/
</pre>
<pre class="alt">
<span class="lnum"> 133:</span>                         if (false &amp;&amp; window.clipboardData) {
</pre>
<pre class="alteven">
<span class="lnum"> 134:</span>                             window.clipboardData.setData( &quot;<span class="str">&quot;Text&quot;</span><span class="str">&quot;, text );</span>
</pre>
<pre class="alt">
<span class="lnum"> 135:</span>                         } else {
</pre>
<pre class="alteven">
<span class="lnum"> 136:</span>                             document.getElementById(&#39;CopyToClipboard_FlashContainer&#39;).innerHTML = &#39;&#39;;
</pre>
<pre class="alt">
<span class="lnum"> 137:</span>                             var divinfo = &#39;&lt;embed id=&quot;<span class="str">&quot;CopyToClipboard_FlashFile&quot;</span><span class="str">&quot; src=&quot;</span><span class="str">&quot;&quot;</span> + flashPath + <span class="str">@&quot;&quot;</span><span class="str">&quot; FlashVars=&quot;</span><span class="str">&quot;clipboard=&#39; + encodeURIComponent(text) + &#39;&quot;</span><span class="str">&quot; width=&quot;</span><span class="str">&quot;0&quot;</span><span class="str">&quot; height=&quot;</span><span class="str">&quot;0&quot;</span><span class="str">&quot; type=&quot;</span><span class="str">&quot;application/x-shockwave-flash&quot;</span><span class="str">&quot;&gt;&lt;/embed&gt;&#39;;</span>
</pre>
<pre class="alteven">
<span class="lnum"> 138:</span>                             document.getElementById(&#39;CopyToClipboard_FlashContainer&#39;).innerHTML = divinfo;
</pre>
<pre class="alt">
<span class="lnum"> 139:</span>                         }
</pre>
<pre class="alteven">
<span class="lnum"> 140:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum"> 141:</span>                     }
</pre>
<pre class="alteven">
<span class="lnum"> 142:</span>&nbsp;
</pre>
<pre class="alt">
<span class="lnum"> 143:</span>                     function CopyToClipboard_ViewPlain( text ){
</pre>
<pre class="alteven">
<span class="lnum"> 144:</span>                         var win = window.open( &#39;&#39;, &#39;CopyToClipboard_Window&#39;, &#39;width=480, height=480, toolbar=no, menubar=no, scrollbars=auto, resizable=yes, location=no, directories=no, status=no&#39; );
</pre>
<pre class="alt">
<span class="lnum"> 145:</span>                         win.document.write( &#39;&lt;html&gt;&lt;head&gt;&lt;title&gt;Code&lt;/title&gt;&lt;body style=&quot;<span class="str">&quot;margin:0;padding:0;&quot;</span><span class="str">&quot;&gt;&lt;textarea style=&quot;</span><span class="str">&quot;width:100%;height:100%;border:0;&quot;</span><span class="str">&quot;&gt;&#39; + text + &#39;&lt;/textarea&gt;&lt;/body&gt;&lt;/html&gt;&#39; );</span>
</pre>
<pre class="alteven">
<span class="lnum"> 146:</span>                     }
</pre>
<pre class="alt">
<span class="lnum"> 147:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum"> 148:</span>                 &lt;/script&gt;
</pre>
<pre class="alt">
<span class="lnum"> 149:</span>             &quot;;
</pre>
<pre class="alteven">
<span class="lnum"> 150:</span>             System.Web.HttpContext.Current.Items[<span class="str">&quot;CopyToClipboard_JSOutput&quot;</span>] = <span class="kwrd">true</span>;
</pre>
<pre class="alt">
<span class="lnum"> 151:</span>             <span class="kwrd">return</span> commonMethods;
</pre>
<pre class="alteven">
<span class="lnum"> 152:</span>         }
</pre>
<pre class="alt">
<span class="lnum"> 153:</span>         <span class="kwrd">else</span>
</pre>
<pre class="alteven">
<span class="lnum"> 154:</span>             <span class="kwrd">return</span> <span class="str">&quot;&quot;</span>;
</pre>
<pre class="alt">
<span class="lnum"> 155:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum"> 156:</span>     }
</pre>
<pre class="alt">
<span class="lnum"> 157:</span>&nbsp;
</pre>
<pre class="alteven">
<span class="lnum"> 158:</span> }
</pre>
</div>
</div>
<p>
<strong>WLWSyntaxHighlighter.css</strong> &#8211; <a rel="enclosure" href="/file.axd?file=WLWSyntaxHighlighter.css">Download (1.26 kb)</a><br />
<br />
The Css generated by the Windows Live Writer Code Snippet plugin, modified to fit into my blog&#39;s colors.
</p>
<div class="csharpcode-wrapper">
<div class="csharpcode">
<pre class="alt">
<span class="lnum">   1:</span> <span class="cls">.csharpcode-wrapper</span>, <span class="cls">.csharpcode-wrapper</span> <span class="kwrd">pre</span> {
</pre>
<pre class="alteven">
<span class="lnum">   2:</span>   <span class="kwrd">clear</span>: <span class="str">both;</span>
</pre>
<pre class="alt">
<span class="lnum">   3:</span>   <span class="kwrd">background-color</span>: <span class="str">#f5f5f5;</span>
</pre>
<pre class="alteven">
<span class="lnum">   4:</span>   <span class="kwrd">border</span>: <span class="str">solid 2px #A0410D;</span>
</pre>
<pre class="alt">
<span class="lnum">   5:</span>   <span class="kwrd">font-family</span>: <span class="str">Consolas, &#39;Courier New&#39;, Courier, Monospace;</span>
</pre>
<pre class="alteven">
<span class="lnum">   6:</span>   <span class="kwrd">font-size</span>: <span class="str">8pt;</span>
</pre>
<pre class="alt">
<span class="lnum">   7:</span>   <span class="kwrd">line-height</span>: <span class="str">12pt;</span>
</pre>
<pre class="alteven">
<span class="lnum">   8:</span>   <span class="kwrd">margin</span>: <span class="str">15px 0 0 0px;</span>
</pre>
<pre class="alt">
<span class="lnum">   9:</span>   <span class="kwrd">max-height</span>: <span class="str">227px;</span>
</pre>
<pre class="alteven">
<span class="lnum">  10:</span>   <span class="kwrd">overflow</span>: <span class="str">auto;</span>
</pre>
<pre class="alt">
<span class="lnum">  11:</span>   <span class="kwrd">padding</span>: <span class="str">0px 0px 0px 0px;</span>
</pre>
<pre class="alteven">
<span class="lnum">  12:</span>   <span class="kwrd">width</span>: <span class="str">454px;</span>
</pre>
<pre class="alt">
<span class="lnum">  13:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  14:</span> <span class="cls">.csharpcode-wrapper</span> <span class="kwrd">pre</span> {
</pre>
<pre class="alt">
<span class="lnum">  15:</span>   <span class="kwrd">border-style</span>: <span class="str">none;</span>
</pre>
<pre class="alteven">
<span class="lnum">  16:</span>   <span class="kwrd">margin</span>: <span class="str">0px 0px 0px 0px;</span>
</pre>
<pre class="alt">
<span class="lnum">  17:</span>   <span class="kwrd">overflow</span>: <span class="str">visible;</span>
</pre>
<pre class="alteven">
<span class="lnum">  18:</span>   <span class="kwrd">padding</span>: <span class="str">0px 0px 0px 0px;</span>
</pre>
<pre class="alt">
<span class="lnum">  19:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  20:</span> <span class="cls">.csharpcode</span>, <span class="cls">.csharpcode</span> <span class="kwrd">pre</span>, <span class="cls">.csharpcode</span> <span class="cls">.alt</span> {
</pre>
<pre class="alt">
<span class="lnum">  21:</span>   <span class="kwrd">background-color</span>: <span class="str">#f5f5f5;</span>
</pre>
<pre class="alteven">
<span class="lnum">  22:</span>   <span class="kwrd">border-style</span>: <span class="str">none;</span>
</pre>
<pre class="alt">
<span class="lnum">  23:</span>   <span class="kwrd">color</span>: <span class="str">black;</span>
</pre>
<pre class="alteven">
<span class="lnum">  24:</span>   <span class="kwrd">font-family</span>: <span class="str">Consolas, &#39;Courier New&#39;, Courier, Monospace;</span>
</pre>
<pre class="alt">
<span class="lnum">  25:</span>   <span class="kwrd">font-size</span>: <span class="str">8pt;</span>
</pre>
<pre class="alteven">
<span class="lnum">  26:</span>   <span class="kwrd">line-height</span>: <span class="str">12pt;</span>
</pre>
<pre class="alt">
<span class="lnum">  27:</span>   <span class="kwrd">overflow</span>: <span class="str">visible;</span>
</pre>
<pre class="alteven">
<span class="lnum">  28:</span>   <span class="kwrd">padding</span>: <span class="str">0px 0px 0px 0px;</span>
</pre>
<pre class="alt">
<span class="lnum">  29:</span>   <span class="kwrd">width</span>: <span class="str">100%;</span>
</pre>
<pre class="alteven">
<span class="lnum">  30:</span> }
</pre>
<pre class="alt">
<span class="lnum">  31:</span> <span class="cls">.csharpcode</span> <span class="kwrd">pre</span> {
</pre>
<pre class="alteven">
<span class="lnum">  32:</span>   <span class="kwrd">margin</span>: <span class="str">0em;</span>
</pre>
<pre class="alt">
<span class="lnum">  33:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  34:</span> <span class="cls">.csharpcode</span> <span class="cls">.alt</span> {
</pre>
<pre class="alt">
<span class="lnum">  35:</span>   <span class="kwrd">background-color</span>: <span class="str">#f4f2df;</span>
</pre>
<pre class="alteven">
<span class="lnum">  36:</span> }
</pre>
<pre class="alt">
<span class="lnum">  37:</span> <span class="cls">.csharpcode</span> <span class="cls">.asp</span> {
</pre>
<pre class="alteven">
<span class="lnum">  38:</span>   <span class="kwrd">background-color</span>: <span class="str">#ffff00;</span>
</pre>
<pre class="alt">
<span class="lnum">  39:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  40:</span> <span class="cls">.csharpcode</span> <span class="cls">.attr</span> {
</pre>
<pre class="alt">
<span class="lnum">  41:</span>   <span class="kwrd">color</span>: <span class="str">#ff0000;</span>
</pre>
<pre class="alteven">
<span class="lnum">  42:</span> }
</pre>
<pre class="alt">
<span class="lnum">  43:</span> <span class="cls">.csharpcode</span> <span class="cls">.cls</span> {
</pre>
<pre class="alteven">
<span class="lnum">  44:</span>   <span class="kwrd">color</span>: <span class="str">#cc6633;</span>
</pre>
<pre class="alt">
<span class="lnum">  45:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  46:</span> <span class="cls">.csharpcode</span> <span class="cls">.html</span> {
</pre>
<pre class="alt">
<span class="lnum">  47:</span>   <span class="kwrd">color</span>: <span class="str">#800000;</span>
</pre>
<pre class="alteven">
<span class="lnum">  48:</span> }
</pre>
<pre class="alt">
<span class="lnum">  49:</span> <span class="cls">.csharpcode</span> <span class="cls">.kwrd</span> {
</pre>
<pre class="alteven">
<span class="lnum">  50:</span>   <span class="kwrd">color</span>: <span class="str">#0000ff;</span>
</pre>
<pre class="alt">
<span class="lnum">  51:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  52:</span> <span class="cls">.csharpcode</span> <span class="cls">.lnum</span> {
</pre>
<pre class="alt">
<span class="lnum">  53:</span>   <span class="kwrd">color</span>: <span class="str">#f1c969;</span>
</pre>
<pre class="alteven">
<span class="lnum">  54:</span> }
</pre>
<pre class="alt">
<span class="lnum">  55:</span> <span class="cls">.csharpcode</span> <span class="cls">.op</span> {
</pre>
<pre class="alteven">
<span class="lnum">  56:</span>   <span class="kwrd">color</span>: <span class="str">#0000c0;</span>
</pre>
<pre class="alt">
<span class="lnum">  57:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  58:</span> <span class="cls">.csharpcode</span> <span class="cls">.preproc</span> {
</pre>
<pre class="alt">
<span class="lnum">  59:</span>   <span class="kwrd">color</span>: <span class="str">#cc6633;</span>
</pre>
<pre class="alteven">
<span class="lnum">  60:</span> }
</pre>
<pre class="alt">
<span class="lnum">  61:</span> <span class="cls">.csharpcode</span> <span class="cls">.rem</span> {
</pre>
<pre class="alteven">
<span class="lnum">  62:</span>   <span class="kwrd">color</span>: <span class="str">#008000;</span>
</pre>
<pre class="alt">
<span class="lnum">  63:</span> }
</pre>
<pre class="alteven">
<span class="lnum">  64:</span> <span class="cls">.csharpcode</span> <span class="cls">.str</span> {
</pre>
<pre class="alt">
<span class="lnum">  65:</span>   <span class="kwrd">color</span>: <span class="str">#006080;</span>
</pre>
<pre class="alteven">
<span class="lnum">  66:</span> }
</pre>
</div>
</div>
<p>
<strong>CopyCodeToClipboard.css</strong> &#8211; <a rel="enclosure" href="/file.axd?file=CopyCodeToClipboard.css">Download (588 bytes)</a><br />
<br />
The Css I use to style the little red tab below each code area. This is what you would change to match your blog.
</p>
<div class="csharpcode-wrapper">
<div class="csharpcode">
<pre class="alt">
<span class="lnum">   1:</span> <span class="cls">.CopyToClipboard</span>{
</pre>
<pre class="alteven">
<span class="lnum">   2:</span>     <span class="kwrd">width</span>: <span class="str">458px;</span>
</pre>
<pre class="alt">
<span class="lnum">   3:</span>     <span class="kwrd">text-align</span>: <span class="str">right;</span>
</pre>
<pre class="alteven">
<span class="lnum">   4:</span>     <span class="kwrd">margin</span>: <span class="str">0 0 5px 0;</span>
</pre>
<pre class="alt">
<span class="lnum">   5:</span> }
</pre>
<pre class="alteven">
<span class="lnum">   6:</span> <span class="cls">.CopyToClipboard</span> <span class="kwrd">div</span>{
</pre>
<pre class="alt">
<span class="lnum">   7:</span>     <span class="kwrd">margin</span>-<span class="kwrd">left</span>: <span class="str">248px;</span>
</pre>
<pre class="alteven">
<span class="lnum">   8:</span>     <span class="kwrd">background-color</span>: <span class="str">#A0410D;</span>
</pre>
<pre class="alt">
<span class="lnum">   9:</span>     <span class="kwrd">padding</span>: <span class="str">0px 5px 2px 5px;</span>
</pre>
<pre class="alteven">
<span class="lnum">  10:</span>     <span class="kwrd">text-align</span>: <span class="str">center;</span>
</pre>
<pre class="alt">
<span class="lnum">  11:</span>     <span class="kwrd">color</span>: <span class="str">#F1C969;</span>
</pre>
<pre class="alteven">
<span class="lnum">  12:</span>     <span class="kwrd">width</span>: <span class="str">200px;</span>
</pre>
<pre class="alt">
<span class="lnum">  13:</span>     <span class="kwrd">font-size</span>: <span class="str">9px;</span>
</pre>
<pre class="alteven">
<span class="lnum">  14:</span> }
</pre>
<pre class="alt">
<span class="lnum">  15:</span> <span class="cls">.CopyToClipboard</span> a{
</pre>
<pre class="alteven">
<span class="lnum">  16:</span> }
</pre>
<pre class="alt">
<span class="lnum">  17:</span> <span class="cls">.CopyToClipboard</span> a:<span class="kwrd">link</span>{
</pre>
<pre class="alteven">
<span class="lnum">  18:</span>     <span class="kwrd">text-decoration</span>: <span class="str">none;</span>
</pre>
<pre class="alt">
<span class="lnum">  19:</span>     <span class="kwrd">color</span>: <span class="str">#f5f5f5;</span>
</pre>
<pre class="alteven">
<span class="lnum">  20:</span> }
</pre>
<pre class="alt">
<span class="lnum">  21:</span> <span class="cls">.CopyToClipboard</span> a:visited{
</pre>
<pre class="alteven">
<span class="lnum">  22:</span>     <span class="kwrd">text-decoration</span>: <span class="str">none;</span>
</pre>
<pre class="alt">
<span class="lnum">  23:</span>     <span class="kwrd">color</span>: <span class="str">#f5f5f5;</span>
</pre>
<pre class="alteven">
<span class="lnum">  24:</span> }
</pre>
<pre class="alt">
<span class="lnum">  25:</span> <span class="cls">.CopyToClipboard</span> a:hover{
</pre>
<pre class="alteven">
<span class="lnum">  26:</span>     <span class="kwrd">text-decoration</span>: <span class="str">underline;</span>
</pre>
<pre class="alt">
<span class="lnum">  27:</span>     <span class="kwrd">color</span>: <span class="str">#f5f5f5;</span>
</pre>
<pre class="alteven">
<span class="lnum">  28:</span> }
</pre>
<pre class="alt">
<span class="lnum">  29:</span> <span class="cls">.CopyToClipboard</span> a:active{
</pre>
<pre class="alteven">
<span class="lnum">  30:</span>     <span class="kwrd">text-decoration</span>: <span class="str">underline;</span>
</pre>
<pre class="alt">
<span class="lnum">  31:</span>     <span class="kwrd">color</span>: <span class="str">#f5f5f5;</span>
</pre>
<pre class="alteven">
<span class="lnum">  32:</span> }
</pre>
</div>
</div>
<p>
<strong>_clipboard.swf</strong> &#8211; <a rel="enclosure" href="/file.axd?file=_clipboard.swf">Download (109 bytes)</a><br />
<br />
A Macromedia Flash file used to circumvent Firefox &amp; Safari&#39;s nasty habit of blocking javascript from interacting with the clipboard. Created (as best I can tell) by Mark O&#39;Sullivan of <a href="http://lussumo.com/" title="http://lussumo.com/">http://lussumo.com/</a>.
</p>
<p>
<strong>Update (July 11, 2008):</strong><br />
A release of the Code Snippet plug hasn&#39;t been made since the last changes to its source was checked in (in late 2007), so I went ahead and downloaded &amp; built the source. To install the plug place the two DLLs in the zip file from below into Windows Live Writer&#39;s /Plugins/ directory.
</p>
<p>
<a rel="enclosure" href="/file.axd?file=CodeSnippetPlugin.zip">CodeSnippetPlugin.zip (64.91 kb)</a></p>
<div style="text-align: center;"><a href="http://www.dotnetkicks.com/kick/?url=http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/" style="border:0; position: relative; top: -2px;"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/" style="border:0;" alt="Kick It on DotNetKicks.com" /></a><a href="http://dotnetshoutout.com/Submit?url=http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/" style="border: 0;"><img src="http://dotnetshoutout.com/image.axd?url=http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/" style="border:0px" alt="Shout It on DotNetShoutOuts.com" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.squaredroot.com/2008/01/07/copy-code-to-clipboard-extension-for-blogengine/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>BlogEngine.net 1.2.5 Scrapped</title>
		<link>http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/</link>
		<comments>http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/#comments</comments>
		<pubDate>Sat, 08 Dec 2007 03:52:00 +0000</pubDate>
		<dc:creator>Troy Goode</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[BlogEngine.net]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">/post/2007/12/07/BlogEnginenet-125-Scrapped.aspx</guid>
		<description><![CDATA[Apparently this just isn&#39;t my day when it comes to project released that I&#39;ve been looking forward to. Mads Kristensen posted to the BlogEngine.net project&#39;s website stating that the 1.2.5 release of the project (a service pack, really)&#160;will no longer happen and that all of its changes will be rolled into a 1.3 release, due [...]]]></description>
			<content:encoded><![CDATA[<p>
Apparently this just isn&#39;t my day when it comes to project released that I&#39;ve been looking forward to. <a href="http://blog.madskristensen.dk/">Mads Kristensen</a> posted to the <a href="http://dotnetblogengine.net/">BlogEngine.net project&#39;s website</a> stating that <a href="http://dotnetblogengine.net/post/Release-news.aspx">the 1.2.5 release of the project (a service pack, really)&nbsp;will no longer happen</a> and that all of its changes will be rolled into a 1.3 release, due before the end of the year.
</p>
<p>
Dissapointing, yes, but really for the best. The 1.2.5 release fixed quite a few bugs, but none of them show stoppers (well, for me) and 1.3 looks to add some new features to the equation.
</p>
<p>
Coming in 1.3:
</p>
<ul>
<li>Full mono support (right out of the box) </li>
<li>Updated Metaweblog API including support for creating/editing pages in WLW. </li>
<li>Improved Blog importer/exporter, including support for easily switching between XML and SQL backends </li>
<li>New extension manager to managing extensions and their settings. </li>
<li>New events for extension writers </li>
<li>Support for mobile devices </li>
<li>New themes</li>
</ul>
<p>
&nbsp;
</p>
<p>
I&#39;m especially looking forward to the mobile device support and further Live Writer integration.</p>
<div style="text-align: center;"><a href="http://www.dotnetkicks.com/kick/?url=http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/" style="border:0; position: relative; top: -2px;"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/" style="border:0;" alt="Kick It on DotNetKicks.com" /></a><a href="http://dotnetshoutout.com/Submit?url=http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/" style="border: 0;"><img src="http://dotnetshoutout.com/image.axd?url=http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/" style="border:0px" alt="Shout It on DotNetShoutOuts.com" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://www.squaredroot.com/2007/12/07/blogenginenet-125-scrapped/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
