using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.XPath;
using Telerik.Cms;
using Telerik.Cms.Web;
using Telerik.Cms.Web.UI;
namespace Sitefinity.Samples.WebControls
{
/// <summary>
/// Summary description for PageSocialBookmarks
/// </summary>
public class PageSocialBookmarks : SimpleControl
{
#region Fields
private string socialBookmarksPath = "~/CustomControls/ControlTemplates/SocialBookMarks.xml";
private string layoutTemplatePath = "~/CustomControls/ControlTemplates/SocialBookmarks.ascx";
private string bookmarkImagesPath;
private string bookmarkImagesSize;
private string pageTitle;
private string pagePath;
#endregion
#region Properties
[WebEditor("Telerik.FileManager.UrlWebEditor, Telerik.FileManager"), Category("Appearance")]
public override string LayoutTemplatePath
{
get
{
object obj2 = this.ViewState["LayoutTemplatePath"];
if (obj2 != null)
{
return (string)obj2;
}
return layoutTemplatePath;
}
set
{
this.ViewState["LayoutTemplatePath"] = value;
}
}
//set path to xml file containing social bookmarks
[WebEditor("Telerik.FileManager.UrlWebEditor, Telerik.FileManager"), Category("Data")]
public string SocialBookmarksPath
{
get
{
object obj2 = this.ViewState["SocialBookmarksPath"];
if (obj2 != null)
{
return (string)obj2;
}
return socialBookmarksPath;
}
set
{
this.ViewState["SocialBookmarksPath"] = value;
}
}
#endregion
#region Methods
protected override void CreateChildControls()
{
if (Page == null || DesignMode)
{
Label noDesignModeLabel = new Label();
noDesignModeLabel.Text = "The Social Bookmarks control cannot be rendered in Design Mode";
this.Controls.Add(noDesignModeLabel);
}
else
{
ICmsPage cmsPage = ((CmsSiteMapNode)SiteMap.CurrentNode).GetCmsPage();
base.CreateChildControls();
this.pagePath = HttpContext.Current.Request.Url.ToString();
this.pageTitle = cmsPage.Title;
GetBookmarkProperties();
XmlDataSource bookmarksDataSource = new XmlDataSource();
bookmarksDataSource.DataFile = this.socialBookmarksPath;
bookmarksDataSource.XPath = "bookmarks/itemTemplate/bookmark";
bookmarksDataSource.ID = "bookmarksDataSource";
this.Container.Controls.Add(bookmarksDataSource);
BookmarksRepeater.DataSource = bookmarksDataSource;
BookmarksRepeater.ItemDataBound += new RepeaterItemEventHandler(BookmarksRepeater_ItemDataBound);
BookmarksRepeater.DataBind();
}
}
//get settings for bookmarks image path and image size from xml
void GetBookmarkProperties()
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
settings.IgnoreWhitespace = true;
XmlReader reader = XmlReader.Create((HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + ResolveUrl(this.socialBookmarksPath)), settings);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
var imageSize = xmlDoc.GetElementsByTagName("imageSize");
var imagePath = xmlDoc.GetElementsByTagName("imagePath");
if (imageSize.Count > 0)
{
this.bookmarkImagesSize = imageSize[0].InnerText;
}
if (imagePath.Count > 0)
{
this.bookmarkImagesPath = imagePath[0].InnerText;
}
}
void BookmarksRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
XPathNavigator navigator = ((IXPathNavigable)e.Item.DataItem).CreateNavigator();
XmlElement xmlElement = (XmlElement)navigator.UnderlyingObject;
HyperLink BookmarkLink = (HyperLink)e.Item.FindControl("BookmarkLink");
Image BookmarkImage = (Image)e.Item.FindControl("BookmarkImage");
BookmarkLink.NavigateUrl=string.Format(xmlElement.InnerText,this.pagePath,this.pageTitle);
BookmarkLink.ToolTip = xmlElement.GetAttribute("title");
BookmarkImage.ImageUrl = string.Format(this.bookmarkImagesPath, xmlElement.GetAttribute("name"), this.bookmarkImagesSize);
}
}
//reference to the bookmarks repeater
[Browsable(false)]
public Repeater BookmarksRepeater
{
get
{
return base.Container.GetControl<Repeater>("BookmarksRepeater", false, Telerik.Framework.Web.TraverseMethod.DepthFirst);
}
set
{
this.BookmarksRepeater = value;
}
}
#endregion
}
}