After creating a blogging site in MOSS 2007, I noticed that there is no Spell Check option when creating a new blog post. That stinks, and so far, I haven't been able to figure out a way to get this working. After looking through the spell check system in MOSS, my head is just spinning, and hopefully someone else can shed some light on how to do this.

First thing I did was log an issue on the Community Kit for SharePoint for inclusion in the Enhanced Blog Edition. Please vote for the issue if you want to see this included.
Next, I started looking around a bit at the various spell check implementations in MOSS 2007, in order to see what is currently in the box, and what I might need to do to get this working for the blog template. I found that there are three different places where spell check is implemented:
-
As a toolbar button on various new/edit item forms (such as the announcements list shown below):

-
As a Button on various new/edit item forms (such as the one on the New publishing page form shown below):

-
As a spell check button shown on the rich text editor (such as the one in the Content Editor Web Part's rich text editor):

Maybe someone on the SharePoint team can explain why they have these three different implementations?
Anyways, first thing I did was look for the files that make up the blog template, to see if I could edit the NewPost and EditPost pages to include the spell check button. I dug into C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\Blog\Lists\Posts, and opened up newpost.aspx, and editpost.aspx, and found nothing of interest, just a bunch of asp:content tags.
Next, I opened up the schema.xml file in the \Posts directory and looked for anything that related to spell check or a toolbar. Down at the bottom of the file, I found this xml, which defines what forms should be used for display, new, and edit forms:
<Forms>
<Form Type="DisplayForm" Url="ViewPost.aspx" WebPartZoneID="Main" />
<Form Type="EditForm" Url="EditPost.aspx" ToolbarTemplate="BlogEditFormToolBar" Template="BlogForm" WebPartZoneID="Main" />
<Form Type="NewForm" Url="NewPost.aspx" ToolbarTemplate="BlogNewFormToolBar" Template="BlogForm" WebPartZoneID="Main" />
</Forms>
The ToolbarTemplate caught my eye, so I searched the /web server extensions/12 folder for "BlogEditFormToolbar" and found it in C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx user control file.
<SharePoint:RenderingTemplate ID="BlogEditFormToolBar" runat="server">
<Template>
<script>
recycleBinEnabled = <SharePoint:ProjectProperty Property="RecycleBinEnabled" runat="server"/>;
</script>
<wssuc:ToolBar CssClass="ms-toolbar" id="toolBarTbl" RightButtonSeparator=" " runat="server">
<Template_Buttons>
<SharePoint:EditSeriesButton runat="server"/>
<SharePoint:DeleteItemButton runat="server"/>
</Template_Buttons>
</wssuc:ToolBar>
</Template>
</SharePoint:RenderingTemplate>
Notice the Template_Buttons section. There is no <SharePoint:SpellCheckButton> or anything like that in there. So, next, I wanted to see what the default template was like for the plain old EditFormToolbar, which items like the Announcements list uses:
<SharePoint:RenderingTemplate ID="EditFormToolBar" runat="server">
<Template>
<script>
recycleBinEnabled = <SharePoint:ProjectProperty Property="RecycleBinEnabled" runat="server"/>;
</script>
<wssuc:ToolBar CssClass="ms-toolbar" id="toolBarTbl" RightButtonSeparator=" " runat="server">
<Template_Buttons>
<SharePoint:AttachmentButton runat="server"/>
<SharePoint:EditSeriesButton runat="server"/>
<SharePoint:DeleteItemButton runat="server"/>
<SharePoint:ClaimReleaseTaskButton runat="server"/>
</Template_Buttons>
</wssuc:ToolBar>
</Template>
</SharePoint:RenderingTemplate>
Still no SpellCheck button, and really the only difference appears to be that the blog toolbar template is simply trying to remove the <SharePoint:AttachmentButton> so that you aren't able to add attachments to blog posts. Ok, so I wondered if a <SharePoint:SpellCheckButton> even existed at all. Looking at Reflector in the Microsoft.SharePoint.WebControls namespace, I was able to see all the button controls such as the AttachmentButton, but no spell check button.
Alright, now I'm pretty confused. MS gave us an easy way to add toolbar buttons to the toolbar via this rendering template and bult-in button controls, but they didn't include Spell Check in this same framework. So where the heck does the spell check functionality come from?
It turns out Spell Check is actually a Feature, and is located in C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\SpellChecking. Here we go I thought, now I'm on to something. I opened the SpellChecking.xml file, and noticed this:
<CustomAction
Id="CmsCheckSpellingEditForm"
Location="EditFormToolbar"
Sequence="10"
Description="Add spell checking for all list items"
RegistrationType="ContentType"
RegistrationId="0x01"
ControlClass="Microsoft.SharePoint.Publishing.WebControls.SpellCheckToolbarButton"
ControlAssembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
</CustomAction>
So, first, I tried creating a new custom action in this file, that points to the BlogEditFormToolbar:
<CustomAction
Id="CmsCheckSpellingBlogEditForm"
Location="BlogEditFormToolbar"
Sequence="10"
Description="Add spell checking for all blog items"
RegistrationType="ContentType"
RegistrationId="0x01"
ControlClass="Microsoft.SharePoint.Publishing.WebControls.SpellCheckToolbarButton"
ControlAssembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">
</CustomAction>
No dice. Next, I decided that I would simply try adjusting the Blog template to use the EditFormToolbar template instead of the BlogEditFormToolbar by editing the schema.xml file for the blog template:
<Forms>
<Form Type="DisplayForm" Url="ViewPost.aspx" WebPartZoneID="Main" />
<Form Type="EditForm" Url="EditPost.aspx" ToolbarTemplate="EditFormToolBar" Template="BlogForm" WebPartZoneID="Main" />
<Form Type="NewForm" Url="NewPost.aspx" ToolbarTemplate="NewFormToolBar" Template="BlogForm" WebPartZoneID="Main" />
</Forms>
Still no dice. If you've made it this far, any thoughts? Or any explanations as to why this is so damn convoluted?