private NavigationMenuItemDrop CreateContentNavigationLink(
            IContentHelper contentHelper,
            AbstractPage page,
            string viewName,
            int level = 0)
        {
            string str = page.CustomUrl;

            if (str.IsBlank())
            {
                str = !(page is ILinkableContent) || DependencyLocator.Current.GetInstance <IContentModeProvider>().CurrentContentMode != ContentMode.Viewing ? DependencyLocator.Current.GetInstance <IUrlProvider>().PrepareUrl("/Content/Item/" + (object)page.ContentKey) : DependencyLocator.Current.GetInstance <IUrlProvider>().PrepareUrl((page as ILinkableContent).Url);
            }
            NavigationMenuItemDrop navigationMenuItemDrop = new NavigationMenuItemDrop();

            navigationMenuItemDrop.Level = level;
            navigationMenuItemDrop.NavigationMenuType = NavigationMenuType.Content;
            navigationMenuItemDrop.Identifier         = page.ContentKey.ToString();
            navigationMenuItemDrop.Title = page.Title;
            navigationMenuItemDrop.Url   = str;
            bool?openInNewTab = page.OpenInNewTab;

            navigationMenuItemDrop.OpenInNewTab = openInNewTab.HasValue && openInNewTab.GetValueOrDefault();
            navigationMenuItemDrop.ViewName     = viewName;
            navigationMenuItemDrop.Children     = (IList <NavigationMenuItemDrop>)contentHelper.GetChildPagesForVariantKey <AbstractPage>(page.VariantKey.Value, true).Where <AbstractPage>((Func <AbstractPage, bool>)(o => !o.ExcludeFromNavigation)).OrderBy <AbstractPage, int>((Func <AbstractPage, int>)(o => o.SortOrder)).Select((Func <AbstractPage, NavigationMenuItemDrop>)(o => this.CreateContentNavigationLink(contentHelper, o, viewName, ++level))).ToList <NavigationMenuItemDrop>();
            return(navigationMenuItemDrop);
        }
        public override void Render(DotLiquid.Context context, TextWriter result)
        {
            NavigationMenuItemDrop navigationMenuItemDrop = (NavigationMenuItemDrop)null;

            if (!this.contextProperty.IsBlank())
            {
                object obj = context[this.contextProperty];
                if (obj is int)
                {
                    this.variantKeyFromMarkup = (int)obj;
                }
                else if (obj is NavigationMenuItemDrop)
                {
                    navigationMenuItemDrop = obj as NavigationMenuItemDrop;
                }
            }
            if (navigationMenuItemDrop == null)
            {
                AbstractPage page = DependencyLocator.Current.GetInstance <IContentHelper>().GetPageByVariantKey(this.variantKeyFromMarkup, false).Page;
                navigationMenuItemDrop = !(page is ICatalogNavigationPage) ? this.CreateContentNavigationLink(DependencyLocator.Current.GetInstance <IContentHelper>(), page, this.viewNameFromMarkup, 0) : this.CreateCatalogNavigationLink(((ICatalogNavigationPage)page).CategoryNavRoot, this.viewNameFromMarkup, 0);
            }
            string str = DependencyLocator.Current.GetInstance <IContentItemTemplateRenderer>().RenderNavigationMenu(navigationMenuItemDrop);

            result.Write(str);
        }
        private NavigationMenuItemDrop CreateCatalogNavigationLink(
            NavLinkDto navLinkDto,
            string viewName,
            int level = 0)
        {
            NavigationMenuItemDrop navigationMenuItemDrop = new NavigationMenuItemDrop();

            navigationMenuItemDrop.Level      = level;
            navigationMenuItemDrop.Identifier = navLinkDto.CategoryId.ToString();
            navigationMenuItemDrop.Title      = navLinkDto.LinkText;
            navigationMenuItemDrop.Url        = navLinkDto.Url;
            IList <NavLinkDto> navLinks = navLinkDto.NavLinks;

            navigationMenuItemDrop.Children           = (navLinks != null ? navLinks.Select <NavLinkDto, NavigationMenuItemDrop>(o => CreateCatalogNavigationLink(o, viewName, ++level)).ToList <NavigationMenuItemDrop>() : null) ?? new List <NavigationMenuItemDrop>();
            navigationMenuItemDrop.ViewName           = viewName;
            navigationMenuItemDrop.NavigationMenuType = NavigationMenuType.Catalog;
            return(navigationMenuItemDrop);
        }