Inheritance: IShape, IEnumerable
Example #1
0
 void Visit(Shape shape) {
     Writer.WriteStartElement("Shape");
     Writer.WriteAttributeString("Type", shape.Metadata.Type);
     foreach (var item in shape.Items) {
         Accept(item);
     }
     Writer.WriteEndElement();
 }
Example #2
0
 private DisplayContext CreateDisplayContext(Shape shape)
 {
     return new DisplayContext
     {
         Value = shape,
         ViewContext = new ViewContext()
     };
 }
Example #3
0
 public object ShapeExecute(Shape shape) {
     // disambiguates the call to ShapeExecute(object) as Shape also implements IEnumerable
     return ShapeExecute((object) shape);
 }
Example #4
0
 public Task<IHtmlContent> ShapeExecuteAsync(Shape shape)
 {
     // disambiguates the call to ShapeExecute(object) as Shape also implements IEnumerable
     return ShapeExecuteAsync((object)shape);
 }
Example #5
0
 public ShapeDebugView(Shape shape) {
     _shape = shape;
 }
Example #6
0
 public Task<IHtmlContent> DisplayAsync(Shape shape)
 {
     return DisplayAsync((object)shape);
 }
Example #7
0
 public IHtmlContent Pager_Gap(Shape Shape, dynamic Display)
 {
     Shape.Metadata.Alternates.Clear();
     Shape.Metadata.Type = "Pager_Link";
     ((dynamic)Shape).Tag.AddCssClass("disabled");
     return Display(Shape);
 }
 public string Display(Shape shape) {
     return Display((object) shape);
 }
Example #9
0
        public IHtmlContent ActionLink(UrlHelper Url, Shape Shape, object Value)
        {
            var RouteValues = (object) ((dynamic)Shape).RouteValues;
            RouteValueDictionary rvd;
            if (RouteValues == null)
            {
                rvd = new RouteValueDictionary();
            }
            else
            {
                rvd = RouteValues as RouteValueDictionary ?? new RouteValueDictionary(RouteValues);
            }

            var action = Url.Action((string)rvd["action"], (string)rvd["controller"], rvd);

            IEnumerable<string> classes = Shape.Classes;
            IDictionary<string, string> attributes = Shape.Attributes;
            attributes["href"] = action;
            string id = Shape.Id;
            var tag = Shape.GetTagBuilder("a", id, classes, attributes);

            tag.InnerHtml.AppendHtml(CoerceHtmlString(Value));
            return tag;
        }
Example #10
0
 public IHtmlContent Pager_Link(IHtmlHelper Html, Shape Shape, dynamic Display, object Value)
 {
     Shape.Metadata.Alternates.Clear();
     Shape.Metadata.Type = "ActionLink";
     return Display(Shape);
 }
Example #11
0
 public IHtmlContent Pager_Last(Shape Shape, dynamic Display)
 {
     Shape.Metadata.Alternates.Clear();
     Shape.Metadata.Type = "Pager_Link";
     return Display(Shape);
 }
