public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
        {
            SiteMapNodeCollection nodes = new SiteMapNodeCollection();

            foreach (string topic in DocSiteNavigator.GetSubTopics(node.Key))
            {
                nodes.Add(CreateSiteMapNode(topic));
            }

            return(nodes);
        }
        protected void index_SelectedHelpFileChanged(object sender, EventArgs e)
        {
            if (!changingSelection)
            {
                changingSelection = true;
                ContentsSelected  = false;

                DocSiteNavigator.NavigateToHelpFile(index.SelectedHelpFile);

                contents.SelectedTopic = DocSiteNavigator.ResolveHelpFileTopic(index.SelectedHelpFile, false);

                changingSelection = false;
            }
        }
        protected void contents_SelectedTopicChanged(object sender, EventArgs e)
        {
            if (!changingSelection)
            {
                changingSelection = true;
                ContentsSelected  = true;

                if (DocSiteNavigator.NavigateToTopic(contents.SelectedTopic, false))
                {
                    index.SelectedHelpFile = DocSiteNavigator.ResolveTopicHelpFile(contents.SelectedTopic, false);
                }

                changingSelection = false;
            }
        }
 private SiteMapNode CreateSiteMapNode(string topic)
 {
     return(new SiteMapNode(this, topic, DocSiteNavigator.GetTopicUrl(topic, true),
                            GetTopicName(topic), topic));
 }
        private void SyncSidebar()
        {
            string topic = null, helpFile = null;

            if (!Page.IsPostBack)
            {
                if (Request.QueryString["filenotfound"] != null)
                {
                    ContentPath = DocSiteNavigator.FileNotFoundPath;
                }
                else
                {
                    topic    = Request.QueryString["topic"];
                    helpFile = Request.QueryString["helpfile"];

                    if (!string.IsNullOrEmpty(topic))
                    {
                        topic = DocSiteNavigator.FormatTopic(topic, false);
                    }
                }
            }
            else
            {
                string topicPath = ContentUrl.Value;

                if (!string.IsNullOrEmpty(topicPath))
                {
                    Uri topicUri;

                    if (Uri.TryCreate(topicPath, UriKind.RelativeOrAbsolute, out topicUri) &&
                        (!topicUri.IsAbsoluteUri || topicUri.Host.Equals(Request.Url.Host, StringComparison.OrdinalIgnoreCase)))
                    {
                        helpFile = topicUri.AbsolutePath;

                        if (helpFile.StartsWith("/") || helpFile.StartsWith(@"\"))
                        {
                            helpFile = helpFile.Substring(1);
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(helpFile))
            {
                helpFile = DocSiteNavigator.ResolveTopicHelpFile(topic, false) ?? DocSiteNavigator.HelpFileNotFoundPath;
            }

            if (string.IsNullOrEmpty(topic))
            {
                topic = DocSiteNavigator.ResolveHelpFileTopic(helpFile, false);

                if (topic == null)
                {
                    helpFile = DocSiteNavigator.HelpFileNotFoundPath;
                }
            }

            ContentPath = helpFile;

            DocSiteSidebar sidebar = ((DocSite)Page.Master).Sidebar;

            if (!sidebar.TableOfContents.SelectedTopic.Equals(topic, StringComparison.Ordinal))
            {
                sidebar.Initialize(topic, helpFile);
            }
        }