Part of the fun in prepping Sueetie for Gummy Bear v1.3 is localizing existing web page content and links. I’m kidding about the "fun" part, because it isn't fun at all—the unglamorous side of Sueetie Development, for sure. What was fun, however, was coming up with a new Sueetie Url Handling model to support a new SueetieLink Control that I needed to support the localization of hyperlinks.
Below is the familiar Sueetie Patterns and Origins wiki page on Sueetie Url Handling and the SueetieLink UserControl. Before getting into it, here's a screenshot of the SueetieLink control in action to pique your interest to read the Patterns and Origins info. Gotta love that Intellisense.
Sueetie Url Handling - Patterns
Sueetie Urls are managed in a Sueetie.Core class called SueetieUrls.cs and used in ASPNET with a User Control called SueetieLinks. The definition file for Sueetie links are located in the .config file /util/config/urls.config.
The Sueetie.Core SueetieUrls Class
Below is the outline of the Sueetie.Core.SueetieUrls class. At the top you can see a simple SueetieUrl container which holds three properties: Name, Url and Roles.
The SueetieUrls class has three primary areas and functions: 1) Individual Url Assignment, 2) Url formatting and retrieving the SueetieUrl object requested, and 3) Loading the urls.config configuration file.
Retrieving the urls.config file
As mentioned above, the urls.config file is located in /util/config. Its url XML elements have three attributes reflecting the properties of the SueetieUrl container class: Name, Path and Roles. Here is an excerpt.
The Roles property is optional and when not assigned means the link has no Role restrictions. The SueetieUrls class uses XDocument and Linq to retrieve and cache the file, with a cache dependency on urls.config so that urls are updated immediately upon changes to urls.config.
The SueetieLink User Control
The Sueetie.Controls SueetieLink User Control works with the SueetieUrls class and adds a SueetieUrlLinkTo enumerator to support Intellisense in creating the control as shown here.
The SueetieUrlLinkTo property is optional, so for custom links, a non-Intellisense enabled UrlName property can be used instead.
The SueetieUrl container class is retrieved with a GetSueetieUrl(string urlName) method. The SueetieLink Onload method demonstrates how a SueetieUrlLinkTo enum property is sought and if found retrieves the specified SueetieUrl object. If not found, the UrlName property is used.
Two other SueetieLink Control Prooperties are worth mentioning: TextKey and LanguageFile. These are to support Localization, with TextKey being the language file KEY value in /util/languages/LANG/sueetie.xml. LanguageFile property specifies another language resource file if sueetie.xml is not used.
Sueetie Url Handling - Origins
The origins of Sueetie Url logic are essentially the Sueetie Core and Control classes that have come before it as there is very little new here. The Enumerator selection support in the SueetieLink control for instance was used in the Sueetie Forum Link Control.
Using XDocument and Linq to retrieve configuration information from an XML file is something we've done with a number of processes including Background Tasks, Localization and SueetieConfiguration class.