Example #12
0
        public IHtmlContent Pager_Links(Shape Shape, dynamic Display, dynamic New,
            IHtmlHelper Html,
            int Page,
            int PageSize,
            double TotalItemCount,
            int? Quantity,
            object FirstText,
            object PreviousText,
            object NextText,
            object LastText,
            object GapText,
            string PagerId
            // parameter omitted to workaround an issue where a NullRef is thrown
            // when an anonymous object is bound to an object shape parameter
            /*object RouteValues*/)
        {

            var currentPage = Page;
            if (currentPage < 1)
                currentPage = 1;

            var pageSize = PageSize;

            var numberOfPagesToShow = Quantity ?? 0;
            if (Quantity == null || Quantity < 0)
                numberOfPagesToShow = 7;

            var totalPageCount = pageSize > 0 ? (int)Math.Ceiling(TotalItemCount / pageSize) : 1;

            var firstText = FirstText ?? T["<<"];
            var previousText = PreviousText ?? T["<"];
            var nextText = NextText ?? T[">"];
            var lastText = LastText ?? T[">>"];
            var gapText = GapText ?? T["..."];

            var routeData = new RouteValueDictionary(Html.ViewContext.RouteData.Values);
            var queryString = _httpContextAccessor.HttpContext.Request.Query;
            if (queryString != null)
            {
                foreach (var key in from string key in queryString.Keys where key != null && !routeData.ContainsKey(key) let value = queryString[key] select key)
                {
                    routeData[key] = queryString[key];
                }
            }

            // specific cross-requests route data can be passed to the shape directly (e.g., Orchard.Users)
            var shapeRoute = (object) ((dynamic)Shape).RouteData;

            if (shapeRoute != null)
            {
                var shapeRouteData = shapeRoute as RouteValueDictionary;
                if (shapeRouteData == null)
                {
                    var route = shapeRoute as RouteData;
                    if (route != null)
                    {
                        shapeRouteData = new RouteValueDictionary(route.Values);
                    }
                }

                if (shapeRouteData != null)
                {
                    foreach (var rd in shapeRouteData)
                    {
                        routeData[rd.Key] = rd.Value;
                    }
                }
            }

            int firstPage = Math.Max(1, Page - (numberOfPagesToShow / 2));
            int lastPage = Math.Min(totalPageCount, Page + (int)(numberOfPagesToShow / 2));

            var pageKey = String.IsNullOrEmpty(PagerId) ? "page" : PagerId;

            Shape.Classes.Add("pager");
            Shape.Metadata.Alternates.Clear();
            Shape.Metadata.Type = "List";

            // first and previous pages
            if (Page > 1)
            {
                if (routeData.ContainsKey(pageKey))
                {
                    routeData.Remove(pageKey); // to keep from having "page=1" in the query string
                }
                // first
                Shape.Add(New.Pager_First(Value: firstText, RouteValues: new RouteValueDictionary(routeData), Pager: Shape));

                // previous
                if (currentPage > 2)
                { // also to keep from having "page=1" in the query string
                    routeData[pageKey] = currentPage - 1;
                }
                Shape.Add(New.Pager_Previous(Value: previousText, RouteValues: new RouteValueDictionary(routeData), Pager: Shape));
            }

            // gap at the beginning of the pager
            if (firstPage > 1 && numberOfPagesToShow > 0)
            {
                Shape.Add(New.Pager_Gap(Value: gapText, Pager: Shape));
            }

            // page numbers
            if (numberOfPagesToShow > 0 && lastPage > 1)
            {
                for (var p = firstPage; p <= lastPage; p++)
                {
                    if (p == currentPage)
                    {
                        Shape.Add(New.Pager_CurrentPage(Value: p, RouteValues: new RouteValueDictionary(routeData), Pager: Shape));
                    }
                    else {
                        if (p == 1)
                            routeData.Remove(pageKey);
                        else
                            routeData[pageKey] = p;
                        Shape.Add(New.Pager_Link(Value: p, RouteValues: new RouteValueDictionary(routeData), Pager: Shape));
                    }
                }
            }

            // gap at the end of the pager
            if (lastPage < totalPageCount && numberOfPagesToShow > 0)
            {
                Shape.Add(New.Pager_Gap(Value: gapText, Pager: Shape));
            }

            // next and last pages
            if (Page < totalPageCount)
            {
                // next
                routeData[pageKey] = Page + 1;
                Shape.Add(New.Pager_Next(Value: nextText, RouteValues: new RouteValueDictionary(routeData), Pager: Shape));
                // last
                routeData[pageKey] = totalPageCount;
                Shape.Add(New.Pager_Last(Value: lastText, RouteValues: new RouteValueDictionary(routeData), Pager: Shape));
            }

            return Display(Shape);
        }
 public object Display(Shape shape) {
     return Display((object)shape);
 }