It's been a while since we calendar blogged, but I wanted to post about another Queensryche aspect of the shared Calendar Blog on a Community Server site I'm building. We talked about displaying the Calendar Blog post on multiple dates and the aspects involved in sharing a blog among numerous authors in previous tracks. Tonight a feature of the Calendar Blog that might be of interest beyond the calendar: controlling tag creation to a master list of tags to maintain Taxonomy integrity.
Pictorially speaking we want to prevent the creation of new tags, which on our custom CreateEditPost control is performed by removing the input box...
and providing users instead with the option of selecting appropriate tags that already exist...
that were created by an administrator on the Tags/Keywords page...
and displayed to the user on the popup tag selection modal window.

As for the head-banging fun, our custom CreateEditCalendarPost control contains a TagEditor control, our TagCalendarEditor.
<cp:TagCalendarEditor runat="server" id="Tags">
<SkinTemplate>
<table cellpadding="0" cellspacing="0" border="0">
<tr valign="top">
<td>
<input type="hidden" ID="Tags" runat="server" />
</td>
<td>
<CP:Modal modaltype="Button" width="400" height="300"
runat="Server" id="SelectTags" ResourceName="TagEditor_SelectTags" />
</td>
</tr>
</table>
</SkinTemplate>
</cp:TagCalendarEditor>
The Tag[Calendar]Editor's Community Server IModalButton "SelectTags" URL is
SiteUrls.Instance().TagSelectorModal(Globals.UrlEncode(this.ClientID));
Or \themes\[theme]\utility\selecttags.aspx, which uses the CS.Controls.SelectTagForm CS Form. Here the beauty of Community Server's deployment of client-side javascript comes into play, as SelectTagForm.cs client-registers SelectTagForm.js, located with SelectTagForm.cs in CS.Controls\Forms. Because the modal window checkboxlist in SelectTagForm.js interacts with the HTML input item by name
var inputs = document.getElementsByTagName('input');
...we need an input control. No other control will do, not a label (in HTML rendering as a span tag), nor readonly or hidden versions of the original ASP:TextBox.
To restrict tag selection to a pre-determined list--that is, remove the original Textbox and still have full modal window functionality--I changed the ASP:TextBox to an HTML input item of type hidden as shown above in bold, and referenced it accordingly in TagCalendarEditor.
A thousand cries are heard, they echo in the wind
And still the rider will unleash his chosen sin
The victims of his rage are soldiers of his mind
His scream will heed the call of those who stand behind
The nightrider sails away
The nightrider sails yeah
[Queensryche]