Community Server module for embedding Silverlight 1.1 to posts
I figured I just jump into it; creating a Community Server 2007 module for rendering Silverlight content.
It all started up yesterday as a simple thing, but I figured that I didn't feel comfortable with the way the plugin system worked in Community Server, so I created a small abstraction from it to make it feel more right for me. :) It's all based upon attributes instead of hooking up events. The reason I started doing the abstraction was that I have a couple of modules I need in the pipeline and wanted to simplify stuff I will be needing for all modules, such as filtering for ApplicationType.
The module code turns out as follows (I've attached the entire project with source and binaries)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
[Module("SilverlightModule")] public class SilverlightModule : BaseModule { private static readonly string SilverlightScript = "Silverlight"; private static readonly string SilverlightApplicationScript = "SilverlightApplication";
[Method(MethodType.PreRender)] [MethodType(MethodType.PreRender)] [ApplicationType(ApplicationType.Weblog)] [ApplicationType(ApplicationType.ContentManagement)] public string Render(string protocol,string xamlUri) { string completeUri = protocol + ":" + xamlUri;
Page page = MethodContext.Current.Page;
if (!page.ClientScript. IsClientScriptBlockRegistered(SilverlightScript)) { page.ClientScript. RegisterClientScriptBlock( typeof(SilverlightModule), SilverlightScript, Resources.Silverlight, true); }
if (!page.ClientScript. IsClientScriptBlockRegistered(SilverlightApplicationScript)) { page.ClientScript. RegisterClientScriptBlock( typeof(SilverlightModule), SilverlightApplicationScript, Resources.SilverlightApplication, true); }
Guid applicationGuid = Guid.NewGuid();
string hostName = "SilverlightControlHost_"+applicationGuid.ToString();
completeUri = completeUri.Trim();
return "<div id=\"" + hostName + "\" style=\"background-color:Black\" >" + "<script type=\"text/javascript\" style=\"background-color:Black\">" + "createSilverlight(\""+completeUri+"\",\""+applicationGuid.ToString()+"\");" + "</script>" + "</div>"; } } |
Installation instructions :
Copy the binary (DoLittle.CS.Modules.dll) into the bin directory of your Community Server installation. Add the following line to your communityserver.config file :
<add name="SilverlightModule" type="DoLittle.CS.Modules.SilverlightModule, DoLittle.CS.Modules"/>
Then you have the SilverlightModule up and running.
To use it you simple write [SilverlightModule: protocol:uri] in your editor.
protocol : http, https
uri : The uri for the XAML to use
Sample : [SilverlightModule: http://www.dolittle.com/Silverlight/3D/Page.xaml]
Remember to use the unlink button for the Uri. Community Server editor and most other editors will automatically translate the Uri and add a href around it.