Exemplo n.º 1
0
        public async Task <IViewComponentResult> InvokeAsync(Widget widget)
        {
            if (widget == null || !Request.Path.HasValue)
            {
                return(await Task.FromResult <IViewComponentResult>(Content(string.Empty)));
            }

            // slugs
            var slugs = Request.Path.Value.Split('/', StringSplitOptions.RemoveEmptyEntries);

            // if no slugs or first slug is reserved when it's not preview, return empty
            if (slugs.Length <= 0 ||
                (slugs[0].ToLower() != "preview" && Array.IndexOf(PageService.Reserved_Slugs, slugs[0].ToLower()) != -1))
            {
                return(await Task.FromResult <IViewComponentResult>(Content(string.Empty)));
            }

            // page
            Page page;

            if (slugs[0].ToLower() == "preview")
            {
                var composePageId = GetComposeUrlPageId();
                if (composePageId == 0)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content(string.Empty)));
                }

                page = await pageService.GetAsync(composePageId);
            }
            else
            {
                page = await pageService.GetAsync(slugs);
            }

            // visible only parent has children
            if (page.IsParent && !page.HasChildren)
            {
                return(await Task.FromResult <IViewComponentResult>(Content(string.Empty)));
            }

            // nav str
            string navBody;
            int    pageId;

            if (page.IsParent)
            {
                navBody = PageService.NavMdToHtml(page.Nav, page.Slug);
                pageId  = page.Id;
            }
            else
            {
                var parent = await pageService.GetAsync(page.ParentId.Value);

                navBody = PageService.NavMdToHtml(parent.Nav, parent.Slug);
                pageId  = parent.Id;
            }

            // edit link
            var editNavLink = BlogRoutes.GetPageNavEditLink(pageId);

            // wid
            var pageNavigationWidget = (PageNavigationWidget)widget;

            return(View("~/Components/PageNavigation.cshtml",
                        new PageNavigationVM {
                NavBody = navBody,
                NavEditLink = editNavLink,
                WidgetTitle = pageNavigationWidget.Title
            }));
        }